Mit einer Korrelation können wir statistische Zusammenhänge zwischen Variablen aufdecken und angeben, wie sehr diese “zusammenhängen”. Wichtig dabei ist, so viel schon einmal vorab, nicht den Zusammenhang an sich (die Korrelation) mit einer Ursache-Wirkungs-Beziehung (Kausalität) gleichzusetzen – einer der häufigsten und auch von erfahrenen Forschern immer noch begangener Fehler.

Pakete

Alle Berechnungen und Abbildungen können wir mit unseren Standardpaketen durchführen. Wir benötigen das tidyverse zum Data Wrangling und zur Visualisierung der Daten. haven benötigen wir für den Import von SPSS-Dateien und rstatix für statistische Analysen. Wenn man sich den Import und das Bereinigen der Daten sparen möchte (Schritte, die man dennoch üben sollte), findet man die Daten auch im Paket costatcompanion.

library(tidyverse)
library(haven)
library(rstatix)
library(costatcompanion)

Beispiel 1

Wir sind mitten im heißen Sommer, lange Tage, laue Nächte, nach dem Duschen hat man Schweiß auf der Stirn und das letzte Mal, dass Querlüften funktioniert hat, ist schon einige Wochen her. Was könnten wir nun machen, um uns abukühlen? Richtig, wir könnten ins Freibad gehen! Mit einem dahinschmelzenden Calippo in der Hand fragt sich aber der geübte Statistiker: Ist es eigentlich jeden Tag so voll? Oder hängt die Anzahl der Schwimmer in diesem Freibad mit irgendetwas zusammen? Sofort fragt er den Kassenwart nach Daten, Daten, Daten! Und siehe da, tatsächlich führt das Freibad eine Liste darüber, an welchem Tag, wie viele Besucher kamen, inklusive einiger anderer Faktoren, wie z.B. der Durchschnitts-Temperatur.

Klassisch

Den Datensatz water_park finden wir im Paket costatcompanion. In der ersten Spalte (day_id) finden wir eine individuelle ID des beobachteten Tages (in zufälliger Reihenfolge). Nachfolgend finden wir vier Variablen, die an jedem Tag gemessen wurden. Dazu zählen die Durchschnitts-Temperatur (temperature), die Anzahl der Schwimmer im Schwimmbecken (swimmers), den Tages-Umsatz des Freibad-Kiosks in Euro (sales) und die Anzahl der Schlägereien, wegen der die Polizei gerufen werden musste (beatings).

costatcompanion::water_park
## # A tibble: 100 x 5
##    day_id temperature swimmers sales beatings
##    <chr>        <dbl>    <dbl> <dbl>    <dbl>
##  1 1             28.9      106  1554        7
##  2 2             34.4      142  2261        7
##  3 3             25.1       72  1232        4
##  4 4             21.8       50   823        5
##  5 5             39        167  2661       10
##  6 6             21.4       81  1025        4
##  7 7             26.7      111  1895        7
##  8 8             25        128  2153        8
##  9 9             12.7       37   534        1
## 10 10            16.3       56   829        1
## # ... with 90 more rows

Voraussetzungen

Da wir uns im GLM bewegen, gelten die üblichen Voraussetzungen. Vor allem sollten die Daten jedoch auf Linearität und potenzielle Ausreißer geprüft werden!

EDA

Zunächst wollen wir untersuchen, ob die Durchschnitts-Temperatur eines beobachteten Tages mit der Anzahl der Schwimmer im Schwimmbecken zusammenhängt. Wir könnten spontan vermuten, dass es mehr Schwimmer bei höheren Temperaturen gibt.

Eine gute Idee ist, sich deskriptive Statistiken zu seinen untersuchten Variablen auszugeben und sich deren Verteilungen anzuschauen.

water_park %>% 
  select(temperature, swimmers) %>% 
  get_summary_stats()
## # A tibble: 2 x 13
##   variable     n   min   max median    q1    q3   iqr   mad  mean    sd    se
##   <chr>    <dbl> <dbl> <dbl>  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 swimmers   100  34   195     97    82   121   39    28.2  100.  30.0   3.00
## 2 tempera~   100  11.9  45.6   25.1  21.0  28.9  7.98  6.00  25.0  6.00  0.6 
## # ... with 1 more variable: ci <dbl>

