我的問題與this one類似,但現在我試圖使用一個有多個預測變量的模型,並且我無法弄清楚如何將新數據導入預測函數。使用purrr map2函數的線性模型中的多個預測變量
library(dplyr)
library(lubridate)
library(purrr)
library(tidyr)
library(broom)
set.seed(1234)
首先我創建星期的以次
wks = seq(as.Date("2010-01-01"), Sys.Date(), by="1 week")
然後我抓住本年度
cur_year <- year(Sys.Date())
在這裏,我創建虛擬數據
my_data <- data.frame(
week_ending = wks
) %>%
mutate(
ref_period = week(week_ending),
yr = year(week_ending),
PCT.EXCELLENT = round(runif(length(wks), 0, 100),0),
PCT.GOOD = round(runif(length(wks), 0, 100),0),
PCT.FAIR = round(runif(length(wks), 0, 100),0),
PCT.POOR = round(runif(length(wks), 0, 100),0),
PCT.VERY.POOR = round(runif(length(wks), 0, 100),0),
pct_trend = round(runif(length(wks), 75, 125),0)
)
數據幀接下來我創建一個嵌套的數據框一年中每週的數據爲一組。
cond_model <- my_data %>%
filter(yr != cur_year) %>%
group_by(ref_period) %>%
nest(.key=cond_data)
在這裏,我把今年的數據加入到前一年的數據中。
cond_model <- left_join(
cond_model,
my_data %>%
filter(yr==cur_year) %>%
select(week_ending,
ref_period,
PCT.EXCELLENT,
PCT.FAIR,
PCT.GOOD,
PCT.POOR,
PCT.VERY.POOR),
by = c("ref_period")
)
,這增加了數據幀中的線性模型全年
cond_model <-
cond_model %>%
mutate(model = map(cond_data,
~lm(pct_trend ~ PCT.EXCELLENT + PCT.GOOD + PCT.FAIR + PCT.POOR + PCT.VERY.POOR, data = .x)))
現在我想用型號爲每星期使用今年的數據來預測每星期。我試過如下:
cond_model <-
cond_model %>%
mutate(
pred_pct_trend = map2_dbl(model, PCT.EXCELLENT + PCT.GOOD + PCT.FAIR + PCT.POOR + PCT.VERY.POOR,
~predict(.x, newdata = data.frame(.y)))
)
這提供了以下錯誤:
Error in mutate_impl(.data, dots) : object 'PCT.EXCELLENT' not found
然後我試着築巢我預測在我的數據幀...
創建一個數據幀就在今年的數據並嵌套預測變量
cur_cond <- my_data %>%
filter(yr==cur_year) %>%
select(week_ending, PCT.EXCELLENT,
PCT.GOOD, PCT.FAIR, PCT.POOR, PCT.VERY.POOR) %>%
group_by(week_ending) %>%
nest(.key=new_data) %>%
mutate(new_data=map(new_data, ~data.frame(.x)))
將此加入我的主數據框中
cond_model <- left_join(cond_model, cur_cond)
現在我再次嘗試預測:
cond_model <-
cond_model %>%
mutate(
pred_pct_trend = map2_dbl(model, new_data,
~predict(.x, newdata = data.frame(.y)))
)
我得到了相同的錯誤面前:
Error in mutate_impl(.data, dots) : object 'PCT.EXCELLENT' not found
我認爲,答案可能涉及在執行扁平化()預測,但我無法弄清楚我的工作流程中發生了什麼。
cond_model$new_data[1]
與
flatten_df(cond_model$new_data[1])
,並在這一點上我已經江郎才盡。
第31-52周沒有來自2017年的數據。您希望您的預測在這幾周看起來像什麼?如果擺脫這些行,則使用預測數據集嵌套的第二種方法應該可以正常工作。 – aosmith
周31-52應該是NA,因爲我還沒有預測。在前面提到的問題中,我引用了我最真實的工作流程中的相同情況,並且對沒有預測因素的幾周的預測只返回了NA。 – jkgrain
我試圖過濾掉第31-52行,我仍然有同樣的錯誤。 – jkgrain