Loeme sisse ldt.csv
andmestiku, kust eelmisel korral vaatasime reaktsiooniaja seost sõna pikkusega. See mäletatavasti oli statistiliselt oluline seos, mis kirjeldas umbes 35% reaktsiooniaja varieerumisest.
Nüüd proovime, kas mudel läheb paremaks, kui me lisame sinna seletavaid tunnuseid. Üks sõnade äratundmiseks kuluvat reaktsiooniaega mõjutav tunnus võiks lisaks sõna pikkusele olla sõna sagedus: võiks oletada, sagedasemaid sõnu tunneme me ära kiiremini kui vähemsagedasi.
Enne, kui mudelisse lisame, vaatame selle faktori jaotust.
Sagedus on tugevalt paremale kaldu, seda on juba histogrammilt näha. Proovime logaritmida. Kuna siin on 0-sagedusega sõnu ja
## [1] -Inf
siis siin saab kasutada käsku log1p()
, mis liidab algsele väärtusele ühe ja siis logaritmib, vältides nii -Inf väärtuseid.
## [1] 0.0000000 0.6931472 1.0986123
## [1] 0.0000000 0.6931472 1.0986123
Testime normaaljaotust logaritmitud väärtustega:
##
## Shapiro-Wilk normality test
##
## data: log1p(ldt$Freq)
## W = 0.98138, p-value = 0.1699
Logaritmimine aitas, nüüd on tunnus normaalajotusega.
Läheme edasi mudeliga. Mudelis lisatakse sõltumatud tunnused +-märgiga. Kui enne ühe seletava tunnusega mudeli valem oli y ~ x, siis nüüd on see y ~ x1 + x2.
##
## Call:
## lm(formula = Mean_RT ~ Length + log1p(Freq), data = ldt, subset = Mean_RT <
## 1200)
##
## Residuals:
## Min 1Q Median 3Q Max
## -219.823 -58.871 -2.198 44.140 243.543
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 762.232 50.251 15.168 < 2e-16 ***
## Length 18.895 4.265 4.430 2.54e-05 ***
## log1p(Freq) -21.348 3.894 -5.483 3.51e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 87.47 on 94 degrees of freedom
## Multiple R-squared: 0.5048, Adjusted R-squared: 0.4943
## F-statistic: 47.91 on 2 and 94 DF, p-value: 4.509e-15
Vaatame nüüd koefitsientide tabelit (Coefficients)
Me võime mudelit testida, arvutades välja prognoosi seletavate tunnuste keskmiste väärtuste korral ning võrrelda seda reaalse andmestiku keskmisega. Tegelikud keskmised väärtused on:
## Length Freq Mean_RT
## 8.2300 3350.3100 808.2533
paneme need valemisse
RT = 762 + 19 * pikkus - 21 * log1p(sagedus)
## [1] 747.9108
Mudeli prognoose võime muidugi ka otse mudelist lugeda ja valemites rakendada. Vaatame lm()
käsuga saadud objekti, et saada natuke aimu, mis struktuuriga objekt see on:
Käsk str()
aitab ehk kõige paremini lm objekti lahti muukida: tegemist on listilaadse objektiga, kus element “coefficients” on vektor mudeli prognooside väärtustega. Kasutame nüüd neid koefitsentide väärtusi, et arvutada mudeliprognoose. Nii saame arvutada, mis võiks olla reaktsiooniaeg keskmise pikkusega keskmise sagedusega sõna korral:
ldt.mod1$coefficients["(Intercept)"] +
mean(ldt$Length) * ldt.mod1$coefficients["Length"] +
log1p(mean(ldt$Freq)) * ldt.mod1$coefficients["log1p(Freq)"]
## (Intercept)
## 744.4482
Joonistame mudeli põhjal regressioonijooned nii, et teise tunnuse väärtus oleks keskmine, mitte 0.
par(mfcol=c(1,2))
plot(Mean_RT~Length, data=ldt, xlab="Sõna pikkus", ylab="Keskmine reaktsioonikiirus", main="Sõna pikkus")
lines(x=3:15, y= (ldt.mod1$coefficients["(Intercept)"] + 3:15 * ldt.mod1$coefficients["Length"] + log1p(mean(ldt$Freq)) * ldt.mod1$coefficients["log1p(Freq)"]), col="red")
plot(Mean_RT~log1p(Freq), data=ldt, xlab="Sõna sagedus", ylab="Keskmine reaktsioonikiirus", main="Sõna sagedus", axes=F)
lines(x=0:12, y= (ldt.mod1$coefficients["(Intercept)"] + mean(ldt$Length) * ldt.mod1$coefficients["Length"] + 0:12 * ldt.mod1$coefficients["log1p(Freq)"]), col="red")
box(); axis(side=2); axis(side=1, at=0:12, labels = round(exp(0:12)-1))
Samuti arvestame sellega, et sagedus oli logaritmitud, aga joonisel tahaks päris väärtusi näha.
Kui tahame sageduse skaalat joonisele lineaarsena, siis tuleb regressioonijoon joonistada kõverana.
par(mfcol=c(1,1))
plot(Mean_RT~Freq, data=ldt, xlab="Sõna sagedus", ylab="Keskmine reaktsioonikiirus", main="Sõna sagedus", xlim=c(0,5000))
lines(x=0:5000, y= (ldt.mod1$coefficients["(Intercept)"] + mean(ldt$Length) * ldt.mod1$coefficients["Length"] + log1p(0:5000) * ldt.mod1$coefficients["log1p(Freq)"]), col="red")
box(); axis(side=2); axis(side=1, at=0:12, labels = round(exp(0:12)-1))
Peamõju ehk üldefekt toimib mitme tunnusega mudelis teistest tunnustest sõltumatuna. Näiteks kui reaktsiooniaeg sõltub sõna pikkusest ja sagedusest, nagu viimases näites, siis peaks sõna pikkuse efekt olema alati sama suur sõltumata sõna sagedusest ja sõna sageduse efekt alati sama suur sõltumata sõna pikkusest.
Kuid seletavate tunnuste vahel võib ka esineda koosmõju ehk interaktsioon. See tähendab, et ühe tunnuse mõju mõjutab teise tunnuse mõju. Näiteks pikemaid sõnu tuntakse ära aeglasemalt ja sagedasemaid sõnu kiiremini, aga a) pikki sagedasemaid sõnu tuntakse ära sama kiiresti kui lühikesi sagedasi sõnu, või b) lühikesi sagedasi sõnu tuntakse ära eriti kiiresti. Sellisel juhul on lisaks kummagi tunnuse peamõjule ka tunnuste vahel interaktsioon.
Peamõju ja interaktsioon lm()
funktsioonis:
Kõik peamõjude kombinatsioonid võivad anda interaktsiooni:
Peamõjusid võib olla ka rohkem kui kaks. Ja sel juhul võvad interaktsioonid olla ka kõikide kombinatsioonide vahel:
Kui enne vaatasime ainult peamõjudega sõna pikkuse ja sageduse efekti reaktsiooniajale, siis nüüd lisame ka interaktsiooni. R-i lm()
süntaksis võiks selleks lihtsalt plussi (+) tärniga (*), aga kirjutame siin praegu pikalt välja:
ldt.mod2 <- lm(Mean_RT ~ Length + log1p(Freq) +Length:log1p(Freq), data=ldt, subset=Mean_RT < 1200)
summary(ldt.mod2)
##
## Call:
## lm(formula = Mean_RT ~ Length + log1p(Freq) + Length:log1p(Freq),
## data = ldt, subset = Mean_RT < 1200)
##
## Residuals:
## Min 1Q Median 3Q Max
## -220.071 -59.205 -0.926 44.653 243.970
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 771.2282 94.2795 8.180 1.42e-12 ***
## Length 17.8945 9.8342 1.820 0.0720 .
## log1p(Freq) -22.6969 12.5576 -1.807 0.0739 .
## Length:log1p(Freq) 0.1575 1.3934 0.113 0.9103
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 87.93 on 93 degrees of freedom
## Multiple R-squared: 0.5049, Adjusted R-squared: 0.4889
## F-statistic: 31.61 on 3 and 93 DF, p-value: 3.545e-14
Mudeli väljundisse lisandub rida Length:log1p(Freq). Antud juhul see interaktsiooni efekt ei ole oluline, p on suurem kui 0.05.
Kuigi siin näites ei osutunud interaktsioon oluliseks, siis selle mudeli põhjal peaks reaktsiooni aja prognoose arvutama nii:
RT = 771 + 18*pikkus + -23*sagedus + 0.16*pikkus*sagedus
Ja see tähendaks, et reaktsiooniaeg on:
Peamõjud ilma interaktsioonita:
Kui faktorite vahel ei ole interaktsioone, siis on ühe tunnuse regressioonijooned teise tunnuse erinevate tasemete puhul paralleelsed.
Peamõjud interaktsiooniga
Kuna interaktsiooni efekt siin mudelis on väga väike, siis ei ole eriti erinevust näha, aga interaktsiooni mõjul on sagedamate sõnade puhul pikkuse efekt väiksem kui väikese sagedusega sõnade puhul, kõrge sageduse väärtusega (vasakul ülemine) regressioonijoon on väiksema kaldega kui madala sagedusega (vasakul alumine) regressioonijoon).
Mitme faktori ja interaktsiooni efektide kokkuvõtet on võimalik ka ANOVA testiga kirjeldada:
## Analysis of Variance Table
##
## Response: Mean_RT
## Df Sum Sq Mean Sq F value Pr(>F)
## Length 1 503156 503156 65.0754 2.456e-12 ***
## log1p(Freq) 1 229993 229993 29.7460 4.042e-07 ***
## Length:log1p(Freq) 1 99 99 0.0128 0.9103
## Residuals 93 719066 7732
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Occam’s razor ehk __Occami habemenoa printsiip (https://et.wikipedia.org/wiki/Ockhami_habemenuga)__ ütleb, et parim seletus on kõige lihtsam seletus. Occami habemenoa printsiibile toetudes tuleks alati mudelist välja visata kõik, mis ei ole oluline, et mudel oleks võimalikult lihtne.
R-ruut ehk determinatsioonikordaja näitab protsentuaalselt, kui palju uuritava tunnuse varieerumisest mudel kirjeldab. Parem mudel on see, mis rohkem kirjeldab, mille R-ruut on suurem.
R-ruut läheb alati natuke paremaks, kui rohkem seletavaid tunnuseid lisada. Ka siis, kui seletavad tunnused on marginaalse efektiga. Occami habemenoa printsiipi aitab järgida kohandatud R-ruut, mis vähendab R-ruudu väärtust iga seletava tunnuse lisamisel: täiendava tunnuse lisamisest saadav efekt mudeli seletusvõimele peab olema suurem, kui “karistus” selle lisamise eest.
Seega interaktsiooni lisamisest üldine mudeli seletusvõime kasvas küll 0,007%, aga see on liiga vähe, et ühte lisafaktorit mudelisse lisada, mistõttu kohandatud R-ruut langes. Parem mudel on seega ilma interaktsioonita mudel.
Kohandatud R-ruutu vaatame siis, kui mudeleid võrdleme. Siis, kui oleme parima mudeli välja valinud ja raporteerime, kui hea kirjeldusvõimega mudelit esitame, siis peaks vaatama tavalist R-ruutu.
Anova testiga saab ka võrrelda mudeleid, täpsemalt mudeli jääkide (residuals) jaotus. Niimoodi peaks aga võrdlema samal andmestikul põhinevaid ühe faktori võrra erinevaid mudeleid.
## Analysis of Variance Table
##
## Model 1: Mean_RT ~ Length + log1p(Freq)
## Model 2: Mean_RT ~ Length + log1p(Freq) + Length:log1p(Freq)
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 94 719165
## 2 93 719066 1 98.759 0.0128 0.9103
Kui kahe mudeli jääkides ei ole olulist erinevust, siis peaks valima lihtsama mudeli. Kui erinevus on oluline, tähendab see, et mudeli seletusvõime muutus faktori lisamisest oluliselt ja peaks valima keerukama mudeli. Siin võrreldud mudelite ANOVA tulemus on p=0.9 ehk olulist erinevust mudelite vahel pole ja peaksime neist valima lihtsama.
Lähtudes printsiibist, et parim mudel on võimalikult lihtne, peaks mudelist kõik eba- või väheolulise välja viskama. Seda peaks tegema sammhaaval: valima kõige keerukama interaktsiooni ja/või väiksema efektiga tunnuse ning vaatama, kas seda saab välja visata. Toimingut korrata seni, kuni jõuame optimaalse mudelini.
Sageli kasutatakse ka hoopis inkrementaalset meetodit, st alustatakse 0-mudelist, kus ei ole ühtegi seletavat faktorit ning hakatakse ükshaaval lisama tunnuseid ja nende interaktsioone seni, kuni saavutatakse optimaalne mudel. Mõlemal juhul on eesmärk leida võimalikult lihtne, aga samas kõiki olulisi faktoreid sisaldav mudel.
Loeme valimistulemuste andmestiku R-i.
Vaatasime eelmisel korral eraldi soo ja vanuse efekti häältesaagile ja leidsime, et mõlemal faktoril on väike aga oluline efekt. Nüüd võiksime ühes mudelis testida kõiki võimalikke faktoreid ja välja selgitada, millised kirjeldavad häältesaaki kõige paremini. Andmestikus on sellised faktorid, mille seosed on andmestikku lisatud eeldusel, et neil on ehk hääletustulemusega mingi seos:
## [1] "erakondlik_kuuluvus" "haridus"
## [3] "kontaktandmed" "nimekiri_voi_uksikkandidaat"
## [5] "sunniaeg" "tookoht_ja_amet"
## [7] "nimi" "ringkond"
## [9] "kandidaadi_link" "eesnimi"
## [11] "sugu" "nr"
## [13] "e_haaled" "haaled_valisriigist"
## [15] "haali_kokku" "kokku_ringkonnas"
## [17] "haali_kokku_prots_ring" "sodiaak"
Kui meil on rohkem sõltumatuid tunnuseid, mida mudelis testida, on oluline kontrollida, et sõltumatud tunnused ei oleks omavahel liiga tugevasti seotud, sest mitu väga sarnaselt käituvat faktorit teevad mudeli kehvemaks.
## e_haaled haaled_valisriigist kokku_ringkonnas
## e_haaled 1.00000000 0.57115821 0.06475214
## haaled_valisriigist 0.57115821 1.00000000 0.01377868
## kokku_ringkonnas 0.06475214 0.01377868 1.00000000
## nr -0.06060796 0.02979023 -0.04607272
## nr
## e_haaled -0.06060796
## haaled_valisriigist 0.02979023
## kokku_ringkonnas -0.04607272
## nr 1.00000000
Kandidaatide tabelis on erakondlik_kuuluvus
ja nimekiri_voi_uksikkandidaat väga sarnased
, sest enamik kandidaate riigikogu valimistel kandideerib oma erakonna nimekirjas, seega tasuks valida neist üks:
##
## Eesti Keskerakond Eesti Konservatiivne Rahvaerakond
## 116 117
## Eesti Reformierakond Eesti Vabaduspartei - Põllumeeste Kogu
## 125 1
## Eesti Vabaerakond Eestimaa Ühendatud Vasakpartei
## 87 11
## Elurikkuse Erakond Erakond Eesti 200
## 70 79
## Erakond Eestimaa Rohelised Isamaa Erakond
## 59 112
## Sotsiaaldemokraatlik Erakond
## 102
##
## Eesti Keskerakond Eesti Konservatiivne Rahvaerakond
## 125 125
## Eesti Reformierakond Eesti Vabaerakond
## 125 125
## Eestimaa Ühendatud Vasakpartei Elurikkuse Erakond
## 11 73
## Erakond Eesti 200 Erakond Eestimaa Rohelised
## 125 125
## Isamaa Erakond Sotsiaaldemokraatlik Erakond
## 125 125
## Üksikkandidaadid
## 15
Kandidaatide töökohtadest oleks vist liiga keeruline mingit selgete piiridega faktorit kujundada ilma käsitsi sekkumata :(
Kandidaatide kontaktanmded ei moodusta ka faktoriseeritavat tunnust, siis võiks ehk ainult vaadata, kas meiliaadress on või ei ole ja vaadata, kas häältesaak võiks seostuda sellega, kas kandidaat kasutab e-posti või mitte.
## [1] "5056540 andres.herkel@gmail.com"
## [2] "56691750"
## [3] "5012319 jaak.prozes@fennougria.ee"
## [4] "5093067 jaanika.klopets@gmail.com"
## [5] "5028390 jaanus.ojangu@gmail.com"
## [6] "56354614 juri.pino@gmail.com \n Pardi 3-9, Tallinn"
## [1] 1051
Teeme muutuja kasutab_meili binaarse faktorina selle põhjal, kas aadressis esineb “@” sümbol:
kandidaadid$kasutab_meili <- "ei"; kandidaadid$kasutab_meili[grep("@", kandidaadid$kontaktandmed)] <- "jah"
kandidaadid$kasutab_meili <- factor(kandidaadid$kasutab_meili, levels = c("jah","ei"))
Et lisada veel võimalikke kirjeldavaid tunnuseid, tekitame kandidaadi nime põhjal ühe tunnuse, mis võiks kirjeldada nime keerukust: kas nime pikkus (~keerukus) mõjutab häältesaaki :)
Ja lõpetuseks: sünniaeg on date-formaadis, mis võib osutuda tülikaks, selle võiks teisendada vanuseks. Valimised toimusid 2019, nii et arvutame vanuse valimiste ajal.
## [1] "Date" "oldClass"
## [1] "1962-08-14" "1984-09-07" "1965-04-04" "1972-12-10" "1966-09-09"
## [6] "1970-07-03"
Kui mudelil ei ole ühtegi seletavat tunnust, uuritava tunnuse varieerumist seletab tema varieerumine ise, siis sellise mudeli valemiks on y ~ 1.
##
## Call:
## lm(formula = log(haali_kokku) ~ 1, data = kandidaadid, subset = haridus !=
## "Algharidus")
##
## Residuals:
## Min 1Q Median 3Q Max
## -5.0081 -1.1162 0.0026 1.0334 4.8991
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.00805 0.04732 105.8 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.568 on 1097 degrees of freedom
Sõltumatute tunnustena võiks testida:
nimekiri_voi_uksikkandidaat, ringkond, haridus, sugu, vanus
ja nalja pärast ka:
sodiaak, kasutab_meili, nime_pikkus
Aga kuna me eelmisel korral juba vaatasime sugu ja haridust, siis alustame neist.
Esimeseks faktoriks lisame hariduse ja võrdleme seda ANOVA testi abil nullmudeliga.
## Analysis of Variance Table
##
## Model 1: log(haali_kokku) ~ 1
## Model 2: log(haali_kokku) ~ haridus
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 1097 2697.3
## 2 1095 2500.1 2 197.28 43.202 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Faktor haridus muudab mudelit oluliselt, nii et jääb sisse. Vaatame mudeli väljundit:
##
## Call:
## lm(formula = log(haali_kokku) ~ haridus, data = kandidaadid,
## subset = haridus != "Algharidus")
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.3599 -1.0568 0.0468 0.9530 4.6607
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.35993 0.09282 46.971 <2e-16 ***
## haridusKõrgharidus 0.88651 0.10679 8.302 3e-16 ***
## haridusPõhiharidus -1.02977 0.41437 -2.485 0.0131 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.511 on 1095 degrees of freedom
## Multiple R-squared: 0.07314, Adjusted R-squared: 0.07144
## F-statistic: 43.2 on 2 and 1095 DF, p-value: < 2.2e-16
## Analysis of Variance Table
##
## Response: log(haali_kokku)
## Df Sum Sq Mean Sq F value Pr(>F)
## haridus 2 197.27 98.637 43.202 < 2.2e-16 ***
## Residuals 1095 2500.07 2.283
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Lisame teise faktorina soo ning nüüd võrdleme seda mitte nullmudeli vaid eelmise sammuga:
m2 <- lm(log(haali_kokku)~haridus + sugu, data=kandidaadid, subset=haridus!= "Algharidus")
anova(m1, m2)
## Analysis of Variance Table
##
## Model 1: log(haali_kokku) ~ haridus
## Model 2: log(haali_kokku) ~ haridus + sugu
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 1095 2500.1
## 2 1094 2478.5 1 21.547 9.5107 0.002094 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Jällegi on mõju oluline, sugu peaks ka mudelisse jääma. Vaatame mudeli kokkuvõtet ja ANOVAT ka.
##
## Call:
## lm(formula = log(haali_kokku) ~ haridus + sugu, data = kandidaadid,
## subset = haridus != "Algharidus")
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.4398 -1.0472 0.0236 0.9863 4.8537
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.43984 0.09602 46.237 < 2e-16 ***
## haridusKõrgharidus 0.91185 0.10669 8.547 < 2e-16 ***
## haridusPõhiharidus -1.00316 0.41286 -2.430 0.01527 *
## sugunaine -0.29826 0.09671 -3.084 0.00209 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.505 on 1094 degrees of freedom
## Multiple R-squared: 0.08112, Adjusted R-squared: 0.07861
## F-statistic: 32.2 on 3 and 1094 DF, p-value: < 2.2e-16
## Analysis of Variance Table
##
## Response: log(haali_kokku)
## Df Sum Sq Mean Sq F value Pr(>F)
## haridus 2 197.27 98.637 43.5377 < 2.2e-16 ***
## sugu 1 21.55 21.547 9.5107 0.002094 **
## Residuals 1094 2478.52 2.266
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Lisame kahe olulise faktori interaktsiooni ja võrdleme seda ainult peamõjusid sisaldava mudeliga:
m3 <- lm(log(haali_kokku)~haridus + sugu + haridus:sugu, data=kandidaadid, subset=haridus!= "Algharidus")
anova(m2, m3)
## Analysis of Variance Table
##
## Model 1: log(haali_kokku) ~ haridus + sugu
## Model 2: log(haali_kokku) ~ haridus + sugu + haridus:sugu
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 1094 2478.5
## 2 1092 2463.7 2 14.794 3.2787 0.03805 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Ka see on oluline! Vaatame jälle ka mudeli väljundi üle.
##
## Call:
## lm(formula = log(haali_kokku) ~ haridus + sugu + haridus:sugu,
## data = kandidaadid, subset = haridus != "Algharidus")
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.5352 -1.0322 0.0279 0.9414 4.8504
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.5352 0.1078 42.054 < 2e-16 ***
## haridusKõrgharidus 0.7737 0.1260 6.138 1.16e-09 ***
## haridusPõhiharidus -0.6330 0.5122 -1.236 0.21672
## sugunaine -0.6541 0.2083 -3.140 0.00174 **
## haridusKõrgharidus:sugunaine 0.4772 0.2355 2.026 0.04300 *
## haridusPõhiharidus:sugunaine -0.9474 0.8633 -1.097 0.27269
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.502 on 1092 degrees of freedom
## Multiple R-squared: 0.08661, Adjusted R-squared: 0.08243
## F-statistic: 20.71 on 5 and 1092 DF, p-value: < 2.2e-16
Kuidas seda interaktsiooniga mudelit tõlgendama peaks?
Lisame ühe täiendava faktori, näiteks vanuse:
m4 <- lm(log(haali_kokku)~haridus + sugu + haridus:sugu + vanus, data=kandidaadid, subset=haridus!= "Algharidus")
anova(m3, m4)
## Analysis of Variance Table
##
## Model 1: log(haali_kokku) ~ haridus + sugu + haridus:sugu
## Model 2: log(haali_kokku) ~ haridus + sugu + haridus:sugu + vanus
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 1092 2463.7
## 2 1091 2463.7 1 0.023058 0.0102 0.9195
Mudel ei läinud paremaks, nii et see jääb välja, aga vaatame enne mudeli väljundit:
##
## Call:
## lm(formula = log(haali_kokku) ~ haridus + sugu + haridus:sugu +
## vanus, data = kandidaadid, subset = haridus != "Algharidus")
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.5350 -1.0300 0.0265 0.9444 4.8484
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.5179243 0.2020855 22.356 < 2e-16 ***
## haridusKõrgharidus 0.7718122 0.1274698 6.055 1.93e-09 ***
## haridusPõhiharidus -0.6297054 0.5134616 -1.226 0.22032
## sugunaine -0.6544883 0.2084666 -3.140 0.00174 **
## vanus 0.0003709 0.0036707 0.101 0.91953
## haridusKõrgharidus:sugunaine 0.4780132 0.2357734 2.027 0.04286 *
## haridusPõhiharidus:sugunaine -0.9450990 0.8640236 -1.094 0.27427
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.503 on 1091 degrees of freedom
## Multiple R-squared: 0.08662, Adjusted R-squared: 0.0816
## F-statistic: 17.24 on 6 and 1091 DF, p-value: < 2.2e-16
Selle mudeli p-väärtus on endiselt oluline, st ebaoluline faktor ei tee mudelit otseselt halvemaks, aga kuna ta ei tee seda ka paremaks, siis ei ole seda tarvis sinna panna. Nii et vanus jääb välja, selle asemel proovime midagi muud.
Lisame vanuse asemel näiteks nimekirja, kus kandidaat kandideeris. Kuna sel tulbal on tabelis üsna pikk nimi ja mudeli väljundis esineb see tunnus tulba nimega, siis selle võiks välja vahetada millegi lühema vastu nt “nimek”.
colnames(kandidaadid)[4] <- "nimek"
m4 <- lm(log(haali_kokku)~haridus + sugu + haridus:sugu + nimek, data=kandidaadid, subset=haridus!= "Algharidus")
anova(m3, m4)
## Analysis of Variance Table
##
## Model 1: log(haali_kokku) ~ haridus + sugu + haridus:sugu
## Model 2: log(haali_kokku) ~ haridus + sugu + haridus:sugu + nimek
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 1092 2463.7
## 2 1082 1359.8 10 1104 87.847 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
See on jälle väga oluline faktor, jääb sisse!
##
## Call:
## lm(formula = log(haali_kokku) ~ haridus + sugu + haridus:sugu +
## nimek, data = kandidaadid, subset = haridus != "Algharidus")
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.8567 -0.7391 -0.1469 0.6311 3.4952
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.74918 0.12857 44.718 < 2e-16 ***
## haridusKõrgharidus 0.50538 0.09623 5.252 1.81e-07 ***
## haridusPõhiharidus 0.02772 0.38488 0.072 0.9426
## sugunaine -0.06665 0.15743 -0.423 0.6721
## nimekEesti Konservatiivne Rahvaerakond -0.25788 0.14364 -1.795 0.0729 .
## nimekEesti Reformierakond 0.16144 0.14181 1.138 0.2552
## nimekEesti Vabaerakond -2.80746 0.14416 -19.475 < 2e-16 ***
## nimekEestimaa Ühendatud Vasakpartei -2.57966 0.35284 -7.311 5.14e-13 ***
## nimekElurikkuse Erakond -2.14443 0.16593 -12.924 < 2e-16 ***
## nimekErakond Eesti 200 -1.55219 0.14251 -10.891 < 2e-16 ***
## nimekErakond Eestimaa Rohelised -2.31718 0.14474 -16.009 < 2e-16 ***
## nimekIsamaa Erakond -0.58272 0.14200 -4.104 4.37e-05 ***
## nimekSotsiaaldemokraatlik Erakond -0.75939 0.14204 -5.346 1.10e-07 ***
## nimekÜksikkandidaadid -1.72573 0.30809 -5.601 2.70e-08 ***
## haridusKõrgharidus:sugunaine 0.08283 0.17662 0.469 0.6392
## haridusPõhiharidus:sugunaine -0.79832 0.64521 -1.237 0.2162
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.121 on 1082 degrees of freedom
## Multiple R-squared: 0.4959, Adjusted R-squared: 0.4889
## F-statistic: 70.96 on 15 and 1082 DF, p-value: < 2.2e-16
## Analysis of Variance Table
##
## Response: log(haali_kokku)
## Df Sum Sq Mean Sq F value Pr(>F)
## haridus 2 197.27 98.637 78.4888 < 2.2e-16 ***
## sugu 1 21.55 21.547 17.1458 3.731e-05 ***
## nimek 10 1116.15 111.615 88.8154 < 2.2e-16 ***
## haridus:sugu 2 2.62 1.310 1.0426 0.3529
## Residuals 1082 1359.76 1.257
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Miudeli väljundist näeme, et valimisnimekirja lisamine kasvatas väga palju mudeli R-ruutu, enne oli see kuskil 8% kandis, nüüd on 50%. Ja oluline on nüüd tähele panna, et hariduse ja soo interaktsioon on muutunud ebaoluliseks, selle võiks välja visata.
Edasi võiks sammhaaval testida kõik võimalikud kombinatsioonid läbi. Mis on oluline, jääb sisse, mis ei ole, see välja.
Alternatiiv oleks alustada maksimaalsest mudelist, mis oleks:
log(haali_kokku)~ nimek * ringkond * haridus * sugu * vanus * sodiaak * kasutab_meili * nime_pikkus
See sisaldab 8 faktori peamõju, 28 kahe faktori interaktsiooni, 56 kolme faktori interaktsiooni 70 neljast, 56 viiest, 28 kuuest 8 seitsmest ja 1 kaheksa faktori interakstiooni :O
Tõenäoliselt enamik neist interaktsioonidest ja osa peamõjudest ei ole olulised, aga nende läbitestimine on üsna aeganõudev ning nii keeruka mudeli sisukas seletamine võib olla raske.
AIC ehk Aikaike informatsioonikriteerium on alternatiiv R-ruudule hinnata mudeli headust. Erinevalt R-ruudust on tulemus lihtsalt üks number, mis ei paigutu mingile skaalale ja on võrreldav ainult sama andmestiku pealt tehtud mudelite piires. Mida väiksem AIC, seda parem mudel.
## df AIC
## m0 2 4106.847
## m1 4 4027.455
## m2 5 4019.951
## m3 7 4017.377
## m4 17 3384.758
Selle asemel, et ise ükshaaval mudelisse faktoreid juurde lisada või ära võtta ja vahesamme testida, võib seda lasta ka R-il automaatselt teha.
Käsk step()
kasutab Aikaike informatsioonikriteeriumit (AIC), et ehitada samm-sammuliselt faktoreid lisades või eemaldades optimaalne mudel. Proovime leida faktoreid lisades parima mudeli valimistulemuste seletamiseks.
y ~ 1
, see läheb käsu step()
objektiks.scope
, kuhu praegusel juhul paneme maksimaalse mudeli, st kõikide faktorite ja nendevaheliste interaktsioonidega.direction
, mis määrab faktorite lisamise suuna. Variandid on “both”, “backward”, “forward”, siit praegu valime viimase, mis tähendab, et alustatakse kõige väiksemast mudelist ja lisatakse sellele faktoreid seni, kuni mudel ei lähe enam paremaks. “Backward” tähendaks, et alustatakse maksimaalsest ja faktoreid võetakse vähemaks seni, kuni mudel ei lähe enam paremaks, ja nii võib tulemus tulla veidi erinev.## Start: AIC=988.86
## log(haali_kokku) ~ 1
##
## Df Sum of Sq RSS AIC
## + nimek 10 1278.11 1419.2 303.78
## + haridus 2 197.27 2500.1 909.47
## + sugu 1 13.69 2683.7 985.27
## + vanus 1 8.44 2688.9 987.42
## <none> 2697.3 988.86
## + kasutab_meili 1 4.35 2693.0 989.09
## + ringkond 11 50.20 2647.1 990.23
## + nime_pikkus 1 1.14 2696.2 990.40
## + sodiaak 11 13.91 2683.4 1005.18
##
## Step: AIC=303.78
## log(haali_kokku) ~ nimek
##
## Df Sum of Sq RSS AIC
## + haridus 2 56.824 1362.4 262.91
## + ringkond 11 49.166 1370.1 287.06
## + kasutab_meili 1 4.752 1414.5 302.09
## <none> 1419.2 303.78
## + nime_pikkus 1 0.339 1418.9 305.51
## + sugu 1 0.204 1419.0 305.62
## + vanus 1 0.070 1419.2 305.72
## + sodiaak 11 7.810 1411.4 319.72
##
## Step: AIC=262.91
## log(haali_kokku) ~ nimek + haridus
##
## Df Sum of Sq RSS AIC
## + ringkond 11 49.681 1312.7 244.12
## + kasutab_meili 1 3.910 1358.5 261.75
## <none> 1362.4 262.91
## + vanus 1 1.524 1360.9 263.68
## + nime_pikkus 1 0.463 1362.0 264.54
## + sugu 1 0.035 1362.4 264.88
## + sodiaak 11 8.301 1354.1 278.20
## + nimek:haridus 15 11.144 1351.3 283.89
##
## Step: AIC=244.12
## log(haali_kokku) ~ nimek + haridus + ringkond
##
## Df Sum of Sq RSS AIC
## + kasutab_meili 1 3.900 1308.8 242.86
## + vanus 1 3.101 1309.6 243.53
## + nime_pikkus 1 2.948 1309.8 243.65
## <none> 1312.7 244.12
## + sugu 1 0.000 1312.7 246.12
## + sodiaak 11 7.210 1305.5 260.08
## + nimek:haridus 15 10.943 1301.8 264.93
## + ringkond:haridus 19 18.495 1294.2 266.54
## + nimek:ringkond 104 135.181 1177.5 332.80
##
## Step: AIC=242.86
## log(haali_kokku) ~ nimek + haridus + ringkond + kasutab_meili
##
## Df Sum of Sq RSS AIC
## + ringkond:kasutab_meili 11 32.049 1276.8 237.63
## + nime_pikkus 1 2.962 1305.9 242.37
## + vanus 1 2.956 1305.9 242.37
## + nimek:kasutab_meili 10 24.094 1284.7 242.45
## <none> 1308.8 242.86
## + haridus:kasutab_meili 1 0.128 1308.7 244.75
## + sugu 1 0.004 1308.8 244.85
## + sodiaak 11 7.301 1301.5 258.71
## + nimek:haridus 15 11.009 1297.8 263.58
## + ringkond:haridus 19 18.331 1290.5 265.37
## + nimek:ringkond 104 135.345 1173.5 331.00
##
## Step: AIC=237.63
## log(haali_kokku) ~ nimek + haridus + ringkond + kasutab_meili +
## ringkond:kasutab_meili
##
## Df Sum of Sq RSS AIC
## + nimek:kasutab_meili 10 24.880 1251.9 236.03
## + nime_pikkus 1 3.122 1273.7 236.95
## <none> 1276.8 237.63
## + vanus 1 2.232 1274.5 237.71
## + haridus:kasutab_meili 1 0.330 1276.5 239.35
## + sugu 1 0.000 1276.8 239.63
## + sodiaak 11 7.344 1269.4 253.30
## + nimek:haridus 15 11.539 1265.2 257.67
## + ringkond:haridus 19 18.050 1258.7 260.00
## + nimek:ringkond 104 129.439 1147.3 328.26
##
## Step: AIC=236.03
## log(haali_kokku) ~ nimek + haridus + ringkond + kasutab_meili +
## ringkond:kasutab_meili + nimek:kasutab_meili
##
## Df Sum of Sq RSS AIC
## + nime_pikkus 1 2.741 1249.2 235.62
## <none> 1251.9 236.03
## + vanus 1 2.270 1249.6 236.03
## + haridus:kasutab_meili 1 0.366 1251.5 237.71
## + sugu 1 0.003 1251.9 238.02
## + sodiaak 11 6.878 1245.0 251.98
## + nimek:haridus 15 11.058 1240.8 256.28
## + ringkond:haridus 19 17.956 1233.9 258.16
## + nimek:ringkond 103 131.228 1120.7 320.44
##
## Step: AIC=235.62
## log(haali_kokku) ~ nimek + haridus + ringkond + kasutab_meili +
## nime_pikkus + ringkond:kasutab_meili + nimek:kasutab_meili
##
## Df Sum of Sq RSS AIC
## <none> 1249.2 235.62
## + vanus 1 1.477 1247.7 236.32
## + kasutab_meili:nime_pikkus 1 0.502 1248.7 237.18
## + haridus:kasutab_meili 1 0.327 1248.8 237.33
## + sugu 1 0.036 1249.1 237.59
## + haridus:nime_pikkus 2 0.609 1248.5 239.09
## + ringkond:nime_pikkus 11 19.473 1229.7 240.37
## + nimek:nime_pikkus 10 14.529 1234.6 242.77
## + sodiaak 11 6.887 1242.3 251.55
## + nimek:haridus 15 11.711 1237.5 255.28
## + ringkond:haridus 19 17.286 1231.9 258.32
## + nimek:ringkond 103 131.832 1117.3 319.16
Vaatame tulemust:
##
## Call:
## lm(formula = log(haali_kokku) ~ nimek + haridus + ringkond +
## kasutab_meili + nime_pikkus + ringkond:kasutab_meili + nimek:kasutab_meili,
## data = kandidaadid, subset = haridus != "Algharidus")
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.1293 -0.7153 -0.1329 0.6332 3.7208
##
## Coefficients:
## Estimate
## (Intercept) 5.44092
## nimekEesti Konservatiivne Rahvaerakond -0.28775
## nimekEesti Reformierakond 0.16150
## nimekEesti Vabaerakond -2.84599
## nimekEestimaa Ühendatud Vasakpartei -2.65043
## nimekElurikkuse Erakond -2.18665
## nimekErakond Eesti 200 -1.54072
## nimekErakond Eestimaa Rohelised -2.34541
## nimekIsamaa Erakond -0.63709
## nimekSotsiaaldemokraatlik Erakond -0.72119
## nimekÜksikkandidaadid -1.56811
## haridusKõrgharidus 0.52435
## haridusPõhiharidus -0.34776
## ringkondHiiu-, Lääne- ja Saaremaa 0.32273
## ringkondIda-Virumaa -0.40323
## ringkondJõgeva- ja Tartumaa 0.41845
## ringkondJärva- ja Viljandimaa 0.01105
## ringkondLääne-Virumaa 0.12682
## ringkondPärnumaa 0.16910
## ringkondTallinna Haabersti, Põhja-Tallinna ja Kristiine linnaosa 0.12778
## ringkondTallinna Kesklinna, Lasnamäe ja Pirita linnaosa -0.21309
## ringkondTallinna Mustamäe ja Nõmme linnaosa 0.10182
## ringkondTartu linn 0.41812
## ringkondVõru-, Valga- ja Põlvamaa 0.25132
## kasutab_meiliei -2.48172
## nime_pikkus 0.01845
## ringkondHiiu-, Lääne- ja Saaremaa:kasutab_meiliei 1.55596
## ringkondIda-Virumaa:kasutab_meiliei 2.54034
## ringkondJõgeva- ja Tartumaa:kasutab_meiliei 1.19507
## ringkondJärva- ja Viljandimaa:kasutab_meiliei 1.92299
## ringkondLääne-Virumaa:kasutab_meiliei 2.22151
## ringkondPärnumaa:kasutab_meiliei 0.84405
## ringkondTallinna Haabersti, Põhja-Tallinna ja Kristiine linnaosa:kasutab_meiliei 2.08288
## ringkondTallinna Kesklinna, Lasnamäe ja Pirita linnaosa:kasutab_meiliei 2.92783
## ringkondTallinna Mustamäe ja Nõmme linnaosa:kasutab_meiliei 4.68371
## ringkondTartu linn:kasutab_meiliei 2.10071
## ringkondVõru-, Valga- ja Põlvamaa:kasutab_meiliei 2.52140
## nimekEesti Konservatiivne Rahvaerakond:kasutab_meiliei 2.15689
## nimekEesti Reformierakond:kasutab_meiliei 0.29519
## nimekEesti Vabaerakond:kasutab_meiliei 0.93441
## nimekEestimaa Ühendatud Vasakpartei:kasutab_meiliei 1.45515
## nimekElurikkuse Erakond:kasutab_meiliei -0.07019
## nimekErakond Eesti 200:kasutab_meiliei -0.07465
## nimekErakond Eestimaa Rohelised:kasutab_meiliei -0.67888
## nimekIsamaa Erakond:kasutab_meiliei 2.66128
## nimekSotsiaaldemokraatlik Erakond:kasutab_meiliei 0.60304
## nimekÜksikkandidaadid:kasutab_meiliei 1.71880
## Std. Error
## (Intercept) 0.21471
## nimekEesti Konservatiivne Rahvaerakond 0.14287
## nimekEesti Reformierakond 0.14091
## nimekEesti Vabaerakond 0.14295
## nimekEestimaa Ühendatud Vasakpartei 0.36007
## nimekElurikkuse Erakond 0.16491
## nimekErakond Eesti 200 0.14243
## nimekErakond Eestimaa Rohelised 0.14227
## nimekIsamaa Erakond 0.14006
## nimekSotsiaaldemokraatlik Erakond 0.14238
## nimekÜksikkandidaadid 0.32095
## haridusKõrgharidus 0.08193
## haridusPõhiharidus 0.30436
## ringkondHiiu-, Lääne- ja Saaremaa 0.15848
## ringkondIda-Virumaa 0.15671
## ringkondJõgeva- ja Tartumaa 0.15584
## ringkondJärva- ja Viljandimaa 0.15715
## ringkondLääne-Virumaa 0.17702
## ringkondPärnumaa 0.15678
## ringkondTallinna Haabersti, Põhja-Tallinna ja Kristiine linnaosa 0.14089
## ringkondTallinna Kesklinna, Lasnamäe ja Pirita linnaosa 0.13308
## ringkondTallinna Mustamäe ja Nõmme linnaosa 0.14909
## ringkondTartu linn 0.15178
## ringkondVõru-, Valga- ja Põlvamaa 0.14797
## kasutab_meiliei 0.74444
## nime_pikkus 0.01215
## ringkondHiiu-, Lääne- ja Saaremaa:kasutab_meiliei 1.32507
## ringkondIda-Virumaa:kasutab_meiliei 1.44331
## ringkondJõgeva- ja Tartumaa:kasutab_meiliei 0.81705
## ringkondJärva- ja Viljandimaa:kasutab_meiliei 0.89262
## ringkondLääne-Virumaa:kasutab_meiliei 0.72190
## ringkondPärnumaa:kasutab_meiliei 0.72009
## ringkondTallinna Haabersti, Põhja-Tallinna ja Kristiine linnaosa:kasutab_meiliei 0.87167
## ringkondTallinna Kesklinna, Lasnamäe ja Pirita linnaosa:kasutab_meiliei 0.80676
## ringkondTallinna Mustamäe ja Nõmme linnaosa:kasutab_meiliei 1.51660
## ringkondTartu linn:kasutab_meiliei 1.08734
## ringkondVõru-, Valga- ja Põlvamaa:kasutab_meiliei 0.92635
## nimekEesti Konservatiivne Rahvaerakond:kasutab_meiliei 0.83225
## nimekEesti Reformierakond:kasutab_meiliei 0.82895
## nimekEesti Vabaerakond:kasutab_meiliei 0.90578
## nimekEestimaa Ühendatud Vasakpartei:kasutab_meiliei 1.39200
## nimekElurikkuse Erakond:kasutab_meiliei 1.08557
## nimekErakond Eesti 200:kasutab_meiliei 0.71621
## nimekErakond Eestimaa Rohelised:kasutab_meiliei 0.92204
## nimekIsamaa Erakond:kasutab_meiliei 1.18204
## nimekSotsiaaldemokraatlik Erakond:kasutab_meiliei 0.77735
## nimekÜksikkandidaadid:kasutab_meiliei 1.11245
## t value
## (Intercept) 25.341
## nimekEesti Konservatiivne Rahvaerakond -2.014
## nimekEesti Reformierakond 1.146
## nimekEesti Vabaerakond -19.909
## nimekEestimaa Ühendatud Vasakpartei -7.361
## nimekElurikkuse Erakond -13.260
## nimekErakond Eesti 200 -10.818
## nimekErakond Eestimaa Rohelised -16.486
## nimekIsamaa Erakond -4.549
## nimekSotsiaaldemokraatlik Erakond -5.065
## nimekÜksikkandidaadid -4.886
## haridusKõrgharidus 6.400
## haridusPõhiharidus -1.143
## ringkondHiiu-, Lääne- ja Saaremaa 2.036
## ringkondIda-Virumaa -2.573
## ringkondJõgeva- ja Tartumaa 2.685
## ringkondJärva- ja Viljandimaa 0.070
## ringkondLääne-Virumaa 0.716
## ringkondPärnumaa 1.079
## ringkondTallinna Haabersti, Põhja-Tallinna ja Kristiine linnaosa 0.907
## ringkondTallinna Kesklinna, Lasnamäe ja Pirita linnaosa -1.601
## ringkondTallinna Mustamäe ja Nõmme linnaosa 0.683
## ringkondTartu linn 2.755
## ringkondVõru-, Valga- ja Põlvamaa 1.698
## kasutab_meiliei -3.334
## nime_pikkus 1.519
## ringkondHiiu-, Lääne- ja Saaremaa:kasutab_meiliei 1.174
## ringkondIda-Virumaa:kasutab_meiliei 1.760
## ringkondJõgeva- ja Tartumaa:kasutab_meiliei 1.463
## ringkondJärva- ja Viljandimaa:kasutab_meiliei 2.154
## ringkondLääne-Virumaa:kasutab_meiliei 3.077
## ringkondPärnumaa:kasutab_meiliei 1.172
## ringkondTallinna Haabersti, Põhja-Tallinna ja Kristiine linnaosa:kasutab_meiliei 2.390
## ringkondTallinna Kesklinna, Lasnamäe ja Pirita linnaosa:kasutab_meiliei 3.629
## ringkondTallinna Mustamäe ja Nõmme linnaosa:kasutab_meiliei 3.088
## ringkondTartu linn:kasutab_meiliei 1.932
## ringkondVõru-, Valga- ja Põlvamaa:kasutab_meiliei 2.722
## nimekEesti Konservatiivne Rahvaerakond:kasutab_meiliei 2.592
## nimekEesti Reformierakond:kasutab_meiliei 0.356
## nimekEesti Vabaerakond:kasutab_meiliei 1.032
## nimekEestimaa Ühendatud Vasakpartei:kasutab_meiliei 1.045
## nimekElurikkuse Erakond:kasutab_meiliei -0.065
## nimekErakond Eesti 200:kasutab_meiliei -0.104
## nimekErakond Eestimaa Rohelised:kasutab_meiliei -0.736
## nimekIsamaa Erakond:kasutab_meiliei 2.251
## nimekSotsiaaldemokraatlik Erakond:kasutab_meiliei 0.776
## nimekÜksikkandidaadid:kasutab_meiliei 1.545
## Pr(>|t|)
## (Intercept) < 2e-16
## nimekEesti Konservatiivne Rahvaerakond 0.044256
## nimekEesti Reformierakond 0.252005
## nimekEesti Vabaerakond < 2e-16
## nimekEestimaa Ühendatud Vasakpartei 3.68e-13
## nimekElurikkuse Erakond < 2e-16
## nimekErakond Eesti 200 < 2e-16
## nimekErakond Eestimaa Rohelised < 2e-16
## nimekIsamaa Erakond 6.03e-06
## nimekSotsiaaldemokraatlik Erakond 4.81e-07
## nimekÜksikkandidaadid 1.19e-06
## haridusKõrgharidus 2.34e-10
## haridusPõhiharidus 0.253467
## ringkondHiiu-, Lääne- ja Saaremaa 0.041957
## ringkondIda-Virumaa 0.010214
## ringkondJõgeva- ja Tartumaa 0.007364
## ringkondJärva- ja Viljandimaa 0.943931
## ringkondLääne-Virumaa 0.473908
## ringkondPärnumaa 0.280999
## ringkondTallinna Haabersti, Põhja-Tallinna ja Kristiine linnaosa 0.364631
## ringkondTallinna Kesklinna, Lasnamäe ja Pirita linnaosa 0.109630
## ringkondTallinna Mustamäe ja Nõmme linnaosa 0.494767
## ringkondTartu linn 0.005976
## ringkondVõru-, Valga- ja Põlvamaa 0.089711
## kasutab_meiliei 0.000887
## nime_pikkus 0.129184
## ringkondHiiu-, Lääne- ja Saaremaa:kasutab_meiliei 0.240563
## ringkondIda-Virumaa:kasutab_meiliei 0.078686
## ringkondJõgeva- ja Tartumaa:kasutab_meiliei 0.143859
## ringkondJärva- ja Viljandimaa:kasutab_meiliei 0.031443
## ringkondLääne-Virumaa:kasutab_meiliei 0.002143
## ringkondPärnumaa:kasutab_meiliei 0.241408
## ringkondTallinna Haabersti, Põhja-Tallinna ja Kristiine linnaosa:kasutab_meiliei 0.017045
## ringkondTallinna Kesklinna, Lasnamäe ja Pirita linnaosa:kasutab_meiliei 0.000298
## ringkondTallinna Mustamäe ja Nõmme linnaosa:kasutab_meiliei 0.002066
## ringkondTartu linn:kasutab_meiliei 0.053632
## ringkondVõru-, Valga- ja Põlvamaa:kasutab_meiliei 0.006599
## nimekEesti Konservatiivne Rahvaerakond:kasutab_meiliei 0.009685
## nimekEesti Reformierakond:kasutab_meiliei 0.721832
## nimekEesti Vabaerakond:kasutab_meiliei 0.302492
## nimekEestimaa Ühendatud Vasakpartei:kasutab_meiliei 0.296095
## nimekElurikkuse Erakond:kasutab_meiliei 0.948461
## nimekErakond Eesti 200:kasutab_meiliei 0.917010
## nimekErakond Eestimaa Rohelised:kasutab_meiliei 0.461727
## nimekIsamaa Erakond:kasutab_meiliei 0.024564
## nimekSotsiaaldemokraatlik Erakond:kasutab_meiliei 0.438065
## nimekÜksikkandidaadid:kasutab_meiliei 0.122634
##
## (Intercept) ***
## nimekEesti Konservatiivne Rahvaerakond *
## nimekEesti Reformierakond
## nimekEesti Vabaerakond ***
## nimekEestimaa Ühendatud Vasakpartei ***
## nimekElurikkuse Erakond ***
## nimekErakond Eesti 200 ***
## nimekErakond Eestimaa Rohelised ***
## nimekIsamaa Erakond ***
## nimekSotsiaaldemokraatlik Erakond ***
## nimekÜksikkandidaadid ***
## haridusKõrgharidus ***
## haridusPõhiharidus
## ringkondHiiu-, Lääne- ja Saaremaa *
## ringkondIda-Virumaa *
## ringkondJõgeva- ja Tartumaa **
## ringkondJärva- ja Viljandimaa
## ringkondLääne-Virumaa
## ringkondPärnumaa
## ringkondTallinna Haabersti, Põhja-Tallinna ja Kristiine linnaosa
## ringkondTallinna Kesklinna, Lasnamäe ja Pirita linnaosa
## ringkondTallinna Mustamäe ja Nõmme linnaosa
## ringkondTartu linn **
## ringkondVõru-, Valga- ja Põlvamaa .
## kasutab_meiliei ***
## nime_pikkus
## ringkondHiiu-, Lääne- ja Saaremaa:kasutab_meiliei
## ringkondIda-Virumaa:kasutab_meiliei .
## ringkondJõgeva- ja Tartumaa:kasutab_meiliei
## ringkondJärva- ja Viljandimaa:kasutab_meiliei *
## ringkondLääne-Virumaa:kasutab_meiliei **
## ringkondPärnumaa:kasutab_meiliei
## ringkondTallinna Haabersti, Põhja-Tallinna ja Kristiine linnaosa:kasutab_meiliei *
## ringkondTallinna Kesklinna, Lasnamäe ja Pirita linnaosa:kasutab_meiliei ***
## ringkondTallinna Mustamäe ja Nõmme linnaosa:kasutab_meiliei **
## ringkondTartu linn:kasutab_meiliei .
## ringkondVõru-, Valga- ja Põlvamaa:kasutab_meiliei **
## nimekEesti Konservatiivne Rahvaerakond:kasutab_meiliei **
## nimekEesti Reformierakond:kasutab_meiliei
## nimekEesti Vabaerakond:kasutab_meiliei
## nimekEestimaa Ühendatud Vasakpartei:kasutab_meiliei
## nimekElurikkuse Erakond:kasutab_meiliei
## nimekErakond Eesti 200:kasutab_meiliei
## nimekErakond Eestimaa Rohelised:kasutab_meiliei
## nimekIsamaa Erakond:kasutab_meiliei *
## nimekSotsiaaldemokraatlik Erakond:kasutab_meiliei
## nimekÜksikkandidaadid:kasutab_meiliei
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.09 on 1051 degrees of freedom
## Multiple R-squared: 0.5369, Adjusted R-squared: 0.5166
## F-statistic: 26.49 on 46 and 1051 DF, p-value: < 2.2e-16
## Analysis of Variance Table
##
## Response: log(haali_kokku)
## Df Sum Sq Mean Sq F value Pr(>F)
## nimek 10 1278.11 127.811 107.5359 < 2.2e-16 ***
## haridus 2 56.82 28.412 23.9048 7.039e-11 ***
## ringkond 11 49.68 4.516 3.8000 2.258e-05 ***
## kasutab_meili 1 3.90 3.900 3.2816 0.070347 .
## nime_pikkus 1 2.96 2.962 2.4923 0.114702
## ringkond:kasutab_meili 11 32.21 2.928 2.4636 0.004807 **
## nimek:kasutab_meili 10 24.50 2.450 2.0612 0.024942 *
## Residuals 1051 1249.16 1.189
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Tulemuseks saadud mudelis ei pruugi kõik faktorid olla olulised p-väärtuse poolest, sest mudeleid võrreldakse ainult AIC põhjal.
R-i baaspaketi käsk anova()
arvutab ainult esimest tüüpi ANOVA-t, mis põhineb lineaarsel mudelil, kus faktori üks tase on baastasemeks ja kõiki teisi tasemeid võrreldakse baastaseme väärtusega. Kui meil aga ei ole üheselt defineeritavat baastaset ja me tahame rühmi võrrelda rühmaülese keskmise suhtes, siis sobib selleks paremini kolmandat tüüpi ANOVA. Paketis car
on käsk Anova()
(NB! suure algustähega), millel on rohkem valikuid kui baaspaketis.
# kui sul pole see pakett alla laetud, siis kõigepealt installi
# install.packages("car")
library(car)
## Loading required package: carData
## Anova Table (Type III tests)
##
## Response: log(haali_kokku)
## Sum Sq Df F value Pr(>F)
## (Intercept) 3990.2 1 1768.5709 < 2.2e-16 ***
## haridus 97.8 2 21.6741 5.876e-10 ***
## sugu 22.2 1 9.8577 0.001737 **
## haridus:sugu 14.8 2 3.2787 0.038049 *
## Residuals 2463.7 1092
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Vaatame Tukey HSD tulemust mudeliga, kus on kahe faktori peamõjud ja nende vaheline interaktsioon:
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = log(haali_kokku) ~ haridus + sugu + haridus:sugu, data = kandidaadid, subset = haridus != "Algharidus")
##
## $haridus
## diff lwr upr
## Kõrgharidus-Keskharidus (sh keskeriharidus) 0.8865119 0.6373791 1.13564458
## Põhiharidus-Keskharidus (sh keskeriharidus) -1.0297743 -1.9964842 -0.06306436
## Põhiharidus-Kõrgharidus -1.9162861 -2.8664479 -0.96612435
## p adj
## Kõrgharidus-Keskharidus (sh keskeriharidus) 0.0000000
## Põhiharidus-Keskharidus (sh keskeriharidus) 0.0335883
## Põhiharidus-Kõrgharidus 0.0000075
##
## $sugu
## diff lwr upr p adj
## naine-mees -0.2964824 -0.4852892 -0.1076756 0.0021137
##
## $`haridus:sugu`
## diff
## Kõrgharidus:mees-Keskharidus (sh keskeriharidus):mees 0.77369590
## Põhiharidus:mees-Keskharidus (sh keskeriharidus):mees -0.63304216
## Keskharidus (sh keskeriharidus):naine-Keskharidus (sh keskeriharidus):mees -0.65413385
## Kõrgharidus:naine-Keskharidus (sh keskeriharidus):mees 0.59673935
## Põhiharidus:naine-Keskharidus (sh keskeriharidus):mees -2.23461586
## Põhiharidus:mees-Kõrgharidus:mees -1.40673806
## Keskharidus (sh keskeriharidus):naine-Kõrgharidus:mees -1.42782975
## Kõrgharidus:naine-Kõrgharidus:mees -0.17695655
## Põhiharidus:naine-Kõrgharidus:mees -3.00831176
## Keskharidus (sh keskeriharidus):naine-Põhiharidus:mees -0.02109169
## Kõrgharidus:naine-Põhiharidus:mees 1.22978152
## Põhiharidus:naine-Põhiharidus:mees -1.60157370
## Kõrgharidus:naine-Keskharidus (sh keskeriharidus):naine 1.25087321
## Põhiharidus:naine-Keskharidus (sh keskeriharidus):naine -1.58048201
## Põhiharidus:naine-Kõrgharidus:naine -2.83135521
## lwr
## Kõrgharidus:mees-Keskharidus (sh keskeriharidus):mees 0.4138731
## Põhiharidus:mees-Keskharidus (sh keskeriharidus):mees -2.0951656
## Keskharidus (sh keskeriharidus):naine-Keskharidus (sh keskeriharidus):mees -1.2489066
## Kõrgharidus:naine-Keskharidus (sh keskeriharidus):mees 0.1987404
## Põhiharidus:naine-Keskharidus (sh keskeriharidus):mees -4.1768376
## Põhiharidus:mees-Kõrgharidus:mees -2.8481673
## Keskharidus (sh keskeriharidus):naine-Kõrgharidus:mees -1.9697411
## Kõrgharidus:naine-Kõrgharidus:mees -0.4905112
## Põhiharidus:naine-Kõrgharidus:mees -4.9350029
## Keskharidus (sh keskeriharidus):naine-Põhiharidus:mees -1.5383262
## Kõrgharidus:naine-Põhiharidus:mees -0.2216485
## Põhiharidus:naine-Põhiharidus:mees -3.9933244
## Kõrgharidus:naine-Keskharidus (sh keskeriharidus):naine 0.6828955
## Põhiharidus:naine-Keskharidus (sh keskeriharidus):naine -3.5645236
## Põhiharidus:naine-Kõrgharidus:naine -4.7655396
## upr
## Kõrgharidus:mees-Keskharidus (sh keskeriharidus):mees 1.13351866
## Põhiharidus:mees-Keskharidus (sh keskeriharidus):mees 0.82908128
## Keskharidus (sh keskeriharidus):naine-Keskharidus (sh keskeriharidus):mees -0.05936113
## Kõrgharidus:naine-Keskharidus (sh keskeriharidus):mees 0.99473830
## Põhiharidus:naine-Keskharidus (sh keskeriharidus):mees -0.29239411
## Põhiharidus:mees-Kõrgharidus:mees 0.03469120
## Keskharidus (sh keskeriharidus):naine-Kõrgharidus:mees -0.88591838
## Kõrgharidus:naine-Kõrgharidus:mees 0.13659810
## Põhiharidus:naine-Kõrgharidus:mees -1.08162064
## Keskharidus (sh keskeriharidus):naine-Põhiharidus:mees 1.49614280
## Kõrgharidus:naine-Põhiharidus:mees 2.68121153
## Põhiharidus:naine-Põhiharidus:mees 0.79017697
## Kõrgharidus:naine-Keskharidus (sh keskeriharidus):naine 1.81885092
## Põhiharidus:naine-Keskharidus (sh keskeriharidus):naine 0.40355954
## Põhiharidus:naine-Kõrgharidus:naine -0.89717078
## p adj
## Kõrgharidus:mees-Keskharidus (sh keskeriharidus):mees 0.0000000
## Põhiharidus:mees-Keskharidus (sh keskeriharidus):mees 0.8190969
## Keskharidus (sh keskeriharidus):naine-Keskharidus (sh keskeriharidus):mees 0.0214345
## Kõrgharidus:naine-Keskharidus (sh keskeriharidus):mees 0.0002924
## Põhiharidus:naine-Keskharidus (sh keskeriharidus):mees 0.0134362
## Põhiharidus:mees-Kõrgharidus:mees 0.0604392
## Keskharidus (sh keskeriharidus):naine-Kõrgharidus:mees 0.0000000
## Kõrgharidus:naine-Kõrgharidus:mees 0.5913273
## Põhiharidus:naine-Kõrgharidus:mees 0.0001331
## Keskharidus (sh keskeriharidus):naine-Põhiharidus:mees 1.0000000
## Kõrgharidus:naine-Põhiharidus:mees 0.1505630
## Põhiharidus:naine-Põhiharidus:mees 0.3954551
## Kõrgharidus:naine-Keskharidus (sh keskeriharidus):naine 0.0000000
## Põhiharidus:naine-Keskharidus (sh keskeriharidus):naine 0.2055641
## Põhiharidus:naine-Kõrgharidus:naine 0.0004525
Tukey HSD test annab kõikide faktori tasemete vaheliste paaride võrdlused. Keerulisema ja rohketasemelise faktori korral võib see väljund olla üsna pikk ja kirju. Tavaliselt post-hoc testi tulemusi ei raporteerita tabelina vaid tehakse sellest teksti sees üldistusi või korjatakse sealt välja võrdlused, mis on sisuliselt huvitavad.
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 771.2282027 94.279541 8.1802286 1.422446e-12
## Length 17.8944667 9.834225 1.8196112 7.203563e-02
## log1p(Freq) -22.6968893 12.557574 -1.8074263 7.392896e-02
## Length:log1p(Freq) 0.1574769 1.393383 0.1130177 9.102602e-01