Eine weitere gute Idee wäre, sich einen vermuteten Zusammenhang graphisch als Streudiagramm darstellen zu lassen. Hier finden wir einen guten linearen Zusammenhang, der genau das nahelegt: Je höher die Temperatur (je weiter man auf der \(x\)-Achse nach rechts geht), desto mehr Schwimmer wurden beobachtet (desto höher liegen die Punkte).

water_park %>% 
  ggplot(aes(temperature, swimmers)) +
  geom_point() +
  labs(x = "Temperature", y = "Swimmers") +
  expand_limits(y = 0, x = 0)

Durchführung

Die eigentliche Berechnung einer Korrelation ist einfach und auch der Output hält sich in engen Grenzen:

water_park %>% 
  cor_test(temperature, swimmers)
## # A tibble: 1 x 8
##   var1        var2       cor statistic        p conf.low conf.high method 
##   <chr>       <chr>    <dbl>     <dbl>    <dbl>    <dbl>     <dbl> <chr>  
## 1 temperature swimmers  0.86      16.7 2.25e-30    0.798     0.904 Pearson

Wir erhalten einen statistisch signifikanten Zusammenhang, \(r = .860 [.798, .904], p < .001\). Berechnet wird standardmäßig der Korrelationskoeffizient nach Pearson (\(r\)), auch Produkt-Moment-Korrelation bezeichnet.

Berichten

We found a significant correlation between an observed day’s temperature and the amount of swimmers in the pool, \(r = .860 [.798, .904], p < .001\).

Robust

Natürlich hat Rand Wilcox (2017) auch für Korrelationen vorgesorgt und stellt uns im Paket WRS2 (Mair & Wilcox, 2020) robuste Methoden zur Berechnung von Korrelationen zur Verfügung. Einmal gibt es die percentage bend correlation (\(\rho_{pb}\), pbcor()) und einmal die Korrelation auf Basis von winsorized Daten (\(\rho_w\), wincor())

library(WRS2)

# PB Correlation
with(
  water_park,
  pbcor(temperature, swimmers)
)
## Call:
## pbcor(x = temperature, y = swimmers)
## 
## Robust correlation coefficient: 0.8256
## Test statistic: 14.4861
## p-value: 0
# Winsorized Correlation
with(
  water_park,
  wincor(temperature, swimmers)
)
## Call:
## wincor(x = temperature, y = swimmers)
## 
## Robust correlation coefficient: 0.7894
## Test statistic: 12.7312
## p-value: 0

Die percentage bend correlation beträgt \(\rho_{pb} = .823, p < .001\) und die Korrelation basierend auf winsorized Daten \(\rho_w = .789, p < .001\).

Non-parametrisch

Wer entgegen aller Empfehlungen trotzdem non-parametrisch rechnen möchte, der kann auf zwei bekannte Verfahren zurückgreifen. Zum einen den Korrelationskoeffizinten nach Spearman (\(r_s\)), gelegentlich auch Spearmans Rho (\(\rho\)) bezeichnet, und zum anderen Kendalls Tau (\(\tau\)). Nach Howell (1997) ist \(\tau\) zu bevorzugen. Berechnen tun wir beide non-parametrischen Varianten mit derselben Funktion wie Pearsons \(r\), geben jedoch unser gewünschtes Verfahren als Metode an.

# Spearmans r
water_park %>% 
  cor_test(temperature, swimmers, method = "spearman")
## # A tibble: 1 x 6
##   var1        var2       cor statistic        p method  
##   <chr>       <chr>    <dbl>     <dbl>    <dbl> <chr>   
## 1 temperature swimmers  0.82    29332. 6.43e-26 Spearman
# Kendalls Tau
water_park %>% 
  cor_test(temperature, swimmers, method = "kendall")
## # A tibble: 1 x 6
##   var1        var2       cor statistic        p method 
##   <chr>       <chr>    <dbl>     <dbl>    <dbl> <chr>  
## 1 temperature swimmers  0.65      9.56 1.14e-21 Kendall

