Doğrusal regresyon gerçekleştirin, ancak çözümü belirli veri noktalarından geçmeye zorlayın


14

Bir dizi nokta üzerinde doğrusal regresyonun nasıl yapılacağını biliyorum. Yani, seçtiğim bir polinomun belirli bir veri kümesine (LSE anlamında) nasıl sığacağını biliyorum. Bununla birlikte, bilmediğim, çözümümü seçtiğim bazı belirli noktalardan geçmeye nasıl zorlayacağım. Bunun daha önce yapıldığını gördüm, ama nasıl yapıldığını bir kenara bırakarak prosedürün ne olduğunu hatırlayamıyorum.

Çok basit ve somut bir örnek olarak, diyelim ki xy düzlemine dağılmış 100 puanım var ve aralarında hangi düzeye sahip bir polinom yerleştirmeyi seçiyorum. Bu doğrusal regresyonun nasıl çok iyi yapılacağını biliyorum. Ancak, , ve koordinatlarındaki veri noktalarından üçünü (ve karşılık gelen y koordinatlarını) geçmek için çözümümü 'zorlamak' istediğimi söyleyelim. elbette).x=3x=19x=89

Bu genel prosedüre ne denir, nasıl yapılır ve bilmem gereken özel tuzaklar var mı?

Düzenle:

Bunu yapmak için somut bir yol aradığımı eklemek isterim. Doğrusal regresyonu iki yoldan biriyle yapan, kovaryans matrisini doğrudan veya gradyan inişiyle tersine çeviren bir program yazdım. Sorduğum şey, polinom çözümünü belirli noktalardan geçmeye zorlayacak şekilde yaptığım şeyi tam olarak adım adım nasıl değiştireceğim?

Teşekkürler!


Bir polinom kullanıyorsanız neden buna "doğrusal" diyorsunuz? Geçmesini istediğiniz her nokta, özgürlük derecenizi azaltacak bir kısıtlamadır. Daha sonra kısıtlı bir optimizasyon algoritması kullanabilirsiniz.
curious_cat

