查找grouped_by的线性模型的预测 [英] Find predictions for linear model that is grouped_by

查看:73
本文介绍了查找grouped_by的线性模型的预测的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想基于适合训练数据集的模型来获取预测值。我以前已经做过,但是现在我有了一个分组因子,这使我不满意。我想根据每种环境的种群预测生物量。

I would like to get predicted values based on a model I fit to a training set of data. I have done this before, but now I have a grouping factor and it is throwing me off. I want to predict biomass based on population for each environment.

library(tidyverse)

fit_mods<-df %>%
  group_by(environ) %>%
  do(model = lm(biomass ~ poly(population, 2), data = .))

最终,我将要找出哪个种群的生物量最大。通常,我会通过创建一个网格并在新值上运行模型并找到最大值来做到这一点,但是我对如何使用分组方法一无所知。常用方法:

Ultimately, I will want to find at which population biomass is the greatest. Usually I would do this by creating a grid and running the model on my new values and finding the max value, but I'm blanking on how to do this with the grouping. Usual way:

min_pop <- min(df$population)
max_pop <- max(df$population)

grid_pop <- expand.grid(new = (seq(from = min_pop,
                                   to = max_pop, 
                                   length.out = 1000)),
                        environ = c("A", "B"))  

 #This is what I did with ungrouped data, but doesn't work now.
 pred_pop <- predict(object = fit_mods, 
                newdata = grid_pop,
                interval = "predict")  

以下是一些虚拟数据:

  df <- as.data.frame(list(environ = c("a", "a", "a", "a", "a", "b", "b", "b", "b", "b"),
   population = c(2, 3, 4, 5, 6, 3, 4, 5, 6, 7), 
   biomass = c(1, 2.2, 3.5, 4.1, 3.8, 2.5, 3.6, 4.3, 5.2, 5.1)), class = "data.frame")


推荐答案

整理许多模型方法中,您可以执行以下操作方式:

In a tidyverse many models approach you could do it the following way:

library(tidyverse)

   fit_mods <- df %>%
     nest(-environ) %>% 
     mutate(models = map(data, ~ lm(biomass ~ poly(population, 2), data = .x)),
         min_pop = map_dbl(data, ~ pull(.x, population) %>% min),
         max_pop = map_dbl(data, ~ pull(.x, population) %>% max),
         new = map2(min_pop, max_pop, ~ tibble(population = seq(from = .x,
                                                to = .y, 
                                                length.out = 1000))),
         pred = map2(models,
                     new,
                     ~ predict(object = .x,
                               newdata = select(.y,population),
                               interval = "predict")))

这篇关于查找grouped_by的线性模型的预测的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