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

R语言tsSmooth函数用法详解:如何获取带线性趋势的单变量时间序列

R语言tsSmooth函数详解与实操

函数核心作用

tsSmooth是R语言forecast扩展包中用于时间序列平滑拟合的专用函数,核心功能是基于指定的时间序列模型(如结构化时间序列模型、ARIMA、ETS等),输出序列的平滑拟合值,也可以单独提取序列的趋势、季节等结构化分量,完全满足提取单变量时间序列线性趋势的需求。

核心常用参数

  • x:输入对象,要求为R标准ts类时间序列
  • model:指定用于平滑拟合的模型,提取线性趋势时推荐搭配StructTS结构化时间序列模型使用,拟合效果稳定
  • type:指定返回的分量类型,要提取线性趋势直接设置为"trend"即可,可选值还包括"level"(水平项)、"seasonal"(季节项)

实操步骤(提取线性趋势序列)

步骤1:安装加载依赖包

如果未安装过forecast包先执行安装,之后加载:

# 安装依赖(仅需执行一次)
install.packages("forecast")
# 加载包
library(forecast)

步骤2:构造带线性趋势的单变量时间序列

我们先生成一组模拟的带噪声线性趋势序列用于演示,你可以替换成自己的实际数据,注意要先转为ts格式:

# 固定随机种子保证结果可复现
set.seed(123)
# 构造100期的线性趋势+随机噪声序列
t <- 1:100
real_trend <- 2 + 0.3 * t # 真实线性趋势:截距2,斜率0.3
noise <- rnorm(100, mean = 0, sd = 2) # 高斯噪声
# 转为ts类时间序列,frequency=1代表无季节波动的单周期序列
raw_ts <- ts(real_trend + noise, frequency = 1)

步骤3:调用tsSmooth提取线性趋势

# 先拟合带趋势项的结构化时间序列模型,再传入tsSmooth提取趋势分量
trend_smoothed <- tsSmooth(
  x = raw_ts,
  model = StructTS(raw_ts, type = "trend"),
  type = "trend"
)

步骤4:结果验证与使用

输出的trend_smoothed本身就是标准ts类对象,可以直接用于后续分析,也可以绘图对比效果:

# 查看前6行拟合结果
head(trend_smoothed)
# 绘图对比原始序列、真实趋势、拟合的平滑趋势
plot(raw_ts, col = "gray", lwd = 1, main = "线性趋势提取效果对比", ylab = "数值")
lines(real_trend, col = "blue", lwd = 2, lty = 2)
lines(trend_smoothed, col = "red", lwd = 2)
legend("topleft",
       legend = c("原始带噪序列", "真实线性趋势", "tsSmooth提取趋势"),
       col = c("gray", "blue", "red"),
       lty = c(1,2,1), lwd = c(1,2,2))

运行后可以看到tsSmooth提取的趋势和真实线性趋势几乎重合,降噪效果符合预期。

注意事项

  • 如果你的原始序列自带季节波动,只需将StructTS的type参数改为"BSM"(基础结构模型),仍设置tsSmooth的type = "trend"即可单独提取剔除季节影响后的线性趋势
  • 若需要调整平滑程度,可以自定义StructTS的协方差参数,默认参数对绝大多数线性趋势场景的提取效果已经足够
  • 输入序列如果存在缺失值,建议先用na.interp()等函数先补全缺失值再进行拟合,避免报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:15:04