Korrelaatio

Korrelaatiokerroin ja lineaarinen regressio

Estimated simple regression equation

Seuraavassa esimerkissä käytetään R:n MASS kirjastosta löytyvää esimerkkidataa faithful. Tästä datasta lasketaan korrelaatio ja piirretään hajontakuvio sekä sovitettu lineaarinen suora.

# Lataa kirjasto
library(MASS)

# Näytä data taulukkona
View(faithful)

# Valitaan sarakkeet
eruptions = faithful$eruptions
waiting = faithful$waiting

# Korrelaatiokerroin
cor(eruptions, waiting)
## [1] 0.9008112
# Laske lineaarinen malli ja näytä suoran kertoimet
eruption.lm = lm(eruptions ~ waiting, data=faithful)
coeffs = coefficients(eruption.lm); coeffs 
## (Intercept)     waiting 
## -1.87401599  0.07562795
# Piirrä hajontakuvio ja lisää parhaan suoran malli
plot(eruptions ~ waiting)
abline(coeffs, col="red")

plot of chunk simple_regression

# Nyt mallia voidaan käyttää tekemään arvioita
waiting = 80           
duration = coeffs[1] + coeffs[2]*waiting 
duration
## (Intercept) 
##     4.17622
# Vaihtoehtoisesti voidaan käyttää predict-funktiota
newdata = data.frame(waiting=80) # wrap the parameter 
predict(eruption.lm, newdata)    # apply predict 
##       1 
## 4.17622

Selitysaste

Coefficient of determination

Korrelaatiokertoimen neliö \( r^ \) kuvaa selitysastetta eli kuinka monta prosenttia datan hajonnasta voidaan selittää mallin avulla.

eruption.lm = lm(eruptions ~ waiting, data=faithful) 
summary(eruption.lm)$r.squared
## [1] 0.8114608

Merkitsevyystaso

Significance Test for Linear Regression

Merkitsevyystaso eli riskitaso ilmoittaa, kuinka suuri riski on, että saatu ero tai riippuvuus johtuu sattumasta. Merkitsevyystasosta käytetään lyhenteitä \( p \) tai\( \alpha \) ja se mittaa tehdyn johtopäätöksen luotettavuutta (Heikkilä, s. 194).

Testatun eron tai riippuvuuden sanotaan olevan tilastollisesti

summary funktio palauttaa parametrien merkitsevyystason:

eruption.lm = lm(eruptions ~ waiting, data=faithful) 

summary(eruption.lm) 
## 
## Call:
## lm(formula = eruptions ~ waiting, data = faithful)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.29917 -0.37689  0.03508  0.34909  1.19329 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -1.874016   0.160143  -11.70   <2e-16 ***
## waiting      0.075628   0.002219   34.09   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.4965 on 270 degrees of freedom
## Multiple R-squared:  0.8115, Adjusted R-squared:  0.8108 
## F-statistic:  1162 on 1 and 270 DF,  p-value: < 2.2e-16

Ristiintaulukointi Khiin neliön riippumattomuustesti

Chi-squared Test of Independence

Ristiintaulukointia käytettäessä halutaan usein selvittää, onko sarake- ja rivimuuttujan välillä riippuvuutta. Khiin neliön testiä voi käyttää kaikilla mitta-asteikoilla voidaan selvittää muuttujien välistä riippumattomuutta. Funktio laskee nollahypoteesin mukaiset odotetut frekvenssit ja näistä testisuureen, jonka arvo on sitä suurempi, mitä enemmän havainnot ja odotetut frekvenssit poikkeavat toisistaan. Testisuureen ja vapausasteen perusteella lasketaan lopuksi merkitsevyystaso, jkoka kertoo, kuinka suuri riski on, että riippuvuus johtuu sattumasta (Heikkilä, s. 212).

# Ladataan esimerkkikirjasto
library(MASS)       

# Näytä taulukko
View(survey)

# Ristiintaulukoi kahden kategorisen muuttujan välillä
tbl = table(survey$Smoke, survey$Exer) 
tbl
##        
##         Freq None Some
##   Heavy    7    1    3
##   Never   87   18   84
##   Occas   12    3    4
##   Regul    9    1    7
# Näytä tulokset myös pylväsdiagrammina
barplot(tbl, 
        ylim=c(0, 140), 
        col=rainbow(20),
        legend.text = TRUE, 
        args.legend = list(x="top", horiz=TRUE))

plot of chunk unnamed-chunk-3

# Testaa ovatko muuttujat riippumattomia
chisq.test(tbl)
## Warning in chisq.test(tbl): Chi-squared approximation may be incorrect
## 
##  Pearson's Chi-squared test
## 
## data:  tbl
## X-squared = 5.4885, df = 6, p-value = 0.4828
# Yhdistetään taulukossa kaksi saraketta
ctbl = cbind(tbl[,"Freq"], tbl[,"Some"] + tbl[,"None"]) 

# Nimeä sarakkeet uudelleen
colnames(ctbl) = c("Freq", "Some/None")
ctbl
##       Freq Some/None
## Heavy    7         4
## Never   87       102
## Occas   12         7
## Regul    9         8
# Näytä myös tämä taulukko pylväsdiagrammina
barplot(ctbl, horiz = TRUE,
        ylim = c(0, 3),
        col = c("lightblue", "mistyrose",
                "lightcyan", "lavender"),
        legend.text = TRUE, 
        args.legend = list(y = 3, horiz=TRUE))

plot of chunk unnamed-chunk-3

# Testaa uuden taulukon muuttujien riippumattomuus
chisq.test(ctbl)
## 
##  Pearson's Chi-squared test
## 
## data:  ctbl
## X-squared = 3.2328, df = 3, p-value = 0.3571