Создание нескольких наборов прогнозов и интервалов прогнозирования для установленных точек в R

#r #dplyr #purrr #predict #modelr

Вопрос:

Моя цель состоит в том, чтобы создать несколько моделей, а затем, используя новый набор данных, создать значения прогнозирования для этого нового набора данных и соответствующие интервалы прогнозирования вокруг каждой из этих новых подогнанных точек.

Привлечение библиотек:

 library(purrr)
library(dplyr)
library(modelr)
 

Назначение data_1 в качестве набора данных DNase из R:

 data_1 <- DNase
 

Создание одной уникальной модели для каждого запуска:

 model_dna <- data_1 %>% group_by(Run) %>% 
  do(model_dna = lm(conc ~ density, data = .)) %>% ungroup()
 

Затем я хочу спрогнозировать набор точек с помощью нового набора данных, назовем его data_2, для каждой модели, а затем построить интервалы прогнозирования вокруг каждой подогнанной точки (верхняя и нижняя границы интервала прогнозирования для каждой точки, как показано функцией predict (), когда включен аргумент interval = «прогноз». Я успешно сгенерировал подходящие значения, подобные этому:

 data_2 <- map(model_dna$model_dna, ~ spread_predictions(data = data_2, models = .x) 
 

Но затем изо всех сил старайтесь добавить столбцы «upr» и «lwr» для этих вновь установленных значений. Есть ли способ, возможно, одновременно «spread_prediction_intervals» при установке этих новых точек? Было бы очень полезно понять, как это сделать для нескольких наборов данных, а также, если бы была задана модель, которая использовалась для генерации прогнозируемых значений, и набор этих прогнозируемых значений, чтобы затем получить границы upr и lwr интервала прогнозирования. Заранее большое вам спасибо за вашу помощь.

Ответ №1:

По-видимому, вы можете самостоятельно построить доверительные интервалы, используя результаты predict .

 data_2 <- map(model_dna$model_dna, function(x) {
  preds=predict(x, data_1, se.fit=TRUE)
  mutate(data_1, fit=preds$fit, lwr=fit-preds$se.fit*1.96, upr=fit preds$se.fit*1.96)
})
 

Если вас не волнуют доверительные интервалы, вы можете использовать map add_predictions или использовать spread_predictions для создания одного большого фрейма данных.

 
data_2 <- map(model_dna$model_dna, ~ add_predictions(data = data_1, model = .x))

data_2=spread_predictions(data_1, mods[[1]], mods[[2]], mods[[3]], mods[[4]], mods[[5]], mods[[6]], 
                          mods[[7]], mods[[8]], mods[[9]], mods[[10]], mods[[11]])