22  Lineaarne regressioon

Korrelatsioonanalüüsis uurisime seost kahe tunnuse vahel, võtmata arvesse põhjuslikku seost nende vahel (Peatükk 12). Lineaarse regressiooni korral mõõdame samuti seost tunnuste vahel, aga selliselt, et üks tunnustest on alati määratud ühest või mitmest tunnusest sõltuvaks. See sõltuvus on sealjuures puhtalt matemaatiline ega tähenda põhjuslikku seost (Peatükk 13).

Important

Regressioonanalüüsi (regression analysis) käigus leitakse ja kirjeldatakse regressioonimudel, mis näitab, kuidas väljundtunnus sõltub keskmiselt ühest või mitmest sisendtunnusest. Lisaks seoste kirjeldamisele võimaldab leitud mudel prognoosida väljundtunnuse väärtusi.

Regressioonanalüüs ei ole üks konkreetne statistiline protseduur, vaid see mõiste hõlmab palju mitmesuguseid statistilisi mudeli kujusid ja nende hindamise viise. Sealjuures on loodud ka väga keerukaid matemaatilisi seletusi sellele, kuidas tunnused omavahel seotud on. Käesolevas õpikus kasutatakse regressioonanalüüsiga seotud mõisteid lihtsustatult: - lineaarne regressioon viitab ainult vähimruutude meetodil leitud lineaarsele regressioonile ning - logistilise regressioonina käsitletakse regressioonanalüüsi logit-mudeli alusel, mis üldiselt on samuti lineaarne regressioonimudel.

Regressioonanalüüs on peamine analüütiline meetod majandusteadustes ja kogu ökonomeetria põhineb erineva matemaatilise kujuga regressioonimudelitel. Regressioonanalüüsi kasutades saab vastata küsimustele, mille korral meid huvitab, kuidas sõltub üks tunnus teisest või teistest.

Järgnevalt üritame regressioonanalüüsi abil seletada ja prognoosida majade hindasid.

library('magrittr')
majad <- read.csv('andmed/housingprices.csv')
str(majad)
'data.frame':   277 obs. of  13 variables:
 $ price           : num  6.93 6.51 6.47 6.44 6.42 ...
 $ area            : num  825 766 688 797 627 ...
 $ bedrooms        : int  3 3 3 5 2 3 3 3 3 3 ...
 $ bathrooms       : int  2 2 1 3 1 2 1 1 2 2 ...
 $ stories         : int  2 3 1 2 1 1 1 1 3 1 ...
 $ mainroad        : chr  "yes" "yes" "yes" "yes" ...
 $ guestroom       : chr  "no" "no" "yes" "no" ...
 $ basement        : chr  "yes" "no" "yes" "no" ...
 $ hotwaterheating : chr  "no" "no" "no" "no" ...
 $ airconditioning : chr  "yes" "yes" "yes" "no" ...
 $ parking         : int  1 0 2 2 2 3 1 1 0 0 ...
 $ prefarea        : chr  "no" "no" "yes" "no" ...
 $ furnishingstatus: chr  "furnished" "furnished" "unfurnished" "furnished" ...

Soovime määrata majale hinna, mis vastaks võimalikult täpselt selle turuväärtusele. Kuidas seda teha? Mõistlik oleks lähtuda teiste sarnaste majade hindadest. Võiksime otsida sarnase pinna, tubade arvu ja teiste asjakohaste tunnustega maju. Konkreetse maja hinna saaksime määrata umbkaudselt sarnase majade hindade alusel. Täpsema turuväärtuse saaksime aga siis, kui leiaksime matemaatilise seose majade erinevate tunnuste ja hindade vahel.

Vaatame kuidas on majade väärtused seotud nt pinnaga.

