热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

二进制空间权重矩阵_Stata:空间权重矩阵的构建

作者:潘星宇(清华大学)Stata连享会:知乎|简书|码云|CSDNStata连享会计量专题||公众号合集直播:动态空间面板|空间双差分S

作者:潘星宇 (清华大学)

Stata 连享会:知乎 | 简书 | 码云 | CSDN

  • Stata连享会 计量专题  || 公众号合集

直播:动态空间面板 | 空间双差分 SDID

5d473ac1ccaf982a5421b03eb3e1bf31.png

特别说明

文中包含的链接在微信中无法生效。请点击本文底部左下角的,请点击【原文链接】

空间计量方法已经成为了时下最为热门和常用的计量方法之一,而空间权重矩阵的构建则是运用空间计量方法时必不可少的“标准动作”。但在实际研究过程中,我们往往会遇到很多问题。例如,目前网络上能获取到的矩阵与我研究的样本不匹配;例如,做回归时时需要剔除一些样本单位,但如何构建与之对应的空间权重矩阵;再例如,如何构建一些广义上的“空间”权重矩阵,等等。本期我们就来和大家一起了解一下权重矩阵的构建。

1. 空间权重矩阵原理简介

通常定义一个二元对称空间权重矩阵来表达 n 个位置的空间个体(例如区域)的邻近关系:

10d9143e2239a3bd29731dab7406b5e7.png

理论上讲,不存在最优的空间矩阵,即无法找到一个完全描述空间相关结构的空间矩阵。空间矩阵的构造必须满足 「空间相关性随着 ‘距离’ 的增加而减少」的原则。

需要注意的是。在空间计量中,“距离(counterfacutal) ” 的定义可以是广义的,包含但不限于地理上的相邻或者欧氏距离,也可以是经济意义上合作关系的远近,甚至可以是社会学意义上的人际关系的亲疏。

1.1 简单空间权重矩阵

最简单的空间权重矩阵是所谓的「二进制空间权重矩阵」,使用 0 和 1 来标记个体之间的空间相邻情况,属于 定性 界定。

简单二进制邻接矩阵

简单的二进制邻接矩阵的第 i 行第 j 列元素为:

c962bca69d76f7eee612aa3ac2e13d8b.png

基于距离的二进制空间权重矩阵

这类空间权重矩阵的第 i 行第 j 列元素为:

4d08033acb12f2e01b3db53fc6461462.png

广义「相邻」概念的二进制空间权重矩阵

如前文所述 “相邻” 可以有不同的定义。一般来说从最基本的空间概念出发,有 Rook 相邻Queen 相邻 等。Rook 相邻指的有一段共同的边即认为两个单位相邻,Queen 相邻认为只要存在顶点相接,就认为两地区为 "邻居" 关系。此外还可以定义成二者 是否有相同方言是否同属于一个城市群 ,等等。

310a84bfc4e3b3ca105322620b037ec9.png

1.2 基于距离的空间权重矩阵形式

若考虑距离的相对大小,想要从「定量」角度刻画空间相邻性,可以使用如下权重定义方法:

ac1129d2115e8635d516a65d452bfa47.png

087d951c29f5e4d5ab20df89295bbccc.png

其中:a31e5ca3173a4b617be07d3990762c08.png82515b6409e20f20d1ec1d345517c4da.png分别表示某个省份(比如地理几何中心,省会(首府)) 的纬度和经度;2422a89e82c978e5d9fefbf56a97268e.png为两个省份间经度之差;R 为地球半径,等于 3958.761 英里。在实际应用中,常对空间权重矩阵进行行标准化,空间权重矩阵的对角元素设为 0。

2. 空间权重矩阵构建的准备工作

要构建自己 “定制的” 空间权重矩阵,首先需要获得所研究空间单元的地理位置信息文件,以便于 Stata 判断相对或者绝对地理位置。这些信息通常来自于对研究单元对象的 ESRI Shapefile 文件(也就是 Stata 绘制地图时需要的所谓 “底图” 文件)。中国的 shapefile 文件包括省级,市级和县级等各个层面的数据,可以在国家基础信息中心申请下载,或者从一些公开的网络资源获取。

本文采用中国省级行政区 shapefile 作为演示数据。

