ฉันจะคำนวณช่วงความมั่นใจสำหรับการแจกแจงแบบไม่ปกติได้อย่างไร


21

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


2
วิธีแก้ปัญหาหนึ่งก็คือใช้ซีมโทติค CI ที่ใช้ประโยชน์จากความจริงที่ว่า RV มีการแจกแจงปกติแบบ จำกัด มาตรฐาน ตัวอย่างของคุณมีขนาดใหญ่พอสมควรดังนั้นมันอาจทำให้มีการประมาณที่ดี X¯-μS/n
JohnK

1
ไม่คุณจะพบว่าการปกปิดที่ไม่ดีในทั้งสองช่วงเวลาความเชื่อมั่นโดยใช้วิธีการนั้น ความครอบคลุมโดยเฉลี่ยอาจเป็นไปได้ด้วยดีโชคดี แต่อัตราความผิดพลาดทั้งสองทางนั้นไม่ถูกต้อง
Frank Harrell

2
"อคติหนักสำหรับค่าทั่วไปบางอย่าง" หมายความว่าอะไร โปรดทราบว่าอคติมีความหมายเฉพาะในสถิติ คุณควรพยายามหลีกเลี่ยงหากคุณไม่ได้ตั้งใจ คุณหมายถึง "คุณค่าบางอย่างเกิดขึ้นบ่อยมาก" หรือเปล่า? คุณสามารถแสดงการคำนวณและการแสดงผลหรือตารางข้อมูลของคุณได้ไหม?
Glen_b -Reinstate Monica

คำตอบ:


21

ใช่ bootstrap เป็นอีกทางเลือกหนึ่งในการรับช่วงความมั่นใจสำหรับค่าเฉลี่ย (และคุณต้องใช้ความพยายามเล็กน้อยหากคุณต้องการเข้าใจวิธีการ)

แนวคิดมีดังนี้:

  1. Resample พร้อมกับการแทนที่ B ครั้ง
  2. สำหรับแต่ละตัวอย่างเหล่านี้คำนวณค่าเฉลี่ยตัวอย่าง
  3. คำนวณช่วงความเชื่อมั่น bootstrap ที่เหมาะสม

เกี่ยวกับขั้นตอนสุดท้ายมีช่วงความเชื่อมั่น bootstrap (BCI) หลายประเภท การอ้างอิงต่อไปนี้นำเสนอการอภิปรายเกี่ยวกับคุณสมบัติของ BCI ประเภทต่างๆ:

http://staff.ustc.edu.cn/~zwp/teach/Stat-Comp/Efron_Bootstrap_CIs.pdf

http://www.tau.ac.il/~saharon/Boot/10.1.1.133.8405.pdf

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

ใน R คุณสามารถนำแนวคิดนี้ไปใช้ได้อย่างง่ายดายโดยใช้แพ็คเกจ R 'boot' ดังนี้

rm(list=ls())
# Simulated data
set.seed(123)
data0 = rgamma(383,5,3)
mean(data0) # Sample mean

hist(data0) # Histogram of the data

library(boot) 

# function to obtain the mean
Bmean <- function(data, indices) {
  d <- data[indices] # allows boot to select sample 
    return(mean(d))
} 

# bootstrapping with 1000 replications 
results <- boot(data=data0, statistic=Bmean, R=1000)

# view results
results 
plot(results)

# get 95% confidence interval 
boot.ci(results, type=c("norm", "basic", "perc", "bca"))

3
ขั้นตอนสุดท้ายคำนวณหลายหมายถึงการตกปลาสำหรับ CI ที่คุณชอบจากผลลัพธ์ คุณควรตัดสินใจเกี่ยวกับชนิดของ CI ที่คุณต้องการตามสิ่งที่พวกเขาเป็นมา
จอห์น

@John Different CI มีคุณสมบัติแตกต่างกัน เป็นวิธีปฏิบัติที่ดีในการตรวจสอบความคลาดเคลื่อนที่อาจเกิดขึ้น (และลองตรวจสอบแหล่งที่มาของสิ่งนี้) มันไม่เกี่ยวกับการตกปลาเพื่อผลลัพธ์ที่สะดวก
Munchausen

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

2
@IhaveCandy: ไม่มันแสดงให้เห็นถึงทฤษฎีบทขีด จำกัด กลางนั่นคือวิธีการกระจายตัวตัวอย่างของค่าเฉลี่ยมีแนวโน้มที่จะเป็นปกติถึงแม้จะเป็นค่าต่อไปนี้การกระจาย "ผิดปกติ" มาก นั่นคือเหตุผลที่ช่วงความเชื่อมั่น z อย่างง่ายจะไม่แตกต่างจากโซลูชันแฟนซีอื่น ๆ เช่น bootstrap
Michael M

1
@IhaveCandy โปรดดูความคิดเห็นของฉันด้านบน Michael Mayer ทำจุดเดียวกัน
JohnK

8

อีกทางเลือกมาตรฐานคือการคำนวณ CI ด้วยการทดสอบ Wilcoxon ในอาร์

wilcox.test(your-data, conf.int = TRUE, conf.level = 0.95)

น่าเสียดายที่มันให้ค่า CI ของคุณกับค่ามัธยฐาน (หลอก) ไม่ใช่ค่าเฉลี่ย แต่ถ้าข้อมูลนั้นไม่ปกติอย่างมากบางทีค่ามัธยฐานนั้นเป็นตัววัดที่ให้ข้อมูลมากกว่า


2

สำหรับข้อมูลบันทึกปกติOlsson (2005)แนะนำ 'วิธีแก้ไข Cox'

XE(X)=θเข้าสู่ระบบ(θ)

Y¯=S22±เสื้อdS2n+S42(n-1)

Y=เข้าสู่ระบบ(X)YY¯YS2

ฟังก์ชั่น R อยู่ด้านล่าง:

ModifiedCox <- function(x){
  n <- length(x)
  y <- log(x)
  y.m <- mean(y)
  y.var <- var(y)

  my.t <- qt(0.975, df = n-1)

  my.mean <- mean(x)
  upper <- y.m + y.var/2 + my.t*sqrt(y.var/n + y.var^2/(2*(n - 1)))
  lower <- y.m + y.var/2 - my.t*sqrt(y.var/n + y.var^2/(2*(n - 1)))

 return(list(upper = exp(upper), mean = my.mean, lower = exp(lower)))

}

ทำซ้ำตัวอย่างจากกระดาษของ Olsson

CO.level <- c(12.5, 20, 4, 20, 25, 170, 15, 20, 15)

ModifiedCox(CO.level)
$upper
[1] 78.72254

$mean
[1] 33.5

$lower
[1] 12.30929

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