本稿はRを学び始めたプログラマが学習中に残したメモ書きです。
4回目の今回は、プロ野球の指標の1つ、XRっぽいものを自前で定義してみようとしています。
Rのバージョンは2.10.1。
今回利用するデータは、その2で利用したものと同じく、2006〜2011年の過去6年分を用います。
XRの計算式は以下。
0.50*単打 + 0.72*二塁打 + 1.04*三塁打 + 1.44*本塁打 + 0.34*(四球-故意四球+死球) + 0.25*故意四球 + 0.18*盗塁 - 0.32*盗塁死 - 0.09*(打数-安打-三振) - 0.098*三振 - 0.37*併殺打 + 0.37*犠飛 + 0.04*犠打
三振や併殺なども加味された、そこそこに詳細な指標です。が、今回利用するデータはたった6年分なので得点との相関が低そうなこの辺りの値を使ってもうまく数字は出ないと思われます。
ので、とりあえず簡易版のXRRっぽいものの算出を目指してみます。XRBの計算式は以下。
0.50*単打 + 0.72*二塁打 + 1.04*三塁打 + 1.44*本塁打 + 0.33*(四球+死球) + 0.18*盗塁 - 0.32*盗塁死 - 0.098*(打数-安打)
単打と四死球、打数-安打という3つの項目が新たに必要になる。その場で計算しても良いけど見やすいようにあらかじめ作っておく。
# 単打 team_stats["単打"] <- team_stats["安打"] - rowSums( team_stats[c("二塁打", "三塁打", "本塁打")] ) # 四死球 team_stats["四死球"] <- team_stats["四球"] + team_stats["死球"] # 打数-安打 team_stats["打数-安打"] <- team_stats["打数"] - team_stats["安打"]
lmを使って各データと得点の相関を調べてみる。試しに盗塁は除いたデータで実行。
lm( formula = team_stats[,"得点"] ~ ., data = team_stats[c("単打", "二塁打", "三塁打", "本塁打", "四死球", "打数-安打")] )
上記を実行すると、下記のような結果になった。
今回の値 | XRRの値 | |
---|---|---|
単打 | 0.5075 | 0.5 |
二塁打 | 0.7695 | 0.72 |
三塁打 | 1.7420 | 1.04 |
本塁打 | 1.3552 | 1.44 |
四死球 | 0.3589 | 0.33 |
打数-安打 | -0.0496 | -0.098 |
割といい線いってる数字になった。summaryを見てみると、決定係数も0.9406と高い。
微妙な点として、三塁打が本塁打より価値が高くなってしまっている。三塁打は出現率が低く、今回のデータでは1485回しか起こっていない(本塁打は8471)ので、数値がブレやすい。もう少し少ないデータを使った時は、マイナスになったこともあった。
面倒なので二塁打と三塁打をまとめて二三塁打として分析してみる。
# 二三塁打を生成 team_stats["二三塁打"] <- team_stats["二塁打"] + team_stats["三塁打"] # 再度計算 lm( formula = team_stats[,"得点"] ~ ., data = team_stats[c("単打", "二三塁打", "本塁打", "四死球", "打数-安打")] )
今回の値 | XRRの値 | |
---|---|---|
単打 | 0.48723 | 0.5 |
二三塁打 | 0.90461 | 0.72/1.04 |
本塁打 | 1.28105 | 1.44 |
四死球 | 0.35724 | 0.33 |
打数-安打 | -0.05289 | -0.098 |
まずまずの結果になってる気がする。
盗塁や盗塁死は得点との相関が低い上に出現数も少ないので、ちゃんとしたデータが出るか少し心配だけど、とりあえずやってみる。
lm( formula = team_stats[,"得点"] ~ ., data = team_stats[c("単打", "二三塁打", "本塁打", "四死球", "打数-安打", "盗塁", "盗塁死")] )
今回の値 | XRRの値 | |
---|---|---|
単打 | 0.46156 | 0.5 |
二三塁打 | 0.81962 | 0.72/1.04 |
本塁打 | 1.32339 | 1.44 |
四死球 | 0.35315 | 0.33 |
打数-安打 | -0.04493 | -0.098 |
盗塁 | 0.32541 | 0.18 |
盗塁死 | -0.22679 | -0.32 |
XRRと比べると少し離れた数字になってしまったけど(盗塁と四死球がほとんど等価になっている)、最低限、盗塁死がマイナスで出たので良しとする。
尚、盗塁と盗塁死の発生回数は、それぞれ5763回と2560回だった。
試しに作成した式(盗塁なし版)を使って、今年(2012年)のXRを計算させてみた。
単打*0.48723 + 二三塁打*0.90461 + 本塁打*1.28105 + 四死球*0.35724 + 打数-安打*-0.05289
今ひとつピンと来ない結果。決定係数も0.7862とあまり高くならなかった。今年はまだ30試合くらいしかしてないので、ブレが大きいということもあるか。