P-érték manuális kiszámítása a t-értékből a t-tesztben

31 értékű mintaadatkészletem van. Kétfarkú t-tesztet futtattam R használatával annak tesztelésére, hogy az igazi átlag 10-es:

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

Kimenet:

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 

Most megpróbálom ugyanezt manuálisan megtenni:

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

Az ezzel kiszámított t-érték A metódus megegyezik a t-test R függvény kimenetével. A p-érték azonban 3.025803e-12 lesz.

Van ötlet, hogy mit csinálok rosszul?

Köszönöm!

SZERKESZTÉS

Itt van a teljes R kód , beleértve az adatkészletemet is:

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

Válasz

Használja a pt és kétfarkúvá tegye.

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

Megjegyzések

  • I szerintem hiányzik egy részlet: Mikor kell használni az alsó = F értéket? – Kérjük, olvassa el itt a kérdésemet: stats.stackexchange.com/questions/133091/…
  • Az értéknek pozitívnak kell lennie, ezért ha ezt egy olyan változóval használja, amely negatív lehet, csomagolja be a következőt: abs.
  • Kétfarkú teszt esetén: ' keresi annak valószínűségét, hogy az érték kisebb -11,244 vagy nagyobb, mint +11,244. alsó = F azt mondja R-nek, hogy kiszámolja annak valószínűségét, hogy az érték meghaladja az első paramétert. Ellenkező esetben annak valószínűségét adja meg, hogy az érték kisebb legyen, mint az első paraméter. Mint ilyen, 2 * pt-t is tehet (-11.244, 30). Személy szerint általában 2 * pt (-abs (q), df = n-1) csinálok, mivel R alapértelmezés szerint alacsonyabb = T.

Válasz

Ezt megjegyzésként tettem közzé, de amikor még egy kicsit többet akartam hozzáadni a szerkesztéshez, az túl hosszú lett, ezért áthelyeztem ide.

Szerkesztés : A tesztstatisztika és a df helyesek. A másik válasz megjegyzi a problémát a farok területének kiszámításával a pt(), és a kettős megduplázás kétfarkúra, ami megoldja a különbségeket. Mindazonáltal otthagyom korábbi vitámat / megjegyzésemet, mert általánosabban megfogalmazza a releváns pontokat a szélső farok p-értékeiről:

Lehetséges, hogy nem csinálsz semmi rosszat, és így is különbséget kapsz, de ha reprodukálható példát teszel fel, akkor lehet, hogy tovább vizsgálod, hogy van-e valamilyen hibád (mondd a df-ben).

Ezeket a dolgokat olyan közelítésekből számolják ki, amelyek nem feltétlenül pontosak a legvégső farokban .

Ha a két dolog nem használ azonos közelítéseket, akkor lehet, hogy nem egyeznek szorosan, de az egyetértés hiányának nem kellene számítania (ahhoz a pontos farokterülethez, amely messze értelmes szám lenne, a szükséges feltételezések döbbenetes fokú pontosságra van szükség). Valóban van pontos normalitása, egzakt függetlensége, pontosan állandó szórása?

Nem feltétlenül kell nagy pontosságot várnia ott, ahol a nyert számok nem jelentenek semmit. Mennyire számít, hogy a kiszámított hozzávetőleges p-érték $ 2 \ szorosa 10 ^ {- 12} $ vagy $ 3 \ szorosa 10 ^ {- 12} $? Egyik szám sem a valós helyzet tényleges p-értékét méri. Még akkor is, ha az egyik szám valóban az Ön valós helyzetének valódi p-értékét képviseli, ha ez körülbelül 0,0001 USD alatt van, miért érdekelne, mi is ez az érték valójában?

Válasz

Manuális kiszámításának legjobb módja:

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

Szüksége van a abs () függvény, mert különben fennáll annak a veszélye, hogy a p-értékek nagyobbak lesznek, mint $ 1 $ (amikor az adatok átlaga nagyobb, mint az adott átlag)!

Válasz

Nagyon tetszik a @Aaron által adott válasz, a abs megjegyzésekkel együtt. Úgy találom, hogy egy hasznos visszaigazolás a futtatás

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

ami 0.04999607 eredményt ad.

Itt azt a jól ismert tulajdonságot használjuk, hogy a normál eloszlás alatti terület 95% -a ~ 1,96 szórásnál fordul elő, így a ~ 0,05 kimenet adja a p-értékünket. 1000000-at használtam mivel amikor N óriási, a t eloszlás majdnem megegyezik a normál eloszlással. Ennek futtatása megkönnyítette az @Aaron megoldását.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük