Làm cách nào để đánh giá mức độ phù hợp của GLMM nhị thức được trang bị lme4 (> 1.0)?


19

Tôi có một GLMM với phân phối nhị thức và chức năng liên kết logit và tôi có cảm giác rằng một khía cạnh quan trọng của dữ liệu không được thể hiện tốt trong mô hình.

Để kiểm tra điều này, tôi muốn biết liệu dữ liệu có được mô tả tốt bởi một hàm tuyến tính trên thang đo logit hay không. Do đó, tôi muốn biết liệu những người còn lại có cư xử tốt hay không. Tuy nhiên, tôi không thể tìm ra phần dư âm mưu nào và cách diễn giải cốt truyện.

Lưu ý rằng tôi đang sử dụng phiên bản mới của lme4 ( phiên bản phát triển từ GitHub ):

packageVersion("lme4")
## [1] ‘1.1.0’

Câu hỏi của tôi là: Làm thế nào để tôi kiểm tra và giải thích các phần dư của một mô hình hỗn hợp tuyến tính tổng quát nhị thức với hàm liên kết logit?

Dữ liệu sau chỉ chiếm 17% dữ liệu thực của tôi, nhưng việc lấy dữ liệu đã mất khoảng 30 giây trên máy của tôi, vì vậy tôi để nó như thế này:

require(lme4)
options(contrasts=c('contr.sum', 'contr.poly'))

dat <- read.table("http://pastebin.com/raw.php?i=vRy66Bif")
dat$V1 <- factor(dat$V1)

m1 <- glmer(true ~ distance*(consequent+direction+dist)^2 + (direction+dist|V1), dat, family = binomial)

Cốt truyện đơn giản nhất ( ?plot.merMod) tạo ra các mục sau:

plot(m1)

nhập mô tả hình ảnh ở đây

Điều này đã cho tôi biết một cái gì đó?


1
Tôi có thể tìm thấy thời gian để quay lại và giải quyết vấn đề này, nhưng tôi nghĩ câu trả lời chung là khó có thể làm được gì nhiều với phần dư từ các mô hình nhị phân. Phát hiện chính của tôi cho đến nay từ phóng to ở trên một chút về cốt truyện bạn có ở trên, và thêm một dòng mịn (sử dụng type=c("p","smooth")trong plot.merMod, hoặc di chuyển đến ggplotnếu bạn muốn khoảng tin cậy) là nó trông giống như có một mô hình nhỏ nhưng đầy ý nghĩa, mà bạn có thể khắc phục bằng cách áp dụng một chức năng liên kết khác. Đó là cho đến nay ...
Ben Bolker

@BenBolker Cảm ơn. Và bạn có thể không chỉ đăng bài này và liên kết đến freakonomics như một câu trả lời cho câu hỏi? Sau đó, ít nhất bạn sẽ nhận được 150 điểm.
Henrik

3
Tôi tìm thấy chủ đề CV này, stats.stackexchange.com/questions/63566/ , sẽ rất hữu ích. Bài đăng giải thích cách tạo ra một âm mưu còn sót lại trong R.
Nova

@Henrik Bạn vui lòng giải thích cho tôi mô hình true ~ distance*(consequent+direction+dist)^2 + (direction+dist|V1)hoạt động như thế nào? Liệu mô hình Cung cấp cho ước tính tương tác giữa distance*consequent, distance*direction, distance*distvà độ dốc của directiondist thay đổi theo V1? Hình vuông trong (consequent+direction+dist)^2biểu thị là gì?
ABC

@Henrik Tôi đã chạy mã của bạn và nó hiển thị Warning message: In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, : Model failed to converge with max|grad| = 0.123941 (tol = 0.001, component 1). Tại sao ?
ABC

Câu trả lời:


18

Câu trả lời ngắn vì tôi không có thời gian để tốt hơn: đây là một vấn đề đầy thách thức; dữ liệu nhị phân hầu như luôn luôn đòi hỏi một số loại binning hoặc làm mịn để đánh giá mức độ phù hợp. Việc sử dụng fortify.lmerMod(từ lme4, thử nghiệm) kết hợp với ggplot2và đặc biệt là geom_smooth()để vẽ về cơ bản cùng một cốt truyện được trang bị so với bạn có ở trên, nhưng với khoảng tin cậy (tôi cũng đã thu hẹp giới hạn y một chút để phóng to ( -5,5) khu vực). Điều đó cho thấy một số biến thể có hệ thống có thể được cải thiện bằng cách điều chỉnh chức năng liên kết. (Tôi cũng đã thử vẽ các phần dư so với các dự đoán khác, nhưng nó không quá hữu ích.)

