Khi nào sử dụng mô phỏng?


40

Vì vậy, đây là một câu hỏi rất đơn giản và ngu ngốc. Tuy nhiên, khi còn đi học, tôi rất ít chú ý đến toàn bộ khái niệm mô phỏng trong lớp và điều đó khiến tôi hơi kinh hãi về quá trình đó.

  1. Bạn có thể giải thích quá trình mô phỏng theo thuật ngữ giáo dân? (có thể để tạo dữ liệu, hệ số hồi quy, v.v.)

  2. Một số tình huống / vấn đề thực tế khi một người sẽ sử dụng mô phỏng là gì?

Tôi thích bất kỳ ví dụ nào được đưa ra trong R.


10
(2) đã có hơn một nghìn câu trả lời trên trang web này: tìm kiếm mô phỏng .
whuber

@Tim Điều duy nhất không đồng ý trong nhận xét của tôi là trang web của chúng tôi có hơn một nghìn câu trả lời có chứa mô phỏng, nhưng đó là một sự thật khách quan mà bạn có thể tự kiểm chứng sự thật. Tôi đã không đưa ra yêu cầu, rõ ràng hoặc ngầm định, rằng điều này đại diện cho một danh sách đầy đủ hoặc đại diện của bất cứ điều gì. Tuy nhiên, như một tập hợp các ví dụ thực tế, nó phong phú và chi tiết hơn nhiều so với bất kỳ câu trả lời cá nhân nào có thể hy vọng đạt được và đó là một nguồn tài nguyên quý giá cho bất kỳ ai muốn theo đuổi câu hỏi (2) hơn nữa.
whuber

@whuber ok, điểm tốt.
Tim

Câu trả lời:


42

Một mô hình định lượng mô phỏng một số hành vi của thế giới bằng cách (a) đại diện cho các đối tượng bằng một số tính chất số của chúng và (b) kết hợp các số đó theo một cách xác định để tạo ra các kết quả số cũng đại diện cho các thuộc tính quan tâm.

Hình 1: một mô hình xác định

Trong sơ đồ này, ba đầu vào số ở bên trái được kết hợp để tạo ra một đầu ra số ở bên phải. Các dòng số cho biết các giá trị có thể có của đầu vào và đầu ra; các dấu chấm cho thấy giá trị cụ thể được sử dụng. Ngày nay, máy tính kỹ thuật số thường thực hiện các phép tính, nhưng chúng không cần thiết: các mô hình đã được tính toán bằng giấy bút chì hoặc bằng cách chế tạo các thiết bị "tương tự" trong các mạch gỗ, kim loại và điện tử.

Ví dụ, có lẽ mô hình trước tổng hợp ba đầu vào của nó. Rmã cho mô hình này có thể trông giống như

inputs <- c(-1.3, 1.2, 0) # Specify inputs (three numbers)
output <- sum(inputs)     # Run the model
print(output)             # Display the output (a number)

Đầu ra của nó chỉ đơn giản là một con số,

-0,1

Chúng ta không thể biết thế giới một cách hoàn hảo: ngay cả khi mô hình xảy ra hoạt động chính xác theo cách của thế giới, thông tin của chúng ta không hoàn hảo và mọi thứ trên thế giới khác nhau. Mô phỏng (Stochastic) giúp chúng ta hiểu làm thế nào sự không chắc chắn và biến đổi như vậy trong các đầu vào mô hình phải chuyển thành độ không đảm bảo và biến đổi trong đầu ra. Họ làm như vậy bằng cách thay đổi ngẫu nhiên các đầu vào, chạy mô hình cho từng biến thể và tóm tắt đầu ra tập thể.

"Ngẫu nhiên" không có nghĩa là tùy tiện. Nhà mô hình hóa phải chỉ định (dù cố ý hay không, dù rõ ràng hay ngầm) tần số dự định của tất cả các đầu vào. Các tần số của đầu ra cung cấp bản tóm tắt chi tiết nhất về kết quả.

