平滑时变状态空间模型
这个例子展示了如何从一个已知的模型生成数据,为数据拟合一个状态空间模型,然后平滑状态。
假设一个潜在过程包括一个AR(2)和一个MA(1)模型。有50个周期,MA(1)过程在最后25个周期中退出模型。前25个周期的状态方程是
在过去的25个周期中,是这样的
在哪里而且为均值为0,标准差为1的高斯分布。
假设级数分别从1.5和1开始,生成50个观测值的随机序列而且.
T = 50;ARMdl = arima(基于“增大化现实”技术的{0.7, -0.2},“不变”0,“方差”1);amdl = arima(“马”, 0.6,“不变”0,“方差”1);X0 = [1.5 1;1.5 - 1];rng (1);x =[模拟(ARMdl,T,“Y0”x0 (: 1)),...模拟(MAMdl T / 2,“Y0”x0(: 2));南(T / 2, 1)];
模拟MA(1)数据的后25个值为南
值。
进一步假设潜在过程是用
对于前25个时段,和
在过去25个时期,其中为均值为0,标准差为1的高斯分布。
使用随机潜伏状态过程(x
)和观测方程来生成观测值。
Y = 2*sum(x',“omitnan”) + randn (T, 1);
潜伏过程和观测方程共同构成了一个状态空间模型。假设系数为未知参数,状态空间模型为
在前25个时段,
对于第26期,和
在过去的24个时期。
写一个函数来指定参数的输入方式参数个数
映射到状态空间模型矩阵、初始状态值和状态类型。
版权所有The MathWorks, Inc.函数[A,B,C,D,Mean0,Cov0,StateType] = AR2MAParamMap(params,T)时变状态空间模型参数映射函数%这个函数将向量参数映射到状态空间矩阵(A, B,% C,和D),初始状态值和初始状态方差(Mean0%和Cov0),以及状态类型(StateType)。从周期1到周期T/2%状态模型为AR(2)和MA(1)模型,观测模型为两种状态的和。从周期T/2 + 1到T,状态模型为只是AR(2)模型。A1 = {[params(1) params(2) 0 0;1 0 0 0;0 0 0参数(3);0 0 0 0]};B1 = {[10 0;0 0;0 1;0 1]};C1 = {params(4)*[1 0 1 0]};Mean0 = ones(4,1); Cov0 = 10*eye(4); StateType = [0 0 0 0]; A2 = {[params(1) params(2) 0 0; 1 0 0 0]}; B2 = {[1; 0]}; A3 = {[params(1) params(2); 1 0]}; B3 = {[1; 0]}; C3 = {params(5)*[1 0]}; A = [repmat(A1,T/2,1);A2;repmat(A3,(T-2)/2,1)]; B = [repmat(B1,T/2,1);B2;repmat(B3,(T-2)/2,1)]; C = [repmat(C1,T/2,1);repmat(C3,T/2,1)]; D = 1;结束
将此代码保存为一个名为AR2MAParamMap
在MATLAB®路径上。
通过传递函数来创建状态空间模型AR2MAParamMap
的函数句柄舰导弹
.
Mdl = ssm(@(params)AR2MAParamMap(params,T));
舰导弹
隐式地创建状态空间模型。通常,您不能验证隐式定义的状态空间模型。
传递观察到的响应(y
)估计
估计参数。为未知参数指定一组任意的正初值。
Params0 = 0.1*ones(5,1);EstMdl =估计(Mdl,y,params0);
方法:最大似然(fminunc)样本量:50对数似然:-114.957赤池信息准则:239.913贝叶斯信息准则:249.473 | Coeff Std Err t Stat Prob --------------------------------------------------- c(1) | 0.47870 0.26634 1.79733 0.07229 c(2) | 0.00809 0.27179 0.02975 0.97626 c(3) | 0.55735 0.80958 0.68844 0.49118 c(4) | 1.62679 0.41622 3.90848 0.00009 c(5) | 1.90021 0.49563 3.83391 0.00013 | |最终状态Std Dev Stat Prob x(1) | -0.81229 0.46815 -1.73511 0.08272 x(2) | -0.31449 0.45918 -0.68490 0.49341
EstMdl
是一个舰导弹
包含估计系数的模型。状态空间模型的似然曲面可能包含局部极大值。因此,最好尝试几个初始参数值,或者考虑使用完善
.
平滑状态并通过传递估计平滑状态的方差-协方差矩阵EstMdl
以及观察到的反应光滑的
.
[~, ~,输出]=光滑(EstMdl y);
输出
是一个T
-by-1结构数组,其中包含平滑状态及其方差-协方差矩阵。
从单元格数组中提取平滑状态及其方差。回想一下,这两个不同的状态在位置1和3。位置2和4中的状态有助于指定感兴趣的过程。
stateIndx = [1 3];状态感兴趣的指数smooththedstates = NaN(T,numel(stateIndx));SmoothedStatesCov = NaN(T,numel(stateIndx));为t = 1: t maxInd1 = size(Output(t).SmoothedStates,1);maxInd2 = size(Output(t).SmoothedStatesCov,1);mask1 = statindx <= maxInd1;mask2 = statindx <= maxInd2;SmoothedStates (t, mask1) =...输出(t) .SmoothedStates (stateIndx (mask1), 1);SmoothedStatesCov (t, mask2) =...诊断接头(输出(t) .SmoothedStatesCov (stateIndx (mask2),...stateIndx (mask2)));结束
绘制每个模型的真实状态值、平滑状态值以及它们各自的95%瓦尔德型置信区间。
AR2SSCIlb = SmoothedStates(:,1) - 1.95*sqrt(SmoothedStatesCov(:,1));AR2SSCIub = SmoothedStates(:,1) + 1.95*sqrt(SmoothedStatesCov(:,1));ar2ssinterval = [AR2SSCIlb AR2SSCIub];MA1SSCIlb = SmoothedStates(:,2) - 1.95*sqrt(SmoothedStatesCov(:,2));MA1SSCIub = SmoothedStates(:,2) + 1.95*sqrt(SmoothedStatesCov(:,2));ma1ssinterval = [MA1SSCIlb MA1SSCIub];图的阴谋(1:T, x (: 1),“- k”1: T, SmoothedStates (: 1),“:r”,...1: T, AR2SSIntervals,“——b”,“线宽”2);标题(“AR(2)状态值”)包含(“时间”) ylabel (“国家价值”)({传奇“真实状态值”,平滑的状态值,...95%置信区间});图的阴谋(1:T, x (:, 2),“- k”1: T, SmoothedStates (:, 2),“:r”,...1: T, MA1SSIntervals,“——b”,“线宽”2);标题(MA(1)状态值)包含(“时间”) ylabel (“国家价值”)({传奇“真实状态值”,平滑的状态值,...95%置信区间});