Errors in Estimating Parameters With MLE and fsolve

조회 수: 3 (최근 30일)
Natasha Davina
Natasha Davina 2022년 6월 9일
댓글: Torsten 2022년 6월 10일
Hi, I am trying to estimate parameters of a distribution using mle, these are the objective functions
and in code (file name : sumbgg)
function F = sumbgg(p,x)
sum1 = 0;
sum2 = 0;
sum3 = 0;
sum4 = 0;
sum5 = 0;
sum6 = 0;
sum7 = 0;
sum8 = 0;
sum9 = 0;
sum10 = 0;
n = length(x);
for i = 1:n
e = exp(p(3) * x(i));
d = exp(-p(2) / p(3) * (e - 1));
c = 1 - d;
b = exp(p(3) * x(i) - 1);
a = c^p(1);
sum1 = sum1 + log(c);
sum2 = sum2 + a * log(c) / log(1 - a);
sum3 = sum3 + e;
sum4 = sum4 + b * d / c;
sum5 = sum5 + b * d / c * a / (1 - a);
sum6 = sum6 + x(i);
sum7 = sum7 + e * (1 - p(3)*x(i));
sum8 = sum8 + d * (p(3)*x(i) * e + e + 1) / c;
sum9 = sum9 + (a * d) * (p(3) * x(i) * e + e + 1) / (1 - a);
sum10 = sum10 + log(1 - a);
end
p3_2 = p(3)^2;
F = [n / p(1) + p(4) * sum1 - (p(5) - 1) * sum2;
n / p(2) + n / p(3) - 1 / p(3) * sum3 + ...
(p(1) * p(4) - 1) / p(3) * sum4 + p(1) * (p(5) - 1) / p(3) * sum5;
-n * p(2) / p3_2 + sum6 + p(2) * sum7 / p3_2 - ...
p(2) * (p(4) * p(1) - 1) * sum8 / p3_2 + ...
p(1) * p(2) * (p(5) - 1) * sum9 / p3_2;
-n * (psi(p(4)) + psi(p(4) + p(5))) + p(1) * sum1;
-n * (psi(p(4)) + psi(p(4) + p(5))) + p(1) * sum10];
F = double(F);
end
Then to find the parameters I used this code (filename: calc)
p = [];
x = [0.1, 0.2, 1, 1, 1, 1, 1, 2, 3, 6, 7, 11, 12, 18, 18, 18, 18, 18,...
21, 32, 36, 40, 45, 46, 47, 50, 55, 60, 63, 63, 67, 67, 67, 67, ...
72, 75, 79, 82, 82, 83, 84, 84, 84, 85, 85, 85, 85, 85, 86, 86];
p0 = [2 0.01 0.05 0.11 0.01];
i = 1;
options = optimoptions('fsolve');
p = fsolve(@(p)sumbgg(p,x), p0, options);
fprintf(p)
it then returned this error some errors such as
I have tried to fix it but nothing seems to work. Any suggestions for the problem I have or alternatives to using the code above? Thank you.
  댓글 수: 3
Natasha Davina
Natasha Davina 2022년 6월 10일
@Torsten both a and b has to be nonnegative in my model. I am confused with the "X must be nonnegative" error message because all my x has a non negative value.
Torsten
Torsten 2022년 6월 10일
a and b change in the course of the iteration since they are adjustable parameters.
Include the line
p(4:5) = p(4:5).^2
after the line
function F = sumbgg(p,x)
Remember that you will have to change the line
p0 = [2 0.01 0.05 0.11 0.01];
to
p0 = [2 0.01 0.05 sqrt[0.11,0.01]];
and the fitted paramters obtained
p = fsolve(@(p)sumbgg(p,x), p0, options);
to
p(4:5) = p(4:5).^2

댓글을 달려면 로그인하십시오.

답변 (0개)

카테고리

Help CenterFile Exchange에서 Sensitivity Analysis에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by