From 44fc64645aca8446a96206f5ca876efb92590e9c Mon Sep 17 00:00:00 2001 From: Sergio Correia Date: Mon, 25 Sep 2017 11:41:00 -0400 Subject: [PATCH] Fix bug wtih degrees-of-freedom If the VCE option was specified as `vce(cluster var1#var2)`, reghdfe was comparing whether the fixed effects were nested within `var1` instead of within `var1#var2`. This reduced SEs and overstated statistical confidence. --- src/reghdfe_class.mata | 2 +- test/bug_cluster.do | 21 +++++++++++++++++++++ test/testall.do | 2 ++ 3 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 test/bug_cluster.do diff --git a/src/reghdfe_class.mata b/src/reghdfe_class.mata index ee815f2..d4ed5db 100644 --- a/src/reghdfe_class.mata +++ b/src/reghdfe_class.mata @@ -610,7 +610,7 @@ class FixedEffects if (cluster_data == .) { if (strpos(clustervar, "#")) { - clustervar = base_clustervars[i_cluster] + clustervar = subinstr(clustervars[i_cluster], "#", " ", .) F = factor(clustervar, sample, ., "", 0, 0, ., 0) cluster_data = F.levels F = Factor() // clear diff --git a/test/bug_cluster.do b/test/bug_cluster.do new file mode 100644 index 0000000..887da18 --- /dev/null +++ b/test/bug_cluster.do @@ -0,0 +1,21 @@ +noi cscript "reghdfe: prevent bug regression with cluster VCE" adofile reghdfe + +* SEE: +* https://www.statalist.org/forums/forum/general-stata-discussion/general/1409974-reghdfe-4-x-standard-errors-and-categorical-variables + +* Dataset + sysuse auto, clear + egen int turn_foreign = group(turn foreign) + +* [TEST] Cluster + + * 1. Run benchmark + reghdfe price weight, a(turn#trunk foreign) vce(cluster turn_foreign) + storedresults save benchmark e() + + * 2. Run reghdfe with # + reghdfe price weight, a(turn#trunk foreign) vce(cluster turn#foreign) + storedresults compare benchmark e(), tol(1e-12) exclude(macro: clustvar1 clustvar cmdline) + storedresults drop benchmark + +exit diff --git a/test/testall.do b/test/testall.do index 2046d7d..2d960b5 100644 --- a/test/testall.do +++ b/test/testall.do @@ -54,6 +54,8 @@ run inconsistent-r2 run singleton-and-fweights + run bug_cluster + * -prune- corner cases * run prune