最近在做毕业论文,想用matlab做极大似然估计,从网上下载到了Princeton大学yacine ait-sahalia教授的一些matlab程序。可是弄到matlab里运行会出现错误,对matlab这个软件不大熟,不懂如何改,希望大家帮帮忙。
用的模型是3/2随机模型,dx=(a*x+b*x^2)dt+k*x^(3/2)dW 其中我是有x的历史数据的,认为x的变化服从这个随机模型,现在需要用极大似然估计来估计参数a,b,k
下载到的m文件如下:
function output= ModelU1(x,x0,del,param)
% mu(x) = a*x + b*x^2;
%
%
% s(x) = sigma*x^(3/2);
%
%
% g(x) = 2/(sqrt(x)*sigma);
%
%
% lnpX(del, x, x0, 2, exact) = -log(2*Pi*del)/2 - log(s(x)) + cY(g(x), g(x0), -1, exact)/ del + cY(g(x), g(x0), 0, exact) + cY(g(x), g(x0), 1, exact)*del + cY(g(x), g(x0), 2, exact)*(del^2/2);
%
%
% pX(del, x, x0, 2, exact) = exp(lnpX(del, x, x0, 2, exact));
%
%
% cY(y, y0, -1, exact) = (-(1/2))*(y - y0)^2;
%
%
% cY(y, y0, 0, exact) = (a*(-y^2 + y0^2)* sigma^2 + (-8*b + 6* sigma^2)*log(y/y0))/(4* sigma^2);
%
%
% cY(y, y0, 1, exact) = -((1/(24*y*y0* sigma^4))* (48*b^2 + 24*b*(-2 + a*y*y0)* sigma^2 + (9 - 24*a*y*y0 + a^2*y*y0*(y^2 + y*y0 + y0^2))* sigma^4));
%
%
% cY(y, y0, 2, exact) = -((48*b^2 - 48*b* sigma^2 + (9 + a^2*y^2*y0^2)* sigma^4)/ (24*y^2*y0^2* sigma^4));
a = param(1);
b = param(2);
sigma = param(3);
y = 2/(sqrt(x)*sigma);
y0 = 2/(sqrt(x0)*sigma);
sx = sigma*x^(3/2);
output = -log(2*pi*del)/2 - log(sx) ...
+ (-(1/2))*(y - y0)^2 / del ...
+ (a*(-y^2 + y0^2)* sigma^2 + (-8*b + 6* sigma^2)*log(y/y0))/(4* sigma^2)...
+ ( -((1/(24*y*y0* sigma^4))* (48*b^2 + 24*b*(-2 + a*y*y0)* sigma^2 + (9 - 24*a*y*y0 + a^2*y*y0*(y^2 + y*y0 + y0^2))* sigma^4)) )*del ...
+ ( -((48*b^2 - 48*b* sigma^2 + (9 + a^2*y^2*y0^2)* sigma^4)/ (24*y^2*y0^2* sigma^4)) )*(del^2/2);
运行之后显示
??? Input argument "param" is undefined.
Error in ==> ModelU1 at 28
a = param(1);
程序的后面部分应该是做极大似然估计,可是为什么运行后一直在说param没有定义?
我应该怎么改呢?急求帮助!
感激不尽啊!