Làm thế nào để thực hiện hồi quy với mã hóa hiệu ứng thay vì mã hóa giả trong R?


14

Tôi hiện đang làm việc trên một mô hình hồi quy trong đó tôi chỉ có các biến phân loại / yếu tố là các biến độc lập. Biến phụ thuộc của tôi là một tỷ lệ chuyển đổi logit.

Khá dễ dàng để chạy hồi quy bình thường trong R, vì R tự động biết cách mã hóa các hình nộm ngay khi chúng thuộc loại "yếu tố". Tuy nhiên, loại mã hóa này cũng ngụ ý rằng một loại từ mỗi biến được sử dụng làm đường cơ sở, khiến nó khó diễn giải.

Giáo sư của tôi đã nói với tôi chỉ sử dụng mã hóa hiệu ứng thay thế (-1 hoặc 1), vì điều này ngụ ý việc sử dụng ý nghĩa lớn cho việc đánh chặn.

Có ai biết làm thế nào để xử lý điều đó?

Cho đến bây giờ tôi đã thử:

gm <- mean(tapply(ds$ln.crea, ds$month,  mean))
model <- lm(ln.crea ~ month + month*month + year + year*year, data = ds, contrasts = list(gm = contr.sum))

Call:
lm(formula = ln.crea ~ month + month * month + year + year * 
    year, data = ds, contrasts = list(gm = contr.sum))

Residuals:
     Min       1Q   Median       3Q      Max 
-0.89483 -0.19239 -0.03651  0.14955  0.89671 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) -3.244493   0.204502 -15.865   <2e-16 ***
monthFeb    -0.124035   0.144604  -0.858   0.3928    
monthMar    -0.365223   0.144604  -2.526   0.0129 *  
monthApr    -0.240314   0.144604  -1.662   0.0993 .  
monthMay    -0.109138   0.144604  -0.755   0.4520    
monthJun    -0.350185   0.144604  -2.422   0.0170 *  
monthJul     0.050518   0.144604   0.349   0.7275    
monthAug    -0.206436   0.144604  -1.428   0.1562    
monthSep    -0.134197   0.142327  -0.943   0.3478    
monthOct    -0.178182   0.142327  -1.252   0.2132    
monthNov    -0.119126   0.142327  -0.837   0.4044    
monthDec    -0.147681   0.142327  -1.038   0.3017    
year1999     0.482988   0.200196   2.413   0.0174 *  
year2000    -0.018540   0.200196  -0.093   0.9264    
year2001    -0.166511   0.200196  -0.832   0.4073    
year2002    -0.056698   0.200196  -0.283   0.7775    
year2003    -0.173219   0.200196  -0.865   0.3887    
year2004     0.013831   0.200196   0.069   0.9450    
year2005     0.007362   0.200196   0.037   0.9707    
year2006    -0.281472   0.200196  -1.406   0.1625    
year2007    -0.266659   0.200196  -1.332   0.1855    
year2008    -0.248883   0.200196  -1.243   0.2164    
year2009    -0.153083   0.200196  -0.765   0.4461    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 

Residual standard error: 0.3391 on 113 degrees of freedom
Multiple R-squared: 0.3626, Adjusted R-squared: 0.2385 
F-statistic: 2.922 on 22 and 113 DF,  p-value: 0.0001131 

1
Nhìn vào? Sự tương phản Tôi nghĩ rằng contr.sum của nó để kiểm tra ý nghĩa lớn - kiểm tra các tệp trợ giúp R
20650

Câu trả lời:


13

Về nguyên tắc, có hai loại mã hóa tương phản, trong đó phần chặn sẽ ước tính Grand Nghĩa. Đây là tổng tương phảntương phản lặp đi lặp lại (chênh lệch trượt).

Dưới đây là tập dữ liệu mẫu:

set.seed(42)
x <- data.frame(a = c(rnorm(100,2), rnorm(100,1),rnorm(100,0)),
                b = rep(c("A", "B", "C"), each = 100))

Các điều kiện 'có nghĩa là:

tapply(x$a, x$b, mean)
         A           B           C 
2.03251482  0.91251629 -0.01036817 

Ý nghĩa lớn:

mean(tapply(x$a, x$b, mean))
[1] 0.978221

Bạn có thể chỉ định loại mã hóa tương phản với contraststham số trong lm.

Tổng tương phản

lm(a ~ b, x, contrasts = list(b = contr.sum))

Coefficients:
(Intercept)           b1           b2  
     0.9782       1.0543      -0.0657 

Việc đánh chặn là Đại nghĩa. Độ dốc đầu tiên là sự khác biệt giữa cấp độ yếu tố đầu tiên và Ý nghĩa lớn. Độ dốc thứ hai là sự khác biệt giữa cấp độ yếu tố thứ hai và Ý nghĩa lớn.

Tương phản lặp đi lặp lại

Chức năng tạo độ tương phản lặp đi lặp lại là một phần của MASSgói.

lm(a ~ b, x, contrasts = list(b = MASS::contr.sdif))

Coefficients:
(Intercept)         b2-1         b3-2  
     0.9782      -1.1200      -0.9229 

Việc đánh chặn là Đại nghĩa. Các sườn dốc tạo ra sự khác biệt giữa các mức yếu tố liên tiếp (2 so với 1, 3 so với 2).


Hmm, chỉ cần thử những gì bạn đề xuất, nhưng tôi không chắc bất kỳ mã nào làm những gì tôi muốn. Có một điều là tôi có nhiều năm {1998, ..., 2007} trong một IV và các tháng {Jan, ..., Dec} trong một IV khác. Vì bây giờ chức năng lm sẽ tự động cho phép April trở thành đánh chặn cũng như năm 1998. Thay vào đó tôi chỉ muốn đánh chặn là một ý nghĩa tổng thể ... Tôi thực sự không biết liệu nó có ý nghĩa gì khi nghĩ về nó không ...
Kasper Christensen

@KasperChristensen Nếu bạn chỉ định độ tương phản như trong các ví dụ, phần chặn sẽ là Ý nghĩa lớn. Vui lòng cung cấp một ví dụ có thể lặp lại về những gì bạn đã thử.
Sven Hohenstein

@SvenHohenstein tại sao không có hệ số b3 cho giá trị phân loại C trong tổng tương phản? Nó phải là -0.9885891.
Vivaldi

@Vivaldi Giá trị của b3 được xác định bởi phần chặn và b1, b2. Không có mức độ tự do để lại cho một sự tương phản khác.
Sven Hohenstein

@SvenHohenstein Đây không phải là một vấn đề cộng tác vì b3 có thể được biểu diễn trực tiếp dưới dạng kết hợp tuyến tính của các biến khác: (3 * grand mean - b1 - b2)?
Vivaldi

6

Nitpicking: nếu giáo sư của bạn bảo bạn mã hóa các biến của mình (-1, 1), ông bảo bạn sử dụng mã hóa hiệu ứng , không phải kích thước hiệu ứng . Ở mức nào, @ user20650 là đúng. Như thường lệ, trang web trợ giúp thống kê UCLA có một trang hữu ích giải thích cách thực hiện việc này với R.

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.