Regresi berganda dengan prediktor kategoris dan numerik

11

Saya relatif baru untuk R, dan saya mencoba menyesuaikan model dengan data yang terdiri dari kolom kategoris dan kolom numerik (integer). Variabel dependen adalah bilangan kontinu.

Data memiliki format berikut:

predCateg, predIntNum, ResponseVar

Data terlihat seperti ini:

ranking, age_in_years, wealth_indicator
category_A, 99, 1234.56
category_A, 21, 12.34
category_A, 42, 234.56
....
category_N, 105, 77.27

Bagaimana saya memodelkan ini (mungkin, menggunakan GLM), dalam R?

[[Sunting]]

Baru saja terpikir oleh saya (setelah menganalisis data lebih teliti), bahwa variabel independen kategoris sebenarnya dipesan. Karena itu saya telah memodifikasi jawaban yang diberikan sebelumnya sebagai berikut:

> fit2 <- glm(wealth_indicator ~ ordered(ranking) + age_in_years, data=amort2)
> 
> fit2

Call:  glm(formula = wealth_indicator ~ ordered(ranking) + age_in_years, 
    data = amort2)

Coefficients:
      (Intercept)  ordered(ranking).L  ordered(ranking).Q  ordered(ranking).C      age_in_years  
        0.0578500         -0.0055454         -0.0013000          0.0007603          0.0036818  

Degrees of Freedom: 39 Total (i.e. Null);  35 Residual
Null Deviance:      0.004924 
Residual Deviance: 0.00012      AIC: -383.2
> 
> fit3 <- glm(wealth_indicator ~ ordered(ranking) + age_in_years + ordered(ranking)*age_in_years, data=amort2)
> fit3

Call:  glm(formula = wealth_indicator ~ ordered(ranking) + age_in_years + 
    ordered(ranking) * age_in_years, data = amort2)

Coefficients:
                    (Intercept)                ordered(ranking).L                ordered(ranking).Q  
                      0.0578500                       -0.0018932                       -0.0039667  
              ordered(ranking).C                    age_in_years  ordered(ranking).L:age_in_years  
                      0.0021019                        0.0036818                       -0.0006640  
ordered(ranking).Q:age_in_years  ordered(ranking).C:age_in_years  
                      0.0004848                       -0.0002439  

Degrees of Freedom: 39 Total (i.e. Null);  32 Residual
Null Deviance:      0.004924 
Residual Deviance: 5.931e-05    AIC: -405.4

Saya agak bingung dengan apa ordered(ranking).C, ordered(ranking).Qdan ordered(ranking).Lmaksud dalam output, dan akan sangat menghargai bantuan dalam memahami output ini, dan bagaimana menggunakannya untuk memprediksi variabel respon.

Homunculus Reticulli
sumber

Jawaban:

11

Coba ini:

fit <- glm(wealth_indicator ~ 
           factor(ranking) + age_in_years + factor(ranking) * age_in_years)

The factor()perintah akan memastikan bahwa R tahu bahwa variabel Anda kategoris. Ini sangat berguna jika kategori Anda ditandai dengan bilangan bulat, jika tidak glm akan menafsirkan variabel sebagai kontinu.

The factor(ranking) * age_in_yearsjangka memungkinkan R tahu bahwa Anda ingin memasukkan istilah interaksi.

