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 können Sie auch unsere Vorlage-Datei herunterladen (Rechtsklick > Speichern unter…).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 8 | Buchkapitel, das Schritt für Schritt erklärt, worum es geht, und wie man logistische Regressionen in R durchführt. Große Empfehlung! |
Wenn Sie Zeilenumbrüche in Ihrem Code verwenden, ist er für Sie und Andere deutlich besser lesbar. Sie können z.B. nach jeder Pipe (%>%
) oder nach dem +
in ggplot2-Befehlen sinnvolle Zeilenumbrüche einbauen. Zögern Sie auch nicht, längere einzelne Befehle in mehrere Zeilen umzubrechen: Nach jedem Komma kann eine neue Zeile beginnen, wenn Sie es möchten.
Es kann sein, dass die Einrückung bei mehrzeiligen Befehlen irgendwann unordentlich wird. Wenn das passiert, markieren Sie den Code und drücken strg
+ i
(windows), bzw. cmd
+ i
(mac). Ihr Code wird dadurch autamtisch eingerückt.
tidyverse
und fügen Sie die entsprechende Code-Zeile an den Anfang Ihrer .Rmd-Datei ein.stats_lectures
unter diesem Link herunter und speichern ihn in Ihrem Arbeitsverzeichnis, dort z.B. in einem Unterordner data
.Jede Zeile enthält Daten von einem/r StudentIn. Beobachtet wurde, ob die Studierenden an Statistik-Lehrveranstaltungen teilnehmen. Erhoben wurden dazu die Temperatur, wie sehr die Studis Sonne genießen und wie sehr sie Statistik genießen. Letzteres wurde mit einem Fragebogen gemessen, der aus 5 Items besteht.
Hinweis: Die Daten sind vollständig fiktiv und spiegeln natürlich auch nicht die Meinung der Lehrkräfte wieder. Dem Tutor ist nur gerade kein besseres Beispiel eingefallen.
Name | Bedeutung |
---|---|
attend_or_not | Hat zwei Ausprägungen: “course not attended” und “course attended”. Die Ausprägungen geben an, ob der/die Studi zur Lehrveranstaltung gegangen ist. |
temperature | Die Temperatur. Höher ist heißer. |
sun_joy | Wie sehr genießen die Studis Sonne. Höher ist stärkerer Genuss |
stats_joy1 bis stats_joy5 | Wie sehr genießen die Studis Statistik. Höher ist stärkerer Genuss. |
factor()
, um die Variable attend_or_not
in einen Faktor umzuformen. Verwenden Sie das Argument levels = c()
, um die Faktorstufen anzugeben. So stellen Sie sicher, dass Sie wissen, welche Kategorie die Baseline darstellt. Falls Sie diese Aufgabe nicht lösen können, aber dennoch weiter machen möchten, finden Sie hier funktionierende Syntax, die Sie in Ihr Script kopieren können. Linkglm()
mit dem Argument family = binomial()
, um die Kursbesuche der Studierenden mit deren Genuss von Statistik vorherzusagen. Benutzen Sie dafür den Mittelwert, den Sie in der vorherigen Aufgabe gebildet haben, als Prädiktor.summary()
anzeigen. “Null deviance” gibt die Deviance-Statistik für das Null-Modell an, “Residual Deviance” für das Alternativmodell (user spezifiziertes). Was können Sie aus der Deviance ableiten? (Siehe Field, Kapitel 8.3.2: Assessing the model: the deviance statistic)exp()
das Exponential zur Basis e für die Regressionskoeffizienten. Dies ist das Odds-Ratio. Tipp: Mit $coefficients
können Sie direkt auf die Koeffizienten zugreifen, wenn Sie den Namen, den Sie dem Modell gegeben haben, vor das $-Zeichen schreiben.confint()
auf das Modell an, um die Konfidenzintervalle für die Prädiktoren zu erhalten. Bilden Sie auch hiervon das Exponential mit exp()
, um die Konfidenzinternalle für die Odds-Ratios zu erhalten.fitted()
auf das Modell an, um die durch das Modell vorhergesagten Wahrscheinlichkeiten für Ihre Studierenden zu erhalten.gpplot
, um einen Plot zu erstellen. Verwenden Sie auf der X-Achse stats_joy und auf der y-Achse die in a) und b) erstellten vorhergesagten Wahrscheinlichkeiten.glm()
-Befehl:
anova()
, welches der Modelle am besten auf die Daten passt. Nutzen Sie die Option test = "Chisq"
, um einen p-Wert zu erhalten.
summary()
den Output für das beste Modell an.logisticPseudoR2s()
auf ihr Modell anweden.logisticPseudoR2s = function(LogModel) {
dev = LogModel$deviance
nullDev = LogModel$null.deviance
modelN = length(LogModel$fitted.values)
R.l = 1 - dev / nullDev
R.cs = 1 - exp(-(nullDev - dev) / modelN)
R.n = R.cs / (1 - (exp(-(nullDev / modelN))))
cat("Pseudo R^2 for logistic regression\n")
cat("Hosmer and Lemeshow R^2 ", round(R.l, 3), "\n")
cat("Cox and Snell R^2 ", round(R.cs, 3),"\n")
cat("Nagelkerke R^2 ", round(R.n, 3), "\n")
}
Lassen Sie die Datei mit Strg
+ Shift
+ K
(Windows) oder Cmd
+ Shift
+ K
(Mac) rendern. Sie sollten nun im “Viewer” unten rechts eine “schön aufpolierte” Version ihrer Datei sehen. Falls das klappt: Herzlichen Glückwunsch! Ihr Code kann vollständig ohne Fehlermeldung gerendert werden. Falls nicht: Nur mut, das wird schon noch! Gehen Sie auf Fehlersuche! Ansonsten schaffen wir es ja in der Übung vielleicht gemeinsam.
Anmerkung: Diese Übungszettel basieren zum Teil auf Aufgaben aus dem Lehrbuch Dicovering Statistics Using R (Field, Miles & Field, 2012). Sie wurden für den Zweck dieser Übung modifiziert, und der verwendete R-Code wurde aktualisiert.
Field, A., Miles, J., & Field, Z. (2012). Discovering Statistics Using R. London: SAGE Publications Ltd.
Please try to solve this sheet in an .Rmd file. You can create one from scratch using File > New file > R Markdown...
. You can delete the text beneath Setup Chunk (starting from line 11). Alternatively, you can download our template file unter this link (right click > save as…).
You’ll find a lot of the important information on the website of this course
Please don’t hesitate to search the web for help with this sheet. In fact, being able to effectively search the web for problem solutions is a very useful skill, even R pros work this way all the time! The best starting point for this is the R section on the programming site Stackoverflow
On the R Studio website, you’ll find highly helpful cheat sheets for many of R topics. The base R cheat sheet might be a good starting point.
Since this is a hands-on seminar, we won’t be able to present each and every new command to you explicitly. Instead, you’ll find here references to helpful ressources that you can use for completing this sheets.
Ressource | Description |
---|---|
Field, chapter 8 | Book chapter explaining step by step the why and how of logistic regression in R. Highly recommended! |
You should use new lines in your code to make it better readable for yourself and for others. You could f. e. continue in a new line after every pipe (%>%
) or after a +
in a sequence of ggplot2 commands. Don’t hesitate to divide a complex and long command into several lines. After every comma (,
) you can continue in a new line, if you like.
If your code looks scattered because of unregular indentation, you may mark a section of code and press strg
+ i
(Windows), or cmd
+ i
(Mac) to automatically indent your source code.
tidyverse
and insert the apropriate code at the beginning of your .Rmd document.stats_lectures
from this link and store it in your working directory or in a subfolder there. You might want to call it data
.Each line has the data of one student. You find, whether the student took part in a statistic lession, the current temperature, to which extend the person enjoys sun and, on the other hand, statistics. This was measured using a 5 items questionnaire.
Hint: These are completely fictive data. They don’t reflect the docents opinion. This is just an spontaneous idea of a student helper.
name | meaning |
---|---|
attend_or_not | dichotomous variable: “course not attended” and “course attended”. The values code, whether the student attendet the course or not. |
temperature | high values code high temperatures |
sun_joy | the higher the value the higher the joy |
stats_joy1 to stats_joy5 | the higher the values the more the student enjoys statistics |
factor()
to transform variable attend_or_not
into a factor. Use the argument levels = c()
to specify factor levels. This is how you set the correct reference group or baseline. If you want to keep on and don’t know how to do tis, you find a working syntax under https://pzezula.pages.gwdg.de/data/06_sheet_task2-2.Rglm()
with argument family = binomial()
to predict, which students attend the statistics course and whether they enjoy it. The predictor is the mean, that you calculated recently.summary()
. “Null deviance” is the deviance statistic for the null model, “residual deviance” is the same for the user defined alternative model. What can we learn from the deviance? C. f. Field (2012), chapter 8.3.2: Assessing the model: the deviance statistic.exp()
to calculate the exponet to base e for the regression coefficient. The result is the odds ratio. Tip: $coefficients
gives you direct access to the coefficients. As always you have to put the name of your result model and a $ before.confint()
to your result model to get confidence intervals for your predictors. Also use exp()
to get the confidence intervals for the odds ratios.fitted()
to your model to get the predicted probailities for your student subjects.ggplot()
to make a plot. Put stats_joy
to the x-axes and on the y-axes the predicted probilities, you calculated in a) and b).glm()
:
temperature
sun_joy
temperature
and sun_joy
.anova()
. Which of the models fit the data best, considering parsimonia. Use the parameter test = "Chisq"
to get a p-value.
summary()
of the best model.logisticPseudoR2s()
to your model.logisticPseudoR2s = function(LogModel) {
dev = LogModel$deviance
nullDev = LogModel$null.deviance
modelN = length(LogModel$fitted.values)
R.l = 1 - dev / nullDev
R.cs = 1 - exp(-(nullDev - dev) / modelN)
R.n = R.cs / (1 - (exp(-(nullDev / modelN))))
cat("Pseudo R^2 for logistic regression\n")
cat("Hosmer and Lemeshow R^2 ", round(R.l, 3), "\n")
cat("Cox and Snell R^2 ", round(R.cs, 3),"\n")
cat("Nagelkerke R^2 ", round(R.n, 3), "\n")
}
Render your document using Strg
+ Shift
+ K
(Windows) oder Cmd
+ Shift
+ K
(Mac). After that, you shoud see a nice looking version of your document. I that works out, congratulations! Your code could be rendered without any errors. If not, don’t be frustrated. Fix your errors. We will help you in our exercise class.
Note: These sheets are based partially on exercises from the book Dicovering Statistics Using R (Field, Miles & Field, 2012). They’ve been modified for the porpuses of this seminar, and the R code was updated.
Field, A., Miles, J., & Field, Z. (2012). Discovering Statistics Using R. London: SAGE Publications Ltd.
Version: 06 Mai, 2021 23:22