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

时间序列线性回归求助:拟合指定趋势与季节性模型

解决方案

1. 数据准备

先将原始数据转换为R可处理的数据框,并确认你已创建的时间序列对象:

# 构造原始数据框
data <- data.frame(
  Date = c("Jan-95", "Feb-95", "Mar-95", "Apr-95", "May-95", "Jun-95", "Jul-95", "Aug-95", "Sep-95"),
  Sales = c(1664.81, 2397.53, 2840.71, 3547.29, 3752.96, 3714.74, 4349.61, 3566.34, 5021.82)
)

# 你已完成的时间序列对象创建代码
t <- ts(data$Sales, frequency = 12, start = c(1995, 1))

2. 拟合带加法季节性的线性趋势模型(Model A)

加法模型核心假设:销售额 = 线性趋势 + 季节效应 + 随机误差,以1月为参照组,需生成对应月份虚拟变量后拟合回归:

# 生成时间趋势项(1对应Jan-95,9对应Sep-95)
trend <- 1:length(t)

# 提取月份信息并生成虚拟变量(移除1月变量,以其为参照)
month <- factor(cycle(t), levels = 1:12, labels = month.abb[1:12])
season_dummies <- model.matrix(~ month - 1)[, -1]

# 拟合加法模型
model_A <- lm(Sales ~ trend + ., data = data.frame(Sales = t, trend, season_dummies))

# 查看模型详细结果
summary(model_A)

模型解释

  • 趋势项系数代表每月销售额的线性增长幅度
  • 各月份虚拟变量的系数,代表该月相对于1月的加法季节效应(即该月销售额比1月平均多/少的具体数值)

3. 拟合带乘法季节性的指数趋势模型(Model B)

乘法模型核心假设:销售额 = 指数趋势 × 季节因子 × 随机误差,对销售额取对数后可转化为线性模型求解:log(销售额) = 线性趋势 + 季节效应 + 随机误差

# 对销售额取对数,将指数趋势转化为线性形式
log_sales <- log(t)

# 拟合对数线性模型
model_B <- lm(log_sales ~ trend + ., data = data.frame(log_sales, trend, season_dummies))

# 查看模型详细结果
summary(model_B)

# 还原乘法季节因子(指数化回归系数,1月因子为1)
season_factors <- exp(coef(model_B)[grep("month", names(coef(model_B)))])
season_factors <- c(1, season_factors)
names(season_factors) <- month.abb[1:length(season_factors)]

模型解释

  • 趋势项系数取指数后,代表每月销售额的指数增长倍率(exp(趋势系数)即为月度增长因子)
  • season_factors中的值,代表该月相对于1月的乘法季节效应(即该月销售额是1月的多少倍)

补充说明

  • 由于当前仅包含9个月份的数据,模型仅覆盖Feb-Sep的季节效应,后续补充完整年度数据后可直接扩展虚拟变量
  • 若偏好时间序列专用分解方法,也可使用decompose()或stl()函数,但回归方式更直观地控制参照组设置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 03:35:14