Ces deux méthodes de calcul de la valeur p doivent être équivalentes:
t.test(rats.drug,mu=1.2)$p.value
2*pt((mean(rats.drug)-1.2)*sqrt(n)/sd(rats.drug),df=n-1)
Le problème avec la deuxième méthode est qu'il y a le risque d'obtenir des valeurs supérieures à (en fait jusqu'à ):
2*pt((1.5-1.2)*sqrt(100)/.5,df=100-1)
[1] 2
On peut bien sûr y remédier en
2*pt((1.5-1.2)*sqrt(100)/.5,df=100-1,lower=F)
[1] 3.245916e-08
Ma question
De toute évidence, l'algorithme de la fonction de test t est suffisamment intelligent pour distinguer ces deux cas (que la moyenne de l'échantillon soit plus grande ou plus petite que la moyenne donnée). Existe-t-il une méthode simple pour reproduire manuellement le calcul de la valeur de p tel qu'il est effectué par la fonction t-test?
Ma solution pour le moment est une instruction if qui vérifie si la valeur résultante est supérieure à et, dans ce cas, refait le même calcul avec l'option inférieure = F, mais peut-être y a-t-il une meilleure façon.
getAnywhere(t.test.default)
. Vous y trouverezpval <- 2 * pt(-abs(tstat), df)
.