Box-Cox suka transformasi untuk variabel independen?

53

Apakah ada transformasi seperti Box-Cox untuk variabel independen? Artinya, transformasi yang mengoptimalkan variabel sehingga akan membuat lebih cocok untuk model linier?xy~f(x)

Jika demikian, apakah ada fungsi untuk melakukan ini R?

Tal Galili
sumber
1
Saya tidak tahu fasilitas apa pun untuk melakukan ini Rdan, memikirkannya sejenak, saya tidak yakin persis bagaimana seseorang akan melakukan ini sama sekali. Kriteria apa yang akan Anda optimalkan untuk memastikan transformasi "paling linier"? menggoda, tetapi, seperti terlihat dalam jawaban saya di sini , sendiri tidak dapat digunakan untuk melihat apakah asumsi linearitas model terpenuhi. Apakah Anda memiliki beberapa kriteria dalam pikiran? R2R2
Makro
1
Saya mendapat kesan saya sudah melihat kertas berbicara tentang itu. Mungkin googling dengan "kovariat" bukan "variabel independen" lebih bijaksana.
Stéphane Laurent
Saya pikir (dari memori ...) ada beberapa implementasi ini dalam paket mobil (R). Tapi Anda juga akan menyelidiki gam seperti di paket gmcv.
kjetil b halvorsen
Thread yang membahas inferensi otomatis parameter Box-Cox (dengan secara bersamaan mengubah semua variabel independen bersama dengan variabel dependen) telah muncul di stats.stackexchange.com/questions/60431/… .
whuber

Jawaban:

72

John Tukey menganjurkan " metode tiga titik " -nya untuk menemukan ekspresi ulang variabel untuk menjalin hubungan.

Saya akan mengilustrasikan dengan latihan dari bukunya, Exploratory Data Analysis . Ini adalah data tekanan uap merkuri dari percobaan di mana suhu bervariasi dan tekanan uap diukur.

pressure <- c(0.0004, 0.0013, 0.006, 0.03, 0.09, 0.28, 0.8, 1.85, 4.4, 
              9.2, 18.3, 33.7, 59, 98, 156, 246, 371, 548, 790) # mm Hg
temperature <- seq(0, 360, 20) # Degrees C

Relasinya sangat nonlinier: lihat panel kiri dalam ilustrasi.

Plot

Karena ini adalah latihan eksplorasi , kami berharap ini menjadi interaktif. Analis diminta untuk memulai dengan mengidentifikasi tiga poin "khas" dalam plot : satu di dekat setiap ujung dan satu di tengah. Saya telah melakukannya di sini dan menandainya dengan warna merah. (Ketika saya pertama kali melakukan latihan ini sejak lama, saya menggunakan serangkaian poin yang berbeda tetapi tiba pada hasil yang sama.)

Dalam metode tiga titik, satu pencarian - dengan kekuatan kasar atau sebaliknya - untuk transformasi Box-Cox yang bila diterapkan pada salah satu koordinat - baik y atau x - akan (a) menempatkan titik-titik tipikal kira-kira pada suatu line dan (b) menggunakan kekuatan "baik", biasanya dipilih dari "tangga" kekuasaan yang mungkin dapat ditafsirkan oleh analis.

Untuk alasan yang akan menjadi jelas nanti, saya telah memperpanjang keluarga Box-Cox dengan membiarkan "offset" sehingga transformasi dalam bentuk

x(x+α)λ-1λ.

Berikut ini adalah Rimplementasi cepat dan kotor . Pertama-tama ia menemukan solusi optimal , kemudian membulatkan λ ke nilai terdekat pada tangga dan, dengan tunduk pada batasan itu, mengoptimalkan α (dalam batas wajar). Ini sangat cepat karena semua perhitungan hanya didasarkan pada tiga poin khas dari dataset asli. (Anda bisa melakukannya dengan pensil dan kertas, bahkan, itulah yang dilakukan Tukey.)(λ,α)λα

box.cox <- function(x, parms=c(1,0)) {
  lambda <- parms[1]
  offset <- parms[2]
  if (lambda==0) log(x+offset) else ((x+offset)^lambda - 1)/lambda
}
threepoint <- function(x, y, ladder=c(1, 1/2, 1/3, 0, -1/2, -1)) {
  # x and y are length-three samples from a dataset.
  dx <- diff(x)
  f <- function(parms) (diff(diff(box.cox(y, parms)) / dx))^2
  fit <- nlm(f, c(1,0))
  parms <- fit$estimate #$
  lambda <- ladder[which.min(abs(parms[1] - ladder))]
  if (lambda==0) offset = 0 else {
    do <- diff(range(y))
    offset <- optimize(function(x) f(c(lambda, x)), 
                       c(max(-min(x), parms[2]-do), parms[2]+do))$minimum    
  }
  c(lambda, offset)
}

