Box Cox Transforms untuk regresi


9

Saya mencoba menyesuaikan model linier pada beberapa data hanya dengan satu prediktor (katakanlah (x, y)). Data sedemikian rupa sehingga untuk nilai x yang kecil, nilai y memberikan kesesuaian yang ketat dengan garis lurus, namun begitu nilai x meningkat, nilai y menjadi lebih tidak stabil. Berikut adalah contoh dari data tersebut (kode R)

y = c(3.2,3.4,3.5,3.8,4.2,5.5,4.5,6.8,7.4,5.9)
x = seq(1,10,1)

Saya ingin tahu apakah ada transformasi daya (Box cox mungkin?) Yang memungkinkan saya mendapatkan kecocokan yang lebih baik untuk data daripada sekadar melakukan pencocokan linear seperti yang ditunjukkan di bawah ini.

fit = lm(y ~ x)

Seperti yang saya pahami, tujuan transformasi seperti Box Cox bukan untuk mendapatkan kecocokan yang lebih baik, tetapi untuk memenuhi asumsi model. Itu mungkin mendapatkan kecocokan yang lebih baik, kecocokan yang lebih buruk, atau tidak banyak perubahan, tetapi itu akan menjadi kecocokan yang tidak melanggar asumsi.
Peter Flom

transformasi nonlinier akan membuat hubungan linear menjadi nonlinier (meskipun kadang-kadang Anda dapat mengubah x juga dan memperbaikinya). Namun, transformasi juga dapat meluruskan yang melengkung, dan pada saat yang sama mengurangi heteroskedastisitas (meskipun tidak selalu mungkin untuk melakukan keduanya dengan transformasi yang sama). Untuk data itu log-transform agak membantu.
Glen_b -Reinstate Monica

4
Menggunakan dua nilai ekstrim dan menengah (kelima) dari , metode yang ditampilkan di stats.stackexchange.com/questions/35711/… menunjukkan logaritma (transformasi Box-Cox dengan parameter 0) akan sesuai untuk linierisasi hubungan. Menggunakan nilai pertama, keenam, dan terakhir menunjukkan kebalikan (parameter -1) akan baik. Ini menyarankan hampir semua parameter antara 0 dan -1 mungkin berfungsi. Rentang ini tidak mengejutkan mengingat betapa sedikitnya data yang ada. Tidak ada monoton re-ekspresi akan menstabilkan variasi untuk data ini. y
whuber

Jawaban:


6

Paket MASS yang datang dengan R Anda sudah terinstal, memiliki boxcox()fungsi yang dapat Anda gunakan: Setelah membaca data, lakukan:

library(MASS)
boxcox(y ~ x)

Kemudian lihat grafik yang dihasilkan ini, yang menunjukkan secara grafis interval kepercayaan 95% untuk parameter transformasi boxcox. Tetapi Anda tidak benar-benar memiliki data yang cukup (n = 10) untuk melakukan ini, interval kepercayaan yang dihasilkan hampir dari -2 ke 2!, Dengan perkiraan kemungkinan maksimum sekitar 0 (log-transform, seperti yang dikatakan sebelumnya). Jika data nyata Anda memiliki lebih banyak pengamatan, Anda harus mencoba ini.

Seperti yang orang lain katakan, transformasi ini benar-benar berusaha menstabilkan varian. Ini tidak benar-benar jelas dari teori, apa yang dilakukannya, adalah mencoba untuk memaksimalkan fungsi kemungkinan berbasis distribusi normal, yang mengasumsikan varians konstan. Orang dapat berpikir bahwa memaksimalkan kemungkinan berdasarkan normal akan mencoba untuk menormalkan distribusi residu, tetapi dalam praktiknya kontribusi utama untuk memaksimalkan kemungkinan berasal dari menstabilkan varian. Ini mungkin tidak begitu mengejutkan, mengingat bahwa kemungkinan kita memaksimalkan didasarkan pada varian normal keluarga distribusi normal!

Saya pernah menulis demo berbasis slider di XLispStat, yang menunjukkan ini dengan jelas!


3

Ketika Anda memiliki hubungan linear, tetapi varians tidak sama maka Anda biasanya perlu mengubah baik x dan y untuk mendapatkan hubungan linier dengan varians yang sama (atau hanya menggunakan regresi kuadrat terkecil tertimbang pada variabel yang tidak diubah).

Prosedur AVAS dapat digunakan untuk menyarankan kemungkinan transformasi.


yx15x510y

Setuju dengan @whuber
brokoli

1
Saya setuju dengan @whuber untuk dataset khusus ini, saya hanya berasumsi bahwa data ini dengan cepat dibuat untuk menggambarkan (dan karena itu menunjukkan kurangnya manusia keacakan / kenyataan). Respons saya lebih merupakan saran umum untuk kasus umum varian yang tidak sama.
Greg Snow

Mengingat variansnya meningkat dengan x, akankah glmkerangka kerja dengan fungsi tautan Poisson memotongnya?
Roman Luštrik

3
y

1

Nah, di R Anda bisa mencoba ini:

library(MASS)
boxcox(y~x)
plot(1/y^2~x) # since the profile likelihood has a maximum near 2

masukkan deskripsi gambar di sini

Tapi itu benar-benar tergantung pada apa yang Anda maksud dengan 'lebih cocok dengan data'


-2

baik jika semua data Anda untuk x tidak negatif maka Anda dapat menggunakan kotak transformasi cox ... untuk memperkirakan nilai ideal dari parameter lambda dari transformasi Anda dapat menggunakan matlab ... http://www.mathworks.in/ bantuan / keuangan / boxcox.html


1
"Ideal" di sini berarti sesuatu selain yang diminta dalam pertanyaan. Pertanyaannya adalah untuk menstabilkan varians, sedangkan solusi Matlab berusaha untuk membuat mereka sedekat mungkin dengan terdistribusi normal.
whuber
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.