首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模型拟合例程不能在函数中运行。

模型拟合例程不能在函数中运行。
EN

Stack Overflow用户
提问于 2013-02-16 14:46:03
回答 1查看 980关注 0票数 1

我正在使用Firth和Turner的BradleyTerry2包进行配对比较,但是使用主要的拟合函数BTm遇到了一个神秘的问题。下面是他们自己的示例中的最小数据设置:

代码语言:javascript
复制
data(citations, package = "BradleyTerry2")
citations.sf <- countsToBinomial(citations)
names(citations.sf)[1:2] <- c("journal1", "journal2")

因此,在控制台上,可以完成以下工作:

代码语言:javascript
复制
citeModel <- BTm(cbind(win1, win2), journal1, journal2, data = citations.sf)

但以下内容不起作用

代码语言:javascript
复制
f1 <- function(x){ BTm(cbind(win1, win2), journal1, journal2, data=x) }
f1(citations.sf)

虽然这个(统计上没有意义的,但)结构相似的线性模型例子确实有效,正如我所预期的那样:

代码语言:javascript
复制
f2 <- function(x){ lm(log(win1/win2) ~ journal1, data=x) }
f2(citations.sf)

使用f1的错误是“eval中的error (替换(Expr),data,expr=parent.frame():无效的'envir‘参数”。但这并没有告诉我任何我能理解的东西。

有什么想法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-18 12:27:53

感谢您链接到现有错误报告[#2294]在全局环境中未调用BTm时找不到对象上的这篇文章。

在内部设置数据时,BTm在公式的环境中查找对象,然后在全局环境中查找对象。如果没有将公式指定为BTm,则公式是在内部定义的,并且按照当前的实现,继承了调用BTm时构造的环境,而不是调用BTm的环境。

在我着手解决这个问题之前,有一个简单的工作--在函数中使用BTm时总是指定一个公式,这样公式的环境就是在调用函数时创建的。例如。

代码语言:javascript
复制
> 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 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14911525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档