(中)正确使用线性时间趋势变量,并且最有效的修复?

时间:2015-02-17 23:20:00

标签: r regression linear-regression forecasting

我有3133行代表在2000年7月1日至2014年12月31日之间的5296天中的一些付款;也就是说,"日期"功能是不连续的:

> 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。

1 个答案:

答案 0 :(得分:1)

我认为对常规(连续)时间序列进行某种转换是一个好主意。 您可以使用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

重复数据删除日期

在您的示例中,现在有重复值的迹象。但基于new question很可能。我想你想用sum函数聚合值:

ts1 <- period.apply( ts1, endpoints(ts1,'days'), sum)