Title: | D-Vine Quantile Regression |
---|---|
Description: | Implements D-vine quantile regression models with parametric or nonparametric pair-copulas. See Kraus and Czado (2017) <doi:10.1016/j.csda.2016.12.009> and Schallhorn et al. (2017) <arXiv:1705.08310>. |
Authors: | Thomas Nagler [aut, cre], Dani Kraus [ctb] |
Maintainer: | Thomas Nagler <[email protected]> |
License: | GPL-3 |
Version: | 0.10.0 |
Built: | 2024-11-05 04:46:13 UTC |
Source: | https://github.com/tnagler/vinereg |
Calculates the conditional log-likelihood of the response given the covariates.
cll(object, newdata, cores = 1)
cll(object, newdata, cores = 1)
object |
an object of class |
newdata |
matrix of response and covariate values for which to compute the conditional distribution. |
cores |
integer; the number of cores to use for computations. |
# simulate data x <- matrix(rnorm(200), 100, 2) y <- x %*% c(1, -2) dat <- data.frame(y = y, x = x, z = as.factor(rbinom(100, 2, 0.5))) # fit vine regression model fit <- vinereg(y ~ ., dat) cll(fit, dat) fit$stats$cll
# simulate data x <- matrix(rnorm(200), 100, 2) y <- x %*% c(1, -2) dat <- data.frame(y = y, x = x, z = as.factor(rbinom(100, 2, 0.5))) # fit vine regression model fit <- vinereg(y ~ ., dat) cll(fit, dat) fit$stats$cll
Calculates the conditional density of the response given the covariates.
cpdf(object, newdata, cores = 1)
cpdf(object, newdata, cores = 1)
object |
an object of class |
newdata |
matrix of response and covariate values for which to compute the conditional density |
cores |
integer; the number of cores to use for computations. |
# simulate data x <- matrix(rnorm(200), 100, 2) y <- x %*% c(1, -2) dat <- data.frame(y = y, x = x, z = as.factor(rbinom(100, 2, 0.5))) # fit vine regression model fit <- vinereg(y ~ ., dat) cpdf(fit, dat)
# simulate data x <- matrix(rnorm(200), 100, 2) y <- x %*% c(1, -2) dat <- data.frame(y = y, x = x, z = as.factor(rbinom(100, 2, 0.5))) # fit vine regression model fit <- vinereg(y ~ ., dat) cpdf(fit, dat)
Calculates the conditional distribution of the response given the covariates.
cpit(object, newdata, cores = 1)
cpit(object, newdata, cores = 1)
object |
an object of class |
newdata |
matrix of response and covariate values for which to compute the conditional distribution. |
cores |
integer; the number of cores to use for computations. |
# simulate data x <- matrix(rnorm(200), 100, 2) y <- x %*% c(1, -2) dat <- data.frame(y = y, x = x, z = as.factor(rbinom(100, 2, 0.5))) # fit vine regression model fit <- vinereg(y ~ ., dat) hist(cpit(fit, dat)) # should be approximately uniform
# simulate data x <- matrix(rnorm(200), 100, 2) y <- x %*% c(1, -2) dat <- data.frame(y = y, x = x, z = as.factor(rbinom(100, 2, 0.5))) # fit vine regression model fit <- vinereg(y ~ ., dat) hist(cpit(fit, dat)) # should be approximately uniform
The marginal effects of a variable is the expected effect, where expectation is meant with respect to all other variables.
plot_effects(object, alpha = c(0.1, 0.5, 0.9), vars = object$order)
plot_effects(object, alpha = c(0.1, 0.5, 0.9), vars = object$order)
object |
a |
alpha |
vector of quantile levels. |
vars |
vector of variable names. |
# simulate data x <- matrix(rnorm(200), 100, 2) y <- x %*% c(1, -2) dat <- data.frame(y = y, x = x, z = as.factor(rbinom(100, 2, 0.5))) # fit vine regression model fit <- vinereg(y ~ ., dat) plot_effects(fit)
# simulate data x <- matrix(rnorm(200), 100, 2) y <- x %*% c(1, -2) dat <- data.frame(y = y, x = x, z = as.factor(rbinom(100, 2, 0.5))) # fit vine regression model fit <- vinereg(y ~ ., dat) plot_effects(fit)
Predict conditional mean and quantiles from a D-vine regression model
## S3 method for class 'vinereg' predict(object, newdata, alpha = 0.5, cores = 1, ...) ## S3 method for class 'vinereg' fitted(object, alpha = 0.5, ...)
## S3 method for class 'vinereg' predict(object, newdata, alpha = 0.5, cores = 1, ...) ## S3 method for class 'vinereg' fitted(object, alpha = 0.5, ...)
object |
an object of class |
newdata |
matrix of covariate values for which to predict the quantile. |
alpha |
vector of quantile levels; |
cores |
integer; the number of cores to use for computations. |
... |
unused. |
A data.frame of quantiles where each column corresponds to one
value of alpha
.
# simulate data x <- matrix(rnorm(200), 100, 2) y <- x %*% c(1, -2) dat <- data.frame(y = y, x = x, z = as.factor(rbinom(100, 2, 0.5))) # fit vine regression model (fit <- vinereg(y ~ ., dat)) # inspect model summary(fit) plot_effects(fit) # model predictions mu_hat <- predict(fit, newdata = dat, alpha = NA) # mean med_hat <- predict(fit, newdata = dat, alpha = 0.5) # median # observed vs predicted plot(cbind(y, mu_hat)) ## fixed variable order (no selection) (fit <- vinereg(y ~ ., dat, order = c("x.2", "x.1", "z.1")))
# simulate data x <- matrix(rnorm(200), 100, 2) y <- x %*% c(1, -2) dat <- data.frame(y = y, x = x, z = as.factor(rbinom(100, 2, 0.5))) # fit vine regression model (fit <- vinereg(y ~ ., dat)) # inspect model summary(fit) plot_effects(fit) # model predictions mu_hat <- predict(fit, newdata = dat, alpha = NA) # mean med_hat <- predict(fit, newdata = dat, alpha = 0.5) # median # observed vs predicted plot(cbind(y, mu_hat)) ## fixed variable order (no selection) (fit <- vinereg(y ~ ., dat, order = c("x.2", "x.1", "z.1")))
Sequential estimation of a regression D-vine for the purpose of quantile prediction as described in Kraus and Czado (2017).
vinereg( formula, data, family_set = "parametric", selcrit = "aic", order = NA, par_1d = list(), weights = numeric(), cores = 1, ..., uscale = FALSE )
vinereg( formula, data, family_set = "parametric", selcrit = "aic", order = NA, par_1d = list(), weights = numeric(), cores = 1, ..., uscale = FALSE )
formula |
an object of class "formula"; same as |
data |
data frame (or object coercible by |
family_set |
see |
selcrit |
selection criterion based on conditional log-likelihood.
|
order |
the order of covariates in the D-vine, provided as vector of
variable names (after calling
|
par_1d |
list of options passed to |
weights |
optional vector of weights for each observation. |
cores |
integer; the number of cores to use for computations. |
... |
further arguments passed to |
uscale |
if TRUE, vinereg assumes that marginal distributions have been taken care of in a preliminary step. |
If discrete variables are declared as ordered()
or factor()
, they are
handled as described in Panagiotelis et al. (2012). This is different from
previous version where the data was jittered before fitting.
An object of class vinereg. It is a list containing the elements
the formula used for the fit.
criterion used for variable selection.
the data used to fit the regression model.
list of marginal models fitted by kde1d::kde1d()
.
an rvinecopulib::vinecop_dist()
object containing the fitted
D-vine.
fit statistics such as conditional log-likelihood/AIC/BIC and p-values for each variable's contribution.
order of the covariates chosen by the variable selection algorithm.
indices of selected variables.
Use
predict.vinereg()
to predict conditional quantiles. summary.vinereg()
shows the contribution of each selected variable with the associated
p-value derived from a likelihood ratio test.
Kraus and Czado (2017), D-vine copula based quantile regression, Computational Statistics and Data Analysis, 110, 1-18
Panagiotelis, A., Czado, C., & Joe, H. (2012). Pair copula constructions for multivariate discrete data. Journal of the American Statistical Association, 107(499), 1063-1072.
# simulate data x <- matrix(rnorm(200), 100, 2) y <- x %*% c(1, -2) dat <- data.frame(y = y, x = x, z = as.factor(rbinom(100, 2, 0.5))) # fit vine regression model (fit <- vinereg(y ~ ., dat)) # inspect model summary(fit) plot_effects(fit) # model predictions mu_hat <- predict(fit, newdata = dat, alpha = NA) # mean med_hat <- predict(fit, newdata = dat, alpha = 0.5) # median # observed vs predicted plot(cbind(y, mu_hat)) ## fixed variable order (no selection) (fit <- vinereg(y ~ ., dat, order = c("x.2", "x.1", "z.1")))
# simulate data x <- matrix(rnorm(200), 100, 2) y <- x %*% c(1, -2) dat <- data.frame(y = y, x = x, z = as.factor(rbinom(100, 2, 0.5))) # fit vine regression model (fit <- vinereg(y ~ ., dat)) # inspect model summary(fit) plot_effects(fit) # model predictions mu_hat <- predict(fit, newdata = dat, alpha = NA) # mean med_hat <- predict(fit, newdata = dat, alpha = 0.5) # median # observed vs predicted plot(cbind(y, mu_hat)) ## fixed variable order (no selection) (fit <- vinereg(y ~ ., dat, order = c("x.2", "x.1", "z.1")))