来源:https://geodacenter.github.io/GeoDaSpace/
本文将主要介绍使用空间计量Python、Stata软件来复制实现
Technical Aspects of Implementing GMM Estimation of the Spatial Error Model in PySAL and GeoDaSpace∗ by Luc Anselin, Pedro V. Amaral and Daniel Arribas-Bel中空间误差模型的GMM估计的技术方面的论文结果。
1
Stata代码汇总
代码为
/* This routine assumes the following files are in the current Stata working directory: */
/* - NAT.shp */
/* - NAT.dbf */
/* Create row-standardized Queen weights matrix */
shp2dta using NAT, database(nat) coordinates(natxy) genid(ids) gencentroids(nat_c) replace
use nat
spmat contiguity w using natxy, norm(row) id(ids) replace
/* Table 2 - Spatial error model with exogenous variables and homoskedasticity (GM_Error_Hom): */
spivreg HR90 RD90 UE90, el(w) id(ids)
/* Table 3 - Spatial error model with endogenous variables and homoskedasticity (GM_Endog_Error_Hom): */
spivreg HR90 RD90 (UE90 = FP89), el(w) id(ids)
/* Table 4 - Combo model with homoskedasticity (GM_Combo_Hom): */
spivreg HR90 RD90 UE90, dl(w) el(w) id(ids)
/* Table 5 - Spatial error model with exogenous variables and heteroskedasticity (GM_Error_Het): */
spivreg HR90 RD90 UE90, el(w) id(ids) het
/* Table 6 - Spatial error model with endogenous variables and heteroskedasticity (GM_Endog_Error_Het): */
spivreg HR90 RD90 (UE90 = FP89), el(w) id(ids) het
/* Table 7 - Combo model with heteroskedasticity (GM_Combo_Het): */
spivreg HR90 RD90 UE90, el(w) dl(w) id(ids) het
2
Python部分
首先导入相关库,代码为
import numpy as np
import pysal as ps
然后打开数据库并创建变量作为numpy数组,代码为:
db = ps.open('nat.dbf','r')
其中,为dbf格式数据,r表示打开方式为可读
Regression 1: use all defaults, i.e., A1='het' changed by LA to A1='hom_sc' as in Drukker
相关代码为:
reg1 = ps.spreg.GM_Error_Hom(y,x,w,name_y='HR90',name_x = x_names, name_w = 'nat_queen.gal',name_ds='NAT')
然后打印上述结果
相关代码为:
结果为:
Regression 1a: use A1 matrix as in Anselin with A1='het'
相关代码为:
reg1a = ps.spreg.GM_Error_Hom(y,x,w,A1='het',name_y='HR90',name_x = x_names, name_w = 'nat_queen.gal',name_ds='NAT')
print reg1a.summary
结果为:
Regression 1b: use A1 matrix as in Anselin, without scaling factor, A1='hom'
相关代码为:
reg1b = ps.spreg.GM_Error_Hom(y,x,w,A1='hom',name_y='HR90',name_x = x_names, name_w = 'nat_queen.gal',name_ds='NAT')
print reg1b.summary
结果为:
Regression 1c: use A1 with scaling factor, but force estimation as 2SLS (as in Stata)
Need to use base class to force passing a constant term, since the user class puts constant in x
相关代码为:
ones = np.ones(y.shape)
reg1c = ps.spreg.error_sp_hom.BaseGM_Endog_Error_Hom(y,ones,yend=x, q=x, w=w, A1='hom_sc')
print reg1c.betas
print map(np.sqrt, reg1c.vm.diagonal())
结果为:
1.2 Endogenous
建立新的外生、内生和工具变量
相关代码为:
xex = x[:,0]
xex.shape = (len(hr90),1)
yend = x[:,1]
yend.shape = (len(hr90),1)
fp89 = db.by_col("FP89")
q = array(fp89)
q.shape = (len(fp89),1)
reg2 = ps.spreg.GM_Endog_Error_Hom(y,xex,yend,q,w,name_y="HR90",name_x=["RD90"],name_yend=["UE90"],name_q=["FP89"],\
name_w="natqueen.gal",name_ds="nat.shp")
print reg2.summary
Error hom model with endogeneity -- A1 = 'het'
reg2a = ps.spreg.GM_Endog_Error_Hom(y,xex,yend,q,w,A1='het',name_y="HR90",name_x=["RD90"],name_yend=["UE90"],name_q=["FP89"],\
name_w="natqueen.gal",name_ds="nat.shp")
print reg2a.summary
结果为:
1.3 Combo Model¶
Error hom model -- combo -- instrument lag order set to 2
相关代码为:
reg3 = ps.spreg.GM_Combo_Hom(y,x,w=w,w_lags=2,name_y='HR90',name_x = x_names, name_w = 'nat_queen.gal',name_ds='NAT')
print reg3.summary
reg3a
= ps.spreg.GM_Combo_Hom(y,x,w=w,name_y='HR90',name_x = x_names, name_w = 'nat_queen.gal',name_ds='NAT')
print reg3a.summary
reg3b = ps.spreg.GM_Combo_Hom(y,x,w=w,w_lags=2,A1='het',name_y='HR90',name_x = x_names, name_w = 'nat_queen.gal',name_ds='NAT')
print reg3b.summary
结果为:
2 Heteroskedasticity¶
2.1 Exogenous only¶
相关代码为:
reg4 = ps.spreg.GM_Error_Het(y,x,w,name_y="HR90",name_x=x_names,name_w="natqueen.gal",name_ds="nat.shp")
print reg4.summary
Step1c to True as in Arraiz et al (same as sphet1)
reg4a = ps.spreg.GM_Error_Het(y,x,w,step1c=True,name_y="HR90",name_x=x_names,name_w="natqueen.gal",name_ds="nat.shp")
print reg4a.summary
reg4b = ps.spreg.error_sp_het.BaseGM_Endog_Error_Het(y,ones,yend=x, q=x, w=w)
print reg4b.betas
结果为:
2.2 Endogenous
相关代码为:
reg5 = ps.spreg.GM_Endog_Error_Het(y,xex,yend,q,w,name_y="HR90",name_x=["RD90"],name_yend=["UE90"],name_q=["FP89"],\
name_w="natqueen.gal",name_ds="nat.shp")
print reg5.summary
reg5a = ps.spreg.GM_Endog_Error_Het(y,xex,yend,q,w,step1c=True,name_y="HR90",name_x=["RD90"],name_yend=["UE90"],name_q=["FP89"],\
name_w="natqueen.gal",name_ds="nat.shp")
print reg5a.summary
结果为:
2.3 Combo model
相关代码为:
reg6 = ps.spreg.GM_Combo_Het(y,x,w=w,w_lags=2,name_y='HR90',name_x = x_names, name_w = 'nat_queen.gal',name_ds='NAT')
print reg6.summary
reg6a = ps.spreg.GM_Combo_Het(y,x,w=w,name_y='HR90',name_x = x_names, name_w = 'nat_queen.gal',name_ds='NAT')
print reg6a.summary
reg6c = ps.spreg.GM_Combo_Het(y,x,w=w,w_lags=2,step1c=True,name_y='HR90',name_x = x_names, name_w = 'nat_queen.gal',name_ds='NAT')
print reg6c.summary
结果为: