Data ja RStudio tutkimuksessa, jälkitehtävä 2a

Tuukka Pasila

2.4.2018

Tehtävänanto

Teet tutkimusta Automaailma -lehden pyynnöstä. Toimitusta kiinnostaa erityisesti se voidaanko löytää muuttujia tai muuttujayhdistelmiä, joilla on vaikutusta miles per gallon (mpg) -muuttujaan.

Erityisen mielenkiinnon kohteena on 2 tutkimuskysymystä:

  • Tuoko automaattinen vaihteisto vai manuaalinen vaihteisto paremman mpg –lukeman?
  • Kvantifioi mpg:n ero automaattisella ja manuaalisella vaihteistolla.

  • Käytössäsi on mtcars datasetti. Tee tutkimuksestasi sellainen, että se täyttää toistettavan tutkimuksen kriteeristön. Raportti kirjoitetaan R Markdown:illa siten, että R Studiolla tehdyt skriptit ja niiden tulokset ovat luettavissa R Pubs:issa julkaistussa HTML-dokumentissa.


    Työvaiheet

    Tarkastellaan ensin annettua datasettiä. Kuvaus mtcars-datasetistä R-dokumentaatiossa

    data(mtcars)
    testidata <- mtcars
    10 ensimmäistä riviä alkuperäisestä MTCARS-datasta
    mpg cyl disp hp drat wt qsec vs am gear carb
    Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
    Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
    Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
    Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
    Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
    Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
    Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
    Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
    Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
    Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4

    Muunnetaan yksiköt ISO-standardin mukaisiksi, jotta tilasto on paremmin vertailukelpoinen eurooppalaisten tilastojen kanssa ja siksi, että se olisi suomalaiselle lukijalle mahdollisimman helppolukuinen ja ymmärrettävä.
    Tämä tehdään tiedostaen, että se vaikeuttaa työn toistettavuutta. Tässä harjoitustyössä se kuitenkin palvelee oppimistavoitetta. Lisäksi tuloksien pitäisi olla samanlaisia muuntamattoman mtcars datasetin tulosten kanssa.

    testidata$disp <- round(testidata$disp*16.387064, 0) #in^3 -> cm^3
    
    testidata$mpg <- round((testidata$mpg / 3.78541178)*1.609344, 1) 
    #gal->l && mile->km = kmpl
    
    testidata$wt <- round(testidata$wt*0.45359237*1000, 0) #x1000 lb -> kg

    Ei ole järkevää muuntaa 1/4 mailin (qsec) aikaa kilometreiksi, koska kyseinen mailin mittaan sidottu testi on maailmalla vakiintunut auton nopeuskiihtyvyystesti. Testiä ei ole myöskään mahdollista muuntaa Suomessa yleisesti käytettyyn kiihtyvyystestiin, jossa ilmoitetaan kuinka monta sekuntia autolla kestää kiihtyä 0-100km/h. Testit eivät välttämättä korreloin täysin keskenään.

    Nimetään mittasuureet uudelleen suomenkielisiksi ja lisätään nimet kentille, joissa on binäärinen vaihtoehto 0 tai 1 taulukon arvona. Lisäksi tässä välissä on kätevää ottaa keskiarvot manuaalivaihteisten ja automaattivaihteisten autojen km/l polttoainetehokkuuksista:

    library(data.table)
    setnames(testidata, old=c("mpg", "cyl", "disp", "hp", "drat", 
                              "wt", "qsec", "vs", "am", "gear", "carb"), 
             new=c("kmpl", "syl", "cm3", "hv", "akseli%", "kg", "qsek", 
                   "mootV/I", "voimansiirto", "vaiht_lkm", "kaas_lkm"))
    
    #jako kahteen eri tauluun
    Voimansiirtotyyppi <- split(testidata, testidata$`voimansiirto`)
    automaattiset <- Voimansiirtotyyppi[["0"]]
    manuaaliset <- Voimansiirtotyyppi[["1"]]
    
    #Automaattivaihteisten polttoainetehokkuuden keskiarvo
    round(mean(automaattiset$`kmpl`), 2) 
    # [1] 7.31
    #Manuaalivaihteisten polttoainetehokkuuden keskiarvo
    round(mean(manuaaliset$`kmpl`), 2)
    # [1] 10.37
    #nimetään voimansiirtotyyppi
    testidata$voimansiirto <- as.factor(testidata$voimansiirto)
    levels(testidata$voimansiirto) <- c("automaattinen","manuaalinen")
    
    #nimetään moottorityypit
    testidata$`mootV/I` <- as.factor(testidata$`mootV/I`)
    levels(testidata$`mootV/I`) <- c("V","suora")
    Tarkastellaan miltä taulukko näyttää muutoksien jälkeen:
    MTCARS-data, jolle on tehty käännös ja ISO-yksikkökonversio
    kmpl syl cm3 hv akseli% kg qsek mootV/I voimansiirto vaiht_lkm kaas_lkm
    Mazda RX4 8.9 6 2622 110 3.90 1188 16.46 V manuaalinen 4 4
    Mazda RX4 Wag 8.9 6 2622 110 3.90 1304 17.02 V manuaalinen 4 4
    Datsun 710 9.7 4 1770 93 3.85 1052 18.61 suora manuaalinen 4 1
    Hornet 4 Drive 9.1 6 4228 110 3.08 1458 19.44 suora automaattinen 3 1
    Hornet Sportabout 8.0 8 5899 175 3.15 1560 17.02 V automaattinen 3 2
    Valiant 7.7 6 3687 105 2.76 1569 20.22 suora automaattinen 3 1
    Duster 360 6.1 8 5899 245 3.21 1619 15.84 V automaattinen 3 4
    Merc 240D 10.4 4 2404 62 3.69 1447 20.00 suora automaattinen 4 2
    Merc 230 9.7 4 2307 95 3.92 1429 22.90 suora automaattinen 4 2
    Merc 280 8.2 6 2746 123 3.92 1560 18.30 suora automaattinen 4 4
    Merc 280C 7.6 6 2746 123 3.92 1560 18.90 suora automaattinen 4 4
    Merc 450SE 7.0 8 4520 180 3.07 1846 17.40 V automaattinen 3 3
    Merc 450SL 7.4 8 4520 180 3.07 1692 17.60 V automaattinen 3 3
    Merc 450SLC 6.5 8 4520 180 3.07 1715 18.00 V automaattinen 3 3
    Cadillac Fleetwood 4.4 8 7735 205 2.93 2381 17.98 V automaattinen 3 4
    Lincoln Continental 4.4 8 7538 215 3.00 2460 17.82 V automaattinen 3 4
    Chrysler Imperial 6.2 8 7210 230 3.23 2424 17.42 V automaattinen 3 4
    Fiat 128 13.8 4 1290 66 4.08 998 19.47 suora manuaalinen 4 1
    Honda Civic 12.9 4 1241 52 4.93 733 18.52 suora manuaalinen 4 2
    Toyota Corolla 14.4 4 1165 65 4.22 832 19.90 suora manuaalinen 4 1
    Toyota Corona 9.1 4 1968 97 3.70 1118 20.01 suora automaattinen 3 1
    Dodge Challenger 6.6 8 5211 150 2.76 1597 16.87 V automaattinen 3 2
    AMC Javelin 6.5 8 4982 150 3.15 1558 17.30 V automaattinen 3 2
    Camaro Z28 5.7 8 5735 245 3.73 1742 15.41 V automaattinen 3 4
    Pontiac Firebird 8.2 8 6555 175 3.08 1744 17.05 V automaattinen 3 2
    Fiat X1-9 11.6 4 1295 66 4.08 878 18.90 suora manuaalinen 4 1
    Porsche 914-2 11.1 4 1971 91 4.43 971 16.70 V manuaalinen 5 2
    Lotus Europa 12.9 4 1558 113 3.77 686 16.90 suora manuaalinen 5 2
    Ford Pantera L 6.7 8 5752 264 4.22 1438 14.50 V manuaalinen 5 4
    Ferrari Dino 8.4 6 2376 175 3.62 1256 15.50 V manuaalinen 5 6
    Maserati Bora 6.4 8 4933 335 3.54 1619 14.60 V manuaalinen 5 8
    Volvo 142E 9.1 4 1983 109 4.11 1261 18.60 suora manuaalinen 4 2
    dim(testidata) #testidatan rivien ja sarakkeiden lukumäärät
    # [1] 32 11

    Tarkastellaan dataa yhteenvedon kautta

    summary(testidata)
    #       kmpl             syl             cm3             hv       
    #  Min.   : 4.400   Min.   :4.000   Min.   :1165   Min.   : 52.0  
    #  1st Qu.: 6.575   1st Qu.:4.000   1st Qu.:1980   1st Qu.: 96.5  
    #  Median : 8.200   Median :6.000   Median :3216   Median :123.0  
    #  Mean   : 8.550   Mean   :6.188   Mean   :3781   Mean   :146.7  
    #  3rd Qu.: 9.700   3rd Qu.:8.000   3rd Qu.:5342   3rd Qu.:180.0  
    #  Max.   :14.400   Max.   :8.000   Max.   :7735   Max.   :335.0  
    #     akseli%            kg            qsek        mootV/I  
    #  Min.   :2.760   Min.   : 686   Min.   :14.50   V    :18  
    #  1st Qu.:3.080   1st Qu.:1170   1st Qu.:16.89   suora:14  
    #  Median :3.695   Median :1508   Median :17.71             
    #  Mean   :3.597   Mean   :1459   Mean   :17.85             
    #  3rd Qu.:3.920   3rd Qu.:1637   3rd Qu.:18.90             
    #  Max.   :4.930   Max.   :2460   Max.   :22.90             
    #         voimansiirto   vaiht_lkm        kaas_lkm    
    #  automaattinen:19    Min.   :3.000   Min.   :1.000  
    #  manuaalinen  :13    1st Qu.:3.000   1st Qu.:2.000  
    #                      Median :4.000   Median :2.000  
    #                      Mean   :3.688   Mean   :2.812  
    #                      3rd Qu.:4.000   3rd Qu.:4.000  
    #                      Max.   :5.000   Max.   :8.000

    Tarkastelussa on 19 automaattivaihteista ja 13 manuaalivaihteista autoa.
    Muista testisuureista ei ääri- ja keskiarvojen perusteella pysty rakentamaan olettamuksia.

    Vertaillaan visuaalisesti voimansiirtotyyppejä kahdella erillisellä kuvaajalla

    autot <- testidata[order(testidata$kmpl),]
    autot$voimansiirto <- factor(autot$voimansiirto) 
    autot$vari[autot$voimansiirto == "automaattinen"] <- "red"  
    autot$vari[autot$voimansiirto == "manuaalinen"] <- "blue"
    dotchart(autot$kmpl, labels = row.names(autot), cex = .7, 
             groups = autot$voimansiirto,
             main = "Automallien polttoainetehokkuus, 
                    kilometrit/litra\nRyhmitelty voimansiirtotyypin mukaan", 
             xlab = "Kilometrit / Litra polttoainetta", 
             color = autot$vari, gcolor = "black")

    boxplot(kmpl~voimansiirto,data = testidata, 
            main = "Polttoainetehokkuus voimansiirtotyypin mukaan", 
            xlab = "voimansiirtotyyppi",
            ylab = "n kilometriä per litra polttoainetta")

    Visuaalisen tarkastelun perusteella voidaan tehdä johtopäätös, että voimansiirtotyypillä on vaikutusta polttoainetehokkuuteen. Tarkastellaan väitettä vielä tilastomatematiikan kenoin T-testillä:

    H0 -> Polttoainetehokkuus ei ole riippuvainen voimansiirtotyypistä.

    H1 -> Polttoainetehokkus on riippuvainen voimansiirtotyypistä

    t.test(kmpl ~ voimansiirto, data = testidata)
    # 
    #   Welch Two Sample t-test
    # 
    # data:  kmpl by voimansiirto
    # t = -3.7473, df = 18.378, p-value = 0.001431
    # alternative hypothesis: true difference in means is not equal to 0
    # 95 percent confidence interval:
    #  -4.779245 -1.348690
    # sample estimates:
    # mean in group automaattinen   mean in group manuaalinen 
    #                    7.305263                   10.369231

    H0 hypoteesi hylätään p:n arvolla 0,001431 (<0,05; 5%), Polttoainetehokkuus on riippuvainen voimansiirtotyypistä.

    Tarkastellaan muita muuttujia

    Voimansiirron lisäksi voi olla muitakin kmpl-muuttujan arvoon vaikuttavia muuttujia. Tehdään step-funktiolla sopivimman mallin tarkistus. Step funktio eliminoi sellaiset muuttujat joilla ei ole merkitsevää vaikutusta lineaarisessa monimuuttujamallissa.

    summary(step(lm(data = testidata, kmpl ~ . )))
    # Start:  AIC=16.35
    # kmpl ~ syl + cm3 + hv + `akseli%` + kg + qsek + `mootV/I` + voimansiirto + 
    #     vaiht_lkm + kaas_lkm
    # 
    #                Df Sum of Sq    RSS    AIC
    # - syl           1    0.0070 26.831 14.362
    # - `mootV/I`     1    0.0217 26.846 14.380
    # - kaas_lkm      1    0.0968 26.921 14.469
    # - vaiht_lkm     1    0.2908 27.115 14.699
    # - `akseli%`     1    0.3028 27.127 14.713
    # - cm3           1    0.6252 27.449 15.091
    # - hv            1    1.1923 28.016 15.745
    # - qsek          1    1.5675 28.391 16.171
    # - voimansiirto  1    1.7177 28.542 16.340
    # <none>                      26.824 16.354
    # - kg            1    4.8360 31.660 19.658
    # 
    # Step:  AIC=14.36
    # kmpl ~ cm3 + hv + `akseli%` + kg + qsek + `mootV/I` + voimansiirto + 
    #     vaiht_lkm + kaas_lkm
    # 
    #                Df Sum of Sq    RSS    AIC
    # - `mootV/I`     1    0.0338 26.865 12.402
    # - kaas_lkm      1    0.1149 26.946 12.499
    # - `akseli%`     1    0.3556 27.186 12.783
    # - vaiht_lkm     1    0.3693 27.200 12.800
    # - cm3           1    0.6357 27.466 13.111
    # - hv            1    1.2688 28.100 13.841
    # <none>                      26.831 14.362
    # - qsek          1    1.7580 28.589 14.393
    # - voimansiirto  1    1.9049 28.736 14.557
    # - kg            1    4.8565 31.687 17.686
    # 
    # Step:  AIC=12.4
    # kmpl ~ cm3 + hv + `akseli%` + kg + qsek + voimansiirto + vaiht_lkm + 
    #     kaas_lkm
    # 
    #                Df Sum of Sq    RSS    AIC
    # - kaas_lkm      1    0.1430 27.008 10.572
    # - `akseli%`     1    0.3912 27.256 10.865
    # - vaiht_lkm     1    0.4230 27.288 10.902
    # - cm3           1    0.6024 27.467 11.112
    # - hv            1    1.2408 28.105 11.847
    # <none>                      26.865 12.402
    # - voimansiirto  1    1.8711 28.736 12.557
    # - qsek          1    2.6726 29.537 13.437
    # - kg            1    4.9127 31.777 15.777
    # 
    # Step:  AIC=10.57
    # kmpl ~ cm3 + hv + `akseli%` + kg + qsek + voimansiirto + vaiht_lkm
    # 
    #                Df Sum of Sq    RSS     AIC
    # - vaiht_lkm     1    0.3044 27.312  8.9309
    # - `akseli%`     1    0.3369 27.345  8.9690
    # <none>                      27.008 10.5722
    # - cm3           1    1.7600 28.768 10.5924
    # - voimansiirto  1    2.0062 29.014 10.8652
    # - hv            1    2.6621 29.670 11.5805
    # - qsek          1    4.5919 31.599 13.5970
    # - kg            1   12.5895 39.597 20.8167
    # 
    # Step:  AIC=8.93
    # kmpl ~ cm3 + hv + `akseli%` + kg + qsek + voimansiirto
    # 
    #                Df Sum of Sq    RSS     AIC
    # - `akseli%`     1    0.5966 27.909  7.6224
    # - cm3           1    1.4564 28.768  8.5933
    # <none>                      27.312  8.9309
    # - hv            1    2.3595 29.672  9.5824
    # - voimansiirto  1    3.3429 30.655 10.6258
    # - qsek          1    4.4372 31.749 11.7482
    # - kg            1   12.2889 39.601 18.8197
    # 
    # Step:  AIC=7.62
    # kmpl ~ cm3 + hv + kg + qsek + voimansiirto
    # 
    #                Df Sum of Sq    RSS     AIC
    # - cm3           1    1.1207 29.029  6.8822
    # <none>                      27.909  7.6224
    # - hv            1    2.2329 30.142  8.0854
    # - qsek          1    4.5937 32.502 10.4984
    # - voimansiirto  1    5.4240 33.333 11.3056
    # - kg            1   12.5502 40.459 17.5056
    # 
    # Step:  AIC=6.88
    # kmpl ~ hv + kg + qsek + voimansiirto
    # 
    #                Df Sum of Sq    RSS     AIC
    # - hv            1    1.6534 30.683  6.6548
    # <none>                      29.029  6.8822
    # - qsek          1    3.5321 32.561  8.5565
    # - voimansiirto  1    4.3763 33.406  9.3756
    # - kg            1   14.5373 43.567 17.8738
    # 
    # Step:  AIC=6.65
    # kmpl ~ kg + qsek + voimansiirto
    # 
    #                Df Sum of Sq    RSS     AIC
    # <none>                      30.683  6.6548
    # - voimansiirto  1     4.408 35.091  8.9504
    # - qsek          1    19.213 49.896 20.2146
    # - kg            1    33.767 64.449 28.4046
    # 
    # Call:
    # lm(formula = kmpl ~ kg + qsek + voimansiirto, data = testidata)
    # 
    # Residuals:
    #     Min      1Q  Median      3Q     Max 
    # -1.4665 -0.6646 -0.3231  0.6070  1.9908 
    # 
    # Coefficients:
    #                           Estimate Std. Error t value Pr(>|t|)    
    # (Intercept)              4.2839022  2.9631476   1.446 0.159355    
    # kg                      -0.0037064  0.0006677  -5.551 6.17e-06 ***
    # qsek                     0.5146091  0.1228979   4.187 0.000254 ***
    # voimansiirtomanuaalinen  1.2048433  0.6007301   2.006 0.054646 .  
    # ---
    # Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    # 
    # Residual standard error: 1.047 on 28 degrees of freedom
    # Multiple R-squared:  0.8488,  Adjusted R-squared:  0.8326 
    # F-statistic: 52.39 on 3 and 28 DF,  p-value: 1.312e-11
    round(mean(automaattiset$kg),0)
    # [1] 1709
    round(mean(manuaaliset$kg),0)
    # [1] 1094

    Tutkimustulokset ja päätelmät

    Step-funktio löysi testidatasta kolme eniten polttoainetehokkuuteen vaikuttavaa muuttujaa:
    kg (paino), qsek (1/4 mailin aika) ja manuaalinen voimansiirto (vaihteistotyyppi).
    Näistä painon vaikutuksella on suurin luottamus (pienin p-arvo).

    Tulkittaessa estimaatiota, voidaan todeta että:
  • Lisäkilot tuovat negatiivisen vaikutuksen 0,00371 +- 0,0007 kmpl-arvolle -> 1000kg vaikuttaa siten -3,7 yksikköä (km). Paino vaikuttaa negatiivisesti polttoainetehokkuuteen ja yksittäisenä muuttujana sen vaikutus on suurin.
  • jokainen sekunti lisää 1/4 mailin aikamittauksessa parantaa kmpl-arvoa 0,51 +- 0,12 yksiköllä (km). Toisin sanoen nopeampi auto kuluttaa enemmän polttoainetta.
  • Lisäksi manuaalivaihteisuus tuo 1,2 +- 0,6 yksikön (km) parannuksen kmpl-arvolle verrattuna automaattivaihteiseen. Tämä on myös vastaus molempiin tutkimuskysymyksiin.
  • R-squared arvon perusteella nämä 3 muuttujaa yhdessä selittävät 85% kmpl-muuttujan varianssista.

    Koska automaattivaihteisten autojen keskipaino (1709kg) on selvästi suurempi kuin manuaalivaihteisten (1094), voidaan olettaa, että vaihteisuudella on merkitystä kmpl-arvoon, mutta se tulee luultavasti keskipainoeron kautta. Ts. automaattivaihteita on asennettu painavampiin autoihin tai esimerkiksi automaattivaihteisto aiheuttaa painoeron. Tätä ei kuitenkaan pyydetty selvittämään, eikä tätä hypoteesiä pysty todistamaan kyseisellä datasetillä.

    Lopuksi vielä kolme kuvaajaa visualisoimaan saatuja havaintoja:

    require(ggplot2)
    require(ggpubr)
    
    hajontadiag_kg <- ggscatter(testidata, x = "kmpl", y = "kg",
                    add = "reg.line",               
                    conf.int = TRUE,                
                    color = "voimansiirto", palette = "npg", 
                    shape = "voimansiirto",
                    xlab = "Kilometrejä yhdellä litralla polttoainetta",
                    ylab = "Auton paino (kg)")+
      stat_cor(aes(color = voimansiirto), label.x = 10)+
      ggtitle("Polttoainetehokkuus suhteessa auton painoon") +
      theme(plot.title = element_text(hjust = 0.5))
    
    hajontadiag_kg

    Toisella tapaa kuvattuna:

    require(graphics)
    pairs(testidata)

    coplot(kmpl ~ kg | as.factor(voimansiirto), data = testidata,
           panel = panel.smooth, rows = 1)
    mtext("Polttoainetehokkuus suhteessa painoon manuaalivaihteilla ja automaattivaihteilla", 
          line = 3, adj = 0.5, font = 2)

    coplot(kmpl ~ qsek | as.factor(voimansiirto), data = testidata,
           panel = panel.smooth, rows = 1)
    mtext("Polttoainetehokkuus suhteessa painoon manuaalivaihteilla ja automaattivaihteilla", 
          line = 3, adj = 0.5, font = 2)

    Tässä vielä paino kvantisoituna neljään luokkaan (jaettu tasaisesti ääriarvojen mukaan):

    testidata2 <- testidata
    testidata2$kg_int <- cut(testidata2$kg, breaks = 4, 
                             labels = c("kevyt","keskikevyt",
                                        "keskipainava", "painava"))
    
    testidata2$kg_int <- as.factor(testidata2$kg_int)
    hajontadiag_painon_mukaan <- ggscatter(testidata2, x = "qsek", y = "kmpl",
                          add = "reg.line",               
                          conf.int = TRUE,                
                          color = "kg_int", palette = "npg", 
                          shape = "kg_int",
                          ylab = "Kilometrejä yhdellä litralla polttoainetta",
                          xlab = "Auton 1/4 mailin aika sekunneissa")+
      stat_cor(aes(color = kg_int), label.x =  21)+
      ggtitle("Polttoainetehokkuus suhteessa auton 1/4 mailin aikaan\n
              neljässä eri painoluokassa")+
      theme(plot.title = element_text(hjust = 0.5))
    
    hajontadiag_painon_mukaan