gamBiCopSelect {gamCopula} | R Documentation |
Selection and Maximum penalized likelihood estimation of a Generalized Additive model (gam) for the copula parameter or Kendall's tau.
Description
This function selects an appropriate bivariate copula family for given
bivariate copula data using one of a range of methods. The corresponding
parameter estimates are obtained by maximum penalized likelihood estimation,
where each Newton-Raphson iteration is reformulated as a generalized ridge
regression solved using the mgcv
package.
Usage
gamBiCopSelect(
udata,
lin.covs = NULL,
smooth.covs = NULL,
familyset = NA,
rotations = TRUE,
familycrit = "AIC",
level = 0.05,
edf = 1.5,
tau = TRUE,
method = "FS",
tol.rel = 0.001,
n.iters = 10,
parallel = FALSE,
verbose = FALSE,
select.once = TRUE,
...
)
Arguments
udata |
A matrix or data frame containing the model responses, (u1,u2) in [0,1]x[0,1] |
lin.covs |
A matrix or data frame containing the parametric (i.e., linear) covariates. |
smooth.covs |
A matrix or data frame containing the non-parametric (i.e., smooth) covariates. |
familyset |
(Similar to |
rotations |
If |
familycrit |
Character indicating the criterion for bivariate copula
selection. Possible choices: |
level |
Numerical; significance level of the test for removing individual
predictors (default: |
edf |
Numerical; if the estimated EDF for individual predictors is
smaller than |
tau |
|
method |
|
tol.rel |
Relative tolerance for |
n.iters |
Maximal number of iterations for
|
parallel |
|
verbose |
|
select.once |
if |
... |
Additional parameters to be passed to |
Value
gamBiCopFit
returns a list consisting of
res |
S4 |
method |
|
tol.rel |
relative tolerance for |
n.iters |
maximal number of iterations for
|
trace |
the estimation procedure's trace. |
conv |
|
See Also
gamBiCop
and gamBiCopFit
.
Examples
require(copula)
set.seed(0)
## Simulation parameters (sample size, correlation between covariates,
## Student copula with 4 degrees of freedom)
n <- 5e2
rho <- 0.9
fam <- 2
par2 <- 4
## A calibration surface depending on four variables
eta0 <- 1
calib.surf <- list(
calib.lin <- function(t, Ti = 0, Tf = 1, b = 2) {
return(-2 + 4 * t)
},
calib.quad <- function(t, Ti = 0, Tf = 1, b = 8) {
Tm <- (Tf - Ti) / 2
a <- -(b / 3) * (Tf^2 - 3 * Tf * Tm + 3 * Tm^2)
return(a + b * (t - Tm)^2)
},
calib.sin <- function(t, Ti = 0, Tf = 1, b = 1, f = 1) {
a <- b * (1 - 2 * Tf * pi / (f * Tf * pi +
cos(2 * f * pi * (Tf - Ti))
- cos(2 * f * pi * Ti)))
return((a + b) / 2 + (b - a) * sin(2 * f * pi * (t - Ti)) / 2)
},
calib.exp <- function(t, Ti = 0, Tf = 1, b = 2, s = Tf / 8) {
Tm <- (Tf - Ti) / 2
a <- (b * s * sqrt(2 * pi) / Tf) * (pnorm(0, Tm, s) - pnorm(Tf, Tm, s))
return(a + b * exp(-(t - Tm)^2 / (2 * s^2)))
}
)
## 6-dimensional matrix X of covariates
covariates.distr <- mvdc(normalCopula(rho, dim = 6),
c("unif"), list(list(min = 0, max = 1)),
marginsIdentical = TRUE
)
X <- rMvdc(n, covariates.distr)
colnames(X) <- paste("x", 1:6, sep = "")
## U in [0,1]x[0,1] depending on the four first columns of X
U <- condBiCopSim(fam, function(x1, x2, x3, x4) {
eta0 + sum(mapply(function(f, x)
f(x), calib.surf, c(x1, x2, x3, x4)))
}, X[, 1:4], par2 = 4, return.par = TRUE)
## Not run:
## Selection using AIC (about 30sec on single core)
## Use parallel = TRUE to speed-up....
system.time(best <- gamBiCopSelect(U$data, smooth.covs = X))
print(best$res)
EDF(best$res) ## The first function is linear
## Plot only the smooth component
par(mfrow = c(2, 2))
plot(best$res)
## End(Not run)