空间计量模型,包括空间滞后模型、空间误差模型和空间杜宾模型

空间计量模型,包括空间滞后模型(SAR)、空间误差模型(SEM)和空间杜宾模型(SDM)。

空间计量模型基础

空间计量经济学考虑了空间依赖性,即"地理学第一定律":一切事物都与其他事物相关,但近处的事物比远处的事物更相关。

核心概念

  • 空间权重矩阵(W):定义空间单元之间的邻接关系
  • 空间自相关:观测值在空间上的聚集模式
  • 空间异质性:空间关系的非恒定性

三种主要空间计量模型

1. 空间滞后模型 (SAR/SLM)

SAR模型假设因变量的空间滞后项影响当前观测值。

模型形式:

% SAR模型: y = ρWy + Xβ + ε
% 其中 Wy 是空间滞后因变量

MATLAB实现:

% 使用Econometrics Toolbox
% 假设有: y (因变量), X (自变量), W (空间权重矩阵)

% 方法1: 使用spatial_econometrics工具箱(第三方)
if exist('lagsarlm') == 2
    % 安装: https://www.spatial-econometrics.com/
    results = lagsarlm(y, X, W);
    disp('SAR模型结果:');
    prt(results);
end

% 方法2: 使用MATLAB内置函数(需要Econometrics Toolbox)
% 创建空间计量模型对象
sarModel = spatialmodel('SAR', W);
% 估计参数
sarEst = estimate(sarModel, y, X);
disp(sarEst);

% 方法3: 手动实现最大似然估计
function [rho, beta, sigma2] = sar_mle(y, X, W)
    % 简化的SAR模型MLE估计
    n = length(y);
    I = eye(n);
    
    % 定义似然函数
    loglik = @(params) -0.5 * ( ...
        n * log(2*pi*params(3)) + ...
        log(det(I - params(1)*W)) - ...
        (1/params(3)) * (y - params(1)*W*y - X*params(2:end))' * ...
        (y - params(1)*W*y - X*params(2:end)) ...
    );
    
    % 初始值
    init_params = [0.1; ones(size(X,2),1); 1];
    
    % 优化
    options = optimset('Display', 'iter', 'MaxIter', 1000);
    est_params = fminunc(@(x) -loglik(x), init_params, options);
    
    rho = est_params(1);
    beta = est_params(2:end-1);
    sigma2 = est_params(end);
end

2. 空间误差模型 (SEM)

SEM模型假设误差项存在空间自相关。

模型形式:

% SEM模型: y = Xβ + u, u = λWu + ε

MATLAB实现:

% SEM模型估计
function [lambda, beta, sigma2] = sem_mle(y, X, W)
    n = length(y);
    I = eye(n);
    
    loglik = @(params) -0.5 * ( ...
        n * log(2*pi*params(end)) + ...
        log(det(I - params(1)*W)) - ...
        (1/params(end)) * (y - X*params(2:end-1))' * ...
        (I - params(1)*W)' * (I - params(1)*W) * ...
        (y - X*params(2:end-1)) ...
    );
    
    init_params = [0.1; ones(size(X,2),1); 1];
    options = optimset('Display', 'iter', 'MaxIter', 1000);
    est_params = fminunc(@(x) -loglik(x), init_params, options);
    
    lambda = est_params(1);
    beta = est_params(2:end-1);
    sigma2 = est_params(end);
end

% 使用第三方工具箱
if exist('errorsarlm') == 2
    results_sem = errorsarlm(y, X, W);
    prt(results_sem);
end

3. 空间杜宾模型 (SDM)

SDM模型同时包含因变量和自变量的空间滞后项。

模型形式:

% SDM模型: y = ρWy + Xβ + WXθ + ε

MATLAB实现:

% SDM模型估计
function [rho, beta, theta, sigma2] = sdm_mle(y, X, W)
    n = length(y);
    I = eye(n);
    WX = W * X;  % 空间滞后自变量
    
    loglik = @(params) -0.5 * ( ...
        n * log(2*pi*params(end)) + ...
        log(det(I - params(1)*W)) - ...
        (1/params(end)) * (y - params(1)*W*y - X*params(2:1+size(X,2)) - ...
        WX*params(2+size(X,2):end-1))' * ...
        (y - params(1)*W*y - X*params(2:1+size(X,2)) - ...
        WX*params(2+size(X,2):end-1)) ...
    );
    
    k = size(X,2);
    init_params = [0.1; ones(k,1); ones(k,1); 1];
    options = optimset('Display', 'iter', 'MaxIter', 1000);
    est_params = fminunc(@(x) -loglik(x), init_params, options);
    
    rho = est_params(1);
    beta = est_params(2:1+k);
    theta = est_params(2+k:end-1);
    sigma2 = est_params(end);
