Mô hình hiệu ứng hỗn hợp: So sánh thành phần phương sai ngẫu nhiên giữa các cấp của một biến nhóm


14

Giả sử tôi có N người tham gia, mỗi người trả lời Y 20 lần, 10 trong một điều kiện và 10 trong một điều kiện khác. Tôi phù hợp với một mô hình hiệu ứng hỗn hợp tuyến tính so sánh Y trong từng điều kiện. Đây là một ví dụ có thể tái tạo mô phỏng tình huống này bằng cách sử dụng lme4gói trong R:

library(lme4)
fml <- "~ condition + (condition | participant_id)"
d <- expand.grid(participant_id=1:40, trial_num=1:10)
d <- rbind(cbind(d, condition="control"), cbind(d, condition="experimental"))

set.seed(23432)
d <- cbind(d, simulate(formula(fml), 
                       newparams=list(beta=c(0, .5), 
                                      theta=c(.5, 0, 0), 
                                      sigma=1), 
                       family=gaussian, 
                       newdata=d))

m <- lmer(paste("sim_1 ", fml), data=d)
summary(m)

Mô hình mmang lại hai hiệu ứng cố định (một đánh chặn và độ dốc cho điều kiện) và ba hiệu ứng ngẫu nhiên (một đánh chặn ngẫu nhiên của người tham gia, độ dốc ngẫu nhiên của người tham gia cho điều kiện và tương quan độ dốc chặn).

Tôi muốn so sánh thống kê kích thước của phương sai đánh chặn ngẫu nhiên của người tham gia giữa các nhóm được xác định bởi condition(nghĩa là tính toán thành phần phương sai được tô màu đỏ riêng biệt trong điều kiện kiểm soát và thử nghiệm, sau đó kiểm tra xem sự khác biệt về kích thước của các thành phần là khác không). Làm thế nào tôi có thể làm điều này (tốt nhất là trong R)?

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


TẶNG KEM

Giả sử mô hình phức tạp hơn một chút: Mỗi người tham gia trải nghiệm 10 lần kích thích 20 lần, 10 lần trong một điều kiện và 10 lần khác. Vì vậy, có hai bộ hiệu ứng ngẫu nhiên chéo: hiệu ứng ngẫu nhiên cho người tham gia và hiệu ứng ngẫu nhiên cho kích thích. Đây là một ví dụ có thể tái tạo:

library(lme4)
fml <- "~ condition + (condition | participant_id) + (condition | stimulus_id)"
d <- expand.grid(participant_id=1:40, stimulus_id=1:10, trial_num=1:10)
d <- rbind(cbind(d, condition="control"), cbind(d, condition="experimental"))

set.seed(23432)
d <- cbind(d, simulate(formula(fml), 
                       newparams=list(beta=c(0, .5), 
                                      theta=c(.5, 0, 0, .5, 0, 0), 
                                      sigma=1), 
                       family=gaussian, 
                       newdata=d))

m <- lmer(paste("sim_1 ", fml), data=d)
summary(m)

Tôi muốn thống kê so sánh độ lớn của phương sai đánh chặn ngẫu nhiên của người tham gia giữa các nhóm được xác định bởi condition. Làm thế nào tôi có thể làm điều đó, và quá trình có khác gì với tình huống được mô tả ở trên không?


BIÊN TẬP

