では「平均 ± 2標準偏差の範囲に入るデータの数」を数える関数を作ってみましょう。
これは統計でよく使われる 68-95-99.7ルール(経験則)の「95%」に対応する部分です。
目標
- 平均値を求める
- 標準偏差を求める
- 範囲 =
[平均 - 2×標準偏差, 平均 + 2×標準偏差]を計算 - その範囲に入る要素の数を数える
✅ 模範解答(for文バージョン)
function countWithinTwoStdDev(arr) {
if (arr.length === 0) return 0;
// 平均を計算
let total = 0;
for (let i = 0; i < arr.length; i++) {
total += arr[i];
}
const average = total / arr.length;
// 分散を計算
let squaredTotal = 0;
for (let i = 0; i < arr.length; i++) {
const deviation = arr[i] - average;
squaredTotal += deviation ** 2;
}
const variance = squaredTotal / arr.length;
// 標準偏差
const stdDev = Math.sqrt(variance);
// 範囲に入る数をカウント
let count = 0;
for (let i = 0; i < arr.length; i++) {
if (arr[i] >= average - 2 * stdDev && arr[i] <= average + 2 * stdDev) {
count++;
}
}
return count;
}
// 実行例
console.log(countWithinTwoStdDev([3, 7, 2, 9, 5]));
// 平均5.2, 標準偏差約2.48 → 範囲[0.24, 10.16] → 全部入る → 5
JavaScript✅ 模範解答(for…ofバージョン)
function countWithinTwoStdDev(arr) {
if (arr.length === 0) return 0;
const total = arr.reduce((sum, num) => sum + num, 0);
const average = total / arr.length;
const variance = arr.reduce((sum, num) => sum + (num - average) ** 2, 0) / arr.length;
const stdDev = Math.sqrt(variance);
let count = 0;
for (const num of arr) {
if (num >= average - 2 * stdDev && num <= average + 2 * stdDev) {
count++;
}
}
return count;
}
console.log(countWithinTwoStdDev([10, 20, 30, 40]));
// 平均25, 標準偏差約11.18 → 範囲[2.64, 47.36] → 全部入る → 4
JavaScript💡 解説
- 平均 ± 1標準偏差 → 約68%のデータが入る(正規分布の場合)
- 平均 ± 2標準偏差 → 約95%のデータが入る
- 平均 ± 3標準偏差 → 約99.7%のデータが入る
- 実際のデータでこの割合を調べると「正規分布に近いかどうか」が見えてくる
🔥 発展練習
- 平均 ± 3標準偏差の範囲に入るデータの数を数える関数を作る
- 範囲に入る「割合(%)」を返す関数にしてみる
