概括
您正在正确地做事,但是您误解了broken.lines()(在您的符号中fted$fit)的输出的含义。不应期望这些值与mpg.
seg.Z您可以通过仅提供那些希望有虚线的变量来保持某些因变量的线性关系。
broken.line() 做了什么
mpg您正在为两个变量hp和的函数创建一个模型wt。对于这两个变量,该模型都是分段线性的。需要注意的是,为了预测 的值,mpg您需要同时指定和。hpwt
该函数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对于拟合而言。您也可以使用 predict 执行此操作:
pred <- predict(seg.o, data.frame(hp = hp, wt = wt))
plot(hp, mpg)
points(hp, pred, col = "red")

如您所见,以这种方式产生的值或多或少与mpg. 通过这种方式,您应该检查模型的质量,而不是使用broken.line().
绘制分段线性关系
mpg您还可以查看其中一个变量之间的分段线性关系。您已经在 中计算了这些值fted,但您也可以直接绘制seg.o如下:
plot(seg.o, term = "hp")
points(hp, fted$fit, col = "red")

请注意,对于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")

变化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")

如您所见,您的模型mpg线性依赖于wt,但与 的线性关系断开hp。