You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

93 lines
3.1 KiB
Plaintext

7 months ago
*! version 1.1.1 STB-35 sg65
program define l1way
version 4.0
local varlist "req ex min(2) max(2)"
local if "opt"
local in "opt"
local weight "aweight"
local options "Center(string) Ems"
parse "`*'"
parse "`varlist'", parse(" ")
local weight "[`weight'`exp']"
local wt : word 2 of `exp'
tempvar use
quietly {
mark `use' `if' `in'
markout `use' `varlist' `wt'
preserve
keep if `use'
sort `2'
if "`wt'" == "" {
tempvar Wt
gen byte `Wt' = 1
local wt "`Wt'"
}
summ `1' `weight'
tempname dft sst msa mse gr
scalar S_1 = _result(1)
scalar `dft' = _result(1) - 1
scalar `sst' = `dft' * _result(4)
tempvar tt sw xm
gen double `sw' = `wt' in 1 /* sum the weights */
replace `sw' = cond(`2' > `2'[_n-1], `wt', `sw'[_n-1] + `wt') in 2/l
gen double `xm' = `1' in 1 /* get group means */
replace `xm' = cond(`2' > `2'[_n-1], `1', /*
*/ `xm'[_n-1] + `wt'*(`1'-`xm'[_n-1])/`sw') in 2/l
drop if `2' >= `2'[_n+1] in 1/-2
summ `xm' [aw=`sw']
scalar S_3 = _result(1) - 1
scalar `msa' = _result(4) * scalar(S_1) / _result(1)
scalar S_2 = scalar(S_3) * `msa'
if "`ems'" != "" {
replace `sw' = sum(`sw'*`sw')
scalar `gr' = (_result(2) - `sw'[_N]/_result(2) )/ scalar(S_3)
}
else { scalar `gr' = scalar(S_1)/_result(1) }
}
scalar S_4 = `sst' - scalar(S_2)
scalar S_5 = `dft' - scalar(S_3)
scalar `mse' = scalar(S_4) / scalar(S_5)
scalar S_6 = `msa' / `mse'
local lab : variable label `1'
local lbl /*
*/ "One Way Analysis of Variance for `1': `lab'"
local indent = int((80-length("`lbl'"))/2)
noisily di _n _skip(`indent') in gr "`lbl'"
noisily di _n in gr /*
*/ _col(5) "Source" _col(25) "SS" /*
*/ _col(36) "df" _col(44) "MS" /*
*/ _col(58) "F" _col(64) "Prob > F" /*
*/ _n _dup(72) "-"
noisily di in gr "Between `2'" in yellow /*
*/ _col(21) %10.0g scalar(S_2) /*
*/ _col(32) %6.0f scalar(S_3) /*
*/ _col(41) %10.0g `msa' /*
*/ _col(52) %9.2f scalar(S_6) /*
*/ _col(66) %6.4f fprob(scalar(S_3), scalar(S_5), scalar(S_6))
noisily di in gr "Within `2'" in yellow /*
*/ _col(21) %10.0g scalar(S_4) /*
*/ _col(32) %6.0f scalar(S_5) /*
*/ _col(41) %10.0g `mse' /*
*/ _n in gr _dup(72) "-"
noisily di in gr "Total" in yellow /*
*/ _col(21) %10.0g `sst' /*
*/ _col(32) %6.0f `dft' /*
*/ _col(41) %10.0g `sst'/`dft'
scalar `sst' = 1
if "`center'" == "mean" { scalar `sst' = scalar(S_5)/(scalar(S_5)-2) }
else if "`center'" == "med" {
scalar `sst' = invfprob(scalar(S_3), scalar(S_5), 0.5)
}
scalar `dft' = max(scalar(S_6) - `sst', 0)
global S_1 = `dft' / (`dft' + `sst'* `gr')
global S_2 = `dft' / (`dft' + `sst')
di _new in gr "Intra-`2' r =" in ye %7.4f $S_1 _new in gr /*
*/ "Estimated reliability of a `2' mean (n=" in ye %3.2f `gr' in gr /*
*/ ") =" in ye %7.4f $S_2
end