Skip to Tutorial Content

Einleitung

In der bivariaten Statistik geht es darum, einen Zusammenhang oder eine Abhängigkeit zwischen zwei Variablen \(x\) und \(y\) zu finden. Die eingesetzte Technik ist primär vom Skalen-Niveau der beteiligten Variablen \(x\) und \(y\) abhängig.

  • Sind beide Variablen qualitativ, so erstellt man eine Kontingenztabelle
  • Ist eine qualitativ und die andere quantitativ, so erstellt man gruppierte deskriptive Statistiken (zum Beispiel Mittelwerte und Streuungen der quantitativen Variable nach Gruppen der qualitativen Variable)
  • Sind beide Variablen quantitativ, so erstellt man Streudiagramme und errechnet Korrelationen und lineare Regressionen

Kontingenztabellen

Sie lassen \(n=100\) Personen eine Vorhersage zu einem Münzwurf machen und erheben das Geschlecht der befragten Person in der Variable geschlecht und das Resultat der Vorhersage (falsch oder richtig) in der Variable wurf.

Beide Variablen sind nominal-skaliert, also qualitativ. Wir wollen nun herausfinden, ob es eine Abhängigkeit zwischen dem Geschlecht und der Qualität zur Vorhersage gibt.

Geschlecht

Levels

Mann

Frau

Zeilensumme

Münzwurf

falsch

12

38

50

richtig

18

32

50

Spaltensumme

30

70

100

Das Resultat lässt sich mit einer Kontingenztabelle (Kreuztabelle) analysieren. Geben Sie sich die Inhalte der Vektoren wurf und geschlecht aus. Erstellen Sie für die (schon abgespeicherten Vektoren) geschlecht und wurf eine Häufigkeitstabelle und anschliessend obige Kontingenztabelle mit dem Befehl table(wurf,geschlecht)

wurf
geschlecht

table(wurf)
table(geschlecht)

# Kreuztabelle
t<-table(wurf,geschlecht)
t

Offensichtlich wurden insgesamt 50 von 100 Münzwürfen korrekt vorhergesagt, was gerade der erwarteten Häufigkeit von 50% entspricht. Es haben zudem 30 Männer und 70 Frauen am Experiment teilgenommen. Wir wollen nun anaylsieren, ob Männer häufiger richtig raten als Frauen. Hierfür erstellen wir eine Tabelle mit relativen Häufigkeiten über die Spalten (Spaltensummen = 100%). Erstellen Sie nochmals die Kontingenztabelle und anschliessend mit dem Befehl prop.table(t,2) die relativen Häufigkeiten über die Spalten (Das Argument 2 heisst, dass die Proportionen über die Spalten gebildet werden sollen).

# Kreuztabelle
t<-table(wurf,geschlecht)

# Relative Häufigkeiten über Spalten betrachten
prop.table(t,2)

Offensichtlich haben 60% der Männer richtig geraten, bei den Frauen beträgt dieser Anteil 45.7%. Diese Betrachtungsweise kann uns nun bei der Antwort nach einer Abhängigkeit zwischen Vorhersage und Geschlecht helfen: Falls es gar keine Abhängigkeit zwischen Geschlecht und Vorhersagequalität gäbe, so hätten wir innerhalb der Gruppen Mann und Frau die gleichen relativen Häufigkeiten erwartet wie über die Randhäufigkeit von 50:50. Zwar haben 10% mehr Männer auf ein richtig getippt, das Resultat ist aber von zufälliger Natur, da dies nur 3 Personen sind. Es gibt also keine Abhängigkeit zwischen Geschlecht und Vorhersagequalität.

Die gleichen Überlegungen könnten Sie sich auch über die Zeilen der Kreuztabelle machen. Erstellen Sie nochmals die Kontingenztabelle und anschliessend mit dem Befehl prop.table(t,1) die relativen Häufigkeiten über die Spalten (Das Argument 1 heisst, dass die Proportionen über die Zeilen gebildet werden sollen).

# Kreuztabelle
t<-table(wurf,geschlecht)

# Relative Häufigkeiten über Spalten betrachten
prop.table(t,1)

In der Gruppe der falschen Vorhersagen gibt es 24% Männer und 76% Frauen. Erwartet hätten wir gemäss den Randhäufigkeiten bei perfekter Unabhängigkeit eine Aufteilung von 30% : 70%. Die Abweichungen sind also auch über die Zeilen betrachtet gering.

