web-dev-qa-db-ja.com

Rを使用したf統計のp値の計算

私はRでf統計量のp値を計算しようとしています.Rがlm()関数で使用する式は等しい(例えば、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

それはまったく同じです。質問は...ここで何が起こっているのですか?私は何かを見逃しましたか?

11
cjena

コメントにあるように、これは浮動小数点の精度の問題です。実際、あなたが示す両方の例は、評価されたように正確には等しくありません:

> 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

この違いは、はるかに少ない数の出力でのみ明らかになるということです。

3
> all.equal(pf(100, 2, 40, lower.tail=F),1-pf(100, 2, 40))
[1] TRUE
6
George Dontas