Boxplot เทียบเท่ากับการแจกของหนัก


13

สำหรับข้อมูลที่กระจายตามปกติประมาณกล่องแปลงเป็นวิธีที่ดีในการมองเห็นค่ามัธยฐานและการแพร่กระจายของข้อมูลได้อย่างรวดเร็วเช่นเดียวกับการปรากฏตัวของค่าผิดปกติใด ๆ

อย่างไรก็ตามสำหรับการแจกแจงแบบเทลด์ที่หนักกว่านั้นจำนวนมากของคะแนนจะแสดงเป็นค่าผิดปกติเนื่องจากค่าผิดปกติถูกกำหนดว่าอยู่นอกปัจจัยคงที่ของ IQR และสิ่งนี้เกิดขึ้นแน่นอนบ่อยครั้งมากขึ้นด้วยการแจกแจงแบบหนา

ดังนั้นสิ่งที่ผู้คนใช้ในการมองเห็นข้อมูลประเภทนี้? มีอะไรที่ดัดแปลงเพิ่มเติมหรือไม่ ฉันใช้ ggplot กับ R ถ้ามันสำคัญ


1
ตัวอย่างจากการแจกแจงแบบเทลด์หนักมีแนวโน้มที่จะมีช่วงกว้างมากเมื่อเทียบกับกึ่งกลาง 50% คุณต้องการทำอะไรเกี่ยวกับเรื่องนี้?
Glen_b -Reinstate Monica

7
มีหัวข้อที่เกี่ยวข้องหลายรายการอยู่แล้วเช่นstats.stackexchange.com/questions/13086/…คำตอบสั้น ๆ จะรวมการแปลงก่อน histograms; แปลงควอนไทล์หลายชนิด แปลงแถบหลายชนิด
Nick Cox

@Glen_b: นั่นคือปัญหาของฉันอย่างแม่นยำมันทำให้ boxplots ไม่สามารถอ่านได้
static_rtti

2
มันมีมากกว่าหนึ่งสิ่งที่อาจจะทำได้ ... คุณต้องการให้มันทำอะไร?
Glen_b -Reinstate Monica

2
บางทีน่าสังเกตว่าโลกสถิติส่วนใหญ่รู้จัก boxplots จากการตั้งชื่อและแนะนำโดย John Tukey ในทศวรรษ 1970 (มันถูกใช้มานานหลายสิบปีก่อนหน้านี้ในภูมิอากาศและภูมิศาสตร์) แต่ในบทต่อ ๆ มาของหนังสือปี 1977 ของเขาเกี่ยวกับการวิเคราะห์ข้อมูลเชิงสำรวจ (Reading, MA: Addison-Wesley) เขามีแนวคิดที่แตกต่างกันในการจัดการการแจกแจงแบบหนา ดูเหมือนว่าไม่มีใครจับได้เลย แต่แผนการควอนไทล์อยู่ในจิตวิญญาณที่คล้ายกัน
Nick Cox

คำตอบ:


8

ปัญหาหลักที่ OP ดูเหมือนจะมีคือพวกเขามีข้อมูลที่มีน้ำหนักน้อยมากและฉันไม่คิดว่าคำตอบปัจจุบันส่วนใหญ่จะจัดการกับปัญหานั้นจริง ๆเลยดังนั้นฉันจึงส่งเสริมความคิดเห็นก่อนหน้าของฉันให้เป็นคำตอบ

หากคุณไม่ต้องการอยู่กับบ็อกซ์พล็อตมีตัวเลือกบางรายการด้านล่าง ฉันได้สร้างข้อมูลใน R ซึ่งแสดงปัญหาพื้นฐาน:

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

รูปแบบกล่องที่ไม่น่าพอใจ

ข้อมูลครึ่งกลางจะลดลงเป็นแถบเล็ก ๆ กว้างไม่กี่มิลลิเมตร ปัญหาเดียวกันนี้จะส่งผลต่อข้อเสนอแนะอื่น ๆ ซึ่งรวมถึงแปลง QQ, แผนภูมิแท่ง, แปลงรังผึ้งแบบผึ้ง / รังผึ้งและแปลงไวโอลิน

ตอนนี้วิธีแก้ปัญหาที่อาจเกิดขึ้น:

1) การเปลี่ยนแปลง ,

หากบันทึกหรือผู้ผกผันสร้างกล่องสี่เหลี่ยมที่อ่านได้อาจเป็นความคิดที่ดีมากและมาตราส่วนดั้งเดิมยังคงสามารถแสดงบนแกนได้

ปัญหาใหญ่คือบางครั้งไม่มีการเปลี่ยนแปลง 'ใช้งานง่าย' มีปัญหาเล็ก ๆ ที่ในขณะที่ควอนไทล์ตัวเองแปลด้วยการแปลงแบบโมโนโทนิกได้ดีพอรั้วไม่ได้ หากคุณเพียงแค่ใส่กล่องแปลงข้อมูลที่แปลง (อย่างที่ฉันทำที่นี่) หนวดจะมีค่า x ที่แตกต่างจากในแปลงดั้งเดิม

boxplot ของค่าที่แปลง