Deskriptive Statistiken nach Gruppen

Sie haben \(n=90\) Personen nach dem Einkommen und dem Ausbildungsstand befragt (codiert als tief, mittel, hoch). Das monatliche Einkommen (gemessen in Dollar) haben Sie ebenfalls erhoben.

Da die Variable einkommen quantitativ und die Variable ausbildung qualitativ ist, bietet es sich an, eine deskritpive Statistik nach Gruppen zu machen.

Erstellen Sie eine univariate Statistik zu den Variablen ausbildung und einkommen:

table(ausbildung)
summary(einkommen)

Um nun zu entscheiden, ob es innerhalb der Gruppen der Variable ausbildung Unterschiede bezüglich der Variable einkommen gibt, erstellen wir nun eine gruppierte deskriptive Statistik mit dem Befehl by(data,indices,fun). Das Argument data steht hierbei für die auszuwertende Variable (hier einkommen), indices steht für die gruppierende Variable (hier ausbildung) und fun steht für die anzuwendende Funktion (hier zum Beispiel mean, oder sd oder summary).

#Mittelwerte nach Gruppen
by(einkommen, ausbildung, mean)

#Streuungen nach Gruppen
by(einkommen, ausbildung, sd)

#Deskr. Statistiken nach Gruppen
by(einkommen, ausbildung, summary)

Es ist einzusehen, dass die Mittelwerte der Einkommen mit erhöhten Ausbildungs-level markant zunehmen, es gibt also eine Abhängigkeit zwischen den Variablen ausbildung und einkommen.

Zeichnen Sie einen gruppierten Boxplot der Variable einkommen nach Gruppen der Variable ausbildung:

boxplot(einkommen~ausbildung,col=c("steelblue","green","red"),ylim=c(0,max(einkommen)),xlab="Ausbildung",ylab="Einkommen")

Korrelation

Sie erheben die Wohnfläche \(x\) in Quadratmeter von \(n=20\) Mietwohnungen und den monatlichen Mietpreis \(y\) in CHF. Da beide Variablen quantitativ sind kann man versuchen, einen Zusammenhang der beiden Variablen mittels eines Streudiagrammes aufzuzeigen.

Die Variablen x (Fläche) und y (Preis) sind schon abgespeichert. Geben Sie von diesen Variablen den Mittelwert und die Streuung an und erstellen Sie ein Streudiagramm:

print("Fläche")
mean(x)
sd(x)

print("Preis")
mean(y)
sd(y)

plot(x,y)

Von einer rein visuellen Betrachtung scheint es so zu sein, als dass eine Erhöhung der Wohnflächen \(x\) zu einer Erhöhung der Mietpreise \(y\) führen (und umgekehrt). In diesem Fall sprechen wir von einer positiven linearen Abhängigkeit. Die Stärke der linearen Abhängigkeit kann man in einer Masszahl ausdrücken, der Korrelation \(r\). Diese Masszahl liegt innerhalb der Grenzen:

\[-1 \leq r \leq +1\]

Wobei \(r=-1\) für eine perfekte negative lineare Abhängigkeit und \(r=+1\) für eine perfekte positive lineare Abhängigkeit steht. Eine Korrelation von \(r=0\) bedeutet, dass es keine lineare Abhängigkeit gibt.

Berechnen Sie nun die Korrelation zwischen Mietpreis \(y\) und Wohnfläche \(x\) mit dem Befehl cor(x,y).

cor(x,y)

Die Korrelation ist unabhängig von der Masseinheit (z.B. hätte man die Miete anstatt in CHF in Tausend CHF erheben können, das Resultat bliebe dasselbe). Eine (gerundete) Korrelation von \(r=0.4\) deutet auf eine moderate positive lineare Abhängigkeit zwischen Mietpreis und Fläche hin.

Um ein Gefühl für die Korrelation zu erlangen, können Sie mit untenstehendem Schieberegler die Korrelation zwischen \(-1 \leq r \leq +1\) verschieben und das Schaubild (simulierte Daten) betrachten.

Korrelationen erraten

Quizz zu Geradengleichungen

Hier haben Sie die Gelegenheit, das Aufstellen von Geradengleichungen der Form \(y=a\cdot x + b\) zu üben.

