Skip to content
This repository has been archived by the owner on Feb 9, 2024. It is now read-only.

Support quantile regression via compute_model_predictions #290

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 31 additions & 1 deletion R/compute_model_prediction.R
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
#' returning predictions with \code{\link{predict}}. If not supplied, will use
#' \code{\link{loess}} for <= 1000 points, otherwise it will use
#' \code{\link[mgcv]{gam}}. Other modelling functions that will work include
#' \code{\link{lm}}, \code{\link{glm}} and \code{\link[MASS]{rlm}}.
#' \code{\link{lm}}, \code{\link{glm}}, \code{\link[quantreg]{rq}}, and \code{\link[MASS]{rlm}}.
#' @param formula Formula passed to modelling function. Can use any variables
#' from data.
#' @param se include standard errors in output? Requires appropriate method of
Expand Down Expand Up @@ -237,6 +237,36 @@ pred_grid.lm <- function(model, data, domain = NULL, n = 80, se = FALSE,
}
}

#' @export
pred_grid.rq <- function(model, data, domain = NULL, n = 80, se = FALSE,
level = 0.95) {
x_var <- get_predict_vars(terms(model))
if (length(x_var) > 1) {
stop("Only know how to make grid for one variable", call. = FALSE)
}

x_rng <- domain %||% range(data[[x_var]], na.rm = TRUE)
x_grid <- seq(x_rng[1], x_rng[2], length = n)
grid <- setNames(data.frame(x_grid), x_var)

# Much like `pred_grid.lm` but *do not* pass `se` to `predict.rq` here
resp <- predict(model, newdata = grid,
level = level, interval = if(se) "confidence" else "none")

if (!se) {
data.frame(
pred_ = x_grid,
resp_ = as.vector(resp)
)
} else {
data.frame(
pred_ = x_grid,
resp_ = resp[, "fit"],
resp_lwr_ = resp[, "lower"],
resp_upr_ = resp[, "higher"]
)
}
}

# Given a formula object, return a character vector of predictor variables
get_predict_vars <- function(f) {
Expand Down