4
Doğrusaldır, çünkü doğrusal bir kombinasyonun katsayılarını bulursunuz. Örneğin, verilerinizi kübik , ortak verimliliklerini ( 'leri) . y = c 0 + c 1 x + c 2 x 2 + c 3 x 3cy=c0+c1x+c2x2+c3x3
Spacey

1
@Mohammad: Ne istediğinizi tahmin etmenin bir başka yolu, ağırlıklı en küçük kareler çözümü kullanmak ve regresyon hattının geçmesini istediğiniz noktalara çok büyük ağırlıklar vermektir. Bu, çözümü seçtiğiniz noktalara çok yakın geçmeye zorlamalıdır.
Jason R

@JasonR Sizi burada görmek güzel. Evet WLS gerçekten ilginç bir yarışmacı. Zeki polinom çarpanlarına ayırma ve hata yapısını güzel bir şekilde sürdürdüğü için, fısıltılarla cevap verdim.
Spacey

Yanıtlar:


19

Söz konusu model yazılabilir

y=p(x)+(xx1)(xxd)(β0+β1x++βpxp)+ε

burada , önceden belirlenmiş noktalardan ve geçen derece polinomudur . ( Lagrange enterpolasyon polinomunu kullanın .) Yazma bu modeli şu şekilde yeniden yazmamızı sağlar d - 1 ( x 1 , y 1 ) , , ( x d , y d ) ε ( x - x 1 ) ( x - x d ) = r ( x )p(xi)=yid1(x1,y1),,(xd,yd)ε(xx1)(xxd)=r(x)

y-p(x)=β0r(x)+β1r(x)x+β2r(x)x2++βpr(x)xp+ε,

bağımsız değişkenlerin miktarları olduğu orijinal ile aynı hata yapısına sahip standart bir OLS çoklu regresyon problemidir . Bu değişkenleri hesaplayın ve sabit bir terim eklemesini engellediğinizden emin olarak tanıdık regresyon yazılımınızı çalıştırın . Sabit bir terim olmadan regresyonlarla ilgili olağan uyarılar geçerlidir; özellikle, yapay olarak yüksek olabilir; olağan yorumlar geçerli değildir.r, ( x ) x i , i = 0 , 1 , ... , p R 2p+1r(x)xben, ben=0,1,...,pR,2

(Aslında, köken boyunca regresyon, bu yapının , ve olduğu özel bir durumdur , böylece model )( x 1 , y 1 ) = ( 0 , 0 ) p ( x ) = 0 y = β 0 x + + β p x p + 1 + ε .d=1(x1,y1)=(0,0)p(x)=0y=β0x++βpxp+1+ε.


İşte işe yaramış bir örnek (in R)

# Generate some data that *do* pass through three points (up to random error).
x <- 1:24
f <- function(x) ( (x-2)*(x-12) + (x-2)*(x-23) + (x-12)*(x-23) )  / 100
y0 <-(x-2) * (x-12) * (x-23) * (1 + x - (x/24)^2) / 10^4  + f(x)
set.seed(17)
eps <- rnorm(length(y0), mean=0, 1/2)
y <- y0 + eps
data <- data.frame(x,y)

# Plot the data and the three special points.
plot(data)
points(cbind(c(2,12,23), f(c(2,12,23))), pch=19, col="Red", cex=1.5)

# For comparison, conduct unconstrained polynomial regression
data$x2 <- x^2
data$x3 <- x^3
data$x4 <- x^4

fit0 <- lm(y ~ x + x2 + x3 + x4, data=data)
lines(predict(fit0), lty=2, lwd=2)

# Conduct the constrained regressions
data$y1 <- y - f(x)
data$r <- (x-2)*(x-12)*(x-23)
data$z0 <- data$r
data$z1 <- data$r * x
data$z2 <- data$r * x^2

fit <- lm(y1 ~ z0 + z1 + z2 - 1, data=data)
lines(predict(fit) + f(x), col="Red", lwd=2)

Arsa

Üç sabit nokta sabit kırmızı renkte gösterilir - verilerin bir parçası değildir. Kısıtsız dördüncü dereceden polinom en küçük karelere uyma, siyah noktalı bir çizgiyle gösterilir (beş parametreye sahiptir); kısıtlı uyum (beşinci sıradadır, ancak sadece üç serbest parametreyle) kırmızı çizgiyle gösterilir.

En küçük kareler çıktısının ( summary(fit0)ve summary(fit)) incelenmesi öğretici olabilir - Bunu ilgili okuyucuya bırakıyorum.


whuber, bu ilginç ... Henüz tam olarak anladığımı söylesem yalan söylerdim, ama konuşurken sindiriyorum. Doğru anlıyorsam, burada her zamanki gibi s için çözüyorum, ancak daha önce olduğu gibi sadece s yerine, ile çarpılıyor , evet? Bu doğruysa, tam olarak nasıl hesaplıyorsunuz ? Teşekkür ederim. r ( x ) x i x i r ( x )βr(x)xbenxbenr(x)
Spacey

Çalışmış bir örnek ekledim, Muhammed.
whuber

Mükemmel. Ben çalışacağım. Senin örneği kullanarak, hala noktalarından geçmesi poli zorlamak mümkün olacağını vardır sağ olsa verilerin parçası?
Spacey

Kesinlikle bu yapılabilir: ancak p-değerlerini veya diğer istatistikleri yorumlama konusunda iki kat dikkatli olun, çünkü şimdi kısıtlamalarınız verilere dayanmaktadır.
whuber

Gönderiniz dün gece beni havaya kaldırdı. Kendime DUDU öğrettim. (LIP ilginç. Fourier ayrışmasına benziyor ama polisi var).
Spacey

9

(xben,yben)xbenxybeny

Bir çizgiyi bir XY düzleminde iki noktadan geçmeye zorlamak istiyorsanız, bunu yapmak da oldukça kolaydır. Herhangi iki nokta bir çizgiye sığabilir. Sen kullanabilirsiniz noktadan eğim formülü noktalarından birini, eğim ve kullanımı sonra yamaç hesaplamak için, ve bir doğrunun denklemi yolunu kesmek bulmak için.

XX2


Bununla birlikte, bu noktada, bunun yapmak için harika bir şey olmayabileceğinden bahsetmek zorunda hissediyorum (teoriniz bunu yapmak için çok sağlam nedenler sağlamadıkça). Ayrıca , modelinizin verilerinizdeki bilgilerin en iyi kombinasyonunu bulmasına izin verebileceğiniz Bayesian regresyonuna bakmak isteyebilirsiniz ve bazı önceki bilgiler (örneğin, kesişiminizi sıfıra doğru güçlü bir şekilde saptırmak için kullanabilirsiniz. zorlamak).


1
xbenyben

2
Üç puan daha atmak ve onları ağırlıklandırmak ( la Glen_b'nin cevabı) böyle bir uyum yaratabilirse de, istatistiksel çıktıların herhangi birini yorumlamak sorunlu olurdu: bazı ayarlamalar gerekli olacaktır.
whuber

6

@ Gung'un lineer kasanın mükemmel kapsama alanına biraz ekstra bilgi eklemek için, yüksek dereceli polinom durumunda, tam olarak veya yaklaşık olarak (ancak ihtiyacınız olduğu kadar doğru) yapmanın birkaç yolu vardır.

İlk olarak, polinom (veya gerçekten herhangi bir fonksiyonun) serbestlik derecesinin en azından "bilinen" noktaların sayısı kadar büyük olması gerektiğini unutmayın. Serbestlik dereceleri eşitse, eğri tamamen belirlendiğinden verilere hiç ihtiyacınız yoktur. Daha fazla 'bilinen' nokta varsa, çözemezsiniz (hepsi belirtilen derecenin tam olarak aynı polinomunda yatmadıkları sürece, bu durumda herhangi bir uygun boyutlu altküme yeterli olacaktır). Buradan sonra, polinomun bilinen noktalardan daha fazla df (4 kübik - 4df ile - ve bilinen üç nokta gibi) olduğunda konuşacağım, böylece kübik ne bilinen noktalarla fazla belirlenmedi ne de tamamen belirlendi) .

1) "eğri bu noktadan geçmelidir" parametreler üzerinde doğrusal bir kısıtlamadır, bu da kestirim kestirimine veya kısıtlanmış en küçük karelere neden olur (her iki terim de pozitif kısıtlamalar gibi doğrusal kısıtlamalardan başka şeyler de içerebilir). Doğrusal kısıtlamaları aşağıdakilerden birini kullanarak dahil edebilirsiniz:

  (a) parametreleştirmenin, daha düşük dereceli bir modelle sonuçlanan her bir kısıtlamayı dolaylı olarak içerecek şekilde yeniden düzenlemek.

  (b) en küçük karelere uyan parametreler üzerinde doğrusal kısıtlamalar içerebilen standart araçlar kullanmak. (genellikle yukarıdaki bağlantıda verilen formül gibi bir şeyle)