Errechnen Sie die Funktion anhand der zwei eingezeichneten Punkte \(A\) und \(B\). Geben Sie die Geradengleichung in der Form von zum Beispiel y=3/4*x+3.5 an.

Übungs-Generator für schriftliche Aufgaben

Hier können Sie sich Lehrkräfte und Studierende schriftliche Übungen nach Zufallsprinzip generieren lassen. Die Übungen werden in ein Word-Dokument mit Lösungen geschrieben und dieses kann dann zum Zweck eigener Formatierungen noch angepasst werden. Diese Übungen beinhalten (fast) keine R-basierten Aufgaben sondern nur solche, die im Rahmen einer schriftlichen Aufgabe lösbar sind. Die Aufgabensätze werden als Word-Dokument generiert und können nach eigenen Bedürfnissen formatiert werden.

Aufgabenblatt bivariate Statistik Version 1

Drucken Sie sich die Übung Version 1 unter Übungsgenerator für schriftliche Aufgaben aus oder öffnen Sie diese in einem zweiten Fenster.

Aufgabe 2 - Kontingenztabelle aus Daten erstellen

In einer Stichprobe der Grösse \(n=30\) Personen wurden die Teilnehmenden nach den Variablen Geschlecht und Ausbildung befragt. Dabei kamm folgender Datensatz zu Stande:

geschlecht <- c(0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,0,1,0,0,1)

und

ausbildung <- c(1,1,3,3,1,2,2,2,3,1,3,1,2,1,1,3,3,1,2,1,2,3,2,2,1,2,3,3,3,3)

Aufgabe 2a

Wie sind die Variablen skaliert?

LÖSUNG: Das geschlecht ist nominal, die ausbildung ist ordinal skaliert. Daher eignet sich eine bivariate Häufigkeitstabelle (Kontingenztabelle) zur Überprüfung, ob es eine Abhängigkeit zwischen den Variablen gibt.

Aufgabe 2b

Kopieren Sie die Vektoren in untenstehenden R-Code. Mit der Funktion factor() können Sie aus einem Vektor eine Faktor-Variable bilden. Im Wesentlichen hat die Funktion vier Argumente:
factor(x,levels=,labels=,ordered=) ** x ist der Vektor, der als Faktor deklariert werden soll ** levels sind die bestehenden Ausprägungen des Vektors, zum Beispiel levels=c(0,1) für die Variable geschlecht ** labels sind die Bezeichnungen, welche für die Levels zu vergeben sind ** ordered als TRUE oder FALSE gibt an, ob es sich um einen ordinalen oder nominalen Faktor handelt.

geschlecht <- c(0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,0,1,0,0,1)
ausbildung <- c(1,1,3,3,1,2,2,2,3,1,3,1,2,1,1,3,3,1,2,1,2,3,2,2,1,2,3,3,3,3)

geschlecht<-factor(geschlecht,levels=c(0,1),labels=c("w","m"), ordered=F)
ausbildung<-factor(ausbildung,levels=c(1,2,3),labels=c("HAS","ABI","HOS"),ordered=TRUE)

geschlecht
ausbildung

Aufgabe 2b

Der obenstehende Code soll nun so ergänzt werden, dass eine bivariate Häufigkeitstabelle (geschlecht in den Zeilen) im Objekt t gespeichert und ausgegeben wird. Wenden Sie auf das Objekt t die Funktionen rowSums() und colSums() an.

geschlecht <- c(0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,0,1,0,0,1)
ausbildung <- c(1,1,3,3,1,2,2,2,3,1,3,1,2,1,1,3,3,1,2,1,2,3,2,2,1,2,3,3,3,3)

geschlecht<-factor(geschlecht,levels=c(0,1),labels=c("w","m"), ordered=F)
ausbildung<-factor(ausbildung,levels=c(1,2,3),labels=c("HAS","ABI","HOS"),ordered=TRUE)
geschlecht <- c(0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,0,1,0,0,1)
ausbildung <- c(1,1,3,3,1,2,2,2,3,1,3,1,2,1,1,3,3,1,2,1,2,3,2,2,1,2,3,3,3,3)

geschlecht<-factor(geschlecht,levels=c(0,1),labels=c("w","m"), ordered=F)
ausbildung<-factor(ausbildung,levels=c(1,2,3),labels=c("HAS","ABI","HOS"),ordered=TRUE)

t<-table(geschlecht,ausbildung)
t

rowSums(t)
colSums(t)

