File Exchange

image thumbnail

Multivariate Polynomial Regression

version (107 KB) by Ahmet Cecen
Performs polynomial regression on multidimensional data.


Updated 09 Apr 2018

GitHub view license on GitHub

Performs Multivariate Polynomial Regression on multidimensional data. The fits are limited to standard polynomial bases with minor modification options. Feel free to implement a term reduction heuristic.
The functionality is explained in hopefully sufficient detail within the m.file. Feel free to post a comment or inquiry.
No longer requires ANY additional toolboxes!
Head over to or the GitHub page on the right for a full illustrated tutorial. You can also publish Example.m for the same purpose.
Author: Ahmet Cecen, MINED @ Gatech

Comments and Ratings (41)

Ahmet Cecen

There is no direct way to cite this work. It has only been tangentially mentioned alongside my primary research. Here are a few options:

- Cite the thesis that necessitated the initial writing and continuous update of this code for 8 years:

- Cite the first work that refers to this code by name specifically and briefly explains it:

- Don't cite. Link to this URL and refer to the code in your methods explanation. Say something along the lines of " uses MultiPolyRegress written by Ahmet Cecen in MATLAB Central."

Can you please tell how to cite this work. Thank you!

Ahmet Cecen

Neither. This code doesn't currently have any uncertainty quantification on the fit parameters themselves. In your very simple case you can refer to the link below to find the uncertainty of the slope:

Dear Ahmet,
thank you so much for making this nice function. I tried a simple linear fit on experimental data.
I got the slope a and the constant b of the fit y=ax +b
Now, I need to use the slope a= -0.71744 and the error (standard deviation) of a.
According to the results below, what should I consider as standard deviation on the slope ?
MAESTD = 0.0035 or CVMAESTD= 0.0044 ?
I need to write that the slope like " a +/- std "

reg =

struct with fields:

FitParameters: '-----------------'
PowerMatrix: [2×1 double]
Scores: [14×2 double]
PolynomialExpression: @(x1)+6.9303.*1+-0.71744.*x1
Coefficients: [2×1 double]
Legend: [2×2 char]
yhat: [14×1 double]
Residuals: [14×1 double]
GoodnessOfFit: '-----------------'
RSquare: 0.9999
MAE: 0.0044
MAESTD: 0.0035
Normalization: '1-to-1 (Default)'
LOOCVGoodnessOfFit: '-----------------'
CVRSquare: 0.9998
CVMAE: 0.0052
CVMAESTD: 0.0044
CVNormalization: '1-to-1 (Default)'

Ahmet Cecen

The leave one out cross-validation calculation is done indirectly via the Sherman-Morrison-Woodburry formula, which involves division by a number that can be very close to zero if there is overwhelming over-fitting. You are correct that the number should not be smaller than 0, but I didn't guard against this edge case instability because it provides a comical measure of just how much you are over-fitting.

Long story short, don't use a fit with a CVRSquare "too different" (magnitude left to your imagination) than the regular RSquare.

Ahmet Thank you!
It is a great tool.
Just one question:
When I'm trying to use the sample in the example to calculate a model of higher order than 3 the CVRSquare is:

4rth: -2.55
5th: -9323.04
6th: -19991970873.98
7th: -4025574168920490.50
8th: -Inf

Shouldn't Require be positive and under 1?

Ahmet Cecen

Yep makes sense. I encourage you to submit this change as a pull request in GitHub. Otherwise I will fix it when I get a chance.

Changing line 186-187 from:

Speeds things up (and saves memory)

Great tool!

Nanbo Li


this is a brilliant function

Oleg Boiko


I really want this regression method to try my data. But this terrible web page always fails. Can someone send it to me please? My email is


Ahmet Cecen

I don't think I have explained this code exhaustively in publications. You can e-mail me for explanations of any particular section, my contact info is easy to find online. Otherwise search for the following concepts:
- Polynomial Basis
- Multivariate Regression
- Leave One Out Cross Validation
- Sherman-Morrison Formula
- QR factorization (and regression)

@Ahmet Cecen Can you give me the papers where the methodologie is explained?

Ahmet Cecen

An oversight. Will fix it when I get a chance.

To suppress output that may not be required, please add a semicolon to the expression in line 173.
eval(['PolyExp = ',variablesexp,Poly,';']);

Habib Yajam

Fast and easy to use. MATLAB lacks such a function in its original releases.

Habib Yajam

Fast and easy to use. MATLAB lacks such a function in its stock releases.

Easy to use.

Ahmet Cecen

If you send me an e-mail I can reply back to it with the zip file. My contact info is everywhere just Google my name, or go to my account.

Ahmet Cecen

I was able to download it just this second. I'll send it anyways if you have contact information on your account.

The file is no longer available.
Can someone send it to me please ?


Excellent code, I have been looking for multivariate polynomial regression tools for quite some time.

Silpakorn D

Xinyi Gong

Ahmet Cecen

If you send me (it's very easy to find my contact information online, including my profile here) the data and parameters to replicate your situation, I can look into it. Otherwise very hard for me to search for a random bug.


Hi Thanks for the function.I have tried your function with my seven independent and one dependent variable and R-squared is 0.19 which is not high.How can I get higher R-squared ?I also got error when I used 'range'.Any suggestion would be appreciated in advance.

Karel Macek


Hi, I tried to use the function but I have a lot of NaNs in my data. It looks like it cannot handle data with NaNs. Could you please update to include NaNs?

Ahmet Cecen



Ahmet Cecen

Added examples upon request.


Removed toolbox dependencies completely.

Repository renamed.

Can now handle rank deficient data matrices.

Substantially more detailed explanations. Almost completely revamped output. Stronger goodness of fit measures.

MATLAB Release Compatibility
Created with R2014b
Compatible with any release
Platform Compatibility
Windows macOS Linux

Discover Live Editor

Create scripts with code, output, and formatted text in a single executable document.

Learn About Live Editor