2015-08-14 2 views
0

Привет У меня проблема с ошибками на рисунке. Вот мой кодОшибки ошибок SD неверны

library(ggplot2) 
val1 <- sample(1:18) 
val2 <- sample(20:50, 18) 
mylet<-c("A", "B", "C") 
time <-rep(mylet,times=6) 
id<-rep(c("WT", "KO"), each=9) 
x1 <- data.frame(id, time, val1, val2) 
x1$id=factor(x1$id, c("WT","KO")) 

cols = c(3,4) 
df1 = transform(x1, mean=rowMeans(x1[cols]), sd=apply(x1[cols],1, sd)) 

p<-ggplot(data=df1, aes(x=as.factor(time), y=mean, fill=id)) + 
    geom_bar(position=position_dodge(), stat="identity", colour="black") + 
    geom_errorbar(aes(ymin=mean-sd, ymax= mean+sd), width=0.2, position=position_dodge(0.9)) 
p 

А вот фигура получается

enter image description here

+0

В чем вопрос/проблема? – SabDeM

+0

У меня слишком много стандартных точек отклонения, одна ошибка бара ниже 0, а вторая красная полоса имеет два errorbars. – Al14

+0

Кажется, что вам не хватает стратификации. У вас есть три строки для каждой комбинации «id» и «time», и ваш график показывает три строки ошибок для каждой комбинации. Большой вопрос: почему у вас есть три стандартных отклонения для каждой комбинации? Насколько они разные? – Benjamin

ответ

2

Проблема в том, что в переменной df1 у вас есть несколько измерений для каждого (id, time) комбинации (например, для id WT и времени A, у вас есть точки, соответствующие средним значениям 13.0, 30.5 и 15.0). Вам нужно решить, как справиться с этим уровнем репликации, представить ли это на рисунке или показать статистику по нему. Так как вы знаете подробности эксперимента, и это ваши данные, вы должны быть один делает это решение ...

В качестве примера, усреднение по нескольким точкам для каждого (id, time) комбинации:

library(plyr) 
df2 <- ddply(df1, c("id", "time"), summarize, mean.overall = mean(mean), sd.overall = sd(mean)) 

, а затем с помощью прокладки:

p <- 
    ggplot(data = df2, aes(x = as.factor(time), y = mean.overall, fill = id)) + 
    geom_bar(position = position_dodge(), stat = "identity", colour = "black") + 
    geom_errorbar(aes(ymin = mean.overall-sd.overall, ymax = mean.overall + sd.overall), width = 0.2, position = position_dodge(0.9)) 
p 

будет производить фигуру с надлежащим расположенными планками погрешностей. Просто имейте в виду, что статистика здесь была получена путем усреднения по трем точкам для каждого (, time).

+0

Это было именно то, что я пытался сделать - Спасибо – Al14