---
title: "Lineares Modell, kategoriale Prädiktoren, faktorielle varianzanalytische Modelle"
author: "Peter Zezula"
subtitle: "Analysis of Variance als Regressionsmodell"
output:
  html_document:
    toc: true
    toc_depth: 4
    toc_float: yes
    # theme: paper, cosmo
    theme: spacelab
header-includes:
 - \usepackage{comment}
params:
 soln: TRUE
 todo: TRUE
mainfont: Helvetica
linkcolor: blue
---


### [Rmd](lm_cat_factorial.Rmd)


Dargestellt werden Varianzanalytische Designs mit Focus auf das Allgemeine Lineare Modell.
Es geht um den regressionsanalytischen Ansatz varianzanalytischer Designs.

Hier geht es um mehrfaktorielle varianzanalytische Designs (between subjects models).

Modelle mit Messwiederholung (repeated measures designs, within subjects designs) und gemischte Modelle (mixed models) werden in eigenen Units behandelt.




# Beispiel STAI-State Angstgruppe und Geschlecht


Geschlecht und Gruppe: Gibt es Unterschiede hinsichtlich der State-Angst in neutraler Situation (Statistiktutorium)?





## Vergleich mit Aufsplittung der Varianzkomponenten


Wir passen ein 2*3-faktorielles Design an.
Die Gesamtvarianz des Null-Modells (Residuen) wird durch die Faktoren zunehmend reduziert.
Dies sehen wir am besten, wenn wir uns das dahinter liegende Dummy-Modell in seinen Auswirkungen ansehen.
Die Quadratsummenanteile der Einzel-Prädiktoren (Dummy-Variablen) addieren sich zu den aggregierten Quadratsummen der Summary-Anova-Tabellen.


```{r}
# get data
dd <- read.delim("https://md.psych.bio.uni-goettingen.de/mv/data/virt/v_stait_exam_wide.txt")[c('subj','gender','group', 'neutr')]

# # descriptive data for current design
# require(psych)
# # global descriptives
# psych::describe(dd)
# # group specific descriptives
# # gender and group
# by(dd$neutr, list(dd$gender           ), psych::describe)
# by(dd$neutr, list(            dd$group), psych::describe)
# # combination of groups
# by(dd$neutr, list(dd$gender, dd$group), psych::describe)
# # or using stat.desc() of library(pastecs)
# require(pastecs)
# by(dd$neutr, list(dd$gender, dd$group), pastecs::stat.desc)

# descriptives using summarySE
require(Rmisc)
Rmisc::summarySE(data=dd, "neutr")
Rmisc::summarySE(data=dd, "neutr", groupvars="group")
Rmisc::summarySE(data=dd, "neutr", groupvars="gender")
Rmisc::summarySE(data=dd, "neutr", groupvars=c("group", "gender"))

# we adapt a linear model
m.anx <- lm(neutr ~ gender + group, data=dd)
m.anx <- lm(neutr ~ gender*group, data=dd)
# model summary gives us model test and parameter tests
summary(m.anx)
# we can get the overall sums of squares SS via anova()
anova(m.anx)
# ... or via aov
# aov(neutr ~ gender*group, data=dd)
summary(aov(m.anx))
unique(model.matrix(aov(m.anx)))
# if we want the SS of every single dummy variable, we can do an explicit dummy variable model
# so we add dummy variables to the data frame
dd.t <- cbind(dd, model.matrix(m.anx))
# and adapt the above model using the dummy variables
m.anx.d <- lm(neutr ~ genderm + grouphi + grouplo + genderm:grouphi + genderm:grouplo, data=dd.t)
# SS of the above anova table is the sum of dummy SS of the effect in question
anova(m.anx.d)

# package(car) is required. It has 'Anova()'. The capital 'A' is significant!
require(car)
# model test SS type II is default for car::Anova
Anova(m.anx)
# model test SS type III, only unique contribution of variance is used, Sum Sq of the effects is lowered for all effects but highest interaction
Anova(m.anx, type=3)
# parameters in detail
summary(m.anx)


# SS sum up to zero model residuals
m.0 <- lm(neutr ~ 1, data=dd)
# zero model SS
summary(aov(m.0))

m.a <- anova(m.anx.d)
# we can access the SS 
m.a$`Sum Sq`
# and get the sum
sum(m.a$`Sum Sq`)


# we can use coefficients to get at group means, that are best estimates for response variable.
# women of group 'av'
m.anx$coefficients['(Intercept)']
# men of group 'hi'
m.anx$coefficients['(Intercept)']  + m.anx$coefficients['genderm'] + m.anx$coefficients['grouphi'] + m.anx$coefficients['genderm:grouphi']
# women of group 'lo'
m.anx$coefficients['(Intercept)']  + m.anx$coefficients['grouplo']
# men of group 'lo'
m.anx$coefficients['(Intercept)']  + m.anx$coefficients['genderm'] + m.anx$coefficients['grouplo'] + m.anx$coefficients['genderm:grouplo'] 

# descriptives (as Rcmdr does it)
# means
tapply(dd$neutr, list(gender=dd$gender, group=dd$group), mean, na.rm=TRUE)
# std. deviations
# tapply(dd$neutr, list(gender=dd$gender, group=dd$group), sd, na.rm=TRUE)
# counts
# tapply(dd$neutr, list(gender=dd$gender, group=dd$group), function(x) sum(!is.na(x))) 

```

