非正規分布の信頼区間を計算するにはどうすればよいですか?


21

いくつかの一般的な値に大きな偏りがある383個のサンプルがありますが、平均の95%CIをどのように計算しますか?私が計算したCIはかなり外れているように見えます。これは、ヒストグラムを作成するときにデータが曲線のように見えないためです。だから、ブートストラップのようなものを使用しなければならないと思いますが、これはあまりよくわかりません。


2
1つの解決策は、RV標準正規分布が制限されているという事実を利用する漸近CIを使用することです。サンプルは適度に大きいため、適切な近似になる可能性があります。バツ¯μS/n
JohnK 14

1
いいえ、そのアプローチを使用すると、信頼区間の両方のテールで本当に悪いテールカバレッジが見つかります。幸運にも平均的なカバレッジは問題ないかもしれませんが、両方のテールエラー率は間違っています。
フランクハレル14

2
「いくつかの一般的な値に対する重いバイアス」とはどういう意味ですか?バイアスは統計において特定の意味を持つことに注意してください。あなたはそれを意味しない場合は、それを避けるようにしてください。「特定の値が非常に頻繁に発生する」という意味ですか?計算とデータの表示または表を表示できますか?
-Glen_b-モニカーの復活14

回答:


21

はい、ブートストラップは平均値の信頼区間を取得するための代替手段です(方法を理解したい場合は少し努力する必要があります)。

アイデアは次のとおりです。

  1. 交換B回でリサンプリングします。
  2. これらのサンプルのそれぞれについて、サンプル平均を計算します。
  3. 適切なブートストラップ信頼区間を計算します。

最後のステップに関して、いくつかのタイプのブートストラップ信頼区間(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の種類を事前に決定する必要があります。
ジョン14

@John異なるCIには異なるプロパティがあります。考えられる不一致を確認することをお勧めします(そして、この原因を調査してみてください)。便利な結果を得るための釣りではありません。
ミュンヒハウゼン14

絶対に、しかしあなたの答えにそのような理由の説明がなければ、それは釣りを「暗示している」。また、実際に最初に必要なCIを選択することが重要であることをまだ述べていません。私は、素朴な質問者にとって重要な情報を含む回答の更新を提案しています。一般的にどのCIを好むのか、なぜそうするのか、またはこのような場合にどのCIを好むのか、またその理由を述べるとさらに良いでしょう。
ジョン14

2
@IhaveCandy:いいえ。中央極限定理、つまり、非常に「非正規」な分布に従う値であっても、平均のサンプリング分布が正規になる傾向を示しています。そのため、単純なz信頼区間は、ブートストラップなどの他の空想的なソリューションとそれほど変わらないでしょう。
マイケルM 14

1
@IhaveCandy上記の私のコメントをご覧ください、マイケル・メイヤーも同じことを言っています。
JohnK 14

8

別の標準的な代替方法は、ウィルコクソン検定でCIを計算することです。R

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

残念ながら、平均ではなく(擬似)中央値の周りのCIが得られますが、データが非常に非正常な場合、中央値がより有益な指標になる可能性があります。


2

対数正規データの場合、Olsson(2005)は「修正Coxメソッド」を提案しています

バツEバツ=θログθ

Y¯=S22±tdfS2n+S42n1

Y=ログバツ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.