Eelmisel korral vaatasime keeleteaduse andmestikku esimeneisik.RData
ning püüdsime seletada, kuidas sõltub eesti murretes asesõna mina/ma esinemine koos tegusõnaga sellest, kas tegusõnal on vormiliselt ka 1. isiku pöördelõpp -n või mitte. Saime teada, et asesõna esinemise šanss on pöördelõpuga tegusõnaga (ma olen) koos väiksem kui siis, kui tegusõnal pöördelõppu ei ole (ma ole).
Vaatame sel korral sama andmestiku suuremat versiooni ja lisame mudelisse nüüd ka teisi seletavaid tunnuseid.
Esmalt laadime andmestiku.
Tuletame meelde, mis tunnused andmestikus on.
summary(isik1suur)
## Sone Lemma Pron Lopp Aeg
## Length:4066 olema : 637 ei :1893 ei :1627 ipf:2636
## Class :character minema : 257 jah:2173 jah:2439 pr :1430
## Mode :character käima : 232
## ütlema : 224
## tegema : 191
## saama : 184
## (Other):2341
## Ref_kaugus_num Ref_kaugus_klass Verbiklass Murre
## Min. : 0.000 Length:4066 kognitiivne : 316 IDA : 436
## 1st Qu.: 2.000 Class :character kommunikatiivne: 319 KESK :1081
## Median : 4.000 Mode :character muu :3431 RANNA : 522
## Mean : 6.797 SAARTE:1308
## 3rd Qu.: 9.000 VORU : 719
## Max. :29.000
##
## Fail
## Length:4066
## Class :character
## Mode :character
##
##
##
##
Selles andmestikus on võrreldes eelmisega mitu korda rohkem vaatlusi ning ka kaks uut tunnust:
Ref_kaugus_num
on kaugus eelmisest 1. isiku viitest (sõnast ma/mina või 1. isiku tegusõnavormist) tekstis (sõnades).Ref_kaugus_klass
on faktor, mis grupeerib teatud kauguste klassid.Kõigepealt tegime mudeli, milles oli ainsa seletava tunnusena tegusõna pöördelõpp Lopp
.
m1.glm <- glm(Pron ~ Lopp, data = isik1suur, family = "binomial")
summary(m1.glm)
##
## Call:
## glm(formula = Pron ~ Lopp, family = "binomial", data = isik1suur)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.5066 -1.0740 0.8807 1.2844 1.2844
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.74711 0.05308 14.07 <2e-16 ***
## Loppjah -0.99520 0.06696 -14.86 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 5617.4 on 4065 degrees of freedom
## Residual deviance: 5387.3 on 4064 degrees of freedom
## AIC: 5391.3
##
## Number of Fisher Scoring iterations: 4
Lisame mudelisse lisaks tunnusele Lopp
ka tunnuse Aeg
, mis näitab, kas tegusõna vorm, millega asesõna võiks koos esineda, on minevikus ((ma) sõin) või olevikus (ma söön). Testime alustuseks jälle uuritava ja seletava tunnuse omavahelist sõltuvust.
chisq.test(isik1suur$Pron, isik1suur$Aeg)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: isik1suur$Pron and isik1suur$Aeg
## X-squared = 65.868, df = 1, p-value = 4.823e-16
Kuna testi p-väärtus on väike, siis võime järeldada, et asesõna kasutamine on seotud sellega, kas räägime oleviku või tulevikusündmustest. Hii-ruut-testi võib nimetada ühetunnuseliseks analüüsiks. Kui sellega saab olulise seose, siis on suur tõenäosus, et seletaval tunnusel on mingi mõju ka mitme tunnusega regressioonimudelis, ehkki teised seletavad tunnused võivad selle seose vahel ka varju jätta: interaktsioonideta mudelis on tegu sisuliselt omavahel võistlevate tunnustega (milline tunnus seletab uuritava tunnuse varieerumist rohkem/paremini). See aga, kui hii-ruut-test annab ebaolulise tulemuse, ei tähenda tingimata, et seletaval tunnusel ei oleks uuritavale tunnusele mõju mingi teise tunnusega koosmõjus (nt interaktsioonina).
Mitme tunnusega mudeli tegemine käib logistilises regressioonis samamoodi nagu lineaarses: seletavate tunnuste peamõjud lisatakse mudelisse plussmärgiga.
# Teeme mudeli
m2.glm <- glm(Pron ~ Lopp + Aeg, data = isik1suur, family = "binomial")
# Uurime mudeli väljundit
summary(m2.glm)
##
## Call:
## glm(formula = Pron ~ Lopp + Aeg, family = "binomial", data = isik1suur)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.6965 -0.9840 0.7358 1.1203 1.3840
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.55896 0.05697 9.811 <2e-16 ***
## Loppjah -1.03257 0.06788 -15.212 <2e-16 ***
## Aegpr 0.60933 0.06926 8.797 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 5617.4 on 4065 degrees of freedom
## Residual deviance: 5308.3 on 4063 degrees of freedom
## AIC: 5314.3
##
## Number of Fisher Scoring iterations: 4
Kui lineaarses regressioonis näitab mudeli väljund kohe ka seda, kas mudel tervikuna on statistiliselt oluline või mitte, siis glm-mudelite pere (Generalized Linear Models), kuhu kuulub ka logistiline regressioon, mudelile ise p-väärtust ei omista. Küll aga on võimalik see p-väärtus välja arvutada n-ö “käsitsi” funktsiooniga pchisq()
, kasutades nullmudeli (ilma seletavate tunnusteta mudeli) ning tunnustega mudeli hälbimuse näitajaid (deviance) ja vabadusastmete arvu (df).
pchisq(q = m2.glm$null.deviance-m2.glm$deviance,
df = m2.glm$df.null-m2.glm$df.residual,
lower.tail = FALSE)
## [1] 7.86229e-68
Vaatame kõigepealt koefitsiente.
1. Vabaliige (Intercept
)
Lopp = "ei"
ja Aeg = "ipf"
ehk nt Ma oli) võiks asesõna esinemise šansid olla suuremad kui selle mitteesinemise šansid.exp(m2.glm$coefficients[["(Intercept)"]])
ehk ~1.75. Kuna šanss on >1, siis see tähendab, et asesõna tõenäosus esineda selles kontekstis on suurem kui tõenäosus mitte esineda.exp(m2.glm$coefficients[["(Intercept)"]])/(1+exp(m2.glm$coefficients[["(Intercept)"]]))
ehk ~0.64. Seega asesõna mitte-esinemise tõenäosus on 1-0.64=0.36
.2. Tegusõna pöördelõpp (Loppjah
)
-1.03257
. Mäletatavasti näitavad seletavate tunnuste koefitsiendid erinevalt vabaliikme koefitsiendist mitte enam šansi logaritmi, vaid šansisuhte logaritmi, mis võrdleb uut seletavate tunnuste konfiguratsiooni vana, baastaseme konfiguratsiooniga. Teisisõnu näitab koefitsient logaritmi sellest, kui mitu korda on uues kontekstis asesõna esinemise šanss suurem kui vanas, baastasemete kontekstis. Uus kontekst siin tähendab olukorda, kus seletav tunnus Aeg
on endiselt baastasemel (Aeg = "ipf"
), aga Lopp
on nüüd Lopp = "jah"
(nt Ma olin). Kuna koefitsient on negatiivne, võib järeldada, et uues kontekstis/konfiguratsioonis on asesõna esinemise šanss väiksem kui baastasemel.exp(-1.03257)
või exp(m2.glm$coefficients[["Loppjah"]])
ehk ~0.36. See tähendab, et asesõna esinemise šanss kontekstis, kus tegusõna on minevikus ja tegusõnal on pöördelõpp -n (Ma olin), on 0.36 korda “suurem” kui asesõna esinemise šanss kontekstis, kus tegusõna on minevikus ja tegusõnal ei ole pöördelõppu (Ma oli). Eelmisel korral rääkisime sellest, et kui miski on millestki suurem nullist väiksem arv kordi, siis on ta tegelikult väiksem.exp(m2.glm$coefficients[["(Intercept)"]] + m2.glm$coefficients[["Loppjah"]])
ehk ~0.62. Kuna šanss on < 1, on selles kontekstis tegelikult asesõna mitteesinemine tõenäolisem.0.62/(1+0.62)
või pikalt välja kirjutades exp(m2.glm$coefficients[["(Intercept)"]] + m2.glm$coefficients[["Loppjah"]])/(1+exp(m2.glm$coefficients[["(Intercept)"]] + m2.glm$coefficients[["Loppjah"]]))
ehk ~0.38. Asesõna mitte-esinemise tõenäosus on seega 1-0.38=0.62
.Lopp
koefitsient on statistiliselt oluline (p-väärtus on <2e-16) ehk pöördelõpu tasemete vahel on statistiliselt oluline erinevus selles, kas asesõna pigem väljendatakse või mitte.3. Tegusõna ajavorm (Aegpr
)
0.60933
. See näitab logaritmi sellest, kui mitu korda on uues kontekstis asesõna esinemise šanss baastasemete kontekstist suurem sellises kontekstis, kus seletav tunnus Lopp
on baastasemel (Lopp = "ei"
), aga Aeg
on nüüd Aeg = "pr"
(nt Ma ole). Kuna koefitsient on positiivne, võib järeldada, et uues kontekstis/konfiguratsioonis on asesõna esinemise šanss suurem kui baastasemel.exp(0.60933)
või exp(m2.glm$coefficients[["Aegpr"]])
ehk ~1.84. See tähendab, et asesõna esinemise šanss kontekstis, kus tegusõna on olevikus ja tegusõnal puudub pöördelõpp (Ma ole), on 1.84 korda suurem kui asesõna esinemise šanss kontekstis, kus tegusõna on minevikus ja tegusõnal ei ole pöördelõppu (Ma oli).exp(m2.glm$coefficients[["(Intercept)"]] + m2.glm$coefficients[["Aegpr"]])
ehk ~3.22. Kuna šanss on > 1, on selles kontekstis tegelikult asesõna esinemine tõenäolisem kui selle mitteesinemine.3.22/(1+3.22)
või pikalt välja kirjutades exp(m2.glm$coefficients[["(Intercept)"]] + m2.glm$coefficients[["Aegpr"]])/(1+exp(m2.glm$coefficients[["(Intercept)"]] + m2.glm$coefficients[["Aegpr"]]))
ehk ~0.76. Asesõna mitte-esinemise tõenäosus on seega 1-0.76=0.24
.Aeg
koefitsient on statistiliselt oluline (p-väärtus on <2e-16) ehk ajavormi tasemete vahel on statistiliselt oluline erinevus selles, kas asesõna pigem väljendatakse või mitte.Aga mis on asesõna kasutamise šansid ja tõenäosused kontekstis, kus tegusõna on olevikus ja tal on ka pöördelõpp (ma olen)? Selle teadasaamiseks liidame kõik koefitsiendid.
exp(m2.glm$coefficients[["(Intercept)"]] +
m2.glm$coefficients[["Loppjah"]] +
m2.glm$coefficients[["Aegpr"]])
## [1] 1.145367
Sellises kontekstis on asesõna kasutamise šanss 1.145 ehk asesõna kasutamise tõenäosus on 1.145 korda suurem kui asesõna mittekasutamise tõenäosus. Asesõna kasutamise tõenäosus selles kontekstis on 1.145/(1+1.145)
või pikemalt exp(m2.glm$coefficients[["(Intercept)"]] + m2.glm$coefficients[["Loppjah"]] + m2.glm$coefficients[["Aegpr"]])/(1+exp(m2.glm$coefficients[["(Intercept)"]] + m2.glm$coefficients[["Loppjah"]] + m2.glm$coefficients[["Aegpr"]]))
ehk ~0.53. Asesõna mittekasutamise tõenäosus on seega 1-0.53=0.47
Võrdleme uuesti kõiki võimalikke šansse:
Kõige tõenäolisemalt esineb mina/ma koos tegusõnaga siis, kui tegusõna on olevikus ja ilma pöördelõputa (ma ole). Kõige vähem tõenäoliselt esineb asesõna siis, kui tegusõna on minevikus ja pöördelõpuga.
Äkki mõjutab asesõna esinemist nt see, kui pikk tegusõnavorm on? Võime püstitada üldistest kognitiivse protsessimise tendentsidest lähtuvalt hüpoteesi, et mida pikem on tegusõnavorm, seda tõenäolisemalt kasutatakse tegusõnaga koos ka asesõna, selleks et viide isikule oleks kergemini tuvastatav.
Kuna meil sõnede pikkuseid veel tabelis ei ole, tuleb andmeid natuke eeltöödelda. Murdekorpuse tekstides on palju trankriptsioonimärke, mis meid sõnapikkuste kokkulugemisel ei huvita.
# Vaatame, mis sümboleid ja kui palju
# sõnades üldse on
table(unlist(strsplit(isik1suur$Sone, "")))
##
## ' - # ( ) * . ` + a b d e g h
## 858 13 9 242 532 528 183 945 914 2 1665 22 134 1235 226 171
## i j k l m n o p q r s t u v w õ
## 3321 124 1108 2045 196 2935 1045 314 9 182 1799 1603 501 316 2 383
## ä ö ü y
## 878 115 258 4
# Kustutame ebavajalikud sümbolid.
# Selleks asendame need mitte millegagi.
isik1suur$Sone <- gsub("['#()\\*\\.`]", "", isik1suur$Sone)
# Arvutame tegusõnade pikkuse tähemärkides
isik1suur$Sonepikkus <- nchar(isik1suur$Sone)
# Vaatame tabeli kokkuvõtet
summary(isik1suur)
## Sone Lemma Pron Lopp Aeg
## Length:4066 olema : 637 ei :1893 ei :1627 ipf:2636
## Class :character minema : 257 jah:2173 jah:2439 pr :1430
## Mode :character käima : 232
## ütlema : 224
## tegema : 191
## saama : 184
## (Other):2341
## Ref_kaugus_num Ref_kaugus_klass Verbiklass Murre
## Min. : 0.000 Length:4066 kognitiivne : 316 IDA : 436
## 1st Qu.: 2.000 Class :character kommunikatiivne: 319 KESK :1081
## Median : 4.000 Mode :character muu :3431 RANNA : 522
## Mean : 6.797 SAARTE:1308
## 3rd Qu.: 9.000 VORU : 719
## Max. :29.000
##
## Fail Sonepikkus
## Length:4066 Min. : 2.00
## Class :character 1st Qu.: 4.00
## Mode :character Median : 5.00
## Mean : 5.07
## 3rd Qu.: 6.00
## Max. :17.00
##
Tundub, et kõige lühem tegusõna andmestikus on ainult 2 tähemärgi pikkune, kõige pikem aga 11 tähemärgi pikkune. Keskmiselt jääb sõnade pikkus aga umbes 5 tähemärgi kanti.
Teeme nüüd uue, kolme seletava tunnusega mudeli.
m3.glm <- glm(Pron ~ Lopp + Aeg + Sonepikkus, data = isik1suur, family = "binomial")
summary(m3.glm)
##
## Call:
## glm(formula = Pron ~ Lopp + Aeg + Sonepikkus, family = "binomial",
## data = isik1suur)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.7619 -1.0853 0.6899 1.0590 1.7967
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 1.24799 0.12217 10.216 < 2e-16 ***
## Loppjah -0.88266 0.07161 -12.327 < 2e-16 ***
## Aegpr 0.50547 0.07124 7.095 1.29e-12 ***
## Sonepikkus -0.14645 0.02283 -6.413 1.42e-10 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 5617.4 on 4065 degrees of freedom
## Residual deviance: 5266.3 on 4062 degrees of freedom
## AIC: 5274.3
##
## Number of Fisher Scoring iterations: 4
Kuidas nüüd tulemusi tõlgendada? Kas vabaliikme väärtus on tähenduslik?
Vabaliige väärtusega 1.24799
ennustab asesõna esinemise logaritmitud šansse, KUI
Lopp = "ei"
),Aeg = "ipf"
),Sonepikkus = 0
)…Vabaliige sellisena järelikult väga palju ei tähenda, kuna 0-tähelisi sõnu ei saa olemas olla.
Aeg
: asesõna esinemise šansid kasvavad, kui tegusõnavorm on olevikus.Lopp
: asesõna esinemise šansid kahanevad, kui tegusõna vormil on pöördelõpp.Sonepikkus
: asesõna esinemise šansid kahanevad tegusõnavormi pikkuse kasvades.Teeme nüüd mudeli, kus lisaks on ka arvuline tunnus Ref_kaugus_num
. Tunnuse lisamise eelduseks võiks olla hüpotees, et mida kaugemal on kontekstis eelnev viide 1. isikule, seda tõenäolisemalt võiks asesõna koos verbivormiga esineda.
m4.glm <- glm(Pron ~ Lopp + Aeg + Sonepikkus + Ref_kaugus_num, data = isik1suur, family = "binomial")
summary(m4.glm)
##
## Call:
## glm(formula = Pron ~ Lopp + Aeg + Sonepikkus + Ref_kaugus_num,
## family = "binomial", data = isik1suur)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -2.2074 -1.0815 0.6576 1.0506 1.8628
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.927360 0.127165 7.293 3.04e-13 ***
## Loppjah -0.915868 0.072600 -12.615 < 2e-16 ***
## Aegpr 0.539332 0.072205 7.470 8.05e-14 ***
## Sonepikkus -0.145554 0.023040 -6.317 2.66e-10 ***
## Ref_kaugus_num 0.048690 0.005256 9.263 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 5617.4 on 4065 degrees of freedom
## Residual deviance: 5175.3 on 4061 degrees of freedom
## AIC: 5185.3
##
## Number of Fisher Scoring iterations: 4
Ka kaugus eelmises viitest 1. isikule tundub olevat statistiliselt oluline tegur asesõna kasutamise seletamisel. Asesõna kasutamise šanss ja tõenäosus kasvab, mida kaugemal on eelmine 1. isiku viide.
Kui tõenäoline on selle mudeli põhjal, et järgmises kontekstis esineks paksus kirjas tegusõnaga ka asesõna mina/ma (jättes praegu kõrvale olulise teadmise, et meil on tegemist murrete andmetel põhineva mudeliga ja näitekontekst on kirjakeelne):
Ja siis ma olen nagu sangar seiklusfilmis, ohu ees ei sule iial silmi. Ei ma satu hätta ja ükski neiu jätta mind ei enam saa. Kui tarvis, tähti taevast alla tooma sõidan, igas paigas aina kuulsust võidan. Kasvõi tiigrit paitan, jah, miski siin ei aita, kõigist julgem ma, kõigist julgem olen ma!
Defineerime konteksti:
# Leiame asesõna esinemise šansi
(P <- exp(m4.glm$coefficients[["(Intercept)"]] +
m4.glm$coefficients[["Loppjah"]] +
m4.glm$coefficients[["Aegpr"]] +
6*m4.glm$coefficients[["Sonepikkus"]] +
4*m4.glm$coefficients[["Ref_kaugus_num"]]))
## [1] 0.8800801
Sellises kontekstis niisiis asesõna tõenäolisemalt (murretes) tegusõnaga koos ei esine.
Logistilise regressiooni mudeleid ei saa võrrelda R-ruudu alusel nagu lineaarses regressioonis. Mudelite valikul on kõige parem alustada erinevate mudelite Akaike informatsioonikriteeriumi AIC võrdlemisest, mis väljendab seletamata varieerumise hulka andmetes. Teisest perspektiivist võib AIC-d kirjeldada ka kui seda informatsiooni hulka, mis läheb kaotsi, kui algandmete varieeruvust mudeli kaudu seletada: mudel ei ole kunagi täiesti täpne representatsioon algandmetest. AIC arvestab valimi suuruse ja mudelisse kaasatud parameetrite arvuga (nagu kohandatud R-ruut lineaarse regressiooni mudelis) ja mida väiksem AIC väärtus on, seda parem.
Oleme teinud 4 mudelit, millest igaühes on järjest rohkem tunnuseid. Sisuliselt oleme järginud samm-sammulist mudeldamist. Võrdleme nende mudelite AIC-d.
AIC(m1.glm)
## [1] 5391.306
AIC(m2.glm)
## [1] 5314.348
AIC(m3.glm)
## [1] 5274.282
AIC(m4.glm)
## [1] 5185.344
# või
AIC(m1.glm, m2.glm, m3.glm, m4.glm)
## df AIC
## m1.glm 2 5391.306
## m2.glm 3 5314.348
## m3.glm 4 5274.282
## m4.glm 5 5185.344
# AIC saab kätte ka mudeli väljundit
# vaadates või mudelist küsides
m1.glm$aic
## [1] 5391.306
m2.glm$aic
## [1] 5314.348
m3.glm$aic
## [1] 5274.282
m4.glm$aic
## [1] 5185.344
Näeme, et praegusel juhul on iga lisatud tunnusega läinud meie mudelis seletamata varieerumise osa väiksemaks.
AIC-d võib võrrelda erinevate mudelite vahel, mis põhinevad samal andmestikul ja millel on sama uuritav tunnus, ilma et nendes mudelites peaks tingimata olema jagatud seletavaid tunnuseid.
Nn nested ehk hierarhiliste mudelite võrdlemiseks, kus igas komplekssemas mudelis sisalduvad ka lihtsamates mudelites olevad mõjud, saab kasutada ka logistilise regressiooni mudelite puhul anova()
-funktsiooni, mis teeb mudelite jääkidel esimest tüüpi ANOVA. Kui tahame väljundis näha ka jääkide erinevuse statistilist olulisust, tuleb logistiliste mudelite puhul täpsustada ka, et testi liik on hii-ruut-test (test = "Chisq"
).
anova(m1.glm, m2.glm, m3.glm, m4.glm, test = "Chisq")
## Analysis of Deviance Table
##
## Model 1: Pron ~ Lopp
## Model 2: Pron ~ Lopp + Aeg
## Model 3: Pron ~ Lopp + Aeg + Sonepikkus
## Model 4: Pron ~ Lopp + Aeg + Sonepikkus + Ref_kaugus_num
## Resid. Df Resid. Dev Df Deviance Pr(>Chi)
## 1 4064 5387.3
## 2 4063 5308.3 1 78.957 < 2.2e-16 ***
## 3 4062 5266.3 1 42.066 8.825e-11 ***
## 4 4061 5175.3 1 90.938 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Iga mudelisse lisatud tunnus on teinud mudelit oluliselt paremaks (p-väärtused on väikesed), arvestades ka kulu, mis läheb mudelil uute lisatavate parameetrite hindamisele. Tulbad Resid.Dev
ja Resid.Df
on vastavalt jääkhälbimuse näitaja ja sellega seotud vabadusastmete arv, mida näeb ka mudelist summary()
käsuga (vt ka 11. ptk materjale). Df
on vabadusastmete arv mudelis, mis arvuliste tunnuste puhul on alati 1 ja kategoriaalsete tunnuste puhul tasemete arv -1. Deviance
näitab siin kahe järjestikuse mudeli jääkhälbimuste ümardatud vahet, 78.957 on 5387.3-5308.3, 42.066 on 5308.3-5266.3, 90.938 on 5266.3-5175.3. Mida suurem on mudeli Deviance
, seda rohkem varieerumisest see mudel seletab, võrreldes sellele eelneva mudeliga.
anova()
ei ütle iseenesest millist mudelit peaksime eelistama, vaid lihtsalt seda, kas erinevus kahe või enama mudeli vahel on statistiliselt oluline, st seda, kas väiksem jääkhälbimus (Resid. Dev
, mis on lähedane AIC-ga) võib olla saadud juhuslikult või mitte.
Nagu lineaarses regressioonis, võib ka logistilises regressioonis mudeldamist alustada kas n-ö nullmudelist, lisades samm-sammult tunnuseid juurde ning kontrollides, kas mudel läheb sellest paremaks või mitte, või hoopis maksimaalsest mudelist, kust tuleb hakata ebaolulisi asju välja viskama. Praegu oleme liikunud lihtsamast mudelist komplekssema suunas, aga võime proovida ka teistpidi. Selleks on R-is nt funktsioon drop1()
, mis viskab ükshaaval mudelist tunnuseid välja ja näitab, kas mudel läks sellest oluliselt halvemaks või mitte.
drop1(m4.glm, test = "Chisq")
## Single term deletions
##
## Model:
## Pron ~ Lopp + Aeg + Sonepikkus + Ref_kaugus_num
## Df Deviance AIC LRT Pr(>Chi)
## <none> 5175.3 5185.3
## Lopp 1 5339.0 5347.0 163.649 < 2.2e-16 ***
## Aeg 1 5231.9 5239.9 56.562 5.445e-14 ***
## Sonepikkus 1 5216.1 5224.1 40.735 1.743e-10 ***
## Ref_kaugus_num 1 5266.3 5274.3 90.938 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Oluline on siin eeskätt vaadata p-väärtusi: kui p-väärtus on väike, on tunnusel tervikuna (!) mudelis oluline koht. Erinevalt mudeli enda väljundist, mis hindab kategoriaalsete seletavate tunnuste puhul ainult tunnuse ühe taseme erinevust baastasemest, võimaldab see test niisiis kontrollida tunnuse kui terviku olulisust. Rea <none>
väärtus tulbas Deviance
(hälbimus) on kõige parema mudeli hälbimus ning sellele lähedane väärtus saadakse ka kõikide ülejäänud ridade Deviance
-väärtusest LRT
-väärtuse (Likelihood-Ratio Test) lahutamisel. LRT
ja p-väärtuse tulbad omakorda on samad, mida annab teist tüüpi ANOVA (nt funktsiooniga Anova()
paketist car
).
car::Anova(m4.glm)
## Analysis of Deviance Table (Type II tests)
##
## Response: Pron
## LR Chisq Df Pr(>Chisq)
## Lopp 163.649 1 < 2.2e-16 ***
## Aeg 56.562 1 5.445e-14 ***
## Sonepikkus 40.735 1 1.743e-10 ***
## Ref_kaugus_num 90.938 1 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Põhimõtteliselt saab sama asja teada ka anova()
-ga, kui sisendiks panna ainult üks mudel, ent funktsioonide testitüübid on erinevad ja seega võib vahel saada erinevaid tulemusi. ANOVA tüüpide kohta võid pikemalt lugeda nt siit.
Teeme nüüd veel kaks mudelit, kuhu lisame järjest juurde 1) tunnuse Verbiklass
ja 2) tunnuse Murre
(kuna tegemist on ikkagi murdeandmetel põhineva mudeliga).
# Verbiklassiga mudel
m5.glm <- glm(Pron ~ Lopp + Aeg + Sonepikkus + Ref_kaugus_num + Verbiklass, data = isik1suur, family = "binomial")
# Kui tahame mitme tunnusega mudelile lihtsalt
# üht tunnust juurde lisada, saab seda teha ka lühemalt.
# Verbiklassi ja murdega mudel
m6.glm <- update(m5.glm, ~ . + Murre)
Võrdleme nüüd mudeleid 4-6.
AIC(m4.glm, m5.glm, m6.glm)
## df AIC
## m4.glm 5 5185.344
## m5.glm 7 5053.165
## m6.glm 11 4921.806
anova(m4.glm, m5.glm, m6.glm, test = "Chisq")
## Analysis of Deviance Table
##
## Model 1: Pron ~ Lopp + Aeg + Sonepikkus + Ref_kaugus_num
## Model 2: Pron ~ Lopp + Aeg + Sonepikkus + Ref_kaugus_num + Verbiklass
## Model 3: Pron ~ Lopp + Aeg + Sonepikkus + Ref_kaugus_num + Verbiklass +
## Murre
## Resid. Df Resid. Dev Df Deviance Pr(>Chi)
## 1 4061 5175.3
## 2 4059 5039.2 2 136.18 < 2.2e-16 ***
## 3 4055 4899.8 4 139.36 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
drop1(m6.glm, test = "Chisq")
## Single term deletions
##
## Model:
## Pron ~ Lopp + Aeg + Sonepikkus + Ref_kaugus_num + Verbiklass +
## Murre
## Df Deviance AIC LRT Pr(>Chi)
## <none> 4899.8 4921.8
## Lopp 1 5038.2 5058.2 138.386 < 2.2e-16 ***
## Aeg 1 4917.6 4937.6 17.843 2.399e-05 ***
## Sonepikkus 1 4979.0 4999.0 79.173 < 2.2e-16 ***
## Ref_kaugus_num 1 4979.6 4999.6 79.796 < 2.2e-16 ***
## Verbiklass 2 5029.1 5047.1 129.309 < 2.2e-16 ***
## Murre 4 5039.2 5053.2 139.359 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Tundub, et kõige parema peamõjudega mudeli saame, kui jätame mudelisse kõik tunnused sisse. Vaatame ka 6. mudeli ülevaadet.
summary(m6.glm)
##
## Call:
## glm(formula = Pron ~ Lopp + Aeg + Sonepikkus + Ref_kaugus_num +
## Verbiklass + Murre, family = "binomial", data = isik1suur)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -2.4743 -1.0188 0.4619 1.0152 2.0980
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 3.331238 0.266823 12.485 < 2e-16 ***
## Loppjah -1.470320 0.128701 -11.424 < 2e-16 ***
## Aegpr 0.327413 0.077620 4.218 2.46e-05 ***
## Sonepikkus -0.218757 0.025179 -8.688 < 2e-16 ***
## Ref_kaugus_num 0.047513 0.005455 8.709 < 2e-16 ***
## Verbiklasskommunikatiivne 0.422679 0.201488 2.098 0.0359 *
## Verbiklassmuu -0.958337 0.145173 -6.601 4.07e-11 ***
## MurreKESK -0.627230 0.121543 -5.161 2.46e-07 ***
## MurreRANNA -0.774596 0.139631 -5.547 2.90e-08 ***
## MurreSAARTE -0.685024 0.142947 -4.792 1.65e-06 ***
## MurreVORU -1.806956 0.180653 -10.002 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 5617.4 on 4065 degrees of freedom
## Residual deviance: 4899.8 on 4055 degrees of freedom
## AIC: 4921.8
##
## Number of Fisher Scoring iterations: 4
Baastaseme kontekstis on:
Tunnused, mis tõstavad asesõna esinemise šanssi:
Tunnused, mis langetavad asesõna esinemise šanssi:
Nagu lineaarses regressioonis, võib ka logistilise regressiooni mudelis hinnata tunnustevahelisi interaktsioone. See tähendab, et ühe seletava tunnuse mõju sõltub teise seletava tunnuse väärtustest. Näiteks hüpoteetiliselt:
Meie mudeli m6.glm
puhul võib interaktsioone esineda nt tegusõna semantilise klassi ja tegusõna ajavormi vahel (keeles on olevikuvormis sagedasti kasutusel väljendid, nagu ma tean, ma arvan). Küsime seega, kas tegusõna ajavormil on erinev mõju asesõna esinemise tõenäosusele vastavalt tegusõna semantilisele klassile.
m7.glm <- update(m6.glm, ~ . + Verbiklass:Aeg)
anova(m6.glm, m7.glm, test = "Chisq") # Tundub, et interaktsioon teeb mudeli ainult õige pisut paremaks
## Analysis of Deviance Table
##
## Model 1: Pron ~ Lopp + Aeg + Sonepikkus + Ref_kaugus_num + Verbiklass +
## Murre
## Model 2: Pron ~ Lopp + Aeg + Sonepikkus + Ref_kaugus_num + Verbiklass +
## Murre + Aeg:Verbiklass
## Resid. Df Resid. Dev Df Deviance Pr(>Chi)
## 1 4055 4899.8
## 2 4053 4893.1 2 6.7279 0.0346 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
AIC(m6.glm, m7.glm)
## df AIC
## m6.glm 11 4921.806
## m7.glm 13 4919.079
drop1(m7.glm,test = "Chisq")
## Single term deletions
##
## Model:
## Pron ~ Lopp + Aeg + Sonepikkus + Ref_kaugus_num + Verbiklass +
## Murre + Aeg:Verbiklass
## Df Deviance AIC LRT Pr(>Chi)
## <none> 4893.1 4919.1
## Lopp 1 5031.0 5055.0 137.962 <2e-16 ***
## Sonepikkus 1 4970.0 4994.0 76.910 <2e-16 ***
## Ref_kaugus_num 1 4973.0 4997.0 79.881 <2e-16 ***
## Murre 4 5032.4 5050.4 139.360 <2e-16 ***
## Aeg:Verbiklass 2 4899.8 4921.8 6.728 0.0346 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Vaatame mudelisse sisse ka.
summary(m7.glm)
##
## Call:
## glm(formula = Pron ~ Lopp + Aeg + Sonepikkus + Ref_kaugus_num +
## Verbiklass + Murre + Aeg:Verbiklass, family = "binomial",
## data = isik1suur)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -2.4790 -1.0172 0.4542 1.0166 2.0954
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 3.010527 0.326947 9.208 < 2e-16 ***
## Loppjah -1.469137 0.128783 -11.408 < 2e-16 ***
## Aegpr 0.779829 0.287908 2.709 0.00676 **
## Sonepikkus -0.216372 0.025250 -8.569 < 2e-16 ***
## Ref_kaugus_num 0.047638 0.005467 8.714 < 2e-16 ***
## Verbiklasskommunikatiivne 1.001958 0.313384 3.197 0.00139 **
## Verbiklassmuu -0.649403 0.242598 -2.677 0.00743 **
## MurreKESK -0.636810 0.121661 -5.234 1.66e-07 ***
## MurreRANNA -0.777364 0.139647 -5.567 2.60e-08 ***
## MurreSAARTE -0.690195 0.142992 -4.827 1.39e-06 ***
## MurreVORU -1.810241 0.180786 -10.013 < 2e-16 ***
## Aegpr:Verbiklasskommunikatiivne -1.064950 0.412732 -2.580 0.00987 **
## Aegpr:Verbiklassmuu -0.441221 0.297074 -1.485 0.13748
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 5617.4 on 4065 degrees of freedom
## Residual deviance: 4893.1 on 4053 degrees of freedom
## AIC: 4919.1
##
## Number of Fisher Scoring iterations: 4
Interaktsioonides esinevate tunnuste peamõjude tõlgendamisel tuleb olla ettevaatlik. Aegpr
ei näita enam tunnuse üldist efekti, vaid oleviku mõju asesõna esinemise tõenäosusele siis, kui tegemist on kognitiivse tegusõnaga. Samamoodi näitab Verbiklasskommunikatiivne
tunnuse efekti minevikuvormis tegusõnadega. Ehkki ka ilma interaktsioonideta mudelis on koefitsientide tõlgendamise aluseks teiste tunnuste baastasemed, saab neid käsitleda siiski üldiste mõjudena, kuna erinevate koefitsientide mõjusid lihtsalt kokku liites saame uue konteksti ennustused. Siin aga tuleb silmas pidada, mille kohta täpselt šansisuhet väljendatakse.
Interaktsioon Aegpr:Verbiklasskommunikatiivne
võrdleb nüüd oleviku ajavormi mõju kommunikatiivsete ja kognitiivsete tegusõnade vahel.
exp(m7.glm$coefficients[["Aegpr"]]+m7.glm$coefficients[["Aegpr:Verbiklasskommunikatiivne"]])
## [1] 0.7519232
Šansisuhe näitab, et tegusõna oleviku vormidega on asesõna kasutamise šanss kommunikatiivsete tegusõnadega 0.75 korda “suurem” kui kognitiivsete tegusõnadega. Teisisõnu: kommunikatiivsete tegusõnade (ma ütlen) puhul on olevikus väiksem tõenäosus kohata asesõna kui kognitiivsete tegusõnade (ma tean) puhul. AGA mõlemate puhul on siiski asesõna kasutamise šanss väga suur!
Interaktsiooni võib tõlgendada ka teistpidi: kui kommunikatiivsete tegusõnade mõju mineviku ja olevikuvormide hulgas.
exp(m7.glm$coefficients[["Verbiklasskommunikatiivne"]] + m7.glm$coefficients[["Aegpr:Verbiklasskommunikatiivne"]])
## [1] 0.9389505
See šansisuhe näitab, et kommunikatiivsete tegusõnadega on asesõna kasutamise šanss olevikuvormidega koos 0.94 korda “suurem” kui minevikuvormidega koos. Teisisõnu: koos kommunikatiivsete tegusõnade olevikuvormidega on vähem tõenäoline kohata asesõna kui nende minevikuvormidega.
Šansside leidmiseks võime panna koefitsiendid tabelisse:
Aeg | Verbiklass | Logit(P(Pron = “jah”)) |
---|---|---|
ipf | kognitiivne | exp(3.0105) |
pr | kognitiivne | exp(3.0105+0.7798) |
ipf | kommunikatiivne | exp(3.0105+1.0020) |
pr | kommunikatiivne | exp(3.0105+0.7798+1.0020-1.0650) |
Saame tulemusi natuke lihtsustada ja teha järelduse, et kommunikatiivsed tegusõnad esinevad peaaegu alati koos asesõnaga, kui nad on minevikus (ma ütlesin). Kognitiivsed tegusõnad jällegi esinevad minevikus koos asesõnaga vähem, ent siiski väga sageli.
Olevikus esinevad nii kommunikatiivsed kui ka kognitiivsed tegusõnad asesõnaga enam-vähem sama tõenäosusega.
Mis puutub teistesse tegusõnadesse, siis erinevad need kognitiivsetest tegusõnadest küll minevikus (need esinevad minevikus oluliselt harvemini asesõnaga kui kognitiivsed tegusõnad), ent olevikus ei ole šansi muutus kognitiivsete tegusõnadega võrreldes statistiliselt oluline.
Interaktsioonide analüüsil on suureks abiks visuaalne tugi. Selleks võib kasutada nt funktsioonid visreg()
paketist visreg
.
Hallid punktid on iga vaatluse kohta mudeli osajäägid (partial residuals), y-teljel on näidatud uuritava tunnuse šansi logaritm ning sinine joon on mudeli ennustus vastava tunnusekombinatsiooni kohta (nt verbiklass = "kognitiivne"
+ Aeg = "ipf"
). Jooniselt on näha, et kognitiivsetel ja kommunikatiivsetel tegusõnadel on asesõna esinemise seletamisel vastupidine tendents: kognitiivsete tegusõnadega asesõna kasutamise šanss olevikuvormides kasvab, kommunikatiivsete tegusõnadega kahaneb. Muudel tegusõnadel on asesõna kasutamise šanss nii mineviku- kui ka olevikuvormidega teistest verbiklassidest madalam, ent seose suund on sama, mis kognitiivsete tegusõnadega.
Siin ei ole kontekst, mille kohta mudeli ennustused esitatakse, päris sama mis regressioonimudeli koefitsientide tabelis. Siin on vaikimisi võrdluskontekstiks konfiguratsioon, kus kategoriaalsete seletavate tunnuse väärtus on nende tunnuste kõige sagedasem väärtus, ning arvuliste tunnuste väärtus nende mediaanväärtus. Võrdlusalust saab muuta nii visreg
-funktsioonis kui tegelikult ka regressioonimudelis, muutes tunnuste baastasemeid või skaleerides arvulisi tunnuseid nii, et vabaliige väljendaks mitte “0-situatsiooni”, vaid nt mingit keskväärtust (nt lahutades kõikidest väärtustest tunnuse keskmise). Selleks, et näha, mis konteksti kohta täpselt visreg
ennustusi näitab, saab funktsioonis täpsustada ära argumendi print.cond = TRUE
. Samuti võib kuvada y-teljel šansi logaritmide asemel tõenäosusi argumendiga scale = "response"
(sel juhul tagab argument partial = TRUE
, et näeme endiselt ka jääke).
visreg(m7.glm, xvar = "Aeg", by = "Verbiklass", print.cond = TRUE, scale = "response", partial = TRUE)
## Conditions used in construction of plot
## Verbiklass: kognitiivne / kommunikatiivne / muu
## Lopp: jah
## Sonepikkus: 5
## Ref_kaugus_num: 4
## Murre: SAARTE
visreg
-funktsiooniga saab vaadata ka üksikuid tunnuseid. Samuti saab jooniseid modifitseerida ggploti-stiilis, kui täpsustada funktsioonis argumendi gg = TRUE
. Vaata lähemalt siit.
Veelgi lihtsama väljundi saab funktsiooniga visreg2d()
, mis näitab värvidega ära kõige suuremad ja väiksemad tõenäosused.
Sellelt graafikult näeme kohe ära, et klassides “muu” ja “kognitiivne” on ajavormi mõju samapidine (olevikuvormidega asesõna kasutamise tõenäosus kasvab), klassis “kommunikatiivne” on aga ajavormi mõju teistpidine.
Võime vaadata ka kõikide mudelisse kaasatud tunnuste mõjusid graafiliselt, näiteks kasutades funktsiooni predictorEffects()
paketist effects
. Siin esitatu erineb regressioonimudeli väljundist selle poolest, et iga seletava tunnuse mõju on hinnatud kontekstis, kus arvuliste seletvaate tunnuste mõju ei ole mitte nullis, vaid nende kesktasemel.
Testida võiks tegelikult veel interaktsioone, nt
Mitme tasemega kategoriaalsed mudelid (nagu nt murre) teevad interaktsioonides aga mudeli kompleksseks ja selle tõlgendamise keeruliseks.
summary()
?load("kysimustik_2020.RData")
m <- glm(lemmikjook ~ synniaasta + kaua_opid + kogemused_kvant + lemmikloom + aasta, data = kysimustik, family = "binomial")
drop1(m, test = "Chisq")
## Single term deletions
##
## Model:
## lemmikjook ~ synniaasta + kaua_opid + kogemused_kvant + lemmikloom +
## aasta
## Df Deviance AIC LRT Pr(>Chi)
## <none> 47.000 63.000
## synniaasta 1 47.020 61.020 0.0208 0.8853
## kaua_opid 1 47.053 61.053 0.0530 0.8178
## kogemused_kvant 1 47.324 61.324 0.3241 0.5691
## lemmikloom 2 51.099 63.099 4.0989 0.1288
## aasta 2 48.195 60.195 1.1950 0.5502