繁体   English   中英

仅在 dplyr 过程中,glm 后不工作步骤功能

[英]Doesn’t work step function after glm only in dplyr procedure

我正在尝试使用 dplyr 运行逐步回归,但它导致以下错误:

Error in as.data.frame.default(data) : cannot coerce class ‘c("glm", "lm")’ to a data.frame

glm 运行良好,但是当代码尝试将步骤的结果保存到数据帧时,就会发生错误。

我检查了函数 glm 和函数 step 的类与“c(glm,lm)”相同。 但只有步进功能不起作用。

我尝试了几种方法来修复此错误,例如 do 语句、map2(将数据传递给数据参数)但没有任何效果。

更详细..当我运行此代码时:

...
  group_by(ITEM_CODE) %>%
  nest() %>%
  mutate(model = map(data, ~ glm(formula_full,family=gaussian(),na.action=na.omit,data=.x))
         ) %>%
  ungroup()

结果如下.. 这里,glm 返回 c("glm", "lm")

> M_CODE     data       model 
> 0034019   <tibble>    <S3: glm>       
> 0040726   <tibble>    <S3: glm>           
> 0057446   <tibble>    <S3: glm>

我正在尝试在第 4 列(下一个模型列)添加“步骤”结果。

但是当我尝试运行下一个代码时(添加 stepm 变量)

第二个代码:

  group_by(ITEM_CODE) %>%
  nest() %>%
  mutate(model = map(data, ~ glm(formula_full,family=gaussian(),na.action=na.omit,data=.x))
        ,stepm = map(model, ~ step(.x, direction = "both", trace = 0)) # <-- Error point!
         ) %>%
  ungroup()

然后发生我最初提到的错误。

实际上, class(model) = class(stepm) = c("glm", "lm") 但只有 stepm 不接受并丢弃错误..

所以,我很困惑..有没有人知道这个问题..?

提前谢谢你

今天遇到这个问题,背后的原因是我给待拟合的模型与现有的数据框同名,所以这个变量的类是混合的。 解决方案非常简单,只需更改模型的名称以避免命名重叠,就可以了。

我也对这个错误的原因感到困惑,但我从这里得到了一个线索并尝试将glm包装在do.call

library(tidyverse)
set.seed(101)
model_df <- tibble(label=c("a", "b", "c"),
model_data = list(tibble(y=rbinom(100,size=1,prob=0.5),
                x1=rnorm(100),
                x2=rnorm(100),
                x3=rnorm(100),
                x4=rnorm(100)),
         tibble(y=rbinom(100,size=1,prob=0.5),
                x1=rnorm(100),
                x2=rnorm(100),
                x3=rnorm(100),
                x4=rnorm(100)),
         tibble(y=rbinom(100,size=1,prob=0.5),
                x1=rnorm(100),
                x2=rnorm(100),
                x3=rnorm(100),
                x4=rnorm(100))))
model_df <- model_df %>%
    mutate(model = map(model_data, ~ do.call("glm", list(y ~ x1 + x2 + x3 + x4,
                       family = gaussian(),
                       na.action=na.omit,
                       data = .x)))) %>%
    mutate(stepm = map(model, ~ step(.x, direction = "both", scope=list(lower=.~1, upper=formula(.x)),
                                     trace = 0)))
model_df$stepm[[1]]
#> 
#> Call:  glm(formula = y ~ 1, family = structure(list(family = "gaussian", 
#>     link = "identity", linkfun = function (mu) 
...
#> 
#> Coefficients:
#> (Intercept)  
#>        0.54  
#> 
#> Degrees of Freedom: 99 Total (i.e. Null);  99 Residual
#> Null Deviance:       24.84 
#> Residual Deviance: 24.84     AIC: 148.5

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM