Manuel beregning af P-værdi ud fra t-værdi i t-test

Jeg har et eksempeldatasæt med 31 værdier. Jeg kørte en to-halet t-test ved hjælp af R for at teste, om det sande gennemsnit er lig med 10:

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

Output:

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 

Nu prøver jeg at gøre det samme manuelt:

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

T-værdien beregnes ved hjælp af denne metoden er den samme som output fra t-test R.-funktionen. P-værdien viser sig imidlertid at være 3.025803e-12.

Har du nogen ideer om, hvad jeg laver forkert?

Tak!

REDIGER

Her er den fulde R-kode , inklusive mit datasæt:

# 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) 

Svar

Brug pt og gør det to-halet.

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

Kommentarer

  • I tror der mangler en detalje: Hvornår skal man bruge lavere = F? – Se mit spørgsmål her: stats.stackexchange.com/questions/133091/…
  • Værdien skal være positiv, så hvis du bruger denne med en variabel, der kan være negativ, skal du indpakke den i abs.
  • For en test med to haler skal du ' leder efter sandsynligheden for, at værdien er mindre end -11.244 eller mere end +11.244. lavere = F fortæller R at beregne sandsynligheden for, at værdien er mere end den første parameter. Ellers giver det dig sandsynligheden for, at værdien er mindre end den første parameter. Som sådan kan du også gøre 2 * pt (-11.244, 30). Personligt laver jeg normalt 2 * pt (-abs (q), df = n-1), da R som standard er lavere = T.

Svar

Jeg sendte dette som en kommentar, men da jeg ville tilføje lidt mere i redigeringen, blev det for længe, så jeg har flyttet det herned.

Rediger : Din teststatistik og df er korrekte. Det andet svar bemærker problemet med beregningen af haleområdet i opkaldet til pt(), og fordobling for to-haler, hvilket løser din forskel. Ikke desto mindre vil jeg forlade min tidligere diskussion / kommentar, fordi det giver relevante punkter mere generelt om p-værdier i ekstreme haler:

Det er muligt, at du muligvis ikke gør noget forkert og stadig får en forskel, men hvis du sender et reproducerbart eksempel, er det muligvis muligt at undersøge nærmere, om du har en fejl (siger i df).

Disse ting beregnes ud fra tilnærmelser, der måske ikke er særlig nøjagtige i den meget ekstreme hale .

Hvis de to ting ikke bruger identiske tilnærmelser, er de muligvis ikke nøje enige, men at manglende enighed ikke betyder noget (for det nøjagtige haleareal så langt at være meningsfuldt antal, ville de krævede antagelser er nødt til at holde forbløffende grader af nøjagtighed). Har du virkelig nøjagtig normalitet, nøjagtig uafhængighed, nøjagtig konstant afvigelse?

Du bør ikke nødvendigvis forvente stor nøjagtighed, hvor tallene ikke alligevel betyder noget. I hvilket omfang betyder det, om den beregnede omtrentlige p-værdi er $ 2 \ gange 10 ^ {- 12} $ eller $ 3 \ gange 10 ^ {- 12} $? Intet tal måler den faktiske p-værdi for din sande situation. Selvom et af tallene repræsenterede den reelle p-værdi af din sande situation, når den først er under ca. $ 0,0001 $, hvorfor ville du være ligeglad med, hvad den værdi faktisk var?

Svar

Den bedste måde at beregne det manuelt på er:

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

Du har brug for abs () -funktion, fordi du ellers risikerer at få p-værdier større end $ 1 $ (når gennemsnittet af dataene er større end det givne gennemsnit)!

Svar

Jeg kan virkelig godt lide svaret, som @Aaron gav, sammen med abs kommentarer. Jeg finder en praktisk bekræftelse er at køre

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

hvilket giver 0.04999607.

Her bruger vi den velkendte egenskab, at 95% af arealet under normalfordelingen forekommer ved ~ 1,96 standardafvigelser, så output på ~ 0,05 giver vores p-værdi. Jeg brugte 1000000 siden når N er enorm, er t-fordelingen næsten den samme som normalfordelingen. At køre dette gav mig trøst i @Aarons løsning.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *