JavaScriptでの正規分布やt分布、カイ二乗分布、F分布乱数の生成

JavaScriptでの正規分布やt分布、カイ二乗分布、F分布乱数の生成

このページでは、JavaScriptで統計分布(正規分布、t分布、カイ二乗分布、F分布)に基づいた疑似乱数を生成する方法を解説します。

正規分布

正規分布は、平均 μ と分散 σ² を持つ確率分布です。JavaScriptで正規分布に基づく乱数を生成するには、ボックス=ミュラー法を使用するのが一般的です。


// ボックス=ミュラー法による正規分布乱数
function generateNormalRandom(mean = 0, stdDev = 1) {
    const u1 = Math.random();
    const u2 = Math.random();
    const z0 = Math.sqrt(-2.0 * Math.log(u1)) * Math.cos(2.0 * Math.PI * u2);
    return z0 * stdDev + mean;
}

// 平均0、標準偏差1の正規分布乱数
const normalRandom = generateNormalRandom();
console.log(normalRandom); // 例: -0.42
    

この方法は、標準正規分布(平均0、標準偏差1)の乱数を生成し、それをスケールして任意の分布に変換します。

t分布

t分布は、母集団の標準偏差が不明な場合に使用される分布です。自由度 ν が指定されます。

t分布乱数を生成するには、正規分布乱数とカイ二乗分布乱数を組み合わせます。


// t分布乱数生成
function generateTRandom(degreesOfFreedom) {
    const normal = generateNormalRandom(); // 正規分布乱数
    const chiSquared = generateChiSquareRandom(degreesOfFreedom); // カイ二乗分布乱数
    return normal / Math.sqrt(chiSquared / degreesOfFreedom);
}

// 平均0、自由度10のt分布乱数
const tRandom = generateTRandom(10);
console.log(tRandom); // 例: 1.23
    

カイ二乗分布

カイ二乗分布は、正規分布に従う乱数を二乗した値の和を基にした分布です。自由度 ν が指定されます。


// カイ二乗分布乱数生成
function generateChiSquareRandom(degreesOfFreedom) {
    let sum = 0;
    for (let i = 0; i < degreesOfFreedom; i++) {
        const z = generateNormalRandom(); // 正規分布乱数
        sum += z * z;
    }
    return sum;
}

// 自由度5のカイ二乗分布乱数
const chiSquareRandom = generateChiSquareRandom(5);
console.log(chiSquareRandom); // 例: 8.34
    

F分布

F分布は、2つのカイ二乗分布に基づく分布で、自由度 ν₁ν₂ が指定されます。


// F分布乱数生成
function generateFRandom(degreesOfFreedom1, degreesOfFreedom2) {
    const chiSquared1 = generateChiSquareRandom(degreesOfFreedom1) / degreesOfFreedom1;
    const chiSquared2 = generateChiSquareRandom(degreesOfFreedom2) / degreesOfFreedom2;
    return chiSquared1 / chiSquared2;
}

// 自由度5と10のF分布乱数
const fRandom = generateFRandom(5, 10);
console.log(fRandom); // 例: 1.56
    

まとめ

上記のコードでは、正規分布を基本として、t分布、カイ二乗分布、F分布の疑似乱数を生成する方法を紹介しました。

  • 正規分布:generateNormalRandom()
  • t分布:generateTRandom()
  • カイ二乗分布:generateChiSquareRandom()
  • F分布:generateFRandom()

これらを利用すれば、統計的シミュレーションやモンテカルロ法など、さまざまな場面で応用可能です。

ページの先頭に戻る

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です