program define senspescore, rclass version 8 syntax varlist(min=1 max=1 numeric) [, Group(varname) Threshold(string) INVerse] tempfile senspescorefile qui save `senspescorefile', replace qui sort `group' tempname p0 p1 n0 n1 q0 qui count local nind=r(N) qui gen `n0'=. qui gen `n1'=. qui gen `p0'=. qui gen `p1'=. local l0=0 local l1=1 if "`inverse'"=="" { local m0="<" local m1=">" } else { local m0=">" local m1="<" } qui count if `group'==`l0' local group0=r(N) qui count if `group'==`l1' local group1=r(N) forvalues i=1/`nind' { qui count if `varlist'`m0'`varlist'[`i']&`group'==`l0' qui replace `n0'=`r(N)' in `i' qui count if `varlist'`m1'`varlist'[`i']&`group'==`l1' qui replace `n1'=`r(N)' in `i' qui replace `p1'=`n`l1''/`group`l1'' in `i' qui replace `p0'=`n`l0''/`group`l0'' in `i' } tempname diff min if "`threshold'"!="" { qui gen `diff'=abs(`varlist'-`threshold') qui sort `diff' qui gen `min'=1 in 1 } sort `varlist' label variable `n0' "N bien classées groupe `l0'" label variable `n1' "N bien classées groupe `l1'" label variable `p0' "Specificity" label variable `p1' "Sensibility" twoway line `n0' `n1' `varlist',name(n,replace) xline(`threshold') twoway line `p0' `p1' `varlist',name(p,replace) xline(`threshold') qui gen `q0'=1-`p0' label variable `q0' "1-Specificity" local scatter if "`threshold'"!="" { local scatter "(scatter `p1' `q0' if `min'==1)" } twoway (line `p1' `q0') (line `q0' `q0') `scatter' ,name(roc,replace) legend(off) use `senspescorefile', clear end