私はglmmLassoを使用して混合モデルの変数選択をしようとしていましたが、モデルを動作させることができません。デモと同じように私のモデルをセットアップしました。hereです。私はラムダを選択するためにBICを使用する簡単な方法を使用しています。glmmLassoすべてのラムダの試行錯誤
これは私が実行しているコードです。
library(glmmLasso)
lambda <- seq(500,0,by=-5)
family = binomial(link = logit)
library(MASS);library(nlme)
PQL<-glmmPQL(y~1,random = ~1|ID,family=family,data=train)
Delta.start<-c(as.numeric(PQL$coef$fixed),rep(0,64),as.numeric(t(PQL$coef$random$ID)))
Q.start<-as.numeric(VarCorr(PQL)[1,1])
BIC_vec<-rep(Inf,length(lambda))
for(j in 1:length(lambda)){
print(paste("Iteration ", j,sep=""))
glm1 = try(glmmLasso(y ~ variable1 + ... + as.factor(factorVariable1), rnd = list(ID=~1),
family = family, data = train, lambda=lambda[j],switch.NR=T,final.re=TRUE,
control=list(start=Delta.start, q_start=Q.start)),silent = TRUE)
if(class(glm1) != "try-error"){
BIC_vec[j]<-glm1$bic
}
}
Delta.startがわかりません。私はデモをフォローしていましたが、私は、変数の数が0になっていると仮定しています。
このコードを実行すると、すべてのBICスコアはまだInf
でした。そしてglm1を見ると、私はこのエラーを見つけるでしょう。
[1] "Error in if (group.sum[1] == 0 & sqrt(sum(score.beta[1:block[1]]^2)) > : \n missing value where TRUE/FALSE needed\n"
attr(,"class")
[1] "try-error"
attr(,"condition")
<simpleError in if (group.sum[1] == 0 & sqrt(sum(score.beta[1:block[1]]^2)) > lambda_vec[1]) { grad.lasso[1:block[1]] <- score.beta[1:block[1]] - lambda_vec[1] * (score.beta[1:block[1]]/sqrt(sum(score.beta[1:block[1]]^2)))} else { grad.lasso[1:block[1]] <- 0}: missing value where TRUE/FALSE needed>
これを修正する方法はありますか?私はこれが問題を引き起こす可能性があるかどうかはわかりませんが、電車のデータセットでは、IDは約7500レベルです。
残念ながら、再現性のあるデータを含めることはできません。私は、他の誰かが過去にこの問題に遭遇し、何が起こっているかを知っていることを期待しています。私もこの問題があるいくつかのデータを生成しようとしています。
EDIT
それはコントロールにstart=Delta.start
とは何かを持っているようですが、今見えます。私はモデルが適合することを削除します。 Delta.startが何をしているのか、まだ分かりません。