我用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模型,我可以简单地从model_residuals
中的残差对象创建变量main_data data.frame
,然后包含我在ggplot中绘制的残差。我想知道ezAnova中的残差是否可能存在类似情况,或者我是否可以获得ANOVA残差的方法。
答案 0 :(得分:3)
我在使用ezANOVA时遇到了同样的麻烦。我采用的解决方案是切换到ez.glm
(来自afex
包)。 ezANOVA
和ez.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)
答案 1 :(得分:1)
我知道一个很老的帖子,但是可以使用ggplot
包通过以下功能对数据建模后使用ez
绘制残差:
proj(ez_outcome$aov)[[3]][, "Residuals"]
然后:
qplot(proj(ez_outcome$aov)[[3]][, "Residuals"])
希望有帮助。
答案 2 :(得分:0)
也可能添加到旧帖子中,但是我也遇到了这个问题,因为这是搜索此问题时弹出的第一件事,我想我可能会添加如何解决的问题。
我发现,如果您在ezANOVA设置中包含return_aov = TRUE
参数,则残差就在其中,但是ezANOVA将残差划分到它在每个主要和交互作用产生的结果列表中,类似于基础如果您在这种情况下为主题ID包含一个错误字词,那么aov()
会这样做。
通过将残差函数映射到ezANOVA中的aov
子列表而不是主输出上,可以使用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)
,$id
,id:a
,id:b
,id:a:b
等
我发现使用enframe和nest(将列表组件的长度可能不同)将它们缝成小块是非常有用的,因为它们很快就会得到长格式,然后可以对其进行绘制或测试:>
ezanova_residuals_tbl <- enframe(ezanova_residuals) %>% unnest
hist(ezanova_residuals_tbl$value)
shapiro.test(ezanova_residuals_tbl$value)
我自己并没有使用它,但是如果需要,映射思想也可以用于coefficients
和fitted.values
函数,以将其从ezANOVA结果中拉出。它们可能以一些奇怪的格式出现,但是之后需要一些额外的操作。