Кусочно-линейная регрессия с ограничением - r

Я пытаюсь выполнить кусочно-линейный регрессионный анализ OLS в R с одной точкой останова. У меня есть следующая формула регрессии и ограничения: формула регрессии

Где D — манекен. Я хотел бы наложить ограничение, чтобы линии регрессии были непрерывными (с точкой разрыва). Ограничение ниже будет работать нормально.

ограничение

Мой вопрос в том, как мне сформулировать это в функции lm() в R? Ранее я пробовал «сегментированный» пакет, но мне нужно интерпретировать перехваты для обеих строк в сводке регрессии.

Ниже я привел некоторые данные. Точка останова здесь равна 0, поэтому d равно 1 для x >= 0 .

             x          y d
1    4.3047451 11.2660463 1
2    7.0062423 -3.2897982 1
3    2.7862009 -2.8232636 1
4   -0.8662964  0.4051925 0
5   -0.9553261 -0.9228929 0
6   -1.6626654  3.5044546 0
7    3.4906905  1.4961349 1
8   -0.7072658 -0.2758436 0
9   -7.0054069 -1.3041742 0
10  -2.2510701 -0.1848814 0
11 -13.3617905 -0.2113756 0
12   4.1001251  0.2845748 1
13  -4.6575944 -1.1603290 0
14   5.2243857  3.8324236 1
15   3.5003320 -2.3672985 1
16 -13.2623113 -7.1593177 0
17  -1.7944354 -2.1725478 0
18   0.5885924 -0.2411048 1
19 -19.3744936 -0.1982088 0
20 -17.9876978 -1.5995063 0

Изменить:

Я добавил графическое представление того, что я пытаюсь выполнить. Важно, чтобы две подобранные линии пересекались на пороге, и чтобы я мог получить 4 коэффициента. 2 альфа и 2 бета.

введите здесь описание изображения


person perf2k    schedule 08.06.2018    source источник


Ответы (2)


Поскольку точка останова x = 0, мы имеем a = a2, и поэтому:

nls( y ~ (x < 0) * (a + b * x) + (x > 0) * (a + b2 * x), dat,
  start = list(a = 1, b = 1, b2 = 1))

или используя lm

lm(y ~ I(x * (x < 0)) + I(x * (x > 0)), dat)

В общем, если B является точкой останова:

B <- 0
nls( y ~ (x < B) * (a + b * (x - B)) + (x > B) * (a + b2 * (x - B)), dat,
  start = list(a = 1, b = 1, b2 = 1))

B <- 0
lm(y ~ I((x - B) * (x < B)) + I((x - B) * (x > B)), dat)
person G. Grothendieck    schedule 08.06.2018
comment
Спасибо за ответ, это имеет смысл. Но что, если точка останова отлична от нуля? Извините, если я был неясен, но предоставленные данные — это просто фрагмент нескольких наборов данных с разными контрольными точками. - person perf2k; 08.06.2018
comment
Я не уверен, что делать с константами здесь (a и b), похоже, это недопустимый ввод в lm(). Я отредактировал свой вопрос с графическим представлением того, что я пытаюсь выполнить. - person perf2k; 09.06.2018
comment
Исправил и перешел к ответу. если вам нужна другая параметризация, вы можете использовать алгебру в случае lm или изменить формулу в случае nls. - person G. Grothendieck; 09.06.2018

Это не ответ, а комментарий, который нельзя редактировать в разделе комментариев, поскольку для его понимания требуется изображение.

На самом деле я не могу понять ваши данные: когда они представлены на декартовом графике (ниже), точки кажутся очень разбросанными. Это не похоже на кусочную функцию. Что мне не хватает?

введите здесь описание изображения

Кстати, если точки были не слишком далеко от кусочной функции, составленной из двух наклонных отрезков, то есть очень простой способ подгонки. См. страницы 12-13 в этой статье: https://fr.scribd.com/document/380941024/Regression-par-morceaux-Piecewise-Regression-pdf

person JJacquelin    schedule 10.06.2018
comment
Данные, которые я приложил, являются лишь частью гораздо большего набора данных. Это было просто для того, чтобы иметь некоторые (по общему признанию плохие) данные для примера. Данные не обязательно соответствуют кусочной функции, это то, что я хотел бы изучить, но сначала я хотел бы построить модель, указанную в моем вопросе (модель регрессии в r). Спасибо за ссылку, посмотрю. - person perf2k; 11.06.2018