2011-10-21 17 views
5

Bazı verilerim varsa ve ANOVA ve post-hoc testler yapıyorsam, post-hoc sınıflandırmayı otomatik olarak ekleyen bir kutuyu nasıl oluşturabilirim? ?Anova boxplot'ta bulunan posthoc etiketleri R

Örneğin, burada başlamak için bazı veriler şunlardı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) 

Burada basit bir yolu ANOVA ve plansız karşılaştırma post-hoc testler tüm çalıştırmak için kod: At

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 

Bu noktada, "a" grubunda y, "b" grubunda "y" ve "a, b" grubunda z'yi sınıflandırmak istiyorum. Bir kutu çizme yapabilirim, ancak harflerle nasıl ekleyebilirsin?

Birincisi, metin etiketleriyle veri çerçevesi (veri yoktur.2) sütun eklemek: Eğer ggplot2 paketini kullanarak sakıncası yoksa

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

cevap

6

, burada ben çıkarmalarıiçin girerdim

Ben adımda bunu inşa edeceğiz,

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

şekil kodunu anlamak için:

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 paketini kurun ve yük s. Son olarak

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

boxplot geom ekleyip biraz bunu temizlemek:

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

Sonraki, metin etiketleri ekleyin: İlk sadece üç gruplarının her biri için bir araç çizmek

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

Bu işe yarıyor! R grafiğinde aynı notu yapmanın bir yolu var mı? – user1006644

+1

Evet, örn. 'Text (x = 1: 3, y = 3, c ("a", "b", "b, c")) '' boxplot' işlevinden sonra. – rcs

+0

Teşekkürler James & RCS! – user1006644

2

Bu kolay olurdu

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

Teşekkürler Dieter, bu işe yarar! – user1006644