【发布时间】:2014-03-01 11:34:16
【问题描述】:
在以下示例中,我尝试对每日数据使用 Holt-Winters 平滑处理,但遇到了几个问题:
# generate some dummy daily data
mData = cbind(seq.Date(from = as.Date('2011-12-01'),
to = as.Date('2013-11-30'), by = 'day'), rnorm(731))
# convert to a zoo object
zooData = as.zoo(mData[, 2, drop = FALSE],
order.by = as.Date(mData[, 1, drop = FALSE], format = '%Y-%m-%d'),
frequency = 7)
# attempt Holt-Winters smoothing
hw(x = zooData, h = 10, seasonal = 'additive', damped = FALSE,
initial = 'optimal', exponential = FALSE, fan = FALSE)
# no missing values in the data
sum(is.na(zooData))
这会导致以下错误:
ets(x, "AAA", alpha = alpha, beta = beta, gamma = gamma, 阻尼 = 阻尼,:你一定是在开玩笑。我需要更多数据! 在 另外:警告消息:在 ets(x, "AAA", alpha = alpha, beta = beta, gamma = gamma, damped = damped, : 遇到缺失值。 使用时间序列中最长的连续部分
强调我的。
几个问题: 1. 缺失值从何而来? 2. 我假设“需要更多数据”源于尝试估计 365 个季节性参数?
更新 1:
根据 Gabor 的建议,我为整数为周的数据重新创建了一个小数索引。
我有几个问题。
1. 当假设周期性为每周时,这是否是处理每日数据的合适方式?
2. 在处理日常数据时,有没有更优雅的方式来处理日期?
library(zoo)
library(forecast)
# generate some dummy daily data
mData = cbind(seq.Date(from = as.Date('2011-12-01'),
to = as.Date('2013-11-30'), by = 'day'), rnorm(731))
# conver to a zoo object with weekly frequency
zooDataWeekly = as.zoo(mData[, 2, drop = FALSE],
order.by = seq(from = 0, by = 1/7, length.out = 731))
# attempt Holt-Winters smoothing
hwData = hw(x = zooDataWeekly, h = 10, seasonal = 'additive', damped = FALSE,
initial = 'optimal', exponential = FALSE, fan = FALSE)
plot(zooDataWeekly, col = 'red')
lines(fitted(hwData))
【问题讨论】:
-
您已指定频率为 7,因此它在每对点之间填充 6 个 NA 以满足指定的要求。
-
@G.Grothendieck 我一发帖就意识到了这一点。 :) 我想我的问题真的是我可以使用
hw()函数来提取带有每日数据的每周季节性吗?ts需要哪些属性才能做到这一点? -
时间应该以周而不是天来衡量,例如连续观察的次数可以是 0, 1/7, 2/7, ...
-
@G.Grothendieck 已更新。如果你能看看会很棒。
-
是的,没关系。可以交替使用
zooreg(mData[, 2], 0, freq = 7)或ts(mData[, 2], start = 0, freq = 7)。
标签: r zoo forecasting