Wykonaj regresję liniową, ale wymusz rozwiązanie, aby przejść przez określone punkty danych


14

Wiem, jak wykonać regresję liniową na zbiorze punktów. To znaczy, wiem, jak dopasować wybrany wielomian do danego zestawu danych (w sensie LSE). Jednak nie wiem, jak zmusić moje rozwiązanie do przejścia przez niektóre wybrane punkty. Widziałem to już wcześniej, ale nie pamiętam, jak nazywała się ta procedura, nie mówiąc już o tym, jak to zrobiono.

Jako bardzo prosty i konkretny przykład, powiedzmy, że mam 100 punktów rozproszonych na płaszczyźnie XY i wybieram dopasowanie przez nie wielomianu dowolnej kolejności. Wiem, jak bardzo dobrze wykonać tę regresję liniową. Powiedzmy jednak, że chcę „wymusić” moje rozwiązanie, aby przejść przez, powiedzmy, trzy moje punkty danych na współrzędnych , i , (i odpowiadające im współrzędne y oczywiście).x = 19 x = 89x=3x=19x=89

Jak nazywa się ta ogólna procedura, jak to się robi i czy są jakieś szczególne pułapki, o których muszę wiedzieć?

Edytować:

Chciałbym dodać, że szukam konkretnego sposobu na to. Napisałem program, który faktycznie wykonuje regresję liniową na jeden z dwóch sposobów, odwracając bezpośrednio macierz kowariancji lub poprzez opadanie gradientu. Pytam, w jaki sposób krok po kroku mam modyfikować to, co zrobiłem, tak aby zmusić rozwiązanie wielomianowe do przejścia przez określone punkty?

Dzięki!


Dlaczego nazywasz to „liniowym”, jeśli używasz wielomianu? Każdy punkt, przez który chcesz przejść, jest ograniczeniem, które zmniejsza twój stopień swobody. Następnie możesz użyć ograniczonego algorytmu optymalizacji.
ciekawy_kat

4
Jest liniowy, ponieważ znajdujesz współczynniki dla kombinacji liniowej . Na przykład, jeśli chcesz dopasować swoje dane do sześciennych, to znajdujesz ( ) . y = c 0 + c 1 x + c 2 x 2 + c 3 x 3cy=c0+c1x+c2x2+c3x3
Spacey,

1
@Mohammad: Innym sposobem na przybliżenie tego, co chcesz, byłoby użycie rozwiązania ważonego metodą najmniejszych kwadratów i nadanie bardzo dużych wag punktom, przez które ma przebiegać linia regresji. Powinno to zmusić rozwiązanie do bardzo dokładnego przejścia do wybranych punktów.
Jason R

@JasonR Dobrze cię tu widzieć. Tak, WLS jest naprawdę interesującym kandydatem. Poszedłem z odpowiedzią Whuberów ze względu na sprytną wielomianową faktoryzację i dlatego, że ładnie utrzymuje strukturę błędów.
Spacey,

Odpowiedzi:


19

Model, o którym mowa, można napisać

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