Ketika metode tiga titik diterapkan pada nilai tekanan (y) dalam dataset uap merkuri, kita mendapatkan panel tengah plot.

data <- cbind(temperature, pressure)
n <- dim(data)[1]
i3 <- c(2, floor((n+1)/2), n-1)
parms <- threepoint(temperature[i3], pressure[i3])
y <- box.cox(pressure, parms)

parms(0,0)

Kami telah mencapai titik analog dengan konteks pertanyaan: untuk alasan apa pun (biasanya untuk menstabilkan varians residual), kami telah menyatakan kembali variabel dependen , tetapi kami menemukan bahwa hubungan dengan variabel independen adalah nonlinear. Jadi sekarang kita beralih untuk mengekspresikan kembali variabel independen dalam upaya untuk meluruskan hubungan. Ini dilakukan dengan cara yang sama, hanya membalikkan peran x dan y:

parms <- threepoint(y[i3], temperature[i3])
x <- box.cox(temperature, parms)

parms(-1,253.75)-254-11


2732542732541/(1-x)

-2540

whuber
sumber
2
Halo Whuber sayang. Sungguh jawaban yang menarik, saya membacanya dengan senang hati, terima kasih! (dan saya juga akan bermain sedikit untuk melihat bagaimana hal itu sesuai dengan masalah yang saya kerjakan)
Tal Galili
3
n2data <- cbind(temperature, pressure)R
2
@landroni Kekuatan fraksional integral dan kecil sering muncul dalam teori fisika, kimia, dan biologi, serta melalui pertimbangan geometris. (Misalnya, ketika variabel adalah volume, akar pangkat tiga adalah panjang - yang dapat ditafsirkan - sedangkan, akar ketujuh tidak memiliki interpretasi geometris sederhana.) Kekuatan lain jarang memiliki interpretasi seperti itu.
whuber
3
@ Frank Itu benar; itu secara eksplisit dan tanpa malu-malu merupakan teknik eksplorasi. Perhatikan bahwa itu bahkan tidak mengklaim sebagai prediksi. Eksplorasi hanya dapat menyarankan cara untuk melanjutkan. Dimungkinkan untuk membayangkan mengalokasikan empat df anggaran pemodelan Anda untuk memperkirakan transformasi ini, meskipun - dan estimasi dapat dimasukkan secara otomatis ke dalam algoritma pemasangan menggunakan pendekatan Tukey atau sebaliknya (ML adalah kemungkinan yang jelas).
whuber
5
YYλ
11

Lihatlah slide-slide ini pada "Diagnostik Regresi" oleh John Fox (tersedia dari sini , lengkap dengan referensi), yang secara singkat membahas masalah transformasi nonlinier. Ini mencakup "aturan menggembung" Tukey untuk memilih transformasi daya (ditangani oleh jawaban yang diterima), tetapi juga menyebutkan keluarga transformasi Box-Cox dan Yeo-Johnson. Lihat Bagian 3.6 dari slide. Untuk pengambilan yang lebih formal oleh penulis yang sama lihat J. Fox, Analisis Regresi Terapan dan Model Linear Umum, Edisi Kedua (Sage, 2008) .

Adapun paket R aktual yang membantu dengan ini, benar-benar melihat paket mobil , yang ditulis oleh J. Fox dan S. Weisberg. Paket ini menyertai J. Fox dan S. Weisberg, Sahabat R untuk Regresi Terapan, Edisi Kedua, (Sage, 2011) , yang lain harus dibaca. Dengan menggunakan paket itu Anda dapat memulai dari basicPower()(transformasi daya sederhana), bcPower()(transformasi Box-Cox) dan yjPower()(transformasi Yeo-Johnson). Ada juga powerTransform () :

Fungsi powerTransform digunakan untuk memperkirakan transformasi normalisasi variabel acak univariat atau multivariat.

Periksa kedua buku untuk detail lebih lanjut tentang teori di balik transformasi ini dan pada pendekatan komputasi.

Landroni
sumber