我试图输出布拉德利特里模型的能力估计,使用R中的BradleyTerry2软件包,我一直得到一个非常神秘的错误。一些示例来自文档工作,而另一些则返回我使用数据获得的相同错误。此代码使用文档中的一个示例分析。因此,如果加载库,“变色龙”数据就应该已经存在了。
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有人知道怎么做吗?
发布于 2015-05-15 09:32:55
我维护BradleyTerry2。这是一个错误,当您在能力公式中有一个特定于竞赛的预测器时。它应该像?BTabilities中所记录的那样工作。
..。能力是根据只涉及玩家协变量的拟合模型的条件计算的(模型公式中的“模型$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))https://stackoverflow.com/questions/30253178
复制相似问题