Как я могу ежедневно выполнять регрессию и сохранять коэффициенты в новом наборе данных? - PullRequest
0 голосов
/ 12 июня 2019

У меня есть набор данных, содержащий дневную норму прибыли для каждой отрасли (всего 10 отраслей) на страну (всего 16 стран) с 1975 по 2018 год. Теперь мне нужно выполнять регрессии сечениями в день и неделю и сохранятькоэффициенты в отдельном наборе данных.

Я попробовал следующий код.Но оценки одинаковы для каждого дня.

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

Thisэто образец моих данных.Со временем появляются значения для 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 

1 Ответ

0 голосов
/ 12 июня 2019

Использование пакета data.table для выполнения групповых операций может быть хорошим способом для этого - я использую mtcars в качестве примера набора данных, поскольку вы его не предоставили, но подход будет быть таким же с вашими данными. Здесь я использую cyl в качестве столбца группировки, но в вашем случае это будет 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
...