当预测变量和结果变量都是比例时的回归

机器算法验证 回归 广义线性模型 部分 贝塔回归
2022-04-03 12:37:00

我在用

X估计的运动队在主场比赛的赛前获胜概率(根据某个模型估计)

预测

Y本场比赛主队得分的实际比例(即主队得分除以本场比赛总得分)。

用图表表示,数据看起来像这样。

主队估计获胜概率 vs 主队实际得分比例

数据可在此处查看。

我做了一个简单的线性回归,它产生了参数因此,即使在的最大可能值下,它也不能预测主队将得分超过 100%。b0=0.3554b1=0.2930x

然而,这里对其他问题的一些解读表明,线性回归通常被认为不适用于结果变量为比例的情况。

这个问题与这个问题非常相似,其中一张海报试图预测一支球队的胜率。有人建议发帖者应将获胜比例转换为获胜次数。但是,在我的问题中,使用球队得分的数量对我来说不是一回事。

  1. 我在这里使用线性回归有多不合适?

  2. 我应该使用什么分析,请记住,与链接问题不同,我不能只使用团队得分的原始分数(因为我真的对他们得分的比例感兴趣)。如果预测变量是连续比例,gung的答案似乎表明 beta 回归,如果它是计数比例,则表明逻辑回归。但是,我不确定我的预测器是这两个中的哪一个。

  3. 我的预测变量也按比例测量有什么区别吗?

2个回答

具有二项式分布和 logit 链接的 glm 应该可以正常工作。如果没有概率0或者1, beta 回归是另一种可能性。在这种情况下,它们产生几乎无法区分的结果(未显示)。

实际的 logit 和估计概率的 logit 之间的关系看起来非常线性(见下图),这将导致我使用估计概率的 logit 作为预测器。用于生成图的R代码位于此答案的底部。

loess_plot

让我们以原始比例可视化模型(点是部分残差):

在此处输入图像描述

可能的扩展包括:

  • 使用稳健的标准错误(见R下面的代码)。Stata 的fracreg命令默认使用它们。
  • 使用准似然(通过使用quasibinomialas family in glm

R代码:

library(betareg)
library(visreg)
library(lmtest)
library(sandwich)

# Convert probabilities to log-odds
est_p_logit <- log(est_prob/(1 - est_prob))
act_p_logit <- log(act_prob/(1 - act_prob))

# Check linearity
scatter.smooth(act_p_logit~est_p_logit, las = 1)

# GLM with binomial distribution and logit-link
mod <- glm(act_prob~est_p_logit, family = binomial)

summary(mod)

# Robust standard errors
coeftest(mod, vcov = vcovHC, type = "HC3")

# Visualize GLM model
res_glm <- visreg(mod, scale = "response", ylim = c(0, 1), partial = TRUE, rug = 2)

# Beta regression
mod_beta <- betareg(act_prob~est_p_logit)

# Compare GLM results with beta regression
res_beta <- visreg(mod_beta, scale = "response", ylim = c(0, 1))
lines(res_beta$fit$visregFit~res_beta$fit$est_p_logit, type = "l", col = "red")

与我认为是一个很好的答案的其他答案不同,我认为线性回归足以满足您的确切情况。作为原则问题,由于结果的硬性界限,它可能是错误的,但是您的数据图表明了为什么它是一个足够好的近似值。在这两个极端情况下,您的数据的平均值与结果的极端情况相距甚远,因此,没有关系的弯曲或弯曲以尊重原始结果的界限。简而言之,您的预测似乎与结果呈线性相关,这是线性回归的主要要求。

如果上述情况属实,那么线性模型的优点是:

  1. 易于解释,您发布的系数在到达时有意义
  2. 如果有人关心的话,可以从回归标准差中获得一个相对简单的围绕拟合线的变异性度量。

我从探索数据开始:

dat <- read.csv("Estimated probability of winning vs Actual proportion of score - Sheet1.csv")
names(dat) <- c("x", "y")
ggplot(dat, aes(x, y)) + geom_point(shape = 1) + theme_bw() +
  geom_smooth() + geom_smooth(method = "lm", se = FALSE, col = "red")

在此处输入图像描述

蓝线是广义的加法模型更平滑。红线是线性拟合。人们可以观察到末端的一些弯曲,但向外而不是向内。所以你的预测与结果并不完全线性相关。由于您有足够的数据点,因此这可能不是任意的。

的 Logit 变换y在这里不太可能有帮助,相反,logit 转换x因为它向外弯曲。我们可以缩小中间x有点值并扩大更大x价值观:

ggplot(dat, aes(log(x / (1 - x)), y)) + geom_point(shape = 1) + theme_bw() +
  geom_smooth() + geom_smooth(method = "lm", se = FALSE, col = "red")

在此处输入图像描述

这一次,线性拟合非常接近平滑拟合,但在尾部不是很好,但对于大多数应用来说已经足够了。同方差是一个合理的假设。

所以选择的回归模型是:

coef(summary(fit.lm <- lm(y ~ log(x / (1 - x)), dat)))

                 Estimate  Std. Error   t value      Pr(>|t|)
(Intercept)    0.50116288 0.002897402 172.96973  0.000000e+00
log(x/(1 - x)) 0.05446613 0.002045560  26.62652 6.846189e-124

当预测的对数赔率为零时,我们预计获胜概率约为 50%。高出对数,预期高出 5%。如上面第二张图所示,对数赔率在任一方向上都不会超过 5。所以所有的预测值y被限制在大约 25% 和 75% 之间。回归效果足够清晰,并且样本量足够大,我相信该推论总体上不会产生误导。总是有更好的精度的替代品。

我们还可以了解拟合线的误差。

sigma(fit.lm)
[1] 0.09958555

给定一个预测,大约 95% 的值应该在大约±20%. 添加到最小和最大预测值时的间隔y也在界限之内。

线性方法的理由是它的简单性和在这个特定应用中的充分性。