R-ohjelman käyttö data-analyysissä Panu Somervuo 2014 Tässä harjoituksessa käydään läpi R-ohjelman käyttöä esimerkkidatan avulla. 0) käynnistetään R-ohjelma Huom.1 allaolevissa ohjeissa '>' merkki on R:n prompti, eli sitä ei kirjoiteta itse kun annetaan R- komentoja. R-komennot ja R:n tulostus on esitetty Courier fontilla. Huom.2 kun luetaan dataa, on helpointa, että siirrytään R-ohjelmassa samaan hakemistoon, jossa data sijaitsee. Tämä tapahtuu File-valikon Change dir avulla. 1) luetaan data tiedostosta 'data.txt'. Määritetään, että desimaalierotin on pilkku ',' ja tiedoston ensimmäisellä rivillä on sarakkeiden nimet (header=t). Tiedoston sisältö luetaan muuttujaan, jonka nimeksi määrätään 'x'. > x=read.table("data.txt",dec=",", header=t) Kyseistä muuttujaa kutsutaan R-ohjelmassa data.frame:ksi. Siinä meillä on riveillä havaintoja (nyt 200 kpl) ja sarakkeissa havaintojen mittauksia (tässä tapauksessamme sukupuoli, muuttujat m1-5, ja hyvinvointi-arvo). dim(x) komento kertoo data-matriisin koon > dim(x) [1] 200 7 eli matriisissa on 200 riviä (havainnot) ja 7 saraketta (mittaus-arvot) 2) Katsotaan sarakkeiden lukuarvojen jakaumia > summary(x) sukupuoli m1 m2 m3 mies :100 Min. : 0.100 Min. : 2.6359 Min. : 5.5854 nainen:100 1st Qu.: 2.575 1st Qu.: 0.9125 1st Qu.: 2.3135 Median : 5.050 Median : 2.0235 Median : 0.5698 Mean : 5.050 Mean : 2.0614 Mean : 0.5515 3rd Qu.: 7.525 3rd Qu.: 3.1957 3rd Qu.: 1.2026 Max. :10.000 Max. : 5.9302 Max. : 4.5773 m4 m5 hyvinvointi Min. : 0.0291488 A:50 Min. : 2.0516 1st Qu.: 0.0069078 B:50 1st Qu.: 0.7547 Median : 0.0009545 C:50 Median : 2.1147 Mean : 0.0004118 D:50 Mean : 1.9937 3rd Qu.: 0.0064430 3rd Qu.: 3.1376 Max. : 0.0288280 Max. : 7.8844 3) Piirretään boxplot: data-matriisin 'x' sarake, jonka nimi on 'hyvinvointi' sarakkeen 'sukupuoli' suhteen. Määritetään värit argumentilla col.
> boxplot(hyvinvointi ~ sukupuoli, data=x, col=c("blue","red")) 4) Käytetään t-testiä vertaamaan onko miesten ja naisten välillä tilastollisesti merkitsevää eroa > t.test(hyvinvointi ~ sukupuoli, data=x) Welch Two Sample t test data: hyvinvointi by sukupuoli t = 4.5054, df = 196.21, p value = 1.137e 05 alternative hypothesis: true difference in means is not equal to 0 95 percent confidence interval: 1.4313147 0.5597656 sample estimates: mean in group mies mean in group nainen 1.49596 2.49150 Koska saatu p-arvo on pieni (1.137e-5), se kertoo että on hyvin epätodennäköistä saada samankokoinen tai suurempi ero ryhmien välille sattumalta (eli tilanteessa, jossa ryhmien välillä ei oikeasti olisi eroa), joten päätellään, että ryhmien välillä on oikeasti ero. 5) Piirretään boxplot: hyvinvointi-arvot versus muttujan m5-suhteen. Muuttuja m5 on faktori, jolla on neljä tasoa (A,B,C,D). Lisätään boxplottiin värejä parametrilla col. > boxplot(hyvinvointi ~ m5, data=x, col=c("red","blue","green","yellow"))
6) Käytetään yksisuuntaista varianssi-analyysiä (one-way ANOVA) testaamaan, onko ryhmien A,B,C,D keskiarvojen välillä ero. ANOVA:n tuloksena saadaan selville, poikkeaako joku ryhmien keskiarvoista muista, tämän jälkeen tehdään post hoc-testi käyttäen Tukeyn Honest Significant Differences testiä, josta saadaan selville minkä ryhmien välillä on eroja. Talletetaan ANOVA:n tulos muttujaan m. > m=aov(hyvinvointi ~ m5, data=x) > summary(m) Df Sum Sq Mean Sq F value Pr(>F) m5 3 132.7 44.25 21.67 3.66e 12 *** Residuals 196 400.2 2.04 > TukeyHSD(m) Tukey multiple comparisons of means 95% family wise confidence level Fit: aov(formula = hyvinvointi ~ m5, data = x) $m5 diff lwr upr p adj B A 0.3771478 0.3633802 1.11767572 0.5515108 C A 2.0924859 1.3519579 2.83301384 0.0000000 D A 1.2951409 0.5546129 2.03566882 0.0000597 C B 1.7153381 0.9748102 2.45586608 0.0000001 D B 0.9179931 0.1774651 1.65852106 0.0083168 D C 0.7973450 1.5378730 0.05681706 0.0293269 7) Piirretään scatterplot: muuttujan m1 ja hyvinvoinnin välillä. Määrätään x-akselin nimeksi 'ruokavalio' ja y-akselin nimeksi 'hyvinvointi'
> plot(x$m1, x$hyvinvointi, xlab="ruokavalio", ylab="hyvinvointi") 8) Sovitetaan lineaarinen regressiosuora > model1=lm(hyvinvointi ~ m1, data=x) 9) Lisätään suoran kuvaaja edelliseen kuvaan > abline(model1) 10) Testataan onko edellämainitun suoran kulmakertoimen arvo tilastollisesti merkitsevä > summary(model1) Call: lm(formula = hyvinvointi ~ m1, data = x) Residuals: Min 1Q Median 3Q Max 3.9933 0.9950 0.0502 0.9349 5.4778 Coefficients: Estimate Std. Error t value Pr(> t ) (Intercept) 0.80223 0.21245 3.776 0.000211 *** m1 0.23594 0.03652 6.460 7.95e 10 *** Residual standard error: 1.491 on 198 degrees of freedom Multiple R squared: 0.1741, Adjusted R squared: 0.1699 F statistic: 41.73 on 1 and 198 DF, p value: 7.946e 10
m1-efektin arvo on tilastollisesti erittäin merkitsevä (pieni p-arvo). Tässä mallissa m1-efekti on suoran kulmakerroin. Intercept on offset-arvo, eli suoran y-akselin arvo, kun x-akselin arvo on nolla. Sen merkitsevyydestä ei tässä esimerkissä olla kiinnostuneita. 11) Sovitetaan lineaarinen malli, jossa hyvinvointia yritetään selittää muuttujien sukupuoli, m1, ja m4 avulla > model2=lm(hyvinvointi ~ sukupuoli + m1 + m4, data=x) > summary(model2) Call: lm(formula = hyvinvointi ~ sukupuoli + m1 + m4, data = x) Residuals: Min 1Q Median 3Q Max 3.8652 0.9079 0.0847 0.9113 5.0394 Coefficients: Estimate Std. Error t value Pr(> t ) (Intercept) 0.29615 0.22447 1.319 0.189 sukupuolinainen 1.00426 0.19965 5.030 1.10e 06 *** m1 0.23734 0.03457 6.865 8.57e 11 *** m4 7.54960 9.68668 0.779 0.437 Residual standard error: 1.41 on 196 degrees of freedom Multiple R squared: 0.2693, Adjusted R squared: 0.2581 F statistic: 24.08 on 3 and 196 DF, p value: 2.605e 13 Havaitaan että sekä sukupuolen, että muuttujan m1 vaikutus on tilastollisesti merkitsevä (pieni p- arvo), sen sijaan muuttujan m4 vaikutus ei ole tilastollisesti merkitsevä. Huom. tässä harjoituksessa ei ollut tarkoitus mennä tilastotieteen varsinaisiin syövereihin, mutta niinkuin kaikkien menetelmien käytössä ja tulosten tulkinnassa, on hyvä tietää mallien ja tilastollisten testien oletukset. Lineaarisissa malleissa yritetään selittää vastemuuttujaa tai selitettävää muuttujaa (meillä hyvinvointi) valittujen selittävien muuttujien lineaarikombinaatiolla. Selittävillä muuttujilla voi olla sekä pää-efekti että interaktio-efekti. Jälkimmäisessä tapauksessa päävaikutuksen efektillä ei ole varsinaisesti tulkintaa. Harjoitus-data esimerkissä selittävien muuttujien välillä ei ole voimakasta interaktiota (yhdysvaikutusta), jonka voi testata seuraavasti. R:ssä malli, jossa otetaan sekä pää-vaikutukset että interaktiotermit mukaan määritetään kertomerkin avulla (pelkkä sukupuoli+m1+m4 määrittely ottaisi mukaan vain selittävien muuttujien päävaikutukset). > model2i=lm(hyvinvointi ~ sukupuoli*m1*m4, data=x) > summary(model2i) Call: lm(formula = hyvinvointi ~ sukupuoli * m1 * m4, data = x) Residuals: Min 1Q Median 3Q Max 3.7587 0.8515 0.0830 0.9067 4.9830
Coefficients: Estimate Std. Error t value Pr(> t ) (Intercept) 0.44129 0.28436 1.552 0.1223 sukupuolinainen 0.68657 0.40277 1.705 0.0899. m1 0.20939 0.04891 4.281 2.93e 05 *** m4 14.68818 27.00992 0.544 0.5872 sukupuolinainen:m1 0.06170 0.06926 0.891 0.3742 sukupuolinainen:m4 62.31218 37.81396 1.648 0.1010 m1:m4 2.00191 4.52188 0.443 0.6585 sukupuolinainen:m1:m4 7.88634 6.52033 1.210 0.2280 Residual standard error: 1.41 on 192 degrees of freedom Multiple R squared: 0.2837, Adjusted R squared: 0.2576 F statistic: 10.87 on 7 and 192 DF, p value: 1.588e 11 Tulostuksessa Coefficients, joiden nimissä on ':'-merkki tarkoittaa interaktio-termejä. Nähdään, että minkään näistä p-arvo ei ole pieni, joten merkitsevää yhdysvaikutusta ei siis ole valittujen muuttujien välillä. Näinollen vastemuuttujaa voidaan selittää päävaikutusten avulla (joista m1 on eniten merkitsevä). Huom. kuten nähdään, yhdysvaikutusten mukaanotto pienensi päävaikutusten merkitsevyyttä.