Pasi Väkeväinen. Ohjeita tilastollisen tutkimuksen toteuttamiseksi R-ohjelmiston avulla

Samankaltaiset tiedostot
Tässä harjoituksessa käydään läpi R-ohjelman käyttöä esimerkkidatan avulla. eli matriisissa on 200 riviä (havainnot) ja 7 saraketta (mittaus-arvot)

Pasi Väkeväinen. Ohjeita tilastollisen tutkimuksen toteuttamiseksi MATLAB-ohjelmiston avulla

Raija Leppälä. Ohjeita tilastollisen tutkimuksen toteuttamiseksi IBM SPSS Statistics -ohjelmiston avulla

TUTKIMUSOPAS. SPSS-opas

SPSS-perusteet. Sisältö

MTTTP1, luento KERTAUSTA

MTTTA1 Tilastomenetelmien perusteet 5 op Luento Kokonaisuudet johon opintojakso kuuluu

(d) Laske selittäjään paino liittyvälle regressiokertoimelle 95 %:n luottamusväli ja tulkitse tulos lyhyesti.

Lisätehtäviä ratkaisuineen luentomonisteen lukuun 6 liittyen., jos otoskeskiarvo on suurempi kuin 13,96. Mikä on testissä käytetty α:n arvo?

MTTTA1 Tilastomenetelmien perusteet 5 op Luento , osa 1. 1 Kokonaisuudet johon opintojakso kuuluu

Kandidaatintutkielman aineistonhankinta ja analyysi

ATH-koulutus: R ja survey-kirjasto THL ATH-koulutus / Tommi Härkänen 1

voidaan hylätä, pienempi vai suurempi kuin 1 %?

MTTTP1, luento KERTAUSTA


Tilastollinen vastepintamallinnus: kokeiden suunnittelu, regressiomallin analyysi, ja vasteen optimointi. Esimerkit laskettu JMP:llä

Residuaalit. Residuaalit. UK Ger Fra US Austria. Maat

Esim Brand lkm keskiarvo keskihajonta A ,28 5,977 B ,06 3,866 C ,95 4,501

Perusnäkymä yksisuuntaiseen ANOVAaan

MTTTP1, luento KERTAUSTA

FoA5 Tilastollisen analyysin perusteet puheentutkimuksessa. 9. luento. Pertti Palo

Harjoitus 7: NCSS - Tilastollinen analyysi

1. Tietokoneharjoitukset

Tehtävä 1. (a) JYVÄSKYLÄN YLIOPISTO Matematiikan ja tilastotieteen laitos Parametrittomat ja robustit menetelmät Harjoitukset 7, vastaukset

MTTTP5, luento Luottamusväli, määritelmä

1. YKSISUUNTAINEN VARIANSSIANALYYSI: AINEISTON ESITYSMUODOT

Muuttujien määrittely

54. Tehdään yhden selittäjän lineaarinen regressioanalyysi, kun selittäjänä on määrällinen muuttuja (ja selitettävä myös):

Yleinen lineaarinen malli eli usean selittäjän lineaarinen regressiomalli

voidaan hylätä, pienempi vai suurempi kuin 1 %?

Sisällysluettelo ESIPUHE KIRJAN 1. PAINOKSEEN...3 ESIPUHE KIRJAN 2. PAINOKSEEN...3 SISÄLLYSLUETTELO...4

2. Tietokoneharjoitukset

Valitaan testisuure, jonka jakauma tunnetaan H 0 :n ollessa tosi.

OHJ-7600 Ihminen ja tekniikka -seminaari, 4 op Käyttäjäkokemuksen kvantitatiivinen analyysi. Luento 3

pisteet Frekvenssi frekvenssi Yhteensä

Tilastolliset ohjelmistot A. Pinja Pikkuhookana

1.Työpaikan työntekijöistä laaditussa taulukossa oli mm. seuraavat rivit ja sarakkeet

Luottamisvälin avulla voidaan arvioida populaation tuntematonta parametria.

Luottamisvälin avulla voidaan arvioida populaation tuntematonta parametria.

Tilastollisen analyysin perusteet Luento 11: Epäparametrinen vastine ANOVAlle

Näistä standardoiduista arvoista laskettu keskiarvo on nolla ja varianssi 1, näin on standardoidulle muuttujalle aina.

Matriisit ovat matlabin perustietotyyppejä. Yksinkertaisimmillaan voimme esitellä ja tallentaa 1x1 vektorin seuraavasti: >> a = 9.81 a = 9.

StatCrunch -laskentasovellus

Tavanomaisten otostunnuslukujen, odotusarvon luottamusvälin ja Box ja Whisker -kuvion määritelmät: ks. 1. harjoitukset.

Valitse ruudun yläosassa oleva painike Download Scilab.

Näistä standardoiduista arvoista laskettu keskiarvo on nolla ja varianssi 1, näin on standardoidulle muuttujalle aina.

Sisällysluettelo ESIPUHE... 4 ALKUSANAT E-KIRJA VERSIOON... 5 SISÄLLYSLUETTELO JOHDANTO TILASTOLLISEEN PÄÄTTELYYN TODENNÄKÖISYYS...

1. Työpaikan työntekijöistä laaditussa taulukossa oli mm. seuraavat rivit ja sarakkeet

Luottamisvälin avulla voidaan arvioida populaation tuntematonta parametria.

Ohjeita tilastollisen tutkimuksen toteuttamiseksi SPSS for Windows -ohjelmiston avulla

Johdatus varianssianalyysiin. Vilkkumaa / Kuusinen 1

Jos nollahypoteesi pitää paikkansa on F-testisuuren jakautunut Fisherin F-jakauman mukaan

KURSSIKYSELYAINEISTO: HUOM! Aineiston tilastoyksikkömäärä 11 on kovin pieni oikean tilastotieteen tekemiseen, mutta Harjoitteluun se kelpaa kyllä!

Pylväsdiagrammi Suomen kunnat lääneittäin vuonna Piirakkadiagrammi Suomen kunnat lääneittäin vuonna 2003 LKM 14.8% 11.2% 19.7% 4.9% 3.6% 45.

5 Osa 5: Ohjelmointikielen perusteita

&idx=1&uilang=fi&lang=fi&lvv=2017

Suhtautuminen Sukupuoli uudistukseen Mies Nainen Yhteensä Kannattaa Ei kannata Yhteensä

Harjoitus 1: Matlab. Harjoitus 1: Matlab. Mat Sovelletun matematiikan tietokonetyöt 1. Syksy 2006

I. Ristiintaulukointi Excelillä / Microsoft Office 2010

Katsaus R :ään, tilastolliseen ohjelmointiympäristöön

Opiskelija viipymisaika pistemäärä

Ohjelmoinnin perusteet Y Python

ITKP102 Ohjelmointi 1 (6 op)

Moottorin kierrosnopeus Tämän harjoituksen jälkeen:

Tarkista vielä ennen analysoinnin aloittamista seuraavat seikat:

SPSS* - tilastoanalyyttinen ohjelma, vrs 9.0

r = n = 121 Tilastollista testausta varten määritetään aluksi hypoteesit.

OKLV120 Demo 7. Marika Peltonen

ALKUSANAT... 4 ALKUSANAT E-KIRJA VERSIOON... 5 SISÄLLYSLUETTELO... 6

VARIANSSIANALYYSI ANALYSIS OF VARIANCE

Määrällisen aineiston esittämistapoja. Aki Taanila

Kaksisuuntainen varianssianalyysi. Vilkkumaa / Kuusinen 1

Esim. Pulssi-muuttujan frekvenssijakauma, aineisto luentomoniste liite 4

Luento 5. Timo Savola. 28. huhtikuuta 2006

2. Aineiston kuvailua

Esimerkki 1: auringonkukan kasvun kuvailu

xi = yi = 586 Korrelaatiokerroin r: SS xy = x i y i ( x i ) ( y i )/n = SS xx = x 2 i ( x i ) 2 /n =

CLT255: Tulosten esittäminen ja niiden arviointi tilastomenetelmillä

Ilmoittaudu Weboodissa klo (sali L4) pidettävään 1. välikokeeseen!

Ohjelmoinnin perusteet Y Python

Tilastolliset toiminnot

Tilastollisten menetelmien perusteet II TILTP3 Luentorunko

Laskuharjoitus 9, tehtävä 6

Kaksisuuntainen varianssianalyysi. Heliövaara 1

Ongelma: Poikkeaako perusjoukon suhteellinen osuus vertailuarvosta?

A130A0650-K Tilastollisen tutkimuksen perusteet 6 op Tentti / Anssi Tarkiainen & Maija Hujala

Sovellettu todennäköisyyslaskenta B

Kvantitatiiviset menetelmät

Tilastollisen analyysin perusteet Luento 10: Johdatus varianssianalyysiin

MTTTP1, luento KERTAUSTA JA TÄYDENNYSTÄ. Tunnusluvut. 1) Sijainnin tunnuslukuja. Keskilukuja moodi (Mo) mediaani (Md) keskiarvo, kaava (1)

TUTKIMUSAINEISTON KVANTITATIIVINEN ANALYYSI LTKY012. Timo Törmäkangas

Näillä sivuilla Tilastomatematiikan esimerkit, joissa käsitellään tietokoneen käyttöä tilastollissa operaatioissa, on tehty Excel versiolla.

