simpA.kendallReg {CondCopulas} | R Documentation |
Test of the simplifying assumption using the constancy of conditional Kendall's tau
Description
This function computes Kendall's regression, a regression-like model for conditional Kendall's tau. More precisely, it fits the model
\Lambda(\tau_{X_1, X_2 | Z = z}) = \sum_{j=1}^{p'} \beta_j \psi_j(z),
where \tau_{X_1, X_2 | Z = z}
is the conditional Kendall's tau
between X_1
and X_2
conditionally to Z=z
,
\Lambda
is a function from ]-1, 1]
to R
,
(\beta_1, \dots, \beta_p)
are unknown coefficients to be estimated
and \psi_1, \dots, \psi_{p'})
are a dictionary of functions.
Then, this function tests the assumption
\beta_2 = \beta_3 = ... = \beta_{p'} = 0,
where the coefficient corresponding to the intercept is removed.
Usage
simpA.kendallReg(
X1,
X2,
Z,
vectorZToEstimate = NULL,
listPhi = list(function(x) {
return(x)
}, function(x) {
return(x^2)
},
function(x) {
return(x^3)
}),
typeEstCKT = 4,
h_kernel,
Lambda = function(x) {
return(x)
},
Lambda_deriv = function(x) {
return(1)
},
lambda = NULL,
h_lambda = h_kernel,
Kfolds_lambda = 5,
l_norm = 1
)
Arguments
X1 |
vector of observations of the first conditioned variable |
X2 |
vector of observations of the second conditioned variable |
Z |
vector of observations of the conditioning variable |
vectorZToEstimate |
vector containing the points |
listPhi |
the list of transformations |
typeEstCKT |
the type of estimation of the kernel-based estimation of conditional Kendall's tau. |
h_kernel |
the bandwidth used for the kernel-based estimations. |
Lambda |
the function to be applied on conditional Kendall's tau. By default, the identity function is used. |
Lambda_deriv |
the derivative of the function |
lambda |
the penalization parameter used for Kendall's regression.
By default, cross-validation is used to find the best value of |
h_lambda |
bandwidth used for the smooth cross-validation
in order to get a value for |
Kfolds_lambda |
the number of subsets used for the cross-validation
in order to get a value for |
l_norm |
type of norm used for selection of the optimal lambda
by cross-validation. |
Value
a list containing
-
statWn
: the value of the test statistic. -
p_val
: the p-value of the test.
References
Derumigny, A., & Fermanian, J. D. (2020). On Kendall’s regression. Journal of Multivariate Analysis, 178, 104610. (page 7) doi:10.1016/j.jmva.2020.104610
See Also
The function to fit Kendall's regression:
CKT.kendallReg.fit
.
Other tests of the simplifying assumption:
-
simpA.NP
in a nonparametric setting -
simpA.param
in a (semi)parametric setting, where the conditional copula belongs to a parametric family, but the conditional margins are estimated arbitrarily through kernel smoothing the counterparts of these tests in the discrete conditioning setting:
bCond.simpA.CKT
(test based on conditional Kendall's tau)bCond.simpA.param
(test assuming a parametric form for the conditional copula)
Examples
# We simulate from a conditional copula
set.seed(1)
N = 300
Z = runif(n = N, min = 0, max = 1)
conditionalTau = -0.9 + 1.8 * Z
simCopula = VineCopula::BiCopSim(N=N , family = 1,
par = VineCopula::BiCopTau2Par(1 , conditionalTau ))
X1 = qnorm(simCopula[,1])
X2 = qnorm(simCopula[,2])
result = simpA.kendallReg(
X1, X2, Z, h_kernel = 0.03,
listPhi = list(
function(x){return(x)}, function(x){return(x^2)},
function(x){return(x^3)}, function(x){return(x^4)},
function(x){return(x^5)},
function(x){return(cos(x))}, function(x){return(sin(x))},
function(x){return(as.numeric(x <= 0.4))},
function(x){return(as.numeric(x <= 0.6))}) )
print(result$p_val)
# We simulate from a conditional copula
set.seed(1)
N = 300
Z = runif(n = N, min = 0, max = 1)
conditionalTau = -0.3
simCopula = VineCopula::BiCopSim(N=N , family = 1,
par = VineCopula::BiCopTau2Par(1 , conditionalTau ))
X1 = qnorm(simCopula[,1])
X2 = qnorm(simCopula[,2])
result = simpA.kendallReg(
X1, X2, Z, h_kernel = 0.03,
listPhi = list(
function(x){return(x)}, function(x){return(x^2)},
function(x){return(x^3)}, function(x){return(x^4)},
function(x){return(x^5)},
function(x){return(cos(x))}, function(x){return(sin(x))},
function(x){return(as.numeric(x <= 0.4))},
function(x){return(as.numeric(x <= 0.6))}) )
print(result$p_val)