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
包)。 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)
一个很老的 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)
、$id
、id:a
、id:b
、id:a:b
等
我发现使用 enframe 和 unnest(因为列表组件的长度可能不同)将它们拼接成一个 tibble 非常有用,可以非常快速地以长格式获取它们,然后可以绘制或测试:
ezanova_residuals_tbl <- enframe(ezanova_residuals) %>% unnest
hist(ezanova_residuals_tbl$value)
shapiro.test(ezanova_residuals_tbl$value)
我自己没有用过这个,但映射的想法也适用于 coefficients
和 fitted.values
函数,如果需要,可以将它们从 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
包)。 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)
一个很老的 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)
、$id
、id:a
、id:b
、id:a:b
等
我发现使用 enframe 和 unnest(因为列表组件的长度可能不同)将它们拼接成一个 tibble 非常有用,可以非常快速地以长格式获取它们,然后可以绘制或测试:
ezanova_residuals_tbl <- enframe(ezanova_residuals) %>% unnest
hist(ezanova_residuals_tbl$value)
shapiro.test(ezanova_residuals_tbl$value)
我自己没有用过这个,但映射的想法也适用于 coefficients
和 fitted.values
函数,如果需要,可以将它们从 ezANOVA 结果中提取出来。它们可能会以一些奇怪的格式出现,但之后需要一些额外的操作。