楼主: 小楼一夜S
32095 316

[学习心得] 用stata做空间计量的经验贴     [推广有奖]

  • 0关注
  • 39粉丝

硕士生

24%

还不是VIP/贵宾

-

威望
0
论坛币
2927 个
学术水平
77 点
热心指数
84 点
信用等级
65 点
经验
2892 点
帖子
47
精华
1
在线时间
128 小时
注册时间
2015-4-5
最后登录
2017-11-18

小楼一夜S 发表于 2016-7-5 12:34:13 |显示全部楼层
本人准大四生,之前为了完成发展经济学的论文接触了一下空间计量的内容,使用的软件是stata,折腾了好久算是有点心得,想和和我一样的纯新手分享一下。其实人大论坛这边还是有一些关于利用stata做空间计量的内容,本人也参考了不少,以下有参考的都尽可能列出来。
首先讲一讲如何利用stata制作分布地图,本人的课程论文是关于老龄化的区域分布,所以上一个2012年的老龄人口分布图(省域):
绝对2012.png

方法参考自http://bbs.pinggu.org/thread-3007850-2-1.html
首先要有地图的数据,在那个帖子中介绍了一个命令:findit china_map
大致的意思即下载了中国的地图数据,类似的好像还有一个可以找到世界地图的数据,不过记不清了,输入这个命令的过程有点类似于安装命令,安装完之后会在stata的安装文件夹中出现一个china_map.zip的压缩包,解压后会出现两组数据,china_label.dta和china_map.dta,都可以打开看一下,前者有省份的标识,后者并没有,然后当时本人使用的是第一个文件,我们可以看一下里面的数据:
Image.png

name一栏可能是中文无法显示的原因,不过我们可以根据英文名来确定不同的省份。然后这里的原理本人也并不是非常清楚,只介绍本人是怎么做的。我们可以发现一个省份可能对应若干行,所以在这里做的事就是将我们的数据对应填进这个stata数据里,这会花掉一点时间,不过在excel里整理起来还是比较快的。在这里如果我们使用的是面板数据的话,可以把我们的变量一行一行整理,而不是一个个,像我就一下子输入了几年的数据,到时候作图换个变量就可以实现。
给大家截一个excel整理的图:(请忽视变量)

Image1.png

数据到手,我们还需要一个命令,相信很多人都知道的一个spmap的命令,下载安装:ssc install spmap;
在这里用2012年的数据做一个范例(变量名我加了个a,直接数字似乎不可行):
输入命令: spmap a2012 using "china_map.dta",id(id)
然后我们就可以看到弹出来的图了:

Image2.png

我们在这里可以进行简单的编辑,然后在这里还有一个值得关注的部分,那就是颜色划分的范围,我们可以看到左下角的划分是自动生成的,如果我们想要自定义怎么办呢?只要我们在之前的命令上加上后缀即可: spmap ֵ a2012 using "china_map.dta",id(id) clm(c) clb(0 7 8 9 10 11 16)
参考自:http://bbs.pinggu.org/thread-3682168-1-1.html
相信大家能看出这个后缀是什么意思,以及我们应该怎么去定义范围:

Image3.png

最后再提供一个比较好的帖子,也是关于作图的,当然要比我的解说专业得多:
http://bbs.pinggu.org/thread-3786220-1-1.html
感觉上画这个图非常ZB,做出的论文老师不置可否,然后说:你这图画的不错,我二十年前就开始画了/(ㄒoㄒ)/~~




