Regresi polinomial mentah atau ortogonal?


22

Saya ingin mengembalikan variabel ke x , x 2 , ... , x 5 . Haruskah saya melakukan ini menggunakan polinomial mentah atau ortogonal? Saya melihat pertanyaan di situs yang berurusan dengan ini, tetapi saya tidak benar-benar mengerti apa perbedaan antara menggunakannya. yx,x2,,x5

Mengapa saya tidak bisa hanya melakukan regresi "normal" untuk mendapatkan koefisien dari y = 5 i = 0 β i x iβiy=i=05βixi (bersama dengan nilai-p dan semua hal bagus lainnya) dan alih-alih harus khawatir apakah menggunakan polinomial mentah atau ortogonal? Pilihan ini bagi saya tampaknya berada di luar ruang lingkup apa yang ingin saya lakukan.

Di buku stat saya sedang membaca (ISLR oleh Tibshirani et al) hal-hal ini tidak disebutkan. Sebenarnya, mereka diremehkan.
Alasannya adalah, AFAIK, bahwa dalam lm()fungsi dalam R, menggunakan y ~ poly(x, 2)jumlah untuk menggunakan polinomial ortogonal dan menggunakan y ~ x + I(x^2)jumlah untuk menggunakan yang mentah. Tetapi pada halaman 116 penulis mengatakan bahwa kami menggunakan opsi pertama karena yang terakhir adalah "rumit" yang tidak meninggalkan indikasi bahwa perintah ini sebenarnya untuk hal-hal yang sama sekali berbeda (dan sebagai akibatnya memiliki keluaran yang berbeda).
(pertanyaan ketiga) Mengapa para penulis ISLR membingungkan pembaca mereka seperti itu?


1
@ Scorax Saya tahu polyada hubungannya dengan polinomial ortogonal dan saya (x ^ 2) tidak (walaupun saya tidak tahu detailnya) - tapi tetap saja, mengapa penulis ISLR kemudian merekomendasikan metode yang tidak bekerja ? Tampaknya sangat menyesatkan jika kedua perintah tampaknya melakukan hal yang sama, tetapi hanya satu yang benar-benar baik-baik saja.
l7ll7

1
@ung saya melihat dokumentasi polydan menghabiskan beberapa saat dengan masalah ini, tapi saya tidak tahu mengapa poli (x, 2) dan x + I (x ^ 2) membuat perbedaan? Bisakah Anda mencerahkan saya di sini di komentar, jika pertanyaannya offtopic?
l7ll7

1
@ung, saya selesai mengedit kembali pertanyaan saya. Pilihan mentah / ortogonal ini membingungkan saya bahkan lebih - sebelumnya saya pikir ini hanya Rteknis kecil , yang saya tidak mengerti, tetapi sekarang tampaknya menjadi masalah stat penuh yang menghambat saya melakukan pengkodean regresi yang seharusnya tidak boleh yang sulit dikodekan.
l7ll7

2
@ung Itu sebenarnya membingungkan saya lebih dari itu membantu. Sebelumnya saya berpikir bahwa saya seharusnya hanya pergi dengan polinomial ortogonal, karena itu sepertinya cara yang benar, tetapi dalam jawaban itu polinomial mentah digunakan. Yang mengejutkan, semua orang di internet berteriak "RTFM", tetapi sebenarnya tidak ada jawaban yang jelas, kapan harus menggunakan apa. (Tautan Anda juga tidak memberikan jawaban untuk ini, hanya sebuah contoh, ketika ort. Pol. Salah)
l7ll7

2
Kecuali jika Anda bekerja dalam domain fisik atau teknik yang menyatakan bahwa responsnya akan berupa polinomial kuintik, hampir pasti pendekatan yang tepat bukanlah melakukan regresi polinomial. Investasikan derajat kebebasan Anda dalam spline atau sesuatu yang akan jauh lebih fleksibel dan stabil daripada polinomial.
whuber

Jawaban:


10

Saya percaya jawabannya kurang tentang stabilitas numerik (meskipun itu berperan) dan lebih lanjut tentang mengurangi korelasi.

Pada dasarnya - masalah ini bermuara pada fakta bahwa ketika kita mundur melawan sekelompok polinomial tingkat tinggi, kovariat yang kita kemundurkan menjadi sangat berkorelasi. Contoh kode di bawah ini:

x = rnorm(1000)
raw.poly = poly(x,6,raw=T)
orthogonal.poly = poly(x,6)
cor(raw.poly)
cor(orthogonal.poly)

