Карта (purrr) для добавления диапазона чисел к столбцу один за другим

У меня есть R фрейм данных с двумя столбцами, colA и colB, и встроенным объектом glm. Теперь я могу использовать прогнозирование с фреймом данных и объектом glm для прогнозирования результатов. Тем не менее, я также хотел бы предсказать результаты для colB+0.1, colB+0.2, colB+0.3 и т. Д.

Я думал о том, чтобы сделать это с map (мурлыканье), но я не знаю как. То, что я пробовал до сих пор, это создать вектор:

library(tibble)
range <- data_frame(colC = seq(-1, 1, by=0.1))

Теперь я не могу понять, как это сделать:

  1. Добавьте первый элемент colC ко всем элементам colB
  2. Затем прогнозируем () для colA и colB с помощью объекта glm
  3. Сгруппируйте этот результат по colA и сохраните его в новом векторе
  4. Повторите 1-3 для следующих элементов в colC и добавьте результаты к новому вектору, чтобы этот новый вектор имел colC и предсказанный и сгруппированный colB.

Я надеюсь, что мой вопрос ясен. Кто-нибудь знает, как это сделать? Кстати, это не должно быть с purrr,

1 ответ

Я создал простое решение, используя функцию, чтобы вы могли сделать это для любых фреймов данных (data) и любая последовательность добавленных значений (add) в "colB".

# data has a column named 'colB' from which we cant to predict with added values.
# add is the vector of adding values to colB
'glm_add' <- function(data, add = seq(0.1, by = 0.1, length.out = nrow(data))){
  data <- cbind.data.frame(data, colB_add = data$colB + add)

  glm <- glm(colA ~ colB, data = data)
  glm_add <- glm(colA ~ colB_add, data = data)

  pred <- predict(glm, data)
  pred_add <- predict(glm_add, data)

  return(list(pred = pred, pred_add = pred_add))
}

Воспроизведите пример для проверки функции:

data <- data.frame(colA = rnorm(10), colB = rnorm(10))
res <- glm_add(data)

Предсказания от glm с начальным "colB" как ковариата:

> res$pred : 
         1          2          3          4          5          6          7          8          9         10 
0.13415502 0.17283282 0.27074470 0.47279826 0.01846426 0.13072748 0.21737383 0.12426569 0.25197290 0.30230644 

Прогнозы от glm с colB+0.1, colB+0.2, colB+0.3, ... в качестве ковариаты:

> res$pred_add
          1           2           3           4           5           6           7           8           9          10 
 0.19407251  0.23911968  0.39659313  0.75172751 -0.13896182  0.04575049  0.18184197 -0.02324061  0.19078440  0.25795416 

РЕДАКТИРОВАТЬ:

Автор фактически просил предсказать из любых измененных фреймов данных, где colB_add к каждому из его элементов были добавлены одинаковые значения 0,1, затем 0,2 и т. д.

Для этого я буду использовать lapply() создать data_list где каждый элемент является кадром данных с соответствующим colB_add колонка.

add <- seq(0.1, by = 0.1, length.out = nrow(data))
data_list <- lapply(1:length(add), function(i) cbind.data.frame(data, colB_add = data$colB + add[i]))

Затем я положил каждый прогноз в список

pred_list <- list()
> lapply(1:length(add), function(x){
+   glm <- glm(colA ~ colB_add, data = data_list[[x]])
+   pred_list[[x]] <<- predict(glm, data_list[[x]])
+   })
[[1]]
          1           2           3           4           5           6           7           8           9          10 
-0.25321920  0.93795112 -0.04791986 -0.51229077 -0.20971718  0.36441752  0.38477508 -0.26853199 -0.00754999  0.04868279 

[[2]]
          1           2           3           4           5           6           7           8           9          10 
-0.25321920  0.93795112 -0.04791986 -0.51229077 -0.20971718  0.36441752  0.38477508 -0.26853199 -0.00754999  0.04868279 

[[3]]
          1           2           3           4           5           6           7           8           9          10 
-0.25321920  0.93795112 -0.04791986 -0.51229077 -0.20971718  0.36441752  0.38477508 -0.26853199 -0.00754999  0.04868279 

Обратите внимание, что это дает одинаковые прогнозы для каждого модифицированного фрейма данных. Это очевидно из теории о линейных моделях, так как каждый ковариат изменяется на один и тот же фактор.

Другие вопросы по тегам