T-test v programování v R: Jeden vzorek a párový příklad

⚡ Chytré shrnutí

T-test v jazyce R porovnává průměry pomocí funkce t.test(), přičemž pokrývá jeden vzorek s pevným cílem, dvě nezávislé skupiny a párová opakovaná měření. Tento návod spouští každou variantu, správně přečte p-hodnotu a ověří základní předpoklady.

  • 📐 Základní statistika: T-hodnota dělí pozorovaný průměrný rozdíl jeho směrodatnou chybou, takže větší magnitudy hovoří proti nulové hypotéze.
  • 🧪 Jednovýběrový test: Funkce t.test(x, mu = 10) porovnává jeden vektor s teoretickou hodnotou, například se specifikací receptu.
  • 👥 Dvouvýběrový test: Funkce t.test(x, y) porovnává dvě nezávislé skupiny a standardně používá Welchovu korekci pro nerovný rozptyl.
  • 🔗 Párový test: Přidáním párového = TRUE se testuje průměr rozdílů v rámci subjektu a odstraňuje se sdílená variace.
  • (Tj. Kontroly předpokladů: Před vypsáním jakékoli p-hodnoty použijte pro normalitu metodu shapiro.test() a pro stejnou rozptylnost metodu var.test().
  • 📊 Rozhodovací pravidlo: Hodnota p pod 0.05 odmítá nulovou hypotézu, ale nikdy nedokazuje pravdivost alternativní hypotézy.

T-test v R Jeden párový vzorek

Co je statistická inference?

Statistická inference je umění generování závěrů o rozdělení dat. Datový vědec se často potýká s otázkami, na které lze odpovědět pouze vědecky. Statistická inference je proto strategie k testování, zda je hypotéza pravdivá, tj. zda je potvrzena daty.

Běžnou strategií pro posouzení hypotézy je t-test, který říká, zda jsou dva průměry stejné. Je také známý jako Studentský testT-test lze vypočítat pro:

  1. Jeden vektor proti pevné hodnotě (jednovýběrový t-test)
  2. Dva vektory ze dvou oddělených skupin (nezávislý dvouvýběrový t-test)
  3. Dva vektory měřené na stejných subjektech (párový t-test)

Každý t-test předpokládá, že data jsou náhodně vzorkována a že hodnoty (nebo v případě párového testu rozdíly) pocházejí z přibližně normálně rozdělené populace. Nezávislá verze se dvěma výběry navíc předpokládá, že obě skupiny jsou na sobě nezávislé, a klasická verze předpokládá, že jejich rozptyly jsou stejné.

Co je T-test v programování R?

Základní myšlenkou T-testu je použít statistiku k vyhodnocení dvou opačných hypotéz:

  • H0nulová hypotéza, že průměr populace se rovná testované hodnotě
  • H1alternativní hypotéza, že průměr populace se liší od této hodnoty

T-test je navržen pro malé velikosti vzorků, kde je normální aproximace nespolehlivá. Vyžaduje, aby data měla přibližně normální rozdělení.

Syntaxe T-testu v R

Základní syntaxe pro t.test() v R je:

t.test(x, y = NULL,
       mu = 0, var.equal = FALSE)
arguments:
- x : A vector to compute the one-sample t-test
- y: A second vector to compute the two sample t-test
- mu: Mean of the population under the null hypothesis
- var.equal: Specify whether the variances of the two vectors are equal. By default, set to `FALSE`
- paired: Set to `TRUE` when the two vectors are repeated measures on the same subjects

Než cokoli spustíte, přizpůsobte rozvržení dat správné variantě testu.

Typy T-testů v R

Výběr nesprávné varianty je nejčastější chybou t-testu, proto začněte tím, že rozvržení dat porovnáte se správným voláním.

Typ Použijte to, když Volání R
Jeden vzorek Jedna skupina ve srovnání se známou cílovou hodnotou t.test(x, mu = hodnota)
Nezávislý dvouvýběrový (Welch) Dvě oddělené skupiny, odchylky mohou být nestejné t.test(x, y)
Nezávislý dvouvýběr (sdružený) Dvě oddělené skupiny se stejnou variancí t.test(x, y, proměnná.rovná se = PRAVDA)
Spárováno Stejné subjekty byly měřeny dvakrát t.test(x, y, párové = PRAVDA)
Jednostranná Zajímá tě jen rozdíl v jednom směru t.test(x, mu = hodnota, alternativa = „větší“)

Za hranicí tří skupin již t-test není vhodný. Přejděte na Test ANOVA, což udržuje celkovou míru chyb na 5 procentech, místo aby ji nafukovalo při opakovaných párových porovnáních.

Jeden vzorový T-test v R

Jednovzorkový t-test neboli studentův test porovnává průměr vektoru s teoretickým průměrem, Jeden vzorový T-test v R. Vzorec použitý pro výpočet t-testu je:

Jeden vzorový T-test v R

Zde,

  • Jeden vzorový T-test v R odkazuje na průměr
  • Jeden vzorový T-test v R k teoretickému průměru
  • s je standardní odchylka
  • n počet pozorování.

Chcete-li vyhodnotit statistickou významnost t-testu, musíte vypočítat p-hodnota, p-hodnota se pohybuje od 0 do 1 a je interpretován následovně:

  • Hodnota p nižší než 0.05 znamená, že můžete odmítnout nulovou hypotézu. Všimněte si, že odmítnutí H0 není totéž jako prokázání pravdivosti H1, znamená to pouze, že data jsou za H0 nepravděpodobná.
  • Hodnota p vyšší než 0.05 naznačuje, že nemáte dostatek důkazů k odmítnutí nulové hypotézy.

P-hodnotu můžete sestrojit tak, že se podíváte na odpovídající absolutní hodnotu t-testu ve Studentově rozdělení se stupni volnosti rovnými Jeden vzorový T-test v R

Například s 5 pozorováními porovnáváte t-hodnotu se Studentovým rozdělením se 4 stupni volnosti na 95% hladině spolehlivosti. Aby byla nulová hypotéza v oboustranném testu zamítnuta, musí absolutní t-hodnota překročit 2.776.

Cf tabulka níže:

Jeden vzorový T-test v R

Jeden vzorový příklad T-testu v R

Předpokládejme, že jste společnost vyrábějící soubory cookie. Každá sušenka má obsahovat 10 gramů cukru. Sušenky vyrábí stroj, který před smícháním všeho přidá cukr do misky. Domníváte se, že stroj nepřidává 10 gramů cukru na každou sušenku. Pokud je váš předpoklad pravdivý, je potřeba stroj opravit. Uložili jste hladinu cukru třiceti sušenek.

Hodnocení: Pomocí funkce rnorm() můžete vytvořit náhodný vektor. Tato funkce generuje normálně rozložené hodnoty. Základní syntaxe je:

rnorm(n, mean, sd)
arguments
- n: Number of observations to generate
- mean: The mean of the distribution. Optional
- sd: The standard deviation of the distribution. Optional

Můžete vytvořit rozdělení s 30 pozorováními s průměrem 9.99 a standardní odchylkou 0.04.

set.seed(123)
sugar_cookie <- rnorm(30, mean = 9.99, sd = 0.04)
head(sugar_cookie)

Výstup:

## [1]  9.967581  9.980793 10.052348  9.992820  9.995172 10.058603

Jednovzorkovým t-testem můžete zkontrolovat, zda se hladina cukru liší od receptury. Můžete nakreslit test hypotézy:

  • H0: Průměrná hladina cukru se rovná 10
  • H1: Průměrná hladina cukru je jiná než 10

Používáte hladinu významnosti 0.05.

# H0 : mu = 10
t.test(sugar_cookie, mu = 10)

Zde je výstup:

Jeden vzorový příklad T-testu v R

P-hodnota jednovýběrového t-testu je 0.1079, což je nad prahovou hodnotou 0.05. 95% interval spolehlivosti pro průměr se pohybuje od 9.973 do 10.002 gramů a obsahuje cílovou hodnotu 10. Proto nelze H0 odmítnout: neexistuje dostatek důkazů o tom, že se stroj odchyluje od receptury.

Nezávislý dvouvýběrový t-test v R

Nezávislý dvouvýběrový t-test je nejčastěji používanou variantou a používá se vždy, když dvě sady měření pocházejí z různých subjektů: dvě dílny, dva stroje, dvě léčebná ramena.

Předpokládejme, že továrna provozuje dvě výrobní linky a vy chcete vědět, zda plní sklenice stejnou hmotností.

set.seed(123)
line_a <- rnorm(25, mean = 500, sd = 8)
line_b <- rnorm(25, mean = 505, sd = 8)

# Welch test, the safe default
t.test(line_a, line_b)

# Pooled test, only when the variances are equal
t.test(line_a, line_b, var.equal = TRUE)

Výstup si přečtěte ve čtyřech krocích.

  1. t je standardizovaná velikost mezery mezi dvěma průměry. Jeho znaménko odráží pouze pořadí, ve kterém jste vektory předali.
  2. df je počet stupňů volnosti. Welch vygeneruje zlomkovou hodnotu; sdružený test dává celé číslo rovné n1 + n2 – 2.
  3. p-hodnota je pravděpodobnost, že by se objevila tak velká mezera, pokud by skutečné průměry byly shodné.
  4. Interval spolehlivosti ohraničuje skutečný rozdíl. Pokud obsahuje nulu, rozdíl na dané úrovni není významný.

Pokud se vaše data nacházejí v jednom datovém rámci s jedním sloupcem hodnot a jedním sloupcem faktorů, použijte místo toho rozhraní vzorců, které se snáze čte a zabraňuje ručnímu rozdělení dat:

t.test(weight ~ line, data = jars)

Kterou verzi použít. Pokud jste neotestovali a nepotvrdili stejné rozptyly, ponechte var.equal na výchozí hodnotě FALSE. Welchova korekce vás nestojí téměř nic na síle, když se rozptyly shodují, a chrání vás, když se neshodují.

Spárovaný T-test v R

Párový t-test, nazývaný také t-test závislého vzorku, se používá, když je stejná skupina měřena dvakrát. Typické aplikace jsou:

  • A/B testování : Porovnejte dvě varianty
  • Případové kontrolní studiepřed a po ošetření stejných subjektů

Příklad párového T-testu v R

Nápojová společnost má zájem znát výkon slevového programu na tržby. Společnost se rozhodla sledovat denní tržby jednoho ze svých obchodů, kde program propaguje. Na konci programu chce společnost vědět, zda existuje statistický rozdíl mezi průměrnými tržbami obchodu před a po programu.

  • Společnost tracPřed zahájením programu jsme každý den sledovali prodej. Toto je náš první vektor.
  • Program je propagován po dobu jednoho týdne a tržby jsou zaznamenávány každý den. Toto je náš druhý vektor.
  • Provedete t-test, abyste posoudili efektivitu programu. Toto se nazývá párový t-test, protože hodnoty obou vektorů pocházejí ze stejné distribuce (tj. ze stejného obchodu).

Testování hypotézy je:

  • H0: Žádný rozdíl v průměru
  • H1: Tyto dva prostředky jsou různé

Nezapomeňte, že klasický t-test předpokládá neznámý, ale stejný rozptyl v obou skupinách. Reálná data tento předpoklad zřídka přesně splňují a ignorování rozdílu může výsledek zkreslit.

Řešením je Welchův t-test, který zmírňuje předpoklad stejné rozptylu. R jej aplikuje standardně, protože var.equal je NEPRAVDA, pokud neurčíte jinak. V této datové sadě byly oba vektory generovány se stejnou směrodatnou odchylkou, takže můžete bezpečně nastavit var.equal = TRUE.

Vytvoříte dva náhodné vektory z Gaussova rozdělení s vyšším průměrem pro tržby po programu.

set.seed(123)
# sales before the program
sales_before <- rnorm(7, mean = 50000, sd = 50)
# sales after the program.This has higher mean
sales_after <- rnorm(7, mean = 50075, sd = 50)
# draw the distribution
t.test(sales_before, sales_after,var.equal = TRUE)

Příklad párového T-testu v R

Hodnota p je 0.04606, těsně pod prahovou hodnotou 0.05, takže H0 zamítnete a dojdete k závěru, že se tyto dva průměry významně liší. Zdá se, že slevový program zvýšil tržby.

⚠️ Důležité: výše uvedené volání porovnává dva vektory jako nezávislý vzorků. Protože obě série jsou měřeními ve stejné dílně, statisticky správné volání přidává párovaný = PRAVDA:

t.test(sales_before, sales_after, paired = TRUE)

Párový model testuje průměr denních rozdílů namísto rozdílu dvou průměrů. Odstraňuje variabilitu na úrovni obchodu sdílenou oběma vektory, a proto má větší statistickou sílu.

Jak ověřit předpoklady T-testu v R

P-hodnota t-testu má smysl pouze tehdy, když platí její předpoklady. Každý z nich lze přímo ověřit.

1. Normálnost. Jednovýběrové a dvouvýběrové testy předpokládají, že hodnoty jsou přibližně normální; párový test předpokládá, že Rozdíly jsou. Prohlédněte si QQ graf a potvrďte Shapiro-Wilkovým testem:

qqnorm(sugar_cookie); qqline(sugar_cookie)
shapiro.test(sugar_cookie)

# for a paired design, test the differences
shapiro.test(sales_after - sales_before)

Shapiro-Wilkova p-hodnota nad 0.05 znamená, že normalitu nelze odmítnout. Při více než přibližně 30 pozorováních na skupinu centrální limitní věta v každém případě činí t-test robustním až mírně zešikmeným.

2. Stejný rozptyl. Toto potřebuje pouze sdružený dvouvýběrový test. Otestujte to pomocí F-testu:

var.test(line_a, line_b)

Hodnota p nad 0.05 podporuje stejné rozptyly, což ospravedlňuje platnost var.equal = TRUE.

3. Nezávislost. To vyplývá z designu studie a nelze to testovat dodatečně. Pokud stejný subjekt přispívá k oběma vektorům, je nezávislý test jednoduše špatným nástrojem a potřebujete párové = PRAVDA.

Když předpoklad selže. Pro zjevně nenormální data s malými vzorky použijte alternativy založené na pořadí: wilcox.test(x, y) nahrazuje dvouvýběrový t-test a wilcox.test(x, y, paired = TRUE) nahrazuje párovou verzi. Ani jeden z nich nevyžaduje normalitu, i když oba vyměňují trochu síly, když jsou data skutečně normální.

T-test v R: Klíčové poznatky a referenční informace o testech

  • Statistická inference je umění generování závěrů o distribuci dat.
  • T-test patří do rodiny inferenčních statistik. Běžně se používá ke zjištění, zda existuje statistický rozdíl mezi průměry dvou skupin.
  • Jednovýběrový t-test neboli Studentův test porovnává průměr vektoru s teoretickým průměrem.
  • Párový t-test nebo t-test závislého vzorku se používá, když je stejná skupina měřena dvakrát.

Níže uvedená tabulka shrnuje všechny výše uvedené testy:

test Hypotéza k testování p-hodnota Code Volitelný argument
jednovýběrový t-test Průměr vektoru se liší od teoretického průměru 0.05
t.test(x, mu = mean)
t-test párového vzorku Průměr A se u stejných subjektů liší od průměru B 0.05
t.test(A, B, paired = TRUE)
var.equal = TRUE

Pokud jste ochotni předpokládat stejné rozptyly v nezávislém dvouvýběrovém testu, nastavte var.equal = TRUE. Ponechte ji na výchozí hodnotě FALSE pro spuštění bezpečnější Welchovy korekce.

Nejčastější dotazy

Párový test analyzuje rozdíly mezi subjekty, když jsou ti samí subjekty měřeni dvakrát. Nezávislý test porovnává dvě oddělené skupiny. Použití nezávislého testu na párových datech zavrhuje informace a snižuje statistickou sílu.

Welchův algoritmus používejte vždy, když nemáte potvrzené stejné rozptyly, a proto jej R používá standardně. Pokud se rozptyly shodují, nespotřebovává téměř žádnou energii a snižuje míru chybovosti, když se neshodují.

Pro malé vzorky přepněte pomocí funkce wilcox.test() na Wilcoxonův rank-sum nebo signed-rank test. Pro větší vzorky centrální limitní věta udržuje t-test spolehlivý i přes mírné odchylky od normality.

Týmy používají párové t-testy k porovnání dvou modelů napříč identickými křížovými validačními vrstvami a k ​​posouzení, zda je výsledek A/B experimentu reálný. Párový design odstraňuje z porovnání variabilitu mezi jednotlivými vrstvami.

Ano. Asistenti s umělou inteligencí dokáží vysvětlit stupně volnosti, přeložit intervaly spolehlivosti do srozumitelného jazyka a upozornit na výběr nesprávné varianty. Každý odečet potvrďte vlastními výsledky funkcí shapiro.test() a var.test().

Shrňte tento příspěvek takto: