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()
これらを利用すれば、統計的シミュレーションやモンテカルロ法など、さまざまな場面で応用可能です。
ページの先頭に戻る