Quantitative Methoden mit R

Eine Einführung in statistische Verfahren

Priv. Doz. Dr. Raimund Kovacevic

Statistik

Die Statistik stellt Methoden zur Verfügung, die den systematischen Umgang mit beobachteten oder gemessenen Informationen ermöglichen.

  • Analyse von Daten

  • Entscheidungsunterstützung unter Unsicherheit

  • Bestätigung und Widerlegung von Hypothesen

  • Modellbildung anhand von Daten

Statistische Methoden werden in einer Vielzahl von wissenschaftlichen Disziplinen genutzt und spielen auch in industriellen Anwendungen eine große Rolle

  • deskriptive (beschreibende) Statistik: Beschreibung und Zusammenfassung von Daten

  • induktive (schließende) Statistik: Test von Hypothesen, Schätzen von Parametern

  • explorative Statistik: Nutzung von Daten um Hypothesen und Modelle zu generieren und zu testen.

Enge Beziehung zu “modernen” Disziplinen data science, big data, AI

Ziele

  • Grundverständnis von statistischen Verfahren

  • Auswahlmöglichkeiten in Bezug auf Fragestellungen kennenlernen
    Grundlage für die Gestaltung von Fragebögen, Beobachtung, Experimenten …

  • Grundlegendes Handling von R

  • Slides als Vorlage!

  • Interpretation von Ergebnissen

Herkunft von Daten

(standardisierte) Befragung: Wird in vielen Wissenschaften verwendet. Ermöglicht es, auf systematische Weise Informationen über Einstellungen, Meinungen, Wissen und Verhaltensweisen von Menschen zu gewinnen. Wichtig ist die Operationalisierung von wissenschaftlichen Fragen.

Beobachtung und Messung: Alltagsbeobachtungen sind meist subjektiv und bedingt durch unmittelbare Bedürfnisse des Beobachters. Wissenschaftliche Beobachtung ist systematisch und objektiv. Was wird von wem wann und wo beobachtet? Wie wird protokolliert?

Experiment: Methodisch angelegte Untersuchung zur empirischen Gewinnung von Daten. Die Versuchsleitung bestimmt die Versuchsumgebung (kontrolliert Einflussvariable)

Sekundärdatenanalyse: Hier werden Daten analysiert, die zu anderen Zwecken gesammelt/angelegt wurden. Es handelt sich nicht um eine “sekundäre” Vorgehenweise, sondern macht heutzutage insgesamt die Mehrheit aller empirischen Untersuchungen aus. (betriebliche Daten, Marktdaten, amtliche Statistik, Internet, Mobilfunk ….)

R -Syntax

Es kommt auf Groß- und Kleinschreibung an!

Funktionen: Was soll R tun? Was muss R dafür wissen?

funktion(x,y,z, ...)
  • Die Argumente der Funktion werden durch Komma getrennt und sind von Klammern umgeben.

  • Nach Komma kann eine neue Zeile begonnen werden

Die Tabulatortaste liefert Vervollständigungsvorschläge.

Wenn in der Konsole bei der Auswertung eines Ausdrucks ein + erscheint, ist der Ausdruck noch unvollständig. Oft fehlt dann z.B. eine schließende wKlammer. Mit der Esc-Taste kann man dann den Ausdruck löschen und danach neu eingeben.

Vorbereitungen

Zu Beginn machen wir wichtige Programmbibliotheken nutzbar. Dieser Schritt muss nur einmal gemacht werden:

install.packages("remotes")
remotes::install_github("RaimundK/StatLectRK",repos="https://cloud.r-project.org/")

Nun wird die Hilfslibrary StatLectRK geladen, damit alle im Kurs besprochenen Funktionen zur Verfügung stehen. Dieser Schritt sollte jedesmal, wenn Rechnungen durchgeführt werden wiederholt werden:

library(StatLectRK)

Zuweisung und Datentypen

In R gibt es eine Vielzahl von Datentypen von denen wir hier nur die wichtigsten zeigen

  • Zahlen

    Hans <- 1+1
    Hans
    [1] 2
  • Zeichen

    Hans <- "Susanne"
  • Wahrheitswerte (TRUE/T und FALSE/F)

    x <- T
  • Vektoren werden mittels c konstruiert

    (vec <- c(1,2,3,4))
    [1] 1 2 3 4
    c("Hans",Hans)
    [1] "Hans"    "Susanne"
    c(T,FALSE)
    [1]  TRUE FALSE

Datensätze und Datentypen

Ganze Datensätze (mehrere gemeinsam erhobene Merkmale) werden in data.frames oder tibbles gespeichert.

Name <- c("Hans","Claudia","N.N.")
MW <- c(124.3, 120,110)
Datensatz <- data.frame(Name=Name,Messwert=MW)
Datensatz <- as_tibble(Datensatz)
head(Datensatz)
# A tibble: 3 × 2
  Name    Messwert
  <chr>      <dbl>
1 Hans        124.
2 Claudia     120 
3 N.N.        110 
Datensatz$Messwert
[1] 124.3 120.0 110.0

Mittels des Zeichens $ greift man am einfachsten auf Spalten des Datensatzes (Merkmale) zu. Die Werte liegen dann in einem Vektor vor.

Datensatz$Messwert
[1] 124.3 120.0 110.0

In der Praxis liegen Datensätze als tibbles oder data.frames vor, nachdem wir sie z.B. aus Excel nach R importiert haben.

Datenimport

Als nächstes importieren wir unseren Beispieldatensatz

body_dat <- read_excel("data/body_dat.xlsx") %>% 
  select(Age,Height,Weight,Gender)
names(body_dat)
[1] "Age"    "Height" "Weight" "Gender"
#save(body_dat,file="body_dat.RData")

Daten können auch über das Menü (File - Import Dataset) oder durch anklicken im Dateimanager (Files) importiert werden

Deskriptive Statistik

Überblick

Einen Überblick über einen Datensatz gewinnt man mittels

head(body_dat)
# A tibble: 6 × 4
    Age Height Weight Gender
  <dbl>  <dbl>  <dbl>  <dbl>
1    21   174    65.6      1
2    23   175.   71.8      1
3    28   194.   80.7      1
4    23   186.   72.6      1
5    22   187.   78.8      1
6    21   182.   74.8      1
str(body_dat)
tibble [507 × 4] (S3: tbl_df/tbl/data.frame)
 $ Age   : num [1:507] 21 23 28 23 22 21 26 27 23 21 ...
 $ Height: num [1:507] 174 175 194 186 187 ...
 $ Weight: num [1:507] 65.6 71.8 80.7 72.6 78.8 74.8 86.4 78.4 62 81.6 ...
 $ Gender: num [1:507] 1 1 1 1 1 1 1 1 1 1 ...

Numerische Variable

  • Numerische Variable (oder metrische Variable) sind Merkmale, deren Ausprägung durch Zahlen (reelle Zahlen oder ganze Zahlen) beschrieben werden müssen. (engl.: numerical variable)

  • z.B. Alter, Gewicht, Anzahl der Teilnehmer, Blutdruck, Preis eines Wertpapiers …

  • Skalenniveau: Intervallskala, Verhältnisskala

  • typische Auswertungen: Mittelwert, Median, Standardabweichung, Regressionsmodelle

Histogramm

Histogramme geben einen graphischen Überblick über die empirische Verteilung der Beobachtungswerte eines erhobenen (numerischen) Merkmals.

histogram(~Weight,data = body_dat,
          main = "Empirische Verteilung des Körpergewichts",
          xlab = "Körpergewicht (kg)",
          col = "steelblue"
    )

Eine Liste der erlaubten Farbbezeichungen kann mittels des Befehls colors() erhalten werden.

Histogramm

Histogramme geben einen graphischen Überblick über die empirische Verteilung der Beobachtungswerte eines erhobenen Merkmals.

histogram(~Age,data = body_dat,
          main = "Empirische Verteilung der Alters",
          xlab = "Alter (Jahre)",
          col = "steelblue")

Mit der Option width = … kann die Breite der Balken geändert werden, wenn nötig.

Lagemaße

Lagemaße sind statistische Kennzahlen für beobachtete Werte eines Merkmals, die die “Mitte” der Beobachtungen auf der benutzten Skala zeigen sollen.

Welcher einzelne Wert repräsentiert am Ehesten alle Beobachtungen?

Welche Werte würde ich mir bei weiteren Beobachtungen erwarten?

  • Mittelwert (arithmetisch, geometrisch): numerische Daten

  • Median: mindestens Ordinalskala

  • Modus: für nominalskalierte Daten

arithmetisches Mittel

Seien \(x_1,x_2\dots,x_n\) Beobachtungen einer numerischen Variablen (Zufallsstichprobe), dann ist das arithmetische Mittel \(\bar{x}\) der Beobachtungen gegeben durch\[\bar{x}= \frac{1}{n} \sum_{i=1}^n x_i=\frac{x_1+x_2+\dots+x_n}{n}.\]

c(mean(~body_dat$Weight),mean(~body_dat$Height))
[1]  69.14753 171.14379

Mittelwerte eignen sich in erster Linie zur Beschreibung symmetrischer Verteilungen.

Median

Der Median der beobachteten Werte \(x_1,x_2\dots,x_n\) ist ein Zahlenwert, so dass gleich viele Beobachtungen größer wie kleiner sind.

c(median(body_dat$Weight),median(~Age, data=body_dat))
[1] 68.2 27.0

Für schiefe Verteilungen sind Median und Mittelwert unterschiedlich, da der Mittelwert sehr empfindlich gegenüber extremen Werten ist. Für rechtsschiefe Verteilungen ist der Mittelwert größer als der Median, für linksschiefe Verteilungen ist er kleiner.

Für schiefe Verteilungen ist daher der Median gegenüber dem Mittelwert das bessere zentrale Lagemaß.

Minimum und Maximum

Das Minimum \(\min\; \{x_1,x_2\dots,x_n\}\) einer Zufallsstichprobe \(x_1,x_2\dots,x_n\) ist der kleinste beobachtete Wert und das Maximum \(\max\; \{x_1,x_2\dots,x_n\}\) ist der größte beobachtete Wert.

Diese beiden Werte geben einen groben Überblick über den Wertebereich.

c(min(body_dat$Weight),max(body_dat$Weight))
[1]  42.0 116.4
c(min(body_dat$Height),max(body_dat$Height))
[1] 147.2 198.1

