使用purrr从不同的数据框中选择并应用正确的模型

问题描述 投票:1回答:1

在我的数据中,我已经将50多种不同化合物的数据(饮食和肝脏)(在此简化)。

Sigma <- matrix(.7, nrow=6, ncol=6) + diag(6)*.3
vars_tr <- data.frame(mvrnorm(n=10, mu=c(2:7), Sigma=Sigma))

tr<-tibble(
  compound=c(rep("A", 10), rep("B", 10), rep("C",10)),
  diet=c(vars_tr$X1, vars_tr$X2, vars_tr$X3),
  liver=c(vars_tr$X4, vars_tr$X5, vars_tr$X6))

按照关于对多个模型进行回归的指导,我创建了一个嵌套的数据框并存储了输出(本周学习此方法是一个救命稻草!]

model<-function(df){lm(data=df, liver~diet)}

mods<- tr %>%
  group_by(compound) %>%
  nest() %>%
  mutate(model=map(data, model))

现在,我有不存在“肝脏”数据的新“饮食”数据。

new<-tibble(
  compound=c(rep("A", 10), rep("B", 10), rep("C",10)),
  diet=c(rnorm(10, 4), rnorm(10, 5), rnorm(10,6)))

我想做的是利用Purrr使用正确的化合物模型为每种饮食浓度生成肝脏浓度。我最大的尝试是:

preds<-function(c, x){    
  add_predictions(tibble(diet=x), filter(mods, compound==c)$model[[1]], 'liver')$liver
}

new%>%
  mutate(liver=map2(compound, diet, preds))

返回错误。

非常感谢您的帮助!

r purrr modelr
1个回答
0
投票

您可以创建预测功能:

preds<-function(data, mod){   
   modelr::add_predictions(data, mod)$liver
}

嵌套每个compound的数据帧,与mods合并,并为每组数据应用各自的模型。

library(dplyr)
new %>%
   tidyr::nest(data = diet) %>%
   left_join(mods, by = 'compound') %>%
   mutate(liver = purrr::map2(data.y, model, preds))
© www.soinside.com 2019 - 2024. All rights reserved.