在MATLAB中编写对数似然函数

时间:2019-01-21 08:36:30

标签: matlab quantitative-finance probability-density mle log-likelihood

我正在跟踪Quantitative Finance的非常详细的post,但是,我的问题是编码问题。

我正在尝试估计GARCH(1,1)模型(不使用统计工具箱,而是使用长手方法,其原因是我真的很想了解模型的来龙去脉)。

我张贴了一张我需要轻松完成的步骤的图片,

From linked post

我对如何在MATLAB中编写这种对数似然法感到困惑。我本质上需要在迭代中最大化对数似然性:

enter image description here

我的尝试

custlogpdf = @(u1,sigma) -1/2*sum( log(2*pi) + log(sigma^2) + (u1^2)./sigma^2 );
phat = mle(u1,'nloglf', custlogpdf, 'start' 0.05)

有人能指出我正确的方向来使用函数的最大似然估计吗?

我从尝试中得到的错误:

    Error in test (line 40)
phat = mle(u1,'nloglf', custlogpdf, 'start', 0.05)

Caused by:
    Error using test>@(u1,sigma)-1/2*sum(log(2*pi)+log(sigma^2)+((u1)^2)/sigma^2)
    Too many input arguments.

1 个答案:

答案 0 :(得分:0)

documentation of mle指出:

  

此自定义函数接受以下输入参数:paramsdatacensfreq

     

nloglf 必须接受所有四个参数,即使您不使用'Censoring''Frequency'名称/值对参数也是如此。在这种情况下,您可以编写'nloglf'来忽略censfreq参数。

     

nloglf 返回标量负对数似然值,还可以选择返回负对数似然梯度矢量(请参阅'GradObj'中的'Options'字段)。

...但是您的函数句柄仅接受2个输入=> MATLAB试图将4个输入传递给仅接受2个=> Error: Too many input arguments.的函数。

您可能应该做的是定义一个适当的function,它具有4个输入和1个或2个输出,然后在调用@funcName时使用mle进行引用,即:

function test
...
initialGuess = [valForParam1, valForParamN];
phat = mle(u1, 'nloglf', custlogpdf, 'start', initialGuess );
...

% function [likelihood, likeGrad] = custlogpdf(params, data, cens, freq)
function [likelihood, likeGrad] = custlogpdf(params, data, ~, ~)
likelihood = ... % some function of params + data
if nargout == 2
  likeGrad = ... % some other function of the inputs
end