Модели множественной линейной регрессии для вложенного фрейма данных / таблицы - PullRequest
0 голосов
/ 06 марта 2020

Я пытаюсь запустить несколько линейных регрессий на вложенном фрейме данных. У меня есть этот пример данных:


            data.frame(Subcat,Date, COMM1, COMM2,UOM, AUC_TYPE, WINNING_PRICE
                        #--|----------|-----|-----|----|---------|-------|
                        1, 2017-03-07, 40750,41400,"MT","English",35000
                        1, 2017-03-15, 40750,40000,"MT","English",35600

                        2, 2017-10-16, 41000,40500,"METER","Yankee",56440
                        2, 2017-11-06, 41010,40510,"METER","Yankee",52000
                        2, 2019-01-26, 50010,50510,"METER","English",50000

                        3, 2017-03-07, 40750,41400,"MT","English",56900
                        3, 2018-05-26, 50010,50510,"MT","English",47000
                        3, 2019-01-21, 40750,40200,"MT","English",56000
                        3, 2019-01-21, 40750,40200,"MT","English",55900

                        4, 2017-11-08, 37500,39000,"LTR","Dynamic Sealbid",67000
                        4, 2017-11-08, 37500,39000,"LTR","Dynamic Sealbid",65900)

Факторы / Символьные переменные были преобразованы в фиктивные, а затем выполняется вложенность на основе подкатегории.

                    df2= df[,-2] %>% group_by(Subcat)%>%  nest()

Выходные данные представляют собой вложенный фрейм данных с подкадром и столбцами данных. Я пытаюсь запустить регрессионную модель для прогнозирования выигрышной цены по подкатегории, используя следующий код:

   df2= df[,-2] %>%  group_by(Subcat)%>%  nest() %>%  
      mutate(fit=map(data, ~ lm(WINNING_PRICE~.,data = .)),
         results=map(fit,augment)) %>%
  unnest()

Выводится сообщение об ошибке Ошибка: Ввод должен быть список векторов Дополнительно: Предупреждение: cols сейчас требуется. Пожалуйста, используйте cols = c(data, fit, results). Более того, кадр данных df2 не отображается в консоли.

Я передал этот запрос ' Запуск нескольких простых линейных регрессий из вложенного кадра данных / таблицы '

Спасибо за заранее!

Ответы [ 2 ]

1 голос
/ 06 марта 2020

Если вы хотите смоделировать WINNING_Price ~ Subcat, я не думаю, что мы должны вкладывать (первый пример). Если необходимо вложить и разместить модель в столбце «data», оба элемента модели должны быть, например, во вложенном фрейме данных WINNING_PRICE ~ COMM1. Вот два примера для каждого из сценариев ios: Также ошибка unnest () возникает из-за изменения, указывающего столбцы, которые вы хотите удалить с помощью аргумента 'cols ='.

library(tidyverse)
df <- tribble(~Subcat, ~Date, ~COMM1, ~COMM2, ~UOM, ~AUC_TYPE, ~WINNING_PRICE,
                #--|----------|-----|-----|----|---------|-------|
                1, 2017-03-07, 40750,41400,"MT","English",35000,
                1, 2017-03-15, 40750,40000,"MT","English",35600,

                2, 2017-10-16, 41000,40500,"METER","Yankee",56440,
                2, 2017-11-06, 41010,40510,"METER","Yankee",52000,
                2, 2019-01-26, 50010,50510,"METER","English",50000,

                3, 2017-03-07, 40750,41400,"MT","English",56900,
                3, 2018-05-26, 50010,50510,"MT","English",47000,
                3, 2019-01-21, 40750,40200,"MT","English",56000,
                3, 2019-01-21, 40750,40200,"MT","English",55900,

                4, 2017-11-08, 37500,39000,"LTR","Dynamic Sealbid",67000,
                4, 2017-11-08, 37500,39000,"LTR","Dynamic Sealbid",65900)

fit <- lm(WINNING_PRICE ~ Subcat, data = df)

plot(df$Subcat, y = df$WINNING_PRICE)
abline(fit)

#to fit many model to data with 'data' next column  
df2= df[,-2] %>% group_by(Subcat)%>%  nest()

df3 <- df2 %>% 
  mutate(fit = map(data, ~lm(WINNING_PRICE~COMM1, data = .)),
         results = map(fit, broom::augment))
#need to specify cols to unnest (this was changed recentlyish)
df4 <- df3 %>% unnest(cols = data)
1 голос
/ 06 марта 2020

Я думаю, что-то, что это должно работать:

model_fn <- function(df1){ 
  lm(WINNING_PRICE ~ AUC_TYPE, data = df1)
}

fitted_bestel <- df2 %>%
   mutate(fit = map(data, model_fn))

Ошибка возникает из-за двух точек, которые вы используете (одна для замены всех ковариат и одна для данных).

...