楼主: kerrydu
5675 15

[问答] 全局变量的使用问题 [推广有奖]

11
epoh 发表于 2011-10-11 16:08:30

不理解你的function STAR_tranform.m

为何gamma,c,也要取log,

一开始c starting value=-0.2231

很容易造成fv -1.3655e+003 +3.1413e+004i

stval =

    0.3000
    0.5000
   -0.1000
    0.7000
    0.1200
    0.5000
    5.0000
    0.8000

log(stval(end-3:end))

ans =

   -2.1203
   -0.6931
    1.6094
   -0.2231


fv =

-1.3655e+003 +3.1413e+004i


para1 =

    0.6991
    0.5624
    0.3236
    0.3302
   -0.1698
   -0.2111
    2.6342
   -3.6206

%%%%%%%%%%%

而在STARlik12.m

似乎没有转换回来

numxs=size(X,2)
gamma=para(end-1)
c=para(end)
sigma_1=para(end-3)
sigma_2=para(end-2)

phi1=para(1:numxs)
phi2=para(numxs+1:2*numxs)
mu1=X*phi1;
mu2=X*phi2;
G1=TR(gamma,q,c);
res=y-mu1.*G1-mu2.*(1-G1);

12
zhangtao 发表于 2011-10-11 22:40:25
kerrydu 发表于 2011-10-11 12:12
你是不是落下了子函数STAR——startval1了
没有落下子函数,我用的是matlab7
数学好就是要天天学

13
kerrydu 发表于 2011-10-13 11:39:50
epoh 发表于 2011-10-10 21:38
老兄1.这个程序,有些乱吧  乱到不知从何改起  TR是一个  Inline function   你为甚么不分别定义  LSTAR & E ...
epoh兄,我这两天看了你给我推荐的R ,请教一下。
Usage
lstar(x,m,d=1,steps=d,series,mL,mH,thDelay,
th,gamma,trace=TRUE,control=list())

x timeseries
m,d,steps embeddingdimension,timedelay,forecastingsteps
series timeseriesname(optional)
mL autoregressiveorderfor’low’regime(dafult:m).Mustbe<=m
mH autoregressiveorderfor’high’regime(default:m).Mustbe<=m

这个m是什么意思
里面的例子,mod.lstar<-lstar(log10(lynx),m=2,mTh=c(0,1),control=list(maxit=3000))
mTh是一个向量,c(0,1)表示的是什么?我才接触R,不太明白

14
epoh 发表于 2011-10-13 14:23:48
Original data:
yy=log10(lynx)---114 obs
[1] 2.429752 2.506505 2.767156  2.940018 3.168792 3.450403 3.594171 3.774006
.....
.....

[107] 3.186674 2.723456 2.685742 2.820858 3.000000 3.201397 3.424392 3.530968
#####
when m=2=mL=mH; d=1=steps;
model:
          yy       V1    V1.0    V1..1           V1.1              V1.0.1            V1..1.1
1   2.767156  1 2.506505 2.429752 4.477747e-05 1.122349e-04 1.087982e-04
2   2.940018  1 2.767156 2.506505 1.041599e-04 2.882267e-04 2.610773e-04
3   3.168792  1 2.940018 2.767156 1.828708e-03 5.376435e-03 5.060321e-03
4   3.450403  1 3.168792 2.940018 1.211853e-02 3.840111e-02 3.562871e-02
5   3.594171  1 3.450403 3.168792 1.318946e-01 4.550895e-01 4.179465e-01
.....
.....
108 2.820858  1 2.685742 2.723456 1.131569e-03 3.039102e-03 3.081778e-03
109 3.000000  1 2.820858 2.685742 7.476169e-04 2.108921e-03 2.007906e-03
110 3.201397  1 3.000000 2.820858 3.296504e-03 9.889513e-03 9.298970e-03
111 3.424392  1 3.201397 3.000000 2.317971e-02 7.420746e-02 6.953913e-02
112 3.530968  1 3.424392 3.201397 1.786306e-01 6.117009e-01 5.718673e-01
#########
mTh: coefficients for the lagged time series, to obtain the threshold variable
mTh: z[t] = x[t]mTh[1] + x[t-d]mTh[2] + .. + x[t-(m-1)d]mTh[m]
when mTh=c(0,1),z <- xx %*% mTh #threshold variable
xx=
         V1/0        V1/-1
  [1,] 2.506505 2.429752
  [2,] 2.767156 2.506505
  [3,] 2.940018 2.767156
  [4,] 3.168792 2.940018
  [5,] 3.450403 3.168792
  .....
  .....
  [108,] 2.685742 2.723456
  [109,] 2.820858 2.685742
  [110,] 3.000000 2.820858
  [111,] 3.201397 3.000000
  [112,] 3.424392 3.201397
thVar
[1] 2.429752 2.506505 2.767156 2.940018 3.168792 3.450403 3.594171 3.774006
    .....
    .....
[105] 3.553155 3.467608 3.186674 2.723456 2.685742 2.820858 3.000000 3.201397


15
epoh 发表于 2011-10-14 08:56:14

做个总结

我把程序精简.

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

lynx.rar (386 Bytes) 本附件包括:

  • lynx.dat

已有 2 人评分学术水平 热心指数 信用等级 收起 理由
zhangtao + 5 + 5 + 5 精彩帖子
kerrydu + 1 + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 6  热心指数 + 6  信用等级 + 6   查看全部评分

16
kerrydu 发表于 2011-10-14 10:05:55
epoh 发表于 2011-10-14 08:56
做个总结我把程序精简.latsr script + lstarSSE.m  (Objection function) 得出的结果跟 R package "tsDyn"接 ...
谢谢epoh兄

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-17 06:37