在带有偏移项的glm上使用扫帚(增强)和modelr(crossv_kfold)时出错

在带有偏移项的glm上使用扫帚(增强)和modelr(crossv_kfold)时出错,r,offset,glm,broom,modelr,R,Offset,Glm,Broom,Modelr,我试图使用modelr的crossv_kfold在k倍交叉验证数据集上拟合泊松回归模型,然后使用broom的增强函数进行预测。在我建模的数据中,我试图预测一个计数,但它需要被曝光变量抵消。为了再现性,我加入了一个扩展数据集来说明 library(tidyverse) library(modelr) non_breaks = rpois(dim(warpbreaks)[1],20) warp = warpbreaks %>% mutate(total = breaks + non_b

我试图使用modelr的crossv_kfold在k倍交叉验证数据集上拟合泊松回归模型,然后使用broom的增强函数进行预测。在我建模的数据中,我试图预测一个计数,但它需要被曝光变量抵消。为了再现性,我加入了一个扩展数据集来说明

library(tidyverse)
library(modelr)
non_breaks = rpois(dim(warpbreaks)[1],20)
warp = warpbreaks %>%
    mutate(total = breaks + non_breaks)
因此,在这个例子中,我将对给定分类变量的中断次数进行建模,并通过曝光总数进行偏移。我发现,如果我的模型中不包含补偿项,那么一切都会非常好:

library(broom)
warp_no_offset = crossv_kfold(warp, k = 10) %>%
    mutate(model = map(train, ~ glm(breaks~ wool*tension, ., family=poisson))) %>%
    mutate(predicted = map2(model, test, ~ augment(.x, newdata = .y, predict.type= "response")))
但如果我包括一个抵消术语:

warp_offset = crossv_kfold(warp, k = 10) %>%
    mutate(model = map(train, ~ glm(breaks~ offset(log(total)) + wool*tension, ., family=poisson))) %>%
    mutate(predicted = map2(model, test, ~ augment(.x, newdata = .y, predict.type= "response")))
它抛出错误:

Error in mutate_impl(.data, dots) : 
    Evaluation error: arguments imply differing number of rows: 5, 49.

问题在于,
offset()。我知道这是多么棘手,但解决办法很简单

您只需要记住使用
I()
进行方程内部的变换

例如:

warp_offset = crossv_kfold(warp, k = 10) %>%
  mutate(model = map(train, ~ glm(breaks~ I(offset(log(total))) + wool*tension, ., family=poisson))) %>%
  mutate(predicted = map2(model, test, ~ augment(.x, newdata = .y, predict.type= "response")))

将不会抛出错误并产生所需的结果。

这很有效,谢谢。我不知道方程变换需要
I()