How to use splitapply with fitlm

Hi,
I want to run a regression for 2 diffrent stocks for each year of observation separately. So i get a new Betas for each stock and each year. The goal is to assign the residuals to ID and dates. I upload the set I'm using. The regression looks like this:
RET = Beta0 + Beta1 * MRET
RET is the returns of the stocks and MRET the return of the Market.
My idea was to you use the splitapply function. But my code isn't working. I guess the problem is in line 3.
[group6, years, ID]= findgroups(subset1.years, subset1.ID);
[group7, dates]= findgroups(subset1.years, subset1.ID);
regression = @(y) fitlm(subset1.MRET,subset1.RET);
lm2 = splitapply(regression, subset1.MRET,group6);
Resitbl = table (ID,dates, lm2.Residuals.Raw);
regress function would also work for me. But it also didn't work for me.
Thanks in advance

 Accepted Answer

Matt J
Matt J on 14 Apr 2021
Your regression(y) function takes an argument y that is never used.

5 Comments

Hi Matt,
Thanks for your answer.
regression = @(subset1.RET) fitlm(subset1.MRET,subset1.RET);
Is this the right way to correct it ?
This might be what you want,
lm2 = splitapply(@(x,y){fitlm(x,y)}, subset1.MRET, subset1.RET,group6);
Luca
Luca on 14 Apr 2021
Edited: Luca on 14 Apr 2021
Thank you very much the code is working now.
But there is a new problem.
I get a tabe for lm 2 where each regression is stored in one row. I attached a foto.
And I'm not able to access the residuals all at ones. Do you know a way?
Regards
Matt J
Matt J on 14 Apr 2021
Edited: Matt J on 14 Apr 2021
In the photo you've shown, lm2 is a cell array, not a table.
Right, sorry I did not pay attention.

Sign in to comment.

More Answers (0)

Products

Release

R2021a

Asked:

on 14 Apr 2021

Commented:

on 15 Apr 2021

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!