web-dev-qa-db-fra.com

Calcul des valeurs p d'une statistique f avec R

J'essaie de calculer les valeurs de p d'une statistique f avec R. La formule que R utilise dans la fonction lm () est égale à (par exemple, supposons x = 100, df1 = 2, df2 = 40):

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

qui devrait être égal à

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

Ce n'est pas pareil! Il n'y a pas de GRANDE différence, mais d'où vient-elle? Si je calcule (x = 5, df1 = 2, df2 = 40):

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

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

c'est exactement le meme. La question est ... que se passe-t-il ici? Ai-je raté quelque chose?

11
cjena

Comme le notent les commentaires, il s'agit d'un problème de précision en virgule flottante. En fait, les deux exemples que vous montrez ne sont pas exactement égaux tels qu'évalués:

> 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

C'est juste que cette différence n'apparaît que dans votre sortie pour le nombre beaucoup plus petit.

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