P-arvon laskeminen manuaalisesti t-arvosta t-testissä

Minulla on näytetiedosto 31 arvolla. Suoritin kaksisuuntaisen t-testin R: llä testatakseni, onko todellinen keskiarvo 10:

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

Tulos:

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 

Yritän nyt tehdä saman asian manuaalisesti:

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

Tämän avulla laskettu t-arvo menetelmä on sama kuin t-testin R funktion tulos. P-arvo on kuitenkin 3,025803e-12.

Onko ideoita mitä teen väärin?

Kiitos!

MUOKKAA

Tässä on koko R-koodi , mukaan lukien tietojoukkoni:

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

Vastaa

Käytä pt ja tee siitä kaksisuuntainen.

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

Kommentit

  • I mielestäni puuttuu jokin yksityiskohta: milloin käyttää alempaa = F? – Katso kysymykseni täältä: stats.stackexchange.com/questions/133091/…
  • Arvon on oltava positiivinen, joten jos käytät tätä muuttujan kanssa, joka voi olla negatiivinen, kääri abs.
  • Kahden pyrstön testissä sinun on ' etsii todennäköisyyttä, että arvo on alle -11,244 tai yli +11,244. alempi = F käskee R: n laskemaan todennäköisyyden siitä, että arvo on enemmän kuin ensimmäinen parametri. Muussa tapauksessa se antaa todennäköisyyden siitä, että arvo on pienempi kuin ensimmäinen parametri. Sinänsä voit myös tehdä 2 * pt (-11.244, 30). Henkilökohtaisesti teen yleensä 2 * pt (-abs (q), df = n-1), kun R oletuksena laskee = T.

Vastaa

Lähetin tämän kommenttina, mutta kun halusin lisätä hieman enemmän muokkaukseen, siitä tuli liian pitkä, joten olen siirtänyt sen tänne.

Muokkaa : Testitilastosi ja df ovat oikeat. Toinen vastaus huomauttaa ongelman hännän alueen laskemisesta kutsussa pt() ja kaksisuuntainen kaksinkertaistaminen, mikä ratkaisee erosi. Siitä huolimatta jätän aikaisemman keskustelun / kommenttini, koska se antaa asiaankuuluvia näkökohtia p-arvoista äärimmäisissä pyrstöissä:

On mahdollista, ettet tekisi mitään väärin ja saat silti eron, mutta jos lähetät toistettavan esimerkin, voi olla mahdollista tutkia tarkemmin, onko sinulla virheitä (sano df: ssä).

Nämä asiat lasketaan likiarvojen perusteella, jotka eivät ehkä ole erityisen tarkkoja äärimmäisessä hännässä .

Jos näitä kahta asiaa ei käytetä identtisiä likiarvoja, ne eivät välttämättä sovi tarkasti yhteen, mutta sopimattomuudella ei pitäisi olla merkitystä (tarkan hännän alueen ollessa niin kaukana merkityksellinen luku, vaaditut oletukset on pidettävä yllättävän tarkasti). Onko sinulla todellakin tarkkaa normaalia, täsmällistä riippumattomuutta, tarkasti jatkuvaa varianssia?

Sinun ei tarvitse välttämättä odottaa suurta tarkkuutta siellä, missä numerot eivät voittaneet, tarkoita mitään. Missä määrin sillä on merkitystä, onko laskettu likimääräinen p-arvo $ 2 \ kertaa 10 ^ {- 12} $ tai $ 3 \ kertaa 10 ^ {- 12} $? Kumpikaan numero ei mittaa todellisen tilanteesi todellista p-arvoa. Vaikka jokin numeroista edustaisi todellisen tilanteesi todellista p-arvoa, mikäli se olisi alle noin 0,0001 dollaria, miksi välittäisit, mikä arvo todellisuudessa oli?

Vastaus

Paras tapa laskea se manuaalisesti on:

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

Tarvitset abs () -toiminto, koska muuten olet vaarassa saada p-arvot suuremmiksi kuin $ 1 $ (kun tietojen keskiarvo on suurempi kuin annettu keskiarvo)!

Vastaa

Pidän todella @Aaronin antamasta vastauksesta yhdessä abs -kommenttien kanssa. Minusta on hyödyllinen vahvistus suoritettavaksi

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

joka tuottaa 0.04999607.

Tässä käytämme tunnettua ominaisuutta, että 95% normaalijakauman alapinta-alasta esiintyy ~ 1,96: n keskihajonnoilla, joten ~ 0,05: n tuotos antaa p-arvon. Käytin 1000000 koska kun N on valtava, t-jakauma on melkein sama kuin normaalijakauma. Tämän suorittaminen antoi minulle mukavuutta @Aaronin ratkaisussa.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *