I would like to do a rolling linear regression, with expanding window, between two variables in a data frame, grouped by a third categorical column.
For example, in the toy data frame below, I would like to extract coefficient of lm(y~x) grouped by z using all rows until the row of interest. Thus for row 2, data set for regression will be rows 1:2, for row 3 will be rows 1:3, for row 4 will be just row 4 as it is the first row with categorical variable z= b
dframe<-data.frame(x=c(1:10),y=c(8:17), z=c("a","a","a","b","b","b","b","b","b","b"))
Using rollify function, I am able to get what I want except the expanding window. Below I have used a window size of 2
rol <- rollify(~coef(lm(.x~0+.y)),2)
output<-dframe %>% group_by(z) %>% mutate(tt=rol(x,y))
Specifically I do not know, how I can supply a variable window size to the rollify function. Is it possible?
Thinking broadly, what is an efficient way to do this operation? I need to do this on several 10000's of rows