話題の検索ワード  

<<目次へ


正準相関分析をもう少し踏み込んで考えてみよう



Contents
  1. 正準相関係数と正準変量
  2. 構造係数
  3. 寄与率と冗長性係数
  4. 正準相関分析を実際にやってみる



 重回帰分析では1つの目的変量と2つ以上の説明変量からなる,すなわち1つの合成変量をつくるという分析方法でした。一方,正準相関分析は2つの合成変量を作り出し,その合成変量間の相関関係(この指標を正準相関係数といいます)を明らかにするための分析方法なのです。

 正準相関分析は、、、



 ここで正準相関分析で使用する用語について簡単に紹介しておきましょう。あくまでも簡単な説明ですので,詳しくはこれ以降の説明を参考にしてください。



1. 正準相関係数と正準変量

 正準相関分析では合成変量のことを正準変量といいます。正準変量と求めるということは重み係数を求めるということで,これは重回帰分析で各説明変量の偏相関係数を求めるのと同じことです(計算の仕方は違いますが)。
 これはコンピュータに計算させるのですが,通常はいくつかの正準変量を作ってくれます。実際にRの実行結果をみてみましょう。なお,Rにはcanor()という関数が最初から用意されていますが,こちらのページで説明しているものを使ったほうがよいです。

> dat
      [,1] [,2] [,3] [,4]
 [1,]   74   59   70   77
 [2,]   86   80   79   90
 [3,]   55   59   65   48
 [4,]   45   80   55   42
 [5,]   65   70   45   58
 [6,]   86   61   75   80
 [7,]   60   75   83   52
 [8,]   87   80   84   81
 [9,]   40   59   55   52
> cancorr(dat,1:2,3:4)
$canonical.correlation.coefficients #正準相関係数
[1] 0.9355233 0.2428146

$standardized.coefficients #標準化された重み係数
$standardized.coefficients$group1
            [,1]       [,2]
[1,]  1.01105805 -0.1726871
[2,] -0.05654762  1.0241394

$standardized.coefficients$group2
          [,1]       [,2]
[1,] 0.1506526  1.2300966
[2,] 0.9035980 -0.8481418
第1正準相関係数 第2正準相関係数
0.9355233 0.2428146

第1正準変量 第2正準変量




 さて前述したように,作り出した2つの合成変量(f1とg1,f2とg2)の関係を表す指標が正準相関係数です。この正準相関係数(と正準変量)は固有値の大きいものから順に第1,第2,第3,...,といくつか出力されますが実用上は多くても第2までを考えるのが普通です。
 今回の場合は第2正準相関係数(と第2正準変量)までしか出力されていませんが,扱う変数の数が増えればもっとたくさん出てきます。またこのケースでは第2正準相関係数が0.24と低い値になっているので第1正準相関係数(と第1正準変量)についてのみ考察すれば良いでしょう。



2. 構造係数

 構造係数とは作り出した合成変量と各変量との相関係数のことです。下のワークシートのスクリーンショットにある薄い緑の部分がそうです。以下は計算手順を示すために原データを使用していますが,実際にはデータを標準化してから計算を行ってください

 f1とf2およびg1とg2はどのようにして求めるのかについては以下を参照。もしくはこちらのページの真ん中辺りをみるか,Excelで行列の積を求めたいのであればこちらのページの『相関行列を作成するマクロ』を開けばOK。

> gen.data1 #x1とx2のデータ行列
      [,1] [,2]
 [1,]   74   59
 [2,]   86   80
 [3,]   55   59
 [4,]   45   80
 [5,]   65   70
 [6,]   86   61
 [7,]   60   75
 [8,]   87   80
 [9,]   40   59
> group1 #第1正準変量(f1)と第2正準変量(f2)の重み係数
            [,1]       [,2]
[1,]  1.01105805 -0.1726871
[2,] -0.05654762  1.0241394
> gen.data1%*%group1 #行列の積
          [,1]     [,2]
 [1,] 71.48199 47.64538
 [2,] 82.42718 67.08006
 [3,] 52.27188 50.92643
 [4,] 40.97380 74.16023
 [5,] 61.76044 60.46510
 [6,] 83.50159 47.62141
 [7,] 56.42241 66.44923
 [8,] 83.43824 66.90737
 [9,] 37.10601 53.51674
