Bagaimana cara menghitung interval kepercayaan untuk distribusi yang tidak normal?

21

Saya memiliki 383 sampel yang memiliki bias berat untuk beberapa nilai umum, bagaimana cara menghitung 95% CI untuk rata-rata? CI yang saya hitung sepertinya jauh, yang saya asumsikan adalah karena data saya tidak terlihat seperti kurva ketika saya membuat histogram. Jadi saya pikir saya harus menggunakan sesuatu seperti bootstrap, yang saya tidak mengerti dengan baik.

IhaveCandy
sumber
2
Salah satu solusinya adalah dengan menggunakan CI asimptotik yang memanfaatkan fakta bahwa RV X¯μS/n memiliki distribusi normal standar yang membatasi. Sampel Anda cukup besar sehingga mungkin membuat perkiraan yang baik.
JohnK
1
Tidak, Anda akan menemukan cakupan ekor yang sangat buruk di kedua sisi interval kepercayaan menggunakan pendekatan itu. Cakupan rata-rata mungkin beruntung, tetapi tingkat kesalahan ekor keduanya akan salah.
Frank Harrell
2
Apa yang dimaksud dengan "bias berat untuk beberapa nilai umum"? Perhatikan bahwa bias memiliki arti tertentu dalam statistik; Anda harus mencoba menghindarinya jika tidak bermaksud demikian. Apakah Anda hanya bermaksud "beberapa nilai tertentu sangat sering terjadi"? Bisakah Anda menunjukkan perhitungan Anda dan beberapa tampilan atau tabel data Anda?
Glen_b -Reinstate Monica

Jawaban:

21

Ya, bootstrap adalah alternatif untuk mendapatkan interval kepercayaan untuk mean (dan Anda harus melakukan sedikit usaha jika Anda ingin memahami metode ini).

Idenya adalah sebagai berikut:

  1. Sampel ulang dengan penggantian B kali.
  2. Untuk masing-masing sampel ini hitung rata-rata sampel.
  3. Hitung interval kepercayaan bootstrap yang sesuai .

Mengenai langkah terakhir, ada beberapa jenis interval kepercayaan bootstrap (BCI). Referensi berikut menyajikan diskusi tentang sifat-sifat berbagai jenis BCI:

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

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

Merupakan praktik yang baik untuk menghitung beberapa BCI dan mencoba memahami kemungkinan perbedaan di antara mereka.

Di R, Anda dapat dengan mudah mengimplementasikan ide ini menggunakan paket R 'boot' sebagai berikut:

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"))
Munchausen
sumber
3
Langkah terakhir, hitung beberapa, menyiratkan memancing untuk CI yang Anda sukai dari hasilnya. Anda harus memutuskan jenis CI yang Anda inginkan berdasarkan apa yang mereka miliki sebelumnya.
John
@ John John CI berbeda memiliki sifat yang berbeda. Ini adalah praktik yang baik untuk memeriksa kemungkinan perbedaan (dan coba selidiki sumbernya). Ini bukan tentang memancing untuk hasil yang nyaman.
Munchausen
Tentu saja, tetapi tanpa deskripsi alasan di jawaban Anda itu "menyiratkan" memancing. Dan Anda masih tidak menyatakan bahwa sangat penting untuk benar-benar memilih CI yang Anda inginkan terlebih dahulu. Saya menyarankan pembaruan jawaban dengan beberapa informasi penting untuk penanya yang naif. Akan lebih baik jika Anda menyatakan CI mana yang umumnya Anda sukai dan mengapa, atau yang Anda sukai dalam kasus seperti ini dan mengapa.
John
2
@IhaveCandy: Tidak. Ini menunjukkan Teorema Limit Sentral, yaitu bagaimana distribusi sampling rerata cenderung ke normal, bahkan untuk nilai yang mengikuti distribusi yang sangat "tidak normal". Itulah sebabnya interval kepercayaan z sederhana tidak akan jauh berbeda dengan solusi mewah lainnya, misalnya bootstrap.
Michael M
1
@IhaveCandy Silakan lihat komentar saya di atas, Michael Mayer membuat poin yang sama.
JohnK
8

Alternatif standar lain adalah menghitung CI dengan uji Wilcoxon. Dalam R

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

Sayangnya, ini memberi Anda CI di sekitar median (semu) bukan berarti, tetapi kemudian jika data sangat tidak normal mungkin median adalah ukuran yang lebih informatif.

Jacques Wainer
sumber
2

Untuk data log-normal, Olsson (2005) menyarankan 'metode Cox yang dimodifikasi'

Jika terdistribusi secara normal dan , interval kepercayaan untuk adalah:XE(X)=θlog(θ)

Y¯=S22±tdfS2n+S42(n-1)

Di mana , rata-rata sampel adalah dan varians sampel adalah . Untuk df, gunakan n-1.Y=log(X)YY¯YS2

Fungsi R di bawah:

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

}

Mengulangi contoh dari kertas 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
Tony Ladson
sumber
1

Anda bisa menggunakan interval kepercayaan standar untuk mean: Ingatlah bahwa ketika kita menghitung interval kepercayaan untuk mean, kita dapat naik banding ke teorema batas pusat dan menggunakan interval standar (menggunakan titik-titik kritis dari distribusi-T), bahkan jika data yang mendasarinya tidak normal. Faktanya, selama distribusi data yang mendasarinya memiliki varian yang terbatas, distribusi mean sampel dengan pengamatan harus benar-benar tidak dapat dibedakan dari distribusi normal. Ini akan menjadi kasus bahkan jika distribusi data yang mendasarinya sangat berbeda dengan distribusi normal.n=383

Pasang kembali Monica
sumber