You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- 02111-1307, USA. */
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA. */
#include <config.h>
#include "levene.h"
#include "error.h"
#include "case.h"
#include "casefile.h"
+#include "dictionary.h"
+#include "group_proc.h"
#include "hash.h"
#include "str.h"
#include "var.h"
enum lev_missing missing;
/* Function to test for missing values */
- is_missing_func is_missing;
-
+ is_missing_func *is_missing;
};
/* First pass */
for(i = 0; i < l->n_dep ; ++i )
{
struct variable *var = l->v_dep[i];
+ struct group_proc *gp = group_proc_get (var);
struct group_statistics *gs;
struct hsh_iterator hi;
lz[i].grand_total = 0;
lz[i].total_n = 0;
- lz[i].n_groups = var->p.grp_data.n_groups ;
+ lz[i].n_groups = gp->n_groups ;
- for ( gs = hsh_first(var->p.grp_data.group_hash, &hi);
+ for ( gs = hsh_first(gp->group_hash, &hi);
gs != 0;
- gs = hsh_next(var->p.grp_data.group_hash, &hi))
+ gs = hsh_next(gp->group_hash, &hi))
{
gs->lz_total = 0;
}
struct variable *v = l->v_dep[i];
const union value *val = case_data (c, v->fv);
- if (l->is_missing(val,v) )
+ if (l->is_missing (&v->miss, val) )
{
return 0;
}
for (i = 0; i < l->n_dep; ++i)
{
struct variable *var = l->v_dep[i];
+ struct group_proc *gp = group_proc_get (var);
double levene_z;
const union value *v = case_data (c, var->fv);
struct group_statistics *gs;
- gs = hsh_find(var->p.grp_data.group_hash,(void *) &key );
+ gs = hsh_find(gp->group_hash,(void *) &key );
if ( 0 == gs )
continue ;
- if ( ! l->is_missing(v,var))
+ if ( ! l->is_missing(&var->miss, v))
{
levene_z= fabs(v->f - gs->mean);
lz[i].grand_total += levene_z * weight;
struct group_statistics *g;
struct variable *var = l->v_dep[v] ;
- struct hsh_table *hash = var->p.grp_data.group_hash;
+ struct hsh_table *hash = group_proc_get (var)->group_hash;
for(g = (struct group_statistics *) hsh_first(hash,&hi);
struct variable *v = l->v_dep[i];
const union value *val = case_data (c, v->fv);
- if (l->is_missing(val,v) )
+ if (l->is_missing(&v->miss, val) )
{
return 0;
}
const union value *v = case_data (c, var->fv);
struct group_statistics *gs;
- gs = hsh_find(var->p.grp_data.group_hash,(void *) &key );
+ gs = hsh_find(group_proc_get (var)->group_hash,(void *) &key );
if ( 0 == gs )
continue;
- if ( ! l->is_missing(v,var) )
+ if ( ! l->is_missing (&var->miss, v) )
{
levene_z = fabs(v->f - gs->mean);
lz_denominator[i] += weight * pow2(levene_z - gs->lz_mean);
struct group_statistics *g;
struct variable *var = l->v_dep[v] ;
- struct hsh_table *hash = var->p.grp_data.group_hash;
+ struct group_proc *gp = group_proc_get (var);
+ struct hsh_table *hash = gp->group_hash;
for(g = (struct group_statistics *) hsh_first(hash,&hi);
g != 0 ;
{
lz_numerator += g->n * pow2(g->lz_mean - lz[v].grand_mean );
}
- lz_numerator *= ( l->v_dep[v]->p.grp_data.ugs.n -
- l->v_dep[v]->p.grp_data.n_groups );
+ lz_numerator *= ( gp->ugs.n - gp->n_groups );
- lz_denominator[v] *= (l->v_dep[v]->p.grp_data.n_groups - 1);
+ lz_denominator[v] *= (gp->n_groups - 1);
- l->v_dep[v]->p.grp_data.levene = lz_numerator / lz_denominator[v] ;
+ gp->levene = lz_numerator / lz_denominator[v] ;
}