Testovanie pravdepodobnostných rozdelení

Metódy riešenia úloh z pravdepodobnosti a štatistiky

Chí-kvadrát test dobrej zhody

Príklad 1: hádzanie kockou I.

https://www.youtube.com/watch?v=rjYT3WUWq0s

Priebeh:

Z chatu:

Výsledok:

  • Výsledok jedného hodu je náhodná premenná s hodnotami 1-6, chceme otestovať hypotézu, že pravdepodobnosť každého výsledku je rovnaká.

  • Použijeme chí kvadrát test dobrej zhody.

Princíp:

  • Dôležité sú rozdiely medzi relizovanými početnosťami a očakávanými: \[186 - \frac{1024}{6}, 168 - \frac{1024}{6}, \dots\]
  • Potrebujeme zrušiť efekt znamienok (rovnako postatné sú kladné aj záporné odchýlky) \(\rightarrow\) umocníme ich na druhú \[\left(186 - \frac{1024}{6}\right)^2, \left(168 - \frac{1024}{6}\right)^2, \dots\]
  • Významnosť rozdielu napr. 10 závisí od toho, aký je očakávaný počet (porovnajme napr. 20 a 2000) vydelíme očakávaným počtom \[\frac{\left(186 - \frac{1024}{6}\right)^2}{\frac{1024}{6}}, \frac{\left(168 - \frac{1024}{6}\right)^2}{ \frac{1024}{6}}, \dots\]
kocky <- c(186, 168, 172, 161, 157, 180)
ocakavane <- rep(1024/6, 6)
statistika <- sum((kocky - ocakavane)^2/ocakavane)
statistika
[1] 3.582031
  • Ak testovaná hypotéza platí, táto hodnota by mal byť malá. Pre veľký rozdiel hypotézu zamietame.
  • Čo znamená malý/veľký - ukážeme si simuláciami. Budema simulovať výsledky hodnoty štatistiky, ak nulová hypotéza platí:
sim_kocky <- function(n = 1024){
  vysledok <- sample(1:6, size = n, replace = TRUE)
  vysledok <- factor(vysledok, levels = 1:6)
  pozorovane <- table(vysledok)
  ocakavane <- rep(n/6, 6)
  statistika <- sum((pozorovane - ocakavane)^2/ocakavane)
  return(statistika)
}

set.seed(123)
sim_stat <- replicate(10^5, sim_kocky())
hist(sim_stat)

sum(sim_stat >= statistika)/length(sim_stat)
[1] 0.61255

Vo viac ako 60 percentách prípadov je štatistika aspoň taká veľká ako naša - nenasvedčuje to tomu, že naše dáta sú veľmi odlišné od očakávaných. Hypotézu o pravidelnej kocke nezamietame.

Dostali sme:

sum(sim_stat >= statistika)/length(sim_stat)
[1] 0.61255

Aby sa nemuseli robiť zakaždým simulácie:

mean(sim_stat)
[1] 4.995448
var(sim_stat)
[1] 9.931274

Z teórie sa vie:

  • Testovacia štatistika má asymptoticky chí kvadrát rozdelenie, počet stupňov voľnosti je o 1 menší ako počet tried, do ktorých sa triedia dáta
  • Aproximácia je dobrá, ak je v každej triede očakávaný počet aspoň 5.
# P(chi_kvadrat_5 >= statistika)
1 - pchisq(statistika, df = 5)
[1] 0.6110132

Táto pravdepodobnosť sa nazýva p-hodnota.

  • Ak je p-hodnota malá, hypotéza sa zamieta.
  • Ak je p-hodnota veľká, hypotéza sa nezamieta.

Štandardne sa ako hranica berie 0.05 (teda 5 percent).

Iný prístup: kritická hodnota, ak je štatistika väčšia, tak sa hypotéza zamietne.

qchisq(0.95, df = 5)
[1] 11.0705

Príklad 2: hádzanie kockou II.

Budeme sa zaoberať výsledkami, ktoré pri hádzaní kockou získal Walter F. L. Weldon (1860 – 1906). Ten tvrdil, že väčším počtom bodiek pri týchto hodnotách je spôsobená jej nepravidelnosť. Táto nepravidelnosť by mohla byť taká výrazná, že hodnoty 5 a 6 nebudú padať rovnako často ako ostatné. Pri svojich pokusoch hádzal dvanástimi kockami. Ako “úspech” označil padnutie päťky alebo šestky a zaznamenával počet úspechov v jednotlivých pokusoch. Tých spravil spolu 26306 s nasledujúcimi výsledkami:

