Làm thế nào đáng tin cậy là khoảng tin cậy cho các đối tượng lmer thông qua gói hiệu ứng?


36

Effectsgói cung cấp một cách rất nhanh chóng và thuận tiện để vẽ các kết quả mô hình hiệu ứng hỗn hợp tuyến tính thu được thông qua lme4gói . Các effectkhoảng thời gian chức năng tính toán của niềm tin (TCTD) rất nhanh chóng, nhưng làm thế nào đáng tin cậy là những khoảng tin cậy?

Ví dụ:

library(lme4)
library(effects)
library(ggplot)

data(Pastes)

fm1  <- lmer(strength ~ batch + (1 | cask), Pastes)
effs <- as.data.frame(effect(c("batch"), fm1))
ggplot(effs, aes(x = batch, y = fit, ymin = lower, ymax = upper)) + 
  geom_rect(xmax = Inf, xmin = -Inf, ymin = effs[effs$batch == "A", "lower"],
        ymax = effs[effs$batch == "A", "upper"], alpha = 0.5, fill = "grey") +
  geom_errorbar(width = 0.2) + geom_point() + theme_bw()

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

Theo các TCTD được tính toán bằng cách sử dụng effectsgói, lô "E" không trùng với lô "A".

Nếu tôi thử sử dụng confint.merModchức năng tương tự và phương thức mặc định:

a <- fixef(fm1)
b <- confint(fm1)
# Computing profile confidence intervals ...
# There were 26 warnings (use warnings() to see them)

b <- data.frame(b)
b <- b[-1:-2,]

b1 <- b[[1]]
b2 <- b[[2]]

dt <- data.frame(fit   = c(a[1],  a[1] + a[2:length(a)]), 
                 lower = c(b1[1],  b1[1] + b1[2:length(b1)]), 
                 upper = c(b2[1],  b2[1] + b2[2:length(b2)]) )
dt$batch <- LETTERS[1:nrow(dt)]

ggplot(dt, aes(x = batch, y = fit, ymin = lower, ymax = upper)) +
  geom_rect(xmax = Inf, xmin = -Inf, ymin = dt[dt$batch == "A", "lower"], 
        ymax = dt[dt$batch == "A", "upper"], alpha = 0.5, fill = "grey") + 
  geom_errorbar(width = 0.2) + geom_point() + theme_bw()

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

Tôi thấy rằng tất cả các TCTD chồng chéo. Tôi cũng nhận được cảnh báo chỉ ra rằng chức năng không thể tính được các TCTD đáng tin cậy. Ví dụ này và bộ dữ liệu thực tế của tôi khiến tôi nghi ngờ rằng effectsgói đó có các phím tắt trong tính toán CI mà có thể không hoàn toàn được các nhà thống kê chấp thuận. Làm thế nào đáng tin cậy là các TCTD được trả về bởi effecthàm từ effectsgói cho lmercác đối tượng?

Tôi đã thử những gì: Nhìn vào mã nguồn, tôi nhận thấy rằng effecthàm phụ thuộc vào Effect.merModhàm, từ đó chuyển hướng đến Effect.merhàm, trông giống như sau:

effects:::Effect.mer
function (focal.predictors, mod, ...) 
{
    result <- Effect(focal.predictors, mer.to.glm(mod), ...)
    result$formula <- as.formula(formula(mod))
    result
}
<environment: namespace:effects>

mer.to.glmHàm dường như tính toán Ma trận phương sai-Covariate từ lmerđối tượng:

effects:::mer.to.glm

function (mod) 
{
...
mod2$vcov <- as.matrix(vcov(mod))
...
mod2
}

Đến lượt nó, có lẽ được sử dụng trong Effect.defaultchức năng để tính toán các TCTD (tôi có thể đã hiểu nhầm phần này):

effects:::Effect.default
...
     z <- qnorm(1 - (1 - confidence.level)/2)
        V <- vcov.(mod)
        eff.vcov <- mod.matrix %*% V %*% t(mod.matrix)
        rownames(eff.vcov) <- colnames(eff.vcov) <- NULL
        var <- diag(eff.vcov)
        result$vcov <- eff.vcov
        result$se <- sqrt(var)
        result$lower <- effect - z * result$se
        result$upper <- effect + z * result$se
...

Tôi không biết đủ về các LMM để đánh giá liệu đây có phải là một cách tiếp cận đúng hay không, nhưng xem xét các cuộc thảo luận xung quanh việc tính toán khoảng tin cậy cho các LMM, cách tiếp cận này có vẻ đơn giản đáng ngờ.


1
Khi bạn có các dòng mã dài, tôi sẽ đánh giá rất cao nếu bạn chia chúng thành nhiều dòng để chúng ta không phải cuộn để xem tất cả.
rvl

1
@rvl Mã nên dễ đọc hơn bây giờ.
Mikko

