You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为各蜂箱线性模型批量应用segmented()函数获取断点?

解决方案

你可以在已有的tidyverse管道中继续扩展,用map对每个蜂箱的线性模型批量应用segmented()函数,同时指定2个初始断点的猜测值。

完整代码实现

library(tidyverse)
library(segmented)

# 基于你已生成的lm.fit对象,添加分段模型拟合步骤
segmented_results <- lm.fit %>%
  mutate(
    # 对每个线性模型应用segmented,指定自变量和2个初始断点
    seg_model = map(lmMod, ~segmented(
      obj = ., 
      seg.Z = ~ndate, 
      psi = c(1620000000, 1630000000)  # 替换成你数据中合理的初始时间戳
    )),
    # 提取每个模型的最终断点估计值
    breakpoints = map(seg_model, ~.$psi[, "Est."]),
    # 提取分段模型的系数
    seg_coefficients = map(seg_model, coefficients)
  )

关键注意事项

  • psi参数需要填入两个符合你ndate范围的初始时间戳,作为断点的初始猜测,segmented包会基于这个值迭代优化出最优断点。如果你的时间戳范围不同,一定要替换成对应区间的数值。
  • 如果出现收敛报错,可以通过seg.control参数调整迭代设置,比如:
    seg_model = map(lmMod, ~segmented(
      obj = ., 
      seg.Z = ~ndate, 
      psi = c(1620000000, 1630000000),
      control = seg.control(maxit = 100, tol = 1e-4)
    ))
    
  • 若要把断点整理成结构化数据框方便查看,可添加以下步骤:
    breakpoint_summary <- segmented_results %>%
      select(id, breakpoints) %>%
      unnest(breakpoints) %>%
      mutate(breakpoint_order = row_number(), .by = id)
    

内容的提问来源于stack exchange,提问作者Giulia Mainardi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 18:45:19