【问题标题】:Calculate BradleyTerry Ability rankings计算 BradleyTerry 能力排名
【发布时间】:2015-05-15 06:46:03
【问题描述】:

我正在尝试使用 R 中的 BradleyTerry2 包从 Bradley Terry 模型输出能力估计值。我不断收到一个非常神秘的错误。他们文档中的一些示例和其他示例返回了我使用数据时遇到的相同错误。此代码使用文档中的示例分析之一。因此,如果您加载库,“变色龙”数据应该已经存在

install.packages("BradleyTerry2")
library (BradleyTerry2)
summary(chameleon.model <- BTm(player1 = winner, player2 = loser,formula = ~ prev.wins.2 + ch.res[ID] + prop.main[ID] + (1|ID), id = "ID",data = chameleons))
BTabilities(chameleon.model)

我得到的错误是

Error in X[, est, drop = FALSE] : (subscript) logical subscript too long

有人知道怎么做吗?

【问题讨论】:

  • class(chameleon.model) 给出[1] "BTm" "BTglmmPQL" "glm" "lm" ,而class(citeModel) 给出"BTm" "glm" "lm" 。 (“citeModel”用于?BTabilities)。也许BTabilities 无法处理BTglmmPQL
  • 有可能。 BTAbilities 的第一行是 if (!inherits(model, "BTm")) stop("model is not of class BTm") 所以他们想检查函数中的类...嗯...
  • 你可以联系包的维护者:maintainer("BradleyTerry2").
  • 好主意,试试看

标签: r bradleyterry2


【解决方案1】:

我维护BradleyTerry2。这是当您在能力公式中有特定于比赛的预测器时发生的错误。它应该按照?BTabilities 中的说明工作:

...能力是根据拟合项计算得出的 仅涉及玩家协变量的模型(那些由 模型公式中的“model$id”)。因此在任何其他参数 项假定为零。

我们不知道这不起作用,因此感谢您的错误报告。在修复之前,您可以直接计算能力和标准错误:

## get names of relevant coefficients
> nm <- grep("[ID]", names(coef(chameleon.model)),
>            fixed = TRUE, value = TRUE)
> nm
[1] "ch.res[ID]"    "prop.main[ID]"

## get names of corresponding predictors
> IDvar <- gsub("[ID]", "", nm, fixed = TRUE)
> IDvar
[1] "ch.res"    "prop.main"

## create coefficient vector and design matrix
> cf <- coef(chameleon.model)[nm]
> X <- as.matrix(chameleons$predictors[, IDvar])

## compute abilities
> abilities <- X %*% cf
> colnames(abilities) <- "abilities"

## compute standard errors
> V <- vcov(chameleon.model)[nm, nm]
> res <- cbind(abilities = abilities,
>               se = sqrt(diag(X %*% V %*% t(X))))
> head(res)
    abilities       se
C01  3.757229 1.655205
C02  2.404778 1.017782
C03  2.319346 1.133959
C04  1.892671 1.399391
C05  2.253472 1.101628
C06  2.015840 1.075806

这将为在预测变量中有缺失值的个人提供NA,但是他们的能力会单独建模并在模型摘要中返回。上面的代码还假设了连续的协变量,如果你的一些预测变量是因子,你需要更正式地创建一个模型矩阵,例如

X <- model.matrix(reformulate(IDvar, intercept = FALSE),
                  c(chameleons$predictors))

【讨论】:

  • 非常感谢您的及时答复!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-19
  • 2015-05-10
  • 1970-01-01
相关资源
最近更新 更多