Ak je minca pravidelná, tak počet úspechov v pokuse má binomické rozdelenie. Otestujeme chí kvadrát testom dobrej zhody, že hodnoty v tabuľke pochádzajú z tohto rozdelenia.

Poznámky:

  • Kvôli požiadavke na minimálny počet očakávaných úspechov bude potrebné zlúčiť niekoľko posledných riadkov.

  • Pravdepodobnosti binomického rozdelenia v R sa dajú vypočítať funkciou dbinom.

  • Pre zaujímavosť: Tieto dáta analyzoval aj Peason, podľa ktorého je tento test dobrej zhody pomenovaný.

# pre pohodlnejsi vypocet prepisane hodnoty z obrazku
uspechy <- 0:12
pocetnosti <- c(185, 1149, 3265, 5475, 6114, 5194, 3067, 1331, 403, 105, 14, 4, 0)

Testovanie zhody dvoch pravdepodobnostných rozdelení

  • Máme dve sady dát
  • Predpokladáme, že každá z nich je náhodným výberom z určitého rozdelenia
  • Chceme testovať hypotézu, že tieto rozdelenia sú rovnaké

Príklad 3 (Bakalárska práca Experimenty a vlastné dáta pri vyučovaní pravdepodobnosti a štatistiky, 2015)

Rozhodli sme sa pozrieť na dĺžku čakania v rade v dvoch študentmi navštevovaných jedálňach v Mlynskej doline, Eat and Meet a Venza. Oslovili sme niekoľko ľudí a požiadali ich, aby si počas jedného týždňa v čase obeda (11:00 - 14:00) merali na stopkách čas od momentu zaradenia sa do radu až po zaplatenie pri kase. V prípade, ak v jedálni rad utvorený nebol, časomiera sa spustila pri uchopení tácky, či prvej súčasti príboru.

Ukážka dát (v sekundách):

Testovacou štatistikou pre Kolomogorovov-Smirnovov test je maximálny rozdiel medzi distribučnými funkciami odhadnutými z dát. Ak je príliš veľký (väčší ako kritická hodnota), tak sa hypotéza zamietne.

V príklade z BP sa hypotéza o zhode rozdelení nezamietla.

Príklad 4 V jednom z cvičení sa generovali náhodné čísla podľa zadaného algoritmu. Dvaja spolužiaci si chcú porovnať svoje riešenie bez toho, aby si posielali kód. Preto sa rozhodnú porovnať rozdelenie získaných hodnôt. Ak sa ich pravdepodobnostné rozdelenie líši, každý program generuje iné rozdelenie, takže aspoň jeden z postupov je nesprávny. Ak sa rozdelenia zhodujú, budú spokojní, lebo nezávisle od seba by rovnakú chybu asi nespravili.

Otestujeme zhodu rozdelení dát vo vektoroch x1 a x2.

Postup v R: funkcia ks.test

Testovanie zhody dát zo zadaným pravdepodobnostným rozdelením

Príklad 5. Jedno z riešení má strednú hodnotu aj disperziu “podozrivo” blízku jednej. Spolu s histogramom nás to vedie k hypotéze, že by mohlo ísť o exponenciálne rozdelenie so strednou hodnotou 1.

Postup v R: znovu funkcia ks.test

  • Všimnime si, že pri tomto teste majú byť parametre testovaného rozdelenia predne zadané, nie odhadované z dát (metódou maximálnej vierohodnosti a pod.).
  • Toto je predpoklad testu, týmto testom sa teda nedá testovať napríklad hypotéza, že dáta sú “z nejakého normálneho rozdelenia”.
  • Na toto slúži napríklad Lillieforsov test, ktorý je úpravou KS testu pre túto situáciu
  • Existujú aj iné testy an testovanie normality dát (aj iných rozdelení)

Postup v R: funkcia lillie.test z balíka nortest

Príklad 6. Vo vektoroch y1, y2, y3 a y4 sú vygenerované dáta. Zobrazte ich histogramy testujte, či pochádzajú z normálneho rozdelenia.