สูตรของ Doane สำหรับการกัดฮิสโตแกรม


9

ฉันใช้อัลกอริทึมต่าง ๆ เพื่อประเมินจำนวนถังขยะที่ดีที่สุดที่จะใช้กับฮิสโทแกรม สิ่งที่ฉันกำลังดำเนินการส่วนใหญ่มีการอธิบายไว้ในหน้า "ฮิสโตแกรม" ของ Wikipedia ในส่วน " จำนวนของถังขยะและความกว้าง " *

ฉันติดอยู่กับปัญหาเกี่ยวกับสูตรของ Doane:

1 + log(n) + log(1 + kurtosis(data) * sqrt(n / 6.))

ที่nเป็นขนาดของข้อมูล

ปัญหาคือเมื่อ kurtosis เป็นลบและn >> 1เนื่องจากการโต้แย้งของlogกลายเป็นลบ

* (หน้านั้นมีการเปลี่ยนแปลงนับตั้งแต่มีการโพสต์ลิงค์แก้ไขเพื่อชี้ไปที่หน้าเหมือนตอนที่โพสต์)


1
คุณรู้หรือไม่ว่าสูตรนั้นใช้ kurtosis หรือ kurtosis ส่วนเกิน (เช่นปกติ dist มี 4 หรือ 0)
Peter Flom

@PeterFlom: ในกระดาษต้นฉบับ ( amstat.tandfonline.com/doi/pdf/10.1080/00031305.1976.10479172 ) kurtosis นั้นหมายถึงความเบ้ แต่ฉันไม่ใช่ผู้เชี่ยวชาญ กระดาษต้นฉบับก็ค่อนข้างแตกต่างจากสูตรวิกิพีเดีย
Ruggero Turra

1
เอ่ออะไรนะ? kurtosis ถูกกำหนดให้เป็นความเบ้? ไม่สมเหตุสมผลเลย พวกเขาแตกต่างกันมาก ฉันไม่สามารถเข้าถึงกระดาษได้ แต่ดูเหมือนว่ามีบางอย่างเกิดขึ้นที่ใดที่หนึ่ง
Peter Flom

@ PeterFlom การแจกแจงแบบปกติควรมี kurtosis เป็น 3 ไม่ใช่ 4
Glen_b

@ PeterFlom ฉันได้รับการตรวจสอบปัญหาความเบ้ vs kurtosis - ดู "แก้ไข 2" ในคำตอบของฉัน
Glen_b -Reinstate Monica

คำตอบ:


11

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

คำตอบสั้น ๆ : หน้าวิกิพีเดีย - และสูตรของ OP ซึ่งดูเหมือนจะเหมือนกัน - เป็นเรื่องที่ผิดเพราะอย่างน้อยสามเหตุผล ฉันจะออกจากการสนทนาเดิมของฉัน (ซึ่งสันนิษฐานว่า OP และวิกิพีเดียมีมันถูกต้อง) ตั้งแต่ที่อธิบายถึงปัญหาบางอย่าง การอภิปรายที่ดีกว่าดังต่อไปนี้ในภายหลัง คำแนะนำสั้น ๆ : เพียงลืม Doane หากคุณต้องใช้มันให้ใช้สิ่งที่วิกิพีเดียบอกตอนนี้ (ฉันแก้ไขมัน)


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

อย่างไรก็ตามนั่นทำให้เกิดปัญหาที่คำในบันทึกสามารถไปทางลบด้วยตัวอย่างขนาดใหญ่ (แน่นอนว่ามันอาจเป็นที่ค่อนข้างเล็ก ) ฉันขอแนะนำไม่ให้ใช้มันกับ kurtosis ส่วนเกินเชิงลบ (ฉันไม่เคยใช้มันเกินกว่า unimodality อยู่ดี; เมื่อสิ่งต่างๆได้รับ multimodal คุณต้องการใช้ความคิด kurtosis ส่วนเกินกับแต่ละโหมด Kurtosis ส่วนเกินเพียงน้อยกว่า 0) และขนาดตัวอย่างที่เรียบง่ายมันจะไม่ใช่ปัญหาใหญ่0n

