Removed some unnecessary #include directives
[pspp] / src / regression.q
index 06f881b2485703387a1e037af4cd0b41b4b8aa4a..d3a81e401418a47389cd45b466c870efb5d491e2 100644 (file)
@@ -94,7 +94,34 @@ static void statistics_keyword_output (void (*)(pspp_linreg_cache *),
 static void
 reg_stats_r (pspp_linreg_cache * c)
 {
+  struct tab_table *t;
+  int n_rows = 2;
+  int n_cols = 5;
+  double rsq;
+  double adjrsq;
+  double std_error;
+
   assert (c != NULL);
+  rsq = c->ssm / c->sst;
+  adjrsq = 1.0 - (1.0 - rsq) * (c->n_obs - 1.0) / (c->n_obs - c->n_indeps);
+  std_error = sqrt ((c->n_indeps - 1.0) / (c->n_obs - 1.0));
+  t = tab_create (n_cols, n_rows, 0);
+  tab_dim (t, tab_natural_dimensions);
+  tab_box (t, TAL_2, TAL_2, -1, TAL_1, 0, 0, n_cols - 1, n_rows - 1);
+  tab_hline (t, TAL_2, 0, n_cols - 1, 1);
+  tab_vline (t, TAL_2, 2, 0, n_rows - 1);
+  tab_vline (t, TAL_0, 1, 0, 0);
+
+  tab_text (t, 1, 0, TAB_CENTER | TAT_TITLE, _("R"));
+  tab_text (t, 2, 0, TAB_CENTER | TAT_TITLE, _("R Square"));
+  tab_text (t, 3, 0, TAB_CENTER | TAT_TITLE, _("Adjusted R Square"));
+  tab_text (t, 4, 0, TAB_CENTER | TAT_TITLE, _("Std. Error of the Estimate"));
+  tab_float (t, 1, 1, TAB_RIGHT, sqrt (rsq), 10, 2);
+  tab_float (t, 2, 1, TAB_RIGHT, rsq, 10, 2);
+  tab_float (t, 3, 1, TAB_RIGHT, adjrsq, 10, 2);
+  tab_float (t, 4, 1, TAB_RIGHT, std_error, 10, 2);
+  tab_title (t, 0, _("Model Summary"));
+  tab_submit (t);
 }
 
 /*
@@ -272,7 +299,45 @@ reg_stats_f (pspp_linreg_cache * c)
 static void
 reg_stats_bcov (pspp_linreg_cache * c)
 {
+  int n_cols;
+  int n_rows;
+  int i;
+  int j;
+  int k;
+  int row;
+  int col;
+  const char *label;
+  struct tab_table *t;
+
   assert (c != NULL);
+  n_cols = c->n_indeps + 1 + 2;
+  n_rows = 2 * (c->n_indeps + 1);
+  t = tab_create (n_cols, n_rows, 0);
+  tab_headers (t, 2, 0, 1, 0);
+  tab_dim (t, tab_natural_dimensions);
+  tab_box (t, TAL_2, TAL_2, -1, TAL_1, 0, 0, n_cols - 1, n_rows - 1);
+  tab_hline (t, TAL_2, 0, n_cols - 1, 1);
+  tab_vline (t, TAL_2, 2, 0, n_rows - 1);
+  tab_vline (t, TAL_0, 1, 0, 0);
+  tab_text (t, 0, 0, TAB_CENTER | TAT_TITLE, _("Model"));
+  tab_text (t, 1, 1, TAB_CENTER | TAT_TITLE, _("Covariances"));
+  for (i = 1; i < c->n_indeps + 1; i++)
+    {
+      j = indep_vars[(i - 1)];
+      struct variable *v = cmd.v_variables[j];
+      label = var_to_string (v);
+      tab_text (t, 2, i, TAB_CENTER, label);
+      tab_text (t, i + 2, 0, TAB_CENTER, label);
+      for (k = 1; k < c->n_indeps + 1; k++)
+       {
+         col = (i <= k) ? k : i;
+         row = (i <= k) ? i : k;
+         tab_float (t, k + 2, i, TAB_CENTER,
+                    gsl_matrix_get (c->cov, row, col), 8, 3);
+       }
+    }
+  tab_title (t, 0, _("Coefficient Correlations"));
+  tab_submit (t);
 }
 static void
 reg_stats_ses (pspp_linreg_cache * c)
@@ -346,7 +411,7 @@ subcommand_statistics (int *keywords, pspp_linreg_cache * c)
        */
       for (i = 0; i < f; i++)
        {
-         *(keywords + i) = 1;
+         keywords[i] = 1;
        }
     }
   else
@@ -365,10 +430,10 @@ subcommand_statistics (int *keywords, pspp_linreg_cache * c)
        */
       if (keywords[defaults] | d)
        {
-         *(keywords + anova) = 1;
-         *(keywords + outs) = 1;
-         *(keywords + coeff) = 1;
-         *(keywords + r) = 1;
+         keywords[anova] = 1;
+         keywords[outs] = 1;
+         keywords[coeff] = 1;
+         keywords[r] = 1;
        }
     }
   statistics_keyword_output (reg_stats_r, keywords[r], c);
@@ -420,7 +485,7 @@ is_depvar (size_t k)
 }
 
 static void
-run_regression (const struct casefile *cf, void *cmd_)
+run_regression (const struct casefile *cf, void *cmd_ UNUSED)
 {
   size_t i;
   size_t k;
@@ -465,7 +530,6 @@ run_regression (const struct casefile *cf, void *cmd_)
          val = case_data (&c, v->fv);
          cr_value_update (*(ca->a + i), val);
        }
-      n_data++;
     }
   cr_create_value_matrices (ca);
   X =
@@ -496,18 +560,8 @@ run_regression (const struct casefile *cf, void *cmd_)
           */
          if (is_depvar (i))
            {
-             if (v->type == NUMERIC)
-               {
-                 gsl_vector_set (Y, row, val->f);
-               }
-             else
-               {
-                 errno = EINVAL;
-                 fprintf (stderr,
-                          "%s:%d: Dependent variable should be numeric: %s\n",
-                          __FILE__, __LINE__, strerror (errno));
-                 err_cond_fail ();
-               }
+             assert (v->type == NUMERIC);
+             gsl_vector_set (Y, row, val->f);
            }
          else
            {