全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 MATLAB等数学软件专版
6727 7
2008-10-09

请高手指点以下t分布最大似然估计的算法:

function va=ml_t(data)
    [m,n]=size(data);
    n=max(m,n);
    syms v x;
    tmp = gamma((v+1)/2)/gamma(v/2);
    f = tmp/(sqrt(v*pi)*(1+(x^2)/v)^((v+1)/2));
    log_f=log(f);
    dlog_f=diff(log_f,'v');
    L=sym('0');
    for k=1:n,
        l=subs(dlog_f,x,data(k));
        L=L+l;
    end
    va=solve(L);

  这是我自己编的程序。我用trnd命令生成数据验证过,例如用trnd(3,30,1)生成30个服从自由度为3的t分布的数据,再利用这个函数估计参数是否接近3。结果是这套程序能够顺利通过。但是遇到以下问题:

1、程序运行过程非常非常慢!我逐条语句检查过,“瓶颈”在for循环和最后的solve这两步,而这两处之所以出现“瓶颈”是因为“l=subs(dlog_f,x,data(k));”的结果本身就相当复杂,经过几十次循环相加之后就更加复杂,这又导致最终的L相当复杂,解起来很费劲。

2、结果似乎大大地偏离了原来设定的自由度。例如上面提到的用trnd(3,30,1)生成30个服从自由度为3的t分布的数据,结果似乎远离3!(不过由于每次运行这个程序都需要花很多时间,试得不多,而且每次的数据量都不大)

我希望能够简化这套程序,不知可行不可行?或者有没有其他更好的思路?

二维码

扫码加我 拉你入群

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

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

全部回复
2008-10-10 09:17:00
data = trnd(3,800,1);
t_hand = @tpdf;
[p,pci] = mle(data, 'PDF',t_hand, 'start',0.1)

[此贴子已经被作者于2008-10-10 9:21:47编辑过]

二维码

扫码加我 拉你入群

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

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

2008-10-10 13:53:00

jyliao兄:你的代码我运行过,有错,系统表示输入的变量太多。有几个问题我想问问你:

1、你用的matlab是什么版本的?

2、@tpdf表示什么?关于@的用法,一般的matlab教程会在什么内容的章节中提到?

二维码

扫码加我 拉你入群

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

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

2008-10-10 15:10:00

jyliao兄:你的代码我运行过,有错,系统表示输入的变量太多。有几个问题我想问问你:

1、你用的matlab是什么版本的?  
   2006b (7.3.0) with statsitics toolbox

2、@tpdf表示什么?关于@的用法,一般的matlab教程会在什么内容的章节中提到? doc
  function handle  (tpdf = pdf of t-distribution)

[此贴子已经被作者于2008-10-10 15:11:24编辑过]

二维码

扫码加我 拉你入群

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

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

2008-10-10 18:41:00

jyliao兄:你肯定你的代码是可以运行的吗?我运行过是出错的:

??? Error using ==> mle
Too many input arguments.

二维码

扫码加我 拉你入群

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

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

2008-10-11 06:52:00

This is the result in my Matlab Command window

>> data = trnd(3,800,1);mle(data, 'PDF',@tpdf, 'start',1)

ans =

    3.1431

二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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