data.table 内でいくつかの glm を実行して、主要な要因で分割されたモデル化された結果を生成しようとしています。
私はこれをうまくやっています:
ハイレベルGLM
glm(modellingDF,formula=Outcome~IntCol + DecCol,family=binomial(link=logit))
単一列のスコープ付き glm
modellingDF[,list(結果, 適合=glm(x,式=結果~IntCol ,家族=二項(リンク=ロジット))$適合), by=変数]
2 つの整数列を持つスコープ付き glm
modellingDF[,list(結果, 適合=glm(x,式=結果~IntCol + IntCol2 ,family=binomial(リンク=ロジット))$適合), by=変数]
しかし、小数列を使用してスコープ内で高レベルの glm を実行しようとすると、このエラーが発生します
Error in model.frame.default(formula = Outcome ~ IntCol + DecCol, data = x,  : 
  variable lengths differ (found for 'DecCol')
おそらくパーティションの長さが可変であることが原因だと思ったので、再現可能な例でテストしました。
library("data.table")
testing<-data.table(letters=sample(rep(LETTERS,5000),5000),
                    letters2=sample(rep(LETTERS[1:5],10000),5000), 
                    cont.var=rnorm(5000),
                    cont.var2=round(rnorm(5000)*1000,0),
                    outcome=rbinom(5000,1,0.8)
                    ,key="letters")
testing.glm<-testing[,list(outcome,
                  fitted=glm(x,formula=outcome~cont.var+cont.var2,family=binomial(link=logit))$fitted)
        ),by=list(letters)]
しかし、これにはエラーがありませんでした。おそらくNAか何かが原因だと思いましたが、data.table modellingDFの要約には、問題があるはずであるという兆候はありません。
DecCol
Min.   :0.0416
1st Qu.:0.6122
Median :0.7220
Mean   :0.6794
3rd Qu.:0.7840
Max.   :0.9495
nrow(modellingDF[is.na(DecCol),])   # results in 0
modellingDF[,list(len=.N,DecCollen=length(DecCol),IntCollen=length
(IntCol ),Outcomelen=length(Outcome)),by=Bracket]
  Bracket  len DecCollen IntCollen Outcomelen
1:     3-6 39184  39184       39184      39184
2:     1-2 19909  19909       19909      19909
3:       0  9912   9912        9912       9912
おそらく私は居眠りをしているかもしれませんが、この問題をさらに掘り下げるための解決策または手段を誰か提案できますか?