回归分析(按年份和公司)

时间:2015-03-17 04:43:12

标签: r repeat linear-regression finance

抱歉,我用英语和R很尴尬 希望你理解我的话。

我的数据设置如下。

year, week,       A017670,   A030200,  A032640,   Market,  IND.20

2000, 2000-01,       0.02,    -0.001,    0.005,    0.007,   0.004,

2000, 2000-02

...

2000, 2000-52

2001, 2001-01

...

2014, 2014-52

我想从R-squared中提取调整后的SSEregression models

我希望用R-squared编写(保存)调整后的SSE

我的模型如下:

lm(A017670~MARKET+IND.20, subset=(year=2000)) 

lm(A017670~MARKET+IND.20, subset=(year=2001)) 

... 

lm(A017670~MARKET+IND.20, subset=(year=2014)) 


lm(A030200~MARKET+IND.20, subset=(year=2000)) 

lm(A030200~MARKET+IND.20, subset=(year=2001)) 

...

lm(A030200~MARKET+IND.20, subset=(year=2014)) 


lm(A032640~MARKET+IND.20, subset=(year=2000)) 

lm(A032640~MARKET+IND.20, subset=(year=2001)) 

...

lm(A032640~MARKET+IND.20, subset=(year=2014)) 

我需要调整每个模型的R-squaredSSE

我的数据是700家公司的15年数据(A017670, A030200, A032640, ...........)

所以,我必须运行10,500次回归。

这很无聊。

此外,IND.20表示工业产量。 工业平均值为30 branches.(IND20, IND21, IND22, .............IND49)

谢谢。

1 个答案:

答案 0 :(得分:0)

创建公司和年份的组合:

models <- setNames(
  expand.grid(
    names(df1)[grep("^A",names(df1))], 
    unique(df1$year), stringsAsFactors = F), 
  c("company", "year"))

在每个组合上调用lm

do.call( rbind, 
  lapply( seq_len(nrow(models)), FUN = function(i) {
    formula1 <- sprintf("%s ~ MARKET + IND.20", models$company[i])
    fit1 <- lm( formula = formula1, data = df1[ df1$year == models$year[i], ]  )
    sfit <- summary(fit1)
    data.frame( 
      year = models$year[i],
      company = models$company[i],
      AdjRSq = sfit$adj.r.squared, 
      SSE = deviance(fit1) )
  })
)