Maja pinna ja hinna vahel paistab olevat positiivne seos: mida suurem maja, seda kõrgem hind. Kõige lihtsam oleks sobivama hinna leidmiseks arvutada lihtsalt kõikide majade keskmine hind. See oleks kõige parem pakkumine juhul, kui meil ei oleks majade kohta mingit muud teavet peale hinna. Aga kui kasutame lihtsalt keskmist, siis kui täpse tulemuse saaksime majade pindasid arvesse võttes?

Näeme et kui pakume kõikide majade väärtuseks keskmise hinna, siis saaksime antud juhul täpse tulemuse ainult keskmise pinnaga majade korral. Võime iga maja kohta arvutada ja joonisel kujutada ka hinna määramisel keskmist kasutades tehtud vea.

Väiksemate majade väärtust hindame liiga suureks, samas kui suurte majade väärtust alahindame. Seega võiksime sirgele määrata sellise asukoha ja tõusu, et see väljundtunnuse suhtes võimalikult täpselt punktipilve läbiks. Selline sirge on järgneval joonisel Joonis 22.1.

Joonis 22.1: Regressioonisirge

Kuidas selline sirge leida? Et võimalikult täpselt määrata iga maja hind lähtudes pinnast, tuleks leida selline sirge, mille korral hinna määramisel tehtud viga oleks võimalikult väike.

Kirjeldatud protseduuri võib nimetada vähimruutude meetodiks.

22.1 Regressioonimudel

Matemaatiliselt kõige lihtsam viis arvskaalal väljundtunnusega regressioonimudeli parameetreid hinnata ongi vähimruutude meetod.

Important

Lihtne vähimruutude meetod (ordinary least squares) on regressioonmudeli parameetrite leidmise viis. Selle käigus leitakse maatriksalgebra alusel selline mudeli vabaliige ja sisendtunnus(t)e kordaja(d), mille korral regressioonisirge teeks võimalikult väikse vea väljundtunnuse väärtuste seletamisel.

Empiiriliselt ongi regressioonimudelis põhjuslik seos seetõttu, et selle hindamisel on eesmärk võimalikult täpselt seletada just väljundtunnuse väärtusi. Lihtsustatult võib regressioonimudelist mõelda kui mistahes statistilisest mudelist. See kirjeldab lihtsalt seost sisend- ja väljundtunnuste vahel ning võimaldab selle kirjelduse alusel väljundtunnuse väärtusi prognoosida.

flowchart LR
i["Sisendtunnus(ed)"] --> m(Mudel) --> o[Väljundtunnus]
Important

Regressioonimudel määrab seose ühe või enama sisendtunnuse ja ühe väljundtunnuse vahel selliselt, et viga väljundtunnuse prognoosimisel oleks võimalikult väike. Regressioonimudelit saab kasutada

  • seoste kirjeldamiseks iga sisendtunnuse ja väljundtunnuse vahel ning
  • väljundtunnuse väärtuse prognoosimiseks teatud sisendtunnus(t)e väärtuste alusel.

R keeles saab vähimruutude meetodit rakendada funktsiooniga lm() (ehk lineaarne mudel). Leiame mudeli, mis selgitab, kuidas maja pind (area) määrab maja hinna (price). Selleks tuleb funktsioonis mudel määratleda valemi kujul price ~ area.

mPind <- lm(price ~ area, majad)

Vähimruutude meetodi alusel saab arvutada ka mudeleid, milles sisendtunnus on mõõdetud nimiskaalal. Vaatame nt, kuidas lähedus suurele teele (mainroad) on seotud maja hinnaga.

mTee <- lm(price ~ mainroad, majad)

Regressioonimudelisse saame lisada ka mitu tunnust korraga, nt mõlemad eelnevalt nimetatud sisendtunnused.

mPindTee <- lm(price ~ area + mainroad, majad)

Üks võimalik lähenemine regressioonanalüüsile on lisada mudelisse kõik sisendtunnused, mis teoreetiliselt võiksid seletada väljundtunnuse väärtusi. Järgnevas näites lisame sisendtunnustena kõik andmetabelis olevad tunnused, va väljundtunnus.

