ทำไม Glmer ไม่ได้รับโอกาสสูงสุด (ตรวจสอบโดยใช้การเพิ่มประสิทธิภาพทั่วไปเพิ่มเติม)


37

ตัวเลขที่ได้จากMLE s ของGLMMนั้นยากและในทางปฏิบัติฉันรู้ว่าเราไม่ควรใช้การเพิ่มประสิทธิภาพกำลังดุร้าย (เช่นใช้optimในวิธีที่ง่าย) แต่เพื่อจุดประสงค์ทางการศึกษาของฉันฉันต้องการลองเพื่อให้แน่ใจว่าฉันเข้าใจโมเดลอย่างถูกต้อง (ดูรหัสด้านล่าง) ฉันพบว่าฉันได้รับผลลัพธ์ที่ไม่สอดคล้องกันglmer()เสมอ

โดยเฉพาะอย่างยิ่งแม้ว่าฉันจะใช้ MLEs glmerเป็นค่าเริ่มต้นตามฟังก์ชั่นความน่าจะเป็นที่ฉันเขียน ( negloglik) พวกเขาไม่ใช่ MLEs ( opt1$valueเล็กกว่าopt2) ฉันคิดว่าสองเหตุผลที่เป็นไปได้คือ:

  1. negloglik เขียนได้ไม่ดีเพื่อให้มีข้อผิดพลาดทางตัวเลขมากเกินไปและ
  2. ข้อมูลจำเพาะรุ่นไม่ถูกต้อง สำหรับสเปคโมเดลรุ่นที่ต้องการคือ:

L=i=1n(f(yi|N,a,b,ri)g(ri|s)dri)
โดยที่คือทวินามทวินามและเป็นไฟล์ PDF ปกติ ฉันพยายามที่จะประเมิน,และsโดยเฉพาะอย่างยิ่งฉันต้องการทราบว่าสเปคโมเดลผิดหรือไม่สเปคที่ถูกต้องคืออะไร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 

MLEs (ไม่ใช่ความเป็นไปได้ในการบันทึก) คืออะไร นั่นคือคุณเพิ่งออกค่าคงที่หรือไม่?
Ben Bolker

MLEs โดยประมาณนั้นมีความแตกต่างอย่างชัดเจน ( MLE.glmerและMLE.optim) โดยเฉพาะอย่างยิ่งสำหรับเอฟเฟกต์แบบสุ่ม (ดูตัวอย่างใหม่) ดังนั้นจึงไม่ได้ขึ้นอยู่กับปัจจัยคงที่ในค่าความน่าจะเป็นเท่านั้น
เล่นลิ้น

4
@ Ben การตั้งค่าที่มีมูลค่าสูงของnAGQในglmerการทำ MLEs เทียบเคียง ความแม่นยำเริ่มต้นของglmerไม่ดีมาก
เล่นลิ้น

5
การลิงก์ไปยังคำถาม lme4 ที่คล้ายกันที่ @Sveve Walker ช่วยฉันด้วย: stats.stackexchange.com/questions/77313/…
Ben Ogorek

3
ในฐานะที่เป็นคำถามที่เก่ากว่าที่มีจำนวนมากของ upvotes นี้อาจเป็นคุณปู่ ฉันไม่เห็นความต้องการที่จะปิดตัวลง
gung - Reinstate Monica

คำตอบ:


3

การตั้งค่าที่มีค่าสูงของnAGQการglmerโทรทำให้ MLEs จากทั้งสองวิธีเทียบเท่ากัน ความแม่นยำเริ่มต้นของglmerไม่ดีมาก สิ่งนี้จะตัดสินปัญหา

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

ดูคำตอบ @ SteveWalker ของที่นี่ทำไมฉันไม่สามารถจับคู่เอาต์พุต glmer (family = binomial) กับการใช้อัลกอริทึม Gauss-Newton ด้วยตนเอง? สำหรับรายละเอียดเพิ่มเติม


1
แต่ค่าประมาณของ loglikelihoods นั้นแตกต่างกันมาก (น่าจะเป็นโดยค่าคงที่บางอย่าง) ดังนั้นวิธีที่แตกต่างไม่ควรผสมกัน
เล่นลิ้น

อืมน่าสนใจ / น่าประหลาดใจ - ขอบคุณสำหรับการตั้งค่าตัวอย่างนี้ฉันจะลองหาเวลาดู
Ben Bolker
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.