การคำนวณจำนวนที่เหมาะสมของถังขยะในฮิสโตแกรม


79

ฉันสนใจที่จะหาวิธีที่ดีที่สุดเท่าที่จะทำได้เพื่อหาจำนวนถังขยะที่ควรใช้ในฮิสโตแกรม ข้อมูลของฉันควรอยู่ในช่วงวัตถุสูงสุด 30 ถึง 350 และโดยเฉพาะอย่างยิ่งฉันพยายามที่จะใช้การกำหนดเกณฑ์ขั้นต่ำ (เช่นวิธีของ Otsu) โดยที่วัตถุ "ดี" ซึ่งฉันควรมีน้อยกว่าและควรแยกออกจาก " วัตถุที่ไม่ดีซึ่งควรมีความหนาแน่นมากกว่าในค่า ค่าที่เป็นรูปธรรมจะมีคะแนน 1-10 สำหรับแต่ละวัตถุ ฉันมี 5-10 วัตถุที่มีคะแนน 6-10 และ 20-25 วัตถุที่มีคะแนน 1-4 ฉันต้องการหารูปแบบฮิสโตแกรม binning ที่โดยทั่วไปแล้วอนุญาตให้บางสิ่งบางอย่างเช่นวิธีของ Otsu ในการ จำกัด วัตถุที่ให้คะแนนต่ำ อย่างไรก็ตามในการดำเนินการของ Otsu ที่ฉันเคยเห็นขนาดของช่องเก็บข้อมูลเท่ากับ 256 และบ่อยครั้งที่ฉันมีจุดข้อมูลน้อยกว่ามากที่ 256 ที่ฉันแนะนำว่า 256 ไม่ใช่หมายเลขถังขยะที่ดี ด้วยข้อมูลน้อยมากฉันควรใช้วิธีใดในการคำนวณจำนวนถังขยะที่จะใช้


ฉันคิดว่ากฎของ Sturges สามารถใช้สำหรับ n <200; โดยที่ n คือจำนวนการสังเกต
venkasub

คำตอบ:


94

อิสระ-Diaconisกฎมีประสิทธิภาพมากและทำงานได้ดีในทางปฏิบัติ ถังความกว้างมีการตั้งค่า1/3} ดังนั้นจำนวนของถังขยะคือโดยที่คือจำนวนการสังเกตค่าสูงสุดคือค่าสูงสุดและ min เป็นค่าต่ำสุดh=2×IQR×n1/3(maxmin)/hn

ในฐาน R คุณสามารถใช้:

hist(x, breaks="FD")

สำหรับไลบรารีการพล็อตอื่นที่ไม่มีตัวเลือกนี้ (เช่น, ggplot2) คุณสามารถคำนวณความกว้างเป็น:

bw <- 2 * IQR(x) / length(x)^(1/3)

### for example #####
ggplot() + geom_histogram(aes(x), binwidth = bw)

2
@nico ค่าเริ่มต้นใน R คือ break = "Sturges" ซึ่งไม่ได้ให้ผลลัพธ์ที่ดีเสมอไป
Rob Hyndman

4
คนเราคำนวณได้IQRอย่างไร
เคิร์ตมูลเลอร์

1
@KurtMueller IQR หมายถึงช่วงระหว่างควอไทล์ มองหาควอไทล์ที่ 1 และควอไทล์ที่สามและความแตกต่างคือ IQR IQR มาพร้อมกับ R เพื่อให้คุณสามารถใช้งานได้
xiaodai

4
ถ้าฉันไม่เข้าใจผิดคำตอบควรอ่านnum_bins <- diff(range(x)) / (2 * IQR(x) / length(x)^(1/3))
Jasha

1
nclass.FDไม่ได้มีอยู่เมื่อเก้าปีก่อน
Rob Hyndman

18

หากคุณใช้ถังขยะน้อยเกินไปฮิสโทแกรมจะไม่แสดงข้อมูลได้ดีนัก หากคุณมีถังขยะมากเกินไปคุณจะได้หวีที่หักซึ่งก็ไม่ได้ให้ความรู้สึกถึงการกระจาย

ทางออกหนึ่งคือการสร้างกราฟที่แสดงทุกค่า อาจเป็นพล็อตจุดหรือการแจกแจงความถี่สะสมซึ่งไม่จำเป็นต้องมีถังขยะ

หากคุณต้องการสร้างการแจกแจงความถี่ที่มีช่องว่างเท่า ๆ กันคุณต้องตัดสินใจว่าจะมีกี่ถังขยะ (หรือความกว้างของแต่ละช่อง) การตัดสินใจอย่างชัดเจนขึ้นอยู่กับจำนวนของค่า หากคุณมีค่ามากมายกราฟของคุณจะดูดีขึ้นและมีข้อมูลมากขึ้นหากคุณมีถังขยะจำนวนมาก หน้าวิกิพีเดียนี้แสดงวิธีการหลายวิธีในการตัดสินความกว้างของถังขยะจากจำนวนการสังเกต วิธีที่ง่ายที่สุดคือการกำหนดจำนวนของถังขยะเท่ากับรากที่สองของจำนวนค่าที่คุณกำลัง binning

