Làm thế nào để giải thích những tương phản tùy chỉnh?


10

Tôi đang thực hiện ANOVA một chiều (mỗi loài) với độ tương phản tùy chỉnh.

     [,1] [,2] [,3] [,4]
0.5    -1    0    0    0
5       1   -1    0    0
12.5    0    1   -1    0
25      0    0    1   -1
50      0    0    0    1

trong đó tôi so sánh cường độ 0,5 với 5, 5 so với 12,5 và cứ thế. Đây là dữ liệu tôi đang làm việc

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

với kết quả như sau

Generalized least squares fit by REML
  Model: dark ~ intensity 
  Data: skofijski.diurnal[skofijski.diurnal$species == "niphargus", ] 
       AIC      BIC    logLik
  63.41333 67.66163 -25.70667

Coefficients:
            Value Std.Error  t-value p-value
(Intercept) 16.95 0.2140872 79.17334  0.0000
intensity1   2.20 0.4281744  5.13809  0.0001
intensity2   1.40 0.5244044  2.66970  0.0175
intensity3   2.10 0.5244044  4.00454  0.0011
intensity4   1.80 0.4281744  4.20389  0.0008

 Correlation: 
           (Intr) intns1 intns2 intns3
intensity1 0.000                      
intensity2 0.000  0.612               
intensity3 0.000  0.408  0.667        
intensity4 0.000  0.250  0.408  0.612 

Standardized residuals:
       Min         Q1        Med         Q3        Max 
-2.3500484 -0.7833495  0.2611165  0.7833495  1.3055824 

Residual standard error: 0.9574271 
Degrees of freedom: 20 total; 15 residual

16,95 là ý nghĩa toàn cầu của "niphargus". Trong cường độ1, tôi đang so sánh có nghĩa là cường độ 0,5 so với 5.

Nếu tôi hiểu đúng, hệ số cường độ1 là 2.2 sẽ bằng một nửa chênh lệch giữa các mức cường độ 0,5 và 5. Tuy nhiên, các tính toán tay của tôi không khớp với các tóm tắt. Bất cứ ai có thể chip trong những gì tôi đang làm sai?

ce1 <- skofijski.diurnal$intensity
levels(ce1) <- c("0.5", "5", "0", "0", "0")
ce1 <- as.factor(as.character(ce1))
tapply(skofijski.diurnal$dark, ce1, mean)
       0    0.5      5 
  14.500 11.875 13.000 
diff(tapply(skofijski.diurnal$dark, ce1, mean))/2
      0.5       5 
  -1.3125  0.5625 

Bạn có thể cung cấp hàm lm () từ R mà bạn đã sử dụng để ước tính. Làm thế nào chính xác bạn đã sử dụng chức năng tương phản?
Philippe

btw geom_points(position=position_dodge(width=0.75))sẽ sửa cách các điểm trong ô của bạn không thẳng hàng với các hộp.
bay

@fly kể từ câu hỏi của tôi, đã có phần giới thiệu geom_jitter, đây là lối tắt cho tất cả các tham số geom_point () mà jitter.
Roman Luštrik

Tôi đã không nhận thấy sự hốt hoảng ở đó. không geom_jitter(position_dodge)làm việc Tôi đã sử dụng geom_points(position_jitterdodge)để thêm dấu chấm vào ô vuông để tránh né.
bay

@fly xem các tài liệu cho geom_jitter ở đây . Theo kinh nghiệm của tôi kể từ câu trả lời trên của tôi, tôi thấy không cần thiết phải sử dụng boxplots. Không bao giờ. Nếu tôi có nhiều điểm, tôi sử dụng các ô vĩ cầm thể hiện mật độ điểm với nhiều chi tiết tốt hơn so với các ô vuông. Boxplots được phát minh trở lại khi vẽ nhiều điểm hoặc mật độ của chúng không thuận tiện. Có lẽ đã đến lúc chúng ta bắt đầu nghĩ đến việc bỏ hình ảnh (khuyết tật) này.
Roman Luštrik

Câu trả lời:


10

Ma trận bạn chỉ định cho các tương phản là đúng về nguyên tắc. Để chuyển đổi nó thành một ma trận tương phản thích hợp , bạn cần tính toán nghịch đảo tổng quát của ma trận gốc của bạn.

Nếu Mlà ma trận của bạn:

M

#     [,1] [,2] [,3] [,4]
#0.5    -1    0    0    0
#5       1   -1    0    0
#12.5    0    1   -1    0
#25      0    0    1   -1
#50      0    0    0    1 

Bây giờ, tính toán nghịch đảo tổng quát bằng cách sử dụng ginvvà hoán chuyển kết quả bằng cách sử dụng t:

library(MASS)
t(ginv(M))

#     [,1] [,2] [,3] [,4]
#[1,] -0.8 -0.6 -0.4 -0.2
#[2,]  0.2 -0.6 -0.4 -0.2
#[3,]  0.2  0.4 -0.4 -0.2
#[4,]  0.2  0.4  0.6 -0.2
#[5,]  0.2  0.4  0.6  0.8

Kết quả giống hệt với một trong @Greg Snow. Sử dụng ma trận này để phân tích của bạn.

Đây là một cách dễ dàng hơn nhiều so với làm bằng tay.


Có một cách thậm chí dễ dàng hơn để tạo ra một ma trận của sự khác biệt trượt (hay còn gọi là tương phản lặp đi lặp lại ). Điều này có thể được thực hiện với chức năng contr.sdifvà số lượng các yếu tố như là một tham số. Nếu bạn có năm cấp độ yếu tố, như trong ví dụ của bạn:

library(MASS)
contr.sdif(5)

#   2-1  3-2  4-3  5-4
#1 -0.8 -0.6 -0.4 -0.2
#2  0.2 -0.6 -0.4 -0.2
#3  0.2  0.4 -0.4 -0.2
#4  0.2  0.4  0.6 -0.2
#5  0.2  0.4  0.6  0.8

4

Nếu ma trận ở trên cùng là cách bạn mã hóa các biến giả (những gì bạn đang truyền cho hàm Choặc contrasthàm trong R) thì thì ma trận đầu tiên là so sánh cấp 1 với các cấp khác (thực tế là 0,8 lần trừ đi 1 lần so với 0,2 lần tổng của những người khác).

Thuật ngữ thứ hai so sánh 2 cấp 1 với cấp 3 cuối cùng. Cấp 3 so sánh 3 cấp 1 với cấp 2 và cấp 4 so sánh 4 cấp 1 với cấp cuối cùng.

Nếu bạn muốn thực hiện các phép so sánh mà bạn mô tả (so sánh từng cặp) thì mã hóa biến giả mà bạn muốn là:

      [,1] [,2] [,3] [,4]
[1,] -0.8 -0.6 -0.4 -0.2
[2,]  0.2 -0.6 -0.4 -0.2
[3,]  0.2  0.4 -0.4 -0.2
[4,]  0.2  0.4  0.6 -0.2
[5,]  0.2  0.4  0.6  0.8

Có phải việc sử dụng ma trận inverese tổng quát này cũng cần thiết khi sử dụng aov()thay vì lm()? Tôi đang hỏi, bởi vì tôi đã đọc một số hướng dẫn, trong đó các ma trận tương phản aov()được xây dựng giống như hướng dẫn của Roman. Ví dụ, xem Chương 5 trong cran.r-project.org/doc/contrib/Vikneswaran-ED_compmate.pdf
crsh

2
Các aovchức năng gọi là lmchức năng để thực hiện tính toán chính, vì vậy những thứ như ma trận tương phản sẽ có tác dụng tương tự trong cả hai.
Greg Snow
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.