我正在跟踪Quantitative Finance的非常详细的post,但是,我的问题是编码问题。
我正在尝试估计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.
答案 0 :(得分:0)
此自定义函数接受以下输入参数:
params
,data
,cens
,freq
。
nloglf
必须接受所有四个参数,即使您不使用'Censoring'
或'Frequency'
名称/值对参数也是如此。在这种情况下,您可以编写'nloglf'
来忽略cens
和freq
参数。
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