Ruční výpočet hodnoty P z hodnoty t v t-testu

Mám ukázkovou datovou sadu s 31 hodnotami. Spustil jsem dvoustranný t-test pomocí R k testování, zda je skutečný průměr roven 10:

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

Výstup:

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 

Nyní se pokouším udělat totéž ručně:

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

Hodnota t vypočítaná pomocí tohoto Metoda je stejná jako výstup funkce t-test R. Hodnota p však vyjde na 3,025803e-12.

Nějaké nápady, co dělám špatně?

Děkujeme!

EDIT

Zde je úplný R kód , včetně mého datového souboru:

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

Odpověď

Použít pt a udělat to dvoustranný.

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

Komentáře

  • I myslíte, že chybí detail: Kdy použít nižší = F? – Přečtěte si prosím mou otázku zde: stats.stackexchange.com/questions/133091/…
  • Hodnota musí být kladná, takže pokud ji použijete s proměnnou, která může být záporná, zalomte ji do abs.
  • U dvoustranného testu můžete ' hledáme pravděpodobnost, že hodnota bude menší než -11,244 nebo vyšší než +11,244. lower = F říká R, aby vypočítal pravděpodobnost, že hodnota bude větší než první parametr. Jinak vám dává pravděpodobnost, že hodnota bude menší než první parametr. Jako takový můžete také udělat 2 * pt (-11,244, 30). Osobně obvykle dělám 2 * pt (-abs (q), df = n-1), protože R je standardně nižší = T.

Odpovědět

Zveřejnil jsem to jako komentář, ale když jsem chtěl přidat do editace trochu víc, stalo se to příliš dlouhé, takže jsem to sem přesunul dolů.

Upravit : Vaše testovací statistika a df jsou správné. Druhá odpověď upozorňuje na problém s výpočtem ocasní plochy ve volání pt() a zdvojnásobení pro dva ocasy, které vyřeší váš rozdíl. Nicméně nechám svou dřívější diskusi / komentář, protože obecně přináší relevantní body o p-hodnotách v extrémních ocasech:

Je možné, že neděláte nic špatného a přesto získáte rozdíl, ale pokud pošlete reprodukovatelný příklad, bude možné dále prozkoumat, zda nemáte nějakou chybu (řekněme v df).

Tyto věci se počítají z aproximací, které nemusí být ve velmi extrémním ocasu zvlášť přesné .

Pokud tyto dvě věci nepoužívají identické aproximace, nemusí se těsně shodovat, ale na tomto nedostatku shody by nemělo záležet (pro přesnou oblast ocasu, která by zdaleka neměla smysluplné číslo, by požadované předpoklady musí držet ohromujících stupňů přesnosti). Opravdu máte přesnou normálnost, přesnou nezávislost, přesně konstantní rozptyl?

Neměli byste nutně očekávat velkou přesnost tam, kde čísla stejně nic neznamenají. Do jaké míry záleží na tom, zda je vypočítaná přibližná hodnota p $ 2 \ krát 10 ^ {- 12} $ nebo $ 3 \ krát 10 ^ {- 12} $? Ani jedno číslo neměří skutečnou hodnotu p vaší skutečné situace. I když jedno z čísel představovalo skutečnou hodnotu p vaší skutečné situace, jakmile bude nižší než 0,0001 $, proč by vás zajímalo, co tato hodnota ve skutečnosti byla?

Odpověď

Nejlepší způsob, jak to vypočítat ručně, je:

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

Potřebujete Funkce abs (), protože jinak riskujete, že získáte hodnoty p větší než $ 1 $ (když je průměr dat větší než daný průměr)!

Odpovědět

Opravdu se mi líbí odpověď @Aaron spolu s komentáři abs. Považuji za užitečné spustit potvrzení

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

, které získá 0.04999607.

Tady používáme dobře známou vlastnost, že 95% plochy pod normálním rozdělením se vyskytuje při ~ 1,96 směrodatných odchylkách, takže výstup ~ 0,05 dává naši hodnotu p. Použil jsem 10 000 000 protože když je N obrovské, distribuce t je téměř stejná jako normální distribuce. Spuštění mi poskytlo pohodlí v řešení @Aaron.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *