Âm mưu để kiểm tra giả định Homoskedasticity cho các biện pháp lặp lại ANOVA trong R


7

Tôi đã chạy một phép đo lặp lại hoàn toàn bên trong đối tượng ANOVA bằng cách sử dụng aov()chức năng. Biến phụ thuộc của tôi thường không được phân phối, vì vậy tôi rất thích chạy thử nghiệm giả định trên phân tích của mình. Có vẻ như chỉ gọi plot()đầu ra không hoạt động cho các biện pháp lặp lại, vì vậy tôi đã tự lấy phần dư và các giá trị được trang bị cho một mô hình quan tâm và đã vẽ chúng với nhau. Tôi giả định rằng đây là cách tôi dự định kiểm tra giả định về Homoskedasticity.

Cốt truyện đi ra với 2 dải dọc (vui lòng xem hình ảnh bên dưới). Hóa ra các giá trị được trang bị đều tập trung xung quanh 2 giá trị (mặc dù theo ==chúng không chính xác bằng nhau), trong đó một giá trị âm của giá trị kia.

Tôi có 2 câu hỏi:

1) Đây có phải là cách chính xác để kiểm tra thủ công tính đồng nhất giả định? Nếu không, làm thế nào tôi đi về nó từ các thiết kế đo lặp lại (vì chỉ gọi plot()không hoạt động)?

2) Nếu đúng, cốt truyện này nói với tôi điều gì? Tại sao các giá trị được trang bị rất cụm? Tôi có thể kết luận gì từ nó?

Cảm ơn đống cho bất kỳ đầu vào ở đây. Ngoài ra, nếu bạn biết các cách tốt hơn để kiểm tra (tốt nhất là vẽ đồ thị) cho các giả định trong rm-ANOVAs, đó cũng sẽ là thông tin hữu ích.

Tôi đã bao gồm một số dữ liệu giả ở đây để sao chép kịch bản:

#Create mock data (there's probably a more efficient way to do this.. would also be nice to know! :) )
p <- sort(rep(1:20,8))
y <- rep(rep(1:2,4),20)
z <- rep(rep(c(1,1,2,2),2),20)
w <- rep(c(1,1,1,1,2,2,2,2),20)
x <- rnorm(160,10,2)

d <- data.frame(x,p=factor(p),y=factor(y),z=factor(z),w=factor(w))

#Run repeated-measures ANOVA
ex.aov <- aov(x ~ y*z*w + Error(p/(y*z*w)), d)

#Try to plot full object (doesn't work)
plot(ex.aov)

#Try to plot section of object (doesn't work)
plot(ex.aov[["p:y:z"]])

#Plot residuals against fitted (custom "skedasticity" plot - works)
plot(residuals(ex.aov[["p:y:z"]])~fitted(ex.aov[["p:y:z"]]))

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

Bắt đầu chỉnh sửa

Trước thông tin được cung cấp bởi @Stefan, tôi đã thêm một số chi tiết bổ sung bên dưới, sử dụng cấu trúc dữ liệu được cải thiện mà anh ấy đề xuất:

# Set seed to make it reproducible
set.seed(12)

#New variable names and generation
subj <- sort(factor(rep(1:20,8)))
x1 <- rep(c('A','B'),80)
x2 <- rep(c('A','B'),20,each=2)
x3 <- rep(c('A','B'),10, each=4)
outcome <- rnorm(80,10,2)

d3 <- data.frame(outcome,subj,x1,x2,x3)

#Repeated measures ANOVA
ex.aov <- aov(outcome ~ x1*x2*x3 + Error(subj/(x1*x2*x3)), d3)

#proj function
ex.aov.proj <- proj(ex.aov)

# Check for normality by using last error stratum
qqnorm(ex.aov.proj[[9]][, "Residuals"])
# Check for heteroscedasticity by using last error stratum
plot(ex.aov.proj[[9]][, "Residuals"])

Các ô kết quả dưới đây:

Lặp đi lặp lại biện pháp kiểm tra tính bình thường?

Lặp đi lặp lại các biện pháp kiểm tra homoskedasticity?

Bất cứ ai cũng có thể giải thích những hình ảnh trên (đặc biệt là hình ảnh cuối cùng)? Có vẻ như có cụm và cấu trúc mô hình. Nó có thể được sử dụng để suy ra sự hiện diện của heteroskedasticity?


