如何仅在两个因变量之一中使用虚线?
How to fit with a broken line in only one of two dependent variables?
使用 mtcars
数据集,我试图确定 mpg
的折线回归拟合作为 hp
和 wt
的函数,断点即将到来仅来自 hp
。这是代码:
mpg = mtcars$mpg
wt = mtcars$wt
hp = mtcars$hp
reg = lm (mpg ~ hp +wt)
hp_thresh = 150
wt_thresh = 3
library(segmented)
seg.o = segmented (reg,seg.Z=~hp+wt, psi=list (hp=hp_thresh, wt=wt_thresh))
fted = broken.line (seg.o, term="hp") # mpg fit for hp breakpoints
fted$fit
值没有意义(将它们与 mpg 值进行比较)。我想我在函数的使用中遗漏了一些简单的东西。
编辑:
进一步澄清:我希望仅使用 mpg
和 hp
之间的分段关系,仍以线性方式包括 wt
。怎么做到的?
我尝试在 segmented()
的输入中使用 hp_thresh
以便仅针对 hp
建立断开的关系,但我收到此错误:"A wrong number of terms in seg.Z
or psi
".
总结
你做的是对的,但是你误解了broken.lines()
输出的意思(在你的符号中,fted$fit
)。这些值不应与 mpg
.
一致
您可以通过仅向 seg.Z
提供您想要虚线的那些变量来保持某些因变量的线性关系。
broken.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")
如您所见,以这种方式产生的值或多或少与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
.
的线性关系断开
使用 mtcars
数据集,我试图确定 mpg
的折线回归拟合作为 hp
和 wt
的函数,断点即将到来仅来自 hp
。这是代码:
mpg = mtcars$mpg
wt = mtcars$wt
hp = mtcars$hp
reg = lm (mpg ~ hp +wt)
hp_thresh = 150
wt_thresh = 3
library(segmented)
seg.o = segmented (reg,seg.Z=~hp+wt, psi=list (hp=hp_thresh, wt=wt_thresh))
fted = broken.line (seg.o, term="hp") # mpg fit for hp breakpoints
fted$fit
值没有意义(将它们与 mpg 值进行比较)。我想我在函数的使用中遗漏了一些简单的东西。
编辑:
进一步澄清:我希望仅使用 mpg
和 hp
之间的分段关系,仍以线性方式包括 wt
。怎么做到的?
我尝试在 segmented()
的输入中使用 hp_thresh
以便仅针对 hp
建立断开的关系,但我收到此错误:"A wrong number of terms in seg.Z
or psi
".
总结
你做的是对的,但是你误解了broken.lines()
输出的意思(在你的符号中,fted$fit
)。这些值不应与 mpg
.
您可以通过仅向 seg.Z
提供您想要虚线的那些变量来保持某些因变量的线性关系。
broken.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")
如您所见,以这种方式产生的值或多或少与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
.