Giải thích hệ số trong mô hình hồi quy tuyến tính với các biến phân loại


8

Tôi sẽ đưa ra ví dụ của tôi với các cuộc gọi R. Đầu tiên là một ví dụ đơn giản về hồi quy tuyến tính với biến phụ thuộc 'tuổi thọ' và hai biến giải thích liên tục.

data.frame(height=runif(4000,160,200))->human.life
human.life$weight=runif(4000,50,120)
human.life$lifespan=sample(45:90,4000,replace=TRUE)
summary(lm(lifespan~1+height+weight,data=human.life))

Call:
lm(formula = lifespan ~ 1 + height + weight, data = human.life)

Residuals:
Min       1Q   Median       3Q      Max 
-23.0257 -11.9124  -0.0565  11.3755  23.8591 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 63.635709   3.486426  18.252   <2e-16 ***
height       0.007485   0.018665   0.401   0.6884    
weight       0.024544   0.010428   2.354   0.0186 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1 

Residual standard error: 13.41 on 3997 degrees of freedom
Multiple R-squared: 0.001425,   Adjusted R-squared: 0.0009257 
F-statistic: 2.853 on 2 and 3997 DF,  p-value: 0.05781

Để tìm ước tính 'tuổi thọ' khi giá trị của 'trọng số' là 1, tôi thêm (Chặn) + height = 63,64319

Bây giờ nếu tôi có một khung dữ liệu tương tự, nhưng một trong đó một trong các biến giải thích là phân loại thì sao?

data.frame(animal=rep(c("dog","fox","pig","wolf"),1000))->animal.life
animal.life$weight=runif(4000,8,50)
animal.life$lifespan=sample(1:10,replace=TRUE)
summary(lm(lifespan~1+animal+weight,data=animal.life))

Call:
lm(formula = lifespan ~ 1 + animal + weight, data = animal.life)

Residuals:
Min      1Q  Median      3Q     Max 
-4.7677 -2.7796 -0.1025  3.1972  4.3691 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 5.565556   0.145851  38.159  < 2e-16 ***
animalfox   0.806634   0.131198   6.148  8.6e-10 ***
animalpig   0.010635   0.131259   0.081   0.9354    
animalwolf  0.806650   0.131198   6.148  8.6e-10 ***
weight      0.007946   0.003815   2.083   0.0373 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1 

Residual standard error: 2.933 on 3995 degrees of freedom
Multiple R-squared: 0.01933,    Adjusted R-squared: 0.01835 
F-statistic: 19.69 on 4 and 3995 DF,  p-value: 4.625e-16

Trong trường hợp này, để tìm ước tính 'tuổi thọ' khi giá trị của 'trọng lượng' là 1, tôi có nên thêm từng hệ số cho 'động vật' vào phần chặn: (Đánh chặn) + động vật + động vật + động vật? Hoặc cách thích hợp để làm điều này là gì?

Cảm ơn Sverre


ký hiệu đô la làm cho bạn bước vào một môi trường phương trình và là lý do tại sao mọi thứ được in nghiêng một cách ngẫu nhiên.
Macro

định dạng: để có được code, thụt lề bởi 4 khoảng trắng.
sói.rauch

nếu bạn sử dụng 4 khoảng cách thụt lề, bạn có thể đặt các ngôi sao và ký hiệu đô la vào đó và chúng sẽ hiển thị như vậy. nếu bạn sử dụng chúng ngoài định dạng mã, chúng sẽ được coi như đánh dấu. Nếu bạn không muốn có một codedòng hoàn chỉnh , hãy sử dụng backticks:this is code with a $ and *
wolf.rauch

1
Thật tốt khi bạn đã sử dụng một ví dụ tái sản xuất. Bạn có thể làm cho ví dụ thậm chí tốt hơn bằng cách bao gồm set.seed(1)(hoặc bất kỳ số nào bạn thích) trước khi chạy tạo số ngẫu nhiên, để mọi người đều nhận được kết quả chính xác như bạn (mặc dù điều đó không quan trọng lắm trong trường hợp này).
sói.rauch

Chỉ cần hai bình luận nhỏ. Bạn đã viết "Để tìm ước tính 'tuổi thọ' khi giá trị của 'trọng số' là 1, tôi thêm (Chặn) + chiều cao = 63,64319". Lưu ý rằng đây là tuổi thọ trung bình ước tính khi cân nặng là = 1 và chiều cao = 0 . Điều đó có lẽ không có ý nghĩa lắm. Ngoài ra, các dự đoán nằm ngoài phạm vi của các giá trị quan sát được của các biến độc lập cần được xử lý một cách thận trọng (trọng số nằm trong khoảng từ 50 đến 120, do đó weight = 1 cũng không có ý nghĩa lắm). Chỉ cần một số ghi chú bên lề và có lẽ những điều bạn đã biết. Nhưng chỉ trong trường hợp ...
Wolfgang

Câu trả lời:


12

Không, bạn không nên thêm tất cả các hệ số lại với nhau. Bạn cơ bản có mô hình

lifespan=β0+β1fox+β2pig+β3wolf+β4weight+ε

