(32) 野球選手の成績を主成分分析

投稿者: | 2014/08/09

7,092 views

この記事は最終更新から 1809日 が経過しています。

octaveで主成分分析をやってみます。

「主成分分析とは?」については、そのまんまググると親切なページがたくさんあります。

以下のページはとても参考になります。
はじめよう多変量解析
主成分分析の適用例

テーマは野球選手の総合評価

個人的には、何でもそつなくこなす選手が好きですので、
本塁打、打点、打率などの単一項目での評価でなく、各項目を複合した選手能力の物差しに興味があります。

入力データは2014年8月8日のセリーグ打者成績打率上位30人です。
bbscore_for_pca

主成分分析の対象とする変量(打者成績項目)は、以下の14項目とします。
打席数、安打、二塁打、三塁打、本塁打、塁打数、打点、得点、三振、四球、死球、犠打、犠飛、盗塁

octaveで主成分分析を実行

前述の打者成績をCSVファイルに保存しておき、これをoctaveでロードします。
主成分分析ではoctaveの statistics パッケージを使用するので、これもロードしておきます。

octave:1> pkg load statistics
octave:2> X=csvread('bbscore.csv')
X =
   410   127    24     0    11   184    62    40    44    36     4     0     5     2
   466   135    32     1    21   232    65    77    63    54     7     2     4     9
   375   111    20     4    13   178    59    62    59    37     5     0     2     8
   431   130    21     2     8   179    54    64    42    31     3     5     2     2
   439   126    24     2     7   175    41    61    58    19     2    32     4    19
   440   131     9     2     2   150    24    68    38    26     5     4     2    21
   441   120    20     2     7   165    52    74    55    62     2     1     3     9
   404   114    14     2    17   183    62    70    74    41     0     1     0     9
   436   112    19     4    15   184    45    69    63    69     2     0     3    19
   332    80     8     0    23   157    51    48    75    57     2     0     2     1
   412   107    20     0    10   157    39    55    56    36     2     4     4    18
   420   107    24     1    18   187    80    54   109    45     5     0     2     1
   340    86    19     1    17   158    61    44    71    38     0     0     2     1
   390    96    16     5     6   140    25    66    64    46     3     5     1    12
   388   100    16     1     7   139    39    46    60    29     3     3     2     6
   416   101    22     0     9   150    66    48    48    52     1     4     4     2
   399    98    23     3     9   154    45    52    85    45     5     2     1    26
   356    85    12     2    16   149    65    40    38    45     4     0     5     2
   406    99    14     0    33   212    90    61   135    32     6     0     3     2
   391    93    13     0    13   145    43    33    51    27     7     0     2     2
   376    88    11     3     6   123    28    48    63    22     7    11     0     5
   332    77    19     1    11   131    37    30    40    25     5     0     4     0
   347    76    17     0    11   126    34    32    42    42     3     0     1     0
   292    60     6     1     2    74    18    27    48    15     3    26     2     2
   302    67    13     0    18   134    41    35    44    15     3     2     3     1
   338    71    10     1     4    95    24    34    34    22     3    16     0    15
   367    73    12     1     1    90    19    42    38    24     3    31     1     8
octave:3> size(X)
ans =
   27   14

打者項目によって数値の範囲にばらつきがあるため、平均0、分散1に標準化しておきます。
でも、項目によって価値がだいぶ違うものもあるので、項目別の重み付けも必要かも…

