Esempio n. 1
0
static void compute_VAR_dataset (irfboot *b, GRETL_VAR *var,
				 const GRETL_VAR *vbak)
{
    double x;
    int i, j, k, t;
    int nl = var_n_lags(var);

#if BDEBUG
    gretl_matrix_print(var->Y, "var->Y before resampling");
    gretl_matrix_print(var->X, "var->X before resampling");
#endif

    for (t=0; t<var->T; t++) {
	/* extract row of var->X at t */
	gretl_matrix_extract_matrix(b->Xt, var->X, t, 0, GRETL_MOD_NONE);

	/* multiply Xt into original coeff matrix, forming Yt */
	gretl_matrix_multiply(b->Xt, vbak->B, b->Yt);

	/* extract resampled residuals at t */
	gretl_matrix_extract_matrix(b->Et, b->rE, t, 0, GRETL_MOD_NONE);

	/* add resampled residual to Yt */
	gretl_matrix_add_to(b->Yt, b->Et);

	/* write into big Y matrix */
	gretl_matrix_inscribe_matrix(var->Y, b->Yt, t, 0, GRETL_MOD_NONE);

	/* revise lagged Y columns in X */
	k = var->ifc;
	for (i=0; i<var->neqns; i++) {
	    x = b->Yt->val[i];
	    for (j=1; j<=nl && t+j < var->T; j++) {
		gretl_matrix_set(var->X, t+j, k++, x);
	    }
	}
    }

#if BDEBUG > 1
    gretl_matrix_print(var->Y, "var->Y after resampling");
    gretl_matrix_print(var->X, "var->X after resampling");
#endif
}
Esempio n. 2
0
gretl_matrix *HAC_XOX (const gretl_matrix *uhat,
		       const gretl_matrix *X,
		       VCVInfo *vi, int use_prior,
		       int *err)
{
    gretl_matrix *XOX = NULL;
    gretl_matrix *Wtj = NULL;
    gretl_matrix *Gj = NULL;
    gretl_matrix *H = NULL;
    gretl_matrix *A = NULL;
    gretl_matrix *w = NULL;
    int prewhiten;
    int data_based;
    int kern;
    int T = X->rows;
    int k = X->cols;
    int p, j, t;
    double bt = 0;

    if (use_prior) {
	kern = vi->vmin;
	prewhiten = vi->flags & HAC_PREWHITEN;
	if (kern == KERNEL_QS) {
	    bt = vi->bw;
	    p = T - 1;
	} else {
	    p = vi->order;
	}
	data_based = 0;
    } else {
	kern = libset_get_int(HAC_KERNEL);
	data_based = data_based_hac_bandwidth();
	prewhiten = libset_get_bool(PREWHITEN);
    }

#if NW_DEBUG
    fprintf(stderr, "*** HAC: kern = %d, prewhiten = %d ***\n", 
	    kern, prewhiten);
#endif

    if (use_prior) {
	H = newey_west_H(X, uhat, NULL);
    } else if (prewhiten || data_based) {
	H = newey_west_H(X, uhat, &w);
    } else {
	H = newey_west_H(X, uhat, NULL);
    }

    if (H == NULL) {
	*err = E_ALLOC;
	return NULL;
    } else if (prewhiten) {
	*err = nw_prewhiten(H, &A);
    }

    if (!*err) {
	XOX = gretl_zero_matrix_new(k, k);
	Wtj = gretl_matrix_alloc(k, k);
	Gj = gretl_matrix_alloc(k, k);
	if (XOX == NULL || Wtj == NULL || Gj == NULL) {
	    *err = E_ALLOC;
	}
    }

    if (*err) {
	goto bailout;
    }

    /* determine the bandwidth setting */

    if (!use_prior) {
	if (data_based) {
	    *err = newey_west_bandwidth(H, w, kern, prewhiten, &p, &bt);
	    if (*err) {
		goto bailout;
	    }
	} else if (kern == KERNEL_QS) {
	    bt = libset_get_double(QS_BANDWIDTH);
	    p = T - 1;
	} else {
	    p = get_hac_lag(T);
	}
    }

    if (!*err) {
	double wj;

	for (j=0; j<=p; j++) {
	    /* cumulate running sum of Gamma-hat terms */
	    gretl_matrix_zero(Gj);

	    for (t=j; t<T; t++) {
		/* W(t)-transpose * W(t-j) */
		wtw(Wtj, H, k, t, j);
		gretl_matrix_add_to(Gj, Wtj);
	    }

	    if (j > 0) {
		/* Gamma(j) = Gamma(j) + Gamma(j)-transpose */
		gretl_matrix_add_self_transpose(Gj);
		if (kern == KERNEL_QS) {
		    wj = qs_hac_weight(bt, j);
		} else {
		    wj = hac_weight(kern, p, j);
		}
		gretl_matrix_multiply_by_scalar(Gj, wj);
	    }

	    gretl_matrix_add_to(XOX, Gj);
	}
    }

    if (A != NULL) {
	hac_recolor(XOX, A);
    }

    if (!use_prior) {
	vi->vmaj = VCV_HAC;
	vi->vmin = kern;
	vi->flags = prewhiten ? HAC_PREWHITEN : 0;

	if (kern == KERNEL_QS) {
	    vi->order = 0;
	    vi->bw = bt;
	} else {
	    vi->order = p;
	    vi->bw = NADBL;
	}
    }

 bailout:

    gretl_matrix_free(H);
    gretl_matrix_free(Wtj);
    gretl_matrix_free(Gj);
    gretl_matrix_free(A);
    gretl_matrix_free(w);

    if (*err && XOX != NULL) {
	gretl_matrix_free(XOX);
	XOX = NULL;
    }

    return XOX;
}