【数据分析】动态空间面板matlab源码

1. 背景介绍

当研究样本涉及到多个单元时 (如多个国家),研究单元间的空间相关性不可忽略。例如,在利用跨国样本研究环境污染 (如 C O 2 CO_{2}CO2​ 排放量) 的影响因素时,除考虑该国经济发展水平,人口总数,城市化水平和工业化水平等宏观变量之外,还应将其他研究单元的情况考虑在内,包括他国的环境污染程度 (后文纳入 W Y WYWY 的理论依据) 和宏观经济因素 (后文纳入 W X WXWX 的理论依据)。 理由如下:第一,由于污染的空间流动性,对于一些特定的污染物,本地区的污染水平会对其 “邻近” 地区的污染水平造成影响;第二,当某个地区的经济发展较快时,“邻近” 地区会模仿该地区的经济发展模式和产业布局,进而也会对其环境污染水平造成影响。

正如地理学第一定律 ( Tobler’s First Law ) 所说:任何事物都是与其他事物相关的,只不过相近的事物关联更紧密。空间计量计量学的发展为这一理论研究提供了有力的工具。 本推文将对面板数据框架下的空间计量模型 (空间面板数据模型) 进行讨论。本文主要分四部分内容进行介绍:

  • 模型介绍: 空间面板模型简介
  • 空间权重矩阵构造
  • 模型解释
  • 模型实现
%% Load Data and Define Time Periods
clear
clc

% Matlab data files
load A
load W1

% *** Number of time periods ***
T=29; % NOTE: This value should be one less 
%             than the total number of time periods in the sample.
% ******************************

N=46; % Number of regions in the sample

%% Row-Normalize W and define Dependent and Explanatory Variables
W=normw(W1); % function of LeSage
y=A(:,3); % column number in the data matrix that corresponds to the dependent variable
x=A(:,[4,6]); % column numbers in the data matrix that correspond to the independent variables

for t=1:T+1
    t1=(t-1)*N+1;
    t2=t*N;
    wx(t1:t2,:)=W*x(t1:t2,:);
    Wy(t1:t2,1)=W*y(t1:t2,1);
end

[nobs,K]=size(x);
xconstant=ones(nobs,1);

%% Set Flags
info.lflag=0;   % no log-determinant approximation
info.tl=1;      % add time lag
info.stl=1;     % add space-time lag?
info.ted=1;     % set ted=0 for model with spatial fixed effects without time dummies in combination with sar_jihai OR
% set ted=1 for model with spatial and time period fixed effects in combination with sar_jihai_time
%info.dyn=0;     % not needed for estimating dynamic spatial panel data model, since lines 478-491 are turned off in sar_panel_FE
info.model=3;   % space and time fixed effects type "help sar_panel_FE" for other options
info.fe=0;      % do not print fixed effects
%info.bc=0;      % 0 = no bias correction OR 1 = bias correction in sar_panel_FE; not needed for estimating dynamic spatial panel data model
% since bias correction is programmed in sar_jihai_time
% file

%% Estimate Model
results=sar_panel_FE(y(N+1:end),[y(1:end-N) Wy(1:end-N) x(N+1:end,:) wx(N+1:end,:)],W,T,info);
vnames=char('logcit','timelag logcit','spacetimelag logcit','logp','logy','W*logp','W*logy');
results1=sar_jihai_time(y(1:nobs),[x(N+1:nobs,:) wx(N+1:nobs,:)],W,info); % use of sar_jihai_time implies time fixed effects next to spatial fixed effects
results.beta=results1.theta1(1:end-2);
results.rho=results1.theta1(end-1);
results.tstat=results1.tstat1(1:end-1);
prt_sp(results,vnames,1);
btemp=results1.theta1;
varcov=results1.varcov;

%% Simulate Parameter Values

NSIM=1000;  % number of simulations for effects estimates
px=size(x,2);
[npar,dummy]=size(btemp);
simresults=zeros(npar-1,NSIM);
simdirst=zeros(px,NSIM);
simindst=zeros(px,NSIM);
simtotst=zeros(px,NSIM);
simdirlt=zeros(px,NSIM);
simindlt=zeros(px,NSIM);
simtotlt=zeros(px,NSIM);
simdirc=zeros(1,NSIM);
simindc=zeros(1,NSIM);
simtotc=zeros(1,NSIM);
stability = zeros(NSIM,1);

for sim=1:NSIM
    parms = chol(varcov)'*randn(size(btemp)) + btemp;
    deltasim = parms(npar-1,1); % coef WY(t)
    betasim = parms(3:npar-2,1);
    tausim = parms(1,1); % Coef Y(t-1)
    etasim = parms(2,1); % Coef WY(t-1)
    simresults(:,sim)=[tausim;etasim;betasim;deltasim];
	stability(sim,1) = simresults(1,sim)+simresults(2,sim)+simresults(npar-1,sim);
    SS=(eye(N)-deltasim*W)\eye(N);
    SC=SS*((tausim-1)*eye(N)+(deltasim+etasim)*W);
    simdirc(1,sim)=sum(diag(SC))/N; % average direct effect
    simindc(1,sim)=sum(sum(SC,2)-diag(SC))/N; % average indirect effect
    simtotc(1,sim)=simdirc(1,sim)+simindc(1,sim);
    for p=1:px
        C=zeros(N,N);
        for i=1:N
            for j=1:N
                if (i==j) C(i,j)=betasim(p);
                else
                    C(i,j)=betasim(p+2)*W(i,j);
                end
            end
        end
        SC=SS*C;
        simdirst(p,sim)=sum(diag(SC))/N; % average direct effect
        simindst(p,sim)=sum(sum(SC,2)-diag(SC))/N; % average indirect effect
        simtotst(p,sim)=simdirst(p,sim)+simindst(p,sim);
        SC=((1-tausim)*eye(N)-(deltasim+etasim)*W)\C;
        simdirlt(p,sim)=sum(diag(SC))/N; % average direct effect
        simindlt(p,sim)=sum(sum(SC,2)-diag(SC))/N; % average indirect effect
        simtotlt(p,sim)=simdirlt(p,sim)+simindlt(p,sim);
    end
