Py学习  »  Python

推荐&空间计量及Python、Stata操作代码及论文复制

计量经济学服务中心 • 5 年前 • 891 次点击  

来源: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) replaceuse natspmat 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 npimport 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')

然后打印上述结果

相关代码为:

print reg1.summary

结果为:

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.betasprint 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)
#Error Hom model with endogeneity - defaultreg2 = 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


# Error hom model -- combo -- instrument lag order set to 1reg3a = 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

# Error Hom model -- combo -- instrument lag order two and 'het' optionreg3b = 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¶


相关代码为:

# Defaults, two step as in Drukker et al.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

# Setup to mimic Stata "OLS" estimationreg4b = ps.spreg.error_sp_het.BaseGM_Endog_Error_Het(y,ones,yend=x, q=x, w=w)print reg4b.betas



结果为:

2.2  Endogenous


相关代码为:

# Standard case -- defaultsreg5 = 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

# step1c = Truereg5a = 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


相关代码为:

#  Error het  -- combo -- instrument lag order set to 2reg6 = 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#  Error het model -- combo -- instrument lag order set to 1reg6a = 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
# Error Het model -- combo -- instrument lag order two and step1c=True option
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

结果为:


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/62011