みさご解体新書

最頻値

解説/アルゴリズム

データの中で最も個数の多い値のことを最頻値(モード)と呼ぶ。

const data = [0, 6, 10, 2, 3, 5, 10, 9, 5, 6, 3, 2, 4, 5, 7, 1, 3, 4, 7, 3];
const max = 10; // 要素の最大値
const count = new Array(max + 1).fill(0);

data.forEach((value) => {
  count[value]++;
});

let mode = 0;
let maxValue = -1;
count.forEach((value, i) => {
  if (value > maxValue) {
    mode = i;
    maxValue = value;
  }
});

// 3
console.log(mode);

度数分布表の最頻値

度数分布表での最頻値は、度数が最も大きい階級の階級値になる。

階級(点) 以上~未満 度数(人)
0 ~ 20 0
20 ~ 40 3
40 ~ 60 7
60 ~ 80 4
80 ~ 100 5
100 ~ 120 1

この度数分布表では、40~60点の度数が7人と一番多いので最頻値は階級値である50になる。

const data = [
  86, 20, 71, 43, 39, 66, 59, 50, 83, 63, 48, 31, 80, 79, 100, 92, 83, 44, 52,
  56,
];
const table: number[] = [];
const range = 20;
const max = 120;
const rMax = Math.ceil(max / range);

type Data = { index: number; value: number };
let maxData: Data = { index: -1, value: -1 };

for (let i = 0; i < rMax; i++) {
  table[i] = 0;
}

data.forEach((v) => {
  const i = Math.floor(v / range);
  table[i]++;
});

table.forEach((b, i) => {
  const curValue = table[i];
  if (maxData.value < curValue) {
    maxData.index = i;
    maxData.value = curValue;
  }
});

const rangeMin = range * maxData.index;
const rangeMax = range * (maxData.index + 1);
const mode = (rangeMin + rangeMax) / 2;

// 最頻値は50です。
console.log(`最頻値は${mode}です。`);

ソースコード

app.ts

関連記事