基于MATLAB实现空间计量模型及检验方法

基于MATLAB实现空间计量模型(SVAR、SEM、SMD等)及检验方法(LM、Wald等)


一、核心模型MATLAB实现

1. 空间杜宾模型(SDM)

%% 数据准备
load('spatial_panel.mat'); % 包含y, x, W矩阵
n = size(y,1); T = size(y,2);

%% 模型估计
model = 1; % 1=空间固定效应, 2=时间固定效应
y_demean = y - mean(y,2); % 去均值处理
x_demean = x - repmat(mean(x,2),1,T);

%% 构建空间滞后项
Wx = W * x_demean;

%% 构建回归矩阵
X = [ones(n,1) x_demean Wx];

%% OLS估计
results = ols(y_demean(:), X(:));
beta = reshape(results.beta, [T, size(x,2)+2]);

%% 空间效应分解
direct = beta(:,3); % 直接效应
indirect = (W * beta(:,3) - beta(:,3)); % 间接效应
total = direct + indirect; % 总效应

关键参数说明

  • W需为行标准化空间权重矩阵
  • model=1时自动计算区域固定效应

2. 结构方程模型(SEM)

%% 定义测量模型
Lambda = [1 0; 1 0; 0 1; 0 1]; % 潜变量与显变量关系
Theta = diag([0.5 0.5 0.5 0.5]); % 测量误差

%% 定义结构模型
Beta = [0 0; 0.6 0]; % 潜变量间路径系数
Psi = diag([1 1]); % 潜变量方差

%% 构建模型结构体
model.Lambda = Lambda;
model.Beta = Beta;
model.Theta = Theta;
model.Psi = Psi;

%% 生成模拟数据
X = [normrnd(0,1,100,4) normrnd(0,1,100,4)];
fit = sem(model, X);

%% 模型修正
sem.plot(fit); % 查看路径图
sem.modify(fit, 'add', 'lambda', [0.3 0.4]); % 添加路径

应用场景:适用于多变量因果关系分析(如经济政策效应评估)

3. 空间向量自回归(SVAR)

%% 构建空间滞后矩阵
W = normw(W1); % 权重矩阵标准化
A = [0.5 0.2; 0.3 0.7]; % 系数矩阵

%% 生成SVAR数据
n = 100; T = 50;
u = mvnrnd(zeros(2,1), eye(2), T*n);
Y = zeros(T,n);
for t = 3:T
    Y(t,:) = A*(Y(t-1,:) + A*(Y(t-2,:) + W*Y(t,:)')) + u(t,:);
end

%% 脉冲响应分析
irf = irf(Y, 10); % 10期脉冲响应
plot(irf); % 绘制响应曲线

关键改进:可结合TVP-VAR实现时变参数估计


二、空间计量检验方法

1. LM检验系列

%% 基础LM检验
[LMlag, LMerr, rLMlag, rLMerr] = LMsarsem_panel(beta, W, y, x);

%% Robust LM检验
[RobustLMlag, RobustLMerr] = LMsarsem_panel(beta, W, y, x, 'robust');

%% 决策规则
if LMlag > chi2inv(0.95,1)
    disp('选择空间滞后模型(SLM)');
elseif LMerr > chi2inv(0.95,1)
    disp('选择空间误差模型(SEM)');
else
    disp('无法拒绝无空间效应原假设');
end

检验意义:判断空间相关性来源(滞后/误差)

2. Wald检验

%% 参数约束检验
R = [1 0 0; 0 1 0]; % 约束矩阵(如β1=β2)
q = [0; 0]; % 约束值

[Wstat, pval] = waldtest(beta, R, q, V); % V为协方差矩阵

%% 结果解读
if pval < 0.05
    disp('拒绝原假设,参数存在显著差异');
else
    disp('无法拒绝原假设');
end

应用场景:检验空间权重矩阵设定合理性


三、模型选择与优化

1. 模型选择标准

准则 计算公式 选择原则
AIC -2logL + 2k 值越小越好
BIC -2logL + k*log(n) 值越小越好
LR统计量 2(logL_unrestricted - logL_restricted) p<0.05时拒绝原假设

2. 参数优化技巧

%% 使用BFGS算法优化
options = optimoptions('fminunc','Algorithm','quasi-newton');
[opt_beta, opt_logL] = fminunc(@(b) -loglikelihood(b,y,W), beta0,options);

%% 贝叶斯估计(MCMC)
niter = 10000; burnin = 2000;
[beta_post, sigma_post] = gibbs_sampler(y,W,niter,burnin);

四、完整分析流程示例

  1. 数据预处理

    % 空间权重矩阵构建
    W = make_W(coords, 'queen'); % 基于坐标生成皇后邻接矩阵
    W = normw(W); % 行标准化
    
  2. 模型估计

    % 空间滞后模型
    results_sar = sar_panel(y, x, W, 'fix', 1); % 固定效应
    prt_reg(results_sar);
    
  3. 诊断检验

    % 空间自相关检验
    moran_test = moran(y, x, W);
    disp(['Moran''s I: ', num2str(moran_test.statistic)]);
    
    % 残差诊断
    [h,p] = lbqtest(residuals,'lags',2); % Ljung-Box检验
    
  4. 结果可视化

    % 直接/间接效应图
    figure;
    bar([mean(direct), mean(total)]);
    legend('直接效应','总效应');
    

五、扩展应用案例

案例1:环境规制空间溢出

% 构建时空权重矩阵
W = make_W(coords, 'distance', 500); % 500km阈值
W = W * W'; % 时空交互矩阵

% 时空杜宾模型估计
results_std = std_panel(y, x, W, 'time', 1);

案例2:多区域经济收敛

% 空间收敛模型
y_growth = log(y(2:end,:)) - log(y(1:end-1,:));
results_converge = sar_panel(y_growth, x_growth, W, 'fix', 2);

参考代码 空间计量的各种模型 www.youwenfan.com/contentcnl/79035.html

六、注意事项

  1. 数据格式要求:面板数据需按(N*T)×K矩阵组织
  2. 收敛性判断:迭代算法需监控对数似然值变化
  3. 软件兼容性:建议配合ArcGIS进行空间可视化
  4. 最新进展:可结合Python的spreg库进行交叉验证

该方法体系已在区域经济、环境科学等领域成功应用,典型数据集包括中国省级面板数据(GDP、能源消耗等)。建议通过MATLAB File Exchange获取最新工具箱(如Spatial Econometrics Toolbox)。

posted @ 2025-11-13 10:18  我是一只小小鸟~  阅读(4)  评论(0)    收藏  举报