ที่นี่ฉันใช้ inverse-hyperbolic-sin (asinh); มันเหมือนกับ log ในหางและคล้ายกับ linear ใกล้ศูนย์ แต่คนทั่วไปไม่คิดว่ามันเป็นการแปลงแบบสัญชาตญาณดังนั้นโดยทั่วไปฉันจะไม่แนะนำตัวเลือกนี้เว้นแต่ว่าการเปลี่ยนแปลงที่เข้าใจง่ายเช่น log จะชัดเจน รหัสสำหรับ:

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) การแบ่งสเกล - ใช้ค่าผิดปกติมากและบีบอัดเข้าไปในหน้าต่างแคบ ๆ ที่ปลายแต่ละด้านด้วยสเกลที่ถูกบีบอัดมากขึ้นกว่าที่กึ่งกลาง ฉันขอแนะนำให้หยุดพักแบบสมบูรณ์ทั่วทั้งสเกลหากคุณทำสิ่งนี้

พล็อตกล่องที่มีตัวแบ่งสเกล

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) การตัดค่าผิดปกติอย่างรุนแรง (ซึ่งโดยปกติฉันจะไม่แนะนำโดยไม่ระบุอย่างชัดเจน แต่ดูเหมือนว่าพล็อตต่อไปโดยไม่มี "<5" และ "2>" ที่ปลายทั้งสอง) และ

4) สิ่งที่ฉันจะเรียกว่า "ลูกศร" สุดขั้ว - คล้ายกับการเล็ม แต่มีการนับจำนวนของค่าที่ตัดซึ่งระบุไว้ที่ปลายแต่ละด้าน

boxplot ที่มีจำนวนและลูกศรชี้ถึงค่าที่สูงที่สุด

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

ขอบคุณที่สละเวลาเขียนสิ่งนี้! นี่คือคำตอบที่ฉันคาดหวัง ตอนนี้ผมเพียงต้องการที่จะหาวิธีที่จะดำเนินการแปลงเหล่านี้กับ R :)
static_rtti

1
ขณะนี้มีรหัสบางส่วน ฉันไม่ได้ให้รหัสสำหรับ 3) เพราะมันเป็นเวอร์ชั่นที่ง่ายกว่าสำหรับ 4); คุณควรจะได้รับโดยการตัดเส้นจากนั้น
Glen_b -Reinstate Monica

อนึ่งความคิดเหล่านี้ส่วนใหญ่ยังทำงานร่วมกับการแสดงยอดเยี่ยมอื่น ๆ ที่แนะนำที่นี่ - ระแนงกราฟฟิคแบบกระวนกระวายใจและพล็อตแบบผึ้ง / รังผึ้งและแปลงไวโอลินและ
Glen_b -Reinstate Monica

ขอบคุณอีกครั้ง. ฉันแน่ใจว่าคำตอบนี้จะเป็นประโยชน์กับคนไม่กี่คน
static_rtti

ฉันเห็นด้วยนี่เป็นคำถามที่ดีกว่าคำตอบของฉัน สิ่งที่ดี.
TooTone

4

โดยส่วนตัวฉันชอบที่จะใช้stripplotกับกระวนกระวายใจอย่างน้อยก็เพื่อให้ได้ความรู้สึกกับข้อมูล เนื้อเรื่องด้านล่างนี้มีโครงร่างเป็น R (ขออภัยไม่ใช่ ggplot2) ฉันชอบแปลงเหล่านี้เพราะพวกมันตีความได้ง่ายมาก อย่างที่คุณพูดเหตุผลหนึ่งในเรื่องนี้ก็คือไม่มีการเปลี่ยนแปลงใด ๆ

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)

ป้อนคำอธิบายรูปภาพที่นี่

beeswarmแพคเกจเสนอทางเลือกที่ดีในการ stripplot (ขอบคุณ @January สำหรับคำแนะนำ)

beeswarm(df2$values ~ df2$ind)

ป้อนคำอธิบายรูปภาพที่นี่

ด้วยข้อมูลของคุณเนื่องจากมีการกระจายตามปกติโดยประมาณสิ่งอื่นที่ควรลองอาจเป็น qqplot หรือqqnormในกรณีนี้

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

ป้อนคำอธิบายรูปภาพที่นี่


2
ฉันชอบ stripplots ด้วยเช่นกัน แต่คำถามก็ชัดเจนว่าจะทำอย่างไรกับการแจกแจงแบบหนา
Nick Cox

1
ประเด็นก็คือคำแนะนำในการใช้เช่น qqnorm ไม่ตรงกับคำถาม ผมเห็นด้วยกับการแปลงควอนไทล์ควอนไทล์แบบอื่น ๆ เป็นความคิดที่ดีมากอย่างที่ผมได้กล่าวไปแล้ว
Nick Cox

1
ดีกว่า stripplots จาก R เป็นพล็อตจากbeeswarmแพ็คเกจ
มกราคม

1
@ มกราคมใช่แล้วมันค่อนข้างเท่ห์ฉันกำลังเพิ่มมันเข้าไปในคำตอบของฉัน (ถ้าคุณคัดค้านโปรดพูดอย่างนั้น)
TooTone