Để cụ thể hơn một chút về những gì tôi đang tìm kiếm, tôi muốn biết:

  1. Là câu hỏi, "là các câu trả lời trung bình có điều kiện trong từng điều kiện (nghĩa là các giá trị chặn ngẫu nhiên trong từng điều kiện) khác nhau đáng kể với nhau, ngoài những gì chúng ta mong đợi do lỗi lấy mẫu", một câu hỏi được xác định rõ (nghĩa là câu hỏi này thậm chí lý thuyết có thể trả lời)? Nếu không, tai sao không?
  2. Nếu câu trả lời cho câu hỏi (1) là có, tôi sẽ trả lời như thế nào? Tôi thích Rtriển khai hơn, nhưng tôi không bị ràng buộc với lme4gói - ví dụ, có vẻ như OpenMxgói đó có khả năng chứa các phân tích đa nhóm và đa cấp ( https: //openmx.ssri.psu. edu / openmx-features ) và đây có vẻ là loại câu hỏi phải trả lời được trong khung SEM.

1
@MarkWhite, tôi đã cập nhật câu hỏi để phản hồi ý kiến ​​của bạn. Ý tôi là tôi muốn so sánh độ lệch chuẩn của người tham gia chặn khi họ đưa ra phản hồi trong điều kiện kiểm soát so với khi họ đưa ra phản hồi trong điều kiện thử nghiệm. Tôi muốn làm điều này theo thống kê, tức là kiểm tra xem sự khác biệt về độ lệch chuẩn của các lần chặn khác với 0.
Patrick S. Forscher

2
Tôi đã viết lên một câu trả lời, nhưng sẽ ngủ trên đó bởi vì tôi không chắc nó rất hữu ích. Câu hỏi được đặt ra là tôi không nghĩ người ta có thể làm những gì bạn đang hỏi. Hiệu ứng ngẫu nhiên của đánh chặn là phương sai trong phương tiện của người tham gia khi họ ở trong điều kiện kiểm soát. Vì vậy, người ta không thể nhìn vào phương sai của những quan sát trong điều kiện thí nghiệm. Các chặn được xác định ở cấp độ người, và điều kiện là ở cấp độ quan sát. Nếu bạn đang cố gắng so sánh phương sai giữa các điều kiện, tôi sẽ nghĩ về các mô hình không đồng nhất có điều kiện.
Đánh dấu trắng

2
Tôi đang làm việc trên một bản chỉnh sửa và gửi lại cho một bài báo nơi tôi có những người tham gia trả lời các bộ kích thích. Mỗi người tham gia được tiếp xúc với nhiều điều kiện và mỗi kích thích nhận được phản hồi trong nhiều điều kiện - nói cách khác, nghiên cứu của tôi mô phỏng thiết lập mà tôi mô tả trong mô tả "TIỀN THƯỞNG" của mình. Trong một trong các biểu đồ của tôi, có vẻ như phản ứng của người tham gia trung bình có độ biến thiên lớn hơn ở một trong các điều kiện so với các điều kiện khác. Một nhà phê bình đã yêu cầu tôi kiểm tra xem điều này có đúng không.
Patrick S. Forscher

2
Vui lòng xem tại đây stats.stackexchange.com/questions/322213 để biết cách thiết lập mô hình lme4 với các tham số phương sai khác nhau cho mỗi cấp độ của một biến nhóm. Tôi không chắc chắn làm thế nào để kiểm tra giả thuyết về việc liệu hai tham số phương sai có bằng nhau hay không; cá nhân, tôi luôn thích bootstrap hơn các đối tượng và kích thích để có được khoảng tin cậy, hoặc có thể thiết lập một loại thử nghiệm giả thuyết giống như hoán vị (dựa trên mô hình lại).
amip nói phục hồi Monica

3
Tôi đồng ý với nhận xét của @MarkWhite rằng câu hỏi "là các phương sai đánh chặn ngẫu nhiên khác biệt đáng kể với nhau ..." rõ ràng là không rõ ràng và vô nghĩa nhất, bởi vì phần bị chặn nhất thiết phải đề cập đến các giá trị Y trong một nhóm cụ thể ( nhóm được gán giá trị bằng 0), do đó, việc so sánh "chặn" giữa các nhóm nói đúng là không có ý nghĩa. Tôi nghĩ rằng một cách tốt hơn để viết lại câu hỏi của bạn, như tôi hiểu nó, sẽ là một cái gì đó như: "phương sai của các câu trả lời có nghĩa là có điều kiện của người tham gia trong điều kiện A so với điều kiện B không bằng nhau?"
Jake Westfall

Câu trả lời:


6

Có nhiều hơn một cách để kiểm tra giả thuyết này. Ví dụ: quy trình do @amoeba vạch ra sẽ hoạt động. Nhưng dường như đối với tôi, cách đơn giản nhất, nhanh nhất để kiểm tra nó là sử dụng thử nghiệm tỷ lệ khả năng cũ tốt so với hai mô hình lồng nhau. Phần khó khăn tiềm năng duy nhất của phương pháp này là trong việc biết cách thiết lập cặp mô hình sao cho việc bỏ đi một tham số duy nhất sẽ kiểm tra sạch giả thuyết mong muốn về phương sai không bằng nhau. Dưới đây tôi giải thích làm thế nào để làm điều đó.

Câu trả lời ngắn

Chuyển sang mã tương phản (tổng bằng 0) cho biến độc lập của bạn và sau đó thực hiện kiểm tra tỷ lệ khả năng so sánh mô hình đầy đủ của bạn với mô hình buộc tương quan giữa độ dốc ngẫu nhiên và chặn ngẫu nhiên là 0:

# switch to numeric (not factor) contrast codes
d$contrast <- 2*(d$condition == 'experimental') - 1

# reduced model without correlation parameter
mod1 <- lmer(sim_1 ~ contrast + (contrast || participant_id), data=d)

# full model with correlation parameter
mod2 <- lmer(sim_1 ~ contrast + (contrast | participant_id), data=d)

# likelihood ratio test
anova(mod1, mod2)

Giải thích trực quan / trực giác

Để câu trả lời này có ý nghĩa, bạn cần có một sự hiểu biết trực quan về những giá trị khác nhau của tham số tương quan ngụ ý gì cho dữ liệu được quan sát. Xem xét các dòng hồi quy theo chủ đề cụ thể (thay đổi ngẫu nhiên). Về cơ bản, tham số tương quan kiểm soát xem các đường hồi quy của người tham gia "quạt ra bên phải" (tương quan dương) hay "quạt ra bên trái" (tương quan âm) so với điểm X=0 , trong đó X là độc lập tương phản của bạn Biến đổi. Một trong hai điều này ngụ ý phương sai không đồng đều trong các phản ứng trung bình có điều kiện của người tham gia. Điều này được minh họa dưới đây:

tương quan ngẫu nhiên

Trong âm mưu này, chúng tôi bỏ qua nhiều quan sát mà chúng tôi có cho từng đối tượng trong từng điều kiện và thay vào đó chỉ vẽ hai phương tiện ngẫu nhiên của mỗi đối tượng, với một đường nối chúng, biểu thị độ dốc ngẫu nhiên của chủ thể đó. (Điều này được tạo thành dữ liệu từ 10 đối tượng giả định, không phải dữ liệu được đăng trong OP.)

Trong cột bên trái, nơi có mối tương quan chặn độ dốc âm mạnh, đường hồi quy quạt ở bên trái so với điểm X=0 . Như bạn có thể thấy rõ trong hình, điều này dẫn đến phương sai lớn hơn trong các phương tiện ngẫu nhiên của các đối tượng trong điều kiện X=1 so với điều kiện X=1 .

Cột bên phải hiển thị hình ảnh phản chiếu ngược lại của mẫu này. Trong trường hợp này, có sự khác biệt lớn hơn trong các phương tiện ngẫu nhiên của các đối tượng trong điều kiện X=1 so với điều kiện X=1 .

Cột ở giữa cho thấy những gì xảy ra khi độ dốc ngẫu nhiên và các lần chặn ngẫu nhiên không tương quan. Điều này có nghĩa là các đường hồi quy quạt ở bên trái chính xác như chúng quạt ở bên phải, so với điểm X=0 . Điều này ngụ ý rằng phương sai của các đối tượng có nghĩa trong hai điều kiện là bằng nhau.

Điều quan trọng ở đây là chúng tôi đã sử dụng sơ đồ mã hóa tương phản tổng bằng không, không phải mã giả (nghĩa là không đặt các nhóm ở X=0 so vớiX=1 ). Đó làchỉtheo chương trình mã hóa độ tương phản mà chúng tôi có mối quan hệ này trong đó chênh lệch đều bình đẳng khi và chỉ khi mối tương quan dốc-đánh chặn là 0. Hình bên dưới cố gắng để xây dựng mà trực giác:

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

Những gì con số này cho thấy là cùng một bộ dữ liệu chính xác trong cả hai cột, nhưng với biến độc lập được mã hóa theo hai cách khác nhau. Trong cột bên trái, chúng tôi sử dụng mã tương phản - đây chính xác là tình huống từ hình đầu tiên. Trong cột bên phải, chúng tôi sử dụng mã giả. Điều này làm thay đổi ý nghĩa của các lệnh chặn - bây giờ các lệnh chặn thể hiện các phản ứng dự đoán của các đối tượng trong nhóm kiểm soát. Bảng dưới cùng cho thấy hậu quả của sự thay đổi này, cụ thể là, mối tương quan giữa độ dốc không còn ở gần 0, mặc dù dữ liệu giống nhau theo nghĩa sâu và cả hai phương sai có điều kiện đều bằng nhau trong cả hai trường hợp. Nếu điều này dường như vẫn không có ý nghĩa nhiều, nghiên cứu câu trả lời trước đây của tôi, nơi tôi nói nhiều hơn về hiện tượng này có thể giúp ích.

Bằng chứng

Đặt yijk là phản hồi thứ j của chủ đề thứ i trong điều kiện k . (Chúng ta chỉ có hai điều kiện ở đây, vì vậy k chỉ là 1 hoặc 2.) Sau đó, mô hình hỗn hợp có thể được viết

yijk=αi+βixk+eijk,
trong đó αi là chủ thể ' chặn ngẫu nhiên và có phương sai σα2 , βilà độ dốc ngẫu nhiên của các đối tượng và có sai σβ2 , eijk là một thuật ngữ quan sát cấp lỗi, và cov(αi,βi)=σαβ .

Chúng tôi muốn chứng minh rằng

var(αi+βix1)=var(αi+βix2)σαβ=0.

Bắt đầu với phía bên trái của hàm ý này, chúng ta có

var(αi+βix1)=var(αi+βix2)σα2+x12σβ2+2x1σαβ=σα2+x22σβ2+2x2σαβσβ2(x12x22)+2σαβ(x1x2)=0.

Mã tương phản tổng bằng không ngụ ý rằng x1+x2=0x12=x22=x2 . Sau đó chúng ta có thể tiếp tục giảm dòng cuối cùng của ở trên để

σβ2(x2x2)+2σαβ(x1+x1)=0σαβ=0,
đó là những gì chúng tôi muốn chứng minh. (Để thiết lập hướng khác của hàm ý, chúng ta chỉ cần làm theo các bước tương tự ngược lại.)

Để nhắc lại, điều này cho thấy rằng nếu biến độc lập là tương phản (tổng bằng 0) được mã hóa , thì phương sai của phương tiện ngẫu nhiên của các đối tượng trong mỗi điều kiện là bằng nhau khi và chỉ khi tương quan giữa độ dốc ngẫu nhiên và chặn ngẫu nhiên là 0. Khóa take-away điểm từ tất cả điều này là thử nghiệm giả thuyết rằng σαβ=0 sẽ kiểm tra giả thuyết của phương sai bằng được mô tả bởi các OP.

Điều này KHÔNG hoạt động nếu biến độc lập là, giả, được mã hóa. Cụ thể, nếu chúng ta cắm các giá trị x1=0x2=1 vào các phương trình trên, chúng ta thấy rằng

var(αi)=var(αi+βi)σαβ=σβ22.


Đây đã là một câu trả lời tuyệt vời, cảm ơn bạn! Tôi nghĩ rằng điều này gần nhất để trả lời câu hỏi của tôi, vì vậy tôi chấp nhận nó và đưa cho bạn tiền thưởng (sắp hết hạn), nhưng tôi rất muốn thấy một lời biện minh đại số nếu bạn có thời gian và năng lượng cho nó.
Patrick S. Forscher

1
@ PatrickS.Forscher Tôi vừa thêm một bằng chứng
Jake Westfall

1
@JakeWestfall Trong ví dụ về đồ chơi của tôi, các đối tượng đã lật lại các phản ứng trong hai điều kiện. Nếu một đối tượng có phản hồi trong điều kiện A và - a trong điều kiện B, thì giá trị BLUP của đánh chặn ngẫu nhiên đối với đối tượng này khi chúng ta sử dụng mô hình là gì? Tôi nghĩ rằng nó chỉ có thể là 0. Nếu tất cả các đối tượng có BLUP bằng 0, thì phương sai của đánh chặn ngẫu nhiên cũng bằng không. Vì vậy, mô hình này không thể phù hợp với ví dụ đồ chơi này cả. Ngược lại, mô hình được xác định ở trên thông qua sẽ có hai BLUP cho mỗi đối tượng và chúng có thể dễ dàng là một- a . Am i thiếu cái gì ở đây? aa(1 | subject)dummyaa
amip nói rằng Phục hồi Monica

1
Tôi thấy bây giờ bạn đã đúng @amoeba, cảm ơn vì đã giải thích. Tôi sẽ chỉnh sửa câu trả lời của tôi cho phù hợp.
Jake Westfall

1
@amoeba Bạn có quyền rằng các BLUP có thể đi ra tương quan ngay cả khi không có tham số tương quan trong mô hình. Nhưng tôi tin rằng với mục đích thử nghiệm, quy trình vẫn hoạt động như dự định (ví dụ: nó có tỷ lệ lỗi loại 1 danh nghĩa) vì chỉ có mô hình với tham số tương quan mới có thể kết hợp điều đó vào hàm khả năng và do đó "nhận tín dụng" cho điều đó . Đó là, ngay cả khi các BLUP xuất hiện tương quan trong mô hình đơn giản hơn, vẫn như thể các hiệu ứng không được khắc phục khi có liên quan đến tổng khả năng, do đó, thử nghiệm LR sẽ hoạt động. Tôi nghĩ :)
Jake Westfall

