VAR, SVAR and other friends

Этот текст является вольным пересказом работы B. Pfaff (2004)

Подключаем необходимые пакеты:

library(car)
library(tseries)
library(zoo)
library(vars)

Первичная обработка данных

Данная работа повторяет регрессионный анализ рынка труда в Канаде за период 1980-2000 гг., проведенное в работе Breitung, et.al (2004). Для начала загрузим необходимые данные и посмотрим на них:

data("Canada")
summary(Canada)
##        e            prod           rw            U        
##  Min.   :929   Min.   :401   Min.   :386   Min.   : 6.70  
##  1st Qu.:935   1st Qu.:405   1st Qu.:424   1st Qu.: 7.78  
##  Median :946   Median :406   Median :444   Median : 9.45  
##  Mean   :944   Mean   :408   Mean   :441   Mean   : 9.32  
##  3rd Qu.:950   3rd Qu.:411   3rd Qu.:461   3rd Qu.:10.61  
##  Max.   :962   Max.   :418   Max.   :470   Max.   :12.77

Здесь

plot(Canada, nc = 2, col = "blue", xlab = "", mar = rep(2, 4), oma = rep(0.5, 
    4))

plot of chunk unnamed-chunk-3

Проверка на единичный корень

ADF

Для оценки теста Дикки-Фуллера в R используется следующая команда из пакета urca :

adf1 <- summary(ur.df(Canada[, "prod"], type = "trend", lag = 10, selectlags = "AIC"))
adf1
## 
## ############################################### 
## # Augmented Dickey-Fuller Test Unit Root Test # 
## ############################################### 
## 
## Test regression trend 
## 
## 
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + tt + z.diff.lag)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2.2253 -0.4163  0.0389  0.3785  1.6823 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)  
## (Intercept) 25.45958   15.32762    1.66    0.101  
## z.lag.1     -0.06334    0.03826   -1.66    0.102  
## tt           0.01161    0.00715    1.62    0.109  
## z.diff.lag   0.30295    0.11931    2.54    0.013 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.673 on 69 degrees of freedom
## Multiple R-squared:  0.105,  Adjusted R-squared:  0.0657 
## F-statistic: 2.69 on 3 and 69 DF,  p-value: 0.0531
## 
## 
## Value of test-statistic is: -1.656 2.119 1.454 
## 
## Critical values for test statistics: 
##       1pct  5pct 10pct
## tau3 -4.04 -3.45 -3.15
## phi2  6.50  4.88  4.16
## phi3  8.73  6.49  5.47

Однако, читателю неинтересно такое нагромождение таблиц. Поэтому напишем функцию для компактного представления результатов теста ДФ в одной таблице:

adf.table <- function(adf.mult) {

    i <- 0
    name <- names(adf.mult)
    Tab <- matrix(0, length(name), 7)

    for (n in name) {
        i <- i + 1
        r.mult <- adf.mult[n]
        names(r.mult) <- "a"

        cval <- r.mult$a@cval[1, ]
        test <- r.mult$a@teststat[[1]]
        lags <- r.mult$a@lags
        type <- r.mult$a@model

        Tab[i, ] <- c(n, type, lags, round(test, 3), cval)
    }
    D <- data.frame(Tab)
    names(D) <- c("Variable", "Det. term", "Lags", "Test Value", "1%_Cv", "5%_Cv", 
        "10%_Cv")
    D
}
adf1.trend <- lapply(Canada, ur.df, type = "trend", lags = 12, selectlags = "BIC")
Tab <- adf.table(adf1.trend)
Tab
##   Variable Det. term Lags Test Value 1%_Cv 5%_Cv 10%_Cv
## 1        e     trend   12     -2.058 -4.04 -3.45  -3.15
## 2     prod     trend   12     -1.594 -4.04 -3.45  -3.15
## 3       rw     trend   12     -0.447 -4.04 -3.45  -3.15
## 4        U     trend   12     -1.686 -4.04 -3.45  -3.15

Как видно из таблицы, все переменные имеют хотя бы один единичный корень. Протестируем первые разности:

