我目前正在使用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")
问题是结果输出对象不是自动的,换句话说,我可以找到断点之间的值并尝试从这些趋势值中制定斜率,但是这个过程非常耗时,因为我必须手动找到起始/结束断点值并提取其间的每个值。理想情况下,我想找到一种更简单的方法来识别多个时间序列的所有可用断点之前和之后的趋势斜率(蓝线)。
感谢任何帮助。
答案 0 :(得分:1)
plot(fit, ANOVA = TRUE)
会为您提供每个已识别趋势段的“斜率和显着性值”。
有趣的是,当您指定时,它会起作用:type =“trend”
答案 1 :(得分:1)
从绘图中提取斜率值,以便可以将它们存储为对象供以后使用。
(plot(fit, ANOVA=TRUE)$slope)
如果在绘图函数上使用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
>
答案 2 :(得分:1)
这个问题已经很老了,但是我发现了一种更快的方法,没有调用plot()或str()函数以及它们涉及的计算时间
niter <- length(fit$output)
slopes<-coef(fit$output[[niter]]$bp.Vt)[,2]
我希望它可以帮到你!