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