Hình: Đầu vào ngẫu nhiên

Mô hình tương tự, được hiển thị với đầu vào ngẫu nhiên và đầu ra ngẫu nhiên (được tính toán).

Hình hiển thị tần số với biểu đồ để biểu thị phân phối số. Các dự định tần số đầu vào được hiển thị cho các đầu vào ở bên trái, trong khi tính toán tần số đầu ra, thu được bằng cách chạy mô hình nhiều lần, được hiển thị ở bên phải.

Mỗi bộ đầu vào cho một mô hình xác định sẽ tạo ra một đầu ra số có thể dự đoán được. Tuy nhiên, khi mô hình được sử dụng trong một mô phỏng ngẫu nhiên, đầu ra là một phân phối (chẳng hạn như mô hình màu xám dài hiển thị ở bên phải). Sự phân tán của phân phối đầu ra cho chúng ta biết các đầu ra mô hình có thể được dự kiến ​​sẽ thay đổi như thế nào khi các đầu vào của nó thay đổi.

Ví dụ mã trước có thể được sửa đổi như thế này để biến nó thành một mô phỏng:

n <- 1e5 # Number of iterations
inputs <- rbind(rgamma(n, 3, 3) - 2,
                runif(n, -2, 2),
                rnorm(n, 0, 1/2))
output <- apply(inputs, 2, sum)
hist(output, freq=FALSE, col="Gray")

Đầu ra của nó đã được tóm tắt bằng một biểu đồ gồm tất cả các số được tạo bằng cách lặp lại mô hình với các đầu vào ngẫu nhiên này:

Biểu đồ

Nhìn vào hậu trường, chúng tôi có thể kiểm tra một số trong nhiều đầu vào ngẫu nhiên được truyền cho mô hình này:

rownames(inputs) <- c("First", "Second", "Third")
print(inputs[, 1:5], digits=2)

Đầu ra cho thấy năm trong số lần lặp đầu tiên , với một cột cho mỗi lần lặp:100,000

        [,1]  [,2]  [,3]  [,4]  [,5]
First  -1.62 -0.72 -1.11 -1.57 -1.25
Second  0.52  0.67  0.92  1.54  0.24
Third  -0.39  1.45  0.74 -0.48  0.33

Có thể cho rằng, câu trả lời cho câu hỏi thứ hai là mô phỏng có thể được sử dụng ở mọi nơi. Là một vấn đề thực tế, chi phí dự kiến ​​để chạy mô phỏng nên thấp hơn lợi ích có thể có. Những lợi ích của sự hiểu biết và định lượng sự biến đổi là gì? Có hai lĩnh vực chính mà điều này rất quan trọng:

  • Tìm kiếm sự thật , như trong khoa học và pháp luật. Một số tự nó là hữu ích, nhưng nó hữu ích hơn nhiều để biết chính xác hoặc chắc chắn số đó là như thế nào.

  • Ra quyết định, như trong kinh doanh và cuộc sống hàng ngày. Quyết định cân bằng rủi ro và lợi ích. Rủi ro phụ thuộc vào khả năng kết quả xấu. Mô phỏng ngẫu nhiên giúp đánh giá khả năng đó.

Các hệ thống máy tính đã trở nên đủ mạnh để thực hiện các mô hình thực tế, phức tạp nhiều lần. Phần mềm đã phát triển để hỗ trợ tạo và tóm tắt các giá trị ngẫu nhiên một cách nhanh chóng và dễ dàng (như Rví dụ thứ hai cho thấy). Hai yếu tố này đã kết hợp trong 20 năm qua (và hơn thế nữa) đến mức mô phỏng là thông lệ. Những gì còn lại là giúp mọi người (1) chỉ định phân phối đầu vào phù hợp và (2) hiểu phân phối đầu ra. Đó là lĩnh vực tư tưởng của con người, nơi mà máy tính cho đến nay vẫn ít giúp đỡ.