Câu trả lời:


52

Tất cả các kết quả về cơ bản là giống nhau ( đối với ví dụ cụ thể này ). Một số khác biệt về lý thuyết là:

  • như @rvl chỉ ra, việc tái cấu trúc các TCTD mà không tính đến hiệp phương sai giữa các tham số là sai (xin lỗi)
  • khoảng tin cậy cho các thông số có thể dựa trên khoảng tin cậy Wald (giả sử một bề mặt loga bậc hai): lsmeans, effects, confint(.,method="Wald"); ngoại trừ lsmeans, các phương pháp này bỏ qua các hiệu ứng kích thước hữu hạn ("mức độ tự do"), nhưng trong trường hợp này, nó hầu như không tạo ra bất kỳ sự khác biệt nào ( df=40thực tế không thể phân biệt được với vô hạn df)
  • ... hoặc trên các khoảng tin cậy của cấu hình (phương pháp mặc định; bỏ qua các hiệu ứng kích thước hữu hạn nhưng cho phép các bề mặt không bậc hai)
  • ... hoặc trên bootstrapping tham số (tiêu chuẩn vàng - giả sử mô hình là chính xác [phản hồi là Bình thường, hiệu ứng ngẫu nhiên được phân phối Thông thường, dữ liệu độc lập có điều kiện, v.v.], nhưng về mặt khác thì có vài giả định)

Tôi nghĩ rằng tất cả các cách tiếp cận này là hợp lý (một số gần đúng hơn so với các phương pháp khác), nhưng trong trường hợp này, nó hầu như không tạo ra bất kỳ sự khác biệt nào mà bạn sử dụng. Nếu bạn lo lắng, hãy thử một số phương pháp tương phản trên dữ liệu của bạn hoặc trên dữ liệu mô phỏng giống với dữ liệu của bạn và xem điều gì xảy ra ...

(PS: Tôi sẽ không đặt nặng vấn đề vào thực tế là khoảng tin cậy AEkhông trùng nhau. Bạn phải thực hiện một quy trình so sánh cặp đúng để đưa ra những suy luận đáng tin cậy về sự khác biệt giữa cặp ước tính cụ thể này. ..)

95% TCTD:

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

Mã so sánh:

library(lme4)
fm2 <- lmer(strength ~ batch - 1 + (1 | cask), Pastes)
c0 <- confint(fm2,method="Wald")
c1 <- confint(fm2)
c2 <- confint(fm2,method="boot")
library(effects)
library(lsmeans)
c3 <- with(effect("batch",fm2),cbind(lower,upper))
c4 <- with(summary(lsmeans(fm2,spec="batch")),cbind(lower.CL,upper.CL))
tmpf <- function(method,val) {
    data.frame(method=method,
               v=LETTERS[1:10],
               setNames(as.data.frame(tail(val,10)),
                        c("lwr","upr")))
}
library(ggplot2); theme_set(theme_bw())
allCI <- rbind(tmpf("lme4_wald",c0),
      tmpf("lme4_prof",c1),
      tmpf("lme4_boot",c2),
      tmpf("effects",c3),
               tmpf("lsmeans",c4))
ggplot(allCI,aes(v,ymin=lwr,ymax=upr,colour=method))+
    geom_linerange(position=position_dodge(width=0.8))

ggsave("pastes_confint.png",width=10)

2
Tôi chấp nhận câu trả lời này vì nó đúng với quan điểm và đưa ra một so sánh tốt đẹp giữa các phương pháp khác nhau. Tuy nhiên, hãy xem câu trả lời tuyệt vời của rlv để biết thêm thông tin.
Mikko

Cảm ơn bạn đã trả lời tuyệt vời và rất hữu ích. Tôi có hiểu chính xác rằng người ta không thể sử dụng các TCTD để so sánh các nhóm / đợt, nhưng có thể so sánh các hiệu ứng. Nói rằng tôi đã có hai phương pháp điều trị, một số cá nhân và một số phép đo trong các cá nhân. Tôi sẽ sử dụng các cá nhân như hiệu ứng ngẫu nhiên vì mỗi trong số chúng sẽ chứa x số đo. Sau đó, tôi muốn biết liệu hai phương pháp điều trị này dẫn đến một phản ứng khác nhau. Tôi có thể sử dụng effectsgói và CI chồng chéo trong trường hợp này?
Mikko

5
Đây là một câu hỏi tổng quát hơn có liên quan đến bất kỳ phương pháp tiếp cận dựa trên mô hình tiêu chuẩn nào. Có thể có giá trị một câu hỏi riêng biệt. (1) Nói chung cách người ta trả lời các câu hỏi về sự khác biệt giữa các phương pháp điều trị là thiết lập mô hình sao cho sự khác biệt giữa các phương pháp điều trị đầu mối là một sự tương phản (nghĩa là một tham số ước tính) trong mô hình, và sau đó tính giá trị p hoặc kiểm tra xem khoảng tin cậy ở cấp độ alpha cụ thể có bao gồm không. (còn tiếp)
Ben Bolker

