第1个回答 2024-12-02
要在R中实现向量自回归模型(VAR),您需要遵循以下步骤。首先,准备数据集。这里有一个例子:
halfyear_vector=data.frame(hsi_ir_h_ts,cenlhkl_ir_h_ts,m2_h_ts,ue_h_ts,cpi_h_ts,exp_h_ts,gdp_h_ts)
将其转换为时间序列对象:
halfyear_vector=ts(halfyear_vector,start=c(1995,1),frequency=2)
绘制数据:
plot(halfyear_vector,plot.type="single",lty=1:7,col=1:7)
添加标题和图例:
title("key indicators")
legend("topleft",c("hsi_ir_h_ts","cenlhkl_ir_h_ts","m2_h_ts","ue_h_ts","cpi_h_ts","exp_h_ts","gdp_h_ts"),lty=1:7,col=1:7)
进行稳定性检验:
for (i in 1:7) { print(kpss.test(halfyear_vector[,i],null="Level")) print(kpss.test(halfyear_vector[,i],null="Trend")) print(kpss.test(diff(halfyear_vector[,i]),null="Level")) print(kpss.test(diff(halfyear_vector[,i]),null="Trend")) }
进行ADF检验:
adf.test(halfyear_vector, alternative = c("stationary", "explosive"), k = trunc((length(halfyear_vector)-1)^(1/3)))
进行格兰杰因果检验:
granger.test(halfyear_vector,p=7)
进行指标共线性判断:
计算X矩阵的秩:qr(X)$rank,如果不是满秩的,说明其中有Xi可以用其他的X的线性组合表示;也可以计算条件数kappa(X),k<100,说明共线性程度小,如果100<1000,有较强的多重共线性,k>1000,存在严重的多重共线性。可以进行逐步回归,用step()命令,比如你一开始的模型是fm,step(fm)就可以了
进行VAR阶数判断:
AIC准则——计算AIC统计量,模型的残差平方和(SS)除以样本容量(n),再取对数,加上2倍的解释变量个数(k)除以样本容量。AIC=log(SS/n)+2*k/n 寻找某一k值是AIC达到极小值,则k就是最优滞后阶数。
SC准则——SC=log(SS/n)+log(n)*k/n
VAR模型拟合:
halfyear_VAR=VAR(halfyear_vector,p=3,type="both")
VAR模型的稳定性、自相关性,异方差检验:
R里有两种检验方法是常用的,LiMcLeod{portes}可以进行多元的Portmanteau Q检验。。。protest{portes}可以进行一元的Portmanteau Q检验,把函数中的参数SquaredQ=T 还可以把序列平方之后再检验自相关性。。。也相当于进行了异方差检验。。。 自相关检验可以通过ACF图,函数是acf{stats},或者单位根检验ur.df{urca}进行ADF检验或者ur.pp{urca}进行PP检验,或者进行白噪声检验Box.test{stats},相当于检验了序列的二阶自相关性。。。 {}里面的是package的名字
最后,进行预测:
halfyear_VAR_Predict=predict(halfyear_VAR,n.head=1,ci=0.9999)
绘制预测结果:
plot(halfyear_VAR_Predict)
计算95%,99%,99.9%分位数的预测取值:
...