Кусочная регрессия — это метод регрессии, который мы часто используем, когда в наборе данных есть явные «точки останова».
В следующем пошаговом примере показано, как выполнить кусочную регрессию в R.
Шаг 1: Создайте данные
Во-первых, давайте создадим следующий фрейм данных:
#view DataFrame
df <- data.frame(x=c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16),
y=c(2, 4, 5, 6, 8, 10, 12, 13, 15, 19, 24, 28, 31, 34, 39, 44))
#view first six rows of data frame
head(df)
x y
1 1 2
2 2 4
3 3 5
4 4 6
5 5 8
6 6 10
Шаг 2: Визуализируйте данные
Далее создадим диаграмму рассеяния для визуализации данных:
#create scatterplot of x vs. y
plot(df$x, df$y, pch= 16 , col='steelblue')

Мы можем видеть, что отношение между x и y резко меняется около x = 9 .
Шаг 3: Подберите модель кусочной регрессии
Мы можем использовать функцию segmented() из пакета segmented в R, чтобы подогнать модель кусочной регрессии к нашему набору данных:
library (segmented)
#fit simple linear regression model
fit <- lm(y ~ x, data=df)
#fit piecewise regression model to original model, estimating a breakpoint at x=9
segmented. fit <- segmented(fit, seg.Z = ~x, psi= 9 )
#view summary of segmented model
summary(segmented. fit )
Call:
segmented.lm(obj = fit, seg.Z = ~x, psi = 9)
Estimated Break-Point(s):
Est. St.Err
psi1.x 8.762 0.26
Meaningful coefficients of the linear terms:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.32143 0.48343 0.665 0.519
x 1.59524 0.09573 16.663 1.16e-09 \*\*\*
U1.x 2.40476 0.13539 17.762 NA
---
Signif. codes: 0 '\*\*\*' 0.001 '\*\*' 0.01 '\*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.6204 on 12 degrees of freedom
Multiple R-Squared: 0.9983, Adjusted R-squared: 0.9978
Convergence attained in 2 iter. (rel. change 0)
Функция segmented() обнаруживает точку останова при x = 8,762.
Подогнанная модель кусочной регрессии:
Если x ≤ 8,762: y = 0,32143 + 1,59524*(x)
Если x > 8,762: y = 0,32143 + 1,59524*(8,762) + (1,59524+2,40476)*(x-8,762)
Например, предположим, что у нас есть значение x = 5.Расчетное значение y будет:
- у = 0,32143 + 1,59524*(х)
- у = 0,32143 + 1,59524*(5)
- у = 8,297
Или предположим, что у нас есть значение x = 12.Расчетное значение y будет:
- у = 0,32143 + 1,59524*(8,762) + (1,59524+2,40476)*(12-8,762)
- у = 27,25
Шаг 4: Визуализируйте окончательную модель кусочной регрессии
Мы можем использовать следующий код для визуализации окончательной модели кусочной регрессии поверх наших исходных данных:
#plot original data
plot(df$x, df$y, pch= 16 , col='steelblue')
#add segmented regression model
plot(segmented. fit , add= T )

Похоже, что модель кусочной регрессии достаточно хорошо соответствует данным.
Дополнительные ресурсы
В следующих руководствах представлена дополнительная информация о моделях регрессии в R:
Как выполнить простую линейную регрессию в R
Как выполнить множественную линейную регрессию в R
Как выполнить логистическую регрессию в R
Как выполнить квантильную регрессию в R
Как выполнить взвешенную регрессию в R