static const char *get_pd_string (DATASET *dset) { char *pdstr; if (custom_time_series(dset)) { pdstr = N_("Time series"); } else if (dataset_is_time_series(dset)) { switch (dset->pd) { case 1: pdstr = N_("Annual"); break; case 4: pdstr = N_("Quarterly"); break; case 12: pdstr = N_("Monthly"); break; case 24: pdstr = N_("Hourly"); break; case 52: pdstr = N_("Weekly"); break; case 5: case 6: case 7: pdstr = N_("Daily"); break; case 10: pdstr = N_("Decennial"); break; default: pdstr = N_("Unknown"); break; } } else if (dataset_is_panel(dset)) { pdstr = N_("Panel"); } else { pdstr = N_("Undated"); } return pdstr; }
int qr_tsls_vcv (MODEL *pmod, const DATASET *dset, gretlopt opt) { gretl_matrix *Q = NULL; gretl_matrix *R = NULL; gretl_matrix *V = NULL; int k, err = 0; k = pmod->list[0] - 1; Q = make_data_X(pmod, dset); R = gretl_matrix_alloc(k, k); V = gretl_matrix_alloc(k, k); if (Q == NULL || R == NULL || V == NULL) { err = E_ALLOC; goto qr_cleanup; } err = QR_decomp_plus(Q, R, NULL, NULL); if (err) { goto qr_cleanup; } /* create (X'X)^{-1} */ gretl_matrix_multiply_mod(R, GRETL_MOD_NONE, R, GRETL_MOD_TRANSPOSE, V, GRETL_MOD_NONE); /* VCV and standard errors */ if (opt & OPT_R) { if (opt & OPT_C) { pmod->opt |= OPT_R; err = qr_make_cluster_vcv(pmod, IVREG, dset, V, opt); } else if (dataset_is_panel(dset)) { err = qr_make_regular_vcv(pmod, V, OPT_X); if (!err) { err = panel_tsls_robust_vcv(pmod, dset); } } else if (dataset_is_time_series(dset) && !libset_get_bool(FORCE_HC)) { pmod->opt |= OPT_R; err = qr_make_hac(pmod, dset, V); } else { pmod->opt |= OPT_R; err = qr_make_hccme(pmod, dset, Q, V); } } else { qr_make_regular_vcv(pmod, V, OPT_NONE); } qr_cleanup: gretl_matrix_free(Q); gretl_matrix_free(R); gretl_matrix_free(V); pmod->errcode = err; return err; }
void time_series_menu_state (gboolean s) { gboolean sx = extended_ts(dataset); gboolean panel = dataset_is_panel(dataset); gboolean realpan = multi_unit_panel_sample(dataset); gboolean ur; if (mdata->ui == NULL) { return; } /* FIXME: we (may) need to enable/disable function packages that have menu attachments here. */ /* unit-root tests: require time-series or panel data, and a time series length greater than 5 */ if (panel) { ur = dataset->pd > 5; } else { ur = s && sample_size(dataset) > 5; } /* Plots */ flip(mdata->ui, "/menubar/View/GraphVars/TSPlot", sx); flip(mdata->ui, "/menubar/View/MultiPlots/MultiTS", sx); flip(mdata->ui, "/menubar/Variable/VarTSPlot", sx && !realpan); flip(mdata->ui, "/menubar/Variable/PanPlot", realpan); /* Variable menu */ flip(mdata->ui, "/menubar/Variable/URTests", ur); if (ur && !s) { /* time-series only "ur" option */ flip(mdata->ui, "/menubar/Variable/URTests/fractint", s); } flip(mdata->ui, "/menubar/Variable/URTests/levinlin", ur && panel); flip(mdata->ui, "/menubar/Variable/corrgm", s); flip(mdata->ui, "/menubar/Variable/pergm", s); flip(mdata->ui, "/menubar/Variable/Filter", s); #ifdef HAVE_X12A flip(mdata->ui, "/menubar/Variable/X12A", get_x12a_ok()); #endif #ifdef HAVE_TRAMO flip(mdata->ui, "/menubar/Variable/Tramo", get_tramo_ok()); #endif flip(mdata->ui, "/menubar/Variable/Hurst", s); /* Model menu */ flip(mdata->ui, "/menubar/Model/TSModels", s); /* Sample menu */ flip(mdata->ui, "/menubar/Data/DataCompact", s && (COMPACTABLE(dataset) || dated_weekly_data(dataset))); flip(mdata->ui, "/menubar/Data/DataExpand", s && EXPANSIBLE(dataset)); }
void set_sample_label (DATASET *dset) { GtkWidget *dlabel; char tmp[256]; int tsubset; if (mdata == NULL) { return; } /* set the sensitivity of various menu items */ time_series_menu_state(dataset_is_time_series(dset)); panel_menu_state(dataset_is_panel(dset)); ts_or_panel_menu_state(dataset_is_time_series(dset) || dataset_is_panel(dset)); flip(mdata->ui, "/menubar/Data/DataTranspose", !dataset_is_panel(dset)); tsubset = dset->t1 > 0 || dset->t2 < dset->n - 1; /* construct label showing summary of dataset/sample info (this goes at the foot of the window) */ if (complex_subsampled() && !tsubset && dataset_is_cross_section(dset)) { sprintf(tmp, _("Undated: Full range n = %d; current sample" " n = %d"), get_full_length_n(), dataset->n); gtk_label_set_text(GTK_LABEL(mdata->status), tmp); } else if (complex_subsampled() && dataset_is_panel(dset)) { char t1str[OBSLEN], t2str[OBSLEN]; const char *pdstr = get_pd_string(dset); ntodate(t1str, dset->t1, dset); ntodate(t2str, dset->t2, dset); sprintf(tmp, _("%s; sample %s - %s"), _(pdstr), t1str, t2str); gtk_label_set_text(GTK_LABEL(mdata->status), tmp); } else { char t1str[OBSLEN], t2str[OBSLEN]; const char *pdstr = get_pd_string(dset); if (tsubset && calendar_data(dset)) { /* it's too verbose to print both full range and sample */ ntodate(t1str, dset->t1, dset); ntodate(t2str, dset->t2, dset); sprintf(tmp, _("%s; sample %s - %s"), _(pdstr), t1str, t2str); gtk_label_set_text(GTK_LABEL(mdata->status), tmp); } else { ntodate(t1str, 0, dset); ntodate(t2str, dset->n - 1, dset); sprintf(tmp, _("%s: Full range %s - %s"), _(pdstr), t1str, t2str); if (tsubset) { gchar *fulltext; ntodate(t1str, dset->t1, dset); ntodate(t2str, dset->t2, dset); fulltext = g_strdup_printf(_("%s; sample %s - %s"), tmp, t1str, t2str); gtk_label_set_text(GTK_LABEL(mdata->status), fulltext); g_free(fulltext); } else { gtk_label_set_text(GTK_LABEL(mdata->status), tmp); } } } /* construct label with datafile name (this goes above the data series window) */ dlabel = g_object_get_data(G_OBJECT(mdata->main), "dlabel"); if (dlabel != NULL) { if (strlen(datafile) > 2) { /* data file open already */ const char *p = strrchr(datafile, SLASH); gchar *trfname; if (p != NULL) { trfname = my_filename_to_utf8(p + 1); } else { trfname = my_filename_to_utf8(datafile); } strcpy(tmp, " "); if (data_status & SESSION_DATA) { sprintf(tmp + 1, "Imported %s", trfname); } else if (data_status & MODIFIED_DATA) { sprintf(tmp + 1, "%s *", trfname); } else { sprintf(tmp + 1, "%s", trfname); } gtk_label_set_text(GTK_LABEL(dlabel), tmp); g_free(trfname); } else if (data_status & MODIFIED_DATA) { strcpy(tmp, _(" Unsaved data ")); gtk_label_set_text(GTK_LABEL(dlabel), tmp); } } if (complex_subsampled() || dset->t1 > 0 || dset->t2 < dset->n - 1) { restore_sample_state(TRUE); } console_record_sample(dataset); }
static int dwiz_make_changes (DATASET *dwinfo, dw_opts *opts, GtkWidget *dlg) { gchar *setobs_cmd = NULL; gretlopt opt = OPT_NONE; int create = (opts->flags & DW_CREATE); int delmiss = (opts->flags & DW_DROPMISS); int delete_markers = 0; int err = 0; #if DWDEBUG fprintf(stderr, "dwiz_make_changes: create = %d\n", create); #endif /* preliminaries */ if (time_series(dwinfo)) { ntodate(dwinfo->stobs, dwinfo->t1, dwinfo); } else if (known_panel(dwinfo)) { if (!dataset_is_panel(dataset)) { /* Turning a subset of a non-panel dataset into a panel: this change will be irreversible */ maybe_unrestrict_dataset(); } } /* special: reorganizing dataset based on panel index vars */ if (dwinfo->structure == PANEL_UNKNOWN) { int uv, tv; err = translate_panel_vars(opts, &uv, &tv); if (!err) { err = set_panel_structure_from_vars(uv, tv, dataset); } if (!err) { setobs_cmd = g_strdup_printf("setobs %s %s --panel-vars", dataset->varname[uv], dataset->varname[tv]); } goto finalize; } /* check for nothing to be done */ if (dwinfo->structure == dataset->structure && dwinfo->pd == dataset->pd && strcmp(dwinfo->stobs, dataset->stobs) == 0) { if (create || delmiss) { /* recording? */ goto finalize; } else { infobox(_("No changes were made")); return 0; } } /* if converting to time series, we probably don't want to retain any original observation-marker strings */ if (dwinfo->structure == TIME_SERIES && dataset->markers && !delmiss) { delete_markers = 1; } /* handle panel structure */ if (known_panel(dwinfo)) { int nunits = dwinfo->t1; int nperiods = dataset->n / nunits; /* we don't offer a choice of "starting obs" */ dwinfo->pd = (dwinfo->structure == STACKED_TIME_SERIES)? nperiods : nunits; strcpy(dwinfo->stobs, "1.1"); } /* handle conversion to cross-section */ if (dwinfo->structure == CROSS_SECTION) { strcpy(dwinfo->stobs, "1"); } if (dwinfo->structure == TIME_SERIES) { opt = OPT_T; } else if (dwinfo->structure == STACKED_TIME_SERIES) { opt = OPT_S; } else if (dwinfo->structure == STACKED_CROSS_SECTION) { opt = OPT_C; } else if (dwinfo->structure == CROSS_SECTION) { opt = OPT_X; } else if (dwinfo->structure == SPECIAL_TIME_SERIES) { opt = OPT_N; } err = simple_set_obs(dataset, dwinfo->pd, dwinfo->stobs, opt); #if DWDEBUG fprintf(stderr, "pd=%d, stobs='%s', opt=%d; set_obs returned %d\n", dwinfo->pd, dwinfo->stobs, opt, err); #endif if (!err && setobs_cmd == NULL) { setobs_cmd = g_strdup_printf("setobs %d %s%s", dwinfo->pd, dwinfo->stobs, print_flags(opt, SETOBS)); } finalize: if (!err && delmiss) { err = dataset_purge_missing_rows(dataset); } if (err) { gui_errmsg(err); } else if (create) { if (opts->flags & DW_SSHEET) { gtk_widget_hide(dlg); maybe_start_editing(); } else { register_data(NULLDATA_STARTED); lib_command_sprintf("nulldata %d", dataset->n); record_command_verbatim(); } } else { if (delete_markers) { dataset_destroy_obs_markers(dataset); } mark_dataset_as_modified(); } if (!err && setobs_cmd != NULL) { lib_command_strcpy(setobs_cmd); record_command_verbatim(); } g_free(setobs_cmd); #if DWDEBUG fprintf(stderr, "dwiz_make_changes: returning %d\n", err); #endif return err; }
int set_obs (const char *line, DATASET *dset, gretlopt opt) { char pdstr[VNAMELEN]; char stobs[OBSLEN]; int structure = STRUCTURE_UNKNOWN; double sd0 = dset->sd0; int pd, dated = 0; int panel = 0; int err = 0; if (dset == NULL) { return E_NODATA; } if ((opt & (OPT_R | OPT_P)) && dset->Z == NULL) { return E_NODATA; } if ((opt & (OPT_G | OPT_I)) && !dataset_is_panel(dset)) { return E_DATA; } gretl_error_clear(); if (opt & OPT_R) { /* restructure panel: "hidden" option */ return switch_panel_orientation(dset); } if (!strcmp(line, "setobs")) { /* we'll just print current obs info */ return 0; } if (opt & OPT_P) { return set_panel_structure_from_line(line, dset); } else if (opt & OPT_G) { /* --panel-groups */ return set_panel_group_strings(line, dset); } /* now we get down to business */ if (sscanf(line, "%*s %15s %10s", pdstr, stobs) != 2) { gretl_errmsg_set(_("Failed to parse line as frequency, startobs")); return E_PARSE; } pd = gretl_int_from_string(pdstr, &err); if (!err && pd < 1) { gretl_errmsg_sprintf(_("frequency (%d) does not make seem to make sense"), pd); err = E_DATA; } if (err) { return err; } /* if an explicit structure option was passed in, respect it */ if (opt == OPT_X) { structure = CROSS_SECTION; } else if (opt == OPT_T) { structure = TIME_SERIES; } else if (opt == OPT_S) { structure = STACKED_TIME_SERIES; panel = 1; } else if (opt == OPT_C) { structure = STACKED_CROSS_SECTION; panel = 1; } else if (opt == OPT_N) { structure = SPECIAL_TIME_SERIES; } else if (opt == OPT_I) { /* --panel-time */ structure = TIME_SERIES; } if (panel && dset->n > 0 && pd > dset->n) { gretl_errmsg_sprintf(_("frequency (%d) does not make seem to make sense"), pd); return 1; } err = process_starting_obs(stobs, pd, &structure, &sd0, &dated); if (err) { return err; } if (opt == OPT_I) { dset->panel_pd = pd; dset->panel_sd0 = sd0; return 0; } if (panel && dset->n % pd != 0) { int sts = structure == STACKED_TIME_SERIES; gretl_errmsg_sprintf(_("Panel datasets must be balanced.\n" "The number of observations (%d) is not a multiple\n" "of the number of %s (%d)."), dset->n, sts ? _("periods") : _("units"), pd); return E_DATA; } if (dated) { /* replace any existing markers with date strings */ dataset_destroy_obs_markers(dset); } else if (structure == TIME_SERIES && (pd == 1 || pd == 4 || pd == 12)) { /* force use of regular time-series obs labels */ dataset_destroy_obs_markers(dset); } dset->pd = pd; dset->structure = structure; dset->sd0 = sd0; ntodate(dset->stobs, 0, dset); ntodate(dset->endobs, dset->n - 1, dset); /* pre-process stacked cross-sectional panels: put into canonical stacked time series form */ if (dset->structure == STACKED_CROSS_SECTION) { if (dset->Z == NULL) { err = E_NODATA; } else { err = switch_panel_orientation(dset); } } return err; }