## "mvregress" does not do Multivariate Linear Regression?

### Matthew (view profile)

on 16 Mar 2013
Latest activity Commented on by Ricardo Arévalo

on 18 Oct 2016

### the cyclist (view profile)

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?

Ricardo Arévalo

### Ricardo Arévalo (view profile)

on 18 Oct 2016

try regress function

Ricardo Arévalo

### Ricardo Arévalo (view profile)

on 18 Oct 2016

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);
```

### the cyclist (view profile)

on 16 Mar 2013
Edited by the cyclist

### the cyclist (view profile)

on 16 Mar 2013

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

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

Tom Lane

### Tom Lane (view profile)

on 16 Mar 2013

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.

Anoosh

### Anoosh (view profile)

on 23 Jan 2016

@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?

the cyclist

### the cyclist (view profile)

on 23 Jan 2016

@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.