TAULUKON TEKEMINEN. Sisällysluettelo

Ohjelmoinnin peruskurssi Y1

Kaksisuuntaisen varianssianalyysin tilastollisessa malli voidaan esittää seuraavassa muodossa:

IBM SPSS Statistics 21 (= SPSS 21)

3. a) Mitkä ovat tilastolliset mitta-asteikot? b) Millä tavalla nominaaliasteikollisen muuttujan jakauman voi esittää?

Väliestimointi (jatkoa) Heliövaara 1

Ohjelmoinnin perusteet Y Python

VALTIOTIETEELLINEN TIEDEKUNTA TILASTOTIETEEN VALINTAKOE Ratkaisut ja arvostelu < X 170

Transkriptio:

Pasi Väkeväinen Ohjeita tilastollisen tutkimuksen toteuttamiseksi R-ohjelmiston avulla TAMPEREEN YLIOPISTO INFORMAATIOTIETEIDEN YKSIKÖN RAPORTTEJA 64/2018 TAMPERE 2018

TAMPEREEN YLIOPISTO INFORMAATIOTIETEIDEN YKSIKÖN RAPORTTEJA 64/2018 SYYSKUU 2018 Pasi Väkeväinen Ohjeita tilastollisen tutkimuksen toteuttamiseksi R-ohjelmiston avulla ISBN 978-952-03-0872-8 (pdf) ISSN-L 1799-8158 ISSN 1799-8158

Aluksi Tässä oppaassa on R-toteutukset Raija Leppälän oppaan Ohjeita tilastollisen tutkimuksen toteuttamiseksi IBM SPSS Statistics -ohjelmiston avulla esimerkeistä sekä yleisiä ohjeita ohjelmistoon liittyen. R on ohjelmointikieli ja ohjelmisto tilastolliseen laskentaan ja grafiikan tuottamiseen. R:ää käytetään usein käyttöliittymäohjelmistojen, kuten RGui:n tai RStudion avulla. Kaikki edellä mainitut ohjelmistot ovat avoimen lähdekoodin projekteja ja maksuttomia käyttää (pl. RStudion kaupallinen lisenssi). Siinä missä maksullinen SPSS on ns. point and click -tyyppinen ohjelma, R:ssä käyttäjä ilmaisee aikomuksensa pääasiallisesti tekstikomennoin. R-ohjelmiston edistyneemmät toiminnot vaativat käyttäjältä jonkin verran ohjelmointiosaamista, mutta aiempaa kokemusta ohjelmoinnista tämän oppaan lukijalta ei oleteta. Tässä oppaassa käytetään RStudio-ohjelmistoa, joka on ladattavissa sivustolta https://www.rstudio.com/. Käytetty RStudio-versio on 1.1.453 ja R-versio 3.5.0. Lukijalta oletetaan perusosaamista tilastotieteestä ja käytettävien menetelmien tuntemista, sillä tämä opas keskittyy toteutukseen R-kielellä. Aluksi tutustutaan yleisemmin R- ympäristöön ja syntaksiin, sen jälkeen aineiston käsittelyyn ja lopuksi analysointimenetelmiin. Opas on kirjoitettu siten, että parhaan hyödyn siitä saa toistamalla esimerkkejä järjestyksessä alusta alkaen. Tampereella 10. syyskuuta 2018 Pasi Väkeväinen 1

Sisällysluettelo RStudio ja R-kieli... 3 Muuttuja, sijoitusoperaatio ja tietotyypit... 3 Funktio... 7 Ohjelmakirjastot... 7 Aineiston tuonti... 8 Aineiston ja työtilan tallennus... 9 Aineiston käsittely, jakaumat ja plottaus... 10 Muuttujien muunnokset laskutoimituksilla... 10 Ehdollistaminen... 10 Histogrammi... 11 Pylväsdiagrammi... 13 Muuttujan luokittelu... 14 Ehdolliset frekvenssihistogrammit... 16 Ristiintaulukointi... 18 Tunnusluvut... 20 Ehdolliset tunnusluvut... 21 Laatikkojana... 22 Pisteparvi ja korrelaatio... 22 Analysointimenetelmiä... 25 χ 2 -riippumattomuustesti... 25 Riippumattomien otosten t-testi... 26 Levenen testi... 26 Varianssianalyysi... 28 Regressioanalyysi... 34 Linkkejä... 36 2

RStudio ja R-kieli RStudio-työtila Käynnistettäessä RStudio avautuu oheinen näkymä. Ikkunassa vasemmalla on komentoikkuna (Console). Oikealla ylhäällä ovat ympäristö- ja historiaikkunat. Oikealla alhaalla ovat piirto-, kirjasto- ja apuikkunat. Console Environment History Plots Packages Help Komentoikkuna, komentojen suorittamiseen. Listaus työtilan muuttujista. Listaus aiemmin suoritetuista komennoista. Grafiikkaikkuna; tähän ilmestyvät piirrettävät plotit. Listaus käytettävissä olevista ohjelmakirjastoista. Suorittamalla komennon?funktio, Help-ikkunaan avautuu dokumentaatio kyseisestä funktiosta. Muuttuja, sijoitusoperaatio ja tietotyypit R:ssä tietoa tallennetaan muuttujiin. Ohjelmointiympäristössä muuttuja tarkoittaa nimettyä tietovarastoa, johon tietoa voidaan kirjoittaa ja josta tietoa voidaan hakea. Muuttujassa siis nimen takaa löytyy arvo, joka voi olla esimerkiksi yksittäinen numeerinen arvo, 3

merkkijono tai totuusarvo, vektori tai koko havaintomatriisi. Sijoitusoperaatiolla tarkoitetaan arvon kirjoittamista muuttujaan. Muuttujan voi luoda suoraan sijoitusoperaatiolla: > Nimi <- Arvo Komennon alkuun kirjoitetaan muuttujan nimi, joka voi sisältää isoja ja pieniä kirjaimia, numeroita, pisteitä ja alaviivoja. Ensimmäisen merkin on oltava kirjain. Muuttujan nimen jälkeen kirjoitetaan sijoitusoperaattori; <- tai =. Operaattorit ovat toiminnan suhteen identtisiä. Sijoitusoperaattorin jälkeen kirjoitetaan arvo, joka muuttujaan halutaan sijoittaa. Mikäli komento koostuu pelkästä jo olemassa olevan muuttujan nimestä, laskutoimituksesta tai funktiosta ilman sijoitusoperaatiota, R tulostaa arvon. Komento suoritetaan painamalla Enteriä. Tässä oppaassa komennot tunnistaa sinisestä tekstistä. Komennon alussa olevaa merkkiä > ei kirjoiteta itse komentoikkunaan, vaan se on aina valmiina. Yksittäisen numeerisen arvon sijoitus muuttujaan: > x <- 5 > x [1] 5 > # Risuaidalla alkava komento on kommentti, eikä R reagoi siihen. Desimaalit erotetaan pisteellä: > # Kun jo olemassa olevaan muuttujaan sijoitetaan uusi arvo, aiempi arvo katoaa. On siis syytä varoa tärkeiden tietojen päälle tallentamista. > x = 3.14 > x [1] 3.14 Merkkijono: > x <- "äksä" > x [1] "äksä" Totuusarvot ilmaistaan isoin kirjaimin, myös pelkkä alkukirjain riittää: > x <- FALSE > x [1] FALSE > x <- T > x [1] TRUE Vektori, eli järjestetty yksiulotteinen joukko arvoja, voidaan luoda seuraavalla komennolla: > x <- c(1,2,3,4) > x [1] 1 2 3 4 4

Vektorin voi muodostaa myös scan-funktion avulla. Tällöin arvoja syötetään komentoikkunaan välilyönnillä erotettuna. Arvojen syöttö loppuu, kun Enteriä painetaan kahdesti peräkkäin. > x <- scan() 1: 9 8 7 6 5: 5 4 3 2 9: 1 10: Read 9 items > x [1] 9 8 7 6 5 4 3 2 1 Mikäli muuttuja sisältää useita arvoja (kuten vektori tai matriisi), yksittäistä arvoa kutsutaan alkioksi. Vektorin alkioon päästään käsiksi ilmoittamalla hakasulkeissa indeksi, eli alkion sijainti vektorissa: > x[4] [1] 6 Useampia alkioita voidaan valita ilmoittamalla niiden indeksiarvot vektorina: > x[ c(1,4,2,7) ] [1] 9 6 8 3 Vektorista voidaan valita arvoja myös totuusarvovektorilla, jossa haluttujen arvojen kohdalla on TRUE ja pois jätettävien arvojen kohdalla FALSE: > x[ c(t,f,t,f,t,f,t,f,t) ] [1] 9 7 5 3 1 Vektoreita voidaan yhdistää matriisiksi cbind- ja rbind-funktioilla. cbind tekee vektoreista sarakkeita ja rbind rivejä. > x1 <- c(3,3,1,2) > x2 <- c(1,8,2,0) > y <- cbind(x1,x2) > y x1 x2 [1,] 3 1 [2,] 3 8 [3,] 1 2 [4,] 2 0 Matriisin voidaan ajatella koostuvan vektoreista: havaintomatriisin jokainen sarakevektori kuvaa tietyn muuttujan havaintoarvoja, ja jokainen rivivektori yhden tilastoyksikön havaintoarvoja eri muuttujista. Matriisi voidaan transponoida t-funktiolla. Transpoosissa sarakkeet on muutettu riveiksi ja rivit sarakkeiksi. > t(y) [,1] [,2] [,3] [,4] x1 3 3 1 2 x2 1 8 2 0 5

