Подтвердить что ты не робот

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

4b9b3361

Ответ 1

Первый сюжет был просто включен в сообщение на imachordata.com. (tip tip to Дэвид Смит на blog.revolution-computing.com) Вы также можете прочитайте соответствующую документацию из Hadley на 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

Ответ 2

Этот вопрос сейчас почти 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

Ответ 3

Немного поздно, но это решение может быть полезно для будущих пользователей. Он использует файл данных diamond, загруженный с помощью 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 + график ошибок http://i41.tinypic.com/ief48o.png

Ответ 4

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" ) без проблем.