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)
.Réponses:
Vous pouvez utiliser
abs
dans le numérateur (donc c'est toujours> 0) et garder lelower.tail=FALSE
.la source
Glen_b a tout à fait raison sur le
abs
, cependant, j'ai trouvé que dans certains ensembles de données, les valeurs devraient-abs
avoir l'effet souhaité. Je ne suis pas en mesure d'expliquer pourquoi, mais je vais laisser cette ligne de code ici, au cas où toute personne ayant un problème similaire trouverait ce fil.Réponse élargie à la demande de mdewey.
la source