3

如果这不是发布此问题的正确位置,我深表歉意,它与 R 中统计数据计算的数值稳定性有关。

我正在尝试计算非常高的 df2 值的 F 值,但它看起来在数值上不稳定:

nrange <- 350000:450000
f <- qf(1e-8, 8, nrange, lower.tail=FALSE)
plot(f ~ nrange)

看起来像这样:F 值图

基本上在附近df2=400000它不再准确。问题是 - 有人知道我如何解决这个问题吗?例如,F 分布可以近似为两个卡方(例如http://en.wikipedia.org/wiki/F-distribution#Related_distributions_and_properties),并且在它的文档中qf说明了有关使用qchisq大 d2 的内容。实际上qchisq在这些值上看起来确实是准确的,但对我来说如何实现这一点并不明显。例如

qf(0.05, 8, 100, lower.tail=FALSE)

(qchisq(0.05, 8, lower.tail=FALSE)/8) / (qchisq(0.05, 100, lower.tail=FALSE)/100)

不要给出相同的结果。

那么,问题是如何获得大 df2 的准确 F 值?任何帮助将不胜感激。谢谢!

4

1 回答 1

2

关于开源项目的一件有用的事情是它们是开源的

fortune(250)

As Obi-Wan Kenobi may have said in Star Wars: "Use the source, Luke!"
   -- Barry Rowlingson (answering a question on the documentation of some implementation details)
      R-devel (January 2010)

如果您查看源代码qf

https://svn.r-project.org/R/trunk/src/nmath/qf.c

特别是这一点

/* fudge the extreme DF cases -- qbeta doesn't do this well.
   But we still need to fudge the infinite ones.
 */

if (df1 <= df2 && df2 > 4e5) {
if(!R_FINITE(df1)) /* df1 == df2 == Inf : */
    return 1.;
/* else */
return qchisq(p, df1, lower_tail, log_p) / df1;
}

您会看到它们在伪造高于 4e5 的值。df2(通过假设与 df2 == Inf 时相同的结果而完全忽略)

于 2013-02-27T05:19:31.817 回答