Виконайте лінійну регресію, але змушуйте рішення пройти через деякі конкретні точки даних


14

Я знаю, як виконати лінійну регресію на множині точок. Тобто я знаю, як поліном, який я обрав, до заданого набору даних (у значенні LSE). Однак те, що я не знаю, - це як змусити моє рішення пройти певні конкретні моменти мого вибору. Я бачив, як це робилося раніше, але я не можу пригадати, як називалася процедура, не кажучи вже про те, як це робилося.

Як дуже простий і конкретний приклад, скажімо, що у мене 100 точок, розсіяних по площині xy, і я вирішу помістити через них поліном будь-якого порядку. Я знаю, як добре виконати цю лінійну регресію. Однак скажемо, що я хочу «змусити» своє рішення пройти, скажімо, три мої точки даних за x-координатами , та , (та їх відповідні y-координати звичайно).x = 19 x = 89x=3x=19x=89

Як називається ця загальна процедура, як це робиться, і чи є якісь підводні камені, які мені потрібно знати?

Редагувати:

Я хотів би додати, що я шукаю конкретний спосіб зробити це. Я написав програму, яка фактично виконує лінійну регресію одним із двох способів, перевертаючи коваріаційну матрицю безпосередньо, або через градієнтний спуск. Що я запитую - це, як саме, крок за кроком, я можу змінити те, що я зробив, таким чином, щоб я змусив поліноміальне рішення пройти через конкретні точки?

Дякую!


Чому ви називаєте це "лінійним", якщо ви використовуєте многочлен? Кожна точка, яку ви хочете, щоб вона пройшла, - це обмеження, яке зменшить вашу ступінь свободи. Потім можна використовувати алгоритм обмеженої оптимізації.
curious_cat