gdzie jest wielomianem stopnia przechodzącym przez określone punkty a jest losowy. (Użyj wielomianu interpolującego Lagrange'a ). Pisanie pozwala nam przepisać ten model jako 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)

yp(x)=β0r(x)+β1r(x)x+β2r(x)x2++βpr(x)xp+ε,

który jest standardowym OLS problemem regresji wielokrotnej o takiej samej strukturze błędu, co oryginał , w którym zmienne niezależne są takie ilości . Wystarczy obliczyć te zmienne i uruchomić znane oprogramowanie do regresji , upewniając się, że nie zawiera ono stałego terminu. Obowiązują zwykłe zastrzeżenia dotyczące regresji bez stałego terminu; w szczególności może być sztucznie wysoki; zwykłe interpretacje nie mają zastosowania.R ( x ), x i , i = 0 , 1 , ... , p R 2p+1r(x)xi, i=0,1,,pR2

(W rzeczywistości regresja przez początek jest szczególnym przypadkiem tej konstrukcji, w której , , a , więc model to )( 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+ε.


Oto działający przykład (w 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)

Wątek

Trzy stałe punkty są pokazane na czerwono - nie są częścią danych. Nieograniczone dopasowanie do najmniejszych kwadratów wielomianu czwartego rzędu jest oznaczone czarną kropkowaną linią (ma pięć parametrów); ograniczone dopasowanie (rzędu pięciu, ale tylko z trzema wolnymi parametrami) jest pokazane czerwoną linią.

Sprawdzanie wyniku najmniejszych kwadratów ( summary(fit0)i summary(fit)) może być pouczające - pozostawiam to zainteresowanemu czytelnikowi.


kurde, to jest interesujące ... Kłamałbym, gdybym powiedział, że w pełni to zrozumiałem, ale trawię to, kiedy mówimy. Jeśli dobrze rozumiem, tutaj w zasadzie rozwiązuję dla jak zwykle, ale są one mnożone przez , zamiast tylko jak poprzednio, tak? Jeśli to prawda, to jak dokładnie obliczasz ? Dziękuję Ci. r ( x ) x i x i r ( x )βr(x)xixir(x)
Spacey,

Dodałem działający przykład, Mohammad.
whuber

Och, idealnie. Przestudiuję to. Korzystając z Twojego przykładu, nadal można zmusić poli do przejścia przez punkty, które częścią danych, prawda?
Spacey,

Oczywiście, że można to zrobić: ale należy zachować podwójną ostrożność przy interpretacji wartości p lub innych statystyk, ponieważ teraz ograniczenia są oparte na samych danych.
whuber

Twój post miał mnie wczoraj w nocy. Nauczyłem się LIP. (LIP jest interesujące. Jest jak rozkład Fouriera, ale z polisami).
Spacey,

9

Jeśli chcesz zmusić linię regresji do przejścia przez jeden punkt, możesz to zrobić na okrągło. Powiedzmy, że masz na . Po prostu ponownie wyśrodkuj swoje dane z tym punktem jako punktem początkowym. Oznacza to, że odejmujesz od każdej wartości , a od każdej wartości . Teraz punkt znajduje się na początku płaszczyzny współrzędnych. Następnie po prostu dopasowujesz linię regresji, jednocześnie tłumiąc punkt przecięcia (wymuszając, aby punkt przecięcia wynosił (0,0). Ponieważ jest to transformacja liniowa, możesz łatwo później przekształcić wszystko później, jeśli chcesz. x i x y i y(xi,yi)xixyiy

Jeśli chcesz zmusić linię do przejścia przez dwa punkty na płaszczyźnie XY, jest to również dość łatwe. Dowolne dwa punkty można dopasować do linii. Możesz użyć wzoru punkt-nachylenie, aby obliczyć swoje nachylenie, a następnie użyć jednego z punktów, nachylenia i równania linii, aby znaleźć punkt przecięcia.

Należy pamiętać, że dopasowanie prostej przez trzy punkty na płaszczyźnie współrzędnych może nie być możliwe. Możemy jednak zagwarantować, że będą idealnie pasować do paraboli (tzn. Zarówno jak i ). Jest do tego również algebra, ale gdy przechodzimy w górę, łatwiej jest po prostu dopasować model do oprogramowania, włączając tylko te trzy (więcej) punkty do zestawu danych. Podobnie można uzyskać linię prostą najlepiej zbliżoną do tych trzech punktów, dopasowując model, który ma dostęp tylko do tych trzech punktów. X 2XX2


Czuję się jednak zmuszony wspomnieć w tym miejscu, że może to nie być świetna rzecz (chyba że twoja teoria zawiera bardzo solidne powody, aby to zrobić). Możesz także przyjrzeć się regresji bayesowskiej , w której możesz pozwolić swojemu modelowi znaleźć najlepszą kombinację informacji w twoich danych oraz kilka wcześniejszych informacji (które możesz wykorzystać do silnego odchylenia twojego przechwytywania do zera, na przykład bez całkiem zmuszając to).


1
Gung, dzięki za odpowiedź. Trochę zmodyfikowałem swoje pytanie. Nie wiedziałem o regresji bayesowskiej, ale przyjrzę się jej. Obawiam się, że nie do końca rozumiem, jak konkretnie, z algorytmicznego punktu widzenia, wspomniany przypadek jeden i dwa punkty. W szczególności dla jednego punktu rozumiem usuwanie i ponowne dodawanie i do każdego punktu przed i po bloku, ale nie rozumiem, jak dokładnie zrobić ten blok. W przypadku sprawy dwupunktowej obawiam się, że w ogóle nie rozumiem, co tam zrobić. Dzięki. y jaxiyi
Spacey,

2
Wprawdzie dodanie kolejnych trzech punktów i ich wyważenie (odpowiedź a la Glen_b) może stworzyć takie dopasowanie, jednak interpretacja wyników statystycznych byłaby problematyczna: konieczne byłyby pewne korekty.
whuber

6

Aby dodać trochę dodatkowych informacji do doskonałego pokrycia przypadku liniowego @ gung, w przypadku wielomianowym wyższego rzędu istnieje kilka sposobów, aby to zrobić dokładnie lub w przybliżeniu (ale tak dokładnie, jak potrzebujesz).

Po pierwsze, zwróć uwagę, że stopnie swobody wielomianu (a nawet dowolnej dopasowanej funkcji) muszą być co najmniej tak duże, jak liczba „znanych” punktów. Jeśli stopnie swobody są równe, dane w ogóle nie są potrzebne, ponieważ krzywa jest całkowicie określona. Jeśli jest więcej „znanych” punktów, nie możesz ich rozwiązać (chyba że wszystkie leżą na dokładnie tym samym wielomianu określonego stopnia, w którym to przypadku wystarczą podzbiory odpowiedniej wielkości). Odtąd porozmawiam tylko o tym, kiedy wielomian ma więcej df niż znane punkty (takie jak sześcienny - z 4df - i trzy znane punkty, tak że sześcienny nie jest nadmiernie określony przez znane punkty ani całkowicie przez nie określony) .

1) „krzywa musi przejść przez ten punkt” jest ograniczeniem liniowym parametrów, skutkującym ograniczonym oszacowaniem lub ograniczonymi najmniejszymi kwadratami (chociaż oba terminy mogą zawierać inne rzeczy niż ograniczenia liniowe, takie jak ograniczenia dodatni). Możesz dołączyć wiązania liniowe przez jedno z nich

  (a) przekształcenie parametryzacji w celu niejawnego uwzględnienia każdego ograniczenia skutkującego modelem niższego rzędu.

  (b) przy użyciu standardowych narzędzi, które mogą zawierać ograniczenia liniowe dotyczące parametrów dopasowania co najmniej kwadratów. (zwykle za pomocą wzoru podobnego do powyższego linku)

2) Innym sposobem jest regresja ważona. Jeśli nadasz znanym punktom wystarczająco dużą wagę, możesz uzyskać zasadniczo takie samo dopasowanie jak w (1). Często jest to łatwo wdrażane, może być znacznie szybsze niż zmiana parametrów i może być wykonane w pakietach, które nie oferują ograniczonego dopasowania.

Obowiązują wszystkie zastrzeżenia @ gung


Glen_b, nie rozważałem regresji ważonej. To może być sposób, aby to zrobić. Umieściłem to na mojej liście zadań. Wierzę, że mogę się tego nauczyć bez żadnych incydentów. Odnośnie (1), czy mógłbyś uprzejmie rozwinąć ten aspekt ponownej paramaterizacji? A jak to nazywacie, co próbuję zrobić, gdy zmuszam wielomian do przejścia przez pewne punkty? Częścią problemu jest to, że nie wiem, po co google. Jeśli wiem, jak to się nazywa, być może uda mi się poszerzyć to, co mówisz, materiałami online. Dzięki.
Spacey,

Zobacz moje zmiany powyżej, które zawierają niektóre wyszukiwane hasła i link z kilkoma szczegółami.
Glen_b

2
Regresja +1 ważona to dobry pomysł. Konieczne może być dostosowanie statystyk wyjściowych, takich jak oszacowanie błędu RMS.
whuber

@ whuber +1 rzeczywiście, jeśli statystyki (takie jak , , ... błędy standardowe itp.) mają odnosić się tylko do nieznanych punktów (co jest prawdopodobnie tym, czego byśmy chcieli), poza oszacowaniami parametrów i dopasowanymi wartościami, wyjściowe statystyki surowe prawie wszystkie będą błędne. Pierwotnie wpisałem zdanie odnoszące się do tego, ale wydaje mi się, że usunąłem je przed opublikowaniem; ważne jest, aby o tym wspomnieć. F R 2s2FR2
Glen_b

Dziękuję za odpowiedź Glen_b, chociaż zaakceptowałem @whuber, wciąż wiele się od ciebie nauczyłem.
Spacey
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.