R - calculate/evaluate 特定日期的时间序列模型

R - calculate/evaluate a time series model on a specific day

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

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

现在我想在我有 X1、X2、X3、X4 值的给定日期计算 y。例如:我知道 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 中是否有一个函数可以让我直接做这个,w/o scripting/looping 等等

上一个问题的扩展: 另一个问题是:如果我想提前预测未来怎么办? predict 当我输入日期与 df 不同的数据帧时出现问题。

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

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

您正在寻找通用函数 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