【问题标题】:Speed up iterations of piecewise regressions with the segmented function in R使用 R 中的分段函数加速分段回归的迭代
【发布时间】:2018-07-05 05:56:37
【问题描述】:

我正在尝试使用 R 中 segmented 包中的 segmented 函数拟合大约 300 个分段回归。由于 segmented 函数,这需要大量时间(~4 天)。我已经在使用计算机的所有内核,但我不是程序员,我猜这段代码可能不是最优的。我可以改进下面的代码以使其运行得更快吗?怎么样?

这是一个可重现的示例。 df 是一个模拟数据框,对应于我要分析的 300 个数据集之一。每个数据集是一天,每天我每 5 分钟测量一次温度,x 是温度,y 是一天中的时间。下图显示了我的数据的样子。该模式非常具体且可在几天内重复,并且斜率的每次变化都对应于众所周知的生物学机制。这就是为什么我可以猜出 psi 的所有值(例如日出和日落的时间)。

当然,真实数据的可变性更大,我使用了多次迭代(大约 200 次,这里我以 10 次为例)来增加成功拟合的机会。

library(segmented)
y<-seq(1,288,1)
x<-c(seq(0,-30,-1),seq(-30,-54,-2),seq(-54,30,1),seq(30,10,-1),seq(10,90,1),seq(90,34,-1))
df<-data.frame(x,y)
head(df)

plot(x~y)
t1=31
t2=44
t3=129
t4=150
t5=231

iterations<-10
for (j in 1:iterations) {           
  res <- lm(formula=x~y,data=df)      
  try(result <- segmented(
       res, seg.Z=~y, psi=c(t1,t2,t3,t4,t5),
       control=seg.control(it.max=200, display=F, K=4, h=0.1, n.boot=100, random=T)))          
}

result

lm 退出循环并不会显着提高循环速度。

【问题讨论】:

  • 你能举例说明你的数据吗? t1, ..., t5 是什么?
  • 300 个分段回归,每个回归有 5 个断点?对于您要解决的任何统计问题,我严重怀疑这是否是一种明智的方法。如果您的数据确实遵循具有 5 个断点的线性关系,您可能可以通过提供更好的起始值来加快速度。然而,情况可能并非如此,因为这在现实世界的数据中极为罕见。
  • 您可以使用lm.fit() 而不是lm,它提供的输出不太完整,但速度更快,您可以只提取您需要的内容。
  • 三个问题:1.你有没有profile你的代码; lmsegmented 是否占用了大部分时间? 2.你说的并行是在哪里做的? 3.你能把res &lt;- lm(formula=x~y,data=df)移出循环吗?
  • 这里的迭代到底是什么?据我所知,您在 for 循环中运行了 10 次 segmented 尝试,但不依赖于分段函数中的先前结果。如果是这种情况,那么一个简单的 mclapplylibrary(parallel) 而不是 for 循环应该会显着加快你的速度。

标签: r performance linear-regression piecewise


【解决方案1】:

应该有帮助的一件事是在找到结果后打破迭代。在大多数情况下,它应该在第一次迭代中找到一些东西,这将避免运行 200 次不必要的迭代。

rm(result)
for (j in 1:iterations) {           
  res <- lm(formula=x~y,data=df)
  try(result <- segmented(
       res, seg.Z=~y, psi=c(t1,t2,t3,t4,t5),
       control=seg.control(it.max=200, display=F, K=4, h=0.1, n.boot=100, random=T)))
  if (exists("result")) break
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-30
    • 2012-03-14
    • 2014-08-09
    • 2014-09-21
    • 1970-01-01
    • 2015-01-11
    • 1970-01-01
    相关资源
    最近更新 更多