Manuel polinom genişlemesi ve R `poli` fonksiyonunu kullanmak için neden farklı tahminler alıyorum?


10

Manuel polinom genişlemesi ve R polyfonksiyonunu kullanmak için neden farklı tahminler alıyorum ?

set.seed(0)
x <- rnorm(10)
y <- runif(10)
plot(x,y,ylim=c(-0.5,1.5))
grid()

# xp is a grid variable for ploting
xp <- seq(-3,3,by=0.01)
x_exp <- data.frame(f1=x,f2=x^2)
fit <- lm(y~.-1,data=x_exp)
xp_exp <- data.frame(f1=xp,f2=xp^2)
yp <- predict(fit,xp_exp)
lines(xp,yp)

# using poly function
fit2 <- lm(y~ poly(x,degree=2) -1)
yp <- predict(fit2,data.frame(x=xp))
lines(xp,yp,col=2)

resim açıklamasını buraya girin

Girişimim:

  • Kesişme ile ilgili bir sorun gibi görünüyor, modeli kesişme ile bağladığımda, yani -1modelde yok formula, iki çizgi aynı. Ama neden kesişmeden iki çizgi farklı?

  • Başka bir "düzeltme" rawdik polinom yerine polinom genişlemesi kullanmaktır. Kodu değiştirirsek, fit2 = lm(y~ poly(x,degree=2, raw=T) -1)2 satırı aynı yapar. Ama neden?


4
Bu, sorunuzun konusu değil, ancak genellikle yoruma çok açıksınız. Kodunuzu okurken, fark ettiğim ilk şey tutarsız olarak =ve <-atama için kullanmanızdır . Bunu gerçekten yapmazdım, tam olarak kafa karıştırıcı değil, ancak kodunuza çok fazla görsel gürültü ekliyor. Kişisel kodunuzda kullanmak için birine ya da diğerine yerleşmeli ve sadece ona uymalısınız.
Matthew Drury

kodlama konusunda bana yardım ettiğin için teşekkürler! soru düzeltildi. @MatthewDrury
Haitao Du

3
Yapmak için Rastgele takip ucu <-az bir güçlük yazın: alt+-.
JAD

@JarkoDubbeldam kodlama ipucu için teşekkürler.
Klavyede

Yanıtlar:


12

Orijinal farkı doğru bir şekilde not ettiğiniz gibi, ilk durumda "ham" polinomları, ikinci durumda ise ortogonal polinomları kullanmanızdır. Daha sonra nedenle lmçağrı içine değiştirilmiş: fit3<-lm(y~ poly(x,degree=2, raw = TRUE) -1)biz arasına aynı sonuçları alacağı fitve fit3. Nedeni neden biz bu durumda aynı sonuçları almak için "önemsiz" dir; taktığımızla aynı modele uyuyoruz fit<-lm(y~.-1,data=x_exp), orada sürpriz yok.

İki modelin model matrislerinin aynı olup olmadığını kolayca kontrol edebilirsiniz all.equal( model.matrix(fit), model.matrix(fit3) , check.attributes= FALSE) # TRUE).


Daha ilginç olan, bir kesişim kullanırken neden aynı grafikleri elde edeceğinizdir. Dikkat edilmesi gereken ilk şey, bir modeli bir araya sokarak takarken

  • Durumunda fit2basitçe dikey model tahminleri taşımak biz; eğrinin gerçek şekli aynıdır.

  • Öte yandan, fitsonuçlarda bir kesişim dahil olmak üzere , dikey yerleştirme açısından sadece farklı bir çizgiye değil, genel olarak tamamen farklı bir şekle sahiptir.

Mevcut arsaya sadece aşağıdaki parçaları ekleyerek bunu kolayca görebiliriz.

fit_b<-lm(y~. ,data=x_exp)
yp=predict(fit_b,xp_exp)
lines(xp,yp, col='green', lwd = 2)

fit2_b<-lm(y~ poly(x,degree=2, raw = FALSE) )
yp=predict(fit2_b,data.frame(x=xp))
lines(xp,yp,col='blue')

resim açıklamasını buraya girin

Tamam ... Kesişim dahil uyumlar aynı iken kesişmesiz uyumlar neden farklıydı? Yakalama bir kez daha diklik durumundadır.

Durumunda fit_bkullanılan model matris gram matrisi, ortogonal olmayan elemanları ihtiva crossprod( model.matrix(fit_b) )çapraz uzaktır; fit2_belemanların dik olması durumunda ( crossprod( model.matrix(fit2_b) )etkili bir şekilde diyagonaldir).

Bu nedenle, fitbir kesişim içerecek şekilde genişlettiğimizde fit_b, Gram matris TX'in köşegen olmayan girişlerini değiştirdik ve sonuçta ortaya çıkan uyum, bir bütün olarak (farklı eğrilik, kesişim, vb.) tarafından sağlanan uygun ile . Durumunda olduğu gibi biz bir yolunu kesmek dahil etmek genişletmek zaman olsa biz sadece zaten biz sütunlara dik olan bir sütun eklemek, diklik ise dereceye 0 sabit polinomun karşı . Bu, takılan hattımızı kesişme noktasından dikey olarak hareket ettirmekle sonuçlanır. Bu nedenle araziler farklı.XTXfitfit2fit2_b

İlginç soru , fit_bve öğelerinin neden fit2_baynı olduğudur; sonuçta model matrislerden alınır fit_bve yüz değerindefit2_b aynı değildir . Burada nihayetinde bunu hatırlamamız ve aynı bilgilere sahip olmamız gerekiyor . sadece lineer bir kombinasyon olduğu için ortaya çıkan uyumları aynı olacaktır. Takılan katsayıda gözlemlenen farklar, değerleri dikleştirmek için değerlerin doğrusal rekombinasyonunu yansıtır . (G. Grothendieck cevaba bakınız burada çok farklı örneğin.)fit_bfit2_bfit2_bfit_bfit_b


+2.5 harika cevap için teşekkürler. Son grafik için @kjetilb halvorsen'den öğrendim: Bunu açıklamanın daha soyut bir yolu, modelin kendisinin sadece belirli bir doğrusal alt alana, yani tasarım matrisi tarafından tanımlanan sütun alanına bağlı olmasıdır. Ancak parametreler, yalnızca bu alt alana değil, kullanılan belirli değişkenler, yani sütunların kendisi tarafından verilen bu alt alana da dayanır. Örneğin, modelden yapılan tahminler, seçilen temele değil, yalnızca doğrusal alt alana bağlı olacaktır.
Haitao Du

umrumda değil, ben biraz yeniden biçimlendirdi ..
Haitao Du

@ hxd1011: Hiç sorun değil, biraz "taramak" için zaman ayırdığınız için teşekkürler.
usεr11852
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.