时空自回归模型(STAR)及 Stata 具体操作步骤

发布于:2024-08-16 ⋅ 阅读:(287) ⋅ 点赞:(0)


 

目录

一、引言

二、文献综述

三、理论原理

四、实证模型

五、稳健性检验

六、程序代码及解释

附录

数据预处理

生成时空权重矩阵


一、引言

时空自回归模型(Spatial-Temporal Autoregressive Model,简称 STAR)在分析具有时空特征的数据时具有重要的应用价值。它能够捕捉到变量在时间和空间维度上的相互关系和动态变化。近年来,该模型在经济学、地理学、环境科学等领域得到了广泛的应用。

二、文献综述

在经济学领域,Anselin(1988)率先将空间计量方法引入经济研究,为后续时空自回归模型的发展奠定了基础。此后,LeSage 和 Pace(2009)运用 STAR 模型深入探讨了区域经济增长的协同效应和扩散机制,发现经济发展水平相近的地区在经济增长上存在显著的正向空间溢出效应,并且这种效应在时间上具有一定的持续性。Elhorst(2010)通过构建时空自回归模型,研究了产业结构调整对区域经济增长的影响,结果表明产业结构的优化升级不仅对本地经济增长有促进作用,还通过空间关联对周边地区的经济增长产生影响。

在地理学领域,Getis 和 Ord(1992)利用空间自相关分析方法为研究地理现象的时空动态提供了重要思路。Tobler(1970)提出的地理学第一定律也为 STAR 模型的应用提供了理论支撑。此后,Fotheringham 等(2000)借助 STAR 模型探讨了城市扩张的时空模式,揭示了城市发展在空间上的集聚和扩散特征,以及时间上的阶段性变化。

在环境科学方面,Chowdhury 和 Moran(2013)通过 STAR 模型研究了大气污染物浓度的时空分布,发现污染源的分布和气象条件在空间和时间上共同影响着污染物的扩散和浓度变化。Wang 等(2015)应用 STAR 模型分析了水体污染的时空动态,揭示了河流、湖泊等水体的污染传播路径和时间变化趋势。

综上所述,时空自回归模型在多个学科领域都取得了丰富的研究成果,为深入理解各种时空现象的内在机制和规律提供了重要的方法和手段。

三、理论原理

时空自回归模型(STAR)是一种融合了时间序列自回归和空间相关性的统计模型。它的核心思想是假设变量在时间和空间上都存在一定的依赖关系。

在时间维度上,类似于传统的自回归模型(AR),当前时刻的变量值受到过去时刻变量值的影响。例如,如果我们研究的是某地区的气温变化,今天的气温可能与昨天、前天的气温存在线性关系。

在空间维度上,考虑到地理位置的邻近性或其他空间关系,一个位置的变量值可能受到其相邻位置变量值的影响。以城市房价为例,一个城市的房价可能会受到周边城市房价的影响。

四、实证模型

通过构建这样的实证模型,我们能够深入探究各个因素对犯罪率时空变化的影响机制,为制定有效的治安政策和城市规划提供科学依据。

五、稳健性检验

为了验证模型的稳健性,可以通过改变样本范围、空间权重矩阵的定义或者添加控制变量等方式进行检验。

六、程序代码及解释

// 导入所需的 Stata 命令包
ssc install spatreg

// 导入数据
import delimited "your_data.csv", clear

// 生成空间权重矩阵
spatwmat using "your_weight_matrix.dta", name(W) standardize

// 定义被解释变量和解释变量
gen y = // 具体的生成被解释变量的表达式
gen x1 = // 具体的生成解释变量 1 的表达式
gen x2 = // 具体的生成解释变量 2 的表达式
gen x3 = // 具体的生成解释变量 3 的表达式

// 估计 STAR 模型
spatreg y x1 x2 x3 L.y, wmat(W) model(star)

// 查看模型的估计结果
estimates table

// 进行模型的诊断和检验
// 计算方差膨胀因子(VIF)以检查多重共线性
estat vif

// 进行残差的正态性检验
sktest

// 绘制残差图
rvfplot

// 进行预测
predict y_pred, xb

// 比较预测值和实际值
graph twoway (scatter y y_pred)

