Info

This question is closed. Reopen it to edit or answer.

How can I obtain the coefficient values, confidence intervals by the Fit

1 view (last 30 days)
hello, I'm new to Matlab, I have this equation:
c.*(((a+1./sqrt((1/b).^2+X.^2))./((1/b).^2+X.^2).*exp(-a.*sqrt((1/b).^2+X.^2)))+5.33267*(a+1./(sqrt((5.33267./b).^2+X.^2)))./((5.33267./b).^2+X.^2).*exp(a.*sqrt((5.33267./b).^2+X.^2)))./(4.*pi.*b)
I have to fit to find the two parameters a and b. The X and Y are:
X= [1.5 2 3 4 4.5 6 7.5 8 9 10 10.5 12 13.5 14 15 16 16.5 18 19.5 20 21 22 22.5 24 26 28 30 ];
Y=[2.029 0.796 0.456 0.24 0.204 0.122 0.077 0.061 0.053 0.042 0.035 0.027 0.021 0.02 0.017 0.016 0.015 0.015 0.013 0.012 0.01 0.009 0.009 0.008 0.007 0.0067 0.006];
knowing that a must be between [0,01732-0.95]; and b must be between [1.0001-3.1].
Thank you in advance for your help

Answers (1)

Star Strider
Star Strider on 3 Apr 2014
I replaced: a = P(1), b = P(2), c = P(3) but otherwise did not change your function:
f = @(P,X) P(3).*(((P(1)+1./sqrt((1/P(2)).^2+X.^2))./((1/P(2)).^2+X.^2).*exp(-P(1).*sqrt((1/P(2)).^2+X.^2)))+5.33267*(P(1)+1./(sqrt((5.33267./P(2)).^2+X.^2)))./((5.33267./P(2)).^2+X.^2).*exp(P(1).*sqrt((5.33267./P(2)).^2+X.^2)))./(4.*pi.*P(2));
X = [1.5 2 3 4 4.5 6 7.5 8 9 10 10.5 12 13.5 14 15 16 16.5 18 19.5 20 21 22 22.5 24 26 28 30 ];
Y = [2.029 0.796 0.456 0.24 0.204 0.122 0.077 0.061 0.053 0.042 0.035 0.027 0.021 0.02 0.017 0.016 0.015 0.015 0.013 0.012 0.01 0.009 0.009 0.008 0.007 0.0067 0.006];
P0 = [0.5; 2.0; 1.0];
[B,resnorm,residual,exitflag,output,lambda,J] = lsqcurvefit(f, P0, X, Y, [0.01732; 1.0001; -Inf], [0.95; 3.1; Inf]);
Bci = nlparci(B,residual,'jacobian',J);
[Ypred,delta] = nlpredci(f,X,B,residual,'Jacobian',J);
figure(1)
plot(X, Y, 'xb', 'LineWidth',1.5)
hold on
% plot(X, Ypred, '-r')
errorbar(X, Ypred, delta, '-r')
plot(X, Ypred, '-r')
hold off
legend('Data', 'Predicted ±95% CI', 'Location', 'NorthEast')
grid
sprm = ['a'; 'b'; 'c'];
fprintf(1,'Parameter Estimates and 95%%Confidence Intervals:\n')
for k1 = 1:3
fprintf(1,'\t%s = %13.5E\t(%13.5E %13.5E)\n', sprm(k1), B(k1), Bci(k1,:))
end
You did not specify what ‘c’ is, so I added it as P(3), a parameter to be estimated. I used the Optimization Toolbox function lsqcurvefit to fit your data, because the Statistics Toolbox function nlinfit does not allow for constrained parameter estimates. The other functions, nlparci and nlpredci are Statistics Toolbox functions.
Unfortunately, neither a nor b are statistically significant:
Parameter Estimates and 95% Confidence Intervals:
a = 1.73200E-02 ( -2.26964E-01 2.61604E-01)
b = 3.08837E+00 ( -1.26825E+00 7.44499E+00)
c = 9.51825E+01 ( 1.60626E+01 1.74302E+02)
  1 Comment
Martín Menéndez
Martín Menéndez on 22 Apr 2017
Edited: Martín Menéndez on 22 Apr 2017
Excuse me,I have a similar problem, but I always find errors, could you help me? I attach the values X and Y, and the equation is;
P(1)-P(2)*exp(-P(3).*X)-P(4)*exp(-P(5).*X)

Community Treasure Hunt

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

Start Hunting!