Hello stackexchange community!
I am new to R and econometrics and and stuck in a step of the fama-macbeth (1973) regression, in which risk premia of stocks are estimated with a two-step regression procedure.
The first regression looks like the following:
Rit = αi + βiRmt + εit ......(1)
where i = 1,...,20 stocks and Rm is the return of the market index (often referred to as factor in regressions)
The β in here, of which I have 20 (one for each stock), is the coefficient I want to use in the second regression, which is a cross-sectional regression:
Rit = γt βˆi + αit .............(2)
where again i = 1,...,20 stocks. I am supposed to get one γt (risk premium) per day(4500) and 20 αit (pricing errors) per day.
Now to my issue: The first regression was no problem. I have one .xts object (stocks.returns) with 20 stocks in the columns and 4500 rows, which are daily returns of each stock. Then I have another .xts object (index.returns) with the same attributes, but just one column which is the market index. With this data I run the following codes in order to get the betas:
all.betas <- coef(lm(stocks.returns ~ index.returns)) all.betas <- all.betas[2,1:20]
now I have a numeric vector with all 20 betas (removed the intercept) per stock and I want to run the second (2) regression and am trying the code:
summary(lm(stocks.returns ~ all.betas))
However, R keeps giving me this error:
Error in model.frame.default(formula = stocks.returns ~ all.betas, drop.unused.levels = TRUE) : variable lengths differ (found for 'all.betas')
I need to run a regression with all 20 stock returns against all 20 betas on each day (4500). I do not know how to structure this regression model/code.
I have been trying and searching for days now. Please help me. Any hints, errors I made, formulas I could try, literature, links, keywords etc. are highly appreciated!