Boxplot schmoxplot: Как изобразить средние и стандартные ошибки, обусловленные коэффициентом R? - PullRequest
14 голосов
/ 16 сентября 2009

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

В решетке, 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

Ответы [ 5 ]

14 голосов
/ 16 сентября 2009

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

11 голосов
/ 01 июля 2011

Этому вопросу уже почти 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

7 голосов
/ 07 июня 2013

Немного опоздал в игру, но это решение может пригодиться будущим пользователям. Он использует diamond data.frame, загруженный с 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)

enter image description here

1 голос
/ 11 марта 2019

Значения и их стандартные ошибки легко автоматически вычисляются с использованием ggplot2. Я бы рекомендовал использовать стандартные точки, а не динамитные графики. Возможно, вам придется указать позицию вручную. Вот как:

ggplot(mtcars, aes(factor(cyl), hp, color = factor(am))) +
  stat_summary(position = position_dodge(0.5))

enter image description here

0 голосов
/ 05 января 2010

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

Пока не наступит день, вот как я делал вышеупомянутые графики. Я использую графический пакет под названием «gplots», чтобы получить стандартные панели ошибок (используя данные, которые я уже рассчитал). Обратите внимание, что этот код предусматривает два или более факторов для каждого класса / категории. Для этого требуется, чтобы данные были представлены в виде матрицы, а команда «beside = TRUE» в функции «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") без проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...