`lm()` passt ein ANOVA-Modell an, wenn die Prädiktoren (Vorhersagevariablen) vom Typ `factor` sind. 
Die hierfür ev. notwendige dummy-Kodierung wird im Hintergrund ausgeführt.
Default ist dabei eine Referenz-Kodierung.
Die Referenzgruppe ist dabei die Faktorstufe, deren Name im Alphabet vorne liegt.
Beachte: Faktorstufen eines Faktors haben eine Ordnung. Default ist alphabetisch nach dem Faktor-Level. 
vgl. [transformation.html](../transformation/transformation.html)

In unserem Beispiel wird die Ausprägung 'f' ('f' < 'm') des Faktors `gender` 
in Kombination mit der Ausprägung 'av' ('av' < 'hi' < 'lo') des Faktors `group`
zur Referenzgruppe.




## Interaktion und ihre grafische Darstellung {#graphical_representation}


Wir generieren eine graphische Darstellung.
Nach einem Plot zur Visualisierung der Effekte ergänzen wir den Originalplot mit einer Visualisierung der Koeffizienten als Unterschiede der Mittelwerte in Abhängigkeit von den varianzanalytischen Effekten.



```{r interaction_graph}
# get data
dd <- read.delim("https://md.psych.bio.uni-goettingen.de/mv/data/virt/v_stait_exam_wide.txt")[c('subj','gender','group', 'neutr')]
#psych::describe(dd)
# package(car) is required. It has 'Anova()'. The capital 'A' is significant!
require(car)
require(effects)
#m.anx <- (lm(neutr ~ gender*group, data=dd))
m.anx <- (lm(neutr ~ gender*group, data=dd))
# dummy variables
unique(model.matrix(m.anx))
# sum of squares only
aov(m.anx)
# SS and omnibus test of effects with SS type III
car::Anova(m.anx, type=3)
# model summary with all dummy effects tested
summary(m.anx)
# descriptives (as Rcmdr does it)
tapply(dd$neutr, list(gender=dd$gender, group=dd$group), mean, na.rm=TRUE) # means
tapply(dd$neutr, list(gender=dd$gender, group=dd$group), sd, na.rm=TRUE) 
# std. deviations
tapply(dd$neutr, list(gender=dd$gender, group=dd$group), function(x) sum(!is.na(x))) # counts

# the built in possibility
plot(allEffects(m.anx), ask=FALSE)

# using ggplot and custom colors
require(ggplot2)
# colors by rgb values
c_colors <- c("#336600", "#660033")
c_colors <- c("lavenderblush","lightblue")
pplot <- ggplot(dd, x=group, y=neutr, aes(group, neutr, fill = gender)) +
  # set colors used for bars
  scale_fill_manual(values=c_colors) +
  # partially overlaping bars
  stat_summary(fun.y=mean, geom="bar", position=position_dodge(width=0.7)) +
  # add error information
  stat_summary(fun.data = mean_cl_normal, geom = "errorbar", position=position_dodge(width=0.7), width=0.2) +
  # put points on top of bars
  stat_summary(fun.data = mean_cl_normal, geom = "point", shape=21, size=5, position=position_dodge(width=0.7)) +
  # add verbose axis labels
  labs(x = "Anxiety-Group", y = "STAI-Trait")
# show it
pplot

# we add the coefficients meaning
pplot +
  # we add some helper lines
  geom_hline(yintercept = coefficients(m.anx)[1], linetype="dotted") +
  geom_hline(yintercept = m.anx$coefficients['(Intercept)'] + m.anx$coefficients['genderm'], linetype="dotted") +
  # effect genderm 
  geom_segment(aes(x = 1.1, 
    y= m.anx$coefficients['(Intercept)'], 
    xend = 1.1, yend = m.anx$coefficients['(Intercept)'] + m.anx$coefficients['genderm']), 
    arrow = arrow(length = unit(0.2, "cm")), col='red') +
  geom_text(x=1.15, y = m.anx$coefficients['(Intercept)'] + m.anx$coefficients['genderm'] / 2, label="genderm", color="red", hjust=0) +
  # effect grouphi
  geom_segment(aes(x = 1.9, 
    y= m.anx$coefficients['(Intercept)'], 
    xend = 1.9, yend = m.anx$coefficients['(Intercept)'] + m.anx$coefficients['grouphi']), 
    arrow = arrow(length = unit(0.2, "cm")), col='green') +
  geom_segment(aes(x = 2, y= m.anx$coefficients['(Intercept)'] + m.anx$coefficients['genderm'], 
      xend = 2, 
      yend = m.anx$coefficients['(Intercept)']  + m.anx$coefficients['genderm'] + m.anx$coefficients['grouphi']), 
      arrow = arrow(length = unit(0.2, "cm")), col='green') +
  geom_text(x=2, y = m.anx$coefficients['(Intercept)'] + m.anx$coefficients['grouphi'] / 2, label="grouphi", color="green", hjust=0) +
  # effect grouplo
  geom_segment(aes(x = 2.9, 
    y= m.anx$coefficients['(Intercept)'], 
    xend = 2.9, 
    yend = m.anx$coefficients['(Intercept)'] + m.anx$coefficients['grouplo']), 
    arrow = arrow(length = unit(0.2, "cm")), col='green') +
  geom_segment(aes(x = 3.0, 
    y= m.anx$coefficients['(Intercept)'] + m.anx$coefficients['genderm'], 
    xend = 3.0, 
    yend = m.anx$coefficients['(Intercept)'] + m.anx$coefficients['genderm'] + m.anx$coefficients['grouplo']), 
    arrow = arrow(length = unit(0.2, "cm")), col='green') +
  geom_text(x=3, y = m.anx$coefficients['(Intercept)'] + m.anx$coefficients['grouplo'] / 2, label="grouplo", color="green", hjust=0) +
  # effect genderm:grouphi
  geom_segment(aes(x = 2.1, y= m.anx$coefficients['(Intercept)'] + m.anx$coefficients['genderm'] + m.anx$coefficients['grouphi'], 
    xend = 2.1, 
    yend = m.anx$coefficients['(Intercept)']  + m.anx$coefficients['genderm'] + m.anx$coefficients['grouphi'] + m.anx$coefficients['genderm:grouphi']), 
    arrow = arrow(length = unit(0.2, "cm")), col='blue') +
  geom_text(x=2.2, 
    y = m.anx$coefficients['(Intercept)']  + m.anx$coefficients['genderm'] + m.anx$coefficients['grouphi'] + m.anx$coefficients['genderm:grouphi'] / 2, 
    label="genderm:grouplo", color="blue", hjust=0)  +
  # effect genderm:grouplo
  geom_segment(aes(x = 3.1, 
    y= m.anx$coefficients['(Intercept)'] + m.anx$coefficients['genderm'] + m.anx$coefficients['grouplo'], 
    xend = 3.1, 
    yend = m.anx$coefficients['(Intercept)']  + m.anx$coefficients['genderm'] + m.anx$coefficients['grouplo'] + m.anx$coefficients['genderm:grouplo']), 
    arrow = arrow(length = unit(0.2, "cm")), col='blue') +
  geom_text(x=3.1, 
    y =  m.anx$coefficients['(Intercept)']  + m.anx$coefficients['genderm'] + m.anx$coefficients['grouplo'] + m.anx$coefficients['genderm:grouplo'] / 2.5, 
    label="genderm:grouplo", color="blue", hjust=1) 

# the model summary gives us the coefficients visualized
summary(m.anx)

# descriptives again
require(Rmisc)
summarySE(data=dd, "neutr", c("group", "gender"))
detach("package:Rmisc", unload=TRUE)

coefficients(m.anx)


```


