1

一対比較に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(substitute(expr)、data、enclos = parent.frame())のエラー:無効な'envir'引数」です。しかし、これは私が理解できることを何も教えてくれません。

考え?

4

1 に答える 1

2

BTmがグローバル環境で呼び出されていないときにオブジェクトが見つからない既存のバグレポート[#2294]のこの投稿にリンクしていただきありがとうございます。

データを内部で設定する場合、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 
于 2013-02-18T12:27:53.257 に答える