Eine gute Möglichkeit, sich angesichts der doch unterschiedlichen Ergebnisse nicht zwischen beiden Verfahren im Nachhinein zu entscheiden (Stichwort \(p\)-Hacking!), ist das vorherige Festlegen des Verfahrens.

Interpretation

Varianzaufklärung

Den Korrelationskoeffizienten \(r\) kann man qudrieren und erhält \(R^2\), das Bestimmtheitsmaß oder Determinationskoeffizient gennant wird – je nachdem, wie sehr man gerade mit einem statistischen Wissen angeben will. \(R^2\) gibt an, wie viel Varianz zwei Variablen miteinander teilen. Ist der Korrelationskoeffizient zwischen zwei Variablen zum Beispiel \(r = 0.80\), dann teilen sich diese beiden Variablen aus der Gesamtvarianz der Daten einen Anteil von \(R^2 = .80^2 \Leftrightarrow R^2 = 0.64\), also 64%.

Stärke eines Zusammenhangs

Sehr viele Leute, wenn nicht alle, verwechseln regelmäßig die Stärke eines Zusammenhangs mit der Größe eines Zusammenhangs. Man kann schnell für sich testen, ob man denselben Fehler machen würde. Betrachten wir die beiden folgenden Abbildungen: In welcher ist die Korrelation größer?

Wer sich für die linke Seite entschieden hat, ist nicht alleine und liegt gleichzeitig gnadenlos daneben. Die Korrelation ist rechts (\(r = .850\)) nämlich deutlich höher als links (\(r = .700\)). Trotzdem entscheiden sich viele für die Linke Abbildung. Wieso? Weil sie eben die Stärke der Korrelation, also die Stärke des Zusammenhangs mit der Größe des Zusammenhangs verwechseln.

Die Stärke eines Zusammenhangs gibt nicht an, wie “steil” die Punkt sind, sondern wie eng sie um eine Linie fallen. Je enger die Punkte um die eingezeichnete Linie fallen, desto größer ist die Korrelation. Wie “steil” die Gerade ist, wie groß also der Zusammenhang zwischen zwei Variablen ist, ist eine Frage, auf die die Regression Antworten hat.

Was folgt daraus? Die Stärke und die Größe eines Zusammenhangs sind voneinander unabhängig und müssen immer einzeln beurteilt werden. Es kann bspw. sein, dass es Zusammenhänge gibt, die total klein, aber extrem stark sind (wie in der folgenden Abbildung). Hier muss man sich dann die Frage stellen, ob dieser Zusammenhang irgendwelche klinischen/bedeutenden Implikationen mit sich bringt.

Korrelation und Kausalität

Nur weil zwei Variablen zusammenhängen, heißt das nicht, dass die eine Variable die andere kausal, also ursächlich, beeinflusst. In unserem Beispiel oben haben wir uns den Zusammenhang zwischen Tages-Temperatur und Anzahl von Schwimmern im Schwimmbecken angeschaut. Aber nur, weil wir eine signifikante Korrelation gefunden haben, heißt das nicht, dass heißere Tage die Ursache für mehr Schwimmer waren (siehe auch Beispiel 2 unten). Was nun ursächlich für eine Variable oder ein Merkmal ist, kann letzten Endes nicht durch statistische Verfahren beurteilt werden, sondern entspringt einer adäquaten Versuchsplanung und fällt in den Bereich der experimentellen Methoden (!) Hat man seine Untersuchung nicht darauf ausgelegt, kann man rechnen, was man will, aber man wird nie auf einen kausalen Zusammenhang schließen können.

Beispiel 2

Klassisch

Natürlich sind wir nicht darauf beschränkt, uns einzelne Variablen rauszupicken und so einzeln mal eine Korrelation zu berechnen. Wir können das auch über mehrere Variablen gleichzeitig machen. Unser Datensatz water_park enthält vier abhängige Variablen, deren Korrelationen wir uns einmal gleichzeitig anschauen können.

