1

我想在 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))

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

4

1 回答 1

3

更具体地说,您需要X <- rinvchisq(...)and 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"))

于 2013-12-09T22:02:24.823 回答