2009-09-16 8 views
14

Мы все любим надежные меры, такие как медианные и межквартирные диапазоны, но с этим сталкиваемся, во многих областях ящики почти никогда не появляются в опубликованных статьях, в то время как средства и стандартные ошибки делают это все время.Boxplot schmoxplot: Как построить средние и стандартные ошибки, обусловленные фактором R?

Это просто в решетке, ggplot2 и т. Д., Чтобы рисовать ящики, и галереи полны их. Существует ли одинаково простой способ рисовать средства и стандартные ошибки, обусловленные категориальной переменной?

Я везу о сюжетов, как эти:

http://freakonomics.blogs.nytimes.com/2008/07/30/how-big-is-your-halo-a-guest-post/

Или то, что называют "означает алмазы" в JMP (смотрите рисунок 3):

http://blogs.sas.com/jmp/index.php?/archives/127-What-Good-Are-Error-Bars.html

ответ

14

Первый участок был просто покрыт blog post on imachordata.com. (наконечник шляпы до David Smith on blog.revolution-computing.com) Вы также можете read the related documentation from Hadley on ggplot2.

Вот пример кода:

library(ggplot2) 
data(mpg) 

#create a data frame with averages and standard deviations 
hwy.avg<-ddply(mpg, c("class", "year"), function(df) 
return(c(hwy.avg=mean(df$hwy), hwy.sd=sd(df$hwy)))) 

#create the barplot component 
avg.plot<-qplot(class, hwy.avg, fill=factor(year), data=hwy.avg, geom="bar", position="dodge") 

#first, define the width of the dodge 
dodge <- position_dodge(width=0.9) 

#now add the error bars to the plot 
avg.plot+geom_linerange(aes(ymax=hwy.avg+hwy.sd, ymin=hwy.avg-hwy.sd), position=dodge)+theme_bw() 

Он заканчивает тем, как это: alt text http://www.imachordata.com/wp-content/uploads/2009/09/barplot.png

+0

вы просто бить меня к этому! Вчера я прочитал сообщение www.imachordata.com и даже отправил его по электронной почте бывшему сотруднику. –

+0

Это маленький мир в блогосфере R. :) Недавно я начал следить за планетой R (http://planetr.stderr.org/), и это немного подавляющее. – Shane

+0

Мне нужно перестать быть ленивым и начать поддерживать список блога R. –

0

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

До наступления дня, вот как я делал вышеупомянутые графики. Я использую графический пакет под названием «gplots» для получения стандартных баров ошибок (с использованием уже рассчитанных данных). Обратите внимание, что этот код обеспечивает два или более факторов для каждого класса/категории. Для этого требуется, чтобы данные включались в матрицу и для команды «рядом = ИСТИНА» в функции «barplot2», чтобы удерживать полосы от укладки.

# Create the data (means) matrix 
# Using the matrix accommodates two or more factors for each class 

data.m <- matrix(c(75,34,19, 39,90,41), nrow = 2, ncol=3, byrow=TRUE, 
       dimnames = list(c("Factor 1", "Factor 2"), 
           c("Class A", "Class B", "Class C"))) 

# Create the standard error matrix 

error.m <- matrix(c(12,10,7, 4,7,3), nrow = 2, ncol = 3, byrow=TRUE) 

# Join the data and s.e. matrices into a data frame 

data.fr <- data.frame(data.m, error.m) 

# load library {gplots} 

library(gplots) 

# Plot the bar graph, with standard errors 

with(data.fr, 
    barplot2(data.m, beside=TRUE, axes=T, las=1, ylim = c(0,120), 
       main=" ", sub=" ", col=c("gray20",0), 
        xlab="Class", ylab="Total amount (Mean +/- s.e.)", 
       plot.ci=TRUE, ci.u=data.m+error.m, ci.l=data.m-error.m, ci.lty=1)) 

# Now, give it a legend: 

legend("topright", c("Factor 1", "Factor 2"), fill=c("gray20",0),box.lty=0) 

Это довольно обычная-Джейн, эстетический, но, кажется, что большинство журналов/старые профессора хотят видеть.

Я бы опубликовал график, подготовленный этими примерами данных, но это мой первый пост на сайте. Сожалею. Нужно уметь копировать все содержимое (после установки пакета «gplots») без проблем.

11

Этот вопрос сейчас почти 2 года, но, как новый пользователь R в экспериментальном поле, для меня это был большой вопрос, и эта страница имеет большое значение в результатах Google. Я только что нашел ответ, который мне больше нравится, чем текущий набор, поэтому я решил добавить его.

пакет sciplot делает задачу очень простой. Он выполняет свою работу в одной команде

#only necessary to get the MPG dataset from ggplot for direct comparison 
library(ggplot2) 
data(mpg) 
attach(mpg) 

#the bargraph.CI function with a couple of parameters to match the ggplot example 
#see also lineplot.CI in the same package 
library(sciplot) 
bargraph.CI(
    class, #categorical factor for the x-axis 
    hwy, #numerical DV for the y-axis 
    year, #grouping factor 
    legend=T, 
    x.leg=19, 
    ylab="Highway MPG", 
    xlab="Class") 

производит этот очень работоспособный график с основными параметрами по умолчанию. Обратите внимание, что по умолчанию баги ошибок являются стандартными ошибками, но параметр принимает функцию, поэтому они могут быть любыми, что вы хотите! sciplot bargraph.CI with mpg data

8

Приходит немного поздно к игре, но это решение может быть полезно для будущих пользователей. Он использует файл данных , загруженный R, и использует stat_summary вместе с двумя (супер короткими) пользовательскими функциями.

require(ggplot2) 

# create functions to get the lower and upper bounds of the error bars 
stderr <- function(x){sqrt(var(x,na.rm=TRUE)/length(na.omit(x)))} 
lowsd <- function(x){return(mean(x)-stderr(x))} 
highsd <- function(x){return(mean(x)+stderr(x))} 

# create a ggplot 
ggplot(diamonds,aes(cut,price,fill=color))+ 
# first layer is barplot with means 
stat_summary(fun.y=mean, geom="bar", position="dodge", colour='white')+ 
# second layer overlays the error bars using the functions defined above 
stat_summary(fun.y=mean, fun.ymin=lowsd, fun.ymax=highsd, geom="errorbar", position="dodge",color = 'black', size=.5) 

bar + error plot http://i41.tinypic.com/ief48o.png