| 分类: 经济学文献 |
传统形式求解全要素生产率的回归式:http://s7/middle/001Tkn8hzy71VPKaMIe66&690 表示全要素生产率,但是如果当期全要素生产率影响要素投入的话,传统的回归式解释变量与扰动项相关,估计的参数是有偏的。所以必须要把扰动项分为两部分,一部分是白噪声,另一部分是可观测的且能影响当期投入,对此有多种修正方法(详见鲁晓东和连玉君(2012))。本篇博客主要分析OP(1996)半参数估计法。
假定企业可观测的当期的生产率冲击会影响当期的投资,也就是说当期生产率冲击越大,企业投资也会越高,则可以以投资作为生产率冲击的代理变量,如果当期投资增大,根据资本运动方程下一期的资本会增加。当期的投资是关于资本存量、不可观测的生产率冲击(企业可以观测到并依此做出决定)和企业年龄三部分组成http://s7/middle/001Tkn8hzy71VPKiMOGb6&690,将产出对投入和生产率做回归:
其中http://s3/middle/001Tkn8hzy71VPKVwFY22&690,再由(2)式:
其中http://s16/middle/001Tkn8hzy71VPLqTOTaf&690的二阶多项式。
-
//如果采用opreg命令
-
Clear
-
//举例:
-
set obs 200
-
gen year=mod(_n,5)
-
bysort year:gen gvkey=_n
-
gen lninv=rnormal(8,2)
-
gen lnkop=rnormal(6,2)
-
gen lny=rnormal(10,2)
-
gen lnl=rnormal(40,20)
-
gen lnm=rnormal(40,20)
-
gen age_=abs(rnormal(30,10))
-
bysort gvkey:egen age=mean(age_)
-
replace age=int(age)
-
gen t=year
-
drop if mod(_n,3)==2
-
xtset gvkey year
-
//生产exit变量
-
gen firmid = gvkey
-
sort firmid year
-
by firmid: gen count = _N
-
gen survivor = count == 5
-
gen has0 = 1 if year == 4
-
sort firmid has0
-
//has0——最后一年存在的企业为1
-
by firmid: replace has0 = 1 if has0[_n-1] == 1
-
replace has0 = 0 if has0== .
-
sort firmid year
-
//has_gaps表示中间有退出的企业为1
-
by firmid: gen has_gaps = 1 if year[_n-1] != year-1 & _n != 1
-
sort firmid has_gaps
-
by firmid: replace has_gaps = 1 if has_gaps[_n-1] == 1
-
replace has_gaps = 0 if has_gaps == .
-
by firmid: generate exit = survivor == 0 & has0 == 0 & has_gaps != 1& _n == _N
-
replace exit = 0 if exit == 1 & year == 4
-
opreg lny, exit(exit) state(age lnkop) proxy(lninv) free(lnl lnm) cvars(t) ///
-
vce(bootstrap, seed(1) rep(50))
-
//exit(varname):表示企业退出,退出为1,其它为0
-
//state(varlist):表示状态变量,决定企业是否退出的变量 ——企业年龄和资本存量
-
//proxy(varname) :表示不可观测生产率的代理变量——投资
-
// free(varlist):表示额外的可变投入的其它变量
-
//cvars(varlist):表示step1和step2额外的变量
-
//Stata code by (Yasar&Raciborski,2008)
-
//主要有三步
-
//step 1:回归(1)式
-
//step 2:probit计算存活概率
-
//step3:回归(3)式
-
xtset gvkey year
-
drop if missing(lninv)
-
//建立i,k,a的二阶多项式
-
gen double lninvlnkop = lninv*lnkop
-
gen double lninvage = lninv*age
-
gen double lnkopage = lnkop*age
-
gen double lninvsq = lninv^2
-
gen double lnkopsq = lnkop^2
-
gen double agesq = age^2
-
//还包括 age 、lnkop、lninv
-
// Step 1
-
regress lny lnl lnm lninv lnkop age t lninvlnkop lninvage lnkopage ///
-
lninvsq lnkopsq agesq
-
predict double lny_hat if e(sample), xb
-
scalar b_lnl = _b[lnl]
-
scalar b_lnm = _b[lnm]
-
// Step 2
-
probit exit L.(lninv lnkop age t lninvlnkop lninvage lnkopage ///
-
lninvsq lnkopsq agesq)
-
predict phat if e(sample), pr
-
//得到phi的估计值
-
generate double phi_hat = lny_hat - lnl*b_lnl - lnm*b_lnm
-
// step 3:得到(3)式左边的值
-
generate double lhs = lny - lnl*b_lnl - lnm*b_lnm
-
// 标记缺失值
-
generate useme = 1
-
gen l1phi = L.phi_hat
-
gen l1lnkop = L.lnkop
-
gen l1age = L.age
-
foreach var of varlist lhs lnkop age l1phi l1lnkop l1age{
-
replace useme = 0 if `var' >=.
-
}
-
gen double phat2 = phat^2
-
nl ( lhs = b0 + bk*lnkop + ba*age + ///
-
t1*(l1phi - bk*l1lnkop - ba*l1age) + ///
-
t1sq*(l1phi - bk*l1lnkop - ba*l1age)^2 + ///
-
t2*phat + t2sq*phat^2 + ///
-
t1t2*(l1phi - bk*l1lnkop - ba*l1age)*phat ) ///
-
if useme
值得注意的是:
- 使用opreg命令要确定生产函数和退出函数的形式,因为函数设定的不同会导致输入变量的不同。比如状态变量不一定是企业年龄和资本存量,可能与企业其它的一些性质诸如所有制形式、市场规模有关,取决于临界生产率的决定因素。代理变量可以是投资,也可以是中间品投入。自由变量的选择需要看生产函数的设定。
- 第三步只能用非线性最小二乘估计的原因是回归式中含有资本存量的当期和滞后期,要想获得有效估计值,必须保证资本存量的被估系数保持一致(鲁晓东和连玉君,2012)
-
可参考文献:
-
鲁晓东和连玉君(2012)
-
http://econweb.umd.edu/~haltiwan/olley_pakes.pdf
-
http://wweb.uta.edu/faculty/myasar/Web_Appendix_for_OPREG_Command.pdf

加载中…