Aufgabe 2c

Ergänzen Sie obenstehenden Code nun derart, dass die absolute Häufigkeitstabelle t in eine Tabelle mit relativen Häufigkeiten über die Zeilen ausgegeben wird.

geschlecht <- c(0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,0,1,0,0,1)
ausbildung <- c(1,1,3,3,1,2,2,2,3,1,3,1,2,1,1,3,3,1,2,1,2,3,2,2,1,2,3,3,3,3)

geschlecht<-factor(geschlecht,levels=c(0,1),labels=c("w","m"), ordered=F)
ausbildung<-factor(ausbildung,levels=c(1,2,3),labels=c("HAS","ABI","HOS"),ordered=TRUE)

t<-table(geschlecht,ausbildung)
t
geschlecht <- c(0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,0,1,0,0,1)
ausbildung <- c(1,1,3,3,1,2,2,2,3,1,3,1,2,1,1,3,3,1,2,1,2,3,2,2,1,2,3,3,3,3)

geschlecht<-factor(geschlecht,levels=c(0,1),labels=c("w","m"), ordered=F)
ausbildung<-factor(ausbildung,levels=c(1,2,3),labels=c("HAS","ABI","HOS"),ordered=TRUE)

t<-table(geschlecht,ausbildung)

prop.table(t,1)

# Vergleich mit relativen Spaltenhäufigkeiten
prop.table(table(ausbildung))

Aufgabe 2d

Ergänzen Sie obenstehenden Code nun derart, dass die absolute Häufigkeitstabelle t in eine Tabelle mit relativen Häufigkeiten über die Spalten ausgegeben wird.

geschlecht <- c(0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,0,1,0,0,1)
ausbildung <- c(1,1,3,3,1,2,2,2,3,1,3,1,2,1,1,3,3,1,2,1,2,3,2,2,1,2,3,3,3,3)

geschlecht<-factor(geschlecht,levels=c(0,1),labels=c("w","m"), ordered=F)
ausbildung<-factor(ausbildung,levels=c(1,2,3),labels=c("HAS","ABI","HOS"),ordered=TRUE)

t<-table(geschlecht,ausbildung)
t
geschlecht <- c(0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,0,1,0,0,1)
ausbildung <- c(1,1,3,3,1,2,2,2,3,1,3,1,2,1,1,3,3,1,2,1,2,3,2,2,1,2,3,3,3,3)

geschlecht<-factor(geschlecht,levels=c(0,1),labels=c("w","m"), ordered=F)
ausbildung<-factor(ausbildung,levels=c(1,2,3),labels=c("HAS","ABI","HOS"),ordered=TRUE)

t<-table(geschlecht,ausbildung)

prop.table(t,2)

# Vergleich mit relativen Zeilenhäufigkeiten
prop.table(table(geschlecht))

Aufgabe 3 - Kontingenztabelle interpretieren

Bilden Sie mit R die Kontingenztabelle in der Aufgabe 3 des Übungsblattes nach. Mit der Funktion rep(x,y) kann ein Argument x y-fach wiederholt werden. Erstellen Sie hierfür zuerst Vektoren bildung und einkommen der Länge \(n=2100\) mit den Levels 1, 2 und 3.

bildung <- c(rep(1,627),rep(2,864),rep(3,609))

einkommen <- c(rep(1,397),rep(2,162),rep(3,68),
               rep(1,343),rep(2,322),rep(3,199),
               rep(1,125),rep(2,303),rep(3,181))

Bilden Sie nun Faktoren aus den Variablen einkommen und bildung. Achten Sie insbesondere auf die Skalierung. Erstellen Sie danach eine Kontingenztabelle und geben Sie sich die relativen Häufigkeiten über die Zeilen aus.

bildung <- c(rep(1,627),rep(2,864),rep(3,609))

einkommen <- c(rep(1,397),rep(2,162),rep(3,68),
               rep(1,343),rep(2,322),rep(3,199),
               rep(1,125),rep(2,303),rep(3,181))
bildung <- c(rep(1,627),rep(2,864),rep(3,609))

einkommen <- c(rep(1,397),rep(2,162),rep(3,68),
               rep(1,343),rep(2,322),rep(3,199),
               rep(1,125),rep(2,303),rep(3,181))

bildung <- factor(bildung,levels=1:3,labels=c("Tief","Mittel","Hoch"),ordered=TRUE)
einkommen <- factor(einkommen,levels=1:3,labels=c("Tief","Mittel","Hoch"),ordered=TRUE)

