ค้นหาช่วงความหนาแน่นของความน่าจะเป็น


9

ฉันมีเวกเตอร์

x <- c(1,2,3,4,5,5,5,6,6,6,6,
       7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
       7,7,7,7,7,7,7,7,8,8,8,8,9,9,9,10)

(เวกเตอร์ที่แท้จริงของฉันมีความยาว> 10,000) และฉันต้องการหาช่วงเวลาที่ 90% ของความหนาแน่นอยู่ คือquantile(x, probs=c(0.05,0.95), type=5)ที่เหมาะสมที่สุดหรือมีวิธีอื่น ๆ ?


คำถามของคุณค่อนข้างคลุมเครือเกี่ยวกับ "ช่วงเวลาที่ ... " - อาจมีหลายช่วงเวลา คุณสนใจ แต่เพียงผู้เดียวใน 90% คือการตัดแต่งแต่ละด้านอย่างสมมาตรหรือไม่? ท้ายที่สุดจากขั้นต่ำถึง 90% ile, 90% ของข้อมูลถูกจับเช่นเดียวกับ 10% ile ถึงค่าสูงสุด
Iterator

คุณกำลังมองหาช่วงเวลาที่สั้นที่สุดช่วงเวลาแบบสมมาตร (ความน่าจะเป็นที่เท่าเทียมกันในแต่ละด้าน) หรืออย่างอื่นหรือไม่?
Glen_b -Reinstate Monica

คำตอบ:


19

ดังที่กล่าวไว้ข้างต้นมีหลายวิธีในการกำหนดช่วงเวลาที่มีความหนาแน่น 90% สิ่งที่ยังไม่ได้ชี้ให้เห็นคือช่วงความหนาแน่นสูงสุด [หลัง] ( วิกิพีเดีย ) ซึ่งถูกกำหนดให้เป็น "ช่วงเวลาที่สั้นที่สุดซึ่งความแตกต่างของค่าฟังก์ชันความหนาแน่นสะสมเชิงประจักษ์ของจุดปลายคือความน่าจะเป็นที่ระบุ"

library(coda)
HPDinterval(as.mcmc(x), prob=0.9)

3

แน่นอนว่ามันเป็นแนวทางที่ตรงไปตรงมาที่สุด ฟังก์ชั่นค่อนข้างเร็ว ฉันใช้มันตลอดเวลากับตัวอย่างที่มีขนาดใหญ่กว่าที่คุณใช้อยู่เป็นร้อยเท่าและความเสถียรของค่าประมาณควรอยู่ที่ขนาดตัวอย่างของคุณ

มีฟังก์ชั่นในแพ็คเกจอื่นที่ให้ชุดสถิติเชิงพรรณนาที่สมบูรณ์มากขึ้น สิ่งที่ฉันใช้คือHmisc::describeแต่มีอีกหลายแพ็คเกจที่มีdescribeฟังก์ชั่น


3

วิธีการของคุณดูเหมือนสมเหตุสมผลโดยเฉพาะอย่างยิ่งกับข้อมูลที่ไม่ต่อเนื่องในตัวอย่าง

quantile(x,probs=c(0.05,0.95), type=5)
 5% 95% 
2.8 9.0

แต่อีกวิธีหนึ่งคือใช้เคอร์เนลที่คำนวณได้:

dx <- density(x)
dn <- cumsum(dx$y)/sum(dx$y)
li <- which(dn>=0.05)[1]
ui <- which(dn>=0.95)[1]
dx$x[c(li,ui)]
[1] 2.787912 9.163246

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