Cách đặt độ tương phản tùy chỉnh với độ sáng trong R


9

Tôi đang sử dụng lmer trong R để kiểm tra ảnh hưởng của điều kiện ( cond) đến một số kết quả. Dưới đây là một số tạo thành dữ liệu, trong đó s là nhận dạng đối tượng và a, bclà điều kiện.

library("tidyr")
library("dplyr")
set.seed(123)
temp <- data.frame(s = paste0("S", 1:30), 
                   a = rnorm(30, -2, 1), 
                   b = rnorm(30, -3, 1), 
                   c = rnorm(30, -4, 1)) 

Tôi muốn so sánh

  1. mức agiá trị trung bình của các cấp bc
  2. mức độ bxuống mức c.

Câu hỏi của tôi là, làm thế nào để tôi đặt độ tương phản để làm điều này theo cách sao cho phần chặn phản ánh giá trị trung bình của ba điều kiện và hai ước tính được tính trực tiếp phản ánh sự khác biệt như được định nghĩa trong 1. và 2.?

Tôi đã thử với

c1 <- cbind(c(-0.5, 0.25, 0.25), c(0, -0.5, 0.5))
gather(temp, cond, result, a, b, c) %>%
  lmer(result ~ cond + (1|s), data = ., contrasts = list(cond = c1))

nơi cond2có vẻ ổn, nhưng cond1không phải.

Sau đây làm thế nào để giải thích những tương phản tùy chỉnh? , Tôi đã cố gắng sử dụng nghịch đảo tổng quát thay thế, nhưng những ước tính này cũng không có ý nghĩa.

c2 <- t(ginv(c1))
gather(temp, cond, result, a, b, c) %>%
  lmer(result ~ cond + (1|s), data = ., contrasts = list(cond = c2))

Tôi cũng đã thử tương phản Helmert, nhưng phương tiện vẫn không khớp.

gather(temp, cond, result, a, b, c) %>%
  mutate(cond = factor(cond, levels = c("c", "b", "a"))) %>%
  lmer(result ~ cond + (1|s), data = ., contrasts = list(cond = contr.helmert))

cách chính xác để làm điều này là gì?


Điều này nghe giống như một sự tương phản Helmert (c là cấp độ đầu tiên, sau đó b, sau đó a).
Michael M

Tôi cũng đã thử Helmert, nhưng những con số không phải là phương tiện tôi đang tìm kiếm. Tôi đã chỉnh sửa câu hỏi để bao gồm sự tương phản của Helmert, cảm ơn.
M4RT1NK4

Câu trả lời:


13

Đối với các bước sau, chúng ta cần khung dữ liệu ở định dạng dài. Khung dữ liệu datchứa các biến phụ thuộc result, các dự báo phân loại cond(mức: a, b, và c), và các yếu tố ngẫu nhiên s.

library(tidyr)
dat <- gather(temp, cond, result, a, b, c)

Sau đây, tôi sẽ minh họa hai cách tiếp cận để tạo ma trận tương phản tương ứng với các điều kiện bạn muốn so sánh:

  1. ab+c2
  2. bc

Tương phản tùy chỉnh

Ma trận mattương ứng với sự khác biệt cấp độ.

mat <- rbind(c(1, -0.5, -0.5),     # a vs. (b + c) / 2
             c(0, 1, -1))          # b vs. c

Để tạo ma trận tương phản thực tế, chúng tôi tính toán nghịch đảo tổng quát với ginv(từ MASS).

library(MASS)
cMat <- ginv(mat)
#            [,1]          [,2]
# [1,]  0.6666667 -7.130169e-17
# [2,] -0.3333333  5.000000e-01
# [3,] -0.3333333 -5.000000e-01

Ma trận tương phản này cMatcó thể được sử dụng trong lmer.

library(lme4)
res <- lmer(result ~ cond + (1|s), data = dat, 
            contrasts = list(cond = cMat))
coef(summary(res))    
#              Estimate Std. Error    t value
# (Intercept) -2.948115  0.0946025 -31.163182
# cond1        1.351517  0.2006822   6.734612
# cond2        1.153918  0.2317279   4.979625

Như bạn có thể thấy, các ước tính hiệu ứng cố định tương ứng với sự khác biệt được chỉ định ở trên. Hơn nữa, đánh chặn đại diện cho ý nghĩa tổng thể.

Helmert tương phản với contr.helmert

Bạn cũng có thể sử dụng hàm dựng sẵn contr.helmertđể tạo ma trận tương phản.

cHelmert <- contr.helmert(3)
#   [,1] [,2]
# 1   -1   -1
# 2    1   -1
# 3    0    2

Tuy nhiên, thứ tự không tương ứng với thứ bạn đã chỉ định trong câu hỏi. Do đó, chúng ta phải đảo ngược thứ tự của cột và hàng. Cột đầu tiên tương ứng với bso với avà cột thứ hai tương ứng với cso với giá trị trung bình của ba.

cHelmert2 <- cHelmert[c(3:1), 2:1]
#   [,1] [,2]
# 3    2    0
# 2   -1    1
# 1   -1   -1

So sánh ma trận tương phản cHelmert2với cMat. Bạn sẽ nhận thấy rằng các cột là các phiên bản thu nhỏ của ma trận khác.

Kết quả lmerlà:

library(lme4)
res2 <- lmer(result ~ cond + (1|s), data = dat, 
             contrasts = list(cond = cHelmert2))
coef(summary(res2))    
#               Estimate Std. Error    t value
# (Intercept) -2.9481150 0.09460250 -31.163182
# cond1        0.4505056 0.06689407   6.734612
# cond2        0.5769590 0.11586393   4.979625

Ma trận tương phản này cho phép so sánh tương tự như ma trận tương phản tùy chỉnh. Tuy nhiên, vì các giá trị trong ma trận là khác nhau, nên các hệ số hiệu ứng cố định cũng khác nhau. Không ngạc nhiên, giá trị là như nhau.t


Cảm ơn rất nhiều! Chỉ để chắc chắn rằng tôi hiểu điều này ngay bây giờ - nếu tôi muốn so sánh cấp độ đầu tiên với các cấp độ còn lại trong một biến cấp 4, matsẽ là c(1, -1/3, -1/3, -1/3)gì? Vì vậy, tôi luôn đặt các số như trong công thức (a + (b + c + d) / 3) và sau đó chia ginvtỷ lệ một cách thích hợp để các hệ số phản ánh trực tiếp sự khác biệt. Và khi bạn thay đổi thứ tự trong ví dụ Helmert, đó chỉ là để khớp với câu hỏi? Nếu không, kết quả phải giống nhau, bất kể thứ tự tương phản, phải không?
M4RT1NK4

@ M4RT1NK4 Công thức của bạn và độ tương phản tương ứng đúng. Thứ tự các cột được thay đổi để phù hợp với thứ tự các cột trong câu hỏi. Thứ tự của các hàng, tuy nhiên, rất quan trọng, bởi vì cấp độ đầu tiên là cấp độ tham chiếu. Trong ví dụ của bạn, mức tham chiếu là cấp thứ ba.
Sven Hohenstein

@SvenHohenstein Tôi có một câu hỏi liên quan dựa trên câu trả lời này, tâm trí có nhìn không? stats.stackexchange.com/questions/357781/ khăn
mat
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.