R:ssä matriisin jokaisen alkion tulee olla samaa tyyppiä (esimerkiksi numeerinen, merkkijono tai totuusarvo). Datakehys muistuttaa pitkälti matriisia, mutta siinä eri sarakkeet voivat sisältää eri tietotyypin alkioita, jokainen sarake kuitenkin vain yhtä tietotyyppiä. Tästä syystä datakehys on paras vaihtoehto havaintomatriisin tallennukseen. Matriisin voi muuttaa datakehykseksi as.data.frame-funktiolla: > y <- as.data.frame(y) > y x1 x2 1 3 1 2 3 8 3 1 2 4 2 0 Yksittäiseen alkioon pääsee käsiksi ilmoittamalla rivi- ja sarakenumerot hakasulkeissa: > y[2,1] [1] 3 Kokonaisen rivin tai sarakkeen saa jättämällä toisen numeron pois. Seuraava komento kertoo ensimmäisen sarakkeen kahdella ja sijoittaa tuloksen takaisin ensimmäisen sarakkeen paikalle: > y[,1] <- y[,1] * 2 > y x1 x2 1 6 1 2 6 8 3 2 2 4 4 0 Datakehykseen voidaan lisätä eri tietotyyppiä sisältävä vektori ilman ongelmia: > x3 <- c('a', 'b', 'c', 'd') > y <- cbind(y, x3) > y x1 x2 x3 1 6 1 a 2 6 8 b 3 2 2 c 4 4 0 d Matriisiksi muunnettaessa kaikki alkiot muuttuvat saman tyyppisiksi; myös numerot käsitellään merkkijonoina: > as.matrix(y) x1 x2 x3 [1,] "6" "1" "a" [2,] "6" "8" "b" [3,] "2" "2" "c" [4,] "4" "0" "d" 6

Funktio Funktio on prosessi, joka suorittaa tietyn toiminnon. Usein funktiolle annetaan syötteenä (input) yksi tai useampi parametri, eli tieto, jota funktio käyttää toimintonsa suorittamiseen. R-kielessä parametrit ilmoitetaan sulkeissa pilkulla erotettuna. Usein funktio myös palauttaa (output) jotakin. Esimerkiksi mean-funktiolle annetaan syötteenä joukko lukuja, joista funktio laskee keskiarvon ja antaa sen paluuarvona. Samalla tavalla var-funktio palauttaa varianssin syötteistään. > z <- c(4, 7, 2, 0, 1, 8) > mean(z) [1] 3.666667 > var(z) [1] 10.66667 R:ssä on lukemattomia funktioita, joista osa on heti työtilassa valmiina käytettäväksi, ja osa ladattavissa ohjelmakirjastoissa. Funktioita ovat myös jo edellä käytetyt c, scan, cbind, as.data.frame ja as.matrix. Suorittamalla komennon, jonka alussa on kysymysmerkki ja sen jälkeen funktion nimi, avautuu RStudiossa apuikkunaan dokumentaatio kyseisestä funktiosta. Dokumentaatiosta selviää esimerkiksi funktion käyttötarkoitus, tarvittavat parametrit selityksineen, parametrien oletusarvot sekä esimerkkejä käytöstä. >?mean... ## Default S3 method: mean(x, trim = 0, na.rm = FALSE,...)... Esimerkiksi tässä tapauksessa parametrilla x ei ole oletusarvoa, vaan se on pakko antaa syötteenä. Parametreilla trim ja na.rm on oletusarvot, joita voi muuttaa halutessaan. > mean(trim=0.2, x=z) [1] 3.5 > mean(z, 0.2) [1] 3.5 Funktion parametreja ei ole pakko nimetä, mikäli ne ovat oikeassa järjestyksessä. Ohjelmakirjastot Ohjelmakirjastot ovat R:n servereiltä ladattavia tiedostoja, jotka sisältävät ohjelmistoja ja aineistoja. Kirjaston voi ladata joko komennolla > install.packages("kirjastonnimi") tai tai Tools > Install packages > Kirjaston nimi > Install Packages-ikkuna > Install > Kirjaston nimi > Install 7

Kirjasto pysyy tallessa niin kauan kuin ladattu tiedosto säilyy kansiossa, johon se ladattiin, joten kirjasto tarvitsee ladata vain kerran. Pelkkä ohjelmakirjaston lataaminen ei riitä sen sisältöjen saamiseksi käyttöön, vaan kirjasto pitää vielä erikseen ladata R:n työtilaan, joka onnistuu kahdella tavalla: > library(kirjastonnimi) tai Packages-ikkuna > Rastita haluttu kirjasto Kirjastot eivät säily R:n työtilassa yli istuntojen, vaan tarvittavat kirjastot on otettava käyttöön aina uudestaan R:n käynnistämisen jälkeen. Aineiston tuonti R ei ole ideaali ympäristö suuren havaintomatriisin manuaaliseen luomiseen. Suositeltavaa on luoda havaintomatriisi jollain muulla työkalulla, kuten Excelillä tai vastaavalla taulukkolaskentaohjelmalla, ja tuoda se R:n työtilaan. Pienen havaintomatriisin voi luoda esimerkiksi vektoreiden avulla ja yhdistää matriisiksi cbind-, rbind- tai data.frame-funktiolla. Aineiston tuonti työtilaan RStudiossa: Environment > Import Dataset > Valitse lähde/tiedoston tyyppi > Browse > Valitse tiedosto > Import R tuo aineiston muuttujaan, jonka se nimeää oletuksena tiedoston nimen mukaan. Muuttujan nimeä voi muuttaa tiedoston valitsemisen jälkeen Import Options > Name-kentästä. Rasvaprosentti-aineisto voidaan tuoda R-työtilaan seuraavasti: Environment > Import Dataset > From SPSS > Browse > rasvaprosentti.sav > Import Aineisto voidaan kiinnittää työtilaan attach-funktiolla. Tällöin aineiston muuttujiin voidaan viitata suoraan muuttujan nimellä. > attach(rasvaprosentti) Ilman aineiston kiinnittämistä muuttujiin viitataan dollarimerkin avulla: rasvaprosentti$tiheys antaa rasvaprosentti-datakehyksestä tiheys-muuttujan arvot vektorina. Kun aineisto on kiinnitetty, pelkkä tiheys riittää. > mean(tiheys) [1] 1.055574 Varsinkaan suurta aineistoa ei ole mielekästä tulostaa komentoikkunassa kokonaan, vaan usein pieni osa riittää aineiston muodon tarkistamiseen. Aineiston alusta voi tulostaa muutaman rivin head-funktiolla. > head(rasvaprosentti)... 8

Aineiston voi tuoda myös ilman RStudion Import Dataset -toimintoa. SPSS-tiedosto voidaan tuoda seuraavilla komennoilla: > library(haven) > data <- read_sav( file.choose() ) Excel-tiedoston tuonti. Aineisto kannattaa muuttaa datakehykseksi as.data.frame-funktiolla. > library(readxl) > data <- read_excel( file.choose() ) > data <- as.data.frame( data ) Txt-tiedoston tuonti: > data <- read.table( file.choose(), header=true, sep="," ) > # header-parametri TRUE, jos havaintomatriisin ylimmällä rivillä on muuttujien nimet, muulloin parametrin voi jättää pois. > # sep-parametrilla määritetään välimerkki, joka erottaa havaintoarvot tiedostossa. Aineiston ja työtilan tallennus R:n työtilasta voi tallentaa aineiston tiedostoksi write.table-funktiolla. Yleisessä muodossa: > write.table(x=muuttujannimi, file="tiedostosijainti") Esimerkiksi rasvaprosentti-aineiston tallentaminen.txt-tiedostoksi K-asemalle onnistuu seuraavasti: > write.table(x=rasvaprosentti, file="k:/data.txt") Oletuksena funktio lisää jokaisen rivin alkuun rivi-indeksin ja erottaa solut välilyönnillä. Näitä asetuksia voidaan muuttaa row.names- ja sep-parametreilla: > write.table(x=rasvaprosentti, file="k:/data.txt", sep=",", row.names=false) Tällä komennolla luodaan K-asemalle.txt-tiedosto, jossa rivi-indeksejä ei ole ja havaintoarvot on erotettu toisistaan pilkulla. Vastaavasti sarakeindeksit tai muuttujien nimet saa pois col.names-parametrin avulla. Työtilan voi tallentaa ympäristöikkunassa olevasta tallennuspainikkeesta. Tällöin taas seuraavan kerran RStudion käynnistyessä voi jatkaa siitä mihin jäi; kaikki muuttujat ovat edelleen käytettävissä. Kirjastot täytyy kuitenkin ottaa käyttöön uudelleen library-komennolla. RStudio kysyy työtilan tallennusta myös suljettaessa, mikäli edellisen tallennuksen jälkeen on tapahtunut muutoksia. Tallennetun työtilan voi avata valitsemalla File > Open file > Valitse tiedosto. 9

