Резюме
Вы все делаете правильно, но неверно истолковываете значение вывода broken.lines()
(в ваших обозначениях fted$fit
). Не следует ожидать, что эти значения согласуются с mpg
.
Вы можете сохранить линейную зависимость для некоторых зависимых переменных, указав в seg.Z
только те переменные, где вы хотите иметь ломаную линию.
Что сломанный.line() делает
Вы создаете модель для mpg
как функции двух переменных, hp
и wt
. Модель является кусочно-линейной по обеим этим переменным. Важно отметить, что для прогнозирования значения mpg
необходимо указать оба, hp
и wt
.
Функция broken.line()
используется для расчета прогнозов для mpg
, если одна из переменных, указанных в аргументе term
, изменяется. Вы делаете это для переменной hp
следующим образом:
fted = broken.line (seg.o, term="hp")
Но помните: для прогнозирования вам также необходимо указать значение для wt
. Значения, которые вы получаете в fted$fit
, на самом деле рассчитываются с wt
равным нулю.
Вы можете проверить это, используя функцию predict()
, которая будет использоваться, когда вы хотите получить прогнозы от своей модели:
pred <- predict(seg.o, data.frame(hp = hp, wt = 0))
pred - fted$fit
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
## 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Создание прогнозов из модели
Если вы хотите сравнить прогнозы модели с mpg
, вы должны использовать те же значения для обеих переменных, hp
и wt
, что и для подгонки. Вы также можете сделать это с прогнозом:
pred <- predict(seg.o, data.frame(hp = hp, wt = wt))
plot(hp, mpg)
points(hp, pred, col = "red")
![введите здесь описание изображения](https://i.stack.imgur.com/ozOy0.png)
Как видите, полученные таким образом значения более или менее согласуются с mpg
. Именно так и следует проверять качество вашей модели, а не с помощью broken.line()
.
Построение кусочно-линейной зависимости
Вы также можете посмотреть на кусочно-линейную связь между mpg
и одной из переменных. Вы уже рассчитали эти значения в fted
, но вы также можете напрямую построить их из seg.o
следующим образом:
plot(seg.o, term = "hp")
points(hp, fted$fit, col = "red")
![введите здесь описание изображения](https://i.stack.imgur.com/uNLNc.png)
Обратите внимание, что также для plot()
вам нужно указать, какая переменная будет варьироваться (здесь hp
). Другой снова держится на нуле. Я также добавил точки из fted$fit
, чтобы показать вам, что график на самом деле эквивалентен тому, что рассчитывается broken.line
.
Подогнать ломаную линию только для одной переменной
Если вы хотите поместить ломаную линию только в одну из зависимых переменных и сохранить линейную зависимость для других (других), вам нужно указать в seg.Z
только те переменные, для которых вы хотите использовать ломаную линию. Вы просили иметь ломаную линию только для hp
, что можно сделать следующим образом:
seg.o2 <- segmented(reg, seg.Z = ~hp, psi = list(hp = hp_thresh))
Чтобы показать, что это сработало, я предсказываю модель только с одной из переменных и варьирую график.
Изменение hp
, сохранение wt
фиксированным`:
pred_hp <- predict(seg.o2, data.frame(hp = 50:300, wt = 0))
plot(50:300, pred_hp, type = "l")
![введите здесь описание изображения](https://i.stack.imgur.com/Wdzxw.png)
Изменение wt
, сохранение hp
фиксированным`:
pred_wt <- predict(seg.o2, data.frame(wt = seq(1.5, 5.5, by = 0.1), hp = 0))
plot(seq(1.5, 5.5, by = 0.1), pred_wt, type = "l")
![введите здесь описание изображения](https://i.stack.imgur.com/6WeHm.png)
Как видите, ваша модель для mpg
линейно зависит от wt
, но имеет разорванную линейную связь с hp
.
person
Stibu
schedule
14.04.2016
segmented()
иbroken.line()
? - person Stibu   schedule 13.04.2016broken.lines()
. Я попытался сохранить эту часть и добавить ваш более четкий вопрос как четко обозначенное редактирование. Таким образом, мой ответ остается в силе как ответ на исходный вопрос. Я добавлю ответ для редактирования сейчас. - person Stibu   schedule 16.04.2016