data > opinion

Tom Alby

04 Korrelation

2021-04-14


Der Korrelationskoeffizient

Eine Korrelation misst die Stärke des statistischen Zusammenhangs zwischen zwei Variablen. Das Vorhandensein eines statistischen Zusammenhangs bedeutet nicht, dass tatsächlich ein Zusammenhang zwischen den Variablen besteht (siehe hierzu zum Beispiel die Website Spurious Correlations, im Deutschen Scheinkorrelationen).

Der mit R bereits mitgelieferte Datensatz women enthält das Gewicht und die Größe von 15 Frauen (in Inches und Lbs):

women
##    height weight
## 1      58    115
## 2      59    117
## 3      60    120
## 4      61    123
## 5      62    126
## 6      63    129
## 7      64    132
## 8      65    135
## 9      66    139
## 10     67    142
## 11     68    146
## 12     69    150
## 13     70    154
## 14     71    159
## 15     72    164
plot(women)

Offensichtlich besteht hier eine lineare Beziehung. Der Korrelationskoeffizient nach Bravais-Pearson, auch Produkt-Moment-Korrelation oder nur Pearson-Korrelation genannt, gibt die Stärke eines linearen Zusammenhangs wider. Die Funktionsweise:

In einer Formel sieht das so aus:

\[r = \frac{1}{n} \sum_{i=1}^{n} \frac{(x_i - \bar{x})}{\sigma_x} \frac{(y_i - \bar{y})}{\sigma_y}\] Das Ergebnis ist der Korrelationskoeffizient r. Er kann einen Wert zwischen 1 (positive Korrelation) und -1 (negative Korrelation) annehmen. Eine schwache Korrelation besteht bei einem |r| < 0.5, eine mittlere Korrelation bei 0.5 ≤ |r| < 0.8 und eine starke Korrelation bei 0.8 ≤ |r|. Diese Werte können je nach Anwendungsfall variieren.

Der Teil der Formel

\[\frac{1}{n} \sum_{i=1}^{n} (x_i - \bar{x}) (y_i - \bar{y})\]

bezeichnet hierbei die Kovarianz.

Anwendungsbeispiel

library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.0 ──
## ✓ ggplot2 3.3.2     ✓ purrr   0.3.4
## ✓ tibble  3.0.4     ✓ dplyr   1.0.2
## ✓ tidyr   1.1.2     ✓ stringr 1.4.0
## ✓ readr   1.4.0     ✓ forcats 0.5.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
all <- read_csv("data/all.csv")
## 
## ── Column specification ────────────────────────────────────────────────────────
## cols(
##   `User-ID` = col_double(),
##   ISBN = col_character(),
##   `Book-Rating` = col_double(),
##   `Book-Title` = col_character(),
##   `Book-Author` = col_character(),
##   `Year-Of-Publication` = col_double(),
##   Publisher = col_character(),
##   Age = col_double(),
##   country = col_character()
## )

Gibt es eine Korrelation zwischen Anzahl Bücher pro Publisher und Anzahl Ratings, die die Bücher eines Publishers erhalten?

(ratings_vs_books <- all %>%
  filter(`Book-Rating`>0) %>%
  group_by(Publisher) %>%
  mutate(number_of_ratings = n()) %>%
  select(Publisher,`Book-Title`,number_of_ratings) %>%
  unique() %>%
  mutate(number_of_books = n()) %>%
  ungroup() %>%
  select(number_of_books,number_of_ratings))
## # A tibble: 146,970 x 2
##    number_of_books number_of_ratings
##              <int>             <int>
##  1              13                13
##  2             176               198
##  3             176               198
##  4             181              1824
##  5             560              4219
##  6            2129             10567
##  7            1090              4770
##  8               1                 1
##  9               6                 7
## 10              73               105
## # … with 146,960 more rows
plot(ratings_vs_books)

cor.test(ratings_vs_books$number_of_books,ratings_vs_books$number_of_ratings)
## 
##  Pearson's product-moment correlation
## 
## data:  ratings_vs_books$number_of_books and ratings_vs_books$number_of_ratings
## t = 619.33, df = 146968, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.8488617 0.8516942
## sample estimates:
##       cor 
## 0.8502841

Bestehen weitere Korrelationen?