我有dataset我试图使用segmented()拟合分段线性回归模型。我想离开psi = NA
,因为我有几个“横断面”的数据,需要安装分段模型。问题是我一直遇到两个错误之一:
Error in segmented.lm(transect.lm, seg.Z = ~distance, psi = NA, control = seg.control(n.boot = 30, :
only 1 datum in an interval: breakpoint(s) at the boundary or too close each other
Error: at least one coef is NA: breakpoint(s) at the boundary? (possibly with many x-values replicated)
我想将psi
留给NA
。可以更改seg.control
内的任何内容以防止错误吗?
我在这里提出了分段模型:
transect.lm <- lm(elevation~length, data = data2)
transect.pw <- segmented(transect.lm,
seg.Z = ~length,
psi = NA,
control = seg.control(
n.boot = 30,
h = 0.001,
stop.if.error = FALSE))
非常感谢先进!
答案 0 :(得分:1)
如果您不想对psi
参数进行硬编码,可以执行以下操作:
如果您认为断点将接近开头:
segmented(transect.lm, seg.Z = ~length, psi = sort(data2$length)[2])
如果你认为断点接近中间:
segmented(transect.lm, seg.Z = ~length, psi = median(data2$length))
如果您认为断点接近结束:
segmented(transect.lm, seg.Z = ~length, psi = sort(data2$length, decreasing = TRUE)[2])
无论如何,我发现即使我将segmented()
设置为距收敛点很远的值,psi
也会在数据集的任何部分上最好地收敛。
答案 1 :(得分:1)
我发现a post in R-Bloggers谈到了如何管理for循环中的错误。 for循环中给我带来麻烦的部分可以在try()
命令内。在文章中,R只是跳过它并继续进行分析,但我发现我的for循环,它会循环回来再试一次,所以最终看起来像这样:
transect.lm <- lm(elevation~length, data = data2)
try(transect.pw <- segmented(transect.lm,
seg.Z = ~length,
psi = NA,
control = seg.control(
n.boot = 30,
h = 0.001)))
错误仍会打印出来让我知道发生了什么错误,但它会循环回来再试一次,直到模型安装完毕,然后移到下一个横断面。
感谢大家的帮助!