带有ezANOVA的ggplot2残差

时间:2015-05-14 13:07:24

标签: r ggplot2

我用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残差的方法。

3 个答案:

答案 0 :(得分:3)

我在使用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)

答案 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)$idid:aid:bid:a:b

我发现使用enframe和nest(将列表组件的长度可能不同)将它们缝成小块是非常有用的,因为它们很快就会得到长格式,然后可以对其进行绘制或测试:

ezanova_residuals_tbl <- enframe(ezanova_residuals) %>% unnest

hist(ezanova_residuals_tbl$value)

shapiro.test(ezanova_residuals_tbl$value)

我自己并没有使用它,但是如果需要,映射思想也可以用于coefficientsfitted.values函数,以将其从ezANOVA结果中拉出。它们可能以一些奇怪的格式出现,但是之后需要一些额外的操作。