全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 MATLAB等数学软件专版
2288 10
2012-09-27
创建的function 出问题,可以帮忙看一下么?因为是初学者可能会有愚蠢的错误,不好意思
这是estimation by likelihood function,最后需要maximiser 的

vt需要它的滞后项不知道我这样用可不可以
复制如下:
function likeli = likelihood(parametre,St,t)

% define likelihood function,'parametre' is variable that we want to estimate from data St and t
% define parametre which have 17 elements
p1=parametre(1);p2=parametre(2);p3=parametre(3);p4=parametre(4);p5=parametre(5);p6=parametre(6);
p7=parametre(7);p8=parametre(8);p9=parametre(9);p10=parametre(10);p11=parametre(11);p12=parametre(12);
p13=parametre(13);p14=parametre(14);p15=parametre(15);p16=parametre(16);p17=parametre(17);

%Define two major variables (ft and vt) that would be used in the likelihood function

%1 define the ft:seasonal which would be a vector with length of St

ft=p13+p9*cos(2*pi*2*St/260)+p10*sin(2*pi*2*t/260)+p14*cos(2*pi*2*t/260)+p15*sin(2*pi*2*t/260)+p11*cos(2*pi*2*t/5)+p12*sin(2*pi*2*t/5)+p16*cos(2*pi*2*t/5)+p17*sin(2*pi*2*t/5);

%2 define the vt: volatiltiy  which would be a vector with length of St

for i=3:lenght(St);
    vt(1)=0.5
vt(i)=p6+p7*(St(i-1)+St(i-2)*(p1-1)-p1*p2)^2+p8*v(i-1);
end

%define the likelihood function
for i=2:lenght(St);
    Lt(i)=(1-p5)*exp(-((St(i)-ft(i))-(1-p1)*(St(i-1)-ft(i-1))-p1*p2)^2/(2*vt(i)))/(2*pi*vt(i))^0.5+(p5)*exp(-((St(i)-ft(i))-(1-p3)*(St(i-1)-ft(i-1))-p1*p2-p3)^2/(2*(vt(i)+p4^2)))/(2*pi*(vt(i)+p4^2))^0.5
end

%-(sum of likelihood function)
likeli=-sum(Lt)

end


二维码

扫码加我 拉你入群

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

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

全部回复
2012-9-27 09:24:15
matlab说程序在哪里出错的?
二维码

扫码加我 拉你入群

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

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

2012-9-27 15:47:28
andrew3335 发表于 2012-9-27 09:24
matlab说程序在哪里出错的?
他显示说在p1=parametre那一行not enough input

另外我在编辑vt这个variable的时候,我这样表示滞后项不知道正不正确

谢谢了
二维码

扫码加我 拉你入群

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

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

2012-9-27 17:07:58
首先非常认同你的勇气自己编程做likelihood function
先让我搞清楚几个问题:
1.你这个函数的目的是什么?如果是做maximum likelihood来估计参数的话,parametres不应该是output吗?如果matlab报错not enough input很有可能是在给p1,2等赋值的时候,parametre数组里没有值。
2.vt(i)=p6+p7*(St(i-1)+St(i-2)*(p1-1)-p1*p2)^2+p8*v(i-1); 最后一项应该是Vt(i-1)对不对?

下班了,有问题明天再看
二维码

扫码加我 拉你入群

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

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

2012-9-27 17:34:29
andrew3335 发表于 2012-9-27 17:07
首先非常认同你的勇气自己编程做likelihood function
先让我搞清楚几个问题:
1.你这个函数的目的是什么? ...
很谢谢你帮我看,
1 他的目的是为maximizer 来估计参数, 参数我命名为parametre,, 刚开始参数是不已知的,所以我没有赋值,只会在求最优的时候给起始值,参数很多有17个,所以用p1 2....表示。 parameter应该是output? 那应该怎么设方程呢?
2谢谢你这里提醒我,应该是vt(i-1)才对。 这个式子没有什么问题吧?之前没有遇到过这种情况
二维码

扫码加我 拉你入群

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

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

2012-9-28 08:49:13
vt(i-1)的可以表达 i 滞后一期,没问题的。

如果开始parametre里面没有赋值的话,那么P1~17也就没有值,那么p1=parametre(1);就会出错。

我这里只是提个意见,我也不算太懂。这个程序的作用在我看来是根据已知的参数值来计算likelihood。如果你想用这个程序来做参数估计,你必须要反复的代入不同的Parametre组合,然后看那个组合的likelihood最大。
所以我会在你的程序之前加一段随机生成parapmetre矩阵的语句(注意P1~17的取值范围),再把他存到一个cell里面,程序后面把算得的likeli=-sum(Lt)存到一个数列里的某个位置。最后把整个程序循环10,000次以上(可能还不止,因为你的参数好多)。这样一来你就有10,000likelihood数值,10,000parametre组合,挑个最大的likelihood,找到相应的parametre组合就是你要的。
这样做计算量是海量的,我蛮担心你的电脑会死机。

或者拿支笔和纸自己算参数也行........
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群