画完了图,我们接下来就开始正式进入空间计量部分,一般情况下,我们都会先接触一个Moran's I指数,或者叫莫兰指数,这是一个衡量空间自相关的变量,如果没有空间上的相关性,那么我们做空间计量也就没有意义了。而为了计算莫兰指数,乃至为了之后的空间计量模型部分,我们都需要一个空间权重矩阵W;
关于空间权重矩阵部分,主要有两种计算的方式:一、以相邻为1,不相邻为0;二、以距离小于固定值的为1,距离大于固定值的为0;由于本人使用的数据是省域,于是恬不知耻地直接找了一个论坛里分享的矩阵完事,计算方法是第一种,附件中会分享;而如果是县域或者其他空间分布的矩阵的话,本人并没有尝试过,但是有一个和我一起尝试做空间计量的同学倒是折腾过,折腾了很久,最后还是以失败告终,所以在这里就不误人子弟了,仅提供一个相对详细的帖子作参考:http://bbs.pinggu.org/thread-2588556-1-1.html
于是我们有了矩阵(说得好像真的有了一样(#‵′)凸),关于矩阵的形式,以我的数据为例,就是31×31的一个矩阵,我们需要将其变为dta数据,其实贴进stata,然后另存为就可以,例如我们取名为W.dta。
然后我们就需要空间计量的命令了,在这里推荐一组spat开头的系列命令:

Image4.png

(截图来自陈强的高级计量经济学及stata应用第二版,这本书有一章就在讲空间计量,后期摸索我主要就靠这本书,由于论坛好像已经有这本书的分享,而且是收费的,我也不好全部免费发上来,仅免费提供空间计量一章)
在调用命令之前我们需要将W.dta放到我们的安装文件夹里,然后输入命令:spatwmat using W.dta,name(W);
正常情况下,我们的空间权重矩阵就存在了,不过这里可能会出现问题,而出现问题的还是我那个悲催的同学,我的电脑是windows7,然后她是mac,结果她做到这一步时发现无法调用W.dta,也就是说无法生成矩阵,虽然的确把W.dta放到安装文件里了。不过后来我们尝试了一下,发现一种解决办法,这一点等一会儿再讲。
对于像我一样的新手有一点必须要说明的就是权重矩阵和我们的数据应该是两个文件,而在我们导入矩阵之后,并不会占用我们stata储存数据的那一块区域,所以我们要跑回归的数据甚至是可以直接复制粘贴进去的,其实本人就是这么干的,我们可以看一下矩阵和数据的形式:

Image5.png

(注意不要把第一列复制进去)
Image6.png

本人的数据是多年份的,所以是这样的,在这里,我们并不需要一个ID列,stata会自动默认,即我的矩阵有31列,这里的数据也应当有31列,于是就会自动对应;
之前我们已经引入了权重矩阵,因而接下来直接输moran指数的命令:
spatgsa a2012,weights(W) moran //全局莫兰指数,a2012是我的变量,即2012年的各省老龄化水平,别忘记变量右面有个逗号,不然会出错,此命令默认单尾;
spatlsa a2012,weights(W) moran //局部莫兰指数
spatlsa a2013 ,weight(W) moran graph (moran) symbol(n)//莫兰散点图
关于莫兰散点图有一点需要说明的就是当时做出的散点图是黑底的,直接贴到word上非常难看,但是在stata之中却提醒无法编辑,搞了很久没找到解决办法,后来机智的我把黑底图贴进word之后,利用word自带的对图片的编辑功能设置了黑色为透明色,然后略加调整,散点图就已经有点像模像样了。不过只能说奇技淫巧,遇到这个问题又实在解决不了的可以考虑下。

关于莫兰指数的部分就到此为止了,问题并不大,除了我那个悲催的同学。我那个同学出现的问题是无法调用数据生成权重矩阵,而我们后来的解决办法是把权重矩阵的数据粘贴进stata之后,直接生成矩阵:spatwmat ,name(W);刚才试了一下,这个办法在我的电脑上并不行,不知道出了什么问题,但是我们的确是按照直接生成矩阵的思路来的,生成矩阵之后再把矩阵数据清空,粘贴进我们要使用的数据即可;这一块可能有待大神补充;
整体上这块内容在我搞到陈强的那本书之后很快就出来了,主要是那本书上有个例子,在附件中我也会将例子的数据附上,大家可以按照那里的思路学习;




接下来的部分是空间模型部分,由于我做的是面板的数据,所以这一部分并没有完全接触过,当然两者之间在操作上没有本质的差异,这一块内容大家可以参考陈强的教材,摸索一下,很快就能掌握;



好了,最后就是我的空间面板部分了,事实上,这部分内容在陈强的教材占也有讲到,但是但是我照着他的教材操作,仍然出现了一点问题(事实证明,那是我的问题,而不是教材的/(ㄒoㄒ)/~~,所以作为经验贴我觉得有必要讲一下,哪些地方可能会出现问题)
首先下一个非官方命令xsmle: net install xsmle;
然后第一步仍然是导入矩阵,这一点可以参考之前的操作,陈强的教材中又提供了一条新命令,但就不赘述了,本质是一样的:spatwmat using W.dta,name(W);
然后大家可以照着陈强的内容开始操作,我以我自己的命令举例:
spatwmat using shengfenW.dta,name(W) //打开文件后导入矩阵
xtset id 年份//设定面板
xsmle 老年化率 医疗机构数 人均GDP 普通高中学校数 在职职工参加养老保险人数万人 人口自然增长率,wmat(W)model(sdm)robust nolog noeffects
(本人是stata14,所以支持中文变量名,大家看到中文变量名不要感到奇怪)
然后你就会喜闻乐见地发现出错了,stata会提醒:initial values not feasible;
哪里出了问题呢?其实是我们在我们进行这一轮操作的时候,我们导入的矩阵必须是标准化的!不要问我为什么,我也只是查来的/(ㄒoㄒ)/~~
spatwmat using shengfenW.dta,name(W) standardize//打开文件后导入矩阵,标准化以防出现initial values not feasible错误
xtset id 年份//设定面板
xsmle 老年化率 医疗机构数 人均GDP 普通高中学校数 在职职工参加养老保险人数万人 人口自然增长率,wmat(W)model(sdm)robust nolog noeffects
在标准化之后,就不会再出现错误提醒了;
具体操作大家都可以参考陈强的教材;
然后大家应该知道空间计量有多个可选模型,SDM,SAR和SEM,对于如何选择模型我不想多说,因为我也完全不懂啊,但是在三个模型的命令上其实存在一个非常微小的差别,我们先来看一看正确的命令:
xsmle 老年化率 医疗机构数 genGDP 普通高中学校数 在职职工参加养老保险人数万人 人口自然增长率,wmat(W)model(sdm)robust nolog noeffects
xsmle 老年化率 医疗机构数 genGDP 普通高中学校数 在职职工参加养老保险人数万人 人口自然增长率,wmat(W)model(sar)robust nolog noeffects
xsmle 老年化率 医疗机构数 genGDP 普通高中学校数 在职职工参加养老保险人数万人 人口自然增长率,emat(W)model(sem)robust nolog noeffects

不知道大家看出差别没有,关键在于SEM模型在调用权重矩阵的命令是:emat,而其他两个模型为wmat,关于这一点,我们可以help xsmle查看帮助
如果还是和我一样直接将括号里的sdm,sar,sem互换一下的话,就会出现:Specify ematrix() option with SEM model  invalid syntax ;
最后再提醒一个关于霍斯曼检验的问题,其实和空间计量问题不大,不过我当时遇到了就提醒一下;
我们之前在跑回归的时候都是默认随机模型,而且都是稳健结果(robust),但是在霍斯曼检验时,就需要将(robust)去掉:
xsmle 老年化率 医疗机构数 genGDP 普通高中学校数 在职职工参加养老保险人数万人 人口自然增长率,wmat(W)model(sdm) durbin( genGDP 普通高中学校数 ) nolog noeffects
est sto re
xsmle 老年化率 医疗机构数 genGDP 普通高中学校数 在职职工参加养老保险人数万人 人口自然增长率,wmat(W)model(sdm) durbin( genGDP 普通高中学校数 ) nolog noeffects fe
est sto fe
hausman fe re

如果稳健(robust)的话,就会出现:hausman cannot be used with vce(robust), vce(cluster cvar), or p-weighted data;




说实话,本人是为了完成那一篇课程论文才接触的空间计量,一开始完全处于一脸懵逼的状态,摸索了许久才算有点成果,不过也就仅限于这个帖子里所说的啦,所以要是提问什么高深的问题我也是完全不会的啊。而这个帖子呢,也不算什么技术贴,只能说是一个经验贴,相信还是能够为那些和我一样刚接触空间计量,啥都不懂的小白一点帮助。
最后说明一下附件的情况。
“我的数据”里包括三部分,第一部分是一个31×31的空间权重矩阵(以相邻为1,不相邻为0,然后海南省不与任何一个省份相邻);第二部分是1997-2013年的人口老龄化数据(65岁以上老龄人口比重);第三部分是自变量和因变量;
“陈强 空间计量部分”是我从陈强的《高级计量经济学及stata应用》的第二版中截取的空间计量的部分内容;
然后附上的数据是陈强教材中使用到的四个数据,有两个不让我传,于是打成压缩包了 压缩包.zip (25.59 KB)


我的数据.xlsx (24.58 KB)


陈强 空间计量部分.pdf (10.03 MB)

























支持楼主:购买VIP购买贵宾 购买后,论坛将奖励 10 元论坛资金给楼主,以表示您对TA发好贴的支持
 
载入中......

回帖推荐

小楼一夜S 发表于99楼  查看完整内容

丢失的数据文件已经重新上传,解压密码为123,然后我是没有设置论坛币的,扣了的论坛币应该是流量费吧。
已有 31 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
chenyaner + 5 + 3 + 3 + 3 太棒了!向你学习!
xinyanmiao + 1 精彩帖子
遥望北城 + 5 + 5 + 5 精彩帖子
2010517155lpq + 100 + 1 + 1 + 1 精彩帖子
crystal8832 + 30 + 2 + 2 + 2 精彩帖子
317792209 + 100 + 4 + 5 + 5 精彩帖子
justin81 + 5 精彩帖子
zl89 + 60 精彩帖子
linger1213 + 1 + 4 + 4 + 4 精彩帖子
sfhsky + 1 精彩帖子

总评分: 经验 + 1200  论坛币 + 127  学术水平 + 62  热心指数 + 66  信用等级 + 47   查看全部评分

本帖被以下文库推荐

stata SPSS
chinasuperstar 发表于 2016-7-5 23:37:58 |显示全部楼层
好贴,顶一下
已有 1 人评分经验 收起 理由
unparalleled + 20 精彩帖子

总评分: 经验 + 20   查看全部评分

回复

使用道具 举报

l-unar 发表于 2016-7-6 16:14:50 |显示全部楼层
好贴,学习!
已有 1 人评分经验 收起 理由
unparalleled + 20 精彩帖子

总评分: 经验 + 20   查看全部评分

回复

使用道具 举报

guangxi2046 发表于 2016-7-7 20:22:08 |显示全部楼层
顶一个,省去学geoda
已有 1 人评分经验 收起 理由
unparalleled + 20 精彩帖子

总评分: 经验 + 20   查看全部评分

回复

使用道具 举报

少室山上 发表于 2016-7-17 00:21:48 |显示全部楼层
spatgsa能对面板数据中的因变量值进行莫兰检验么?请问你是怎么处理的……谢谢!
已有 1 人评分经验 收起 理由
unparalleled + 20 精彩帖子

总评分: 经验 + 20   查看全部评分

回复

使用道具 举报

湍波历几重 发表于 2016-7-17 19:16:03 |显示全部楼层
[em17][em17][em17]楼主厉害,学习了
已有 1 人评分经验 收起 理由
unparalleled + 20 精彩帖子

总评分: 经验 + 20   查看全部评分

回复

使用道具 举报

小楼一夜S 发表于 2016-7-19 22:00:36 |显示全部楼层
少室山上 发表于 2016-7-17 00:21
spatgsa能对面板数据中的因变量值进行莫兰检验么?请问你是怎么处理的……谢谢!
我的数据是面板数据,但是在计算莫兰指数的时候并不是把所有的因变量一股脑放进去的,而是抽取某一个年份,如a2012就是2012年的因变量,算这个年份的莫兰指数,然后把十几年的的全局莫兰指数都算出来,就能拿到十几个数据。放在论文里用的话,就抽几个数据列一下,说明存在空间上的相关性巴拉巴拉。局部莫兰职数的话,我只抽了最近一年的数据。看了一些相关的中文文献也大多是这么干的,好像没有把面板数据的因变量一下子全部放进去检验的。
已有 1 人评分经验 收起 理由
unparalleled + 20 精彩帖子

总评分: 经验 + 20   查看全部评分

回复

使用道具 举报

yinfeixiao 发表于 2016-7-21 21:15:13 |显示全部楼层
好东西
已有 1 人评分经验 收起 理由
unparalleled + 20 精彩帖子

总评分: 经验 + 20   查看全部评分

回复

使用道具 举报

beijin2008 发表于 2016-7-22 08:20:25 来自手机 |显示全部楼层
小楼一夜S 发表于 2016-7-5 12:34
本人准大四生,之前为了完成发展经济学的论文接触了一下空间计量的内容,使用的软件是stata,折腾了好久算是 ...
楼主辛苦了
已有 1 人评分经验 收起 理由
unparalleled + 20 精彩帖子

总评分: 经验 + 20   查看全部评分

回复

使用道具 举报

vickywang1990 发表于 2016-7-24 00:11:43 |显示全部楼层
楼主棒棒哒!!!
已有 1 人评分经验 收起 理由
unparalleled + 40 精彩帖子

总评分: 经验 + 40   查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 我要注册

GMT+8, 2017-11-20 17:33