6

Bạn có thể kiểm tra mức ý nghĩa của các tham số mô hình, với sự trợ giúp của các khoảng tin cậy ước tính mà gói lme4 có confint.merModchức năng.

bootstrapping (xem ví dụ Khoảng tin cậy từ bootstrap )

> confint(m, method="boot", nsim=500, oldNames= FALSE)
Computing bootstrap confidence intervals ...
                                                           2.5 %     97.5 %
sd_(Intercept)|participant_id                         0.32764600 0.64763277
cor_conditionexperimental.(Intercept)|participant_id -1.00000000 1.00000000
sd_conditionexperimental|participant_id               0.02249989 0.46871800
sigma                                                 0.97933979 1.08314696
(Intercept)                                          -0.29669088 0.06169473
conditionexperimental                                 0.26539992 0.60940435 

hồ sơ khả năng (xem ví dụ Mối quan hệ giữa khả năng hồ sơ và khoảng tin cậy là gì? )

> confint(m, method="profile", oldNames= FALSE)
Computing profile confidence intervals ...
                                                          2.5 %     97.5 %
sd_(Intercept)|participant_id                         0.3490878 0.66714551
cor_conditionexperimental.(Intercept)|participant_id -1.0000000 1.00000000
sd_conditionexperimental|participant_id               0.0000000 0.49076950
sigma                                                 0.9759407 1.08217870
(Intercept)                                          -0.2999380 0.07194055
conditionexperimental                                 0.2707319 0.60727448

  • Cũng có một phương pháp 'Wald'nhưng điều này chỉ được áp dụng cho các hiệu ứng cố định.

  • Cũng tồn tại một số loại biểu thức anova (tỷ lệ khả năng) trong gói lmerTestđược đặt tên ranova. Nhưng tôi dường như không thể hiểu điều này. Sự phân phối của sự khác biệt về logLikabilities, khi giả thuyết null (phương sai không cho hiệu ứng ngẫu nhiên) là không phân phối chi bình phương (có thể khi số lượng người tham gia và thử nghiệm cao, thử nghiệm tỷ lệ có thể có ý nghĩa).


Phương sai trong các nhóm cụ thể