# Deskriptive Statistiken
water_park %>% 
  select(-day_id) %>% 
  get_summary_stats()
## # A tibble: 4 x 13
##   variable     n   min    max median     q1     q3    iqr    mad   mean     sd
##   <chr>    <dbl> <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
## 1 beatings   100   1     11      5      4      6     2      1.48 5.01e0   2.02
## 2 sales      100 410   2837   1476   1156.  1861.  706.   554.   1.50e3 500.  
## 3 swimmers   100  34    195     97     82    121    39     28.2  1.00e2  30.0 
## 4 tempera~   100  11.9   45.6   25.1   21.0   28.9   7.98   6.00 2.50e1   6.00
## # ... with 2 more variables: se <dbl>, ci <dbl>
# Korrelationen
water_park %>% 
  select(-day_id) %>% 
  cor_mat()
## # A tibble: 4 x 5
##   rowname     temperature swimmers sales beatings
## * <chr>             <dbl>    <dbl> <dbl>    <dbl>
## 1 temperature        1        0.86  0.79     0.75
## 2 swimmers           0.86     1     0.95     0.8 
## 3 sales              0.79     0.95  1        0.7 
## 4 beatings           0.75     0.8   0.7      1

Um nun beurteilen zu können, ob diese Zusammenhänge statistisch signifikant sind, können wir die Funktion cor_get_pval() anhängen und erhalten die korrespondierenen \(p\)-Werte der eben erstellten Korrelationen.

water_park %>% 
  select(-day_id) %>% 
  cor_mat() %>% 
  cor_get_pval()
## # A tibble: 4 x 5
##   rowname     temperature swimmers    sales beatings
##   <chr>             <dbl>    <dbl>    <dbl>    <dbl>
## 1 temperature    0.       2.25e-30 1.58e-22 4.99e-19
## 2 swimmers       2.25e-30 0.       1.76e-51 2.25e-23
## 3 sales          1.58e-22 1.76e-51 0.       5.36e-16
## 4 beatings       4.99e-19 2.25e-23 5.36e-16 0.

Bei insgesamt vier Variablen haben wir noch einen guten Überblick, aber mit wachsendem Datensatz kann dieser Überblick schnell verloren gehen. Eine gute Möglichkeit, sich viele Korrelationen auf einmal anzuschauen liefert ein Korrelogramm, das wir mit dem Paket corrgram erstellen können.

library(corrgram)

outcomes <- water_park %>% 
  select(-day_id) %>% 
  corrgram(upper.panel = panel.conf,
           diag.panel = panel.density)

Interessant ist, dass alle Variablen miteinander positiv korrelieren. Und auch hier müssen wir ganz klar in unserer Interpretation sein. Die Variablen hängen zusammen, aber verursachen sich nicht kausal. Denn letzteres würde bedeuten, dass höhere Temperaturen zu mehr Schlägereien führten, höhere Verkaufs-Umsetze des Kiosks zu höheren Temperaturen, oder mehr Schlägereien zu höheren Tages-Umsetzen. Das macht alles nicht wirklich Sinn, und daran kann man gut erkennen, dass Korrelationen keine Kausalitäten liefern.

Robust

Für percentage bend correlations nutzen wir pball(), für Korrelationen basierend auf winsorized Daten winall().

water_park %>% 
  select(-day_id) %>% 
  pball()
## Call:
## pball(x = .)
## 
## Robust correlation matrix:
##             temperature swimmers  sales beatings
## temperature      1.0000   0.8256 0.7576   0.7014
## swimmers         0.8256   1.0000 0.9458   0.7703
## sales            0.7576   0.9458 1.0000   0.6760
## beatings         0.7014   0.7703 0.6760   1.0000
## 
## p-values:
##             temperature swimmers sales beatings
## temperature          NA        0     0        0
## swimmers              0       NA     0        0
## sales                 0        0    NA        0
## beatings              0        0     0       NA
## 
## 
## Test statistic H: Inf, p-value = 0
water_park %>% 
  select(-day_id) %>% 
  winall()