t<-table(bildung,einkommen)
prop.table(t,1)

# Vergleich mit Randhäufigkeiten
prop.table(table(einkommen))

Aufgabe 4 - Korrelation und Regression

Folgende Daten zu den Jahresgewinnen der Unternehmen x und y sind bekannt (in Millionen Dollar):

x<-c(11,15,9,9,15,11,10,12,10,8,12,11,10) y<-c(0,5,2,-2,8,5,4,0,1,0,5,3,-1)

4a

Zeichnen Sie die Punktwolke mit einer Trendgeraden

x<-c(11,15,9,9,15,11,10,12,10,8,12,11,10)
y<-c(0,5,2,-2,8,5,4,0,1,0,5,3,-1)
x<-c(11,15,9,9,15,11,10,12,10,8,12,11,10)
y<-c(0,5,2,-2,8,5,4,0,1,0,5,3,-1)

plot(x,y,xlim=c(-3,16),ylim=c(-3,16),col="steelblue")
abline(lm(y~x))
points(mean(x),mean(y),col="red")

4b

Erstellen Sie bivariate deskriptive Statistiken zu den Gewinnen x und y mit Angabe der Mittelwerte, Streuungen und der Korrelation. Zeichnen Sie die Mittelwerts-Koordinaten in das vorherige Diagramm ein. Berechnen Sie aus diesen Angaben die Gleichung der Regressions-Geraden. Geben Sie mit Hilfe der Regression an, welchen Gewinn das Unternehmen y macht, falls das Unternehmen x einen Gewinn von 4 Millionen Dollar erwirtschaftet.

x<-c(11,15,9,9,15,11,10,12,10,8,12,11,10)
y<-c(0,5,2,-2,8,5,4,0,1,0,5,3,-1)
x<-c(11,15,9,9,15,11,10,12,10,8,12,11,10)
y<-c(0,5,2,-2,8,5,4,0,1,0,5,3,-1)

mx<-mean(x); sx<-sd(x)
my<-mean(y); sy<-sd(y)
r<-cor(x,y)

print(paste("MW von x: ",round(mx,3)," MW von y: ", round(my,3),sep=""))
print(paste("SD von x: ",round(sx,3)," SD von y: ", round(sy,3),sep=""))
print(paste("Corr x y: ",round(r,3),sep=""))

a<-r*sy/sx
b<-my-a*mx

print(paste("Gleichung der Regressionsgeraden: y = ",round(a,3),"*x + ",round(b,3),sep=""))

4c

Berechnen Sie für alle x-Werte die Vorhersagen yp und die Fehlerterme e. Berechnen Sie dann die Varianzen von diesen Termen und überzeugen Sie sich, dass der Zusammenhang: \(s_y^2 = s_{\hat{y}}^2+s_e^2\) gilt. Geben Sie das Bestimmtheitsmass an und überprüfen Sie die Identität: \(R^2 = r^2\).

x<-c(11,15,9,9,15,11,10,12,10,8,12,11,10)
y<-c(0,5,2,-2,8,5,4,0,1,0,5,3,-1)
x<-c(11,15,9,9,15,11,10,12,10,8,12,11,10)
y<-c(0,5,2,-2,8,5,4,0,1,0,5,3,-1)

mx<-mean(x); sx<-sd(x)
my<-mean(y); sy<-sd(y)
r<-cor(x,y)

a<-r*sy/sx; b<-my-a*mx

yp <- a*x+b
e <- y-yp

sy2=sy^2
syp2=sd(yp)^2
se2=sd(e)^2

sy2-syp2-se2

R2<-syp2/sy2
R2
r^2

In R erstellen Sie eine Regression mit dem Befehl lm(y~x). Erstellen Sie die Regression, speichern Sie das Resultat im Objekt model ab und geben Sie sich summary(model) an:

x<-c(11,15,9,9,15,11,10,12,10,8,12,11,10)
y<-c(0,5,2,-2,8,5,4,0,1,0,5,3,-1)
x<-c(11,15,9,9,15,11,10,12,10,8,12,11,10)
y<-c(0,5,2,-2,8,5,4,0,1,0,5,3,-1)

lm(y~x)
model<-lm(y~x)
summary(model)

Einführung in R - APP für Bivariate Statistik