Aineiston käsittely, jakaumat ja plottaus Muuttujien muunnokset laskutoimituksilla Esimerkki 1 Rasvaprosentti-aineistossa pituus on mitattu tuumina ja paino nauloina. Muutetaan nämä metrijärjestelmään ja lasketaan painoindeksi. Luodaan uudet muuttujat laskutoimituksilla: > Paino_kg <- 0.454 * paino > Pituus_m <- 0.0254 * pituus > Painoindeksi <- Paino_kg / (Pituus_m * Pituus_m) Muuttujien luomisen jälkeen on hyvä tarkistaa, että arvot ovat järkeviä, eikä laskutoimituksissa ole sattunut virheitä. Tätä voidaan tarkastella esimerkiksi summary-funktion tulostamien tunnuslukujen avulla: > summary(paino_kg) Min. 1st Qu. Median Mean 3rd Qu. Max. 53.80 72.19 80.13 81.23 89.44 164.87 > summary(pituus_m) Min. 1st Qu. Median Mean 3rd Qu. Max. NA's 1.626 1.734 1.778 1.786 1.835 1.975 1 > summary(painoindeksi) Min. 1st Qu. Median Mean 3rd Qu. Max. NA's 18.03 23.06 25.10 25.41 27.34 48.96 1 NA tarkoittaa puuttuvaa tietoa. Yhdeltä tilastoyksiköltä puuttuu tieto pituudesta, joten myöskään painoindeksiä ei voida laskea. Muuttujat on nyt luotu, mutta ne ovat vielä omina vektoreinaan. Vektorit voidaan liittää datakehykseen cbind- tai data.frame-funktiolla. > rasvaprosentti <- cbind(rasvaprosentti, Paino_kg, Pituus_m, Painoindeksi) > # Sama lopputulos myös data.frame-funktiolla > # rasvaprosentti <- data.frame(rasvaprosentti, Paino_kg, Pituus_m, Painoindeksi) Uusia muuttujia liitettäessä on tärkeää muistaa lisätä parametreihin myös alkuperäinen aineisto; seuraava komento tallentaisi rasvaprosentti-datakehyksen päälle kolme uutta muuttujaa, ja alkuperäinen aineisto katoaisi. > # rasvaprosentti <- cbind(paino_kg, Pituus_m, Painoindeksi) Ehdollistaminen Datakehyksestä voi valita tietyn joukon havaintoja omaan datakehykseensä. Komento yleisessä muodossa: > uusidatakehys <- vanhadatakehys [ ehto, ] > nuoret <- rasvaprosentti[ikä < 25,] 10

Tässä esimerkissä ikä < 25 vertaa ikä-muuttujan havaintoarvoja lukuun 25, ja palauttaa vektorin, jossa on totuusarvo TRUE niiden havaintojen kohdalla, joilla ikä-muuttujan arvo on alle 25, ja FALSE niiden kohdalla, joilla ikä on 25 tai suurempi. Koska pilkun jälkeen ei ole sarakeindeksejä, tulee uuteen datakehykseen TRUE-rivit kokonaisuudessaan. Jos siis haluttaisiin valita uuteen datakehykseen vain tietyt sarakkeet, tulisi hakasulkeissa ilmoittaa pilkun jälkeen sarakenumerot halutuilta sarakkeilta vektorina. > nuoret <- rasvaprosentti[ ikä < 25, c(1, 2, 4, 8) ] > head(nuoret) tiheys rasvapro paino vyötärö 1 1.0708 12.3 154.25 85.2 2 1.0853 6.1 173.25 83.0 3 1.0414 25.3 154.00 87.9 5 1.0340 28.7 184.25 100.0 6 1.0502 20.9 210.25 94.4 10 1.0722 11.7 198.25 88.6 Loogiset operaattorit: Operaattori Kuvaus < pienempi kuin <= pienempi tai yhtäsuuri kuin > suurempi kuin >= suurempi tai yhtäsuuri kuin == yhtäsuuri kuin!= erisuuri kuin!x ei x x y x tai y x & y x ja y Histogrammi Histogrammin piirtäminen hist-funktiolla yleisessä muodossa: > hist( Muuttuja ) Esimerkki 2 Painoindeksin frekvenssihistogrammin piirtäminen koko rasvaprosentti-aineistosta: > hist(painoindeksi) 11

Pylväiden lukumäärää voidaan säätää breaks-parametrilla. Otsikoita ja akseleiden selitteitä voi muokata main-, xlab- ja ylab-parametreillä. Täyttöväriä voi vaihtaa col-parametrin avulla (komento colors() tulostaa komentoikkunaan R:n tuntemat värien nimet). > hist(painoindeksi, breaks=20, main="painoindeksin frekvenssihistogrammi", xlab="painoindeksi", ylab="frekvenssi", col="beige") Siirrettäessä tai tallennettaessa grafiikoita RStudiosta on suositeltavaa käyttää Exporttoimintoa Plots-ikkunan yläreunassa. Aukeavasta ikkunasta voi muuttaa kuvasuhdetta ja tarkkuutta. 12

Pylväsdiagrammi Pylväsdiagrammin piirtäminen yleisessä muodossa: > barplot( table ( Muuttuja ) ) Barplot-funktiolle ei siis anneta syötteenä havaintovektoria, vaan taulukko, jossa on muuttujan arvot ja niitä vastaavat frekvenssit. Tämä taulukko saadaan table-funktiolla. Esimerkki 3 Pylväsdiagrammi huoneiden lukumäärästä Asunnot_2006-aineistossa. Asuntodatan tuonti onnistuu samalla tavalla kuin Rasvaprosentti-aineiston. Environment > Import Dataset > From SPSS > Browse > Asunnot_2006.sav > Import Kiinnitetään myös tämä aineisto työtilaan: > attach(asunnot_2006) Huonelukumäärän frekvenssit table-funktiolla: > table(huoneita) HUONEITA 1 2 3 4 5 6 31 114 71 10 2 1 Tämän jälkeen pylväsdiagrammi saadaan barplot-funktiolla. Selitteitä ja väriä voi muuttaa samoilla parametreilla kuin histogrammissa. > barplot(table(huoneita), main="huoneiden lukumäärä", xlab="huoneita", ylab="lkm", col="midnightblue") 13

Muuttujan luokittelu 1. Kopioi luokiteltavan muuttujan arvot uuteen muuttujaan: > uusimuuttuja <- datakehys$luokiteltavamuuttuja 2. Muuta uuden muuttujan arvoja: > uusimuuttuja[ ehto1 ] <- uusiarvo1 > uusimuuttuja[ ehto2 ] <- uusiarvo2... 3. (Tarvittaaessa) Muunna kategoriseksi muuttujaksi ja lisää uusille arvoille selitteet factor-funktiolla: > uusimuuttuja <- factor( uusimuuttuja, levels = c(uusiarvo1, uusiarvo2,...), labels = c("selite1", "Selite2",...) ) 4. Tarkista, että muunnokset onnistuivat halutulla tavalla. Esimerkiksi table-funktio soveltuu tähän. > table( uusimuuttuja ) 5. Liitä uusi muuttuja datakehykseen: > datakehys <- cbind( datakehys, uusimuuttuja ) Samaa kaavaa voidaan käyttää sekä numeerisen muuttujan luokitteluun, että kategorisen uudelleen luokittelemiseen. Esimerkki 4 Huonelukumäärän luokittelu huoneistotyyppeihin. Kopioidaan ensin HUONEITA-muuttujan arvot uuteen Huoneisto-muuttujaan: > Huoneisto <- HUONEITA Muutetaan kaksiota suurempien asuntojen arvoksi 3: > Huoneisto[ Huoneisto >= 3 ] <- 3 Muutetaan kategoriseksi muuttujaksi ja lisätään selitteet: > Huoneisto <- factor(huoneisto, levels=c(1,2,3), labels=c("yksiö", "Kaksio", "Kaksiota suurempi")) Tarkistetaan, että muuttujan arvot ovat järkeviä: > table(huoneisto) Huoneisto Yksiö Kaksio Kaksiota suurempi 31 114 84 Liitetään uusi muuttuja aineistoon: > Asunnot_2006 <- cbind(asunnot_2006, Huoneisto) Funktio prop.table muuttaa taulukon frekvenssit osuuksiksi: 14

