时间序列代码中的日期格式化及ts()函数参数设置问题
解决方案步骤
1. 合并日期时间并转换为标准格式
首先把分开的Date和Time列合并成完整时间戳,转换成POSIXct类型,这是后续处理的基础:
library(tidyverse) library(forecast) library(zoo) # 读取数据(替换为你的实际文件名) tp <- read.csv("your_file.csv") # 合并日期时间,按匹配格式转换为POSIXct tp <- tp %>% mutate(datetime = as.POSIXct(paste(Date, Time), format = "%d-%b-%y %H:%M"))
注:format参数需严格匹配你的日期格式,%d-%b-%y对应01-Jan-05样式,%H:%M对应小时分钟。
2. 时间序列对象的选择与参数澄清
关于ts()函数的参数困惑
- frequency参数:
ts的frequency指一个周期内的观测数量。如果以天为周期,你的数据每天固定63个15分钟时隙,所以frequency=63是正确的;如果以周为周期,frequency则为63*7=441。 - start/end参数:
ts用数值型周期定位,比如第一个观测是2005年1月1日的第1个时隙,最后一个是1月23日的第63个时隙,可这样设置:
但这种方式会丢失实际日期信息,不利于提取星期几这类特征,更推荐用zoo/xts对象。tp.ts <- ts(tp$Demand, start = c(2005, 1), end = c(2005, 23*63), frequency = 63)
更实用的zoo对象
zoo支持直接用POSIXct时间作为索引,保留完整时间信息:
tp.zoo <- zoo(tp$Demand, order.by = tp$datetime)
3. 提取时间特征(如星期几)
要纳入星期几对需求的影响,直接从datetime列提取即可:
tp <- tp %>% mutate(weekday = weekdays(datetime), # 提取星期几名称 hour = hour(datetime)) # 可额外提取小时特征 # 将星期几转为因子,避免建模时出现无序问题 tp$weekday <- factor(tp$weekday, levels = c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"))
4. 带时间特征的预测建模
用auto.arima结合外部回归变量(xreg),纳入星期几这类因素:
# 构造星期几的哑变量(去掉一个避免共线性) xreg <- model.matrix(~ weekday - 1, data = tp) # 拟合带外部回归量的ARIMA模型 model <- auto.arima(tp$Demand, xreg = xreg) # 构造当月剩余时段的时间序列与特征(示例:1月24日至31日的6:30-22:00) future_dates <- seq(as.POSIXct("2005-01-24 06:30"), as.POSIXct("2005-01-31 22:00"), by = "15 mins") future_df <- tibble(datetime = future_dates) %>% mutate(weekday = weekdays(datetime)) %>% mutate(weekday = factor(weekday, levels = c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"))) # 生成未来的外部回归变量矩阵 future_xreg <- model.matrix(~ weekday - 1, data = future_df) # 执行预测 forecast_result <- forecast(model, xreg = future_xreg) # 查看并可视化结果 print(forecast_result) plot(forecast_result)
关键注意事项
- 若日期格式有变化(如月份为全称),需调整
format参数(比如改为%d-%B-%y)。 - 如果存在某天观测缺失的情况,
ts对象会失效,此时zoo/xts是更可靠的选择。 - 可额外加入节假日、时段类型(工作日/周末)等特征,进一步优化预测精度。
内容的提问来源于stack exchange,提问作者Noob3000
相关产品推荐
相关产品推荐

