$SUBFILE UEP! ! !---------------------------------------------------------------- ! Author: Elmar Weixlbaumer, Vienna, April 1995 ! Version 1.0 for GLIM 4.00 ! Main macros: ! UEP Calculates the number of inestimable parameters of a sparse ! complete contingency table with no condition on marginal sums. ! Formal arguments: %1 The name of the variate ! %2 The name of the list of factors ! Output: The number of inestimable parameters in each ! configuration,the number of cells, zeros, the factors, ! inestimable and linearly independend parameters in the ! saturated model. ! ! Example of use: $ass y=1 2 3 0 0 0 7 8 $ ! $gfac 8 a 2 b 2 c 2 $list list=a+b+c $ ! $use uep y list $ !------------------------------------------------------------- ! $PRI ;'********** Macro UEP has been loaded ***********';$ ! $MAC UEP! $INP 'uep.mac' macros$! $WAR OFF! $PRI '*** Calculation of inestimable parameters in sparse tables' ' ***' $PRI '*** Written by Elmar Weixlbaumer, Vienna, 1995 ***' $TID TMPL1 TMPLN1 $DEL y_ LIST_ llist ly zs za z $DEL SUBSET param TMPL2 TMPL3 v1 v2 $NUM zs za z llist param ly $! $CAL ly=%len(%1) : llist=%len(%2) : param=ly : %a=%if(%a2,0,1) $! $FAU %a ' Wrong usage, correct: use UEP variate LIST ' $! $CAL %a=%if(%typ(%1)==11,0,1)$! $FAU %a ' Wrong usage, correct: use UEP variate LIST ' $! $CAL %a=%if(%typ(%2)==39,0,1)$! $FAU %a ' Wrong usage, correct: use UEP variate LIST ' $! $CAL %a=%cu(%1>0) : %a=(%a==0)$! $FAU %a ' The table contains only zeros. ' $! $CAL %z=%cu(%1==0) : %a=(%z==0)$! $FAU %a ' The table doesn`t contain zeros. '$! $PRI ; ' Inestimable parameters in configuration' $! $PRI '-----------------------------------------' $! $VAR ly y_$ $LIS LIST_=%2 $! $CAL y_=%1 : %n=llist $! $WHI %n loop9 $! $PRI ;'Number of cells in ' *n %1 ': ' *i ly ; 'Factors in ' *n %2 ': { ' %2 ' }'; 'Number of zeros: ' *i %z ; 'Linearly independent parameters in the saturated model: ' *i param $! $CAL param=ly-param$! $PRI 'Inestimable parameters in the saturated model: ' ! *i param ; $! $TID TMPL1 TMPLN1 $! $DEL y_ LIST_ llist ly zs za z $! $DEL SUBSET param TMPL2 TMPL3 v1 v2 $! $DEL UEP CALC LOOP1 LOOP2 LOOP3 LOOP4 LOOP5 LOOP6 LOOP7 LOOP8$! $DEL LOOP9 LOOP10 LOOP11 LOOP12 PRTPARAM$! $END! $RETURN! ! !---------------------- Main calculation --------------------- ! $SUBFILE macros! ! $MAC calc! $CAL zs=0 : z=0 : %b=%len(SUBSET) $! $LIS %b TMPL1 $LIS %b TMPLN1 $! $TAB the y_ total for SUBSET into v2 by TMPL1 $! $CAL %a=%cu(v2==0) : %c=%len(v2)*(%a>0) $! $WHI %c loop1 $! $CAL %q=1 : %s=(%a>0) :%t=%len(SUBSET) $! $WHI %s loop6 $! $CAL za=z-zs : %y=(za>0) $! $SWI %y prtparam$! $CAL param=param-za $! $TID TMPL1 TMPLN1 $DEL v2 TMPL2 v1 $! $END! ! !----------------- Calculation of seed zeros ----------------- ! $MAC loop1 ! $CAL %d=(v2(%c)==0) $SWI %d loop2 $CAL %c=%c-1$! $END! ! $MAC loop2 ! $CAL %e=%b $WHI %e loop3 $! $CAL %e=%b : %h=1 $WHI %e loop4 $! $CAL zs=zs+(%h>0) $! $END! ! $MAC loop3 ! $NUM TMPLN1[%e] $CAL TMPLN1[%e]=TMPL1[%e](%c) : %e=%e-1 $! $END! ! $MAC loop4 ! $LIS TMPL2=SUBSET-SUBSET[%e] : TMPN2=TMPLN1-TMPLN1[%e] $! $CAL v1=y_ : %f=%b-1 $WHI %f loop5 $! $CAL %g=%cu(v1) : %h=%h*%g : %e=%e-1$! $END! ! $MAC loop5 ! $CAL v1=v1*(TMPL2[%f]==tmpn2[%f]) : %f=%f-1 $! $END! ! !----------------------- Calculation of z ------------------ ! $MAC loop6 ! $DEL TMPL3 $LIS TMPL3 $! $CAL %r=%t : %u=%q $WHI %r loop7 $! $DEL v2 $! $TAB the y_ total for TMPL3 into v2 $! $CAL %v=%cu(v2==0) : %v=(-1)**(%t-(%len(TMPL3)))*%v $! $CAL z=z+%v :%q=%q+1 : %s=(%q/=2**%t) $! $END! ! $MAC loop7 ! $CAL %p=%tr(%u/(2**(%r-1)))$! $SWI %p loop8 $CAL %r=%r-1 $! $END! ! $MAC loop8 ! $CAL %u=%u-2**(%r-1) $LIS TMPL3=TMPL3+SUBSET[%r] $! $END ! ! ------------------- Calculation of subsets -------------- ! $MAC loop9 ! $CAL %o=1 : %k=1 $WHI %k loop10 $CAL %n=(%n-1) $! $END! ! $MAC loop10 ! $DEL SUBSET $LIS SUBSET $! $CAL %j=llist : %l=%o $WHI %j loop11 $! $CAL %m=%if(%len(SUBSET)==%n,1,0) $! $SWI %m calc $! $CAL %o=%o+1 : %k=(%o/=2**llist) $! $END! ! $MAC loop11 ! $CAL %i=%tr(%l/(2**(%j-1))) $SWI %i loop12 $CAL %j=%j-1 $! $END! ! $MAC loop12 ! $CAL %l=%l-2**(%j-1) $LIS SUBSET=SUBSET+LIST_[%j] $! $END! ! !---------------------------- Output------------------------- ! $MAC prtparam ! $PRI ' ' *i za,3 ' ' SUBSET $! $END! ! $RETURN $finish