> prop.table( table ( Huoneisto ) ) Huoneisto Yksiö Kaksio Kaksiota suurempi 0.1353712 0.4978166 0.3668122 Prosenttiosuudet voidaan muuttaa kumulatiivisiksi cumsum-funktiolla: > cumsum( prop.table ( table ( Huoneisto ) ) ) Yksiö Kaksio Kaksiota suurempi 0.1353712 0.6331878 1.0000000 Esimerkki 5 Luokittelu painoindeksin mukaan. Kopioidaan Painoindeksin arvot uuteen muuttujaan ja luokitellaan arvoiksi 1 4: > Lihavuus <- Painoindeksi > Lihavuus[Painoindeksi < 25] <- 1 > Lihavuus[Painoindeksi >= 25 & Painoindeksi < 30] <- 2 > Lihavuus[Painoindeksi >= 30 & Painoindeksi < 35] <- 3 > Lihavuus[Painoindeksi >= 35] <- 4 Muutetaan kategoriseksi ja lisätään selitteet: > Lihavuus <- factor(lihavuus, levels=c(1,2,3,4), labels=c("normaalipainoinen","lievä ylipaino","merkittävä ylipaino","sairaalloinen ylipaino")) Taulukointi table-funktiolla: > table(lihavuus) Lihavuus Normaalipainoinen Lievä ylipaino Merkittävä ylipaino Sairaalloinen ylipaino 125 102 21 3 Liitetään uusi muuttuja aineistoon: > rasvaprosentti <- cbind(rasvaprosentti, Lihavuus) Prosentuaaliset ja kumulatiiviset osuudet: > prop.table(table(lihavuus)) Lihavuus Normaalipainoinen Lievä ylipaino Merkittävä ylipaino Sairaalloinen ylipaino 0.49800797 0.40637450 0.08366534 0.01195219 > cumsum(prop.table(table(lihavuus))) Normaalipainoinen Lievä ylipaino Merkittävä ylipaino Sairaalloinen ylipaino 0.4980080 0.9043825 0.9880478 1.0000000 15

Esimerkki 6 Kaksioiden neliöhintojen tutkiminen. Neliöhinta-muuttujan luominen vektorilaskutoimituksella: > Neliöhinta <- HINTA / NELIOT Tunnuslukuja ja aineistoon liittäminen: > summary(neliöhinta) Min. 1st Qu. Median Mean 3rd Qu. Max. 1080 1364 1893 1906 2315 3734 > Asunnot_2006 <- cbind(asunnot_2006, Neliöhinta) Muodostetaan kaksioista oma datakehys aiemmin mainitulla ehdollistamiskaavalla: > kaksiot <- Asunnot_2006[Huoneisto == "Kaksio",] > head(kaksiot) LKV VUOSI HUONEITA SAUNA NELIOT HINTA POSTI KAUPUNKI Alue Huoneisto Neliöhinta 1 27 1994 2 1 52.5 93246 33270 0 2 Kaksio 1776.114 4 13 1971 2 0 59.5 75000 33300 0 2 Kaksio 1260.504 5 18 1971 2 0 59.5 77500 33300 0 2 Kaksio 1302.521 7 1 1968 2 0 49.5 57000 33310 0 2 Kaksio 1151.515 8 15 1969 2 0 55.5 65000 33310 0 2 Kaksio 1171.171 9 5 1969 2 0 54.5 75000 33310 0 2 Kaksio 1376.147 Ehdolliset frekvenssihistogrammit Samaan kuvaan saadaan piirrettyä useampi frekvenssihistogrammi ggplot2-kirjastosta löytyvällä qplot-funktiolla. > install.packages("ggplot2") > library(ggplot2) Yleisessä muodossa: > qplot(data=aineisto, Numeerinen muuttuja, facets=kategorinen muuttuja~., bins=pylväiden lkm) Luokitteleva muuttuja valitaan facets-parametrilla (muuttuja~. piirtää histogrammit päällekkäin,.~muuttuja vierekkäin ja muuttuja~muuttuja kahden kategorisen muuttujan mukaan ehdollistettuna taulukkona). Pylväiden lukumäärää voi säätää bins-parametrilla, joka vastaa aiemmin kätetyn hist-funktion breaks-parametriä. Kaksioiden neliöhinta eri alueilla: > qplot(data=kaksiot, Neliöhinta, facets=alue~., bins=20) 16

Histogrammien yhteyteen saadaan selitteet pelkkien aluenumeroiden sijaan esimerkiksi lisäämällä Alue-muuttujalle selitteet: > kaksiot$alue <- factor(kaksiot$alue, levels=c(1,2,3), labels=c("keskusta","länsi","itä")) > qplot(data=kaksiot, Neliöhinta, facets=alue~., bins=20, main="neliöhinnan frekvenssihistogrammit alueittain", ylab="frekvenssi") 17

Ristiintaulukointi Kirjastosta gmodels löytyy funktio CrossTable, joka muodostaa ristiintaulukon. > install.packages("gmodels") > library(gmodels) Yleisessä muodossa: > CrossTable( Kategorinen muuttuja 1, Kategorinen muuttuja 2) Funktio laskee oletusarvoisesti useita eri prosenttiosuuksia (ks.?crosstable), mutta niitä voi karsia parametreilla. Pelkät frekvenssit voi ristiintaulukoida myös table-funktiolla, kun antaa syötteenä kaksi kategorista muuttujaa. Esimerkki 7 Alue- ja Huoneisto-muuttujien ristiintaulukointi. Lisätään ensin Alue-muuttujalle selitteet: > Alue <- factor(alue, levels=c(1,2,3), labels=c("keskusta","länsi","itä")) > CrossTable(Alue, Huoneisto, prop.c=false, prop.t=false, prop.chisq=false) Cell Contents ------------------------- N N / Row Total ------------------------- Total Observations in Table: 229 Huoneisto Alue Yksiö Kaksio Kaksiota suurempi Row Total ------------- ------------------- ------------------- ------------------- ------------------- Keskusta 13 58 32 103 0.126 0.563 0.311 0.450 ------------- ------------------- ------------------- ------------------- ------------------- Länsi 4 18 12 34 0.118 0.529 0.353 0.148 ------------- ------------------- ------------------- ------------------- ------------------- Itä 14 38 40 92 0.152 0.413 0.435 0.402 ------------- ------------------- ------------------- ------------------- ------------------- Column Total 31 114 84 229 ------------- ------------------- ------------------- ------------------- ------------------- Esimerkki 8 Pylväsdiagrammi prosenttiosuuksista. Frekvenssien taulukointi table-funktiolla: > lkm <- table(alue, Huoneisto) > lkm Huoneisto Alue Yksiö Kaksio Kaksiota suurempi Keskusta 13 58 32 Länsi 4 18 12 Itä 14 38 40 18

Muutetaan frekvenssit prosenttiosuuksiksi. Funktio rowsums laskee matriisin rivikohtaiset summat ja palauttaa ne vektorina. > rowsums(lkm) Keskusta Länsi Itä 103 34 92 > lkm[1,] <- lkm[1,] / rowsums(lkm)[1] * 100 > lkm[2,] <- lkm[2,] / rowsums(lkm)[2] * 100 > lkm[3,] <- lkm[3,] / rowsums(lkm)[3] * 100 Saadaan samat prosentuaaliset osuudet kuin edellisen esimerkin ristiintaulukoinnissa: > lkm Huoneisto Alue Yksiö Kaksio Kaksiota suurempi Keskusta 12.62136 56.31068 31.06796 Länsi 11.76471 52.94118 35.29412 Itä 15.21739 41.30435 43.47826 Jos barplot-funktiolle antaa syötteenä taulukon, se pinoaa sarakkeiden arvot yhdeksi pylvääksi. Koska lkm-taulukosta halutaan pinota rivit, se täytyy transponoida t-funktiolla. Pylväsdiagrammin saa vaakatasoon horiz-parametrin avulla. Selitelaatikko lisätään legend-funktiolla. Laatikon sijainnin voi määrittää x-parametrilla. > barplot(t(lkm), col=c("dodgerblue3","palegreen3","wheat"), horiz=true) > legend(c("yksiö","kaksio","kaksiota suurempi"), x="topright", fill=c("dodgerblue3","palegreen3","wheat")) Tällä kertaa selitelaatikko on kuitenkin diagrammin päällä. Muutetaan plottausasaetuksia par-funktiolla. Parametrilla mar asetetaan piirtoalueen marginaalit ja parametrilla xpd mahdollistetaan piirtäminen myös piirtoalueen ulkopuolelle (marginaaleihin). Näin saadaan selitelaatikko mukaan kuvaan siten, ettei se ole diagrammin päällä. > par(mar = c(5,4,4,15), xpd=true) 19

Marginaalit annetaan muodossa (alareuna, vasen reuna, yläreuna, oikea reuna). Oletuksena marginaalit ovat (5,4,4,2), joten edellinen komento kasvattaa oikean reunan marginaalia. Selitelaatikon sijainnin voi asettaa myös x- ja y-koordinaateilla. > barplot(t(lkm), col=c("dodgerblue3","palegreen3","wheat"), horiz=true) > legend(c("yksiö","kaksio","kaksiota suurempi"), x=105, y=3.5, fill=c("dodgerblue3","palegreen3","wheat")) Plottausasetukset saa palautettua oletusarvoihin seuraavalla komennolla: > dev.off() Tunnusluvut Funktio summary tulostaa syötteenä saamastaan havaintovektorista tunnuslukuja. > summary( Muuttuja ) Yksittäisten tunnuslukujen laskemiseen on funktiot: Funktio max mean median min sd var Kuvaus suurin arvo keskiarvo mediaani pienin arvo keskihajonta varianssi 20