adf2 <- lapply(diff(Canada), ur.df, type = "drift", lags = 12, selectlags = "BIC")
names(adf2) <- paste("d", names(adf2), sep = ".")
Tab2 <- adf.table(adf2)
Tab2
##   Variable Det. term Lags Test Value 1%_Cv 5%_Cv 10%_Cv
## 1      d.e     drift   12     -3.998 -3.51 -2.89  -2.58
## 2   d.prod     drift   12     -4.524 -3.51 -2.89  -2.58
## 3     d.rw     drift   12     -2.586 -3.51 -2.89  -2.58
## 4      d.U     drift   12     -3.659 -3.51 -2.89  -2.58

VAR

Оценка VAR

\( VAR \) в своей самой базовой форме состоит из \( K \) энодогенных переменных \( \pmb{\mathbf{y_t}} = (y_{1t}, y_{2t}, \ldots , y_{Kt}) \). Тогда процесс \( VAR(p) \) выглядит так: \[ \pmb{\mathbf{y_t}} = A(1)\pmb{\mathbf{y_{t-1}}} + \ldots + A(p)\pmb{\mathbf{y_{t-1}}} + \varepsilon_{t} \] Итак, по результатам тестов на единичный корень, можно предположить интегрированность \( I(1) \) во всех переменных. Таким образом, будем оценивать \( VAR(p) \) в первых разностях. Прежде, чем оценивать сам \( VAR \), необходимо определить его порядок. Для этого используются критерии AIC, Ханна-Квина, SC и FPE:

VARselect(Canada, lag.max = 8, type = "both")
## $selection
## AIC(n)  HQ(n)  SC(n) FPE(n) 
##      3      2      1      3 
## 
## $criteria
##               1         2         3         4         5         6
## AIC(n) -6.27258 -6.636670 -6.771177 -6.634609 -6.398132 -6.307705
## HQ(n)  -5.97843 -6.146420 -6.084828 -5.752160 -5.319584 -5.033057
## SC(n)  -5.53656 -5.409968 -5.053794 -4.426546 -3.699388 -3.118280
## FPE(n)  0.00189  0.001319  0.001166  0.001363  0.001782  0.002044
##                7        8
## AIC(n) -6.070727 -6.06160
## HQ(n)  -4.599979 -4.39475
## SC(n)  -2.390622 -1.89081
## FPE(n)  0.002769  0.00306

Как видно из данной таблицы, в зависимости от выбора критерия, \( p \) может изменяться от 1 до 3. В работе были построены и протестированы все 3 варианта. Повторим их действия для \( p=1 \):

