ggplot2 残差与 ezANOVA

ggplot2 residuals with ezANOVA

I 运行 使用 ezANOVA 的三向重复测量方差分析。

anova_1<-ezANOVA(data = main_data, dv = .(rt), wid.(id), 
           within = .(A,B,C), type = 3, detailed = TRUE)

我试图通过 qqplot 查看残差的情况,但我不知道如何找到它们,也不知道它们是否存在。使用我的 lme 模型,我只需从模型中提取它们

main_data$model_residuals <- as.numeric(residuals(model_1))

并绘制它们

   residuals_qq<-ggplot(main_data, aes(sample = main_data$model_residuals)) +       
        stat_qq(color="black", alpha=1, size =2) + 
        geom_abline(intercept = mean(main_data$model_residuals), slope = sd(main_data$model_residuals))

我想使用 ggplot,因为我想在绘图中保持一致性。

编辑

也许我不清楚我要做什么。使用 lme 模型,我可以简单地从 main_data data.frame 中的残差对象创建变量 model_residuals,然后包含我在 ggplot 中绘制的残差。我想知道 ezAnova 中的残差是否可能有类似的东西,或者我是否有办法掌握方差分析的残差。

我在使用 ezANOVA 时遇到了同样的问题。我寻求的解决方案是切换到 ez.glm(来自 afex 包)。 ezANOVAez.glm 都包装了来自不同包的函数,所以你应该得到相同的结果。 对于您的示例,这看起来像这样:

anova_1<-ez.glm("id", "rt", main_data, within=c("A","B","C"), return="full")
nice.anova(anova_1$Anova) # show the ANOVA table like ezANOVA does.

然后你可以拉出lm对象并以通常的方式得到你的残差:

residuals(anova_1$lm)

希望对您有所帮助。


编辑: 一些改动以使其适用于最新版本

anova_1<-aov_ez("id", "rt", main_data, within=c("A","B","C"))
print(m1)
print(m1$Anova)
summary(m1$Anova)
summary(m1)

然后你可以拉出lm对象并以通常的方式得到你的残差:

residuals(anova_1$lm)

一个很老的 post 我知道,但是可以使用 ggplot 在使用 ez 包对数据建模后使用此函数绘制残差:

proj(ez_outcome$aov)[[3]][, "Residuals"]

然后:

qplot(proj(ez_outcome$aov)[[3]][, "Residuals"])

希望对您有所帮助。

也可能添加到旧的 post,但我也遇到了这个问题,因为这是搜索这个问题时弹出的第一件事,我想我可以添加我的解决方法它。

我发现如果你在 ezANOVA 设置中包含 return_aov = TRUE 参数,那么残差就在那里,但是 ezANOVA 将它们划分到它在每个主要和交互效应中产生的结果列表中,类似于如果您在本例中包含主题 ID 的错误术语,基础 aov() 将如何处理。

通过在 ezANOVA 中将残差函数映射到这个 aov sublist 上,而不是主输出,可以使用 purrr 将这些拉出到它们自己的列表中。所以从题例来看,变成:

anova_1 <- ezANOVA(data = main_data, dv = .(rt), wid = .(id), 
           within = .(A,B,C), type = 3, detailed = TRUE, return_aov = TRUE)

ezanova_residuals <- purrr::map(anova_1$aov, residuals)

这将生成一个列表,其中每个条目都是来自 ezANOVA 模型的一部分的影响和交互的残差,即 $(Intercept)$idid:aid:bid:a:b

我发现使用 enframe 和 unnest(因为列表组件的长度可能不同)将它们拼接成一个 tibble 非常有用,可以非常快速地以长格式获取它们,然后可以绘制或测试:

ezanova_residuals_tbl <- enframe(ezanova_residuals) %>% unnest

hist(ezanova_residuals_tbl$value)

shapiro.test(ezanova_residuals_tbl$value)

我自己没有用过这个,但映射的想法也适用于 coefficientsfitted.values 函数,如果需要,可以将它们从 ezANOVA 结果中提取出来。它们可能会以一些奇怪的格式出现,但之后需要一些额外的操作。