11. Tvíkosta aðhvarfsgreining
Á eftir línulegri aðhvarfsgreiningu, sem við fjölluðum um í kafla
10, er tvíkosta aðhvarfsgreining sennilega mest
notaða aðhvarfsgreiningarlíkanið. Í R er tvíkosta aðhvarfsgreining
framkvæmd á mjög sambærilegan hátt og línuleg aðhvarfsgreining, nema nú
er notast við fallið glm()
í stað fallsins lm()
. Í tvíkosta
aðhvarfsgreiningu hefur svarbreytan eingöngu tvær útkomur, 0 og 1 og eru
líkönin því metin með aðstoð tengifalla. Algengasta tengifallið kallast
á ensku the logistic function og því er oft talað um lógistíska
aðhvarfsgreiningu. Í raun má nota fallið glm()
til að framkvæma
fjölda annarra alhæfðra línulegra aðhvarfsgreiningarlíkana en það er
utan efnis þessarar bókar.
11.1. glm()
Athugið
Inntak: formúla, gögn (tvíkosta breyta~breyta, gögn)
Úttak: tvíkosta aðhvarfsgreining á gögnunum byggt á formúlunni
Helstu stillingar: family
Forkröfur prófs: ??
Auk fallsins glm()
munum við einnig nota skipanirnar summary()
,
coef()
og confint()
á svipaðan hátt og þið sáuð í kafla
10.
Í kafla 11.1.1 sýnum við hvernig tvíkosta aðhvarfsgreining er framkvæmd þegar skýribreytan er samfelld en í kafla 11.1.2 sýnum við hvað gerist þegar skýribreytan er strjál. Við munum finna möt á stikum líkansins, framkvæma tilgátupróf fyrir þá og reikna öryggisbil.
11.1.1. Tvíkosta aðhvarfsgreining með samfellda skýribreytu
Tvíkosta aðhvarfsgreiningu má nota til að meta hvort nemendur sem koma gangandi eða skokkandi í skólann séu ólíklegri til að vera lengi á leiðinni í skólann heldur en þeir sem ferðast á skólann á annan máta. Líkanið metum við með neðangreindri skipun og það borgar sig að vista líkanið sem hlut.
glm1<-glm(ferdamati_skoli=='Gangandi / skokkandi'~ferdatimi_skoli, data=konnun, family='binomial')
Fyrsta inntakið í skipunina er formúla. Á vinstri hönd hennar verður að
vera breyta sem tekur gildin 0 og 1, eða þá TRUE og FALSE. Í þessu dæmi
er inntakið yrðingin ferdamati_skoli=='Gangandi / skokkandi'
sem skilar TRUE ef
einstaklingurinn kemur gangandi í skólann en FALSE annars. Þar af leiðandi mun líkanið
meta gagnlíkindin á því að koma gangandi. Á hægri hönd formúlunnar er
skýribreytan, sem í þessu tilviki er ferdatimi_skoli
.
Næstu tvö inntök skipunarinnar er nafnið á gagnatöflunni sem geymir
gögnin (konnun
) og af hvaða gerð aðhvarfsgreiningarlíkanið er. Með
stillingunni family=’binomial’
tilgreinum við að tvíkosta
aðhvarfsgreining skuli framkvæmd með logistic tengifallinu.
Skipunin summary()
gefur okkur miklar upplýsingar um útkomu
aðhvarfsgreiningarinnar:
summary(glm1)
##
## Call:
## glm(formula = ferdamati_skoli == "Gangandi / skokkandi" ~ ferdatimi_skoli,
## family = "binomial", data = konnun)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.68296 0.39389 1.734 0.0829 .
## ferdatimi_skoli -0.18181 0.03693 -4.923 8.54e-07 ***
## ---
## Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 182.73 on 200 degrees of freedom
## Residual deviance: 133.79 on 199 degrees of freedom
## AIC: 137.79
##
## Number of Fisher Scoring iterations: 7
Mikilvægustu upplýsingarnar úr aðhvarfsgreiningunni eru fólgnar í
töflunni Coefficients:
Í fyrsta dálki hennar má sjá metnu stuðlana, \(\hat \beta_0 = 0.68296\) og \(\hat \beta_1 = -0.18181\).
Staðalskekkju fyrir mat á stuðlunum má sjá í öðrum dálki.
Í þriðja dálki má sjá prófstærðir fyrir tilgátupróf sem prófa núlltilgátuna hvort stuðlarnir séu núll. Þannig prófar prófstærðin \(1.734\) núlltilgátuna \(\beta_0 = 0\) og prófstærðin \(-4.923\) prófar núlltilgátuna \(\beta_1=0\).
P-gildin sem svara til þessara prófstærða má svo finna í fjórða dálkinum. P-gildið fyrir núlltilgátuna \(\beta_1=0\) er \(8.54e-07\), sem er minna en 0.05 og þar sem stuðullin er neikvæður getum við fullyrt að nemendur sem eru lengi á leiðinni í skólann séu ólíklegri til að fara gangandi heldur en þeir eru fljótir í skólann.
Með því að setja metnu stuðlana í veldið á e fæst gagnlíkindahlutfall fyrir því að fara gangandi við hverja aukna mínútu sem að nemandi eyðir í að komast í skólann. Þau finnum við með skipuninni:
exp(coef(glm1))
## (Intercept) ferdatimi_skoli
## 1.9797338 0.8337605
Í flestum tilvikum höfum við lítin áhuga á gagnlíkindahlutfallinu sem
svarar til (Intercept)
. Hins vegar höfum við mikinn áhuga á
gagnlíkindahlutfallinu sem stendur við ferdatimi_skoli
.
Hér sjáum við að gagnlíkindahlutfallið fyrir því að fara gangandi við
hverja auka mínútu sem að nemandi eyðir í að komast í skólann
er \(0.8337605\).
95% öryggisbil fyrir gagnlíkindahlutföllin sem fengust í tvíkosta aðhvarfsgreiningunni má finna með skipuninni:
exp(confint(glm1))
## 2.5 % 97.5 %
## (Intercept) 0.9289593 4.3876029
## ferdatimi_skoli 0.7694803 0.8901376
Sem fyrr höfum við ekki áhuga á öryggisbilinu sem svarar til
(Intercept)
. Öryggisbilið fyrir ferdatimi_skoli
er það sem við
viljum skoða, það er \([0.7694803, 0.8901376]\). Öryggisbilið
inniheldur ekki 1 í samræmi við það að við höfnuðum núlltilgátunni.
11.1.2. Tvíkosta aðhvarfsgreining með strjála skýribreytu
Tvíkosta aðhvarfsgreiningu má einnig beita á strjála skýribreytu. Til dæmis til að meta hvort nemendur sem eru femínistar séu líklegri til að vera kattamanneskjur heldur en þeir sem eru ekki femínistar. Líkanið metum við með neðangreindri skipun:
glm2<-glm(feministi=='Rétt'~dyr, data=konnun, family='binomial')
Skipunin lítur á nákvæmlega sama hátt út og í kafla
11.1.1 nema að nú hefur feministi=='Rétt'
komið í stað
ferdamati_skoli=='Gangandi / skokkandi'
og breytan dyr
tekið
stað breytunnar ferdatimi_skoli
. Skoðum nú summary()
af útkomu
aðhvarfsgreiningarinnar:
summary(glm2)
##
## Call:
## glm(formula = feministi == "Rétt" ~ dyr, family = "binomial",
## data = konnun)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 1.1304 0.2066 5.472 4.45e-08 ***
## dyrKetti 2.4532 0.7460 3.288 0.00101 **
## ---
## Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 179.51 on 200 degrees of freedom
## Residual deviance: 159.55 on 199 degrees of freedom
## AIC: 163.55
##
## Number of Fisher Scoring iterations: 6
Mikilvægustu upplýsingarnar úr aðhvarfsgreiningunni eru sem fyrr fólgnar
í töflunni Coefficients:
. Taflan er einnig byggð upp á sama hátt en
nú birtist sér lína fyrir hvern flokk skýribreytunnar, annan en
viðmiðunarflokkinn. Þannig gefur heitið í línunni dyrKetti
að um
sé að ræða stuðla fyrir flokkinn Ketti
í skýribreytunni feministi
og
viðmiðunarflokkurinn er því Hunda
.
Í fyrsta dálki töflunnar má sjá metnu stuðlana, \(\hat \beta = 1.1304\) og \(\hat \beta_a = 2.4532\).
Í þriðja dálki má sjá að prófstærðin \(5.472\) prófa núlltilgátuna \(\beta = 0\) og prófstærðin \(3.288\) prófar núlltilgátuna \(\beta_a=0\).
P-gildið fyrir núlltilgátuna \(\beta_a=0\) er \(0.00101\), sem er minna en 0.05 og þar sem stuðullin er jákvæður getum við fullyrt að nemendur sem eru hrifnir af köttum séu líklegri til vera femínistar heldur en þeir sem eru hrifnir af hundum.
Með því að setja metnu stuðlana í veldið á e fæst gagnlíkindahlutfall fyrir því að vera femínisti á móti því að vera hrifinn af köttum. Þau finnum við með skipuninni:
exp(coef(glm2))
## (Intercept) dyrKetti
## 3.096774 11.625000
Við höfum ekki áhuga á gagnlíkindahlutfallinu sem svarar til (Intercept)
,
en það sem stendur við dyrKetti
sýnir okkur gagnlíkindahlutfallið
fyrir því að vera femínisti því að vera hrifinn af köttum er \(11.625000\).
95% öryggisbil fyrir gagnlíkindahlutföllin sem fengust í tvíkosta aðhvarfsgreiningunni má finna með skipuninni:
exp(confint(glm2))
## 2.5 % 97.5 %
## (Intercept) 2.091788 4.715258
## dyrKetti 3.366706 73.263708
Sem fyrr höfum við ekki áhuga á öryggisbilinu sem svarar til
(Intercept)
, heldur það sem stendur við dyrKetti
, það er
\([3.366706, 73.263708]\). Öryggisbilið inniheldur ekki 1 í samræmi
við það að við höfnuðum núlltilgátunni.
11.1.3. Leiksvæði fyrir R kóða
Hér fyrir neðan er hægt að skrifa R kóða og keyra hann. Notið þetta svæði til að prófa ykkur áfram með skipanir kaflans. Athugið að við höfum þegar sett inn skipun til að lesa inn puls
gögnin sem eru notuð gegnum alla bókina.
# Gogn sott og sett i breytuna puls.
puls <- read.table ("https://raw.githubusercontent.com/edbook/haskoli-islands/main/pulsAll.csv", header=TRUE, sep=";")
# Setjid ykkar eigin koda her fyrir nedan:
# Sem daemi, skipunin head(puls) skilar fyrstu nokkrar radirnar i gognunum
# asamt dalkarheitum.
head(puls)