Ini sangat penting. Ketika kovariat menjadi lebih berkorelasi, kemampuan kita untuk menentukan mana yang penting (dan seberapa besar efeknya) terkikis dengan cepat. Ini biasanya disebut sebagai masalah multikolinieritas. Pada batasnya, jika kami memiliki dua variabel yang sepenuhnya berkorelasi, ketika kami regresi mereka terhadap sesuatu, tidak mungkin untuk membedakan antara keduanya - Anda dapat menganggap ini sebagai versi ekstrim dari masalah, tetapi masalah ini mempengaruhi perkiraan kami untuk tingkat korelasi yang lebih rendah juga. Jadi dalam arti nyata - bahkan jika ketidakstabilan numerik tidak menjadi masalah - korelasi dari polinomial berorde lebih tinggi menyebabkan kerusakan yang luar biasa pada rutin inferensi kita. Ini akan bermanifestasi sebagai kesalahan standar yang lebih besar (dan karenanya t-statistik lebih kecil) yang seharusnya Anda lihat (lihat contoh regresi di bawah).

y = x*2 + 5*x**3 - 3*x**2 + rnorm(1000)
raw.mod = lm(y~poly(x,6,raw=T))
orthogonal.mod = lm(y~poly(x,6))
summary(raw.mod)
summary(orthogonal.mod)

Jika Anda menjalankan kode ini, interpretasi adalah sentuhan yang sulit karena koefisien semua berubah dan hal-hal sulit untuk dibandingkan. Melihat T-statistik, kita dapat melihat bahwa kemampuan untuk menentukan koefisien JAUH lebih besar dengan polinomial ortogonal. Untuk 3 koefisien yang relevan, saya mendapatkan t-statistik (560,21,449) untuk model ortogonal, dan hanya (28, -38,121) untuk model polinomial mentah. Ini adalah perbedaan besar untuk model sederhana dengan hanya beberapa istilah polinomial urutan relatif rendah yang penting.

Itu tidak berarti bahwa ini datang tanpa biaya. Ada dua biaya utama yang harus diingat. 1) kita kehilangan beberapa interpretabilitas dengan polinomial ortogonal. Kita mungkin mengerti apa x**3artinya koefisien , tetapi menafsirkan koefisien pada x**3-3x(poli hermit ketiga - belum tentu apa yang akan Anda gunakan) bisa jauh lebih sulit. Kedua - ketika kita mengatakan bahwa ini adalah polinomial adalah ortogonal - yang kita maksudkan adalah ortogonal sehubungan dengan beberapa ukuran jarak. Memilih ukuran jarak yang relevan dengan situasi Anda mungkin sulit. Namun, setelah mengatakan itu, saya percaya bahwa polyfungsi dirancang untuk memilih sedemikian rupa sehingga ortogonal sehubungan dengan kovarians - yang berguna untuk regresi linier.


3
-1. Kesalahan standar yang lebih besar yang Anda lihat pada koefisien urutan bawah adalah herring merah. Koefisien urutan rendah dalam dua model Anda memperkirakan hal yang sama sekali berbeda, jadi membandingkan kesalahan standar mereka tidak masuk akal. Koefisien urutan tertinggi adalah satu-satunya yang memperkirakan hal yang sama di kedua model, dan Anda akan melihat bahwa statistik t identik apakah polinomialnya ortogonal atau tidak. Kedua model Anda secara statistik setara dalam hal nilai yang dipasang, R ^ 2, dll., Mereka berbeda terutama hanya dalam penafsiran koefisien
Jake Westfall

@JakeWestfall, saya pikir saya tidak setuju dengan Anda. Pertama-tama, menjalankan kode menghasilkan nilai-nilai yang berbeda untuk semua perintah polinomial, tidak semua kecuali satu - pada dasarnya dibutuhkan polinomial dan tidak PCA di atasnya. Kedua, dan yang lebih penting, statistik-t berbeda secara substansial - menjalankan kode dalam jawaban saya akan mengonfirmasi bahwa - secara fungsional kami menyelesaikan masalah multikolinieritas. Anda benar bahwa nilai yang dipasang, R ^ 2, uji-F dll tidak berubah. Itu sebenarnya adalah alasan untuk orthogonalize - itu tidak mengubah apa pun kecuali kemampuan kita untuk mendeteksi istilah polinom .
user5957401

