m_randInterceptSlope <- lmer(Reaction ~ Days + (Days | Subject), data = sleepstudy)
diag_df <- tibble(
ajuste = fitted(m_randInterceptSlope),
residu = resid(m_randInterceptSlope),
std = resid(m_randInterceptSlope, type = "pearson", scaled = TRUE),
Subject = sleepstudy$Subject,
Days = sleepstudy$Days
)
re <- ranef(m_randInterceptSlope)$Subject
p1 <- ggplot(diag_df, aes(ajuste, residu)) +
geom_hline(yintercept = 0, colour = col_cp) +
geom_point(colour = col_pop, alpha = 0.6, size = 1.5) +
geom_smooth(method = "loess", se = FALSE, colour = col_np, linewidth = 0.9) +
labs(title = "Linéarité", x = "Valeurs ajustées", y = "Résidus")
p2 <- ggplot(diag_df, aes(ajuste, sqrt(abs(std)))) +
geom_point(colour = col_pop, alpha = 0.6, size = 1.5) +
geom_smooth(method = "loess", se = FALSE, colour = col_np, linewidth = 0.9) +
scale_y_continuous(labels = function(x) fr(x, 1)) +
labs(title = "Homoscédasticité", x = "Valeurs ajustées", y = "√|résidus standardisés|")
p3 <- ggplot(diag_df, aes(sample = std)) +
stat_qq_line(colour = col_cp) +
stat_qq(colour = col_pop, alpha = 0.6, size = 1.5) +
scale_y_continuous(labels = function(x) fr(x, 1)) +
labs(title = "Normalité des résidus", x = "Quantiles théoriques", y = "Résidus standardisés")
p4 <- ggplot(diag_df, aes(reorder(Subject, residu, FUN = median), residu)) +
geom_hline(yintercept = 0, colour = col_cp) +
geom_boxplot(fill = "#cde2fb", colour = col_pop, outlier.colour = col_np, linewidth = 0.4) +
labs(title = "Résidus par sujet", x = "Sujet", y = "Résidus") +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, size = 8))
p5 <- ggplot(re, aes(sample = `(Intercept)`)) +
stat_qq_line(colour = col_cp) +
stat_qq(colour = col_grp, size = 2) +
labs(title = "Intercepts aléatoires", x = "Quantiles théoriques", y = expression(hat(u)[0 * i]))
p6 <- ggplot(re, aes(sample = Days)) +
stat_qq_line(colour = col_cp) +
stat_qq(colour = col_grp, size = 2) +
labs(title = "Pentes aléatoires", x = "Quantiles théoriques", y = expression(hat(u)[1 * i]))
(p1 | p2) / (p3 | p4) / (p5 | p6) + plot_annotation(tag_levels = "A")