mKõik <- lm(price ~ ., majad)

22.2 Regressioonikordajad

22.2.1 Arvtunnus

Eelnevalt hinnatud regressioonimudel maja hinnna leidmiseks pinna alusel sisaldab kahte regressioonikordajat.

mPind

Call:
lm(formula = price ~ area, data = majad)

Coefficients:
(Intercept)         area  
    2.10211      0.00546  

Neist esimene on vabaliige (Intercept) ehk väljundtunnuse väärtus seal, kus sirge ristub sisendtunnuse teljega. See on maja hind juhul, kui maja pinna väärtus on null. Antud juhul näeme, et ilma pinnata maja hind oleks empiiriliselt 2.1 mln USD. Kuna kasutatud andmetes päriselt ilma pinnata majasid ei ole, siis ei ole mõtet vabaliikmele ka tähendust omistada.

Note

Vähimruutude meetodil leitud regresioonimudeli arvtunnuse kordaja näitab, kui mitme ühiku võrra suureneb väljundtunnuse väärtus, kui sisendtunnuse väärtus suureneb ühe ühiku võrra.

Vabaliikmele järgneb sisendtunnuste kordaja ehk sirge tõus sisendtunnuse suurenemisel ühe ühiku võrra. See näitab, kui mitme mln USD võrra on suurem maja hind, kui pind on suurem ühe ruutmeetri võrra. Näeme, et iga ruutmeeter lisab maja hinnale 0.00546 mln USD ehk 5460 USD. See tõus on kujutatud joonisel Joonis 22.1.

Kui meid huvitab väljundtunnuse muutus sisendtunnuse mitme ühikulise kasvu korral, siis võime kordaja vastava konstandiga korrutada. Nt 1000 ruutmeetrit pinda lisab eelneva mudeli alusel maja hinnale \(0.005 \times 1000 = 5\) mln USD.

22.2.2 Nimitunnus

Kui mudelis on nimitunnused, siis on regressioonikordajate tõlgendused veidi erinevad. Üks tunnuse väärtustest on aluseks teis(t)ele, mis muudab regressioonikordajate tõlgendamise veidi keerulisemaks.

mTee

Call:
lm(formula = price ~ mainroad, data = majad)

Coefficients:
(Intercept)  mainroadyes  
     3.7923       0.7071  

Vabaliige näitab sellisel juhul maja hinda juhul, kui maja ei asu tee lähenduses (mainroad == 'no'), sest tunnuse kordaja on mainroadyes ehk mainroad == yes. Ehk tunnuse mainroad väärtus no on võrdlusväärtus. Tunnuse kordaja (mainroadyes) näitab, kui mitme USD võrra on sellest kallim maja, mis asub tee lähenduses. Järgneval joonisel Joonis 22.2 on vabaliige ja tunnuse kordaja esitatud vastavalt pideva ja katkendliku joonega.

Joonis 22.2: Nimitunnus regressioonimudelis

Näeme, et suurest teest eemal asuva maja (mainroad == 'no') hind on keskmiselt 3.79 mln USD. Suurel teel asuva maja väärtus on aga sellest 0.71 mln USD võrra kõrgem ehk 4.5 mln USD.

Note

Vähimruutude meetodil leitud regresioonimudeli vabaliige näitab väljundtunnuse väärtust sisendtunnuse võrdlusväärtuse korral. Nimitunnuse muude väärtuste kordajad näitavad, kui mitme ühiku võrra on väljundtunnuse väärtus suurem võrreldes nimitunnuse võrdlusväärtusega.

Warning

Tunnuste liik R keele objektis määrab, mil viisil hinnatakse seos tunnuste vahel. Nt kui nimitunnus on sisestatud arvudena, siis väljastab vastav R keele funktsioon regressioonikordaja, hoolimata sellest, et sellel sisulist tähendust ei ole.