Để có được kết quả cho phương sai trong các nhóm cụ thể, bạn có thể xác định lại thông số

# different model with alternative parameterization (and also correlation taken out) 
fml1 <- "~ condition + (0 + control + experimental || participant_id) "

Nơi chúng tôi đã thêm hai cột vào khung dữ liệu (điều này chỉ cần thiết nếu bạn muốn đánh giá chức năng 'kiểm soát' và 'thử nghiệm' không tương quan(0 + condition || participant_id) sẽ không dẫn đến việc đánh giá các yếu tố khác nhau trong điều kiện là không tương quan)

#adding extra columns for control and experimental
d <- cbind(d,as.numeric(d$condition=='control'))
d <- cbind(d,1-as.numeric(d$condition=='control'))
names(d)[c(4,5)] <- c("control","experimental")

Hiện nay lmer sẽ cung cấp phương sai cho các nhóm khác nhau

> m <- lmer(paste("sim_1 ", fml1), data=d)
> m
Linear mixed model fit by REML ['lmerModLmerTest']
Formula: paste("sim_1 ", fml1)
   Data: d
REML criterion at convergence: 2408.186
Random effects:
 Groups           Name         Std.Dev.
 participant_id   control      0.4963  
 participant_id.1 experimental 0.4554  
 Residual                      1.0268  
Number of obs: 800, groups:  participant_id, 40
Fixed Effects:
          (Intercept)  conditionexperimental  
               -0.114                  0.439 

Và bạn có thể áp dụng các phương pháp hồ sơ cho những điều này. Ví dụ, hiện tại confint cung cấp khoảng tin cậy cho sự kiểm soát và phương sai ngoại lệ.

> confint(m, method="profile", oldNames= FALSE)
Computing profile confidence intervals ...
                                    2.5 %     97.5 %
sd_control|participant_id       0.3490873 0.66714568
sd_experimental|participant_id  0.3106425 0.61975534
sigma                           0.9759407 1.08217872
(Intercept)                    -0.2999382 0.07194076
conditionexperimental           0.1865125 0.69149396

Sự đơn giản

Bạn có thể sử dụng hàm khả năng để có được các so sánh nâng cao hơn, nhưng có nhiều cách để thực hiện xấp xỉ dọc đường (ví dụ: bạn có thể thực hiện kiểm tra anova / lrt-bảo thủ, nhưng đó có phải là điều bạn muốn không?).

Tại thời điểm này, nó làm cho tôi tự hỏi đâu là điểm thực sự của sự so sánh này (không phổ biến) giữa các phương sai. Tôi tự hỏi liệu nó bắt đầu trở nên quá tinh vi. Tại sao sự khác biệt giữa phương sai thay vì tỷ lệ giữa phương sai (liên quan đến phân phối F cổ điển)? Tại sao không chỉ báo cáo khoảng tin cậy? Chúng ta cần lùi lại một bước, và làm rõ dữ liệu và câu chuyện đáng lẽ phải kể, trước khi đi vào những con đường tiên tiến có thể là thừa và lỏng lẻo với vấn đề thống kê và những cân nhắc thống kê thực sự là chủ đề chính.

Tôi tự hỏi liệu người ta có nên làm nhiều hơn không chỉ đơn giản là nêu các khoảng tin cậy (mà thực tế có thể nói nhiều hơn một bài kiểm tra giả thuyết. Một bài kiểm tra giả thuyết không đưa ra câu trả lời nào nhưng không có thông tin nào về sự lây lan thực sự của dân số. làm cho bất kỳ sự khác biệt nhỏ được báo cáo là một sự khác biệt đáng kể). Để đi sâu hơn vào vấn đề (cho bất kỳ mục đích nào), tôi tin rằng, một câu hỏi nghiên cứu cụ thể hơn (được xác định hẹp) để hướng dẫn bộ máy toán học thực hiện các đơn giản hóa phù hợp (ngay cả khi một phép tính chính xác có thể khả thi hoặc khi nó có thể được xấp xỉ bằng mô phỏng / bootstrapping, ngay cả trong một số cài đặt, nó vẫn yêu cầu một số giải thích phù hợp). So sánh với bài kiểm tra chính xác của Fisher để giải quyết một câu hỏi (cụ thể) (về các bảng dự phòng) chính xác,

Ví dụ đơn giản

Để đưa ra một ví dụ về sự đơn giản có thể tôi đưa ra dưới đây so sánh (bằng mô phỏng) với một đánh giá đơn giản về sự khác biệt giữa hai phương sai nhóm dựa trên phép thử F được thực hiện bằng cách so sánh phương sai trong các phản ứng trung bình riêng lẻ và được thực hiện bằng cách so sánh mô hình hỗn hợp dẫn xuất phương sai.

j

Y^i,jN(μj,σj2+σϵ210)

σεσjj={1,2} ) là bằng nhau thì tỷ lệ cho phương sai cho 40 phương tiện trong tình trạng này 1 và phương sai của 40 có nghĩa là trong điều kiện 2 được phân phối theo phân bố F với bậc tự do 39 và 39 cho tử số và mẫu số.

Bạn có thể thấy điều này trong mô phỏng biểu đồ bên dưới, trong đó dành cho điểm F dựa trên mẫu có nghĩa là điểm F được tính dựa trên phương sai dự đoán (hoặc tổng sai số bình phương) từ mô hình.

example difference in exactness

σj=1=σj=2=0.5σϵ=1 .

Bạn có thể thấy rằng có một số khác biệt. Sự khác biệt này có thể là do thực tế là mô hình tuyến tính hiệu ứng hỗn hợp đang thu được tổng các lỗi bình phương (cho hiệu ứng ngẫu nhiên) theo một cách khác. Và các thuật ngữ lỗi bình phương này không còn được thể hiện dưới dạng phân phối Chi bình phương đơn giản, nhưng vẫn liên quan chặt chẽ và chúng có thể được xấp xỉ.

σj=1σj=2Y^i,jσjσϵ

example difference in power

σj=1=0.5σj=2=0.25σϵ=1

Vì vậy, mô hình dựa trên các phương tiện là rất chính xác. Nhưng nó ít mạnh mẽ hơn. Điều này cho thấy chiến lược chính xác phụ thuộc vào những gì bạn muốn / cần.

Trong ví dụ trên khi bạn đặt ranh giới đuôi bên phải là 2.1 và 3.1, bạn nhận được khoảng 1% dân số trong trường hợp phương sai bằng nhau (tương ứng 103 và 104 trong số 10 000 trường hợp) nhưng trong trường hợp phương sai không bằng nhau, các ranh giới này khác nhau rất nhiều (đưa ra 534 và 6716 trường hợp)

mã:

set.seed(23432)

