问题描述
我正在尝试使用 tidymodels 在 R 中运行多项逻辑回归,但我无法将结果转换为 tidy 对象。这是一个使用 iris 数据集的示例。
# Multinomial -----------------------------------------------------------------
# recipe
multinom_recipe <-
recipe(Species ~ Sepal.Length + Sepal.Width + Sepal.Length + Petal.Width,data = iris) %>%
step_relevel(Species,ref_level = "setosa")
# model
multinom_model <- multinom_reg() %>%
set_engine("nnet")
# make workflow
multinom_wf <-
workflow() %>%
add_model(multinom_model) %>%
add_recipe(multinom_recipe) %>%
fit(data = iris) %>%
tidy()
multinom_wf
最后一步抛出以下错误:
Error in eval(predvars,data,env) : object '..y' not found
我以为是 bc fit(data = iris)
的输出是一个工作流对象,但是当我不使用 workflow
(这是使用 {{ 1}}) 或者我是否适合线性模型。
tidymodels
解决方法
这可能与 call
发生冲突。我们可以把它改成
multinom_wf$fit$fit$fit$call <- quote(nnet::multinom(formula = Species ~ .,data = iris,trace = FALSE))
multinom_wf %>%
tidy
-输出
# A tibble: 8 x 6
y.level term estimate std.error statistic p.value
<chr> <chr> <dbl> <dbl> <dbl> <dbl>
1 versicolor (Intercept) 4.17 12.0 0.348 0.728
2 versicolor Sepal.Length 1.08 42.0 0.0258 0.979
3 versicolor Sepal.Width -9.13 81.5 -0.112 0.911
4 versicolor Petal.Width 20.9 14.0 1.49 0.136
5 virginica (Intercept) -16.0 12.1 -1.33 0.185
6 virginica Sepal.Length 2.37 42.0 0.0563 0.955
7 virginica Sepal.Width -13.9 81.5 -0.171 0.864
8 virginica Petal.Width 36.8 14.1 2.61 0.00916
哪里
multinom_wf <-
workflow() %>%
add_model(multinom_model) %>%
add_recipe(multinom_recipe) %>%
fit(data = iris)
,
我们在欧洲防风草中有一个函数 repair_call()
来修复那些不符合“典型”规范的包的调用对象;阅读more about it here。
library(tidymodels)
#> Registered S3 method overwritten by 'tune':
#> method from
#> required_pkgs.model_spec parsnip
multinom_model <- multinom_reg() %>%
set_engine("nnet")
nnet_fit <-
multinom_model %>%
fit(Species ~ Sepal.Length + Sepal.Width + Sepal.Length + Petal.Width,data = iris)
tidy(nnet_fit)
#> Error in model.frame.default(formula = Species ~ Sepal.Length + Sepal.Width + : 'data' must be a data.frame,environment,or list
nnet_fixed <- repair_call(nnet_fit,data = iris)
tidy(nnet_fixed)
#> # A tibble: 8 × 6
#> y.level term estimate std.error statistic p.value
#> <chr> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 versicolor (Intercept) 4.17 260. 0.0160 0.987
#> 2 versicolor Sepal.Length 1.08 64.8 0.0167 0.987
#> 3 versicolor Sepal.Width -9.13 80.4 -0.114 0.910
#> 4 versicolor Petal.Width 20.9 98.1 0.213 0.831
#> 5 virginica (Intercept) -16.0 261. -0.0616 0.951
#> 6 virginica Sepal.Length 2.37 64.8 0.0365 0.971
#> 7 virginica Sepal.Width -13.9 80.4 -0.173 0.862
#> 8 virginica Petal.Width 36.8 98.2 0.375 0.708
由 reprex package (v2.0.0) 于 2021 年 8 月 1 日创建