Zusammenhang zwischen metrischen Variablen
Darstellung von Zusammenhängen
Korrelation
Herleitung des Korrelationskoeffizienten nach Bravais und Pearson
Zusammenfassung
Praktische Umsetzung mit Statistiksoftware
Beispieldaten herunterladen: dat.csv
Datenbeispiel
Unser Beispieldatensatz (hypothetisches Datenbeispiel) liegt als CSV-Datei vor. Die Daten können mit der read.csv-Funktion eingelesen werden (der korrekte Pfad zum Speicherort muss angegeben werden):
dat <- read.csv("C:/... Pfad .../dat.csv")
Die Funktion erzeugt ein Objekt vom Typ data.frame, dem wir links vom Zuweisungspfeil (<-) den Namen "dat" geben.
Der Datensatz enthält u.a. die Variablen punkte (erzielte Punktzahl in einem Test), schlafdauer (Schlafdauer in der Nacht vor dem Test in Std.), lernzeit (insgesamt für den Test aufgewendete Lernzeit in Std.) und lsport (Lieblingssportart). Einzelne Variablen können als Datensatzname$Variablenname angesprochen werden, z.B.:
dat$punkte
>[1] 93.0 76.5 79.5 85.0 66.5 71.0 56.5 77.0 59.0 63.5 72.0 70.0 96.0 72.0 62.5 76.5 86.0 57.5
[19] 60.0 73.5 64.5 54.0 85.0 64.0 57.5 54.0 76.5 41.0 58.5 87.5 62.5 62.5 100.5 86.0 66.5 79.5
[37] 77.0 67.5 58.5 92.5 94.5 77.0 76.0 67.0 44.5 86.5 70.0 81.5 90.5 78.0 80.5 74.0 56.5 60.0
[55] 83.0 70.0 49.0 57.0 48.0 70.5 96.5 106.0 65.5 86.5 87.5 89.5 64.0 86.0 62.0 94.5 52.0 73.5
[73] 77.0 83.5 62.5 52.5 51.5 86.5 70.5 57.5 68.0 103.0 79.0 75.0 113.5 78.0 104.5 84.5 63.5 46.0
[91] 102.5 77.0 73.5 71.0 106.0 79.0 77.5 87.0 92.5 11.5 83.5 86.5 78.5 67.5 71.0 61.5 31.0 50.5
[109] 87.5 66.5 67.0 60.5 61.5 83.5 66.0 97.0 79.5 83.5 82.0 63.0
Die Ausgabe zeigt die 120 beobachteten Werte der Variable punkte.
Punktediagramm
<!-- Wir interessieren uns für den Zusammenhang zwischen der Punktzahl in einem Test—*punkte*—und der Anzahl an Stunden Schlaf in der Nacht vor dem Test—*schlafdauer*. --> <!-- Bei beiden Variablen handelt es sich um ratioskalierte Merkmale, daher sollten sie am besten in einem Streudiagramm darstellt werden. Dies kann mit dem Befehl plot() erstellt werden. Es ist möglich, das Diagramm zu modifizieren, in dem Beschriftungen hinzugefügt werden. -->Ein Punktediagramm für die Variablen Schlafdauer und Punktzahl kann mit dem plot()-Befehl erzeugt werden:
plot(x=dat$schlafdauer,
y=dat$punkte,
xlab="Schlafdauer vor der letzten Matheklausur",
ylab="Punktzahl in der letzten Matheklausur",
main="Zusammenhang Punktezahl Matheklausur–Schlafdauer")
Um eine besser Übersicht zu erhalten, kann auch der Mittelwert der Schlafdauer und der Punktezahl mit abline() in das Streudiagramm eingezeichnet werden:
abline(h=mean(dat$punkte), lty="dashed")
abline(v=mean(dat$schlafdauer), lty="dashed")
<!-- Wir können anhand der Punktewolke bereits erkennen, dass ein linearer Zusammenhang zwischen den Variablen besteht. -->
Korrelationskoeffizient nach Pearson:
<!-- Der Korrelationskoeffizient nach Pearson wird mit der Funktion cor.test() ermittelt: --> <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ r --> <!-- cor.test(dat$punkte, dat$schlafdauer, method = "pearson") --> <!-- > Pearson's product-moment correlation --> <!-- data: dat$punkte and dat$schlafdauer --> <!-- t = 5.1965, df = 118, p-value = 8.611e-07 --> <!-- alternative hypothesis: true correlation is not equal to 0 --> <!-- 95 percent confidence interval: --> <!-- 0.2734543 0.5669327 --> <!-- sample estimates: --> <!-- cor --> <!-- 0.4315438 --> <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ --> <!-- Der Korrelationskoeffizient nach Pearson beträgt 0,43. Wir interpretieren dies als einen mittleren positiven linearen Zusammenhang zwischen den Variablen *punkte* und *schlafdauer*. -->Der Korrelationskoeffizient nach Pearson kann (u.a.) mit der Funktion cor() berechnet werden:
> cor(x= dat$punkte, y=dat$schlafdauer, method="pearson")
[1] 0.4315438
Der Funktion kann auch ein data.frame mit mehreren metrischen Variablen übergeben werden, wir erhalten eine Matrix der Korrelationen aller Variablen untereinander:
> # Datensatz mit drei metrischen Variablen anlegen:
> datcorr <- data.frame(dat$punkte, dat$schlafdauer, dat$lernzeit)
> # Korrelationen berechnen:
> cor(datcorr)
dat.punkte dat.schlafdauer dat.lernzeit
dat.punkte 1.0000000 0.4315438 0.7275106
dat.schlafdauer 0.4315438 1.0000000 0.3318054
dat.lernzeit 0.7275106 0.3318054 1.0000000
Hinweis: liegen auf einer oder beiden Variablen fehlende Werte (NAs) vor, sollte in der Regel als weiteres Argument use="pairwise.complete.obs" angegeben werden. Mit "pairwise.complete.obs" werden fehlende Werte nach dem pairwise deletion-Prinzip entfernt: Fehlt der Wert einer für eine Korrelationsberechnung benötigte Variable bei einer Beobachtung, wird diese nicht berücksichtigt. Im Fall einer Korrelationsmatrix kann man sich auch für use="complete.obs" entscheiden wollen - eine Beobachtung wird dann für alle Korrelationsberechnungen ausgeschlossen, sobald nur auf einer Variable ein fehlender Wert vorliegt.
> cor(x= dat$punkte, y=dat$schlafdauer, method="pearson", use="complete.obs")
[1] 0.4315438
(Da hier keine fehlenden Werte vorliegen, unterscheidet sich das Ergebnis nicht von der vorherigen Berechnung.)
Beispieldaten herunterladen: daten_stata.dta
Daten einlesen
Der Datensatz wird mit dem Befehl use eingelesen
use "C:\...Pfad...\dat.dta"
Die Variablen können nun direkt mit ihrem Variablennamen ("punkte", "schlafdauer" usw.) angesprochen werden.
Punktdiagramm
<!-- Wir interessieren uns für den Zusammenhang zwischen der Punktzahl in einem Test—*punkte*—und der Anzahl an Stunden Schlaf in der Nacht vor dem Test—*schlafdauer*. --> <!-- Bei beiden Variablen handelt es sich um ratioskalierte Merkmale, daher sollten sie am besten in einem Streudiagramm darstellt werden. Ein solches Diagramm kann mit dem Befehl scatter erzeugt werden. Es ist möglich die Darstellung so zu modifizieren, dass Beschriftungen mit den Option ytitle(), xtitle() und title() hinzugefügt werden: -->Ein Punktediagramm für die Variablen Schlafdauer und Punktzahl kann mit
scatter punkte schlafdauer, ytitle("Punktzahl in der letzten Matheklausur") xtitle("Schlafdauer vor der letzten Matheklausur") title("Zusammenhang Punktezahl Matheklausur–Schlafdauer")
erzeugt werden.
Um eine noch bessere Übersicht zu erhalten, können auch die Mittelwerte der Schlafdauer und der Punktezahl mit den Optionen xline und yline als Linien in das Streudiagramm eingezeichnet werden. Dafür müssen die beiden Kennzahlen zuerst ermittelt werden. Dies geschieht mit dem summarize Befehl:
summarize punkte
> Variable | Obs Mean Std. Dev. Min Max
-------------+---------------------------------------------------------
punkte | 120 73.23333 16.29455 11.5 113.5
summarize speichert die Ergebnisse in r() zwischen—das arithmetische Mittel ist als r(mean) hinterlegt. Das Ziel ist es nun diese Kennzahl lokal zu speichern. Dafür verwenden wir den local Befehl und speichern den Mittelwert als mean_punkte (dem Objekt kann ein beliebiger gütiger Name gegeben werden):
local mean_punkte = r(mean)
Derselbe Prozess wird auch für schlafdauer durchgeführt:
summarize schlafdauer
> Variable | Obs Mean Std. Dev. Min Max
-------------+---------------------------------------------------------
schlafdauer | 120 6.185833 .7184596 4.2 7.8
local mean_schlafdauer = r(mean)
Um nun das Streudiagramm mit den beiden Linien zu erstellen, wird der bereits bekannte scatter Befehl mit yline() und xline() ergänzt. Die lokal gespeicherten Ergebnisse werden mit `Objektname' angesprochen:
scatter punkte schlafdauer, ytitle("Punktzahl in der letzten Matheklausur") xtitle("Schlafdauer vor der letzten Matheklausur") title("Zusammenhang Punktezahl Matheklausur–Schlafdauer") yline(`mean_punkte') xline(`mean_schlafdauer')
<!-- Wir können anhand der Punktewolke bereits erkennen, dass ein linearer Zusammenhang zwischen den Variablen besteht. -->
Korrelationskoeffizient
Der Korrelationskoeffizient nach Pearson wird in Stata mit der Funktion correlate ermittelt:
correlate punkte schlafdauer
(obs=120)
> | punkte schlaf~r
-------------+------------------
punkte | 1.0000
schlafdauer | 0.4315 1.0000
Der Korrelationskoeffizient nach Pearson beträgt 0,43. Wir interpretieren dies als einen mittleren positiven linearen Zusammenhang zwischen den Variablen punkte und schlafdauer. (Die Korrelationskoeffizienten der Variablen mit sich selbst sind 1, da sie perfekt mit sich selbst korrelieren.)
Der Funktion können mehr als zwei Variablen übergeben werden. Die Ausgabe erfolgt dann als Korrelationsmatrix.
correlate punkte schlafdauer lernzeit
(obs=120)
> | punkte schlaf~r
-------------+------------------
punkte | 1.0000
schlafdauer | 0.4315 1.0000
Beispieldaten herunterladen: dat.sav
Datenbeispiel
Punktdiagramm und Pearsons Korrelationskoeffizient
Statt durch Klicken durch das Menü können wir uns die Ergebnisse auch über die Syntax ausgeben lassen. Für das Diagramm verwenden wir den folgenden Code:
GGRAPH
/GRAPHDATASET NAME="graphdataset" VARIABLES=schlafdauer punkte MISSING=LISTWISE REPORTMISSING=NO
/GRAPHSPEC SOURCE=INLINE
/FITLINE TOTAL=NO.
BEGIN GPL
SOURCE: s=userSource(id("graphdataset"))
DATA: schlafdauer=col(source(s), name("schlafdauer"))
DATA: punkte=col(source(s), name("punkte"))
GUIDE: axis(dim(1), label("schlafdauer"))
GUIDE: axis(dim(2), label("punkte"))
GUIDE: text.title(label("Einfaches Streudiagramm von punkte Schritt: schlafdauer"))
ELEMENT: point(position(schlafdauer*punkte))
END GPL.
Mit dem Befehl GGRAPH erzeugen wir die Abbildung und mit dem Befehl GPL modifizieren wir sie. Unter GRAPHDATASET vergeben wir einen Namen, auf den wir uns in dem GPL-Befehl beziehen. SOURCE=INLINE führt dazu, dass der momentan geöffnete Datensatz verwendet wird. Die x-Achse wird als dim(1) bezeichnet und die y-Achse als dim(2).
Für den Korrelationskoeffizienten verwenden wir den folgenden Code:
CORRELATIONS
/VARIABLES=punkte schlafdauer.
Wir verwenden den Befehl "CORRELATION" und geben mit "VARIABLES=" die Variablen an, für deren Zusammenhang wir uns interessieren.