我想在 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))
不是吗?由于极端值,会出现任何数值问题吗?
我想在 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))
不是吗?由于极端值,会出现任何数值问题吗?
更具体地说,您需要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")
)