arXiv探訪

興味の赴くままに数学するだけ

一様分布サンプルの正規分布モデルによる信頼区間の被覆確率

const sampleSize = 100;
const testNum = 100;
const z95 = 1.96;

// サンプルを生成(0~1一様分布による)
const pv = 1/12;    // 母分散
const pe = 1/2;     // 母平均
function generateSamples(samples) {
    let n = samples.length;
    
    for (let i=0; i<n; i++) {
        samples[i] = Math.random();
    }
}

// 平均を計算
function calcAvg(a) {
    let n = a.length;
    let s = 0;
    
    for (let i=0; i<n; i++) {
        s += a[i];
    }
    return s/n;
}

// テスト
function test() {
    let count = 0;
    
    let samples = new Array(sampleSize * testNum);
    let avgs = new Array(testNum);
    
    let ci_r = z95 * Math.sqrt(pv / sampleSize);
    
    generateSamples(samples);

    // テスト毎にサンプル平均を取り、被覆するかどうかを計算する
    for (let i=0; i<testNum; i++) {
        avgs[i] = calcAvg(samples.slice(i*sampleSize, (i+1)*sampleSize));
        
        if (Math.abs(avgs[i]-pe)<=ci_r) {
            count++;
        }
    }
    
    return count/testNum;   // 被覆確率
}

let N = 200;
let count = 0;

for (let i=0; i<N; i++) {
    let rate = test();
    count += (rate>=0.95) ? 1 : 0;
}

console.log(count/N);   // 6割くらいになる