Zdrojový soubor pro Knit: Rmd soubor
Na úvod si vyskúšajte v programe RStudio otvoriť podkladový
Rmd soubor súbor a skompilovať ho
pomocou tlačítka Knit (pre správne fungovanie, resp.
zobrazenie kódovania diakritiky, je nutné súbor otvoriť v kódovaní UTF8
– pomocou ponuky “Reopen with encoding” v menu programu).
Tento krok síce nie je nutný, ale jeho bezproblemové zvládnutie sa
môže ukázať byť užitočné pri spracovaní samostatnej zápočtovej práce
budúci týždeň (hlavne v prípade študentov, ktorý sa rozhodnú zadanie
spracovať v zdrojovom súbore samotného zadania).
Užitočné materiály pre prácu so štatistickým programom
R
Pre účely tohto cvičenia využijeme dva konkrétne datové súbory a
niektoré dodatočné funkcie (resp. Rkové príkazy), ktoré do programu R
načítame pomocou nasledujúceho kódu (funkcie v rámci skriptu
functions.RData budú k dispozícii aj pre samostatnú prácu –
ich účelom je hlavne zjednodušiť a prípadne zrýchliť prácu).
load(url("http://msekce.karlin.mff.cuni.cz/~maciak/NMFM301/cv5_data.RData"))
load(url("http://msekce.karlin.mff.cuni.cz/~maciak/NMFM301/functions2.RData"))
K dispozíci sú dva datové súbory, zam a
sex. Data zam pocházejí ze sociálního průzkumu
provedeného v ČR v roce 2004 a datový súbor sex predstavuje
menší pod-výber z výsledkov dotazníkového sociálneho šetrenia v
Spojených štátoch, ktorého cieľom bolo zistiť mieru sexuálnej aktivity
medzi mladými ľudmi.
Zaujímať nás bude niekoľko konkrétnych otázok, ktoré sa dajú formulovať v zmysle použitia určitého štatistického testu. Doležitý je správny výber pravdepodobnostného modelu a explicitná formulácia otázky pomocou nulovej a alternatívnej hypotézy, testovej štatistiky a celkového rozdnutia (t.j., zamítam/nezamítam nulovou hypotézu).
Samotnej voľbe pravdepodobnostného modelu (t.j., konkrétneho štatistického testu) samozrejme predchádza exploratívna analýza pomocou vhodných popisných charakteristík (t.j., odhadov konkrétnych, ale neznámych parametrov) a obrázkov.
Datové súbory zam a sex si prohlédněte
poklepáním na příslušný řádek v okénku “Workspace” (v RStudio) nebo
pomoci příkazů summary(), head(),
str(), a pod. (v konzole programu R). Pomocou niekoľkých
obrázkov a grafov preskúmajte charakter a štruktúru dat – vždy s ohľadom
na kladenú teoretickú otázku.
Nyní budeme pracovat s datovým souborem sex. Tento
soubor obsahuje informace o sexuálním životě \(n = 4467\) Američanů starších 20 let.
Obsahuje veličiny/proměnné active (byl někdy respondent
sexuálně aktivní?), veksex (věk sexuální iniciace – pouze u
aktivních), pocpart (počet partnerů v průběhu života),
pocpart.rok (počet partnerů za uplynulý rok) a dále
demografická data (věk, pohlaví, vzdělání, rodinný status).
Jako první porovnáme věk při prvním pohlavním styku mužů a žen.
Začneme deskriptivní statistikou (empirické odhady konkrétnych teoretických parametrov0 a ich vhodnou vizualizíciou pomocou grafov a obrázkov. Napr.:
boxplot(veksex~pohl,data=sex, col = "lightblue")
Prípadne pre lepšiu názornosť ten istý boxplot s cenzorovanou osou ‘y’:
boxplot(veksex~pohl,data=sex, col = "lightblue", ylim = c(5,30))
Boxplot zobrazuje robustné charakteristiky spočítané z náhodného výberu – odhad neznámeho (teoretického) mediánu v celej populaci, odhad prvního a třetího kvartilu (t.j., okraje boxplot krabice) nebo informaci o prípadných odlehlých pozorovaniach. Takýto boxplot ale môžeme doplniť aj o odhady menej robustných charakteristík – napr. odhad teoretickej strednej hodnoty:
boxplot(veksex~pohl,data=sex, col = "lightblue", ylim = c(5,30), xlab = "Pohlavie respondenta", ylab = "Vek [v rokoch]")
lines(c(0.5, 1.5), rep(mean(sex$veksex[sex$pohl == "Male"], na.rm = T), 2), col = "red", lwd = 3)
lines(c(1.5, 2.5), rep(mean(sex$veksex[sex$pohl == "Female"], na.rm = T), 2), col = "red", lwd = 3)
Průměry v závislosti na pohlaví, prípadne výberové mediány, rozptyly,
či směrodatné chyby pro obě pohlaví spočítame (resp. odhadneme neznáme
teoretické parametre strednej hodnoty, medianu, rozptylu a směrodatnej
chyby) aj pomocou funkcie tapply (argument
na.rm = TRUE říká, že se mají vynechat chybějící hodnoty
veličiny veksex).
tapply(sex$veksex,sex$pohl,mean,na.rm=TRUE)
## Male Female
## 17.35301 17.90112
tapply(sex$veksex,sex$pohl,median,na.rm=TRUE)
## Male Female
## 17 17
tapply(sex$veksex,sex$pohl,var,na.rm=TRUE)
## Male Female
## 18.23625 15.54390
tapply(sex$veksex,sex$pohl,sd,na.rm=TRUE)
## Male Female
## 4.270392 3.942575
Ještě můžeme vykřeslit průměry věku iniciace a příslušné intervaly spolehlivosti (pro \(\alpha = 0.05\), což je defaultní nastavení funkce) pro střední věk iniciace pro obě pohlaví.
plotmeans2(veksex~pohl,data=sex,xlab="Pohlaví",ylab="Průmerný věk sexuální iniciace", ylim = c(17, 18.2))
abline(17.6, 0, lty = 2)
Na pôvodnej škále osi \(y\) (ako to bolo v prípade boxplotov) je tento rozdíl ale v podstatě nepatrný – napriek tomu sa ale asi bude jednat o statisticky významný rozdíl, kedže intervaly spolehlivosti se vzájemne nepřekrývají.
plotmeans2(veksex~pohl,data=sex,xlab="Pohlaví",ylab="Průmerný věk sexuální iniciace", ylim = c(5, 30))
Môžeme ješte porovnat empirické distribuční funkce pro věk iniciace v obou skupinách:
plot(ecdf(sex$veksex[sex$pohl=="Male"]),col="blue",cex.points=0.5,verticals=TRUE,
main="Sexualni iniciace")
lines(ecdf(sex$veksex[sex$pohl=="Female"]),col="red",cex.points=0.5,verticals=TRUE)
legend(40,0.4,lty=1,col=c("blue","red"),legend=c("Muzi","Zeny"))
Nasvědčují podle vás popisné statistiky a grafy tomu, že se věk
iniciace mužů a žen může lišit (myslené statisticky průkazně
líšit)?
Formálne rozhodnutie o tom, či sa vek sexuálnej iniciácie u mužov a
žien líši, je potrebné urobiť na základe korektného štatistického testu
– v tomto prípade vhodného dvojvýberového testu. K dispozícii je ale
samozrejme množstvo rôzných modelov (štatistických testov), resp.
testovacích postupoch. Každý model, resp. štatistický test, má ale svoje
(teoretické) predpoklady, určitú silu voči konkrétnym alternatívam a
prípadne rôzne ďalšie výhody a nevýhody. Toto všetko by malo byť pri
voľbe konkrétneho testu nejak zohľadnené. Vo väčšine prípadov sa ale
nedá jednoznačne povedať, ktorý model, resp. štatistický test, je tym
najlepším, resp. jediným správnym modelom.
Výber konkrétneho testu by mal byť preto dostatočne dobre
zdôvodnený.
Za akých predpokladov sú formulované nasledujúce testy? Ako je
definovaná nulová a alternatívni hypotéza? Ktorý z uvedených testov
považujete pre tento konkrétny problém jako najvhodnější? Vysvětlete
proč?
Dvouvýběrový Kolmogorovův-Smirnovův test testuje rovnost
distribučních funkcí věku iniciace mužů a žen. Jeho testová statistika
je \[
K_{n,m}=\sup_{x\in\mathbb{R}}\left|\widehat{F}_{X}(x)-\widehat{F}_{Y}(x)\right|.
\] Výsledky nám spočítá funkce ks.test().
ks.test(sex$veksex[sex$pohl=="Male"],sex$veksex[sex$pohl=="Female"])
Opět dostáváme varování o výskytu shodných hodnot. Věk iniciace
zaokrouhlený na kalendářní rok fakticky není spojitá veličina, proto
bychom Kolmogorovův-Smirnovův test raději neměli používat. Nicméně,
p-hodnota je velice malá, kdybychom tomuto testu věřili navzdory
porušeným předpokladům, zamítli bychom hypotézu o rovnosti distribučních
funkcí s velkou rezervou.
Proveďme nyní dvouvýběrový t-test na rovnost středních hodnot. Tento test ale predpokladá normálne rozdelenie a navyše aj zhodnosť rozptylov. Testová statistika pro hypotézu \(H_0: \mu_X=\mu_Y\) je \[ T_{n,m}=\sqrt{\frac{mn}{n+m}}\,\frac{\overline{X}_{n}-\overline{Y}_{m}}{S_{n,m}}, \] kde \[ S^2_{n,m}=\frac{n-1}{n+m-2}S^2_{X}+\frac{m-1}{n+m-2}S^2_{Y} \] je nestranný odhad společného rozptylu spočítaný z obou výběrů. Testová štatistika má za platnosti nulovej hypotézy študentovo \(t\) rozdelenie s \(n + m - 2\) stup+nami voľnosti. Štandardne ale tento test předpokládá normalitu jednotlivých náhodných výberov a shodné rozptyly. Ani jeden předpoklad není nejspíš splněn, i když porušení normality by při takhle velkém počtu pozorování vadit nemělo (test by fungoval alespoň asymptoticky). Test spočítame pomocou funkcie \(t.test()\).
t.test(sex$veksex[sex$pohl=="Male"],sex$veksex[sex$pohl=="Female"],var.equal=TRUE)
Všimněte si, že výstup funkce t.test zahrnuje i 95%-ní
interval spolehlivosti pro rozdíl středního věku iniciace mužů a žen. To
je užitočné hlavne pre interpretáciu výsledku testu v prípade, že nulové
hypotéza je zamietnutá,
Mono by bylo lépe využít dvouvýběrový z-test, který nepožaduje
rovnosť rozptylov. Príslušná testová statistika je \[
Z_{n,m}=\frac{\overline{X}_{n}-\overline{Y}_{m}}{\sqrt{S^2_X/n+S^2_Y/m}}.
\] Takáto testová statistika má za platnosti nulovej hypotézy
opět studentovo \(t\) rozdělení, ale
počet stupňu volnosti není \(n + m -
2\), ale stupn+e volnosti jsou spočítaný pomoci tzv. Welchovej
aproximace. Tento test získame pomoci funkce t.test(), v
níž vynecháme argument var.equal=TRUE (požadující shodnost
rozptylů).
t.test(sex$veksex[sex$pohl=="Male"],sex$veksex[sex$pohl=="Female"])
V prípade, že není opodstatnený ani predpoklad normality, ale lze
předpokládat konečnost druhých momentov (t.j. , možnosť využitia
centrálnej limitnej vety), tak je možné aplikovať tzv. z-test, ktorý je
založený na rovnakej testovej štatistike, ale príslušný kritický obor a
p-hodnota sú počítané pouze približne, resp. asymptoticky, s využitím
normálneho rozdelenia \(N(0,1)\).
Dvouvýběrový Wilcoxonův test testuje shodnost rozdělení (za
předpokladu, že platí model posunutí v poloze), obecně jde o test
hypotézy \(H_0: P[X_i\lt Y_j]=1/2\).
Tento test počítá funkce wilcox.test. Testová statistika je
\[
W^*_{n,m}=\sum_{i=1}^n\sum_{j=1}^m \mathbb{I}_{\{X_i\lt Y_j\}},
\] tj. odpovídá Mann-Whitneyho formulaci Wilcoxonova testu.
Kritické hodnoty a p-hodnoty se počítají normální aproximací.
wilcox.test(sex$veksex[sex$pohl=="Male"],sex$veksex[sex$pohl=="Female"],correct=FALSE)
Argument correct=FALSE zabraňuje provedení tzv. opravy
na spojitost, kterou jsme do testové statistiky nezařazovali, ale R ji
normálně provádí. Také Wilcoxonův test zamítá nulovou hypotézu. Výstup
Wilcoxonova testu však neudává žádný odhad (bodový ani intervalový)
rozdílu mezi porovnávanými populacemi.
Existuje samozrejme množstvo dalších variant dvojvýberových testov, ktoré možu byt opoužité pre testovanie zmienenej nulovej a alternatívnej hypotézy. Jednou z možnosti je napr. tzv. Kuiperův test, ktorý vychádza z podobného princípu porovnania empirických distribučných funkcií, ako je to u Kolmogorov-Smirnovho testu (více napr. stručne tu https://en.wikipedia.org/wiki/Kuiper%27s_test).
V programe R je tento test implementovaný v knižnici
kuiper.2samp’ (pre inštaláciu knižnice nutné použíť príkaz
install.packages("kuiper.2samp’")).
library("kuiper.2samp’")
kuiper.2samp(sex$veksex[sex$pohl=="Male"],sex$veksex[sex$pohl=="Female"])
Metóda analýzy rozptylu (z anglického The Analysis of Variance -
ANOVA) nám umožňuje ověřit, zda na nějaku (spojitou) hodnotu náhodné
veličiny má statisticky významný vliv hodnota jinej náhodnej veličiny
(diskrétnej). Táto diskrétní veličina (resp. charakteristika, nebo znak)
musí nabývat pouze konečného počtu možných hodnot (nejméně dvou – teda
napr. \(K \in \mathbb{N}\), pro \(K \geq 2\)). Slouží teda k rozdělení
jedinců do \(K\) disjunktných skupin,
které pak pomoci ANOVA vzájemně porovnávame. V podstate sa jedná o tzv.
K-výběrový problém. Metóda ANOVA teda predstavuje zobecnenie
dvojvýberových testovacích problémov pre viacvýberové problémy.
Pripomeňte asi teoretické základy metódy analýzy rozptylu - ANOVA. Na
základe akých predpokladov metóda funguje a pro testy akých hypotéz je
navrhnutá? Ako by ste metódu ANOVA aplikovali na niektorý z uvažovaných
datových súborov?
V tejto úlohe budeme používať datový súbor zam, ktorý
predstavuje podsúbor jedincov pocházejích ze sociálního průzkumu
provedeného v ČR v roce 2004. Úroveň vzdelania v tejto úlohe budeme
sledovať pomocou premennej eduyrs, ktorá zaznamenáva počet
rokov strávených štúdiom u každého subjektu zvlášť. Na jednotlivé
populácie – definované miestom trvalého bydliska – sa možeme pozrieť
napr. pomocou boxplotu.
levels(zam$domicil) <- c("Big City", "Suburbs", "Town/City", "Village", "Countryside")
cols <- rainbow(5, start = 0, end = 0.1)
boxplot(zam$eduyrs ~ zam$domicil, col = cols, main = "Dlzka vzdelania v rokoch")
Metóda ANOVA ale vo svojej základnej verzii predstavuje zobecnenie dvojvýberového \(t\)-testu (t.j., za predpokladu normality náhodných výberov a taktiež za predpokladu zhodnosti rozptylov). V podstate sa jedna o test nulovej hypotézy \[ H_0: \mu_1 = \mu_2 = \dots = \mu_K \]
oproti alternatíve, že alespoň jedna z uvedených rovností neplatí.
Test je založený na ``datech’’, ktoré predstavujú \(K\) nezávislých náhodných výberov \(\{X_{k, 1}, \dots, X_{k, n_k}\}_{k =
1}^K\), kde \(n_k \in
\mathbb{N}\) je velikost (rozsah) \(k\)-teho náhodného výberu a plati, že \(X_{k, i} \sim N(\mu_k, \sigma^2)\), pro
\(i = 1, \dots, n_k\) a \(k = 1, \dots, K\). Parametre \(\mu_{k} \in \mathbb{R}\) predstavují
neznáme střední hodnoty.
V boxplote vyššie príslušné odhady neznámych stredných hodnôt \(\mu_1, \dots, \mu_K\) ale nevidíme. Môžeme ich ale jednoducho získať (spolu s príslušnými odhadmi směrodatných chýb) napr. pomocou príkazov:
tapply(zam$eduyrs, zam$domicil,mean)
## Big City Suburbs Town/City Village Countryside
## 12.66859 12.72464 12.20735 11.73840 11.50000
tapply(zam$eduyrs, zam$domicil,sd)
## Big City Suburbs Town/City Village Countryside
## 2.484313 2.599180 2.328049 2.182007 2.880972
Prvé štyri poplulácie sa zdajú byť pomerne rovnaké čo sa týka
školskej dochádzky (v rokoch je to rádovo 12 rokov), ale vidiecké
lokality vykazujú v priemere o niečo nižiu mieru vzdelanosti (približne
o pol roka) a zároveň sledujeme najväčšiu variabilitu (a aj vychýlenie
smerom k nižším hodnotám). Pripomeňme, že klasická metóda ANOVA
predpokladá rovnosť teoretických rozptylov.
Tieto zistenia budeme nateraz ignorovať (metóda ANOVA totíž funguje
aj na asymptotickom princípe a s modifikáciou pre rôzne rozptyly) a
pomocou analýzy rozptylu sa pokúsime zistiť, či je rozdiel, ktorý medzi
jednotlivými skupinami sledujeme, štatisticky významný, alebo nie.
Využijeme k tomu najprv príkaz aov() (pre podrobnú
implementáciu príkazu použijte help, t.j. ?aov). štandardne
dostupný v programe R.
aov(zam$eduyrs ~ zam$domicil)
## Call:
## aov(formula = zam$eduyrs ~ zam$domicil)
##
## Terms:
## zam$domicil Residuals
## Sum of Squares 319.82 15219.46
## Deg. of Freedom 4 2794
##
## Residual standard error: 2.333922
## Estimated effects may be unbalanced
Vyššie uvedený príkaz porovnajte ešte s výstupom nižšie, ktorý
získame dvoj-kombináciou iných dvoch príkazov – anova() a
lm():
anova(lm(zam$eduyrs ~ zam$domicil))
## Analysis of Variance Table
##
## Response: zam$eduyrs
## Df Sum Sq Mean Sq F value Pr(>F)
## zam$domicil 4 319.8 79.955 14.678 7.183e-12 ***
## Residuals 2794 15219.5 5.447
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Pokúste sa zreprodukovať jednotlivé hodnoty, ktoré sú obsiahnuté vo
výstupoch a pripomeňte si základne teoretické princípy metódy ANOVA.
Ako je definovaná testová štatistika? Aké rozdelenie za
platnosti nulovej hypotézy testová štatistika má? Aký je výsledok testu
a aká je interpretácia vzhľadom k pôvodnej otázke? Je možné z výsledkov
testu určiť, kde a ako sa jednotlivé (sub-)populácie od seba líšia?
manuálna rekoknštrukcia testu:
X1 <- zam$eduyrs[zam$domicil == "A big city"] ### 1. nahodny vyber
X2 <- zam$eduyrs[zam$domicil == "Suburbs or outskirts of big city"] ### 2. nahodny vyber
X3 <- zam$eduyrs[zam$domicil == "Town or small city"] ### 3. nahodny vyber
X4 <- zam$eduyrs[zam$domicil == "Country village"] ### 4. nahodny vyber
X5 <- zam$eduyrs[zam$domicil == "Farm or home in countryside"] ### 5. nahodny vyber
Príslušné odhady stretných hodnôt pre jednotlivé skupiny aj celkový súbor:
mean1 <- mean(X1)
mean2 <- mean(X2)
mean3 <- mean(X3)
mean4 <- mean(X4)
mean5 <- mean(X5)
meanTotal <- mean(zam$eduyrs)
Počty pozorovaní v jednotlivých náhodných výberoch:
n1 <- length(X1)
n2 <- length(X2)
n3 <- length(X3)
n4 <- length(X4)
n5 <- length(X5)
N <- n1 + n2 + n3 + n4 + n5
Pomocou vyššie spočítaných hodnôt už môžeme zrekonštruovať jednotlivé
hodnoty vo výstupoch príkazov aov(...) a
anova(lm(...)):
### Sum of squares:
(SS <- sum(c(n1, n2, n3, n4, n5) * (c(mean1, mean2, mean3, mean4, mean5) - meanTotal)^2))
## [1] NaN
### Residuals:
(SE <- sum((X1 - mean1)^2) + sum((X2 - mean2)^2) + sum((X3 - mean3)^2) + sum((X4 - mean4)^2) + sum((X5 - mean5)^2))
## [1] 0
### Mean Squares:
SS / 4
## [1] NaN
SE / 2794
## [1] 0
Testová štatistika \(F = 79.955\) je definovaná ako podiel stredných štvorcov, teda hodnoty \(79.955\) a hodnoty \(5.447\) a má Fisherovo \(F\) rozdelenie so \(4\) a \(2794\) stupňami voľnosti. Uvedená \(p\)-hodnota je teda spočítaná ako:
1 - pf(14.678, df1 = 4, df2 = 2794)
## [1] 7.185696e-12
Odpoveď budeme opäť zisťovať pomocou metódy analýzy rozptylu. Najprv sa ale pozrieme na obe populácie (mužov a ženy) pomocou grafických nástrojov. Využijeme boxplot
boxplot(zam$eduyrs ~ zam$gndr, col = c("lightblue","pink"), main = "Dlzka vzdelania v rokoch")
prípadne histogram
par(mfrow = c(1,2))
hist(zam$eduyrs[zam$gndr == "Male"], col = "lightblue", xlab = "Roky stravene na skole", main = "Males", breaks = 10)
hist(zam$eduyrs[zam$gndr == "Female"], col = "pink", xlab = "Roky stravene na skole", main = "Females", breaks = 10)
Možeme skúsiť porovnať aj empirický odhad hustoty (neparametrický) s
odhadom hustoty založenom na predpoklade, že rozdelenia sú oba normálne,
a líšía sa iba vrámci parametru strednej hodnoty (homoskedasticita),
prípadne aj rozptylu (heteroskedasticita). Analogické porovanie je možné
urobiť aj vzhľadom k distribučným funciám.
Histogramy a hustoty:
par(mfrow = c(1,2))
hist(zam$eduyrs[zam$gndr == "Male"], col = "lightblue", xlab = "Roky stravené vzdelávaním", main = "Males", freq = F, ylim = c(0, 0.35), xlim = c(5,25), breaks = 20)
lines(density(zam$eduyrs[zam$gndr == "Male"], adjust = 3), col = "red", lwd = 2)
lines(dnorm(seq(0,30, length = 1000), mean(zam$eduyrs[zam$gndr == "Male"]), sd(zam$eduyrs)) ~ seq(0,30, length = 1000), col = "blue", lwd = 1, lty = 2)
lines(dnorm(seq(0,30, length = 1000), mean(zam$eduyrs[zam$gndr == "Male"]), sd(zam$eduyrs[zam$gndr == "Male"])) ~ seq(0,30, length = 1000), col = "green", lwd = 1, lty = 2)
legend(15, 0.35, c("Empirical", "Homoscedastic", "Heteroscedastic"), col = c("red", "blue", "green"), lty = c(1,2,2), cex = 0.8)
hist(zam$eduyrs[zam$gndr == "Female"], col = "pink", xlab = "Roky stravené vzdelávaním", main = "Females", freq = F, ylim = c(0,0.35), xlim = c(5,25), breaks = 20)
lines(density(zam$eduyrs[zam$gndr == "Female"], adjust = 3), col = "red", lwd = 2)
lines(dnorm(seq(0,30, length = 1000), mean(zam$eduyrs[zam$gndr == "Female"]), sd(zam$eduyrs)) ~ seq(0,30, length = 1000), col = "blue", lwd = 1, lty = 2)
lines(dnorm(seq(0,30, length = 1000), mean(zam$eduyrs[zam$gndr == "Female"]), sd(zam$eduyrs[zam$gndr == "Female"])) ~ seq(0,30, length = 1000), col = "green", lwd = 1, lty = 2)
legend(15, 0.35, c("Empirical", "Homoscedastic", "Heteroscedastic"), col = c("red", "blue", "green"), lty = c(1,2,2), cex = 0.8)
Empirické a teoretické distribučné funkcie:
par(mfrow = c(1,2))
plot(ecdf(zam$eduyrs[zam$gndr == "Male"]), col = "lightblue", xlab = "Roky stravené vzdelávaním", main = "Males", xlim = c(5, 25))
lines(pnorm(seq(0,30, length = 1000), mean(zam$eduyrs[zam$gndr == "Male"]), sd(zam$eduyrs)) ~ seq(0,30, length = 1000), col = "blue", lwd = 2, lty = 1)
lines(pnorm(seq(0,30, length = 1000), mean(zam$eduyrs[zam$gndr == "Male"]), sd(zam$eduyrs[zam$gndr == "Male"])) ~ seq(0,30, length = 1000), col = "green", lwd = 2, lty = 2)
legend(17, 0.25, c("Empirical", "Homoscedastic", "Heteroscedastic"), col = c("red", "blue", "green"), lty = c(1,2,2), cex = 0.8)
plot(ecdf(zam$eduyrs[zam$gndr == "Female"]), col = "pink", xlab = "Roky stravené vzdelávaním", main = "Females", xlim = c(5,25))
lines(pnorm(seq(0,30, length = 1000), mean(zam$eduyrs[zam$gndr == "Female"]), sd(zam$eduyrs)) ~ seq(0,30, length = 1000), col = "blue", lwd = 2, lty = 1)
lines(pnorm(seq(0,30, length = 1000), mean(zam$eduyrs[zam$gndr == "Female"]), sd(zam$eduyrs[zam$gndr == "Female"])) ~ seq(0,30, length = 1000), col = "green", lwd = 2, lty = 2)
legend(17, 0.25, c("Empirical", "Homoscedastic", "Heteroscedastic"), col = c("red", "blue", "green"), lty = c(1,2,2), cex = 0.8)
Pomocou vhodného štatistického testu sa pozrieme, či je rozdiel, ktorý prostredníctvom histogramov sledujeme, statistický významný, alebo je zanedbateľný. Test založíme na vyhodnotení rozptylu v jednotlivých skupinách - tzv. metoda analýzy rozptylu - ANOVA.
anova(lm(zam$eduyrs ~ zam$gndr))
## Analysis of Variance Table
##
## Response: zam$eduyrs
## Df Sum Sq Mean Sq F value Pr(>F)
## zam$gndr 1 120 120.049 21.777 3.207e-06 ***
## Residuals 2797 15419 5.513
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Keďže porovnávame iba dve populácie, môžeme použiť aj klasický dvojvýberový postup.
t.test(zam$eduyrs ~ zam$gndr, var.equal = T)
##
## Two Sample t-test
##
## data: zam$eduyrs by zam$gndr
## t = 4.6665, df = 2797, p-value = 3.207e-06
## alternative hypothesis: true difference in means between group Male and group Female is not equal to 0
## 95 percent confidence interval:
## 0.2408303 0.5898852
## sample estimates:
## mean in group Male mean in group Female
## 12.41004 11.99468
Ktoré výsledky sú vo výstupe analýzy rozptylu a t.testu rovnaké a
prečo? Aká je interpretácia výsledkov vzhľadom k pôvodnej otázke?
Neparametrická verzia metódy analýzy rozptylu – porovnávanie
niekoľkých skupín – je implementována v programe R pomocou funkcie
kruskal.test(). Pripomeňte si, s akým modelom (t.j.,
predpokladmi) Kruskal-Wallisov test pracuje. Vpodstate sa jedná o test
nulovej hypotézy
\[ H_{0}:~F_1(x) = F_2(x) = \dots = F_K(x), \quad \textrm{pre všetky hodnoty $x \in \mathbb{R}$} \] na základe (vzájomne nezávislých) náhodných výberov \(X_{k 1}, \dots, X_{k n_k} \sim F_k\), kde \(k = 1, \dots, K \in \mathbb{N}\) a \(n_k \in \mathbb{N}\) (teda pre aspoň \(K \geq 2\) rôznych skupín).
Alternatvívna hypotéza je formulovaná tak, že aspoň jeden náhodný výber sa od ostatných líší – mysleno v zmysle toho, že distribučná funkcia (aka rozdelenie) niektorého náhodného výberu sa líši od rozdelenia ostatných náhodných vyberov. Uvedomte si, že za platnosti nulovej hypotézy tvoria všetky pozorovania t.j. \(X_{1,1}, \dots, X_{K,n_K}\) dohromady jeden náhodný výber (t.j., súbor nezávislých a rovnako rozdelených náhodných veiičín).
Implementácia v programe R:
kruskal.test(zam$eduyrs ~ zam$domicil)
##
## Kruskal-Wallis rank sum test
##
## data: zam$eduyrs by zam$domicil
## Kruskal-Wallis chi-squared = 59.495, df = 4, p-value = 3.703e-12