Làm thế nào để người ta thực hiện SS ANOVA loại III trong R với mã tương phản?


26

Vui lòng cung cấp mã R cho phép một người tiến hành ANOVA giữa các chủ thể với độ tương phản -3, -1, 1, 3. Tôi hiểu rằng có một cuộc tranh luận về loại Sum of Squares (SS) thích hợp cho một phân tích như vậy. Tuy nhiên, vì loại SS mặc định được sử dụng trong SAS và SPSS (Loại III) được coi là tiêu chuẩn trong khu vực của tôi. Do đó, tôi muốn kết quả phân tích này khớp hoàn hảo với những gì được tạo ra bởi các chương trình thống kê đó. Để được chấp nhận, một câu trả lời phải gọi trực tiếp aov (), nhưng các câu trả lời khác có thể được bỏ phiếu (đặc biệt nếu chúng dễ hiểu / sử dụng).

sample.data <- data.frame(IV=rep(1:4,each=20),DV=rep(c(-3,-3,1,3),each=20)+rnorm(80))

Chỉnh sửa: Xin lưu ý, độ tương phản tôi yêu cầu không phải là độ tương phản tuyến tính hoặc đa thức đơn giản mà là độ tương phản xuất phát từ dự đoán lý thuyết, tức là loại tương phản được thảo luận bởi Rosenthal và Rosnow.


5
Tôi hiểu rằng bạn cần tổng loại III, nhưng bài viết này ( stats.ox.ac.uk/pub/MASS3/Exegeses.pdf ) là một bài đọc tốt. Nó minh họa một số điểm thú vị.
suncoolsu

Liên quan đến câu hỏi của bạn, bạn có thể quan tâm đến cuộc thảo luận sau: stats.stackexchange.com/questions/60362/ . Sự lựa chọn giữa ANOVA loại I, II và III không dễ dàng như người ta tưởng.
phx

Đánh giá cao câu hỏi của bạn là hữu ích ở chỗ nó gây ra một số câu trả lời đã học, nhưng tôi cũng lưu ý rằng bạn đã đồng ý với người trả lời về cơ bản nói rằng tiền đề của câu hỏi là không chính xác. Tôi hy vọng tôi đang tóm tắt vị trí của StaGuy khi nói rằng độ tương phản được xác định là theo định nghĩa "loại I" và thảo luận về các loại khác chỉ có liên quan khi đánh giá thống kê hồi quy từng phần, có lẽ quan trọng nhất khi cho phép "máy thực hiện lái xe" bằng phương pháp tự động.
DWin

@DWin: Tôi không chắc chắn tôi hoàn toàn theo dõi bạn. Người ta có thể sử dụng hợp pháp các loại SS khác mà không cần để 'máy thực hiện việc lái xe' (ít nhất là tôi hiểu cụm từ đó). Tôi có thể hơi khó chịu ở đây, nhưng nếu bộ nhớ phục vụ, các loại khác có thể có liên quan khi không sử dụng hồi quy một phần. Ví dụ, Type III SS không tạo ra một phần các hiệu ứng chính trong tương tác. Sự khác biệt giữa các loại có vấn đề chính xác bởi vì Loại III không một phần trong khi Loại I thì có. Vấn đề như đã nêu chỉ bao gồm một sự tương phản duy nhất và do đó, sự khác biệt giữa các loại SS là / là tranh luận.
russellpierce

Tôi hiểu rằng lý do được đưa ra bởi SAS khi chọn SSS loại III (và đây dường như là lý do tại sao mọi người nghĩ rằng loại III được ưa thích) là nó hỗ trợ tốt hơn cho quá trình lựa chọn lùi và tiến.
DWin

Câu trả lời:


22

Loại III tổng bình phương cho ANOVA có sẵn thông qua Anova()chức năng từ gói xe hơi .

Mã hóa tương phản có thể được thực hiện theo nhiều cách, bằng cách sử dụng C(), contr.*họ (như được chỉ định bởi @nico) hoặc trực tiếp contrasts()hàm / đối số. Đây là chi tiết trong §6.2 (trang 144-151) của Thống kê ứng dụng hiện đại với S (Springer, 2002, 4th ed.). Lưu ý rằng đó aov()chỉ là một chức năng bao bọc cho lm()chức năng. Thật thú vị khi người ta muốn kiểm soát thuật ngữ lỗi của mô hình (như trong thiết kế bên trong chủ đề), nhưng nếu cả hai đều mang lại kết quả như nhau (và bất kể cách nào bạn phù hợp với mô hình của mình, bạn vẫn có thể xuất ANOVA hoặc LM- như tóm tắt với summary.aovhoặc summary.lm).

Tôi không có SPSS để so sánh hai kết quả đầu ra, nhưng đại loại như

