我正在做一个 SVAR(结构向量自回归)分析,我想在其中绘制 IRF(脉冲响应函数)。我的时间序列长度为 137,我只使用 3 个变量,此外,我在指定 VAR 模型时选择了 1 个滞后。
指定 VAR 模型工作正常,但是当我想总结它时,我收到以下错误消息
VAR_reduced <- VAR(VAR_data_1, p = 1, type = "both")
summary(VAR_reduced)
Error in solve.default(Sigma) :
system is computationally singular: reciprocal condition number = 1.03353e-16
从我在另一个问题中读到的内容来看,当没有足够的观察结果导致过度拟合时,通常会出现此错误,但在我的示例中,这应该不是问题,因为我有足够的观察结果。
由于如果我不运行摘要命令,R 不会显示错误消息,因此仍然可以使用以下方法计算 IRF:
plot(irf(VAR_reduced, n.ahead = 40))
但是,情节似乎相当违反直觉,因为除了资产之外没有任何变量的反应。因此,我的猜测是错误消息暗示了我错了但还没有意识到的事情。
这是正确的,即我是否需要解决该错误,或者我的 IRF 与此无关?
为了完整起见,这里是所有代码:
library(quantmod)
library(urca)
library(vars)
library(tseries)
getSymbols('CPILFESL',src='FRED')
getSymbols('INDPRO',src='FRED')
getSymbols('WALCL',src='FRED')
CPI <- ts(CPILFESL, frequency = 12, start = c(1957,1))
output <- ts(INDPRO, frequency = 12, start = c(1919,1))
assets <- as.xts(WALCL)
assets <- to.monthly(assets, indexAt='yearmon', drop.time = TRUE)
assets <- ts(assets[,4], frequency = 12, start = c(2002,12))
assets <- window(assets, start = c(2008,9), end = c(2020,1))
CPI <- window(CPI, start = c(2008,9), end = c(2020,1))
output <- window(output, start = c(2008,9), end = c(2020,1))
loutput <- log(output)
lCPI <- log(CPI)
data_0 <- cbind(loutput, lCPI, assets)
plot(data_0)
VAR_data_1 <- ts.intersect(diff(loutput), diff(lCPI), diff(assets, differences = 2))
VAR_reduced <- VAR(VAR_data_1, p = 1, type = "both")
summary(VAR_reduced)