何时使用模拟?


40

因此,这是一个非常简单而愚蠢的问题。但是,当我在学校的时候,我很少关注课堂上模拟的整个概念,这让我对这一过程有些恐惧。

  1. 您能以外行术语解释模拟过程吗?(可能用于生成数据,回归系数等)

  2. 使用模拟时有哪些实际情况/问题?

我希望在R中给出任何示例。


10
(2)在该站点上已经有超过一千个答案:搜索Simulation
Whuber

@Tim在我的评论中唯一不同意的是,我们的网站有超过一千个包含模拟的答案,但这是一个客观事实,您可以证明自己的真相。我没有明确或隐含地声明这代表任何事物的完整或代表性清单。但是,作为一组实际示例,它比任何一个答案都希望实现的要丰富得多,也要详尽得多,因此对于任何希望进一步研究问题(2)的人来说都是宝贵的资源。
ub

@whuber好的,很好。
蒂姆

Answers:


42

定量模型模拟世界的通过表示由它们的一些数值性质的和(b)对象以产生输出数值也代表感兴趣特性的明确的方式组合这些数字一些行为的(a)。

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

输出显示次迭代中的前5 次,每次迭代列: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

可以说,第二个问题的答案是模拟可以在任何地方使用 实际上,运行模拟的预期成本应小于可能的收益。了解和量化可变性有什么好处?这是很重要的两个主要方面:

  • 寻求真理,就像在科学和法律中一样。数字本身是有用的,但知道该数字的准确性或确定性则要有用得多。

  • 在业务和日常生活中进行决策。决策平衡了风险和收益。风险取决于不良结果的可能性。随机模拟有助于评估这种可能性。

计算系统已经足够强大,可以重复执行逼真的复杂模型。软件已经发展为支持快速轻松地生成和汇总随机值(如第二个R示例所示)。在过去的20年(或更长时间)中,这两个因素结合在一起,使模拟成为常规。剩下的就是帮助人们(1)指定投入的适当分布,以及(2)了解产出的分布。那是人类思想领域,到目前为止,计算机对它们的帮助很小。


1
真是个好答案!我特别喜欢“随机”并不意味着任意。
Haitao Du

29

首先,让我说您的问题没有一个答案。有多个示例说明何时可以(或必须)使用模拟。我将在下面尝试一些示例。其次,请注意,可以使用多种方法来定义“模拟”,因此答案至少部分取决于您选择的定义。

例子:

1.您是贝叶斯统计员,因此模拟是您进行统计的首选方法。贝叶斯统计方法有非基于模拟的方法,但是在大多数情况下,您都使用模拟。要了解更多信息,请参阅Gelman撰写的“贝叶斯数据分析”书(或其他可能的资源)。

2.您要评估统计方法的性能。假设您已经设计了一些统计测试,该测试旨在根据给定的经验数据估算一些参数。现在,您要检查它是否确实可以完成您想要的操作。您可以获取一些数据样本并对该数据进行测试-但是,如果您需要统计测试来知道,那么如何知道仅包含数据的测试是否可以正常工作?当然,您可以将结果与其他统计检验的估计值进行比较,但是如果另一个检验不能正确估算怎么办?在这种情况下,您可以使用模拟。你能做的就是产生θ θ θ θ θTθθθ在给定参数,获取一些假数据,然后检查估计值是否与真实值相同(因为您已经选择了该值,所以需要事先知道)。使用模拟还可以检查不同的情况(样本大小,数据的不同分布,数据中的噪声量等)。θθ

3.您没有数据,或者数据非常有限。假设您想知道核战争的可能结果。不幸的是(希望如此)以前没有核战争,所以您没有任何数据。在这种情况下,您可以使用计算机仿真,在其中对现实做出一些假设,然后让计算机在发生核战争的地方创建并行的虚拟现实,以便获得一些可能的结果样本。

4.您的统计模型不适合该软件或过于复杂。例如,Gelman和Hill在“使用回归和多级/层次模型进行数据分析”中提出了这种方法,他们将基于仿真的贝叶斯估计描述为回归建模中的“下一步”。

5.您想了解复杂过程的可能结果。假设您要预测某个复杂过程的未来结果,但是问题是过程的行为是混乱的,给定不同的输入,您将获得不同的输出,而可能的输入数量却很大。通常,之所以如此,是因为第二次世界大战期间从事核炸弹工作的物理学家和数学家发明了蒙特卡洛模拟方法。通过模拟,您可以尝试不同的输入并收集样本,以便对可能的结果有一个大致的了解。

