Bagaimana menerapkan istilah koefisien untuk faktor dan istilah interaktif dalam persamaan linear?


9

Menggunakan R, saya telah memasang model linier untuk variabel respons tunggal dari campuran prediktor kontinu dan diskrit. Ini dasar-uber, tapi saya kesulitan memahami bagaimana koefisien untuk faktor diskrit bekerja.

Konsep: Jelas, koefisien variabel kontinu 'x' diterapkan dalam bentuk y = coefx(varx) + intercepttetapi bagaimana cara kerjanya untuk faktor z jika faktor tersebut non-numerik?y = coefx(varx) + coefz(factorz???) + intercept

Spesifik: Saya telah memasang model di R sebagai lm(log(c) ~ log(d) + h + a + f + h:a)tempat hdan fmerupakan faktor non-numerik yang terpisah. Koefisiennya adalah:

Coefficients:
              Estimate 
(Intercept)  -0.679695 
log(d)        1.791294 
h1            0.870735  
h2           -0.447570  
h3            0.542033   
a             0.037362  
f1           -0.588362  
f2            0.816825 
f3            0.534440
h1:a         -0.085658
h2:a         -0.034970 
h3:a         -0.040637

Bagaimana cara menggunakan ini untuk membuat persamaan prediksi:

log(c) =  1.791294(log(d)) + 0.037362(a) + h??? + f???? + h:a???? + -0.679695

Atau saya salah melakukannya?

Saya BERPIKIR bahwa konsep itu adalah jika subjek termasuk dalam kategori h1dan f2, persamaannya menjadi:

log(c) =  1.791294(log(d)) + 0.037362(a) +  0.870735  + 0.816825  + h:a???? + -0.679695

Tapi saya benar-benar tidak jelas tentang bagaimana h:aistilah interaktif diurai. Terima kasih telah mempermudah saya.

Jawaban:


14

Ini bukan masalah khusus untuk R. R menggunakan tampilan koefisien konvensional.

Ketika Anda membaca output regresi tersebut (dalam makalah, buku teks, atau dari perangkat lunak statistik), Anda perlu mengetahui variabel mana yang "kontinu" dan mana yang "kategorikal":

  • Yang "kontinyu" secara eksplisit numerik dan nilai numeriknya digunakan apa adanya dalam penyesuaian regresi.

  • Variabel "kategoris" dapat dari jenis apa pun , termasuk yang numerik! Apa yang membuat mereka kategorikal adalah bahwa perangkat lunak memperlakukan mereka sebagai "faktor": yaitu, setiap nilai berbeda yang ditemukan dianggap sebagai indikator sesuatu yang berbeda.

    Sebagian besar perangkat lunak akan memperlakukan nilai-nilai non-numerik (seperti string) sebagai faktor. Sebagian besar perangkat lunak dapat dibujuk untuk memperlakukan nilai numerik sebagai faktor juga. Misalnya, kode layanan pos (kode ZIP di AS) terlihat seperti angka tetapi sebenarnya hanya kode untuk satu set kotak surat; tidak masuk akal untuk menambah, mengurangi, dan melipatgandakan kode ZIP dengan angka lain! (Fleksibilitas ini adalah sumber kesalahan umum: jika Anda tidak hati-hati, atau tidak disengaja, perangkat lunak Anda dapat memperlakukan variabel yang Anda anggap kategorikal sebagai kontinu, atau sebaliknya. Berhati-hatilah!)

    Namun demikian, variabel kategori harus diwakili dalam beberapa cara sebagai angka untuk menerapkan algoritma pemasangan. Ada banyak cara untuk menyandikannya . Kode dibuat menggunakan "variabel dummy." Cari tahu lebih lanjut tentang penyandian variabel dummy dengan mencari di situs ini; detailnya tidak penting di sini.

Dalam pertanyaan kita diberitahu itu hdan fmerupakan nilai kategorikal ("diskrit"). Secara default, log(d)dan aberkelanjutan. Hanya itu yang perlu kita ketahui. Modelnya adalah

