# Is this the correct way to do multivariate regression without using GLM?

Hi how’s it going?

I wanted to do multivariate regression manually instead of GLM, and I just want to make sure this is the correct implementation, in the most basic sense, choice of priors and numbers disregarded.

``````with pm.Model() as m_5_1:
a = pm.Normal("a", 10,5)
bA = pm.Normal("bA",10,5)
bB = pm.Normal("bB",10,5)
sigma = pm.Uniform("sigma", 0,4)

mu = pm.Deterministic("mu", a + bA * x['var1']) + bB * x['var2']

result = pm.Normal(
"result",mu=mu, sigma=sigma, observed=y.values
)
trace = pm.sample()
``````

and then for predictions on new data I’m doing…

``````newdata = pd.read_csv('newdata.csv')
number_of_rows_in_newdata = newdata.shape[0]

new_data_0 = xr.DataArray(
newdata['var1'],
dims=["pred_id"]
)

new_data_1 = xr.DataArray(
newdata['var2'],
dims=["pred_id"]
)

pred_mean = (
trace["a"][:number_of_rows_in_newdata] +
trace["bA"][:number_of_rows_in_newdata] * new_data_0 +
trace["bB"][:number_of_rows_in_newdata] * new_data_1

)

predictions = xr.apply_ufunc(lambda mu, sd: rng.normal(mu, sd), pred_mean, trace["sigma"][:number_of_rows_in_newdata])

``````

Is there anything I’m doing wrong here or is this the correct implementation on multivariate regression and subsequent out of sample predictions?

Thanks!

This is a correct implementation of multiple regression which is different from multivariate regression. Multivariate regression typically refers to a multivariate outcome instead of a multivariate predictor. Here, you have a scalar outcome. Otherwise, everything looks fine.

3 Likes

Cool thanks so much for the feedback!