Quantile

Das p-Quantil \(x_p\) einer Zufallsstichprobe \(x_1,x_2\dots,x_n\) ist eine reelle Zahl für die gilt:\[x_i\leq x_p \text{ für mindestens } p\cdot n \text{ Beobachtungen und }\\ x_i\geq x_p \text{ für mindestens} (1-p) \cdot n \text{ Beobachtungen.} \]

z.B.: Nur 5% der Einwohner haben ein Einkommen kleiner (größer) als x.

Der Median ist das \(0.5\)-Quantil. Die Quartile sind durch das \(0.25\)-, das \(0.5\)- und das \(0.75\)-Quantil gegeben. Zwischen \(x_{0.25}\) und \(x_{0.75}\) liegt die Hälfte der Beobachtungen.

quantile(~body_dat$Age)
  0%  25%  50%  75% 100% 
  18   23   27   36   67 

Das Perzentil ist das \(0.01\)-Quantil

quantile(~body_dat$Height,p=c(0.01,0.99))
 1% 99% 
152 192 

Quantile

x <- seq(0,1,0.01)
q <- quantile(~Age,p=x,data = body_dat)
xyplot(q~x,type="l",lw=3,
       main="Quantilsfunktion - Alter",ylab = "Alter",xlab="p")

Boxplots

Boxplots sind eine Alternative zum Histogramm. Sie fassen verschiedene robuste Lage- und Streuungsmaße in einer Grafik zusammen: Median, 0.25- und 0.75- Quantil (Box), 0.05- und 0.95- Quantil, sowie Ausreißer.

bwplot(~Age,data = body_dat,
       notch=T,
       main = "Boxplot des erhobenen Alters",
       xlab = "Alter (Jahre)", 
       fill="steelblue")

Streumaße

Streumaße sind Statistiken, die Auskunft über die Variabilität von beobachteten Werten geben.

Große Variabilität kann auch als Unsicherheit über zu erwartende zukünftige Beobachtungen und damit als Risiko interpretiert werden.

  • Spannweite: mindestens Ordinalskala

  • Interquartilsabstand: mindestens Ordinalskala

  • Varianz und Standardabweichung: mindestens Intervallskala

  • Mittlere absolute Abweichung

Spannweite und Interquartilsabstand

Die Spannweite \(R\) eines Datensatzes mit Beobachtungen \(x_1,\dots, x_n\) ist der der Abstand zwischen größtem und kleinstem Beobachtungswert,\[R=\max\{x_1,…,x_n\} - \min\{x_1,\dots,x_n\}.\]

max(body_dat$Age) - min(body_dat$Age)
[1] 49

Die Spannweite liefert nur eine Aussage über den Gesamtbereich der beobachteten Werte, aber nicht über die Konzentration in bestimmten Bereichen.

Der Interquartilsabstand \(\text{IQR}\) ist der Abstand zwischen dem \(0.75\)-Quantil und dem \(0.25\)-Quantil\[\text{IQR}=x_{0.75}-x_{0.25}.\]

In diesem Bereich liegen (um den Median) 50% der Beobachtungen.

IQR(~Height,data=body_dat)
[1] 14

Standardabweichung

Die Standarbweichung ist ein Maß für die Streuung um den Mittelwert.

Standardabweichung

Die (unkorrigierte) Standardabweichung von Beobachtungswerten \(x_1,\dots,x_n\):\[\bar{s}=\sqrt{\frac{1}{n} \sum_{i=1}^n (x_i-\bar{x})^2}.\]

Stammen die Beobachtungen aus einer Stichprobe, wird die Standardabweichung der Grundgesamtheit geschätzt durch die Stichprobenstandardabweichung \(s^*\)\[ s^*=\sqrt{\frac{1}{n-1} \sum_{i=1}^n (x_i-\bar{x})^2}. \]

Die Funktion sd berechnet die Stichprobenstandardabweichung mit dem Faktor \(\frac{1}{n-1}\).

c(sd(body_dat$Height), sd(~Weight,data=body_dat))
[1]  9.407205 13.345762

Die quadrierte Standardabweichung wird als Varianz bezeichnet.

MAD

Die Standardabweichung ist das Streumaß, das zum Mittelwert passt. Beide sind allerdings nur bei annähernd symmetrischen Verteilungen gut anwendbar.

Zum Median als robustes Lagemaß passt die mittlere (absolute) Abweichung vom Median (\(\text{MAD}\)) als robustes Streumaß. Diese ist durch den Median der Absolutwerte der jeweiligen Differenzen zwischen den Beobachtungen und dem Median der Beobachtungen gegeben.

c(mad(body_dat$Weight),mad(~Age,data = body_dat))
[1] 14.826  7.413

Manchmal wird unter der mittleren absolute Abweichung vom Median auch der Mittelwert der absoluten Abweichungen vom Median verstanden. Es gibt zudem auch die mittlere absolute Abweichung vom Mittelwert. All diese Maße - und viele weitere - sind Streumaße.

Zwei Variable - Scatterplot

Zusammenhänge zwischen zwei numerischen Variablen können als Scatterplot veranschaulicht werden.

xyplot(Weight ~ Height, data = body_dat,
       xlab="Körpergröße (cm)", ylab = "Gewicht (kg)",
       main = "Gewicht in Abhängigkeit von Körpergröße")

Zwei Variable - Scatterplot

Zusammenhänge zwischen zwei numerischen Variablen können als Scatterplot veranschaulicht werden.

xyplot(Height ~ Age, data = body_dat,
       xlab="Alter (Jahre)", ylab = "Körpergröße (cm)",
       main = "Körpergröße in Abhängigkeit vom Alter")

Korrelation

Die Stärke eines (linearen) Zusammenhangs zwischen zwei Variablen wird durch den Korrelationskoeffizienten gemessen.

Seien \(x_1,\dots,x_n\) und \(y_1,\dots,y_n\) beobachtete Werte von zwei Merkmalen. Dann ist der (Bravais-Pearsonsche) Korrelationskoeffizient \(R\) gegeben durch
\[R=\frac{\sum_{i=1}^n (x_i-\bar{x})(y_i-\bar{y})}{\sum_{i=1}^n(x_i-\bar{x})\sum_{i=1}^n(y_i-\bar{y})}.\]

Der Korrelationskoeffizient liegt zwischen \(-1\) und \(+1\). Der Wert \(0\) weist auf keinen Zusammenhang zwischen den Variablen hin, \(-1\) weist auf vollständigen negativen Zusammenhang (“je größer A desto kleiner B”) und \(+1\) auf vollständigen positiven Zusammenhang (“je größer A desto größer B”) hin.

cor(Weight~Height,data=body_dat)
[1] 0.7173011
cor(Age~Height,data=body_dat)
[1] 0.06788349

Korrelation

Es ist möglich, Korrelationen für alle numerischen Variablen eines Datensatzes auf einmal zu berechnen - die Korrelationsmatrix

cor(body_dat)
              Age     Height    Weight    Gender
Age    1.00000000 0.06788349 0.2072652 0.1509446
Height 0.06788349 1.00000000 0.7173011 0.6846621
Weight 0.20726524 0.71730108 1.0000000 0.6577258
Gender 0.15094462 0.68466211 0.6577258 1.0000000

Der Korrelationskoeffizient ist empfindlich gegenüber Ausreißern und nur für lineare Zusammenhänge geeignet. Ein robusteres Maß für den Zusammenhang ist der Spearmansche Korrelationskoeffizient.

cor(Weight~Height,data=body_dat, method="spearman")
[1] 0.7318565

Korrelationen sagen nichts über eine Richtung des Zusammenhangs oder über Kausalität aus (confounder)!

Wenn man genügend viele Paare von Variablen untersucht, wird man stets zufällig solche mit sehr hoher Korrelation finden. Man spricht hier von “spurious correlation”

https://tylervigen.com/spurious-correlations

Bleiben Sie stets kritisch auch gegenüber Ihren eigenen Ergebnissen!

Gleichheit und Fairness

Oft stellt sich die Frage, wie fair Einkommen, Besitz, Resourcen verteilt sind.

Eine Einkommensverteilung:

library(wooldridge)
data(wage1)
histogram(~wage,data=wage1,col = "steelblue")

Gleichheit und Fairness

Seien \(x_1, x_2, \dots, x_n\) Beobachtungen eines Merkmals. Die Lorenz-Kurve stellt dar, welche Anteile der gesamten Merkmalssumme \(\sum_{i=1}^n x_i\) auf welche Anteile der \(n\) Merkmalsträgern entfallen.

  • Auf der \(x\)-Achse: Anteile an der Gesamtheit der Merkmalsträger (zum Beispiel Bevölkerung oder Stichprobe)

  • Auf der \(y\)-Achse: Anteile an der gesamten Merkmalssumme (beispielsweise Einkommen, Besitz an Ressourcen) abgetragen.

Die Lorenz-Kurve ist damit im Prinzip eine Quantilsfunktion.

Bei völliger Gleichverteilung wäre die Lorenz-Kurve durch die 45°-Gerade gegeben.

Der normierte Gini-Koeffizient \(G^\star\) setzt den Flächeninhalt zwischen der Lorenz-Kurve und der 45°-Geraden zum Flächeninhalt unter der 45° Geraden ins Verhältnis.

Der Gini-Koeffizient liegt zwischen 0 und 1. Völlige Gleichheit führt zu \(G^\star=0\) völlige Ungleichheit zur \(G^\star=1\).

Gleichheit und Fairness

lorenz (wage1$wage,
        lcx = "Prozent der befragten Individuen", 
        lcy = "Prozent des Gesamteinkommens", 
        lctitle = "Lorenzkurve des Einkommens", 
        lcgn = TRUE)
gini(~wage,data=wage1,coefnorm = T)
[1] 0.3084825

Zusammenfassung

Wichtige Kennzahlen von numerischen Daten können auch zusammenfassend durch die Befehle summary und favstat erhalten werden.

summary(body_dat) 
      Age            Height          Weight           Gender      
 Min.   :18.00   Min.   :147.2   Min.   : 42.00   Min.   :0.0000  
 1st Qu.:23.00   1st Qu.:163.8   1st Qu.: 58.40   1st Qu.:0.0000  
 Median :27.00   Median :170.3   Median : 68.20   Median :0.0000  
 Mean   :30.18   Mean   :171.1   Mean   : 69.15   Mean   :0.4872  
 3rd Qu.:36.00   3rd Qu.:177.8   3rd Qu.: 78.85   3rd Qu.:1.0000  
 Max.   :67.00   Max.   :198.1   Max.   :116.40   Max.   :1.0000  