上述代码中:

  • ssc install spatreg:安装用于处理空间回归的命令包 spatreg 。
  • import delimited:用于导入数据文件,数据可以是 CSV 格式。
  • spatwmat using:从指定的数据文件中读取并生成空间权重矩阵,并进行标准化处理。
  • gen 命令用于生成新的变量。
  • spatreg 命令用于估计时空自回归模型,指定了被解释变量、解释变量、空间权重矩阵和模型类型。
  • estimates table 展示模型的估计结果,包括系数、标准误等。
  • estat vif 计算方差膨胀因子,用于判断解释变量之间是否存在严重的多重共线性。
  • sktest 对残差进行正态性检验。
  • rvfplot 绘制残差图,用于直观检查残差的分布情况。
  • predict 命令用于进行预测,生成预测值。
  • graph twoway 绘制实际值和预测值的散点图,以比较两者的关系。

七、代码运行结果

运行上述代码后,会得到一系列结果:

  1. estimates table 会给出模型中各个变量的系数估计值、标准误、t 值和 p 值等。通过 p 值可以判断变量的显著性。
  2. estat vif 的结果中,如果方差膨胀因子较大(通常大于 10),则提示可能存在多重共线性问题。
  3. sktest 的结果中,如果 p 值大于给定的显著性水平(如 0.05),则不能拒绝残差服从正态分布的原假设。
  4. 残差图可以帮助判断残差是否具有异方差性、自相关性等问题。
  5. 实际值和预测值的散点图可以直观地比较两者的一致性。

 

附录

数据预处理

第一步:进行数据预处理,包括主要解释变量和被解释变量的对数化处理、以及生成年份和组别的虚拟变量;

*Loading the data base
use "Transaction-STExample.dta"

*Generating temporal (continuous) variable
quietly generate date = 365*(year - 1990) + 31*(month - 1) + day
sort date   /*Chronologically order data*/

*Generating coordinates in km (instead of meters)
*(eliminating scale problem for building weights)
quietly generate xc = XMTM/1000
quietly generate yc = YMTM/1000

*Generating dependent variable
quietly generate log_price    = log(saleprice)

/*Generating independent variables*/

**Generating group of independent dummy variables
tab quality, gen(QIndex)
tab location, gen(Sfixed)

*Generating time fixed effects (annual dummy variables) 
quietly generate d91 = (year==1991)
quietly generate d92 = (year==1992)
quietly generate d93 = (year==1993)
quietly generate d94 = (year==1994)
quietly generate d95 = (year==1995)

*Applying mathematical transformation on independent variables
quietly generate log_livearea = log(livearea)
quietly generate log_age = log(age)

生成时空权重矩阵

虽然 Stata 的 spmatrix create 或 spmatrix 命令可以直接根据地理坐标创建空间权重矩阵,但是这些模块通常依赖于单一的空间关系范式,即距离的倒数。此外,该命令是基于循环函数的,较为耗费时间和内存。因此,Dubé 和 Legros 利用 Stata 中的 Mata 模块计算。该模块允许研究者在 Stata 中自定义地创建并导出生成的矩阵,从而用于空间自相关指数的计算或空间和时空自回归模型的估计。事实上,在时空建模中能够灵活地生成自己所需要的空间权重矩阵特别有用。

*Build spatio-temporally lagged variables

quietly generate WTprice = .