## Grafik in Schwarz-Weiß

```{r}
# get data
dd <- read.delim("https://md.psych.bio.uni-goettingen.de/mv/data/virt/v_stait_exam_wide.txt")[c('subj','gender','group', 'neutr')]
require(ggplot2)
ggplot(dd, aes(x=group, y=neutr, fill=gender)) +
  # define colors
  scale_fill_manual(values=c("#CCCCCC","#FFFFFF")) +
  # create white background etc
  #theme_bw() +
  stat_summary(fun.y=mean, geom="bar", position=position_dodge(width=0.7), colour='black') +   # position=position_dodge(width=0.7) manipulates the overlap of the bars
  # add error information
  stat_summary(fun.data = mean_cl_normal, geom = "errorbar", position=position_dodge(width=0.7), width=0.2) + # position=position_dodge(width=0.7) puts error bars due to the overlap
  # put big points on top of bars
  stat_summary(fun.data = mean_cl_normal, geom = "point", shape=21, size=5, position=position_dodge(width=0.7)) + # position=position_dodge(width=0.7) puts mean points due to the overlap
  # add verbose axis labels
  labs(x = "Anxiety-Group", y = "STAI-Trait")


```


## Liniengrafik

```{r}
# get data
dd <- read.delim("https://md.psych.bio.uni-goettingen.de/mv/data/virt/v_stait_exam_wide.txt")[c('subj','gender','group', 'neutr')]
require(ggplot2)

ggplot(dd, aes(x=group, y=neutr, fill=gender)) +
  # define colors
  scale_fill_manual(values=c("#CCCCCC","#FFFFFF")) +
  # create white background etc
  #theme_bw() +
  stat_summary(fun.y=mean,  aes(x=group, group=gender), geom="line", position=position_dodge(width=0.7)) +
  # add error information
  stat_summary(fun.data = mean_cl_normal, geom = "errorbar", position=position_dodge(width=0.7), width=0.2) +
  # put big points on top of bars
  stat_summary(fun.data = mean_cl_normal, geom = "point", shape=21, size=5, position=position_dodge(width=0.7)) +
  # add verbose axis labels
  labs(x = "Anxiety-Group", y = "STAI-Trait")

```




