저는 혼합 모델에 대해 변수 선택을 수행하기 위해 glmmLasso를 사용하려고 시도했지만 모델이 작동하지 않는 것처럼 보입니다. 비슷한 모델로 데모를 설정했습니다. here. 나는 BIC를 사용하여 람다를 선택하는 간단한 방법을 사용하고 있습니다.glmmLasso 모든 람다에 대한 try-error
이것은 내가 실행 해본 코드입니다.
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의 수가 변수의 수라고 가정하고있다. 만약 factor의 수보다 1을 더하면 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는 약 7,500 개의 레벨을 가지고 있습니다.
아쉽게도 재현성있는 데이터를 포함 할 수 없습니다. 나는 다른 누군가가 과거에이 문제를 뛰어 넘어 무엇이 진행되고 있는지 알기를 희망하고있다. 나는 또한이 문제가있는 몇 가지 데이터를 생성하려고합니다.
편집
가 제어 start=Delta.start
함께 할 수있는 뭔가가처럼 지금 보인다. 모델을 제거하면 맞는 것입니다. 델타에 대해 정확히 무엇이 확실하지 않습니다. 스타트가이 휴식을 취하고 있습니다.