# lade dateidf <-read_delim("datasets/stat5-8/Datensatz_novanimal_Uebung_Statistik5.2.csv", ";")# sieht euch die Verteilung zwischen Fleisch und kein Fleisch an,# beide Kategorien kommen nicht gleich häufig vor, ist aber nicht tragischprop.table(table(df$meat)) # gibt die Prozente an
0 1
0.3959218 0.6040782
table(df$meat) # gibt die absoluten Werte an
0 1
7087 10813
# definiert das logistische Modell mit ccrs als random intercept und# wendet es auf den Datensatz an# Exkurs für Neugierige# check out ICC: https://www.datanovia.com/en/lessons/intraclass-correlation-coefficient-in-r/# attention: however data needs to be wide format# dauert ein paar Sekundenmod0 <-glmer(meat ~ gender + member + age_group + (1| ccrs),data = df, binomial("logit"))# lasst euch das Modell anzeigen: sieht so aus, als ob v.a. Geschlecht eine# Rolle spielt# Wahrnmeldung kann vernachlässigt werden (aufgrund der unicode resp.# Umlaute in den Variablen)summary(mod0)
Generalized linear mixed model fit by maximum likelihood (Laplace
Approximation) [glmerMod]
Family: binomial ( logit )
Formula: meat ~ gender + member + age_group + (1 | ccrs)
Data: df
AIC BIC logLik deviance df.resid
21124.3 21178.8 -10555.1 21110.3 17893
Scaled residuals:
Min 1Q Median 3Q Max
-3.8652 -0.7267 0.4335 0.6449 3.4115
Random effects:
Groups Name Variance Std.Dev.
ccrs (Intercept) 1.487 1.219
Number of obs: 17900, groups: ccrs, 1427
Fixed effects:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.12569 0.14484 -0.868 0.3855
genderM 0.94466 0.08386 11.265 <2e-16 ***
memberStudierende -0.17822 0.12655 -1.408 0.1591
age_group26 bis 34-jährig -0.16855 0.10175 -1.657 0.0976 .
age_group35 bis 49-jährig -0.02040 0.15634 -0.131 0.8962
age_group50 bis 64-jährig 0.09752 0.20159 0.484 0.6286
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Correlation of Fixed Effects:
(Intr) gendrM mmbrSt a_26b3 a_35b4
genderM -0.337
membrStdrnd -0.834 -0.023
ag_gr26b34- -0.537 -0.025 0.349
ag_gr35b49- -0.737 0.043 0.662 0.463
ag_gr50b64- -0.637 0.018 0.597 0.389 0.515
## erste Interpretation: Geschlecht (Referenzkategorie: Mann) und Alter (Referenzkategorie: junge Personen) scheinen den Fleischkonsum positiv zu beeinflussen + Hochschulzugehörigkeit spielt keien Rolle# d.h. könnte man vernachlässigen. Ich lasse aus inhaltlichen Gründen aber im Modell drin# Pseudo R^2library("MuMIn")r.squaredGLMM(mod0)
# das marginale R^2 (r2m) gibt uns die erklärte Varianz der fixen Effekte: hier 4% (das ist sehr wenig)# das conditionale R^2 (r2c) gibt uns die erklärte Varianz für das ganze Modell# (mit fixen und variablen Effekten): hier 29% (ganz ok, aber auch nicht sehr hoch)# für weitere Informationen: https://rdrr.io/cran/MuMIn/man/r.squaredGLMM.html# zusätzliche Informationen, welche für die Interpretation gut sein kann# berechnet den Standardfehler (mehr infos: https://www.youtube.com/watch?v=r-txC-dpI-E oder hier: https://mgimond.github.io/Stats-in-R/CI.html)# weitere info: https://stats.stackexchange.com/questions/26650/how-do-i-reference-a-regression-models-coefficients-standard-errorsse <-sqrt(diag(vcov(mod0)))# zeigt eine Tabelle der Schätzer mit 95% Konfidenzintervall (KI)# => Faustregel: falls 0 im KI enthalten ist, dann ist der Unterschied statistisch NICHT signifikanttab1 <-cbind(Est =fixef(mod0), LL =fixef(mod0) -1.96* se,UL =fixef(mod0) +1.96* se)# erzeugt die Odds Ratiostab2 <-exp(tab1)
Methoden
Die Responsevariable “Fleischkonsum” ist eine binäre Variable. Demnach wird eine multiple logistische Regression mit den Prädiktoren “Alter (Gruppen)”, “Geschlecht” und “Hochschulzugehörigkeit” gerechnet. Da in den Daten gewisse Individuen mehrmals vorkommen, wird das Individuum (Variable ccrs) als variabler Effekt in das Modell aufgenommen.
Ergebnisse
Das Geschlecht und das Alter nehmen einen signifikanten Einfluss auf den Fleischkonsum (siehe Table 1): Männer kaufen signifikant häufiger ein fleischhaltiges Gericht als Frauen; junge Personen (15 bis 25-jährig) kaufen signifikant häufiger ein fleischhaltiges Gericht in der Mensa. Es sieht so aus, als ob die Hochschulzugehörigkeit auf den ersten Blick keinen Einfluss nimmt. Aber man müsste auch die Interaktion zwischen Geschlecht und Hochschulzugehörigkeit berücksichtigen, um ein abschliessendes Bild zu bekommen. Das kleine marginale Pseudo-R^2 zeigt auf, dass es nicht das “beste” Modell ist. Insbesondere die tiefe Varianzaufklärung für die randomisierte Variable (r2c; ccrs) scheint mit (nur) 4% sehr gering. Das sind Hinweise dafür, dass im Modell gegebenenfalls noch weitere Faktoren miteinbezogen werden müssten (z.B. Standort Mensa).
Modellschätzer (Coefficients) mit dazugehörigem 95% Konfidenzintervall
Coefficients
Lower Limit (LL)
Uppewr Limit (UL)
Intercept
-0.13
-0.41
0.16
Männer
0.94
0.78
1.11
Mitarbeitende
-0.18
-0.43
0.07
26 bis 34-jährig
-0.17
-0.37
0.03
35 bis 49-jährig
-0.02
-0.33
0.29
50 bis 64-jährig
0.10
-0.30
0.49
Die Chance, dass Männer ein fleischhaltiges Gericht kaufen ist 2.57mal (+157%) höher als bei Frauen (siehe Table 2). Die Chance, dass 26 bis 34-jährige Personen ein fleischhaltiges Gericht kaufen ist kleiner (-16%) als bei den 15 bis 25-jährigen Personen.
Odds Ratio (OR) mit dazugehörigem 95% Konfidenzintervall
---date: 2023-11-13lesson: Stat5thema: Von linearen Modellen zu GLMMsindex: 4format: html: code-tools: source: trueknitr: opts_chunk: collapse: false---# Stat5: Lösung 2- Download dieses Lösungsscript via "\</\>Code" (oben rechts)## Musterlösung Übung 5.2: GLMM- Lese-Empfehlung Kapitel 4.3.1 von [Christopher Molnar](https://christophm.github.io/interpretable-ml-book/extend-lm.html#glm)- Für Interessierte [hier](https://rpsychologist.com/r-guide-longitudinal-lme-lmer) oder [hier](https://rpubs.com/kaz_yos/glmm1)### Kommentierter Lösungsweg```{r}#| echo: false#| results: hidelibrary("dplyr")library("readr")library("lme4")library("ggplot2")## definiert mytheme für ggplot2 (verwendet dabei theme_classic())mytheme <-theme_classic() +theme(axis.line =element_line(color ="black"),axis.text =element_text(size =20, color ="black"),axis.title =element_text(size =20, color ="black"),axis.ticks =element_line(size =1, color ="black"),axis.ticks.length =unit(.5, "cm") )``````{r}# lade dateidf <-read_delim("datasets/stat5-8/Datensatz_novanimal_Uebung_Statistik5.2.csv", ";")# sieht euch die Verteilung zwischen Fleisch und kein Fleisch an,# beide Kategorien kommen nicht gleich häufig vor, ist aber nicht tragischprop.table(table(df$meat)) # gibt die Prozente antable(df$meat) # gibt die absoluten Werte an# definiert das logistische Modell mit ccrs als random intercept und# wendet es auf den Datensatz an# Exkurs für Neugierige# check out ICC: https://www.datanovia.com/en/lessons/intraclass-correlation-coefficient-in-r/# attention: however data needs to be wide format# dauert ein paar Sekundenmod0 <-glmer(meat ~ gender + member + age_group + (1| ccrs),data = df, binomial("logit"))# lasst euch das Modell anzeigen: sieht so aus, als ob v.a. Geschlecht eine# Rolle spielt# Wahrnmeldung kann vernachlässigt werden (aufgrund der unicode resp.# Umlaute in den Variablen)summary(mod0)## erste Interpretation: Geschlecht (Referenzkategorie: Mann) und Alter (Referenzkategorie: junge Personen) scheinen den Fleischkonsum positiv zu beeinflussen + Hochschulzugehörigkeit spielt keien Rolle# d.h. könnte man vernachlässigen. Ich lasse aus inhaltlichen Gründen aber im Modell drin# Pseudo R^2library("MuMIn")r.squaredGLMM(mod0)# das marginale R^2 (r2m) gibt uns die erklärte Varianz der fixen Effekte: hier 4% (das ist sehr wenig)# das conditionale R^2 (r2c) gibt uns die erklärte Varianz für das ganze Modell# (mit fixen und variablen Effekten): hier 29% (ganz ok, aber auch nicht sehr hoch)# für weitere Informationen: https://rdrr.io/cran/MuMIn/man/r.squaredGLMM.html# zusätzliche Informationen, welche für die Interpretation gut sein kann# berechnet den Standardfehler (mehr infos: https://www.youtube.com/watch?v=r-txC-dpI-E oder hier: https://mgimond.github.io/Stats-in-R/CI.html)# weitere info: https://stats.stackexchange.com/questions/26650/how-do-i-reference-a-regression-models-coefficients-standard-errorsse <-sqrt(diag(vcov(mod0)))# zeigt eine Tabelle der Schätzer mit 95% Konfidenzintervall (KI)# => Faustregel: falls 0 im KI enthalten ist, dann ist der Unterschied statistisch NICHT signifikanttab1 <-cbind(Est =fixef(mod0), LL =fixef(mod0) -1.96* se,UL =fixef(mod0) +1.96* se)# erzeugt die Odds Ratiostab2 <-exp(tab1)```### MethodenDie Responsevariable “Fleischkonsum” ist eine binäre Variable. Demnach wird eine multiple logistische Regression mit den Prädiktoren “Alter (Gruppen)”, “Geschlecht” und “Hochschulzugehörigkeit” gerechnet. Da in den Daten gewisse Individuen mehrmals vorkommen, wird das Individuum (Variable ccrs) als variabler Effekt in das Modell aufgenommen.### ErgebnisseDas Geschlecht und das Alter nehmen einen signifikanten Einfluss auf den Fleischkonsum (siehe Table 1): Männer kaufen signifikant häufiger ein fleischhaltiges Gericht als Frauen; junge Personen (15 bis 25-jährig) kaufen signifikant häufiger ein fleischhaltiges Gericht in der Mensa. Es sieht so aus, als ob die Hochschulzugehörigkeit auf den ersten Blick keinen Einfluss nimmt. Aber man müsste auch die Interaktion zwischen Geschlecht und Hochschulzugehörigkeit berücksichtigen, um ein abschliessendes Bild zu bekommen. Das kleine marginale Pseudo-R^2 zeigt auf, dass es nicht das "beste" Modell ist. Insbesondere die tiefe Varianzaufklärung für die randomisierte Variable (r2c; ccrs) scheint mit (nur) 4% sehr gering. Das sind Hinweise dafür, dass im Modell gegebenenfalls noch weitere Faktoren miteinbezogen werden müssten (z.B. Standort Mensa).```{r}#| echo: false# replace rownamesrownames(tab1) <-c("Intercept", "Männer", "Mitarbeitende","26 bis 34-jährig", "35 bis 49-jährig","50 bis 64-jährig")# achtung wir sind hier im log Raumknitr::kable(tab1,col.names =c("Coefficients", "Lower Limit (LL)", "Uppewr Limit (UL)"),caption ="Modellschätzer (Coefficients) mit dazugehörigem 95% Konfidenzintervall", digits =2)```Die Chance, dass Männer ein fleischhaltiges Gericht kaufen ist 2.57mal (+157%) höher als bei Frauen (siehe Table 2). Die Chance, dass 26 bis 34-jährige Personen ein fleischhaltiges Gericht kaufen ist kleiner (-16%) als bei den 15 bis 25-jährigen Personen.```{r}#| echo: false# ersetze row namesrownames(tab2) <-c("Intercept", "Männer", "Mitarbeitende","26 bis 34-jährig", "35 bis 49-jährig","50 bis 64-jährig")knitr::kable(tab2,col.names =c("OR", "Lower Limit (LL)", "Uppewr Limit (UL)"),row.names = ,caption ="Odds Ratio (OR) mit dazugehörigem 95% Konfidenzintervall",digits =2)```