(在)正确使用线性时间趋势变量,以及最有效的修复?
(In)correct use of a linear time trend variable, and most efficient fix?
我有 3133 行代表在 7/1/2000 和 12/31/2014 之间的 5296 天中的某些天进行的付款;也就是说,"Date" 特征是不连续的:
> head(d_exp_0014)
Year Month Day Amount Count myDate
1 2000 7 6 792078.6 9 2000-07-06
2 2000 7 7 140065.5 9 2000-07-07
3 2000 7 11 190553.2 9 2000-07-11
4 2000 7 12 119208.6 9 2000-07-12
5 2000 7 16 1068156.3 9 2000-07-16
6 2000 7 17 0.0 9 2000-07-17
我想拟合线性时间趋势变量,
t <- 1:3133
到解释支出金额变化的线性模型。
fit_t <- lm(Amount ~ t + Count, d_exp_0014)
然而,这显然是错误的,因为 t 在日期之间的增量不同:
> head(exp)
Year Month Day Amount Count Date t
1 2000 7 6 792078.6 9 2000-07-06 1
2 2000 7 7 140065.5 9 2000-07-07 2
3 2000 7 11 190553.2 9 2000-07-11 3
4 2000 7 12 119208.6 9 2000-07-12 4
5 2000 7 16 1068156.3 9 2000-07-16 5
6 2000 7 17 0.0 9 2000-07-17 6
对我来说,这与线性趋势完全相反。
将此 data.frame 合并到连续日期索引的最有效方法是什么?日期向量会像
CTS_date_V <- as.data.frame(seq(as.Date("2000/07/01"), as.Date("2014/12/31"), "days"), colnames = "Date")
产生不同的结果?
我对任何包都持开放态度(使用 fpp、forecast、timeSeries、xts、ts,截至目前);只是在寻找一个以功能形式部署的好答案,因为这些付款每周都会更新,我想自动添加到这个 data.frame.
我认为对规则(连续)时间序列进行某种转换是个好主意。
可以使用xts
转换时间序列数据(很方便,因为它可以在其他包中作为常规ts使用)
填补空白
# convert myDate to POSIXct if necessary
# create xts from data frame x
ts1 <- xts(data.frame(a = x$Amount, c = x$Count), x$myDate )
ts1
# create empty time series
ts_empty <- seq( from = start(ts1), to = end(ts1), by = "DSTday")
# merge the empty ts to the data and fill the gap with 0
ts2 <- merge( ts1, ts_empty, fill = 0)
# or interpolate, for example:
ts2 <- merge( ts1, ts_empty, fill = NA)
ts2 <- na.locf(ts2)
# zoo-xts ready functions are:
# na.locf - constant previous value
# na.approx - linear approximation
# na.spline - cubic spline interpolation
删除重复的日期
在您的示例中,现在有重复值的迹象。但是基于 这是很有可能的。我认为您想使用 sum
函数聚合值:
ts1 <- period.apply( ts1, endpoints(ts1,'days'), sum)
我有 3133 行代表在 7/1/2000 和 12/31/2014 之间的 5296 天中的某些天进行的付款;也就是说,"Date" 特征是不连续的:
> head(d_exp_0014)
Year Month Day Amount Count myDate
1 2000 7 6 792078.6 9 2000-07-06
2 2000 7 7 140065.5 9 2000-07-07
3 2000 7 11 190553.2 9 2000-07-11
4 2000 7 12 119208.6 9 2000-07-12
5 2000 7 16 1068156.3 9 2000-07-16
6 2000 7 17 0.0 9 2000-07-17
我想拟合线性时间趋势变量,
t <- 1:3133
到解释支出金额变化的线性模型。
fit_t <- lm(Amount ~ t + Count, d_exp_0014)
然而,这显然是错误的,因为 t 在日期之间的增量不同:
> head(exp)
Year Month Day Amount Count Date t
1 2000 7 6 792078.6 9 2000-07-06 1
2 2000 7 7 140065.5 9 2000-07-07 2
3 2000 7 11 190553.2 9 2000-07-11 3
4 2000 7 12 119208.6 9 2000-07-12 4
5 2000 7 16 1068156.3 9 2000-07-16 5
6 2000 7 17 0.0 9 2000-07-17 6
对我来说,这与线性趋势完全相反。
将此 data.frame 合并到连续日期索引的最有效方法是什么?日期向量会像
CTS_date_V <- as.data.frame(seq(as.Date("2000/07/01"), as.Date("2014/12/31"), "days"), colnames = "Date")
产生不同的结果?
我对任何包都持开放态度(使用 fpp、forecast、timeSeries、xts、ts,截至目前);只是在寻找一个以功能形式部署的好答案,因为这些付款每周都会更新,我想自动添加到这个 data.frame.
我认为对规则(连续)时间序列进行某种转换是个好主意。
可以使用xts
转换时间序列数据(很方便,因为它可以在其他包中作为常规ts使用)
填补空白
# convert myDate to POSIXct if necessary
# create xts from data frame x
ts1 <- xts(data.frame(a = x$Amount, c = x$Count), x$myDate )
ts1
# create empty time series
ts_empty <- seq( from = start(ts1), to = end(ts1), by = "DSTday")
# merge the empty ts to the data and fill the gap with 0
ts2 <- merge( ts1, ts_empty, fill = 0)
# or interpolate, for example:
ts2 <- merge( ts1, ts_empty, fill = NA)
ts2 <- na.locf(ts2)
# zoo-xts ready functions are:
# na.locf - constant previous value
# na.approx - linear approximation
# na.spline - cubic spline interpolation
删除重复的日期
在您的示例中,现在有重复值的迹象。但是基于 sum
函数聚合值:
ts1 <- period.apply( ts1, endpoints(ts1,'days'), sum)