2013-12-09 82 views
1

我想在R中生成一个scaled-inv-chisquared分布。我知道geoR有一个R函数用于产生这个。但我想用伽马分布来产生这个。 我觉得这两个是等价的:来自缩放逆ch方分布的样本

X ~ rinvchisq(100, df=d, scale=s) 
1/X ~ rgamma(100, shape=d/2, scale=2/(d*s)) 

不是吗?由于极端值,是否会有任何数值问题?

+0

维基百科对此有一个很好的讨论 –

+2

你关心什么样的问题? 1/X中的分母显然没有表现得很差。众所周知,chi^2是gamma的一个特例。 –

回答

3

更具体地说,你需要X <- rinvchisq(...)X <- 1/rgamma(...)(该~符号以这种方式工作的,如WinBUGS软件程序,并在统计符号,而不是在R)。如果你看看geoR::rinvchisq代码,相关的部分只是

return((df * scale)/rchisq(n, df = df)) 

所以如果你有考虑的非常大的或小的卡方偏离倒数问题,你就有麻烦了呢(虽然rchisq是内部使用.External(C_rchisq, n, df),这符合C代码,可能是为了在这种特殊情况下的效率,而不是调用rgamma)。如果我是你,我会继续前进并叠加一些测试样本的密度,以确保我没有搞乱算术或参数化的某个地方...

为什么它的价值也有rinvgamma()函数在各种包裹(library(sos); findFn("rinvgamma")

+0

+1我想知道OP是否打算将'〜'分配为“,bu在这里使用了一些不幸的代码标记。 '1/X'这一行暗示了这一点,因为它也不是有效的BUGS代码。 –