# different model with alternative parameterization (and also correlation taken out)
fml1 <- "~ condition + (0 + control + experimental || participant_id) "
fml <- "~ condition + (condition | participant_id)"

n <- 10000

theta_m <- matrix(rep(0,n*2),n)
theta_f <- matrix(rep(0,n*2),n)

# initial data frame later changed into d by adding a sixth sim_1 column
ds <- expand.grid(participant_id=1:40, trial_num=1:10)
ds <- rbind(cbind(ds, condition="control"), cbind(ds, condition="experimental"))
  #adding extra columns for control and experimental
  ds <- cbind(ds,as.numeric(ds$condition=='control'))
  ds <- cbind(ds,1-as.numeric(ds$condition=='control'))
  names(ds)[c(4,5)] <- c("control","experimental")

# defining variances for the population of individual means
stdevs <- c(0.5,0.5) # c(control,experimental)

pb <- txtProgressBar(title = "progress bar", min = 0,
                    max = n, style=3)
for (i in 1:n) {

  indv_means <- c(rep(0,40)+rnorm(40,0,stdevs[1]),rep(0.5,40)+rnorm(40,0,stdevs[2]))
  fill <- indv_means[d[,1]+d[,5]*40]+rnorm(80*10,0,sqrt(1)) #using a different way to make the data because the simulate is not creating independent data in the two groups 
  #fill <- suppressMessages(simulate(formula(fml), 
  #                     newparams=list(beta=c(0, .5), 
  #                                    theta=c(.5, 0, 0), 
  #                                    sigma=1), 
  #                     family=gaussian, 
  #                     newdata=ds))
  d <- cbind(ds, fill)
  names(d)[6] <- c("sim_1")


  m <- lmer(paste("sim_1 ", fml1), data=d)
  m
  theta_m[i,] <- m@theta^2

  imeans <- aggregate(d[, 6], list(d[,c(1)],d[,c(3)]), mean)
  theta_f[i,1] <- var(imeans[c(1:40),3])
  theta_f[i,2] <- var(imeans[c(41:80),3])

  setTxtProgressBar(pb, i)
}
close(pb)

p1 <- hist(theta_f[,1]/theta_f[,2], breaks = seq(0,6,0.06))       
fr <- theta_m[,1]/theta_m[,2]
fr <- fr[which(fr<30)]
p2 <- hist(fr, breaks = seq(0,30,0.06))



plot(-100,-100, xlim=c(0,6), ylim=c(0,800), 
     xlab="F-score", ylab = "counts [n out of 10 000]")
plot( p1, col=rgb(0,0,1,1/4), xlim=c(0,6), ylim=c(0,800), add=T)  # means based F-score
plot( p2, col=rgb(1,0,0,1/4), xlim=c(0,6), ylim=c(0,800), add=T)  # model based F-score
fr <- seq(0, 4, 0.01)
lines(fr,df(fr,39,39)*n*0.06,col=1)
legend(2, 800, c("means based F-score","mixed regression based F-score"), 
       fill=c(rgb(0,0,1,1/4),rgb(1,0,0,1/4)),box.col =NA, bg = NA)
legend(2, 760, c("F(39,39) distribution"), 
       lty=c(1),box.col = NA,bg = NA)
title(expression(paste(sigma[1]==0.5, " , ", sigma[2]==0.5, " and ", sigma[epsilon]==1)))

Điều đó hữu ích nhưng dường như không giải quyết được câu hỏi về cách so sánh phương sai trong hai điều kiện.
amip nói rằng Phục hồi lại

@amoeba Tôi thấy rằng câu trả lời này đưa ra cốt lõi của vấn đề (về việc kiểm tra các thành phần phương sai ngẫu nhiên). Những gì OP muốn chính xác là khó đọc trong toàn bộ văn bản. "Phương sai đánh chặn ngẫu nhiên" đề cập đến điều gì? (số nhiều liên quan đến đánh chặn làm tôi bối rối) Một trường hợp có thể là sử dụng mô hình sim_1 ~ condition + (0 + condition | participant_id)"trong trường hợp bạn nhận được tham số hóa thành hai tham số (một cho mỗi nhóm) thay vì hai tham số một cho chặn và một cho hiệu ứng (mà cần được kết hợp cho các nhóm).
Sextus Empiricus

Mỗi đối tượng có một số phản ứng trung bình trong điều kiện A và một số phản ứng trung bình trong điều kiện B. Câu hỏi đặt ra là liệu phương sai giữa các đối tượng trong A là khác biệt so với phương sai giữa các đối tượng trong B.
amip nói Khôi phục Monica

Điều này không hoàn thành nhiệm vụ đặt ra trong tiêu đề "So sánh thành phần phương sai ngẫu nhiên giữa các cấp của một biến nhóm". Tôi nhận thấy rằng có một lỗi đánh máy khó hiểu trong phần câu hỏi mà tôi đã sửa. Tôi cũng đã cố gắng làm rõ hơn từ ngữ của câu hỏi.
Patrick S. Forscher

Có thể trả lời câu hỏi bằng cách sử dụng car::linearHypothesisTest( math.furman.edu/~dcs/cifts/math47/R/l Library / car / html / ,), cho phép người dùng kiểm tra các giả thuyết tùy ý với một mô hình được trang bị. Tuy nhiên, tôi phải sử dụng phương pháp của @ amoeba để có được cả hai lần chặn ngẫu nhiên trong cùng một mô hình được trang bị mô hình để có thể so sánh chúng với chức năng này. Tôi cũng không chắc chắn về tính hợp lệ của phương pháp.
Patrick S. Forscher

5

Một cách tương đối đơn giản có thể là sử dụng các thử nghiệm tỷ lệ khả năng thông qua anovanhư được mô tả trong lme4Câu hỏi thường gặp .

Chúng ta bắt đầu với một mô hình đầy đủ trong đó các phương sai không bị giới hạn (nghĩa là cho phép hai phương sai khác nhau) và sau đó khớp với một mô hình bị ràng buộc trong đó hai phương sai được giả sử là bằng nhau. Chúng tôi chỉ đơn giản so sánh chúng với anova()(lưu ý mà tôi đặt REML = FALSEmặc dù REML = TRUEvới anova(..., refit = FALSE)là hoàn toàn khả thi ).

m_full <- lmer(sim_1 ~ condition + (condition | participant_id), data=d, REML = FALSE)
summary(m_full)$varcor
 # Groups         Name                  Std.Dev. Corr  
 # participant_id (Intercept)           0.48741        
 #                conditionexperimental 0.26468  -0.419
 # Residual                             1.02677     

m_red <- lmer(sim_1 ~ condition + (1 | participant_id), data=d, REML = FALSE)
summary(m_red)$varcor
 # Groups         Name        Std.Dev.
 # participant_id (Intercept) 0.44734 
 # Residual                   1.03571 

