J'ai programmé cela à partir de zéro une fois il y a quelques années, et j'ai un fichier Matlab pour faire une régression linéaire par morceaux sur mon ordinateur. Environ 1 à 4 points d'arrêt sont calculables pour environ 20 points de mesure. 5 ou 7 points de rupture commencent à être vraiment trop.
L'approche mathématique pure telle que je la vois est d'essayer toutes les combinaisons possibles comme suggéré par l'utilisateur mbq dans la question liée au commentaire ci-dessous votre question.
Puisque les lignes ajustées sont toutes consécutives et adjacentes (pas de chevauchements), la combinatoire suivra le triangle de Pascals. S'il y avait des chevauchements entre les points de données utilisés par les segments de ligne, je crois que la combinatoire suivrait plutôt les nombres de Stirling du deuxième type.
La meilleure solution dans mon esprit est de choisir la combinaison de lignes ajustées qui présente l'écart type le plus faible des valeurs de corrélation R ^ 2 des lignes ajustées. Je vais essayer d'expliquer avec un exemple. Gardez à l'esprit que demander combien de points de rupture on devrait trouver dans les données revient à poser la question "Quelle est la longueur de la côte de la Grande-Bretagne?" comme dans l'un des articles de Benoit Mandelbrots (un mathématicien) sur les fractales. Et il y a un compromis entre le nombre de points de rupture et la profondeur de régression.
Passons maintenant à l'exemple.
yXXy
X123456sept89dix111213141516171819202122232425262728y123456sept89dix98sept65432123456sept89dixR2l i n e 11 , 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