Normal olmayan bir dağıtım için güven aralıklarını nasıl hesaplayabilirim?


21

Bazı ortak değerler için ağır bir önyargıya sahip 383 örnek var, ortalama için% 95 CI hesaplamak nasıl? Hesapladığım CI çok kapalı görünüyor, ki bunun bir histogram yaptığımda verilerimin eğri gibi görünmemesi. Bu yüzden önyükleme gibi çok iyi anlamadığım bir şey kullanmam gerektiğini düşünüyorum.


2
Bir çözüm, RV 'ın sınırlayıcı standart normal dağılıma sahip olmasından faydalanan asimptotik CI kullanmak olacaktır . Numuneniz oldukça büyük olduğundan iyi bir yaklaşım sağlayabilir. X¯μS/n
JohnK

1
Hayır, bu yaklaşımı kullanarak güven aralığının her iki kuyruğunda gerçekten kötü kuyruk kapsama alanı bulacaksınız. Ortalama kapsama alanı iyi şanslar olabilir, ancak her iki kuyruk hata oranı yanlış olacaktır.
Frank Harrell

2
"Bazı ortak değerler için ağır önyargı" ne anlama geliyor? Önyargının istatistiklerde özel bir anlamı olduğunu unutmayın; bunu demek istemiyorsanız, bundan kaçınmalısınız. "Bazı belirli değerler çok sık meydana gelir" mi demek istediniz? Hesaplamalarınızı ve verilerinizin bir kısmını veya tablosunu gösterebilir misiniz?
Glen_b -Monica

Yanıtlar:


21

Evet, bootstrap ortalama için güven aralıkları elde etmek için bir alternatiftir (ve yöntemi anlamak istiyorsanız biraz çaba sarf etmeniz gerekir).

Fikir aşağıdaki gibidir:

  1. Yedek B kez yeniden örnekleyin.
  2. Bu örneklerin her biri için örnek ortalamasını hesaplayın.
  3. Uygun bir bootstrap güven aralığını hesaplayın .

Son adımla ilgili olarak, çeşitli bootstrap güven aralığı (BCI) vardır. Aşağıdaki referanslar, farklı BCI tiplerinin özellikleri hakkında bir tartışma sunmaktadır:

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

Birkaç BCI hesaplamak ve aralarındaki olası tutarsızlıkları anlamaya çalışmak iyi bir uygulamadır.

R'de, R paketini 'boot' kullanarak aşağıdaki şekilde kolayca uygulayabilirsiniz:

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
Son adım, birkaç hesapla, sonuçtan beğendiğiniz bir CI için balık avlamayı ima eder. Önceden ne olduklarına bağlı olarak istediğiniz CI türüne karar vermelisiniz.
John

@John Farklı CI farklı özelliklere sahiptir. Olası tutarsızlıkları kontrol etmek iyi bir uygulamadır (ve bunun kaynağını araştırmaya çalışın). Uygun bir sonuç için balıkçılıkla ilgili değildir.
Munchausen

Kesinlikle, ama cevabınızın nedeni böyle bir açıklama olmadan balıkçılık "ima" anlamına gelir. Ve hala ilk önce istediğiniz CI'yi seçmenin kritik olduğunu belirtmiyorsunuz. Saf bir soru soran için bazı kritik bilgilerle cevabın güncellenmesini öneriyorum. Genel olarak hangi CI'yi tercih ettiğinizi ve nedenini ya da böyle bir durumda hangisini tercih ettiğinizi belirtmeniz daha da iyi olacaktır.
John

2
@IhaveCandy: Hayır. Merkezi Limit Teoremini, yani ortalamanın örnekleme dağılımının, çok "normal olmayan" bir dağılımı izleyen değerler için bile nasıl normale döndüğünü gösterir. Bu nedenle basit z güven aralığı, diğer süslü çözümlerden, örneğin bootstrap'den çok farklı olmayacaktır.
Michael M

1
@IhaveCandy Lütfen yukarıdaki yorumuma bakın, Michael Mayer de aynı şeyi yapıyor.
JohnK

8

Diğer bir standart alternatif, Wilcoxon testi ile CI'yi hesaplamaktır. R cinsinden

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

Ne yazık ki, ortalamayı (psödo) medyan etrafında CI verir, ancak daha sonra veriler çok normal değilse, medyan daha bilgilendirici bir önlemdir.


2

Log-normal veriler için Olsson (2005) 'değiştirilmiş Cox yöntemi' önermektedir

XE(X)=θlog(θ)

Y¯=S22±tdfS2n+S42(n1)

Y=log(X)YY¯YS2

Bir R işlevi aşağıdadı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'un makalesinden örnek tekrarlama

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.