- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
- This program is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- 02110-1301, USA. */
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include <data/variable.h>
#include <language/stats/freq.h>
#include <language/stats/npar.h>
#include <data/variable.h>
#include <language/stats/freq.h>
#include <language/stats/npar.h>
#include <libpspp/assertion.h>
#include <libpspp/compiler.h>
#include <libpspp/hash.h>
#include <libpspp/assertion.h>
#include <libpspp/compiler.h>
#include <libpspp/hash.h>
-create_freq_hash_with_range (const struct dictionary *dict,
- struct casereader *input,
- const struct variable *var,
- double lo,
+create_freq_hash_with_range (const struct dictionary *dict,
+ struct casereader *input,
+ const struct variable *var,
+ double lo,
- struct hsh_table *freq_hash =
- hsh_create (4, compare_freq, hash_freq,
+ struct hsh_table *freq_hash =
+ hsh_create (4, compare_freq, hash_freq,
-create_freq_hash (const struct dictionary *dict,
- struct casereader *input,
+create_freq_hash (const struct dictionary *dict,
+ struct casereader *input,
- struct hsh_table *freq_hash =
- hsh_create (4, compare_freq, hash_freq,
+ struct hsh_table *freq_hash =
+ hsh_create (4, compare_freq, hash_freq,
fr->count = dict_get_case_weight (dict, &c, &warn);
existing_fr = (struct freq **) hsh_probe (freq_hash, fr);
fr->count = dict_get_case_weight (dict, &c, &warn);
existing_fr = (struct freq **) hsh_probe (freq_hash, fr);
-create_variable_frequency_table (const struct dictionary *dict,
- struct casereader *input,
- const struct chisquare_test *test,
- int v,
+create_variable_frequency_table (const struct dictionary *dict,
+ struct casereader *input,
+ const struct chisquare_test *test,
+ int v,
- " %d distinct values were encountered in variable %s."),
- test->n_expected, n_cells,
+ " %d distinct values were encountered in variable %s."),
+ test->n_expected, n_cells,
tab_text (table, 1, 0, TAB_LEFT, _("Observed N"));
tab_text (table, 2, 0, TAB_LEFT, _("Expected N"));
tab_text (table, 3, 0, TAB_LEFT, _("Residual"));
tab_text (table, 1, 0, TAB_LEFT, _("Observed N"));
tab_text (table, 2, 0, TAB_LEFT, _("Expected N"));
tab_text (table, 3, 0, TAB_LEFT, _("Residual"));
tab_headers (table, 1, 0, 1, 0);
tab_headers (table, 1, 0, 1, 0);
- tab_box (table, TAL_1, TAL_1, -1, -1,
+ tab_box (table, TAL_1, TAL_1, -1, -1,
0, 0, table->nc - 1, tab_nr(table) - 1 );
tab_hline (table, TAL_1, 0, tab_nc(table) - 1, 1);
tab_vline (table, TAL_2, 1, 0, tab_nr(table) - 1);
0, 0, table->nc - 1, tab_nr(table) - 1 );
tab_hline (table, TAL_1, 0, tab_nc(table) - 1, 1);
tab_vline (table, TAL_2, 1, 0, tab_nr(table) - 1);
tab_vline (table, TAL_1, i, 0, tab_nr(table) - 1);
tab_vline (table, TAL_1, i, 0, tab_nr(table) - 1);
tab_dim (table, tab_natural_dimensions);
tab_title (table, _("Frequencies"));
tab_dim (table, tab_natural_dimensions);
tab_title (table, _("Frequencies"));
{
const struct variable *var = ost->vars[i];
tab_text (table, i * 4 + 1, 1, TAB_LEFT, _("Category"));
{
const struct variable *var = ost->vars[i];
tab_text (table, i * 4 + 1, 1, TAB_LEFT, _("Category"));
tab_text (table, i * 4 + 3, 1, TAB_LEFT, _("Expected N"));
tab_text (table, i * 4 + 4, 1, TAB_LEFT, _("Residual"));
tab_text (table, i * 4 + 3, 1, TAB_LEFT, _("Expected N"));
tab_text (table, i * 4 + 4, 1, TAB_LEFT, _("Residual"));
- tab_vline (table, TAL_2, i * 4 + 1,
+ tab_vline (table, TAL_2, i * 4 + 1,
- tab_vline (table, TAL_1, i * 4 + 2,
+ tab_vline (table, TAL_1, i * 4 + 2,
- tab_vline (table, TAL_1, i * 4 + 3,
+ tab_vline (table, TAL_1, i * 4 + 3,
- tab_vline (table, TAL_1, i * 4 + 4,
+ tab_vline (table, TAL_1, i * 4 + 4,
- for ( i = test->lo ; i <= test->hi ; ++i )
- tab_float (table, 0, 2 + i - test->lo,
+ for ( i = test->lo ; i <= test->hi ; ++i )
+ tab_float (table, 0, 2 + i - test->lo,
TAB_LEFT, 1 + i - test->lo, 8, 0);
TAB_LEFT, 1 + i - test->lo, 8, 0);
tab_headers (table, 1, 0, 2, 0);
tab_headers (table, 1, 0, 2, 0);
- tab_box (table, TAL_1, TAL_1, -1, -1,
+ tab_box (table, TAL_1, TAL_1, -1, -1,
0, 0, table->nc - 1, tab_nr(table) - 1 );
tab_hline (table, TAL_1, 1, tab_nc(table) - 1, 1);
0, 0, table->nc - 1, tab_nr(table) - 1 );
tab_hline (table, TAL_1, 1, tab_nc(table) - 1, 1);
create_stats_table (const struct chisquare_test *test)
{
const struct one_sample_test *ost = (const struct one_sample_test*) test;
create_stats_table (const struct chisquare_test *test)
{
const struct one_sample_test *ost = (const struct one_sample_test*) test;
struct tab_table *table;
table = tab_create (1 + ost->n_vars, 4, 0);
tab_dim (table, tab_natural_dimensions);
struct tab_table *table;
table = tab_create (1 + ost->n_vars, 4, 0);
tab_dim (table, tab_natural_dimensions);
tab_vline (table, TAL_2, 1, 0, tab_nr (table) - 1);
tab_hline (table, TAL_1, 0, tab_nc (table) - 1, 1);
tab_vline (table, TAL_2, 1, 0, tab_nr (table) - 1);
tab_hline (table, TAL_1, 0, tab_nc (table) - 1, 1);
tab_text (table, 0, 1, TAB_LEFT, _("Chi-Square"));
tab_text (table, 0, 2, TAB_LEFT, _("df"));
tab_text (table, 0, 1, TAB_LEFT, _("Chi-Square"));
tab_text (table, 0, 2, TAB_LEFT, _("df"));
chisquare_execute (const struct dataset *ds,
struct casereader *input,
enum mv_class exclude,
chisquare_execute (const struct dataset *ds,
struct casereader *input,
enum mv_class exclude,
double *df = xzalloc (sizeof (*df) * ost->n_vars);
double *xsq = xzalloc (sizeof (*df) * ost->n_vars);
bool ok;
double *df = xzalloc (sizeof (*df) * ost->n_vars);
double *xsq = xzalloc (sizeof (*df) * ost->n_vars);
bool ok;
{
double total_obs = 0.0;
struct hsh_table *freq_hash = NULL;
struct casereader *reader =
casereader_create_filter_missing (casereader_clone (input),
&ost->vars[v], 1, exclude, NULL);
{
double total_obs = 0.0;
struct hsh_table *freq_hash = NULL;
struct casereader *reader =
casereader_create_filter_missing (casereader_clone (input),
&ost->vars[v], 1, exclude, NULL);
create_variable_frequency_table(dict, reader, cst, v, &freq_hash);
struct freq **ff;
create_variable_frequency_table(dict, reader, cst, v, &freq_hash);
struct freq **ff;
- tab_text (freq_table, 0, i + 1, TAB_LEFT,
- var_get_value_name (ost->vars[v], observed_value));
+ tab_text (freq_table, 0, i + 1, TAB_LEFT, ds_cstr (&str));
+ ds_destroy (&str);
+
/* The observed N */
tab_float (freq_table, 1, i + 1, TAB_NONE,
ff[i]->count, 8, 0);
if ( cst->n_expected > 0 )
/* The observed N */
tab_float (freq_table, 1, i + 1, TAB_NONE,
ff[i]->count, 8, 0);
if ( cst->n_expected > 0 )
tab_float (freq_table, 2, i + 1, TAB_NONE,
exp, 8, 2);
tab_float (freq_table, 2, i + 1, TAB_NONE,
exp, 8, 2);
{
double total_obs = 0.0;
struct casereader *reader =
casereader_create_filter_missing (casereader_clone (input),
&ost->vars[v], 1, exclude, NULL);
{
double total_obs = 0.0;
struct casereader *reader =
casereader_create_filter_missing (casereader_clone (input),
&ost->vars[v], 1, exclude, NULL);
create_freq_hash_with_range (dict, reader,
ost->vars[v], cst->lo, cst->hi);
create_freq_hash_with_range (dict, reader,
ost->vars[v], cst->lo, cst->hi);
- tab_text (freq_table, v * 4 + 1, i + 2 , TAB_LEFT,
- var_get_value_name (ost->vars[v], observed_value));
+ tab_text (freq_table, v * 4 + 1, i + 2 , TAB_LEFT,
+ ds_cstr (&str));
+ ds_destroy (&str);
/* The observed N */
tab_float (freq_table, v * 4 + 2, i + 2 , TAB_NONE,
ff[i]->count, 8, 0);
if ( cst->n_expected > 0 )
/* The observed N */
tab_float (freq_table, v * 4 + 2, i + 2 , TAB_NONE,
ff[i]->count, 8, 0);
if ( cst->n_expected > 0 )
/* The expected N */
tab_float (freq_table, v * 4 + 3, i + 2 , TAB_NONE,
/* The expected N */
tab_float (freq_table, v * 4 + 3, i + 2 , TAB_NONE,
tab_float (freq_table, v * 4 + 2, tab_nr (freq_table) - 1, TAB_NONE,
total_obs, 8, 0);
tab_float (freq_table, v * 4 + 2, tab_nr (freq_table) - 1, TAB_NONE,
total_obs, 8, 0);
tab_float (stats_table, 1 + v, 1, TAB_NONE, xsq[v], 8,3);
tab_float (stats_table, 1 + v, 2, TAB_NONE, df[v], 8,0);
tab_float (stats_table, 1 + v, 1, TAB_NONE, xsq[v], 8,3);
tab_float (stats_table, 1 + v, 2, TAB_NONE, df[v], 8,0);
- tab_float (stats_table, 1 + v, 3, TAB_NONE,
+ tab_float (stats_table, 1 + v, 3, TAB_NONE,
gsl_cdf_chisq_Q (xsq[v], df[v]), 8,3);
}
tab_submit (stats_table);
}
gsl_cdf_chisq_Q (xsq[v], df[v]), 8,3);
}
tab_submit (stats_table);
}