一个完整的 shapefile 文件由以下几个文件组成:

  • 省级行政区.dbf

  • 省级行政区.shp

  • 省级行政区.shx

  • 省级行政区.prj

  • 省级行政区.shx

2.1 编辑 shapefile 文件

目前,Stata 中还没有能对 shapefile 文件进行编辑的命令。这一步骤一般采用 ArcGISarcview 等软件来进行。由于这一步非常重要,因此我们以 ArcGIS 软件为例,做一个简单的演示。

第一步:导入 shpefile 文件

ArcGIS 主界面中,点击下图中红圈所示的图标,然后按提示选择硬盘上存储的 shpefile 文件,即可将其导入 ArcGIS7fea4a5607dfaf8be9f32ecce091eeba.pngccd29f30019cec669f2f02311f0c6898.png

第二步:编辑 shpefile 文件

这里假设我们的研究对象不含西藏自治区、香港特别行政区、澳门特别行政区以及台湾省,我们就需要在编辑器当中把这四个要素删除。

首先选中图层,右键菜单中选择 “开始编辑”,5eb06d8b9f68319b52c17526a3b1ac8f.png

右键图层打开属性表,删除上面提到的四个要素:

5eb06d8b9f68319b52c17526a3b1ac8f.png

第三步:导出 shapefile 文件

再右键图层,选择 导出数据 :

6e2a859e3bf02af2949382cda9acfcd7.png

这样,我们就有了符合我们需要的空间权重矩阵构建的 shapefile 文件,下面就需要将其导入 Stata 以便做后续分析了。

2.2 在 Stata 中导入 shapefile 文件

若采用空间面板数据模型进行建模,则还需要找出这些省份的经纬度等地理信息。前文已经说明了如何下载 shapefile 文件,该文件中即包含了各个国家的地理信息。那么可以将研究单元数据和 shapefile 进行合并。这里需要用到 mif2dtashp2dta  命令来读取  shapefile 文件。该命令为外部命令,安装方式参考「 Stata: 外部命令的搜索、安装与使用」 。需要注意的是, 只有经纬度信息的数据集不能用于二项式空间权重矩阵的构建 ,关于这一点我们将在下文中说明。

这一过程主要是将 .shp 格式的文件编译成stata可以读取的文件,主要采用 shp2dta 命令完成。

我们来看看 shp2dta 命令的基本语法:

. shp2dta using shpfilename, ///

database(filename) coordinates(filename) ///

genid(newvarname) gencentroids(stub)

其中,

  • coordinates(filename) 指定包含 .shp 文件数据的新 Stata 数据集的名称。

  • database(filename)  指定包含 .dbf 文件数据的新 Stata 数据集的名称。

  • genid(newvarname) 指定新数值变量的名称,该数字变量在文件 database.dta 中将唯一标识感兴趣的不同地理区域。newvarname 采用的值将对应于文件 coordinates.dta 中变量 _ID 所采用的值。

  • gencentroids(stub) 选项可以计算出地理区域的质心的坐标,存储在变量 x_stuby_stub 中,并添加到文件 database.dta 中。但我们还必须指定 genid(newvarname) 选项。

. shp2dta using "C:\Users\xypan\Desktop\连享会推文\空间权重矩阵的构建\空间权重矩阵底图\30个省市自治区.shp", ///

database(data_db) coordinates(data_xy) ///

genid(weightid) gencentroids(stub) replace

. use data_db, clear

. rename NAME province

. list province x_stub y_stub in 1/10

+------------------------------+

| province x_stub y_stub |

|------------------------------|

1. | 黑龙江 47.8418 127.725 |

2. | 新疆 41.112 85.2009 |

3. | 山西 37.5698 112.263 |

4. | 宁夏 37.2681 106.158 |

5. | 山东 36.3217 118.107 |

6. | 河南 33.8743 113.581 |

7. | 江苏 32.9807 119.42 |

8. | 安徽 31.8229 117.197 |

9. | 湖北 30.9677 112.239 |

10. | 浙江 29.1659 120.023 |

+------------------------------+

读取 shapefile 文件后,可以发现有  x_stuby_stub 两个变量,分别代表了对应省份的的地理坐标。

