Saya akan memberikan contoh saya dengan panggilan R. Pertama, contoh sederhana dari regresi linier dengan variabel 'masa hidup', dan dua variabel penjelas kontinu.
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
Untuk menemukan perkiraan 'masa hidup' ketika nilai 'berat' adalah 1, saya tambahkan (intersepsi) + tinggi = 63.64319
Sekarang bagaimana jika saya memiliki kerangka data yang serupa, tetapi di mana salah satu variabel penjelas adalah kategorikal?
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
Dalam hal ini, untuk menemukan perkiraan 'rentang hidup' ketika nilai 'berat' adalah 1, haruskah saya menambahkan masing-masing koefisien untuk 'hewan' ke intersep: (Intercept) + animalfox + animalpig + animalwolf? Atau apa cara yang tepat untuk melakukan ini?
Terima kasih Sverre
code
, indentasi oleh 4 spasi.code
, gunakan backticks:this is code with a $ and *
set.seed(1)
(atau nomor apa pun yang Anda suka) sebelum menjalankan pembuatan bilangan acak, sehingga semua orang mendapatkan hasil yang persis sama dengan Anda (meskipun tidak terlalu berarti dalam hal ini).Jawaban:
Tidak, Anda tidak harus menambahkan semua koefisien secara bersamaan. Anda pada dasarnya memiliki model
di mana, misalnya, jika hewan itu babi dan 0 sebaliknya. Jadi, untuk menghitung seperti yang Anda sarankan untuk mendapatkan rata-rata keseluruhan ketika seperti mengatakan "jika Anda adalah babi, serigala, dan rubah, dan berat badan Anda adalah 1, berapa umur yang Anda harapkan?". Jelas karena setiap hewan hanyalah salah satu dari hal-hal itu, itu tidak masuk akal.pig=1 β0+β1+β2+β3+β4 weight=1
Anda harus melakukan ini secara terpisah untuk setiap hewan. Misalnya, adalah umur yang diharapkan untuk babi ketika beratnya 1.β0+β2+β4
sumber
Hal paling sederhana yang harus dilakukan adalah menggunakan fungsi prediksi pada objek lm, lalu mengurus banyak detail seperti mengubah faktor ke nilai yang tepat untuk ditambahkan bersama. Jika Anda mencoba untuk memahami bagian-bagian yang masuk ke dalam prediksi maka atur
type='terms'
dan itu akan menunjukkan masing-masing bagian yang ditambahkan bersama membuat prediksi Anda.Perhatikan juga bahwa bagaimana suatu faktor dikonversi ke variabel tergantung pada beberapa opsi, defaultnya akan memilih kelompok dasar untuk membandingkan kelompok lain, tetapi Anda juga dapat mengaturnya menjadi rata-rata dan perbedaan dari rata-rata itu (atau perbandingan minat lainnya) .
sumber
Jika Anda ingin umur rata-rata saat berat badan adalah 1 maka Anda bisa menghilangkan "hewan" dalam panggilan ini:
sumber