首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中anova盒子图上的Posthoc标签

R中anova盒子图上的Posthoc标签
EN

Stack Overflow用户
提问于 2011-10-21 15:50:38
回答 2查看 14.7K关注 0票数 5

如果我有一些数据,并进行方差分析和后期测试,我如何制作自动添加后期分类的箱线图,而不是必须在R之外编辑图形?

例如,以下是一些要开始的数据:

代码语言:javascript
复制
install.packages("reshape", dependencies=T)
library(reshape)

x <- rnorm(30)
y <- rnorm(30)+1
z <- rnorm(30)+0.5

data.1 <- data.frame(x, y, z)
data.2 <- melt(data.1)

下面是运行简单的单向方差分析和所有计划外比较后测试的代码:

代码语言:javascript
复制
linear.model <- lm(value~variable, data=data.2)
anova(linear.model)

# Analysis of Variance Table
# Response: value
#           Df Sum Sq Mean Sq F value   Pr(>F)   
# variable   2 10.942  5.4710  5.8628 0.004087 **
# Residuals 87 81.185  0.9332     

TukeyHSD(aov(linear.model))

# Tukey multiple comparisons of means
# 95% family-wise confidence level
# Fit: aov(formula = linear.model)
# $variable
          # diff        lwr        upr     p adj
# y-x  0.8344105  0.2396705 1.42915051 0.0034468
# z-x  0.2593612 -0.3353788 0.85410126 0.5539050
# z-y -0.5750493 -1.1697893 0.01969078 0.0602975

现在,我想把x归为"a“组,y归为"b”组,z归为"a,b“组。我可以做一个箱形图,但是你怎么用字母来注释它呢?

代码语言:javascript
复制
boxplot(value~variable, data=data.2)
EN

回答 2

Stack Overflow用户

发布于 2011-10-21 16:01:30

如果您不介意使用ggplot2包,下面是我如何制作该图的方法:

首先,使用文本标签向数据框(data.2)添加一列:

代码语言:javascript
复制
data.2$posthoc[data.2$variable == "x"] <- "a"
data.2$posthoc[data.2$variable == "y"] <- "b"
data.2$posthoc[data.2$variable == "z"] <- "a,b"

安装并加载ggplot2包:

代码语言:javascript
复制
install.packages("ggplot2", dependencies=T)
library(ggplot2)

为了理解该图的代码,我将分步骤构建它。首先,绘制三个组的平均值:

代码语言:javascript
复制
qplot(data=data.2,
    x = variable,
    y = value,
    stat = "summary",
    fun.y = "mean",
    geom = c("point")
    )

接下来,添加文本标签:

代码语言:javascript
复制
qplot(data=data.2,
    x = variable,
    y = value,
    stat = "summary",
    fun.y = "mean",
    label = posthoc,
    vjust = -12,
    geom = c("point", "text")
    )

最后,添加boxplot geom并对其进行一些清理:

代码语言:javascript
复制
qplot(data=data.2,
    x = variable,
    y = value,
    stat = "summary",
    fun.y = "mean",
    label = posthoc,
    vjust = -12,
    ylim = c(-1, 3.5),
    geom = c("point", "text"),
    main="ggplot2 ANOVA boxplot"
    ) + 
    geom_boxplot(aes(fill=posthoc)) + 
    theme_bw()

票数 6
EN

Stack Overflow用户

发布于 2011-10-21 16:35:29

这样会更简单

代码语言:javascript
复制
library(reshape)

x <- rnorm(30)
y <- rnorm(30)+1
z <- rnorm(30)+0.5

data.1 <- data.frame(x, y, z)
data.2 <- melt(data.1)
data.2$newgroup = factor(data.2$variable,labels=c("a","b","ab")) # only line added
boxplot(value~newgroup, data=data.2)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7846493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档