Gibt es Pakete für die stückweise lineare Regression, die die Mehrfachknoten automatisch erkennen kann? Vielen Dank. Wenn ich das strucchange-Paket benutze. Ich konnte die Wechselpunkte nicht erkennen. Ich habe keine Ahnung, wie es die Änderungspunkte erkennt. In den Handlungen konnte ich sehen, dass es mehrere Punkte gibt, die ich haben möchte. Es könnte mir helfen, sie herauszufinden. Könnte hier jemand ein Beispiel geben?
regression
change-point
Honglang Wang
quelle
quelle
segmented
Paket ist das, wonach Sie suchen.segmented
Paket: stackoverflow.com/a/18715116/857416Antworten:
Wäre MARS anwendbar? R hat das Paket
earth
, das es implementiert.quelle
Im Allgemeinen ist es etwas seltsam, etwas als stückweise linear anpassen zu wollen. Wenn Sie dies jedoch wirklich möchten, ist der MARS-Algorithmus der direkteste. Es wird knotenweise eine Funktion aufgebaut; und dann in der Regel die Anzahl der Knoten zurückschneiden, um überzählige Bäume zu bekämpfen. Sie können auf den MARS-Algorithmus in R über
earth
oder zugreifenmda
. Im Allgemeinen ist es mit GCV kompatibel, was nicht weit von den anderen Informationskriterien (AIC, BIC usw.) entfernt ist.MARS gibt Ihnen nicht wirklich eine "optimale" Passform, da die Knoten einzeln gewachsen sind. Es wäre wirklich ziemlich schwierig, eine wirklich "optimale" Anzahl von Knoten zu erreichen, da die möglichen Permutationen von Knotenplatzierungen schnell explodieren würden.
Dies ist im Allgemeinen der Grund, warum Menschen sich dem Glätten von Splines zuwenden. Die meisten Glättungs-Splines sind kubisch, damit Sie einem menschlichen Auge die Unstetigkeiten vormachen können. Es wäre jedoch durchaus möglich, einen linearen Glättungs-Spline auszuführen. Der große Vorteil beim Glätten von Splines liegt in der Optimierung der einzelnen Parameter. Auf diese Weise können Sie schnell zu einer wirklich "optimalen" Lösung gelangen, ohne nach Permutationsblöcken suchen zu müssen. Wenn Sie jedoch wirklich nach Wendepunkten suchen möchten und über genügend Daten verfügen, ist MARS wahrscheinlich die beste Wahl.
Hier ist ein Beispielcode für benachteiligte lineare Glättungssplines in R:
Die tatsächlich gewählten Knoten würden jedoch nicht unbedingt mit wahren Wendepunkten korrelieren.
quelle
Ich habe dies vor ein paar Jahren einmal von Grund auf neu programmiert und ich habe eine Matlab-Datei für die stückweise lineare Regression auf meinem Computer. Etwa 1 bis 4 Haltepunkte sind rechnerisch für etwa 20 Messpunkte möglich. 5 oder 7 Haltepunkte fangen an, wirklich zu viel zu sein.
Der rein mathematische Ansatz besteht meines Erachtens darin, alle möglichen Kombinationen auszuprobieren, die der Benutzer mbq in der Frage vorgeschlagen hat, auf die im Kommentar unter Ihrer Frage verwiesen wird.
Da die angepassten Linien alle aufeinanderfolgend und benachbart sind (keine Überlappungen), folgt die Kombinatorik dem Pascalschen Dreieck. Wenn es Überlappungen zwischen verwendeten Datenpunkten durch die Liniensegmente gäbe, würde die Kombinatorik meines Erachtens stattdessen Stirling-Zahlen der zweiten Art folgen.
Die beste Lösung ist meines Erachtens, die Kombination der angepassten Linien zu wählen, die die niedrigste Standardabweichung der R ^ 2-Korrelationswerte der angepassten Linien aufweist. Ich werde versuchen, mit einem Beispiel zu erklären. Beachten Sie jedoch, dass die Frage, wie viele Unterbrechungspunkte in den Daten enthalten sein sollen, der Frage nach der Länge der britischen Küste ähnelt. wie in einem Artikel von Benoit Mandelbrots (einem Mathematiker) über Fraktale. Und es gibt einen Kompromiss zwischen der Anzahl der Haltepunkte und der Regressionstiefe.
Nun zum Beispiel.
Angenommen, wir haben die perfekten Daten als Funktion von x ( x und y sind ganze Zahlen):y x x y
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)):
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 value1,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
quelle
There is a pretty nice algorithm described in Tomé and Miranda (1984).
The code and a GUI are available in both Fortran and IDL from their website: http://www.dfisica.ubi.pt/~artome/linearstep.html
quelle
... first of all you must to do it by iterations, and under some informative criterion, like AIC AICc BIC Cp; because you can get an "ideal" fit, if number of knots K = number od data points N, ok. ... first put K = 0; estimate L = K + 1 regressions, calculate AICc, for instance; then assume minimal number of data points at a separate segment, say L = 3 or L = 4, ok ... put K = 1; start from L-th data as the first knot, calculate SS or MLE, ... and step by step the next data point as a knot, SS or MLE, up to the last knot at the N - L data; choose the arrangement with the best fit (SS or MLE) calculate AICc ... ... put K = 2; ... use all previous regressions (that is their SS or MLE), but step by step divide a single segment into all possible parts ... choose the arrangement with the best fit (SS or MLE) calculate AICc ... if the last AICc occurs greater then the previous one: stop the iterations ! This is an optimal solution under AICc criterion, ok
quelle
I once came across a program called Joinpoint. On their website they say it fits a joinpoint model where "several different lines are connected together at the 'joinpoints'". And further: "The user supplies the minimum and maximum number of joinpoints. The program starts with the minimum number of joinpoint (e.g. 0 joinpoints, which is a straight line) and tests whether more joinpoints are statistically significant and must be added to the model (up to that maximum number)."
The NCI uses it for trend modelling of cancer rates, maybe it fits your needs as well.
quelle
In order to fit to data a piecewise function :
wherea1,a2,p1,q1,p2,q2,p3,q3 are unknown parameters to be approximately computed, there is a very simple method (not iterative, no initial guess, easy to code in any math computer language). The theory given page 29 in paper : https://fr.scribd.com/document/380941024/Regression-par-morceaux-Piecewise-Regression-pdf and from page 30 :
For example, with the exact data provided by Mats Granvik the result is :
Without scattered data, this example is not very signifiant. Other examples with scattered data are shown in the referenced paper.
quelle
You can use the
mcp
package if you know the number of change points to infer. It gives you great modeling flexibility and a lot of information about the change points and regression parameters, but at the cost of speed.The mcp website contains many applied examples, e.g.,
Then you can visualize:
Or summarise:
Disclaimer: I am the developer of mcp.
quelle