--- title: 'Übungszettel: Regression' author: "Kai Schneider (k.schneider01@stud.uni-goettingen.de)" output: html_document: theme: paper toc: yes toc_depth: 3 toc_float: yes pdf_document: default # latex_engine: xelatex params: soln: yes subtitle: 'M.Psy.205, Dozent: Dr. Peter Zezula' header-includes: \usepackage{comment} mainfont: Arial linkcolor: blue date: "`r format(Sys.time(), '%d %B, %Y %H:%M')`" --- # Deutsche Version ## Links [Übungszettel als PDF-Datei zum Drucken](https://pzezula.pages.gwdg.de/sheet_regression2.pdf) `r if(!params$soln) {"\\begin{comment}"}` **Übungszettel mit Lösungen** [Lösungszettel als PDF-Datei zum Drucken](https://pzezula.pages.gwdg.de/sheet_regression2_solutions.pdf) [Der gesamte Übugszettel als .Rmd-Datei](https://pzezula.pages.gwdg.de/sheet_regression2.Rmd) (Zum Downloaden: Rechtsklick > Speichern unter...) `r if(!params$soln) {"\\end{comment}"}` ## Ziel des Übungszettels 1. Datawrangling wiederholen 2. ggplot wiederholen 3. Regressionsanalyse wiederholen 4. Zusammenhang zwischen t.test für unabhängige Stichproben und der einfachen linearen Regression nominalen binären Prädiktor verstehen. ## Hinweise zur Bearbeitung 1. Bitte beantworten Sie die Fragen in einer .Rmd Datei. Sie können Sie über `Datei > Neue Datei > R Markdown...` eine neue R Markdown Datei erstellen. Den Text unter dem *Setup Chunk* (ab Zeile 11) können Sie löschen. [Unter diesem Link](https://owncloud.gwdg.de/index.php/s/6kIMGFK9Ejm9YDu/download) können Sie auch unsere Vorlage-Datei herunterladen. 2. Informationen, die Sie für die Bearbeitung benötigen, finden Sie auf der [Website der Veranstaltung](https://www.psych.uni-goettingen.de/de/it/team/zezula/courses/multivariate) 3. Zögern Sie nicht, im Internet nach Lösungen zu suchen. Das effektive Suchen nach Lösungen für R-Probleme im Internet ist tatsächlich eine sehr nützliche Fähigkeit, auch Profis arbeiten auf diese Weise. Die beste Anlaufstelle dafür ist der [R-Bereich der Programmiererplattform Stackoverflow](https://stackoverflow.com/questions/tagged/r) 4. Auf der Website von R Studio finden Sie sehr [hilfreiche Übersichtszettel](https://www.rstudio.com/resources/cheatsheets/) zu vielen verschiedenen R-bezogenen Themen. Ein guter Anfang ist der [Base R Cheat Sheet](http://github.com/rstudio/cheatsheets/raw/master/base-r.pdf) ## Ressourcen Da es sich um eine praktische Übung handelt, können wir Ihnen nicht alle neuen Befehle einzeln vorstellen. Stattdessen finden Sie hier Verweise auf sinnvolle Ressourcen, in denen Sie für die Bearbeitung unserer Aufgaben nachschlagen können. Ressource | Beschreibung ----------|-------------- Field, Kapitel 7 (7.1 - 7.5, 7.9) | Buchkapitel, das Schritt für Schritt erklärt, worum es geht, und wie man Regressionen in R durchführt. **Große Empfehlung!** [R for Data Science](http://r4ds.had.co.nz/index.html) | Einsteiger-Buch von R-Gott Hadley Wickham. Hier wird topaktuell in die Arbeit mit R, insbesondere zur Datenaufbereitung und Visualisierung, eingeführt. [R Tutorial](http://www.the-experimenter.com/wiki?dest=r-space/r_introduction) | Schritt-für-Schritt Einführung in das Arbeiten mit R von Christian Treffenstädt. Nützlich, falls Sie grundlegende Dinge noch einmal nachschlagen möchten ## 1) Daten einlesen 1. Setzen Sie ein sinnvolles Arbeitsverzeichnis für den Übungszettel (in der Regel der Ordner, in dem Ihre .Rmd liegt). Aber Vorsicht: Beim Rendern (Knit) geht RStudio davon aus, dass das Working-Directory das ist, in dem auch die .Rmd-Datei liegt. Dies ist besonders wichtig, wenn es um relative Links geht. 2. Laden Sie den Datensatz [starwars.csv](http://md.psych.bio.uni-goettingen.de/mv/data/div/starwars.csv) herunter (*rechtsklick > Ziel speichern unter* oder *rechtsklick > Verknüpfte Datei laden*) und speichern Sie ihn in Ihrem Arbeitsverzeichnis (idealerweise haben Sie noch den Ordner vom letzten Übungszettel - speichern Sie den Datensatz im Unterordner /data). 3. Laden Sie die Pakete des `tidyverse` und fügen Sie eine entsprechende Code-Zeile an den Beginn Ihres Dokuments ein. 4. Lesen Sie den Datensatz `starwars.csv` unter dem Namen `sw_data` in R ein. `r if(!params$soln) {"\\begin{comment}"}` ### Lösung #### Unteraufgabe 1 Bitte folgen Sie den Anweisungen im Aufgabentext. #### Unteraufgabe 2 Bitte folgen Sie den Anweisungen im Aufgabentext. #### Unteraufgabe 3 ```{r message=FALSE, warning=FALSE} library(tidyverse) ``` Anmerkung: `library()` und `require()` sind beides Befehle zum Laden von Paketen. `require()` ist prinzipiell für die Verwendung innerhalb von Funktionen gedacht. Siehe `?library` oder `?require` für Details. #### Unteraufgabe 4 ```{r} # syntax for locally stored data file # sw_data <- read_csv("data/starwars.csv") sw_data <- read_csv("http://md.psych.bio.uni-goettingen.de/mv/data/div/starwars.csv") ``` `r if(!params$soln) {"\\end{comment}"}` ## 2) Data Wrangling 1. Erstellen Sie einen neuen Datensatz `sw_data2` welcher keine fehlenden Werte auf den Variablen `gender` und `height` enthält. 2. Erstellen Sie einen Barplot, welcher auf der x-Achse das Geschlecht und auf der y-Achse die mittlere Größe zeigt. 3. Ergänzen sie Fehlerbalken, färben Sie die Balken unterschiedlich ein und geben Sie ihrer Grafik einen passenden Titel. Was fällt ihnen bezüglich der Fehlerbalken auf? Warum werden für Hemaphroditen und Geschlechtlose keine Fehlerbalken gezeichnet? 4. Lassen Sie sich anzeigen wieviele Beobachtungseinheiten es je Geschlecht gibt. Lassen Sie sich auch den Mittelwert, Median und Varianz der Variable `height` für jedes Geschlecht angeben. 5. Erstellen Sie einen neuen Datensatz `sw_data3` welcher keine fehlenden Werte auf den Variablen `gender` und `height` enthält und in welchem nur noch die Geschlechter "male" und "female" vorkommen `r if(!params$soln) {"\\begin{comment}"}` ### Lösung #### Unteraufgabe 1 ```{r} sw_data2 <- sw_data %>% drop_na(height, gender) ``` #### Unteraufgabe 2 ```{r} mybarplot <- ggplot(sw_data2, aes(x = gender, y = height)) + stat_summary(fun = mean, geom = "bar") mybarplot ``` #### Unteraufgabe 3 ```{r} mybarplot <- ggplot(sw_data2, aes(x = gender, y = height, fill = gender)) + stat_summary(fun = mean, geom = "bar") + stat_summary(fun.data = mean_cl_normal, geom = "errorbar", width = 0.2) + labs(title = "Körpergröße in Abhänigkeit vom Geschlecht") mybarplot ``` #### Unteraufgabe 4 ```{r} table(sw_data2$gender) sw_data2 %>% group_by(gender) %>% summarise(mean(height), median(height), var(height)) ``` #### Unteraufgabe 5 ```{r} sw_data3 <- sw_data %>% drop_na(height, gender) %>% filter(gender == "male" | gender == "female") table(sw_data3$gender) table(sw_data2$gender) ``` `r if(!params$soln) {"\\end{comment}"}` ## 3) t-test für unabhängige Stichproben 1. Nutzen Sie die Funktion `t.test()` um zu überprüfen, ob die Mittelwerte der Körpergröße zwischen Männern und Frauen signifikant voneinander abweichen. Nehmen Sie dafür (einfachhalber) Varianzhomogenität und Unabhängigkeit der Stichproben an. Testen Sie zweiseitig. 2. Treffen Sie eine Testentscheidung. Unterscheiden sich beide Gruppen signifikant voneinander? Genau genommen: Was testet der eigentlich? 3. Wie groß ist die Mittelwertsdifferenz? `r if(!params$soln) {"\\begin{comment}"}` ### Lösung #### Unteraufgabe 1 ```{r} t.test(sw_data3$height ~ sw_data3$gender, alternative = c("two.sided"), paired = FALSE, var.equal = TRUE) # Die Annahme der gleichen Varianzen und einer ggf. normalverteilten abhänigen Variable # ist übrigens diskutabel. Wir vertiefen das an dieser Stelle nicht. Hinweise geben aber: # ggplot(sw_data3, aes(y = height, x = gender)) + # geom_boxplot() # ggplot(sw_data3, aes(height)) + # geom_histogram(fill = "white", color = "grey30") + # facet_wrap(~ gender) ``` #### Unteraufgabe 2 Bei einem p-Wert > 0.05 lehnen wir die Nullhypothese nicht ab. Wir gehen von keinem signifikanten Mittelwertsunterschied aus. Ganz genau genommen testet der Test, ob die Mittelwertsdifferenz signifikant von Null verschieden ist. Dies ist hier nicht der Fall. #### Unteraufgabe 3 ```{r} mymeans <- sw_data3 %>% group_by(gender) %>% summarise(Means = mean(height)) mymeans abs(mymeans$Means[1] - mymeans$Means[2]) ``` `r if(!params$soln) {"\\end{comment}"}` ## 4) Einfache Regression: Zusammenhang Lineares Modell und t-Test 1. Rechnen Sie eine einfache lineare Regression mit abhäniger Variable `height` und Prädiktor `gender`. 2. Vergleichen Sie die Mittelwerte beider Gruppen mit dem Intercept und Slope der Regression. Erinnern Sie sich an die Mittelwertsdifferenz. Was fällt ihnen auf? 3. Schauen Sie den t-Wert und p-Wert für den Signifikanztest ob der Slope signifikant von Null verschieden ist an. Vergleichen Sie diesen mit Ergebnis des t-Tests aus Aufgabe 3. `r if(!params$soln) {"\\begin{comment}"}` ### Lösung #### Unteraufgabe 1 ```{r} mymodel <- lm(formula = height ~ gender, data = sw_data3) summary(mymodel) ``` #### Unteraufgabe 2 ```{r} mymodel$coefficients mymeans mymeans$Means abs(mymeans$Means[1] - mymeans$Means[2]) sum(mymodel$coefficients) ``` Der Intercept entspricht dem Mittelwert der Körpergröße der Frauen. Der Slope entspricht der Mittelwertsdifferenz. Intercept + Slope entspricht dem Mittelwert der Männer. #### Unteraufgabe 3 ```{r} t.test(sw_data3$height ~ sw_data3$gender, alternative = c("two.sided"), paired = FALSE, var.equal = TRUE) summary(mymodel) ``` Der Absolutbetrag der t-Werte ist gleich. Auch die p-Werte sind identisch. In beiden Fällen testen wir ob die Mittelwertsdifferenz signifikant von Null verschieden ist. `r if(!params$soln) {"\\end{comment}"}` ## Literature *Annotation*: This exercise sheet bases in part on exercises, that you can find in the textbook *Dicovering Statistics Using R* (Field, Miles & Field, 2012). They were modified for the purpose of this sheet and the R-code was actualized. Field, A., Miles, J., & Field, Z. (2012). *Discovering Statistics Using R*. London: SAGE Publications Ltd. Version: `r format(Sys.time(), '%d %B, %Y %H:%M')`