#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]])