多项式 (nnet) 不适用于防风草和扫帚

Multinomial (nnet) does not work using parsnip and broom

我正在尝试使用 tidymodel 运行 多项式 (nnet),但它显​​示了下一个结果:

错误:'closure' 类型的对象不是子集

data(iris)
ml<-multinom_reg() %>% 
  set_engine("nnet") %>% 
  set_mode("classification") %>% 
  translate()
ml_fit <- ml %>% 
  fit(Species ~ Sepal.Width, data=iris) 
broom::tidy(ml_fit, exponentiate = F)

但是当我 运行 ... 完美运行时

formula <- Species ~ Sepal.Width
model <- nnet::multinom(formula, data = iris)
broom::tidy(model, exponentiate = F)

知道我写的是整洁模型还是其他东西吗?

在 tidymodels 中,我们处理事情的方式是原始数据和公式不包含在结果调用中(以通常的方式)。 multinom() 的某些部分需要那些(加上同一位置的实际数据)进行计算。

我们只是 changed 我们如何处理公式;现在,如果您直接调用 multinom(),它就会通过。我们不能对 data 做同样的事情,但我们确实添加了一个名为 repair_call() 的新函数,您可以使用它来按照您想要的方式制作东西。

# devtools::install_dev("parsnip")
library(parsnip)
library(broom)
multi_spec <- multinom_reg() %>% 
  set_engine("nnet") %>% 
  set_mode("classification")
multi_fit <- multi_spec %>% 
  fit(Species ~ Sepal.Width, data = iris) 
tidy(multi_fit)
#> Error in as.data.frame.default(data, optional = TRUE): cannot coerce class '"function"' to a data.frame


multi_fit_new <- repair_call(multi_fit, iris)
tidy(multi_fit_new)
#> # A tibble: 4 x 6
#>   y.level    term        estimate std.error statistic  p.value
#>   <chr>      <chr>          <dbl>     <dbl>     <dbl>    <dbl>
#> 1 versicolor (Intercept)  1.55e+8     3.06       6.15 7.54e-10
#> 2 versicolor Sepal.Width  2.20e-3     0.991     -6.17 6.70e-10
#> 3 virginica  (Intercept)  4.41e+5     2.69       4.83 1.33e- 6
#> 4 virginica  Sepal.Width  1.69e-2     0.844     -4.84 1.33e- 6

reprex package (v0.3.0)

于 2020-05-22 创建