summary(body_dat$Age)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  18.00   23.00   27.00   30.18   36.00   67.00 
favstats(~body_dat$Age)
 min Q1 median Q3 max     mean       sd   n missing
  18 23     27 36  67 30.18146 9.608472 507       0

Berechnete Merkmale

Aus den beobachteten Daten lassen sich bei Bedarf relevante neue Merkmale berechnen.

body_dat <- body_dat %>% mutate(BMI=Weight/(Height/100)^2)
head(body_dat)[1:4,]
# A tibble: 4 × 5
    Age Height Weight Gender   BMI
  <dbl>  <dbl>  <dbl>  <dbl> <dbl>
1    21   174    65.6      1  21.7
2    23   175.   71.8      1  23.4
3    28   194.   80.7      1  21.6
4    23   186.   72.6      1  20.9

Grundrechenarten: +,-.*,/ Klammern nicht vergessen, Potenzen: ^ oder **
Weitere Funktionen:

Gruppenarbeit: BMI

Stellen Sie die Verteilung des BMI graphisch dar (Histogramm oder Boxplot).

Berechnen Sie wichtige deskriptive Statistiken.

Berechnen Sie insbesondere das 0.25 und das 0.75-Quantil.

Untersuchen Sie durch einen Scatterplot, sowie den zugehörigen Korrelationskoeffizienten, ob ein Zusammenhang zwischen Alter und BMI sinnvoll erscheint

Kategoriale Merkmale und Daten

  • Kategoriale Variable sind Merkmale, die eine begrenzte Anzahl von Ausprägungen (Kategorien) haben (engl.: categorical variable)

  • z.B. Geschlecht, Postleitzahl, Parteipräferenz, Anzahl der Mitbewohner im Haushalt (0,1,2,3,mehr), soziale Schicht, Hauptdiagnose, ….

  • Skalenniveau: Nominalskala, Ordinalskala

  • typische Auswertungen: Häufigkeiten, Rangfolge (nur ordinalskalierte Merkmale)

  • Kennzahlen: Modus, Median (nur ordinalskalierte Merkmale)

Umwandlung

Eine Variable in der ein Text oder auch Zahlen stehen kann mittels der Funktion “factor” in eine kategoriale Variable umgewandelt werden.

body_dat <- body_dat %>% 
  mutate(Gender_fac=factor(Gender,
                           labels = c("weiblich","männlich"))) %>% 
  select(Age,Height,Weight,Gender,Gender_fac)
head(body_dat)
# A tibble: 6 × 5
    Age Height Weight Gender Gender_fac
  <dbl>  <dbl>  <dbl>  <dbl> <fct>     
1    21   174    65.6      1 männlich  
2    23   175.   71.8      1 männlich  
3    28   194.   80.7      1 männlich  
4    23   186.   72.6      1 männlich  
5    22   187.   78.8      1 männlich  
6    21   182.   74.8      1 männlich  

Die Reihenfolge der Eintragungen im labels-Vektor richtet sich nach der aufsteigenden Sortierung der Werte in der umzuwandelnden Variablen. Die Vorgabe \(0: weiblich, 1: männlich\) führt zu obigem Code.

Kategoriale Merkmale in R

Wird ein Merkmal durch Zeichen oder Wörter (character values) beschrieben, kann man die Funktion factor ohne weitere Argumente anwenden. Die Ausprägungen werden dabei alphabetisch geordnet, in Grafiken ist dann diese Reihenfolge ausschlaggebend.

factor(c("gut","besser","am Besten"))
[1] gut       besser    am Besten
Levels: am Besten besser gut

Aus inhaltlichen Gründen kann eine andere Reihenfolge gewünscht sein.

factor(c("gut","gut","besser","besser","am Besten"),levels=c("gut","besser","am Besten"))
[1] gut       gut       besser    besser    am Besten
Levels: gut besser am Besten

Wenn es eine natürliche Ordnung der Kategorien gibt, liegt sogar eine Ordinalskala vor:

geschmack <- factor(c("gut","gut","besser","besser","am Besten"),levels=c("gut","besser","am Besten"),ordered=T)
geschmack
[1] gut       gut       besser    besser    am Besten
Levels: gut < besser < am Besten

Dies ermöglich es z.B. den Median zu berechnen:

median(geschmack)
[1] besser
Levels: gut < besser < am Besten

absolute Häufigkeit

  • Wieviele Fälle wurden in den betrachteten Kategorie beobachtet
  • Für jede Kategorie \(i\) kann durch Zählen die absolute Häufigkeit (eng.: absolute frequency) \(H_i\) ermittelt werden.

Wieviele Frauen bzw. Männer wurden im Rahmen unseres Beispieldatensatzes untersucht?

#body_dat %>% count(Gender_fac) 
tally(~ Gender_fac,data=body_dat,
      margins=T)
Gender_fac
weiblich männlich    Total 
     260      247      507 

relative Häufigkeit und Modus

Oft werden statt absoluter Zahlen relative Häufigkeiten (eng.: relative frequencies) \(h_i\), bzw. Prozentsätze angegeben. Wenn \(n\) die Gesamtanzahl der Beobachtungen bedeutet:

\[ h_i=100\cdot H_i/n \]

tally(~Gender_fac,data=body_dat, format="percent")
Gender_fac
weiblich männlich 
51.28205 48.71795 
tally(~Gender_fac,data=body_dat, format="proportion")
Gender_fac
 weiblich  männlich 
0.5128205 0.4871795 

Werden nur relative Häufigkeiten angegeben, sollte zur Ergänzung auch die Gesamtzahl \(n\) angegeben werden, da sonst die Information über die Stichprobengröße verloren geht.

Die wichtigste Kennzahl für kategoriale Daten ist der Modus, jene Kategorie die am Häufigsten beobachtet wird. Gibt es mehrere Kategorien mit größter Häufigkeit, ist der Modus durch die Menge dieser Kategorien gegeben.

Der Modus kann einfach aus einer Häufigkeitstabelle abgelesen werden.

graphische Darstellung - Balkendiagramm (barchart)

bargraph(~Gender_fac,data=body_dat,type="percent",
        main="Geschlechterverteilung (n=507)",
        xlab="Geschlecht",
        ylab="absolute Häufigkeit",
        names.arg = c("weiblich","männlich"),
        col = c("pink","steelblue"))

Mit der Option horizontal = T können die Balken horizontal angeordnet werden.

graphische Darstellung - Piechart

haeuf <- body_dat %>% count(Gender_fac)
pie(haeuf$n, 
    main="Geschlechterverteilung (n=507)",
    labels=c("weiblich","männlich"))

Tortengrafiken sollten nur verwendet werden, wenn Teile eines Ganzen dargestellt werden.

Künstliche Kategorien

Manchmal werden kategoriale Variable künstlich aus numerischen Variablen erzeugt, um die beobachteten Objekte in Klassen einzuteilen.

In R kann das mittels der Funktion “cut” bewerkstelligt werden.

body_dat <- body_dat %>% 
  mutate(Height_fac = cut(Height,c(0,160,180,200)))
head(body_dat)
# A tibble: 6 × 6
    Age Height Weight Gender Gender_fac Height_fac
  <dbl>  <dbl>  <dbl>  <dbl> <fct>      <fct>     
1    21   174    65.6      1 männlich   (160,180] 
2    23   175.   71.8      1 männlich   (160,180] 
3    28   194.   80.7      1 männlich   (180,200] 
4    23   186.   72.6      1 männlich   (180,200] 
5    22   187.   78.8      1 männlich   (180,200] 
6    21   182.   74.8      1 männlich   (180,200] 
tally(~Height_fac,data=body_dat)
Height_fac
  (0,160] (160,180] (180,200] 
       72       341        94 

Das zweite Argument von cut ist ein Vektor, der die Intervallgrenzen definiert. Hier muß die absolute Untegrenze und die absolute Obergrenze dabei sein.

Filtern von Daten

Manchmal werden nur Teile der Daten ausgewertet. In R macht das die Funktion filter.

body_M <- body_dat %>% filter(Gender_fac=="männlich")
str(body_M)
tibble [247 × 6] (S3: tbl_df/tbl/data.frame)
 $ Age       : num [1:247] 21 23 28 23 22 21 26 27 23 21 ...
 $ Height    : num [1:247] 174 175 194 186 187 ...
 $ Weight    : num [1:247] 65.6 71.8 80.7 72.6 78.8 74.8 86.4 78.4 62 81.6 ...
 $ Gender    : num [1:247] 1 1 1 1 1 1 1 1 1 1 ...
 $ Gender_fac: Factor w/ 2 levels "weiblich","männlich": 2 2 2 2 2 2 2 2 2 2 ...
 $ Height_fac: Factor w/ 3 levels "(0,160]","(160,180]",..: 2 2 3 3 3 3 3 3 2 3 ...
body_dat %>% filter(Gender_fac %in% c("männlich","divers")) %>% head()
# A tibble: 6 × 6
    Age Height Weight Gender Gender_fac Height_fac
  <dbl>  <dbl>  <dbl>  <dbl> <fct>      <fct>     
1    21   174    65.6      1 männlich   (160,180] 
2    23   175.   71.8      1 männlich   (160,180] 
3    28   194.   80.7      1 männlich   (180,200] 
4    23   186.   72.6      1 männlich   (180,200] 
5    22   187.   78.8      1 männlich   (180,200] 
6    21   182.   74.8      1 männlich   (180,200] 
body_dat %>% filter(Height >= 160 & Height <= 180) %>% head()
# A tibble: 6 × 6
    Age Height Weight Gender Gender_fac Height_fac
  <dbl>  <dbl>  <dbl>  <dbl> <fct>      <fct>     
1    21   174    65.6      1 männlich   (160,180] 
2    23   175.   71.8      1 männlich   (160,180] 
3    23   175    62        1 männlich   (160,180] 
4    23   180    76.6      1 männlich   (160,180] 
5    22   178.   83.6      1 männlich   (160,180] 
6    26   176    74.6      1 männlich   (160,180] 