4
(2) các TCTD chồng chéo tốt nhất là một tiêu chí bảo thủ và gần đúng, cho sự khác biệt giữa các tham số (có một số bài báo được công bố về chủ đề này). (3) Có một vấn đề riêng / trực giao với các phép so sánh theo cặp, đó là người ta phải kiểm soát một cách thích hợp sự đa dạng và không độc lập của các phép so sánh (điều này có thể được thực hiện, ví dụ như bằng các phương pháp trong multcompgói, nhưng nó cần ít nhất một một chút quan tâm)
Ben Bolker

1
Để làm gì? Bạn có thể muốn hỏi một câu hỏi mới.
Ben Bolker

20

Có vẻ như những gì bạn đã làm trong phương pháp thứ hai là tính các khoảng tin cậy cho các hệ số hồi quy, sau đó chuyển đổi chúng để có được các TCTD cho các dự đoán. Điều này bỏ qua hiệp phương sai giữa các hệ số hồi quy.

Hãy thử điều chỉnh mô hình mà không bị chặn, để các batchhiệu ứng thực sự sẽ là dự đoán và confintsẽ trả về các khoảng thời gian bạn cần.

Phụ lục 1

Tôi đã làm chính xác những gì tôi đề nghị ở trên:

> fm2 <- lmer(strength ~ batch - 1 + (1 | cask), Pastes)
> confint(fm2)
Computing profile confidence intervals ...
           2.5 %    97.5 %
.sig01  0.000000  1.637468
.sigma  2.086385  3.007380
batchA 60.234772 64.298581
batchB 57.268105 61.331915
batchC 60.018105 64.081915
batchD 57.668105 61.731915
batchE 53.868105 57.931915
batchF 59.001439 63.065248
batchG 57.868105 61.931915
batchH 61.084772 65.148581
batchI 56.651439 60.715248
batchJ 56.551439 60.615248

Những khoảng này dường như đi đôi với kết quả từ effects.

Phụ lục 2

Một lựa chọn khác là gói lsmeans . Nó có được mức độ tự do và ma trận hiệp phương sai được điều chỉnh từ gói pbkrtest .

> library("lsmeans")
> lsmeans(fm1, "batch")
Loading required namespace: pbkrtest
 batch   lsmean       SE    df lower.CL upper.CL
 A     62.26667 1.125709 40.45 59.99232 64.54101
 B     59.30000 1.125709 40.45 57.02565 61.57435
 C     62.05000 1.125709 40.45 59.77565 64.32435
 D     59.70000 1.125709 40.45 57.42565 61.97435
 E     55.90000 1.125709 40.45 53.62565 58.17435
 F     61.03333 1.125709 40.45 58.75899 63.30768
 G     59.90000 1.125709 40.45 57.62565 62.17435
 H     63.11667 1.125709 40.45 60.84232 65.39101
 I     58.68333 1.125709 40.45 56.40899 60.95768
 J     58.58333 1.125709 40.45 56.30899 60.85768

Confidence level used: 0.95 

effecteffectconfint±1,96×se

Kết quả từ effectlsmeanstương tự nhau, nhưng với tình huống đa yếu tố không cân bằng, lsmeansmặc định trung bình trên các yếu tố không được sử dụng với trọng số bằng nhau, trong khi effecttrọng số theo tần số quan sát được (có sẵn như là một tùy chọn lsmeans).


Cảm ơn bạn cho giải pháp này. Các khoảng thời gian giống nhau hơn, mặc dù không hoàn toàn giống nhau. Câu trả lời của bạn vẫn không trả lời câu hỏi liệu các TCTD từ effectsgói có thể được tin cậy cho lmercác đối tượng hay không. Tôi đang xem xét sử dụng các kết quả trong một ấn phẩm và muốn chắc chắn rằng các TCTD được tính toán bằng phương pháp được phê duyệt cho các LMM.
Mikko

Bạn có thể vui lòng cho biết: trong Phụ lục 1 của bạn, hai tham số đầu tiên .sig01và được .sigmatạo bởi confint, đó có phải là khoảng tin cậy cho phương sai không? hoặc khoảng tin cậy của độ lệch chuẩn ?
ABC

Chúng là các TCTD cho bất kỳ tham số nào được dán nhãn theo cách đó trong mô hình. Bạn nên xem tài liệu lmerđể có câu trả lời dứt khoát. Tuy nhiên, mọi người thường sử dụng các ký hiệu muốn sigmađề cập đến độ lệch chuẩn và sigma.squarehoặc sigma^2để chỉ các phương sai.
rvl

Nó là tốt hơn để sử dụng lmertest, lsmeans hoặc mertools?
skan
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.