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ä:
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
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")
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")
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ä:
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