Este problema de inferencia tiene muchos nombres, incluidos puntos de cambio, puntos de cambio, puntos de ruptura, regresión de línea discontinua, regresión de barra discontinua, regresión bilineal, regresión lineal por partes, regresión lineal local, regresión segmentada y modelos de discontinuidad.
Aquí hay una descripción general de los paquetes de puntos de cambio con pros / contras y ejemplos trabajados. Si conoce el número de puntos de cambio a priori, consulte el mcp
paquete. Primero, simulemos los datos:
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))
Para su primer problema, son tres segmentos de solo intercepción:
model = list(
y ~ 1, # Intercept
~ 1, # etc...
~ 1
)
library(mcp)
fit = mcp(model, df, par_x = "x")
Podemos trazar el ajuste resultante:
plot(fit)
Aquí, los puntos de cambio están muy bien definidos (estrechos). Resumamos el ajuste para ver sus ubicaciones inferidas ( cp_1
y cp_2
):
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
Puede hacer modelos mucho más complicados mcp
, incluido el modelado de autorregresión de enésimo orden (útil para series de tiempo), etc. Descargo de responsabilidad: soy el desarrollador de mcp
.