Interval toleransi nonparametrik untuk variabel diskrit

8

Misalkan Anda memiliki banyak orang yang menilai seberapa besar mereka menyukai film pada skala diskrit dari 1 hingga 10, dan Anda menginginkan interval [ l , u ] sedemikian rupa sehingga dengan (setidaknya) kepercayaan 95%, (setidaknya) 90 % dari semua orang yang menonton film akan memeringkatnya tidak lebih rendah dari aku dan tidak lebih tinggi dari kamu . [ l , u ] kemudian merupakan interval toleransi (dua sisi) dengan kepercayaan 95% dan cakupan 90%. (Untuk lebih jelasnya, kepercayaan 95% menyiratkan bahwa jika Anda mengulangi prosedur ini berkali-kali, 95% dari interval yang diproduksi akan mendapatkan setidaknya 90% cakupan populasi.) Tentu saja, kita umumnya ingin [ l , u ] sesempit mungkin sementara masih memenuhi persyaratan kami.

Saya telah melihat berbagai metode nonparametrik untuk membangun interval toleransi untuk variabel acak kontinu. Saya juga melihat metode untuk membangun interval toleransi untuk variabel binomial dan Poisson. (Paket R tolerancemengimplementasikan beberapa metode ini; Young, 2010.) Tetapi bagaimana dengan variabel diskrit ketika distribusinya tidak diketahui? Ini biasanya merupakan kasus untuk skala penilaian seperti yang ada dalam contoh saya, dan mengasumsikan distribusi binomial tampaknya tidak aman karena data skala-rating nyata sering menunjukkan keanehan seperti multimodality.

Apakah masuk akal untuk kembali ke metode nonparametrik untuk variabel kontinu? Atau, bagaimana dengan metode Monte Carlo seperti menghasilkan 1.000 replikasi bootstrap sampel dan menemukan interval yang menangkap setidaknya 90% sampel dalam setidaknya 950 replikasi?

Young, DS (2010). toleransi: Paket R untuk memperkirakan interval toleransi. Jurnal Perangkat Lunak Statistik, 36 (5), 1–39. Diperoleh dari http://www.jstatsoft.org/v36/i05

Kodiologis
sumber
maksudmu binomial atau multinomial? multinomial akan memungkinkan perilaku multimodal?
seanv507
Maksud saya binomial. Dalam kasus skala penilaian, misalnya, Anda akan mengatur jumlah uji coba Bernoulli ke jumlah titik skala. Interval antar kategori distribusi multinomial, menurut saya, tidak masuk akal, karena kategorinya tidak berurutan.
Kodiologist
@Kodiologist variabel hasil Anda adalah "skala diskrit dari 1 hingga 10" tetapi itu berarti itu adalah respons multinomial yang dipesan. (Atau apakah saya tidak mendapatkan sesuatu?)
Jim
@ Jim "Memerintahkan multinomial" adalah sedikit oxymoron. Dalam distribusi multinomial, urutan kategori bersifat arbitrer.
Kodiologist

Jawaban:

1

Variabel bunga didistribusikan secara multinomial dengan probabilitas kelas (sel): . Selanjutnya, kelas dianugerahi dengan tatanan alami.hal1,hal2,...,hal10

Upaya pertama: "interval prediksi" terkecil yang mengandung90%

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

Ukuran non-parametrik dari ketidakpastian (misalnya, varians, kepercayaan) pada estimasi kuantil memang bisa diperoleh dengan metode bootstrap standar .l,kamu

Pendekatan kedua: langsung "pencarian bootstrap"

Di bawah ini saya memberikan kode Matlab yang dapat dijalankan yang mendekati pertanyaan secara langsung dari perspektif bootstrap (kode tersebut tidak di-vektor-kan secara optimal).

%% 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);

Periksa apakah ini masuk akal.

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

masukkan deskripsi gambar di sini

Jalankan simulasi bootstrap.

%% 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.

Filter dari setiap bootstrap mereplikasi interval, [l,kamu], yang mengandung setidaknya 90% probabilitas massa dan menghitung estimasi kepercayaan (sering) dari interval tersebut.

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

Pilih yang memenuhi desideratum kepercayaan.

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

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

Yakinkan diri Anda bahwa metode bootstrap di atas valid

Sampel bootstrap dimaksudkan untuk menjadi stand-in untuk sesuatu yang ingin kita miliki, tetapi tidak, yaitu: baru, undian independen dari populasi mendasar yang sebenarnya (singkat: data baru).

Dalam contoh yang saya berikan, kita tahu proses menghasilkan data (DGP), oleh karena itu kita bisa "menipu" dan mengganti baris kode yang berkaitan dengan bootstrap sampel ulang dengan menarik, independen baru dari DGP yang sebenarnya.

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

Kemudian kita dapat memvalidasi pendekatan bootstrap dengan membandingkannya dengan yang ideal. Di bawah ini adalah hasilnya.

Matriks kepercayaan dari data baru dan independen menggambarkan:

     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

Yang sesuai 95%-percaya diri batas bawah dan atas:

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

Kami menemukan bahwa matriks kepercayaan sangat setuju dan batas-batasnya identik ... Dengan demikian memvalidasi pendekatan bootstrap.

Jim
sumber
2
Interval toleransi dan interval kepercayaan adalah hal yang berbeda. Sebenarnya, apa yang telah Anda gambarkan bukanlah interval kepercayaan diri tetapi interval prediksi, yang merupakan jenis interval lain yang berbeda.
Kodiologist
1
Suntingan Anda tampaknya merupakan implementasi dari apa yang saya maksud ketika saya menulis "metode Monte Carlo seperti menghasilkan 1.000 replikasi bootstrap sampel dan menemukan interval yang menangkap setidaknya 90% sampel dalam setidaknya 950 replikasi". Meskipun intuitif, saya tidak yakin ini benar-benar berfungsi atau masuk akal, itulah sebabnya saya membuat pertanyaan ini.
Kodiologist
@Kodiologist Jawabannya sekarang berisi bagian memvalidasi pendekatan bootstrap. Tentu saja, ini bisa diambil lebih lanjut, misalnya bersarang dalam loop atas ukuran sampel dan probabilitas kelas.
Jim
Menunjukkan bahwa metode bootstrap benar untuk masalah ini secara umum berarti menunjukkan bahwa ia memiliki kepercayaan dan cakupan yang tepat terlepas dari distribusi parameter sebelumnya (bagaimanapun, metode yang sering digunakan). Untuk itu, saya pikir, simulasi tidak akan cukup; Anda akan membutuhkan bukti matematika. Tapi Anda sudah sangat gigih dan menunjukkan bahwa bootstrap bekerja setidaknya kadang-kadang, sehingga Anda layak mendapat nilai A untuk upaya.
Kodiologist