anova(m_full, m_red)
# Data: d
# Models:
# m_red: sim_1 ~ condition + (1 | participant_id)
# m_full: sim_1 ~ condition + (condition | participant_id)
#        Df    AIC    BIC  logLik deviance  Chisq Chi Df Pr(>Chisq)
# m_red   4 2396.6 2415.3 -1194.3   2388.6                         
# m_full  6 2398.7 2426.8 -1193.3   2386.7 1.9037      2      0.386

Tuy nhiên, thử nghiệm này có khả năng bảo thủ . Ví dụ: Câu hỏi thường gặp nói:

Hãy nhớ rằng các thử nghiệm giả thuyết null dựa trên LRT là bảo thủ khi giá trị null (chẳng hạn như σ2 = 0) nằm trên ranh giới của không gian khả thi; trong trường hợp đơn giản nhất (phương sai hiệu ứng ngẫu nhiên đơn), giá trị p lớn gấp đôi so với mức cần thiết (Pinheiro và Bates 2000).

Có một số lựa chọn thay thế:

  1. χ2

  2. Mô phỏng phân phối chính xác bằng cách sử dụng RLRsim(như được mô tả trong Câu hỏi thường gặp).

Tôi sẽ trình bày tùy chọn thứ hai sau:

library("RLRsim")
## reparametrize model so we can get one parameter that we want to be zero:
afex::set_sum_contrasts() ## warning, changes contrasts globally
d <- cbind(d, difference = model.matrix(~condition, d)[,"condition1"])

m_full2 <- lmer(sim_1 ~ condition + (difference | participant_id), data=d, REML = FALSE)
all.equal(deviance(m_full), deviance(m_full2))  ## both full models are identical

## however, we need the full model without correlation!
m_full2b <- lmer(sim_1 ~ condition + (1| participant_id) + 
                   (0 + difference | participant_id), data=d, REML = FALSE)
summary(m_full2b)$varcor
 # Groups           Name        Std.Dev.
 # participant_id   (Intercept) 0.44837 
 # participant_id.1 difference  0.13234 
 # Residual                     1.02677 

## model that only has random effect to be tested
m_red <- update(m_full2b,  . ~ . - (1 | participant_id), data=d, REML = FALSE)
summary(m_red)$varcor
 # Groups         Name       Std.Dev.
 # participant_id difference 0.083262
 # Residual                  1.125116

## Null model 
m_null <- update(m_full2b,  . ~ . - (0 + difference | participant_id), data=d, REML = FALSE)
summary(m_null)$varcor
 # Groups         Name        Std.Dev.
 # participant_id (Intercept) 0.44734 
 # Residual                   1.03571 

exactRLRT(m_red, m_full2b, m_null)
# Using restricted likelihood evaluated at ML estimators.
# Refit with method="REML" for exact results.
# 
#   simulated finite sample distribution of RLRT.
#   
#   (p-value based on 10000 simulated values)
# 
# data:  
# RLRT = 1.9698, p-value = 0.0719

Như chúng ta có thể thấy, đầu ra cho thấy rằng với REML = TRUEchúng ta sẽ có kết quả chính xác. Nhưng đây là một bài tập cho người đọc.

Về phần thưởng, tôi không chắc chắn nếu RLRsimcho phép thử nghiệm đồng thời nhiều thành phần, nhưng nếu vậy, điều này có thể được thực hiện theo cách tương tự.


Trả lời bình luận:

θXθ0X

Tôi không chắc câu hỏi này có thể nhận được câu trả lời hợp lý.

  • Một đánh chặn ngẫu nhiên cho phép một sự khác biệt bình dị trong cấp độ tổng thể cho từng cấp độ của yếu tố nhóm. Ví dụ: nếu biến phụ thuộc là thời gian phản hồi, một số người tham gia nhanh hơn và một số người chậm hơn.
  • Độ dốc ngẫu nhiên cho phép mỗi cấp độ của yếu tố nhóm tạo ra hiệu ứng bình dị của yếu tố mà độ dốc ngẫu nhiên được ước tính. Ví dụ: nếu yếu tố là đồng đẳng, thì một số người tham gia có thể có hiệu ứng đồng thuận cao hơn những người khác.

Vì vậy, độ dốc ngẫu nhiên có ảnh hưởng đến đánh chặn ngẫu nhiên? Trong một số ý nghĩa, điều này có thể có ý nghĩa, vì chúng cho phép mỗi cấp độ của yếu tố nhóm tạo hiệu ứng hoàn toàn bình dị cho từng điều kiện. Cuối cùng, chúng tôi ước tính hai tham số idiosyncratic cho hai điều kiện. Tuy nhiên, tôi nghĩ rằng sự khác biệt giữa mức tổng thể được bắt bởi đánh chặn và hiệu ứng cụ thể theo điều kiện được bắt bởi độ dốc ngẫu nhiên là một điều quan trọng và sau đó độ dốc ngẫu nhiên không thể thực sự ảnh hưởng đến việc đánh chặn ngẫu nhiên. Tuy nhiên, nó vẫn cho phép mỗi cấp độ của yếu tố nhóm một trạng thái riêng biệt cho từng cấp độ của điều kiện.

Tuy nhiên, bài kiểm tra của tôi vẫn làm những gì câu hỏi ban đầu muốn. Nó kiểm tra xem sự khác biệt về phương sai giữa hai điều kiện có bằng không. Nếu nó bằng 0, thì phương sai trong cả hai điều kiện là bằng nhau. Nói cách khác, chỉ khi không cần độ dốc ngẫu nhiên thì phương sai trong cả hai điều kiện giống hệt nhau. Tôi hy vọng điều đó đúng.


1
Bạn sử dụng độ tương phản điều trị ( contr.treatment) trong đó điều kiện kiểm soát là tham chiếu (nghĩa là tính toán đánh chặn ngẫu nhiên). Tham số tôi đề xuất tôi sử dụng tổng tương phản (nghĩa là contr.sum) và đánh chặn là trung bình lớn. Tôi cảm thấy có ý nghĩa hơn khi kiểm tra xem sự khác biệt có phải là không khi đánh chặn là trung bình thay vì điều kiện kiểm soát (nhưng viết nó cho thấy nó có thể tương đối không quan trọng). Bạn có thể muốn đọc các trang từ 24 đến 26 của: singmann.org/doad/publications/iêu
Henrik

