How can I do non-linear regression for three varietals?
40 views (last 30 days)
Show older comments
Riyadh Muttaleb
on 23 Jan 2017
Commented: Star Strider
on 25 Jan 2017
Hi All,
I have matrix with three variables (x,y,z) I would like to get best non linear regression for these variables using like this equation: Eq=a*x+b*y+c*z+d
How can I get the constants and correlation coefficient?
Thanks in advance,
Riyadh
4 Comments
Accepted Answer
Star Strider
on 23 Jan 2017
The equation you posted is linear. Assuming it is a stand-in for a nonlinear equation, the usual way of fitting a function of several variables is to create a matrix of the incependent variables and passing that as one argument to the objective and fitting functions.
Example:
% % % MAPPING: x = xyz(:,1), y = xyz(:,2), z = xyz(:,3), a = b(1), b= B(2), c = b(3), d = b(4)
xyz = [x(:) y(:) z(:)];
Eq = @(b,xyz) b(1).*xyz(:,1) + b(2).*xyz(:,2) + b(3)*zyz(:,3) + b(4);
Then just use them as arguments to whatever fitting function you want (such as nlinfit or lsqcurvefit).
4 Comments
Star Strider
on 25 Jan 2017
My pleasure.
You have described a linear model. I would do something like this:
Prms = [ones(size(SPM(:))), S(:), A(:)]\SPM(:);
a = Prms(1)
b = Prms(2)
c = Prms(3)
The core MATLAB linsolve function and the Statistics and Machine Learning Toolbox regress and glmfit functions (and several others) are also options.
That will work if your matrix is not sparse. If it is sparse, use the lsqr function.
See the documentation for the various functions to understand how to use them.
More Answers (1)
the cyclist
on 23 Jan 2017
Edited: the cyclist
on 23 Jan 2017
Maybe this will help?
% Here is an example of using nlinfit(). For simplicity, none of
% of the fitted parameters are actually nonlinear!
% Define the data to be fit
x = (0:0.25:10)'; % Explanatory variables
y = x.^2;
z = x.^3;
E = 5 + 3*x + 7*y + 11*z; % Response variable (if response were perfect)
E = E + 500*randn((size(x)));% Add some noise to response variable
% Define function that will be used to fit data
% (F is a vector of fitting parameters)
f = @(F,X) F(1) + F(2).*X(:,1) + F(3).*X(:,2) + F(4).*X(:,3);
F_fitted = nlinfit([x y z],E,f,[1 1 1 1]);
% Display fitted coefficients
disp(['F = ',num2str(F_fitted)])
% Plot the data and fit
figure
plot(z,E,'*',z,f(F_fitted,[x y z]),'g');
legend('data','fit','Location','NorthWest')
3 Comments
the cyclist
on 23 Jan 2017
I edited my example, so that it now uses three explanatory variables: x,y,z.
(It is not important that I happened to used x itself to define y and z.)
See Also
Categories
Find more on Nonlinear Regression in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!