y=0.679695+1.791294 log(d)+0.870735 if h=h10.447570 if h=h2+0.542033 if h=h3+0.037362 a0.588362 if f=f1+0.816825 if f=f2+0.534440 if f=f30.085658 a if h=h10.034970 a if h=h20.040637 a if h=h3

Aturan yang diterapkan di sini adalah:

  • Istilah "memotong", jika muncul, adalah konstanta aditif (baris pertama).

  • Variabel kontinu dikalikan dengan koefisien mereka, bahkan dalam "interaksi" seperti h1:a, h2:a, dan h3:aistilah. (Ini menjawab pertanyaan awal.)

  • Setiap variabel kategori (atau faktor) dimasukkan hanya untuk kasus-kasus di mana nilai faktor itu muncul.

Misalnya, misalkan , , , dan . Nilai pas dalam model ini adalahlog(d)=2h=h3a=1f=f2

y^=0.6797+1.7913×(2)+0.5420+0.0374×(1)+0.81680.0406×(1).

Perhatikan bagaimana sebagian besar koefisien model tidak muncul dalam perhitungan, karena hdapat mengambil tepat satu dari tiga nilai , , dan oleh karena itu hanya satu dari tiga koefisien berlaku untuk dan hanya salah satu dari tiga koefisien akan berlipat ganda dalam interaksi; sama halnya, hanya satu koefisien yang berlaku untuk setiap kasus tertentu.h 2 h 3 ( 0,870735 , - 0,447570 , 0,542033 ) ( - 0,085658 , - 0,034970 , - 0,040637 )h1h2h3(0.870735,0.447570,0.542033)h(0.085658,0.034970,0.040637)ah:af


8

Ini hanya komentar tetapi tidak akan cocok dengan itu di kotak edit terbatas yang kami miliki.

Saya suka melihat persamaan regresi yang ditulis dengan jelas dalam teks biasa, seperti @whuber lakukan dalam jawabannya. Berikut adalah cara cepat untuk ini dalam R, dengan paket Hmisc . (Saya akan menggunakan rms juga, tetapi itu tidak terlalu penting.) Pada dasarnya, ini hanya mengasumsikan bahwa sistem pengaturan huruf tersedia di mesin Anda.LATEX

Mari kita simulasikan beberapa data terlebih dahulu,

n <- 200
x1 <- runif(n)
x2 <- runif(n)
x3 <- runif(n)
g1 <- gl(2, 100, n, labels=letters[1:2])
g2 <- cut2(runif(n), g=4)
y <- x1 + x2 + rnorm(200)

kemudian cocok dengan model regresi,

f <- ols(y ~ x1 + x2 + x3 + g1 + g2 + x1:g1)

yang menghasilkan hasil berikut:

Linear Regression Model

ols(formula = y ~ x1 + x2 + x3 + g1 + g2 + x1:g1)

                Model Likelihood     Discrimination    
                   Ratio Test           Indexes        
Obs      200    LR chi2     35.22    R2       0.161    
sigma 0.9887    d.f.            8    R2 adj   0.126    
d.f.     191    Pr(> chi2) 0.0000    g        0.487    

Residuals

    Min      1Q  Median      3Q     Max 
-3.1642 -0.7109  0.1015  0.7363  2.7342 

                   Coef    S.E.   t     Pr(>|t|)
Intercept           0.0540 0.2932  0.18 0.8541  
x1                  1.1414 0.3642  3.13 0.0020  
x2                  0.8546 0.2331  3.67 0.0003  
x3                 -0.0048 0.2472 -0.02 0.9844  
g1=b                0.2099 0.2895  0.73 0.4692  
g2=[0.23278,0.553)  0.0609 0.1988  0.31 0.7598  
g2=[0.55315,0.777) -0.2615 0.1987 -1.32 0.1896  
g2=[0.77742,0.985] -0.2107 0.1986 -1.06 0.2901  
x1 * g1=b          -0.2354 0.5020 -0.47 0.6396  

Kemudian, untuk mencetak persamaan regresi yang sesuai, cukup gunakan latexfungsi generik , seperti ini:

latex(f)

Setelah konversi dvi ke png, Anda harus mendapatkan sesuatu seperti itu

masukkan deskripsi gambar di sini

