Vẽ thống kê tóm tắt với giá trị trung bình, sd, min và max?


10

Tôi đến từ một nền tảng kinh tế và thường trong ngành học, số liệu thống kê tóm tắt của các biến được báo cáo trong một bảng. Tuy nhiên, tôi muốn âm mưu chúng.

Tôi có thể sửa đổi một ô hình hộp để cho phép nó hiển thị giá trị trung bình, độ lệch chuẩn, tối thiểu và tối đa nhưng tôi không muốn làm như vậy vì các ô hình hộp thường được sử dụng để hiển thị trung vị và Q1 và Q3.

Tất cả các biến của tôi có quy mô khác nhau. Sẽ thật tuyệt nếu ai đó có thể đề xuất một cách có ý nghĩa để tôi có thể vẽ các thống kê tóm tắt này. Tôi có thể làm việc với R hoặc Stata.


1
Chào mừng đến với danh sách. Nếu bạn đang hỏi về Rcác lệnh thì câu hỏi này không có chủ đề ở đây. Nhưng có vẻ như bạn đang hỏi chủ yếu về một cốt truyện hay sẽ như thế nào và thứ hai về cách tạo ra nó. Nếu vậy, tôi khuyên bạn nên xóa "với R" khỏi tiêu đề của bạn và có thể nêu rõ, trong cơ thể, rằng bạn có Rsẵn.
Peter Flom - Tái lập Monica

Câu trả lời:


16

Có một lý do tại sao boxplot của Tukey là phổ quát, nó có thể được áp dụng cho dữ liệu có nguồn gốc từ các bản phân phối khác nhau, từ Gaussian đến Poisson, v.v. Median, MAD (độ lệch tuyệt đối trung bình) hoặc IQR (phạm vi liên dải) là các biện pháp mạnh hơn khi dữ liệu lệch khỏi dữ liệu tính quy luật. Tuy nhiên, giá trị trung bình và SD dễ bị ngoại lệ hơn và chúng nên được giải thích liên quan đến phân phối cơ bản. Giải pháp dưới đây phù hợp hơn với dữ liệu bình thường hoặc log-normal. Bạn có thể duyệt qua một loạt các biện pháp mạnh mẽ tại đây và khám phá gói WRS R tại đây .

# 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)

Ngoài ra, bằng cách thêm + geom_jitter()hoặc + geom_point()mã vào ở trên, bạn có thể đồng thời hình dung các giá trị dữ liệu thô.


Cảm ơn @Roland đã chỉ ra âm mưu violin . Nó có một lợi thế trong việc hình dung mật độ xác suất đồng thời với thống kê tóm tắt:

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

Cả hai ví dụ được hiển thị dưới đây.

nhập mô tả hình ảnh ở đây


2
Tôi thích một âm mưu violin hơn thế này.
Roland

1
Tùy thuộc vào mục đích phân tích, giá trị trung bình và độ lệch chuẩn là chính xác những gì bạn cần. Tuy nhiên, tôi không hiểu sự không nhất quán trong tóm tắt của R.d.dame.frame. Nó cho thấy có nghĩa nhưng không có sds. Tôi không thể nghĩ ra nhiều tình huống có nghĩa là hữu ích nhưng độ lệch chuẩn gây hiểu lầm.
Michael M

Thật vậy, đôi khi bạn cần xem giá trị trung bình và SD để bạn đánh giá xem chúng có hữu ích không ....
Nick Cox

1
@TWL: Chủ đề quá rộng để thảo luận ở đây. Nhưng lấy ví dụ về đánh giá kinh tế của thuốc: Đối với bệnh nhân, có lẽ điều quan trọng là phải biết thời gian điều trị trung bình, trong khi đối với công ty bảo hiểm y tế thì đó là thời gian điều trị trung bình vì họ cần phải trả cho mỗi bệnh nhân. Một sự thật tò mò: Trong trường hợp phân phối theo cấp số nhân, độ lệch chuẩn trung bình +/- 1 chiếm 68% tổng khối lượng, trung bình +/- 2 sds chiếm khoảng 95% tổng khối lượng. Đối với bình thường. (Nhưng đó chỉ là cơ hội;))
Michael M

1
Cảm ơn tất cả, tôi thích các âm mưu vĩ cầm được đề xuất vì vậy sẽ đi trước với lựa chọn đó :-)
Ridhima

9

Có vô số khả năng.

Một tùy chọn mà tôi đã thấy được sử dụng để tránh nhầm lẫn với boxplots (giả sử bạn có trung bình hoặc dữ liệu gốc có sẵn) là vẽ một boxplot và thêm một biểu tượng đánh dấu trung bình (hy vọng với một chú giải để làm rõ điều này). Phiên bản này của boxplot có thêm điểm đánh dấu cho giá trị trung bình được đề cập, ví dụ như trong Frigge et al (1989) [1]:

Boxplots hiển thị có nghĩa là được đánh dấu là tốt

Biểu đồ bên trái hiển thị ký hiệu + là điểm đánh dấu trung bình và biểu đồ bên phải sử dụng hình tam giác ở cạnh, điều chỉnh điểm đánh dấu trung bình từ biểu đồ chùm tia và điểm tựa của Doane & Tracy [2].

Xem thêm bài SO nàybài này

Nếu bạn không có (hoặc thực sự không muốn hiển thị) thì trung bình sẽ cần một cốt truyện mới và sau đó nó sẽ tốt cho việc phân biệt trực quan với boxplot.

Có lẽ một cái gì đó như thế này:

nhập mô tả hình ảnh ở đây

... vẽ sơ đồ tối thiểu, tối đa, trung bình và trung bình sd cho mỗi mẫu bằng các ký hiệu khác nhau và sau đó vẽ một hình chữ nhật, hoặc có lẽ tốt hơn, đại loại như thế này:±

nhập mô tả hình ảnh ở đây

... vẽ sơ đồ tối thiểu, tối đa, trung bình và trung bình sd cho mỗi mẫu bằng các ký hiệu khác nhau và sau đó vẽ một đường (thực tế hiện tại đó thực sự là một hình chữ nhật như trước, nhưng được vẽ hẹp; nên thay đổi thành vẽ một hàng)±

Nếu các số của bạn ở các thang đo rất khác nhau, nhưng tất cả đều dương, bạn có thể xem xét làm việc với các bản ghi hoặc bạn có thể thực hiện các bội số nhỏ với các thang đo khác nhau (nhưng được đánh dấu rõ ràng)

Mã (hiện tại không đặc biệt là mã 'đẹp', nhưng hiện tại đây chỉ là khám phá ý tưởng, đây không phải là hướng dẫn về cách viết mã R tốt):

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] Frigge, M., DC Hoaglin và B. Iglewicz (1989),
"Một số triển khai của âm mưu hộp."
Thống kê người Mỹ , 43 (tháng 2): 50-54.

[2] Doane DP và RL Tracy (2000),
"Sử dụng màn hình Beam và Fulcrum để khám phá dữ liệu"
Thống kê người Mỹ , 54 (4): 289 Phản290, tháng 11

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.