Lösungen zu den Aufgaben

  1. Aufgabe

    Gibt es einen Zusammenhang zwischen “Rauchen” und “Gesundheit”? Berechnen Sie das Odds Ratio von Gesundheit (zu Krankheit) von Nichtrauchern (im Verhältnis zu Rauchern!) in diesen fiktiven Daten.

    Raucher krank gesund
    TRUE 24 1619
    FALSE 173 1321

    Lösung

    z1 <- 1321
    z2 <- 173
    z3 <- 1619
    z4 <- 24
    Chance_Raucher_gesund <- (z1/z2)
    Chance_NRaucher_gesund <- (z3/z4)
    OR <- Chance_NRaucher_gesund / Chance_Raucher_gesund
    
    OR
    ## [1] 8.834437

    Die Chance Chance von “gesund zu krank” ist bei Nicht-Rauchern fast 9 mal so hoch wie bei Rauchern.


  2. Aufgabe

    Werten Sie die Häufigkeiten (der Stufen) folgender Variablen aus wie unten beschrieben.

    Datensatz: mtcars.

    Variablen:

    1. Erstellen Sie für jede der genannten Variablen eine univariate Häufigkeitsanalyse (also nur eine Variable).
    2. Erstellen Sie dann für die ersten beiden genannten Variablen eine gemeinsame Häufigkeitsanalyse (bivariat).
    3. Erstellen Sie dann für alle genannten Variablen eine gemeinsame Häufigkeitsanalyse.
    4. Wie viele Gruppen (also Häufigkeitswerte) ergeben sich (theoretisch) in der letzten Auswertung?

    Lösung

    library("tidyverse")
    data("mtcars")
    1. univariate Häufigkeitsanalyse
    mtcars %>% 
      group_by(am) %>% 
      summarise(zeilen_n = n())
    ## # A tibble: 2 × 2
    ##      am zeilen_n
    ##   <dbl>    <int>
    ## 1     0       19
    ## 2     1       13

    Der Befehle n() gibt die Anzahl der Zeilen (Reihen) zurück. Da in einem Dataframe alle Zeilen gleich lang sind, brauchen wir keine Spalte anzugeben.

    Alternativ könnte man auch schreiben:

    mtcars %>% 
      count(am)
    ##   am  n
    ## 1  0 19
    ## 2  1 13

    Das ist haargenau der gleiche Effekt wie die vorherige Syntax.

    Üblich ist auch, eine Kontingenztabelle so darzustellen:

    1. gemeinsame Häufigkeitsanalyse (bivariat)
    mtcars %>% 
      count(am, cyl)
    ##   am cyl  n
    ## 1  0   4  3
    ## 2  0   6  4
    ## 3  0   8 12
    ## 4  1   4  8
    ## 5  1   6  3
    ## 6  1   8  2
    table(mtcars$am, mtcars$cyl)
    ##    
    ##      4  6  8
    ##   0  3  4 12
    ##   1  8  3  2

    Wir sehen, dass wir 23=62\cdot3=6 Gruppen haben, in denen sich die n=32n=32 Beobachtungen aufteilen.

    1. Häufigkeitsanalyse mit 3 Variablen
    mtcars %>% 
      count(am, cyl, vs)
    ##   am cyl vs  n
    ## 1  0   4  1  3
    ## 2  0   6  1  4
    ## 3  0   8  0 12
    ## 4  1   4  0  1
    ## 5  1   4  1  7
    ##  [ reached 'max' / getOption("max.print") -- omitted 2 rows ]

    Das sind drei Variablen mit 232=122 \cdot 3 \cdot 2 = 12 Gruppen.

    Da einige der 12 Gruppen in den Daten nicht vorkommen, sind sie in der Auszählung der Häufigkeiten nicht aufgenommen; in den Daten gibt es nur 7 der 12 Gruppen.


  3. Aufgabe

    Betrachten Sie die Balkendiagramme. Welche Balkendiagramm zeigt den stärksten Zusammenhang?


    1. A
    2. B
    3. C
    4. keine Antwort möglich

    Lösung

    1. Falsch
    2. Falsch
    3. Wahr
    4. Falsch

  4. Aufgabe

    Viele Quellen berichten Klimadaten unserer Erde, z.B. auch National Aeronautics and Space Administration - Goddard Institute for Space Studies.

    Von dieser Quelle beziehen wir diesen Datensatz.

    Die Datensatz sind auf der Webseite wie folgt beschrieben:

    Tables of Global and Hemispheric Monthly Means and Zonal Annual Means

    Combined Land-Surface Air and Sea-Surface Water Temperature Anomalies (Land-Ocean Temperature Index, L-OTI)

    The following are plain-text files in tabular format of temperature anomalies, i.e. deviations from the corresponding 1951-1980 means.

    Global-mean monthly, seasonal, and annual means, 1880-present, updated through most recent month: TXT, CSV

    Starten Sie zunächst das R-Paket tidyverse falls noch nicht geschehen.

    library(tidyverse)

    Importieren Sie dann die Daten:

    data_path <- "https://data.giss.nasa.gov/gistemp/tabledata_v4/GLB.Ts+dSST.csv"
    d <- read_csv(data_path, skip = 1)

    Wir lassen die 1. Zeile des Datensatzes aus (Argument skip), da dort Metadaten stehen, also keine Daten, sondern Informationen (Daten) zu den eigentlichen Daten.

    Aufgabe

    Berechnen Sie die folgende Statistiken pro Dekade:

    Hinweise:


    Lösung

    Dekade berechnen:

    d <-
      d %>% 
      mutate(decade = round(Year/10))

    Statistiken pro Dekade:

    d_summarized <- 
      d %>% 
      group_by(decade) %>% 
      summarise(temp_mean = mean(Jan),
                temp_sd = sd(Jan))
    
    d_summarized
    decade temp_mean temp_sd
    188 −0.19 0.24
    189 −0.43 0.22
    190 −0.26 0.16
    191 −0.39 0.22
    192 −0.28 0.15
    193 −0.14 0.21
    194 0.03 0.21
    195 −0.05 0.18
    196 0.03 0.15
    197 −0.07 0.17
    198 0.21 0.19
    199 0.36 0.13
    200 0.52 0.19
    201 0.64 0.20
    202 0.96 0.14

    Zur Veranschaulichung visualisieren wir die Ergebnisse:


  5. Aufgabe

    Viele Quellen berichten Klimadaten unserer Erde, z.B. auch National Aeronautics and Space Administration - Goddard Institute for Space Studies.

    Von dieser Quelle beziehen wir diesen Datensatz.

    Die Datensatz sind auf der Webseite wie folgt beschrieben:

    Tables of Global and Hemispheric Monthly Means and Zonal Annual Means

    Combined Land-Surface Air and Sea-Surface Water Temperature Anomalies (Land-Ocean Temperature Index, L-OTI)

    The following are plain-text files in tabular format of temperature anomalies, i.e. deviations from the corresponding 1951-1980 means.

    Global-mean monthly, seasonal, and annual means, 1880-present, updated through most recent month: TXT, CSV

    Starten Sie zunächst das R-Paket tidyverse falls noch nicht geschehen.

    library(tidyverse)

    Importieren Sie dann die Daten:

    data_path <- "https://data.giss.nasa.gov/gistemp/tabledata_v4/GLB.Ts+dSST.csv"
    d <- read_csv(data_path, skip = 1)

    Wir lassen die 1. Zeile des Datensatzes aus (Argument skip), da dort Metadaten stehen, also keine Daten, sondern Informationen (Daten) zu den eigentlichen Daten.

    Aufgaben

    Hinweise:


    Lösung

    Dekade berechnen:

    d <-
      d %>% 
      mutate(decade = round(Year/10))

    Korrelation:

    d %>% 
      summarise(temp_cor = cor(Jan, Feb))
    ## # A tibble: 1 × 1
    ##   temp_cor
    ##      <dbl>
    ## 1    0.940

    Korrelation pro Dekade:

    d_summarized <- 
      d %>% 
      group_by(decade) %>% 
      summarise(temp_cor = cor(Jan, Feb))
    decade temp_cor
    188 0.88
    189 0.79
    190 0.52
    191 0.84
    192 0.82
    193 0.72
    194 0.50
    195 0.78
    196 0.56
    197 0.79
    198 0.80
    199 0.54
    200 0.57
    201 0.67
    202 0.95

    Die Korrelation der Temperaturen und damit die Ähnlichkeit der Muster hat im Laufe der Dekaden immer mal wieder geschwankt.


  6. Aufgabe

    Viele Quellen berichten Klimadaten unserer Erde, z.B. auch National Aeronautics and Space Administration - Goddard Institute for Space Studies.

    Von dieser Quelle beziehen wir diesen Datensatz.

    Die Datensatz sind auf der Webseite wie folgt beschrieben:

    Tables of Global and Hemispheric Monthly Means and Zonal Annual Means

    Combined Land-Surface Air and Sea-Surface Water Temperature Anomalies (Land-Ocean Temperature Index, L-OTI)

    The following are plain-text files in tabular format of temperature anomalies, i.e. deviations from the corresponding 1951-1980 means.

    Global-mean monthly, seasonal, and annual means, 1880-present, updated through most recent month: TXT, CSV

    Starten Sie zunächst das R-Paket tidyverse falls noch nicht geschehen.

    library(tidyverse)

    Importieren Sie dann die Daten:

    data_path <- "https://data.giss.nasa.gov/gistemp/tabledata_v4/GLB.Ts+dSST.csv"
    d <- read_csv(data_path, skip = 1)

    Wir lassen die 1. Zeile des Datensatzes aus (Argument skip), da dort Metadaten stehen, also keine Daten, sondern Informationen (Daten) zu den eigentlichen Daten.

    Aufgaben

    Für “Wenn-Dann-Abfragen” eignet sich folgender R-Befehl (als “Pseudocode” dargestellt):

    d %>% 
      mutate(neue_spalte = case_when(
        erste_bedingung_bzw_wenn_teil ~ dann_teil1,
        zweite_bedingung_bzw_zweiter_wenn_teil ~ dann_teil2
      ))

    Lösung

    temp_is_above erstellen:

    d <-
      d %>% 
      mutate(temp_is_above = case_when(
        Jan > 0 ~ "yes",
        Jan <= 0 ~ "no"
      ))

    Jahrhundert berechnen:

    d <-
      d %>% 
      mutate(century = case_when(
        Year < 1900 ~ "19th",
        Year >= 1900 ~ "20th"
      ))

    Erhöhte Werte der Januar-Temperatur pro Jahrhundert berechnen:

    d_summarized <- 
    d %>% 
      group_by(century) %>% 
      count(temp_is_above)
    
    d_summarized
    ## # A tibble: 4 × 3
    ## # Groups:   century [2]
    ##   century temp_is_above     n
    ##   <chr>   <chr>         <int>
    ## 1 19th    no               19
    ## 2 19th    yes               1
    ## 3 20th    no               56
    ## 4 20th    yes              67

    Der Befehl count() zählt aus, wie häufig die Ausprägungen der angegebenen Variablen X sind, m.a.W. er gibt die Verteilung von X wieder.

    Es macht vermutlich Sinn, noch die Anteile (relative Häufigkeiten) zu den absoluten Häufigkeiten zu ergänzen:

    d_summarized %>% 
      mutate(prop = n / sum(n))
    ## # A tibble: 4 × 4
    ## # Groups:   century [2]
    ##   century temp_is_above     n  prop
    ##   <chr>   <chr>         <int> <dbl>
    ## 1 19th    no               19 0.95 
    ## 2 19th    yes               1 0.05 
    ## 3 20th    no               56 0.455
    ## 4 20th    yes              67 0.545

    Odds Ratio berechnen:

    Wir bezeichnen mit c19 (für “Chance 1”) das Verhältnis von erhöhter Temperatur zu nicht erhöhter Temperatur im 19. Jahrhundert.

    c19 <- 1 / 19

    Mit c20 bezeichnen wir die analoge Chance für das 20. Jahrhundert:

    c20 <- 56 / 67

    Das Verhältnis der beiden Chancen gibt das Chancenverhältnis (Odds Ratio, OR):

    c19 / c20
    ## [1] 0.06296992

    Genauso gut kann man das OR von c20 zu c19 ausrechnen, der Effekt bleibt identisch:

    c20 / c19
    ## [1] 15.8806

    In beiden Fällen ist es ein Faktor von knapp 16.


  7. Aufgabe

    Welcher Korrelationswert (Pearson) beschreibt die Korrelation in den Daten am besten?


    1. r=1r = 1
    2. r=1r = -1
    3. r=0r = 0
    4. r=.8r = .8
    5. r=.8r = -.8

    Lösung

    C. Die Daten wurden aus unkorrelierten Populationen (jeweils normalverteilt) gezogen, also ρ=0\rho = 0.

    Hinweis: Griechische Buchstaben werden hier verwendet, um Variablen aus Populationen zu beschreiben (Parameter), lateinische Buchstaben werden für Stichproben verwendet.


    1. Falsch
    2. Falsch
    3. Wahr
    4. Falsch
    5. Falsch

  8. Aufgabe

    Welcher Korrelationswert (Pearson) beschreibt die Korrelation in den Daten am besten?


    Lösung

    Die Korrelation in der zugehörigen (bivariaten) Population beträgt -0.9.

    In der Stichprobe kann der zugehörige Wert (etwas abweichen).

    Das ist genauso, wie wenn man sagt, dass der “mittlere deutsche Mann” 1,80m groß sei, aber wenn Sie eine Stichprobe ziehen, muss der Mittelwert ja auch nicht (notwendigerweise) exakt bei 1,80m lliegen.