R语言BradleyTerry2包拟合BT模型缺失1个球员系数问题求解
BradleyTerry2模型缺失1名选手系数的原因
这是Bradley-Terry模型的正常设定,不是代码或数据错误:
- Bradley-Terry模型估计的是选手的相对能力值,为了保证参数可识别,必须固定1名选手的能力系数为0作为参照基准,这名基准选手的系数不会出现在默认返回的系数列表中,你看到的其他22个系数均为相对于该基准选手的能力对数值。
- 不同代码写法下缺失的选手不同,是因为不同输入格式下选手因子的排序发生了变化,函数默认选择因子水平排序第一位的选手作为参照组,参照组变化就会导致缺失的选手ID变化。
如果你需要获取全部23名选手的能力值,直接调用BradleyTerry2包内置的BTabilities()函数即可,该函数会自动补全参照组的0值和对应标准误:
# 替换为你自己拟合的模型对象名 full_abilities <- BTabilities(bt_model)
异常情况排查
如果调用上述函数后仍未找到对应选手的记录,可排查是否为数据问题:
- 检查缺失选手是否为对战网络孤立节点:即该选手从未和其他22名选手中的任何一人有过对阵
- 检查缺失选手是否没有有效胜负记录:即该选手所有对局胜场、负场均为0
你可以用以下代码快速统计目标选手的总胜负:
# 替换为缺失选手的ID target_player <- "a12TTT.pdf" # 总胜场 total_win <- sum(prep$win1[prep$player1 == target_player]) + sum(prep$win2[prep$player2 == target_player]) # 总负场 total_lose <- sum(prep$win2[prep$player1 == target_player]) + sum(prep$win1[prep$player2 == target_player])
如果总胜场和总负场均为0,说明该选手无有效对战数据,无法估计能力值,需要补充对战记录。
内容的提问来源于stack exchange,提问作者Vasile
相关产品推荐
相关产品推荐

