在保持 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)))
仍然会打印错误让我知道发生了错误,但它会循环并重试直到模型被拟合,然后移动到下一个样带。
感谢大家的帮助!
我有一个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)))
仍然会打印错误让我知道发生了错误,但它会循环并重试直到模型被拟合,然后移动到下一个样带。
感谢大家的帮助!