Здравствуйте, помогите, пожалуйста, разобраться с реализацией модели Мертона. Оценивается вероятность дефолта фирмы, торгующей акциями в рублях и выпустившей долговое обязательство в долларах. На одном из этапов оценки возникает следующая оптимизационная задача: нужно оценить параметры
и
с помощью ММП. Функция правдоподобия выглядит следующим образом:
Здесь
- это заданный интервал, через который происходят наблюдения (1/365 или 1/260).
- это непрерывная доходность активов фирмы, в ней, в общем-то, и заключаются мои проблемы. Стоимость активов является не наблюдаемым параметром. Его необходимо оценивать с помощью котировок акций (обозначим из через
). Предполагается, что стоимость акций
и активов фирмы
связаны следующим соотношением (это опцион на обмен активами):
где
,
,
.
и
известны (они были оценены на предыдущем этапе), это волатильность обменного курса и номинал облигации, умноженный на обменный курс.
и
- безрисковые ставки в России и США.
Итак, проблема в том, что, как я понимаю, выразить напрямую
через
и подставить её в функцию правдоподобия я не могу. А значит, как мне видится, есть задача, где функционал стремится к максимуму, и есть большое число ограничений (сколько наблюдений, столько и ограничений). Я пробовала посчитать эту задачу в GAUSSе, но он выдал ошибку, excel тоже сказал, что параметров слишком много.
Код в GAUSSе выглядел следующим образом:
Код:
new;cls;
library maxlik;
S = loadd("C:\\Data\\Raspadskaya.dat");
USD = loadd("C:\\Data\\USDRaspadskaya.dat");
retX = ln(USD[1:rows(USD)-1,1])-ln(USD[2:rows(USD),1]);
r = 0.070301;
rf = 0.0039;
K = 300000000;
NumShares = 780799808;
E = S*NumShares;
L = K*USD;
T = 2.8189;
del = 1/365;
start = ones(rows(E)+2,1);
_sqp_EqProc = &eqproc;
{parV,fV,lagrV,retcodeV} = sqpSolve(&fct,start);
muV = parV[1];
sigmaV = parV[2];
proc fct(_muV,_sigmaV,_V);
local _retV,_aux,_aux1;
_retV = ln(_V[1:rows(_V)-1,1])-ln(_V[2:rows(_V),1]);
_aux = ln(1/(_sigmaV^2*del)^0.5*exp(-((_retV-(_muV-(_sigmaV^2)/2))^2)/(2*_sigmaV^2*del)));
_aux1 = -sumc(_aux);
retp(_aux1);
endp;
proc eqproc(_sigmaV,_V);
local _sigmaY,_d1,_d2,f1;
_sigmaY = (_sigmaV^2 + sigmaL^2)^0.5;
_d1 = (ln(_V./L)-T*(r-rf-(_sigmaY^2/2)))/(_sigmaY*(T^0.5));
_d2 = _d1 - _sigmaY*(T^0.5);
f1 = E - _V.*cdfn(_d1)+(L.*cdfn(_d2))*exp(-(r-rf)*T);
retp(f1);
endp;
Отмечу, что в GAUSSе есть библиотека maxlik, но как её использовать в данном случае, я не понимаю(((
Вот что не так???(((