Giải quyết sự không đồng nhất trong Poisson GLMM


8

Tôi có dữ liệu thu thập dài hạn và tôi muốn kiểm tra xem liệu số lượng động vật được thu thập có bị ảnh hưởng bởi hiệu ứng thời tiết hay không. Mô hình của tôi trông như dưới đây:

glmer(SumOfCatch ~ I(pc.act.1^2) +I(pc.act.2^2) + I(pc.may.1^2) + I(pc.may.2^2) + 
                   SampSize + as.factor(samp.prog) + (1|year/month), 
      control=glmerControl(optimizer="bobyqa", optCtrl=list(maxfun=1e9,npt=5)), 
      family="poisson", data=a2)

Giải thích về các biến được sử dụng:

  • SumOfCatch: số lượng động vật được thu thập
  • pc.act.1, pc.act.2: trục của thành phần chính biểu thị điều kiện thời tiết trong quá trình lấy mẫu
  • pc.may.1, pc.may.2: trục của PC biểu thị điều kiện thời tiết trong tháng 5
  • SampSize: số lượng bẫy bẫy hoặc thu thập các đoạn có độ dài tiêu chuẩn
  • samp.prog: phương pháp lấy mẫu
  • năm: năm lấy mẫu (từ 1993 đến 2002)
  • tháng: tháng lấy mẫu (từ tháng 8 đến tháng 11)

Phần dư của mô hình được trang bị cho thấy độ không đồng nhất đáng kể (độ không đồng nhất?) Khi được vẽ với các giá trị được trang bị (xem Hình 1):

Giá trị dư so với giá trị được trang bị - Mô hình chính

Câu hỏi chính của tôi là: đây có phải là một vấn đề làm cho độ tin cậy của mô hình của tôi bị nghi ngờ không? Nếu vậy, tôi có thể làm gì để giải quyết nó?

Cho đến nay tôi đã thử các cách sau:

  • kiểm soát sự quá mức bằng cách xác định các hiệu ứng ngẫu nhiên ở cấp độ quan sát, nghĩa là sử dụng một ID duy nhất cho mỗi quan sát và áp dụng biến ID này làm hiệu ứng ngẫu nhiên; mặc dù dữ liệu của tôi cho thấy sự quá mức đáng kể, nhưng điều này không giúp ích gì khi phần còn lại càng trở nên xấu xí hơn (xem hình 2)

Giá trị dư so với giá trị được trang bị - Mô hình có kiểm soát OD

  • Tôi trang bị các mô hình mà không có hiệu ứng ngẫu nhiên, với quasi-Poisson glm và glm.nb; cũng mang lại các lô tương tự so với các lô được trang bị cho mô hình ban đầu

Theo như tôi biết, có thể có các cách để ước tính các lỗi tiêu chuẩn phù hợp không đồng nhất, nhưng tôi đã không tìm thấy bất kỳ phương pháp nào như vậy đối với các GLMM (hoặc bất kỳ loại GLMM nào khác) trong R.


Đáp lại @FlorianHartig: số lượng quan sát trong tập dữ liệu của tôi là N = 554, tôi nghĩ đây là một quan sát công bằng. số cho một mô hình như vậy, nhưng tất nhiên, càng nhiều càng tốt. Tôi đăng hai hình, đầu tiên là cốt truyện còn lại theo tỷ lệ DHARMa (được đề xuất bởi Florian) của mô hình chính.

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

Hình thứ hai là từ một mô hình thứ hai, trong đó sự khác biệt duy nhất là nó chứa hiệu ứng ngẫu nhiên ở mức độ quan sát (cái thứ nhất thì không).

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

CẬP NHẬT

Hình mối quan hệ giữa biến thời tiết (như dự đoán, tức là trục x) và thành công lấy mẫu (phản hồi):

Weather-PC và lấy mẫu thành công

CẬP NHẬT II.

Số liệu hiển thị giá trị dự đoán so với phần dư:

Dự đoán so với dư


Bạn đã xem xét việc chạy một công cụ ước tính không tham số? Hoặc so sánh một ols với một hồi quy trung vị? Tôi nhận ra rằng poisson là mô hình thống trị trong sinh học nhưng GLM không nhất quán dưới sự không đồng nhất và OLS thì không.
Superpronker

1
Đôi khi sự quá mức được gây ra bởi lạm phát bằng không. Trong trường hợp đó, bạn có thể thử mô hình poisson với tham số lạm phát bằng không hoặc mô hình vượt rào. Gói glmmADMB có các tính năng tuyệt vời để giải quyết vấn đề này: glmmadmb.r-forge.r-project.org/glmmADMB.html
Niek

Gửi @Superpronker, cảm ơn vì lời đề nghị, tôi đã không kiểm tra OLS, tôi không nhận ra rằng phương pháp này sẽ đủ linh hoạt để xử lý dữ liệu của tôi. Tôi sẽ xem xét nó
Z. Radai

Gửi @Niek trong dữ liệu của tôi, không có quan sát nào về số 0 - nếu không tôi đã nghĩ đến các mô hình zeroinfl và rào cản (trong gói 'pscl') do xử lý tốt quá mức của chúng, nhưng chúng chỉ có thể sử dụng được trên dữ liệu có số không trong phản hồi . Quay lại vài tháng trước tôi đã thử dùng glmmADMB, nhưng nó không mang lại kết quả tốt hơn. Chúc mừng, ZR
Z. Radai