" Tôi cho rằng đây là cách tôi sẽ vẽ cho" skedasticity "(xin lỗi nếu tôi sử dụng thuật ngữ sai ở đó). " .... bạn đang cố gắng đạt được gì bằng tiếng Anh?
Glen_b -Reinstate Monica

@Glen_b Xin lỗi vì không rõ ràng. Tôi đang cố gắng để kiểm tra giả định về phân tích của tôi. Dữ liệu của tôi (biến phụ thuộc) thường không được phân phối và về cơ bản tôi muốn kiểm tra xem liệu thực tế này có vi phạm giả định về tính quy tắc của phần dư hay không và / hoặc giả định về tính đồng nhất. Tôi sợ sự hiểu biết thống kê của tôi về homoskedasticity không mạnh mẽ; Tôi chỉ biết nó sẽ trông như thế nào khi được vẽ, và đó là một giả định cho một mô hình hợp lệ. ... Nếu tôi bằng cách nào đó sủa sai cây ở đây thì cũng rất vui được biết ...
KerrBer

Cảm ơn cốt truyện và bình luận; Họ giúp. Bạn có thể có thể chỉnh sửa để bao gồm thông tin trong bình luận của bạn, rất hữu ích.
Glen_b -Reinstate Monica

Câu trả lời:


10

Tôi giả sử rằng một mô hình được trang bị sử dụng Error()chức năng trong aov()sẽ không hoạt động khi sử dụng plot()vì bạn sẽ nhận được nhiều hơn một tầng lỗi mà bạn có thể chọn. Bây giờ theo thông tin này ở đây , người ta nên sử dụng proj()hàm sẽ cung cấp cho bạn phần dư cho mỗi tầng lỗi, sau đó có thể được sử dụng cho các ô chẩn đoán.

Chỉnh sửa 1 bắt đầu

Thông tin thêm về các mô hình đa tầng và proj()chức năng được đưa ra trong Venables và Ripley, trang 284 (nhưng bắt đầu từ trang 281): Phần còn lại trong các phân tích đa tầng: Dự đoán . Trong câu thứ hai họ viết (tôi nhấn mạnh bằng chữ in đậm):

Do đó fitted(oats.aov[[4]])resid(oats.aov[[4]])là các vectơ có chiều dài 54 biểu thị các giá trị được trang bị và phần dư từ tầng cuối cùng , dựa trên 54 hàm tuyến tính trực giao của vectơ dữ liệu gốc. Không thể liên kết chúng một cách độc đáo với các âm mưu của thí nghiệm ban đầu. Hàm projnày lấy một đối tượng mô hình được trang bị và tìm các hình chiếu của vectơ dữ liệu gốc lên các không gian con được xác định bởi mỗi dòng trong phân tích các bảng phương sai (bao gồm, đối với các đối tượng đa tầng, bảng bị triệt tiêu chỉ có ý nghĩa lớn). Kết quả là một danh sách các ma trận, một cho mỗi tầng, trong đó các tên cột cho mỗi là các tên thành phần từ phân tích các bảng phương sai.

Ví dụ của bạn có nghĩa là:

ex.aov.proj <- proj(ex.aov)

# Check number of strata 
summary(ex.aov.proj)

# Check for normality by using last error stratum
qqnorm(ex.aov.proj[[9]][, "Residuals"])
# Check for heteroscedasticity by using last error stratum
plot(ex.aov.proj[[9]][, "Residuals"])

Tuy nhiên, điều này cũng sẽ dẫn đến các âm mưu mà tôi không thể giải thích đầy đủ (đặc biệt là cái thứ hai).

Trong trường hợp của họ, tầng cuối cùng là Withintầng. Vì mô hình của bạn không thể ước tính điều này (có lẽ là do thời hạn lỗi của bạn), tôi không chắc chắn nếu chỉ sử dụng tầng cuối cùng của bạn là hợp lệ.

Hy vọng người khác có thể làm rõ.

Chỉnh sửa 1 kết thúc

Chỉnh sửa 2 bắt đầu

Theo nguồn kiểm tra dư này để đánh giá tính chuẩn và độ không đồng nhất nên được thực hiện mà không có Error()chức năng.