Esimerkki 9 Painoindeksin tunnuslukuja: > summary(painoindeksi) Min. 1st Qu. Median Mean 3rd Qu. Max. NA's 18.03 23.06 25.10 25.41 27.34 48.96 1 Summary-funktio poistaa puuttuvat arvot (NA) laskuista oletuksena. Yksittäistä tunnuslukua laskettaessa funktioon on lisättävä na.rm-parametri, mikäli muuttuja sisältää puuttuvia arvoja. Keskihajonta sd-funktiolla: > sd(painoindeksi, na.rm=true) [1] 3.661311 > summary(huoneita) Min. 1st Qu. Median Mean 3rd Qu. Max. 1.000 2.000 2.000 2.306 3.000 6.000 > sd(huoneita) [1] 0.8234571 Ehdolliset tunnusluvut Ehdolliset tunnusluvut aggregate-funktiolla, yleisessä muodossa: > aggregate(numeerinen muuttuja, list(kategorinen muuttuja 1, Kategorinen muuttuja 2,...), funktio) Aggregate-funktiolle on annettava syötteenä funktio, joka laskee halutun tunnusluvun. Luokittelevat muuttujat annetaan listana. Funktio palauttaa datakehyksen, jonka ensimmäisessä sarakkeessa (Group.1) on kategorisen muuttujan arvot ja viimeisessä sarakkeessa (x) numeerisen muuttujan haluttu tunnusluku. Mikäli käytetään useampaa kategorista muuttujaa, on tulostematriisissa useita Group-sarakkeita ja tunnusluku jokaiselle kombinaatiolle kategorisista muuttujista. Esimerkki 10 Ryhmäkeskiarvot: > aggregate(neliöhinta, list(alue), mean) Group.1 x 1 Keskusta 2397.607 2 Länsi 1414.287 3 Itä 1536.133 Keskihajonnat: > aggregate(neliöhinta, list(alue), sd) Group.1 x 1 Keskusta 408.0246 2 Länsi 260.3954 3 Itä 341.6944 21

Laatikkojana Laatikkojanakuvio muodostetaan boxplot-funktiolla. Yleisessä muodossa: > boxplot(numeerinen muuttuja ~ Kategorinen muuttuja) Neliöhinnan ja Alueen laatikkojanakuvio: > boxplot(neliöhinta~alue, col="beige", main="laatikkojana", ylab="neliöhinta", xlab="alue") Pisteparvi ja korrelaatio Plot- ja qplot-funktiot piirtävät oletuksena pisteparven, kun syötteessä on kaksi muuttujaa. > plot( Muuttuja 1, Muuttuja 2 ) > # qplot löytyy ggplot2-kirjastosta > library(ggplot2) > qplot( Muuttuja 1, Muuttuja 2 ) 22

Esimerkki 11 Vyötärönympäryksen ja rasvaprosentin pisteparvi. Lisäämällä plot-funktioon pch- ja col-parametrit, voidaan muuttaa symbolia ja väriä. > plot(vyötärö, rasvapro, xlab="vyötärön ympärys", ylab="rasvaprosentti", pch=20, col="darkred") pch-parametrin arvot ja niitä vastaavat symbolit qplot-funktion col-parametrilla voidaan kuvata myös muuttujaa. Kategorista muuttujaa kuvattaessa saadaan eri värisiä pisteitä ja numeerista muuttujaa kuvattaessa käytetään liukuväriä. > qplot(vyötärö, rasvapro, xlab="vyötärön ympärys", ylab="rasvaprosentti", col=lihavuus) 23

Koska pituuden ja painoindeksin tiedot puuttuivat yhdeltä tilastoyksiköltä, myös Lihavuus-muuttujassa on yksi puuttuva arvo. Tämä näkyy pistekartalla harmaana pisteenä. Kahden muuttujan välinen korrelaatiokerroin voidaan laskea cor-funktiolla. Yleisessä muodossa: > cor( Muuttuja 1, Muuttuja 2 ) Vyötärön ja rasvaprosentin välinen korrelaatiokerroin: > cor(vyötärö, rasvapro) [1] 0.8134323 Korrelaatiomatriisin voi laskea samalla funktiolla, kun syötteenä antaa koko havaintomatriisin. Kategorisille muuttujille ei voida laskea korrelaatiokertoimia, joten rasvaprosentti-aineiston tapauksessa Lihavuus-muuttuja täytyy jättää pois. Samalla tavalla kuin datakehyksestä tai matriisista voi valita sarakkeita (tai rivejä) ilmoittamalla indeksit hakasulkeissa, sarakkeita voi pudottaa pois antamalla sarakenumeron negatiivisena. Myös puuttuvat arvot aiheuttavat ongelmia, ellei funktiolle anneta use-parametrilla ohjetta niihin suhtautumisesta. Parametrin arvolla use="complete.obs" käytetään vain aineiston täydellistä osaa, eli kaikki puuttuvia arvoja sisältävät rivit jätetään kokonaan pois korrelaatiomatriisin laskuista. Muita vaihtoehtoja löytyy?cor-komennolla avautuvasta dokumentaatiosta. > cor(rasvaprosentti[,-19], use="complete.obs")... 24

Analysointimenetelmiä χ 2 -riippumattomuustesti χ 2 -riippumattomuustesti chisq.test -funktiolla yleisessä muodossa: > chisq.test( Kategorinen muuttuja 1, Kategorinen muuttuja 2 ) Funktio tulostaa testisuureen, vapausasteet ja p-arvon sekä mahdollisia varoituksia. Esimerkki 12 Huoneiston ja Alueen välisen riippuvuuden testaus Asunnot_2006 -aineistossa. H0: Huoneiston tyypin ja alueen välillä ei ole riippuvuutta H1: Huoneiston tyypin ja alueen välillä on riippuvuutta > chisq.test(huoneisto, Alue) Pearson's Chi-squared test data: Huoneisto and Alue X-squared = 4.6742, df = 4, p-value = 0.3224 Warning message: In chisq.test(huoneisto, Alue) : Chi-squared approximation may be incorrect Tulosteen varoitus johtuu siitä, että (ainakin) yksi teoreettinen frekvenssi on alle 5. Testisuureen arvoksi saadaan 4,6742, vapausasteita 4 ja p-arvo 0,3224. H0 hyväksytään. Esimerkki 13 Opintojakson työläyden ja opiskelijan opintosuunnan välisen riippuvuuden testaus. Arvio-aineiston tuonti ja χ 2 -testi samalla tavalla kuin aiemmin: Environment > Import Dataset > From SPSS > Browse > arvio.sav > Import > attach(arvio) H0: Opintojakson työläyden ja opiskelijan opintosuunnan välillä ei ole riippuvuutta H1: Opintojakson työläyden ja opiskelijan opintosuunnan välillä on riippuvuutta > chisq.test(tyolays, OPSUUNTA) Pearson's Chi-squared test data: TYOLAYS and OPSUUNTA X-squared = 7.668, df = 2, p-value = 0.02162 Warning message: In chisq.test(tyolays, OPSUUNTA) : Chi-squared approximation may be incorrect 25

Saadaan testisuureen arvo 7,668, vapausasteita 2 ja p-arvo 0,02162. H0 hylätään 5 % riskitasolla, mutta 2 % tai pienemmällä riskitasolla H0 voidaan hyväksyä. Riippumattomien otosten t-testi T-testi yleisessä muodossa R:llä: > t.test(numeerinen muuttuja ~ Kategorinen muuttuja) Funktio tulostaa testisuureen, vapausasteet, p-arvon, vaihtoehtoisen hypoteesin, 95 % luottamusvälin odotusarvojen erotukselle ja ryhmäkeskiarvot. Funktio ei oleta variansseja yhtäsuuriksi, ellei lisätä parametria var.equal=true. Esimerkki 14 Neliöhinnan odotusarvon yhtäsuuruus keskustassa ja keskustan ulkopuolella H0: Neliöhinnan odotusarvot yhtäsuuria keskustassa ja keskustan ulkopuolella H1: Neliöhinnan odotusarvot eivät yhtäsuuria > t.test(neliöhinta~kaupunki, var.equal=true) Two Sample t-test data: Neliöhinta by KAUPUNKI t = -18.455, df = 227, p-value < 2.2e-16 alternative hypothesis: true difference in means is not equal to 0 95 percent confidence interval: -989.8444-798.8625 sample estimates: mean in group Ei ole mean in group On 1503.254 2397.607 Testisuureen arvoksi saadaan 18,455, vapausasteita 227 ja p-arvo alle 2,2 10 16. H0 hylätään. Vastaava testi ilman oletusta varianssien yhtäsuuruudesta: > t.test(neliöhinta~kaupunki)... Levenen testi Varianssien yhtäsuuruutta voidaan testata levenetest-funktiolla, joka löytyy car-kirjastosta. > install.packages("car") > library(car) Levenen testi yleisessä muodossa: > levenetest( Numeerinen muuttuja, Kategorinen muuttuja, center=mean ) Funktio tulostaa vapausasteet, testisuureen ja p-arvon. 26

