# Portmanteau Test / Stability

I do have a question related to selecting the appropriate lag length in a VAR model with two variables. Following functions are used to return the Portmanteau test and a test for dynamic stability (the last two rows):

serial.test(VARx, lags.pt=maximum_lag, type="PT.asymptotic"),
roots(VARx)[[1]], # should be <1 to be considered as "stable"
roots(VARx)[[2]], # should be <1 to be considered as "stable"


Output:

[[1]]

Portmanteau Test (asymptotic)

data:  Residuals of VAR object V.1
Chi-squared = 20, df = 20, p-value = 0.5

[1] 2.36
[2] 0.34

[[2]]

Portmanteau Test (asymptotic)

data:  Residuals of VAR object V.2
Chi-squared = 20, df = 20, p-value = 0.3

[1] 1.95
[2] 1.95

[[3]]

Portmanteau Test (asymptotic)

data:  Residuals of VAR object V.3
Chi-squared = 20, df = 10, p-value = 0.2

[1] 2.22
[2] 2.22

[[4]]

Portmanteau Test (asymptotic)

data:  Residuals of VAR object V.4
Chi-squared = 20, df = 8, p-value = 0.03

[1] 2.4
[2] 2.4


According to the AIC selection criteria, Lag 4 was proposed. However, when we control for serial independence with the Portmanteau test, we find that only using Lag 3 (V.3) would remove the serial autocorrelation, as p-values > 0.1, i.e. 0.2. Okay, Lag 3 for now.

Now I want to further control for "dynamic stability", as proposed here. According to the source, the inverse roots should be <1. The problem is that there is no pair of variables in my results that both have a value <1.

What to do in this case?

dput:

structure(list(inc = c(348254.76, 599118, 736389, 825597, 896271, 963128, 1039418, 1113432, 1202722, 1264546, 1304516, 1364283.5, 1408522.5, 1475240.5, 1537742.5, 1584864.5, 1632268.5, 1680166.5, 1724325.5, 1753535.5, 1797481.5, 1858200.5, 1909682.5, 2024244.5, 2104077.5, 2209230.5, 2296961.5, 2407398.5, 2621805.5, 2916844.5, 3025239), out = c(7, 29, 40, 46, 59, 66, 73, 83, 94, 100, 108, 111, 115, 121, 130, 136, 141, 144, 151, 155, 161, 170, 177, 189, 196, 199, 203, 215, 221, 233, 518)), .Names = c("inc", "out"), row.names = c(NA, -31L), class = "data.frame")

## migrated from stackoverflow.comOct 10 '16 at 1:34

This question came from our site for professional and enthusiast programmers.

• Can you dput() your data to make this reproducible? – Hack-R Oct 9 '16 at 16:06
• Please put the result of the dput() in your question, i.e. edit your question! – jogo Oct 9 '16 at 17:51