Gruppenarbeit

  • Fügen Sie dem Datensatz body_dat eine kategoriale Variable Weight_fac hinzu, deren Kategorien sich aus der Variablen Weight ergeben und durch die Intervalle (0, 50], (50,90] und (90,120] gegeben sind.

  • Erzeugen Sie eine Tabelle mit absoluten Häufigkeiten für die Variable Weight_fac

  • Erweitern Sie diese mit den relativen Häufigkeiten.

  • Wo liegt der Modus?

  • Zeichnen Sie ein Tortendiagramm.

Kreuztabellen

Ausgangspunkt ist der Datensatz, der Einzelbeobachtungen enthält

Age Height Weight Gender Gender_fac Height_fac Weight_fac
21 174.0 65.6 1 männlich (160,180] (50,90]
23 175.3 71.8 1 männlich (160,180] (50,90]
28 193.5 80.7 1 männlich (180,200] (50,90]
23 186.5 72.6 1 männlich (180,200] (50,90]

Kreuztabelle mit absoluten Häufigkeiten

Geschlecht Körpergröße
(0,160] (160,180] (180,200] Total
weiblich 70 188 2 260
männlich 2 153 92 247
Total 72 341 94 507

Kreuztabellen

Kreuztabellen mit absoluter Häufigkeit (mit allen Randverteilungen):

tally(~ Gender_fac + Height_fac, data = body_dat, margins = TRUE) 
          Height_fac
Gender_fac (0,160] (160,180] (180,200] Total
  weiblich      70       188         2   260
  männlich       2       153        92   247
  Total         72       341        94   507

Randverteilung: Zahl der Beobachtungen Kategorien der beiden Variablen.

Kreuztabelle mit relativen Häufigkeiten:

tally(~ Gender_fac + Height_fac, data = body_dat, margins = TRUE, format="proportion")
          Height_fac
Gender_fac     (0,160]   (160,180]   (180,200]       Total
  weiblich 0.138067061 0.370808679 0.003944773 0.512820513
  männlich 0.003944773 0.301775148 0.181459566 0.487179487
  Total    0.142011834 0.672583826 0.185404339 1.000000000

Hier werden in den einzelnen Zellen der Tabelle Anteile an der Gesamtanzahl aller Beobachteten Individuen angezeigt.

Beide betrachteten Variablen sind hier als unabhängige Variable (rechts vom Zeichen ~) modelliert - damit werden Randverteilungen für beide Variablen angezeigt.

Kreuztabellen

Verhält sich eine abhängige Variable für unterschiedliche Kategorien einer unabhängigen Variablen anders?

Beispiel: Sind die Größenklassen (abhängige Variable) für Männer und Frauen (unabhängige Variable) unterschiedlich verteilt?

tally(Height_fac ~ Gender_fac ,
      data = body_dat, margins = TRUE, format="proportion") 
           Gender_fac
Height_fac     weiblich    männlich
  (0,160]   0.269230769 0.008097166
  (160,180] 0.723076923 0.619433198
  (180,200] 0.007692308 0.372469636
  Total     1.000000000 1.000000000

Die unabhängigen Variablen sind rechts vom Zeichen ~, die abhängige Variable links.

Randverteilungen werden nur für die unabhängigen Variablen berechnet.

Druckreife Tabellen

Mit der Funktion nice können Tabellen in druckreife Form gebracht werden.

Dies ermöglicht den Export nach Word, entweder über die Zwischenablage, über die Exportoptionen, oder über den Compile Report button.

library(gtExtras)
tally(~ Gender_fac + Height_fac, data = body_dat,
      margins = TRUE, format="proportion") %>% 
  nice(rowVar="Geschlecht",
       colVar="Körpergröße (cm) - Gruppen",
       title="Geschlecht und Körpergröße",
       sn="Rohdaten: www.beispiel.com")
Geschlecht und Körpergröße
Geschlecht Körpergröße (cm) - Gruppen
(0,160] (160,180] (180,200] Total
weiblich 0.138067061 0.3708087 0.003944773 0.5128205
männlich 0.003944773 0.3017751 0.181459566 0.4871795
Total 0.142011834 0.6725838 0.185404339 1.0000000
Rohdaten: www.beispiel.com

Tabellen mit weiteren Kennzahlen

Alle kennengelernten Statistiken für numerische Variable können (statt der Häufigkeit) gegliedert nach kategorialen Variablen dargestellt werden.

mean(Height~Gender_fac,data=body_dat)
weiblich männlich 
164.8723 177.7453 
median(Weight~Gender_fac,data=body_dat)
weiblich männlich 
    59.0     77.3 
favstats(Age~Gender_fac,data=body_dat)
  Gender_fac min Q1 median Q3 max     mean       sd   n missing
1   weiblich  18 22     26 34  67 28.76923  8.85319 260       0
2   männlich  18 24     29 37  65 31.66802 10.15145 247       0
mean(Age~Gender_fac + Weight_fac, data=body_dat) 
  weiblich.(0,50]   männlich.(0,50]  weiblich.(50,90]  männlich.(50,90] 
         27.38710               NaN          28.87225          31.53704 
weiblich.(90,120] männlich.(90,120] 
         38.50000          32.58065 

Tabellen mit weiteren Kennzahlen

Die Mittelwerttabelle mit zwei Gruppierungsvariablen sieht nicht besonders schön aus, und kann mithilfe der Funktion niceT in druckreife Form gebracht werden.

mean(Age~Gender_fac + Weight_fac, data=body_dat, .format="table") %>%
  niceT(rowVar="Geschlecht", colVar="Gewichtsklasse",
        title="Mittleres Alter nach Geschlecht und Gewicht",
        sn="Rohdaten: www.woher.com") 
Mittleres Alter nach Geschlecht und Gewicht
Geschlecht Gewichtsklasse
(0,50] (50,90] (90,120]
weiblich 27.3871 28.87225 38.50000
männlich NaN 31.53704 32.58065
Rohdaten: www.woher.com

Zwei Merkmale in einem Barchart

bargraph( ~ Gender_fac | Height_fac ,data=body_dat,type="percent",
        main="Geschlechterverteilung nach Körpergröße gruppiert (n=507)",
        xlab="Geschlecht",
        ylab="absolute Häufigkeit",
        col = c("steelblue","pink"))

Zwei Merkmale in einem Barchart

bargraph( ~Gender_fac , groups = Height_fac, data=body_dat,type="percent", 
        main="Verteilung der Körpergröße, gruppiert nach Geschlecht (n=507)",
        xlab="Geschlecht",
        ylab="absolute Häufigkeit")

Zwei Merkmale in einem Barchart

bargraph( ~Height_fac , groups = Gender_fac, data=body_dat,type="percent", 
        main="Geschlechterverteilung (n=507)",
        xlab="absolute Häufigkeit",
        ylab="Geschlecht")

Gruppierung in Histogrammen

histogram(~Weight,data = body_dat,
          main = "Körpergröße nach Geschlecht",
          xlab = "Körpergröße",
          groups = Gender_fac,
          auto.key = T)

Gruppierung in Histogrammen

histogram(~Height|Gender_fac, data = body_dat,
                      layout = c(1,2),
                      main = "Körpergröße nach Geschlecht",
                      xlab = "Körpergröße",
                      col = "steelblue")

Die layout Option muss an die Anzahl der Merkmalsausprägungen der kategorialen Variablen angepasst werden: Für \(n\) Ausprägungen layout = c(1,n).

Gruppierung in Boxplots

bwplot(Gender_fac ~ Height ,data = body_dat,notch=T,
       main = "Verteilung der Körpergröße nach Geschlecht",
       xlab = "Körpergröße (cm)",
       ylab = "Geschlecht",
       fill="steelblue")

Fehlende Werte

In Datensätzen gibt es oft fehlende Werte (missing values). Für eine Beobachtung konnte kein Wert für ein Merkmal erhoben werden - z.B. wurde in einer Befragung keine Auskunft über das Einkommen gegeben, oder ein Messinstrument hat versagt.

In Excel wäre in diesem Fall kein Eintrag in einer Zelle, in R steht in einer Spalte oder einem Vektor dann NaN oder NA.

missDat <- c(2,5,3,6, NaN, 3, NA)

Viele der besprochenen Funktionen liefern dann (ohne Vorkehrungen) selbst fehlende Werte zurück. Dies kann (meistens) durch die Option na.rm = T behoben werden.

mean(missDat)
[1] NA
mean(missDat, na.rm = T)
[1] 3.8

Es ist auch möglich, sämtliche Beobachtungen, die für irgendein Merkmal fehlende Werte besitzen vorab zu entfernen.

mDat <- na.omit(missDat)
mean(mDat)
[1] 3.8

Gruppenarbeit

Zeichnen Sie einen Boxplot für die Verteilung des Gewichts nach Geschlecht gruppiert.

Geben Sie eine Kreuztabelle (relative Häufigkeiten) für Gewichtsklassen und Größenklassen aus (Gesamt = 1.0).

Diskutieren Sie anhand einer passenden Tabelle, ob es Unterschiede in der Gewichtsverteilung zwischen Männern und Frauen geben könnte.

Generieren Sie eine Tabelle, in der Standardabweichungen des Gewichts für die nach Geschlecht und Körpergröße (Faktorvariable!) gruppierten Beobachtungen gezeigt werden.

Schließende Statistik

Zufallsvariable

In der schließenden Statistik werden die beobachteten Merkmalswerte als Realisierungen von Zufallsvariablen betrachtet.

Zufall kann durch zufällige Auswahl (auslosen), Beobachtungsfehler, Verhaltensabweichungen zwischen Personen und viele andere Mechanismen ins Spiel kommen (“Zufallsexperiment”).

Zufallsvariable ordnen jedem möglichen Ausgang eines Zufallsexperiments eine Zahl zu.

  • Diskrete Verteilung (endlich): z.B. Würfelwurf, Münzwurf, Zustimmungsgrade …

  • Diskrete Verteilung (unendlich): beobachtete Anzahlen, bobachtetes Alter in Jahren

  • Stetige Verteilung: genaues Alter, Körpergröße, Blutzuckerspiegel, Temperatur

Jede einzelne Beobachtung eines Merkmals wird in der Statistik als Realisierung einer Zufallsvariablen aufgefasst.

Zufallvariable und Verteilung

Ein Histogramm beschreibt die empirische Verteilung der untersuchten Variablen.

