EllDistrEst {ElliptCopulas} | R Documentation |
Nonparametric estimation of the density generator of an elliptical distribution
Description
This function uses Liebscher's algorithm to estimate the density generator of an elliptical distribution by kernel smoothing.
Usage
EllDistrEst(
X,
mu = 0,
Sigma_m1 = diag(d),
grid,
h,
Kernel = "epanechnikov",
a = 1,
mpfr = FALSE,
precBits = 100,
dopb = TRUE
)
Arguments
X |
matrix of observations. |
mu |
(estimated) mean of X. |
Sigma_m1 |
(estimated) inverse of the covariance matrix of X. |
grid |
grid of values on which to estimate the density generator |
h |
bandwidth of the kernel |
Kernel |
kernel used for the smoothing |
a |
tuning parameter to improve the performance at 0. See Liebscher (2005), Example p.210. |
mpfr |
if |
precBits |
number of precBits used for floating point precision
(only used if |
dopb |
if |
Value
the values of the density generator of the elliptical copula,
estimated at each point of the grid
.
Author(s)
Alexis Derumigny, Rutger van der Spek
References
Liebscher, E. (2005). A semiparametric density estimator based on elliptical distributions. Journal of Multivariate Analysis, 92(1), 205. doi:10.1016/j.jmva.2003.09.007
See Also
EllDistrSim
for the simulation of elliptical distribution samples,
EllCopEst
for the estimation of elliptical copulas.
Examples
# Comparison between the estimated and true generator of the Gaussian distribution
X = matrix(rnorm(500*3), ncol = 3)
grid = seq(0,5,by=0.1)
g_3 = EllDistrEst(X = X, grid = grid, a = 0.7, h=0.05)
g_3mpfr = EllDistrEst(X = X, grid = grid, a = 0.7, h=0.05,
mpfr = TRUE, precBits = 20)
plot(grid, g_3, type = "l")
lines(grid, exp(-grid/2)/(2*pi)^{3/2}, col = "red")
# In higher dimensions
d = 250
X = matrix(rnorm(500*d), ncol = d)
grid = seq(0, 400, by = 25)
true_g = exp(-grid/2) / (2*pi)^{d/2}
g_d = EllDistrEst(X = X, grid = grid, a = 100, h=40)
g_dmpfr = EllDistrEst(X = X, grid = grid, a = 100, h=40,
mpfr = TRUE, precBits = 10000)
ylim = c(min(c(true_g, as.numeric(g_dmpfr[which(g_dmpfr>0)]))),
max(c(true_g, as.numeric(g_dmpfr)), na.rm=TRUE) )
plot(grid, g_dmpfr, type = "l", col = "red", ylim = ylim, log = "y")
lines(grid, g_d, type = "l")
lines(grid, true_g, col = "blue")