Simulation

何時使用模擬?

  • January 30, 2015

所以這是一個非常簡單和基本的問題。然而,當我在學校的時候,我很少注意課堂上模擬的整個概念,這讓我對這個過程有點害怕。

  1. 你能用外行的方式解釋模擬過程嗎?(可用於生成數據、回歸係數等)
  2. 使用模擬時有哪些實際情況/問題?

我希望給出的任何示例都在 R 中。

定量模型通過以下方式模擬世界的某些行為:(a) 通過對象的一些數值屬性來表示對象,以及 (b) 以明確的方式組合這些數字以產生也表示感興趣的屬性的數值輸出。

圖 1:確定性模型

在這個示意圖中,左邊的三個數字輸入組合在一起,在右邊產生一個數字輸出。數字線表示輸入和輸出的可能值;點表示使用中的特定值。如今,數字計算機通常執行計算,但它們不是必需的:模型是用鉛筆和紙計算的,或者是通過在木材、金屬和電子電路中構建“模擬”設備來計算的。

例如,也許前面的模型將其三個輸入相加。 R這個模型的代碼可能看起來像

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

它的輸出只是一個數字,

-0.1

**我們無法完美地了解這個世界:**即使模型恰好按照世界的方式運作,我們的信息也不完美,世界上的事物也會發生變化。(隨機)模擬幫助我們理解模型輸入的這種不確定性和變化應該如何轉化為輸出的不確定性和變化。他們通過隨機改變輸入、為每個變化運行模型並總結集體輸出來做到這一點。

“隨機”並不意味著任意。 建模者必須指定(無論是否有意,無論是顯式還是隱式)所有輸入的預期頻率。輸出頻率提供了最詳細的結果摘要。

圖:隨機輸入

相同的模型,顯示為隨機輸入和生成的(計算的)隨機輸出。

該圖使用直方圖顯示頻率,以表示數字的分佈。左側顯示了輸入的預期輸入頻率,而右側顯示了通過多次運行模型獲得的計算輸出頻率。

確定性模型的每組輸入都會產生可預測的數字輸出。然而,當模型用於隨機模擬時,輸出是一個分佈(如右圖所示的長灰色)。輸出分佈的分佈告訴我們,當輸入變化時,模型輸出如何變化。

前面的代碼示例可以像這樣修改以將其轉換為模擬:

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")

其輸出已匯總為通過使用這些隨機輸入迭代模型生成的所有數字的直方圖:

直方圖

在幕後觀察,我們可能會檢查傳遞給此模型的許多隨機輸入中的一些:

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

輸出顯示前五個迭代,每次迭代一列:

       [,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


可以說,第二個問題的答案是模擬可以在任何地方使用。 實際上,運行模擬的預期成本應該低於可能的收益。理解和量化可變性有什麼好處?這有兩個主要領域很重要:

  • 尋求真理,如科學和法律。一個數字本身是有用的,但了解這個數字的準確性或確定性要有用得多。
  • **做決定,**就像在商業和日常生活中一樣。決策平衡風險和收益。風險取決於不良結果的可能性。隨機模擬有助於評估這種可能性。

計算系統已經變得足夠強大,可以重複執行現實的、複雜的模型。軟件已經發展到支持快速輕鬆地生成和匯總隨機值(如第二個R示例所示)。這兩個因素在過去 20 年(甚至更長時間)結合在一起,以至於模擬成為常規。剩下的就是幫助人們 (1) 指定適當的輸入分佈和 (2) 理解輸出的分佈。那是人類思想的領域,到目前為止,計算機對此幾乎沒有幫助。

引用自:https://stats.stackexchange.com/questions/135665

comments powered by Disqus

相關問答