Создайте столбец прогноза, используя Betas в r - PullRequest
0 голосов
/ 31 октября 2018

допустим, у меня есть вектор Бета (коэффициенты регрессии), подобный этому:

> ResultDos$coefficients[-1]
                            WOE_PPIExFoodEnergyTradeMoM 
                                               7.371144 
                        WOE_ChangeinHouseholdEmployment 
                                              13.089279 
      WOE_RetailSalesExAutoMoM.WOE_RetailSalesExAutoMoM 
                                              23.082144 
                                             WOE_PPIMoM 
                                              12.757599 
                                  WOE_PPIFinalDemandYoY 
                                               7.790093 
                    WOE_PPIMoM.WOE_RetailSalesExAutoMoM 
                                             -27.627089 
                               WOE_ExistingHomeSalesMoM 
                                              14.189292 
   WOE_ExistingHomeSalesMoM.WOE_PPIExFoodEnergyTradeMoM 
                                             -44.579969 

А класс "Числовой"

Кроме того, у меня есть фрейм данных, который содержит эти столбцы и некоторые другие (имена столбцов являются переменными, поэтому я не использую фиксированное умножение)

> head(OutputData,10)
                  Date OutputTrainData.Dependent
1  2013-01-01 22:00:00                       -18
2  2013-01-02 22:00:00                      -137
3  2013-01-03 22:00:00                        20
4  2013-01-04 22:00:00                        48
5  2013-01-07 22:00:00                       -36
6  2013-01-08 22:00:00                       -17
7  2013-01-09 22:00:00                       208
8  2013-01-10 22:00:00                        71
9  2013-01-11 22:00:00                        39
10 2013-01-14 22:00:00                       -76
   WOE_ExistingHomeSalesMoM.WOE_ExistingHomeSalesMoM
1                                          0.4179244
2                                          0.4179244
3                                          0.4179244
4                                          0.4179244
5                                          0.4179244
6                                          0.4179244
7                                          0.4179244
8                                          0.4179244
9                                          0.4179244
10                                         0.4179244
   WOE_RetailSalesExAutoMoM.WOE_RetailSalesExAutoMoM WOE_ChangeinHouseholdEmployment
1                                          0.6000675                      -0.8284745
2                                          0.6000675                      -0.8284745
3                                          0.6000675                      -0.8284745
4                                          0.6000675                       0.3242050
5                                          0.6000675                       0.3242050
6                                          0.6000675                       0.3242050
7                                          0.6000675                       0.3242050
8                                          0.6000675                       0.3242050
9                                          0.6000675                       0.3242050
10                                         0.6000675                       0.3242050
   WOE_ExistingHomeSalesMoM WOE_PPIExFoodEnergyTradeMoM WOE_PPIFinalDemandYoY  WOE_PPIMoM
1                 0.6464707                  -0.0820543              0.371575 -0.82847453
2                 0.6464707                  -0.0820543              0.371575 -0.82847453
3                 0.6464707                  -0.0820543              0.371575 -0.47707664
4                 0.6464707                  -0.0820543              0.371575 -0.16578655
5                 0.6464707                  -0.0820543              0.371575 -0.47707664
6                 0.6464707                  -0.0820543              0.371575  0.09306556
7                 0.6464707                  -0.0820543              0.371575  0.09306556
8                 0.6464707                  -0.0820543              0.371575  0.09306556
9                 0.6464707                  -0.0820543              0.371575 -0.20432022
10                0.6464707                  -0.0820543              0.371575 -0.20432022
   WOE_ExistingHomeSalesMoM.WOE_PPIExFoodEnergyTradeMoM
1                                            -0.0530457
2                                            -0.0530457
3                                            -0.0530457
4                                            -0.0530457
5                                            -0.0530457
6                                            -0.0530457
7                                            -0.0530457
8                                            -0.0530457
9                                            -0.0530457
10                                           -0.0530457
   WOE_ManufacturingSICProduction.WOE_RetailSalesExAutoMoM WOE_PPIMoM.WOE_RetailSalesExAutoMoM
1                                               -0.4889554                          0.64176968
2                                               -0.4889554                          0.64176968
3                                               -0.4889554                          0.36956275
4                                               -0.4889554                          0.12842493
5                                               -0.4889554                          0.36956275
6                                               -0.4889554                         -0.07209233
7                                               -0.4889554                         -0.07209233
8                                               -0.4889554                         -0.07209233
9                                               -0.4889554                          0.15827466
10                                              -0.4889554                          0.15827466

Что я хотел бы сделать, так это создать новый столбец «Подходит», который умножает значение фрейма данных на значение бета-версий, когда имена столбцов / бета-версий совпадают. Кто-нибудь может мне помочь?

Для доказательства концепции, более простым способом объяснить это было бы что-то вроде этого:

Вектор: (x1 = 10, x2 = 5, x3 = 1) DF:

Day   x3    x2    x1
1     5      3    2
2     2      1    2
3     1      5    3

Выход:

Day   x3    x2    x1   Fits
1     5      3    2     (5*1+3*5+2*10) = 40
2     2      1    2       27
3     1      5    3       56

решено -

Чтобы решить эту проблему, я сделал следующее (не лучшее решение, так как я новичок в R / Coding):

1.- Получите Вектор Бетас в порядке с

Orderlist <- sapply(names(OutputData[-c(1:2)]), function(x) which(x==names(ResultDos$coefficients[-1])))
Orderlist <- as.vector(Orderlist)
BetasInOrder <- as.vector(Betas[Orderlist])

2.- Преобразование данных в матрицу, чтобы я мог выполнять умножение матриц.

m <- as.matrix(OutputData[-c(1:2)])
Fits <- m%*%diag(BetasInOrder)

3.- Суммируйте столбцы и добавьте перехват

FitsValue <- rowSums(Fits)
FitsValue <- FitsValue + ResultDos$coefficients[1]

1 Ответ

0 голосов
/ 01 ноября 2018

Два варианта: (1) использовать команду predict или (2) сделать X %*% beta, где вы выбираете правильные столбцы ваших данных для использования в X, например, с помощью. which. Обратите внимание на необходимость cbind из-за перехвата в регрессии.

# example data
set.seed(1234)
df <- data.frame(
    x1 = runif(100, 0, 10),
    x2 = runif(100, 0, 10),
    x3 = runif(100, 0, 10)
)
df$y <- 2 + 1*df$x1 + 3*df$x3 + rnorm(100, 0, 5)

# run regression of y on x1 and x3 (but not x2)
out <- lm(y ~ x1 + x3, data=df)

# option 1: use predict command
pred1 <- predict(out)

# option 2: use X %*% beta
X <- cbind(1, df[ , names(df) %in% names(out$coefficients)])
pred2 <- as.matrix(X) %*% coef(out)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...