static int re_estimate_VAR (irfboot *b, GRETL_VAR *v, int targ, int shock, int iter) { int err; err = gretl_matrix_multi_ols(v->Y, v->X, v->B, v->E, NULL); if (!err) { VAR_write_A_matrix(v); } if (!err) { gretl_matrix_multiply_mod(v->E, GRETL_MOD_TRANSPOSE, v->E, GRETL_MOD_NONE, v->S, GRETL_MOD_NONE); gretl_matrix_divide_by_scalar(v->S, v->df); /* was v->T in denom. */ err = gretl_VAR_do_error_decomp(v->S, v->C, v->ord); } if (!err) { err = recalculate_impulse_responses(b, v, targ, shock, iter); } return err; }
static int nw_prewhiten (gretl_matrix *H, gretl_matrix **pA) { gretl_matrix *H0, *H1, *A, *U; gretl_matrix_block *B; int T = H->rows; int k = H->cols; double h; int t, j; int err = 0; B = gretl_matrix_block_new(&H0, T-1, k, &H1, T-1, k, &A, k, k, &U, T-1, k, NULL); if (B == NULL) { return E_ALLOC; } for (j=0; j<k; j++) { for (t=1; t<T; t++) { h = gretl_matrix_get(H, t, j); gretl_matrix_set(H0, t-1, j, h); h = gretl_matrix_get(H, t-1, j); gretl_matrix_set(H1, t-1, j, h); } } /* estimate VAR */ err = gretl_matrix_multi_ols(H0, H1, A, U, NULL); /* apply the "0.97 limit" if needed */ if (!err) { err = maybe_limit_VAR_coeffs(A, H0, H1, U); } if (!err) { /* replace incoming H with VAR residuals */ for (j=0; j<k; j++) { gretl_matrix_set(H, 0, j, 0.0); for (t=1; t<T; t++) { h = gretl_matrix_get(U, t-1, j); gretl_matrix_set(H, t, j, h); } } } #if NW_DEBUG gretl_matrix_print(A, "prewhite A-hat"); gretl_matrix_print(H, "prewhitened H"); #endif if (!err) { *pA = gretl_matrix_copy(A); if (*pA == NULL) { err = E_ALLOC; } } gretl_matrix_block_destroy(B); return err; }