end

%% Print Results
fprintf(1,'Convergence Effect of Dependent Variable\n');
convergence_effects = [mean(simdirc,2) mean(simdirc,2)./std(simdirc,0,2) tdis_prb((mean(simdirc,2)./std(simdirc,0,2)),N*T-K-1) ;
    mean(simindc,2) mean(simindc,2)./std(simindc,0,2) tdis_prb((mean(simindc,2)./std(simindc,0,2)),N*T-K-1);
    mean(simtotc,2) mean(simtotc,2)./std(simtotc,0,2) tdis_prb((mean(simtotc,2)./std(simtotc,0,2)),N*T-K-1)];

info.cnames = char('Effect','t-stat','p-value');
info.rnames = char(' ','Direct','Indirect','Total');
mprint(convergence_effects,info)

%% Print Out Stability Statistics
mean_stability = mean(stability);
temp = cr_interval(stability,.95);
interval_stability = [temp(2) temp(1)];
output = [mean_stability interval_stability];
info.rnames = char(' ','delta + eta + tau');
info.cnames = char('mean','Lower 95%','Upper 95%');
fprintf('Stability Statistics \n')
mprint(output,info)

%% Short Term Direct Effects
effects_st_direct = [mean(simdirst,2) mean(simdirst,2)./std(simdirst,0,2) tdis_prb((mean(simdirst,2)./std(simdirst,0,2)),N*T-K-1)];

fprintf(1,'Short term direct effects \n');
info.rnames = char('Variable','log price','log income');
info.cnames = char('direct','t-stat','p-value');
mprint(effects_st_direct,info)


%% Short Term Indirect Effects
effects_st_indirect = [mean(simindst,2) mean(simindst,2)./std(simindst,0,2) tdis_prb((mean(simindst,2)./std(simindst,0,2)),N*T-K-1)];

fprintf(1,'Short term indirect effects \n');
info.rnames = char('Variable','log price','log income');
info.cnames = char('indirect','t-stat','p-value');
mprint(effects_st_indirect,info)

%% Short Term Total Effects
effects_st_total = [mean(simtotst,2) mean(simtotst,2)./std(simtotst,0,2) tdis_prb((mean(simtotst,2)./std(simtotst,0,2)),N*T-K-1)];

fprintf(1,'Short term total effects \n');
info.rnames = char('Variable','log price','log income');
info.cnames = char('total','t-stat','p-value');
mprint(effects_st_total,info)

%% Long Term Direct Effects
effects_lt_direct = [mean(simdirlt,2) mean(simdirlt,2)./std(simdirlt,0,2) tdis_prb((mean(simdirlt,2)./std(simdirlt,0,2)),N*T-K-1)];

fprintf(1,'Long term direct effects \n');
info.rnames = char('Variable','log price','log income');
info.cnames = char('direct','t-stat','p-value');
mprint(effects_lt_direct,info)

%% Long Term Indirect Effects
effects_lt_indirect = [mean(simindlt,2) mean(simindlt,2)./std(simindlt,0,2) tdis_prb((mean(simindlt,2)./std(simindlt,0,2)),N*T-K-1)];

fprintf(1,'Long term indirect effects \n');
info.rnames = char('Variable','log price','log income');
info.cnames = char('indirect','t-stat','p-value');
mprint(effects_lt_indirect,info)


%% Long Term Total Effects
effects_lt_total = [mean(simtotlt,2) mean(simtotlt,2)./std(simtotlt,0,2) tdis_prb((mean(simtotlt,2)./std(simtotlt,0,2)),N*T-K-1)];

fprintf(1,'Long term total effects \n');
info.rnames = char('Variable','log price','log income');
info.cnames = char('total','t-stat','p-value');
mprint(effects_lt_total,info)

完整代码或者代写添加QQ1575304183

往期回顾>>>>>>

【数据分析】时变参数随机波动率向量自回归模型(TVP-VAR)matlab源码

【信号处理】基于ICA算法信号分离matlab源码

【数据分析】模糊二元决策树matlab源码

【数据聚类】基于遗传算法之聚类设计matlab源码

【数据聚类】基于蚁群算法聚类matlab源码

【数据聚类】基于模拟退火算法聚类设计matlab源码

【数据聚类】基于粒子群算法之聚类设计matlab源码

【数据分析】基于贝叶斯网络识别的机场航班延误因素分析matlab源码

【数据分析】基于 SOM的数据分类matlab源码

【数据分析】分形维数应用matlab源码

【数据分析】基于多元宇宙优化DBSCAN聚类matlab源码

猜你喜欢

转载自blog.csdn.net/qq_34763204/article/details/113798374