我正在使用Stata的spreg命令来估计一些空间模型。有趣的是,报告边际效应(ME)在文献中经常被忽略。 Elhorst(2014)在其关于空间计量经济学的书的第2章中指出,许多实证研究使用点估计得出结论,这可能导致错误的结论(第20页)。 LeSage和Pace(2009),在空间计量经济学概论中,激发并展示了为什么我们需要平均直接,总和间接效应来从空间模型进行推理。我将继续探索感兴趣的读者。然而,Stata的spreg没有明确的方法来获得具有色散估计的ME效应。注意,该命令的文档确实解释了如何使用LeSage和Pace的推荐获得平均直接和总效果,但没有详细说明如何以任何有用的方式获得ME效应的色散估计。因此,如果我是正确的,请告诉我,如果我错了,从ME效果推断的角度来看,spreg是缺乏的。
我开发了一个例程来模拟ME效应并获得这些效果的t值和p值。这是一个笨重,糟糕的编程,我必须在每次运行spreg后粘贴它。此外,我必须根据我是运行SAR,SAC,SDM还是GNS模型进行调整(参见Elhorst(2014)第9页,了解这些空间命名法)。这显然效率不高,并且作为一般程度足以在每个spreg命令之后调用的程序会更好。我将展示我所拥有的,这似乎有用,我问是否有任何有编程经验的人有兴趣给我一些关于如何将其变成程序的指示。我相信一旦它变得很好,它将是spreg命令的一个很好的补充,或者至少上传供其他人使用。任何使用spreg的人都可能需要ME效应和分散估计来进行推理。所以,这个编程挑战不仅仅是为了让我受益,而是让Stata社区和任何想要使用spreg的人受益。
在代码之前,请注意一些有用的东西。一个Lesage和Pace表明平均直接效应(ATDI)可以获得为(B / n)轨迹(S),其中S =(I-lam W)^ - 1(见第2章)和他们的教科书中的4本有关更多细节和spreg的文档)。对于平均总影响,我们可以通过取(B / n)* sum(S)(ATI)来找到它。最后,平均间接影响只是AIDE = ATI - ATDI。为了获得disperion估计,bootstrapping不起作用,因为权重矩阵W将被销毁并且模型不会运行。继Elhorst(2014)之后,我尝试根据Pv + [bhat]'进行抽奖。这里P是下三角cholesky分解(Elhorst写P'其中P是上cholesky),v是参数绘制分布N(0,1)的向量,其长度等于参数的数量,包括常数,beta ,lambda,rho和sigmahat ^ 2,以及bhat是模型的估计参数。见Elhorst(2014)pg。 24-25的详细信息。模型只运行一次,在开始时和每次绘制时,我们绘制v并计算ATDI,ATI和AIDE。这是我对SDM模型的丑陋,低效的尝试(记得必须根据模型进行微调)。
* SDM
spreg ml atth $oI $oX $pI $pX, id(aid) dlmat(G)
mata
b = st_matrix("e(b)")
numpara = cols(b)
numvars = cols(b) - 3 /* careful, 3 for SAR but 4 for SAC and GNS */
numownvars = numvars/2
lam = b[1,numpara-1] /* numpara-2 in the SAC and GNS model */
V = st_matrix("e(V)") /* vcv matrix of model */
P = cholesky(V)
S = luinv(I(rows(W))-lam*W)
end
getmata numpara, force replace
egen nump = max(numpara) /* need num. of parameters for loop below */
* Simulation for ME dispersion parameters
* Note: Pv + [bhat]' where P is lower triangular cholesky of VCV from spreg,
* v is a vector of parameter draws distributed N(0,1) with length equal to the
* number of estimated parameters, and bhat is the vector of estimated parameters
* to include the constant, beta parameters, lambda, rho, and sigmahat^2.
* Draws are only made on v, the spreg command is only ran once, at the beginning.
forvalues h = 1(1)1000 {
gen vtil = .
drop vtil*
forvalue i = 1(1)`=nump' {
tempname a`i'`h'
scalar `a`i'`h'' = rnormal()
gen vtil`i'`h' = `a`i'`h''
}
putmata vtil*, replace
local i = 1
local j = 2
while `i' <= (`=nump'-1) {
while `j' <= (`=nump') {
mata vtil`j'`h' = vtil`i'`h', vtil`j'`h'
mata vtil`i'`h' = .
mata vtil`h' = vtil`j'`h'
local i = `i' + 1
local j = `j' + 1
}
}
mata vtil`h' = vtil`h'[1,1::numpara]'
mata A`h' = P*vtil`h' + b'
mata b10`h' = A`h'[1::numownvars,1]
mata b20`h' = A`h'[numownvars+1::numownvars*2,1]
/* now its b10 + b20 because the SDM and GNS have spatial lags in X */
mata atdi`h' = ((b10`h' + b20`h'):/rows(W))*trace(S)
mata ati`h' = ((b10`h' + b20`h'):/rows(W))*sum(S)
mata aind`h' = ati`h' - atdi`h'
}
mata a1 = atdi1
mata b1 = ati1
mata c1 = aind1
local i = 1
local j = 2
while `i' <= (1000 - 1) {
while `j' <= (1000) {
mata a`j' = a`i', atdi`j'
mata b`j' = b`i', ati`j'
mata c`j' = c`i', aind`j'
mata a`i' = .
mata b`i' = .
mata c`i' = .
local i = `i' + 1
local j = `j' + 1
}
}
mata
at = a1000'
bt = b1000'
ct = c1000'
end
getmata (desdmatt1_v*)=at (tesdmatt1_v*)=bt (idesdmatt1_v*)=ct, force replace
estpost tabstat desdmatt1_v* tesdmatt1_v* idesdmatt1_v*, stats(mean sd) col(stats)
/* Get the tvalue's and pvalue's for the ATDI, ATI, and AIDE */
mata
me_mean = st_matrix("e(mean)")
me_sd = st_matrix("e(sd)")
/* Note: use sd not se (see Elhorst (2014) "Spatial Econometrics" Ch. 2) */
me_tval = me_mean:/me_sd
n = 1000
k = rows(V)
de_tpval = abs(me_tval[1,1::numownvars]'), 2*ttail(n-k, abs(me_tval[1,1::numownvars]'))
te_tpval = abs(me_tval[1,numownvars+1::numownvars*2]'), 2*ttail(n-k, abs(me_tval[1,numownvars+1::numownvars*2]'))
ide_tpval = abs(me_tval[1,numownvars*2+1::numownvars*3]'), 2*ttail(n-k, abs(me_tval[1,numownvars*2+1::numownvars*3]'))
/* average direct, total, and indirect tval's and pval's */
de_tpval
te_tpval
ide_tpval
end
drop nump
希望我已经将代码记录得足够合理,但如果没有,请问。这似乎对我有用,但在运行多个模型时效率不高或有用。我确实尝试过Stata的模拟命令但却无法让事情发挥作用。我无法弄清楚如何让它只模拟绘图v而没有别的。
如果有人对此问题感兴趣,我很乐意提供帮助。我不是程序员,从来没有上课,而且我没有时间花几天时间试图找出基本的编程。如果您有关于如何开始将其用于程序的建议,我很乐意听到它们。如何为程序提供所有正确的项目让我困惑。此外,圣杯将用于一个程序,该程序将使用变量标签,ME效果,t值和p值吐出一个漂亮的表格,并保存结果,以便它们可以通过estout拉出以发送给LaTeX。
我忘记添加一个重要的注释。 GNS规范是
Y = lam W y + X b10 + W X b20 + l alpha + u,其中u = rho M u + e。
通常假设W = M.现在,对于具有Y(SDM和GNS)空间滞后和X(SDM和GNS)空间滞后的模型的ME效应是((b10 + b20)/ n)* trace(S)和((b10 + b20) / 2)*和(S)。对于SAR和SAC模型(假设b20 = 0),正如我之前详述的那样。请参阅Elhorst(2014)和LeSage和Pace(2009)的解释和推导。
除了我在此详述的内容,Stata还需要一些空间计量经济学的更新来跟上理论文献。这些包括社会互动的横截面模型的固定效应(参见Lee等人(2010)&#34;规范和估计社会交互模型与网络结构&#34;)可能需要调整当前运行的spreg的集中似然函数对于目前提供的超出GS2SLS的ML和异方差性方法(Elhorst及其同事在一篇名为&#34;研究中的群组交互和一般嵌套空间模型的使用&#34;以及贝叶斯技术的工作论文中讨论了ML方法的异方差性对此也非常有用)。 Matlab目前已经有了一些这样的东西,但是开发Stata的空间例程以便赶上它会很不错。