Canada <- Canada[, c("prod", "e", "U", "rw")]
p1ct <- VAR(Canada, p = 1, type = "both")
p1ct
## 
## VAR Estimation Results:
## ======================= 
## 
## Estimated coefficients for equation prod: 
## ========================================= 
## Call:
## prod = prod.l1 + e.l1 + U.l1 + rw.l1 + const + trend 
## 
##  prod.l1     e.l1     U.l1    rw.l1    const    trend 
##  0.96314  0.01291  0.21109 -0.03909 16.24341  0.04613 
## 
## 
## Estimated coefficients for equation e: 
## ====================================== 
## Call:
## e = prod.l1 + e.l1 + U.l1 + rw.l1 + const + trend 
## 
##    prod.l1       e.l1       U.l1      rw.l1      const      trend 
##    0.19465    1.23892    0.62301   -0.06776 -278.76121   -0.04066 
## 
## 
## Estimated coefficients for equation U: 
## ====================================== 
## Call:
## U = prod.l1 + e.l1 + U.l1 + rw.l1 + const + trend 
## 
##   prod.l1      e.l1      U.l1     rw.l1     const     trend 
##  -0.12319  -0.24844   0.39158   0.06581 259.98201   0.03452 
## 
## 
## Estimated coefficients for equation rw: 
## ======================================= 
## Call:
## rw = prod.l1 + e.l1 + U.l1 + rw.l1 + const + trend 
## 
##   prod.l1      e.l1      U.l1     rw.l1     const     trend 
##  -0.22309  -0.05104  -0.36864   0.94891 163.02453   0.07142
summary(p1ct, equation = "e")
## 
## VAR Estimation Results:
## ========================= 
## Endogenous variables: prod, e, U, rw 
## Deterministic variables: both 
## Sample size: 83 
## Log Likelihood: -207.525 
## Roots of the characteristic polynomial:
## 0.95 0.95 0.904 0.751
## Call:
## VAR(y = Canada, p = 1, type = "both")
## 
## 
## Estimation results for equation e: 
## ================================== 
## e = prod.l1 + e.l1 + U.l1 + rw.l1 + const + trend 
## 
##          Estimate Std. Error t value Pr(>|t|)    
## prod.l1    0.1947     0.0361    5.39  7.5e-07 ***
## e.l1       1.2389     0.0863   14.35  < 2e-16 ***
## U.l1       0.6230     0.1693    3.68  0.00043 ***
## rw.l1     -0.0678     0.0283   -2.40  0.01899 *  
## const   -278.7612    75.1830   -3.71  0.00039 ***
## trend     -0.0407     0.0197   -2.06  0.04238 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## Residual standard error: 0.47 on 77 degrees of freedom
## Multiple R-Squared: 0.997,   Adjusted R-squared: 0.997 
## F-statistic: 6.09e+03 on 5 and 77 DF,  p-value: <2e-16 
## 
## 
## 
## Covariance matrix of residuals:
##          prod       e       U       rw
## prod  0.46952  0.0677 -0.0413  0.00214
## e     0.06767  0.2210 -0.1320 -0.08279
## U    -0.04128 -0.1320  0.1216  0.06374
## rw    0.00214 -0.0828  0.0637  0.59317
## 
## Correlation matrix of residuals:
##          prod      e      U       rw
## prod  1.00000  0.210 -0.173  0.00406
## e     0.21008  1.000 -0.805 -0.22869
## U    -0.17275 -0.805  1.000  0.23731
## rw    0.00406 -0.229  0.237  1.00000
plot(p1ct, nc = 1, names = "e")

plot of chunk unnamed-chunk-9

e <- p1ct$varresult$e$residuals
qqnorm(e)

plot of chunk unnamed-chunk-10

Misspecification tests

Tests of residual autocorrelation

Тест Люнга-Бокса

Данный тест использует следующую статистику: \[ LB test = T(T+2) \sum_{h=1}^{T/4} \frac{1}{(T-h)} trace\{ \hat{\Omega_h}' \hat{\Omega}^{-1} \hat{\Omega_h}' \hat{\Omega}^{-1} \} \sim \chi^{2}_{T/4-k+1} \] Нулевая гипотеза — отсутствие АК.

ser11 <- serial.test(p1ct, lags.pt = 16, type = "PT.asymptotic")
ser11$serial
## 
##  Portmanteau Test (asymptotic)
## 
## data:  Residuals of VAR object p1ct
## Chi-squared = 233.5, df = 240, p-value = 0.606

Для небольших выборок и для достаточно больших \( h \) следует использовать скорректированный тест LB: \[ LB test = T^{2} \sum_{h=1}^{T/4} \frac{1}{(T-h)} trace\{ \hat{\Omega_h}' \hat{\Omega}^{-1} \hat{\Omega_h}' \hat{\Omega}^{-1} \} \sim \chi^{2}_{T/4-k+1} \]

ser21 <- serial.test(p1ct, lags.pt = 16, type = "PT.adjusted")
ser21$serial
## 
##  Portmanteau Test (adjusted)
## 
## data:  Residuals of VAR object p1ct
## Chi-squared = 256.9, df = 240, p-value = 0.2167

Breusch-Godfrey LM-test

Для проверки АК используется также Breusch-Godfrey LM-тест, построенный на основе регрессии вида: \[ \hat{\varepsilon_t} = A_1 x_{t-1} + A_2 x_{t-2} + \ldots + A_k x_{t-k} + A_{\varepsilon} \hat{\varepsilon}_{t-h} + \tilde{\varepsilon_t} \] Нулевая гипотеза: \( A_{\varepsilon_t} = 0 \) Для каждого \( h \) лага остатков оцениваемая статистика выглядит следующим образом: \[ LM(h) = - (T-p(k+1) -\frac{1}{2})ln \left( \frac{| \hat{\Omega}(h) |}{| \hat{\Omega} |}\right) \sim \chi^{2}_{h K^{2}} \] В общем виде: \[ LM_h = T(K-trace( \tilde{\Omega}_{R}^{-1} \tilde{\Omega}_{UR})) \sim \chi^{2}_{h K^{2}} \] где \( \tilde{\Omega}_{R} \) — ковариационная матрица модели с ограничением, \tilde{\Omega}_{UR} — неограниченная модель:

