*********************************************************************************************************************** **** Program blandaltman (one parameter against another parameter) startet ******************************************** *********************************************************************************************************************** * set more off * capture program drop blandaltman program blandaltman syntax varlist(max=2) // prepare for Bland Altman Interreader tempvar diff_xy tempvar avg_xy tempvar lower tempvar higher tempvar MW tempvar SE tempvar CIhigher tempvar CIlower generate `diff_xy'=0 generate `avg_xy'=0 generate `lower'=0 generate `higher'=0 generate `MW'=0 generate `SE'=0 generate `CIhigher'=0 generate `CIlower'=0 // count the variable: how many variable are in the list? local noofvars : word count `varlist' display as text "The variable list of this program counts " `noofvars' " variables" display as result " " display as result " " // Interreader local x = 1 local y = 1 foreach varx of varlist `varlist' { foreach vary of varlist `varlist'{ if `y' >`x'{ quietly replace `avg_xy'=(`varx'+`vary')/2 quietly replace `diff_xy'=`varx'-`vary' display as result " Bland Altman Plot of `varx' and `vary'" quietly sum `diff_xy' quietly return list quietly replace `MW'=r(mean) quietly replace `lower'=r(mean)-2*r(sd) quietly replace `higher'=r(mean)+2*r(sd) quietly replace `SE'=(r(sd))/(sqrt(r(N))) quietly replace `CIlower'=r(mean)-2*`SE' quietly replace `CIhigher'=r(mean)+2*`SE' display as result "- mean of difference between `varx' and `vary' is "r(mean) display as result "- sd of difference between `varx' and `vary' is "r(sd) display as result "- lower limit of difference between `varx' and `vary' is " `lower' display as result "- higher limit of difference between `varx' and `vary' is " `higher' display as result "- Limits of agreement (Reference Range for difference): " `lower' " to " `higher' display as result "- Mean difference:" `MW' " (CI " `CIlower' " to " `CIhigher' ")" display as result " " display as result " " label var `diff_xy' "Values" label var `MW' "mean of difference" label var `lower' "lower limit of agreement" label var `higher' "higher limit of agreement" twoway (scatter `diff_xy' `avg_xy', msymbol(smcircle_hollow) mcolor(ebblue)) (line `MW' `avg_xy', lcolor(red))(line `lower' `avg_xy', lcolor(black) ) (line `higher' `avg_xy', lcolor(black) ), title(Bland Altman Plot, size(8)) subtitle(,size(5)) xtitle(Average of `varx' and `vary') ytitle(Difference of `varx' and `vary') caption() note(NOTE) legend(off) } local y = `y'+1 } local y = 1 local x =`x'+1 } end *********************************************************************************************************************** **** Program blandaltman (one parameter against another parameter) endet ********************************************** *********************************************************************************************************************** // EXAMPLE * sysuse bpwide.dta // to create a bland altman plot use the command "blandaltman" with variable1 and variable2 * blandaltman bp_before bp_after