接下来将带有地理坐标的 data_db.dta 文件和我们的数据文件匹配起来,命名为 spatialweight_province.dta:

merge 1:m province using "C:\Users\xypan\Desktop\连享会推文\空间权重矩阵的构建\省级数据.dta"

keep if _merge==3

drop _merge

save "C:\Users\xypan\Desktop\连享会推文\空间权重矩阵的构建\spatialdata_province.dta", replace

到此我们完成了几乎所有的准备工作,下一步开始正式构建空间权重矩阵。

3 空间权重矩阵的构建

3.1 命令说明

生成距离空间权重矩阵的命令语法为

spwmatrix gecon varlist [if] [in], ///

wname(wght_name) [wtype(inv) cart r(#) ///

dband(numlist) alpha(#) knn(#) ///

econvar(varname1) beta(#) Other_options]

主要选项的含义如下:

  • wname(wght_name) 表示要生成的空间权重矩阵的名称

  • wtype(bin | inv | econ | invecon | socnet | socecon) 分别代表二进制,距离衰减,经济距离,逆经济距离,社会网络或社会经济空间权重

  • dta  选择该选项以从 .dta 文件导入空间权重

  • text 选择该选项以从逗号或制表符分隔的文本文件导入空间权重

  • swm(idvar_name) 导入 ArcGIS 中生成的空间权重

  • knn(#) 请求最近邻空间权重

  • econvar(varname1) 可用此选项构建经济或逆经济距离空间权重

  • beta(#) 指定指数函数的系数 β; 默认测试版 (1)

  • cart 表示纬度和经度采用笛卡尔坐标,这是默认选项 (一般我们也使用的是这个);如果采用球面坐标则只能选择 r(#),此时不能同时选择 cart,并且需要指定地球半径距离(英里),一般默认填写 r(3958.761);

  • dband(numlist) 表示最大的权重矩阵边界,其中的 numlist 表示确定边界的变量,一般是各省份代码的最大值;

  • alpha(#) 表示参数限制范围,默认为 alpha(1) ;

3.2 反距离空间权重矩阵

use spatialdata_province.dta,clear

spwmatrix gecon x_stub y_stub , wn(spatialweight_province) wtype(inv) cart alpha(1)

xport(spatialweight_province,txt) row replace \\生成名为 spatialweight_province 的权重矩阵

spmat import spatialweight_province using spatialdata_province.txt,replace \\导入 spatialweight_province 权重矩阵

spmat save spatialweight_province using spatialweight_pro.spmat,replace //将生成的 spmat 权重文件存储为spatialweight_pro

spmat use spatialweight_pro using spatialweight_pro.spmat,replace //打开 spmat 权重文件

matrix list spatialweight_pro //查看 spatialweight_pro 权重矩阵

这样,反距离空间权重矩阵就生成了,由于矩阵展开太大,囿于篇幅限制这里不做展示。

3.3 经济距离空间权重矩阵

经济距离矩阵的计算公式为

use spatialdata_province.dta,clear

spwmatrix gecon x_c y_c, wn(province) wtype(invecon) cart econvar(GDP_2000) rowstand xport(spatialdata_province,txt) replace\\由于选择的是 invecon(经济反距离矩阵)因此需要声明相应的经济变量

spmat import spatialweight_province using spatialdata_province.txt,replace //生成以spatialweight_province 为名称的 spmat 权重文件

其他导入、存储和查看方法同上,不再赘述。

3.4 地理相邻空间权重矩阵

构建地理相邻空间权重矩阵时,之前计算的含有地理坐标的 spatialdata_province.dta 文件将不再适用,需要将我们编辑好的 .shp 文件导入 Geoda 软件,再导出 .gal 文件,再使用 spwmatrix 命令进行编译即可使用。导入过程非常简单,故在此略过。

use spatialdata_province.dta,clear

spwmatrix import using C:\连享会推文\空间权重矩阵的构建\空间权重矩阵底图\spatialdata_province.gal,wname(wcontig) xport(spatialdata_province, dat) \\.gal 只能导出 .dat (不是 .dta,.dat 是 R 语言中一种通用的文件格式)格式的文件

spmat import spatialweight_province using spatialdata_province.dat,replace

其他导入、存储和查看方法同上。

3.5 广义的 “相邻” 空间权重矩阵

这里我们采用文章开头提到过的二者是否有相同方言,我们采用徐现祥老师公布的方言数据,将方言赋值(因为 spmatrix 命令无法识别字符型变量),官话赋值为1,吴语赋值为2,以此类推。同属于一个方言区的省份我们赋值为1,不同的我们赋值为0.

use fangyan.dta, clear

spwmatrix socio fangyan_id, wname(fangyan) wtype(socnet) idvar(provinceid) xport(spatialdata_province,txt) \\fangyan_id代表我们的方言代理哑变量

其他导入、存储和查看方法同上。

4. 结语

  • 在完成了权重矩阵的构建后,就可以用它进行空间计量回归了,具体的操作可以参考我们的推文「Stata: 空间面板数据模型及Stata实现」 。

  • 另外需要注意的是 ArcViewArcGIS软件MATLAB 软件也可以进行空间权重矩阵的构建,我们也看到了甚至一些关键步骤也必须经过这些个软件的操作(也有其他软件,在此不一一列举)。对这方面有兴趣的同学可以选择性地学习一下。其中 ArcView 相对更加轻量,不像后两种软件动辄 10G 大小。

  • 目前 Stata 15.x 版本中发布的 xsmle 等命令可以也支持多个空间权重矩阵的回归。

参考文献

  1. Jeanty, P.W., 2010. spwmatrix: Stata module to generate, import, and export spatial weights. Available from.

相关推文

  1. 游万海,连玉君. Stata: 外部命令的搜索、安装与使用.

  2. 游万海,连玉君. Stata: Stata: 空间面板数据模型及Stata实现.

  3. Stata:空间计量之用 spmap 绘制地图

  4. Stata: 空间计量溢出效应的动态GIF演示

  5. Stata:空间计量之 SP 系列命令

往期精彩推文集锦

  • Stata连享会推文集锦

  • 连享会推文:Stata资源汇总

  • 连享会推文:数据处理与程序

  • 连享会推文:回归分析-模型设定-内生性

  • 连享会推文:时间序列+面板数据

  • 连享会推文:绘图


更多精彩课程

  • I. 直播-空间计量系列课程,主讲:范巧。

  • H. 视频-我的甲壳虫-经典论文精讲,主讲:连玉君。

  • G. 视频-R语言初识,主讲:游万海,随时在线观看

  • F. 直播视频-直击面板数据模型,主讲:连玉君,公开课-Free
  • E. 视频-经济学中的大数据应用,主讲:李兵,随时在线观看
  • D. 视频-空间计量全局模型及MATLAB实现,主讲:范巧,随时在线观看
  • C. 视频-动态面板数据模型,主讲:连玉君,随时在线观看
  • B. 视频-实证研究设计,主讲:连玉君,,随时在线观看
  • A. 直播-文本分析与爬虫专题,2020.3.28-29、4.4-5,主讲:司继春、游万海

172b4eee30cff521f2cb325fe2d19529.png

4天直播-连享会-文本分析与爬虫专题

611b680d946bc5a97981e7f20daed376.png




推荐阅读
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • 标题: ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 本文讨论了在PHP中将空格转换为问号的问题,并提供了解决方案。文章指出,空格不是标准的空格,而是特殊的0xC2 0xA0字符。作者尝试使用mb_convert_encoding函数将utf8字符串转换为gbk编码,但未成功。文章建议检查编辑器是否对空格进行了特殊处理,并提供了使用base64_encode函数打印结果的方法。最后,给出了完整的代码示例。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
  • 本文详细介绍了使用C#实现Word模版打印的方案。包括添加COM引用、新建Word操作类、开启Word进程、加载模版文件等步骤。通过该方案可以实现C#对Word文档的打印功能。 ... [详细]
  • 本文讨论了将HashRouter改为Router后,页面全部变为空白页且没有报错的问题。作者提到了在实际部署中需要在服务端进行配置以避免刷新404的问题,并分享了route/index.js中hash模式的配置。文章还提到了在vueJs项目中遇到过类似的问题。 ... [详细]
author-avatar
目目目目目目目目目目目目
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有