Tôi đã thử điều chỉnh mô hình với tất cả các tương tác 3 chiều, nhưng nó không cải thiện nhiều về độ lệch hoặc hình dạng của đường cong còn lại được làm mịn.

Sau đó, tôi đã sử dụng một chút sức mạnh vũ phu này để thử các hàm liên kết nghịch đảo có dạng , cho trong khoảng từ 0,5 đến 2,0:(hậu cần(x))λλ

## uses (fragile) internal C calls for speed; could use plogis(),
##  qlogis() for readability and stability instead
logitpower <- function(lambda) {
    L <- list(linkfun=function(mu)
              .Call(stats:::C_logit_link,mu^(1/lambda),PACKAGE="stats"),
              linkinv=function(eta)
              .Call(stats:::C_logit_linkinv,eta,PACKAGE="stats")^lambda,
              mu.eta=function(eta) {
                  mu <-  .Call(stats:::C_logit_linkinv,eta,PACKAGE="stats")
                  mu.eta <-  .Call(stats:::C_logit_mu_eta,eta,PACKAGE="stats")
                  lambda*mu^(lambda-1)*mu.eta
              },
              valideta = function(eta) TRUE ,
              name=paste0("logit-power(",lambda,")"))
    class(L) <- "link-glm"
    L
}

Tôi thấy rằng một 0,75 tốt hơn một chút so với mô hình ban đầu, mặc dù không đáng kể - tôi có thể đã diễn giải quá mức dữ liệu.λ

Xem thêm: http://freakonometrics.hypuitses.org/8210


3

Đây là chủ đề rất phổ biến về các khóa học thống kê sinh học / dịch tễ học, và không có giải pháp nào tốt cho nó, về cơ bản là do bản chất của mô hình. Thường thì giải pháp là tránh chẩn đoán chi tiết bằng cách sử dụng phần dư.

Ben đã viết rằng chẩn đoán thường yêu cầu hoặc làm mịn hoặc làm mịn. Binning của phần dư là (hoặc đã) có sẵn trong nhánh gói R, xem ví dụ, chuỗi này . Ngoài ra, có một số công việc được thực hiện sử dụng xác suất dự đoán; một khả năng là âm mưu phân tách đã được thảo luận trước đó trong chủ đề này . Những người có thể hoặc có thể không trực tiếp giúp đỡ trong trường hợp của bạn, nhưng có thể giúp giải thích.


-1

Bạn có thể sử dụng AIC thay vì các lô dư để kiểm tra sự phù hợp của mô hình. Lệnh trong R: AIC (model1) nó sẽ cung cấp cho bạn một số ... vì vậy sau đó bạn cần so sánh nó với một mô hình khác (ví dụ như có nhiều dự đoán hơn) - AIC (model2), sẽ mang lại một số khác. So sánh hai đầu ra và bạn sẽ muốn mô hình có giá trị AIC thấp hơn.

Nhân tiện, những thứ như AIC và tỷ lệ khả năng đăng nhập đã được liệt kê khi bạn có được bản tóm tắt về mô hình glmer của mình và cả hai sẽ cung cấp cho bạn thông tin hữu ích về sự phù hợp của mô hình. Bạn muốn một số âm lớn cho tỷ lệ khả năng đăng nhập để từ chối giả thuyết null.


3
Điều này sẽ hữu ích hơn nếu OP cố gắng so sánh các mô hình cạnh tranh, nhưng có vẻ như đó không phải là điều họ đang cố gắng và AIC không thể được sử dụng để đánh giá sự phù hợp của mô hình tuyệt đối.
Patrick Coulombe

-3

Biểu đồ được trang bị so với phần dư không được hiển thị bất kỳ mẫu (rõ ràng) nào. Biểu đồ cho thấy mô hình không hoạt động tốt với dữ liệu. Xem http://www.r-bloggers.com/model-validation-interpreting-residual-plots/


1
Tôi nghĩ bạn đã sai, một mẫu nhất định được dự đoán bởi chức năng liên kết: stats.stackexchange.com/q/25068/442
Henrik

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.