我正在尝试修改我拥有的一些代码,这些代码可以工作,而不是使用不同的函数来估计模型。原始代码如下所示,它使用ARIMA函数:
S=round(0.75*length(ts_HHFCE_log))
h=1
error1.h <- c()
for (i in S:(length(ts_HHFCE_log)-h))
{
mymodel.sub <- arima(ts_HHFCE_log[1:i], order = c(0,1,3),seasonal=c(0,0,0))
predict.h <- predict(mymodel.sub,n.ahead=h)$pred[h]
error1.h <- c(error1.h,ts_HHFCE_log[i+h]-predict.h)
}直觉是这样的:你的时间序列有T的长度。你从样本开始的某个地方开始,但要给出足够的观察值来回归并获得α和β的参数系数。为了简单起见,我们称其为t。然后基于此生成提前一步的预测,因此对于时间段(t+1)也是如此。然后,您的预测误差是(t+1)的实际值与您的预测值之间的差值,该值基于对t之前可用数据的回归。然后,您迭代,并从开始(t+1)、回归和预测(t+2)进行考虑。然后,您将获得(t+2)的预测误差。然后基本上你继续这个迭代过程,直到你达到( T -1),并产生T的预测。这提供了所谓的动态样本外预测误差序列。您对不同的模型执行此操作,然后使用统计测试确定哪个模型更适合使用。这是一种仅使用已有数据进行样本外预测的方法。
我已经将代码修改为以下代码:
S=round(0.75*length(ts.GDP))
h=1
error1.h <- c()
for (i in S:(length(ts.GDP)-h))
{
mymodel.sub <- lm(ts.GDP[4:i] ~ ts.GDP[3:(i-1)] + ts.GDP[2:(i-2)] + ts.GDP[1:(i-3)])
predict.h <- predict(mymodel.sub,n.ahead=h)$pred[h]
error1.h <- c(error1.h,ts.GDP[i+h]-predict.h)
}我正在尝试做一个AR(3)模型。我不使用ARIMA函数的原因是因为我还想将这些预测误差与ARDL模型进行比较,据我所知,ARDL模型没有简单的函数(我必须使用lm(),因此我想使用lm()函数做AR(3)模型)。
我希望与AR(3)模型进行比较的模型如下:
model_ts.GDP_1 <- lm(ts.GDP[4:123] ~ ts.GDP[3:122] + ts.GDP[2:121] + ts.GDP[1:120] + ts.CCI_AGG[3:122] + ts.CCI_AGG[2:121] + ts.CCI_AGG[1:120])我不确定如何进一步修改代码来获得我想要的东西。希望我解释的直觉部分在我试图做的事情中应该是清晰的。
GDP的数据基本上是季度增长率。它是静止的。第二个模型中的另一个变量是我使用动态PCA构建的指数,并取第一个差,因此它也是平稳的。但无论如何,在第二个模型中,t的预测仅基于每个GDP的滞后数据和我构建的指数。同样,如果我使用我拥有的数据模拟样本外的预测,那么实际上正确的预测是没有问题的。(在时间序列中,此技术被视为比简单使用RMSE等更强大的模型比较方法。)
谢谢!
我使用的数据:
Date GDP_qoq CCI_A_qoq
31/03/1988 2.956 0.540
30/06/1988 2.126 -0.743
30/09/1988 3.442 0.977
31/12/1988 3.375 -0.677
31/03/1989 2.101 0.535
30/06/1989 1.787 -0.667
30/09/1989 2.791 0.343
31/12/1989 2.233 -0.334
31/03/1990 1.961 0.520
30/06/1990 2.758 -0.763
30/09/1990 1.879 0.438
31/12/1990 0.287 -0.708
31/03/1991 1.796 -0.078
30/06/1991 1.193 -0.735
30/09/1991 0.908 0.896
31/12/1991 1.446 0.163
31/03/1992 0.870 0.361
30/06/1992 0.215 -0.587
30/09/1992 0.262 0.238
31/12/1992 1.646 -1.436
31/03/1993 2.375 0.646
30/06/1993 0.249 -0.218
30/09/1993 1.806 0.676
31/12/1993 1.218 -0.393
31/03/1994 1.501 0.346
30/06/1994 0.879 -0.501
30/09/1994 1.123 0.731
31/12/1994 2.089 0.062
31/03/1995 0.386 0.475
30/06/1995 1.238 -0.243
30/09/1995 1.836 0.263
31/12/1995 1.236 -0.125
31/03/1996 1.926 -0.228
30/06/1996 2.109 -0.013
30/09/1996 1.312 0.196
31/12/1996 0.972 -0.015
31/03/1997 1.028 -0.001
30/06/1997 1.086 -0.016
30/09/1997 2.822 0.156
31/12/1997 -0.818 -0.062
31/03/1998 1.418 0.408
30/06/1998 0.970 -0.548
30/09/1998 0.968 0.466
31/12/1998 2.826 -0.460
31/03/1999 0.599 0.228
30/06/1999 -0.651 -0.361
30/09/1999 1.289 0.579
31/12/1999 1.600 0.196
31/03/2000 2.324 0.535
30/06/2000 1.368 -0.499
30/09/2000 0.825 0.440
31/12/2000 0.378 -0.414
31/03/2001 0.868 0.478
30/06/2001 1.801 -0.521
30/09/2001 0.319 0.068
31/12/2001 0.877 0.045
31/03/2002 1.253 0.061
30/06/2002 1.247 -0.013
30/09/2002 1.513 0.625
31/12/2002 1.756 0.125
31/03/2003 1.443 -0.088
30/06/2003 0.874 -0.138
30/09/2003 1.524 0.122
31/12/2003 1.831 -0.075
31/03/2004 0.780 0.395
30/06/2004 1.665 -0.263
30/09/2004 0.390 0.543
31/12/2004 0.886 -0.348
31/03/2005 1.372 0.500
30/06/2005 2.574 -0.066
30/09/2005 0.961 0.058
31/12/2005 2.378 -0.061
31/03/2006 1.015 0.212
30/06/2006 1.008 -0.218
30/09/2006 1.105 0.593
31/12/2006 0.943 -0.144
31/03/2007 1.566 0.111
30/06/2007 1.003 -0.125
30/09/2007 1.810 0.268
31/12/2007 1.275 -0.592
31/03/2008 1.413 0.017
30/06/2008 -0.491 -0.891
30/09/2008 -0.617 -0.836
31/12/2008 -1.410 -1.092
31/03/2009 -1.593 0.182
30/06/2009 -0.106 -0.922
30/09/2009 0.788 0.351
31/12/2009 0.247 0.414
31/03/2010 1.221 -0.329
30/06/2010 1.561 -0.322
30/09/2010 0.163 0.376
31/12/2010 0.825 -0.104
31/03/2011 2.484 0.063
30/06/2011 -0.574 -0.107
30/09/2011 0.361 -0.006
31/12/2011 0.997 -0.304
31/03/2012 0.760 0.243
30/06/2012 0.143 -0.381
30/09/2012 2.547 0.315
31/12/2012 0.308 -0.046
31/03/2013 0.679 0.221
30/06/2013 0.766 -0.170
30/09/2013 1.843 0.352
31/12/2013 0.756 0.080
31/03/2014 1.380 -0.080
30/06/2014 1.501 0.162
30/09/2014 0.876 0.017
31/12/2014 0.055 -0.251
31/03/2015 0.497 0.442
30/06/2015 1.698 -0.278
30/09/2015 0.066 0.397
31/12/2015 0.470 0.076
31/03/2016 1.581 0.247
30/06/2016 0.859 -0.342
30/09/2016 0.865 -0.011
31/12/2016 1.467 0.049
31/03/2017 1.006 0.087
30/06/2017 0.437 -0.215
30/09/2017 0.527 0.098
31/12/2017 0.900 0.218发布于 2018-08-28 00:12:10
您需要了解的唯一一件事就是如何使用lm获得预测,没有必要添加其他细节(如果没有可复制的数据,只会使预测变得更加困难)。
创建虚拟数据:
set.seed(123)
df<-data.frame(a=runif(10),b=runif(10),c=runif(10))
> print(df)
a b c
1 0.2875775 0.95683335 0.8895393
2 0.7883051 0.45333416 0.6928034
3 0.4089769 0.67757064 0.6405068
4 0.8830174 0.57263340 0.9942698
5 0.9404673 0.10292468 0.6557058
6 0.0455565 0.89982497 0.7085305
7 0.5281055 0.24608773 0.5440660
8 0.8924190 0.04205953 0.5941420
9 0.5514350 0.32792072 0.2891597
10 0.4566147 0.95450365 0.1471136适合你的模型:
model<-lm(c~a+b,data=df)创建新数据:
new_df<-data.frame(a=runif(1),b=runif(1))
> print(new_df)
a b
1 0.9630242 0.902299从您的新数据中获取预测:
prediction<- predict(model,new_df)
> print(prediction)
1
0.8270997在您的情况下,新的data new_df将是您的滞后数据,但如果您希望我们详细了解您的问题,您必须进行适当的更改,或者提供如上所述的可重现数据。
希望这能有所帮助。
https://stackoverflow.com/questions/52006821
复制相似问题