Boxplot tương đương với phân phối đuôi nặng?


13

Đối với dữ liệu được phân phối bình thường, boxplots là một cách tuyệt vời để nhanh chóng hình dung trung vị và sự lan truyền của dữ liệu, cũng như sự hiện diện của bất kỳ ngoại lệ nào.

Tuy nhiên, đối với các bản phân phối có đuôi nặng hơn, rất nhiều điểm được hiển thị là các ngoại lệ, vì các ngoại lệ được xác định là nằm ngoài yếu tố cố định của IQR, và điều này tất nhiên xảy ra thường xuyên hơn với các phân phối có đuôi nặng.

Vì vậy, những gì mọi người sử dụng để hình dung loại dữ liệu này? Có cái gì thích nghi hơn? Tôi sử dụng ggplot trên R, nếu điều đó quan trọng.


1
Các mẫu từ phân phối đuôi nặng có xu hướng có phạm vi rất lớn so với mức trung bình 50%. Bạn muốn làm gì về điều đó?
Glen_b -Reinstate Monica

7
Một số chủ đề có liên quan đã được ví dụ: stats.stackexchange.com/questions/13086/ Câu trả lời ngắn bao gồm chuyển đổi đầu tiên sau đó! biểu đồ; lô lượng tử các loại; lô lô các loại.
Nick Cox

@Glen_b: đó chính xác là vấn đề của tôi, nó làm cho các ô vuông không thể đọc được.
static_rtti

2
Vấn đề là, có nhiều hơn một việc có thể được thực hiện ... vậy bạn muốn nó làm gì?
Glen_b -Reinstate Monica

2
Có lẽ đáng chú ý là hầu hết thế giới thống kê đều biết đến các ô vuông từ cách đặt tên và (giới thiệu lại) của John Tukey vào những năm 1970. (Chúng đã được sử dụng trong vài thập kỷ trước đó về khí hậu và địa lý.) Nhưng trong các chương sau của cuốn sách năm 1977 về phân tích dữ liệu khám phá (Reading, MA: Addison-Wesley), ông có những ý tưởng khá khác nhau về việc xử lý các bản phân phối nặng. Dường như không có gì bắt được cả. Nhưng âm mưu lượng tử là trong tinh thần tương tự.
Nick Cox

Câu trả lời:


8

Vấn đề trung tâm OP dường như có là họ có dữ liệu đuôi rất nặng - và tôi không nghĩ rằng hầu hết các câu trả lời hiện nay thực sự đối phó với vấn đề mà ở tất cả , vì vậy tôi đang thúc đẩy bình luận trước đây của tôi đến một câu trả lời.

Nếu bạn đã muốn ở lại với boxplots, một số tùy chọn được liệt kê dưới đây. Tôi đã tạo một số dữ liệu trong R cho thấy vấn đề cơ bản:

 set.seed(seed=7513870)
 x <- rcauchy(80)
 boxplot(x,horizontal=TRUE,boxwex=.7)

boxplot không đạt yêu cầu

Nửa giữa của dữ liệu được giảm xuống một dải nhỏ rộng vài mm. Vấn đề tương tự cũng ảnh hưởng đến hầu hết các đề xuất khác - bao gồm các ô QQ, biểu đồ dải, âm mưu tổ ong / sáp ong và âm mưu violin.

Bây giờ một số giải pháp tiềm năng:

1) biến đổi ,

Nếu các bản ghi hoặc nghịch đảo tạo ra một boxplot có thể đọc được, chúng có thể là một ý tưởng rất tốt và quy mô ban đầu vẫn có thể được hiển thị trên trục.

Vấn đề lớn là đôi khi không có sự chuyển đổi 'trực quan'. Có một vấn đề nhỏ hơn là trong khi bản thân các lượng tử dịch với các phép biến đổi đơn điệu đủ tốt, thì hàng rào lại không; nếu bạn chỉ boxplot dữ liệu được chuyển đổi (như tôi đã làm ở đây), các bộ râu sẽ ở các giá trị x khác với trong cốt truyện gốc.

boxplot của các giá trị chuyển đổi

Ở đây tôi đã sử dụng một nghịch đảo-hyperbolic-sin (asinh); nó giống như nhật ký ở đuôi và tương tự tuyến tính gần bằng 0, nhưng mọi người thường không thấy nó là một phép biến đổi trực quan, vì vậy nói chung tôi sẽ không đề xuất tùy chọn này trừ khi chuyển đổi khá trực quan như nhật ký là rõ ràng. Mã cho điều đó:

xlab <- c(-60,-20,-10,-5,-2,-1,0,1,2,5,10,20,40)
boxplot(asinh(x),horizontal=TRUE,boxwex=.7,axes=FALSE,frame.plot=TRUE)
axis(1,at=asinh(xlab),labels=xlab)