1
Cảm ơn! Các câu hỏi của tôi hơi khác nhau, mặc dù: (1) Câu trả lời của bạn dường như ngụ ý rằng câu hỏi của tôi giảm xuống "là độ dốc ngẫu nhiên cho điều kiện khác 0". Điều này có đúng không? (2) Nếu câu trả lời cho (1) là "có", thì điều này gợi ý cách giải thích khác về độ dốc ngẫu nhiên cho condition: nó cho phép chặn ngẫu nhiên thay đổi theo các cấp độ khác nhau condition. Điều này có đúng không?
Patrick S. Forscher

2
2: ví dụ của @amoeba đối với quy trình đề xuất của Henrik là chính xác. Henrik gần như đúng, nhưng anh ta so sánh các cặp mô hình sai. So sánh mô hình mà câu trả lời của Patrick là so sánh giữa các mô hình mà Henrik gọi là m_fullso với m_full2b. Đó là: phương sai của các phản ứng trung bình có điều kiện của người tham gia trong A so với B là không đồng đều nếu mối tương quan giữa độ dốc ngẫu nhiên là không khác biệt --- quan trọng là, theo tham số mã hóa tương phản tổng bằng không . Kiểm tra phương sai độ dốc ngẫu nhiên là không cần thiết. Cố gắng nghĩ làm thế nào để giải thích điều này ngắn gọn ...
Jake Westfall

2
Đây không thực sự là một lời giải thích phù hợp, nhưng nghiên cứu câu trả lời của tôi ở đây có thể làm sáng tỏ một chút về vấn đề này. Về cơ bản, tham số tương quan kiểm soát xem dòng hồi quy của người tham gia "quạt ra bên phải" (đúng dương) hay "quạt ra bên trái" (chỉnh âm.). Một trong hai điều này ngụ ý phương sai không đồng đều trong các phản ứng trung bình có điều kiện của người tham gia. Mã hóa tổng bằng 0 sau đó đảm bảo rằng chúng tôi đang tìm kiếm mối tương quan tại đúng điểm trên X
Jake Westfall

2
Tôi sẽ xem xét đăng câu trả lời bằng hình ảnh nếu tôi có thể tìm thấy thời gian ...
Jake Westfall

5

Mô hình của bạn

m = lmer(sim_1 ~ condition + (condition | participant_id), data=d)

đã cho phép phương sai giữa các chủ thể trong điều kiện điều khiển khác với phương sai giữa các chủ thể trong điều kiện thí nghiệm. Điều này có thể được làm rõ hơn bằng cách tái tham số tương đương:

m = lmer(sim_1 ~ 0 + condition + (0 + condition | participant_id), data=d)

Ma trận hiệp phương sai ngẫu nhiên bây giờ có một cách hiểu đơn giản hơn:

Random effects:
 Groups         Name                  Variance Std.Dev. Corr
 participant_id conditioncontrol      0.2464   0.4963       
                conditionexperimental 0.2074   0.4554   0.83

Ở đây, hai phương sai chính xác là hai phương sai mà bạn quan tâm: phương sai [giữa các chủ thể] của các phản ứng trung bình có điều kiện trong điều kiện kiểm soát và giống nhau trong điều kiện thí nghiệm. Trong tập dữ liệu mô phỏng của bạn, chúng là 0,25 và 0,21. Sự khác biệt được đưa ra bởi

delta = as.data.frame(VarCorr(m))[1,4] - as.data.frame(VarCorr(m))[2,4]

và bằng 0,039. Bạn muốn kiểm tra nếu nó khác đáng kể so với không.

EDIT: Tôi nhận ra rằng thử nghiệm hoán vị mà tôi mô tả dưới đây là không chính xác; nó sẽ không hoạt động như dự định nếu các phương tiện trong điều kiện thử nghiệm / điều kiện không giống nhau (vì khi đó các quan sát không thể trao đổi dưới giá trị null). Có thể là một ý tưởng tốt hơn để khởi động các chủ đề (hoặc chủ đề / vật phẩm trong trường hợp Tiền thưởng) và có được khoảng tin cậy chodelta .

Tôi sẽ cố gắng sửa mã dưới đây để làm điều đó.


Đề xuất dựa trên hoán vị gốc (sai)

Tôi thường thấy rằng người ta có thể tự cứu mình rất nhiều rắc rối bằng cách làm một bài kiểm tra hoán vị. Thật vậy, trong trường hợp này rất dễ thiết lập. Hãy cho phép điều khiển / điều kiện thí nghiệm riêng biệt cho từng đối tượng; sau đó bất kỳ sự khác biệt trong phương sai nên được loại bỏ. Lặp đi lặp lại nhiều lần sẽ mang lại phân phối null cho sự khác biệt.

(Tôi không lập trình bằng R; mọi người vui lòng viết lại phần sau theo kiểu R tốt hơn.)

set.seed(42)
nrep = 100
v = matrix(nrow=nrep, ncol=1)
for (i in 1:nrep)
{
   dp = d
   for (s in unique(d$participant_id)){             
     if (rbinom(1,1,.5)==1){
       dp[p$participant_id==s & d$condition=='control',]$condition = 'experimental'
       dp[p$participant_id==s & d$condition=='experimental',]$condition = 'control'
     }
   }
  m <- lmer(sim_1 ~ 0 + condition + (0 + condition | participant_id), data=dp)
  v[i,] = as.data.frame(VarCorr(m))[1,4] - as.data.frame(VarCorr(m))[2,4]
}
pvalue = sum(abs(v) >= abs(delta)) / nrep

p= =0,7nrep lên 1000 hoặc hơn.

Chính xác logic tương tự có thể được áp dụng trong trường hợp Tiền thưởng của bạn.


Siêu thú vị, cảm ơn bạn! Tôi sẽ phải suy nghĩ thêm về lý do tại sao việc xác định lại thông số của bạn hoạt động, vì đây dường như là cái nhìn sâu sắc chính của câu trả lời này.
Patrick S. Forscher

Thật kỳ lạ, các giá trị chặn theo từng nhóm trong câu trả lời của bạn dường như khác với các giá trị trong câu trả lời của @MartijnWeterings.
Patrick S. Forscher

@ PatrickS.Forscher Đó là bởi vì anh ta, tôi nghĩ, tạo ra một bộ dữ liệu khác nhau. Tôi có thể sử dụng sim_1 ~ 0 + condition + (0 + dummy(condition, "control") + dummy(condition, "experimental") | participant_id)công thức và nhận được kết quả giống như trong câu trả lời của tôi.
amip nói phục hồi Monica

1
@ PatrickS.Forscher Không, tôi đã sử dụng dữ liệu được tạo bởi mã của bạn (với hạt giống của bạn). Tôi chỉ đặt hạt giống thành 42 khi thực hiện kiểm tra hoán vị. Chính Martijn đã thay đổi tập dữ liệu, không phải tôi.
amip nói phục hồi Monica

