Calcul manuel de la valeur P à partir de la valeur t dans le test t

Jai un exemple de jeu de données avec 31 valeurs. Jai exécuté un test t bilatéral en utilisant R pour tester si la vraie moyenne 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, jessaie 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 à laide de ceci est la même que celle produite par la fonction t-test R. La valeur p, cependant, est 3.025803e-12.

Des idées sur ce que je fais mal?

Merci!

EDIT

Voici le code R complet , y compris mon ensemble 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éponse

Utilisez pt et faites-en un double.

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

Commentaires

  • I pense quil manque un détail: quand utiliser lower = F? – Veuillez consulter ma question ici: stats.stackexchange.com/questions/133091/…
  • La valeur doit être positive, donc si vous lutilisez avec une variable qui pourrait être négative, insérez abs.
  • Pour un test bilatéral, vous ' recherche la probabilité que la valeur soit inférieure à -11,244 ou supérieure à +11,244. lower = F indique à 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 généralement 2 * pt (-abs (q), df = n-1) car R par défaut est inférieur = T.

Réponse

Jai posté ceci sous forme de commentaire, mais quand jai voulu en ajouter un peu plus en édition, il est devenu trop long alors je « lai déplacé ici.

Modifier : Votre statistique de test et df sont corrects. Lautre réponse note le problème avec le calcul de la zone de queue dans lappel à pt(), et le doublement pour two-tails, qui résout votre différence. Néanmoins, je laisserai ma discussion / commentaire précédent car il fait des points pertinents plus généralement sur les valeurs p dans les queues extrêmes:

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

Ces choses sont calculées à partir dapproximations qui peuvent ne pas être particulièrement précises dans la queue très extrême .

Si les deux choses nutilisent pas des approximations identiques, elles peuvent ne pas être étroitement daccord, mais ce manque daccord ne devrait pas avoir dimportance (pour que la zone de queue exacte soit un nombre significatif, les hypothèses requises seraient doivent tenir à des degrés de précision étonnants). Avez-vous vraiment une normalité exacte, une indépendance exacte, une variance exactement constante?

Vous ne devriez pas nécessairement vous attendre à une grande précision là où les nombres ne veulent rien dire de toute façon. Dans quelle mesure est-il important que la valeur p approximative calculée soit 2 $ \ fois 10 ^ {- 12} $ ou 3 $ \ fois 10 ^ {- 12} $? Aucun des deux nombres ne mesure la valeur p réelle de votre situation réelle. Même si lun des nombres représentait la valeur p réelle de votre situation réelle, une fois quelle est inférieure à environ 0,0001 $, pourquoi vous soucieriez-vous de la valeur réelle de cette valeur?

Réponse

La meilleure façon 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) 

Vous avez besoin du abs () car sinon vous courez le risque dobtenir des valeurs p supérieures à $ 1 $ (lorsque la moyenne des données est plus grande que la moyenne donnée)!

Réponse

Jaime beaucoup la réponse fournie par @Aaron, ainsi que les commentaires abs. Je trouve quune confirmation pratique est de lancer

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

qui donne 0.04999607.

Ici, nous utilisons la propriété bien connue que 95% de la surface sous la distribution normale se produit à ~ 1,96 écarts types, donc la sortie de ~ 0,05 donne notre valeur p. Jai utilisé 1000000 puisque quand N est énorme, la distribution t est presque la même que la distribution normale. Lexécution de ceci ma donné du confort dans la solution de @Aaron.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *