Ham veya dik polinom regresyonu?


22

Bir değişken gerileme isteyen üzerine . Bunu ham veya dik polinomları kullanarak yapmalı mıyım? Sitede bunlarla ilgilenen soruya baktım, ancak onları kullanma arasındaki farkın ne olduğunu gerçekten anlamıyorum. yx,x2,,x5

Neden sadece katsayılarını almak için "normal" bir gerileme yapamaz aitβiy=i=05βixi (p değerleri ve diğer tüm güzel şeyler ile birlikte) ve bunun yerine ham veya dik polinomlar kullanmak mı endişelenmeli? Bu seçim bana ne yapmak istediğimin kapsamı dışında gibi görünüyor.

Şu anda okuduğum istatistik kitabında (Tibshirani ve ark. Tarafından ISLR) bunlardan bahsedilmedi. Aslında bir şekilde önemsiz gösteriliyorlardı.
Bunun nedeni, AFAIK, lm()R'deki fonksiyonda, y ~ poly(x, 2)ortogonal polinomların kullanım y ~ x + I(x^2)miktarlarının ve ham olanların kullanım miktarlarının kullanılmasıdır. Ancak sf. 116'da yazarlar ilk seçeneği kullandığımızı söylüyor çünkü ikincisi "hantal" ve bu komutların aslında tamamen farklı şeylere (ve sonuç olarak farklı çıktılara sahip olduğuna) dair hiçbir işaret bırakmıyor.
(üçüncü soru) ISLR yazarları okuyucularını neden böyle karıştırdı?


1
@Sycorax polyOrtogonal polinomlarla bir ilgisi olduğunu biliyorum ve ben (x ^ 2) bilmiyor (ayrıntıları bilmememe rağmen) - ama yine de, neden ISLR yazarları işe yaramayan bir yöntem öneriyor? ? Her iki komut da aynı şeyi yapıyor gibi görünüyorsa çok yanıltıcı görünüyor, ama aslında sadece bir tane iyi.
l7ll7

1
@gung polyBu sorunla ilgili belgelere baktım ve bir süre geçirdim, ancak poly (x, 2) ve x + I (x ^ 2) 'nin neden bir fark yarattığını anlayamıyorum ? Soru offtopik ise, lütfen yorumlarda beni aydınlatabilir misiniz?
l7ll7

1
@gung Sorumu tamamen yeniden düzenledim. Bu seçim ham / dikey beni daha da karıştırıyor - daha önce bunun sadece küçük bir Rteknik olduğunu düşündüm, anlamadım, ama şimdi beni kodlaması gereken bir regresyon yapmamı engelleyen dolu bir istatistik problemi gibi görünüyor kodlaması zor.
l7ll7

2
@gung Bu aslında bana yardım ettiğinden daha fazla karıştı. Daha önce sadece dik polinomlarla gitmem gerektiğini düşündüm, çünkü bu doğru yol gibi görünüyordu, ama bu cevapta ham polinomlar kullanılıyor. Şaşırtıcı bir şekilde, ağdaki herkes "RTFM" diye bağırıyor, ama ne zaman ne zaman kullanılacağı net bir cevap yok. (Bağlantınız da buna cevap vermiyor, sadece bir örnek, orth. Pol. Yanlış gittiğinde)
l7ll7

2
Cevabın quintic polinom olacağını belirten bazı fiziksel veya mühendislik alanlarında çalışmadığınız sürece, hemen hemen doğru yaklaşım ilk etapta polinom regresyonu yapmak değildir. Özgürlük derecelerinizi bir polin ya da polinom uyumundan çok daha esnek ve istikrarlı olacak bir şeye yatırın .
whuber

Yanıtlar:


10

Cevabın daha az sayısal kararlılık (daha önemli bir rol oynamasına rağmen) ve daha az korelasyonun azaltılması olduğuna inanıyorum.

Özünde - mesele, bir grup üst düzey polinomlara karşı gerilediğimizde, gerilediğimiz ortak değişkenlerin yüksek derecede korelasyona dönüşmesi gerçeğine dayanmaktadır. Aşağıdaki örnek kod:

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

Bu son derece önemlidir. Değişkenler daha ilişkili hale geldikçe, hangisinin önemli olduğunu (ve etkilerinin büyüklüğünün) belirleme yeteneğimiz hızla aşınır. Buna tipik olarak çoklu-doğrusallık sorunu denir. Sınırda, tamamen ilişkili iki değişkenimiz olsaydı, bir şeye karşı gerilediğimizde, ikisi arasında ayrım yapmak imkansızdır - bunu sorunun aşırı bir versiyonu olarak düşünebilirsiniz, ancak bu sorun bizim tahminlerimizi etkiler daha düşük korelasyon dereceleri de. Dolayısıyla, gerçek anlamda - sayısal istikrarsızlık bir sorun olmasa bile - yüksek mertebeden polinomlardan gelen korelasyon, çıkarım rutinlerimize büyük zarar verir. Bu, aksi takdirde göreceğiniz daha büyük standart hatalar (ve dolayısıyla daha küçük t istatistikleri) olarak ortaya çıkacaktır (aşağıdaki örnek regresyona bakın).

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)

Bu kodu çalıştırırsanız, yorumlama bir dokunuş kadar zordur, çünkü katsayıların hepsi değişir ve bu yüzden işleri karşılaştırmak zordur. Yine de T istatistiklerine bakıldığında, katsayıları belirleme yeteneğinin ortogonal polinomlarla çok daha büyük olduğunu görebiliriz. İlgili 3 katsayı için, ortogonal model için (560,21,449) t-istatistikleri ve ham polinom modeli için sadece (28, -38,121) istatistikleri aldım. Bu, sadece birkaç nispeten düşük mertebeden önemli polinom terimine sahip basit bir model için büyük bir farktır.

Bu, maliyetsiz olarak geldiği anlamına gelmez. Akılda tutulması gereken iki temel maliyet vardır. 1) dik polinomlarla yorumlanabilirliği kaybederiz. Katsayının ne anlama x**3geldiğini anlayabiliriz , ancak katsayıyı x**3-3x(üçüncü hermit poli - mutlaka kullanacağınız şey değil) yorumlamak çok daha zor olabilir. İkincisi - bunların polinomlar dik olduğunu söylediğimizde, bir mesafe ölçüsüne göre dik olduklarını kastediyoruz. Durumunuzla ilgili bir mesafe ölçüsü seçmek zor olabilir. Bununla birlikte, söyledikten sonra, polyfonksiyonun, doğrusal regresyonlar için yararlı olan kovaryansa göre dik olacak şekilde seçmek için tasarlandığına inanıyorum .


3
-1. Düşük dereceli katsayılarda gördüğünüz daha büyük standart hatalar kırmızı bir ringa balığıdır. İki modelinizdeki düşük dereceli katsayılar tamamen farklı şeyler tahmin ediyor, bu yüzden standart hatalarını karşılaştırmak mantıklı değil. Her iki modelde de aynı şeyi tahmin eden en yüksek mertebe katsayısıdır ve polinomlar dik olsun ya da olmasın, t istatistiğinin aynı olduğunu göreceksiniz. İki modeliniz, takılan değerler, R ^ 2 vb. Bakımından istatistiksel olarak eşdeğerdir, temel olarak sadece katsayıların yorumlanmasında farklılık gösterir
Jake Westfall

@ JakeWestfall, sana katıldığımı sanmıyorum. Her şeyden önce, kodu çalıştırmak, tüm polinom siparişleri için farklı olan değerleri üretir, biri hariç hepsi değil - özünde polinomu alır ve üzerinde PCA yapar. İkincisi ve daha da önemlisi, t-istatistikleri büyük ölçüde farklıdır - cevabımda kodun çalıştırılması, işlevsel olarak çoklu-doğrusallık sorununu çözdüğümüzü doğrulayacaktır. Takılan değerlerin, R ^ 2, F testlerinin vb. Aslında dikleştirmenin bir nedeni - polinom terimlerini algılama yeteneğimiz dışında hiçbir şeyi değiştirmez .
user5957401

1
Re: ilk nokta, özür dilerim, ben onun katsayısı değil, en üst düzey terimin t-stat ifade etmek istedim. Bu yordayıcı ölçeklendirilir + modeller arasında kaydırılır, bu yüzden evet resif değişir, ancak t
Jake Westfall'ın

