MATLAB Answers

0

"mvregress" does not do Multivariate Linear Regression?

Asked by Matthew on 16 Mar 2013
Latest activity Commented on by Ricardo Arévalo on 18 Oct 2016

The documentation for function "mvregress" states that the return value "beta" is a vector of the regression coefficients. Looking deeper into "Multivariate Normal Regression", we see that matlab uses the same regression coefficients ("beta") for every dimension of the multivariate response variable Y

This is ludicrous. Of course each component of the response variable can have its own set of coefficients. THAT is multivariate linear regression.

Am I missing something? Is this just an inherent shortcoming in matlab's "mvregress" function? If so, what a bizarre design choice...

Is there some way to get real multivariate linear regression, i.e. get a matrix beta of regression coefficients?

  2 Comments

If you use regress, remember to add a column of ones to indicate that there is a constant in your regression model.

I leave an example:

%Let lon, lat and alt be the independant variables of a model.
lon=[61;63;64;68;71;73;75];
lat=[139;140;129;128;140;141;128];
alt=[325;300;400;250;210;160;175];
%Let pre be the dependant variable of the model.
pre=[477;696;227;646;606;791;789];
%Adding a column of ones to get the constant.
predictors=[ones(size(lon)),lon,lat,alt];
%This will create a regression model of type:
% Pre=a0+(a1*lon)+(a2*lat)+(a3*alt), it also gives stats and residuals   
[b,bint,r,rint,stats] = regress(pre,predictors);

Log in to comment.

Tags

1 Answer

Answer by the cyclist
on 16 Mar 2013
Edited by the cyclist
on 16 Mar 2013
 Accepted Answer

You are missing something. See my answer in this thread for several examples of using design matrices with mvregress():

http://www.mathworks.com/matlabcentral/answers/47451-how-can-i-compute-regression-coefficients-for-two-or-more-output-variables

There are also examples from MathWorks here: http://www.mathworks.com/help/stats/mvregress.html

  3 Comments

Just to follow up on the cyclist's answer (from my MathWorks perspective), mvregress is admittedly confusing. You might be expecting a coefficient matrix such as you would get from B=X\Y. But mvregress requires that you set up X as a cell array to do this. A benefit of that is that you have more flexibility, so for example you can constrain some coefficients to be the same across the columns of Y. But there is a cost of a less-than-simple interface. Rest assured that it is multivariate, in that it takes into account covariance across the Y columns.

You want B to be a P-by-Q matrix. If you set things up properly, B will be a (P*Q)-by-1 vector with all the same elements that you want. You can reshape it to P-by-Q.

Let me know if the references the cyclist points out aren't sufficient to explain how to set up X. I'm hoping we will make mvregress simpler in the future.

@thecyclist I am trying to use mvregress with the data I have with dimensionality of a couple of hundreds. (3~4). Using 32 gb of ram, I can not compute beta and I get "out of memory" message. I couldn't find any limitation of use for mvregress that prevents me to apply it on vectors with this degree of dimensionality, am I doing something wrong? is there any way to use multivar linear regression via my data?

@Anoosh:

Although this is a perfectly sensible place to ask this question, you won't actually get much attention from a comment buried in a 3-year-old thread.

I suggest you ask a new question. If you can actually attach files with your data and code, that will help people diagnose your issue.

Log in to comment.


Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today