## Call:
## winall(x = .)
## 
## Robust correlation matrix:
##             temperature swimmers  sales beatings
## temperature      1.0000   0.7894 0.7089   0.5975
## swimmers         0.7894   1.0000 0.9362   0.6926
## sales            0.7089   0.9362 1.0000   0.6245
## beatings         0.5975   0.6926 0.6245   1.0000
## 
## p-values:
##             temperature swimmers sales beatings
## temperature          NA        0     0        0
## swimmers              0       NA     0        0
## sales                 0        0    NA        0
## beatings              0        0     0       NA

Non-parametrisch

Für non-parametrische Tests, von deren Verwendung hier im Zuge der zur Verfügung stehenden robusten Tests wieder entschieden abgeraten wird, gehen wir genau so wie bei der parametrischen Variante vor, aber geben auch hier wieder eine andere Methode als Funktions-Argument mit.

# Spearmans r
water_park %>% 
  select(-day_id) %>% 
  cor_mat(method = "spearman")
## # A tibble: 4 x 5
##   rowname     temperature swimmers sales beatings
## * <chr>             <dbl>    <dbl> <dbl>    <dbl>
## 1 temperature        1        0.82  0.75     0.7 
## 2 swimmers           0.82     1     0.95     0.75
## 3 sales              0.75     0.95  1        0.66
## 4 beatings           0.7      0.75  0.66     1
water_park %>% 
  select(-day_id) %>% 
  cor_mat(method = "spearman") %>% 
  cor_get_pval()
## # A tibble: 4 x 5
##   rowname     temperature swimmers    sales beatings
##   <chr>             <dbl>    <dbl>    <dbl>    <dbl>
## 1 temperature    0.       6.43e-26 2.36e-19 1.02e-15
## 2 swimmers       6.43e-26 0.       1.37e-49 4.62e-19
## 3 sales          2.36e-19 1.37e-49 0.       8.92e-14
## 4 beatings       1.02e-15 4.62e-19 8.92e-14 0.
# Kendalls Tau
water_park %>% 
  select(-day_id) %>% 
  cor_mat(method = "kendall")
## # A tibble: 4 x 5
##   rowname     temperature swimmers sales beatings
## * <chr>             <dbl>    <dbl> <dbl>    <dbl>
## 1 temperature       1         0.65 0.570     0.55
## 2 swimmers          0.65      1    0.81      0.6 
## 3 sales             0.570     0.81 1         0.51
## 4 beatings          0.55      0.6  0.51      1
water_park %>% 
  select(-day_id) %>% 
  cor_mat(method = "kendall") %>% 
  cor_get_pval()
## # A tibble: 4 x 5
##   rowname     temperature swimmers    sales beatings
##   <chr>             <dbl>    <dbl>    <dbl>    <dbl>
## 1 temperature    1.17e-48 1.14e-21 6.23e-17 4.44e-14
## 2 swimmers       1.14e-21 2.18e-48 2.16e-32 1.09e-16
## 3 sales          6.23e-17 2.16e-32 3.79e-49 1.33e-12
## 4 beatings       4.44e-14 1.09e-16 1.33e-12 2.83e-38

Aus der Praxis

Ein super interessantes Beispiel bescheren uns Stulp et al. (2013). Sie sammelten Daten zur Größe von US-Präsidenten und untersuchten, ob die Größe eines Präsidentschaftskandidaten einen Einfluss auf das Wählerverhalten der US-Amerikaner hat. Sie untersuchten unter anderem die Hypothese, ob die relative Größe, also das Verhältnis der Größe des gewählten Präsidenten zu der des erfolgreichsten Gegenkandidaten, einen Einfluss auf den popular vote hatte. In den USA gibt es das Wahlmänner-System: Die Wähler wählen Wahlmänner (electoral college), die dann erst in einem nächsten Schritt den Präsidenten wählen (electoral vote). Mit dem popular vote bezeichnet man den “eigentlichen” prozentualen Anteil der Wähler, die einen Präsidenten gewählt haben. Wichtig hierbei ist, dass sich popular vote und electoral vote unterscheiden können – ein Kanditat muss so nicht mehr als die Hälfte der Wähler (> 50% des popular vote) von sich überzeugen, um Präsident zu werden.