หน้านี้จากฮิเดอากิชิมาซากิอธิบายวิธีการอื่น มันค่อนข้างซับซ้อนกว่าในการคำนวณ แต่ดูเหมือนว่าจะทำได้ดีมาก ส่วนบนของหน้าคือแอป Java เลื่อนผ่านเพื่อดูทฤษฎีและคำอธิบายจากนั้นเลื่อนไปเรื่อย ๆ เพื่อค้นหาลิงก์ไปยังเอกสารที่อธิบายวิธีการ


ลิงก์ไปยังหน้าของฮิเดะกินั้นใช้งานไม่ได้ ฉันไม่แน่ใจว่านี่เป็นสิ่งเดียวกันหรือไม่: toyoizumilab.brain.riken.jp/hideaki/res/histogram.html
DarenW

9

บางทีกระดาษ "การเปลี่ยนแปลงในฮิสโตแกรม " ของ Denby และ Mallows อาจเป็นที่สนใจ:

จอแสดงผลใหม่นี้ซึ่งเราเรียกว่า "dhist" (สำหรับฮิสโตแกรมแนวทแยงมุม) รักษาคุณสมบัติที่ต้องการของทั้งฮิสต์ความกว้างเท่ากันและฮิสต์พื้นที่เท่ากัน มันจะแสดงถังขยะแคบ ๆ สูง ๆ เช่น ea hist เมื่อมี spikes ในข้อมูลและจะแสดงค่าผิดปกติโดดเดี่ยวเช่นเดียวกับฮิสโตแกรมปกติ

พวกเขายังพูดถึงว่ารหัสใน R สามารถร้องขอได้


5

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

ฉันยังเป็นแฟนตัวยงของการนำเสนอฮิสโทแกรมที่มีจำนวนแต้มเท่ากันในแต่ละถังแทนที่จะเป็นความกว้างของถังขยะเดียวกัน ฉันมักจะพบว่าสิ่งเหล่านี้เป็นตัวแทนของข้อมูลที่ดีกว่านั้นก็คือความกว้างของถังขยะคงที่แม้ว่าพวกมันจะสร้างยากมาก


1
ขออภัยฉันควรได้กล่าวว่าฉันต้องทำแบบอัตโนมัติ ตัวเลือกของ "การทำหลาย ๆ ครั้งจนกว่าฉันจะพบสิ่งที่เหมาะสมกับจุดประสงค์ของฉัน" จะไม่ทำงานสำหรับฉัน จะต้องมีการทำคอมพิวเตอร์ ...
โทนี่สตาร์ค

4
ฉันเห็นด้วย - ความคิดที่ว่ามีความกว้างช่องเก็บของ "ที่ดีที่สุด" คือข้อสมมติฐานที่ทำให้เข้าใจง่ายมาก
hadley

5

คุณเห็นวิธีการShimazaki-Shinomotoหรือไม่?

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


3

ถ้าฉันต้องการกำหนดจำนวนของถังขยะโดยทางโปรแกรมฉันมักจะเริ่มต้นด้วยฮิสโตแกรมที่มีวิธีถังขยะมากกว่าที่จำเป็น เมื่อเติมฮิสโตแกรมแล้วฉันจะรวมถังขยะจนกว่าฉันจะมีรายการต่อช่องเก็บข้อมูลเพียงพอสำหรับวิธีการที่ฉันใช้เช่นถ้าฉันต้องการสร้างแบบจำลองความไม่แน่นอนปัวซองในการทดสอบการนับด้วยความไม่แน่นอนจากการแจกแจงแบบปกติ รายการ.


2

โปรดดูคำตอบนี้เป็นที่สมบูรณ์ของคำตอบนายร็อบ Hyndman ของ

เพื่อที่จะสร้างแปลง histogram กับช่วงเวลาเดียวกันแน่นอนหรือ 'binwidths' โดยใช้กฎอิสระ-Diaconisทั้งที่มีพื้นฐาน R หรือggplot2แพคเกจที่เราสามารถใช้ค่าใดค่าหนึ่งของฟังก์ชั่นคือhist() breaksสมมติว่าเราต้องการสร้างฮิสโตแกรมqsecจากmtcarsข้อมูลโดยใช้กฎ Freedman – Diaconis ในพื้นฐาน R เราใช้

x <- mtcars$qsec
hist(x, breaks = "FD")

ในggplot2แพคเกจที่เราใช้

h <- hist(x, breaks = "FD", plot = FALSE)
qplot(x, geom = "histogram", breaks = h$breaks, fill = I("red"), col = I("white"))

หรืออีกวิธีหนึ่ง

ggplot(mtcars, aes(x)) + geom_histogram(breaks = h$breaks, col = "white")