1
Re: poin pertama, maaf, saya bermaksud merujuk pada t-stat dari istilah orde tertinggi, bukan koefisiennya. Prediktor itu diskalakan + bergeser di antara model, jadi ya koefisiennya berubah, tetapi ia menguji efek substantif yang sama, seperti yang ditunjukkan oleh t
Jake Westfall

Re: poin kedua, alasan "statistik t berbeda secara substansial" untuk istilah tingkat rendah adalah, sekali lagi, karena mereka memperkirakan hal-hal yang sama sekali berbeda dalam dua model. Pertimbangkan efek linier: di raw.moddalamnya memperkirakan kemiringan kurva pada x = 0, di orthogonal.moddalamnya memperkirakan kemiringan marjinal (yaitu, identik dengan di lm(y ~ poly(x,1))mana istilah orde tinggi dihilangkan). Tidak ada alasan bahwa estimasi dari estimasi yang sangat berbeda ini harus memiliki kesalahan standar yang sebanding. Orang dapat dengan mudah membangun contoh tandingan di mana raw.modmemiliki statistik t yang jauh lebih tinggi
Jake Westfall

@JakeWestfall. Saya masih berpikir Anda melewatkan multikolinieritas. Namun, kami sepertinya saling berbicara satu sama lain, dan mungkin ada solusinya. Anda mengatakan Anda dapat dengan mudah membuat contoh tandingan, silakan lakukan. Saya pikir melihat dgp yang ada dalam pikiran Anda akan banyak menjelaskan bagi saya. Saat ini satu-satunya hal yang dapat saya pikirkan yang mungkin berperilaku seperti yang Anda gambarkan adalah kesalahan spesifikasi model.
user5957401

8

Mengapa saya tidak bisa hanya melakukan regresi "normal" untuk mendapatkan koefisien?

0.40.4000000059604644775390625

Menggunakan polinomial mentah akan menimbulkan masalah karena kita akan memiliki jumlah besar. Berikut ini adalah bukti kecil: kami membandingkan angka kondisi matriks dengan polinomial mentah dan ortogonal.

> kappa(model.matrix(mpg~poly(wt,10),mtcars))
[1] 5.575962
> kappa(model.matrix(mpg~poly(wt,10, raw = T),mtcars))
[1] 2.119183e+13

Anda juga dapat memeriksa jawaban saya di sini sebagai contoh.

Mengapa ada koefisien besar untuk polinomial tingkat tinggi


6
Anda tampaknya menggunakan pelampung presisi tunggal dan mengutipnya dengan presisi empat kali lipat! Bagaimana itu bisa terjadi? Kecuali untuk GPU, hampir semua perhitungan statistik menggunakan setidaknya dua kali lipat presisi. Misalnya, dalam Routput dari print(0.4, digits=20)is 0.40000000000000002.
Whuber

6

Saya merasa beberapa dari jawaban ini benar-benar tidak penting. Jawaban Haitao membahas masalah komputasi dengan pemasangan polinomial mentah, tetapi jelas bahwa OP bertanya tentang perbedaan statistik antara kedua pendekatan. Artinya, jika kita memiliki komputer yang sempurna yang dapat mewakili semua nilai dengan tepat, mengapa kita lebih memilih satu pendekatan daripada yang lain?

R2XYX=0X=0X

data("iris")

#Raw:
fit.raw <- lm(Petal.Length ~ Petal.Width + I(Petal.Width^2) +
                  I(Petal.Width^3), data = iris)
summary(fit.raw)

#> Coefficients:
#>                  Estimate Std. Error t value Pr(>|t|)    
#> (Intercept)        1.1034     0.1304   8.464 2.50e-14 ***
#> Petal.Width        1.1527     0.5836   1.975  0.05013 .  
#> I(Petal.Width^2)   1.7100     0.5487   3.116  0.00221 ** 
#> I(Petal.Width^3)  -0.5788     0.1408  -4.110 6.57e-05 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 0.3898 on 146 degrees of freedom
#> Multiple R-squared:  0.9522, Adjusted R-squared:  0.9512 
#> F-statistic: 969.9 on 3 and 146 DF,  p-value: < 2.2e-16

#Orthogonal
fit.orth <- lm(Petal.Length ~ stats::poly(Petal.Width, 3), data = iris)

#Marginal effect of X at X=0 from orthogonal model
library(margins)
summary(margins(fit.orth, variables = "Petal.Width", 
                at = data.frame(Petal.Width = 0)))