22.2.3 Arv- ja nimitunnused

Kui mudelis on mitu tunnust, siis jääb kordajate tõlgendus samaks.

mPindTee

Call:
lm(formula = price ~ area + mainroad, data = majad)

Coefficients:
(Intercept)         area  mainroadyes  
   2.023472     0.005383     0.126777  

Küll aga näeme, et kordajad on erinevad võrreldes eelnevate ühe sisendtunnusega mudelitega. Põhjus on selles, et sisendtunnused on omavahel seotud ja mõjutavad seetõttu teineteise seost väljundtunnusega (vt Peatükk 14).

Jooniselt näeme, et iga ruutmeetriga kaasneb 0.005 mln USD võrra kõrgem hind. Suure tee lähendus (katkendlik sirge) lisab hinnale 0.127 mln USD.

Samuti märkame, et suure tee läheduse kordaja oluliselt on viimases mudelis tunduvalt madalam kui eelnevas ilma pinnata mudelis. See tähendab, et suur osa suure tee lähendusega seletatavast hinna hajuvusest tuleneb hoopis majade pinnast.

Warning

Sisendtunnuste regressioonikordajad on enamasti teineteisest sõltuvad. Mida suurem on korrelatsioon nende vahel, seda enam muutub ühe sisendtunnuse kordaja, kui lisame mudelisse või eemaldame mudelist teise.

22.3 Regressioonikordajate usaldusvahemik

Enamasti leiame regressioonikordajad valimi alusel, mistõttu on tegemist (punkt)hinnangutega. Nii saa me olla kindlad, kas kordajad ja vastavad seosed ka üldiselt kehtivad. Regressioonikordajate kehtivust saame hinnata usaldusvahemike alusel (Peatükk 21).

R keeles saame regressioonimudeli kordajate usaldusvahemikke kuvada funktsiooniga confint(). See funktsioon kuvab teoreetiliselt arvutatud, mitte taasvaliku alusel leitud usaldusvahemikud.

mudel <- lm(price ~ ., majad)
confint(mudel, level = .95)
                                      2.5 %       97.5 %
(Intercept)                     1.093198328  1.734167689
area                            0.003916509  0.004839538
bedrooms                       -0.055222319  0.113389133
bathrooms                       0.189191185  0.451668689
stories                         0.126458955  0.295782704
mainroadyes                    -0.027848762  0.319337765
guestroomyes                    0.064618599  0.388534574
basementyes                    -0.009793511  0.231749245
hotwaterheatingyes             -0.207242650  0.335064880
airconditioningyes              0.096073548  0.340068066
parking                        -0.029901271  0.106855222
prefareayes                     0.150685880  0.407071175
furnishingstatussemi-furnished -0.169204560  0.091201562
furnishingstatusunfurnished    -0.311617770 -0.013714692

Kordajate korral tuleb uurida, kas usaldusvahemik katab nulli või mitte.

  • Kui katab, siis me ei saa olla kindlad, et kordaja ei ole 0 ehk seos võib ka puududa.
  • Kui ei kata, siis võime järeldada, et seos kehtib.

Eelnevalt esitatud usaldusvahemikke aitab ehk paremini mõista nende uurimine joonisel.

Näeme, et posiivne seos hinnaga on tunnustel stories, prefarea, guestroom, bathroom ja airconditioning. Maja hind on aga madalam, kui tunnus furnishingstatus == unfurnished.

Enamasti kasutatakse regressioonikordajate üldistatavuse hindamiseks aga statistilist hüpoteeside testimist. Vastavate p-väärtuste kuvamiseks saab kasutada funktsiooni summary().

mudel <- lm(price ~ ., majad)
summary(mudel)

Call:
lm(formula = price ~ ., data = majad)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.18707 -0.30604 -0.02051  0.31253  0.99828 

Coefficients:
                                 Estimate Std. Error t value Pr(>|t|)    
