13
13
# ' "rq" and "grf" are supported.
14
14
# ' @param quantile_levels A scalar or vector of values in (0, 1) to determine which
15
15
# ' quantiles to estimate (default is 0.5).
16
+ # ' @param method A fitting method used by [quantreg::rq()]. See the
17
+ # ' documentation for a list of options.
16
18
# '
17
19
# ' @export
18
20
# '
25
27
# ' rq_spec <- quantile_reg(quantile_levels = c(.2, .8)) %>% set_engine("rq")
26
28
# ' ff <- rq_spec %>% fit(y ~ ., data = tib)
27
29
# ' predict(ff, new_data = tib)
28
- quantile_reg <- function (mode = " regression" , engine = " rq" , quantile_levels = 0.5 ) {
30
+ quantile_reg <- function (mode = " regression" , engine = " rq" , quantile_levels = 0.5 , method = " br " ) {
29
31
# Check for correct mode
30
32
if (mode != " regression" ) {
31
33
cli_abort(" `mode` must be 'regression'" )
@@ -38,7 +40,7 @@ quantile_reg <- function(mode = "regression", engine = "rq", quantile_levels = 0
38
40
cli :: cli_warn(" Sorting `quantile_levels` to increasing order." )
39
41
quantile_levels <- sort(quantile_levels )
40
42
}
41
- args <- list (quantile_levels = rlang :: enquo(quantile_levels ))
43
+ args <- list (quantile_levels = rlang :: enquo(quantile_levels ), method = rlang :: enquo( method ) )
42
44
43
45
# Save some empty slots for future parts of the specification
44
46
parsnip :: new_model_spec(
@@ -57,9 +59,6 @@ make_quantile_reg <- function() {
57
59
parsnip :: set_new_model(" quantile_reg" )
58
60
}
59
61
parsnip :: set_model_mode(" quantile_reg" , " regression" )
60
-
61
-
62
-
63
62
parsnip :: set_model_engine(" quantile_reg" , " regression" , eng = " rq" )
64
63
parsnip :: set_dependency(" quantile_reg" , eng = " rq" , pkg = " quantreg" )
65
64
@@ -71,6 +70,14 @@ make_quantile_reg <- function() {
71
70
func = list (pkg = " quantreg" , fun = " rq" ),
72
71
has_submodel = FALSE
73
72
)
73
+ parsnip :: set_model_arg(
74
+ model = " quantile_reg" ,
75
+ eng = " rq" ,
76
+ parsnip = " method" ,
77
+ original = " method" ,
78
+ func = list (pkg = " quantreg" , fun = " rq" ),
79
+ has_submodel = FALSE
80
+ )
74
81
75
82
parsnip :: set_fit(
76
83
model = " quantile_reg" ,
@@ -81,7 +88,6 @@ make_quantile_reg <- function() {
81
88
protect = c(" formula" , " data" , " weights" ),
82
89
func = c(pkg = " quantreg" , fun = " rq" ),
83
90
defaults = list (
84
- method = " br" ,
85
91
na.action = rlang :: expr(stats :: na.omit ),
86
92
model = FALSE
87
93
)
@@ -104,7 +110,6 @@ make_quantile_reg <- function() {
104
110
object <- parsnip :: extract_fit_engine(object )
105
111
type <- class(object )[1 ]
106
112
107
-
108
113
# can't make a method because object is second
109
114
out <- switch (type ,
110
115
rq = dist_quantiles(unname(as.list(x )), object $ quantile_levels ), # one quantile
@@ -120,7 +125,6 @@ make_quantile_reg <- function() {
120
125
return (dplyr :: tibble(.pred = out ))
121
126
}
122
127
123
-
124
128
parsnip :: set_pred(
125
129
model = " quantile_reg" ,
126
130
eng = " rq" ,
0 commit comments