1
Thật là một câu trả lời tuyệt vời!. Tôi đặc biệt thích "" Ngẫu nhiên "không có nghĩa là tùy tiện."
Haitao Du

29

Đầu tiên, hãy để tôi nói rằng không có câu trả lời duy nhất cho câu hỏi của bạn. Có nhiều ví dụ về thời điểm bạn có thể (hoặc phải) sử dụng mô phỏng. Tôi sẽ cố gắng cung cấp cho bạn một vài ví dụ dưới đây. Thứ hai, lưu ý rằng có nhiều cách bạn có thể định nghĩa một "mô phỏng" , vì vậy câu trả lời ít nhất một phần phụ thuộc vào định nghĩa bạn chọn.

Ví dụ:

1. Bạn là một nhà thống kê Bayes , vì vậy mô phỏng là phương pháp bạn chọn để làm thống kê. Có những cách tiếp cận không dựa trên mô phỏng để thống kê Bayes, tuy nhiên trong phần lớn các trường hợp bạn sử dụng mô phỏng. Để tìm hiểu thêm, hãy kiểm tra cuốn sách "phân tích dữ liệu Bayes" của Gelman (hoặc các tài nguyên có thể khác ).

2. Bạn muốn đánh giá hiệu suất của phương pháp thống kê. Giả sử bạn đã thiết kế một số kiểm tra thống kê được thiết kế để ước tính một số tham số cho dữ liệu thực nghiệm. Bây giờ bạn muốn kiểm tra nếu nó thực sự làm những gì bạn muốn nó làm. Bạn có thể lấy một số mẫu dữ liệu và sử dụng thử nghiệm của mình trên dữ liệu này - tuy nhiên nếu bạn cần kiểm tra thống kê để biết , thì làm sao bạn biết thử nghiệm của mình có hoạt động tốt khi chỉ có dữ liệu không ..? Tất nhiên bạn có thể so sánh kết quả với ước tính của kiểm tra thống kê khác, nhưng nếu thử nghiệm khác không ước tính chính xác .. thì sao? Trong trường hợp này bạn có thể sử dụng mô phỏng. Những gì bạn có thể làm là bạn tạo raq q q q qTθθθmột số dữ liệu giả mạo đưa ra tham số của bạn và sau đó kiểm tra xem giá trị ước tính của bạn có giống với giá trị thực của (mà bạn biết trước vì bạn đã chọn nó). Sử dụng mô phỏng cho phép bạn cũng kiểm tra các kịch bản khác nhau (cỡ mẫu, phân phối dữ liệu khác nhau, lượng nhiễu khác nhau trong dữ liệu của bạn, v.v.).θθ

3. Bạn không có dữ liệu hoặc nó rất hạn chế. Nói rằng bạn muốn biết điều gì sẽ là kết quả có thể xảy ra của chiến tranh hạt nhân. Thật không may (hy vọng) không có chiến tranh hạt nhân trước đây, vì vậy bạn không có bất kỳ dữ liệu nào. Trong trường hợp này, bạn có thể sử dụng mô phỏng máy tính nơi bạn đưa ra một số giả định về thực tế và sau đó cho phép máy tính tạo ra thực tế ảo song song trong đó xảy ra chiến tranh hạt nhân, do đó bạn có một số mẫu kết quả có thể xảy ra .

4. Mô hình thống kê của bạn không phù hợp với phần mềm hoặc phức tạp. Cách tiếp cận này được Gelman và Hill ủng hộ, ví dụ, trong "Phân tích dữ liệu sử dụng mô hình hồi quy và đa cấp / phân cấp" , trong đó họ mô tả ước lượng Bayes dựa trên mô phỏng là "bước tiếp theo" trong mô hình hồi quy.

