Dieses Inferenzproblem hat viele Namen, einschließlich Änderungspunkte, Schaltpunkte, Unterbrechungspunkte, Regression unterbrochener Linien, Regression gebrochener Stöcke, bilineare Regression, stückweise lineare Regression, lokale lineare Regression, segmentierte Regression und Diskontinuitätsmodelle.
Hier finden Sie eine Übersicht über Änderungspunktpakete mit Vor- / Nachteilen und Arbeitsbeispielen. Wenn Sie die Anzahl der Änderungspunkte a priori kennen, lesen Sie das mcp
Paket. Lassen Sie uns zunächst die Daten simulieren:
df = data.frame(x = seq(1, 12, by = 0.1))
df$y = c(rnorm(21, 0, 5), rnorm(80, 180, 5), rnorm(10, 20, 5))
Bei Ihrem ersten Problem handelt es sich um drei Intercept-Only-Segmente:
model = list(
y ~ 1, # Intercept
~ 1, # etc...
~ 1
)
library(mcp)
fit = mcp(model, df, par_x = "x")
Wir können die resultierende Anpassung zeichnen:
plot(fit)
Hier sind die Änderungspunkte sehr gut definiert (eng). Fassen wir die Anpassung zusammen, um ihre abgeleiteten Positionen ( cp_1
und cp_2
) zu sehen:
summary(fit)
Family: gaussian(link = 'identity')
Iterations: 9000 from 3 chains.
Segments:
1: y ~ 1
2: y ~ 1 ~ 1
3: y ~ 1 ~ 1
Population-level parameters:
name mean lower upper Rhat n.eff
cp_1 3.05 3.0 3.1 1 6445
cp_2 11.05 11.0 11.1 1 6401
int_1 0.14 -1.9 2.1 1 5979
int_2 179.86 178.8 180.9 1 6659
int_3 22.76 19.8 25.5 1 5906
sigma_1 4.68 4.1 5.3 1 5282
Sie können viel kompliziertere Modelle mcp
erstellen, einschließlich der Modellierung der Autoregression N-ter Ordnung (nützlich für Zeitreihen) usw. Haftungsausschluss: Ich bin der Entwickler von mcp
.