プログラミング論

プログラミング論 I
2009年7月16日
相関
http://www.ns.kogakuin.ac.jp/~ct13140/Prog.2009/
I-1
概要
• 相関
– データ群とデータ群の関連性の強さを考える
– 話は理論的.難易度は低め.
– 理系として「相関係数」くらいは知っていて欲し
い…
I-2
相関
I-3
相関
• "相関"とは,二つのデータ列の,
関連性,連動性(一緒に動くか)のこと.
– 例:人間の身長と体重は関係がある.
身長が大きいと,体重が大きい(傾向にある).
• 相関係数とは,二つのデータ列の相関の
強さを表す統計値.
相関係数は-1~1の間をとる.
-1に近いと強い負の相関.
0に近いと相関が弱い.
1に近いと強い正の相関.
I-4
各人の身長と体重の分布
900
800
700
体重
600
500
400
300
200
100
0
500
1000
1500
2000
身長
身長の値が大きい人ほど,
体重の値も大きい傾向にある.
(身長と体重は連動して動く)
相関がある
I-5
相関の強さ
350
900
800
300
700
足の長さ
体重
600
500
400
300
200
250
200
150
100
100
0
500
1000
1500
2000
身長
「身長」の値が大きいと,
「足の長さ」の値が大きい傾向にある.
「身長」と「足の長さ」には相関がある.
しかも,右の方が「相関が強い」
500
1000
1500
2000
身長
相関の強さを
数値化した統計値が,
相関係数
I-6
「平均との偏差」同士の比較
身長偏差>0
体重偏差>0
の人たち
体重-平均体重
600
身長偏差<0
体重偏差>0
の人たち
400
200
0
-600
-400
-200
0
200
400
身長偏差×体重偏差
=正の数×正の数
=正の数
600
-200
身長偏差>0
-400
体重偏差<0
身長偏差<0
身長-平均身長 の人たち
この分布の例では,
体重偏差<0
「偏差の積」は
の人たち
正の数の例が多い.
全員の「偏差の積」を
身長偏差×体重偏差
合計したら,正となる.
=負の数×負の数
=正の数
正の相関
I-7
共分散
• 「偏差の積」の平均が「共分散」
身長偏差>0
体重偏差>0
の人たち
体重-平均体重
600
身長偏差<0
体重偏差>0
の人たち
400
200
0
-600
-400
-200
0
200
400
600
-200
身長偏差<0
体重偏差<0
の人たち
身長偏差>0
-400
体重偏差<0
身長-平均身長 の人たち
I-8
共分散が正:正の相関
• xが増えると,
yは増える傾向がある.
100
80
60
40
20
y
0
-100
-50
-20 0
50
100
-40
「偏差の積」は,
正であるものが多い.
-60
-80
-100
「偏差の積」の平均は,正である.
(偏差の積の平均=共分散)
x
I-9
共分散が負:負の相関
• xが増えると,
yは減る傾向がある.
100
80
60
40
20
y
0
-100
-50
-20 0
50
100
-40
「偏差の積」は,
負であるものが多い.
-60
-80
-100
「偏差の積」の平均は,負である.
(偏差の積の平均=共分散)
x
I-10
共分散がゼロ:無相関
• xとyは,
連動して動かない.
100
80
60
40
20
y
0
-100
-50
-20 0
50
100
-40
「偏差の積」は,
正と負が同程度.
-60
-80
-100
「偏差の積」の平均は,ゼロである.
(偏差の積の平均=共分散)
x
I-11
共分散の大きさ と 相関の強さ
100
100
100
80
80
80
60
60
60
40
40
40
20
20
20
-50
-20 0
50
100-100
-50
0
y
0
y
y
0
-100
-20 0
50
100-100
-50
-20 0
-40
-40
-40
-60
-60
-60
-80
-80
-80
-100
-100
-100
x
x
50
100
x
共分散が正.
大きな正の値.
共分散は正だが,
大きな値ではない.
共分散は
ゼロ.
強い正の相関
弱い正の相関
無相関
I-12
共分散
• 共分散の大小は,相関の強さを表す.
– 共分散が大きいほど,正の相関が強い.
– 共分散がゼロに近いと,相関が弱い.
– 共分散が小さいほど,負の相関が強い.
• xが増えたら,yは減る傾向にある.
• ただし,元の値が大きいと,共分散の値は
大きくなる.(共分散の絶対値を理解しづらい)
– 同じデータでも,
身長[cm]と体重[g]の共分散の値は大きく,
身長[m]と体重[Kg]の共分散の値は小さい.
I-13
相関係数
• 共分散の値を標準偏差(データの散らばりの大き
さ)の積で割った値が,相関係数.
xと yの共分散
xと yの相関係数 
xの標準偏差 yの標準偏差
• 相関係数は,-1から+1の値となる.
-1.0
-0.7
-0.3
+0.3
+0.7
~
~
~
~
~
-0.7
-0.3
+0.3
+0.7
+1.0
:
:
:
:
:
強い負の相関
ある程度(?)負の相関がある
相関は弱い.
ある程度(?)正の相関がある
強い正の相関がある.
I-14
標準偏差
• ただし,標準偏差とは以下のもの
nは,データの個数
n 1
1
x   xk
n k 0
n 1
1
   ( xk  x) 2
