11

我正在尝试用 R 计算 f 统计量的 p 值。在 lm() 函数中使用的公式 R 等于(例如假设 x=100,df1=2,df2=40):

pf(100, 2, 40, lower.tail=F)
[1] 2.735111e-16

这应该等于

1-pf(100, 2, 40)
[1] 2.220446e-16

这是不一样的!没有太大的区别,但它来自哪里?如果我计算 (x=5, df1=2, df2=40):

pf(5, 2, 40, lower.tail=F)
[1] 0.01152922

1-pf(5, 2, 40)
[1] 0.01152922

完全一样。问题是……这里发生了什么?我错过了什么吗?

4

2 回答 2

7
> all.equal(pf(100, 2, 40, lower.tail=F),1-pf(100, 2, 40))
[1] TRUE
于 2014-01-29T14:23:01.060 回答
3

正如评论所指出的,这是一个浮点精度问题。实际上,您展示的两个示例都不完全等于评估的:

> pf(5, 2, 40, lower.tail=F) - (1-pf(5, 2, 40))
[1] 6.245005e-17

> pf(100, 2, 40, lower.tail=F) - (1-pf(500, 2, 40))
[1] 2.735111e-16

只是这种差异仅在您的输出中显示为更小的数字。

于 2014-01-29T14:26:01.747 回答