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
おそらく私は居眠りをしているかもしれませんが、この問題をさらに掘り下げるための解決策または手段を誰か提案できますか?