n k 0
2
  2
xの平均
xの分散
xの標準偏差
I-15
標準偏差とは
• 「平均50点の数学の試験で60点を取った」と
「平均50点の英語の試験で60点を取った」は
同程度にすごいことなのか?
数学 (標準偏差 5)
8
8
7
7
6
6
5
5
人数 [人]
人数 [人]
英語 (標準偏差10)
4
3
4
3
2
2
1
1
0
0
0
10
20
30
40
50 60 70
点数 [点]
80
90
100 110
0
10
20
30
40
50 60 70
点数 [点]
80
90
100 110
I-16
正規分布 と 標準偏差
• 正規分布なら,
「平均±標準偏差」
の範囲に約68%,
「平均±2×標準偏差」
の範囲に約95%の
人がいる.
• この例では,40点~
60点の範囲に68%の
人がいる.
英語 (標準偏差10)
4.5
4
3.5
人数 [人]
3
2.5
2
1.5
1
0.5
0
0
10
20
30
40
50 60 70
点数 [点]
80
90 100 110
I-17
相関係数
• 相関係数は,一次の相関の強さを
1.2
表現する.
1
0.8
右図のxとyは,
密接な関係があるように
見えるが,
相関係数は,ほぼゼロとなる.
(相関係数=-0.016)
0.6
0.4
0.2
0
-1.2 -1 -0.8 -0.6 -0.4 -0.2 0
-0.2
0.2
0.4
0.6
0.8
1
1.2
-0.4
-0.6
-0.8
-1
-1.2
I-18
相関係数のプログラミング
double x[100], y[100];
x[0] = 1.2; y[0] = 3.4;
x[1] = 5.6; y[1] = 7.8;
:
と,x[0]~x[99] と y[0]~y[99]がある.
x[i] と y[i] の相関係数を求めるには?
I-19
x[0]~x[99]の平均
I-20
x[0]~x[99]の平均
double sum, x_avr;
int i;
x_sum = 0.0;
for(i=0; i<100; i++){
x_sum += x[i];
}
x_avr = x_sum/100;
I-21
共分散 (1/2)
• x[i] の「平均に対する偏差」
???
• x[i]とy[i]の「偏差の積」
???
I-22
共分散 (1/2)
• x[i] の「平均に対する偏差」
x[i]-x_avr
• x[i]とy[i]の「偏差の積」
(x[i]-x_avr)*(y[i]-y_avr)
I-23
共分散 (2/2)
• x[] と y[] の共分散.
I-24
共分散 (2/2)
• x[] と y[] の共分散.
d_sum = 0.0;
for(i=0; i<100; i++){
d_sum += (x[i]-x_avr)*(y[i]-y_avr);
}
cov = d_sum/100;
/* d_sum が偏差の積の合計,
cov が共分散 */
I-25
標準偏差
• x[]の標準偏差
/* x_dis がxの分散,
x_st_devがxの標準偏差 */
I-26
標準偏差
• x[]の標準偏差
x_ds_sum = 0.0;
for(i=0; i<100; i++){
x_ds_sum +=
(x[i]-x_avr)*(x[i]-x_avr);
}
x_dis = x_ds_sum/100;
x_st_dev = sqrt(x_dis);
/* x_dis がxの分散,
x_st_devがxの標準偏差 */
I-27
x[]とy[]の相関係数
• 相関係数=共分散/(x標準偏差×y標準偏差)
I-28
x[]とy[]の相関係数
• 相関係数=共分散/(x標準偏差×y標準偏差)
cov / x_st_dev / y_st_dev
I-29
実は
xと yの共分散
相関係数 
xの標準偏差  yの標準偏差
• 分子と分母の,
1/n は消せる.
1 n 1
( xk  x)( yk  y )

n k 0

n 1
1 n 1
1
2
2
(
x

x
)
(
y

y
)


k
k
n k 0
n k 0
n 1
 ( xk  x)( yk  y)

k 0
n 1
n 1
k 0
k 0
2
(
x

x
)
 k
2
(
y

y
)
 k
I-30