引き続き統計学のお話。


前回までは1変量(x)だったのですが、これから2変量(x、y)に。

ちょっと前進した気分です。


次に覚えるのは「相関係数」。


2変量なので、

xとyの相関関係を表すデータが必要になってくるということなんだろね。

(イメージしやすいのは「座標軸」?)


>>>


相関係数を計算する時に、最初に求めるのは「共分散」。


各値について、

「偏差x × 偏差y」を足しこんだ合計を、

「値の個数-1」で割ったものである。


1変量の分散は

「偏差x × 偏差x」(偏差xの2乗)を足しこんだ合計を、

「値の個数-1」で割ったものだった。


再度四角形の面積で考えるなら、

「正方形→長方形」に変わってくる。


            n     _     _

共分散 Cov xy = Σ (xi - x)*(yi - y) / (n - 1)

           i=1


[プログラム]
--------------------------------------------

// サンプルの値

const int n = 3;              // 値の個数が3個で

int xy[n][n]={ {1,10} , {2,20} , {3,30} }; // 値(x,y)が「1,10」「2,20」「3,30」の例

--------------------------------------------

// xの平均値を求める

double sx=0.0;               // xの合計を初期化

for (int i=0; i<n; i++) sx += xy[i][0];  // 値x[0]~値x[2](3個)の合計を加算していく

double mx = sx/n;            // xの平均値(値の合計/値の個数)を計算

--------------------------------------------

// yの平均値を求める

double sy=0.0;               // yの合計を初期化

for (int i=0; i<n; i++) sy += xy[i][1];  // 値y[0]~値y[2](3個)の合計を加算していく

double my = sy/n;            // yの平均値(値の合計/値の個数)を計算

--------------------------------------------

// 共分散を計算

double covxy = 0.0;                 // 共分散を初期化

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

   covxy += (xy[i][0]-mx) * (xy[i][1]-my);  // xの偏差とyの偏差をかけたものを合計

}

covxy /= n-1;                     // 合計を(値の個数-1)で割る

--------------------------------------------


>>>


相関係数は

「共分散を、『(xの標準偏差)×(yの標準偏差)』で割ったもの」

である。


相関係数 r xy = Cov xy / (Sx × Sy)


--------------------------------------------

// xの標準偏差を計算

sx = 0.0;                     // xの標準偏差を初期化

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

   sx += (xy[i][0]-mx) * (xy[i][0]-mx); // xの偏差の2乗を合計する

}

sx /= n-1;                    // 分散を求める

sx = sqrt(sx);                  // 標準偏差を求める

--------------------------------------------

// yの標準偏差を計算

sy = 0.0;                     // yの標準偏差を初期化

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

   sy += (xy[i][1]-my) * (xy[i][1]-my); // yの偏差の2乗を合計する

}

sy /= n-1;                    // 分散を求める

sy = sqrt(sy);                  // 標準偏差を求める

--------------------------------------------

// 相関係数を計算

double rxy = covxy / (sx * sy);

--------------------------------------------


相関係数から、以下のことがわかる。


正(>0)であれば、右上がりの相関。

負(<0)であれば、右下がりの相関。


絶対値が1に近ければ近いほど、相関が強い。(ちらばりが少なく、まとまっている)

絶対値が1の場合は「完全相関」と言い、値が直線上に並ぶ。


絶対値が0に近ければ近いほど、相関が弱い。(ちらばりが大きく、まとまっていない)

0の場合は「無相関」。もちろん値はバラバラである。


>>>


続きの日記は、相関関係を直線で表す

「回帰直線」

についてまとめたいと思います。