Theoretische Verteilungen werden durch Wahrscheinlichkeitsfunktionen, bzw. Dichtefunktionen und Verteilungsfunktionen beschrieben. Diese ermöglichen die Berechnung von Wahrscheinlichkeiten.

Die Funktionen werden mithilfe von Parametern formuliert.

Diskrete Verteilungen

Diskrete Zufallsvariable können “nur” abzählbar viele Werte \(x\) annehmen.

  • Die Wahrscheinlichkeitsfunktion \(f(x)\) weist jedem Wert \(x\) eine (nichtnegative) Wahrscheinlichkeit zu. Die Wahrscheinlichkeit dass ein Ereignis aus einer Menge von mehreren Einzelereignissen auftritt, ergibt sich durch Summieren. Die Wahrscheinlichkeit dass irgendeines der möglichen Ereignisse eintritt ist 1.

  • Die Verteilungsfunktion \(F(x)\) weist jedem Wert \(x\) die Wahrscheinlichkeit zu, dass eine Realisierung \(\leq x\) beobachtet wird.

Bernoulliverteilung (Münzwurf, Experiment): Die Werte sind durch \(\{0,1\}\) gegeben. Die Wahrscheinlichkeitsfunktion ordnet dem Ereignis \(1\) die Wahrscheinlichkeit \(p\) (Parameter), dem Ereignis \(0\) die Wahrscheinlichkeit \(1-p\) zu. Fairer Münzwurf: \(p=1/2\).

Binomialverteilung: Ein Bernoulliexperiment mit Parameter \(p\) wird \(n\) mal wiederholt (Parameter). Es wird \(x\) mal die \(1\) und \(n-x\) mal die \(0\) beobachtet. \[f(x)=\binom{n}{k}p^x(1-p)^{n-x} \]

Binomialverteilung

n <- 30
p <- 0.3
plot(0:n, dbinom(0:n, size=n, prob=p),type='h', 
     lwd=3,col="steelblue",
     ylab="Wahrscheinlichkeit",
     xlab=paste("Anzahl Erfolge in",n,"Versuchen"))

Stetige Verteilung

Stetige Zufallsvariable können überabzählbar viele Werte \(x\) annehmen. Typischerweise sind derartige Wertebereiche Intervalle \([a,b]\), die Menge der positiven reellen Zahlen \(\mathbb{R}_0^+\) oder die Menge der reellen Zahlen \(\mathbb{R}\).

  • Die Dichtefunktion \(f(x)\) weist jedem möglichen Wert \(x\) eine Dichte zu. Einzelne Werte haben Wahrscheinlichkeit 0. Die Wahrscheinlichkeit eines Teilbereichs wird durch den entsprechenden Flächeninhalt unter der Dichtefunktion berechnet: \(P(x\in B)=\int_B f(x)dx\). Die Wahrscheinlichkeit dass irgendeines der möglichen Ereignisse eintritt ist 1.

  • Die Verteilungsfunktion \(F(x)\) weist jedem Wert \(x\) die Wahrscheinlichkeit zu, dass eine Realisierung \(\leq x\) beobachtet wird: \(F(x)=P(X\leq x)=\int_{-\infty}^x f(x)dx\)

Die Normalverteilung ist der Prototyp einer symmetrischen Verteilung ohne schwere Enden. Sie wird durch ihren Erwartungswert \(\mu\) (entspricht dem Mittelwert von Daten) und ihre Standardabweichung \(\sigma\) beschrieben. Die Normalverteilung mit \(\mu=0\) und \(\sigma=1\) wird Normalverteilung bezeichnet.

Normalverteilung

plotFun( dnorm(x,mu,sig)~x, xlim=range(-4,4), mu=0,sig=1,
         lwd=3, col="steelblue", main="Normalverteilung",
         ylab="Dichte", ylim=c(0,0.45))

Parameter und Statistiken

Die Wahrscheinlichkeitsfunktionen, bzw. Dichtefunktionen von bekannten Verteilungen enthalten Parameter, die die genaue Form der jeweiligen Funktionen bestimmen.

Es ist eine wichtige Aufgabe, Parameter von Verteilungen zu schätzen: Wenn meine beobachteten Daten unabhängige Realisierungen einer xy-Verteilung sind, was wäre dann der passende Parameter?

Normalverteilung: Der Mittelwert ist ein guter Schätzer für den Erwartungswert. Die Stichprobenstandardabweichung ist ein guter Schätzer für die Standardabweichung.

Binomialverteilung: Die beobachtete relative Häufigkeit von Erfolgen ist ein guter Schätzer für den Parameter \(p\). Die Zahl der Versuche \(n\) ist durch die Anzahl der Beobachtungen gegeben.

Es existieren auch Quantile etc. für Verteilungen. Diese haben dieselbe Interpretation wie ihre empirisch-deskriptiven Gegenstücke.

Eine wichtieg Methode zum Schätzern von Parametern für beliebige Verteilungen ist das Maximum-Likelihood Verfahren.

Stichprobenverteilung und Resampling

Statistiken wie Mittelwert oder Standardabweichung werden mithilfe der Daten berechnet, sind also Zufallsvariable sein. Die Verteilung einer Statistik wird Stich-probenverteilung genannt und kann mittels resampling angenähert werden.

mDist <- do(1000) * mean(~Age, data=resample(body_dat))
histogram(~mDist,xlab = "Mittelwert des Alters (Jahre)")

(Bootstrap-) Konfidenzintervalle

Konfidenzintervalle schätzen den Bereich, der mit einer gewissen Wahrscheinlichkeit (der Überdeckungswahrscheinlichkeit) den wahren Parameter einer Verteilung einschließt. Symmetrische Konfidenzintervalle liegen zwischen \(\alpha/2\)- und \((1-\alpha/2)\)-Quantil.

quantile(~ mean, data=mDist,p=c(0.025,0.975))
    2.5%    97.5% 
29.31351 31.08501 

Das geht in R auch ohne beide Quantile spezifizieren zu müssen.

confint(mDist$mean, level = 0.95, method = "quantile")
             2.5%    97.5%
quantile 29.31351 31.08501

Für große Stichprobenumfänge gibt es auch analytische Berechnungsmethoden für Konfidenzintervalle.

confint(mDist$mean, level = 0.95, method = "stderr")
             V1       V2
stderr 29.28519 31.02569

Der Bereich zwischen den entsprechenden Quantilen der ursprünglichen Beobachtungen hat eine andere Interpretation: Hier erwartet man mit entsprechender Wahrscheinlichkeit die nächste Beobachtung.

Konfidenzintervalle

Das Konzept der Konfidenzintervalle ist auch auf andere Statistiken übertragbar.

sDist <- do(1000) * sd(~Age, data=resample(body_dat))
confint(~sd, data=sDist, level = 0.95, method = "quantile")
             2.5%    97.5%
quantile 8.897217 10.34276
histogram(~sDist$sd,
          xlab = "Standardabweichung des Alters (Jahre)", col="steelblue")

Konfidenzintervalle

Das Konzept der Konfidenzintervalle ist auch auf andere Statistiken übertragbar.

cDist <- do(1000) * cor(Weight~Height, data=resample(body_dat))
histogram(~cor,data=cDist,
          xlab = "Korrelation zw. Körpergröße und Gewicht", col="steelblue")
confint(~cor, data=cDist, level = 0.99, method = "quantile")
              0.5%     99.5%
quantile 0.6558933 0.7712151

Hypothesentests

  • Hypothese: Aussage die man “beweisen” will. “Es gibt einen Zusammenhang zwischen Körpergröße und Gewicht”, “Es gibt Gewichtsunterschiede zwischen den Geschlechtern” …

  • Statistik: Wird aus den beobachteten Daten errechnet und muss zur untersuchten Hypothese passen. Z.B. Korrelation, Mittelwert

  • Die Alternativhypothese reformuliert die Hypothese als Aussage über die Statistik. Z.B. “Die Korrelation ist nicht Null”, “Die Differenz der Mittelwerte ist nicht Null”.

  • Die Nullhypothese ist die Gegenaussage zur Alternativhypothese. Z.B. “Die Korrelation ist Null”, “Die Mittelwertsdifferenz ist Null”

  • Gilt die Nullhypothese, so sollte die Statistik mit großer Wahrscheinlichkeit in einem bestimmten Bereich liegen.

  • Der p-Wert gibt die Wahrscheinlichkeit an, dass die Statistik außerhalb dieses Bereichs liegt, obwohl die Nullhypothese gilt.

  • Ist der p-Wert kleiner als das anfänglich gewählte Signifikanzniveau \(\alpha\), kann die Nullhypothese zu Recht abgelehnt werden.

Hypothesen über den Mittelwert

Der einfache Mittelwerttest testet Hypothesen über Erwartungswerte.

  • Nullhypothese \(\text{H}_0\): Der Erwartungswert \(\mu\) der zugrundeliegenden Verteilung ist gleich/größer gleich/ kleiner gleich einem bestimmten Wert.

  • Alternativhypothese \(\text{H}_1\): Der Erwartungswert \(\mu\) der zugrundeliegenden Verteilung ist ungleich/kleiner gleich/ größer gleich dem Wert.

\(\text{H}_0: \mu=0\text{ versus H}_1: \mu \neq 0\)

t.test(~Weight,data=body_dat)

    One Sample t-test

data:  Weight
t = 116.66, df = 506, p-value < 2.2e-16
alternative hypothesis: true mean is not equal to 0
95 percent confidence interval:
 67.98307 70.31200
sample estimates:
mean of x 
 69.14753 

Damit der Test sinnvoll ist, sollte entweder das Histogramm der Verteilung der Normalverteilungsannahme nicht völlig widersprechen, oder viele Beobachtungen vorhanden sein. Andernfalls sind nichtparametrische Tests zu verwenden.

Hypothesen über den Mittelwert

\(\text{H}_0: \mu=68\text{ versus H}_1: \mu \neq 68\)

t.test(~Weight,data=body_dat, mu=68)

    One Sample t-test

data:  Weight
t = 1.9361, df = 506, p-value = 0.05341
alternative hypothesis: true mean is not equal to 68
95 percent confidence interval:
 67.98307 70.31200
sample estimates:
mean of x 
 69.14753 

\(\text{H}_0: \mu\leq 68\text{ versus H}_1: \mu > 68\)

 t.test(~Weight,data=body_dat, mu=68, alternative="greater")

    One Sample t-test

