Oulun yliopiston matemaattisten tieteiden tutkimusyksikkö/tilastotiede 805305A JOHDATUS REGRESSIO- JA VARIANSSIANALYYSIIN, sl 2017 (Esa Läärä & Jari Päkkilä) Harjoitus 5, viikko 40 (2. 6.10.): mikroluokkatehtävät 1. Jatkoa harjoituksen 6 kotitehtävään 3. Analysoidaan Yhdysvaltain osavaltioiden muodostamassa aineistossa leveyspiirin ja ihosyöpäkuolleisuuden välistä yhteyttä R:n avulla. Aineisto on kurssihakemistossa tiedostossa skincancer.txt, ja sen muuttujat ovat State = osavaltion nimi ST = osavaltion kaksikirjaiminen lyhenne Lat = leveyspiiri (latitude, o N) Mort = kuolleisuustiheys (mortality, per 10 6 henkilövuotta) Ocean = sijainti valtameren rannalla: 1 = kyllä, 0 = ei Long = pituuspiiri (longitude, o W) (a) Lue aineisto R:n datakehikoksi ja tutki sen rakennetta. > skinca <- read.table("y:/yleiset/mikroluokat/matematiikka/jrva2017/skincancer.txt", + header=t) > str(skinca) > head(skinca) (b) Muunna kuolleisuuden mittayksiköksi per 100000 henkilövuotta. Kiinnitä datakehikko niin, että voit jatkossa kutsua muuttujia pelkillä etunimillään. > skinca$mort <- skinca$mort/10 > attach(skinca) > summary(skinca) (c) Laske ja tulosta ja talleta omiin skalaarimuuttujiinsa leveyspiirin ja kuolleisuuden reunajakaumien keskeiset tunnusluvut sekä niiden välinen korrelaatiokerroin. Huom. Kun sijoituskomennon ympärille pannaan sulkumerkit, niin sijoituksen lisäksi ohjelma tulostaa sijoituksen sisältämän laskutoimituksen tuloksen. > ( mean.x <- mean(lat) ) > ( sd.x <- sd(lat) ) > ( mean.y <- mean(mort) ) > ( sd.y <- sd(mort) ) > ( r.xy <- cor(lat, Mort) ) Kuinka vahva on muuttujien välinen korrelaatio? (d) Piirrä leveyspiirin ja kuolleisuuden välille samanlainen sirontakuvio kuin kotitehtäväpaperissakin, jossa havaintopisteet merkitään osavaltioiden lyhenteillä umpipallolla, ja kuva-alue ruudutetaan harmailla vaaka- ja pystyviivoilla. Funktion plot() kutsussa asetus type="n" (= none ) saa aikaan sen, että kuvaan ei ensin piirretä havaintopisteitä lainkaan. Sen jälkeen lyhenteet ST kirjoitetaan funktiolla text() muuttujien Lat ja Mort määräämien koordinaattipisteiden kohdalle > par(mfrow=c(1,1)) > plot(lat, Mort, type = "n", + xlab = "Leveysaste", ylab = "Kuolleisuus (per 100000 v)" ) > abline( h = 8 + 1:15, col = "gray") > abline( v = 26+(1:22), col = "gray") > text(lat, Mort, ST) (e) Laske ja tulosta regressiokertoimen β 1 ja β 0 estimaattien arvot käyttäen hyväksi aiemmin laskemiasi keskiarvoja, keskihajontoja ja korrelaatiokerrointa ja soveltaen luentomonisteen alaluvun 6.2 ao. kaavoja. Vertaa kotitehtävän ratkaisussasi antamiisi estimaatteihin
> b1hat <- r.xy * sd.y/sd.x > b0hat <- mean.y - b1hat * mean.x > c( b0hat, b1hat ) 2. Regressiomallin sovittaminen funktiolla lm(). (a) Sovita regressiomalli vasteena Mort ja selittäjänä Lat käyttäen funktiota lm() (= linear model) ja sijoita sovitustulokset malliobjektiin m1: > m1 <- lm( Mort ~ Lat ) Tästä eteenpäin malliobjektiin m1 talletetuista sovitustuloksista voidaan tulostaa monia kiinnostavia tunnuslukuja kutsuen vastaavia funktioita pääargumentilla m1. (b) Tulosta mallisovituksen päätulokset funktiolla summary() ja Anova-taulun rivit funktiolla anova() ja tutki, mitä informaatiota nämä antavat. > summary(m1) > anova(m1) Saitko samat estimaatit regressiokertoimille kuin edellisessä kohdassa? (c) Kertoimien piste-estimaatit ja luottamusvälit saadaan tulostetuksi samanaikaisesti yhdistämällä funktioiden coef() ja confint() tuottamat sarakevektorit: > round( cbind( coef(m1), confint(m1) ), 4) (d) Tarkista, että edellä komennon summary(m1) tulostuksessa suureen Residual standard error eli funktion summary() tuottaman objektin aliobjektin sigma arvo on sama kuin Anovataulun jäännöskeskineliösumman MSE neliöjuuri eli jäännöskeskihajonta S. > (S <- summary(m1)$sigma ) > S^2 3. Jatkoa edelliseen tehtävään. Tutkitaan vielä mallituksesta saatavia sovitteita ja jäännöstermejä. (a) Sijoita vasteen sovitteet Ŷi vektoriin Yhat funktiolla fitted() ja jäännöstermit E i vektoriin Res funktiolla resid(). Listaa tämän jälkeen rinnakkain havainnot, sovitteet ja jäännöstermit: > Yhat <- fitted(m1) > Res <- resid(m1) > data.frame(state, ST, Lat, Mort, Yhat, Res) (b) Sijoita sirontakuvioon kullekin havaintoyksikölle sovitetut arvot, piirrä sovitettu suora ja havainnollista jäännöstermejä yhdistämällä havaitut ja sovitetut arvot pisteviivoin. Merkitse myös muuttujien Lat ja Mort keskiarvojen määräämä piste koordinaatistoon punaisella, tavanomaista suurikokoisemmalla pallolla. > points( Yhat ~ Lat) # lisätään kuvaan sovitteet > abline(m1) # mallin m1 mukainen sovitetesuora > segments( Lat, Mort, Lat, Yhat, lty=3 ) # pystysuorat janat > points( mean.x, mean.y, pch=16, cex=2, col="red") # keskiarvot Millä kolmella osavaltiolla residuaalien itseisarvot näyttäisivät olevan muita suuremmat? (c) Muodosta potentiaalisten X-muuttujan arvojen hila vaihteluvälille [28, 48] yhden välein: > Xnew <- data.frame( Lat = seq(28, 48, by=1) )
(d) Käyttäen funktiota predict() luo 3-sarakkeinen matriisi Yfit, jossa on edellä muodostetuille X-arvoille X k {28,29,...,47,48}, lasketut vasteen sovitteet Ŷk = β 0 + β 1 X k eli piste-estimaatit vasteen odotusarvoille µ k = β 0 +β 1 X k ja näiden 95% luottamusvälien ala- ja ylärajat, ja tulosta tämä matriisi yhdessä X-arvojen kanssa: > Yfit <- predict(m1, newdata= Xnew, interval="confidence", level=0.95) > round(cbind(xnew, Yfit), 2) (e) Vasteen odotusarvojen luottamusvälien ala- ja ylärajat ovat siis Yfit-matriisin 2. ja 3. sarakkeella. Piirrä sirontakuvioon näiden luottamusvälien vyöhyke katkoviivoin: > lines( Xnew[, 1], Yfit[, 2], lty=2) > lines( Xnew[, 1], Yfit[, 3], lty=2) Mitä havaintoja teet? (f) Luo samantyyppinen matriisi Ypred edelleen funktiolla predict() mutta nyt käyttäen optiota interval="predict", joka laskee kullekin uudelle X-arvolle X k vasteen ennusteen Ỹk (joka on siis sama kuin sovite Ŷk) sekä 95% ennustevälin. Listaa tämän matriisin sisältö yhdessä Xnewarvojen sekä Yfit-matriisin kanssa kuten edellä. Piirrä ennustevälien vyöhyke sirontakuvioon kuten sovitteelle edellä mutta käyttäen pisteviivaa (lty=3). Mitä havaintoja teet? 4. Jäännöstermien eli residuaalien tarkastelua (a) Piirrä rinnakkain kolme sirontakuviota, jossa kussakin havaintopisteiden y-koordinaattina on vasteen raakaresiduaali E i = Y i Ŷi ja x-koordinaattina on ensin leveyspiiri Lat ja jälkimmäisissä vasteen sovite Ŷi. Kolmas kuvio piirretään geneerisen plot()-funktion lm-malliobjektille spesifin metodin avulla > par(mfrow=c(1,3)) > plot( Lat, Res, type="n") > abline(h = 0, col="gray") > text( Lat, Res, ST) > plot( Yhat, Res, type="n") > abline(h = 0, col="gray") > text( Yhat, Res, ST) > plot(m1, which=1) Vertaa kuvia keskenään. Mitä havaintoja teet yhtäältä mallin lineaarisuus- ja toisaalta vakiovarianssioletuksen realistisuudesta? Mitkä osavaltiot on oikeanpuoleisessa kuvassa erikseen merkitty järjestysnumeroillaan? (b) Kunkin havaintoyksikön potentiaali h i = [1/n+(X i X) 2 /SSX] saadaan malliobjektista funktiolla hatvalues(). Sijoita potentiaalit muuttujaan hi. Laske standardoitujen residuaalien arvot määritelmän mukaan r i = E i /(S 1 h i ). Piirrä sirontakuvio, jossa standardoidut residuaalit ovat potentiaaleja vastaan. Piirrä toinen kuvio hyödyntäen ao. plot-metodia. > par(mfrow=c(1,2)) > hi <- hatvalues(m1) > ri <- Res/(S*sqrt(1 - hi)) > plot( hi, ri, type="n", xlim=c(0,0.15) ) > abline(h = c(-2, 0, 2), col="gray") > text( hi, ri, ST) > plot(m1, which=5) Tarkastele kuviota ja vertaa niitä keskenään. Mitä havaintoja teet? Onko aineistossa selkeitä oudokkeja? Huom. Standardoidut residuaalit saadaan myös funktiokutsulla rstandard(m1). (c) Piirretään vielä plot-metodin avulla skaala-sijaintikuvio, jossa y-akselilla ovat luvut r i ja x-akselilla vasteen sovitteet Ŷi, sekä standardoitujen residuaalien QQ-kuvio.
> par(mfrow=c(1,2)) > plot(m1, 2:3) Mitä havaintoja teet? Antavatko nämä kuviot näyttöä virhetermien normaalisuus- ja homoskedastisuusoletusta vastaan? 5. Joukolta vapaaehtoisia miehiä (n = 20) ja naisia (n = 20) mitattiin heidän älykkyysosamääränsä (IQ), aivojen koko (MRI) magneettikuvauslaitteen avulla pikseleinä ( 100000, 18 MRI-kuvasta) sekä mm. pituus (cm). Halutaan selvittää kummallakin sukupuolella erikseen, missä määrin älykkyysosamäärä on yhteydessä aivojen kokoon. Havaintoaineisto on talletettu kurssin kotikansioon tiedostonimellä brain.txt. (a) Lue aineisto R:n muistiin ja tutki aineiston rakennetta funktiolla str(). > brain <- read.table("y:/yleiset/mikroluokat/matematiikka/jrva2017/brain.txt", + header=t) > str(brain) (b) Sukupuolimuuttuja suku on koodattu: 0 = mies ja 1 = nainen. Muodosta tästä luokitteluasteikollinen tekijä sukup. Laske sen jälkeen sukupuolittain perustunnuslukuja muuttujista IQ, MRI ja pituus. > brain$sukup <- factor(brain$suku, levels=c(0,1), labels = c("mies", "nainen") ) > attach(brain) > source("y:/yleiset/mikroluokat/matematiikka/jrva2017/esanfunktiot.r") > tunnus.taulu(iq, sukup, 1) > tunnus.taulu(mri, sukup, 2) > tunnus.taulu(pituus, sukup, 1) Miehillä ja naisilla näyttäisi olevan eroa MRI-muuttujan jakauman sijainnissa, kun taas ero IQmuuttujan keskiarvojen välillä on melko vaatimaton. (c) Poimitaan brain-aineistosta erilliset datakehikot miehille ja naisille funktiolla subset(). Sen avulla valitaan 1. argumenttina annettavasta alkuperäisestä datakehikosta osajoukko, jonka alkiot täyttävät 2. argumentin sisältämän loogisen ehdon. > brain.m <- subset(brain, sukup == "mies") ; brain.m > brain.n <- subset(brain, sukup == "nainen") ; brain.n (d) Piirretään miehille ja naisille vierekkäiset sirontakuviot > par(mfrow=c(1,2)) > with(brain.m, plot(iq ~ MRI, pch = 16, main = "Miehet") ) > with(brain.n, plot(iq ~ MRI, pch = 16, main = "Naiset") ) (e) Kuinka suuri on korrelaatiokerroin IQ:n ja MRI:n välillä erikseen miehillä ja naisilla? > with( brain.m, cor(mri, IQ) ) > with( brain.n, cor(mri, IQ) ) Millä edellytyksillä korrelaatiokerroin on mielekäs riippuvuusluku? Mitä arvelet, kuinka hyvin nämä edellytykset on täytetty tässä aineistossa? 6. Regressio aivojen koon ja älykkyysosamäärän välillä (a) Sovitetaan pelkästään naisten aineistoon lineaarinen regressiomalli Y i = β 0 + β 1 X i + ε i, jossa vastemuuttuja Y = IQ ja selittäjä X = MRI.
> malli.n <- lm( IQ ~ MRI, data = brain.n) > summary(malli.n) > round( cbind( coef(malli.n), confint(malli.n) ), 2) Miten tulkitset estimoituja regressiokertoimia ja mitä päättelet aivojen koon ja älykkyysosamäärän välisestä riippuvuudesta tämän aineiston pohjalta? (b) Piirretään uudelleen naisten sirontakuvio ja lisätään siihen edellä sovitettu regressiosuora funktiolla abline(). > par(mfrow=c(1,1)) > with(brain.n, plot( IQ ~ MRI, pch = 16) ) > abline(malli.n) (c) Laske ja piirrä älykkysosamäärälle mallin mukaisten ehdollisten odotusarvojen 95% luottamusvälien muodostama vyöhyke MRI:n arvojen vaihteluvälillä [7.5, 10.5], jossa by = 0.25. Ota mallia tehtävän 3. kohdista (c) (e). (d) Laske ja piirrä älykkyysosamäärän 95% ennusteväli MRI:n arvojen vaihteluvälillä [7.5, 10.5]. Ota mallia tehtävän 3. kohdasta (f). 7. Jatkoa kahteen edelliseen tehtävään. Jos aikaa jää, niin tee samat analyysitehtävät mutta tällä kertaa rajoittuen miesten osajoukkoon. Vertaa tuloksia naisten ja miesten välillä. Mitä havaintoja ja päätelmiä teet? Jatkossa tulee pohdittavaksi mm. se, olisiko miesten ja naisten regressiosuorien todellisilla kulmakertoimilla täsmälleen sama arvo.