在保持 psi = NA 的同时更改 seg.control() 中的参数

Changing arguments in seg.control() while maintaining psi = NA

我有一个dataset that I'm trying to fit a piecewise linear regression model using segmented()。我想保留 psi = NA,因为我有几个 "transects" 数据需要拟合分段模型。问题是我不断收到以下两个错误之一:

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))

非常感谢!

如果您不想对 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 设置为离收敛点很远的值也是如此。

我发现 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)))

仍然会打印错误让我知道发生了错误,但它会循环并重试直到模型被拟合,然后移动到下一个样带。

感谢大家的帮助!