I've never used this method, so I learned something. As usual, JW makes what appears to be messy easy to do.
-
Login or Register
- Log in with
xtset id year
panel variable: id (unbalanced)
time variable: year, 2010 to 2019, but with gaps
delta: 1 unit
bysort id: egen mean__immi_sh = mean(immi_sh)
bysort id: egen mean__share_9 = mean( share_9)
bysort id: egen mean__share_12= mean(share_uni)
bysort id: egen mean__share_uni = mean(logsize)
bysort id: egen mean__logsize = mean(lavg_firm_age)
bysort id: egen mean__lavg_firm_age= mean(lavg_firm_age)
bysort id: egen mean__lage = mean(lage)
bysort id: egen mean__year = mean(year)
. reghdfe ln_labor_productivity immi_sh share_9 share_12 share_uni logsize ///
> lavg_firm_age lage i.year mean__immi_sh mean__share_9 ///
> mean__share_12 mean__share_uni mean__logsize mean__lavg_firm_age ///
> mean__lage mean__year, absorb(sector region sector#region) ///
> cluster(sector)
(MWFE estimator converged in 2 iterations)
note: mean__lavg_firm_age omitted because of collinearity
warning: missing F statistic; dropped variables due to collinearity or too few clusters
HDFE Linear regression Number of obs = 1,514,590
Absorbing 3 HDFE groups F( 23, 7) = .
Statistics robust to heteroskedasticity Prob > F = .
R-squared = 0.1674
Adj R-squared = 0.1674
Within R-sq. = 0.1042
Number of clusters (sector) = 8 Root MSE = 0.8433
(Std. Err. adjusted for 8 clusters in sector)
-------------------------------------------------------------------------------------
| Robust
ln_labor_producti~y | Coef. Std. Err. t P>|t| [95% Conf. Interval]
--------------------+----------------------------------------------------------------
immi_sh | .0044312 .0221644 0.20 0.847 -.0479793 .0568417
share_9 | .3233302 .0464193 6.97 0.000 .2135661 .4330943
share_12 | .4447063 .0594037 7.49 0.000 .3042389 .5851737
share_uni | .3898605 .0667516 5.84 0.001 .232018 .5477029
logsize | -.0530656 .01664 -3.19 0.015 -.092413 -.0137182
lavg_firm_age | .06839 .0084707 8.07 0.000 .04836 .0884201
lage | .0941849 .0294198 3.20 0.015 .0246181 .1637516
|
year |
2011 | -.0545539 .0142667 -3.82 0.007 -.0882892 -.0208186
2012 | -.0865313 .0470727 -1.84 0.109 -.1978407 .024778
2013 | -.0558563 .0577864 -0.97 0.366 -.1924995 .0807869
2014 | -.0680847 .0629978 -1.08 0.316 -.2170508 .0808813
2015 | -.0686263 .0657259 -1.04 0.331 -.2240434 .0867909
2016 | -.0680697 .0654029 -1.04 0.333 -.2227231 .0865837
2017 | -.0835982 .0604586 -1.38 0.209 -.22656 .0593636
2018 | -.1137503 .0533071 -2.13 0.070 -.2398016 .0123011
2019 | -.1378348 .0481916 -2.86 0.024 -.2517898 -.0238798
|
mean__immi_sh | -.1179342 .0671146 -1.76 0.122 -.2766349 .0407665
mean__share_9 | -.1481924 .0250892 -5.91 0.001 -.2075189 -.0888659
mean__share_12 | .4651646 .1342867 3.46 0.010 .147627 .7827023
mean__share_uni | .2473019 .0443147 5.58 0.001 .1425142 .3520896
mean__logsize | .0293096 .0141171 2.08 0.077 -.004072 .0626912
mean__lavg_firm_age | 0 (omitted)
mean__lage | .00315 .0883127 0.04 0.973 -.2056764 .2119763
mean__year | .064638 .0066379 9.74 0.000 .0489419 .0803342
_cons | -121.7594 13.44116 -9.06 0.000 -153.5427 -89.9761
-------------------------------------------------------------------------------------
Absorbed degrees of freedom:
---------------------------------------------------------+
Absorbed FE | Categories - Redundant = Num. Coefs |
-----------------+---------------------------------------|
sector | 8 8 0 *|
region | 8 1 7 |
sector#region | 60 60 0 *|
---------------------------------------------------------+
* = FE nested within cluster; treated as redundant for DoF computation
.
. test mean__immi_sh mean__share_9 mean__share_12 mean__share_uni ///
> mean__logsize mean__lavg_firm_age mean__lage mean__year
( 1) mean__immi_sh = 0
( 2) mean__share_9 = 0
( 3) mean__share_12 = 0
( 4) mean__share_uni = 0
( 5) mean__logsize = 0
( 6) o.mean__lavg_firm_age = 0
( 7) mean__lage = 0
( 8) mean__year = 0
Constraint 6 dropped
F( 7, 7) = 749.42
Prob > F = 0.0000
.
. reghdfe ln_labor_productivity immi_sh share_9 share_12 share_uni logsize ///
> avg_firm_age lage mean__immi_sh mean__share_9 ///
> mean__share_12 mean__share_uni mean__logsize mean__lavg_firm_age ///
> mean__lage , absorb(sector region sector#region year) cluster(sector)
(MWFE estimator converged in 4 iterations)
note: mean__lavg_firm_age omitted because of collinearity
warning: missing F statistic; dropped variables due to collinearity or too few clusters
HDFE Linear regression Number of obs = 1,562,462
Absorbing 4 HDFE groups F( 13, 7) = .
Statistics robust to heteroskedasticity Prob > F = .
R-squared = 0.1674
Adj R-squared = 0.1674
Within R-sq. = 0.1036
Number of clusters (sector) = 8 Root MSE = 0.8559
(Std. Err. adjusted for 8 clusters in sector)
-------------------------------------------------------------------------------------
| Robust
ln_labor_producti~y | Coef. Std. Err. t P>|t| [95% Conf. Interval]
--------------------+----------------------------------------------------------------
immi_sh | -.0022622 .0240769 -0.09 0.928 -.0591951 .0546706
share_9 | .3240873 .047084 6.88 0.000 .2127514 .4354232
share_12 | .431022 .058403 7.38 0.000 .2929209 .5691232
share_uni | .3424674 .0681693 5.02 0.002 .1812726 .5036622
logsize | -.0216342 .0170088 -1.27 0.244 -.0618537 .0185853
avg_firm_age | -.0095091 .0023529 -4.04 0.005 -.0150729 -.0039454
lage | .0313209 .0230397 1.36 0.216 -.0231593 .0858011
mean__immi_sh | -.1073892 .0644239 -1.67 0.139 -.2597275 .044949
mean__share_9 | -.1657764 .0282882 -5.86 0.001 -.2326673 -.0988854
mean__share_12 | .5061827 .1441416 3.51 0.010 .1653421 .8470234
mean__share_uni | .2200251 .0438413 5.02 0.002 .116357 .3236932
mean__logsize | .2093602 .02306 9.08 0.000 .1548319 .2638885
mean__lavg_firm_age | 0 (omitted)
mean__lage | .1150118 .0883542 1.30 0.234 -.0939127 .3239364
_cons | 8.081939 .3525108 22.93 0.000 7.248384 8.915495
-------------------------------------------------------------------------------------
Absorbed degrees of freedom:
---------------------------------------------------------+
Absorbed FE | Categories - Redundant = Num. Coefs |
-----------------+---------------------------------------|
sector | 8 8 0 *|
region | 8 1 7 |
sector#region | 60 60 0 *|
year | 10 1 9 |
---------------------------------------------------------+
* = FE nested within cluster; treated as redundant for DoF computation
.
. test mean__immi_sh mean__share_9 mean__share_12 mean__share_uni ///
> mean__logsize mean__lavg_firm_age mean__lage
( 1) mean__immi_sh = 0
( 2) mean__share_9 = 0
( 3) mean__share_12 = 0
( 4) mean__share_uni = 0
( 5) mean__logsize = 0
( 6) o.mean__lavg_firm_age = 0
( 7) mean__lage = 0
Constraint 6 dropped
F( 6, 7) = 38.53
Prob > F = 0.0001
bysort id: egen mean__logsize = mean(lavg_firm_age) bysort id: egen mean__lavg_firm_age= mean(lavg_firm_age)
capture program drop papwood
program papwood , rclass
syntax [, altfe(varlist min=1 max=1)]
preserve
quietly {
capture drop *_xxx
global XTERMS
global MTERMS
local varnum = wordcount(`"`e(indepvars)'"')-1
forv i = 1/`varnum' {
local var = `'"`: word `i' of `e(indepvars)''"'
global XTERMS $XTERMS `var'
egen `var'_xxx = mean(`var') , by(`altfe')
global MTERMS $MTERMS `var'_xxx
}
reghdfe `e(depvar)' $XTERMS $MTERMS , absorb(`e(absvars)') cluster(`e(clustvar)')
test $MTERMS
}
local star = (cond(r(p)<.01, "***", cond(r(p)<.05, "**", cond(r(p)<.10, "*", ""))))
di `"{hline 50}"'
di "Papke-Wooldridge (2023) Test"
di "Null: Higher level fixed effects is OK."
di "F-stat = " %6.2f `r(F)' "`star'"
di "Prob Level = " %8.6f r(p)
if r(p) < 0.10 {
di "Null is REJECTED -- Yuck!"
}
else {
di "Null is ACCEPTED -- Yeah!"
}
di `"{hline 50}"'
restore
end
reghdfe ln_labor_productivity immi_sh share_9 share_12 share_uni logsize ///
avg_firm_age lage , absorb(sector region sector#region year) cluster(sector)
papwood, altfe(id)
. capture program drop papwood
. program papwood , rclass
1. syntax [, altfe(ln_labor_productivity immi_sh share_9 share_12 share_uni logsize avg_firm_age lage min=1 max=1)]
2. preserve
3. quietly {
4. capture drop *_xxx
5. global XTERMS
6. global MTERMS
7. local varnum = wordcount(`"`e( immi_sh share_9 share_12 share_uni logsize avg_firm_age lage)'"')-1
8. forv i = 1/`varnum' {
9. local var = `'"`: word `i' of `e( immi_sh share_9 share_12 share_uni logsize avg_firm_age lage)''"'
10. global XTERMS $XTERMS `var'
11. egen `var'_xxx = mean(`var') , by(`altfe')
12. global MTERMS $MTERMS `var'_xxx
13. }
14. reghdfe `e(ln_labor_productivity)' $XTERMS $MTERMS , absorb(`e(sector region sector#region year)') cluster(`e(sector)')
15. test $MTERMS
16. }
17. local star = (cond(r(p)<.01, "***", cond(r(p)<.05, "**", cond(r(p)<.10, "*", ""))))
18. di `"{hline 50}"'
19. di "Papke-Wooldridge (2023) Test"
20. di "Null: Higher level fixed effects is OK."
21. di "F-stat = " %6.2f `r(F)' "`star'"
22. di "Prob Level = " %8.6f r(p)
23. if r(p) < 0.10 {
24. di "Null is REJECTED"
25. }
26. else {
27. di "Null is ACCEPTED"
28. }
29. di `"{hline 50}"'
30. restore
31. end
.
end of do-file
. do "C:\Users\CeBER\AppData\Local\Temp\STD135c_000000.tmp"
. reghdfe ln_labor_productivity immi_sh share_9 share_12 share_uni logsize ///
> avg_firm_age lage , absorb(sector region sector#region year) cluster(sector)
(MWFE estimator converged in 4 iterations)
HDFE Linear regression Number of obs = 1,575,948
Absorbing 4 HDFE groups F( 7, 7) = 8509.86
Statistics robust to heteroskedasticity Prob > F = 0.0000
R-squared = 0.1499
Adj R-squared = 0.1498
Within R-sq. = 0.0850
Number of clusters (sector) = 8 Root MSE = 0.8708
(Std. Err. adjusted for 8 clusters in sector)
------------------------------------------------------------------------------
| Robust
ln_labor_p~y | Coef. Std. Err. t P>|t| [95% Conf. Interval]
-------------+----------------------------------------------------------------
immi_sh | -.1399509 .0761987 -1.84 0.109 -.3201321 .0402304
share_9 | .2012313 .0277511 7.25 0.000 .1356104 .2668523
share_12 | .4459813 .0619086 7.20 0.000 .2995907 .592372
share_uni | .800066 .1038243 7.71 0.000 .5545604 1.045572
logsize | .1933575 .0336375 5.75 0.001 .1138174 .2728975
avg_firm_age | .0041543 .0016538 2.51 0.040 .0002438 .0080649
lage | .2057504 .0696364 2.95 0.021 .0410865 .3704144
_cons | 8.119879 .2891404 28.08 0.000 7.436171 8.803588
------------------------------------------------------------------------------
Absorbed degrees of freedom:
---------------------------------------------------------+
Absorbed FE | Categories - Redundant = Num. Coefs |
-----------------+---------------------------------------|
sector | 8 8 0 *|
region | 8 1 7 |
sector#region | 60 60 0 *|
year | 10 1 9 |
---------------------------------------------------------+
* = FE nested within cluster; treated as redundant for DoF computation
. papwood, altfe(id)
invalid syntax
r(197);
end of do-file
r(197);
. capture program drop papwood
. program papwood , rclass
1. syntax [, altfe(varlist min=1 max=1)]
2. preserve
3. quietly {
4. capture drop *_xxx
5. global XTERMS
6. global MTERMS
7. local varnum = wordcount(`"`e(indepvars)'"')-1
8. forv i = 1/`varnum' {
9. local var = `'"`: word `i' of `e(indepvars)''"'
10. global XTERMS $XTERMS `var'
11. egen `var'_xxx = mean(`var') , by(`altfe')
12. global MTERMS $MTERMS `var'_xxx
13. }
14. reghdfe `e(depvar)' $XTERMS $MTERMS , absorb(`e(absvars)') cluster(`e(clustvar)')
15. test $MTERMS
16. }
17. local star = (cond(r(p)<.01, "***", cond(r(p)<.05, "**", cond(r(p)<.10, "*", ""))))
18. di `"{hline 50}"'
19. di "Papke-Wooldridge (2023) Test"
20. di "Null: Higher level fixed effects is OK."
21. di "F-stat = " %6.2f `r(F)' "`star'"
22. di "Prob Level = " %8.6f r(p)
23. if r(p) < 0.10 {
24. di "Null is REJECTED -- Yuck!"
25. }
26. else {
27. di "Null is ACCEPTED -- Yeah!"
28. }
29. di `"{hline 50}"'
30. restore
31. end
.
. nois reghdfe ln_labor_productivity immi_sh share_9 share_12 share_uni logsize ///
> avg_firm_age lage , absorb(sector region sector#region year) cluster(sector)
(MWFE estimator converged in 4 iterations)
HDFE Linear regression Number of obs = 1,575,948
Absorbing 4 HDFE groups F( 7, 7) = 8509.86
Statistics robust to heteroskedasticity Prob > F = 0.0000
R-squared = 0.1499
Adj R-squared = 0.1498
Within R-sq. = 0.0850
Number of clusters (sector) = 8 Root MSE = 0.8708
(Std. Err. adjusted for 8 clusters in sector)
------------------------------------------------------------------------------
| Robust
ln_labor_p~y | Coef. Std. Err. t P>|t| [95% Conf. Interval]
-------------+----------------------------------------------------------------
immi_sh | -.1399509 .0761987 -1.84 0.109 -.3201321 .0402304
share_9 | .2012313 .0277511 7.25 0.000 .1356104 .2668523
share_12 | .4459813 .0619086 7.20 0.000 .2995907 .592372
share_uni | .800066 .1038243 7.71 0.000 .5545604 1.045572
logsize | .1933575 .0336375 5.75 0.001 .1138174 .2728975
avg_firm_age | .0041543 .0016538 2.51 0.040 .0002438 .0080649
lage | .2057504 .0696364 2.95 0.021 .0410865 .3704144
_cons | 8.119879 .2891404 28.08 0.000 7.436171 8.803588
------------------------------------------------------------------------------
Absorbed degrees of freedom:
---------------------------------------------------------+
Absorbed FE | Categories - Redundant = Num. Coefs |
-----------------+---------------------------------------|
sector | 8 8 0 *|
region | 8 1 7 |
sector#region | 60 60 0 *|
year | 10 1 9 |
---------------------------------------------------------+
* = FE nested within cluster; treated as redundant for DoF computation
. papwood, altfe(id)
--------------------------------------------------
Papke-Wooldridge (2023) Test
Null: Higher level fixed effects is OK.
F-stat = 85.75***
Prob Level = 0.000003
Null is REJECTED -- Yuck!
--------------------------------------------------
Comment