Calcul manuel de la valeur de p pour le test t: comment éviter des valeurs supérieures à

8

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'à ):12

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.1

vonjd
la source
8
Regardez le code: getAnywhere(t.test.default). Vous y trouverez pval <- 2 * pt(-abs(tstat), df).
Roland

Réponses:

7

Vous pouvez utiliser absdans le numérateur (donc c'est toujours> 0) et garder le lower.tail=FALSE.

Glen_b -Reinstate Monica
la source
0

Glen_b a tout à fait raison sur le abs, cependant, j'ai trouvé que dans certains ensembles de données, les valeurs devraient -absavoir 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.

  t.value <- betacoeff/standard error of the beta coefficients
  p.value <- 2 * pt(-abs(t.value), df = nrow(data)-2)

Réponse élargie à la demande de mdewey.

S Tomo
la source
1
Pouvez-vous expliquer comment vous pensez que cela ajoute au commentaire et à la réponse qui existent déjà?
mdewey