end

% 使用工具箱
if exist('sdm') == 2
    results_sdm = sdm(y, X, W);
    prt(results_sdm);
end

完整分析流程示例

% 空间计量分析完整流程
function spatial_econometrics_analysis()
    %% 1. 数据准备
    % 假设已有数据: y, X, coordinates
    load('spatial_data.mat'); % 加载数据
    
    %% 2. 构建空间权重矩阵
    W = create_spatial_weights(coordinates);
    
    %% 3. 空间自相关检验
    % 莫兰指数检验
    moran_I = moran(y, W);
    fprintf('莫兰指数: %.4f\n', moran_I);
    
    % LM检验(选择合适模型)
    [lm_lag, lm_error, robust_lm_lag, robust_lm_error] = lm_tests(y, X, W);
    
    %% 4. 模型估计
    % 根据LM检验结果选择模型,或都估计进行比较
    
    % SAR模型
    [rho_sar, beta_sar, sigma2_sar] = sar_mle(y, X, W);
    
    % SEM模型  
    [lambda_sem, beta_sem, sigma2_sem] = sem_mle(y, X, W);
    
    % SDM模型
    [rho_sdm, beta_sdm, theta_sdm, sigma2_sdm] = sdm_mle(y, X, W);
    
    %% 5. 模型比较
    % 计算信息准则
    [aic_sar, bic_sar] = calculate_ic('SAR', y, X, W, rho_sar, beta_sar, sigma2_sar);
    [aic_sem, bic_sem] = calculate_ic('SEM', y, X, W, lambda_sem, beta_sem, sigma2_sem);
    [aic_sdm, bic_sdm] = calculate_ic('SDM', y, X, W, rho_sdm, beta_sdm, sigma2_sdm, theta_sdm);
    
    fprintf('\n模型比较:\n');
    fprintf('模型\tAIC\t\tBIC\n');
    fprintf('SAR\t%.4f\t%.4f\n', aic_sar, bic_sar);
    fprintf('SEM\t%.4f\t%.4f\n', aic_sem, bic_sem);
    fprintf('SDM\t%.4f\t%.4f\n', aic_sdm, bic_sdm);
    
    %% 6. 结果可视化
    plot_spatial_results(y, X, W, rho_sar, beta_sar);
end

%% 辅助函数
function W = create_spatial_weights(coords)
    % 基于k最近邻创建空间权重矩阵
    n = size(coords, 1);
    W = zeros(n, n);
    k = 4; % 最近邻数量
    
    for i = 1:n
        distances = sqrt(sum((coords - coords(i,:)).^2, 2));
        [~, idx] = sort(distances);
        neighbors = idx(2:k+1); % 排除自身
        W(i, neighbors) = 1;
    end
    
    % 行标准化
    W = W ./ sum(W, 2);
    W(isnan(W)) = 0;
end

function I = moran(y, W)
    % 计算莫兰指数
    n = length(y);
    y_mean = mean(y);
    y_dev = y - y_mean;
    
    numerator = sum(sum(W .* (y_dev * y_dev')));
    denominator = sum(y_dev.^2);
    
    I = (n / sum(sum(W))) * (numerator / denominator);
end

参考代码 关于空间计量模型,其中包括空间滞后、空间误差、空间杜宾 www.youwenfan.com/contentcnk/77804.html

模型选择指南

LM检验决策规则:

  1. LM-lag显著,LM-error不显著 → 选择SAR模型
  2. LM-error显著,LM-lag不显著 → 选择SEM模型
  3. 两者都显著 → 选择Robust LM检验显著的模型
  4. 考虑理论:空间溢出机制的理论依据

实践建议:

  1. 从SDM开始:SDM是最一般的形式,SAR和SEM是其特例
  2. 使用Wald检验或LR检验检验SDM是否能简化为SAR或SEM
  3. 考虑空间固定效应:对于面板数据,控制个体异质性
  4. 检验残差的空间自相关:确保模型充分捕捉了空间依赖性
posted @ 2025-11-03 11:58  修BUG狂人  阅读(76)  评论(0)    收藏  举报