ser31 <- serial.test(p1ct, lags.pt = 16, type = "BG")
ser31$serial
## 
##  Breusch-Godfrey LM test
## 
## data:  Residuals of VAR object p1ct
## Chi-squared = 118.3, df = 80, p-value = 0.003523

Edgerton and Shukur предложили коррекцию LM-теста для небольших выборок: \[ LMF_h = \frac{1-(1-R^{2})^{1/r}}{(1-R^{2})^{1/r}} \frac{Nr-q}{Km} \sim F(h K^{2}, int(Nr - q)) \]

ser41 <- serial.test(p1ct, lags.pt = 16, type = "ES")
ser41$serial
## 
##  Edgerton-Shukur F test
## 
## data:  Residuals of VAR object p1ct
## F statistic = 1.743, df1 = 80, df2 = 215, p-value = 0.000849

Tests of residual heteroscedasticity

arch1 <- arch.test(p1ct, lags.multi = 5)
arch1$arch.mul
## 
##  ARCH (multivariate)
## 
## data:  Residuals of VAR object p1ct
## Chi-squared = 570.1, df = 500, p-value = 0.01606
plot(arch1, names = "e")

plot of chunk unnamed-chunk-15

Normality tests

norm.t <- normality.test(p1ct)
norm.t
## $JB
## 
##  JB-Test (multivariate)
## 
## data:  Residuals of VAR object p1ct
## Chi-squared = 9.919, df = 8, p-value = 0.2708
## 
## 
## $Skewness
## 
##  Skewness only (multivariate)
## 
## data:  Residuals of VAR object p1ct
## Chi-squared = 6.356, df = 4, p-value = 0.1741
## 
## 
## $Kurtosis
## 
##  Kurtosis only (multivariate)
## 
## data:  Residuals of VAR object p1ct
## Chi-squared = 3.563, df = 4, p-value = 0.4684
## $jb.mul
## $jb.mul$JB
## 
##  JB-Test (multivariate)
## 
## data:  Residuals of VAR object p1ct
## Chi-squared = 9.919, df = 8, p-value = 0.2708
## 
## 
## $jb.mul$Skewness
## 
##  Skewness only (multivariate)
## 
## data:  Residuals of VAR object p1ct
## Chi-squared = 6.356, df = 4, p-value = 0.1741
## 
## 
## $jb.mul$Kurtosis
## 
##  Kurtosis only (multivariate)
## 
## data:  Residuals of VAR object p1ct
## Chi-squared = 3.563, df = 4, p-value = 0.4684
plot(norm.t)

plot of chunk unnamed-chunk-16 plot of chunk unnamed-chunk-16 plot of chunk unnamed-chunk-16 plot of chunk unnamed-chunk-16

plot(stability(p1ct), nc = 2)

plot of chunk unnamed-chunk-17

VECM

Коинтеграция

Для того, чтобы оценить VECM модель, необходимо протестировать данные на коинтеграцию. Ниже представлен trace-test Йохансена: \[ \lambda_{trace} (r_0) = - T \sum_{j=r_0 + 1}^{k} log (1-\hat{\lambda}_{j}) \] где

