Giá trị P cho thuật ngữ tương tác trong các mô hình hiệu ứng hỗn hợp sử dụng lme4


10

Tôi đang phân tích một số dữ liệu về hành vi sử dụng lme4trong R, chủ yếu sau đây hướng dẫn tuyệt vời Bodo Winter , nhưng tôi không hiểu nếu tôi xử lý tương tác đúng cách. Tồi tệ hơn, không ai khác tham gia vào nghiên cứu này sử dụng các mô hình hỗn hợp, vì vậy tôi có một chút thích thú khi đảm bảo mọi thứ đều đúng.

Thay vì chỉ gửi một tiếng kêu cứu, tôi nghĩ tôi nên nỗ lực hết sức để giải thích vấn đề, và sau đó cầu xin sự sửa chữa tập thể của bạn. Một vài trợ lý khác là:

  • Trong khi viết, tôi đã tìm thấy câu hỏi này , cho thấy rằng nlmenhiều giá trị p trực tiếp hơn cho các thuật ngữ tương tác, nhưng tôi nghĩ rằng vẫn còn hợp lệ để hỏi về mối quan hệ lme4.
  • Livius'trả lời cho câu hỏi này cung cấp các liên kết đến rất nhiều bài đọc bổ sung, mà tôi sẽ cố gắng vượt qua trong vài ngày tới, vì vậy tôi sẽ bình luận với bất kỳ tiến bộ nào mang lại.

Trong dữ liệu của tôi, tôi có một biến phụ thuộc dv, một conditionthao tác (0 = kiểm soát, 1 = thực nghiệm điều kiện, mà nên kết quả trong một cao hơn dv), và cũng là một điều kiện tiên quyết, dán nhãn appropriate: thử nghiệm mã hóa 1cho việc này nên hiển thị các hiệu ứng, nhưng thử nghiệm mã 0sức không, bởi vì một yếu tố quan trọng bị thiếu.

Tôi cũng đã bao gồm hai lần chặn ngẫu nhiên, cho subjectvà cho target, phản ánh dvcác giá trị tương quan trong mỗi đối tượng và trong mỗi 14 vấn đề được giải quyết (mỗi người tham gia đã giải quyết cả điều khiển và phiên bản thử nghiệm của từng vấn đề).

library(lme4)
data = read.csv("data.csv")

null_model        = lmer(dv ~ (1 | subject) + (1 | target), data = data)
mainfx_model      = lmer(dv ~ condition + appropriate + (1 | subject) + (1 | target),
                         data = data)
interaction_model = lmer(dv ~ condition + appropriate + condition*appropriate +
                              (1 | subject) + (1 | target), data = data)
summary(interaction_model)

Đầu ra:

## Linear mixed model fit by REML ['lmerMod']
## ...excluded for brevity....
## Random effects:
##  Groups   Name        Variance Std.Dev.
##  subject  (Intercept) 0.006594 0.0812  
##  target   (Intercept) 0.000557 0.0236  
##  Residual             0.210172 0.4584  
## Number of obs: 690, groups: subject, 38; target, 14
## 
## Fixed effects:
##                                Estimate Std. Error t value
## (Intercept)                    0.2518     0.0501    5.03
## conditioncontrol               0.0579     0.0588    0.98
## appropriate                   -0.0358     0.0595   -0.60
## conditioncontrol:appropriate  -0.1553     0.0740   -2.10
## 
## Correlation of Fixed Effects:
## ...excluded for brevity.

ANOVA sau đó cho thấy interaction_modelsự phù hợp tốt hơn đáng kể so với mainfx_model, từ đó tôi kết luận rằng có một sự tương tác đáng kể (p = .035).

anova(mainfx_model, interaction_model)

Đầu ra:

## ...excluded for brevity....
##                   Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)  
## mainfx_model       6 913 940   -450      901                          
## interaction_model  7 910 942   -448      896  4.44      1      0.035 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Từ đó, tôi tách một tập hợp con của dữ liệu appropriateđáp ứng yêu cầu (nghĩa là appropriate = 1) và để nó phù hợp với mô hình null và một mô hình bao gồm cả conditionhiệu ứng, so sánh hai mô hình sử dụng ANOVA một lần nữa và lo, tìm thấy conditionlà một yếu tố dự báo quan trọng.

good_data = data[data$appropriate == 1, ]
good_null_model   = lmer(dv ~ (1 | subject) + (1 | target), data = good_data)
good_mainfx_model = lmer(dv ~ condition + (1 | subject) + (1 | target), data = good_data)

anova(good_null_model, good_mainfx_model)

Đầu ra:

## Data: good_data
## models:
## good_null_model: dv ~ (1 | subject) + (1 | target)
## good_mainfx_model: dv ~ condition + (1 | subject) + (1 | target)
##                   Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)  
## good_null_model    4 491 507   -241      483                          
## good_mainfx_model  5 487 507   -238      477  5.55      1      0.018 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Kiểm tra câu hỏi này để biết thêm thông tin về giá trị p trong lme4: stats.stackexchange.com/questions/118416/ mẹo
Tim

