Calculul manual al valorii P din valoarea t în testul t

Am un eșantion de date cu 31 de valori. Am efectuat un test t cu două cozi folosind R pentru a testa dacă media adevărată este egală cu 10:

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

Ieșire:

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 

Acum încerc să fac același lucru manual:

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

Valoarea t calculată folosind acest metoda este aceeași cu rezultatul funcției t-test R. Valoarea p, totuși, se dovedește a fi 3.025803e-12.

Aveți idei despre ce fac greșit?

Mulțumesc!

EDITĂ

Iată codul R complet , inclusiv setul meu de date:

# 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ăspuns

Utilizați pt și faceți-o cu două cozi.

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

Comentarii

  • I cred că lipsește un detaliu: Când se folosește mai mic = F? – Vă rugăm să vedeți întrebarea mea aici: stats.stackexchange.com/questions/133091/…
  • Valoarea trebuie să fie pozitivă, deci, dacă utilizați acest lucru cu o variabilă care ar putea fi negativă, înfășurați abs.
  • Pentru un test cu două cozi, ' caută probabilitatea ca valoarea să fie mai mică de -11.244 sau mai mare de +11.244. mai mic = F îi spune lui R să calculeze probabilitatea ca valoarea să fie mai mare decât primul parametru. În caz contrar, vă oferă probabilitatea ca valoarea să fie mai mică decât primul parametru. Ca atare, ați putea face și 2 * pt (-11.244, 30). Personal, fac de obicei 2 * pt (-abs (q), df = n-1), deoarece R implicit scade = T.

Răspuns

Am postat asta ca un comentariu, dar când am vrut să adaug ceva mai mult în editare, a devenit prea lung, așa că l-am mutat aici.

Editați : statisticile de testare și df sunt corecte. Celălalt răspuns notează problema cu calculul zonei cozii în apelul către pt() și dublarea pentru două cozi, care rezolvă diferența dvs. Cu toate acestea, voi părăsi discuția / comentariul meu anterior, deoarece face puncte relevante mai general despre valorile p în cozi extreme:

Este posibil să nu faceți nimic greșit și să obțineți în continuare o diferență, dar dacă postați un exemplu reproductibil, ar putea fi posibil să investigați mai departe dacă aveți o eroare (spuneți în df).

Aceste lucruri sunt calculate din aproximări care ar putea să nu fie deosebit de exacte în coada extremă .

Dacă cele două lucruri nu folosesc aproximări identice, s-ar putea să nu fie de acord îndeaproape, dar lipsa acordului nu ar trebui să conteze (pentru zona exactă a cozii până la a fi un număr semnificativ, ipotezele necesare ar fi trebuie să țină la uimitoare grade de precizie). Chiar aveți o normalitate exactă, o independență exactă, o varianță exactă constantă?

Nu ar trebui să vă așteptați neapărat la o acuratețe mare în cazul în care numerele câștigate nu înseamnă nimic. În ce măsură contează dacă valoarea p aproximativă calculată este de 2 $ \ ori 10 ^ {- 12} $ sau 3 $ \ ori 10 ^ {- 12} $? Niciun număr nu măsoară valoarea actuală p a situației dvs. adevărate. Chiar dacă unul dintre numere a reprezentat valoarea reală p a situației dvs. adevărate, odată ce este sub aproximativ $ 0,0001 $, de ce ți-ar păsa care a fost acea valoare?

Răspuns

Cel mai bun mod de a-l calcula manual este:

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

Aveți nevoie de funcția abs () deoarece altfel riscați să obțineți valori p mai mari de $ 1 $ (când media datelor este mai mare decât media dată)!

Răspuns

Îmi place foarte mult răspunsul oferit de @Aaron, împreună cu comentariile abs. Găsesc o confirmare la îndemână este să rulați

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

care produce 0.04999607.

Aici, folosim bine-cunoscuta proprietate că 95% din suprafața sub distribuția normală are loc la ~ 1,96 abateri standard, astfel ieșirea de ~ 0,05 ne dă valoarea p. Am folosit 1000000 deoarece când N este imens, distribuția t este aproape aceeași cu distribuția normală. Rularea acestui lucru mi-a dat confort în soluția @Aaron.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *