You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Bradley-Terry模型分析网球赛事时遇因子水平不一致错误求助

解决Bradley-Terry模型中因子水平不一致的问题

核心解决方案:统一两个选手列的因子水平

你遇到的问题本质是player1和player2两个列的因子水平集合或顺序不匹配——哪怕所有选手都同时出现在两列里,单独用as.factor()转换时,R会分别为每列生成水平,可能导致顺序不同,触发BTm的校验错误。

直接按以下步骤操作:

  1. 清理字符串并提取所有唯一选手
    先处理可能存在的空格、大小写差异等隐形问题,再提取所有选手的唯一值作为共同因子水平:

    # 去掉姓名前后的空格
    matches$player1 <- trimws(matches$player1)
    matches$player2 <- trimws(matches$player2)
    # 统一姓名大小写(如果存在大小写不一致的情况)
    matches$player1 <- toupper(matches$player1)
    matches$player2 <- toupper(matches$player2)
    # 提取所有选手的唯一值
    all_players <- unique(c(matches$player1, matches$player2))
    
  2. 将两列统一转为带有共同水平的因子

    matches$player1 <- factor(matches$player1, levels = all_players)
    matches$player2 <- factor(matches$player2, levels = all_players)
    
  3. 重新运行模型

    library(BradleyTerry2)
    model <- BTm(cbind(wins1, wins2), player1, player2, data = matches)
    model
    

额外排查点

如果仍报错,检查是否存在以下情况:

  • 姓名中包含特殊字符(比如全角空格、下划线),需手动清理
  • 部分选手仅出现在player2列中(统一水平的操作已覆盖这种场景,但可以确认数据完整性)

内容的提问来源于stack exchange,提问作者Ollie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 11:31:00