1
Đề xuất này chắc chắn là âm thanh. Theo tôi nghĩ bạn đã có kinh nghiệm, việc thiết lập các bài kiểm tra hoán vị cho dữ liệu đa cấp không hoàn toàn đơn giản. Một cách tiếp cận tương tự dễ thực hiện hơn một chút sẽ là bootstrapping tham số, khá đơn giản để thực hiện với lme4 bằng cách sử dụng phương thức mô phỏng () của các đối tượng lmer được trang bị, tức là gọi mô phỏng (m) nhiều lần để xây dựng bootstrap phân phối. Chỉ là một ý tưởng để chơi xung quanh với.
Jake Westfall

0

Nhìn vào vấn đề này từ một góc nhìn hơi khác và bắt đầu từ dạng "chung" của mô hình hỗn hợp tuyến tính, chúng ta có

yTôijk= =μ+αj+dTôij+eTôijk,dTôi~N(0,Σ),eTôijk~N(0,σ2)
Ở đâu αj là hiệu ứng cố định của jđiều kiện và dTôi= =(dTôi1,Giáo dục,dTôiJ) là một vectơ ngẫu nhiên (một số người gọi nó là hiệu ứng ngẫu nhiên có giá trị vectơ, tôi nghĩ vậy) cho Tôingười tham gia jĐiều kiện thứ.
Trong ví dụ của bạn, chúng tôi có hai điều kiệnyTôi1kyTôi2k mà tôi sẽ biểu thị là MộtBtrong những gì sau đây. Vậy ma trận hiệp phương sai của vectơ ngẫu nhiên hai chiềudTôi có dạng chung

Σ= =[σMột2σMộtBσMộtBσB2]

không âm σMột2σB2.

Trước tiên chúng ta hãy xem phiên bản tái tham số hóa của Σ trông khi chúng ta sử dụng tổng tương phản.

Phương sai của đánh chặn, tương ứng với trung bình lớn, là

σ12: =Var (ý nghĩa lớn)= =Var(12(Một+B))= =14(Var(Một)+Var(B)+2Cov(Một,B)).

Phương sai của độ tương phản là

σ22:=Var(contrast)=Var(12(AB))=14(Var(A)+Var(B)2Cov(A,B)).

And the covariance between the intercept and the contrast is

σ12:=Cov(grand mean, contrast)=Cov(12(A+B),12(AB))=14(Var(A)Var(B)).

Thus, the re-parameterized Σ is

Σ=[σ12+σ22+2σ12σ12σ22σ12σ22σ12+σ222σ12]=[σA2σABσABσB2].

Σ can be decomposed into

Σ=[σ12σ12σ12σ12]+[σ22σ22σ22σ22]+2[σ1200σ12].

Setting the covariance parameter σ12 to zero we get

Σ=[σ12σ12σ12σ12]+[σ22σ22σ22σ22]=[σ12+σ22σ12σ22σ12σ22σ12+σ22]

which, as @Jake Westfall derived slightly differently, tests the hypothesis of equal variances when we compare a model without this covariance parameter to a model where the covariance parameter is still included/not set to zero.

Notably, introducing another crossed random grouping factor (such as stimuli) does not change the model comparison that has to be done, i.e., anova(mod1, mod2) (optionally with the argument refit = FALSE when you use REML estimation) where mod1 and mod2 are defined as @Jake Westfall did.

Taking out σ12 and the variance component for the contrast σ22 (what @Henrik suggests) results in

Σ=[σ12σ12σ12σ12]

which tests the hypothesis that the variances in the two conditions are equal and that they are equal to the (positive) covariance between the two conditions.


When we have two conditions, a model that fits a covariance matrix with two parameters in a (positive) compound symmetric structure can also be written as

# code snippet from Jake Westfall
d$contrast <- 2*(d$condition == 'experimental') - 1

# new model
mod3 <- lmer(sim_1 ~ contrast + (1 | participant_id) + (1 | contrast:participant_id), 
             data = d, REML = FALSE) 

or (using the categorical variable/factor condition)

mod4 <- lmer(sim_1 ~ condition + (1 | participant_id) + (1 | condition:participant_id), 
             data = d, REML = FALSE)

with

Σ=[σ12+σ22σ12σ12σ12+σ22]=[σ12σ12σ12σ12]+[σ2200σ22]

where σ12 and σ22 are the variance parameters for the participant and the participant-condition-combination intercepts, respectively. Note that this Σ has a non-negative covariance parameter.

Below we see that mod1, mod3, and mod4 yield equivalent fits:

# code snippet from Jake Westfall
d$contrast <- 2*(d$condition == 'experimental') - 1

mod1 <- lmer(sim_1 ~ contrast + (contrast || participant_id),
             data = d, REML = FALSE)

mod2 <- lmer(sim_1 ~ contrast + (contrast | participant_id),
             data = d, REML = FALSE)

# new models 
mod3 <- lmer(sim_1 ~ contrast + (1 | participant_id) + (1 | contrast:participant_id), 
             data = d, REML = FALSE) 

mod4 <- lmer(sim_1 ~ condition + (1 | participant_id) + (1 | condition:participant_id), 
             data = d, REML = FALSE)

anova(mod3, mod1)
# Data: d
# Models:
# mod3: sim_1 ~ contrast + (1 | participant_id) + (1 | contrast:participant_id)
# mod1: sim_1 ~ contrast + ((1 | participant_id) + (0 + contrast | participant_id))
#      Df    AIC    BIC  logLik deviance Chisq Chi Df Pr(>Chisq)
# mod3  5 2396.9 2420.3 -1193.5   2386.9                        
# mod1  5 2396.9 2420.3 -1193.5   2386.9     0      0          1

anova(mod4, mod3)
# Data: d
# Models:
# mod4: sim_1 ~ condition + (1 | participant_id) + (1 | condition:participant_id)
# mod3: sim_1 ~ contrast + (1 | participant_id) + (1 | contrast:participant_id)
#      Df    AIC    BIC  logLik deviance Chisq Chi Df Pr(>Chisq)
# mod4  5 2396.9 2420.3 -1193.5   2386.9                        
# mod3  5 2396.9 2420.3 -1193.5   2386.9     0      0          1

With treatment contrasts (the default in R) the re-parameterized Σ is

Σ=[σ12σ12+σ12σ12+σ12σ12+σ22+2σ12]=[σ12σ12σ12σ12]+[000σ22]+[0σ12σ122σ12]

where σ12 is the variance parameter for the intercept (condition A), σ22 the variance parameter for the contrast (AB), and σ12 the corresponding covariance parameter.

We can see that neither setting σ12 to zero nor setting σ22 to zero tests (only) the hypothesis of equal variances.

However, as shown above, we can still use mod4 to test the hypothesis as changing the contrasts has no impact on the parameterization of Σ for this model.

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.