5. Bạn muốn tìm hiểu về kết quả có thể của một quá trình phức tạp. Hãy tưởng tượng rằng bạn muốn dự báo kết quả trong tương lai của một số quy trình phức tạp, tuy nhiên vấn đề là hành vi của quy trình của bạn hỗn loạn và đưa ra các đầu vào khác nhau mà bạn nhận được các đầu ra khác nhau, trong khi số lượng đầu vào có thể rất lớn. Nói chung, đây là trường hợp bởi vì phương pháp mô phỏng Monte Carlo được phát minh bởi các nhà vật lý và toán học làm việc trên bom hạt nhân trong Thế chiến II. Với mô phỏng, bạn thử các đầu vào khác nhau và thu thập các mẫu để có được ý tưởng chung về các kết quả có thể xảy ra.

6. Dữ liệu của bạn không đáp ứng các tiêu chí cho một số phương pháp thống kê , ví dụ: nó có sai lệch phân phối trong khi nó phải bình thường. Trong một số trường hợp, đây không thực sự là một vấn đề , tuy nhiên đôi khi nó là như vậy, vì vậy các phương pháp dựa trên mô phỏng như bootstrap đã được phát minh.

7. Để kiểm tra một mô hình lý thuyết chống lại thực tế. Bạn có một mô hình lý thuyết hơn là mô tả một số quy trình, ví dụ như lây lan dịch bệnh qua mạng xã hội. Bạn có thể sử dụng mô hình để tạo một số dữ liệu để bạn có thể so sánh nếu mô phỏng giống với dữ liệu thực. Lada Adamic đưa ra nhiều ví dụ về cách sử dụng như vậy cho Phân tích mạng xã hội trên lớp Coursera của cô ấy (xem một số bản demo ở đây ).

8. Để tạo dữ liệu "giả thuyết 0". Bạn tạo dữ liệu giả (ngẫu nhiên) để so sánh dữ liệu thực với dữ liệu đó. Nếu có bất kỳ ảnh hưởng hoặc xu hướng đáng kể nào trong dữ liệu của bạn thì nó sẽ khác với dữ liệu được tạo ngẫu nhiên. Cách tiếp cận này được ủng hộ bởi Buja et al. (2009) trong bài báo "Suy luận thống kê về phân tích dữ liệu khám phá và chẩn đoán mô hình" trong đó họ đề xuất cách sử dụng các lô có thể tạo điều kiện cho phân tích dữ liệu khám phá và kiểm tra giả thuyết (xem thêm tài liệu về gói nullabor R thực hiện các ý tưởng đó).


22

Tôi nghĩ rằng cuộc thảo luận về câu trả lời của TrynnaDoStat minh họa rất rõ vấn đề: chúng tôi sử dụng mô phỏng bất cứ khi nào vấn đề không thể giải quyết một cách phân tích (ví dụ: phân phối sau của các tham số trong mô hình phân cấp) hoặc khi chúng tôi quá khó chịu để đặt thời gian vào làm việc ra giải pháp phân tích.

Dựa trên những gì tôi đã quan sát trên trang web này, ngưỡng "đủ khó chịu để mô phỏng" rất khác nhau giữa các nhà thống kê. Rõ ràng, những người như @whuber có thể liếc nhìn một vấn đề và ngay lập tức nhìn thấy giải pháp trong khi những người bình thường như tôi sẽ phải xem xét cẩn thận vấn đề và có thể đọc một số trước khi viết một thói quen mô phỏng để thực hiện công việc khó khăn.

Hãy nhớ rằng mô phỏng không nhất thiết phải là thuốc chữa bách bệnh vì với các tập dữ liệu lớn hoặc các mô hình phức tạp hoặc cả hai bạn sẽ dành thời gian khổng lồ để ước tính và kiểm tra mô phỏng của mình. Nó chắc chắn không đáng nỗ lực nếu bạn có thể hoàn thành cùng một mục tiêu với một giờ cân nhắc cẩn thận.


14

Mô phỏng thường được thực hiện khi bạn không thể có được một hình thức đóng cho một cái gì đó (chẳng hạn như phân phối) hoặc bạn muốn một cách nhanh chóng và nhanh chóng để có được một cái gì đó.

XYβXf(β)=P(Y=1|X=1)P(Y=1|X=0)ββf(β)