#> Warning in check_values(data, at): A 'at' value for 'Petal.Width' is
#> outside observed data range (0.1,2.5)!
#>       factor Petal.Width    AME     SE      z      p  lower  upper
#>  Petal.Width      0.0000 1.1527 0.5836 1.9752 0.0482 0.0089 2.2965

Dibuat pada 2019-10-25 oleh paket reprex (v0.3.0)

Efek marginal Petal.Widthpada 0 dari fit ortogonal dan kesalahan standarnya persis sama dengan yang dari fit polinomial mentah. Menggunakan polinomial ortogonal tidak meningkatkan ketepatan estimasi jumlah yang sama antara kedua model.

YXYX

library(jtools)
data("iris")

fit.raw3 <- lm(Petal.Length ~ Petal.Width + I(Petal.Width^2) +
                  I(Petal.Width^3), data = iris)
fit.raw1 <- lm(Petal.Length ~ Petal.Width, data = iris)

round(summ(fit.raw3, part.corr = T)$coef, 3)
#>                    Est.  S.E. t val.     p partial.r part.r
#> (Intercept)       1.103 0.130  8.464 0.000        NA     NA
#> Petal.Width       1.153 0.584  1.975 0.050     0.161  0.036
#> I(Petal.Width^2)  1.710 0.549  3.116 0.002     0.250  0.056
#> I(Petal.Width^3) -0.579 0.141 -4.110 0.000    -0.322 -0.074

round(summ(fit.raw1, part.corr = T)$coef, 3)
#>              Est.  S.E. t val. p partial.r part.r
#> (Intercept) 1.084 0.073 14.850 0        NA     NA
#> Petal.Width 2.230 0.051 43.387 0     0.963  0.963

fit.orth3 <- lm(Petal.Length ~ stats::poly(Petal.Width, 3), 
               data = iris)
fit.orth1 <- lm(Petal.Length ~ stats::poly(Petal.Width, 3)[,1], 
               data = iris)

round(summ(fit.orth3, part.corr = T)$coef, 3)
#>                                Est.  S.E.  t val. p partial.r part.r
#> (Intercept)                   3.758 0.032 118.071 0        NA     NA
#> stats::poly(Petal.Width, 3)1 20.748 0.390  53.225 0     0.975  0.963
#> stats::poly(Petal.Width, 3)2 -3.015 0.390  -7.735 0    -0.539 -0.140
#> stats::poly(Petal.Width, 3)3 -1.602 0.390  -4.110 0    -0.322 -0.074

round(summ(fit.orth1, part.corr = T)$coef, 3)
#>                                    Est.  S.E. t val. p partial.r part.r
#> (Intercept)                       3.758 0.039 96.247 0        NA     NA
#> stats::poly(Petal.Width, 3)[, 1] 20.748 0.478 43.387 0     0.963  0.963

Dibuat pada 2019-10-25 oleh paket reprex (v0.3.0)

0.0010.0030.0050.9270.9270.0200.0050.927. Dari model polinomial ortogonal tetapi bukan model polinomial mentah, kita tahu bahwa sebagian besar varian dijelaskan dalam hasil adalah karena istilah linear, dengan sangat sedikit yang berasal dari istilah kuadrat dan bahkan lebih sedikit dari istilah kubik. Nilai-nilai polinomial mentah tidak menceritakan kisah itu.

Sekarang, apakah Anda ingin manfaat penafsiran ini daripada manfaat antarpribadi karena benar-benar dapat memahami koefisien model, maka Anda harus menggunakan polinomial ortogonal. Jika Anda lebih suka melihat koefisien dan tahu persis apa artinya (walaupun saya ragu satu biasanya), maka Anda harus menggunakan polinomial mentah. Jika Anda tidak peduli (yaitu, Anda hanya ingin mengontrol untuk mengacaukan atau menghasilkan nilai yang diprediksi), maka itu benar-benar tidak masalah; kedua bentuk membawa informasi yang sama sehubungan dengan tujuan-tujuan tersebut. Saya juga berpendapat bahwa polinomial ortogonal harus lebih disukai dalam regularisasi (misalnya, laso), karena menghapus istilah orde tinggi tidak mempengaruhi koefisien dari syarat orde rendah, yang tidak benar dengan polinomial mentah,