data:  Weight
t = 1.9361, df = 506, p-value = 0.02671
alternative hypothesis: true mean is greater than 68
95 percent confidence interval:
 68.17083      Inf
sample estimates:
mean of x 
 69.14753 

Hypothesen über den Mittelwert

\(\text{H}_0: \mu\geq 68\text{ versus H}_1: \mu < 68\)

t.test(~Weight,data=body_dat, mu=68, alternative="less")

    One Sample t-test

data:  Weight
t = 1.9361, df = 506, p-value = 0.9733
alternative hypothesis: true mean is less than 68
95 percent confidence interval:
     -Inf 70.12424
sample estimates:
mean of x 
 69.14753 

Generell gilt:

Sowohl die Hypothese, als auch das Signifikanzniveau von Tests müssen im Vorhinein gewählt werden. Es ist verboten, solange herum zu ändern, bis man ein signifikantes Ergebnis erhält.

Mittelwertsvergleich

unabhängige Stichproben: In zwei Gruppen wird unabhängig voneinander eine numerische Variable erhoben.
(Gewicht von Männern und Frauen, Anzahl Krankenhauseinweisungen südlich und nördlich, Blutdruck mit und ohne Medikament)

Annahme: Werte stammen aus zwei Grundgesamtheiten mit Erwartungswerten \(\mu_1\) und \(\mu_2\).

\(\text{H}_0: \mu_1=\mu_2 \text{ versus H}_1:\mu_1\neq\mu_2\)

t.test(Height ~ Gender_fac,data=body_dat)

    Welch Two Sample t-test

data:  Height by Gender_fac
t = -21.059, df = 494.73, p-value < 2.2e-16
alternative hypothesis: true difference in means between group weiblich and group männlich is not equal to 0
95 percent confidence interval:
 -14.07406 -11.67201
sample estimates:
mean in group weiblich mean in group männlich 
              164.8723               177.7453 

Mittelwertsvergleich

unabhängige Stichproben: In zwei Gruppen wird unabhängig voneinander eine numerische Variable erhoben.
(Gewicht von Männern und Frauen, Anzahl Krankenhauseinweisungen südlich und nördlich, Blutdruck mit und ohne Medikament)

Annahme: Werte stammen aus zwei Grundgesamtheiten mit Erwartungswerten \(\mu_1\) und \(\mu_2\).

\(\text{H}_0: \mu_1\geq\mu_2 \text{ versus H}_1:\mu_1<\mu_2\)

t.test(Height ~ Gender_fac,data=body_dat, alternative="less")

    Welch Two Sample t-test

data:  Height by Gender_fac
t = -21.059, df = 494.73, p-value < 2.2e-16
alternative hypothesis: true difference in means between group weiblich and group männlich is less than 0
95 percent confidence interval:
      -Inf -11.86568
sample estimates:
mean in group weiblich mean in group männlich 
              164.8723               177.7453 

Mittelwertsvergleich

Verbundene (abhängige) Stichproben: Hier wird ein Merkmal an denselben Objekten/Individuen zweimal beobachtet und ein Vergleich der Mittelwerte vorgenommen.
(Gesundheitszustand vor und nach der Gabe von Medikamenten, Maßnahme etc.)

Beispieldaten - Gewicht von Mäusen vor und nach Behandlung
\(\text{H}_0: \mu_{\text{vor}}\geq \mu_{\text{nach}}\text{ versus H}_1: \mu_{\text{vor}}< \mu_{\text{nach}}\)

datMice <- read_excel("data/mice.xlsx")
datMice <- datMice %>% mutate(Group=factor(Group,levels=c("before","after")))
t.test(Weight~Group, data=datMice, alternative ="less", paired=T)

    Paired t-test

data:  Weight by Group
t = -20.883, df = 9, p-value = 3.1e-09
alternative hypothesis: true mean difference is less than 0
95 percent confidence interval:
      -Inf -177.4177
sample estimates:
mean difference 
        -194.49 

Tests für Häufigkeiten

Mit dem Binomialverteilungstest können Häufigkeiten zwischen zwei Gruppen (“Erfolg”, “Misserfolg”) verglichen werden.

Dabei wird angenommen dass die zugrundeliegende Verteilung eine Binomialverteilung mit \(n\) Versuchen und Erfolgswahrscheinlichkeit \(p\) ist.

Hypothesen weren dann über \(p\) formuliert.

Die Wahrscheinlichkeit dass eine zufällig ausgewählte Person weiblich ist (“Erfolg”) unterscheidet sich von \(p=0.5\)
\(\text{H}_0: p\leq 0.5 \text{ versus H}_1: p>0.5\)

binom.test(~(Gender_fac=="weiblich"),data=body_dat, p=0.5, alternative = "two.sided")



data:  body_dat$(Gender_fac == "weiblich")  [with success = TRUE]
number of successes = 260, number of trials = 507, p-value = 0.5941
alternative hypothesis: true probability of success is not equal to 0.5
95 percent confidence interval:
 0.4683602 0.5571305
sample estimates:
probability of success 
             0.5128205 

Tests für Häufigkeiten

Aus der amtlichen Statistik wissen wir z.B. dass konsistent mehr Männer geboren werden als Frauen. Unser Testergebnis weist darauf hin, dass wir keine Zufallsstichprobe aus der Grundgesamtheit aller Männer und Frauen betrachten.

Tests für Häufigkeiten

Andere Alternativhypothesen können - wie bei Mittelwerttests - durch die Option alternative gewählt werden. Weglassen der Option gibt die zweiseitige Alternative (\(\neq\)).

Oft stehen gerade bei Häufigkeiten bereits ausgezählte Ergebnisse (Anzahl der Erfolge \(x\), Anzahl der Versuche \(n\)) zur Verfügung. Die Funktion binom.test kann dann in abgewandelter Form verwendet werden.

599 mal Erfolg von 1000 Versuchen wurden beobachtet.
\(\text{H}_0: p\leq 0.5 \text{ versus H}_1: p>0.5\)

binom.test(599,n=1000, p=0.5, alternative = "greater")



data:  599 out of 1000
number of successes = 599, number of trials = 1000, p-value = 2.058e-10
alternative hypothesis: true probability of success is greater than 0.5
95 percent confidence interval:
 0.5728151 1.0000000
sample estimates:
probability of success 
                 0.599 

Gruppenarbeit

Berechnen Sie ein 0.99-Konfidenzintervall für den Mittelwert der Körpergröße.

Vergleichen Sie die Mittelwerte des Körpergewichts für Männer und Frauen: Haben Männer ein signifikant größeres mittleres Gewicht? Formulieren Sie Null- und Alternativhypothese und führen Sie einen entsprechenden Test zum Niveau 0.05 durch.

Wie würden Sie testen, ob das mittlere Mäusegewicht vor und nach der Behandlung gleich geblieben ist. Formulieren Sie Null- und Alternativhypothese und führen Sie einen entsprechenden Test zum Niveau 0.01 durch.

Wie testen Sie die Alternativhypothese, dass es mehr Frauen als Männer gibt anhand der Stichprobe zum Niveau 0.05?

Zum Vergleich von ANteilen zwischen Gruppen gibt es die Funktion pairwise_binom_test.

Entscheidungsbaum

Planung und Interpretation

Interpretation

Die Nullhypothese kann zum Signifikanzniveau \(\alpha\) verworfen werden, wenn der berechnete p-Wert kleiner als das vorab festgelegte (!) Signifikanzniveau (oft 0.05 ist).

Der Fehler erster Art besteht darin, die Nullhypothese fälschlich abzulehnen. Der p-Wert schätzt die Wahrscheinlichkeit dafür anhand der Daten, das Signifikanzniveau ist der im Rahmen der Untersuchung maximale Fehler erster Art, der gerade noch akzeptabel ist.

Der Fehler zweiter Art besteht darin, die Nullhypothese nicht zu verwerfen, obwohl die Alternative gilt.

Ist der berechnete p-Wert größer als das Signifikanzniveau, kann man nur davon sprechen, dass die Nullhypothese durch die Anwendung des Tests auf die Daten nicht widerlegt wird. Es handelt sich um keine Bestätigung der Nullhypothese!

Grund: Der Fehler zweiter Art kann hoch sein

Die Wahrscheinlichkeiten für die beiden Fehler sind gegenläufig.

Den Fehler zweiter Art kann man in erster Linie durch eine große Stichprobe senken.

Hypothesentests - Fehler und Güte

Fehler und Güte von Hypothesentests (Quelle: Wikipedia)

Stichprobe und Grundgesamtheit

Oft soll aus einer relativ kleinen Zahl von Beobachtungen/Individuen (Stichprobe), Rückschlüsse auf eine größere Gesamtheit (Grundgesamtheit) gezogen werden.

Die schließende Statistik liefert die technischen Voraussetzungen. Die Auswahl der beobachteten Individuen kann aber Sinnhaftigkeit und Verlässlichkeit beeinflussen.

  • Prinzipiell muss sichergestellt sein, dass die relevante Gruppe untersucht wird.

  • Die Auswahl sollte zu keinen Verzerrungen der untersuchten Merkmals führen.

Goldstandard ist die Zufallsstichprobe: zufälliges Ziehen aus einem Register der Grundgesamtheit. Grundgesamtheit, ihr Umfang, sowie die Größe der Stichprobe sind im Vorhinein festzulegen. Für Befragungen: Der Rücklauf ist im Nachhinein zu ermitteln.

Bei geschichteten Zufallsstichproben wird für relevante Merkmale (kleine Gruppen) im Vorhinein eine Anzahl von Teilnehmern festgelegt und dann zufällig anhand dieser Richtlinien gezogen.

In der betrieblichen Statistik zielt die Untersuchung meist von Vornherein auf die Grundgesamtheit im Betrieb (z.B. Sekundärdaten, Mitarbeiterbefragung)

Experimente

Gerade zum Vergleich zwischen Gruppen werden in Gesundheitsfächern sehr oft Experimente herangezogen.

Laborexperimente erlauben die Kontrolle von Störvariablen (interne Validität), wahrend Feldexperimente dies nicht so gut ermöglichen, dafür aber in natürlicher Umgebung stattfinden und leichter Verallgemeinerbar sind (externe Validität).

Experiment im strengen Sinn: Die experimentellen Behandlungsbedingungen werden den Gruppen (Kategorien) zugewiesen. Die TeilnehmerInnen werden zufällig den Gruppen zugewiesen.