trong đó, ví dụ: nếu con vật là lợn và 0 khác. Vì vậy, để tính toán như bạn đã đề xuất để lấy trung bình tổng thể khi giống như nói "nếu bạn là một con lợn, một con sói và một con cáo và cân nặng của bạn là 1, tuổi thọ dự kiến ​​của bạn là bao nhiêu?". Rõ ràng vì mỗi con vật chỉ là một trong những điều đó, điều đó không có ý nghĩa nhiều.pig=1β0+β1+β2+β3+β4weight=1

Bạn sẽ phải làm điều này riêng cho từng con vật. Ví dụ: là tuổi thọ dự kiến ​​cho một con lợn khi trọng lượng của nó là 1.β0+β2+β4


Macro: Tôi hiểu. Sau đó, sẽ có ý nghĩa khi tìm hệ số trung bình cho các cấp độ trong 'động vật'? Nói cách khác, làm (Đánh chặn) + (Animalfox + Animalpig + Animalwolf) / 3. Hay chỉ có giá trị khi có số lượng quan sát bằng nhau cho mỗi động vật trong bộ dữ liệu?
Sverre

Tôi nghĩ bạn đúng - điều đó sẽ chỉ hợp lệ nếu có một số lượng bằng nhau trong mỗi nhóm. Bạn có thể cân chúng theo tỷ lệ với mức độ mỗi nhóm được thể hiện trong mẫu nếu bạn khăng khăng tóm tắt nó thành một số.
Macro

Điều gì sẽ là cách thích hợp để cân chúng? Lý do tôi "khăng khăng" tóm tắt nó thành một số là vì tôi muốn vẽ đường hồi quy cho chỉ một trong các biến trên biểu đồ phân tán. Ví dụ, trong ví dụ về con người. Cuộc sống ở trên, tôi sẽ vẽ đường hồi quy cho 'trọng số' bằng cách chỉ định chặn của đường ((Chặn) + height = 63,64319) với hệ số của nó (0,024544). Đó chỉ là một chút khó khăn hơn trong trường hợp động vật.
Sverre

Suy nghĩ nhiều hơn về nó, tôi không biết làm thế nào bất kỳ loại trung bình nào có thể hiểu được. Bạn chỉ có thể vẽ ba đường hồi quy song song trên một cốt truyện phải không? Ngoài ra, đối với tôi, tác động của "trọng lượng" sẽ khác nhau đối với mỗi loài động vật, trong trường hợp đó bạn nên để động vật tương tác với cân nặng, điều này sẽ dẫn đến ba đường hồi quy hoàn toàn khác nhau cho mỗi con vật.
Macro

Nhưng trong trường hợp biến số cho 'động vật' và biến số 'trọng lượng' đều có ý nghĩa, nhưng tương tác của chúng thì không, tôi thậm chí sẽ không bao gồm sự tương tác trong mô hình. Hồi quy bội ước tính ảnh hưởng của 'trọng lượng' độc lập với giá trị của 'động vật' là gì.
Sverre

4

Điều đơn giản nhất để làm là sử dụng hàm dự đoán trên đối tượng lm, sau đó nó sẽ xử lý nhiều chi tiết như chuyển đổi một yếu tố thành các giá trị phù hợp để cộng lại. Nếu bạn đang cố gắng để hiểu các phần đi vào dự đoán thì hãy đặt type='terms'và nó sẽ hiển thị các phần riêng lẻ cộng lại làm cho dự đoán của bạn.

Cũng lưu ý rằng cách một yếu tố được chuyển đổi thành các biến phụ thuộc vào một số tùy chọn, mặc định sẽ chọn một nhóm cơ sở để so sánh các nhóm khác với, nhưng bạn cũng có thể đặt nó thành trung bình và khác biệt so với mức trung bình đó (hoặc so sánh quan tâm khác) .


Sử dụng dự đoán.lm () là một giải pháp tốt cho một đối tượng lm. Thật không may, tôi thực sự phù hợp với một đối tượng lmer cho dữ liệu của mình, mà không có hàm dự đoán () trích xuất các thuật ngữ riêng lẻ tồn tại. Tôi có hiểu chính xác cho bạn rằng phương pháp thay thế mà bạn đề xuất sẽ đặt chặn là giá trị trung bình, thay vì đường cơ sở (trong đó tất cả các dự đoán liên tục được đặt thành 0 và một giá trị của các dự đoán phân loại được chọn) không? Nếu vậy, tôi muốn biết làm thế nào để làm điều đó. Sau đó, tôi chỉ có thể vẽ đường hồi quy của mình là phần chặn của mô hình + hệ số của công cụ dự đoán của tôi.
Sverre

Nhìn vào "độ tương phản ,? C," contr.sum, và phần tương phản của? Tùy chọn.
Greg Snow

2

Nếu bạn muốn tuổi thọ trung bình khi cân nặng là 1 thì bạn chỉ cần lấy ra "động vật" trong cuộc gọi này:

lm(formula = lifespan ~ 1 + animal + weight, data = animal.life)

Tôi không hiểu làm thế nào điều này có thể đúng. Nếu tôi lấy ra một trong những yếu tố dự đoán ('động vật'), thì hệ số chặn, hệ số 'trọng lượng' và lỗi ước tính tất cả sẽ thay đổi. Ngoài ra, tôi không cố gắng tìm hiểu tuổi thọ trung bình thực tế cho trọng số 1 trong dữ liệu là gì, chỉ là mô hình dự đoán nó sẽ là gì.
Sverre
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.