Re: ikinci nokta, alt-sıra terimleri için "t-istatistikleri önemli ölçüde farklı" nedeni, yine, çünkü iki modelde tamamen farklı şeyler tahmin ediyorlar. Doğrusal etkiyi göz önünde bulundurun: içinde raw.modeğrinin eğimini x = 0 orthogonal.modolarak tahmin eder, marjinal eğimi tahmin eder (yani, lm(y ~ poly(x,1))yüksek dereceli terimlerin atlandığı yerle aynıdır ). Bu tamamen farklı tahminlerin tahminlerinin karşılaştırılabilir standart hatalara sahip olması için hiçbir neden yoktur. raw.modÇok daha yüksek t istatistiklerine sahip bir karşı örnek kolayca inşa edilebilir
Jake Westfall

@JakeWestfall. Hala çoklu bağlantıyı özlediğinizi düşünüyorum. Bununla birlikte, birbirimizden geçmiş gibi görünüyoruz ve belki de bir çözüm var. Kolayca karşı bir örnek oluşturabileceğinizi söylüyorsunuz, lütfen yapın. Bence aklınızdaki dgp'yi görmek benim için çok açıklığa kavuşacak. Şu anda, tanımladığınız gibi davranabildiğim tek şey ciddi model yanlış tanımlaması içeriyor.
user5957401

8

Neden katsayıları elde etmek için "normal" bir regresyon yapamıyorum?

0.40.4000000059604644775390625

Ham polinom kullanımı sorun yaratacaktır çünkü çok sayıda olacağız. İşte küçük bir kanıt: matris durum numarasını ham ve dik polinom ile karşılaştırıyoruz .

> 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

Bir örnek için cevabımı buradan kontrol edebilirsiniz.

Yüksek mertebeden polinom için neden büyük katsayılar var?


6
Tek duyarlıklı şamandıralar kullanıyor ve bunları dört katına çıkarmak için teklif ediyorsunuz! Bu nasıl oldu? GPU'lar dışında, neredeyse tüm istatistiksel hesaplamalar en az iki kat doğruluk kullanır. Örneğin, içinde Rçıkış print(0.4, digits=20)IS 0.40000000000000002.
whuber

6

Bu cevapların birçoğunun amacı tamamen kaçırdığını hissediyorum. Haitao'nun cevabı ham polinomlara uyma ile ilgili hesaplama problemlerini ele alıyor , ancak OP'nin iki yaklaşım arasındaki istatistiksel farklılıkları sorduğu açık . Yani, tüm değerleri tam olarak temsil edebilecek mükemmel bir bilgisayarımız olsaydı, neden bir yaklaşımı diğerine tercih edelim ki?

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

2019-10-25 tarihinde reprex paketi tarafından oluşturuldu (v0.3.0)

Petal.WidthOrtogonal uyumdan 0'ın marjinal etkisi ve standart hatası, ham polinom uyumundan tam olarak eşittir. Ortogonal polinomların kullanılması, iki model arasında aynı miktarda tahminlerin kesinliğini artırmaz.

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

2019-10-25 tarihinde reprex paketi tarafından oluşturuldu (v0.3.0)

0.0010.0030.0050.9270.9270.0200.0050.927. Ham polinom modelinden değil ortogonal polinom modelinden, sonuçta açıklanan varyansın çoğunun doğrusal terimden kaynaklandığını biliyoruz, kare terimden çok az ve kübik terimden çok daha az. Ham polinom değerleri bu hikayeyi anlatmaz.

Şimdi, bu yorumsal faydayı, modelin katsayılarını gerçekten anlayabilmenin etkileşimli faydası üzerinde istiyorsanız, o zaman dik polinomları kullanmalısınız. Katsayılara bakmayı ve ne anlama geldiğini tam olarak bilmek isterseniz (tipik olarak birinden şüphe duysam da), o zaman ham polinomları kullanmalısınız. Eğer umursamıyorsanız (yani, sadece karıştırmak veya öngörülen değerleri üretmek istiyorsanız), o zaman gerçekten önemli değil; her iki form da bu hedefler için aynı bilgileri taşır. Düzenlemede (örneğin, kement) dikey polinomların tercih edilmesi gerektiğini de tartışacağım, çünkü daha yüksek mertebeden terimlerin kaldırılması, ham polinomlar için doğru olmayan düşük mertebe terimlerin katsayılarını etkilemez,