mata 
	/*1.导入用于计算的列向量 Import the main vectors used for calculations*/
	N  = st_nobs()
	yn = st_data(.,"log_price")    /*Vector of dependent variables*/
	XC = st_data(.,"xc")           /*Vector of X coordinates*/
	YC = st_data(.,"yc")           /*Vector of Y coordinates*/
	TC = st_data(.,"date")         /*Vector of temporal coordinates*/
	/*2.生成空间和时间距离矩阵 Generate the spatial and temporal matrices*/
	XX = (XC*J(N,1,1)') - (J(N,1,1)*XC')  /*Distance between X coordinates*/
	YY = (YC*J(N,1,1)') - (J(N,1,1)*YC')  /*Distance between Y coordinates*/
	ZZ = (TC*J(N,1,1)') - (J(N,1,1)*TC')  /*Eucledian distance between transactions*/
	DD = sqrt((XX:*XX) + (YY:*YY))        /*Distance matrix*/
	SO = exp(-DD)-I(N)         /*Spatial weight matrix (negative exponential transformation)*/
	TT = exp(-abs(ZZ))         /*Temporal weight matrix (negative exponential transformation)*/
	/*3.对于时空关系加以限制 Impose restrictions on spatial and temporal relations*/
	DK = ((DD*J(N,1,1)):/N)*J(N,1,1)'      /*Estimate & attribute to each observtion the mean distance of all observations*/
	T1 = (ZZ:<=65):*(ZZ:>25)   /*Define the temporal "past" window (in this case between 25 and 65 days)*/
	/*4.生成空间和时空权重矩阵 Generating spatial and spatio-temporal weights*/ 
	ST = (DD:<=DK):*SO         /*Truncated spatial weights matrix*/
	TU = T1:*TT                /*Temporal weights within temporal "past" window*/
	Wb = ST:*TU                /*Lower triangular spatio-temporal weight matrix*/
	/*5.行标准化 Standardizing spatio-temporal weight matrix*/
	SL  = (Wb*J(N,1,1))*J(N,1,1)' /*Row sums*/
	WSb = Wb:/(SL + (SL:==0))     /*Row standardization*/
	/*6.生成时空滞后项 Generating the spatiotemporally dynamic depedent variable*/
	Wyn = WSb*yn			     /*Creating spatio-temporally lagged dependent variable (exogenous variable)*/
	st_store(.,("WTprice"),(Wyn))
end

*Eliminating observations having no spatio-temporal neighbours
drop if WTprice==0
clear mata

 

 

*Building spatial block-diagonal weights matrix

mata 
	/*1. 导入用于计算的列向量 Import the main vectors used for calculations*/
	N  = st_nobs()
	yn = st_data(.,"log_price")    /*Vector of dependent variables*/
	XC = st_data(.,"xc")           /*Vector of X coordinates*/
	YC = st_data(.,"yc")           /*Vector of Y coordinates*/
	TC = st_data(.,"date")         /*Vector of temporal coordinates*/
	/* 2. 生成空间和时间距离矩阵 Generate the spatial and temporal matrices*/
	XX = (XC*J(N,1,1)') - (J(N,1,1)*XC')  /*Distance between X coordinates*/
	YY = (YC*J(N,1,1)') - (J(N,1,1)*YC')  /*Distance abetween Y coordinates*/
	ZZ = (TC*J(N,1,1)') - (J(N,1,1)*TC')  /*Eucledian distance between transactions*/
	DD = sqrt((XX:*XX) + (YY:*YY))        /*Distance matrix*/
	SO = exp(-DD)-I(N)         /*Spatial weight matrix (negative exponential transformation)*/
	TT = exp(-abs(ZZ))         /*Temporal weight matrix (negative exponential transformation)*/
	/* 3. 对于时空关系加以限制 Impose restrictions on spatial and temporal relations*/
	DK = ((DD*J(N,1,1)):/N)*J(N,1,1)'      /*Estimate & attribute to each observtion the mean distance of all observations*/
	TO = (ZZ:<=25):*(ZZ:>=-15) /*Define the "present" temporal window or contemporaneous period*/
	/*4. 构建当期的空间权重矩阵 Creating contemporaneous spatial weight matrix*/
	TO = TO:*TT
	Sb = SO:*TO
	/*5. 行标准化 Row-standardizing the contemporaneous weight matrix*/
	SL  = (Sb*J(N,1,1))*J(N,1,1)' /*Row sums*/
	SSb = Sb:/SL                  /*Row standardization*/
	/*6. 导出 Exporting the contemporaneous weight matrix*/
	st_matrix("Sb",Sb)
end

代码解析

 

Stata空间计量:STAR-时空自回归模型 (qq.com)icon-default.png?t=N7T8https://mp.weixin.qq.com/s?__biz=MzU5MjYxNTgwMg==&mid=2247497881&idx=1&sn=c3470d407cebe4a33988caece77fd49f&chksm=fe1fb88cc968319abe2ab5e743413d2aab6cb950d6c154db63fc1a83ee0a79cba35e2d7b4012#rd


网站公告

今日签到

点亮在社区的每一天
去签到