From 5d2600606af84354e557894fdd852e628e7577bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?La=CC=81szlo=CC=81=20Sa=CC=81ndor?= Date: Sat, 18 Apr 2015 09:15:35 -0400 Subject: [PATCH 1/5] use _regress, 3x faster for areg --- binscatter.ado | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/binscatter.ado b/binscatter.ado index 85d2947..554e550 100644 --- a/binscatter.ado +++ b/binscatter.ado @@ -175,11 +175,11 @@ program define binscatter, eclass sortpreserve * Parse absorb to define the type of regression to be used if `"`absorb'"'!="" { - local regtype "areg" + local regtype "_regress" local absorb "absorb(`absorb')" } else { - local regtype "reg" + local regtype "_regres" } * Generate residuals @@ -277,8 +277,8 @@ program define binscatter, eclass sortpreserve } * perform regression - if ("`reg_verbosity'"=="quietly") capture reg `depvar' `x_r2' `x_r' `wt' if `conds' - else capture noisily reg `depvar' `x_r2' `x_r' `wt' if `conds' + if ("`reg_verbosity'"=="quietly") capture _regress `depvar' `x_r2' `x_r' `wt' if `conds' + else capture noisily _regress `depvar' `x_r2' `x_r' `wt' if `conds' * store results if (_rc==0) matrix e_b_temp=e(b) From 7143f45cc5230a1122767e7b6a82c0f21e9b7385 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?La=CC=81szlo=CC=81=20Sa=CC=81ndor?= Date: Sat, 18 Apr 2015 09:17:55 -0400 Subject: [PATCH 2/5] fix typo --- binscatter.ado | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/binscatter.ado b/binscatter.ado index 554e550..96d183c 100644 --- a/binscatter.ado +++ b/binscatter.ado @@ -179,7 +179,7 @@ program define binscatter, eclass sortpreserve local absorb "absorb(`absorb')" } else { - local regtype "_regres" + local regtype "_regress" } * Generate residuals From 12a06b71f01ad6ed7acbe94a7813b22401cf637a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?La=CC=81szlo=CC=81=20Sa=CC=81ndor?= Date: Sat, 18 Apr 2015 09:30:35 -0400 Subject: [PATCH 3/5] _predict for predict --- binscatter.ado | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/binscatter.ado b/binscatter.ado index 96d183c..3e00179 100644 --- a/binscatter.ado +++ b/binscatter.ado @@ -188,7 +188,7 @@ program define binscatter, eclass sortpreserve foreach var of varlist `x_var' `y_vars' { tempvar residvar `regtype' `var' `controls' `wt' if `touse', `absorb' - predict `residvar' if e(sample), residuals + _predict `residvar' if e(sample), residuals if ("`addmean'"!="noaddmean") { summarize `var' `wt' if `touse', meanonly replace `residvar'=`residvar'+r(mean) From 516d7dd0326062ad8e2f74db2b0127e48993984a Mon Sep 17 00:00:00 2001 From: Sergio Correia Date: Sat, 18 Apr 2015 16:41:45 -0400 Subject: [PATCH 4/5] sergio's hdfe --- binscatter.ado | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/binscatter.ado b/binscatter.ado index 3e00179..0bdf6c6 100644 --- a/binscatter.ado +++ b/binscatter.ado @@ -170,8 +170,32 @@ program define binscatter, eclass sortpreserve ****** Create residuals ****** - - if (`"`controls'`absorb'"'!="") quietly { + if (`"`controls'`absorb'"'!="" & `: word count `absorb''>1) { + cap which hdfe.ado + if _rc { + di as error "hdfe.ado required when using multiple absorb variables: {stata ssc install hdfe}" + exit 111 + } + hdfe `x_var' `y_vars' `wt' if `touse', partial(`controls') absorb(`absorb') gen(__resid__) + if ("`addmean'"!="noaddmean") { + foreach var of varlist `x_var' `y_vars' { + summarize `var' `wt' if `touse', meanonly + qui replace __resid__`var' = __resid__`var' + r(mean) + } + } + * possible simplification: have three options: stub() replace generate() + * possible improvement: there may be some limitations on binscatter's by(); maybe hdfe can lift them (or they are intended?) + tempvar x_r + rename __resid__`x_var' `x_r' + label variable `x_r' "`x_var'" + foreach var of varlist `y_vars' { + tempvar residvar + rename __resid__`var' `residvar' + label variable `residvar' "`var'" + local y_vars_r `y_vars_r' `residvar' + } + } + else if (`"`controls'`absorb'"'!="") quietly { * Parse absorb to define the type of regression to be used if `"`absorb'"'!="" { From 3c17bb721b41e64f9769086203b9ea6c0365d5f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?La=CC=81szlo=CC=81=20Sa=CC=81ndor?= Date: Sat, 18 Apr 2015 17:31:01 -0400 Subject: [PATCH 5/5] Revert "sergio's hdfe" This reverts commit 516d7dd0326062ad8e2f74db2b0127e48993984a. --- binscatter.ado | 28 ++-------------------------- 1 file changed, 2 insertions(+), 26 deletions(-) diff --git a/binscatter.ado b/binscatter.ado index 0bdf6c6..3e00179 100644 --- a/binscatter.ado +++ b/binscatter.ado @@ -170,32 +170,8 @@ program define binscatter, eclass sortpreserve ****** Create residuals ****** - if (`"`controls'`absorb'"'!="" & `: word count `absorb''>1) { - cap which hdfe.ado - if _rc { - di as error "hdfe.ado required when using multiple absorb variables: {stata ssc install hdfe}" - exit 111 - } - hdfe `x_var' `y_vars' `wt' if `touse', partial(`controls') absorb(`absorb') gen(__resid__) - if ("`addmean'"!="noaddmean") { - foreach var of varlist `x_var' `y_vars' { - summarize `var' `wt' if `touse', meanonly - qui replace __resid__`var' = __resid__`var' + r(mean) - } - } - * possible simplification: have three options: stub() replace generate() - * possible improvement: there may be some limitations on binscatter's by(); maybe hdfe can lift them (or they are intended?) - tempvar x_r - rename __resid__`x_var' `x_r' - label variable `x_r' "`x_var'" - foreach var of varlist `y_vars' { - tempvar residvar - rename __resid__`var' `residvar' - label variable `residvar' "`var'" - local y_vars_r `y_vars_r' `residvar' - } - } - else if (`"`controls'`absorb'"'!="") quietly { + + if (`"`controls'`absorb'"'!="") quietly { * Parse absorb to define the type of regression to be used if `"`absorb'"'!="" {