Để kiểm tra các giả định, bạn không cần sử dụng thuật ngữ lỗi. Bạn có thể thêm thuật ngữ mà không có lỗi, nhưng các bài kiểm tra F đều sai. Kiểm tra giả định là OK, tuy nhiên.

Điều này có vẻ hợp lý với tôi nhưng tôi hy vọng người khác có thể làm rõ.

Chỉnh sửa 2 kết thúc

Đề nghị thay thế của tôi:

Đầu tiên, tôi đã thay đổi tập dữ liệu của bạn một chút và đặt một hạt giống để làm cho nó có thể tái tạo (có thể hữu ích cho một số vấn đề bạn gặp phải trong tương lai):

# Set seed to make it reproducible
set.seed(12)

# I changed the names of your variables to make them easier to remember
# I also deleted a few nested `rep()` commands. Have a look at the `each=` argument.
subj <- sort(factor(rep(1:20,8)))
x1 <- rep(c('A','B'),80)
x2 <- rep(c('A','B'),20,each=2)
x3 <- rep(c('A','B'),10, each=4)
outcome <- rnorm(80,10,2)

d3 <- data.frame(outcome,subj,x1,x2,x3)

Thứ hai, tôi đã sử dụng mô hình hiệu ứng hỗn hợp tuyến tính thay vì bạn có các biện pháp lặp lại và do đó, một thuật ngữ ngẫu nhiên bạn có thể sử dụng:

require(lme4)
# I specified `subj` as random term to account for the repeated measurements on subject.
m.lmer<-lmer(outcome ~ x1*x2*x3 + (1|subj), data = d3)
summary(m.lmer)

# Check for heteroscedasticity
plot(m.lmer)

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

# or
boxplot(residuals(m.lmer) ~ d3$x1 + d3$x2 + d3$x3)

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

# Check for normality
qqnorm(residuals(m.lmer))

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

Sử dụng afexgói bạn cũng có thể nhận được các hiệu ứng cố định ở định dạng bảng ANOVA (bạn cũng có thể sử dụng Anova()chức năng từ cargói như một tùy chọn khác):

require(afex)
mixed(outcome ~ x1*x2*x3 + (1|subj), data = d3, method="LRT")

Fitting 8 (g)lmer() models:
[........]
    Effect df    Chisq p.value
1       x1  1     0.04     .84
2       x2  1     2.53     .11
3       x3  1  7.68 **    .006
4    x1:x2  1  8.34 **    .004
5    x1:x3  1 10.51 **    .001
6    x2:x3  1     0.31     .58
7 x1:x2:x3  1     0.12     .73

Kiểm tra ?mixedcác tùy chọn khác nhau mà bạn có thể chọn. Cũng liên quan đến các mô hình hỗn hợp, có rất nhiều thông tin ở đây về Xác thực chéo.


Ồ, tôi không có ý tưởng về vấn đề số nguyên. Điều này thay đổi cấu trúc của đầu ra, nhưng điều này cũng sẽ thay đổi kết quả (một thử nghiệm nhanh cho thấy điều đó đúng, nhưng tôi muốn chắc chắn)? Điều này rất quan trọng trong trường hợp của tôi vì: 1) Tôi tải dữ liệu của mình từ MATLAB, nghĩa là nó được tải dưới dạng một khung dữ liệu với các biến số. Có cách nào để chuyển đổi các biến này thành các yếu tố hậu hoc sẽ tránh được vấn đề aov () không? 2) Tôi đã xác thực chéo kết quả của mình bằng ANOVA đo lặp lại trong SPSS và nhận được kết quả tương tự. Nếu vấn đề số nguyên đến yếu tố thay đổi kết quả, điều này thật lạ.
KerrBer

1
@Stefan bạn có thể cung cấp thêm thông tin về factortrong aov?
Tim

1
@Stefan Tôi cũng đánh giá cao một số giải thích về các vấn đề với factortrong aov. Mặc dù các ví dụ của bạn hoạt động, tôi chỉ cố gắng áp dụng đề xuất của bạn cho dữ liệu của mình và nó không thay đổi gì cả. Một cách rõ ràng, tôi đã áp dụng các điều sau đây cho các biến số của mình trong một khung dữ liệu (2 ví dụ bên dưới):results$Inversion <- as.character(results$Inversion) results$Inversion <- factor(results$Inversion, levels=c(0,1,2), labels=c("control", "upright", "inverted")) results$ID <- as.character(results$ID) results$ID <- factor(results$ID, levels=c(101:131), labels=as.character(1:31))
KerrBer