summary(ca.jo(Canada, type = "trace", ecdet = "trend", K = 3, spec = "transitory"))
## 
## ###################### 
## # Johansen-Procedure # 
## ###################### 
## 
## Test type: trace statistic , with linear trend in cointegration 
## 
## Eigenvalues (lambda):
## [1] 4.505e-01 1.963e-01 1.677e-01 4.647e-02 2.632e-17
## 
## Values of teststatistic and critical values of test:
## 
##           test 10pct  5pct  1pct
## r <= 3 |  3.85 10.49 12.25 16.26
## r <= 2 | 18.72 22.76 25.32 30.45
## r <= 1 | 36.42 39.06 42.44 48.45
## r = 0  | 84.92 59.14 62.99 70.05
## 
## Eigenvectors, normalised to first column:
## (These are the cointegration relations)
## 
##           prod.l1    e.l1    U.l1   rw.l1 trend.l1
## prod.l1   1.00000  1.0000  1.0000  1.0000   1.0000
## e.l1     -0.02385  1.2947 -2.8832  4.2418  -8.2904
## U.l1      3.16875  3.4037 -7.4262  6.8414 -12.5578
## rw.l1     1.83528 -0.3331  1.3979 -0.1394   2.4466
## trend.l1 -1.30156 -0.2303 -0.5093 -1.5926   0.2831
## 
## Weights W:
## (This is the loading matrix)
## 
##          prod.l1     e.l1      U.l1     rw.l1   trend.l1
## prod.d -0.006535 -0.02763 -0.070975 -0.014754  1.077e-11
## e.d    -0.008503  0.11414 -0.008157  0.003988  7.400e-12
## U.d    -0.004719 -0.06154  0.020719 -0.006557 -4.664e-12
## rw.d   -0.046213 -0.14580 -0.016945  0.011896  6.952e-12
summary(ca.jo(Canada, type = "eigen", ecdet = "trend", K = 2, spec = "transitory"))
## 
## ###################### 
## # Johansen-Procedure # 
## ###################### 
## 
## Test type: maximal eigenvalue statistic (lambda max) , with linear trend in cointegration 
## 
## Eigenvalues (lambda):
## [1] 4.484e-01 2.324e-01 1.313e-01 4.878e-02 9.509e-17
## 
## Values of teststatistic and critical values of test:
## 
##           test 10pct  5pct  1pct
## r <= 3 |  4.10 10.49 12.25 16.26
## r <= 2 | 11.54 16.85 18.96 23.65
## r <= 1 | 21.69 23.11 25.54 30.34
## r = 0  | 48.78 29.12 31.46 36.65
## 
## Eigenvectors, normalised to first column:
## (These are the cointegration relations)
## 
##          prod.l1     e.l1     U.l1  rw.l1 trend.l1
## prod.l1   1.0000   1.0000  1.00000  1.000    1.000
## e.l1      2.7132  -6.3190  0.49616 16.334  -10.369
## U.l1      8.8369 -15.2683  1.48063 25.774  -16.048
## rw.l1    -0.3716   3.1817 -0.04085 -2.546    4.927
## trend.l1 -0.4178  -0.9336 -0.26593 -3.414   -1.753
## 
## Weights W:
## (This is the loading matrix)
## 
##          prod.l1     e.l1     U.l1     rw.l1   trend.l1
## prod.d  0.023156 -0.02833 -0.10915 -0.006296 -4.785e-13
## e.d     0.005602 -0.01739  0.08679 -0.001019 -4.386e-13
## U.d    -0.019277  0.01382 -0.03696 -0.002277  4.920e-13
## rw.d   -0.084619 -0.02739 -0.07798  0.003985 -1.032e-13

Так, гипотеза о равенстве \( r = 1 \) не отвергается на 10% уровне значимости.

vecm <- ca.jo(Canada[, c("prod", "e", "U", "rw")], type = "trace", ecdet = "trend", 
    K = 3, spec = "transitory")
