def __init__(self, model, P=None, periods=10, order=None): self.model = model self.periods = periods self.neqs, self.lags, self.T = model.neqs, model.k_ar, model.nobs self.order = order if P is None: sigma = model.sigma_u # TODO, may be difficult at the moment # if order is not None: # indexer = [model.get_eq_index(name) for name in order] # sigma = sigma[:, indexer][indexer, :] # if sigma.shape != model.sigma_u.shape: # raise ValueError('variable order is wrong length') P = la.cholesky(sigma) self.P = P self.irfs = model.ma_rep(periods) self.orth_irfs = model.orth_ma_rep(periods) self.cum_effects = self.irfs.cumsum(axis=0) self.orth_cum_effects = self.orth_irfs.cumsum(axis=0) self.lr_effects = model.long_run_effects() self.orth_lr_effects = np.dot(model.long_run_effects(), P) # auxiliary stuff self._A = util.comp_matrix(model.coefs)
def is_stable(coefs, verbose=False): """ Determine stability of VAR(p) system by examining the eigenvalues of the VAR(1) representation Parameters ---------- coefs : ndarray (p x k x k) Returns ------- is_stable : bool """ A_var1 = util.comp_matrix(coefs) eigs = np.linalg.eigvals(A_var1) if verbose: print 'Eigenvalues of VAR(1) rep' for val in np.abs(eigs): print val return (np.abs(eigs) <= 1).all()
def _var_acf(coefs, sig_u): """ Compute autocovariance function ACF_y(h) for h=1,...,p Notes ----- Lutkepohl (2005) p.29 """ p, k, k2 = coefs.shape assert(k == k2) A = util.comp_matrix(coefs) # construct VAR(1) noise covariance SigU = np.zeros((k*p, k*p)) SigU[:k,:k] = sig_u # vec(ACF) = (I_(kp)^2 - kron(A, A))^-1 vec(Sigma_U) vecACF = L.solve(np.eye((k*p)**2) - np.kron(A, A), vec(SigU)) acf = unvec(vecACF) acf = acf[:k].T.reshape((p, k, k)) return acf
def _var_acf(coefs, sig_u): """ Compute autocovariance function ACF_y(h) for h=1,...,p Notes ----- Lutkepohl (2005) p.29 """ p, k, k2 = coefs.shape assert (k == k2) A = util.comp_matrix(coefs) # construct VAR(1) noise covariance SigU = np.zeros((k * p, k * p)) SigU[:k, :k] = sig_u # vec(ACF) = (I_(kp)^2 - kron(A, A))^-1 vec(Sigma_U) vecACF = L.solve(np.eye((k * p)**2) - np.kron(A, A), vec(SigU)) acf = unvec(vecACF) acf = acf[:k].T.reshape((p, k, k)) return acf