[Courtesy of pxhere](https://pxhere.com/de/photo/855019) Courtesy of pxhere

Korrelation - Lösungen

Vorbereitung

Laden Sie zunächst den Datensatz fb23 von der pandar-Website. Alternativ können Sie die fertige R-Daten-Datei hier herunterladen. Beachten Sie in jedem Fall, dass die Ergänzungen im Datensatz vorausgesetzt werden. Die Bedeutung der einzelnen Variablen und ihre Antwortkategorien können Sie dem Dokument Variablenübersicht entnehmen.

Prüfen Sie zur Sicherheit, ob alles funktioniert hat:

dim(fb23)
## [1] 179  53
names(fb23)
##  [1] "mdbf1_pre"    "mdbf2_pre"    "mdbf3_pre"    "mdbf4_pre"    "mdbf5_pre"    "mdbf6_pre"    "mdbf7_pre"   
##  [8] "mdbf8_pre"    "mdbf9_pre"    "mdbf10_pre"   "mdbf11_pre"   "mdbf12_pre"   "lz"           "extra"       
## [15] "vertr"        "gewis"        "neuro"        "offen"        "prok"         "nerd"         "grund"       
## [22] "fach"         "ziel"         "wissen"       "therap"       "lerntyp"      "hand"         "job"         
## [29] "ort"          "ort12"        "wohnen"       "uni1"         "uni2"         "uni3"         "uni4"        
## [36] "attent_pre"   "gs_post"      "wm_post"      "ru_post"      "attent_post"  "hand_factor"  "fach_klin"   
## [43] "unipartys"    "mdbf4_pre_r"  "mdbf11_pre_r" "mdbf3_pre_r"  "mdbf9_pre_r"  "mdbf5_pre_r"  "mdbf7_pre_r" 
## [50] "wm_pre"       "gs_pre"       "ru_pre"       "ru_pre_zstd"

Der Datensatz besteht aus 179 Zeilen (Beobachtungen) und 53 Spalten (Variablen). Falls Sie bereits eigene Variablen erstellt haben, kann die Spaltenzahl natürlich abweichen.


Aufgabe 1

Das Paket psych enthält vielerlei Funktionen, die für die Analyse von Datensätzen aus psychologischer Forschung praktisch sind. Eine von ihnen (describe()) erlaubt es, gleichzeitig verschiedene Deskriptivstatistiken für Variablen zu erstellen.

  • Installieren (falls noch nicht geschehen) und laden Sie das Paket psych.
  • Nutzen Sie den neugewonnen Befehl describe(), um sich gleichzeitig die verschiedenen Deskriptivstatistiken für Lebenszufriedenheit (lz) ausgeben zu lassen.
Lösung
# Paket installieren
install.packages('psych')
# Paket laden
library(psych)
  • Nutzen Sie den neugewonnen Befehl describe(), um sich gleichzeitig die verschiedenen Deskriptivstatistiken für Lebenszufriedenheit (lz) ausgeben zu lassen.
Lösung
describe(fb23$lz)
##    vars   n mean   sd median trimmed  mad min max range  skew kurtosis   se
## X1    1 177 5.12 1.05    5.4    5.19 0.89 1.4   7   5.6 -0.75     0.58 0.08
  • Die Funktion describeBy() ermöglicht außerdem Deskriptivstatistiken in Abhängigkeit einer gruppierenden Variable auszugeben. Machen Sie sich diesen Befehl zunutze, um sich die Lebenszufriedenheit (lz) abhängig von der derzeitigen Wohnsituation (wohnen) anzeigen zu lassen.
Lösung
describeBy(fb23$lz, group = fb23$wohnen)
## 
##  Descriptive statistics by group 
## group: WG
##    vars  n mean   sd median trimmed  mad min max range  skew kurtosis   se
## X1    1 55 5.11 1.09    5.2    5.19 0.89 1.4   7   5.6 -0.83     0.94 0.15
## -------------------------------------------------------------------------------------- 
## group: bei Eltern
##    vars  n mean   sd median trimmed  mad min max range  skew kurtosis   se
## X1    1 40 5.04 1.03    5.2    5.14 0.89 1.6   7   5.4 -1.01     1.52 0.16
## -------------------------------------------------------------------------------------- 
## group: alleine
##    vars  n mean   sd median trimmed  mad min max range  skew kurtosis   se
## X1    1 44  5.2 0.99    5.2    5.22 1.19 2.6 6.8   4.2 -0.24    -0.41 0.15
## -------------------------------------------------------------------------------------- 
## group: sonstiges
##    vars  n mean   sd median trimmed  mad min max range  skew kurtosis   se
## X1    1 25 5.07 1.08    5.4    5.16 0.89 2.6 6.4   3.8 -0.81    -0.65 0.22
  • describe() kann auch genutzt werden, um gleichzeitig Deskriptivstatistiken für verschiedene Variablen zu berechnen. Nutzen Sie diese Funktionalität, um sich gleichzeitg die univariaten Deskriptivstatistiken für die fünf Persönlichkeitsdimensionen ausgeben zu lassen.
Lösung
describe(fb23[,c("extra","vertr","gewis","neuro","offen")])
##       vars   n mean   sd median trimmed  mad min max range  skew kurtosis   se
## extra    1 179 3.27 0.91    3.0    3.28 0.74 1.0   5   4.0 -0.08    -0.64 0.07
## vertr    2 178 3.46 0.82    3.5    3.49 0.74 1.0   5   4.0 -0.26    -0.18 0.06
## gewis    3 179 3.53 0.77    3.5    3.54 0.74 1.5   5   3.5 -0.13    -0.51 0.06
## neuro    4 179 3.35 0.98    3.5    3.37 0.74 1.0   5   4.0 -0.19    -0.68 0.07
## offen    5 179 3.74 0.93    4.0    3.79 1.48 1.5   5   3.5 -0.34    -0.79 0.07

Aufgabe 2

In der Befragung am Anfang des Semesters wurde gefragt, ob Sie neben der Uni einen Nebenjob (job) ausüben und mit welcher Hand sie primär schreiben (hand). Erstellen Sie für diese beiden Variablen eine Kreuztabelle mit Randsummen.

  • Stellen Sie zunächst sicher, dass die Variablen als Faktoren vorliegen und die Kategorien beider Variablen korrekt bezeichnet sind.
Lösung

Zunächst können wir überprüfen, ob die Variablen als Faktor vorliegen.

#Labels
is.factor(fb23$job)
## [1] TRUE
is.factor(fb23$hand)
## [1] FALSE

Wenn Sie die Datensatzvorbereitung aus dem Skript kopiert haben, sollte die Variable job bereits ein Faktor sein. Die Variable hand jedoch nicht. Dies müssen wir ändern.

fb23$hand <- factor(fb23$hand,
                    levels = c(1, 2),
                    labels = c("links", "rechts"))

Für den Fall, dass die Variable job noch nicht als Faktor im Datensatz vorliegt, kann folgender Code durchgeführt werden. Achten Sie aber drauf, dass dieser Befehl auf eine Variable nicht angewendet werden sollte, wenn diese bereits ein Faktor ist. Ansonsten kommt es zu dem Fehler, dass die Variable keine Informationen mehr enthält.

fb23$job <- factor(fb23$job, levels = c(1, 2),
  labels = c('nein', 'ja'))

Die Variablen sehen dann folgendermaßen aus.

str(fb23$job)
##  Factor w/ 2 levels "nein","ja": 1 1 1 1 2 2 NA 2 1 2 ...
str(fb23$hand)
##  Factor w/ 2 levels "links","rechts": 2 2 2 2 2 2 NA 2 1 2 ...
  • Wie viele Personen sind Linkshänder und haben keinen Nebenjob?
Lösung
# Kreuztabelle absolut
tab <- table(fb23$hand, fb23$job)
addmargins(tab)
##         
##          nein  ja Sum
##   links    12   7  19
##   rechts   84  73 157
##   Sum      96  80 176

12 Personen schreiben primär mit der linken Hand und haben keinen Nebenjob.

  • Was ist der relative Anteil aller Teilnehmenden, die einem Nebenjob nachgehen?
Lösung
# Relative Häufigkeiten, mit Randsummen
addmargins(prop.table(tab))
##         
##                nein         ja        Sum
##   links  0.06818182 0.03977273 0.10795455
##   rechts 0.47727273 0.41477273 0.89204545
##   Sum    0.54545455 0.45454545 1.00000000

45.45% aller Teilnehmenden gehen keiner Nebentätigkeit nach.

  • Berechnen Sie nun mit Hilfe des psych-Pakets die Korrelationskoeffizienten Phi ($\phi$) und Yules Q für das oben genannte Beispiel.
Lösung
phi(tab, digits = 3)
## [1] 0.06
Yule(tab) |> round(digits = 3) #da die Yule()-Funktion nicht direkt runden kann geben wir das Ergebnis an die round()-Funktion weiter
## [1] 0.197

Beide Koeffizienten sprechen für eine wenn überhaupt schwache Korrelation.

Aufgabe 3

Welche der fünf Persönlichkeitsdimensionen Extraversion (extra), Verträglichkeit (vertr), Gewissenhaftigkeit (gewis), Neurotizismus (neuro) und Offenheit für neue Erfahrungen (offen) ist am stärksten mit der Lebenszufriedenheit korreliert (lz)?

  • Überprüfen Sie die Voraussetzungen für die Pearson-Korrelation.
Lösung

Voraussetzungen Pearson-Korrelation:

  1. Skalenniveau: intervallskalierte Daten $\rightarrow$ ok\
  2. Linearität: Zusammenhang muss linear sein $\rightarrow$ Grafische überprüfung (Scatterplot)
# Scatterplot
plot(fb23$extra, fb23$lz, 
  xlim = c(0, 6), ylim = c(0, 7), pch = 19)

plot(fb23$vertr, fb23$lz, 
  xlim = c(0, 6), ylim = c(0, 7), pch = 19)

plot(fb23$gewis, fb23$lz, 
  xlim = c(0, 6), ylim = c(0, 7), pch = 19)

plot(fb23$neuro, fb23$lz, 
  xlim = c(0, 6), ylim = c(0, 7), pch = 19)

plot(fb23$offen, fb23$lz, 
  xlim = c(0, 6), ylim = c(0, 7), pch = 19)

Die fünf Scatterplots lassen allesamt auf einen linearen Zusammenhang zwischen den Variablen schließen.

  1. Normalverteilung $\rightarrow$ QQ-Plot, Histogramm oder Shapiro-Wilk-Test
#QQ
qqnorm(fb23$extra)
qqline(fb23$extra)

qqnorm(fb23$vertr)
qqline(fb23$vertr)

qqnorm(fb23$gewis)
qqline(fb23$gewis)

qqnorm(fb23$neuro)
qqline(fb23$neuro)

qqnorm(fb23$offen)
qqline(fb23$offen)

qqnorm(fb23$lz)
qqline(fb23$lz)

#Histogramm
hist(fb23$extra, prob = TRUE, ylim = c(0, 1))
curve(dnorm(x, mean = mean(fb23$extra, na.rm = TRUE), sd = sd(fb23$extra, na.rm = TRUE)), col = "#00618F", add = TRUE)  

hist(fb23$vertr, prob = TRUE, ylim = c(0, 1))
curve(dnorm(x, mean = mean(fb23$vertr, na.rm = TRUE), sd = sd(fb23$vertr, na.rm = TRUE)), col = "#00618F", add = TRUE)  

hist(fb23$gewis, prob = TRUE, ylim = c(0, 1))
curve(dnorm(x, mean = mean(fb23$gewis, na.rm = TRUE), sd = sd(fb23$gewis, na.rm = TRUE)), col = "#00618F", add = TRUE)  

hist(fb23$neuro, prob = TRUE, ylim = c(0, 1))
curve(dnorm(x, mean = mean(fb23$neuro, na.rm = TRUE), sd = sd(fb23$neuro, na.rm = TRUE)), col = "#00618F", add = TRUE)  

hist(fb23$offen, prob = TRUE, ylim = c(0, 1))
curve(dnorm(x, mean = mean(fb23$offen, na.rm = TRUE), sd = sd(fb23$offen, na.rm = TRUE)), col = "#00618F", add = TRUE)  

hist(fb23$lz, prob = TRUE, ylim = c(0, 1))
curve(dnorm(x, mean = mean(fb23$lz, na.rm = TRUE), sd = sd(fb23$lz, na.rm = TRUE)), col = "#00618F", add = TRUE)  

#Shapiro
shapiro.test(fb23$extra)
## 
## 	Shapiro-Wilk normality test
## 
## data:  fb23$extra
## W = 0.96277, p-value = 0.0001067
shapiro.test(fb23$vertr)
## 
## 	Shapiro-Wilk normality test
## 
## data:  fb23$vertr
## W = 0.95626, p-value = 2.466e-05
shapiro.test(fb23$gewis)
## 
## 	Shapiro-Wilk normality test
## 
## data:  fb23$gewis
## W = 0.95577, p-value = 2.097e-05
shapiro.test(fb23$neuro)
## 
## 	Shapiro-Wilk normality test
## 
## data:  fb23$neuro
## W = 0.9603, p-value = 5.928e-05
shapiro.test(fb23$offen)
## 
## 	Shapiro-Wilk normality test
## 
## data:  fb23$offen
## W = 0.93418, p-value = 2.776e-07
shapiro.test(fb23$lz)
## 
## 	Shapiro-Wilk normality test
## 
## data:  fb23$lz
## W = 0.96084, p-value = 7.429e-05

$p < \alpha$ $\rightarrow$ H1: Normalverteilung kann für alle Variablen nicht angenommen werden. Somit ist diese Voraussetzung für alle Variablen verletzt. Daher sollten wir fortlaufend die Rangkorrelation nach Spearman nutzen.

  • Erstellen Sie für diese Frage eine Korrelationsmatrix, die alle Korrelationen enthält. Verwenden Sie die Funktion round() (unter Betrachtung der Hilfe), um die Werte auf zwei Nachkommastellen zu runden und die Tabelle dadurch übersichtlicher darzustellen.
Lösung
# Korrelationstabelle erstellen und runden
cor_mat <- round(cor(fb23[,c('lz', 'extra', 'vertr', 'gewis', 'neuro', 'offen')],
                     use = 'pairwise',
                     method = 'spearman'),2)
cor_mat
##          lz extra vertr gewis neuro offen
## lz     1.00  0.33  0.15  0.16 -0.23 -0.04
## extra  0.33  1.00 -0.02  0.08 -0.36  0.12
## vertr  0.15 -0.02  1.00 -0.01  0.15 -0.13
## gewis  0.16  0.08 -0.01  1.00 -0.02  0.11
## neuro -0.23 -0.36  0.15 -0.02  1.00 -0.02
## offen -0.04  0.12 -0.13  0.11 -0.02  1.00
  • Wie würden Sie das Ausmaß der betragsmäßig größten Korrelation mit der Lebenszufriedenheit nach den Richtlinien von Cohen (1988) einschätzen?
Lösung

Die betragsmäßig größte Korrelation mit der Lebenszufriedenheit hat die Extraversion. Nach den Richtlinien ist diese mit 0.33 einem positiven mittleren Effekt, der ungefähr 0.3 beträgt, zuzuordnen.

  • Ist der Korrelationskoeffizient von Lebenszufriedenheit und Neurotizismus statistisch signifikant?
Lösung
cor.test(fb23$lz, fb23$neuro, 
         alternative = "two.sided", 
         method = "spearman",       
         use = "pairwise") 
## Warning in cor.test.default(fb23$lz, fb23$neuro, alternative = "two.sided", : Cannot compute exact p-value with
## ties
## 
## 	Spearman's rank correlation rho
## 
## data:  fb23$lz and fb23$neuro
## S = 1136540, p-value = 0.002093
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##        rho 
## -0.2297879

$p < \alpha$ $\rightarrow$ H1. Die Korrelation ist mit einer Irrtumswahrscheinlichkeit von 5% signifikant von 0 verschieden.

Aufgabe 4

Untersuchen Sie die Korrelation zwischen Nerdiness (nerd) und Prokrastinationstendenz (prok). Berechnen Sie dafür ein geeignetes Korrelationsmaß und testen Sie dieses auf Signifikanz.

Lösung

Um das geeignete Korrelationsmaß zu bestimmen überprüfen wir zunächst die Vorrausetzungen der Pearson-Korrelation:

  1. Skalenniveau: intervallskalierte Daten $\rightarrow$ ok\
  2. Linearität: Zusammenhang muss linear sein $\rightarrow$ Grafische überprüfung (Scatterplot)
# Scatterplot
plot(fb23$nerd, fb23$prok, 
  xlim = c(0, 6), ylim = c(0, 7), pch = 19)

Es ist kein klarer linearer Zusammenhang zwischen nerd und prok zu erkennen. Gleichzeitig ist keine andere Art des Zusammenhangs (polynomial, exponentiell etc.) offensichtlich. Daher gehen wir für diese Aufgabe, um im Rahmen des Erstsemester Statistik Praktikums zu bleiben, davon aus dass die Vorraussetzung der Linearität erfüllt ist.

  1. Normalverteilung $\rightarrow$ QQ-Plot, Histogramm oder Shapiro-Wilk Test
#Car-Paket laden
library(car)
#QQ-Plot
qqPlot(fb23$nerd)

## [1] 25 74
qqPlot(fb23$prok)

## [1] 91 19
#Histogramm
hist(fb23$nerd, prob = TRUE, ylim = c(0, 1))
curve(dnorm(x, mean = mean(fb23$nerd, na.rm = TRUE), sd = sd(fb23$nerd, na.rm = TRUE)), col = "#00618F", add = TRUE)  

hist(fb23$prok, prob = TRUE, ylim = c(0, 1))
curve(dnorm(x, mean = mean(fb23$prok, na.rm = TRUE), sd = sd(fb23$prok, na.rm = TRUE)), col = "#00618F", add = TRUE)

#Shapiro-Wilk Test
shapiro.test(fb23$nerd) #nicht signifikant
## 
## 	Shapiro-Wilk normality test
## 
## data:  fb23$nerd
## W = 0.99184, p-value = 0.4097
shapiro.test(fb23$prok) #knapp signifikant
## 
## 	Shapiro-Wilk normality test
## 
## data:  fb23$prok
## W = 0.98435, p-value = 0.04279

Auf Basis der zwei graphischen und dem inferenzstatistischen Verfahren kommen wir zum Schluss das beide Variablen normalverteilt vorliegen, auch wenn der Shapiro-Wilk Test für prok signifikant ausfällt. Hier lässt sich auch mit dem zentralen Grenzwertsatz argumentieren. Als Faustregel gilt hiernach $n > 30 \rightarrow$ normalverteilt.

Somit kommen wir zum Schluss das die Pearson-Korrelation hier das richtige Korrelationsmaß ist. Falls Sie für ihre Berechnung jedoch die Normalverteilungsannahme verworfen haben und mit Spearman gerechnet haben ist dies auch ok.

cor.test(fb23$nerd, fb23$prok,
         alternative = "two.sided",
         method = "pearson",
         use = "pairwise")
## 
## 	Pearson's product-moment correlation
## 
## data:  fb23$nerd and fb23$prok
## t = 0.19556, df = 177, p-value = 0.8452
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.1322599  0.1610227
## sample estimates:
##        cor 
## 0.01469751
cor.test(fb23$nerd, fb23$prok,
                        alternative = "two.sided",
                        method = "spearman",
                        use = "pairwise")
## Warning in cor.test.default(fb23$nerd, fb23$prok, alternative = "two.sided", : Cannot compute exact p-value with
## ties
## 
## 	Spearman's rank correlation rho
## 
## data:  fb23$nerd and fb23$prok
## S = 907096, p-value = 0.4976
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##        rho 
## 0.05101605
## Warning in cor.test.default(fb23$nerd, fb23$prok, alternative = "two.sided", : Cannot compute exact p-value with
## ties

Sowohl die Pearson-Korrelation (p = 0.8451798) als auch Spearman-Rangkorrelation (p = 0.4976397) sind nicht signifikant von 0 verschieden.

Aufgabe 5 Bonus

Im vorherigen Kapitel haben wir die Poweranalyse behandelt. Solche Analysen kann man auch für Korrelationen vornehmen. Frischen Sie gerne Ihren Wissensstand hier noch einmal auf. Daher, führen sie mit Hilfe des Pakets WebPower eine Sensitivitätsanalyse für den Datensatz fb23 unter folgenden Parametern durch:

  • Fehler 1. Art ($\alpha = 5%$)
  • Fehler 2. Art ($\beta = 20%$)
  • Alternativhypothese ($H_1$: $\rho_1 \neq 0$)
Lösung

Bei einer Sensitivitätsanalyse interessiert uns wie stark ein Effekt sein muss damit wir ihn gegeben der Stichprobengröße (n) und $\alpha$-Fehlerniveau mit einer Wahrscheinlichkeit (Power = 1 - $\beta$) finden. Einfach gesagt, gesucht ist die aufdeckbare Effektstärke. Außerdem sind Korrelationen ihre eigenen Effektgrößen, daher müssen wir nicht noch etwa Cohens d berechnen.

library(WebPower)
wp.correlation(n = nrow(fb23),            
               r = NULL,                  #gesucht
               power = 0.8,               #Power = 1 - Beta
               alternative = "two.sided") #leitet sich aus der H1 ab
## Power for correlation
## 
##       n         r alpha power
##     179 0.2075271  0.05   0.8
## 
## URL: http://psychstat.org/correlation

Gegeben es gibt eine von null verschiedene (signifikante) Pearson-Korrelation muss diese mindestens 0.208 groß sein, damit wir diese mit einer Power von 80%, auf einem $\alpha$-Fehlerniveau von 5% in unserem Datensatz, mit n = 179 finden könnten.


Kai J. Nehler
Kai J. Nehler
Teammitglied