> gen.data2 #x3とx4のデータ行列
      [,1] [,2]
 [1,]   70   77
 [2,]   79   90
 [3,]   65   48
 [4,]   55   42
 [5,]   45   58
 [6,]   75   80
 [7,]   83   52
 [8,]   84   81
 [9,]   55   52
> group2 #第1正準変量(g1)と第2正準変量(g2)の重み係数
          [,1]       [,2]
[1,] 0.1506526  1.2300966
[2,] 0.9035980 -0.8481418
> gen.data2%*%group2 #行列の積
          [,1]      [,2]
 [1,] 80.12273 20.799843
 [2,] 93.22538 20.844869
 [3,] 53.16512 39.245473
 [4,] 46.23701 32.033357
 [5,] 59.18805  6.162123
 [6,] 83.58679 24.405901
 [7,] 59.49126 57.994644
 [8,] 85.84626 34.628629
 [9,] 55.27299 23.551939



3. 寄与率と冗長性係数

3.1 寄与率

 寄与率とは作り出した合成変量(正準変量)とその説明変数となっている変量との結びつきの強さを表す指標です。ここで合成変量をfとし,その説明変数をxi(i=1,2,3,...,n)とすると合成変量fの寄与率は次式によって求めることができます。なおrfx1はfとx1との相関係数です(前節で求めた構造係数がここで必要になるわけです)。

 もう少し数学っぽく書けば次のようになりますが,要するに「第n正準変量の構造係数の2乗を全て足して変数の数で割る(=構造係数の平均値)」ということです。

 実際にf1,f2,g1,g2の寄与率を求めてみましょう。


3.2 冗長性係数

 冗長性係数は第1正準変量Fと第2正準変量Gがあったとき,Fと第2正準変量の説明変数との結びつきの強さ,またはGと第1正準変量の説明変数との結びつきの強さを表す指標です。

 ここに2つの合成変量fとgがあるとき,fの説明変数をxi(i=1,2,3,...,n),gの説明変量をyi(i=1,2,3,...,n)とします。そうすると冗長性係数は次式によって求められます。

 ・・・fとyiとの冗長性係数

 ・・・gとxiとの冗長性係数





4. 正準相関分析を実際にやってみる

涌井良幸・涌井貞美「図解でわかる多変量解析」日本実業出版社p183
No. 身長(cm) 体重(kg) 胸囲(cm) 座高(cm) 50m走(秒) 走り幅跳び(cm) ボール投げ(m)
1 168.5 57.4 83.4 86.9 5.8 346 25.6
2 182.6 85.4 98.9 93.4 6.8 412 33.2
3 168.5 68.6 86.5 94.7 6.1 401 35.1
4 182.6 85.4 98.9 89.5 7.2 357 29.4
5 177.9 68.6 92.7 92.1 6.5 379 31.3
6 154.4 51.8 80.3 85.6 5.1 335 23.7
7 187.3 85.4 98.9 94.7 7.2 412 37.0
8 173.2 57.4 86.5 94.7 6.1 423 35.1
9 187.3 91.0 98.9 89.5 7.5 357 27.5
10 173.2 68.6 92.7 92.1 6.1 379 31.3

 まずは正準相関係数と重み係数を求めましょう。

> dat
       [,1] [,2] [,3] [,4] [,5] [,6] [,7]
 [1,] 168.5 57.4 83.4 86.9  5.8  346 25.6
 [2,] 182.6 85.4 98.9 93.4  6.8  412 33.2
 [3,] 168.5 68.6 86.5 94.7  6.1  401 35.1
 [4,] 182.6 85.4 98.9 89.5  7.2  357 29.4
 [5,] 177.9 68.6 92.7 92.1  6.5  379 31.3
 [6,] 154.4 51.8 80.3 85.6  5.1  335 23.7
 [7,] 187.3 85.4 98.9 94.7  7.2  412 37.0
 [8,] 173.2 57.4 86.5 94.7  6.1  423 35.1
 [9,] 187.3 91.0 98.9 89.5  7.5  357 27.5
[10,] 173.2 68.6 92.7 92.1  6.1  379 31.3
> cancorr(dat,1:4,5:7)
$canonical.correlation.coefficients
[1] 0.9936838 0.9788595 0.2102673

$standardized.coefficients
$standardized.coefficients$group1
           [,1]       [,2]        [,3]