1
@Stefan về cơ bản, sự khác biệt giữa ex.aov0ex.aov1là trong trường hợp đầu tiên bạn coi pfactorbiến giả, và trong trường hợp thứ hai, bạn coi plà biến liên tục. Vì vậy, aovhoạt động tốt, không có lỗi và đó là lỗi mã hóa của bạn. Vui lòng chỉnh sửa câu trả lời của bạn để xóa phần gây hiểu lầm về "lỗi" trong aov vì không có lỗi và sẽ không có bất kỳ thay đổi nào nếu bạn đang sử dụng các số nguyên được chuyển đổi thành các yếu tố hoặc vectơ ký tự được chuyển đổi thành các yếu tố.
Tim

1
@KerrBer, tôi đã chuẩn bị một cốt truyện khác để hiểu rõ hơn về mô hình mà chúng ta thấy nhưng tôi không hiểu cách tính các phần dư này ... Có một liên kết khác mà tôi đã tìm thấy Để kiểm tra các giả định, bạn không cần phải sử dụng thuật ngữ lỗi. . Tôi sẽ thêm điều này vào câu trả lời của tôi và có thể người khác có thể giải thích.
Stefan

0

Từ chối trách nhiệm đầy đủ: Tôi thích sử dụng R cho nhiều phân tích khác nhau, nhưng tôi không thích thực hiện ANOVAs trong R.

Câu hỏi 1 : Trong bối cảnh phân tích của ANOVAs, tôi quen thuộc hơn với việc đánh giá giả định này thông qua các thử nghiệm về tính đồng nhất của phương sai, so với âm mưu đồng nhất / không đồng nhất và đánh giá trực quan. Mặc dù có nhiều thử nghiệm về tính đồng nhất của phương sai, nhưng thử nghiệm tôi thấy nhiều nhất là thử nghiệm của Levene. Trong R, nó xuất hiện bạn có thể làm điều này thông qua cargói bằng cách sử dụng leveneTestchức năng.

Dựa trên dữ liệu của bạn, nó sẽ trông như thế này : leveneTest(x ~ y*z*w, d). Lưu ý rằng tôi không nghĩ rằng bạn có thể chỉ định cấu trúc lỗi đo lường lặp lại trong chức năng này và nói thật, tôi không chắc chắn nếu / đến mức độ nào quan trọng đối với thử nghiệm của Levene. So sánh với các phần mềm phân tích ổn định khác, có vẻ như có một số thay đổi về cách thức kiểm tra của Levene trong các biện pháp lặp lại ANOVA được thực hiện. SPSS, chẳng hạn, cung cấp các thử nghiệm riêng biệt giữa các nhóm của Levene cho từng cấp độ đo lặp lại của bạn, trong khi leveneTestchức năng cung cấp một thử nghiệm toàn diện cho tất cả các cấp của tất cả các biến - phần mềm khác cũng có thể có các cách tiếp cận khác. Dù sao, cách tiếp cận SPSS dường như cũng bỏ qua sự phụ thuộc của dữ liệu bằng cách chỉ đánh giá tính đồng nhất giữa các nhóm của phương sai.

Câu hỏi 2 : Nếu bạn định sử dụng một phép thử về tính đồng nhất của phương sai - Levene hay nói cách khác - có thể sẽ có nhiều thông tin hơn để tạo ra các biểu đồ đơn giản về phương sai theo từng cấp độ của các biến số của bạn (bởi vì đó là những gì của bạn tính đồng nhất của kiểm tra phương sai được đánh giá rõ ràng). Bạn có thể thực hiện điều này một cách dễ dàng bằng cách ước tính phương sai của kết quả của mình cho mọi kết hợp cấp độ biến số của bạn và sau đó vẽ chúng trong cơ sở R hoặc sử dụng ggplot2gói.


3
Trên một lưu ý ngược lại: Tôi đã (nhiều lần) khuyên ở đây chống lại việc kiểm tra giả định một cách rõ ràng.
Glen_b -Reinstate Monica

1
@Glen_b bạn có thể liên kết với một lý do tại sao?
jsakaluk
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.