Updated 09 Apr 2018
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
Ahmet Cecen (2020). Multivariate Polynomial Regression (https://www.github.com/ahmetcecen/MultiPolyRegress-MatlabCentral), GitHub. Retrieved .
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: https://smartech.gatech.edu/bitstream/handle/1853/58723/CECEN-DISSERTATION-2017.pdf
- Cite the first work that refers to this code by name specifically and briefly explains it: https://link.springer.com/article/10.1186/2193-9772-3-8
- 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!
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:
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 "
struct with fields:
PowerMatrix: [2×1 double]
Scores: [14×2 double]
Coefficients: [2×1 double]
Legend: [2×2 char]
yhat: [14×1 double]
Residuals: [14×1 double]
Normalization: '1-to-1 (Default)'
CVNormalization: '1-to-1 (Default)'
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:
Shouldn't Require be positive and under 1?
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)
this is a brilliant function
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 firstname.lastname@example.org
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?
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,';']);
Fast and easy to use. MATLAB lacks such a function in its original releases.
Fast and easy to use. MATLAB lacks such a function in its stock releases.
Easy to use.
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.
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.
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.
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?
Added examples upon request.
Removed toolbox dependencies completely.
Can now handle rank deficient data matrices.
Substantially more detailed explanations. Almost completely revamped output. Stronger goodness of fit measures.