+ - 0:00:00
Notes for current slide
Notes for next slide

Statystyka i wizualizacja danych

Analiza korelacji

Jakub Nowosad

1 / 25

Korelacja liniowa

2 / 25

Korelacja liniowa

  • Korelacja jest miarą powiązania pomiędzy dwiema lub większą liczbą zmiennych
  • Współczynniki korelacji przyjmują wartości z przedziału od -1,00 do +1,00:
    • Wartość -1,00 - reprezentuje doskonałą korelację ujemną
    • Wartość +1,00 - reprezentuje doskonałą korelacją dodatnią
    • Wartość 0.00 - brak korelacji
3 / 25

Korelacja liniowa

4 / 25

Korelacja liniowa

W przypadku zaobserwowania korelacji dwóch zmiennych (A i B) możliwe są sytuacje:

  • A wpływa na (powoduje) B
  • B wpływa na A
  • C wpływa na A i B
  • A wpływa na B i B wpływa na A
  • A wpływa na C; C wpływa na B
  • nie istnieje relacja przyczynowo-skutkowa pomiędzy zmienną A i B (korelacja jest przypadkowa)
6 / 25

Korelacja, a przyczynowość?

http://www.tylervigen.com/spurious-correlations

7 / 25

Testy korelacji

8 / 25

Testy korelacji

  • Test korelacji liniowej Pearsona - bada zależność dwóch zmiennych losowych o rozkładzie normalnym
  • Test korelacji rang Spearmana - stosowany w przypadku naruszenia założenia normalności (np. występowanie obserwacji odstających)
9 / 25

Korelacja liniowa

library(gapminder)
gapminder2007 = subset(gapminder, year == 2007)
gapminder2007_s = gapminder2007[c(4, 5, 6)]

Czy pomiędzy zmiennymi w zbiorze gapminder2007_s można dostrzec zależności liniowe?

10 / 25

Testy korelacji

library(ggplot2)
ggplot(gapminder2007_s, aes(lifeExp, gdpPercap)) + geom_point()

11 / 25

Testy korelacji

Która metoda powinna tutaj zostać użyta? Dlaczego?

cor(gapminder2007_s$lifeExp, gapminder2007_s$gdpPercap,
use = "complete.obs",
method = "pearson")
## [1] 0.6786624
cor(gapminder2007_s$lifeExp, gapminder2007_s$gdpPercap,
use = "complete.obs",
method = "spearman")
## [1] 0.8565899
12 / 25

Testy korelacji

cor.test(gapminder2007_s$lifeExp, gapminder2007_s$gdpPercap,
use = "complete.obs",
method = "pearson")
##
## Pearson's product-moment correlation
##
## data: gapminder2007_s$lifeExp and gapminder2007_s$gdpPercap
## t = 10.933, df = 140, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.5786217 0.7585843
## sample estimates:
## cor
## 0.6786624
13 / 25

Testy korelacji

cor.test(gapminder2007_s$lifeExp, gapminder2007_s$gdpPercap,
use = "complete.obs",
method = "spearman")
##
## Spearman's rank correlation rho
##
## data: gapminder2007_s$lifeExp and gapminder2007_s$gdpPercap
## S = 68434, p-value < 2.2e-16
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## 0.8565899
14 / 25

Testy korelacji

cor_spearman = cor(gapminder2007_s,
use = "complete.obs",
method = "spearman")
lifeExp pop gdpPercap
lifeExp 1.000 0.003 0.857
pop 0.003 1.000 -0.065
gdpPercap 0.857 -0.065 1.000
15 / 25

Testy korelacji

library(corrplot)
corrplot(cor_spearman)

16 / 25

Testy korelacji

set.seed(25)
x = rnorm(1000)
y = x + rnorm(1000)
df = data.frame(x, y)
17 / 25

Testy korelacji

library(ggplot2)
ggplot(df, aes(x, y)) + geom_point() + stat_smooth(method = lm)
## `geom_smooth()` using formula = 'y ~ x'

18 / 25

Testy korelacji

Zbadanie normalności rozkładu

shapiro.test(x)
##
## Shapiro-Wilk normality test
##
## data: x
## W = 0.99811, p-value = 0.3298
shapiro.test(y)
##
## Shapiro-Wilk normality test
##
## data: y
## W = 0.99854, p-value = 0.5832
19 / 25

Testy korelacji

cor.test(x, y, method = "pearson")
##
## Pearson's product-moment correlation
##
## data: x and y
## t = 29.263, df = 998, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.6447237 0.7115721
## sample estimates:
## cor
## 0.679556
20 / 25

Testy korelacji

cor.test(x, y, method = "spearman")
##
## Spearman's rank correlation rho
##
## data: x and y
## S = 56065572, p-value < 2.2e-16
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## 0.6636062
21 / 25

Testy korelacji - alternatywa

  • Test korelacji Pearsona dla zmiennych poddanych procesowi winsoryzacji
library(PairedData)
winsor.cor.test(x, y, tr = 0.1)
##
## winsorized correlation, trim=0.1
##
## data: x and y
## t = 27.867, df = 798, p-value < 2.2e-16
## alternative hypothesis: true (winsorized) correlation is not equal to 0
## sample estimates:
## cor
## 0.6615164
22 / 25

23 / 25

Zadania

24 / 25

Zadania

  1. Używając danych z pakietu gapminder dla roku 1987 zwizualizuj relację pomiędzy populacją a oczekiwaną długością życia. Wylicz korelację i wykonaj odpowiedni test. Co oznacza jego wynik?
  2. Używając danych z pakietu gapminder dla roku 1987 zwizualizuj relację pomiędzy populacją a PKB na osobę. Wylicz korelację i wykonaj odpowiedni test. Co oznacza jego wynik?
  3. Wczytaj dane data/pomiary_pol.csv. Sprawdź czy istnieje korelacja pomiędzy temperaturą minimalną a maksymalną we wrześniu. Co może oznaczać ten wynik?
  4. Sprawdź czy istnieje korelacja pomiędzy temperaturą minimalną w kwietniu a temperaturą minimalną we wrześniu. Co może oznaczać ten wynik?
25 / 25

Korelacja liniowa

2 / 25
Paused

Help

Keyboard shortcuts

, , Pg Up, k Go to previous slide
, , Pg Dn, Space, j Go to next slide
Home Go to first slide
End Go to last slide
Number + Return Go to specific slide
b / m / f Toggle blackout / mirrored / fullscreen mode
c Clone slideshow
p Toggle presenter mode
t Restart the presentation timer
?, h Toggle this help
Esc Back to slideshow