2

我正在关注 Quantitative Finance 的一篇非常详细的帖子,但是,我的问题是编码问题。

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

我已经发布了一张我需要完成的步骤的图片以方便,

来自链接的帖子

我坚持如何在 MATLAB 中编写这种对数似然。我基本上需要在迭代中最大化对数相似性:

在此处输入图像描述

我的尝试:

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.
4

1 回答 1

0

文件mle指出:

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

nloglf 即使您不使用'Censoring'or'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
于 2019-01-21T13:49:26.630 回答