Как выполнить кусочную регрессию в R (шаг за шагом)

Как выполнить кусочную регрессию в R (шаг за шагом)

Кусочная регрессия — это метод регрессии, который мы часто используем, когда в наборе данных есть явные «точки останова».

В следующем пошаговом примере показано, как выполнить кусочную регрессию в 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

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.