1
คำตอบของฉันถูกโพสต์ที่stats.stackexchange.com/questions/13086ซึ่งฉันเห็นว่าเป็นรุ่นที่แคบลง ฉันสรุปว่า "อย่าเปลี่ยนอัลกอริทึม boxplot: แสดงข้อมูลซ้ำอีกครั้ง" ปัญหาที่บอกเป็นนัยโดย "ดัดแปลง" ในคำถามนี้ได้รับการแก้ไขโดยเทคนิคมาตรฐานของการวิเคราะห์ข้อมูลเชิงสำรวจเพื่อค้นหาการแสดงออกของตัวแปรที่เป็นประโยชน์อีกครั้ง
whuber

2

คุณสามารถติดกล่องแปลง มีความเป็นไปได้ที่แตกต่างกันสำหรับการกำหนดหนวด จำนวนตัวอย่างและความทนทานต่อค่าผิดปกติขึ้นอยู่กับความหนาของหาง ให้ปัญหาของคุณฉันจะหลีกเลี่ยงเคราที่กำหนดผ่าน IQR
นอกจากหลักสูตรที่คุณต้องการแปลงข้อมูลซึ่งในกรณีนี้ทำให้เข้าใจยากขึ้น


1
ประโยคสุดท้ายไม่มีเงื่อนไขเกินกว่าจะผ่านไปโดยไม่มีความเห็น การแปลงไม่ใช่ยาครอบจักรวาล แต่การไม่แปลงข้อมูลที่เอียงสูงนั้นไม่ทำให้เข้าใจง่ายขึ้น หากข้อมูลเป็นค่าบวกทั้งหมดคุณสามารถลองใช้ระดับรูตลอการิทึมหรือส่วนกลับซึ่งกันและกัน ถ้ามันไม่ได้ช่วยจริงๆให้ถอยออกไป
Nick Cox

คุณหมายถึงความยากลำบากอะไรในการทำความเข้าใจข้อมูลที่เบ้? ผู้ที่มีเคราขึ้นอยู่กับ IQR? นั่นเป็นปัญหาแม้กับหางแสง และเราไม่ได้พูดถึงหางหนาเป็นอิสระจากความเบ้หรือไม่ การแปลงหางที่มีน้ำหนักเบานั้นให้ boxplots ปกติมากขึ้น แต่เพิ่มเลเยอร์การแปลความเข้าใจในการซื้อขายเพื่อความสะดวกสบาย แต่ใคร ๆ ก็สามารถเรียกได้ว่าเป็นฟีเจอร์ถ้าเขาชอบ
ควอตซ์

2
การเปลี่ยนแปลงมักจะช่วยได้: นั่นคือสิ่งที่สำคัญที่สุดของฉัน บุคคลทางสถิติที่ไม่ได้เรียนรู้ว่าหลายสิ่งดูชัดเจนในระดับลอการิทึม (โดยเฉพาะ) ขาดหายไปอย่างจริงจังในหนึ่งในเทคนิคที่เก่าแก่ที่สุดและมีประสิทธิภาพมากที่สุดที่มี คุณดูเหมือนจะปฏิเสธว่า; ฉันหวังว่าฉันอ่านผิด
Nick Cox

1
ฉันไม่เห็นด้วย. ฉันแปลงข้อมูลที่เบ้อย่างมากตลอดเวลาและประสบการณ์ของฉันคือนี่เป็นมากกว่าคำถามเกี่ยวกับความสวยงาม มันใช้งานได้บ่อย นักสถิตินิรนามเขียนเมื่อไม่นานมานี้ว่า lognormal นั้นปกติมากกว่าปกติ เขา / เธอขี้อายเล็กน้อย แต่ก็มีความจริงที่สำคัญเช่นกัน (ไม่ใช่ว่าการกระจายอื่น ๆ อีกมากมายอาจไม่เหมาะกว่า)
Nick Cox

1
ฉันเดาว่าฉันต้องหยุดที่นี่เพื่อให้คนอื่นตัดสิน แต่ทัศนะของฉันไม่ผิดปกติ มีการพูดคุยเกี่ยวกับการแปลงสภาพเช่นเดียวกับที่เป็นไปได้เช่นstats.stackexchange.com/questions/13086/…ฉันขอแนะนำให้คุณตอบหรือแสดงความคิดเห็นที่นั่นเพื่ออธิบายว่าทำไมคำแนะนำนั้นไม่ปลอดภัย
Nick Cox

0

ผมถือว่าคำถามนี้เป็นเรื่องเกี่ยวกับข้อมูลความเข้าใจ (เมื่อเทียบกับตัวเลขที่มิฉะนั้น“การจัดการ” มัน)
หากข้อมูลที่จะหนักเทลด์และ / หรือต่อเนื่องผมพบเหล่านี้ "ชั้น" ของggplot2ประโยชน์มากสำหรับวัตถุประสงค์: และgeom_violingeom_jitter


3
คุณช่วยสรุปได้ไหมว่าทำไมไวโอลินและ / หรือจุดที่มีการแยกส่วนจะมีประโยชน์กับการแจกแจงแบบหนา
chl
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.