> library(car)
> sample.data <- data.frame(IV=factor(rep(1:4,each=20)),
                            DV=rep(c(-3,-3,1,3),each=20)+rnorm(80))
> Anova(lm1 <- lm(DV ~ IV, data=sample.data, 
                  contrasts=list(IV=contr.poly)), type="III")
Anova Table (Type III tests)

Response: DV
            Sum Sq Df F value    Pr(>F)    
(Intercept)  18.08  1  21.815  1.27e-05 ***
IV          567.05  3 228.046 < 2.2e-16 ***
Residuals    62.99 76                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1 

là giá trị để thử trong trường hợp đầu tiên.

Về mã hóa nhân tố trong R so với SAS: R coi mức cơ sở hoặc mức tham chiếu là cấp độ đầu tiên theo thứ tự từ điển, trong khi đó, SAS xem xét cấp độ cuối cùng. Vì vậy, để có được kết quả tương đương, bạn phải sử dụng contr.SAS()hoặc theo relevel()hệ số R của bạn.


1
Tôi không nghĩ câu trả lời này sử dụng độ tương phản -3, -1,1,3 mà tôi đã chỉ định cũng như dường như không cung cấp thử nghiệm độ tương phản 1 df.
russellpierce

@drknexus Vâng, bạn nói đúng. Đã viết quá nhanh. Một cái gì đó như Anova(lm(DV ~ C(IV, c(-3,-1,1,3),1), data=sample.data), type="III")nên được tốt hơn. Xin vui lòng cho tôi biết nếu điều này ok với bạn.
chl

Cảm ơn! Điều đó có vẻ ổn Tôi sẽ xác nhận nó chống lại SPSS vào ngày mai và lấy lại cho bạn.
russellpierce

1
BTW, hãy xem gói ez ( cran.r-project.org/web/packages/ez/index.html ) để gói mã Anova ...
Tal Galili

2
@drknexus: Nếu chỉ có một trang yêu cầu tính năng & trang gửi vấn đề cho ez ... github.com/mike-lawrence/ez/issues :)
Mike Lawrence

11

Điều này có thể trông giống như một chút tự quảng cáo (và tôi cho rằng nó là). Nhưng tôi đã phát triển gói lsmeans cho R (có sẵn trên CRAN) được thiết kế để xử lý chính xác loại tình huống này. Đây là cách nó hoạt động cho ví dụ của bạn:

> sample.data <- data.frame(IV=rep(1:4,each=20),DV=rep(c(-3,-3,1,3),each=20)+rnorm(80))
> sample.aov <- aov(DV ~ factor(IV), data = sample.data)

> library("lsmeans")
> (sample.lsm <- lsmeans(sample.aov, "IV"))
 IV    lsmean        SE df   lower.CL  upper.CL
  1 -3.009669 0.2237448 76 -3.4552957 -2.564043
  2 -3.046072 0.2237448 76 -3.4916980 -2.600445
  3  1.147080 0.2237448 76  0.7014539  1.592707
  4  3.049153 0.2237448 76  2.6035264  3.494779

> contrast(sample.lsm, list(mycon = c(-3,-1,1,3)))
 contrast estimate       SE df t.ratio p.value
 mycon    22.36962 1.000617 76  22.356  <.0001

Bạn có thể chỉ định độ tương phản bổ sung trong danh sách nếu bạn muốn. Trong ví dụ này, bạn sẽ nhận được kết quả tương tự với độ tương phản đa thức tuyến tính tích hợp:

> con <- contrast(sample.lsm, "poly")
> con
 contrast   estimate        SE df t.ratio p.value
 linear    22.369618 1.0006172 76  22.356  <.0001
 quadratic  1.938475 0.4474896 76   4.332  <.0001
 cubic     -6.520633 1.0006172 76  -6.517  <.0001

Để xác nhận điều này, lưu ý rằng "poly"đặc tả chỉ đạo nó gọi poly.lsmc, điều này tạo ra các kết quả sau:

> poly.lsmc(1:4)
  linear quadratic cubic
1     -3         1    -1
2     -1        -1     3
3      1        -1    -3
4      3         1     1

Nếu bạn muốn làm một bài kiểm tra chung về một số tương phản, sử dụng testchức năng với joint = TRUE. Ví dụ,

> test(con, joint = TRUE)

Điều này sẽ tạo ra một thử nghiệm "loại III". Không giống như car::Anova(), nó sẽ làm điều đó một cách chính xác bất kể mã hóa tương phản được sử dụng trong giai đoạn phù hợp với mô hình. Điều này là do các hàm tuyến tính đang được thử nghiệm được chỉ định trực tiếp thay vì ngầm thông qua việc giảm mô hình. Một tính năng bổ sung là trường hợp phát hiện độ tương phản phụ thuộc tuyến tính, và thống kê kiểm tra chính xác và mức độ tự do được tạo ra.