Neliöhinnan varianssin yhtäsuuruus keskustan ja ei-keskustan asunnoissa. H0: Neliöhinnan varianssit yhtäsuuria populaatioissa H1: Neliöhinnan varianssit eivät yhtäsuuria > levenetest(neliöhinta, KAUPUNKI, center=mean) Levene's Test for Homogeneity of Variance (center = mean) Df F value Pr(>F) group 1 1.2352 0.2676 227 Warning message: In levenetest.default(neliöhinta, KAUPUNKI, center = mean) : KAUPUNKI coerced to factor. Tulosteen varoitus johtuu siitä, että KAUPUNKI-muuttuja on aineistossa numeerisena. Varoitus poistuisi, jos ennen testiä muuttuja muutettaisiin kategoriseksi factor-funktiolla. Testisuureen arvoksi saadaan 1,2352, vapausasteet 1 ja 227, p-arvo 0,2676. H0 hyväksytään ja varianssit voidaan olettaa yhtäsuuriksi. Esimerkki 15 Neliömäärien odotusarvojen yhtäsuuruuden testaus keskustan ulkopuolisissa ja keskustan kaksioissa. Kaksiot otettiin aiemmin omaan datakehykseensä > head(kaksiot) LKV VUOSI HUONEITA SAUNA NELIOT HINTA POSTI KAUPUNKI Alue Huoneisto Neliöhinta 1 27 1994 2 1 52.5 93246 33270 0 Länsi Kaksio 1776.114 4 13 1971 2 0 59.5 75000 33300 0 Länsi Kaksio 1260.504 5 18 1971 2 0 59.5 77500 33300 0 Länsi Kaksio 1302.521 7 1 1968 2 0 49.5 57000 33310 0 Länsi Kaksio 1151.515 8 15 1969 2 0 55.5 65000 33310 0 Länsi Kaksio 1171.171 9 5 1969 2 0 54.5 75000 33310 0 Länsi Kaksio 1376.147 Levenen testi. Muutetaan KAUPUNKI-muuttuja kategoriseksi factor-funktiolla. H0: Kaksioiden neliömäärien varianssit yhtäsuuria populaatioissa H1: Kaksioiden neliömäärien varianssit eivät yhtäsuuria > levenetest(kaksiot$neliot, factor(kaksiot$kaupunki), center=mean) Levene's Test for Homogeneity of Variance (center = mean) Df F value Pr(>F) group 1 0.0256 0.8731 112 H0 hyväksytään p-arvolla 0,8731. Varianssit voidaan siis olettaa yhtäsuuriksi t-testissä: H0: Neliömäärien odotusarvot yhtäsuuria keskustassa ja keskustan ulkopuolella H1: Neliömäärien odotusarvot eivät yhtäsuuria > t.test(kaksiot$neliot~kaksiot$kaupunki, var.equal=true) Two Sample t-test data: kaksiot$neliot by kaksiot$kaupunki t = 1.4281, df = 112, p-value = 0.156 27

alternative hypothesis: true difference in means is not equal to 0 95 percent confidence interval: -0.6458955 3.9806246 sample estimates: mean in group 0 mean in group 1 55.05357 53.38621 H0 hyväksytään p-arvolla 0,156. Varianssianalyysi Varianssianalyysi yleisessä muodossa aov-funktiolla: > va <- aov( Numeerinen muuttuja ~ Kategorinen muuttuja ) > summary(va) > TukeyHSD(va) Funktio luo aov-tyyppisen muuttujan, joka nimetään halutulla tavalla. Tästä muuttujasta saadaan vapausasteet, testisuure ja p-arvo summary-funktiolla sekä ryhmien väliset vertailut TukeyHSD-funktiolla. Esimerkki 16 Neliöhinnan ja Alueen välisen riippuvuuden testaus varianssianalyysillä: H0: Neliöhinnan odotusarvot samoja kaikilla alueilla H1: Neliöhinnan odotusarvot eivät samoja kaikilla alueilla > va <- aov(neliöhinta~alue) > summary(va) Df Sum Sq Mean Sq F value Pr(>F) Alue 2 45699081 22849540 173 <2e-16 *** Residuals 226 29843678 132052 --- Signif. codes: 0 *** 0.001 ** 0.01 * 0.05. 0.1 1 Testisuureen arvo 173 ja p-arvo alle 2 10 16. H0 hylätään. Ryhmien väliset vertailut TukeyHSD-funktiolla: > TukeyHSD(va) Tukey multiple comparisons of means 95% family-wise confidence level Fit: aov(formula = Neliöhinta ~ Alue) $`Alue` diff lwr upr p adj Länsi-Keskusta -983.3202-1152.89060-813.7498 0.0000000 Itä-Keskusta -861.4744-984.45950-738.4893 0.0000000 Itä-Länsi 121.8458-50.22199 293.9137 0.2187498 Ryhmien välisistä p-arvoista voidaan päätellä, että keskustan odotusarvot poikkeavat sekä idän että lännen odotusarvoista, mutta idän ja lännen välillä ei voida päätellä olevan eroa. 28

Levenen testi: H0: Neliöhinnan varianssit yhtäsuuria kaikilla alueilla H1: Neliöhinnan variansseissa eroa alueiden välillä > levenetest(neliöhinta, factor(asunnot_2006$alue), center=mean) Levene's Test for Homogeneity of Variance (center = mean) Df F value Pr(>F) group 2 1.9286 0.1477 226 H0 hyväksytään p-arvolla 0,1477. Esimerkki 17 Huoneistotyypin vaikutus keskimääräiseen neliöhintaan erikseen keskustan ulkopuolisissa ja keskustan asunnoissa. Alueelliset datakehykset saadaan aiemmin käytetyn kaavan mukaan > # uusidatakehys <- vanhadatakehys [ ehto, ] > Keskusta <- Asunnot_2006[KAUPUNKI == 1,] > ItäLänsi <- Asunnot_2006[KAUPUNKI == 0,] Varianssianalyysi keskustan asunnoilla: H0: Huoneistotyypillä ei vaikutusta neliöhinnan odotusarvoon keskustan asunnoissa H1: Huoneistotyyppi vaikuttaa neliöhinnan odotusarvoon keskustan asunnoissa > va1 <- aov(keskusta$neliöhinta ~ Keskusta$Huoneisto) > summary(va1) Df Sum Sq Mean Sq F value Pr(>F) Keskusta$Huoneisto 2 2051645 1025822 6.871 0.0016 ** Residuals 100 14929732 149297 --- Signif. codes: 0 *** 0.001 ** 0.01 * 0.05. 0.1 1 > TukeyHSD(va1) Tukey multiple comparisons of means 95% family-wise confidence level Fit: aov(formula = Keskusta$Neliöhinta ~ Keskusta$Huoneisto) $`Keskusta$Huoneisto` diff lwr upr p adj Kaksio-Yksiö -429.0644-711.1523-146.9766 0.0013450 Kaksiota suurempi-yksiö -416.6776-719.0210-114.3343 0.0040650 Kaksiota suurempi-kaksio 12.3868-190.0424 214.8160 0.9883853 Testisuureen arvo 6,871 ja p-arvo 0,0016. H0 voidaan hylätä 1 % riskitasolla. Kaksioiden ja kaksioita suurempien asuntojen neliöhintojen välillä ei näytä olevan eroa, mutta yksiöiden neliöhinnan odotusarvo poikkeaa molemmista. 29

> levenetest(keskusta$neliöhinta, Keskusta$Huoneisto, center=mean) Levene's Test for Homogeneity of Variance (center = mean) Df F value Pr(>F) group 2 1.0102 0.3678 100 Varianssit voidaan olettaa yhtäsuuriksi. Vastaavat testit keskustan ulkopuolisille asunnoille: > va2 <- aov(itälänsi$neliöhinta ~ ItäLänsi$Huoneisto) > summary(va2) > TukeyHSD(va2) > levenetest(itälänsi$neliöhinta, ItäLänsi$Huoneisto, center=mean) Esimerkki 18 Kaksisuuntainen varianssianalyysi huoneistotyypin ja sijainnin yhdysvaikutuksesta keskimääräiseen neliöhintaan. Tarkastellaan ensin ryhmäkeskiarvoja graafisesti. Ryhmäkeskiarvot saadaan aggregate-funktiolla. Tällä kertaa kategorisina muuttujina sekä KAUPUNKI että Huoneisto. KAUPUNKI-muuttuja täytyy muuttaa kategoriseksi muuttujaksi factor-funktiolla, sillä aggregate-funktio ei osaa käsitellä labelled double -tyypin muuttujia. > KAUPUNKI <- factor(kaupunki, levels=c(0,1), labels=c("ei ole","on")) > keskiarvot <- aggregate(neliöhinta, list(kaupunki, Huoneisto), mean) > keskiarvot Group.1 Group.2 x 1 Ei ole Yksiö 1876.451 2 On Yksiö 2768.670 3 Ei ole Kaksio 1436.445 4 On Kaksio 2339.605 5 Ei ole Kaksiota suurempi 1446.018 6 On Kaksiota suurempi 2351.992 Keskiarvotaulukon sarakkeiden nimet voidaan vaihtaa kuvaavampiin: > names(keskiarvot) <- c("keskustassa","huoneisto","neliöhintakeskiarvo") Ehdollisten keskiarvojen graafinen tarkastelu voidaan tehdä esimerkiksi qplot-funktion avulla. > qplot(data=keskiarvot, Huoneisto, Neliöhintakeskiarvo, col=keskustassa) 30

