Manuell beregning av P-verdi fra t-verdi i t-test

Jeg har et eksempeldatasett med 31 verdier. Jeg kjørte en tosidig t-test ved bruk av R for å teste om det sanne gjennomsnittet er lik 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 

Nå prøver jeg å gjøre det samme manuelt:

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

T-verdien beregnet ved hjelp av denne metoden er den samme som output av t-test R.-funksjonen. P-verdien kommer imidlertid ut til å være 3.025803e-12.

Noen ideer om hva jeg gjør galt?

Takk!

EDIT

Her er hele R-koden , inkludert datasettet mitt:

# 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

Bruk pt og gjør det tosidig.

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

Kommentarer

  • I tror det mangler en detalj: Når skal du bruke lavere = F? – Se spørsmålet mitt her: stats.stackexchange.com/questions/133091/…
  • Verdien må være positiv, så hvis du bruker denne med en variabel som kan være negativ, pakk den inn abs.
  • For en tosidig test må du ' ser etter sannsynligheten for at verdien er mindre enn -11.244 eller mer enn +11.244. lavere = F forteller R å beregne sannsynligheten for at verdien er mer enn den første parameteren. Ellers gir det deg sannsynligheten for at verdien er mindre enn den første parameteren. Som sådan kan du også gjøre 2 * pt (-11.244, 30). Personlig gjør jeg vanligvis 2 * pt (-abs (q), df = n-1) ettersom R som standard er lavere = T.

Svar

Jeg la ut dette som en kommentar, men da jeg ønsket å legge til litt mer i redigeringen, ble det for lang, så jeg har flyttet det hit.

Rediger : Teststatistikken din og df er korrekte. Det andre svaret bemerker problemet med beregningen av halefeltet i samtalen til pt(), og dobling for to-haler, som løser forskjellen din. Likevel vil jeg la min tidligere diskusjon / kommentar fordi det gir relevante poeng mer generelt om p-verdier i ekstreme haler:

Det er mulig at du ikke gjør noe galt og fremdeles får forskjell, men hvis du legger ut et reproduserbart eksempel, kan det være mulig å undersøke nærmere om du har noen feil (si i df).

Disse tingene er beregnet fra tilnærminger som kanskje ikke er spesielt nøyaktige i den svært ekstreme halen .

Hvis de to tingene ikke bruker identiske tilnærminger, stemmer de kanskje ikke tett, men at mangel på enighet ikke skulle ha noe å si (for at det nøyaktige haleområdet skal være så meningsfullt, ville de antatte antagelsene må holde forbløffende grad av nøyaktighet). Har du virkelig nøyaktig normalitet, nøyaktig uavhengighet, nøyaktig konstant avvik?

Du burde ikke nødvendigvis forvente stor nøyaktighet der tallene ikke betyr noe uansett. I hvilken grad har det betydning om den beregnede omtrentlige p-verdien er $ 2 \ ganger 10 ^ {- 12} $ eller $ 3 \ ganger 10 ^ {- 12} $? Ingen av tallene måler den faktiske p-verdien til den virkelige situasjonen din. Selv om et av tallene representerte den reelle p-verdien til den virkelige situasjonen din, når den først er under $ 0,0001 $, hvorfor bryr du deg hva den verdien egentlig var?

Svar

Den beste måten å 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 trenger abs () -funksjon fordi du ellers risikerer å få p-verdier større enn $ 1 $ (når gjennomsnittet av dataene er større enn det gitte gjennomsnittet)!

Svar

Jeg liker veldig godt svaret @Aaron ga, sammen med abs kommentarer. Jeg finner en praktisk bekreftelse er å kjøre

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

som gir 0.04999607.

Her bruker vi den velkjente egenskapen at 95% av arealet under normalfordelingen skjer ved ~ 1,96 standardavvik, og dermed gir utgangen på ~ 0,05 vår p-verdi. Jeg brukte 1000000 siden når N er enorm, er t-fordelingen nesten den samme som normalfordelingen. Å kjøre dette ga meg trøst i @ Arons løsning.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *