Foliensatz
Praxis-Teil
Analysis of Covariance
m.ancova <- lm(pss.1 ~ 1 + group + scale(pss.0), data = implist[[1]])
summary(m.ancova)
# Prüfe Voraussetzungen:
# - Varianzhomogenität: gleichförmige Streuung der Residuen um 0
# (-> Residuals vs. Fitted Plot)
# - Normalverteilung der Residuen (-> Q-Q Plot)
# Residuals vs. Fitted
plot(m.ancova, 1)
# Q-Q Plot
plot(m.ancova, 2)
# Analysis of Variance des Modells
anova(m.ancova)
# Zum Vergleich: Fit ohne Kovariate
lm(pss.1 ~ 1 + group, data = implist[[1]]) %>%
anova()
ANCOVA in Multipel Imputierten Daten
# Liste muss Klasse "mitml.list" besitzen!
class(implist) = c("mitml.list", "list")
# Fitte ANCOVA-Modell in allen MI-Sets
with(implist, lm(pss.1 ~ 1 + group + pss.0)) %>%
testEstimates() -> mi.ancova
# Extrahiere F-Werte
with(implist, lm(pss.1 ~ 1 + group + pss.0)) %>%
map_dbl(~anova(.)$`F value`[1]) -> Fvalues
# Kombiniere F-Werte mit Rubin-Regeln
micombine.F(Fvalues, 1)
ANCOVA bei sekundären Endpunkten
# Definiere Namen alles zu analysierenden Variablen
# (ohne Zeitangabe)
test.vars = c("pss", "cesd", "hadsa",
"isi", "mbi", "pswq")
# Generiere Modellformeln für Post- und FU-Messzeitpunkt
formula.1 = paste(test.vars, ".1 ~ 1 + group + ", test.vars, ".0",
sep = "")
formula.2 = paste(test.vars, ".2 ~ 1 + group + ", test.vars, ".0",
sep = "")
# Nutze "map", um Funktion über alle _Formeln_(!) anzuwenden:
# 1. Berechne ANCOVA für spezifisches Outcome, unter Kontrolle der
# Baselinemessung
# 2. Extrahiere Ergebnisse des Gruppenterms
# 3. Extrahiere F-Werte und aggregiere mit Rubin-Regeln
# 4. Gebe generiertem data.frame neue Variablennamen
# 5. Füge Spalten für Variable und MZP hinzu
as.list(c(formula.1, formula.2)) %>%
map_dfr(function(x){
with(implist, lm(as.formula(x))) %>%
testEstimates() -> res
res$estimates[2,] -> res.group
with(implist, lm(as.formula(x))) %>%
map_dbl(~anova(.)$`F value`[1]) -> Fvalues
micombine.F(Fvalues, 1, display = FALSE) -> Fvalue.mi
c(res.group, Fvalue.mi)
}) %>%
set_colnames(c("md", "SE", "t", "df.mi",
"p.t", "RIV", "FMI", "F", "p.F",
"df.1", "df.2")) %>%
bind_cols(variable = rep(test.vars, 2),
time = rep(1:2, each = 6), .) -> mi.ancova.full
# Speichere Ergebnisse als Excel-Sheet
write_xlsx(mi.ancova.full, "mi_ancova_full.xlsx")