Tôi sẽ không gọi mô phỏng là "nhanh", đó là những phương pháp tính toán toàn diện và thường mất nhiều thời gian hơn sau đó được thực hiện bằng cách sử dụng phương pháp ML.
Tim

2
Đó là một địa ngục nhanh hơn rất nhiều so với việc phân phối.
TrynnaDoStat

3
Tần suất bạn chạy thuật toán ML trong hơn một tuần không ngừng ..?
Tim

Tiếp tuyến lại: "phân phối hệ số β cho X là bình thường" - Tôi đã không nghĩ nhiều về điều này, nhưng sau một số mô phỏng, tôi thấy điều đó thường không đúng với các mẫu con nhỏ hơn khoảng 500 và / hoặc với các hệ số có trung bình vượt quá một sức mạnh nhất định, giả sử, +/- 3. Âm thanh phải không?
rolando2

Lý thuyết MLE cho chúng ta biết rằng, trong những điều kiện đều đặn nhất định, MLE là bình thường không có triệu chứng. Ill thêm điều này vào câu trả lời của tôi.
TrynnaDoStat

11

Mô phỏng là một cách tuyệt vời để kiểm tra xem bạn có thể có được các ước tính hữu ích từ một mô hình hay không.

Bạn sẽ làm điều này bằng cách tạo / mô phỏng dữ liệu giả theo phân phối được ngụ ý bởi mô hình của bạn. Sau đó hãy tiếp tục và phù hợp với mô hình của bạn với dữ liệu đó. Đây là một trường hợp lý tưởng: trên thực tế, mô hình của bạn là đúng. Vì vậy, nếu sự phù hợp là ồn ào hoặc không chính xác, thì bạn biết có vấn đề với thủ tục ước tính hoặc chính mô hình.

Tương tự, bạn có thể mô phỏng dữ liệu bằng cách sử dụng quy trình tạo dữ liệu "sai" và sử dụng dữ liệu giả mạo đó để đánh giá ước tính của bạn bị ảnh hưởng như thế nào khi vi phạm các giả định mô hình. Điều này thường được gọi là phân tích độ nhạy .

Những điểm này tương tự như mục 2 và 8 trong câu trả lời của Tim, và cũng là một phiên bản hơi đặc biệt hơn của quy trình trong câu trả lời của người làm trắng.


Mô phỏng cũng được sử dụng để thực hiện kiểm tra mô hình dự đoán như được ủng hộ bởi Andrew Gelman và những người khác. Số tiền này để cắm dữ liệu dự đoán của bạn trở lại mô hình và sau đó mô phỏng dữ liệu phản hồi giả từ phân phối ngụ ý, để xem liệu dữ liệu mô phỏng của bạn có đủ gần (theo bất kỳ tiêu chí nào bạn đang sử dụng) với thực tế hay không.

Lưu ý rằng đây không giống như chỉ tính toán các giá trị được trang bị. Ví dụ, trong mô hình hồi quy, các giá trị được trang bị là các giá trị trung bình có điều kiện; để chạy kiểm tra dự đoán trên mô hình hồi quy, bạn sẽ phải rút một lần từ phân phối Gaussian tập trung tại mỗi giá trị được trang bị.


6

Trường hợp đơn giản nhất cho mô phỏng. Giả sử bạn có một mô hình dự báo về số lượng mặc định cho vay, bạn cũng có một mô hình cho các khoản lỗ đối với các khoản vay mặc định. Bây giờ bạn cần dự báo tổng thiệt hại mà sản phẩm mặc định và tổn thất được mặc định. Bạn không thể chỉ cần nhân các mặc định và tổn thất trên các mặc định để có được khoảng tin cậy của tổng tổn thất.

xix1x2

Bài viết này có mô tả cấp độ MBA về trường hợp sử dụng này để ước tính rủi ro hoạt động, trong đó bạn có các phân phối tần suất và số tiền tổn thất, và kết hợp chúng để có được tổng phân phối tổn thất.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.