我试图根据以下算法生成卡方随机变量:
其中a(i)是独立的标准正态随机变量,偶数和奇数 分别
维基百科给出以下定义:
我写的代码是:
dch = double(1000)
t = double(1)
for(i in 1:1000) {
for(j in 1:m) {
x = runif(1, 0, 1)
t = t + x*x
}
dch[i] = t
}
但是我得到了错误的密度图。 那么,错误/是在哪里?我该如何修复它们?
答案 0 :(得分:2)
正如Gregor在评论中建议的那样,你错误地解释了算法的输入。获得具有m个自由度的卡方的一种方法是求和m个独立的平方标准法则,但这不是我们所知的唯一分布关系。事实证明,卡方(2)与指数分布相同,均值为2,并且使用inverse transform sampling,a.k.a。反演生成指数是直截了当的。所以原则上,如果m是偶数,你想要生成m / 2指数(2)&并且将它们相加。如果m是奇数,则执行相同的操作,但添加一个额外的标准法线平方。
所有这一切意味着直接的实现会让您进行m / 2对数评估以生成指数。事实证明,您可以应用exponentials的superposition属性,因此您只需要进行一次日志评估。由于超越函数在计算上很昂贵,因此提高了算法的效率。
当尘埃落定时 - 算法第二行的z
是标准法线,但a
是统一(0,1)' s , 不 正常。