Sử dụng lmerTest :: anova () sẽ cung cấp cho bạn các bảng anova với giá trị p cho mỗi thuật ngữ. Điều đó sẽ cho phép bạn kiểm tra trực tiếp sự tương tác, thay vì so sánh các mô hình tổng thể. Xem câu trả lời này cho câu hỏi @Tim
Kayle Sawyer

Câu trả lời:


3

Tôi không thấy quá nhiều điều để nói ở đây. Tôi nghĩ rằng bạn đã làm một công việc tốt.

Có một số cách mà mọi người đã thảo luận để kiểm tra hiệu ứng và nhận giá trị p cho các mô hình hiệu ứng hỗn hợp phức tạp. Có một cái nhìn tổng quan tốt ở đây . Tốt nhất là sử dụng các phương pháp tính toán chuyên sâu (phương pháp bootstrapping hoặc Bayesian), nhưng điều này tiên tiến hơn đối với hầu hết mọi người. Phương pháp tốt nhất thứ hai (và thuận tiện nhất) là sử dụng thử nghiệm tỷ lệ khả năng. Đó là những gì anova()(về mặt kỹ thuật ? Anova.merMod () ) đang làm. Điều quan trọng là chỉ sử dụng thử nghiệm tỷ lệ khả năng của các mô hình phù hợp với khả năng tối đa đầy đủ , thay vì khả năng tối đa bị hạn chế(NHỚ). Mặt khác, đối với mô hình cuối cùng của bạn và để giải thích, bạn muốn sử dụng REML. Điều này gây nhầm lẫn cho nhiều người. Trong đầu ra của bạn, chúng tôi thấy rằng bạn phù hợp với các mô hình của mình với REML (điều này là do tùy chọn được đặt thành TRUEmặc định lmer(). Điều đó có nghĩa là thử nghiệm của bạn không hợp lệ, tuy nhiên, vì đây là một lỗi phổ biến, anova.merMod()chứa một refitđối số mà mặc định được đặt thành TRUEvà bạn đã không thay đổi nó. Vì vậy, tầm nhìn xa của các nhà phát triển gói đã cứu bạn ở đó.

Về chiến lược của bạn để giải nén các tương tác, những gì bạn đã làm là tốt. Hãy nhớ rằng sự tương tác sử dụng tất cả dữ liệu cho thử nghiệm của nó. Có thể có một tương tác đáng kể nhưng không có xét nghiệm phân tầng nào có ý nghĩa, điều này làm cho một số người nhầm lẫn. (Tuy nhiên, điều đó dường như không xảy ra với bạn.)


0

Bản thân tôi là người mới và làm theo lời khuyên từ Zuur et al .. Tôi sử dụng lmetừ nlmegói thay vì lme4khi tôi cần thêm cấu trúc lỗi phân cấp vào mô hình tuyến tính. Phản ứng của tôi có thể được tắt.

Hai bình luận:

(1) Tôi không chắc việc kiểm tra conditiontrong tập hợp con appropriate==1chỉ có ý nghĩa . Nếu bạn muốn lấy giá trị p cho các hiệu ứng chính, bạn có thể sử dụng Anovatừ gói 'xe hơi':

require(car)
Anova(M,type="III")# type III Sum of Squares. M was fitted using method=REML

Nếu bạn muốn giải quyết sự tương tác, bạn có thể chạy các so sánh được ghép trực tiếp (?) Hoặc làm những gì bạn đã làm nhưng trên cả hai tập hợp con (tức là với tập hợp con ở đâu appropriate==0).

(2) Trước tiên, bạn có thể muốn chọn cấu trúc lỗi của mình thay vì giả sử (1 | subject) + (1 | target)là cấu trúc lỗi tốt nhất. Từ những gì bạn đã viết, tôi tập hợp đó conditionlà một yếu tố bên trong chủ đề, trong khi đó appropriatelà yếu tố giữa chủ thể hoặc giữa yếu tố mục tiêu. Ví dụ, bạn có thể muốn thêm độ dốc cho các yếu tố bên trong chủ đề và / hoặc bên trong mục tiêu: dv ~ condition + appropriate + (1+condition | subject) + (1 | target)thêm độ dốc ngẫu nhiên cho yếu tố bên trong chủ đề condition. Không có độ dốc là cần thiết cho các yếu tố giữa các chủ thể / mục tiêu.

Chúc mừng


Cảm ơn. AnovaMặc dù vậy, bạn sẽ không giả vờ các mối tương quan giữa chủ đề và mục tiêu không có? Lý do tôi lặp lại phân tích chỉ với dữ liệu appropriate==1là một số tài liệu được sử dụng cho thấy có vấn đề sau kiểm tra, do đó 'không phù hợp'. Cuối cùng, tôi đã không sử dụng độ dốc ngẫu nhiên vì lý do đơn giản là mô hình phù hợp hơn khi không có chúng.
Eoin
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.