软件初探|matlab之空间计量

目录

最后修改日期:191231,18:31

事由

松鼠有难,正派学长自然要拿出一点正派学长的样子。从零开始自学matlab,写写作业,不过如此。好啦,话不多说爱不多示,进入正题吧。

一、介绍说明

数据为1978年-2011年华东七城市(上海、山东、安徽、江苏、浙江、江西、福建)各省区的GDP(GDP)、人口(RENKOU)、财政收入(GSH)、财政支出(GZH)、投资(TZ)、消费(XF)、进口(JK)。(氦核:别问我为什么起这些low爆的变量名,某松鼠的老师起的

以GDP为因变量,其他六个变量为解释变量,详细情况见表1。

表1 变量介绍表

变量名 含义 变量水平 单位
GDP 地区生产总值 连续型 亿元
RENKOU 人口 连续型 万人
GSH 财政收入 连续型 亿元
GZH 财政支出 连续型 亿元
TZ 投资 连续型 亿元
XF 消费 连续型 亿元
JK 进出口 连续型 亿元

利用matlab软件构造空间自回归模型、空间误差模型、空间杜宾模型和空间面板数据模型。其中空间自回归模型、空间误差模型、空间杜宾模型均使用2017年数据,空间面板数据模型使用40年全部数据构造。(氦核:切莫手滑一上来就panel函数。。。空间面板数据模型和空间xx模型有微妙的区别。血的教训

基于邻域关系的空间权重矩阵weight1由“华东省区公路邻域.xlsx”得出,基于距离关系的空间权重矩阵weight1由“华东各省会城市的距离”得出,基于GDP差距的经济距离关系的空间权重矩阵由“华东2014年GDP计算的经济距离”得出。综合权重矩阵取a=b=c=1/3(毫无梦想和灵魂的取值)。最后利用matlab构造出模型并进行检验。(氦核:文件在文末附件,你们看看我多好

注1:
(1)空间自回归模型:
(2)空间误差模型:
(3)空间杜宾模型:
(4)空间面板数据模型:

注2:
空间权重矩阵的选择,要有基于邻域关系的空间权重矩阵,基于距离关系的空间权重矩阵,基于某个经济指标的经济距离关系的空间权重矩阵。提倡构建组合空间权重矩阵;或

二、代码

贴代码之前,先说几个坑。

sar函数,sem函数,sdm函数,一定不能做多年的数据,只能使用一年数据,否则报错。(氦核:不知道谁没搞清楚原理就开始写代码了呢。。。

松鼠的老师还是有意思,自己派人写了个有趣的包:fanzhuan(将上/下三角矩阵变成对称矩阵),里面还有几个对空间权重矩阵做标准化的函数,不想找的话normw()也可以,具体内容实在不想看了。

这次用到的方法,是空间计量,对于我来说很新奇,同时觉得很有趣。matlab空间计量需要最关键的jplv7工具包,下载安装这里也略过。

准备结束,下来就要开工了。这次代码注释写的很详细,原因不表,读者心领神会即可。

工作开始

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

clear all;

% 工作路径
userpath('C:\Users\Surface\Desktop');
% 读取数据
[data,name] = xlsread('data',1); % 原数据为原始面板数据,需要转化为空间面板数据

% 读取几个权重矩阵
weight1 = xlsread('华东各省会城市距离',1); % 基于距离关系的空间权重矩阵
weight2 = xlsread('华东省区公路邻域',1); % 基于邻域关系的空间权重矩阵
weight3t = xlsread('华东2014GDP计算的经济距离',1); % 基于GDP的经济距离关系的空间权重矩阵
weight3 = fanzhuan(weight3t); % 将上三角矩阵反转为实对称矩阵,需要fanzhuan包
% 空间权重标准化,函数需要fanzhuan包
W1 = hbzh(weight1);
W2 = lyhbzh(weight2);
W3 = hbzh(weight3);
W = 1/3*W1+1/3*W2+1/3*W3 % 加权构建复合矩阵

% 问题的维度
T = 40; % 时期数量
N = 7; % 地区数量

最最重要的一个地方来了,要使用空间计量分析函数,就要明白其数据结构。

调整数据结构

空间面板数据结构
时间1 个体1 x1 x2 x3
时间1 个体2 x1 x2 x3
时间1 个体3 x1 x2 x3
……
时间2 个体1 x1 x2 x3
时间2 个体2 x1 x2 x3
时间2 个体3 x1 x2 x3
……
时间T 个体1 x1 x2 x3
时间T 个体2 x1 x2 x3
时间T 个体3 x1 x2 x3

原始的面板结构如下,需要变换调整:

个体1 个体2 个体3 个体4
时间1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
% 调整数据结构,从原始数据转化为空间面板数据
temp = zeros(T,7); % 构建存储面板数据的0矩阵
for i = 1:T % 第i年至第40年

shh = data(i,[2:8]); % SHH上海当年的全部数据
shd = data(i,[9:15]); % SHD山东当年的全部数据
ah = data(i,[16:22]); % AH 安徽当年的全部数据
js = data(i,[23:29]); % JS 江苏当年的全部数据
zhj = data(i,[30:36]); % ZHJ浙江当年的全部数据
jx = data(i,[37:43]); % JX 江西当年的全部数据
fj = data(i,[44:50]); % FJ 福建当年的全部数据
temp{(7*i-6):(7*i),:) = vertcat(shh,shd,ah,js,zhj,jx,fj); % 将每一年的数据贴进准备好的0矩阵

if i>40
break
end
end

完事了,建模。先做个简单最小二乘法的回归对比一哈。

OLS回归

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
% 0 OLS模型
% 提取变量
y = temp(:,[1]); % 华东各地区GDP
x_ols = temp(:,[2:7]);
% 变量名
vnames=strvcat('gdp','renkou','gsh','gzh','tz','xf','jk');
% 因变量:GDP(亿元),自变量:人口(万人),财政收入(亿元),财政支出(亿元),投资(亿元),消费(亿元),进出口(亿元)


% 建模
results_ols = ols(y,x_ols); % 进行最小二乘法回归
prt_reg(results_ols,vnames,1);

I = eye(T);W1 = kron(I,W);
res = moran(y,x_ols,W1); % moran 检验
prt(res); %moran值较大,在0.01显著性水平下,依据空间分布的特征显著

做完空间相关性检验后,一切才刚刚开始。空间相关性检验一般就moran和LR、LM检验。都有现成的函数,适合新手。

空间计量模型SAR,SEM,SDM

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47

% ---------------------------------------------------------------------
% 1 SAR模型
% 提取变量:2017年数据
y = temp(274:280,[1]);
x_sar = temp(274:280,[2,3,4,5,6,7]);
% 因变量:GDP(亿元),自变量:人口(万人),财政收入(亿元),财政支出(亿元),投资(亿元),消费(亿元),进出口(亿元)

% 建模
results_sar = sar(y,x_sar,W);
prt(results_sar,vnames);

results_sar.tstat % t检验统计量的值
results_sar.rho % 空间自回归系数rho
results_sar.beta % 模型估计的beta值


% ---------------------------------------------------------------------
% 2 SEM模型
% y = beta*x + mu ; mu = rho*W*mu + e
% 选择变量:2017年数据
y = temp(274:280,[1]);
x_sem = temp(274:280,[2:7]);

results_sem = sem(y,x_sem,W);
prt(results_sem,vnames);

results_sem.tstat % 渐进t检验统计量的值(最后输入为rho空间自回归系数)
results_sem.rho % (p above)
results_sem.beta % 模型估计的beta值


% ---------------------------------------------------------------------
% 3 SDM空间杜宾模型
% y = XB + u (optional) + v (optional) + s, s = p*W*s + e
% 选择变量:2017年数据
y = temp(274:280,[1]);
x_sdm = temp(274:280,[2:4]); % 空间相关性影响变量
vnames1=strvcat('gdp','renkou','gsh','gzh');

% 建模
results_sdm = sdm(y,x_sdm,W);
prt(results_sdm,vnames1);

results_sdm.tstat % t检验统计量的值
results_sdm.rho % 最后输入为rho空间自回归系数
results_sdm.beta % 模型估计的beta值

以上是三个一年数据的结果,下面是面板数据模型,平时网上搜到的基本都是面板数据模型。

工具箱目录jplv7→spatial→panel下有一个演示程序:demopanelscompare好像是随机效应与混合模型的选择,使用的方法是LR检验。

空间面板数据模型

真没什么好说的。要说的话只能怪罪LMsarsem_panel函数太猛了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
% 4 空间面板数据模型

% 4.1 空间相关性检验
%LM检验,大于6.635拒绝原假设(不存在空间自相关),即存在误差项空间自相关
LMsarsem_panel(results_sar,W,y,x_sar)
% 结果表明0.1显著性水平下,空间固定效应LR检验通过,空间固定效应的空间滞后的LM检验通过
% 时间固定效应的的空间误差的LM检验不通过,时间固定效应的LR检验不通过
% 故选择时间效应固定模型info.model=2
info.model=2;

% 4.2 提取变量:30年数据
y = temp(:,[1]);
x_sar = temp(:,[2,3,4,5,6,7]);
% 因变量:GDP(亿元),自变量:人口(万人),财政收入(亿元),财政支出(亿元),投资(亿元),消费(亿元),进出口(亿元)

% 4.3 建模
results_general = sar_panel_FE(y,x_sar,W,T,info);
prt_spnew(results_general,vnames);

results_general.corr2 % 模型的拟合优度调整的r方
results_general.tstat % t检验统计量的值
results_general.rho % 最后输入为rho空间自回归系数
results_general.beta % 模型估计的beta值

info.model参数是设定模型是某种固定效应:
info.model=0:表示此模型为混合模型,即没有固定效应;
info.model=1:表示此模型为地区固定效应模型;
info.model=2:表示时间固定效应模型;
info.model=3:表示双向固定效应模型。

经验小总结

help+函数名这个指令太有用了,任何软件的帮助文档都是学软件的最好老师。

matlab有个现象,你不加句末的分号,就会输出在下面。我一开始循环没有加分号,每次运行都很慢。

不知道为什么,他们读“马特拉布”,难道是北美口音?不得而知。

虽然没有系统学习过matlab,但是这次借着任务也算好好认识了这款传说中的软件,点一下,玩一年,help不花一分钱。真心感觉全部的语言都有相通之处。不过matlab在做统计的问题时,我总是觉得用着不趁手,不如真正的统计软件,输出结果也乱糟糟的。或许这就是没有把好钢用在刀刃上吧。

结果不贴了,有兴趣的人们可以跑跑看。数据传送门

松鼠作业一定很优秀了(老父亲笑容)

(后补,松鼠观罢:烦死了!)

(完)


本文链接: https://konelane.github.io/2019/12/30/191230空间计量/

-- EOF --

¥^¥请氦核牛饮一盒奶~suki