我正在使用Firth和Turner的BradleyTerry2包进行配对比较,但是使用主要的拟合函数BTm遇到了一个神秘的问题。下面是他们自己的示例中的最小数据设置:
data(citations, package = "BradleyTerry2")
citations.sf <- countsToBinomial(citations)
names(citations.sf)[1:2] <- c("journal1", "journal2")因此,在控制台上,可以完成以下工作:
citeModel <- BTm(cbind(win1, win2), journal1, journal2, data = citations.sf)但以下内容不起作用
f1 <- function(x){ BTm(cbind(win1, win2), journal1, journal2, data=x) }
f1(citations.sf)虽然这个(统计上没有意义的,但)结构相似的线性模型例子确实有效,正如我所预期的那样:
f2 <- function(x){ lm(log(win1/win2) ~ journal1, data=x) }
f2(citations.sf)使用f1的错误是“eval中的error (替换(Expr),data,expr=parent.frame():无效的'envir‘参数”。但这并没有告诉我任何我能理解的东西。
有什么想法?
发布于 2013-02-18 12:27:53
感谢您链接到现有错误报告[#2294]在全局环境中未调用BTm时找不到对象上的这篇文章。
在内部设置数据时,BTm在公式的环境中查找对象,然后在全局环境中查找对象。如果没有将公式指定为BTm,则公式是在内部定义的,并且按照当前的实现,继承了调用BTm时构造的环境,而不是调用BTm的环境。
在我着手解决这个问题之前,有一个简单的工作--在函数中使用BTm时总是指定一个公式,这样公式的环境就是在调用函数时创建的。例如。
> f1 <- function(x){ BTm(cbind(win1, win2), journal1, journal2, ~.., data=x) }
> f1(citations.sf)
Bradley Terry model fit by glm.fit
Call: BTm(outcome = cbind(win1, win2), player1 = journal1, player2 = journal2,
formula = ~.., data = x)
Coefficients:
..Comm Statist ..JASA ..JRSS-B
-2.9491 -0.4796 0.2690
Degrees of Freedom: 6 Total (i.e. Null); 3 Residual
Null Deviance: 1925
Residual Deviance: 4.293 AIC: 46.39 https://stackoverflow.com/questions/14911525
复制相似问题