*! 1.0.0 Ariel Linden 01Jul2023 capture program drop power_cmd_icc program power_cmd_icc, rclass version 11.0 /* obtain settings */ syntax anything(id="numlist"), /// [ Alpha(real 0.05) /// significance level n(string) /// total sample size nr(integer 2) /// number of ratings Power(string) /// ONESIDed /// ] /// gettoken icc0 rest : anything gettoken icc1 rest : rest numlist "`anything'", min(2) max(2) if `icc0' < 0.0 | `icc0' > 1.0 { di as err "icc0 must be a number between 0 and 1" exit 198 } if `icc1' < 0.0 | `icc1' > 1.0 { di as err "icc1 must be a number between 0 and 1" exit 198 } // set default test type to "twosided" if "`onesided'" != "" { local zalpha = `alpha' } else local zalpha = `alpha' / 2 // compute delta for output tempname delta scalar `delta' = `icc1' - `icc0' // compute F for the two ICCs tempname ficc1 ficc0 scalar `ficc1' = (1 + (`nr'- 1) * `icc1') / (1 - `icc1') scalar `ficc0' = (1 + (`nr'- 1) * `icc0') / (1 - `icc0') ******************************* **** compute sample size ****** ******************************* if (`"`n'"' == "") { tempname n scalar `n' = ceil((1 + (2 * (invnorm(1-`zalpha') + invnorm(`power'))^2 * `nr') / ((log(`ficc1'/`ficc0'))^2 * (`nr' - 1)))) } // end sample size ************************* **** compute power ****** ************************* else if (`"`n'"' != "" ) { tempname power scalar `power' = normal(sqrt(((`nr' - 1) * (`n' - 1)) / (2 * `nr')) * log(`ficc1'/`ficc0') - invnorm(1 - `zalpha')) } // end power // saved results return scalar N = `n' return scalar alpha = `alpha' return scalar power = `power' return scalar nr = `nr' return scalar icc1 = `icc1' return scalar icc0 = `icc0' return scalar delta = `delta' end