[0,1]の所定の評価セットのベータ分布を考えます。平均を計算した後:
この平均の周りに信頼区間を提供する方法はありますか?
[0,1]の所定の評価セットのベータ分布を考えます。平均を計算した後:
この平均の周りに信頼区間を提供する方法はありますか?
回答:
ベータ分布のパラメーターの信頼区間を計算する特定の方法がありますが、ベータ分布を含む(ほぼ)あらゆる種類の分布に使用でき、Rで簡単に実装できるいくつかの一般的な方法を説明します。
対応するプロファイル尤度信頼区間を使用した最尤推定から始めましょう。まず、いくつかのサンプルデータが必要です。
# Sample size
n = 10
# Parameters of the beta distribution
alpha = 10
beta = 1.4
# Simulate some data
set.seed(1)
x = rbeta(n, alpha, beta)
# Note that the distribution is not symmetrical
curve(dbeta(x,alpha,beta))
実/理論平均は
> alpha/(alpha+beta)
0.877193
次に、平均をパラメーターの1つとして、ベータ分布からサンプルの負の対数尤度関数を計算する関数を作成する必要があります。dbeta()
関数を使用できますが、これは平均を含むパラメーター化を使用しないため、そのパラメーター(αおよびβ)を平均と他のパラメーター(標準偏差など)の関数として表現する必要があります。
# Negative log likelihood for the beta distribution
nloglikbeta = function(mu, sig) {
alpha = mu^2*(1-mu)/sig^2-mu
beta = alpha*(1/mu-1)
-sum(dbeta(x, alpha, beta, log=TRUE))
}
最尤推定値を見つけるにはmle()
、stats4
ライブラリ内の関数を使用できます。
library(stats4)
est = mle(nloglikbeta, start=list(mu=mean(x), sig=sd(x)))
今のところ警告を無視してください。それらは、パラメーターの無効な値を試行する最適化アルゴリズムによって引き起こされ、αおよび/またはβに負の値を与えます。(警告を回避するために、lower
引数を追加し、method
使用する最適化を変更できます。)
これで、2つのパラメーターの推定値と信頼区間の両方が得られました。
> est
Call:
mle(minuslogl = nloglikbeta, start = list(mu = mean(x), sig = sd(x)))
Coefficients:
mu sig
0.87304148 0.07129112
> confint(est)
Profiling...
2.5 % 97.5 %
mu 0.81336555 0.9120350
sig 0.04679421 0.1276783
予想どおり、信頼区間は対称ではないことに注意してください。
par(mfrow=c(1,2))
plot(profile(est)) # Profile likelihood plot
(2番目の外側のマゼンタの線は、95%の信頼区間を示しています。)
また、観測値が10個しかない場合でも、非常に優れた推定値(狭い信頼区間)が得られることに注意してください。
の代わりにmle()
、パッケージのfitdistr()
関数を使用できMASS
ます。これも最尤推定量を計算し、負の対数尤度ではなく密度のみを提供する必要があるという利点がありますが、プロファイルの尤度信頼区間は提供せず、漸近(対称)信頼区間のみ提供します。
より優れたオプションはmle2()
、bbmle
パッケージからの(および関連する関数)です。これは、やや柔軟で強力でありmle()
、わずかに優れたプロットを提供します。
別のオプションは、ブートストラップを使用することです。Rでは非常に使いやすく、密度関数を指定する必要さえありません。
> library(simpleboot)
> x.boot = one.boot(x, mean, R=10^4)
> hist(x.boot) # Looks good
> boot.ci(x.boot, type="bca") # Confidence interval
BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 10000 bootstrap replicates
CALL :
boot.ci(boot.out = x.boot, type = "bca")
Intervals :
Level BCa
95% ( 0.8246, 0.9132 )
Calculations and Intervals on Original Scale
ブートストラップには、データがベータ版からのものではない場合でも機能するという追加の利点があります。
平均の信頼区間については、中心極限定理(およびt分布)に基づいた古き良き漸近信頼区間を忘れないでください。サンプルサイズが大きい(CLTが適用され、サンプル平均の分布がほぼ正規である)か、αとβの両方の値が大きい(ベータ分布自体がほぼ正規である)限り、うまく機能します。ここではどちらもありませんが、信頼区間はそれほど悪くありません。
> t.test(x)$conf.int
[1] 0.8190565 0.9268349
nのわずかに大きい値(2つのパラメーターの極端な値ではない)の場合、漸近信頼区間は非常にうまく機能します。
ベータ回帰をご覧ください。Rを使用してそれを行う方法の良い紹介は、ここにあります:
http://cran.r-project.org/web/packages/betareg/vignettes/betareg.pdf
信頼区間を構築する別の(本当に簡単な)方法は、ノンパラメトリックブーストラップアプローチを使用することです。ウィキペディアには良い情報があります:
http://en.wikipedia.org/wiki/Bootstrapping_%28statistics%29
こちらの動画もこちら: