使用蒙特卡洛的控制变量和对立方法

机器算法验证 自习 模拟 蒙特卡洛 期望值
2022-04-18 22:48:12

假设的期望值,使用蒙特卡罗方法,通过从 Weibull 分布参数g(x)=x3E(x3)xi(1,5)

之后,我想使用控制变量方法对立方法来减少我的估计器的方差,这是我用简单的蒙特卡洛发现的。这是我的问题,我不知道这些方法该怎么做。

如果有人可以帮助我这样做或提供任何提示/帮助,我将不胜感激。非常感谢您的关注,提前。

到目前为止我做了什么

假设是我们的估计量,那么我们知道SS=(i=1Ng(xi))/N

使用 Matlab,我通过从分布中生成 1000 个随机数并计算总和来找到期望值这是我的算法:Sweibull(1,5)

N=1000
sum=0;
for i=1:N;
  X = wblrnd(1,5);  
  res(i)=X.^(1/3); 
  sum=sum+res(i);
end
S=sum/N
2个回答

没有一种方法可以实现控制变量或对立变量,但是,一些示例可能会有所帮助。

对立变量:想象一下,您生成的不是您实际使用的随机数生成器,而是一个变量,称为,并通过 Weibull(1,5) 分布的逆 CDF 运行它,从而生成 Weibull (1,5) 变量。 对于下一个随机数,使用而不是生成新的对于后续的随机数,交替生成一个新的并使用这有助于“平衡”随机数流中的高值和低值,从而减少最终估计的可变性。U(0,1)u1uuu1u

控制变量:这些是与结果相关的“额外”变量,使您能够针对控制变量对结果进行回归,以获得更准确的估计。例如,在您的情况下,您知道 Weibull dist'n (5) 的真实均值,因此您可以使用作为控制变量。您将计算改进的估计值:xi

S=Scov^(x,res)var^(x)(x¯5)

其中协方差和方差项是根据数据估计的。这有助于纠正对随机数流的估计,这些随机数流在某些相关方面并不完全代表基础分布。

两种方法,尤其是。控制变量,比这两个例子可能让你相信的更普遍。维基百科链接充其量只是粗略的介绍;如果您想更深入地研究,有大量涵盖这两种技术的书籍和论文。

正如jbowman正确解释的那样,您必须在模拟之间创建负相关以实现对立变量:使用通用wblrnd函数这是不可能的。因此,您必须回到 Weibull 的定义W(λ,k),这是一个尺度变换k指数变量的 th 次方,即

XW(λ,k)
相当于
(X/λ)kE(1)
这可以在模拟方面改写为
X=λ(logU)1/k,UU(0,1).
因此,您可以通过使用制服样本来实现对立的方法,U1,,Un及其完善的1U1,,1Un并比较估计量的方差E[X1/3]对应的估计量基于U1,,U2n. 为了展示改进,您必须运行蒙特卡洛实验,在许多大小样本上重复计算这些方差n. (您无法在单次运行中看到对立模拟的影响。)

在您的情况下,控制变量是通过选择 Weibull 的已知时刻来实现的,例如jbowman所建议的,

E[X]=λΓ(1+1/k)
并使用X作为控制变量。这意味着您计算模拟的平均值Xi的平均值Xi1/3和之间的经验协方差Xi的和Xi1/3以及经验方差Xi的使用jbowman公式。同样,检查控制变量带来的改进需要进行多次运行的蒙特卡罗实验。