summary(vecm)
## 
## ###################### 
## # Johansen-Procedure # 
## ###################### 
## 
## Test type: trace statistic , with linear trend in cointegration 
## 
## Eigenvalues (lambda):
## [1] 4.505e-01 1.963e-01 1.677e-01 4.647e-02 2.632e-17
## 
## Values of teststatistic and critical values of test:
## 
##           test 10pct  5pct  1pct
## r <= 3 |  3.85 10.49 12.25 16.26
## r <= 2 | 18.72 22.76 25.32 30.45
## r <= 1 | 36.42 39.06 42.44 48.45
## r = 0  | 84.92 59.14 62.99 70.05
## 
## Eigenvectors, normalised to first column:
## (These are the cointegration relations)
## 
##           prod.l1    e.l1    U.l1   rw.l1 trend.l1
## prod.l1   1.00000  1.0000  1.0000  1.0000   1.0000
## e.l1     -0.02385  1.2947 -2.8832  4.2418  -8.2904
## U.l1      3.16875  3.4037 -7.4262  6.8414 -12.5578
## rw.l1     1.83528 -0.3331  1.3979 -0.1394   2.4466
## trend.l1 -1.30156 -0.2303 -0.5093 -1.5926   0.2831
## 
## Weights W:
## (This is the loading matrix)
## 
##          prod.l1     e.l1      U.l1     rw.l1   trend.l1
## prod.d -0.006535 -0.02763 -0.070975 -0.014754  1.077e-11
## e.d    -0.008503  0.11414 -0.008157  0.003988  7.400e-12
## U.d    -0.004719 -0.06154  0.020719 -0.006557 -4.664e-12
## rw.d   -0.046213 -0.14580 -0.016945  0.011896  6.952e-12
vecm.r1 <- cajorls(vecm, r = 1)
vecm.r1
## $rlm
## 
## Call:
## lm(formula = substitute(form1), data = data.mat)
## 
## Coefficients:
##           prod.d    e.d       U.d       rw.d    
## ect1      -0.00654  -0.00850  -0.00472  -0.04621
## constant   8.27481  10.33131   5.68783  55.46912
## prod.dl1   0.23444   0.20095  -0.13892  -0.07449
## e.dl1     -0.24654   0.82156  -0.64685  -0.63408
## U.dl1     -0.97987   0.00338  -0.19113   0.06314
## rw.dl1     0.00471  -0.07849   0.01726  -0.01208
## prod.dl2  -0.02952   0.04827  -0.00291  -0.25194
## e.dl2     -0.58047  -0.45969  -0.01974   0.08120
## U.dl2     -0.12810  -0.10341  -0.26269  -0.23001
## rw.dl2    -0.19026  -0.09583   0.08035  -0.15739
## 
## 
## $beta
##              ect1
## prod.l1   1.00000
## e.l1     -0.02385
## U.l1      3.16875
## rw.l1     1.83528
## trend.l1 -1.30156

SVAR и SVEC

Для того, чтобы теперь перейти к структурной форме VAR, необходимо решить проблему идентификации. В только что построенной VECM необходимо \( \frac{1}{2} k(k-1) = 6 \) линейно независимых ограничений. Т.к. по результатам теста о коинтеграции можно предположить \( r=1 \), существует \( k^{*} = r(k-r)=3 \) LR соотношений и \( r=1 \) SR соотношений. Так как матрица неполного ранга, в ней присутствует \( r k^{*} = 3 \) линейно независимых соотношений. Таким образом, необходимо еще \( \frac{1}{2} k^{*}(k^{*}-1) = 3 \) ограничений.

Оценим SVEC с учетом данных ограничений:

vecm <- ca.jo(Canada[, c("prod", "e", "U", "rw")], type = "trace", ecdet = "trend", 
    K = 3, spec = "transitory")
SR <- matrix(NA, nrow = 4, ncol = 4)  # Насильно создаем SR матрицу ограничений
SR[4, 2] <- 0  # Предположение 3
LR <- matrix(NA, nrow = 4, ncol = 4)  # Насильно создаем LR матрицу ограничений
LR[1, 2:4] <- 0  # Предположение 2
LR[2:4, 4] <- 0  # Предположение 1
svec <- SVEC(vecm, LR = LR, SR = SR, r = 1, lrtest = FALSE, boot = TRUE, runs = 100)
summary(svec)
## 
## SVEC Estimation Results:
## ======================== 
## 
## Call:
## SVEC(x = vecm, LR = LR, SR = SR, r = 1, lrtest = FALSE, boot = TRUE, 
##     runs = 100)
## 
## Type: B-model 
## Sample size: 81 
## Log Likelihood: -161.838 
## Number of iterations: 10 
## 
## Estimated contemporaneous impact matrix:
##         prod       e        U     rw
## prod  0.5840  0.0743 -0.15258 0.0690
## e    -0.1203  0.2614 -0.15510 0.0898
## U     0.0253 -0.2672  0.00549 0.0498
## rw    0.1117  0.0000  0.48377 0.4879
## 
## Estimated standard errors for impact matrix:
##        prod      e     U     rw
## prod 0.0873 0.1259 0.236 0.0693
## e    0.0723 0.0602 0.190 0.0463
## U    0.0637 0.0502 0.056 0.0350
## rw   0.1465 0.0000 0.694 0.0807
## 
## Estimated long run impact matrix:
##        prod      e      U rw
## prod  0.791  0.000  0.000  0
## e     0.202  0.577 -0.492  0
## U    -0.159 -0.341  0.141  0
## rw   -0.153  0.596 -0.250  0
## 
## Estimated standard errors for long-run matrix:
##       prod     e     U rw
## prod 0.165 0.000 0.000  0
## e    0.264 0.161 0.619  0
## U    0.137 0.084 0.167  0
## rw   0.214 0.147 0.297  0
## 
## Covariance matrix of reduced form residuals (*100):
##        prod     e      U    rw
## prod 37.464 -2.10 -0.251  2.51
## e    -2.096 11.49 -6.927 -4.47
## U    -0.251 -6.93  7.454  2.98
## rw    2.509 -4.47  2.978 48.46

