【问题标题】:Finding slope before and after breakpoint寻找断点前后的斜率
【发布时间】:2017-04-16 15:03:28
【问题描述】:

我目前正在使用 R 中的 bfast 包来分解时间序列。我很好奇是否可以在断点之前和之后提取趋势段的斜率(直到结束或另一个断点)?

以下示例取自参考手册。

生成它的代码在这里。

require(bfast)
require(strucchange)
require(sandwich)
require(forecast)
require(raster)
require(sp)
fit <- bfast(harvest, season="harmonic", max.iter=2)
plot(fit, type="trend")

问题是结果输出对象不是自动的,换句话说,我可以找到断点之间的值并尝试根据这些趋势值制定斜率,但是这个过程非常耗时,因为我必须手动找到开始/结束断点值并提取其间的每个值。所以理想情况下,我想找到一种更简单的方法来识别多个时间序列的所有可用断点之前和之后的趋势斜率(蓝线)。

感谢任何帮助,谢谢。

【问题讨论】:

    标签: r decomposition


    【解决方案1】:
    plot(fit, ANOVA = TRUE)
    

    将为您提供“每个已识别趋势段的斜率和显着性值”。

    有趣的是,当您指定时它确实有效:type="trend"

    【讨论】:

    • 感谢您的努力。将 ANOVA 设置为 TRUE 将给出绘图上的斜率,但我实际上想提取斜率值,以便可以将它们存储为对象。非常感谢,我通过使用它找到了它。
    【解决方案2】:

    从图中提取斜率值,以便可以将它们存储为对象以供以后使用。

    (plot(fit, ANOVA=TRUE)$slope)
    

    如果你在 plot 函数上使用 str() 会很有趣。

    > str(plot(fit, ANOVA=TRUE))
    'data.frame':   5 obs. of  2 variables:
     $ slope: num  0.00109 0.01314 -0.20077 0.14659 0.11524
     $ prob : num  9.07e-01 2.41e-05 1.01e-13 3.08e-13 1.06e-13
    > (plot(fit, ANOVA=TRUE)$slope)
    [1]  0.001088344  0.013139678 -0.200767197  0.146594801  0.115236688
    > 
    

    【讨论】:

      【解决方案3】:

      这个问题已经很老了,但我找到了一种更快的方法,无需调用 plot() 或 str() 函数以及它们所涉及的计算时间

      niter <- length(fit$output)
      slopes<-coef(fit$output[[niter]]$bp.Vt)[,2]
      

      希望对你有帮助!

      【讨论】:

        猜你喜欢
        • 2020-05-05
        • 1970-01-01
        • 1970-01-01
        • 2016-02-24
        • 2018-12-13
        • 2011-12-26
        • 1970-01-01
        • 2021-01-11
        • 1970-01-01
        相关资源
        最近更新 更多