[1,] -0.6832589 -0.5532801 -2.39545522
[2,] -0.3821677 -0.4171156  2.39842011
[3,]  0.2529675  0.1964942 -0.09656403
[4,] -0.3541595  1.0314595  0.43119270

$standardized.coefficients$group2
           [,1]       [,2]       [,3]
[1,] -0.7979202 -0.7374978 -0.3027009
[2,] -0.2756269  0.1326507 -3.3490249
[3,] -0.1368157  0.8617918  3.3794897

 次に構造係数,寄与率,冗長性係数を求めます。そのために以下のようなデータ行列を用意してください。

> s.dat1 #標準化されたデータ
            身長       体重       胸囲       座高
No.1  -0.6902685 -1.0386161 -1.1679183 -1.3347310
No.2   0.6902685  0.9587226  0.9948934  0.6281087
No.3  -0.6902685 -0.2396806 -0.7353560  1.0206766
No.4   0.6902685  0.9587226  0.9948934 -0.5495951
No.5   0.2300895 -0.2396806  0.1297687  0.2355408
No.6  -2.0708055 -1.4380838 -1.6004807 -1.7272989
No.7   1.1504475  0.9587226  0.9948934  1.0206766
No.8  -0.2300895 -1.0386161 -0.7353560  1.0206766
No.9   1.1504475  1.3581903  0.9948934 -0.5495951
No.10 -0.2300895 -0.2396806  0.1297687  0.2355408
> s.dat2 #標準化されたデータ
            50m走  走り幅跳び  ボール投げ
No.1  -0.86175804 -1.10448502 -1.21751917
No.2   0.48473890  1.03322792  0.52179393
No.3  -0.45780896  0.67694243  0.95662221
No.4   1.02333767 -0.74819953 -0.34786262
No.5   0.08078982 -0.03562855  0.08696566
No.6  -1.80430589 -1.46077051 -1.65234745
No.7   1.02333767  1.03322792  1.39145049
No.8  -0.45780896  1.38951342  0.95662221
No.9   1.42728675 -0.74819953 -0.78269090
No.10 -0.45780896 -0.03562855  0.08696566
> f.dat
               f1          f2          f3
No.1   1.10853688 -0.71484691  1.29659775
No.2  -0.82385327  0.00597883 -0.80844808
No.3  -0.08417858  1.36455033 -1.60297937
No.4  -0.32921768 -1.17172497 -0.29025841
No.5  -0.11796591  0.24458557  1.03030547
No.6   2.19080551 -0.21844289 -0.95511284
No.7  -1.27864456  0.13164291  0.13245522
No.8  -0.06250651  1.47314620  1.40413094
No.9  -0.77492285 -1.62637861 -0.12336368
No.10  0.17194686  0.51148939 -0.08332771
> g.dat
               g1           g2         g3
No.1   1.19142434 -0.501781710  0.1579595
No.2  -0.73154148  0.220205488  1.8324725
No.3  -0.03913257  1.247035192 -1.1115193
No.4  -0.50792696 -1.207166025 -1.0019727
No.5  -0.07204362  0.001369272 -0.3866725
No.6   2.08385425 -0.179373827  0.1447103
No.7  -1.33551157  0.504520261 -0.9313045
No.8  -0.21014961  1.368172260  1.2613421
No.9  -0.71087827 -1.874457214  0.5886228
No.10  0.33190547  0.421476320 -0.5536381

 構造係数,寄与率,冗長性係数を求めるためにはこちらの関数を使用してください。

> myprog(s.dat1,s.dat2,f.dat,g.dat)
$fの構造係数
         身長       体重        胸囲        座高
f1 -0.9339400 -0.8410378 -0.87007185 -0.73089472
f2 -0.3254772 -0.4660290 -0.38456285  0.67773132
f3  0.1529528 -0.2635173 -0.08908837 -0.02292548

$gの構造係数
        50m走 走り幅跳び  ボール投げ
g1 -0.8981882 -0.6566513 -0.73497403
g2 -0.4318683  0.7269028  0.67722813
g3 -0.0551373  0.2109321 -0.09179411

$fの寄与率
        f1         f2         f3 
0.71770516 0.23258169 0.02532455 

$gの寄与率
        g1         g2         g3 
0.59270662 0.39117862 0.01865288 

$fの冗長性係数
         g1          g2          g3 
0.707912719 0.220166300 0.001111660 

$gの冗長性係数
          f1           f2           f3 
0.5847692274 0.3692176756 0.0008049318