MATLAB Answers

How to add boundary conditions using fitnlm function?

28 views (last 30 days)
Camila Garcia Jange
Camila Garcia Jange on 8 Dec 2020
Answered: Aditya Patil on 21 Dec 2020
Hello,
I would like to run a nonlinear regression model for the function detailed below (in the code). However, I want to add boundary conditions for my parameters, which include:
b(1) > 0, b(2) > 0, and 0.45 < b(3) < 0.89
I would like to know how I can obtain the full statistical analysis (i.e. SSE, coefficients, t test, confidence intervals) while being able to add the boundary conditions to the model. Right now, I am able to run the model, but without the specified boundaries.
I am aware that if I use lsqcurvefit function, I will be able to include the boundaries that I want. However, my goal is not only to include the boundaries and minimize SSE. I want to evaluate whether it is important to include the parameter b(2) in the model or not. Thank you in advance for the help.
%% Data and Model for the Fit
% Defining experimental data (x,y)
x = [1 2 4 6 8 10 15 20 30 40 60 90 120 150 180]';
y = [0 0 0 0 0.206398349 0.063037496 0.085397317 0.56381149 0.946508428 1.462332301 1.731854145 1.700722394 1.829205366 2.092363261 2.265393877]';
%% Defining function
fitfcn = @(b,x) b(1).*x.^(b(3)) + b(2).*x.^(2*b(3));
start = [0.1,0.01,0.45];
nlm = fitnlm(x,y,fitfcn,start);
xx = linspace(0,180)';
line(xx,predict(nlm,xx),'linestyle','--','color','k');
hold on;
plot(x,y,'ko');
xlabel('Time (min)'); ylabel('Concentration (mg/mL/g');

  0 Comments

Sign in to comment.

Answers (1)

Aditya Patil
Aditya Patil on 21 Dec 2020
This is an known request, and might be implemented in any future release.
As a workaround, you can use the predicted parameters/weights from lsqcurvefit to evaluate the function, and then use various hypothesis tests to evaluate the fit.

  0 Comments

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!

Translated by