6.您的数据不符合某些统计方法的标准,例如,数据分布偏斜,但应该是正常的。在某些情况下,这并不是真正的问题,但是有时却是一个问题,因此发明了基于仿真的方法,例如引导程序

7.检验理论模型是否符合现实。您有一个理论模型来描述某些过程,例如通过社交网络传播流行病。您可以使用模型生成一些数据,以便可以比较模拟的结果是否与真实的数据相似。Lada Adamic在她的Coursera课堂上提供了社交网络分析用法的多个示例(请参见此处的一些演示)。

8.生成“假设0”数据。您生成伪造的(随机)数据,以便将实际数据与其进行比较。如果您的数据有任何重大影响或趋势,那么它应该与随机生成的数据有所不同。Buja等人提倡这种方法。(2009年)在他们的论文《探索性数据分析和模型诊断的统计推断》中,他们提出了如何使用绘图来促进探索性数据分析和假设检验(另请参见实现这些思想的nullabor R软件包的文档)。


22

我认为,对TrynnaDoStat答案的讨论很好地说明了这一点:只要问题无法解析地解决(例如,层次模型中参数的后验分布),或者当我们太烦恼而无法投入时间时,我们就会使用模拟分析解决方案。

根据我在该网站上观察到的结果,统计学家之间“烦恼足以模拟”的阈值差异很大。像@whuber这样的人显然可以瞥一眼问题,并立即看到解决方案,而像我这样的凡人将不得不仔细考虑问题,并可能在编写模拟例程之前进行一些阅读以完成艰苦的工作。

请记住,模拟不一定是万能的,因为对于大型数据集或复杂的模型,或者两者兼有,您将花费大量的(计算机)时间来估计和检查模拟。如果一个小时的仔细考虑就能实现相同的目标,当然不值得付出努力。


14

当您无法为某件商品(例如发行版)获得封闭表格,或者您想要一种简洁而又快速的方式来获取某件商品时,通常会进行模拟。

例如,假设我正在使用一个变量逻辑回归解释。我知道从MLE理论来看,的系数分布是渐近正态的。但是,假设我对两个估计概率之差感兴趣。导出此函数的确切分布可能非常困难(或不可能),但是,由于我知道的分布,因此我可以模拟值并将其插入以获得经验分布。ÿ β X ˚F β = P Ý = 1 | X = 1 - P Ý = 1 | X = 0 β β ˚F β XYβXf(β)=P(Y=1|X=1)P(Y=1|X=0)ββf(β)


我不会将模拟称为“快速”,模拟是计算上的穷举性方法,通常比使用ML方法花费更多的时间。
蒂姆

2
这比派生发行版快得多。
TrynnaDoStat

3
您多久不间断地运行ML算法一周以上?
蒂姆

切线正切:“ X的系数β的分布是正态的”-我对此并没有考虑太多,但是经过一些模拟,我发现子样本小于约500和/或平均系数超过一定的强度,例如+/- 3。听起来对吗?
rolando2

MLE理论告诉我们,在某些规律性条件下,MLE是渐近正态的。病加到我的答案。
TrynnaDoStat 2015年

11

模拟是检查您是否可以从模型中获得有用估计的一种极好的方法。

您可以通过生成/模拟遵循模型所隐含分布的伪造数据来做到这一点。然后继续使模型适合该数据。这是一个理想的情况:您的模型实际上是正确的。因此,如果拟合过于嘈杂或不准确,则说明估算程序或模型本身都有问题。

同样,您可以使用“错误的”数据生成过程来模拟数据,并使用该伪造的数据来评估违反模型假设对评估的影响。这通常称为灵敏度分析

这些要点与Tim的答案中的第2项和第8项相似,也是Whuber的答案中该过程的临时版本。


正如安德鲁·盖尔曼(Andrew Gelman)等人所倡导的那样,仿真还用于执行预测模型检查。这相当于将预测变量数据重新插入模型中,然后从隐含分布中模拟伪造的响应数据,以查看模拟数据是否足够接近(按所使用的任何标准)与真实事物。

请注意,这不是一回事只是计算拟合值。例如,在回归模型中,拟合值是条件平均值。要对回归模型进行预测检查,您必须从以每个拟合值为中心的高斯分布中绘制一次。


6

模拟的最简单情况。假设您有一个针对贷款违约数的预测模型,也有一个针对违约贷款损失的模型。现在,您需要预测总损失,该损失是违约与给定违约时的损失之和。您不能简单地将违约数和违约损失相乘以获得总损失的置信区间。

xix1x2

本文对这种用于操作风险估计的用例进行了MBA级别的描述,您可以在其中获得损失频率和损失的分布,并将它们组合起来以获得总损失分布。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.