1
Mükemmel katkı. Ben marjinal sonuçlarınızı çoğaltamam (ilk kod bloğunuzu çalıştırmayı denediğimde kenar boşluğu işlevi poli hakkında bir hata çıkarıyor - marj paketine aşina değilim) - ama tam olarak beklediğim şey bunlar. Küçük bir öneri olarak - ham modele de marj analizinin çıktısını dahil etmelisiniz. Argümanınız, p değerlerinde özetten kenar boşluğu işlevlerine (sonuçlarımızı daha az değiştirmemek!) - ki bu da dağıtım yerine normal kullanmaktan kaynaklanıyor gibi gözüküyor (hafifçe). Düzenleme noktanız mükemmel.
user5957401

1
Nazik sözlerin için teşekkür ederim. Ben eklemek zorunda düşünüyorum stats::çağrısında poly()içinde lm()için margins(aptal olan) onu tanımak için. Argümanımı nokta tahminlerine ve standart hatalara odaklamak istedim ve çok fazla yabancı ve dikkat dağıtıcı bilgi sunulduğunu biliyorum, ancak umarım metin noktalarımı göstermektedir.
Noah

Bu değil. Kodunuzu aynen kopyaladım ve kullanıyorsunuz stats::poly(). Hata diyor 'degree' must be less than number of unique pointski bu bana pek yardımcı olmuyor. Bununla birlikte, margin()kanıtlanabilir ifadeleri yedekliyor , bu yüzden önemli değil.
user5957401

4

@ User5957401'in mükemmel yanıtını destekliyorum ve enterpolasyon, ekstrapolasyon ve raporlama hakkında yorumlar ekliyorum.

Kararlı parametre değerleri alanında bile, dik polinomlar tarafından modellenen katsayılar / parametreler, ham parametreler tarafından modellenen katsayılardan / parametrelerden önemli ölçüde daha küçük standart hatalara sahip olacaktır. Esasen, ortogonal polinomlar, sıfır-kovaryans tanımlayıcıların serbest bir setidir. Bu ücretsiz PCA!

Tek potansiyel dezavantajı, bunu sıfır-kovaryans tanımlayıcılarının erdemini anlamayan birine açıklamak zorunda kalmaktır. Katsayılarıdır olmayan birinci dereceden (hız gibi) ya da ikinci dereceden (ivme-benzeri) etkileri bağlamında hemen yorumlanabilir. Bu, bir iş ortamında oldukça zarar verici olabilir.

10-d~R,2birdj R,2

Bu yüzden dik modeli bildirirken "büyüklük emirleri" ham modelden daha emin olurdum. Uygulamada, her iki modelle enterpolasyon yapardım , ancak yalnızca dik modelle tahmin edecektim .


1

Ben sadece bu söz yorum yapardı, ama yeterli temsilcisi yok, bu yüzden bir cevap genişletmek çalışacağım. "İstatistiksel Öğrenime Giriş" (James ve ark., 2017, 8. baskı düzeltildi) Laboratuar Bölüm 7.8.1'de, ortogonal polinomları kullanma veya kullanma arasında bazı farklılıkları tartıştıklarını görmek isteyebilirsiniz. raw=TRUEya da raw=FALSEiçinde poly()fonksiyon. Örneğin, katsayı tahminleri değişecektir, ancak takılan değerler değişmez:

# 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    

Kitap aynı zamanda ortogonal polinomlar kullanıldığında, anova()iç içe F-testi kullanılarak elde edilen p değerlerinin (polinomun ne derece garanti edilebileceğini keşfetmek için) standart t-testi kullanılırken elde edilen değerlerle aynı olduğunu tartışmaktadır summary(fit). Bu, F-istatistiğin belirli durumlarda t-istatistiğin karesine eşit olduğunu gösterir.


İtibar numaralarınızdan bağımsız olarak yorumlar asla cevap olarak kullanılmamalıdır.
Michael R.Chernick

Son noktanıza gelince, bu dikey olmayan polinomlar için de geçerlidir. Katsayı t-testi, bir modeli içindeki katsayıyla ve regresyondaki tüm katsayıları olmayan (her seferinde bir tane alınan) bir modeli karşılaştıran F-testine eşittir.
Nuh
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.