*! version 1.0.0 20 August 1993 sg43: STB-28 program define obrien version 3.0 local varlist "req ex max(1)" local if "opt" local in "opt" local options "By(string)" parse "`*'" parse "`varlist'", parse(" ") confirm var `by' quietly tab `by' `if' `in' if _result(2)!=2 { di in red "`by' takes on " _result(2) " values, not 2" exit 450 } quietly { tempvar SQ pqols p1ols p2ols pqlogit p1logit new newsq pqrs p1rs p2rs nv egen `nv'=group(`by') replace `nv'=`nv'-1 gen `SQ'=`varlist'^2 fit `by' `varlist' `SQ' `if' `in' scalar `pqols'=tprob(_result(5),_b[`SQ']/_se[`SQ']) test `varlist' `SQ' scalar `p1ols'=fprob(_result(3),_result(5),_result(6)) fit `by' `varlist' `if' `in' scalar `p2ols'=tprob(_result(5),_b[`varlist']/_se[`varlist']) logistic `nv' `varlist' `SQ' `if' `in' scalar `pqlogit'=2*(1-normprob(abs(_b[`SQ']/_se[`SQ']))) test `varlist' `SQ' scalar `p1logit'=chiprob(_result(3),_result(6)) logistic `nv' `varlist' `if' `in' egen `new'=rank(`varlist') `if' `in' gen `newsq'=`new'^2 fit `by' `new' `newsq' `if' `in' scalar `pqrs'=tprob(_result(5),_b[`newsq']/_se[`newsq']) test `new' `newsq' scalar `p1rs'=fprob(_result(3),_result(5),_result(6)) fit `by' `new' `if' `in' scalar `p2rs'=tprob(_result(5),_b[`new']/_se[`new']) } di "p-values for generalized-t and generalized ranksum" di " t:by OLS t:by logistic ranksum" di "quadratic term: "%6.4f _skip(9) `pqols' _skip(7) %6.4f `pqlogit' /* */ _skip(8) %6.4f `pqrs' di "generalize (no adj.):" _skip(4) %6.4f `p1ols' _skip(7) %6.4f `p1logit' /* */ _skip(8) %6.4f `p1rs' di "generalize (adj.):" _skip(7) %6.4f min(`p1ols'*1.45,1.00) /* */ _skip(7) %6.4f min(`p1logit'*1.45,1.00) _skip(8) %6.4f min(`p1rs'*1.45,1.00) di "standard:" _skip(16) %6.4f `p2ols' _skip(21) %6.4f `p2rs' end