1
@mdewey lý do đằng sau điều này, là mối quan hệ giữa hiệu ứng thời tiết và thành công lấy mẫu tuân theo mức tối ưu: xác suất và mức độ thành công lấy mẫu là cao nhất trong một phạm vi nhất định (trong trường hợp này là 0 và vùng lân cận) của người dự đoán. Khi giá trị của bộ dự đoán nằm xa mức tối ưu này, thành công lấy mẫu sẽ thấp hơn, tương ứng với mức tối ưu. Tôi sử dụng thuật ngữ bậc hai, bởi vì (1) các yếu tố dự đoán được định cỡ lại và được đặt lại ở mức 0 và (2) điều này mang lại sự gần đúng tốt hơn cho kết nối tuyến tính. Chúc mừng, ZR
Z. Radai

Câu trả lời:


9

Rất khó để đánh giá mức độ phù hợp của Poisson (hoặc bất kỳ GLM có giá trị nguyên nào khác đối với vấn đề đó) với phần dư Pearson hoặc sai lệch, bởi vì cũng là một Poisson GLMM phù hợp hoàn hảo sẽ thể hiện các phần dư sai lệch không đồng nhất.

Điều này đặc biệt như vậy nếu bạn thực hiện GLMM với RE mức độ quan sát, bởi vì sự phân tán được tạo bởi OL-RE không được xem xét bởi phần dư Pearson.

Để chứng minh vấn đề, đoạn mã sau tạo dữ liệu Poisson quá mức, sau đó được gắn với một mô hình hoàn hảo. Phần dư Pearson trông rất giống cốt truyện của bạn - do đó, có thể là không có vấn đề gì cả.

Vấn đề này được giải quyết bằng gói DHARMa R , mô phỏng từ mô hình được trang bị để biến đổi phần dư của bất kỳ GL (M) M nào thành không gian chuẩn. Một khi điều này được thực hiện, bạn có thể đánh giá / kiểm tra các vấn đề còn lại một cách trực quan, chẳng hạn như sai lệch so với phân phối, phụ thuộc dư vào một yếu tố dự đoán, không đồng nhất hoặc tự tương quan theo cách thông thường. Xem các họa tiết gói cho các ví dụ thông qua. Bạn có thể thấy trong cốt truyện thấp hơn, mô hình tương tự bây giờ trông ổn, như nó phải vậy.

Nếu bạn vẫn thấy sự không đồng nhất sau khi vẽ với DHARMa, bạn sẽ phải mô hình phân tán như là một chức năng của một cái gì đó, không phải là một vấn đề lớn, nhưng có thể sẽ yêu cầu bạn chuyển sang JAG hoặc phần mềm Bayesian khác.

library(DHARMa)
library(lme4)

testData = createData(sampleSize = 200, overdispersion = 1, randomEffectVariance = 1, family = poisson())

fittedModel <- glmer(observedResponse ~ Environment1 + (1|group) + (1|ID), family = "poisson", data = testData, control=glmerControl(optCtrl=list(maxfun=20000) ))

# standard Pearson residuals
plot(fittedModel, resid(., type = "pearson") ~ fitted(.) , abline = 0)

# DHARMa residuals
plot(simulateResiduals(fittedModel))

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

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


Kính gửi @FlorianHartig! Cảm ơn bạn đã hiểu biết của bạn, tôi đã cố gắng âm mưu với DHARMa. Dựa trên cốt truyện vẫn còn một cái gì đó, làm cho lượng tử thấp hơn có hình dạng như một đường cong đối ứng, thay vì một đường thẳng. Bạn đã đề cập rằng trong trường hợp này, một giải pháp có thể là mô hình phân tán như là một chức năng của một cái gì đó - Bạn có thể giúp chính xác làm thế nào tôi có thể đánh giá một chức năng như vậy? Chúc mừng, ZR
Z. Radai

Bạn có thể gửi cho tôi hoặc gửi cốt truyện? Một số thay đổi nhỏ được dự kiến ​​khi N của bạn nhỏ
Florian Hartig

Kính gửi @FlorianHartig câu hỏi đã được chỉnh sửa, bây giờ cũng hiển thị các lô DHARMa!
Z. Radai

@ Z.Radai - những gì tôi thấy trong các ô là phần dư của bạn quá cao một cách có hệ thống đối với các dự đoán mô hình thấp. Điều này trông giống như một vấn đề về cấu trúc mô hình (thiếu dự đoán?) Hơn là vấn đề phân phối - Tôi sẽ thử vẽ các phần dư chống lại các dự đoán có thể và có khả năng thiếu.
Florian Hartig

1
Tôi sẽ không quan tâm đến tính không đồng nhất, trong trường hợp của bạn là vừa phải và ảnh hưởng đến suy luận là nhẹ - vấn đề duy nhất tôi thấy là sự đánh giá thấp có hệ thống đối với các giá trị nhỏ, sẽ không được giải quyết bằng cách mô hình hóa phương sai. Nhưng nếu bạn phải biết, hãy xem tại đây thống kê.stackexchange.com/questions/247183/ Khăn
Florian Hartig
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.