簡體   English   中英

對新數據使用預測功能以及 tidyverse

[英]Using predict function for new data along with tidyverse

我想將predict函數與tidyverse一起用於新數據,如下例所示。 但是,我無法弄清楚如何使用 wt = 4.0 和 4.2 的新數據。 任何提示,請。

library(tidyverse)    
  mtcars %>%
    dplyr::mutate(cyl1 = factor(cyl)) %>%
    tidyr::nest(-cyl) %>%
    dplyr::mutate(m1  = purrr::map(.x = data, .f = ~ lm(mpg ~ wt, data = .))) %>%
    mutate(Pred = purrr::map(.x = m1, .f = predict)) %>%
    dplyr::pull(Pred)

這是一個關於如何按組擬合多個模型並從中獲得預測的示例。

定義要預測的數據:

newdat <- data.frame(wt = c(4,4.2))
library(tidyverse)  
mtcars %>%
  group_by(cyl) %>% #group by cyl
  nest %>% #nest groups
  mutate(m1  = purrr::map(.x = data, .f = ~ lm(mpg ~ wt, data = .))) %>% #create models
  mutate(Pred = purrr::map(.x = m1, ~ predict(., newdat))) %>% #predict on new data
  pull(Pred) #pull predictions
#output
[[1]]
       1        2 
17.28842 16.73240 

[[2]]
       1        2 
16.98309 15.85369 

[[3]]
       1        2 
15.09828 14.65979 

或稍作修改:

mtcars %>%
  group_by(cyl) %>%
  nest %>%
  mutate(m1  = purrr::map(.x = data, .f = ~ lm(mpg ~ wt, data = .))) %>%
  mutate(Pred = purrr::map(.x = m1, ~ predict(., newdat))) %>%
  select(cyl, Pred) %>%
  unnest #one can add %>% cbind(newdat = newdat) to know for which wt the pred is for

#output
# A tibble: 6 x 2
    cyl  Pred
  <dbl> <dbl>
1  6.00  17.3
2  6.00  16.7
3  4.00  17.0
4  4.00  15.9
5  8.00  15.1
6  8.00  14.7

編輯評論中的問題

為了獲得標准誤差,我認為最簡單的方法是為 predict 定義一個自定義函數,它將返回fitse.fit的數據框:

pred <- function(x,  ...){
  z <- predict.lm(x, se.fit = TRUE, ...)
  as.data.frame(z[1:2])
}

mtcars %>%
  mutate(cyl1 = factor(cyl)) %>%
  group_by(cyl) %>%
  nest %>%
  mutate(m1  = purrr::map(.x = data, .f = ~ lm(mpg ~ wt, data = .))) %>%
  mutate(Pred = purrr::map(.x = m1, ~ pred(., newdat = newdat))) %>%
  select(cyl, Pred) %>%
  unnest %>%
  cbind(newdat = newdat)
#output
  cyl      fit    se.fit  wt
1   6 17.28842 1.2581400 4.0
2   6 16.73240 1.5111249 4.2
3   4 16.98309 3.3269446 4.0
4   4 15.85369 3.6813880 4.2
5   8 15.09828 0.5409614 4.0
6   8 14.65979 0.5609545 4.2

如果您遵循該代碼,

  group_by(cyl) %>%
  nest %>%
  mutate(m1  = purrr::map(.x = data, .f = ~ lm(mpg ~ wt, data = .)))%>%
  mutate(Pred = purrr::map(.x = m1, ~ predict(., mtcars,interval="prediction"))))

最后一列 Pred 是一個索引列表 [32 x 3] 似乎為每個 cyl 組生成的 lm 以交互方式應用於每個 cyl(即 cyl 4 的 m1 應用於 cyl 6,4 和 8。如何您是否讓為 cyl 6 生成的 lm 僅適用於(例如)僅 cyl 6 的較長數據集

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM