Calculer manuellement la valeur P à partir de la valeur t dans le test t


49

J'ai un échantillon de données avec 31 valeurs. J'ai exécuté un test t bilatéral en utilisant R pour vérifier si la moyenne vraie est égale à 10:

t.test(x=data, mu=10, conf.level=0.95)

Sortie:

t = 11.244, df = 30, p-value = 2.786e-12
alternative hypothesis: true mean is not equal to 10 
95 percent confidence interval:
 19.18980 23.26907 
sample estimates:
mean of x 
 21.22944 

Maintenant, j'essaie de faire la même chose manuellement:

t.value = (mean(data) - 10) / (sd(data) / sqrt(length(data))) 
p.value = dt(t.value, df=length(lengths-1))

La valeur t calculée à l'aide de cette méthode est identique à celle fournie par la fonction R du test t. La valeur p, cependant, s’avère être 3.025803e-12.

Des idées que je fais mal?

Merci!

MODIFIER

Voici le code complet de R, y compris mon jeu de données:

# Raw dataset -- 32 observations
data = c(21.75, 18.0875, 18.75, 23.5, 14.125, 16.75, 11.125, 11.125, 14.875, 15.5, 20.875,
            17.125, 19.075, 25.125, 27.75, 29.825, 17.825, 28.375, 22.625, 28.75, 27, 12.825, 
            26, 32.825, 25.375, 24.825, 25.825, 15.625, 26.825, 24.625, 26.625, 19.625)

# Student t-Test
t.test(x=data, mu=10, conf.level=0.95)

# Manually calculate p-value
t.value = (mean(data) - 10) / (sd(data) / sqrt(length(data)))
p.value = dt(t.value, df=length(data) - 1)

Réponses:


43

Utilisez-le ptet faites-le à deux queues.

> 2*pt(11.244, 30, lower=FALSE)
[1] 2.785806e-12

1
Je pense qu'il manque un détail: quand utiliser lower = F? - S'il vous plaît voir ma question ici: stats.stackexchange.com/questions/133091/…
vonjd

3
La valeur doit être positive, donc si vous utilisez ceci avec une variable qui pourrait être négative, encapsulez abs.
Aaron - Réintégrer Monica le

3
Pour un test bilatéral, vous recherchez la probabilité que la valeur soit inférieure à -11,244 ou supérieure à +11,244. lower = F demande à R de calculer la probabilité que la valeur soit supérieure au premier paramètre. Sinon, cela vous donne la probabilité que la valeur soit inférieure au premier paramètre. En tant que tel, vous pouvez également faire 2 * pt (-11.244, 30). Personnellement, je fais habituellement 2 * pt (-abs (q), df = n-1), R étant par défaut inférieur = T.
Ashic

9

J'ai posté ceci en tant que commentaire, mais lorsque j'ai voulu ajouter un peu plus au montage, il est devenu trop long, je l'ai donc déplacé ici.

Edit : Vos statistiques de test et df sont correctes. L'autre réponse souligne le problème du calcul de la surface de queue dans l'appel à pt()et du doublement pour deux queues, ce qui résout votre différence. Néanmoins, je laisserai mon commentaire / commentaire précédent car il apporte des remarques plus générales sur les valeurs p dans les queues extrêmes:

Il est possible que vous ne fassiez rien de mal et que vous obteniez tout de même une différence, mais si vous publiez un exemple reproductible, il sera peut-être possible de rechercher plus avant si vous avez une erreur (par exemple, dans le df).

Ces choses sont calculées à partir d'approximations qui peuvent ne pas être particulièrement précises dans l'extrême extrême.

Si les deux choses n'utilisent pas des approximations identiques, elles ne s'entendent peut-être pas étroitement, mais ce manque d'accord ne devrait pas avoir d'importance (pour que la zone exacte corresponde à un nombre aussi significatif, les hypothèses requises devraient tenir à des degrés étonnants précision). Avez-vous vraiment une normalité exacte, une indépendance exacte, une variance exactement constante?

2×dix-123×dix-120,0001


7

Le meilleur moyen de le calculer manuellement est:

t.value = (mean(data) - 10) / (sd(data) / sqrt(length(data))) 
p.value = 2*pt(-abs(t.value), df=length(data)-1)

1


0

J'aime beaucoup la réponse fournie par @Aaron, ainsi que les abscommentaires. Je trouve une confirmation pratique est de courir

pt(1.96, 1000000, lower.tail = F) * 2

qui cède 0.04999607.

Ici, nous utilisons la propriété bien connue selon laquelle 95% de l'aire sous la distribution normale se produit à environ 1,96 écart-type, ainsi le résultat de ~ 0,05 donne notre p-valeur. J'ai utilisé 1000000 depuis quand N est énorme, la distribution t est presque la même que la distribution normale. Cela m'a réconforté dans la solution de @ Aaron.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.