File Exchange

image thumbnail

Multivariate Polynomial Regression

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

69 Downloads

Updated 09 Apr 2018

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 http://ahmetcecen.github.io/MultiPolyRegress-MatlabCentral/ 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 (38)

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:

https://terpconnect.umd.edu/~toh/models/ErrorPropagation.pdf

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)'

Behnam Amiri

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:
H=QQ*QQ';
rCV=r./(1-diag(H));
to
dH=sum(QQ.*QQ,2);
rCV=r./(1-dH);

Speeds things up (and saves memory)

Great tool!

Nanbo Li

Yodish

Yodish (view profile)

this is a brilliant function

Oleg Boiko

vina

vina (view profile)

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 1034223185@qq.com

vina

vina (view profile)

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?

OSCAR VITERI

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 ?

easumj

easumj (view profile)

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.

Rita

Rita (view profile)

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

Sagar

Sagar (view profile)

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

multidimensional

Morgan

Morgan (view profile)

Ahmet Cecen

Added examples upon request.

Updates

1.4.0.0

Removed toolbox dependencies completely.

1.3.0.0

Repository renamed.

1.2.0.0

Can now handle rank deficient data matrices.

1.1.0.0

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