octave:4> Xm=repmat(mean(X), size(X,1),1);
octave:5> Xs=repmat(std(X), size(X,1),1);
octave:6> Xv = (X - Xm) ./ Xs
Xv =
   0.5116564   1.3186125   1.1697424  -1.0347284  -0.0921100   0.8600634   0.8131214  -0.7577263  -0.6692737  -0.0519840   0.2470689  -0.5821085   1.8196848  -0.7253695
   1.7514394   1.6938698   2.4995549  -0.3183780   1.2895402   2.2243744   0.9757456   1.7655023   0.1701821   1.2112265   1.7864982  -0.3711430   1.1276920   0.2009470
  -0.2632079   0.5680979   0.5048362   1.8306732   0.1842200   0.6895245   0.6504971   0.7425718  -0.0065455   0.0181944   0.7602120  -0.5821085  -0.2562936   0.0686160
   0.9765750   1.4593340   0.6710628   0.3979724  -0.5066051   0.7179476   0.3794566   0.8789625  -0.7576375  -0.4028758  -0.2660742  -0.0546948  -0.2562936  -0.7253695
   1.1536869   1.2717054   1.1697424   0.3979724  -0.6447701   0.6042551  -0.3252485   0.6743764  -0.0507273  -1.2450161  -0.7792173   2.7933393   1.1276920   1.5242563
   1.1758259   1.5062412  -1.3236559   0.3979724  -1.3355952  -0.1063236  -1.2467861   1.1517440  -0.9343650  -0.7537676   0.7602120  -0.1601775  -0.2562936   1.7889181
   1.1979649   0.9902624   0.5048362   0.3979724  -0.6447701   0.3200236   0.2710405   1.5609162  -0.1832730   1.7726534  -0.7792173  -0.4766257   0.4356992   0.2009470
   0.3788226   0.7088194  -0.4925231   0.3979724   0.7368801   0.8316402   0.8131214   1.2881347   0.6561828   0.2989078  -1.8055035  -0.4766257  -1.6402792   0.2009470
   1.0872699   0.6150050   0.3386097   1.8306732   0.4605501   0.8600634  -0.1084162   1.2199394   0.1701821   2.2639020  -0.7792173  -0.5821085   0.4356992   1.5242563
  -1.2151841  -0.8860242  -1.4898825  -1.0347284   1.5658703   0.0926384   0.2168324  -0.2121634   0.7003647   1.4217616  -0.7792173  -0.5821085  -0.2562936  -0.8577005
   0.5559344   0.3804692   0.5048362  -1.0347284  -0.2302750   0.0926384  -0.4336647   0.2652042  -0.1390911  -0.0519840  -0.7792173  -0.1601775   1.1276920   1.3919253
   0.7330463   0.3804692   1.1697424  -0.3183780   0.8750452   0.9453328   1.7888670   0.1970088   2.2025487   0.5796213   0.7602120  -0.5821085  -0.2562936  -0.8577005
  -1.0380722  -0.6045812   0.3386097  -0.3183780   0.7368801   0.1210616   0.7589133  -0.4849448   0.5236371   0.0883728  -1.8055035  -0.5821085  -0.2562936  -0.8577005
   0.0688768  -0.1355096  -0.1600700   2.5470236  -0.7829351  -0.3905551  -1.1925780   1.0153533   0.2143640   0.6497996  -0.2660742  -0.0546948  -0.9482864   0.5979398
   0.0245989   0.0521191  -0.1600700  -0.3183780  -0.6447701  -0.4189782  -0.4336647  -0.3485541   0.0376364  -0.5432325  -0.2660742  -0.2656602  -0.2562936  -0.1960458
   0.6444903   0.0990262   0.8372893  -1.0347284  -0.3684401  -0.1063236   1.0299537  -0.2121634  -0.4925462   1.0708698  -1.2923604  -0.1601775   1.1276920  -0.7253695
   0.2681277  -0.0416953   1.0035159   1.1143228  -0.3684401   0.0073690  -0.1084162   0.0606181   1.1421835   0.5796213   0.7602120  -0.3711430  -0.9482864   2.4505728
  -0.6838485  -0.6514884  -0.8249762   0.3979724   0.5987151  -0.1347468   0.9757456  -0.7577263  -0.9343650   0.5796213   0.2470689  -0.5821085   1.8196848  -0.7253695
   0.4231005   0.0052119  -0.4925231  -1.0347284   2.9475205   1.6559115   2.3309479   0.6743764   3.3512777  -0.3326974   1.2733551  -0.5821085   0.4356992  -0.7253695
   0.0910158  -0.2762311  -0.6587497  -1.0347284   0.1842200  -0.2484394  -0.2168324  -1.2350939  -0.3600005  -0.6835892   1.7864982  -0.5821085  -0.2562936  -0.7253695
  -0.2410689  -0.5107669  -0.9912028   1.1143228  -0.7829351  -0.8737486  -1.0299537  -0.2121634   0.1701821  -1.0344810   1.7864982   0.5782017  -1.6402792  -0.3283767
  -1.2151841  -1.0267457   0.3386097  -0.3183780  -0.0921100  -0.6463634  -0.5420809  -1.4396800  -0.8460012  -0.8239460   0.7602120  -0.5821085   1.1276920  -0.9900314
  -0.8830993  -1.0736529   0.0061565  -1.0347284  -0.0921100  -0.7884792  -0.7047052  -1.3032892  -0.7576375   0.3690862  -0.2660742  -0.5821085  -0.9482864  -0.9900314
  -2.1007433  -1.8241675  -1.8223356  -0.3183780  -1.3355952  -2.2664828  -1.5720347  -1.6442661  -0.4925462  -1.5257296  -0.2660742   2.1604428  -0.2562936  -0.7253695
  -1.8793535  -1.4958174  -0.6587497  -1.0347284   0.8750452  -0.5610940  -0.3252485  -1.0987031  -0.6692737  -1.5257296  -0.2660742  -0.3711430   0.4356992  -0.8577005
  -1.0823502  -1.3081887  -1.1574294  -0.3183780  -1.0592652  -1.6695967  -1.2467861  -1.1668985  -1.1110925  -1.0344810  -0.2660742   1.1056154  -1.6402792   0.9949325
  -0.4403197  -1.2143744  -0.8249762  -0.3183780  -1.4737603  -1.8117124  -1.5178266  -0.6213356  -0.9343650  -0.8941243  -0.2660742   2.6878565  -0.9482864   0.0686160

