2016-08-05 9 views
0

MASSパッケージを使用してglm.nbオブジェクトを構築するのに問題があります(通常のGLMでも同じ問題があります)。式中の応答および大部分の予測子は、data.dailyの列ですが、cbdlnmパッケージを使用して計算されたクロスバスオブジェクトです。データフレームが指定されているときに、データフレームの外部のGLMプレディクタが見つかりません

glm()の私の理解は、式成分は最初式であることが環境にその後dataで指定されたオブジェクトのコンテキスト内で検索され、ということである。式(glm.formula)とcbは、同じ環境にありますglm()cbが見つからないと報告しています。何が起きてる?

Browse[1]> glm.obj = glm.nb(glm.formula, data = data.daily) 
Error during wrapup: object 'cb' not found 

Browse[1]> environment(glm.formula) 
NULL 

Browse[1]> environment(cb) 
NULL 

Browse[1]> glm.formula 
[1] "count_admitted ~ offset(log(pop)) + nowork + cb" 

Browse[1]> ls() 
[1] "cb"   "data.daily" "glm.formula" "glm.list" "pred.list" 

私は考えることができる唯一のことは、私はループが始まる前にcbが計算されるのに対し、ループ内からglm.nb()を呼んでいるが、Rに範囲を理解し、私は中括弧は、新しいを作成しないということであるということですスコープ専用の関数。

+0

'data.daily'に' cb'を列として追加できない理由はありますか? –

+0

私はベクトルだけを列として添付できると仮定しましたが、そうでないことが判明しました:) – rensa

答えて

1

data.framesの外部ベクトルを同じモデル内のデータとして指定することはできません。試してください:

glm.nb(glm.formula, data = cbind(cb = cb, data.daily)) 

これは、列をdata.frameに付加します。

+0

[dlnm vignette](https://cran.r-project。 org/web/packages/dlnm/vignettes/dlnmOverview.pdf)は、このようにすることができることを示唆しています:/ cbはベクトルではないので、データフレームに取り付けることはできません。私の現在の回避策は、データフレームの列を現在の環境にコピーすることですが、何千ものモデルが適合するようにするには、あまり魅力的ではありません:( – rensa

+0

私の悪い - crossbasisは私の時系列と同じ長さの行列です。 – rensa

+0

私はこの回答を確認するために走り終わるまで待つつもりですが、私は厄介なバグを紹介していないことを確認していますが、ありがとうございます。D – rensa

関連する問題