用R计算f统计量的p值

cje*_*ena 11 r distribution p-value

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

pf(100, 2, 40, lower.tail=F)
[1] 2.735111e-16
Run Code Online (Sandbox Code Playgroud)

这应该等于

1-pf(100, 2, 40)
[1] 2.220446e-16
Run Code Online (Sandbox Code Playgroud)

它不一样!没有什么大不同,但它来自哪里?如果我计算(x = 5,df1 = 2,df2 = 40):

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

1-pf(5, 2, 40)
[1] 0.01152922
Run Code Online (Sandbox Code Playgroud)

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

Geo*_*tas 6

> all.equal(pf(100, 2, 40, lower.tail=F),1-pf(100, 2, 40))
[1] TRUE
Run Code Online (Sandbox Code Playgroud)


Aar*_*her 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
Run Code Online (Sandbox Code Playgroud)

只是这种差异仅在较小数字的输出中才明显。