【问题标题】:R crashes when running very large dredge in MuMIn在 MuMIn 中运行非常大的挖泥机时 R 崩溃
【发布时间】:2019-02-28 07:58:38
【问题描述】:

我一直在使用一个非常大的全局模型的包 MuMIn 作为垫脚石运行挖泥机,最终目标是获取每个变量的重要性值。挖泥机确实在 2 天内成功运行,但我后来需要添加 2 个变量,并且在添加后它还没有运行完成。它在 R 崩溃之前第一次运行了 7 天(我假设),因为当我接下来检查它时,R 已经关闭,当我再次启动 RStudio 时没有错误消息,这是一个新窗口。我再次启动代码,这次它运行了 8 天,然后才做同样的事情。

我将解释我的全局模型和子集,这样就可以清楚为什么代码需要这么长时间才能运行:它是一个包含 19 个变量和 4 个交互项的游戏(除“年份”之外的所有数字,它是分类)。有些变量不能一起出现在模型中,因为一个是另一个的替代版本,所以我有这些的子集。交互项使事情变得更加复杂,因为当交互项在模型中时,项的平滑版本不能成为主要影响,因为该项的未平滑版本会自动包含在内,该项的未平滑版本也不会显示为当交互项不在模型中时的主要影响,因为可能已经存在该项的平滑版本。任一选项都会导致模型中一个术语的双重表示,因此我也将这些选项子集化了。下面是显示全局模型和挖泥船代码的代码:

library(MuMIn)
options(na.action = "na.fail")

real.model2 <- gam(resqpa ~ factor(year) + s(elev) + factor(year)*elev + 
s(bf1) + s(bf2) + s(bf3) + s(open) + s(water) + s(bfbs1) + s(bfbs2) + 
s(bfbs3) + s(bs2) + s(bs3) + s(mix) + s(cs1) + s(cs2) + factor(year)*bfbs2 + 
factor(year)*bfbs3 + factor(year)*bs2 + factor(year)*bs3 + s(allbf) + s(ct1) 
+ s(ct2) + s(allcs), family=binomial(link="cloglog"))

fits6 <- dredge(real.model2, subset =  (!("s(allbf)" & "s(bf1)")) 
            & (!("s(allbf)" & "s(bf2)")) 
            & (!("s(allbf)" & "s(bf3)")) 
            & (!("s(ct1)" & "s(bf1)")) 
            & (!("s(ct1)" & "s(bfbs1)")) 
            & (!("s(ct2)" & "s(bf2)")) 
            & (!("s(ct2)" & "s(bfbs2)"))
            & (!("s(ct2)" & "s(bs2)"))
            & (!("s(allcs)" & "s(cs1)"))
            & (!("s(allcs)" & "s(cs2)"))
            & (!(`s(elev)` & "elev:factor(year)")) & (!elev  | `elev:factor(year)`) 
            & (!(`s(bfbs2)` & "bfbs2:factor(year)")) & (!bfbs2  | `bfbs2:factor(year)`) 
            & (!(`s(bfbs3)` & "bfbs3:factor(year)")) & (!bfbs3  | `bfbs3:factor(year)`) 
            & (!(`s(bs2)` & "bs2:factor(year)")) & (!bs2  | `bs2:factor(year)`) 
            & (!(`s(bs3)` & "bs3:factor(year)")) & (!bs3  | `bs3:factor(year)`))

在我第二次运行诊断时 R 崩溃后;但是,错误的时间戳与 R 崩溃的时间不匹配,所以我不知道这是否提供信息。

24 Sep 2018 03:06:26 [rdesktop] ERROR system error 231 (All pipe instances 
are busy); OCCURRED AT: virtual void 
rstudio::core::http::NamedPipeAsyncClient::connectAndWriteRequest()

这是需要更多计算能力的问题,还是有更简洁/更正确的方法来编写此代码以使其完成? 提前感谢您对此的任何帮助!

【问题讨论】:

    标签: r mumin


    【解决方案1】:

    如果您通过 RStudio 运行 R,则很难判断导致错误的原因。尝试在纯 R 中运行您的 R 脚本,而不是在 RGui(或 via R CMD batch)中,以便在崩溃后保留您的输出。还将dredge 参数trace 设置为TRUE,这样您就可以看到是哪个模型导致了问题。

    另一种方法是通过dredge(..., evaluate = FALSE) 创建所有模型调用的list,之后您可以在其上循环,eval-uating 调用。您可以将所有这些模型对象存储在一个列表中,但这会创建一个非常大的对象,因此每次将它们save 放在磁盘上而不是保存在内存中和/或创建部分模型选择表可能会更好稍后与rbind 合并。这种方法的优点是您可以在之前崩溃的点之后重新启动循环(如果您save 磁盘上的所有必要数据)。

    【讨论】:

      猜你喜欢
      • 2020-06-08
      • 1970-01-01
      • 2018-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多