Masalah inferensi ini memiliki banyak nama, termasuk titik perubahan, titik sakelar, titik break, regresi garis putus, regresi tongkat patah, regresi bilinear, regresi linier satu demi satu, regresi linier lokal, regresi tersegmentasi, dan model diskontinuitas.
Berikut ini adalah ikhtisar paket titik perubahan dengan pro / kontra dan contoh yang dikerjakan. Jika Anda tahu jumlah titik perubahan apriori, periksa mcp
paketnya. Pertama, mari kita simulasikan data:
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))
Untuk masalah pertama Anda, ini adalah tiga segmen intersep saja:
model = list(
y ~ 1, # Intercept
~ 1, # etc...
~ 1
)
library(mcp)
fit = mcp(model, df, par_x = "x")
Kami dapat merencanakan fit yang dihasilkan:
plot(fit)
Di sini, titik perubahan didefinisikan dengan sangat baik (sempit). Mari kita simpulkan kecocokan untuk melihat lokasi yang disimpulkan ( cp_1
dan 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
Anda dapat melakukan model yang jauh lebih rumit dengan mcp
, termasuk memodelkan autoregresi urutan-N (berguna untuk seri waktu), dll. Penafian: Saya adalah pengembang dari mcp
.