Varianssianalyysissä yhdysvaikutuksia voidaan tutkia lisäämällä luokittelevien muuttujien väliin *-merkki. Tällöin saadaan mukaan kaikki omavaikutukset ja interaktiot. Jos halutaan vain tietty interaktio, käytetään kaksoispistettä. H0: Yhdysvaikutusta ei ole H1: Yhdysvaikutusta on > va <- aov(neliöhinta~huoneisto*kaupunki) > summary(va, intercept=true) Df Sum Sq Mean Sq F value Pr(>F) (Intercept) 1 831498352 831498352 7348.382 < 2e-16 *** Huoneisto 2 4800829 2400415 21.214 3.68e-09 *** KAUPUNKI 1 45507555 45507555 402.174 < 2e-16 *** Huoneisto:KAUPUNKI 2 1048 524 0.005 0.995 Residuals 223 25233327 113154 --- Signif. codes: 0 *** 0.001 ** 0.01 * 0.05. 0.1 1 Yhdysvaikutukselle saadaan testisuureen arvo 0,005 ja p-arvo 0,995. Hyväksytään H0. Varianssianalyysi ilman Huoneisto- ja KAUPUNKI-muuttujien omavaikutuksia saadaan komennolla > va <- aov(neliöhinta~huoneisto:kaupunki)... Esimerkki 19 Rakennusajankohdan ja keskustasijainnin yhdysvaikutus neliöhintaan. Muuttujan luokittelu. Aloitetaan kopioimalla uuteen muuttujaan vanhan muuttujan arvot: > Rakennusajankohta <- VUOSI 31

Luokitellaan rakennusvuodet: > Rakennusajankohta[VUOSI < 1964] <- 1 > Rakennusajankohta[VUOSI >= 1964 & VUOSI <= 1971] <- 2 > Rakennusajankohta[VUOSI >= 1972 & VUOSI <= 1976] <- 3 > Rakennusajankohta[VUOSI > 1976] <- 4 Muutetaan uusi muuttuja kategoriseksi ja lisätään selitteet: > Rakennusajankohta <- factor(rakennusajankohta, levels=c(1,2,3,4), labels=c("ennen 1964","1964-1971","1972-1976","jälkeen 1976")) Taulukoidaan table-funktiolla: > table(rakennusajankohta) Rakennusajankohta ennen 1964 1964-1971 1972-1976 jälkeen 1976 64 57 54 54 Liitetään uusi muuttuja datakehykseen: > Asunnot_2006 <- cbind(asunnot_2006, Rakennusajankohta) Ehdolliset keskiarvot: > keskiarvot <- aggregate(neliöhinta, list(kaupunki, Rakennusajankohta), mean) > keskiarvot Group.1 Group.2 x 1 Ei ole ennen 1964 1823.559 2 On ennen 1964 2325.477 3 Ei ole 1964-1971 1377.718 4 On 1964-1971 2297.028 5 Ei ole 1972-1976 1383.241 6 On 1972-1976 2371.704 7 Ei ole jälkeen 1976 1647.218 8 On jälkeen 1976 2791.372 > names(keskiarvot) <- c("keskustassa","rakennusajankohta","neliöhintakeskiarvo") Graafinen tarkastelu pistekartan avulla: > qplot(data=keskiarvot, Rakennusajankohta, Neliöhintakeskiarvo, col=keskustassa) 32

Tutkitaan yhdysvaikutusta kaksisuuntaisella varianssianalyysillä: H0: Yhdysvaikutusta ei ole H1: Yhdysvaikutusta on > va <- aov(neliöhinta~kaupunki*rakennusajankohta) > summary(va, intercept=true) Df Sum Sq Mean Sq F value Pr(>F) (Intercept) 1 831498352 831498352 7634.830 < 2e-16 *** KAUPUNKI 1 45330513 45330513 416.225 < 2e-16 *** Rakennusajankohta 3 3844916 1281639 11.768 3.51e-07 *** KAUPUNKI:Rakennusajankohta 3 2298539 766180 7.035 0.000154 *** Residuals 221 24068791 108909 --- Signif. codes: 0 *** 0.001 ** 0.01 * 0.05. 0.1 1 Yhdysvaikutuksen testisuure 7,035 ja p-arvo 0,000154. H0 hylätään. Esimerkki 20 Kahden muuttujan välisen korrelaation testaaminen cor.test-funktiolla, yleisessä muodossa: > cor.test( Muuttuja 1, Muuttuja 2 ) Rasvaprosentin ja vyötärönympäryksen välisen korrelaation testaus: H0: Populaatiossa muuttujien välinen korrelaatiokerroin on nolla H1: Populaatiossa muuttujien välinen korrelaatiokerroin ei ole nolla. > cor.test(rasvapro, vyötärö) Pearson's product-moment correlation 33

data: rasvapro and vyötärö t = 22.112, df = 250, p-value < 2.2e-16 alternative hypothesis: true correlation is not equal to 0 95 percent confidence interval: 0.7669520 0.8514218 sample estimates: cor 0.8134323 H0 hylätään, p-arvo on pienempi kuin 2,2 10 16. Regressioanalyysi Lineaarinen regressiomalli voidaan muodostaa lm-funktiolla (linear model). Yleisessä muodossa: > fit <- lm(selitettävä muuttuja ~ Selittäjä 1 + Selittäjä 2 +...) > summary(fit) Kuten varianssianalyysissä, myös regressioanalyysissä funktion paluuarvo sijoitetaan muuttujaan ja tutkitaan summary-funktion avulla. Esimerkki 21 Rasvaprosentin selittäminen vyötärön ympärysmitan avulla. Testataan hypoteeseja: H0: β i = 0 H1: β i 0 > fit <- lm(rasvapro ~ vyötärö) > summary(fit) Call: lm(formula = rasvapro ~ vyötärö) Residuals: Min 1Q Median 3Q Max -19.0160-3.7557 0.0554 3.4215 12.9007 Coefficients: Estimate Std. Error t value Pr(> t ) (Intercept) -39.28018 2.66034-14.77 <2e-16 *** vyötärö 0.63130 0.02855 22.11 <2e-16 *** --- Signif. codes: 0 *** 0.001 ** 0.01 * 0.05. 0.1 1 Residual standard error: 4.877 on 250 degrees of freedom Multiple R-squared: 0.6617, Adjusted R-squared: 0.6603 F-statistic: 488.9 on 1 and 250 DF, p-value: < 2.2e-16 Vakiotermin testisuureeksi saadaan 14,77 ja p-arvo alle 2 10 16. Nollahypoteesi hylätään. Vastaavasti vyötärönympäryksen testisuure on 22,11 ja p-arvo alle 2 10 16. Myös tämä nollahypoteesi hylätään. 34

Rasvaprosenttia voidaan estimoida: Rasvaprosentti Selitysprosentiksi saadaan 66,17. Esimerkki 22 = 39,28018 + 0,63130 Vyötärön ympärys (cm) Rasvaprosentti kahdella selittävällä muuttujalla. Testataan hypoteeseja: H0: β i = 0 H1: β i 0 > fit <- lm(rasvapro ~ vyötärö + Paino_kg) > summary(fit) Call: lm(formula = rasvapro ~ vyötärö + Paino_kg) Residuals: Min 1Q Median 3Q Max -11.6459-3.2071-0.0299 3.1664 10.5064 Coefficients: Estimate Std. Error t value Pr(> t ) (Intercept) -45.95237 2.60501-17.640 < 2e-16 *** vyötärö 0.98950 0.05672 17.447 < 2e-16 *** Paino_kg -0.32600 0.04584-7.112 1.21e-11 *** --- Signif. codes: 0 *** 0.001 ** 0.01 * 0.05. 0.1 1 Residual standard error: 4.456 on 249 degrees of freedom Multiple R-squared: 0.7188, Adjusted R-squared: 0.7165 F-statistic: 318.2 on 2 and 249 DF, p-value: < 2.2e-16 Vakiotermin testisuureen arvoksi saadaan 17,640 ja p-arvo alle 2 10 16. Nollahypoteesi hylätään. Vyötärönympäryksen testisuure on 17,447 ja p-arvo alle 2 10 16. Myös tämä nollahypoteesi hylätään. Painon testisuure on 7,112 ja p-arvo 1,21 10 11. Tämäkin nollahypoteesi voidaan hylätä. Rasvaprosenttia voidaan siis estimoida: Rasvaprosentti = 45,95237 + 0,98950 Vyötärön ympärys (cm) 0,32600 Paino (kg) Selitysprosentti on 71,88. Yhteistestauksessa hypoteesille H0: β 1 = β 2 = 0 H1: ainakin jokin β i 0 saadaan F-testisuure 318,2 ja p-arvo alle 2,2 10 16. Nollahypoteesi hylätään. 35

Linkkejä Ohjeita tilastollisen tutkimuksen toteuttamiseksi IBM SPSS Statistics -ohjelmiston avulla, Raija Leppälä, 2017 http://tampub.uta.fi/bitstream/handle/10024/101613/ohjeita_tilastollisen_tutkimuksen_2017.pdf RStudion lataus https://www.rstudio.com/products/rstudio/download/ Rasvaprosentti-aineisto http://www.sis.uta.fi/tilasto/tiltp_aineistoja/rasvaprosentti.sav Asunnot_2006-aineisto http://www.sis.uta.fi/tilasto/tiltp_aineistoja/asunnot_2006.sav ARVIO-aineisto http://www.sis.uta.fi/tilasto/tiltp_aineistoja/arvio.sav 36