***********************************************************************; * Version 3.3 October, 2001 *; ***********************************************************************; START _UNIREP_(U, _ECODE_,_EPSL_,_OPT_,_PARM_, _H_,_E_,_NROWC_,_NCOLU_,_THCNM_, _URESUL_,_UCOLNM_,_UROWNM_); *___________________________________________________________________* Code to compute univariate repeated measures tests Presumes results from TESTGLH unchanged. By default, U must be such that U = K # ( orthonormal matrix ). Here K is any nonzero constant. This is equivalent to requiring that the inner product of U is I(NCOL(U))#(K##2). If K=1, of course, U is orthonormal. The test typically is a multivariate repeated measures test, involving at least one repeated *Inputs U, _ECODE_,_EPSL_,_OPT_,_PARM_, _H_,_E_,_NROWC_,_NCOLU_,_THCNM_, Outputs _URESUL_,_UCOLNM_,_UROWNM_ *___________________________________________________________________*; _ECODE_ (| 6 , 1 |) = 0; IF (_OPT_(|1,5|)=0)&(_OPT_(|1,6|)=0) THEN PRINT "**************************************" , "** BEGIN UNIREP **" , "**************************************" ; IF _ECODE_(| 5 , 1 |) > 0 THEN DO; IF _OPT_(|1,6|)=0 THEN PRINT "No UNIREP tests due to previous error in TESTGLH" ; _ECODE_(|6,1|)=1001; RETURN; END; IF (NROW(_H_)=0) | (NROW(_E_)=0) THEN DO; NOTEU_1={"UNIREP terminating due to _H_ or _E_ undefined"}; IF _OPT_(|1,6|)=0 THEN PRINT ,, NOTEU_1, ; _ECODE_(|6,1|)=1002; RETURN; END; _NROWU_=NROW(U); IF _NROWU_=0 THEN DO; *U=I; IF _OPT_(|6,3|)&(_OPT_(|1,6|)=0) THEN IF _OPT_(|6,4|) THEN PRINT "Warning: UNIREP test forced with U=I"; ELSE PRINT "No UNIREP test if U=I and UNIFORC off"; IF _OPT_(|6,4|) THEN ; ELSE RETURN; END; IF _NROWU_>0 THEN DO; *U^=I; IF _NCOLU_>=_NROWU_ THEN DO; IF _OPT_(|6,3|)&(_OPT_(|1,6|)=0) THEN IF _OPT_(|6,4|) THEN PRINT "Warning: UNIREP test forced with ncol(U)>=nrow(U)"; ELSE PRINT "No UNIREP test if ncol(U)>=nrow(U) and UNIFORC off"; IF _OPT_(|6,4|) THEN ; ELSE RETURN; END; _UPUSCA_ = U` * U; IF _UPUSCA_(|1,1|)>_EPSL_ THEN _UPUSCA_=_UPUSCA_/_UPUSCA_(|1,1|); _UDIF_ = ABS( _UPUSCA_ - I( NCOL( U ))); IF MAX(_UDIF_)>SQRT(_EPSL_) THEN DO; IF _OPT_(|6,3|)&(_OPT_(|1,6|)=0) THEN PRINT ,, "U not proportional to an orthonormal matrix. " , "Due either to programming error or to numerical inaccuracy." , "Try using UTRENDS, UPOLY1, or UPOLY2 (Ch 8, LINMOD manual)." , "Inner product not K # I(NCOL(U)), for a nonzero constant K." , "Inner product scaled so (1, 1) element = 1.0 (unless=0) is:" , _UPUSCA_ (|COLNAME=_THCNM_ ROWNAME=_THCNM_ &_FMT2_|) ; IF _OPT_(|6,4|)=0 THEN DO; IF _OPT_(|6,3|)&(_OPT_(|1,6|)=0) THEN PRINT "No UNIREP tests"; RETURN; END; END; END; _TRCE_ = TRACE( _E_ ); _TRCH_ = TRACE( _H_ ); _UDF1_ = _NROWC_ # _NCOLU_; _UDF2_ = _NCOLU_ # ( _PARM_(| 1 , 1 |) - _PARM_(| 1 , 3 |) ); _UFOBS_ = ( _TRCH_ / _UDF1_ ) / ( _TRCE_ / _UDF2_ ); _TRCE2_ = TRACE(_E_*_E_); _EPSHAT_ = ( _TRCE_ # _TRCE_ ) / ( _NCOLU_ # _TRCE2_ ); _GDF1_ =_UDF1_ # _EPSHAT_; _GDF2_ =_UDF2_ # _EPSHAT_; _EPSTIL_=( _PARM_(|1,1|)#_NCOLU_#_EPSHAT_ - 2 ) / (_NCOLU_#(_PARM_(|1,1|)-_PARM_(|1,3|)-_NCOLU_#_EPSHAT_) ); IF _EPSTIL_>1 THEN _EPSTIL_=1; _HDF1_ =_UDF1_ # _EPSTIL_; _HDF2_ =_UDF2_ # _EPSTIL_; _BDF1_= _UDF1_/_NCOLU_; _BDF2_= _UDF2_/_NCOLU_; _UBOXP_ = {1} - PROBF(_UFOBS_, _BDF1_ , _BDF2_ ); _UGGP_ = {1} - PROBF(_UFOBS_, _GDF1_ , _GDF2_ ); _UHFP_ = {1} - PROBF(_UFOBS_, _HDF1_ , _HDF2_ ); _UUNP_ = {1} - PROBF(_UFOBS_, _UDF1_ , _UDF2_ ); _UCOLNM_ = { "F" "DF Numer" "DF Denom" "epslnHat" "p Value" }; _UROWNM_ = { "Box" "GsrGrnh" "HynhFldt" "Uncrrctd" }; _URESUL_= (_UFOBS_||_BDF1_||_BDF2_||({1}/_NCOLU_)||_UBOXP_) // (_UFOBS_||_GDF1_||_GDF2_||_EPSHAT_ ||_UGGP_ ) // (_UFOBS_||_HDF1_||_HDF2_||_EPSTIL_ ||_UHFP_ ) // (_UFOBS_||_UDF1_||_UDF2_|| {1} ||_UUNP_ ) ; IF _OPT_(|6,2|)&(_OPT_(|1,6|)=0) THEN PRINT , "Univariate Repeated Measures Tests" , _URESUL_ (| COLNAME=_UCOLNM_ ROWNAME=_UROWNM_ &_FMT4_|); FINISH _UNIREP_;