IMO, ini memiliki kemampuan menunjukkan bagaimana menghitung nilai prediksi tergantung pada nilai aktual atau yang dipilih untuk prediktor numerik dan kategoris. Untuk yang terakhir, tingkat faktor ditunjukkan dalam kurung dekat koefisien yang sesuai.


1
+1 Itu kemampuan yang bagus. Sintaksis istilah seperti berpotensi membingungkan: tidak ada hubungan yang jelas antara ekspresi ini dan variabel kategorikal , juga tidak sepenuhnya jelas bahwa benar-benar mewakili indikator yang daripada untuk nilai numerik dari ! (Di sini, benar-benar berarti "b" - huruf - yang mungkin cukup peringatan, tetapi ketika kategori dikodekan oleh angka, seperti dan , hati-hati ...){ b } g 1 = b b b 0 1+0.2099013{b}g1{b}g1=bbb01
whuber

1
@whuber Gambar di atas telah dipangkas tetapi ada semacam catatan kaki yang mengingatkan bahwa "{c} = 1 jika subjek dalam grup c, 0 sebaliknya" (pilihan cmungkin membingungkan dalam kasus khusus ini, karena saya memilih dua huruf untuk mewakili level g1, tetapi biasanya cukup intuitif - dan itu murni tex sehingga kita masih dapat mengedit file sumber setelahnya). Terlampir adalah ringkasan lain di mana saya diubah g1sehingga sekarang menjadi faktor empat tingkat. Namun, dengan 0/1 label yang mungkin lebih membingungkan .
chl

5

Anda dapat memeriksa "kontras" Anda sebagai default dengan options()dan mencari:

$contrasts
        unordered           ordered 
"contr.treatment"      "contr.poly" 

Jika kontras Anda yang tidak berurutan ditetapkan sebagai contr.treatment(sebagaimana mestinya kecuali Anda telah mengubahnya), maka tingkat pertama dari masing-masing faktor Anda akan ditetapkan sebagai garis dasar. Anda hanya akan diberikan perkiraan untuk koefisien di depan variabel dummy yang dibuat untuk lainnya tingkat faktor. Akibatnya, koefisien-koefisien tersebut akan "seberapa berbeda rata-rata dengan variabel respons pada tingkat faktor ini, dibandingkan dengan tingkat dasar faktor tersebut, setelah mengendalikan semua hal lain dalam model".

Saya menduga dari output Anda ada a h0dan f0yang merupakan level dasar untuk h dan f (kecuali jika Anda memiliki opsi non-default untuk kontras, dalam hal ini ada beberapa kemungkinan; coba ?contr.treatmentbantuan).

Ini mirip dengan interaksinya. Jika paragraf saya sebelumnya benar, estimasi yang diberikan aakan benar-benar menjadi kemiringan akapan h=h0. Perkiraan yang diberikan dalam ringkasan yang berlaku untuk interaksi adalah seberapa banyak perubahan kemiringan untuk berbagai tingkat h.

Jadi, dalam contoh Anda di mana h = h1 dan f = f2, coba:

log(c) =  1.791294(log(d)) + (0.037362 - 0.085658) (a) +  0.870735  + 0.816825  -0.679695

Oh, dan Anda dapat menggunakan predict()untuk melakukan banyak hal berguna juga ... jika Anda benar-benar ingin memprediksi sesuatu (daripada menuliskan persamaan untuk laporan). Cobalah ?predict.lmuntuk melihat apa yang predict()dilakukan oleh objek yang dibuat lm.


+1 (sebenarnya, saya memutakhirkan ini sebulan yang lalu & kebetulan kembali membaca ulang sekarang) bagaimanapun juga, terpikir oleh saya bahwa Anda merekomendasikan untuk memeriksa jenis kontras options(). Anda harus menggulir banyak sampah untuk menemukan yang Anda butuhkan. Anda dapat mencoba options()$contrasts, yang hanya akan menghasilkan apa yang Anda inginkan.
gung - Pasang kembali Monica

saran yang bagus, otakku pasti tertidur.
Peter Ellis

Anda tahu, saya sering menjawab pertanyaan CV tepat sebelum tidur ...
gung - Reinstate Monica
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.