1
Kontribusi luar biasa. Saya tidak dapat mereplikasi hasil marginal Anda (fungsi margin memunculkan kesalahan tentang poli ketika saya mencoba menjalankan blok kode pertama Anda - Saya tidak terbiasa dengan paket margin) - tetapi mereka persis seperti yang saya harapkan. Sebagai saran kecil - Anda harus memasukkan output dari analisis margin pada model mentah juga. Argumen Anda dirusak (sedikit) oleh perubahan nilai-p dari fungsi ringkasan ke margin (mengubah kesimpulan kami tidak kurang!) - yang tampaknya disebabkan oleh penggunaan normal daripada distribusi. Titik regularisasi Anda sangat baik.
user5957401

1
Terima kasih atas kata-kata baiknya. Saya pikir Anda harus memasukkan stats::dalam panggilan ke poly()dalam lm()untuk marginsmengenalinya (yang bodoh). Saya ingin memfokuskan argumen saya pada estimasi titik dan kesalahan standar, dan saya tahu ada banyak informasi asing dan mengganggu yang disajikan, tetapi saya berharap teks ini menggambarkan poin saya.
Noah

Bukan itu. Saya menyalin kode Anda dengan tepat, dan Anda menggunakannya stats::poly(). Kesalahan mengatakan 'degree' must be less than number of unique points- yang tidak banyak membantu saya. Namun demikian, margin()mendukung pernyataan yang dapat dibuktikan sehingga tidak penting.
user5957401

4

Saya menguatkan respons luar biasa dari @ user5957401 dan menambahkan komentar tentang interpolasi, ekstrapolasi, dan pelaporan.

Bahkan dalam domain nilai parameter stabil, koefisien / parameter yang dimodelkan oleh polinomial ortogonal akan memiliki kesalahan standar yang jauh lebih kecil daripada koefisien / parameter yang dimodelkan oleh parameter mentah. Pada dasarnya, polinomial ortogonal adalah set bebas deskriptor nol-kovarian. Itu PCA gratis!

Satu-satunya kelemahan potensial adalah harus menjelaskan hal ini kepada seseorang yang tidak memahami keutamaan deskriptor nol-kovarian. Koefisien tidak langsung dapat ditafsirkan dalam konteks efek urutan pertama (seperti kecepatan) atau urutan kedua (seperti akselerasi). Ini bisa sangat memberatkan dalam lingkungan bisnis.

10dR2adj R2

Jadi saya akan menjadi "pesanan besar" yang lebih percaya diri melaporkan model ortogonal daripada yang mentah. Dalam praktiknya, saya akan melakukan interpolasi dengan model mana pun, tetapi saya hanya akan memperkirakan dengan model yang ortogonal.


1

Saya hanya akan berkomentar untuk menyebutkan ini, tetapi saya tidak memiliki cukup perwakilan, jadi saya akan mencoba untuk memperluas menjadi jawaban. Anda mungkin tertarik untuk melihat bahwa di Lab Bagian 7.8.1 dalam "Pengantar Pembelajaran Statistik" (James et. Al., 2017, mengoreksi cetakan ke-8), mereka mendiskusikan beberapa perbedaan antara menggunakan polinomial ortogonal atau tidak, yang menggunakan raw=TRUEatau raw=FALSEdalam poly()fungsi. Misalnya, estimasi koefisien akan berubah, tetapi nilai yang dipasang tidak:

# using the Wage dataset in the ISLR library
fit1 <- lm(wage ~ poly(age, 4, raw=FALSE), data=Wage)
fit2 <- lm(wage ~ poly(age, 4, raw=TRUE), data=Wage)
print(coef(fit1)) # coefficient estimates differ
print(coef(fit2))
all.equal(predict(fit1), predict(fit2)) #returns TRUE    

Buku ini juga membahas bagaimana ketika polinomial ortogonal digunakan, nilai-p yang diperoleh dengan menggunakan anova()uji F bersarang (untuk mengeksplorasi sejauh mana polinomial mungkin diperlukan) adalah sama dengan yang diperoleh saat menggunakan uji-t standar, keluaran oleh summary(fit). Ini menggambarkan bahwa F-statistik sama dengan kuadrat t-statistik dalam situasi tertentu.


Komentar tidak boleh digunakan sebagai jawaban terlepas dari nomor reputasi Anda.
Michael R. Chernick

Mengenai poin terakhir Anda, ini berlaku untuk polinomial non-ortogonal juga. Koefisien t-test sama dengan F-test yang membandingkan model dengan koefisien di dalamnya dan model tanpa untuk semua koefisien dalam regresi (diambil satu per satu).
Nuh
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.