Метки Posthoc на anova boxplot в R

#r #boxplot #anova #posthoc

#r #блокплощадка #anova #posthoc

Вопрос:

Если у меня есть некоторые данные и я выполняю тесты ANOVA и post-hoc, как мне создать блокплощадку, которая автоматически добавляет классификацию post-hoc, вместо того, чтобы редактировать фигуру за пределами R?

Например, вот некоторые данные для начала:

 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)
  

Вот код для запуска простого одностороннего ANOVA и всех незапланированных сравнительных тестов post-hoc:

 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». Я могу создать boxplot, но как вы аннотируете его буквами?

 boxplot(value~variable, data=data.2)
  

Ответ №1:

Если вы не возражаете против использования пакета ggplot2, вот как я бы изобразил:

Сначала добавьте столбец в свой фрейм данных (data.2) с текстовыми метками:

 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:

 install.packages("ggplot2", dependencies=T)
library(ggplot2)
  

Чтобы понять код для рисунка, я построю его поэтапно. Сначала просто постройте средние значения для каждой из трех групп:

 qplot(data=data.2,
    x = variable,
    y = value,
    stat = "summary",
    fun.y = "mean",
    geom = c("point")
    )
  

Затем добавьте текстовые метки:

 qplot(data=data.2,
    x = variable,
    y = value,
    stat = "summary",
    fun.y = "mean",
    label = posthoc,
    vjust = -12,
    geom = c("point", "text")
    )
  

Наконец, добавьте геометрию boxplot и немного ее очистите:

 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()
  

R Блокплощадка anova с метками

Комментарии:

1. Это работает! Есть ли способ сделать ту же аннотацию в базовой графике R?

2. Да, например, text(x=1:3, y=3, c("a", "b", "b, c")) после boxplot функции.

Ответ №2:

Это было бы проще

 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)