Up

平均、分散、標準偏差

 

幾つかのデータが与えられたとき、その和をデータの個数で割ったものは、平均値(簡単に平均)と呼ばれている。

データが、

5、 8、 9、 7

の4個であるとき、平均は

である。平均7.25は4つのデータの中心の値を表すものである。

データがN個、、・・・、、あるときの平均は

で与えられる。

平均を求めるプログラム例は、以下のようになる。

 

プログラム1.1

 

#include <iostream>

 

using namespace std;

 

int main() {

        double data[] = { 5, 8, 9, 7 };

        int n = 4;

        double sum = 0.0;

        for (int i = 0; i < n; i++) sum += data[i];

        double mean = sum / n;

        cout << "mean = " << mean << endl;

        char ck;

        cin >> ck;

        return 0;

}

 

上のプログラムを実行すると、平均値が

mean = 7.25

と表示される。

プログラムの最後の

              char ck;

              cin >> ck;

は、文字が入力されるのを待つものである。

Visual C++の場合、プログラムの実行が最後の「return 0;」まで進むと、プログラムの実行終了となり、表示されていたコンソール(端末)画面は消えてしまう。これを防ぐため、文字の入力待ちを行っている。何か文字キーを押してからEnterキーを押すと、

              cin >> ck;

が終了して、次の「return 0;」が実行されてプログラムの実行終了となる。

 

 

平均値を中心としてデータがどの程度散らばっているのかを表す統計量として分散がある。分散は、データと平均値との差の2乗の平均として与えられる。データが

5、 8、 9、 7

の4個であるとき、平均は

であるので、分散は

で与えられる。

分散は2乗和をデータ数で割ったものであるが、データ数から1を引いた数で割ったものは不偏分散と呼ばれている。上のデータの場合、不偏分散は

で与えられる。記号は近似式であることを表す。

データを物理量を表すと見たとき、平均値と、分散あるいは不偏分散とは、物理単位が異なる。データとして重さをとり単位がKgであるとき、分散あるいは不偏分散の単位はKgの2乗である。がどのような物理量を表すのかはともかくとして、単位が異なるので同じグラフ上に平均値と分散を描くことはできない。分散の平方根は標準偏差と呼ばれているが、これは平均値あるいは元のデータと同じ単位である。データが重さKg であれば、標準偏差の単位もKg である。

上のデータの場合、標準偏差は、分散に対しては

不偏分散に対しては

となる。

データがN個、、・・・、、あるときの平均は

で与えられるので、分散は

不偏分散は

である。

それぞれに対応する標準偏差は

および

である。

 

分散を求めるプログラム例を以下に示す。

 

プログラム1.2

 

#include <iostream>

#include <cmath>

 

using namespace std;

 

inline double sqr(double v) {

        return v * v;

}

 

int main() {

        double data[] = { 5, 8, 9, 7 };

        int n = 4;

        double sum = 0.0;

        for (int i = 0; i < n; i++) sum += data[i];

        double mean = sum / n;

        cout << "mean = " << mean << endl;

        sum = 0.0;

        for (int i = 0; i < n; i++)

                sum += sqr(data[i] - mean);

        double variance = sum / n;

        cout << "variance = " << variance << endl;

        double ub_variance = sum / (n - 1);

        cout << "unbiased v = " << ub_variance << endl;

        double sd = sqrt(variance);

        cout << "標準偏差/varinace = " << sd << endl;

        double sd_ub = sqrt(ub_variance);

        cout << "標準偏差/unbiased_v = " << sd_ub << endl;

        char ck;

        cin >> ck;

        return 0;

}

 

プログラム1.1に分散、標準偏差の計算を付け加えたものである。

 

 

なお、C++およびVC++/.NETの説明を<岡本安晴大学生のための心理学VC++プログラミング入門勁草書房>で行っている。

 

Home