Klassisch

Den Datensatz finden wir in der Excel-Datei president_heights.xlsx (zu finden im Ordner data des GitHub-Repositories) und ist eine gekürzte Fassung des von Stulp et al. (2013) zur Verfügung gestellten Datensatzes. Da es sich hier um eine Excel-Datei handelt, benötigen wir das Paket readxl aus dem Tidyverse, um diese Daten einzulesen. Um unseren einheitlichen Stil umzusetzen, bereinigen wir die Variablen-Namen direkt mit der Funktion clean_names() aus dem Paket janitor.

# Pakets laden
library(readxl)
library(janitor)

# Daten laden
presidents_heights <- read_excel("data/presidents_heights.xlsx") %>% 
  clean_names()

presidents_heights
## # A tibble: 61 x 10
##    president election_year president_number party height height_most_pop~
##    <chr>             <dbl>            <dbl> <chr>  <dbl>            <dbl>
##  1 George W~          1789                1 No p~    188               NA
##  2 George W~          1792                1 Fede~    188               NA
##  3 John Ada~          1796                2 Fede~    170               NA
##  4 Thomas J~          1800                3 Demo~    189               NA
##  5 Thomas J~          1804                3 Demo~    189               NA
##  6 James Ma~          1808                4 Demo~    163               NA
##  7 James Ma~          1812                4 Demo~    163               NA
##  8 James Mo~          1816                5 Demo~    183               NA
##  9 James Mo~          1820                5 Demo~    183               NA
## 10 John Qui~          1824                6 Demo~    171              185
## # ... with 51 more rows, and 4 more variables: popular_vote_president <dbl>,
## #   popvote_most_popular_opponent <dbl>,
## #   ratio_height_president_height_most_popular_opponent <dbl>,
## #   ratio_pop_vote_president_pop_vote_most_popular_opponent <dbl>

Wir betrachten hier einen Datensatz mit 61 Zeilen (“Wahlen”) und 10 Variablen. In der Variable president ist der Name des Präsidenten eingetragen, in election_year das Wahljahr, dann die Stelle des gewählten Kandidaten in der Reihenfolge der Präsidenten (president_number), die Partei (party), die Größe des gewählten Präsidenten (height), die Größe des erfolgreichsten Gegenkandidaten (height_most_popular_opponent), der popular vote für den gewählten Präsidenten (popular_vote_president) und selbes für den erfolgreichsten Gegenkandidaten (popvote_most_popular_opponent). Die letzten beiden Variablen sind jeweils das Verhältnis der Größe und des popular vote von gewähltem Präsidenten und Gegenkandidaten.

Wann immer solche Prozentsätze, Summen oder Mittelwerte gebildet wurden, dürfen wir berechtigterweise skeptisch sein (auch in der Forschung wird so etwas, je nach Kenntnisstand des Ausfüllenden auch noch mal per Hand gemacht) und solche Werte selbst berechnen1. Das machen wir doch direkt mal: Für die relative Größe des Gewinners teilen wir die Größe des Gewinners durch die des erfolgreichsten Gegenkandidaten. Beim popular vote handelt es sich bereits um Prozente, für den relativen Anteil teilen wir also den popuar vote des Präsidenten durch die Summe des popular votes des Präsidenten und des erfolgreichsten Gegenkandidaten. \[\text{ratio_vote} = \dfrac{\text{vote president}}{\text{vote president} + \text{vote opponent}}\]

presidents_heights <- presidents_heights %>% 
  mutate(
    ratio_height = height / height_most_popular_opponent,
    ratio_vote = popular_vote_president / (popular_vote_president + popvote_most_popular_opponent),
  )

EDA

Wie immer, ist es eine gute Idee, die Daten erst einmal zu betrachten, bevor wir anfangen, wilde Modelle zu berechnen. Uns interessiert der Zusammenhang zwischen zwei Variablen: Der relativen Größe des Präsidenten mit dem relativen Anteil am popular vote.

presidents_heights %>% 
  select(ratio_height, ratio_vote) %>% 
  get_summary_stats()
