Many linear regressions

As part of my data analysis (on time series), I am checking for correlation between log-returns and realized volatility.

My data consists of time series spanning several years for around hundred different companies (large zoo object, ~2 MB filesize). To check for the above-mentioned correlation, I have used the following code to calculate several rolling variances (aka realized volatility):

rollvar5 <- sapply(returns, rollVar, n=5, na.rm=TRUE)
rollvar10 <- sapply(returns, rollVar, n=10, na.rm=TRUE)

using the simple fTrading function rollVar. I have then converted the rolling variances to zoo objects and added the date index (by exporting to the results to csv files and manually adding the date, and then using read.zoo - not very sophisticated but it works just fine).

Now I wish to create around 100 linear regression models, each linking the log-returns of a company to the realized volatility to the specified company. On an individual basis, this would look like the following:

lm_rollvar5 <- lm(returns$[5:1000,1] ~ rollvar5[5:1000,1])
lm_rollvar10 <- lm(returns$[10:1000,1] ~ rollvar10[10:1000,1])

This works without problems.

Now I wish to extend this to automatically create the linear regression models for all 100 companies. What I've tried was a simple for-loop:

NC <- ncol(returns)
for(i in 1:NC){
lm_rollvar5 <- lm(returns[5:1000],i] ~ rollvar5[5:1000,i])
summary(lm_rollvar5)
lm_rollvar10 <- lm(returns[10:1000],i] ~ rollvar10[10:1000,i])
summary(lm_rollvar10)
}

Is there any way I could optimize my approach? (ie how could I save all regression results in a simple way). Since now the for-loop just outputs hundreds of regression results, which is quite ineffective in analyzing the results.

I also tried to use the apply function but I am unsure how to use it in this case, since there are several timeseries objects (the returns and the rolling variances are saved in different objects as you can see).


As to your question how you could save all regression results in a simple way, this is a bit difficult to answer given that we don't know what you need to do, and what you consider "simple". However, you could define a list outside the loop and store each regression model in this list so that you can access the models without refitting them later. Try eg

 NC <- ncol(returns)
 lm_rollvar5 <- vector(mode="list", length=NC)
 lm_rollvar10 <- vector(mode="list", length=NC)
 for(i in 1:NC){
 lm_rollvar5[[i]] <- lm(returns[5:1000],i] ~ rollvar5[5:1000,i])
 lm_rollvar10[[i]] <- lm(returns[10:1000],i] ~ rollvar10[10:1000,i])
 }

This gives you the fitted model for firm i at the i -th position in the list. In the same manner, you can also save the output of summary. Or you do sth like

 my.summaries_5 <- lapply(lm_rollvar5, summary)

which gives you a list of summaries.

链接地址: http://www.djcxy.com/p/30944.html

上一篇: 寻找非适当的公式

下一篇: 许多线性回归