離散変数のノンパラメトリック許容区間


8

あなたがたくさんの人に、1から10までの離散的なスケールで映画がどれほど好きだったかを評価して、(少なくとも)95%の信頼度、(少なくとも)90の間隔[ lu ] が欲しいと仮定します。映画を見るすべての人の%は、映画をl以上、u以下と評価します。[ lu ]は、95%の信頼性と90%のカバレッジを持つ(両側の)許容区間です。(明確にするために、95%の信頼度は、この手順を何度も繰り返した場合、生成された間隔の95%が少なくとも90%の人口カバレッジを取得することを意味します。)もちろん、一般的に[ lu ]を要件を満たしながら可能です。

連続確率変数の許容区間を構築するためのさまざまなノンパラメトリック手法を見てきました。また、二項変数とポアソン変数の許容区間を作成する方法も見ました。(Rパッケージtoleranceはこれらのメソッドのいくつかを実装しています; Young、2010年。)しかし、分布が不明な場合の離散変数はどうでしょうか?これは通常、私の例のような評価スケールの場合であり、実際の評価スケールデータはマルチモダリティなどの奇妙さを示すことが多いため、二項分布を仮定することは安全ではないようです。

連続変数のノンパラメトリック法に頼ることは理にかなっていますか?あるいは、サンプルのブートストラップ複製を1,000回生成し、少なくとも950回の複製でサンプルの少なくとも90%を捕捉する間隔を見つけるなど、モンテカルロ法についてはどうでしょうか?

ヤング、DS(2010)。許容範囲:許容範囲の間隔を推定するためのRパッケージ。Journal of Statistical Software、36(5)、1〜39。http://www.jstatsoft.org/v36/i05から取得


二項式か多項式ですか?多項式はマルチモーダルな動作を可能にしますか?
seanv507 2014年

私は二項式を意味します。たとえば、評価尺度の場合、ベルヌーイ試行の数を尺度点の数に設定します。多項分布のカテゴリ間の間隔は、カテゴリが順序付けされていないため、あまり意味がありません。
コディオロジスト2014年

@Kodiologistあなたの結果変数は「1から10までの離散的なスケール」ですが、これ順序付けられた多項応答であることを意味します。(または私は何かを得ていませんか?)
ジム

@ジム「順序付けられた多項式」はちょっとした矛盾です。多項分布では、カテゴリの順序は任意です。
コディオロジスト2016

回答:


1

対象の変数は、クラス(セル)の確率()とともに多項的に分布しています。さらに、クラスは自然な順序に恵まれています。p1,p2,...,p10

最初の試み:を含む最小の「予測間隔」90%

p     = [p1, ..., p10] # empirical proportions summing to 1
l     = 1
u     = length(p)
cover = 0.9

pmass = sum(p)

while (pmass - p[l] >= cover) OR (pmass - p[u] >= cover)
    if p[l] <= p[u]
       pmass = pmass - p[l]
       l     = l + 1  
    else # p[l] > p[u]
       pmass = pmass - p[u]
       u     = u - 1
    end        
end

四分位数推定値の不確実性(たとえば、分散、信頼度)のノンパラメトリック測定値は、確かに標準のブートストラップ法によって取得できますl,u

2番目のアプローチ:直接「ブートストラップ検索」

以下に、ブートストラップの観点から直接質問にアプローチする実行可能なMatlabコードを提供します(コードは最適化されていません)。

%% set DGP parameters:
p = [0.35, 0.8, 3.5, 2.2, 0.3, 2.9, 4.3, 2.1, 0.4, 0.2];
p = p./sum(p); % true probabilities

ncat = numel(p);
cats = 1:ncat;

% draw a sample:
rng(1703) % set seed
nsamp = 10^3; 
samp  = datasample(1:10, nsamp, 'Weights', p, 'Replace', true);

これが理にかなっていることを確認しください

