REGRESSION: Add parser framework for confidence interval
authorJohn Darrington <john@darrington.wattle.id.au>
Mon, 13 Jan 2014 08:34:41 +0000 (09:34 +0100)
committerJohn Darrington <john@darrington.wattle.id.au>
Tue, 14 Jan 2014 08:10:27 +0000 (09:10 +0100)
src/language/stats/regression.c
tests/language/stats/regression.at

index d9d8c5572513e78ba77c4fa3cd89bc2c06db19eb..322122866a51cb8ca4bf9ce551f90cae2978ee14 100644 (file)
 
 #define REG_LARGE_DATA 1000
 
+#define STATS_R      1
+#define STATS_COEFF  2
+#define STATS_ANOVA  4
+#define STATS_OUTS   8
+#define STATS_CI    16
+#define STATS_BCOV  32
+
+#define STATS_DEFAULT  (STATS_R | STATS_COEFF | STATS_ANOVA | STATS_OUTS)
+
+
+
 struct regression
 {
   struct dataset *ds;
@@ -62,11 +73,7 @@ struct regression
   const struct variable **dep_vars;
   size_t n_dep_vars;
 
-  bool r;
-  bool coeff;
-  bool anova;
-  bool bcov;
-
+  unsigned int stats;
 
   bool resid;
   bool pred;
@@ -189,10 +196,7 @@ cmd_regression (struct lexer *lexer, struct dataset *ds)
 
   memset (&regression, 0, sizeof (struct regression));
 
-  regression.anova = true;
-  regression.coeff = true;
-  regression.r = true;
-
+  regression.stats = STATS_DEFAULT;
   regression.pred = false;
   regression.resid = false;
 
@@ -248,21 +252,38 @@ cmd_regression (struct lexer *lexer, struct dataset *ds)
             {
               if (lex_match (lexer, T_ALL))
                 {
+                 regression.stats = ~0;
                 }
               else if (lex_match_id (lexer, "DEFAULTS"))
                 {
+                 regression.stats |= STATS_DEFAULT;
                 }
               else if (lex_match_id (lexer, "R"))
                 {
+                 regression.stats |= STATS_R;
                 }
               else if (lex_match_id (lexer, "COEFF"))
                 {
+                 regression.stats |= STATS_COEFF;
                 }
               else if (lex_match_id (lexer, "ANOVA"))
                 {
+                 regression.stats |= STATS_ANOVA;
                 }
               else if (lex_match_id (lexer, "BCOV"))
                 {
+                 regression.stats |= STATS_BCOV;
+                }
+              else if (lex_match_id (lexer, "CI"))
+                {
+                 regression.stats |= STATS_CI;
+
+                 if (lex_match (lexer, T_LPAREN))
+                   {
+                     lex_number (lexer);
+                     lex_get (lexer);
+                     lex_force_match (lexer, T_RPAREN);
+                   }
                 }
               else
                 {
@@ -573,16 +594,16 @@ static void
 subcommand_statistics (const struct regression *cmd, const linreg * c, const gsl_matrix * cm,
                        const struct variable *var)
 {
-  if (cmd->r
+  if (cmd->stats & STATS_R
     reg_stats_r     (c, var);
 
-  if (cmd->anova
+  if (cmd->stats & STATS_ANOVA
     reg_stats_anova (c, var);
 
-  if (cmd->coeff)
+  if (cmd->stats & STATS_COEFF)
     reg_stats_coeff (c, cm, var);
 
-  if (cmd->bcov)
+  if (cmd->stats & STATS_BCOV)
     reg_stats_bcov  (c, var);
 }
 
index e4fbdcbac76c15be4d6aa2370c4baed4d009fdb4..d401953f12defc51e3f64dbccfb80168e513248a 100644 (file)
@@ -166,12 +166,11 @@ end input program.
 regression 
           /variables = x0 x1
           /dependent = y ycopy
-          /statistics = all
+          /statistics = default.
 ])
 
 AT_CHECK([pspp -O format=csv regression.sps > output], [0], [ignore])
 
-
 AT_CHECK([head -16 output > first], [0], [])
 AT_CHECK([tail -16 output > second], [0], [])