投手が取られた直後に打線が奮起. よくありますね.
取られたら取り返す. 大事です.
直前に点を取られたかどうかは, その後の攻撃に影響するんですかね?
2013年のメジャーリーグのデータを利用します.
library(data.table)
library(dplyr)
library(ggplot2)
source("../../R/retrosheet.R")
dat <- fread("../../data/all2013.csv")
setnames(dat, fread("../../data/reference/retrosheet-columns.csv", header = FALSE)[[1]])
HOME_SCORE_CT / AWAY_SCORE_CT
はプレー「前」のスコアなので, 半イニングごとに max()
を取って差分すると, その半イニングの最後のプレーで入った得点が
次の半イニングに繰り越されてしまいます.
各プレーで生還した走者を数えるのが正しい数え方です
(R/retrosheet.R).
innings <- half_inning_runs(dat) |> as_tibble()
ここが結果を左右します.
9回裏は, ホームが勝っていれば行われません. 2013年では9回表があった 2423試合のうち, 9回裏があったのは 1359試合だけです.
つまり「9回表に点を取られたか」と「9回裏が行われるか」は無関係ではありません. 取られていれば裏の攻撃はほぼ必ずありますが, 取られずにホームが勝っていれば 攻撃自体がありません. このまま全イニングを使うと, 「直前に取られた」側にだけ9回裏が多く混ざります.
さらに, サヨナラ勝ちの回や延長戦の一部は3アウトを待たずに終わるので, 得点が切り詰められます.
completeness <-
dat |>
as_tibble() |>
summarise(未完 = sum(EVENT_OUTS_CT) < 3,
.by = c(GAME_ID, INN_CT, BAT_HOME_ID)) |>
summarise(半イニング = n(), 未完 = sum(未完), .by = INN_CT) |>
arrange(INN_CT)
completeness |> filter(INN_CT <= 11) |> knitr::kable()
| INN_CT | 半イニング | 未完 |
|---|---|---|
| 1 | 4862 | 0 |
| 2 | 4862 | 0 |
| 3 | 4862 | 0 |
| 4 | 4862 | 0 |
| 5 | 4862 | 0 |
| 6 | 4860 | 1 |
| 7 | 4853 | 1 |
| 8 | 4846 | 0 |
| 9 | 3782 | 114 |
| 10 | 486 | 60 |
| 11 | 252 | 26 |
イニング1〜8は必ず両チームが攻撃し, 3アウトで終わります. 以降はこの範囲だけを使います. 9回以降を含めるかどうかで結論が変わるので, 最後に比較します.
runs_by_half <-
innings |>
arrange(GAME_ID, INN_CT, BAT_HOME_ID) |>
mutate(直前の失点 = lag(runs), .by = GAME_ID) |>
filter(!is.na(直前の失点)) |>
mutate(取られた直後 = 直前の失点 > 0)
main <- runs_by_half |> filter(INN_CT <= 8)
by_flag <-
main |>
summarise(半イニング = n(), 平均得点 = mean(runs), 分散 = var(runs),
.by = 取られた直後) |>
arrange(取られた直後)
by_flag |> knitr::kable(digits = 4)
| 取られた直後 | 半イニング | 平均得点 | 分散 |
|---|---|---|---|
| FALSE | 26723 | 0.4746 | 0.9573 |
| TRUE | 9715 | 0.4651 | 0.9583 |
差は -0.0096 点/半イニング, 95%信頼区間は [-0.0323, +0.0132] です.
この区間は0をまたいでいます. 点推定は「取られた直後のほうがわずかに低い」 という向きですが, 符号すら確かとは言えません.
大きさの感覚としては, 平均得点そのものが0.475点なので, 区間の端でも6.8%程度です. 仮に本当に差があったとしても, その大きさはこの範囲に収まります.
つまりこのデータからは, 「取られたら取り返す」も「取り返せない」も 支持できません. 言えるのは「あったとしても数%以内」ということです.
イニングによって平均得点は違います (序盤ほど高い). 「取られた直後」の割合もイニングで少しずつ違うので, ここを揃えます.
by_inning <-
main |>
summarise(平均得点 = mean(runs), n = n(), sd = sd(runs),
.by = c(INN_CT, 取られた直後)) |>
mutate(se = sd / sqrt(n))
by_inning |>
ggplot(aes(x = factor(INN_CT), y = 平均得点,
colour = 取られた直後, group = 取られた直後)) +
geom_line() +
geom_pointrange(aes(ymin = 平均得点 - 1.96 * se, ymax = 平均得点 + 1.96 * se)) +
xlab("イニング") +
ggtitle("直前に取られたかどうか別の平均得点 (95%信頼区間)")

どのイニングでも信頼区間は大きく重なっています.
線形モデルでイニングと表裏を調整しても結論は同じです.
fit <- lm(runs ~ 取られた直後 + factor(INN_CT) + factor(BAT_HOME_ID), data = main)
co <- summary(fit)$coefficients["取られた直後TRUE", , drop = FALSE]
round(co, 5)
## Estimate Std. Error t value Pr(>|t|)
## 取られた直後TRUE -0.00953 0.01159 -0.82243 0.41084
調整後の係数は-0.0095 (標準誤差0.0116) で, やはり0と区別がつきません.
compare <-
bind_rows(
runs_by_half |> filter(INN_CT <= 8) |> mutate(範囲 = "1-8回のみ"),
runs_by_half |> mutate(範囲 = "全イニング")
) |>
summarise(平均得点 = mean(runs), n = n(), .by = c(範囲, 取られた直後)) |>
tidyr::pivot_wider(names_from = 取られた直後, values_from = c(平均得点, n)) |>
mutate(差 = 平均得点_TRUE - 平均得点_FALSE)
compare |> knitr::kable(digits = 4)
| 範囲 | 平均得点_TRUE | 平均得点_FALSE | n_TRUE | n_FALSE | 差 |
|---|---|---|---|---|---|
| 1-8回のみ | 0.4651 | 0.4746 | 9715 | 26723 | -0.0096 |
| 全イニング | 0.4535 | 0.4651 | 10897 | 30471 | -0.0116 |
1〜8回だけなら-0.0096点ですが, 全イニングだと -0.0116点になります.
この違いは打者の奮起とは関係ありません. 9回裏が「取られた直後」に偏って 含まれることによる, 分析対象の選び方が作った差です. 9回裏に回ってくるのはホームが勝っていない場面なので, もともと得点の入り方が 違います.
このデータからは「取られたら取り返す」は支持できませんが, 否定もできません.
1〜8回に絞って比べると差は-0.0096点, 95%信頼区間は[-0.0323, +0.0132]で0を含みます. 点推定はむしろわずかに低い側ですが, 符号を主張できるほどではありません.
言えるのは「あったとしても平均得点の数%以内」ということです.
念のためWilcoxonの順位和検定もかけておきます.
w <- wilcox.test(runs ~ 取られた直後, data = main)
w
##
## Wilcoxon rank sum test with continuity correction
##
## data: runs by 取られた直後
## W = 130752858, p-value = 0.1687
## alternative hypothesis: true location shift is not equal to 0
「2群の分布に差がない」という帰無仮説のp値は0.1687です.
半イニングが36,438件あるので, 小さな差でも検定は反応します. p値の大きさは効果の大きさを表しません. 上で出した差と信頼区間のほうを見てください.
取られた直後に取り返した場面は印象に残ります. 一方, 取られた直後に 3人で終わった場面は記憶に残りません.
そして「取られた直後」は全体の27% もあるので, 取り返す場面自体は毎日どこかで起きています. 珍しくないことを珍しいことのように感じてしまう, というだけかもしれません.