psamp = mean(bsxfun(@eq, samp', cats)); % sample probabilities
bar([p(:), psamp(:)])

ここに画像の説明を入力してください

ブートストラップシミュレーションを実行します。

%% bootstrap simulation:
rng(240947)

nboots = 2*10^3;
cover  = 0.9;
conf   = 0.95;    

tic
Pmat = nan(nboots, ncat, ncat);
for b = 1:nboots

    boot  = datasample(samp, nsamp, 'Replace', true); % draw bootstrap sample    
    pboot = mean(bsxfun(@eq, boot', cats));      

    for l = 1:ncat
        for u = l:ncat
            Pmat(b, l, u) = sum(pboot(l:u));   
        end
    end

end
toc % Elapsed time is 0.442703 seconds.

各ブートストラップからのフィルターは、少なくとも[確率質量を含む間隔複製し、それらの間隔の(頻出)信頼推定値を計算します。90 [l,u]90%

conf_mat = squeeze(mean(Pmat >= cover, 1))

     0         0         0         0         0         0         0    1.0000    1.0000    1.0000
     0         0         0         0         0         0         0    1.0000    1.0000    1.0000
     0         0         0         0         0         0         0    0.3360    0.9770    1.0000
     0         0         0         0         0         0         0         0         0         0
     0         0         0         0         0         0         0         0         0         0
     0         0         0         0         0         0         0         0         0         0
     0         0         0         0         0         0         0         0         0         0
     0         0         0         0         0         0         0         0         0         0
     0         0         0         0         0         0         0         0         0         0
     0         0         0         0         0         0         0         0         0         0

信頼度の要求を満たすものを選択します。

[L, U] = find(conf_mat >= conf);
[L, U]

 1     8
 2     8
 1     9
 2     9
 3     9
 1    10
 2    10
 3    10

上記のブートストラップメソッドが有効であることを納得させる

ブートストラップのサンプルは、私たちが欲しいものの代役となることを意図していますが、そうではありません。

私が挙げた例では、データ生成プロセス(DGP)がわかっているため、ブートストラップの再サンプルに関連するコード行を「チート」して、実際のDGPからの新しい独立した描画で置き換えることができます。

newsamp = datasample(cats, nsamp, 'Weights', p, 'Replace', true);
pnew    = mean(bsxfun(@eq, newsamp', cats));

次に、ブートストラップアプローチを理想と比較することで検証できます。結果は以下のとおりです。

新しい独立したデータからの信頼行列は、以下を描画します。

     0         0         0         0         0         0         0    1.0000    1.0000    1.0000
     0         0         0         0         0         0         0    1.0000    1.0000    1.0000
     0         0         0         0         0         0         0    0.4075    0.9925    1.0000
     0         0         0         0         0         0         0         0         0         0
     0         0         0         0         0         0         0         0         0         0
     0         0         0         0         0         0         0         0         0         0
     0         0         0         0         0         0         0         0         0         0
     0         0         0         0         0         0         0         0         0         0
     0         0         0         0         0         0         0         0         0         0
     0         0         0         0         0         0         0         0         0         0

対応する信頼の下限と上限:95%

 1     8
 2     8
 1     9
 2     9
 3     9
 1    10
 2    10
 3    10

信頼行列が厳密に一致し、範囲が同じであることがわかります。したがって、ブートストラップアプローチを検証します。


2
許容区間と信頼区間は異なります。実際、あなたが説明したのは、信頼区間ではなく、予測区間です。これは、さらに別の種類の区間です。
コディオロジスト2016

1
あなたの編集は、「サンプルのブートストラップ複製を1,000回生成し、少なくとも950回の複製でサンプルの少なくとも90%を捕捉する間隔を見つけるなどのモンテカルロ法」を書いたときの意味の実装のようです。直感的ではありますが、これが実際に機能するか意味があるかわかりません。そのため、この質問を作成しました。
コディオロジスト2016

@Kodiologist回答には、ブートストラップアプローチを検証するセクションが含まれています。もちろん、これはさらに取ることができます。たとえば、サンプルサイズとクラス確率をループでネストします。
ジム

ブートストラップメソッドがこの問題に対して完全な一般性で正しいことを示すことは、パラメーターの以前の分布(結局のところ、頻出メソッド)に関係なく、適切な信頼性とカバレッジを持っていることを示すことを意味します。そのためには、シミュレーションでは不十分だと思います。数学的な証明が必要になります。しかし、あなたは非常に粘り強く、ブートストラップが少なくとも時々機能することを示してきたので、努力する価値があります。
コディオロジスト2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.