处理分段错误:边界处不存在断点

问题描述 投票:0回答:2

我有一个函数尝试将分段回归模型应用于我的数据。 在某些情况下,数据存在大量缺失值,并且我没有一个很好的估计器来估计结的位置。我决定绕过分段并进行简单的线性回归:

try(piecewise) if error go to lm with just one slope

这是执行此操作的代码。请注意,

lin.reg
是一个辅助函数,它为 x 范围内的
predict()
对象输出
lm
。它不会造成任何问题。

piece <- function(x,y){

  # just in case this comes with column names or something
  y <- as.numeric(y)


    # create the lm object
      lm.obj <- lm(y~x)
    # Try to fit piecewise
      seg <- try(segmented(lm.obj,seg.Z=~x))

    #  print(seg)

      if("try-error" %in% class(seg)) {

        # Print that you are using a linear regression and not the piece-wise
          print("Using linear Regression")

        # Call helper function
          result <- lin.reg(x,y)

        # Get out of the error/function
        return(result)
        }

      # Use the piece-wise
      result <- predict(segmented::segmented(lm.obj,seg.Z=~x),
                       newdata = data.frame(x,y))
      print("Using piece-wise regression")

  return(result)

}

问题

当分段出错时,我会收到此错误

错误:至少有一个系数不适用:边界处有断点吗? (可能有许多重复的 x 值)

但是它不可靠/不可预测,有时它会被忽略,有时会破坏功能。我正在使用

y
值循环数据帧的行,并且在制动之前相同的调用会到达不同的行。

我相信这与

if("try-error" %in% class(seg))
有关,这可能不是捕获错误的最佳方法。

我添加了一些打印来确保。当它正常工作时,注意迭代 284 给出了错误并进入简单线性。

[1] "Using piece-wise regression"
[1] 283
[1] "segmented" "lm"       
[1] "Using piece-wise regression"
[1] 284
Error : at least one coef is NA: breakpoint(s) at the boundary? (possibly with many x-values replicated)
[1] "try-error"
[1] "Using linear Regression"

当它没有出现时,似乎 try() 调用没有返回应有的错误

[1] "Using piece-wise regression"
[1] 312
[1] "segmented" "lm"       
[1] "Using piece-wise regression"
[1] 313
[1] "segmented" "lm"       
  Error: at least one coef is NA: breakpoint(s) at the boundary? (possibly with many x-values replicated) 
r error-handling try-catch linear-regression
2个回答
0
投票

在 try 块中添加参数

silent=T
对我来说很有效。


0
投票

2024年的答案:

try(., silent = T)
seg.control(stop.if.error = F)
对于抑制此类错误不再有用。

根据我自己的经验,您可能需要尝试限制

it.max
中的
n.boot
seg.control
并打开
display = T
,这样您就可以了解发生了什么。

© www.soinside.com 2019 - 2024. All rights reserved.