首页 > 解决方案 > 如何每天运行回归并将系数保存在新数据集中?

问题描述

我有一个数据集,其中包含从 1975 年到 2018 年每个国家(总共 16 个国家)每个行业(总共 10 个行业)的每日收益率。现在我需要每天和每周运行横截面回归并将系数保存在一个单独的数据集。

我尝试了以下代码。但是每天的估算值都是一样的。

fitted_models = Data %>% 
                group_by(Data$Date) %>% 
                do(model = lm(Data$RoR ~ Data$Country + Data$Industry, data=Data))

fitted_models$model

我需要包括以下对比:

contrasts(All0$Country) <- contr.sum(16, contrasts=TRUE)
contrasts(All0$Industry) <- contr.sum(10, contrasts=TRUE)

但我收到以下错误消息

Error in contrasts<-(*tmp*, value = contr.funs[1 + isOF[nn]]) : contrasts can be applied only to factors with 2 or more levels In addition: Warning messages: 1: contrasts dropped from factor Country due to missing levels 2: contrasts dropped from factor Industry due to missing levels

这是我的数据样本。随着时间的推移,RoR 会出现价值。

   Country        Date       Industry     RoR
   <chr>          <date>     <chr>      <dbl>
 1 Finland        1975-01-01 Basic Mats    NA
 2 Austria        1975-01-01 Basic Mats    NA
 3 Spain          1975-01-01 Basic Mats    NA
 4 United Kingdom 1975-01-01 Basic Mats    NA
 5 Norway         1975-01-01 Basic Mats    NA
 6 Germany        1975-01-01 Basic Mats    NA
 7 France         1975-01-01 Basic Mats    NA
 8 Italy          1975-01-01 Basic Mats    NA
 9 Portugal       1975-01-01 Basic Mats    NA
10 Switzerland    1975-01-01 Basic Mats    NA 

标签: rsaveregression

解决方案


使用data.table包进行分组操作可能是解决此问题的一种好方法——我将mtcars其用作示例数据集,因为您尚未提供数据集,但该方法与您的数据相同。在这里,我cyl用作分组列,但在您的情况下,它将是 by Date

library(data.table)

DT <- as.data.table(mtcars)

DT[,as.list(lm(mpg ~ wt+qsec)$coefficients), by = .(cyl)]

#    cyl (Intercept)        wt      qsec
# 1:   6    25.46173 -5.201906 0.5838640
# 2:   4    24.88427 -7.513576 0.9903892
# 3:   8    14.02093 -2.813754 0.7352592

推荐阅读