## Ansatz mit ezANOVA


`ezANOVA()` bietet einen einfachen (eazy) Zugang zu varianzanalytischen Designs in R.
Die wichtigsten Voraussetzungsprüfungen sind Default.
Komfortable Visualisierungen sind mit `ezPlot` möglich.


```{r}
# get data
dd <- read.delim("https://md.psych.bio.uni-goettingen.de/mv/data/virt/v_stait_exam_wide.txt")[c('subj','gender','group', 'neutr')]
# descriptive data for current design
require(ez)
m.anx <- ezANOVA(dd, dv=neutr,  wid=subj, between = .(gender,  group))
m.anx
ezPlot(dd, dv=neutr,  x=group, wid=subj, between = .(gender,  group), split = gender)
```


## Simple Effects Ansatz

Für jede Stufe eines Faktors werden die Unterschiede auf einem anderen Faktor berechnet und getestet.
Alpha Akkumulation ist hier ein Thema.


## Ausflug: R-Commander:

Levine Test auf Varianzenhomogenität in den Subgruppen: 'Statistik | Varianzen | Levene-Test'

Modell: 'Statistik | Mittelwerte vergleichen | Mehrfaktorielle Varianzanalyse'

Quadratsummentyp festlegen in R-Commander: Modell berechnen und auswählen. Dann:
'Modelle | Hypothesentests | ANOVA table'