2) phá vỡ tỷ lệ - lấy các ngoại lệ cực đoan và nén chúng vào các cửa sổ hẹp ở mỗi đầu với tỷ lệ nén nhiều hơn so với ở trung tâm. Tôi thực sự khuyên bạn nên nghỉ ngơi hoàn toàn trên toàn bộ quy mô nếu bạn làm điều này.

boxplot với quy mô phá vỡ

opar <- par()
layout(matrix(1:3,nr=1,nc=3),heights=c(1,1,1),widths=c(1,6,1))
par(oma = c(5,4,0,0) + 0.1,mar = c(0,0,1,1) + 0.1)
stripchart(x[x< -4],pch=1,cex=1,xlim=c(-80,-5))
boxplot(x[abs(x)<4],horizontal=TRUE,ylim=c(-4,4),at=0,boxwex=.7,cex=1)
stripchart(x[x> 4],pch=1,cex=1,xlim=c(5,80))
par(opar)

3) cắt xén các ngoại lệ cực đoan (mà tôi thường không khuyên mà không chỉ ra điều này rất rõ ràng, nhưng có vẻ như cốt truyện tiếp theo, không có "<5" và "2>" ở hai đầu) và

4) cái mà tôi sẽ gọi là "mũi tên" cực kỳ xa lạ - tương tự như cắt tỉa, nhưng với số lượng giá trị được cắt bớt được chỉ ra ở mỗi đầu

boxplot với số lượng và mũi tên chỉ vào các giá trị cực trị

xout <- boxplot(x,range=3,horizontal=TRUE)$out
xin <- x[!(x %in% xout)]
noutl <- sum(xout<median(x))
nouth <- sum(xout>median(x))
boxplot(xin,horizontal=TRUE,ylim=c(min(xin)*1.15,max(xin)*1.15))
text(x=max(xin)*1.17,y=1,labels=paste0(as.character(nouth)," >"))
text(x=min(xin)*1.17,y=1,labels=paste0("< ",as.character(noutl)))

Cảm ơn đã dành thời gian để viết những dòng này! Đây chính xác là loại câu trả lời tôi đang mong đợi. Bây giờ tôi chỉ cần tìm hiểu cách triển khai các lô này với R :)
static_rtti

1
Một số mã hiện có. Tôi đã không cung cấp mã cho 3) vì đó là phiên bản đơn giản hơn của 4); bạn sẽ có thể có được nó bằng cách cắt ra từ đó.
Glen_b -Reinstate Monica

Ngẫu nhiên, hầu hết những ý tưởng này cũng hoạt động với các màn hình tuyệt vời khác được đề xuất ở đây - các biểu đồ thoát y bị xáo trộn và âm mưu sáp ong và âm mưu vĩ cầm, v.v.
Glen_b -Reinstate Monica

Cảm ơn một lần nữa. Tôi chắc rằng câu trả lời này sẽ hữu ích cho khá nhiều người.
static_rtti

Tôi đồng ý, điều này giải quyết câu hỏi tốt hơn nhiều so với câu trả lời của tôi đã làm. Đồ tốt.
TooTone

4

Cá nhân tôi thích sử dụng một dải phân cách với jitter ít nhất để cảm nhận dữ liệu. Cốt truyện dưới đây là với mạng trong R (xin lỗi không phải ggplot2). Tôi thích những âm mưu này vì chúng rất dễ diễn giải. Như bạn nói, một lý do cho điều này là không có bất kỳ biến đổi nào.

df <- data.frame(y1 = c(rnorm(100),-4:4), y2 = c(rnorm(100),-5:3), y3 = c(rnorm(100),-3:5))
df2 <- stack(df)
library(lattice)
stripplot(df2$values ~ df2$ind, jitter=T)

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

Các beeswarm gói cung cấp một thay thế tuyệt vời để stripplot (nhờ @January cho đề nghị).

beeswarm(df2$values ~ df2$ind)

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

Với dữ liệu của bạn, vì nó được phân phối bình thường, một thứ khác để thử có thể là qqplot, qqnorm trong trường hợp này.

par(mfrow=c(1,3))
for(i in 1:3) { qqnorm(df[,i]); abline(c(0,0),1,col="red") }

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


2
Tôi cũng thích các biểu đồ thoát y, nhưng câu hỏi rõ ràng là phải làm gì với các bản phân phối có đuôi nặng.
Nick Cox

1
Vấn đề chỉ là lời khuyên để sử dụng, ví dụ như qqnorm không phù hợp với câu hỏi. Tôi đồng ý rằng các loại lô lượng tử - lượng tử khác có thể là một ý tưởng rất hay, như tôi đã đề cập trước đó.
Nick Cox

