【问题标题】:ggplot2 residuals with ezANOVA带有ezANOVA的ggplot2残差
【发布时间】:2015-07-26 02:54:54
【问题描述】:

我使用 ezANOVA 运行了三向重复测量 ANOVA。

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 中的残差是否有类似的可能性,或者是否有办法获取我的 ANOVA 的残差。

【问题讨论】:

  • 您的语法错误。您可以通过变量名而不是引号(或者您可以使用aes_string)或通过data.frame 中的变量名来调用变量。您的问题与ezANOVA 无关。考虑修改标题以反映您想要实现的目标。

标签: r ggplot2


【解决方案1】:

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

【讨论】:

  • 它应该说anova_1,它读取m1,函数的名称现在是aov_ez,参数return="full"不再被接受,nice.anova不再存在,你可以打印(anova_1)或nice(anova_1),也可以为一堆事情做总结(anova_1)或总结(anova_1$Anova)。是的,之后这段代码应该可以工作了。
【解决方案2】:

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

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

然后:

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

希望对你有帮助。

【讨论】:

    【解决方案3】:

    也可能会添加到旧帖子中,但我也遇到了这个问题,因为这是搜索这个问题时弹出的第一件事,我想我可能会添加我是如何解决它的。

    我发现如果你在 ezANOVA 设置中包含 return_aov = TRUE 参数,那么残差就在那里,但是 ezANOVA 将它们划分到它在每个主要和交互效果中产生的结果列表中,类似于 base @987654322如果您在本例中包含主题 ID 的错误术语,@ 会这样做。

    通过将残差函数映射到 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 结果中提取出来。它们可能会以一些奇怪的格式出现,但之后需要一些额外的操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-23
      • 2021-05-15
      • 2020-12-02
      • 2018-04-30
      • 2020-10-22
      • 2021-04-29
      • 2020-03-25
      • 2014-08-02
      相关资源
      最近更新 更多