Esse problema de inferência possui muitos nomes, incluindo pontos de mudança, pontos de comutação, pontos de interrupção, regressão de linha quebrada, regressão de stick quebrado, regressão bilinear, regressão linear por partes, regressão linear local, regressão linear local, regressão segmentada e modelos de descontinuidade.
Aqui está uma visão geral dos pacotes de pontos de mudança com prós / contras e exemplos trabalhados. Se você souber o número de pontos de mudança a priori, confira o mcp
pacote. Primeiro, vamos simular os dados:
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 o seu primeiro problema, são três segmentos somente de interceptação:
model = list(
y ~ 1, # Intercept
~ 1, # etc...
~ 1
)
library(mcp)
fit = mcp(model, df, par_x = "x")
Podemos traçar o ajuste resultante:
plot(fit)
Aqui, os pontos de mudança são muito bem definidos (estreitos). Vamos resumir o ajuste para ver seus locais inferidos ( cp_1
e 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
Você pode criar modelos muito mais complicados mcp
, incluindo a modelagem de regressão automática de n-ordem (útil para séries temporais), etc. Isenção de responsabilidade: Eu sou o desenvolvedor do mcp
.