楼主: kerrydu
5676 15

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

  • 11关注
  • 6粉丝

已卖:766份资源

学科带头人

46%

还不是VIP/贵宾

-

TA的文库  其他...

计量大杂烩

威望
0
论坛币
6197 个
通用积分
1.7598
学术水平
53 点
热心指数
80 点
信用等级
42 点
经验
25384 点
帖子
610
精华
0
在线时间
3733 小时
注册时间
2011-4-1
最后登录
2023-12-4

楼主
kerrydu 发表于 2011-10-10 19:59:41 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
首先在此感谢epoh的热心帮助。我想使用全局变量,是因为把函数结构传递到这个变量上,以后不需要每次都进行选择判断。代码1和代码2唯一的区别是:代码1,我每个子函数都定义了TR,代码2,我只在主函数定义全局变量TR,子函数申明全局变量TR。我检查了子函数TR的传递情况,确实是能够传递过去,但不知道为什么结果相差那么大?代码1结果比较接近真实值。另外一个问题是,初始值的选择问题,我用的ols回归和格点搜索进行选择,但monte caro模拟发现这个方法很失败?不知道大家是怎么选择初始值的
我把代码和测试都传上来,希望大家多给予指导指导!

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:选择问题 mont epoh 不知道 初始值 五指山 唐三藏 猪八戒 新媒体 合伙

已有 1 人评分学术水平 热心指数 信用等级 收起 理由
zhangtao + 5 + 5 + 5 非常佩服!

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

沙发
hongri200890 发表于 2011-10-10 20:22:33
怎么到经济论坛上问计算机啊……

藤椅
epoh 发表于 2011-10-10 21:38:14

老兄

1.这个程序,有些乱吧

  乱到不知从何改起

  TR是一个  Inline function

  你为甚么不分别定义

  LSTAR & ESTAR的 Transition function

  要用时,带入参数呼叫即可

  就如R底下的定义

  #Transition function

  #y: variable

  #g: smoothing parameter

  #c: threshold value

  G <- function(y, g, th)

  plogis(y, th, 1/g)

  

  你先自行修改应能解决

  你所谓全局的问题

2.c: threshold value要定范围

  否则会产生NA,就如R底下

    # Maximum and minimum values for c

    minTh <- quantile(as.ts(z), .1) # percentil 10 de z

    maxTh <- quantile(as.ts(z), .9) # percentil 90 de z

    rateTh <- (maxTh - minTh) / 200;

3.如果你是做这个专题

  请考虑用R package "tsDyn"

  虽然目前只有lstar

  但他采grid search for starting values

  精准许多

  

已有 2 人评分学术水平 热心指数 信用等级 收起 理由
kerrydu + 1 + 1 + 1 好的意见建议
zhangtao + 5 + 5 + 5 非常有启发!感谢epoh老师!

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

板凳
kerrydu 发表于 2011-10-10 21:57:46
非常感谢epoh兄,为了管理方便我把很多子程序都写到一起,看起来确实比较乱。没有分别定义ESTAR&LSTAR是因为后面每次碰到都得用if进行判断,我想一开始就判断,然后把状态转移函数传递到一个TR,以后就不要再做选择判断,这样效率会高很多,特别是优化的迭代的时候。我想不明白的是这两个代码几乎一样,结果相差那么大?唯一可能出现问题的是全局变量的传导,可我检查了子函数里TR的传递确实是成功的。
epoh兄是R高手呢,可惜我对R不太熟悉,以后还要向epoh多加请教呢

报纸
kerrydu 发表于 2011-10-10 22:00:59
hongri200890 发表于 2011-10-10 20:22
怎么到经济论坛上问计算机啊……
呵呵,论坛上计算高手也很多哦

地板
hongri200890 发表于 2011-10-10 22:03:48
哦好吧……

7
zhangtao 发表于 2011-10-11 09:35:31
epoh 发表于 2011-10-10 21:38
老兄1.这个程序,有些乱吧  乱到不知从何改起  TR是一个  Inline function   你为甚么不分别定义  LSTAR & E ...
code.rar (9.32 KB)

epoh老师,您好!
        您看一下附件中程序运行后为什么会出现以下问题?如何修改?
非常感谢!
        另外,建议楼主编程时多一些注释,这样更容易让其他人读懂。

运行楼主的的代码2
>> maincode
rpara =
    0.3000
    0.5000
   -0.1000
    0.7000
    0.1200
    0.5000
    5.0000
    0.8000
??? Error using ==> STAR_startval1
Too many input arguments.
Error in ==> STAR1 at 13
stval=STAR_startval1(para0,flag,y,X,q,0);%计算初始值,这个函数不好用,计算的初始值经常收敛到局部最小值
Error in ==> maincode at 3
para=STAR1(y,X,q,1,rpara)
运行楼主的代码1
>> maincode
rpara =
    0.3000
    0.5000
   -0.1000
    0.7000
    0.1200
    0.5000
    5.0000
    0.8000
??? Undefined command/function 'STAR_itransform'.
Error in ==> STARlik1 at 11
    para=STAR_itransform(para);
Error in ==> fminunc at 182
   f = feval(funfcn{3},x,varargin{:});
Error in ==> STAR1 at 18
[para,fv]=fminunc(@STARlik1,stval,options,flag,y,X,q,1);
Error in ==> maincode at 3
para=STAR1(y,X,q,1,rpara)
>>

数学好就是要天天学

8
epoh 发表于 2011-10-11 11:23:20

建议你用fmincon

FMINCON finds a constrained minimum of a function of several variables

sig1,sig2,应该都是positive

c根据q,也要有一定范围

譬如:

   stval =

    0.3000

    0.5000

   -0.1000

    0.7000

   -2.1203

   -0.6931

    1.6094

   -0.2231

%%%%

假设你的程序是对的

你要用global

请修改两个部分

1.程序一开始就要宣告

2.STAR2.m就不用宣告

%%%%%%
flag=1;
ep=randn(10000,1);data=zeros(10000,1);
data(1)=0.5;c=0.8;gamma=5;a1=[0.3;0.5];a2=[-0.1;0.7];sig1=0.12;sig2=0.5;
global TR;
if flag
    TR=inline('1 ./ (1 + exp(-gamma*(q-c)))','gamma','q','c')
else
    TR=inline('1- exp(-gamma*(q-c).^2)','gamma','q','c')
end

for k=2:10000
G1=TR(gamma,c,data(k-1));
data(k)=([1 data(k-1)]*a1+sig1*ep(k))*G1+([1 data(k-1)]*a2+sig2*ep(k))*(1-G1);
end

y=data(2:end);X=[ones(9999,1),data(1:end-1)];
q=data(1:end-1);% q----transiton varialbe
rpara=[a1;a2;sig1;sig2;gamma;c];% real parameter as one of start value
para1=STAR2(y,X,q,1,rpara)

fv =

-2.2161e+003


para1 =

    0.2994
    0.3076
    0.2984
    0.4207
    0.4383
    0.1249
    5.4969
    0.7390

9
kerrydu 发表于 2011-10-11 11:32:00
我试过fmincon,问题是有时候最优值会落在你设定的边界上。sig1 sig2我已经通过exp变换转化成无约束问题了。STAR2就是主函数,在STAR2宣告应该没问题吧

10
kerrydu 发表于 2011-10-11 12:12:50
zhangtao 发表于 2011-10-11 09:35
epoh老师,您好!
        您看一下附件中程序运行后为什么会出现以下问题?如何修改?
非常感谢 ...
你是不是落下了子函数STAR——startval1了

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

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