Made use of the new casegrouper construct instead of relying on hashes.
Rewrote the percentiles calculations so as not to require dynamically
allocating memory for all the data. Encapsulated many of the other statistics'
calculations, so as to have similar interfaces.
struct statistic *histogram;
struct order_stats *np;
- /* Three quartiles indexing into PTL */
+ /* Tukey_Hingesree quartiles indexing into PTL */
struct percentile **quartiles;
/* A reader sorted in ASCENDING order */
struct casereader *up_reader;
- /* The minimum value of all the weights */
+ /* Tukey_Hingese minimum value of all tukey_hingese weights */
double cmin;
- /* Sum of all weights, including those for missing values */
+ /* Sum of all weights, including tukey_hingesose for missing values */
double n;
double mean;
struct xfactor
{
- /* We need to make a list of this structure */
+ /* We need to make a list of tukey_hingesis structure */
struct ll ll;
- /* The independent variable */
+ /* Tukey_Hingese independent variable */
const struct variable const* indep_var[2];
- /* A list of results for this factor */
+ /* A list of results for tukey_hingesis factor */
struct ll_list result_list ;
};
static struct xfactor level0_factor;
static struct ll_list factor_list = LL_INITIALIZER (factor_list);
-/* Parse the clause specifying the factors */
+/* Parse tukey_hingese clause specifying tukey_hingese factors */
static int examine_parse_independent_vars (struct lexer *lexer,
const struct dictionary *dict,
struct cmd_examine *cmd);
/* Represent a factor as a string, so it can be
printed in a human readable fashion,
- but sacrificing some readablility for the sake of brevity */
+ but sacrificing some readablility for tukey_hingese sake of brevity */
static void
factor_to_string_concise (const struct xfactor *fctr,
const struct factor_result *result,
return CMD_FAILURE;
}
- /* If /MISSING=INCLUDE is set, then user missing values are ignored */
+ /* If /MISSING=INCLUDE is set, tukey_hingesen user missing values are ignored */
exclude_values = cmd.incl == XMN_INCLUDE ? MV_SYSTEM : MV_ANY;
if ( cmd.st_n == SYSMIS )
if ( ! cmd.sbc_cinterval)
cmd.n_cinterval[0] = 95.0;
- /* If descriptives have been requested, make sure the
+ /* If descriptives have been requested, make sure tukey_hingese
quartiles are calculated */
if ( cmd.a_statistics[XMN_ST_DESCRIPTIVES] )
{
order_stats_accumulate (os, n_os,
casereader_clone (metric->up_reader),
- wv, dependent_vars[v], MV_ANY);
+ wv, dependent_vars[v]);
free (os);
}
}
order_stats_accumulate ((struct order_stats **) &metric->box_whisker,
1,
casereader_clone (metric->up_reader),
- wv, dependent_vars[v], MV_ANY);
+ wv, dependent_vars[v]);
}
}
noinst_LIBRARIES += src/math/libpspp_math.a
src_math_libpspp_math_a_SOURCES = \
- src/math/box-whisker.c src/math/box-whiske.h \
- src/math/chart-geometry.c src/math/chart-geometry.h \
- src/math/coefficient.c src/math/coefficient.h \
- src/math/covariance-matrix.c src/math/covariance-matrix.h \
+ src/math/chart-geometry.c \
+ src/math/chart-geometry.h \
+ src/math/box-whisker.c src/math/box-whisker.h \
+ src/math/coefficient.c \
+ src/math/coefficient.h \
+ src/math/covariance-matrix.c \
+ src/math/covariance-matrix.h \
+ src/math/design-matrix.c src/math/design-matrix.h \
src/math/extrema.c src/math/extrema.h \
src/math/group.c src/math/group.h \
src/math/group-proc.h \
src/math/interaction.c src/math/interaction.h \
src/math/levene.c src/math/levene.h \
src/math/linreg.c src/math/linreg.h \
- src/math/merge.c src/math/merge.h \
+ src/math/merge.c src/math/merge.h \
src/math/moments.c src/math/moments.h \
src/math/np.c src/math/np.h \
src/math/order-stats.c src/math/order-stats.h \
src/math/percentiles.c src/math/percentiles.h \
- src/math/design-matrix.c src/math/design-matrix.h \
src/math/random.c src/math/random.h \
src/math/sort.c src/math/sort.h \
src/math/trimmed-mean.c src/math/trimmed-mean.h \
- src/math/tukey-hinges.c src/math/tukey-hinges.h
-
-EXTRA_DIST += src/math/OChangeLog
+ src/math/tukey-hinges.c src/math/tukey-hinges.h
#include <data/casereader.h>
#include <string.h>
-#if 0
-
-#include <stdio.h>
-
-static void
-order_stats_dump_k1 (const struct order_stats *os)
-{
- struct k *k = &os->k[0];
- printf ("K1: tc %g; c %g cc %g ccp %g\n",
- k->tc, k->c, k->cc, k->cc_p1);
-
-}
-
-static void
-order_stats_dump_k2 (const struct order_stats *os)
-{
- struct k *k = &os->k[1];
- printf ("K2: tc %g; c %g cc %g ccp %g\n",
- k->tc, k->c, k->cc, k->cc_p1);
-}
-
-
-void
-order_stats_dump (const struct order_stats *os)
-{
- order_stats_dump_k1 (os);
- order_stats_dump_k2 (os);
-}
-
-#endif
static void
update_k_lower (struct k *kk,
struct order_stats **os, size_t n_os)
{
int j;
-
for (j = 0 ; j < n_os ; ++j)
{
int k;
if ( stat->accumulate )
stat->accumulate (stat, cx, c_i, cc_i, y_i);
-
- tos->cc = cc_i;
}
}
void
order_stats_accumulate (struct order_stats **os, size_t nos,
- struct casereader *reader,
- const struct variable *wv,
- const struct variable *var,
- enum mv_class exclude)
+ struct casereader *reader,
+ const struct variable *wv,
+ const struct variable *var)
{
struct ccase cx;
struct ccase prev_cx;
/* The casereader MUST be sorted */
assert (this_value >= prev_value);
- if ( var_is_value_missing (var, case_data (&cx, var), exclude))
- continue;
-
case_destroy (&prev_cx);
if ( prev_value == -DBL_MAX || prev_value == this_value)
casereader_destroy (reader);
}
-
-
-
struct k
{
double tc;
+
double cc;
+
double cc_p1;
+
double c;
+
double c_p1;
+
double y;
+
double y_p1;
};
struct statistic parent;
int n_k;
struct k *k;
-
- double cc;
};
-enum mv_class;
-void order_stats_dump (const struct order_stats *os);
+
+void dump_ptile_k1 (const struct order_stats *ptl);
+
+void dump_ptile_k2 (const struct order_stats *ptl);
+
void order_stats_accumulate (struct order_stats **ptl, size_t nos,
- struct casereader *reader,
- const struct variable *wv,
- const struct variable *var,
- enum mv_class exclude);
+ struct casereader *reader,
+ const struct variable *wv,
+ const struct variable *var);
#endif
struct percentile *mutable = (struct percentile *) ptl;
const struct order_stats *os = &ptl->parent;
- assert (os->cc == ptl->w);
-
if ( ptl->g1 == SYSMIS)
mutable->g1 = (os->k[0].tc - os->k[0].cc) / os->k[0].c_p1;
assert (p <= 1.0);
ptl->ptile = p;
- ptl->w = W;
os->n_k = 2;
os->k = xcalloc (sizeof (*os->k), 2);
return os;
}
+#if 0
+void
+percentile_dump (const struct percentile *ptl)
+{
+ printf ("Percentile %g:\n\tk1: ", ptl->ptile);
+
+ dump_os_k1 ((const struct os *)ptl);
+ printf ("\tk2: ");
+ dump_os_k2 ((const struct os *)ptl);
+ printf ("\n");
+}
+#endif
struct order_stats parent;
double ptile;
- double w;
/* Mutable */
double g1;
{
const struct order_stats *os = (const struct order_stats *) tm;
- assert (os->cc == tm->w);
-
return
(
(os->k[0].cc_p1 - os->k[0].tc) * os->k[0].y_p1