static is_missing_func value_is_missing;
-static void calculate(const struct casefile *cf, void *_mode);
+static void run_oneway(const struct casefile *cf, void *_mode);
/* Routines to show the output tables */
static void show_anova_table(void);
static void show_descriptives(void);
static void show_homogeneity(void);
-static void show_contrast_coeffs(void);
-static void show_contrast_tests(void);
+
+static void show_contrast_coeffs(short *);
+static void show_contrast_tests(short *);
enum stat_table_t {STAT_DESC = 1, STAT_HOMO = 2};
static enum stat_table_t stat_tables ;
+void output_oneway(void);
+
int
cmd_oneway(void)
}
}
- multipass_procedure_with_splits (calculate, &cmd);
+ multipass_procedure_with_splits (run_oneway, &cmd);
+
+
+ return CMD_SUCCESS;
+}
+
+
+void
+output_oneway(void)
+{
+
+ int i;
+ short *bad_contrast ;
+
+ bad_contrast = xmalloc ( sizeof (short) * cmd.sbc_contrast );
/* Check the sanity of the given contrast values */
for (i = 0 ; i < cmd.sbc_contrast ; ++i )
int j;
double sum = 0;
+ bad_contrast[i] = 0;
if ( subc_list_double_count(&cmd.dl_contrast[i]) !=
ostensible_number_of_groups )
{
- msg(SE,
+ msg(SW,
_("Number of contrast coefficients must equal the number of groups"));
- return CMD_FAILURE;
+ bad_contrast[i] = 1;
+ continue;
}
for (j=0; j < ostensible_number_of_groups ; ++j )
show_anova_table();
- if (cmd.sbc_contrast)
+ if (cmd.sbc_contrast )
{
- show_contrast_coeffs();
- show_contrast_tests();
+ show_contrast_coeffs(bad_contrast);
+ show_contrast_tests(bad_contrast);
}
+ free(bad_contrast);
+
/* Clean up */
for (i = 0 ; i < n_vars ; ++i )
{
hsh_destroy(global_group_hash);
- return CMD_SUCCESS;
}
-
/* Parser for the variables sub command */
static int
oneway_custom_variables(struct cmd_oneway *cmd UNUSED)
/* Show the contrast coefficients table */
static void
-show_contrast_coeffs(void)
+show_contrast_coeffs(short *bad_contrast)
{
char *s;
int n_cols = 2 + ostensible_number_of_groups;
int i;
char *lab;
+
lab = val_labs_find(indep_var->val_labs,*group_value);
if ( lab )
for (i = 0 ; i < cmd.sbc_contrast ; ++i )
{
+
tab_text(t, 1, i + 2, TAB_CENTER | TAT_PRINTF, "%d", i + 1);
- tab_text(t, count + 2, i + 2, TAB_RIGHT | TAT_PRINTF, "%g",
- subc_list_double_at(&cmd.dl_contrast[i],count)
- );
+
+ if ( bad_contrast[i] )
+ tab_text(t, count + 2, i + 2, TAB_RIGHT, "?" );
+ else
+ tab_text(t, count + 2, i + 2, TAB_RIGHT | TAT_PRINTF, "%g",
+ subc_list_double_at(&cmd.dl_contrast[i],count)
+ );
}
count++ ;
/* Show the results of the contrast tests */
static void
-show_contrast_tests(void)
+show_contrast_tests(short *bad_contrast)
{
int v;
int n_cols = 8;
tab_text (t, 2, (v * lines_per_variable) + i + 1 + cmd.sbc_contrast,
TAB_CENTER | TAT_TITLE | TAT_PRINTF, "%d",i+1);
+
+ if ( bad_contrast[i])
+ continue;
+
/* FIXME: Potential danger here.
We're ASSUMING THE array is in the order corresponding to the
hash order. */
}
sec_vneq = sqrt(sec_vneq);
-
df_numerator = pow2(df_numerator);
-
tab_float (t, 3, (v * lines_per_variable) + i + 1,
TAB_RIGHT, contrast_value, 8,2);
- tab_float (t, 3, (v * lines_per_variable) + i + 1 + cmd.sbc_contrast,
+ tab_float (t, 3, (v * lines_per_variable) + i + 1 +
+ cmd.sbc_contrast,
TAB_RIGHT, contrast_value, 8,2);
-
std_error_contrast = sqrt(vars[v]->p.grp_data.mse * coef_msq);
/* Std. Error */
static void
-calculate(const struct casefile *cf, void *cmd_)
+run_oneway(const struct casefile *cf, void *cmd_)
{
struct casereader *r;
struct ccase c;
ostensible_number_of_groups = hsh_count (global_group_hash);
+
+ output_oneway();
+
+
}
--- /dev/null
+#!/bin/sh
+
+# This program tests that the ONEWAY anova command works OK
+# when SPLIT FILE is active
+
+TEMPDIR=/tmp/pspp-tst-$$
+
+here=`pwd`;
+
+# ensure that top_srcdir is absolute
+cd $top_srcdir; top_srcdir=`pwd`
+
+export STAT_CONFIG_PATH=$top_srcdir/config
+
+
+cleanup()
+{
+ rm -rf $TEMPDIR
+}
+
+
+fail()
+{
+ echo $activity
+ echo FAILED
+ cleanup;
+ exit 1;
+}
+
+
+no_result()
+{
+ echo $activity
+ echo NO RESULT;
+ cleanup;
+ exit 2;
+}
+
+pass()
+{
+ cleanup;
+ exit 0;
+}
+
+mkdir -p $TEMPDIR
+
+cd $TEMPDIR
+
+activity="create program"
+cat > $TEMPDIR/out.stat <<EOF
+DATA LIST LIST /quality * brand * s *.
+BEGIN DATA
+3 1 1
+2 1 1
+1 1 1
+1 1 1
+4 1 1
+5 2 1
+2 2 1
+4 2 2
+2 2 2
+3 2 2
+7 3 2
+4 3 2
+5 3 2
+3 3 2
+6 3 2
+END DATA
+
+VARIABLE LABELS brand 'Manufacturer'.
+VARIABLE LABELS quality 'Breaking Strain'.
+
+VALUE LABELS /brand 1 'Aspeger' 2 'Bloggs' 3 'Charlies'.
+
+SPLIT FILE by s.
+
+ONEWAY
+ quality BY brand
+ /STATISTICS descriptives homogeneity
+ /CONTRASTS = -2 2
+ /CONTRASTS = -1 1
+ .
+EOF
+if [ $? -ne 0 ] ; then no_result ; fi
+
+
+activity="run program"
+$SUPERVISOR $here/../src/pspp -o raw-ascii $TEMPDIR/out.stat
+if [ $? -ne 0 ] ; then no_result ; fi
+
+diff $TEMPDIR/pspp.list - << EOF
+1.1 DATA LIST. Reading free-form data from the command file.
++--------+------+
+|Variable|Format|
+#========#======#
+|QUALITY |F8.0 |
+|BRAND |F8.0 |
+|S |F8.0 |
++--------+------+
+
+Variable Value Label
+S 1.00
+
+2.1 ONEWAY. Descriptives
+#===============#=======#=#====#==============#==========#=======================#=======#=======#
+# | # | | | | 95% Confidence | | #
+# | # | | | +-----------+-----------+ | #
+# | #N|Mean|Std. Deviation|Std. Error|Lower Bound|Upper Bound|Minimum|Maximum#
+#===============#=======#=#====#==============#==========#===========#===========#=======#=======#
+#Breaking Strain|Aspeger#5|2.20| 1.30| .58| .58| 3.82| 1.00| 4.00#
+# |Bloggs #2|3.50| 2.12| 1.50| -15.56| 22.56| 2.00| 5.00#
+# |Total #7|2.57| 1.51| .57| 1.17| 3.97| 1.00| 5.00#
+#===============#=======#=#====#==============#==========#===========#===========#=======#=======#
+
+2.2 ONEWAY. Test of Homogeneity of Variances
+#===============#================#===#===#============#
+# #Levene Statistic|df1|df2|Significance#
+#===============#================#===#===#============#
+#Breaking Strain# 1.086| 1| 5| .345#
+#===============#================#===#===#============#
+
+2.3 ONEWAY. ANOVA
+#==============================#==============#==#===========#=====#============#
+# #Sum of Squares|df|Mean Square| F |Significance#
+#===============#==============#==============#==#===========#=====#============#
+#Breaking Strain|Between Groups# 2.41| 1| 2.414|1.068| .349#
+# |Within Groups # 11.30| 5| 2.260| | #
+# |Total # 13.71| 6| | | #
+#===============#==============#==============#==#===========#=====#============#
+
+2.4 ONEWAY. Contrast Coefficients
+#==========#==============#
+# # Manufacturer #
+# #-------+------#
+# #Aspeger|Bloggs#
+#========#=#=======#======#
+#Contrast|1# -2| 2#
+# |2# -1| 1#
+#========#=#=======#======#
+
+2.5 ONEWAY. Contrast Tests
+#===============================================#=================#==========#=====#=====#===============#
+# Contrast#Value of Contrast|Std. Error| t | df |Sig. (2-tailed)#
+#===============#======================#========#=================#==========#=====#=====#===============#
+#Breaking Strain|Assume equal variances| 1 # 2.60| 2.516|1.034| 5| .349#
+# | | 2 # 1.30| 1.258|1.034| 5| .349#
+# |Does not assume equal | 1 # 2.60| 3.219| .808|1.318| .539#
+# | | 2 # 1.30| 1.609| .808|1.318| .539#
+#===============#======================#========#=================#==========#=====#=====#===============#
+
+Variable Value Label
+S 2.00
+
+2.6 ONEWAY. Descriptives
+#===============#========#=#====#==============#==========#=======================#=======#=======#
+# | # | | | | 95% Confidence | | #
+# | # | | | +-----------+-----------+ | #
+# | #N|Mean|Std. Deviation|Std. Error|Lower Bound|Upper Bound|Minimum|Maximum#
+#===============#========#=#====#==============#==========#===========#===========#=======#=======#
+#Breaking Strain|Bloggs #3|3.00| 1.00| .58| .52| 5.48| 2.00| 4.00#
+# |Charlies#5|5.00| 1.58| .71| 3.04| 6.96| 3.00| 7.00#
+# |Total #8|4.25| 1.67| .59| 2.85| 5.65| 2.00| 7.00#
+#===============#========#=#====#==============#==========#===========#===========#=======#=======#
+
+2.7 ONEWAY. Test of Homogeneity of Variances
+#===============#================#===#===#============#
+# #Levene Statistic|df1|df2|Significance#
+#===============#================#===#===#============#
+#Breaking Strain# 2.199| 1| 6| .189#
+#===============#================#===#===#============#
+
+2.8 ONEWAY. ANOVA
+#==============================#==============#==#===========#=====#============#
+# #Sum of Squares|df|Mean Square| F |Significance#
+#===============#==============#==============#==#===========#=====#============#
+#Breaking Strain|Between Groups# 7.50| 1| 7.500|3.750| .101#
+# |Within Groups # 12.00| 6| 2.000| | #
+# |Total # 19.50| 7| | | #
+#===============#==============#==============#==#===========#=====#============#
+
+2.9 ONEWAY. Contrast Coefficients
+#==========#===============#
+# # Manufacturer #
+# #------+--------#
+# #Bloggs|Charlies#
+#========#=#======#========#
+#Contrast|1# -2| 2#
+# |2# -1| 1#
+#========#=#======#========#
+
+2.10 ONEWAY. Contrast Tests
+#===============================================#=================#==========#=====#=====#===============#
+# Contrast#Value of Contrast|Std. Error| t | df |Sig. (2-tailed)#
+#===============#======================#========#=================#==========#=====#=====#===============#
+#Breaking Strain|Assume equal variances| 1 # 4.00| 2.066|1.936| 6| .101#
+# | | 2 # 2.00| 1.033|1.936| 6| .101#
+# |Does not assume equal | 1 # 4.00| 1.826|2.191|5.882| .072#
+# | | 2 # 2.00| .913|2.191|5.882| .072#
+#===============#======================#========#=================#==========#=====#=====#===============#
+
+EOF
+if [ $? -ne 0 ] ; then fail ; fi
+
+pass