2011-10-21 44 views
5

Nếu tôi có một số dữ liệu và thực hiện các kiểm tra ANOVA và sau-hoc, làm cách nào để tạo một hộp thoại có thể tự động thêm phân loại sau, thay vì phải chỉnh sửa hình bên ngoài R ?Dán nhãn trên ô anova trong R

Ví dụ, sau đây là một số dữ liệu để bắt đầu:

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) 

Dưới đây là code để chạy một ANOVA cách đơn giản và tất cả các so sánh kiểm tra sau hoc ngoài ý muốn:

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 

Tại điểm này, tôi muốn phân loại x trong nhóm "a", y trong nhóm "b" và z trong nhóm "a, b". Tôi có thể làm cho một hộp, nhưng làm thế nào để bạn chú thích nó với các chữ cái?

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

Trả lời

6

Nếu bạn không nhớ bằng cách sử dụng gói ggplot2, dưới đây là cách tôi sẽ làm cho con số này:

Đầu tiên, thêm một cột vào khung dữ liệu của bạn (data.2) với các nhãn văn bản:

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" 

Cài đặt và tải gói ggplot2:

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

để hiểu mã cho con số này, tôi sẽ xây dựng nó trong bước S. Đầu tiên chỉ là vẽ các phương tiện để mỗi người trong số ba nhóm:

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

Tiếp theo, thêm các nhãn văn bản:

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

Cuối cùng, thêm Geom boxplot và làm sạch nó lên một chút:

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 boxplot with labels

+0

Điều đó có hiệu quả! Có cách nào để làm cùng một chú thích trong đồ họa cơ sở R? – user1006644

+1

Có, ví dụ: 'văn bản (x = 1: 3, y = 3, c (" a "," b "," b, c "))' sau hàm 'boxplot'. – rcs

+0

Cảm ơn James & RCS! – user1006644

2

này sẽ đơn giản hơn

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) 
+0

Cảm ơn Dieter, điều này rất hữu ích! – user1006644

Các vấn đề liên quan