Складання зведеної статистики із середнім значенням, sd, min та max?


10

Я з економічного походження, і зазвичай в цій дисципліні підсумкова статистика змінних подається в таблиці. Однак я хочу їх скласти.

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

Усі мої змінні мають різні масштаби. Було б чудово, якби хтось міг запропонувати змістовний спосіб, за допомогою якого я зможу скласти цю підсумкову статистику. Я можу працювати з R або Stata.


1
Ласкаво просимо до списку. Якщо ви запитуєте про Rкоманди, то тут це питання поза темою. Але, здається, ви запитуєте в першу чергу про те, як виглядатиме хороший сюжет, а в другому - як його створити. Якщо це так, я пропоную видалити "з R" зі свого заголовку і, можливо, вказати, що у вас є Rдоступні.
Пітер Флом

Відповіді:


16

Існує причина, по якій боксерт Тукі є універсальним, його можна застосовувати до даних, отриманих з різних розподілів, від Гаусса до Пуассона і т.д. нормальність. Однак середня величина та рівень СД більш схильні до людей, що не мають права, і їх слід інтерпретувати щодо базового розподілу. Наведене нижче рішення більше підходить для звичайних даних або для нормальних даних. Ви можете переглядати вибір надійних заходів тут , а також вивчити пакет 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)

Обидва приклади показані нижче.

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


2
Я вважаю за краще сюжетний скрипковий сюжет.
Roland

1
Залежно від мети аналізу, середнє та стандартне відхилення - саме те, що вам потрібно. Я не розумію, однак, суперечливості у підсумковому файлі Summary.data.frame. Він показує засоби, але не SD. Я не можу придумати багато ситуацій, коли засоби корисні, але стандартні відхилення вводять в оману.
Майкл М

Дійсно, іноді потрібно побачити середню і ПД, щоб оцінити, чи корисні вони ....
Нік Кокс

1
@TWL: Тема є занадто широкою, щоб обговорити тут. Але візьмемо для прикладу економічні оцінки лікарських засобів: для пацієнта, можливо, важливо знати середню тривалість лікування, тоді як для медичної страхової компанії це середня тривалість лікування, оскільки їм потрібно платити за кожного пацієнта. Цікавий факт: У випадку експоненціального розподілу середнє +/- 1 стандартне відхилення охоплює 68% усієї маси, середнє значення +/- 2 sds охоплює близько 95% усієї маси. Щодо нормальних. (Але це лише випадковість;))
Майкл М

1
Дякую всім, мені подобаються запропоновані сюжетні скрипки, тому я буду продовжувати цей вибір :-)
Рідхіма

9

Є безліч можливостей.

Я бачив один із застосованих варіантів, який дозволяє уникнути плутанини з boxplots (якщо припустити, що у вас є медіани або оригінальні дані) - побудувати графік boxplot та додати символ, який позначає середину (сподіваємось, що легенда робить це явним). Ця версія боксплоту, яка додає маркер середнього значення, згадується, наприклад, у 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] Doane DP і RL Tracy (2000),
"Використання дисплеїв променя і опори для дослідження даних",
американський статистик , 54 (4): 289-290, листопад

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.