글 머가 최대 가능성을 얻지 못하는 이유는 무엇입니까 (추가적인 일반 최적화를 적용하여 확인)?


37

수치 유도 MLE 의의 GLMM가 실제로 어렵고, 나는 알고있다, 우리는 (사용, 예를 들면 무력 최적화를 사용하지 않아야 optim하는 간단한 방식으로). 그러나 내 교육 목적으로 모델을 올바르게 이해하기 위해 노력하고 싶습니다 (아래 코드 참조). 나는에서 일관되지 않은 결과를 얻는다는 것을 알았습니다 glmer().

특히, glmer내가 작성한 가능성 함수에 따라 MLE을 초기 값으로 사용하더라도 MLE negloglik이 아닙니다 ( opt1$value보다 작음 opt2). 두 가지 잠재적 이유는 다음과 같습니다.

  1. negloglik 수치 오류가 너무 많도록 잘 작성되지 않았습니다.
  2. 모델 사양이 잘못되었습니다. 모델 사양의 경우 의도 된 모델은 다음과 같습니다.

L=i=1n(f(yi|N,a,b,ri)g(ri|s)dri)
여기서 는 이항 pmf이고 는 정규 pdf입니다. , 및 를 추정하려고합니다 . 특히, 모델 사양이 잘못된 지, 올바른 사양인지 알고 싶습니다.fgabs
p <- function(x,a,b) exp(a+b*x)/(1+exp(a+b*x))

a <- -4  # fixed effect (intercept)
b <- 1   # fixed effect (slope)
s <- 1.5 # random effect (intercept)
N <- 8
x <- rep(2:6, each=20)
n <- length(x) 
id <- 1:n
r  <- rnorm(n, 0, s) 
y  <- rbinom(n, N, prob=p(x,a+r,b))


negloglik <- function(p, x, y, N){
  a <- p[1]
  b <- p[2]
  s <- p[3]

  Q <- 100  # Inf does not work well
  L_i <- function(r,x,y){
    dbinom(y, size=N, prob=p(x, a+r, b))*dnorm(r, 0, s)
  }

  -sum(log(apply(cbind(y,x), 1, function(x){ 
    integrate(L_i,lower=-Q,upper=Q,x=x[2],y=x[1],rel.tol=1e-14)$value
  })))
}

library(lme4)
(model <- glmer(cbind(y,N-y)~x+(1|id),family=binomial))

opt0 <- optim(c(fixef(model), sqrt(VarCorr(model)$id[1])), negloglik, 
                x=x, y=y, N=N, control=list(reltol=1e-50,maxit=10000)) 
opt1 <- negloglik(c(fixef(model), sqrt(VarCorr(model)$id[1])), x=x, y=y, N=N)
opt0$value  # negative loglikelihood from optim
opt1        # negative loglikelihood using glmer generated parameters
-logLik(model)==opt1 # but these are substantially different...

더 간단한 예

큰 숫자 오류가 발생할 가능성을 줄이기 위해 더 간단한 예를 만들었습니다.

y  <- c(0, 3)
N  <- c(8, 8)
id <- 1:length(y)

negloglik <- function(p, y, N){
  a <- p[1]
  s <- p[2]
  Q <- 100  # Inf does not work well
  L_i <- function(r,y){
    dbinom(y, size=N, prob=exp(a+r)/(1+exp(a+r)))*dnorm(r,0,s)
  }
  -sum(log(sapply(y, function(x){
    integrate(L_i,lower=-Q, upper=Q, y=x, rel.tol=1e-14)$value
  })))
}

library(lme4)
(model <- glmer(cbind(y,N-y)~1+(1|id), family=binomial))
MLE.glmer <- c(fixef(model), sqrt(VarCorr(model)$id[1]))
opt0 <- optim(MLE.glmer, negloglik, y=y, N=N, control=list(reltol=1e-50,maxit=10000)) 
MLE.optim <- opt0$par
MLE.glmer # MLEs from glmer
MLE.optim # MLEs from optim

L_i <- function(r,y,N,a,s) dbinom(y,size=N,prob=exp(a+r)/(1+exp(a+r)))*dnorm(r,0,s)

L1 <- integrate(L_i,lower=-100, upper=100, y=y[1], N=N[1], a=MLE.glmer[1], 
                s=MLE.glmer[2], rel.tol=1e-10)$value
L2 <- integrate(L_i, lower=-100, upper=100, y=y[2], N=N[2], a=MLE.glmer[1], 
                s=MLE.glmer[2], rel.tol=1e-10)$value

(log(L1)+log(L2)) # loglikelihood (manual computation)
logLik(model)     # loglikelihood from glmer 

MLE (로그 가능성 자체가 아님)이 비슷한가? 즉, 당신은 상수에 의해 그냥 떨어져 있습니까?
Ben Bolker

추정 된 MLE은 특히 임의 효과 (새로운 예 참조)에 대해 명확하게 다르며 ( MLE.glmerMLE.optim) 다르기 때문에 가능성 값의 일정한 요인에 기초한 것이 아니라고 생각합니다.
quibble

4
@Ben nAGQin을 높게 설정 glmer하면 MLE을 비교할 수 있습니다. 기본 정밀도는 glmer그리 좋지 않았습니다.
quibble

5
@Steve Walker가 나를 도와 준 비슷한 lme4 질문에 연결 : stats.stackexchange.com/questions/77313/…
Ben Ogorek

3
많은 공감대가있는 오래된 질문으로 아마도 할아버지가 될 수 있습니다. 나는 이것을 닫을 필요가 없다.
gung-Monica Monica 복원

답변:


3

호출 nAGQ에서 높은 값을 설정 glmer하면 두 방법의 MLE이 동일 해졌습니다. 기본 정밀도는 glmer그리 좋지 않았습니다. 이것은 문제를 해결합니다.

glmer(cbind(y,N-y)~1+(1|id),family=binomial,nAGQ=20)

@SteveWalker의 답변은 여기를 참조하십시오. 왜 glmer (family = binomial) 출력을 Gauss-Newton 알고리즘의 수동 구현과 일치시킬 수 없습니까? 상세 사항은.


1
그러나 추정 로그 가능성은 매우 다르며 (아마도 일부 상수에 의해) 다른 방법을 혼합해서는 안됩니다.
quibble

흠, 흥미롭고 놀랍습니다.이 예제를 설정해 주셔서 감사합니다.
벤 볼커
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.