Visualisierung:
'Modelle | Grafiken | Effect plots'

alternativ über ggplot-Plugin KMggplot2
'KMggplot2 | Box plot ... '

line chart geht hier nicht oder nur über Umwege, weil stetige x-Variable fehlt  






# Beispiele, Übungen / Exercises



## Beispiel Everitt Mini-Datensatz

Im Beispieldatensatz sind die Faktoren A und B bereits effektkodiert bzw. kontrast-kodiert und können so direkt als Dummy-Variablen benutzt werden, 
um einen regressionsanalytischen Ansatz zu rechnen.

## balanced design

Differenz der Regressions SumSq zwischen 1-Prädiktor-Modell und 2-Prädiktor-Modell ist SumSq für Faktor B in Anova-Modell
Differenz der Regressions SumSq zwischen 2-Prädiktor-Modell und 3-Prädiktor-Modell (Interaktion) ist SumSq für Interaktionsterm in Anova-Modell

Regressionsgewichte verändern sich nicht mit Aufnahme neuer Prädiktoren
Faktoren im balancieren Modell sind unabhängig (orthogonal)
Aufnahmereihenfolge der Faktoren (incl. WW) spielt keine Rolle

die konstante Gesamt-Quadratsumme wird auf immer mehr Effekte aufgeteilt
Residual-Quadratsumme nimmt immer mehr ab.



```{r}
# read datafiles
va.2x2.bal   <- read.delim("https://md.psych.bio.uni-goettingen.de/mv/data/be/e-2x2-bal.txt")
attach(va.2x2.bal)

# descriptive data
require(psych)
by(va.2x2.bal$y, list(A, B), describe)

# fit regression with explanatory variable A
m.A <- lm(y ~ A)
summary(m.A)
anova(m.A)

# add B
m.A.B <- lm(y ~ A + B)
m.B.A <- lm(y ~ B + A)
summary(m.A.B)
anova(m.A.B)

# difference in SumSq between m.A and m.A.B is SumSq for factor B
# add interaction
m.A.B.AB <- lm(y ~ A + B + A:B)
summary(m.A.B.AB)
anova(m.A.B.AB)

# difference SumSq of regression between 2 (A, B) and 3 (A, B, A:B) predictor model is SumSq for interaction
# SumSq der Residuen im 3-Prädiktor-Modell ist SumSq error-Quadratsumme im Anova-Modell
# SS resid in 3 predictor model is SS error in Anova (residuals)
# regression weights (coefficients) don't change when new explanatory variables are entered in model
# Regressionsgewichte verändern sich nicht mit Aufnahme neuer Prädiktoren
# factors and their effects are orthogonal
# sequence of entered explanatory variables doesn't matter
summary(m.A.B)
summary(m.B.A)
anova(m.A.B)
anova(m.B.A)

# the constant total SS is divided in more and more effects
# residual SS diminishes with every additional effect entered in the model

detach(va.2x2.bal)
```