P Schnell
sumber
1
mengapa factor(ranking)dan tidak as.factor(ranking)?
Peter Flom
1
Saya biasanya menggunakan factor(x)sehingga saya bisa memasukkan levelsargumen jika saya mau. Anda juga bisa menggunakan as.factor(x)jika Anda mau, dan mungkin sebenarnya lebih cepat, tapi saya pikir Anda akan membutuhkan dataset yang cukup besar untuk mempercepat fungsi-fungsi ini.
P Schnell
@ PSchnell +1 untuk jawaban singkat dan penjelasan yang bagus. Namun, satu hal yang saya sadari adalah faktor yang dipesan. Saya mengubah rumus yang Anda berikan sedikit, untuk mencerminkan fakta ini (harap lihat pertanyaan saya yang diedit). Namun, saya tidak yakin saya memahami output model (khusus ordered(ranking).C, ordered(ranking).Qdan ordered(ranking).L- apa artinya, dan bagaimana saya menggunakannya untuk memprediksi variabel respon?) - bantuan apa pun akan sangat dihargai. Terima kasih
Homunculus Reticulli
1
.L,, .Qdan .C, masing-masing, koefisien untuk faktor pesanan dikodekan dengan kontras linier, kuadratik, dan kubik. Perintah contr.poly(4)akan menunjukkan kepada Anda matriks kontras untuk faktor yang diurutkan dengan 4 level (3 derajat kebebasan, itulah sebabnya Anda mendapatkan polinomial urutan ketiga). contr.poly(4)[2, '.L']akan memberi tahu Anda apa yang harus dipasang untuk level kedua dalam istilah linier. Sadarilah bahwa ini mengasumsikan bahwa masuk akal untuk mempertimbangkan level sebagai jarak yang sama. Jika tidak, buat kode matriks kontras Anda sendiri.
P Schnell
2
Menurut ats.ucla.edu/stat/r/library/contrast_coding.htm#ORTHOGONAL , dalam R, ketika variabel kontinu dimodelkan sebagai respons terhadap variabel faktor yang dipesan, kontras default yang diterapkan adalah pengkodean polinomial ortogonal padalinecourses.science.psu .edu / stat502 / node / 203 . stats.stackexchange.com/a/206345/90600 memiliki penjelasan yang agak luas. stats.stackexchange.com/a/207128/90600 bahkan lebih dalam lagi.
Paul de Barros
2

Saya baru-baru ini menjawab variabel dependen kontinu dengan variabel independen ordinal , merekomendasikan ordSmoothfungsi dalam ordPenspaket. Ini menggunakan regresi yang dihukum untuk memuluskan koefisien dummy di seluruh level variabel ordinal sehingga tidak terlalu bervariasi dari satu level ke level berikutnya. Misalnya, Anda mungkin tidak ingin category_Akoefisien jauh lebih berbeda category_Bdaripada dari category_N. Anda mungkin ingin koefisien naik atau turun secara monoton, atau setidaknya berubah secara bertahap di seluruh peringkat. Jawaban saya untuk pertanyaan terkait mendaftar referensi untuk info lebih lanjut.

ordSmoothjuga dapat mengakomodasi variabel kontinu (dan nominal); dalam kasus Anda, kode dapat berupa:

SmoothFit=with(amort2,
ordSmooth(as.numeric(ordered(ranking)),wealth_indicator,z=age_in_years,lambda=.001))

ordSmoothmembutuhkan input numerik untuk data ordinal, karenanya as.numeric(ordered())pemformatan ulang. zadalah untuk vektor numerik / matriks / data.frameprediktor kontinu. lambdaadalah koefisien smoothing - nilai yang lebih besar akan mendorong koefisien Anda mendekati nol. Mungkin bijaksana untuk memulai dari yang kecil di sini. Pencetakan SmoothFitakan memberi Anda koefisien dan nilai-nilai yang sesuai, tapi saya khawatir itu menyerahkan sisanya kepada Anda.

Dalam metode Anda, koefisien ordered(ranking).C/ .Q/ .Ltampaknya masing-masing dicap sebagai kubik, kuadrat, dan linier. Jika Anda mencoba glm(rnorm(10)~ordered(rep(1:5,2))), Anda akan mendapatkan koefisien ordered(rep(1:5, 2))^4juga. Saya tidak begitu yakin mengapa ini dilambangkan dengan eksponen; Saya tidak berpikir itu memodelkan ini sebagai istilah polinomial, karena koefisien berbeda untuk glm(y~x+I(x^2)+I(x^3)+I(x^4))dan skala varian ini. Mereka harus menjadi kode dummy dasar .

Nick Stauner
sumber