【问题标题】:r - How to let polr fail gracefullyr - 如何让 polr 优雅地失败
【发布时间】:2017-01-03 10:26:36
【问题描述】:

我的 RMarkdown 脚本和序数逻辑回归拟合的迭代应用存在问题,该问题已得到充分讨论(原因是)herehere。我还尝试按照建议的heremaxint 增加到100 无效。

我知道整体代码很好,因为到目前为止它似乎只在数百个模型中失败了一个。

脚本中断错误是

Error in polr(a, data = rData, Hess = TRUE) : 
  attempt to find suitable starting values failed
In addition: Warning messages:
1: glm.fit: algorithm did not converge 
2: glm.fit: fitted probabilities numerically 0 or 1 occurred 

我的问题是;有没有办法让模型优雅地拟合失败并报告cat(Model XY doesn't converge, moving on) 之类的内容,然后继续输入列表中的下一个模型?

我怀疑这将涉及将调用包装在条件测试中,可能看起来像这样:

if( polr(...) == FAILS) {
  cat(message)
  return() # exit out of current iteration
} else {
  polr(... # run the model fit normally
}

这是失败的数据和模型

## Raw Data
T_P <- c(32,34,31,24,40,21,30,31,25,31,18,32,26,26,27,35,22,32,27,28)
T_M <- c(16,6,12,12,13,10,14,14,11,13,5,13,9,13,11,18,11,15,12,13)
E   <- c(10,15,11,15,15,8,14,13,15,12,9,11,13,15,9,15,6,13,6,15)
Q13.1.2 <- c(5,4,5,5,4,4,5,4,3,5,3,4,3,5,4,4,4,5,5,4) # categorical response

## Dataframe of data
rData <- data.frame(T_P,T_M,E,Q13.1.2)

d <- "Q13.1.2"       # dependant variable
c <- "T_P + T_M + E" # sting of covariates
a <- str_c("as.factor(",d,") ~ ", c, sep="") # concat depVar & indVars into model alogrithm

m <- polr(a, data=rData, Hess=TRUE) # build model

【问题讨论】:

    标签: r error-handling r-markdown logistic-regression


    【解决方案1】:

    原来在 R 中有一些错误处理,尽管是初级的(参见 here)。遵循这个逻辑,记住示例实际上是循环的一部分:

    tryCatch({
               # this is the test (just run the call in question)
               polr(a, data=rData, Hess=TRUE)
             }, warning = function(w) {
                # this is how tryCatch handles a stop event
                message("Model doesn't fit") # message to console
                modelFail <<- TRUE # set a variable to test                 
             }, error = function(e) {
                # this is tryCatch handing an error event
                message("error!")
             }, finally = {
                # this is what to do in the event of an.. event
                # I'm not using this approach
             })
    
    if(exists("modelFail")){
      cat("DON'T PANIC! The model fit failed, moving on...")
      rm(modelFail) # I clear the flag to reuse in case of another failure in loop
      return()
    } else {
        # now it is safe to run the fit as we have handled an error above                  
        m <- polr(a, data=rData, Hess=TRUE) # build model
    }
    

    【讨论】:

    • 与什么比较初级?
    猜你喜欢
    • 1970-01-01
    • 2013-05-24
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    • 2019-06-18
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    相关资源
    最近更新 更多