*! robvar -- Robust tests for the equality of variances *! version 1.0 Mario A. Cleves May 1995 sg35: STB-25 program define robvar version 3.1 local varlist "req ex min(1) max(1)" local if "opt" local in "opt" local options "By(string)" parse "`*'" if "`by'"=="" { error 198 } conf var `by' parse "`varlist'", parse(" ") tempvar x g gen `x'= `1' `if' `in' gen `g'= `by' `if' `in' qui { tempvar xbar zij zbari zbarp ni den ng sd s num nums w0 p w50 p10 p90 m10 nm10 w10 df1 df2 egen `xbar'=mean(`x'),by(`g') gen `zij'=abs(`x'-`xbar') egen `zbari'=mean(`zij'),by(`g') egen `zbarp'=mean(`zij') egen `ni'=count(`x'),by(`g') gen `den'=`ni'*((`zbari'-`zbarp')^2) sort `g' by `g':gen `s' =`den' if _n==1 egen `ng' =count(`s') egen `sd' =sum(`s') replace `den'=`sd' /(`ng' -1) gen `num'=(`zij'-`zbarp')^2 egen `nums' =sum(`num') drop `num' tempvar num rename `nums' `num' replace `num'=`num'/(_N-`ng' ) gen `w0'=`den'/`num' gen `p'=fprob((`ng' -1),(_N-`ng' ),`w0') gen `df1'=`ng'-1 gen `df2'=_N-`ng' noi tab `by',sum(`1') noi di " " noi di in gr "W0= " in ye `w0[1]' in gr " df(" in ye `df1' ", " `df2' in gr ") "" Pr > F = " in ye `p[1]' drop `xbar'-`df2' egen `xbar'=median(`x'),by(`g') gen `zij'=abs(`x'-`xbar') egen `zbari'=mean(`zij'),by(`g') egen `zbarp'=mean(`zij') egen `ni'=count(`x'),by(`g') gen `den'=`ni'*((`zbari'-`zbarp')^2) sort `g' by `g':gen `s' =`den' if _n==1 egen `ng' =count(`s') egen `sd' =sum(`s') replace `den'=`sd' /(`ng' -1) drop `s' `sd' gen `num'=(`zij'-`zbarp')^2 egen `nums' =sum(`num') drop `num' tempvar num rename `nums' `num' replace `num'=`num'/(_N-`ng' ) gen `w50'=`den'/`num' gen `p'=fprob((`ng' -1),(_N-`ng' ),`w50') gen `df1'=`ng'-1 gen `df2'=_N-`ng' noi di " " noi di in gr "W50= " in ye `w50[1]' in gr " df(" in ye `df1' ", " `df2' in gr ") "" Pr > F = " in ye `p[1]' drop `xbar'-`df2' egen `p10'=pctile(`x'),p(10) by(`g') egen `p90'=pctile(`x'),p(90) by(`g') egen `m10'=mean(`x') if `x'>=`p10' & `x'<=`p90',by(`g') egen `nm10'=min(`m10'),by(`g') drop `m10' rename `nm10' `xbar' gen `zij'=abs(`x'-`xbar') egen `zbari'=mean(`zij'),by(`g') egen `zbarp'=mean(`zij') egen `ni'=count(`x'),by(`g') gen `den'=`ni'*((`zbari'-`zbarp')^2) sort `g' by `g':gen `s' =`den' if _n==1 egen `ng' =count(`s') egen `sd' =sum(`s') replace `den'=`sd' /(`ng' -1) drop `s' `sd' gen `num' =(`zij'-`zbarp')^2 egen `nums' =sum(`num') drop `num' tempvar num rename `nums' `num' replace `num'=`num'/(_N-`ng' ) gen `w10'=`den'/`num' gen `p'=fprob((`ng' -1),(_N-`ng' ),`w10') gen `df1'=`ng'-1 gen `df2'=_N-`ng' noi di " " noi di in gr "W10= " in ye `w10[1]' in gr " df(" in ye `df1' ", " `df2' in gr ") "" Pr > F = " in ye `p[1]' drop `xbar'-`df2' } end