JavaScript | 「平均 ± 2標準偏差の範囲に入るデータの数」を数える関数

JavaScript JavaScript
スポンサーリンク

では「平均 ± 2標準偏差の範囲に入るデータの数」を数える関数を作ってみましょう。
これは統計でよく使われる 68-95-99.7ルール(経験則)の「95%」に対応する部分です。


目標

  1. 平均値を求める
  2. 標準偏差を求める
  3. 範囲 = [平均 - 2×標準偏差, 平均 + 2×標準偏差] を計算
  4. その範囲に入る要素の数を数える

✅ 模範解答(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標準偏差の範囲に入るデータの数を数える関数を作る
  • 範囲に入る「割合(%)」を返す関数にしてみる

タイトルとURLをコピーしました