## Beispiel Aktivation und Leistung unter Druck


2-faktoriell balanced, 2 x 3 Faktorstufen

Szenario: Aktivation und Leistung unter Druck in bei Sensation-Seekern und Controls.

generierte Daten, 2 x 3 Design (A, B), 30 Beobachtungen pro Gruppe

Faktor A: Druck in 3 Stufen, je höher die Stufe, desto höher der Druck.

Faktor B: zwei Gruppen: Sensation-Seeker (B=1) vs. Kontrollgruppe (B=2)

```
sseek  pressure dsseek dpressure1 dpressure2 dsseek_pressure1 dsseek_pressure2
y=1    no =0    [ 1]   [ 1]       [ 0]
c=2    med=1    [-1]   [ 0]       [ 1]
       hi= 2           [-1]       [-1]

1      0          1      1          0         1                0     # sseek   no
1      1          1      0          1         0                1     # sseek  med
1      2          1     -1         -1        -1               -1     # sseek   hi
2      0         -1      1          0        -1                0     # control no
2      1         -1      0          1         0               -1     # control med 
2      2         -1     -1         -1         1                1     # control hi
```

Leistung in einer Prüfung (Werte von 0 - 100, je höher desto höher die Leistung).

Daten (Text, R):

[https://md.psych.bio.uni-goettingen.de/data/virt/v-2x3-bal.txt]

```{r}
dd <- read.delim("https://md.psych.bio.uni-goettingen.de/mv/data/virt/v-2x3-bal.txt")
```

Lösungsansatz: Dummy-Codierung der Gruppenzugehörigkeit. Dichotome Variablen können behandelt werden wie intervallskalierte. Aufsplittung von mehr als zwei Faktorstufen in (Anzahl-der-Faktorstufen - 1) binäre Dummy-Variablen. Hier demonstriert am Beispiel der Effektcodierung (vgl. Dummy-Kodierungs-Seite).

Beim Lösungsansatz Regression mit Dummy-Kodierung können mit den Koeffizienten die Gruppenmittelwerte berechnet werden. Die jeweiligen Gruppenmittelwerte sind die Vorhersage für eine Person mit einer bestimmten Faktorstufenkombination.
(Intercept)  57.0918	
dsseek 	-8.7570 	Effekt Sensation-Seeker zu sein oder nicht.Sensation-Seeker zu sein vermindert die Leistung um durchschnittlich 8.76 Leistungspunkte
dpressure1 	-13.3728 	Effekt bei mildem Druck
dpressure2  	10.9439 	Effekt bei starkem Druck
dsseek_pressure1 	3.3425 	Interaktion Sensation-Seeker und milder Druck
dsseek_pressure2 	-11.8567 	Interaktion Sensation-Seeker und starker Druck

 

 

Interpretation der Koeffizienten: Bei Effektkodierung entspricht der Intercept dem Gesamtmittelwert (grand mean). Die einzelnen (Teil-)Effekte werden auf ihn aufaddiert.

Vorhersage sseek no-pressure

intercept + 1 dsseek + 1 dpressure1 + 0 dpressure2 + 1 dsseek_pressure1 + 0 dsseek_pressure2

57.09 + (-8.75) + (-13.37) + 3.34  = 38.31

Vorhersage control, hoher Druck

intercept + (-1) dsseek + (-1) dpressure1 + (-1) dpressure2 + 1 dsseek_pressure1 + 1 dsseek_pressure2

57.09 + 8.75 + 13.37 - 10.94 + 3.34 - 11.86 = 59.75

 












## Beispiel Conway


Telefonieren und Autofahren

Quelle: [https://www.youtube.com/watch?v=bd2VaB1iWnA]

Faktoren (UV):
- Schwierigkeit der Fahrsituation (gering, hoch) der zu fahrende Kurs im Simulator
- Schwierigkeit der Konversation (keine Konv., geringe, hohe)
  keinerlei Telefongespräch
  geringe Konversationsschwierigkeit: wiederholen, was am Telefon gehört wird
  hohe Konversationsschwierigkeit: ein Wort ausdenken und nennen, das mit dem letzten Buchstaben des letzten Wortes des am Telefon Gesagten beginnt.

2*3 faktorielles (varianzanalytisches) Design

Ergebnisvariable (AV):
- Fehler im Fahrsimulator

Daten: 
Strayer & Johnson (2001)

Graph: x: Konversationsschwierigkeit, Fahrschwierigkeit als Balkenpaar

Es werden 3 F-Ratios berechnet.
Verhältnis systematischer Varianz zu unsystematischer Varianz ()

Haupteffekte: Der Effekt eines Faktors wenn über die Faktorstufen des (der) anderen Faktors (Faktoren) gemittelt wird.
Interaktionen: Die Wirkung eines Faktors hängt ab von der Ausprägung eines **anderen** Faktors.
Einfacher Effekt: Die (sig.) Wirkung eines Faktors bei einer bestimmten Ausprägung eines anderen Faktors.

Orthogonalität der Effekte (bei gleicher Zellbesetzung) by design.
Quadratsummen (Varianzanteile) in faktoriellen Designs sind additiv. Alle Prädiktoren sind hier orthogonal.

SS_s/AB bedeutet: Vpn (s) sind abhängig von der Zuordnung hinsichtlich zweier Gruppierungsvariablen/Faktoren (A und B)

Error Term ist für alle Vergleiche derselbe.
Effektgröße: Eta^2
- komplett: SS_effect/SS_total
- partiell: SS_effect/(SS_effect + SS_s/AB)
  hier werden die anderen systematischen Effekte auspartialisiert

Voraussetzungen:
- stetige Antwortvariable (AV)
- normalverteilte Antwortvariable
- Homogenität der Varianzen (z. B. Levintest)

Wenn man die Effektgrößen pro Faktorstufe Konversationsschwierigkeiten anschaut, erkennt man, 
dass der Effekt der Fahr-Schwierigkeit stark von der Konversationsschwierigkeit abhängt.

Inhaltlicher Nachtrag: Textnachrichten schreiben ist noch deutlich gefährlicher als telefonieren.


Rechenbeispiel:

Beispiel phonological similarity effect in simple and complex span tasks

https://www.youtube.com/watch?v=T_7XuaFYfLs
Daten: 


<!--
### Beispiel Film Data

Film Data

{}todo

```{r}
require("psych")
dd <- read.delim("https://md.psych.bio.uni-goettingen.de/mv/data/div/affect.txt", fileEncoding = "UTF-8")
t.test(dd$state1 ~ dd$Study)
psych::describe(dd)
```

-->




# Links und Referenzen

[Field (2012, p. 245)][field] **Kapitel 7: Regression**

<!-- this does not appear in html-page. It's used only to arm links and references. -->
[field]: https://www.uk.sagepub.com/dsur/main.htm "Field et al (2012). Discovering Statistics using R"


# check

- interaction or moderation
  multiplication of predictive variables to get an additional predictive variable
  
- effect of group membership in one factor depends on group membership in other factor(s)

- visualization of parameters interaction effects included
  [graphical representation](#graphical_representation)



## Screencast 

- Multiple Regression - check
  [StudIP](https://studip.uni-goettingen.de/plugins.php/mediacastplugin/media/check/557da707f35cbedf27871677d1e8e982/088f12b87c22e35bf595c5abad63cf8e/126?v=lm_cat_factorial-de-2020-06-.mp4) - 
[ownCloud](https://owncloud.gwdg.de/index.php/s/9aXfrvsnNRcP0YB)



Version: `r format(Sys.time(), '%d %B, %Y %H:%M')`