我想对赛狗比赛进行逻辑回归。对于每场比赛,我都有一个虚拟变量 (y),当狗获胜时取值为 1,否则取值为 0。
不幸的是,每场比赛的猎犬数量可能会有所不同,因为有些出于某种原因而被撤回。目前,我通过垂直连接来汇集数据,以创建一个巨大的列或比赛结果,并为每个自变量创建一个大列。
- 这是为此类问题汇集数据的正确方法吗?
- 数据最初来自不同的比赛,通常有不同数量的狗跑,这有什么问题吗?
我想对赛狗比赛进行逻辑回归。对于每场比赛,我都有一个虚拟变量 (y),当狗获胜时取值为 1,否则取值为 0。
不幸的是,每场比赛的猎犬数量可能会有所不同,因为有些出于某种原因而被撤回。目前,我通过垂直连接来汇集数据,以创建一个巨大的列或比赛结果,并为每个自变量创建一个大列。
这都是走错路了。首先,请注意,“赢家”没有有意义的本体论状态。
当您拥有的只是一组面对面比较的结果(例如,基于赛季比赛结果的运动队)时,如何确定某件事的质量是一个非常棘手的问题。在最简单的情况下,可以使用Bradley-Terry 模型来预测单位的概率将击败单位. 也可以使用贝叶斯网络分析。
Bradley-Terry 模型在您的案例中不太适用,但您的案例实际上要简单得多:您可能已经直接掌握了每只狗作为赛跑犬的质量数据。具体来说,你应该知道每只狗的比赛时间。 更好的赛狗只是更快的狗。 如果您想确定哪些变量与赛狗的能力相关,您需要对比赛时间进行建模。如果您想对现有狗进行排名,您可以拟合贝叶斯模型或混合效应模型并查看 BLUP。如果您想估计狗 A 赢得给定比赛的概率(例如,为了记账目的),您可以对比赛中的每只狗进行拟合的比赛时间分布并模拟以生成狗 A 的跑步比例最低的时间。
更新:
我现在从您的评论中了解您的情况,我认为您想确定过去(通过任何方法)给出的赔率是否合理,因为您现在知道一只狗是否真的赢得了比赛。这与我认为您在问题正文中所问的情况不同。在这里,您不是在尝试构建任何类型的模型,您只是在尝试评估起始赔率的校准。
首先,请注意博彩公司(例如,赛道)提供/列出的赔率并不是他们认为公平的赔率。他们必须加减薪才能谋生(参见,赔率变得简单)。因此,您需要删除它以获得被认为是公平的实际赔率。
一旦你有了这些数字,最简单的检查是它们应该暗示其中一只列出的狗有 100% 的机会获胜。例如,如果只有两只狗,其中一只的估计获胜几率为 1 比 3,那么另一只狗的几率应该是 3 比 1;如果它是 10 比 1,则不会加起来。
要回答你的具体问题,如果赔率加起来,你不需要考虑比赛中狗的数量,因为提供的赔率应该考虑到这一点,如果没有,那就是你想要的去探索。
此时,您可以通过计算Somer's D来评估赔率的判别性能,它在信息上等同于接收器操作特征曲线 ( AUC ) 下的面积。
最后,您可以将公平赔率转换为获胜赔率的对数,并将它们用作逻辑回归模型中的单个预测变量。该模型的截距和斜率应该是和,如果几率没有偏差。
这是构造数据的好方法,是的。您的恐惧来自于您的数据采用多级结构:狗嵌套在种族中。您可以通过进行多级建模来测试您是否“需要”考虑这种多级结构。您可以指定一个在比赛级别(级别 2)具有随机截距的模型和一个没有此随机截距的模型。然后,您可以比较这两个模型,以查看随机截距的添加是否占结果方差的很大一部分。
R 中的 lme4 包是我运行多级模型的首选,它通过使用 glmer() 函数和 family= 参数来处理逻辑回归,指定二项式。
我不太明白这里的“池”是什么意思。您所描述的内容肯定会使您的数据采用一种易于在 R 或 Python 中使用的格式(尽管将其放入 data.frame 对象中更简洁)。
事实上,不同数量的狗比赛可能不会成为问题。一个问题是每只狗对其竞争对手的依赖。狗不会在真空中比赛。每只狗都会影响其他狗的获胜概率。你的模型会告诉你什么狗的特征构成了一只获胜的狗,但不会考虑依赖性......这可能会严重混淆你的结果。