Я программировал это с нуля один раз несколько лет назад, и у меня есть файл Matlab для выполнения кусочной линейной регрессии на моем компьютере. Приблизительно от 1 до 4 контрольных точек в вычислительном отношении возможно для примерно 20 точек измерения или около того. 5 или 7 контрольных точек начинают становиться слишком много.
Чисто математический подход, как я понимаю, состоит в том, чтобы попробовать все возможные комбинации, предложенные пользователем mbq в вопросе, связанном с комментарием ниже вашего вопроса.
Поскольку все выровненные линии являются последовательными и смежными (без перекрытий), комбинаторика будет следовать треугольнику Паскаля. Если бы между использованными точками данных были отрезки отрезков линий, я полагаю, что комбинаторика будет следовать вместо чисел Стирлинга второго рода.
Лучшее решение на мой взгляд, это выбрать комбинацию подогнанных линий, которая имеет самое низкое стандартное отклонение значений корреляции R ^ 2 подогнанных линий. Я постараюсь объяснить на примере. Имейте в виду, однако, что вопрос о том, сколько точек разрыва следует найти в данных, аналогичен вопросу о том, «как долго длится побережье Британии?». как в одной из работ Бенуа Мандельброта (математика) о фракталах. И есть компромисс между количеством точек разрыва и глубиной регрессии.
Теперь к примеру.
yxxy
x12345678910111213141516171819202122232425262728y123456789109876543212345678910R2line11,0001,0001,0001,0001,0001,0001,0001,0001,0001,0000,97090,89510,77340,61340,43210,25580,11390,027200,00940,02220,02780,02390,01360,00320,00040,01180,04R2line20,04000,01180,00040,00310,01350,02380,02770,02220,0093−1,9780,02710,11390,25580,43210,61340,77330,89510,97081,0001,0001,0001,0001,0001,0001,0001,0001,0001,000sumofR2values1,04001,01181,00041,00311,01351,02381,02771,02221,00931,0000,99801,00901,02921,04551,04551,02911,00900,99801,0001,00941,02221,02781,02391,01361,00321,00041,01181,04standarddeviationofR20,67880,69870,70670,70480,69740,69020,68740,69130,70040,70710,66730,55230,36590,12810,12820,36590,55230,66720,70710,70040,69140,68740,69020,69740,70480,70680,69870,6788
These y values have the graph:
Which clearly has two break points. For the sake of argument we will calculate the R^2 correlation values (with the Excel cell formulas (European dot-comma style)):
=INDEX(LINEST(B1:$B$1;A1:$A$1;TRUE;TRUE);3;1)
=INDEX(LINEST(B1:$B$28;A1:$A$28;TRUE;TRUE);3;1)
for all possible non-overlapping combinations of two fitted lines. All the possible pairs of R^2 values have the graph:
The question is which pair of R^2 values should we choose, and how do we generalize to multiple break points as asked in the title? One choice is to pick the combination for which the sum of the R-square correlation is the highest. Plotting this we get the upper blue curve below:
The blue curve, the sum of the R-squared values, is the highest in the middle. This is more clearly visible from the table with the value 1,0455 as the highest value.
However it is my opinion that the minimum of the red curve is more accurate. That is, the minimum of the standard deviation of the R^2 values of the fitted regression lines should be the best choice.
Piece wise linear regression - Matlab - multiple break points