Doppelblindstudie: Sowohl die TeilnehmerInnen, als auch Personen, die sie betreuen wissen nicht, welche Behandlungsbedingung zu welcher Gruppe zugeordnet wurde.

Wenn die Gruppen bereits organisatorisch vorgegeben sind, eine randomisierte Zuordnung also nicht möglich ist, spricht man von einem Quasi-Experiment. Hier können Störgrößen schwer kontrolliert werden.

Explorative Statistik

Klassische Vorgehensweise:

  1. Formuliere eine Hypothese

  2. Sammle Daten - möglichst randomisiert

  3. Teste die Hypothese an den Daten

Explorative Untersuchung:

  1. Sammle Daten oder benutze zur Verfügung stehende Daten

  2. Suche nach Zusammenhängen und Hypothesen

  3. Teste die Hypothesen

Wenn ich lange genug nach Hypothesen suche, finde ich auch welche, die ich signifikant bestätigen kann (p-hacking). Es ist wichtig die Daten zu teilen (gesondert zu erheben):

  • Daten für explorative/deskriptive Phase (in sample)

  • Daten für Hypothesentests (out of sample)

Trainings- und Testdatensatz

Aufteilen eines (großen!) Datensatzes in zwei Teile

  • Trainingsdatensatz für die explorative Analyse und Modellierung

  • Testdatensatz zum Testen von Hypothesen und Modellen

library(tidymodels)
body_split <-  initial_split(body_dat, prop = 0.6)
body_train <- training(body_split)
body_test <- testing(body_split)

Zum splitting von zeitlichen Daten kann die Funktion initial_time_split verwendet werden.

Planung

Vor der Durchführung von Tests (eventuell nach einer explorativen Phase) zu überlegen

  • Welche Hypothesen (beziehen sich auf Parameter) muss ich testen, um meine inhaltlichen Forschungsfragen testen zu können?

  • Was ist die Grundgesamtheit

  • Wie komme ich zur Stichprobe

  • Wie groß soll meine Stichprobe sein?

  • Auf welchem Signifikanzniveau teste ich?

Diese Fragen sind fortlaufend kritisch zu überdenken. Eventuell muss die Grundgesamtheit eingeschränkt werden etc.

Zusammenhänge

Einfachregression

Lineare Einfachregression modelliert den Zusammenhang zwischen zwei numerischen Variablen \(Y\) und \(X\) mithilfe einer linearen Funktion.

\[ Y_i=\alpha + \beta X_i+\varepsilon_i \]

Hier bezeichnet \(X_i\) die i-te Beobachtung der unabhängigen Variable. \(Y_i\) bezeichnet die i-te Beobachtung der abhängigen Variablen \(Y\). Die Residuen \(\varepsilon_i\) sind zufällige i.i.d. \(N(0,\sigma^2)\) Abweichungen von der Regressionsgerade. \(\alpha\) und \(\beta\) sind die Regressionsparameter. \(\alpha\) wird auch als Intercept bezeichnet.

Einfachregression

Welche Regressionsgerade passt am Besten in die Punktwolke?

mod1 <- lm(Weight ~ Height, data = body_dat) 
summary(mod1)

Call:
lm(formula = Weight ~ Height, data = body_dat)

Residuals:
    Min      1Q  Median      3Q     Max 
-18.743  -6.402  -1.231   5.059  41.103 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept) -105.01125    7.53941  -13.93   <2e-16 ***
Height         1.01762    0.04399   23.14   <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 9.308 on 505 degrees of freedom
Multiple R-squared:  0.5145,    Adjusted R-squared:  0.5136 
F-statistic: 535.2 on 1 and 505 DF,  p-value: < 2.2e-16

Die Regressionsgleichung unseres Modells:\[ Weight_i= -105.011 + 1.01762 \cdot Height_i + \varepsilon_i \]

Einfachregression

Konfidenzintervalle für die Regressionsparameter

confint(mod1,level=0.95)
                   2.5 %     97.5 %
(Intercept) -119.8237251 -90.198783
Height         0.9311971   1.104036

Interpretation der geschätzten Regressionsparameter:

  • \(\alpha\): Wenn die unabhägige Variable Null ist, was ist der Wert für die abhängige Variable?

  • \(\beta\): Wenn sich die abhängige Variable um eine Einheit ändert, um wieviel ändert sich die unabhängige Variable im Schnitt.
    Im Beispiel: Das Gewicht ändert sich durchschnittlich um 1.02 kg, wenn sich die Körpergröße um 1 cm ändert.

Einfachregression

Weitere Informationen aus dem Modell: Signifikanz der Ergebnisse

  • \(R^2\): Das Quadrat der Korrelation zwischen den beiden Variablen. Gibt an, welcher Anteil der Gesamtvarianz durch das lineare Modell erklärt wird. Der F-Test (p-value) testet die Nullhypothese dass die wahre Korrelation Null ist - also kein Zusammenhang besteht.

  • t-Test: Zu jedem Regressionsparamter wir ein p-Wert (Pr(>|t||)) ausgewiesen. Der t-Test testet die Nullhypothese, dass der betreffende Parameter in Wirklichkeit Null ist.

Mehrfachregression

Wenn mehrere unabhängige Variable \(X^{(1)},X^{(2)},\dots,X^{(n)}\) betrachtet werden, spricht man von Mehrfachregression (multipler Regression).\[Y_i=\beta_0+\beta_1 X^{(1)}+\beta_2 X^{(2)}+\dots+\beta_nX^{(n)}+\varepsilon_i\]

lm(Weight ~ Height + Age, data=body_dat) %>% summary()

Call:
lm(formula = Weight ~ Height + Age, data = body_dat)

Residuals:
    Min      1Q  Median      3Q     Max 
-19.996  -5.909  -1.321   5.055  41.285 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept) -109.06383    7.38820  -14.76  < 2e-16 ***
Height         1.00227    0.04297   23.33  < 2e-16 ***
Age            0.22127    0.04207    5.26 2.14e-07 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 9.072 on 504 degrees of freedom
Multiple R-squared:  0.5398,    Adjusted R-squared:  0.538 
F-statistic: 295.6 on 2 and 504 DF,  p-value: < 2.2e-16

\[ Weight_i=-109+1.00\cdot Height + 0.22\cdot Age+\varepsilon_i \]

Mehrfachregression

\(0.95\)-Konfidenzintervall für alle Regressionsparameter:

lm(Weight ~ Height + Age, data=body_dat) %>% confint()
                   2.5 %      97.5 %
(Intercept) -123.5792876 -94.5483638
Height         0.9178550   1.0866946
Age            0.1386185   0.3039214

Im geschätzen Modell ist sowohl der Erklärungsgrad des Modells \(R^2\) hochsignifikant von 0 verschieden, als auch sämtliche Modellparameter. \(R^2\) - der Anteil der erklärten Variabilität - hat sogar leicht zugenommen.

Ist das Modell mit Altersvariable also besser als das Modell ohne Altersvariable?

Mehrfachregression

Mittels Varianzanalyse (Vergleich der nicht erklärten Varianzen), bzw. F-Test wird der Effekt von zusätzlichen Variablen verifiziert.

Nullhypothese: Die Einführung der zusätzlichen Variablen Alter (Age) bringt keinen signifikanten Erklärungszuwachs.

mod1 <- lm(Weight ~ Height, data=body_dat)
mod2 <- lm(Weight ~ Height + Age, data=body_dat)
anova(mod1,mod2)
Analysis of Variance Table

Model 1: Weight ~ Height
Model 2: Weight ~ Height + Age
  Res.Df   RSS Df Sum of Sq      F    Pr(>F)    
1    505 43753                                  
2    504 41476  1    2276.7 27.665 2.136e-07 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Hier kann die Nullhypothese mit hoher Signifikanz verworfen werden und man kann daher davon ausgehen, dass das Alter mit ~+0.22 kg/Jahr eine Rolle spielt.

Diagnostische Plots

par(mfrow=c(2,2))
plot(mod2)

Diagnostische Plots

  • Residual versus Fitted: Verläuft die rote Linie annähernd horizontal, kann man davon ausgehen, dass ein linearer Zusammenhang vorliegt.

  • Normal-QQ-Plot: Wenn die geplotteten Residuenpunkte ungefähr entlang der Geraden liegen, kann man davon ausgehen, dass die Normalverteilungsannahme annähernd erfüllt ist.

  • Scale-Location Plot: Wenn die rote Linie ungefähr horizontal verläuft, kann man von einheitlicher Varianz (Heteroskedastizität) der Residuen ausgehen.

  • Residuals versus Leverage Plot: Beobachtungen , die außerhalb der Cook’s distance (dashe lines) liegen, haben großen EInfluss und können Lage und Steigung der geschätzen Geraden stark verändern.

Varianzanalyse

Der Einfluss von kategorialen Variablen kann ebenfalls mittels Regressionsmodellen untersucht werden.

  • Für jede kategoriale Variable ist eine Faktorausprägung (die erste - entweder alphabetisch, oder nach der Reihung der levels) als Bezugsausprägung (“Kontrollgruppe”) ausgezeichnet.

  • Der geschätzte Intercept ist ein Schätzer für den Erwartungswert der abhängigen Variablen in der Kontrollgruppe.

  • die Regressionsparameter zeigen die additiven Zusatzeffekte auf den Erwartungswert im Vergleich zur Kontrollgruppe der jeweiligen Variable an.

Varianzanalyse

Wir haben Unterschiede zwischen den Mittelwerten bereits durch t-Tests behandelt. Hier untersuchen wir dieselbe Frage mittels Regressionsmodell.

Der Vorteil von Regressionsmodellen liegt darin, dass auch Mittelwertsvergleiche für Variable mit mehr als zwei Ausprägungen untersucht werden können.

mod3 <- lm(Weight ~ Gender_fac, data=body_dat) 
summary(mod3)

Call:
lm(formula = Weight ~ Gender_fac, data = body_dat)

Residuals:
    Min      1Q  Median      3Q     Max 
-24.245  -6.345  -1.400   6.355  44.600 

Coefficients:
                   Estimate Std. Error t value Pr(>|t|)    
(Intercept)         60.6004     0.6241   97.11   <2e-16 ***
Gender_facmännlich  17.5441     0.8941   19.62   <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 10.06 on 505 degrees of freedom
Multiple R-squared:  0.4326,    Adjusted R-squared:  0.4315 
F-statistic:   385 on 1 and 505 DF,  p-value: < 2.2e-16