พวกเขาทั้งหมดสร้างพล็อตฮิสโตแกรมที่มีช่วงเวลาและจำนวนของถังขยะที่แน่นอนตามที่ตั้งใจไว้


-5

ฉันมีการสังเกต 600 ครั้งสำหรับ Au g / t Bin ขนาด 1 มอบสิ่งนี้ให้ฉัน:ป้อนคำอธิบายรูปภาพที่นี่

การเลือกอัตโนมัติ (ละเว้นช่วงของช่องเก็บ) จะทำให้:ป้อนคำอธิบายรูปภาพที่นี่

ข้อมูลดู O'K บนกราฟที่หนึ่งและที่สองราวกับว่าไม่มีปัญหากับความสมบูรณ์ของข้อมูล เฉพาะ bin ขนาด 0.1 (g / t) เท่านั้นที่ตอบคำถาม: การวัดนั้นไม่ถูกต้องและไม่แม่นยำป้อนคำอธิบายรูปภาพที่นี่

วิจารณญาณของฉัน: 1. ไม่มีเทคนิคการวัดบนโลกที่จะแสดงให้เห็นถึงคุณค่าที่แท้จริงของปรากฏการณ์ทางธรรมชาติ การวัดทั้งหมดเป็นค่าประมาณบางอย่างใกล้เคียงกับมูลค่าที่แท้จริง มันขึ้นอยู่กับการออกแบบการสุ่มตัวอย่างการสอบเทียบคุณสมบัติของมนุษย์ ฯลฯ 2. นี่คือสาเหตุที่การกระจายตัวนั้นเบ้มากกว่าแบบสมมาตร 3. อย่างไรก็ตามรูปร่างของการกระจายควรคล้ายกับส่วน "ระฆังเหมือน" อย่างน้อยประมาณ ทีละระฆัง (ยกเว้นในสภาพแวดล้อมทางธรณีวิทยาหลายแห่ง) 4. การกระจายความถี่ด้วยการปรับขนาดถังขยะสามารถช่วยเปิดเผยรูปแบบการวัดที่แม่นยำและแม่นยำ ดังนั้นต้องมีการเลือกขนาดถังขยะมากกว่าการตัดกฎบนหิน


2
นี่เป็นความคิดเห็นมากกว่าคำตอบเว้นแต่ว่าคุณจะสะกดเอาคุณธรรม ฉันจะบอกว่าคุณธรรมคือ: กฎทั้งหมดเป็นกฎของหัวแม่มือบางคนมีพื้นฐานทางสถิติมากกว่าคนอื่น ๆ แต่กฎส่วนใหญ่อาจไม่ทำสิ่งที่คุณต้องการหากการกระจายมีความเบ้หรือความโด่งสูงมาก ดังนั้นใช้วิจารณญาณของคุณด้วย
Nick Cox

2
คุณได้เพิ่มความคิดเห็น แต่ฉันไม่ชัดเจนว่ามีส่วนร่วมรายละเอียดใหม่ที่เป็นประโยชน์ในหัวข้อ 1. ฉันสบายดี แต่ไม่ใช่ปัญหาที่นี่ 2. ไม่ได้ติดตามจาก 1. เนื่องจากการแจกแจงบางอย่างเกือบจะสมมาตร 3. เป็นพิรุธ: มีหลายสถานการณ์ที่คาดว่ารูปทรงอื่นที่ไม่ใช่ระฆัง 4. ยังมีพิรุธเนื่องจากคุณภาพของการวัดดั้งเดิมมักไม่ปรากฏชัดจากฮิสโตแกรมใด ๆ แต่มักจะตรวจสอบอย่างดีที่สุดโดยให้ความสนใจกับโครงสร้างที่ดีมากของการกระจาย
Nick Cox

2. สมมาตรเกือบไม่สมมาตร คุณไม่สามารถตั้งครรภ์เกือบ: ตั้งครรภ์หรือไม่
Sergo Cusiani

2
แน่นอนว่า แต่ความสมมาตรของข้อมูลที่แน่นอนนั้นหาได้ยากมากหากว่าฉันได้พูดว่า "สมมาตร" บางคนก็อาจมีเหตุผลคัดค้านเช่นกัน มันง่ายมากที่จะสมมาตรเกือบ; นั่นคือสาเหตุและวิธีที่เรามีมาตรการความเบ้
Nick Cox

1
สังเกต แต่ความคิดเห็นของคุณเป็นเรื่องทั่วไปและขาดบริบทที่คุณให้ในขณะนี้ ในทางกลับกันฉันพูดว่า "น่าสงสัย" ไม่ใช่ "ผิด" ความคิดเห็นสำคัญของฉันยังคงอยู่ที่คำตอบของคุณไม่ได้เพิ่มมากนักในการเลือกขนาดถังหรือจำนวนถังเท่ากัน การมีอีกตัวอย่างที่ยากคือการหมุนคำถามไม่ใช่คำตอบจริงๆ
Nick Cox
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.