class: center, middle, inverse, title-slide # Lineare Modelle II ### Statistik mit R
The R Bootcamp
### Oktober 2021 --- layout: true <div class="my-footer"> <span style="text-align:center"> <span> <img src="https://raw.githubusercontent.com/therbootcamp/therbootcamp.github.io/master/_sessions/_image/by-sa.png" height=14 style="vertical-align: middle"/> </span> <a href="https://therbootcamp.github.io/"> <span style="padding-left:82px"> <font color="#7E7E7E"> www.therbootcamp.com </font> </span> </a> <a href="https://therbootcamp.github.io/"> <font color="#7E7E7E"> Statistik mit R | Oktober 2021 </font> </a> </span> </div> --- # Allgemeines lineares Modell .pull-left4[ <ul> <li class="m1"><span>Das allgemeine lineare Modell ist das schweizer Taschenmesser der Statistik.</span></li> <li class="m2"><span>Schliesst ein:</span></li> <ul class="level"> <li><span><high>Regression</high></li></span> <li><span><high>t-Test<high></li></span> <li><span><high>Varianzanalyse (ANOVA)</high></li></span> <li><span>Mediationsanalyse</li></span> <li><span>Faktorenanalyse</li></span> <li><span>Strukturgleichungsmodelle</li></span> </ul> </ul> ] .pull-right5[ <p align="center"> <img src="image/swiss_sm.png"> </p> ] --- # Kategoriale Variablen .pull-left4[ <ul> <li class="m1"><span>Das allgemeine Lineare Modell kann auch mit <high>kategorialen Prädiktoren</high> umgehen.</span></li> <li class="m2"><span>Neben <high>dedizierten Tests</high> (z.B., <mono>t.test()</mono>), können solche Prädiktoren ebenfalls in <mono>lm()</mono> aufgenommen werden.</span></li> <li class="m3"><span>Beispiele</span></li> <ul class="level"> <li><span><high>Gruppenvergleiche</high></li></span> <li><span><high>A/B Tests<high></li></span> </ul> </ul> ] .pull-right5[ <img src="LinearModelsII_files/figure-html/unnamed-chunk-2-1.png" style="display: block; margin: auto;" /> ] --- # `t.test()` .pull-left4[ <ul> <li class="m1"><span>Der t-Test <high>vergleicht zwei Gruppen</high> in einer kontinuierlichen Variable.</span></li> <li class="m2"><span>Die Nullhypothese ist, dass die Gruppen einen <high>identischen Mittelwert</high> besitzen.</span></li> <li class="m3"><span>Beispiele</span></li> <ul class="level"> <li><span><high>Gruppenvergleiche</high></li></span> <li><span><high>A/B Tests<high></li></span> </ul> </ul> ] .pull-right5[ ```r t.test(tour$Nächte_log[tour$Region == 'Europa'], tour$Nächte_log[tour$Region == 'Asien']) ``` ``` ## ## Welch Two Sample t-test ## ## data: tour$Nächte_log[tour$Region == "Europa"] and tour$Nächte_log[tour$Region == "Asien"] ## t = 1.4, df = 40, p-value = 0.2 ## alternative hypothesis: true difference in means is not equal to 0 ## 95 percent confidence interval: ## -0.3593 2.1123 ## sample estimates: ## mean of x mean of y ## 8.695 7.818 ``` ] --- # `lm()` .pull-left4[ <ul> <li class="m1"><span>Der t-Test <high>vergleicht zwei Gruppen</high> in einer kontinuierlichen Variable.</span></li> <li class="m2"><span>Die Nullhypothese ist, dass die Gruppen einen <high>identischen Mittelwert</high> besitzen.</span></li> <li class="m3"><span>Beispiele</span></li> <ul class="level"> <li><span><high>Gruppenvergleiche</high></li></span> <li><span><high>A/B Tests<high></li></span> </ul> </ul> ] .pull-right5[ ```r lm(Nächte_log ~ Region, tour %>% filter(Region %in% c('Europa', 'Asien'))) ``` ``` ## ## Call: ## lm(formula = Nächte_log ~ Region, data = tour %>% filter(Region %in% ## c("Europa", "Asien"))) ## ## Coefficients: ## (Intercept) RegionEuropa ## 7.818 0.876 ``` ] --- # Kodierung .pull-left4[ <ul> <li class="m1"><span>Kategoriale Variablen müssen für die Regression in <high>k-1 neue Variablen kodiert werden</high>.</span></li> <li class="m2"><span>Zwei Kodierungsarten:</span></li> <ul> <li><span><high>Dummy coding</high> setzt Werte einer Kategorie auf 1, anonsten 0<br>→ <high>intercept = 0-Kategorie</high></span></li><br> <li><span><high>Effect coding</high> setzt Werte einer Kategorie auf 1, anonsten -1<br>→ <high>Intercept = ȳ </high></span></li> </ul> </ul> ] .pull-right5[ <p align="center"> <img src="image/coding.png" height=420px> </p> ] --- # Designmatrix .pull-left4[ <ul> <li class="m1"><span>Kategoriale Variablen müssen für die Regression in <high>k-1 neue Variablen kodiert werden</high>.</span></li> <li class="m2"><span>Zwei Kodierungsarten:</span></li> <ul> <li><span><high>Dummy coding</high> setzt Werte einer Kategorie auf 1, anonsten 0<br>→ <high>intercept = 0-Kategorie</high></span></li><br> <li><span><high>Effect coding</high> setzt Werte einer Kategorie auf 1, anonsten -1<br>→ <high>Intercept = ȳ</high></span></li> </ul> </ul> ] .pull-right5[ <p align="center"> <img src="image/design.png"> </p> ] --- # Designmatrix .pull-left4[ <ul> <li class="m1"><span>Kategoriale Variablen müssen für die Regression in <high>k-1 neue Variablen kodiert werden</high>.</span></li> <li class="m2"><span>Zwei Kodierungsarten:</span></li> <ul> <li><span><high>Dummy coding</high> setzt Werte einer Kategorie auf 1, anonsten 0<br>→ <high>intercept = 0-Kategorie</high></span></li><br> <li><span><high>Effect coding</high> setzt Werte einer Kategorie auf 1, anonsten -1<br>→ <high>Intercept = ȳ</high></span></li> </ul> </ul> ] .pull-right5[ <p align="center"> <img src="image/design2.png"> </p> ] --- # Designmatrix .pull-left4[ <ul> <li class="m1"><span>Kategoriale Variablen müssen für die Regression in <high>k-1 neue Variablen kodiert werden</high>.</span></li> <li class="m2"><span>Zwei Kodierungsarten:</span></li> <ul> <li><span><high>Dummy coding</high> setzt Werte einer Kategorie auf 1, anonsten 0<br>→ <high>intercept = 0-Kategorie</high></span></li><br> <li><span><high>Effect coding</high> setzt Werte einer Kategorie auf 1, anonsten -1<br>→ <high>Intercept = ȳ</high></span></li> </ul> </ul> ] .pull-right5[ <p align="center"> <img src="image/design3.png"> </p> ] --- # t-Test - drei Arten .pull-left4[ <ul> <li class="m1"><span>Der t-Test <high>vergleicht zwei Gruppen</high> in einer kontinuierlichen Variable.</span></li> <li class="m2"><span>Die Nullhypothese ist, dass die Gruppen einen <high>identischen Mittelwert</high> besitzen.</span></li> <li class="m3"><span>Beispiele</span></li> <ul class="level"> <li><span><high>Gruppenvergleiche</high></li></span> <li><span><high>A/B Tests<high></li></span> </ul> </ul> ] .pull-right5[ ```r # Regulärer t-test t_test <- t.test(tour$Nächte_log[tour$Region == 'Europa'], tour$Nächte_log[tour$Region == 'Asien'], var.equal = TRUE) # Regression mit dummy lm_dummy <- lm( Nächte_log ~ Region, tour %>% filter(Region %in% c('Europa', 'Asien'))) # Regression mit effect lm_effect <- lm( Nächte_log ~ Region, tour %>% filter(Region %in% c('Europa', 'Asien')), contrasts = list(Region = contr.sum)) ``` ] --- # t-Test - drei Arten .pull-left4[ <ul> <li class="m1"><span>Der t-Test <high>vergleicht zwei Gruppen</high> in einer kontinuierlichen Variable.</span></li> <li class="m2"><span>Die Nullhypothese ist, dass die Gruppen einen <high>identischen Mittelwert</high> besitzen.</span></li> <li class="m3"><span>Beispiele</span></li> <ul class="level"> <li><span><high>Gruppenvergleiche</high></li></span> <li><span><high>A/B Tests<high></li></span> </ul> </ul> ] .pull-right5[ ```r t_test[c('statistic','parameter','p.value')] %>% unlist ``` ``` ## statistic.t parameter.df p.value ## 1.4225 55.0000 0.1605 ``` ```r summary(lm_dummy)$coef ``` ``` ## Estimate Std. Error t value Pr(>|t|) ## (Intercept) 7.8181 0.4964 15.749 4.907e-22 ## RegionEuropa 0.8765 0.6162 1.423 1.605e-01 ``` ```r summary(lm_effect)$coef ``` ``` ## Estimate Std. Error t value Pr(>|t|) ## (Intercept) 8.2564 0.3081 26.800 2.998e-33 ## Region1 -0.4382 0.3081 -1.423 1.605e-01 ``` ] --- # Multiple Kategorien .pull-left4[ <ul> <li class="m1"><span>Bei mehr als zwei Kategorien, werden <high><mono>k - 1</mono> Dummyvariablen</high> erstellt.</span></li> <li class="m2"><span>Anonsten ändert sich nichts.</span></li> </ul> ] .pull-right5[ <img src="LinearModelsII_files/figure-html/unnamed-chunk-7-1.png" style="display: block; margin: auto;" /> ] --- # Multiple Kategorien .pull-left4[ <ul> <li class="m1"><span>Bei mehr als zwei Kategorien, werden <high><mono>k - 1</mono> Dummyvariablen</high> erstellt.</span></li> <li class="m2"><span>Anonsten ändert sich nichts.</span></li> </ul> ] .pull-right5[ <p align="center"> <img src="image/dummy2.png" height=420px> </p> ] --- # `lm()` .pull-left35[ <ul> <li class="m1"><span>Bei mehr als zwei Kategorien, werden <high><mono>k - 1</mono> Dummyvariablen</high> erstellt.</span></li> <li class="m2"><span>Anonsten ändert sich nichts.</span></li> </ul> ] .pull-right55[ ```r # Regression mit allen Regionen lm(Nächte_log ~ Region, tour) ``` ``` ## ## Call: ## lm(formula = Nächte_log ~ Region, data = tour) ## ## Coefficients: ## (Intercept) RegionAmerika RegionAsien ## 7.8006 1.3884 0.0176 ## RegionAustra. RegionEuropa ## 0.9004 0.8941 ``` ] --- # `lm()` .pull-left35[ <ul> <li class="m1"><span>Bei mehr als zwei Kategorien, werden <high><mono>k - 1</mono> Dummyvariablen</high> erstellt.</span></li> <li class="m2"><span>Anonsten ändert sich nichts.</span></li> </ul> ] .pull-right55[ ```r # Regression mit allen Regionen mod <- lm(Nächte_log ~ Region, tour) # Regressionstests summary(mod)$coef ``` ``` ## Estimate Std. Error t value Pr(>|t|) ## (Intercept) 7.80057 1.092 7.14623 8.896e-10 ## RegionAmerika 1.38837 1.337 1.03851 3.028e-01 ## RegionAsien 0.01757 1.196 0.01469 9.883e-01 ## RegionAustra. 0.90041 1.891 0.47624 6.355e-01 ## RegionEuropa 0.89407 1.149 0.77809 4.393e-01 ``` ] --- # `anova()` .pull-left35[ <ul> <li class="m1"><span>Varianzanalyse (ANOVA) ist eine Verallgemeinerung des t-Tests und kann ebenfalls als ein <high>Spezialfall der Regression</high> verstanden werden.</span></li> <li class="m2"><span>Die Nullhypothese ist, dass alle Gruppen einen <high>identischen Mittelwert</high> besitzen.</span></li> </ul> ] .pull-right55[ ```r # Regression mit allen Regionen mod <- lm(Nächte_log ~ Region, tour) # ANOVA tests anova(mod) ``` ``` ## Analysis of Variance Table ## ## Response: Nächte_log ## Df Sum Sq Mean Sq F value Pr(>F) ## Region 4 16.4 4.09 0.86 0.49 ## Residuals 66 314.6 4.77 ``` ] --- # Post-hoc .pull-left35[ <ul> <li class="m1"><span>Identifiziert nach einer ANOVA <high>paarweise Gruppenunterschiede</high>.</span></li> <li class="m2"><span>Kontrolliert für das <high>Problem des multiplen Testens</high></span></li> </ul> </ul> <br> `$$q = \frac{\bar{y}_{max}-\bar{y}_{min}}{SE}$$` ] .pull-right55[ ```r # Post-hoc mit Tukey library(mosaic) TukeyHSD(mod)$Region ``` ``` ## diff lwr upr p adj ## Amerika-Afrika 1.388368 -2.3611 5.138 0.8365 ## Asien-Afrika 0.017571 -3.3360 3.371 1.0000 ## Austra.-Afrika 0.900407 -4.4021 6.203 0.9893 ## Europa-Afrika 0.894066 -2.3286 4.117 0.9361 ## Asien-Amerika -1.370797 -3.9322 1.191 0.5655 ## Austra.-Amerika -0.487961 -5.3285 4.353 0.9986 ## Europa-Amerika -0.494303 -2.8816 1.893 0.9775 ## Austra.-Asien 0.882836 -3.6580 5.424 0.9822 ## Europa-Asien 0.876494 -0.8228 2.576 0.6002 ## Europa-Austra. -0.006341 -4.4513 4.439 1.0000 ``` ] --- # Interaktionen .pull-left35[ <ul> <li class="m1"><span>Interaktionen modellieren <high>Moderationseffekte</high>.</span></li> <li class="m2"><span>Moderation: Effekt einer Variable wird durch eine andere Variable moderiert.</span></li> </ul> ] .pull-right5[
] --- # Interaktionen .pull-left35[ <ul> <li class="m1"><span>Interaktionen modellieren <high>Moderationseffekte</high>.</span></li> <li class="m2"><span>Moderation: Effekt einer Variable wird durch eine andere Variable moderiert.</span></li> </ul> ] .pull-right55[ ```r # Regression mit Interaktion mod <- lm(Nächte_log ~ Äquivalenzeinkommen * Bevölkerung, tour) # Regressionstests summary(mod)$coef ``` ``` ## Estimate Std. Error t value Pr(>|t|) ## (Intercept) 6.389359 0.818306 7.808 0.0000 ## Äq.Eink. 0.000073 0.000048 1.539 0.1344 ## Bevölk. 0.000034 0.000027 1.286 0.2084 ## Äq.Eink.:Bevölk. 0.000000 0.000000 1.111 0.2756 ``` ] --- # Interaktionen .pull-left35[ <ul> <li class="m1"><span>Interaktionen modellieren <high>Moderationseffekte</high>.</span></li> <li class="m2"><span>Moderation: Effekt einer Variable wird durch eine andere Variable moderiert.</span></li> </ul> ] .pull-right55[ ```r # Regression mit Interaktion mod <- lm(Nächte_log ~ Äquivalenzeinkommen + Bevölkerung + Äquivalenzeinkommen:Bevölkerung, tour) # Regressionstests summary(mod)$coef ``` ``` ## Estimate Std. Error t value Pr(>|t|) ## (Intercept) 6.389359 0.818306 7.808 0.0000 ## Äq.Eink. 0.000073 0.000048 1.539 0.1344 ## Bevölk. 0.000034 0.000027 1.286 0.2084 ## Äq.Eink.:Bevölk. 0.000000 0.000000 1.111 0.2756 ``` ] --- # z-Standardisierung .pull-left35[ <ul> <li class="m1"><span>z-Standardisierung, d.h., <high>zentrieren und standardisieren</high>, fördert Interpretatierbarkeit.</span></li> <li class="m2"><span>Standardisierung</span></li> <ul class="level"> <li><span>Standardabweichung = 1</span></li> <li><span>Schafft <high>Vergleichbarkeit der Effekte</high></li></span> </ul> <li class="m3"><span>Zentrieren</span></li> <ul class="level"> <li><span>Mittelwert = 0</span></li> <li><span>Schafft <high>Unabhängigkeit der Interaktionseffekte</high></li></span> </ul> </ul> <br> `$$z(x) = \frac{x - \bar{x}}{s}$$` ] .pull-right55[ ```r # Regression mit allen Regionen mod <- lm(Nächte_log ~ Äquivalenzeinkommen * Bevölkerung, tour %>% mutate_if(is.numeric, scale)) # Regressionstests summary(mod)$coef ``` ``` ## Estimate Std. Error t value Pr(>|t|) ## (Intercept) 0.1366 0.1210 1.129 0.267850 ## Äq.Eink. 0.3432 0.1233 2.782 0.009244 ## Bevölk. 0.7261 0.1232 5.895 0.000002 ## Äq.Eink.:Bevölk. 0.1417 0.1276 1.111 0.275582 ``` ] --- class: middle, center <h1><a href="https://therbootcamp.github.io/SmR_2021Oct/_sessions/LinearModelsII/LinearModelsII_practical.html">Practical</a></h1>