0

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

错误:“闭包”类型的对象不是子集

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)

知道我是否正确地编写了整洁的模型还是其他东西?

4

1 回答 1

1

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

我们只是改变了处理公式的方式;现在可以通过,如果您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 包于 2020-05-22 创建(v0.3.0)

于 2020-05-22T20:04:53.403 回答