データクレンジング
> jra <- read.csv("jra_race_result.csv")
> #str(jra)
> # install.packages("lubridate")
> library(lubridate)
> jra$date <- ymd(jra$開催日)
> # install.packages("BH")
> # install.packages("dplyr")
> library(dplyr)
> n.t.2500 <- filter(jra,競馬場=="中山") %>% filter(コース=="芝") %>% filter(距離=="2500")
>
> n.t.2500$isIn2nd <- 0
> n.t.2500$isIn2nd[which(n.t.2500$着順 %in% 1:2)] <- 1
>
> n <- nrow(n.t.2500)
>
> UmaNyusyoRatio <- c()
> KisyuNyusyoRatio <- c()
> for(i in 1:n){
+ uma <- n.t.2500$馬名[i]
+ kishu <- n.t.2500$騎手[i]
+ time <- n.t.2500$date[i]
+ d1 <- filter(jra,馬名==uma)
+ p <- nrow(d1)
+ if(length(which((time - d1$date)>0))>0){
+ d2 <- d1[which((time - d1$date)>0),]
+ UmaNyusyoRatio[i] <- sum(d2$着順 %in% 1:2)/p
+ }
+ d3 <- filter(jra,騎手==kishu)
+ p <- nrow(d3)
+ if(length(which((time - d3$date)>0))>0){
+ d4 <- d3[which((time - d3$date)>0),]
+ KisyuNyusyoRatio[i] <- sum(d4$着順 %in% 1:2)/p
+ }
+ }
ロジスティック回帰
> dat <- data.frame(isIn2nd=n.t.2500$isIn2nd, UmaNyusyoRatio,KisyuNyusyoRatio)
> dat.glm <- glm(isIn2nd ~ UmaNyusyoRatio + KisyuNyusyoRatio, family = binomial,data=dat)
> print(dat.glm)
Call: glm(formula = isIn2nd ~ UmaNyusyoRatio + KisyuNyusyoRatio, family = binomial,
data = dat)
Coefficients:
(Intercept) UmaNyusyoRatio KisyuNyusyoRatio
-2.421 2.054 3.999
Degrees of Freedom: 408 Total (i.e. Null); 406 Residual
(20 observations deleted due to missingness)
Null Deviance: 344.6
Residual Deviance: 334.5 AIC: 340.5
2016有馬記念で
> arima2016 <- read.csv("arima2016.csv")
> n <- nrow(arima2016)
>
> UmaNyusyoRatio <- c()
> KisyuNyusyoRatio <- c()
> for(i in 1:n){
+ uma <- as.character(arima2016$uma[i])
+ kishu <- as.character(arima2016$kishu[i])
+ time <- ymd("2016-12-25")
+ d1 <- filter(jra,馬名==uma)
+ p <- nrow(d1)
+ if(length(which((time - d1$date)>0))>0){
+ d2 <- d1[which((time - d1$date)>0),]
+ UmaNyusyoRatio[i] <- sum(d2$着順 %in% 1:2)/p
+ }
+ d3 <- filter(jra,騎手==kishu)
+ p <- nrow(d3)
+ if(length(which((time - d3$date)>0))>0){
+ d4 <- d3[which((time - d3$date)>0),]
+ KisyuNyusyoRatio[i] <- sum(d4$着順 %in% 1:2)/p
+ }
+ }
> KisyuNyusyoRatio[which(is.na(KisyuNyusyoRatio))]<-0
> dat2 <- data.frame(Intercept = 1, UmaNyusyoRatio, KisyuNyusyoRatio)
> y <- as.matrix(dat2) %*% as.matrix(coef(dat.glm))
> p <- exp(y)/(1+exp(y))
> dat3 <- data.frame(no = arima2016$no, name = arima2016$uma,p)
> library(knitr)
> kable(arrange(dat3,desc(p)))
| 11 |
サトノダイヤモンド |
0.6769046 |
| 8 |
ミッキークイーン |
0.5713719 |
| 1 |
キタサンブラック |
0.5012729 |
| 14 |
シュヴァルグラン |
0.4950787 |
| 6 |
サウンズオブアース |
0.4747347 |
| 2 |
ゴールドアクター |
0.4118978 |
| 15 |
アルバート |
0.3760604 |
| 13 |
デニムアンドルビー |
0.3419766 |
| 10 |
アドマイヤデウス |
0.3270356 |
| 16 |
マリアライト |
0.3223782 |
| 5 |
サムソンズプライド |
0.2804364 |
| 4 |
ヤマカツエース |
0.2626928 |
| 7 |
マルターズアポジー |
0.2139982 |
| 9 |
ヒットザターゲット |
0.2035992 |
| 3 |
ムスカテール |
0.1755617 |
| 12 |
サトノノブレス |
0.1531960 |