2) Diğer bir yol da ağırlıklı regresyon yöntemidir. Bilinen noktalara yeterince büyük ağırlık verirseniz, esasen (1) 'deki ile aynı uyumu elde edebilirsiniz. Bu genellikle kolayca uygulanır, yeniden parametrelendirmeden çok daha hızlı olabilir ve kısıtlı bağlantı sağlamayan paketlerde yapılabilir.

Tüm @ gung uyarıları geçerlidir


Glen_b, ağırlıklı gerileme düşünmemiştim. Bu konuda bir yol olabilir. Yapılacaklar listeme koydum. Kendimi olaysız öğretebileceğime inanıyorum. (1) ile ilgili olarak, yeniden paramaterizasyonun bu yönünü genişletebilir misiniz? Ayrıca, yapmaya çalıştığım, polinomu belirli noktalardan geçmeye zorladığım buna ne diyorsunuz? Sorunun bir parçası, ne için google bilmiyorum olmasıdır. Buna ne dendiğini bilirsem, çevrimiçi materyalle söylediklerinizi çoğaltabilirim. Teşekkürler.
Spacey

Bazı arama terimlerini ve birkaç ayrıntı içeren bir bağlantı içeren yukarıdaki düzenlemelerime bakın.
Glen_b-Monica'yı

2
+1 Ağırlıklı regresyon güzel bir fikirdir. RMS hatası tahminleri gibi çıktı istatistiklerinde bazı ayarlamalar yapılması gerekebilir.
whuber

s2FR,2

Cevabınız için teşekkürler Glen_b, @whuber 'ları kabul etsem de, hala sizinkinden çok şey öğrendim.
Spacey
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.