2

我目前正在使用 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")

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

任何帮助表示赞赏,谢谢。

4

3 回答 3

1
plot(fit, ANOVA = TRUE)

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

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

于 2013-05-10T11:30:10.333 回答
1

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

(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
> 
于 2013-05-16T10:56:59.650 回答
1

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

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

我希望它对你有帮助!

于 2016-07-11T13:00:04.093 回答