В данной работе проблема идентификации решилась накладыванием априорных ограничений. Однако, что делать, если ограничений оказывается слишком много, и система становится переопределенной? В следующем разделе проводится тестирование ограничений с помощью LR-теста.

Лишнее ограничение

LR[3, 3] <- 0
svec.oi <- update(svec, LR = LR, lrtest = TRUE, boot = FALSE)
str(svec.oi$LRover)
## List of 5
##  $ statistic: Named num 6.07
##   ..- attr(*, "names")= chr "Chi^2"
##  $ parameter: Named num 1
##   ..- attr(*, "names")= chr "df"
##  $ p.value  : Named num 0.0137
##   ..- attr(*, "names")= chr "Chi^2"
##  $ method   : chr "LR overidentification"
##  $ data.name: chr "vecm"
##  - attr(*, "class")= chr "htest"

Таким образом, видно, что на 5% уровне значимости нулевая гипотеза отвергается.

Impulse-Response

Строим impulse-response functions:

svec.irf <- irf(svec, n.ahead = 48, boot = TRUE, mar = rep(2, 4), oma = rep(0.5, 
    4))
plot(svec.irf, nc = 2)

plot of chunk unnamed-chunk-22 plot of chunk unnamed-chunk-22 plot of chunk unnamed-chunk-22 plot of chunk unnamed-chunk-22

VECM to VAR, SVEC to SVAR

vec2var(vecm)
## 
## Coefficient matrix of lagged endogenous variables:
## 
## A1:
##      prod.l1    e.l1     U.l1     rw.l1
## prod  1.2279 -0.2464 -1.00058 -0.007287
## e     0.1924  1.8218 -0.02357 -0.094097
## U    -0.1436 -0.6467  0.79392  0.008603
## rw   -0.1207 -0.6330 -0.08330  0.903103
## 
## 
## A2:
##      prod.l2    e.l2     U.l2    rw.l2
## prod -0.2640 -0.3339  0.85177 -0.19497
## e    -0.1527 -1.2813 -0.10679 -0.01734
## U     0.1360  0.6271 -0.07156  0.06309
## rw   -0.1774  0.7153 -0.29315 -0.14531
## 
## 
## A3:
##        prod.l3     e.l3   U.l3    rw.l3
## prod  0.029520  0.58047 0.1281  0.19026
## e    -0.048273  0.45969 0.1034  0.09583
## U     0.002909  0.01974 0.2627 -0.08035
## rw    0.251940 -0.08120 0.2300  0.15739
## 
## 
## Coefficient matrix of deterministic regressor(s).
## 
##      constant trend.l1
## prod    8.275 0.008506
## e      10.331 0.011068
## U       5.688 0.006142
## rw     55.469 0.060149

Prediction

Для стандартного \( VAR(p) \) прогнозные значения создаются следующими коммандами:

pred <- predict(p1ct, n.ahead = 48)
fanchart(pred, nc = 2)

plot of chunk unnamed-chunk-24

Для \( VECM \), \( SVEC \) и \( SVAR \) прогноз строится следующим способом:

fevd <- fevd(svec, n.ahead = 48)