我想在R中生成sa scaled-inv-chisquared分布。我知道geoR
有一个R函数用于生成它。但我想使用伽玛分布来生成这个。
我认为这两个是等价的:
X ~ rinvchisq(100, df=d, scale=s)
1/X ~ rgamma(100, shape=d/2, scale=2/(d*s))
不是吗?由于极端值,是否会出现任何数值问题?
答案 0 :(得分: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")
)