corr 関数で共分散行列を求めます。

octave:7> R1 = corr(Xv)
R1 =
   1.000000   0.917441   0.625741   0.241142   0.038235   0.705647   0.358418   0.802930   0.231084   0.439883   0.134384  -0.140606   0.238704   0.450093
   0.917441   1.000000   0.630642   0.251153   0.065308   0.774014   0.398038   0.797047   0.144070   0.353524   0.082908  -0.219885   0.309752   0.370394
   0.625741   0.630642   1.000000   0.066154   0.180789   0.669949   0.483119   0.423836   0.176020   0.399652   0.067315  -0.231639   0.444052   0.142541
   0.241142   0.251153   0.066154   1.000000  -0.277890   0.071350  -0.200134   0.504802   0.022182   0.236108   0.039272   0.037135  -0.294460   0.493017
   0.038235   0.065308   0.180789  -0.277890   1.000000   0.665591   0.788719   0.176485   0.674144   0.344464   0.127254  -0.564090   0.265990  -0.352778
   0.705647   0.774014   0.669949   0.071350   0.665591   1.000000   0.794679   0.704416   0.535209   0.513877   0.143400  -0.518031   0.404411   0.070216
   0.358418   0.398038   0.483119  -0.200134   0.788719   0.794679   1.000000   0.327019   0.623625   0.441877   0.047074  -0.549370   0.409742  -0.327218
   0.802930   0.797047   0.423836   0.504802   0.176485   0.704416   0.327019   1.000000   0.352701   0.519591  -0.045163  -0.178053   0.025209   0.472583
   0.231084   0.144070   0.176020   0.022182   0.674144   0.535209   0.623625   0.352701   1.000000   0.259144   0.166485  -0.269422  -0.105222  -0.014600
   0.439883   0.353524   0.399652   0.236108   0.344464   0.513877   0.441877   0.519591   0.259144   1.000000  -0.212427  -0.535086   0.184152   0.111574
   0.134384   0.082908   0.067315   0.039272   0.127254   0.143400   0.047074  -0.045163   0.166485  -0.212427   1.000000  -0.127532   0.024786  -0.048946
  -0.140606  -0.219885  -0.231639   0.037135  -0.564090  -0.518031  -0.549370  -0.178053  -0.269422  -0.535086  -0.127532   1.000000  -0.174581   0.230993
   0.238704   0.309752   0.444052  -0.294460   0.265990   0.404411   0.409742   0.025209  -0.105222   0.184152   0.024786  -0.174581   1.000000  -0.140228
   0.450093   0.370394   0.142541   0.493017  -0.352778   0.070216  -0.327218   0.472583  -0.014600   0.111574  -0.048946   0.230993  -0.140228   1.000000