Kovarianzanalyse

Oft werden numerische und kategoriale Variable gemeinsam als unabhängige Variable analysiert.

xyplot(Weight ~ Height, groups=Gender_fac, data=body_dat, type=c("p","r"),
       xlab="Körpergröße (cm)", ylab="Körpergewicht (kg)", main="Körpergewicht in Abhängigkeit von Geschlecht und Körpergröße")

Kovarianzanalyse

Gibt es signifikante Unterschiede zwischen Modellen für unterschiedliche Gruppen?

  • Unterschiede im Intercept-Term (Achsenabschnitt \(\beta_0\)) - direkter Effekt der kategorialen Variablen

  • Wechselwirkungen: Unterschiede in der Steigung der Geraden zwischen verschiedenen Gruppen

lm(Weight ~ Height*Gender_fac, data=body_dat) %>% summary()

Call:
lm(formula = Weight ~ Height * Gender_fac, data = body_dat)

Residuals:
    Min      1Q  Median      3Q     Max 
-20.187  -5.957  -1.439   4.955  43.355 

Coefficients:
                           Estimate Std. Error t value Pr(>|t|)    
(Intercept)               -43.81929   13.77877  -3.180  0.00156 ** 
Height                      0.63334    0.08351   7.584 1.63e-13 ***
Gender_facmännlich        -17.13407   19.56250  -0.876  0.38152    
Height:Gender_facmännlich   0.14923    0.11431   1.305  0.19233    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 8.795 on 503 degrees of freedom
Multiple R-squared:  0.5682,    Adjusted R-squared:  0.5657 
F-statistic: 220.7 on 3 and 503 DF,  p-value: < 2.2e-16

Kovarianzanalyse

Gibt es signifikante Unterschiede zwischen Modellen für unterschiedliche Gruppen?

  • Unterschiede im Intercept-Term (Achsenabschnitt \(\beta_0\)) - direkter Effekt der kategorialen Variablen

  • Wechselwirkungen: Unterschiede in der Steigung der Geraden zwischen verschiedenen Gruppen

lm(Weight ~ I(Height-150)*Gender_fac, data=body_dat) %>% summary()

Call:
lm(formula = Weight ~ I(Height - 150) * Gender_fac, data = body_dat)

Residuals:
    Min      1Q  Median      3Q     Max 
-20.187  -5.957  -1.439   4.955  43.355 

Coefficients:
                                   Estimate Std. Error t value Pr(>|t|)    
(Intercept)                        51.18121    1.35645  37.732  < 2e-16 ***
I(Height - 150)                     0.63334    0.08351   7.584 1.63e-13 ***
Gender_facmännlich                  5.25070    2.61614   2.007   0.0453 *  
I(Height - 150):Gender_facmännlich  0.14923    0.11431   1.305   0.1923    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 8.795 on 503 degrees of freedom
Multiple R-squared:  0.5682,    Adjusted R-squared:  0.5657 
F-statistic: 220.7 on 3 and 503 DF,  p-value: < 2.2e-16

Gruppenarbeit

  1. Formulieren und berechnen Sie das lineare Modell mit Körpergröße (ab 150 cm) als abhängige Variable und Gewicht (ab 50 kg) und Geschlecht als unabhängige Variable (ohne Wechselwirkung)

  2. Formulieren und berechnen Sie ein Modell, das Körpergröße (ab 150 cm) und Alter (ab 20 Jahre) , sowie alle Wechselwirkungen mit dem Geschlecht als unabhängige Variable enthält.

Odds ratio und Vierfeldertafel

Eine Vierfeldertafel ist eine Kreuztabelle, in der Häufigkeiten in Bezug auf zwei kategoriale Merkmale (factor) mit jeweils zwei Ausprägungen dargestellt (ohne Randverteilungen und totals) werden.

Sind Daten über Einzelbeobachtungen gegeben

tally(~ Merkmal_1 + Merkmal_2, data=data) 

Merkmal 1 wird dabei als unabhängige Variable betrachtet, deren Einfluss auf Merkmal 2 man untersuchen möchte.

In einem Kontrollexperiment dient dabei

  • die erste Kategorie von Merkmal 1 als Kontrollgruppe (Placebo, oder bisherige Behandlung), die zweite Kategorie definiert die Experimentalgruppe.

  • Die erste Kategorie von Merkmal 2 kennzeichnet in einer Kontrollstudie “Erfolge”. Je nach Untersuchungsgegenstand können Erfolge auch negativ besetzt sein (z.B. Tote)

Relatives Risiko

Erfolg kein Erfolg
Kontrollgruppe a b
Experimentalgruppe c d

Geschätzte Wahrscheinlichkeiten für Erfolg

in der Kontrollgruppe in der Experimentalgruppe
\(P_K=\frac{a}{a+b}\) \(P_E=\frac{c}{c+d}\)

Das relative Risiko gibt an, wieviel mal größer (kleiner) die Erfolgswahrscheinlichkeit in der Experimentalgruppe ist.\[R_R=\frac{P_E}{P_K}\]

odds ratio

Erfolg kein Erfolg
Kontrollgruppe a b
Experimentalgruppe c d

Die odds (Wettquoten) geben an, wieviel mal wahrscheinlicher ein Erfolg gegenüber keinem Erfolg in den beiden Gruppen ist:

in der Kontrollgruppe in der Experimentalgruppe
\(O_K=\frac{a}{b}\) \(O_E=\frac{c}{d}\)

Das Verhältnis der odds wird odds ratio genannt und gibt an, wieviel mal höher (>1) bzw. niedriger (<1) die odds in der Experimentalgruppe gegenüber der Kontrollgruppe sind.

\[ OR=\frac{O_E}{O_K} \]

\(\chi^2\)-Test

Mittels \(\chi^2\)-Test kann getestet werden, ob Häufigkeitsunterschiede in einer Kreuztabelle zufällig zustande kommen, oder ob es berechtigt ist, von systematischen Unterschieden zu sprechen.

Die Nullhypothese ist hier, dass die Unterschiede zufällig durch unabhängige Zufallsvariable zustande kommen. Ist der p-Wert klein genug, kann von systematischen Unterschieden ausgegangen werden.

\(\chi^2\)-Tests können ganz allgemein zum Vergleich von beobachteten und erwarteten Verteilungen verwendet werden. Wir betrachten allerdings nur die Anwendung auf Vierfeldertafeln.

Alle Felder sollten Besetzungszahlen >5 haben. Für kleinen Stichprobenumfang sollte Fisher’s exakter Test verwendet werden.

Kreuztabelle und \(\chi^2\)-Test

Kreuztabellen werden mittels tally (siehe oben) erzeugt. Dabei sollte eine einfache Häufigkeistabelle ohne Randwerte erzeugt werden.

tab <- tally(~ Gender_fac + Height_fac, data = body_dat, margins = FALSE)
tab
          Height_fac
Gender_fac (0,160] (160,180] (180,200]
  weiblich      70       188         2
  männlich       2       153        92

Ein \(\chi^2\)-Test kann dann folgendermaßen durchgeführt werden:

chisq.test(tab)

    Pearson's Chi-squared test

data:  tab
X-squared = 153.75, df = 2, p-value < 2.2e-16

Der Fisher-Test für kleine Stichprobengrößen kann in derselben Weise mittels der Funktion fisher.test durchgeführt werden.

Vierfeldertafel Beispiel

Daten über die Verhinderung von Todesfällen nach Myokardinfarkten (7 Studien)

aspirin <- read_excel("data/aspirin.xlsx")
aspirin %>% nice()
Source dp tp da ta
\cite{HSAuR:Elwoodetal1974} 67 624 49 615
\cite{HSAuR:Coronary1976} 64 77 44 757
\cite{HSAuR:ElwoodSweetman1979} 126 850 102 832
\cite{HSAuR:Breddinetal1979} 38 309 32 317
\cite{HSAuR:Persantine1980} 52 406 85 810
\cite{HSAuR:Aspirin1980} 219 2257 346 2267
\cite{HSAuR:ISIS21988} 1720 8600 1570 8587

Vierfeldertafel Beispiel

Daten über die Verhinderung von Todesfällen nach Myokardinfarkten

  • dp: Anzahl der Toten nach Verabreichung von Placebos

  • tp: Anzahl der mit Placebo behandelten PatientInnen

  • da: Anzahl der Toten nach Verabreichung von Aspirin

  • ta: Anzahl der mit Placebo behandelten PatientInnen

aspTot <- aspirin %>% transmute(dp,ap=tp-dp,da,aa=tp-da) %>% 
  summarize(dp=sum(dp),ap=sum(ap),da=sum(da),aa=sum(aa)) %>% 
  as.numeric() %>% matrix(nrow=2,byrow=T)
colnames(aspTot)=c("tot","lebend"); rownames(aspTot) <- c("Placebo","Aspirin")
aspTot %>% nice
tot lebend
Placebo 2286 10837
Aspirin 2228 10895

Vierfeldertafel Vierfeldertafel

orrr(aspTot,verbose = T)

Odds Ratio

Proportions
       Prop. 1:  0.1742 
       Prop. 2:  0.1698 
     Rel. Risk:  0.9746 

Odds
        Odds 1:  0.2109 
        Odds 2:  0.2045 
    Odds Ratio:  0.9694 

95 percent confidence interval:
     0.9242 < RR < 1.028 
     0.9092 < OR < 1.034 
NULL
[1] 0.9694397
chisq.test(aspTot) 

    Pearson's Chi-squared test with Yates' continuity correction

data:  aspTot
X-squared = 0.86926, df = 1, p-value = 0.3512

Gruppenarbeit: Vierfeldertafel

In einer (hypothetischen) Umfrage wurde die Zufriedenheit abgefragt:

zufrieden nicht zufrieden
Frauen 102 234
Männer 89 170

Die Vierfeldertafel kann kann folgendermaßen erzeugt (und an die Testfunktion und odds-ratio Funktion übergeben werden)

data <- matrix(c(102,234,89,170),nrow=2,byrow=T)

Wie schätzen Sie die Zufriedenheit im Vergleich zwischen den Geschlechtern (anhand des relativen Risikos und/oder der odds ratio) ein. Die Aussage “zufrieden” gilt hier als Erfolg.

Ist ein etwaiger Unterschied auch signifikant?