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
93 lines
3.1 KiB
Plaintext
*! 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
|