eig 関数で固有ベクトル(v), 固有値(l)を求めます。

octave:8> [v,l] = eig(R1)
v =
   4.4396e-16   7.3627e-01   5.9575e-02  -4.9581e-02  -2.0468e-01  -2.8964e-01  -1.1990e-01   9.3614e-02   2.6179e-01   7.4887e-02  -1.3007e-01  -1.4152e-01   2.7837e-01   3.3823e-01
   4.5372e-01  -4.4766e-01   4.1276e-01  -2.2866e-02  -1.2642e-01   1.1162e-01   1.5779e-01   3.1094e-02   3.6749e-01   2.6054e-02  -1.0274e-01  -2.0307e-01   2.5139e-01   3.4325e-01
   1.2803e-01   1.4641e-02  -1.2618e-01   1.4752e-01   2.2232e-01   2.6215e-01  -5.4187e-01  -5.2239e-01  -2.3418e-01  -1.2928e-02  -2.6486e-02  -3.2816e-01   6.6633e-02   3.0530e-01
   5.9420e-02   1.8642e-01   1.5468e-01  -8.0449e-02  -1.3009e-01   1.4551e-01   4.2724e-01  -4.3635e-01  -3.5653e-01  -3.2416e-01   4.6928e-02   3.5864e-01   3.9079e-01   6.7460e-02
   4.6211e-01   2.9483e-01   1.5904e-01  -9.3213e-02   5.2435e-01   9.2512e-02   1.6145e-01   1.9032e-01  -1.7222e-01   1.1479e-01  -2.9410e-02   2.1363e-01  -4.1345e-01   2.4386e-01
  -7.4878e-01  -7.2006e-02   3.3896e-01  -5.2543e-02   2.7470e-01   1.8110e-01   1.3650e-01   1.2349e-02   4.8061e-02   5.8699e-02  -8.1210e-02  -1.8860e-02  -6.0432e-02   4.1604e-01
   2.7741e-16  -1.0435e-01  -3.8506e-01  -6.6686e-01  -3.4413e-01   3.7267e-02   9.5506e-02  -1.8962e-01   1.3864e-02   1.4983e-01   1.4150e-02   1.2576e-02  -3.1325e-01   3.3182e-01
   1.7452e-15  -1.4345e-01  -6.4493e-01   3.2915e-01   2.9056e-01  -1.2294e-01   2.9327e-01   4.1657e-02   1.7134e-01   1.1541e-01   4.6305e-02   1.7267e-01   2.9102e-01   3.2946e-01
   8.3822e-16  -1.0575e-01   1.3567e-01   4.3200e-01  -4.3527e-01  -7.9053e-02  -1.8090e-01  -3.4551e-02  -2.1802e-01   3.9566e-01  -2.1254e-01   4.6694e-01  -1.8405e-01   2.3022e-01
  -6.3512e-16  -2.2003e-01   1.5979e-01  -1.0944e-01   8.3585e-02  -6.1368e-01  -2.6445e-01   5.8435e-02  -1.6279e-01  -2.8035e-01   5.0428e-01   1.3893e-01   1.2460e-02   2.7979e-01
  -1.2478e-16  -1.5082e-01  -1.0002e-01  -8.6817e-02   9.6465e-02  -2.8574e-01  -7.2603e-02   5.7974e-02  -9.9587e-02  -4.6940e-01  -7.8942e-01   4.1213e-02  -5.4695e-02   4.4772e-02
  -3.9566e-16  -1.0101e-01   1.3125e-01  -2.3130e-01   2.5080e-01  -4.3098e-01   1.2837e-01  -2.5471e-01  -2.3276e-01   6.0320e-01  -1.8316e-01  -1.4585e-01   2.5143e-01  -2.3023e-01
   9.6730e-16   1.3293e-02  -5.0913e-02   2.5686e-01  -2.3142e-01  -1.0234e-01   3.8679e-01   2.1451e-01  -5.0819e-01  -5.4992e-02   5.0236e-02  -5.9730e-01  -1.5163e-01   1.6746e-01
  -3.2694e-16  -7.9032e-02  -8.9866e-02  -2.8050e-01  -1.7434e-02   3.0850e-01  -2.6595e-01   5.7797e-01  -3.9567e-01   1.1716e-01  -3.3058e-02   9.6885e-02   4.7065e-01   6.6918e-02