ฉันยังแนะนำว่าไม่ว่าในกรณีใดมันจะให้ถังขยะน้อยเกินไปในขนาดตัวอย่างที่มีขนาดใหญ่ถึงแม้ว่ามันจะทำงานได้ตามที่ตั้งใจก็ตาม

คุณอาจพบบทความนี้ (โดย CVer Rob Hyndmanปกติ):

http://www.robjhyndman.com/papers/sturges.pdf

ที่น่าสนใจ หากการโต้เถียงของ Sturges ผิดสูตรของ Doane มีปัญหาเดียวกัน ... เนื่องจาก Rob บันทึกไว้อย่างชัดเจนในกระดาษ

ในบทความนั้น (และในคำตอบนี้) เขาให้พยักหน้าให้กับกฎของฟรีดแมน - ไดโกนิส ในกระดาษเขายังชี้ไปที่วิธีการที่กล่าวถึงโดย Matt Wand (เขาหมายถึงกระดาษทำงานที่ดูเหมือนจะไม่ออนไลน์ แต่เอกสารต่อมาสามารถใช้ได้ถ้าคุณมีการเข้าถึง):

http://www.jstor.org/discover/10.2307/2684697

[แก้ไข: จริง ๆ แล้วลิงค์ไปยังกระดาษทำงานอยู่ในหน้า Citeseer ]

วิธีการดังกล่าวเกี่ยวข้องกับการประมาณฟังก์ชั่นเฉพาะเพื่อให้ได้ประมาณที่ดีที่สุด (ในแง่ของความผิดพลาดแบบบูรณาการกำลังสองเฉลี่ย, MISE) ความกว้างช่องเก็บสำหรับการประเมินความหนาแน่นพื้นฐาน ในขณะที่สิ่งเหล่านี้ทำงานได้ดีและให้ถังขยะมากกว่า Sturges หรือ Doane โดยทั่วไปบางครั้งฉันยังคงต้องการใช้ถังขยะเพิ่มเติมยังแม้ว่ามันมักจะพยายามครั้งแรกที่ดีมาก

ตรงไปตรงมาฉันไม่รู้ว่าทำไมวิธีการของ Wand (หรืออย่างน้อยที่สุดกฎ Fredman Diaconis) ไม่ใช่ค่าเริ่มต้นที่สวยมากทุกที่

อย่างน้อย R เสนอการคำนวณ Freedman-Diaconis ของจำนวนถังขยะ:

 nclass.FD(rnorm(100))
[1] 11
 nclass.FD(runif(100))
[1] 6
 nclass.FD(rt(100,1))
[1] 71

ดู ?nclass.FD

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


แก้ไข 2:

ฉันตัดสินใจที่จะตรวจสอบปัญหาความเบ้เทียบกับความรุนแรงที่ @PeterFlom แสดงออกอย่างถูกต้องว่า

ฉันเพิ่งดูกระดาษ Doane ที่เชื่อมโยงกับ (ฉันอ่านก่อนหน้านี้ .... แต่เมื่อเกือบ 30 ปีที่แล้ว) - มันไม่ได้อ้างอิงถึงอาการเคิร์ตสิสเลยแม้แต่น้อย

สูตรที่แท้จริงของ Doane คือ:Ke=log2(1+g1σg1)

โดยที่คือจำนวนของการเพิ่มถังขยะคือช่วงเวลาที่ 3 ความเบ้ [จริง ๆ แล้ว Doane ตามการใช้งานทั่วไปค่อนข้างเป็นเวลาใช้สำหรับการลงนาม (!) ความโมโหช่วงเวลาที่ 3 (ที่มาของการละเมิดโดยไม่ต้องแก้ไขโดยเฉพาะอย่างยิ่งของสัญกรณ์นี้ค่อนข้างเก่าและฉันจะไม่ไล่ตาม มันยกเว้นที่จะบอกว่ามันโชคดีที่ปรากฏน้อยมากตอนนี้)]Keg1b1