1
Thậm chí tốt hơn so với các bản vẽ từ R là các lô từ beeswarmgói.
Ngày 1 tháng 1,

1
@Janemony Vâng, điều đó thật tuyệt, tôi đang thêm nó vào câu trả lời của mình (nếu bạn phản đối xin vui lòng nói như vậy).
TooTone

1
Câu trả lời của tôi đã được đăng tại stats.stackexchange.com/questions/13086 , mà tôi xem là phiên bản (hẹp hơn không đáng kể) của câu hỏi này. Tôi đã tóm tắt nó là "không thay đổi thuật toán boxplot: thay vào đó thể hiện lại dữ liệu." Vấn đề được gợi ý bởi "điều chỉnh" trong câu hỏi này được giải quyết bằng các kỹ thuật tiêu chuẩn của Phân tích dữ liệu khám phá để tìm các biểu thức lại hữu ích của các biến.
whuber

2

Bạn có thể dính vào boxplots. Có nhiều khả năng khác nhau để xác định râu ria. Tùy thuộc vào độ dày đuôi, số lượng mẫu và khả năng chịu đựng các ngoại lệ, bạn có thể chọn hai lượng tử cực trị nhiều hơn hoặc ít hơn. Với vấn đề của bạn, tôi sẽ tránh râu ria được xác định thông qua IQR.
Tất nhiên trừ khi bạn muốn chuyển đổi dữ liệu của mình, điều này trong trường hợp này làm cho việc hiểu khó hơn.


1
Câu cuối cùng là quá không đủ điều kiện để vượt qua mà không bình luận. Chuyển đổi không phải là thuốc chữa bách bệnh, nhưng không chuyển đổi dữ liệu bị sai lệch cao sẽ không làm cho dễ hiểu hơn. Nếu dữ liệu đều dương, ít nhất bạn có thể thử sử dụng thang đo gốc, logarit hoặc đối ứng. Nếu nó thực sự không có ích, thì hãy lùi lại.
Nick Cox

Bạn đang đề cập đến những khó khăn gì trong việc hiểu dữ liệu sai lệch? Những người có râu ria phụ thuộc IQR? Đó là một vấn đề ngay cả với đuôi nhẹ. Và không phải chúng ta đang nói về những cái đuôi nặng nề, độc lập với sự sai lệch sao? Các đuôi biến đổi ánh sáng chắc chắn cung cấp cho các ô vuông thông thường hơn, nhưng thêm một lớp diễn giải, hiểu sự giao dịch cho thoải mái. Nhưng người ta có thể gọi đó là một tính năng nếu anh ta thích.
Quartz

2
Chuyển đổi thường giúp: đó là điểm mấu chốt của tôi. Một người thống kê đã không học được rằng nhiều thứ có vẻ rõ ràng hơn trên thang logarit (đặc biệt) đang bỏ lỡ nghiêm trọng một trong những thủ thuật lâu đời nhất và hiệu quả nhất hiện có. Bạn dường như đang phủ nhận điều đó; Tôi hy vọng tôi đọc sai bạn.
Nick Cox

1
Tôi không đồng ý. Tôi biến đổi dữ liệu bị sai lệch mọi lúc và kinh nghiệm của tôi là điều này còn hơn cả một câu hỏi về tính thẩm mỹ. Nó thường hoạt động. Một nhà thống kê ẩn danh đã viết cách đây một thời gian rằng lognatural là bình thường hơn bình thường. Anh ấy / cô ấy có một chút lãnh đạm nhưng cũng có một sự thật quan trọng. (Không phải nhiều bản phân phối khác có thể không phù hợp hơn.)
Nick Cox

1
Tôi đoán tôi cần dừng lại ở đây để cho người khác phán xét, nhưng quan điểm của tôi không lập dị. Chuyển đổi được thảo luận như một khả năng tại ví dụ: stats.stackexchange.com/questions/13086/ nam Tôi đề nghị bạn trả lời hoặc nhận xét ở đó để giải thích lý do tại sao lời khuyên đó không có cơ sở.
Nick Cox

0

Tôi giả sử câu hỏi này là về việc hiểu dữ liệu (trái ngược với cách quản lý khác của nó)
Nếu dữ liệu có đuôi nặng và / hoặc đa phương thức, tôi thấy các "lớp" này của ggplot2 rất hữu ích cho mục đích: geom_violingeom_jitter.


3
Bạn có thể tóm tắt lý do tại sao các ô vĩ cầm và / hoặc các điểm bị xáo trộn sẽ hữu ích với các bản phân phối nặng không?
chl
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.