Проблема с добавлением модели (МАКСНЕТ) в пастернак, если в ней нет формулы
Проблема:
Всем привет, мне очень интересно научиться работать с parsnip
пакет, особенно добавление моих собственных моделей. Я пытаюсь работать с пакетом maxnet, это модель, которую я пытаюсь подражать с помощью Parsnip:
# load the package
library(maxnet)
# get the example dataset
data(bradypus)
# Subset presences
p <- bradypus$presence
# Get climatic variables
data <- bradypus[, -1]
# model the data
mod <- maxnet(p, data, regmult = 1, classes = "lq")
Создано 23.07.2020 с помощью пакета REPEX (v0.3.0)
Одна из проблем этой модели заключается в том, что она не использует традиционный подход с формулами, а использует вектор для переменной ответа и матрицу в качестве предикторов, полное представление находится в конце, включая информацию о сеансе.
Что я пробовал
Установка нового режима и зависимостей (должно быть хорошо)
Я попытался воспроизвести эту простую модель с помощью этой виньетки из пастернака о том, как добавить модель. Но поскольку это логистическая модель, я попытался добавить ее к этому методу, а не создавать новый.
поэтому я начал с добавления нового режима в модель logistic_regression и зависимости, я думаю, что все это в порядке:
library(tidymodels)
#> ── Attaching packages ──────────────────── tidymodels 0.1.1 ──
#> ✓ broom 0.7.0 ✓ recipes 0.1.13
#> ✓ dials 0.0.8 ✓ rsample 0.0.7
#> ✓ dplyr 1.0.0 ✓ tibble 3.0.3
#> ✓ ggplot2 3.3.2 ✓ tidyr 1.1.0
#> ✓ infer 0.5.3 ✓ tune 0.1.1
#> ✓ modeldata 0.0.2 ✓ workflows 0.1.2
#> ✓ parsnip 0.1.2 ✓ yardstick 0.0.7
#> ✓ purrr 0.3.4
#> ── Conflicts ─────────────────────── tidymodels_conflicts() ──
#> x purrr::discard() masks scales::discard()
#> x dplyr::filter() masks stats::filter()
#> x dplyr::lag() masks stats::lag()
#> x recipes::step() masks stats::step()
## Set new mode
set_model_mode(model = "logistic_reg", mode = "classification")
# Establish de model engines
set_model_engine(
"logistic_reg",
mode = "classification",
eng = "maxnet"
)
# Set package dependencies
set_dependency("logistic_reg", eng = "maxnet", pkg = "maxnet")
Создано 23.07.2020 с помощью пакета REPEX (v0.3.0)
Добавление аргументов (может быть неправильно)
Вот где я начинаю сомневаться, особенно в том, как добавить аргументы p и data:
# set arguments
set_model_arg(
model = "logistic_reg",
eng = "maxnet",
parsnip = "formula",
original = "f",
func = list(pkg = "maxnet", fun = "maxnet"),
has_submodel = FALSE
)
set_model_arg(
model = "logistic_reg",
eng = "maxnet",
parsnip = "penalty",
original = "regmult",
func = list(pkg = "maxnet", fun = "maxnet"),
has_submodel = FALSE
)
set_model_arg(
model = "logistic_reg",
eng = "maxnet",
parsnip = "presences",
original = "p",
func = list(pkg = "maxnet", fun = "maxnet"),
has_submodel = FALSE
)
set_model_arg(
model = "logistic_reg",
eng = "maxnet",
parsnip = "classes",
original = "classes",
func = list(pkg = "maxnet", fun = "maxnet"),
has_submodel = FALSE
)
set_model_arg(
model = "logistic_reg",
eng = "maxnet",
parsnip = "data",
original = "data",
func = list(pkg = "maxnet", fun = "maxnet"),
has_submodel = FALSE
)
Настройка подгонки
Здесь у меня больше сомнений в том, что я сделал лучший выбор, я хотел поставить значение по умолчанию в формулу, но значение по умолчанию определено для других аргументов, поэтому я не мог этого сделать:
## Set the model fit
set_fit(
model = "logistic_reg",
eng = "maxnet",
mode = "classification",
value = list(
interface = "data.frame",
protect = c("data.frame", "data"),
func = c(pkg = "maxnet", fun = "maxnet"),
defaults = list()
)
)
class_info <-
list(
pre = NULL,
post = NULL,
func = c(fun = "predict"),
args =
list(
object = quote(object$fit),
newdata = quote(new_data),
type = "cloglog"
)
)
Настройка прогноза
Установите прогнозы модели (я думаю, это должно быть хорошо)
set_pred(
model = "logistic_reg",
eng = "maxnet",
mode = "classification",
type = "raw",
value = class_info
)
И наконец запуск модели
## Specify the model
sdm_spec <- logistic_reg(penalty = 1) %>%
set_engine("maxnet")
# get the example dataset
data(bradypus)
# Subset presences
p <- bradypus$presence
# Get climatic variables
data <- bradypus[,-1]
## Fit the model
sdm_fit <- sdm_spec %>%
fit(p = p, data = bradypus, engine = "maxet", classes = "lq", formula = maxnet::maxnet.formula(p = p, data = data, classes = "lq))
Я получаю ошибку Error: These argument(s) cannot be used to create the data:
п,
двигатель,
классы. Possible arguments are:
подмножество,
веса,
контрасты,
смещение '', так что я предполагаю, что неправильно установил аргумент данных.
Любая помощь будет оценена
вот весь репрезент (включая информацию о сеансе):
library(tidymodels)
#> ── Attaching packages ──────────────────── tidymodels 0.1.1 ──
#> ✓ broom 0.7.0 ✓ recipes 0.1.13
#> ✓ dials 0.0.8 ✓ rsample 0.0.7
#> ✓ dplyr 1.0.0 ✓ tibble 3.0.3
#> ✓ ggplot2 3.3.2 ✓ tidyr 1.1.0
#> ✓ infer 0.5.3 ✓ tune 0.1.1
#> ✓ modeldata 0.0.2 ✓ workflows 0.1.2
#> ✓ parsnip 0.1.2 ✓ yardstick 0.0.7
#> ✓ purrr 0.3.4
#> ── Conflicts ─────────────────────── tidymodels_conflicts() ──
#> x purrr::discard() masks scales::discard()
#> x dplyr::filter() masks stats::filter()
#> x dplyr::lag() masks stats::lag()
#> x recipes::step() masks stats::step()
library(maxnet)
## Set new mode
set_model_mode(model = "logistic_reg", mode = "classification")
# Establish the model engines
set_model_engine(
"logistic_reg",
mode = "classification",
eng = "maxnet"
)
# Set package dependencies
set_dependency("logistic_reg", eng = "maxnet", pkg = "maxnet")
# set arguments
set_model_arg(
model = "logistic_reg",
eng = "maxnet",
parsnip = "formula",
original = "f",
func = list(pkg = "maxnet", fun = "maxnet"),
has_submodel = FALSE
)
set_model_arg(
model = "logistic_reg",
eng = "maxnet",
parsnip = "penalty",
original = "regmult",
func = list(pkg = "maxnet", fun = "maxnet"),
has_submodel = FALSE
)
set_model_arg(
model = "logistic_reg",
eng = "maxnet",
parsnip = "presences",
original = "p",
func = list(pkg = "maxnet", fun = "maxnet"),
has_submodel = FALSE
)
set_model_arg(
model = "logistic_reg",
eng = "maxnet",
parsnip = "classes",
original = "classes",
func = list(pkg = "maxnet", fun = "maxnet"),
has_submodel = FALSE
)
set_model_arg(
model = "logistic_reg",
eng = "maxnet",
parsnip = "data",
original = "data",
func = list(pkg = "maxnet", fun = "maxnet"),
has_submodel = FALSE
)
## Set the model fit
set_fit(
model = "logistic_reg",
eng = "maxnet",
mode = "classification",
value = list(
interface = "data.frame",
protect = c("data.frame", "data"),
func = c(pkg = "maxnet", fun = "maxnet"),
defaults = list()
)
)
class_info <-
list(
pre = NULL,
post = NULL,
func = c(fun = "predict"),
args =
list(
object = quote(object$fit),
newdata = quote(new_data),
type = "cloglog"
)
)
## Set the model predictions
set_pred(
model = "logistic_reg",
eng = "maxnet",
mode = "classification",
type = "raw",
value = class_info
)
## Specify the model
sdm_spec <- logistic_reg(penalty = 1) %>%
set_engine("maxnet")
# get the example dataset
data(bradypus)
# Subset presences
p <- bradypus$presence
# Get climatic variables
data <- bradypus[, -1]
## Fit the model
sdm_fit <- sdm_spec %>%
fit(p = p, data = bradypus, engine = "maxet", classes = "lq", formula = maxnet::maxnet.formula(p = p, data = data, classes = "lq"))
#> Error: These argument(s) cannot be used to create the data: `p`, `engine`, `classes`. Possible arguments are: `subset`, `weights`, `contrasts`, `offset`
Создано 23.07.2020 с помощью пакета REPEX (v0.3.0)
devtools::session_info()
#> ─ Session info ───────────────────────────────────────────────────────────────
#> setting value
#> version R version 3.6.3 (2020-02-29)
#> os Ubuntu 18.04.4 LTS
#> system x86_64, linux-gnu
#> ui X11
#> language (EN)
#> collate en_US.UTF-8
#> ctype en_US.UTF-8
#> tz America/Santiago
#> date 2020-07-23
#>
#> ─ Packages ───────────────────────────────────────────────────────────────────
#> package * version date lib source
#> assertthat 0.2.1 2019-03-21 [1] CRAN (R 3.6.2)
#> backports 1.1.8 2020-06-17 [1] CRAN (R 3.6.3)
#> broom * 0.7.0 2020-07-09 [1] CRAN (R 3.6.3)
#> callr 3.4.3 2020-03-28 [1] CRAN (R 3.6.3)
#> class 7.3-17 2020-04-26 [4] CRAN (R 3.6.3)
#> cli 2.0.2 2020-02-28 [1] CRAN (R 3.6.3)
#> codetools 0.2-16 2018-12-24 [4] CRAN (R 3.6.3)
#> colorspace 1.4-1 2019-03-18 [1] CRAN (R 3.6.2)
#> crayon 1.3.4 2017-09-16 [1] CRAN (R 3.6.2)
#> desc 1.2.0 2018-05-01 [1] CRAN (R 3.6.2)
#> devtools 2.3.1 2020-07-21 [1] CRAN (R 3.6.3)
#> dials * 0.0.8 2020-07-08 [1] CRAN (R 3.6.3)
#> DiceDesign 1.8-1 2019-07-31 [1] CRAN (R 3.6.3)
#> digest 0.6.25 2020-02-23 [1] CRAN (R 3.6.3)
#> dplyr * 1.0.0 2020-05-29 [1] CRAN (R 3.6.3)
#> ellipsis 0.3.1 2020-05-15 [1] CRAN (R 3.6.3)
#> evaluate 0.14 2019-05-28 [1] CRAN (R 3.6.2)
#> fansi 0.4.1 2020-01-08 [1] CRAN (R 3.6.2)
#> foreach 1.5.0 2020-03-30 [1] CRAN (R 3.6.3)
#> fs 1.4.2 2020-06-30 [1] CRAN (R 3.6.3)
#> furrr 0.1.0 2018-05-16 [1] CRAN (R 3.6.3)
#> future 1.18.0 2020-07-09 [1] CRAN (R 3.6.3)
#> generics 0.0.2 2018-11-29 [1] CRAN (R 3.6.2)
#> ggplot2 * 3.3.2 2020-06-19 [1] CRAN (R 3.6.3)
#> globals 0.12.5 2019-12-07 [1] CRAN (R 3.6.3)
#> glue 1.4.1 2020-05-13 [1] CRAN (R 3.6.3)
#> gower 0.2.1 2019-05-14 [1] CRAN (R 3.6.2)
#> GPfit 1.0-8 2019-02-08 [1] CRAN (R 3.6.3)
#> gtable 0.3.0 2019-03-25 [1] CRAN (R 3.6.2)
#> highr 0.8 2019-03-20 [1] CRAN (R 3.6.2)
#> htmltools 0.5.0 2020-06-16 [1] CRAN (R 3.6.3)
#> infer * 0.5.3 2020-07-14 [1] CRAN (R 3.6.3)
#> ipred 0.9-9 2019-04-28 [1] CRAN (R 3.6.2)
#> iterators 1.0.12 2019-07-26 [1] CRAN (R 3.6.2)
#> knitr 1.29 2020-06-23 [1] CRAN (R 3.6.3)
#> lattice 0.20-41 2020-04-02 [4] CRAN (R 3.6.3)
#> lava 1.6.7 2020-03-05 [1] CRAN (R 3.6.3)
#> lhs 1.0.2 2020-04-13 [1] CRAN (R 3.6.3)
#> lifecycle 0.2.0 2020-03-06 [1] CRAN (R 3.6.3)
#> listenv 0.8.0 2019-12-05 [1] CRAN (R 3.6.3)
#> lubridate 1.7.9 2020-06-08 [1] CRAN (R 3.6.3)
#> magrittr 1.5 2014-11-22 [1] CRAN (R 3.6.2)
#> MASS 7.3-51.6 2020-04-26 [4] CRAN (R 3.6.3)
#> Matrix 1.2-18 2019-11-27 [4] CRAN (R 3.6.1)
#> maxnet * 0.1.2 2020-06-03 [1] Github (mrmaxent/maxnet@08310a7)
#> memoise 1.1.0 2017-04-21 [1] CRAN (R 3.6.2)
#> modeldata * 0.0.2 2020-06-22 [1] CRAN (R 3.6.3)
#> munsell 0.5.0 2018-06-12 [1] CRAN (R 3.6.2)
#> nnet 7.3-14 2020-04-26 [4] CRAN (R 3.6.3)
#> parsnip * 0.1.2 2020-07-03 [1] CRAN (R 3.6.3)
#> pillar 1.4.6 2020-07-10 [1] CRAN (R 3.6.3)
#> pkgbuild 1.1.0 2020-07-13 [1] CRAN (R 3.6.3)
#> pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 3.6.2)
#> pkgload 1.1.0 2020-05-29 [1] CRAN (R 3.6.3)
#> plyr 1.8.6 2020-03-03 [1] CRAN (R 3.6.3)
#> prettyunits 1.1.1 2020-01-24 [1] CRAN (R 3.6.2)
#> pROC 1.16.2 2020-03-19 [1] CRAN (R 3.6.3)
#> processx 3.4.3 2020-07-05 [1] CRAN (R 3.6.3)
#> prodlim 2019.11.13 2019-11-17 [1] CRAN (R 3.6.2)
#> ps 1.3.3 2020-05-08 [1] CRAN (R 3.6.3)
#> purrr * 0.3.4 2020-04-17 [1] CRAN (R 3.6.3)
#> R6 2.4.1 2019-11-12 [1] CRAN (R 3.6.2)
#> Rcpp 1.0.5 2020-07-06 [1] CRAN (R 3.6.3)
#> recipes * 0.1.13 2020-06-23 [1] CRAN (R 3.6.3)
#> remotes 2.2.0 2020-07-21 [1] CRAN (R 3.6.3)
#> rlang 0.4.7 2020-07-09 [1] CRAN (R 3.6.3)
#> rmarkdown 2.3 2020-06-18 [1] CRAN (R 3.6.3)
#> rpart 4.1-15 2019-04-12 [4] CRAN (R 3.6.1)
#> rprojroot 1.3-2 2018-01-03 [1] CRAN (R 3.6.2)
#> rsample * 0.0.7 2020-06-04 [1] CRAN (R 3.6.3)
#> rstudioapi 0.11 2020-02-07 [1] CRAN (R 3.6.3)
#> scales * 1.1.1 2020-05-11 [1] CRAN (R 3.6.3)
#> sessioninfo 1.1.1 2018-11-05 [1] CRAN (R 3.6.2)
#> stringi 1.4.6 2020-02-17 [1] CRAN (R 3.6.3)
#> stringr 1.4.0 2019-02-10 [1] CRAN (R 3.6.2)
#> survival 3.1-12 2020-04-10 [4] CRAN (R 3.6.3)
#> testthat 2.3.2 2020-03-02 [1] CRAN (R 3.6.3)
#> tibble * 3.0.3 2020-07-10 [1] CRAN (R 3.6.3)
#> tidymodels * 0.1.1 2020-07-14 [1] CRAN (R 3.6.3)
#> tidyr * 1.1.0 2020-05-20 [1] CRAN (R 3.6.3)
#> tidyselect 1.1.0 2020-05-11 [1] CRAN (R 3.6.3)
#> timeDate 3043.102 2018-02-21 [1] CRAN (R 3.6.2)
#> tune * 0.1.1 2020-07-08 [1] CRAN (R 3.6.3)
#> usethis 1.6.1 2020-04-29 [1] CRAN (R 3.6.3)
#> vctrs 0.3.2 2020-07-15 [1] CRAN (R 3.6.3)
#> withr 2.2.0 2020-04-20 [1] CRAN (R 3.6.3)
#> workflows * 0.1.2 2020-07-07 [1] CRAN (R 3.6.3)
#> xfun 0.15 2020-06-21 [1] CRAN (R 3.6.3)
#> yaml 2.2.1 2020-02-01 [1] CRAN (R 3.6.2)
#> yardstick * 0.0.7 2020-07-13 [1] CRAN (R 3.6.3)
#>
#> [1] /home/derek/R/x86_64-pc-linux-gnu-library/3.6
#> [2] /usr/local/lib/R/site-library
#> [3] /usr/lib/R/site-library
#> [4] /usr/lib/R/library