如何从R语言Facebook Prophet包提取年中日/周中日季节性数值
在R的Prophet包中提取季节性数据的具体数值
问题背景
已通过Prophet训练时间序列模型并能绘制包含「年中日」「周中日」的季节性组件图,但无法提取这些组件的具体数值。以下是可行的解决方案:
步骤1:准备模型与预测数据
先加载测试数据并完成模型训练与预测(确保ds为日期格式):
library(prophet) # 加载测试数据并转换日期格式 df <- structure(list(ds = c("2019-01-01", "2019-01-02", "2019-01-03", "2019-01-04", "2019-01-05"), y = c(0.0586635581195361, 0.14179154500982, 0.154505062394315, 0.138202481405581, 0.0992742352440193)), row.names = c(NA, 5L), class = "data.frame") df$ds <- as.Date(df$ds) # 训练模型并生成预测 m <- prophet(df, daily.seasonality = TRUE) future <- make_future_dataframe(m, periods = 20, freq = 'day') forecast <- predict(m, future)
方法1:提取指定日期的季节性数值
predict()生成的forecast数据框中直接包含每个日期对应的季节性贡献值:
# 提取日期、周中日、年中日、每日季节性数值 seasonal_values <- forecast[, c("ds", "weekly", "yearly", "daily")] head(seasonal_values)
weekly:对应日期的周中日季节性贡献yearly:对应日期的年中日季节性贡献daily:对应日期的每日季节性贡献(因开启了daily.seasonality = TRUE)
方法2:提取完整周期的季节性曲线数值
如果需要获取整个周期的季节性趋势(比如全年365天的年中日曲线、一周7天的周中日曲线),可以通过Prophet内部绘图函数提取数据:
提取周中日完整曲线
# 获取周中日季节性绘图对象并提取数据 weekly_plot <- prophet:::plot_weekly(m) weekly_seasonality_df <- weekly_plot$data print(weekly_seasonality_df)
提取年中日完整曲线
# 获取年中日季节性绘图对象并提取数据 yearly_plot <- prophet:::plot_yearly(m) yearly_seasonality_df <- yearly_plot$data print(yearly_seasonality_df)
手动计算季节性数值(可选)
也可以利用模型中的季节性参数手动计算,以周中日为例:
# 生成一周的日期数据 week_days <- data.frame(ds = seq(as.Date("2023-01-01"), as.Date("2023-01-07"), by = "day")) # 获取周季节性的傅里叶参数与周期 weekly_params <- m$weekly$params weekly_period <- m$weekly$period fourier_order <- m$weekly$fourier.order # 计算周中日季节性值 week_days$weekly_seasonality <- prophet:::fourier_series(week_days$ds, weekly_period, fourier_order) %*% weekly_params print(week_days)
内容的提问来源于stack exchange,提问作者WillyWonka01
相关产品推荐
相关产品推荐

