Matlab中的回归假设学生的分布式错误术语

时间:2010-02-21 02:01:25

标签: matlab distribution regression

我看到有可能为OLS使用regress / regstats,我发现了L1-Regression(拉普拉斯)的在线实现,但我似乎无法弄清楚如何实现t分布式错误术语。我试过最大化残差的对数似然,但似乎没有得到正确的答案。

classdef student < handle
   methods (Static)

       % Find the sigma that maximizes the Log Liklihood function given a B
       function s = findLonS(r,df)
           n = length(r);

           % if x ~ t location, scale distribution with df 
           % degrees of freedom, then (x-u)/sigma ~ t(df)
           f = @(s) -sum(log(tpdf(r ./ s, df)));

           s = fminunc(f, (r'*r)/n);
       end

       function B = regress(X,Y,df) 
           [n,m] = size(X);

           bInit = ones(m, 1);

           r = (Y - X*bInit);
           s = student.findLonS(r, df);

           % if x ~ t location, scale distribution with df 
           % degrees of freedom, then (x-u)/sigma ~ t(df)
           f = @(b) -sum(log(tpdf((Y - X*b) ./ s, df)));

           options = optimset('MaxFunEvals', 10000, 'TolX', 1e-16, 'TolFun', 1e-16);
           [B, fval] = fminunc(f, bInit, options); 
       end
   end
end

与R实现(我知道已经过测试且准确)相比,我得到的解决方案是错误的。

我可以找到解决方案的任何建议或想法吗?

1 个答案:

答案 0 :(得分:0)

我的猜测是你必须调整给定s的比例b。这可能意味着做一些事情,例如选择优化b,然后调整s,再次优化b,或者可能重写您的目标

f = @(b)(-sum(log(tpdf((Y-X*b) ./ student.findLonS(Y-X*b,df),df))));