*! sdpair.ado 1.00 by PTS (p.seed@umds.ac.uk)  (STB-55: sbe33)
*! Based on Pitman (1939) Biometrika 31: 9
*! as in Snedecor & Cochran (1967) "Statistical methods (6th ed)" (Iowas State UP)

prog define sdpair

	version 5.0
	local varlist " req ex min(2) max(2)"
	local if "opt"
	local in "opt"
	local weight "fweight aweight"
	local options "format(string) Level(real 100)"
	parse "`*'"

	tempvar touse sum diff
	mark `touse' `if' `in'
	markout `touse' `varlist'
	if "`format'" == "" { local format "%6.4f" }
	if `level' == 100 { local level = $S_level }
	if `level' > 1 { local level = `level' /100 }

	parse "`varlist'", parse(" ")

	qui summ `1' if `touse' [`weight'`exp']
	tempname var1 n df var2 F r t p K lcb ucb
	scalar `var1' = _result(4)
	scalar `n' = _result(2)
	scalar `df' = `n' - 2

	qui summ `2' if `touse' [`weight'`exp']

	scalar `var2' = _result(4)

	scalar `F' = `var1'/`var2'

	qui corr `varlist' if `touse' [`weight'`exp']
	scalar `r' = _result(4)

	scalar `t' = ((`F'-1)/2)*( (`df')/ ((1-`r'*`r')*`F') )^.5

* Note: under the null hypothesis, phi = 1
*	di "t = |" `t' "|"

	scalar `p' = tprob(`df', `t')


	scalar `K' = 1 + 2*(1-`r'*`r')*invt(`df', `level')^2/(`df')

	scalar `lcb' = `F' * (`K' - (`K'*`K'-1)^.5)

	scalar `ucb' = `F' * (`K' + (`K'*`K'-1)^.5)

	local label1 : variable label `1'
	if "`label1'" == "" {local label1 `1' }
	local label2 : variable label `2'
	if "`label2'" == "" {local label2 `2' }


	zap_s
	global S_1 = `n'
	global S_2 = `t'
	global S_3 = `df'
	global S_4 = `p'
	global S_5 = `F'^.5
	global S_6 = `lcb'^.5
	global S_7 = `ucb'^.5



	di in gr _n(2) "Pitman's variance ratio test between `label1' and `label2': "
	di in gr _n "Ratio of Standard deviations = " in ye `format' `F'^.5,  "
	di in gr 100*`level' "% Confidence Interval " in ye `format' `lcb'^.5 in gr " to " in ye `format' `ucb'^.5
	di in gr "t = " in ye %6.3f `t' in gr ", df = " in ye `df' in gr ", p = " in ye %6.3f `p'

end vartest