7

Khi bạn đang thực hiện tương phản, bạn đang thực hiện một tổ hợp tuyến tính cụ thể, đã nêu có nghĩa trong phạm vi của thuật ngữ lỗi thích hợp. Như vậy, khái niệm "Loại SS" không có ý nghĩa với sự tương phản. Mỗi độ tương phản về cơ bản là hiệu ứng đầu tiên sử dụng SS loại I. "Loại SS" có liên quan đến những gì được chia ra hoặc được tính bởi các điều khoản khác. Đối với sự tương phản, không có gì được chia ra hoặc chiếm. Sự tương phản đứng một mình.


Bạn hoàn toàn đúng.
russellpierce

3

Thực tế là các bài kiểm tra loại III được sử dụng ở nơi bạn làm việc là lý do yếu nhất để tiếp tục sử dụng chúng. SAS đã làm thiệt hại lớn cho số liệu thống kê về vấn đề này. Lời chú giải của Bill Venables, được tham chiếu ở trên, là một nguồn tài nguyên tuyệt vời về điều này. Chỉ cần nói không với loại III; nó dựa trên một khái niệm sai lầm về sự cân bằng và có sức mạnh thấp hơn do trọng lượng ngớ ngẩn của các tế bào trong trường hợp mất cân bằng.

Một cách tự nhiên hơn và ít lỗi hơn để có được độ tương phản chung và để có thể mô tả những gì bạn đã làm, được cung cấp bởi hàm rmsgói R. contrast.rmsSự tương phản có thể rất phức tạp nhưng với người dùng thì rất đơn giản vì chúng được nêu dưới dạng khác biệt về giá trị tiên đoán. Các xét nghiệm và tương phản đồng thời được hỗ trợ. Điều này xử lý các hiệu ứng hồi quy phi tuyến, hiệu ứng tương tác phi tuyến, tương phản một phần, tất cả các loại sự vật.


Đó là tất cả tốt và tốt cho bạn như một người có uy tín để nói. Những người khác không có ý định không đồng ý với người đánh giá. Vì cách hiểu của các số liệu thống kê khác nhau, bạn sẽ yêu cầu dân gian mới đứng trên nguyên tắc và phải chịu một chi phí không hợp lý. Tôi nói rằng như một người đã chết chia sẻ thời gian của tôi trên đỉnh đồi (và tương tự) này. Thay đổi IMO trên mặt trận này là trách nhiệm của người gác cổng, tức là biên tập viên và người đánh giá.
russellpierce

Những người thực sự giỏi về dữ liệu có nhiều lựa chọn công việc và có thể có tùy chọn làm việc trong các lĩnh vực mà kỹ năng và ý kiến ​​của họ được tôn trọng.
Frank Harrell

1
... Và đó là những gì tôi làm bây giờ. Nhưng những người đang đến câu hỏi này sẽ không thường xuyên thuộc lớp đó. Giống như tôi đã 7 năm trước. Tôi chỉ ủng hộ một chút đồng cảm cho người mới và hoàn cảnh của họ.
russellpierce

2

Hãy thử lệnh Anova trong thư viện xe hơi. Sử dụng đối số type = "III", vì nó mặc định là loại II. Ví dụ:

library(car)
mod <- lm(conformity ~ fcategory*partner.status, data=Moore, contrasts=list(fcategory=contr.sum, partner.status=contr.sum))
Anova(mod, type="III")

3
Tôi biết Moore đang ở trong thư viện xe hơi, nhưng khi dữ liệu mẫu được cung cấp, người hỏi sẽ dễ hiểu câu trả lời của bạn hơn nếu bạn sử dụng dữ liệu mẫu.
russellpierce

0

Cũng tự quảng cáo, tôi đã viết một chức năng cho chính xác điều này: https://github.com/samuelfranssens/type3anova

Cài đặt như sau:

library(devtools)
install_github(samuelfranssens/type3anova)
library(type3anova)

sample.data <- data.frame(IV=rep(1:4,each=20),DV=rep(c(-3,-3,1,3),each=20)+rnorm(80))

type3anova(lm(DV ~ IV, data = sample.data))

Bạn cũng sẽ cần phải carcài đặt gói.


Làm thế nào bạn sẽ áp dụng điều này cho phần tương phản của câu hỏi?
russellpierce

1
Xin lỗi, tôi đã không đọc câu hỏi đúng. Chức năng của tôi sẽ chỉ đơn giản hóa việc thực hiện Anova loại III. Giống như StatGuy ở trên, tôi không thấy SS xuất hiện ở đâu khi kiểm tra độ tương phản cụ thể.
sam_f
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.