l =
Diagonal Matrix
   2.2204e-16            0            0            0            0            0            0            0            0            0            0            0            0            0
            0   3.7856e-02            0            0            0            0            0            0            0            0            0            0            0            0
            0            0   5.3203e-02            0            0            0            0            0            0            0            0            0            0            0
            0            0            0   1.0939e-01            0            0            0            0            0            0            0            0            0            0
            0            0            0            0   1.8701e-01            0            0            0            0            0            0            0            0            0
            0            0            0            0            0   3.2360e-01            0            0            0            0            0            0            0            0
            0            0            0            0            0            0   4.3619e-01            0            0            0            0            0            0            0
            0            0            0            0            0            0            0   4.7192e-01            0            0            0            0            0            0
            0            0            0            0            0            0            0            0   5.1286e-01            0            0            0            0            0
            0            0            0            0            0            0            0            0            0   8.6176e-01            0            0            0            0
            0            0            0            0            0            0            0            0            0            0   1.2015e+00            0            0            0
            0            0            0            0            0            0            0            0            0            0            0   1.5022e+00            0            0
            0            0            0            0            0            0            0            0            0            0            0            0   2.8874e+00            0
            0            0            0            0            0            0            0            0            0            0            0            0            0   5.4151e+00

主成分のランク付けがしやすいように、寄与率を算出してみます。

octave:9> r = l / sum(l(:))
r =
Diagonal Matrix
   1.5860e-17            0            0            0            0            0            0            0            0            0            0            0            0            0
            0   2.7040e-03            0            0            0            0            0            0            0            0            0            0            0            0
            0            0   3.8002e-03            0            0            0            0            0            0            0            0            0            0            0
            0            0            0   7.8135e-03            0            0            0            0            0            0            0            0            0            0
            0            0            0            0   1.3358e-02            0            0            0            0            0            0            0            0            0
            0            0            0            0            0   2.3114e-02            0            0            0            0            0            0            0            0
            0            0            0            0            0            0   3.1156e-02            0            0            0            0            0            0            0
            0            0            0            0            0            0            0   3.3709e-02            0            0            0            0            0            0
            0            0            0            0            0            0            0            0   3.6633e-02            0            0            0            0            0
            0            0            0            0            0            0            0            0            0   6.1554e-02            0            0            0            0
            0            0            0            0            0            0            0            0            0            0   8.5818e-02            0            0            0
            0            0            0            0            0            0            0            0            0            0            0   1.0730e-01            0            0
            0            0            0            0            0            0            0            0            0            0            0            0   2.0624e-01            0
            0            0            0            0            0            0            0            0            0            0            0            0            0   3.8680e-01

寄与率が大きいものは、
第1主成分 r(14) 38.7%
第2主成分 r(13) 20.6%
第3主成分 r(12) 10.7%
第4主成分 r(11) 8.6%
第5主成分 r(10) 6.2%
ここまでで 84.8% です。

選んだ5種類の主成分(=主成分スコア)を算出しておきます。

octave:10> scr14 = Xv * v(:,14);
octave:11> scr13 = Xv * v(:,13);
octave:12> scr12 = Xv * v(:,12);
octave:13> scr11 = Xv * v(:,11);
octave:14> scr10 = Xv * v(:,10);

これで計算が完了!

結果を見てみる

第1主成分~第5主成分の固有ベクトルは以下の通りです。
eigenv

(1) 第1主成分

固有ベクトルを見ると、出場が多く、長打が多く、打点も得点も多く、いわゆるスラッガーが高評価される物差しのようです。
結果は…
pca1st

(2) 第2主成分

固有ベクトルを見ると、よく出場し、よく打ち、よく走り、よく得点し、だけど非力、いわゆるリードオフマンが高評価される物差しのようです。
結果は…
pca2nd

なかなか面白いです(^^)


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です