ตอนนี้เป็นปกติ (แม้ว่าการประมาณนั้นจะไม่ดีเท่าที่ n จะผ่านมา 100; Doane ใช้แบบฟอร์มแรก)σg1=6(n2)(n+1)(n+3)6n

อย่างไรก็ตามดูเหมือนว่าตลอดทางที่ใครบางคนพยายามปรับให้เข้ากับ kurtosis (ในเวลาที่ฉันเขียนWikipedia มีมันในแง่ของ kurtosisเช่นและฉันไม่คิดว่าพวกเขาทำมัน) - แต่มีเหตุผลที่ชัดเจน ที่จะเชื่อว่าสูตรนั้นผิดปกติ (โปรดทราบว่าข้อผิดพลาดมาตรฐานที่ใช้คือการประเมินขั้นสุดท้ายสำหรับความเบ้ที่ฉันให้ไว้ข้างต้น) ฉันคิดว่าฉันเคยเห็นการใช้ความรุนแรงในสถานที่อื่นนอกเหนือจากวิกิพีเดีย แต่นอกเหนือจากการไม่ได้อยู่ในกระดาษของ Doane มันไม่ได้อยู่ในกระดาษของ Scott หรือกระดาษ Hyndman ที่ฉันชี้ไปหรือในกระดาษของ Wand ดูเหมือนว่าจะมาจากที่ไหนสักแห่ง แต่ (เช่นฉันแน่ใจว่ามันไม่ใช่ต้นฉบับของวิกิพีเดีย) เนื่องจาก Doane ไม่มีการประมาณσg1. ดูเหมือนว่าจะมีการเล่นหลายครั้งก่อนที่จะจบลงที่นั่น; ฉันจะสนใจถ้ามีคนติดตามมัน

ฉันคิดว่าการโต้แย้งของ Doane น่าจะขยายไปสู่ความเป็น kurtosis ได้อย่างมีความสุขแต่ข้อผิดพลาดมาตรฐานที่ถูกต้องจะต้องถูกนำมาใช้

อย่างไรก็ตามเนื่องจาก Doane อาศัยข้อโต้แย้งของ Sturges และ Sturges ที่ดูเหมือนว่าจะมีข้อบกพร่องบางทีองค์กรทั้งหมดอาจถึงวาระ ในกรณีใด ๆ ฉันได้แก้ไขหน้าพูดคุยฮิสโตแกรมในวิกิพีเดียแจ้งข้อผิดพลาด

---

แก้ไข 3: ฉันได้แก้ไขหน้าวิกิพีเดีย (แต่ฉันมีอิสระในการรับค่าสัมบูรณ์ของความเบ้มิฉะนั้นสูตรดั้งเดิมของ Doane ไม่สามารถใช้สำหรับการแจกแจงแบบเบ้ซ้ายขณะที่มันยืนอยู่ - ชัดเจนสำหรับจำนวนของสัญลักษณ์ถังขยะ ความเบ้นั้นไม่มีสาระ) การพูดอย่างเคร่งครัดฉันควรนำเสนอสูตรในรูปแบบดั้งเดิม (ผิด) แล้วอธิบายว่าทำไมมันไม่สมเหตุสมผล แต่ฉันคิดว่านั่นเป็นปัญหาด้วยเหตุผลหลายประการ - ไม่น้อยที่ผู้คนจะถูกล่อลวงเพียงคัดลอกสูตรและละเว้น คำอธิบาย ฉันเชื่อว่ามันครอบคลุมความตั้งใจดั้งเดิมของ Doane ไม่ว่าในกรณีใดมันเป็นการปรับปรุงที่ใหญ่กว่าเรื่องไร้สาระที่เป็นต้นฉบับ (ได้โปรดใครก็ตามที่สามารถเข้าถึงกระดาษต้นฉบับดูได้และวิธีb1 มีการกำหนดและตรวจสอบการเปลี่ยนแปลงของฉันในวิกิพีเดียเพื่อให้แน่ใจว่ามีเหตุผล - มีอย่างน้อยสามสิ่งที่ผิด - kurtosis ข้อผิดพลาดมาตรฐานและฐานบันทึกที่ผิดรวมทั้งข้อผิดพลาดเล็ก ๆ ของ Doane)


