R - 计算/评估特定日期的时间序列模型

时间:2017-10-25 15:04:38

标签: r time-series prediction forecasting lm

我使用了一个回顾窗口对动物园数据框执行多元线性回归,如下所示:

df
                      y            X1           X2            X3          X4
2015-01-05 -0.017697886 -0.0303143773 -0.037748414 -2.015346e-02  0.12078726
2015-01-06  0.026334273 -0.0003695332 -0.005050541 -7.924213e-03 -0.02709586
2015-01-07 -0.033780880  0.0051106504  0.006257167  8.340199e-03 -0.02316465
2015-01-08  0.012420844  0.0330091413  0.035152040  2.311611e-02 -0.08373201
2015-01-09 -0.005641188 -0.0194103325 -0.029843684 -1.053020e-02  0.10505671
2015-01-12 -0.005053201  0.0137312764  0.013474812  4.306844e-05  0.03234955
2015-01-13  0.011951128  0.0161338800  0.015979652  6.252886e-03 -0.04066445
2015-01-14 -0.023470817 -0.0125438934 -0.014201182 -2.378026e-02  0.03254407
2015-01-15  0.014655518  0.0217170617  0.021671946  1.712123e-02 -0.01567272

我使用lm:

回归y~X1 + X2 + X3 + X4
  

lm <- lm(df[,1] ~ df[,-1])

并获得最佳拟合参数:

> coef(sum_lm)
                             Estimate  Std. Error   t value   Pr(>|t|)
    (Intercept)           -0.02360827 0.007349594 -3.212187 0.03252117
    merge_n.tmp[, -1]X1   8.99408519 2.341094738  3.841829 0.01843072
    merge_n.tmp[, -1]X2 -7.13439870 1.913985874 -3.727509 0.02034096
    merge_n.tmp[, -1]X3  -0.91469896 0.640218236 -1.428730 0.22628243
    merge_n.tmp[, -1]X4  -0.17417599 0.133629611 -1.303424 0.26238975

现在我想在某一天评估y,其中我确实有X1,X2,X3,X4的值。例如:2015-01-15我最合适的模型的价值是什么:

X1(2015-01-15) = 0.0217170617  
X2(2015-01-15) = 0.021671946  
X3(2015-01-15) = 1.712123e-02 
X4(2015-01-15) = -0.01567272

我可以编写一个小脚本来完成它但在我想询问是否在R中有一个函数允许我直接执行此操作,没有脚本/循环等。

扩展到以前的问题: 另一个问题是:如果我想在未来提前预测怎么办?当我输入日期不同于df的数据框时,predict给我一个问题。

2 个答案:

答案 0 :(得分:1)

您正在寻找通用函数predict(),请尝试查看帮助页面?predict?predict.lm。下面是一个小例子:

## lets make up some data and fit model:
library(zoo)
myTs <- zoo(mtcars, seq(as.Date("2016-01-01"), length.out = nrow(mtcars), by = 1))
fit <- lm(mpg ~  cyl + disp, data = myTs) 

现在我们预测所有现有的观察结果:

> predict(fit)
2016-01-01 2016-01-02 2016-01-03 2016-01-04 2016-01-05 2016-01-06 2016-01-07 2016-01-08 
  21.84395   21.84395   26.08886   19.82676   14.55267   20.50602   14.55267   25.29227 
2016-01-09 2016-01-10 2016-01-11 2016-01-12 2016-01-13 2016-01-14 2016-01-15 2016-01-16 
  25.41371   21.68752   21.68752   16.28581   16.28581   16.28581   12.24731   12.49431 
2016-01-17 2016-01-18 2016-01-19 2016-01-20 2016-01-21 2016-01-22 2016-01-23 2016-01-24 
  12.90598   26.69196   26.75371   26.84839   25.83979   15.41718   15.70536   14.75851 
2016-01-25 2016-01-26 2016-01-27 2016-01-28 2016-01-29 2016-01-30 2016-01-31 2016-02-01 
  13.72933   26.68578   25.83568   26.35438   14.73792   22.15271   15.76711   25.82127 

或使用newdata参数进行新观察:

predict(fit, newdata = data.frame(cyl = 6, disp = 180))
21.43228 

答案 1 :(得分:0)

modelr::add_predictions(df, lm)会使用拟合值扩充数据框。如果您还需要置信区间,可以使用ciTools::add_ci(df, lm)

编辑:没关系。显然,这些包不支持动物园数据框。