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

基于bsts包的时间序列趋势方向正式检验方法咨询

问题解答

结论

不需要移除局部线性趋势项,直接基于你已经拟合完成的bsts模型的后验样本就可以完成趋势方向的正式统计推断,比替换为全局时间回归的方案更适配你的数据特征。

为什么不推荐替换为全局时间回归

你当前使用的局部线性趋势假设斜率可以随时间动态变化,能更好捕捉数据中潜在的趋势转折(比如你提供的序列在2020年3月有明显的跳升),而全局时间回归强制要求整个观测周期的趋势斜率固定,会大幅降低模型拟合效果,也不符合你数据的实际波动特征。

基于现有模型的趋势检验方法

bsts的贝叶斯框架天然支持概率化的趋势推断,不需要额外做频率派的假设检验,操作步骤如下:

  1. 提取斜率的后验样本
    局部线性趋势的状态向量包含两个维度:第一个是趋势水平值,第二个就是你需要的趋势斜率值,你之前的代码只提取了水平值的均值,补充代码获取斜率的全后验样本:
# 提取烧完期后的斜率样本,第三个维度为2对应斜率分量
slope_samples <- bsts.model$state[-(1:burn), , 2]
  1. 计算整体趋势方向的后验概率
    如果你需要判断整个观测周期的平均趋势方向:
# 计算每一条后验样本对应的全周期平均斜率
mean_slope_per_draw <- rowMeans(slope_samples)
# 计算趋势为正的后验概率
prob_positive_trend <- mean(mean_slope_per_draw > 0)
# 计算趋势为负的后验概率
prob_negative_trend <- mean(mean_slope_per_draw < 0)
  • 若prob_positive_trend大于0.95,可认为有95%以上的概率序列整体呈上升趋势
  • 若prob_negative_trend大于0.95,可认为有95%以上的概率序列整体呈下降趋势
  • 若两者均低于0.95,可判定序列整体为平稳态势
  1. 可选的简化方案(精度更低)
    如果你不想额外处理斜率样本,也可以直接用你已经提取的平滑后趋势序列(components中Component为Trend的值),对时间做普通线性回归,查看时间系数的显著性,但该方法丢失了后验不确定性信息,推断严谨性低于后验概率方案。

优化建议

你当前设置的迭代次数niter=500偏低,建议调整为2000及以上,获得更稳定的后验估计结果;另外序列2020年3月的异常值可以考虑添加干预项,避免对趋势估计产生干扰。

内容的提问来源于stack exchange,提问作者Gabriel De Oliveira Caetano

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:48:03