做个总结
我把程序精简.
latsr script + lstarSSE.m (Objective function)
得出的结果跟 R package "tsDyn"接近.
para'
ans = 0.4883 1.2466 -0.3661 -1.0371 0.4237 -0.2518 11.0855 3.3396
####R package "tsDyn"
LSTAR model
Coefficients:
Low regime:
phi1.0 phi1.1 phi1.2
0.4870673 1.2465799 -0.3655721
High regime:
phi2.0 phi2.1 phi2.2
-1.0514786 0.4243230 -0.2488072
Smoothing parameter: gamma = 11
Threshold
Variable: Z(t) = + (0) X(t) + (1) X(t-1)
Value: 3.34
#############
%%%%%%%%%%%%%
%lstar script
%%%%%%%%%%%%%
load 'lynx.dat'
lynx=log10(lynx);
y=lynx(3:end,1);
X=[ones(length(y),1) lynx(2:(end-1),1) lynx(1:(end-2),1)];
q=lynx(1:(end-2),1);
%set initial values
gamma=20;
minTh=quantile(q,0.1) % 2.1353
maxTh=quantile(q,0.9) % 3.5788
c=(minTh+maxTh)/2
TR=inline('1 ./ (1 + exp(-gamma*(q-c)))','gamma','q','c')
XX=[X X(:,1).*TR(gamma,c,q) X(:,2).*TR(gamma,c,q) X(:,3).*TR(gamma,c,q)];
b=regress(y,XX)
init=[b; gamma; c]
lb=[-Inf,-Inf,-Inf,-Inf,-Inf,-Inf,0,minTh ]
ub=[Inf,Inf,Inf,Inf,Inf,Inf,100,maxTh ]
[para]=fmincon(@(para)lstarSSE(para,y,X,q),init,[],[],[],[],lb,ub)
%%Objection function
%%%%%%%%%%%
%lstarSSE.m
%%%%%%%%%%%
function SSE=lstarSSE(para,y,X,q)
TR=inline('1 ./ (1 + exp(-gamma*(q-c)))','gamma','c','q');
numxs=size(X,2);
gamma=para(end-1);
c=para(end);
phi1=para(1:numxs);
phi2=para(numxs+1:2*numxs);
mu1=X*phi1;
mu2=X*phi2;
G1=TR(gamma,c,q);
res=y-mu1-mu2.*G1;
SSE=sum(res.^2);
%%%%%%%%%%%
lynx.dat