(Intercept)                     1.4136830  0.1627631   8.686 4.07e-16 ***
area                            0.0043780  0.0002344  18.679  < 2e-16 ***
bedrooms                        0.0290834  0.0428160   0.679 0.497567    
bathrooms                       0.3204299  0.0666516   4.808 2.57e-06 ***
stories                         0.2111208  0.0429969   4.910 1.60e-06 ***
mainroadyes                     0.1457445  0.0881620   1.653 0.099495 .  
guestroomyes                    0.2265766  0.0822529   2.755 0.006286 ** 
basementyes                     0.1109779  0.0613356   1.809 0.071538 .  
hotwaterheatingyes              0.0639111  0.1377097   0.464 0.642960    
airconditioningyes              0.2180708  0.0619582   3.520 0.000509 ***
parking                         0.0384770  0.0347270   1.108 0.268880    
prefareayes                     0.2788785  0.0651046   4.284 2.58e-05 ***
furnishingstatussemi-furnished -0.0390015  0.0661257  -0.590 0.555825    
furnishingstatusunfurnished    -0.1626662  0.0756474  -2.150 0.032441 *  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.4387 on 263 degrees of freedom
Multiple R-squared:  0.7831,    Adjusted R-squared:  0.7724 
F-statistic: 73.04 on 13 and 263 DF,  p-value: < 2.2e-16

22.4 Mudeli jäägid

Nagu nägime ka eelnevatest näidetest, siis regressioonimudelit iseloomustav sirge ei kata peaaegu kunagi kõiki vaatlusi.

Joonis 22.3: Regressiooni jäägid

Nagu näeme, siis vähemalt enamike majade korral ei ole hind täpselt selline nagu mudeli alusel oletada võiks. Ehk alati esinevad regressiooni jäägid (residuals), mis joonisel Joonis 22.3 on esitatud punasega. Jääke saame kuvada funktsiooniga residuals(), mille argumendiks on regressioonimudel. Need jäägid saame aga arvutada ja seejärel kasutada regressioonimudeli headuse hindamiseks. Väikeste vigadega regressioonimudel on mõistagi parem kui mudel, mis teeb suuri vigasid.

Regressioonimudeli headuse hindamiseks jääkide alusel on välja mõeldud palju erinevaid mõõdikuid, sh R-ruut, keskmine ruutviga, keskmine absoluutviga.

Jääkide alusel saame hinnata ka seda, kas regressioonimudel vastab mitmesugustele eeldustele. Üks eeldus regressioonimudeli kehtimiseks on jääkide allumine normaaljaotusele ehk nulli lähedal olevaid jääke peaks olema rohkem kui nullist palju erinevaid jääke.

22.5 Prognoosimine

Eelnevalt kasutasime regressioonimudelit, et kirjeldada mil viisil sõltuvad väljundtunnuse väärtused sisendtunnus(t)e väärtustest. Kuna teame seda sõltuvust, siis saame ka arvutada konkreetsete tunnustega maja hinna. Kui meid huvitab nt 700 ruutmeetrise maja hind, siis peaksime valima regressioonisirgel sellise hinna, mille korral pind on 700 ruutmeetrit.

R keeles saame mudeli alusel prognoosimiseks kasutada funktsiooni predict() alljärgnevalt.

mudel <- lm(price ~ area, majad)
predict(mudel, list(area = 700))
       1 
5.924087 

Näeme, et 456 ruutmeetrise maja turuväärtus on keskmiselt 4.59 mln USD.

Mitme sisendtunnusega mudeli korral peame prognoosimiseks määrama mitu sisendtunnuse väärtust.

mudel <- lm(price ~ area + bedrooms, majad)
predict(mudel, list(area = 678, bedrooms = 3))
       1 
5.780631 

Kolme magamistoaga 678 ruutmeetrise maja turule vastav hind on aga 5.78 mln USD.