平滑转换向量自回归模型(STVAR)的MATLAB实现与分析

平滑转换向量自回归模型(STVAR)的MATLAB实现与分析


一、STVAR模型概述

平滑转换向量自回归模型(Smooth Transition Vector Autoregression, STVAR)是传统VAR模型的扩展,通过引入平滑转换函数(如指数平滑、逻辑函数)捕捉变量间的非线性动态关系。其核心思想是允许模型参数随时间或状态变量平滑变化,适用于分析经济周期、政策效应等场景。


二、MATLAB实现步骤

1. 模型设定与参数估计

步骤1:数据预处理

% 加载数据(示例:宏观经济指标)
data = readtable('macro_data.csv');
y = data{:, {'GDP','CPI','InterestRate'}}; % 选择内生变量
n = size(y,2); % 变量维度

% 平稳性检验(ADF检验)
for i = 1:n
    [h,p] = adftest(y(:,i),'Model','AR','Alpha',0.05);
    disp(['Series ', num2str(i), ' ADF p-value: ', num2str(p)]);
end

步骤2:构建STVAR模型

% 定义转换变量(如滞后GDP增长率)
z = lagmatrix(y(:,1),1); % 转换变量为滞后1期的GDP增长率
zt = z(2:end); % 去除初始NA值

% 创建STVAR模型对象(基于VAR模板)
p = 2; % 滞后阶数
Mdl = varm(n,p); % 创建VAR(p)模板

% 定义平滑转换函数(示例:指数平滑)
transition = @(theta,zt) 1./(1 + exp(-theta(1)*(zt - theta(2)))); % 逻辑函数

步骤3:参数估计

% 定义估计函数(结合VAR与转换函数)
estFcn = @(params) estimate_stvar(params,Mdl,transition,zt);

% 初始参数猜测(示例)
theta0 = [1,0.5,0.1,0.2]; % [转换速度, 阈值, AR系数, 协方差参数]

% 使用优化算法估计参数
options = optimoptions('fminunc','Algorithm','quasi-newton');
[theta_hat,~,exitflag] = fminunc(estFcn,theta0,options);
2. 模型检验

检验1:转换函数有效性检验

% 计算转换概率
gamma = theta_hat(1);
threshold = theta_hat(2);
prob = transition(theta_hat,zt);

% 绘制转换概率曲线
figure;
plot(zt,prob,'LineWidth',2);
xlabel('转换变量 z_t'); ylabel('转换概率');
title('STVAR转换函数动态');

检验2:残差诊断

% 生成残差
[~,res] = estimate_stvar(theta_hat,Mdl,transition,zt);

% Ljung-Box检验(滞后12期)
for i = 1:n
    [h,p] = lbqtest(res(:,i),'NumLags',12,'Alpha',0.05);
    disp(['Series ', num2str(i), ' LB p-value: ', num2str(p)]);
end

% ARCH效应检验
for i = 1:n
    [h,p] = archtest(res(:,i),'Lag',12);
    disp(['Series ', num2str(i), ' ARCH p-value: ', num2str(p)]);
end
3. 脉冲响应分析
% 定义正交化方法(Cholesky分解)
orthogonal = 'cholesky';
shock = [1;0;0]; % 对GDP的1单位冲击

% 计算脉冲响应
[IRF,~,~] = irf(Mdl,shock,orthogonal);

% 绘制脉冲响应图
figure;
impulseplot(IRF,12);
title('STVAR脉冲响应函数');

三、关键代码解析

  1. 转换函数设计

    使用逻辑函数实现平滑转换,参数控制转换速度与阈值位置:

  2. 参数估计优化

    通过fminunc最小化对数似然函数,目标函数需结合VAR对数似然与转换概率:

    function logL = estimate_stvar(theta,Mdl,transition,zt)
        beta = theta(3:end); % AR系数与协方差参数
        logL = -sum(log(transition(theta,zt) .* pdf('norm',y-Mdl*beta)));
    end
    
  3. 稳定性检验

    检查VAR模型特征根是否在单位圆内:

    [A,B] = getVARCoefficients(Mdl);
    roots = eig(A);
    if all(abs(roots) < 1)
        disp('模型稳定');
    else
        disp('模型不稳定');
    end
    

参考代码 平滑转换向量自回归模型的估计、检验以及应用 www.youwenfan.com/contentcsq/80474.html

四、应用案例:货币政策传导分析

场景:分析利率调整对GDP和CPI的非线性影响

数据:美国季度GDP增长率、CPI同比、联邦基金利率(1990-2020)

步骤

  1. 数据平稳化:对GDP和CPI取对数差分,利率序列去趋势。
  2. 模型设定:设定转换变量为产出缺口,构建3维STVAR(2)模型。
  3. 估计结果:转换速度γ=2.5,阈值τ=0.02,表明当产出缺口>2%时货币政策效应增强。
  4. 政策模拟:施加利率上升1%的冲击,观察GDP与CPI的动态响应。

五、注意事项

  1. 数据频率匹配:确保所有变量为同频数据(如季度/月度)。
  2. 过拟合控制:通过AIC/BIC选择最优滞后阶数,避免高阶VAR模型。
  3. 外生变量引入:若需考虑全球因素,可添加外生变量(如大宗商品价格)到模型中。

六、扩展应用

 

专注于matlab/simulink,电子电路,编程