95%信頼区間の繰り返し実験の説明のシミュレーション研究の問題-どこが間違っているのですか?


9

95%信頼区間の繰り返し実験解釈をシミュレートするRスクリプトを記述しようとしています。これは、割合の真の母集団値がサンプルの95%CIに含まれている時間の割合を過大評価していることがわかりました。大きな違いはありません-約96%対95%ですが、それでも私は興味を持っていました。

私の関数は、samp_n確率pop_pでベルヌーイ分布からサンプルを取得し、prop.test()連続性補正を使用して、またはより正確に95%信頼区間を計算しbinom.test()ます。真の人口比率pop_pが95%CIに含まれている場合、1を返します。私は2つの関数を作成しました。1つはを使用する関数、もう1つはを使用しprop.test()binom.test()両方で同様の結果を得たものです。

in_conf_int_normal <- function(pop_p = 0.3, samp_n = 1000, correct = T){
    ## uses normal approximation to calculate confidence interval
    ## returns 1 if the CI contain the pop proportion
    ## returns 0 otherwise
    samp <- rbinom(samp_n, 1, pop_p)
    pt_result <- prop.test(length(which(samp == 1)), samp_n)
    lb <- pt_result$conf.int[1]
        ub <- pt_result$conf.int[2]
    if(pop_p < ub & pop_p > lb){
        return(1)
    } else {
    return(0)
    }
}
in_conf_int_binom <- function(pop_p = 0.3, samp_n = 1000, correct = T){
    ## uses Clopper and Pearson method
    ## returns 1 if the CI contain the pop proportion
    ## returns 0 otherwise
    samp <- rbinom(samp_n, 1, pop_p)
    pt_result <- binom.test(length(which(samp == 1)), samp_n)
    lb <- pt_result$conf.int[1]
        ub <- pt_result$conf.int[2] 
    if(pop_p < ub & pop_p > lb){
        return(1)
    } else {
    return(0)
    }
 }

実験を数千回繰り返すpop_pと、サンプルの95%CI内にある時間の割合が0.95ではなく0.96に近いことがわかりました。

set.seed(1234)
times = 10000
results <- replicate(times, in_conf_int_binom())
sum(results) / times
[1] 0.9562

なぜこれが当てはまるのか、これまでの私の考えは

  • 私のコードは間違っています(しかし、私はそれをたくさんチェックしました)
  • 私はこれが通常の近似問題によるものだと最初は思っていましたが、 binom.test()

助言がありますか?


(+1)ちなみに、私はあなたのコードをtimes=100000何度か再実行し、同じ結果を確認しました。誰かがこれについて説明があるかどうか知りたいです。コードは非常に単純で、コーディングエラーがないことは確かです。また、結果としてGiveが1回実行されtimes=1000000ました.954931
マクロ

3
(+1)しかし、なぜ正確に95%になると期待するのですか?たとえばClopper Pearsonは保守的であることが保証されています。とについては、CIが時間の95.3648%の真の値をカバーする必要があることを理解しています。pnp
枢機卿、

2
枢機卿のコメントをサポートするために、正確な二項確率は正確です。これは正確な確率計算に基づいているためですが、必ずしも正確な信頼水準を与えるわけではないためです。これは、二項式が離散分布であるためです。したがって、Clopper-Pearsonは、区間のエンドポイントを選択して、そのレベル以上の信頼水準に最も近い確率を得るようにします。これにより、正確な2項検定のべき関数に対する鋸歯状の動作も作成されます。この奇妙だが基本的な結果は、アメリカの統計学者(2002)のクリスティーン・リューとの私の論文で議論されています。
マイケルR.

1
このリンクの私の論文の詳細: citeulike.org/user/austin987/article/7571878
マイケルR.

3
正確な2項CIは、実際のパフォーマンスが公称パフォーマンスと等しいため、「正確」です。確率計算が「正確」ではないためです。 CIは、基になる分布が(想定されるファミリ内で)何であっても、真のパラメータをカバーする可能性が少なくともある必要があることを理解する必要があります。「正確」とは、これらのカバレッジすべての最小値が、分布のファミリー全体に適用され、に等しいことを意味します。これを実現するには、多くの可能な分布の実際のカバレッジは、多くの場合より大きくなければなりません。1 - α 1 - α 1 - α1α1α 1α1α
whuber

回答:


9

あなたは間違っていません。単に構築することはできません二項比率の信頼区間いつものカバレッジがある正確な結果の離散的な性質のために、95%を。Clopper-Pearson( 'exact')区間は、少なくとも 95%のカバレッジを持つことが保証されています。他の区間のカバレッジは、実際の比率で平均すると、平均で95%近くなります。

平均して95%に近いカバレッジを持ち、(ウィルソンスコア間隔とは異なり)両方の裾でほぼ等しいカバレッジを持っているため、私はジェフリーズ間隔を自分で選ぶ傾向があります。

問題のコードにわずかな変更を加えるだけで、シミュレーションなしで正確なカバレッジを計算できます。

p <- 0.3
n <- 1000

# Normal test
CI <- sapply(0:n, function(m) prop.test(m,n)$conf.int[1:2])
caught.you <- which(CI[1,] <= p & p <= CI[2,])
coverage.pr <- sum(dbinom(caught.you - 1, n, p))

# Clopper-Pearson
CI <- sapply(0:n, function(m) binom.test(m,n)$conf.int[1:2])
caught.you.again <- which(CI[1,] <= p & p <= CI[2,])
coverage.cp <- sum(dbinom(caught.you.again - 1, n, p))

これにより、次の出力が生成されます。

> coverage.pr
[1] 0.9508569

> coverage.cp
[1] 0.9546087

1
結果の離散的な性質により、常に正確に95%のカバレッジを持つ二項比率の信頼区間を構築することは単に不可能です」---おそらく、ランダム化された区間の(やや奇妙な)可能性のために。(少なくとも、そのように、それができる、それはうまくそれが普通ということかもしれないが、行われるべきでない。)
Glen_b -Reinstateモニカ

2
@Glen_b私は無作為化された決定に対する異議について長い間興味を持っていました。Jack Kieferが、ランダム化を使用してサンプルを収集することに問題がなければ、それを決定プロセスで問題なく使用できるはずだと述べたと思います。再現性があり、文書化されており、だましが難しい決定手順が必要な場合は、データを収集する前に、ランダム化された間隔必要なランダム値を生成して、それを設計の一部にします。
whuber
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.