11

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

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

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 に答える