4
Це лінійно, тому що ви знаходите коефіцієнти коефіцієнта лінійної комбінації. Наприклад, якщо ви хочете підключити свої дані до кубічних, ви знайдете коефіцієнти ( 's) . y = c 0 + c 1 x + c 2 x 2 + c 3 x 3cy=c0+c1x+c2x2+c3x3
Космічний

1
@ Мохаммед: Ще один спосіб наблизити те, що ви хочете, - це використовувати зважений найменший розмір квадратів і надати дуже великі ваги точкам, через які ви хочете пройти лінію регресії. Це повинно змусити рішення дуже близько перейти до обраних вами точок.
Джейсон R

@JasonR Приємно бачити вас тут. Так, WLS справді цікавий суперник. Я пішов з каламбурами через розумну поліноміальну факторизацію і тому, що вона чудово підтримує структуру помилок.
Спейсі

Відповіді:


19

Модель, про яку йдеться, може бути записана

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

де - поліном ступеня проходить через задані точки і є випадковим. (Використовуйте інтерполяційний поліном Лагранжа .) Написання дозволяє нам переписати цю модель як 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+ε,

яка є стандартною множинної регресії МНК проблема з тією ж структурою, що і помилки оригіналу , де незалежні змінні є величини . Просто обчисліть ці змінні та запустіть знайоме регресійне програмне забезпечення , переконайтеся, що він не включає постійний термін Звичайні застереження про регресії без постійного терміну; зокрема, може бути штучно високим; звичайні тлумачення не застосовуються.r ( x ) x i , i = 0 , 1 , , p R 2p+1r(x)xi, i=0,1,,pR2

(Насправді, регресія через початок є особливим випадком цієї конструкції, де , і , так що модель є )( x 1 , y 1 ) = ( 0 , 0 ) p ( x ) = 0d=1(x1,y1)=(0,0)p(x)=0y=β0x++βpxp+1+ε.


Ось відпрацьований приклад (в 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)

Сюжет

Три фіксовані точки зображені суцільним червоним кольором - вони не є частиною даних. Не обмежене поліноміальне найменше квадрати четвертого порядку показано чорною пунктирною лінією (має п'ять параметрів); обмежене прилягання (порядку п’ять, але лише з трьома вільними параметрами) показано червоною лінією.

Перевірка ( summary(fit0)та summary(fit)) найменших квадратів може бути повчальною - я залишаю це зацікавленому читачеві.


Уаубер, це цікаво ... Я б брехав, якби сказав, що я його повністю зрозумів, але я перетравлюю це, як ми говоримо. Якщо я правильно розумію, тут я в основному вирішую для s, як завжди, але вони множать на , а не просто s, як раніше, так? Якщо це правильно, то як саме ви обчислюєте ? Дякую. r ( x ) x i x i r ( x )βr(x)xixir(x)
Космічний

Я додав досвідчений приклад, Мухаммед.
whuber

О, ідеально. Я це вивчу. Використовуючи ваш приклад, все-таки можна було б змусити полі пройти точки, які є частиною даних, правда?
Космічний

Абсолютно це можна зробити: але будьте вдвічі обережнішими щодо тлумачення p-значень чи будь-якої іншої статистики, адже тепер ваші обмеження базуються на самих даних.
whuber

Ваша посада підняла мене минулої ночі. Я навчив себе ЛІП. (LIP цікавий. Це як розпад Фур'є, але з полісами).
Космічний

9

Якщо ви хочете змусити лінію регресії пройти через одну точку, це можна зробити круговим способом. Скажімо, ваша точка . Ви просто перецентруєте свої дані з такою точкою, як джерело. Тобто ви віднімаєте від кожного -значення, а від кожного -значення. Тепер точка знаходиться у початку координатної площини. Тоді ви просто підходите до лінії регресії, пригнічуючи перехоплення (змушуючи перехоплення дорівнювати (0,0). Оскільки це лінійна трансформація, ви можете легко перетворити все згодом, якщо захочете). x i x y i y(xi,yi)xixyiy

Якщо ви хочете змусити лінію пройти дві точки в площині XY, це також зробити досить просто. Будь-які дві точки можуть бути вписані в лінію. Ви можете використовувати формулу точкового нахилу, щоб обчислити свій нахил, а потім використати одну з точок, нахилу та рівняння лінії, щоб знайти перехоплення.

Зауважте, що можливо встановити пряму лінію через три точки в координатній площині неможливо. Однак ми можемо гарантувати, що вони можуть ідеально підходити до параболи (тобто, використовуючи як і ). Для цього теж є алгебра, але, коли ми рухаємося вгору, просто полегшити модель з програмним забезпеченням може бути простіше, включивши в набір даних лише ці три (більше) точки. Так само ви можете отримати пряму лінію, яка найкраще наближає ці три точки, встановивши модель, яка має доступ лише до цих трьох точок. X 2XX2


Я відчуваю вимушеність зазначити в цьому моменті, що це може бути не дуже важливою справою (якщо тільки ваша теорія не дає дуже солідних причин для цього). Ви також можете заглянути в байєсівську регресію , де ви можете дозволити вашій моделі знайти найкраще поєднання інформації у ваших даних, а також деяку попередню інформацію (яку ви могли використовувати, щоб сильно змістити перехоплення до нуля, наприклад, без зовсім змушуючи це).


1
Гунг, дякую за вашу відповідь. Я трохи змінив своє запитання. Я не знав про Байєсову регресію, але погляну на це. Боюся, я не зовсім розумію, як конкретно, з алгоритмічного погляду, згаданий вами один і два пункти. Зокрема, для однієї точки я розумію видалення та повторне додавання та до кожної точки до та після блоку, але я не розумію, як саме зробити цей блок. Що стосується 2-бального випадку, я боюся, що я зовсім не розумію, що там робити. Дякую. y ixiyi
Космічний

2
Хоча введення ще трьох балів і зважування їх (відповідь а-ля Glen_b) могло б створити таке пристосування, інтерпретація будь-якого статистичного результату було б проблематичним: потрібні будуть деякі корективи.
whuber

6

Щоб додати трохи додаткової інформації для відмінного висвітлення лінійного випадку у @ gung, у поліноміальному випадку вищого порядку є кілька способів, які ви могли зробити це точно або приблизно (але майже так само точно, як вам потрібно).

По-перше, зауважте, що ступінь свободи для полінома (або взагалі будь-якої пристосованої функції) повинна бути принаймні такою ж великою, як кількість "відомих" точок. Якщо рівні свободи рівні, дані вам взагалі не потрібні, оскільки крива повністю визначена. Якщо є більше "відомих" пунктів, ви не можете їх вирішити (якщо тільки всі вони лежать на точно одному поліномі вказаної ступеня, в цьому випадку будь-якого підмножини відповідного розміру буде достатньо). З цього моменту я просто поговорю про те, коли у многочлена більше df, ніж у відомих точок (наприклад, кубічний - з 4df - і три відомих точки, так що кубік не визначається ні відомими точками, ні повністю визначається ними) .

1) "крива повинна проходити через цю точку" - це лінійне обмеження параметрів, що призводить до обмеженої оцінки або обмежених найменших квадратів (хоча обидва умови можуть включати інші речі, ніж лінійні обмеження, такі як обмеження позитивності). Ви можете включити лінійні обмеження будь-якими

  (a) переробка параметризації, щоб неявно включати кожне обмеження, що призводить до моделі нижчого порядку.

  (b) використання стандартних інструментів, які можуть містити лінійні обмеження для параметрів, що відповідають найменшому квадрату. (як правило, через щось на зразок формули, наведеної на вищенаведеному посиланні)

2) Інший спосіб - за допомогою зваженої регресії. Якщо надати відомим очкам достатньо велику вагу, ви можете отримати по суті таке ж пристосування, як у (1). Це часто легко реалізовується, може бути значно швидшим, ніж репараметризація, і може бути зроблено в пакетах, які не пропонують обмеженого розміщення.

Усі застереження @ gung застосовуються


Glen_b, я не вважав зваженою регресією. Це може бути шлях для цього. Я помістив це у свій список справ. Я вважаю, що можу навчити себе це без інцидентів. Щодо (1), чи можете ви розширити цей аспект повторної параматеризації? Крім того, що ви називаєте цим, що я намагаюся зробити, де я змушую поліном пройти певні моменти? Частина проблеми полягає в тому, що я не знаю, для чого гугл. Якщо я знаю, як це називалося, я можу доповнити те, що ви говорите за допомогою онлайн-матеріалів. Дякую.
Космічний

Дивіться мої редагування вище, які містять деякі пошукові терміни та посилання з ще кількома деталями.
Glen_b -Встановіть Моніку

2
+1 Зважена регресія - хороша ідея. Можливо, знадобиться деяке коригування вихідної статистики, наприклад, оцінки помилок RMS.
whuber

s2FR2

Дякую за вашу відповідь Glen_b, хоча я прийняв @whuber 's, я все-таки багато чого навчився від вашого.
Спейси
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.