Составление сводной статистики со средним, сд, мин и макс?

10

Я из области экономики и обычно в дисциплине сводная статистика переменных представлена ​​в таблице. Тем не менее, я хочу построить их.

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

Все мои переменные имеют разные масштабы. Было бы замечательно, если бы кто-то мог предложить осмысленный способ, с помощью которого я мог бы построить эту сводную статистику. Я могу работать с R или Stata.

Ridhima
источник
1
Добро пожаловать в список. Если вы спрашиваете о Rкомандах, то этот вопрос здесь не по теме. Но, кажется, вы спрашиваете в первую очередь о том, как будет выглядеть хороший сюжет, а во-вторых, о том, как его создать. Если это так, я предлагаю удалить «с R» из вашего заголовка и, возможно, указать в теле, что у вас есть в Rналичии.
Питер Флом

Ответы:

16

Существует причина, по которой блок-график Тьюки универсален, его можно применять к данным, полученным из разных распределений, от гауссовского до пуассоновского и т. Д. Медиана, MAD (медианное абсолютное отклонение) или IQR (межквартильный диапазон) являются более надежными показателями, когда данные отклоняются от нормальность. Тем не менее, среднее значение и SD являются более склонными к выбросам, и их следует интерпретировать относительно основного распределения. Приведенное ниже решение больше подходит для нормальных или логарифмических данных. Вы можете просмотреть выбор надежных мер здесь и изучить пакет WRS R здесь .

# simulating dataset
set.seed(12)
d1 <- rnorm(100, sd=30)
d2 <- rnorm(100, sd=10)
d <- data.frame(value=c(d1,d2), condition=rep(c("A","B"),each=100))

# function to produce summary statistics (mean and +/- sd), as required for ggplot2
data_summary <- function(x) {
   mu <- mean(x)
   sigma1 <- mu-sd(x)
   sigma2 <- mu+sd(x)
   return(c(y=mu,ymin=sigma1,ymax=sigma2))
}

# require(ggplot2)
ggplot(data=d, aes(x=condition, y=value, fill=condition)) + 
geom_crossbar(stat="summary", fun.y=data_summary, fun.ymax=max, fun.ymin=min)

Кроме того, добавив + geom_jitter()или + geom_point()к коду выше, вы можете одновременно визуализировать значения необработанных данных.


Спасибо @Roland за указание на сюжет скрипки . Он имеет преимущество в визуализации плотности вероятности одновременно с итоговой статистикой:

# require(ggplot2)
ggplot(data=d, aes(x=condition, y=value, fill=condition)) + 
geom_violin() + stat_summary(fun.data=data_summary)

Оба примера показаны ниже.

введите описание изображения здесь

TWL
источник
2
Я бы предпочел заговор на скрипке.
Роланд
1
В зависимости от цели анализа, среднее и стандартное отклонение - это именно то, что вам нужно. Я не понимаю, однако, несоответствие в R Summary.data.frame. Это показывает средства, но не SDS. Я не могу думать о многих ситуациях, когда средства полезны, но стандартные отклонения вводят в заблуждение.
Майкл М
Действительно, иногда вам нужно увидеть среднее значение и SD, чтобы вы могли судить, полезны ли они ....
Ник Кокс,
1
@TWL: тема слишком широка, чтобы обсуждать ее здесь. Но возьмем, к примеру, экономические оценки лекарств: для пациента, возможно, важно знать среднюю продолжительность лечения, а для медицинской страховой компании это средняя продолжительность лечения, потому что им нужно платить за каждого пациента. Любопытный факт: в случае экспоненциального распределения среднее +/- 1 стандартное отклонение покрывает 68% всей массы, среднее +/- 2 sds охватывает около 95% всей массы. Что касается нормального. (Но это просто шанс;))
Майкл М
1
Спасибо всем, мне нравятся предложенные участки для игры на скрипке, так что я сделаю этот выбор :-)
Ridhima
9

Есть множество возможностей.

Один из вариантов, который я видел, который позволяет избежать путаницы с коробочными диаграммами (при условии, что у вас есть медианы или исходные данные), состоит в том, чтобы построить коробочную диаграмму и добавить символ, обозначающий среднее (надеюсь, с легендой, чтобы сделать это явным). Упоминается эта версия коробочного графика, которая добавляет маркер для среднего значения, например, в Frigge et al (1989) [1]:

Бокплоты также показывают среднее значение

Левый график показывает символ + в качестве среднего маркера, а правый график использует треугольник по краю, адаптируя средний маркер из графика луча и точки опоры Doane & Tracy [2].

Смотрите также этот пост и этот пост

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

Возможно, что-то вроде этого:

введите описание изображения здесь

±

введите описание изображения здесь

±

Если ваши цифры находятся в очень разных масштабах, но все они положительные, вы можете рассмотреть возможность работы с журналами, или вы можете сделать небольшие кратные с разными (но четко обозначенными) масштабами

Код (в настоящее время это не особенно «хороший» код, но на данный момент это просто изучение идей, это не учебник по написанию хорошего R-кода):

fivenum.ms=function(x) {r=range(x);m=mean(x);s=sd(x);c(r[1],m-s,m,m+s,r[2])}
eps=.015

plot(factor(c(1,2)),range(c(A,B)),type="n",border=0)
points((rep(c(1,2),each=5)),c(fivenum.ms(A),fivenum.ms(B)),col=rep(c(2,4),each=5),pch=rep(c(1,16,9,16,1),2),ylim=c(range(A,B)),cex=1.2,lwd=2,xlim=c(0.5,2.5),ylab="",xlab="")
rect(1-1.2*eps,fivenum.ms(A)[2],1+1.4*eps,fivenum.ms(A)[4],lwd=2,col=2,den=0)
rect(2-1.2*eps,fivenum.ms(B)[2],2+1.4*eps,fivenum.ms(B)[4],lwd=2,col=4,den=0)

plot(factor(c(1,2)),range(c(A,B)),type="n",border=0)
points((rep(c(1,2),each=5)),c(fivenum.ms(A),fivenum.ms(B)),col=rep(c(2,4),each=5),pch=rep(c(1,16,9,16,1),2),ylim=c(range(A,B)),cex=1.2,lwd=2,xlim=c(0.5,2.5),ylab="",xlab="")
rect(1-eps/9,fivenum.ms(A)[2],1+eps/3,fivenum.ms(A)[4],lwd=2,col=2,den=0)
rect(2-eps/9,fivenum.ms(B)[2],2+eps/3,fivenum.ms(B)[4],lwd=2,col=4,den=0)

[1] Фригге М., Хоаглин Д.К. и Иглевич Б. (1989),
«Некоторые реализации коробочного сюжета».
Американский статистик , 43 (февраль): 50-54.

[2] Доан Д.П. и Р.Л. Трейси (2000),
«Использование дисплеев луча и опоры для исследования данных»,
Американский статистик , 54 (4): 289–290, ноябрь

Glen_b - Восстановить Монику
источник