数学的基礎
$n$ 個のデーター $x_1$, $x_2$, …, $x_n$ に対し、この平均を $\bar{x}$ と書くとき、 \[ \bar{x} = \frac{1}{n}\sum_{i = 1}^n x_i \] であり、分散 $\sigma^2$ は、 \[ \begin{align*} \sigma^2 & = \frac{1}{n} \sum_{i=1}^n \left(x_i - \bar{x} \right)^2 \\ & = \frac{1}{n} \sum_{i=1}^n x_i^2 - \left(\frac{1}{n} \sum_{i=1}^n x_i\right)^2 \\ & = \overline{x^2} - \bar{x}^2 \end{align*} \] である。
平均を求める関数
概ね以下のようになるであろう。
function average(arr) {
let ave = 0; // 初期化を忘れないこと
for (let i = 0; i < arr.length; i++) { // ループ条件に注意
ave += arr[i];
}
// 以下はまとめて return ave / arr.length とも書ける
ave /= arr.length;
return ave;
}
注意点
-
変数の初期化を忘れないこと
-
配列の要素数は
.length
で取得できる -
配列の添字は 0 から始まる点に注意せよ
-
for ではループ条件に細心の注意を払うこと
-
最後の二行はまとめて
return ave / arr.length
と書くこともできる。 ただしこの場合、ave
が実際の意味と異なる (実際には最終的なave
には平均をn
倍したものが入っている) ので、変数名をave
からn_ave
(平均の $n$ 倍、の意) などに変えた方がよい
分散を求める関数
どの式を使うかによって多少違いは出るが、概ね以下のような感じであろう。
function variance(arr) {
let vari = 0; // var という変数名は使えないので注意
let ave = average(arr);
for (let i = 0; i < arr.length; i++) {
vari += (arr[i] - ave) * (arr[i] - ave);
}
vari /= arr.length;
return vari;
}
注意点
-
var
という変数名は使えないので注意 (JavaScript で別の意味ですでに使われているので) -
二乗の部分は
(arr[i] - ave) ** 2
と書いてもよい
検算
問題に指示されたデーターを使って、平均、分散を表示するには、例えば以下のように書ける。
data = [ 71, 80, 89 ]
console.log(average(data), variance(data))
このとき、
80 54
のように表示されるはずである。