## # A tibble: 2 x 13
##   variable     n   min   max median    q1    q3   iqr   mad  mean    sd    se
##   <chr>    <dbl> <dbl> <dbl>  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 ratio_h~    46 0.908 1.18   1.01  0.98  1.04  0.062 0.041 1.01  0.054 0.008
## 2 ratio_v~    47 0.428 0.652  0.539 0.517 0.580 0.063 0.047 0.548 0.045 0.007
## # ... with 1 more variable: ci <dbl>

Lut deskriptiver Statistiken und Abbildungen haben wir keine unplausiblen Werte oder Ausreißer in diesem Datensatz. Betrachten wir anschließend das Streudiagramm der beiden Variablen.

Wir können relativ leicht erkennen, dass es einen positiven Zusammenhang zwischen dem Verhältnis der Größen der beiden Kandidaten mit dem Verhältnis des popular vote gibt. Je größer ein Kandidat also im Vergleich zu seinem Gegner ist, desto größer ist der Anteil des popular vote, den der Kandidat abgreifen kann.

Durchführung

Die Durchführung ist wie immer kurz und schmerzlos.

presidents_heights %>% 
  select(ratio_height, ratio_vote) %>% 
  cor_test()
## # A tibble: 1 x 8
##   var1         var2         cor statistic       p conf.low conf.high method 
##   <chr>        <chr>      <dbl>     <dbl>   <dbl>    <dbl>     <dbl> <chr>  
## 1 ratio_height ratio_vote  0.39      2.84 0.00688    0.116     0.613 Pearson

Die sich ergebende Korrelation ist identisch mit der der Autoren (Stulp et al., 2013, S. 163), \(r = .39, p = .007\). An dieser Stelle wieder der Hinweis, dass es sich nicht um einen Kausalen Zusammenhang handeln muss. Relativ größere Kandidaten fahren relativ gesehen mehr Stimmen ein, aber wir wissen nicht, ob das tatsächlich wegen der Größe so ist.

Berichten

We found a significant correlation between the height ratio of presidential candidates with their most popular opponent and the ratio of the popular vote, \(r = .39, p = .007\).

Robust

Auch robust können wir einen Zusammenhang feststellen. Wir haben oben zwei Verfahren kennengelernt, die percentage bend correlation und die Korrelation basierend auf “winsorizierten” Daten.

# Percentage Bend Correlation
with(
  presidents_heights,
  pbcor(ratio_height, ratio_vote)
)
## Call:
## pbcor(x = ratio_height, y = ratio_vote)
## 
## Robust correlation coefficient: 0.4134
## Test statistic: 3.0115
## p-value: 0.0043
# Winsorized Correlation
with(
  presidents_heights,
  wincor(ratio_height, ratio_vote)
)
## Call:
## wincor(x = ratio_height, y = ratio_vote)
## 
## Robust correlation coefficient: 0.4017
## Test statistic: 2.9097
## p-value: 0.00732

Die Korrelationen wären, je nach Methode, \(\rho_{pb} = .413, p = .004\) (für die percentage bend correlation) oder \(\rho_w = .402, p = .007\) (für die winsorized correlation).

Literatur

Howell, D. C. (1997). Statistical Methods for Psychology (4th ed.). Duxbury Press.

Mair, P., & Wilcox, R. R. (2020). Robust statistical methods in R using the WRS2 package. Behavior Research Methods, 52(2), 464–488. https://doi.org/10.3758/s13428-019-01246-w

Stulp, G., Buunk, A. P., Verhulst, S., & Pollet, T. V. (2013). Tall claims? Sense and nonsense about the importance of height of US presidents. The Leadership Quarterly, 24(1), 159–171. https://doi.org/10.1016/j.leaqua.2012.09.002

Wilcox, R. R. (2017). Introduction to Robust Estimation and Hypothesis Testing (4th ed.). Elsevier Academic Press.


  1. In diesem Fall war jemand fähiges am Werke, denn die Daten stimmen. Wer möchte, kann also darauf verzichten, die Verhältnisse selbst zu berechnen, es ist jedoch eine schöne Übung.↩︎