ขอบคุณมาก. โดยวิธีการที่ฉันแปลกใจที่เห็นข้อผิดพลาดใน "สถิติอเมริกัน" ผมไม่เคยเห็นสัญกรณ์{} b1
Ruggero Turra

ข้อผิดพลาดเล็ก ๆ น้อย ๆ ของสเกลนั้น (การไม่มีค่าสัมบูรณ์) เกิดขึ้นไม่ใช่สิ่งที่เกิดขึ้นไม่บ่อยนักในวารสาร - สถิตินอกตัวฉันเห็นได้ชัดกว่า สำหรับสัญกรณ์มันเป็นเรื่องธรรมดา eg1 , eg2 , eg3 ... ฉันสามารถชี้ไปที่หลายสิบ
Glen_b

2

วัดโด่งที่กำหนดไว้ในแง่ของช่วงเวลาที่สองและสี่คือไม่เคยลบ ( ดู ) log(1+...)>0แล้ว

ปริมาณนี้จะดำเนินการในคำสั่งจากห้องสมุดวิจัยkurtosis() momentsนอกจากนี้การใช้คำสั่งhist()คุณสามารถระบุจำนวนการแบ่งได้ดังนี้

library(moments)

n <- 250
data <- rnorm(n)

# Sturges formula log_2(n) + 1
hist(data,breaks = "Sturges")

# Doane's formula    
Doane <- 1 + log(n) + log(1 + kurtosis(data) * sqrt(n / 6.))
hist(data,breaks = Doane)

สูตรที่ใช้ในคำสั่งเป็นเพียงkurtosis()mean((data - mean(data))^4)/mean((data - mean(data))^2)^2

ทีนี้ถ้าคุณต้องการตรวจสอบว่าอะไรคือสูตรที่ดีที่สุดคุณจะต้องมีเกณฑ์ พิจารณาว่าเรื่องนี้ได้รับการกล่าวถึงอย่างจริงจังในวรรณกรรมทางสถิติ


สิ่งที่ฉันไม่รู้คือนิยามของ kurtosis ในสูตรของ Doane คืออะไร
Ruggero Turra

มีลิงก์ไปยังคำจำกัดความของ kurtosis ในรายการ wikipedia ที่คุณโพสต์ไว้ Incidentaly มันเหมือนกับสิ่งที่ฉันโพสต์ มีการประมาณว่าช่วงเวลากลางตัวอย่างที่สี่หารด้วยสี่เหลี่ยมของช่วงเวลากลางตัวอย่างที่สอง โปรดดูการแก้ไขของฉันสำหรับรหัส
Miles Davis

1
อีกครั้งฉันไม่ทราบว่าของคุณเป็นสูตรที่ถูกต้องของ Doane หรือไม่ถ้าคุณดูที่กระดาษเช่นเขาใช้ log2 แทน log
Ruggero Turra

ดีที่เป็น "สูตร Doane ของ" คุณโพสต์¬¬ อย่างไรก็ตามนี้สามารถแก้ไขได้โดยการใช้นิด ๆแทนlog(n,2) log(n)แต่รายการวิกิพีเดียเช่นเดียวกับแหล่งอื่น ๆ logแสดงให้เห็นว่ามันควรจะเป็น
Miles Davis
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.