A_theta_x | R Documentation |
Computation of
A_x(\theta_{ij}) := \frac{1}{\omega_p}
\int_{S^{p - 1}} 1_{\{{\bf X}_i'\boldsymbol\gamma \le x,
{\bf X}_j'\boldsymbol\gamma \le x\}}\,\mathrm{d}\boldsymbol\gamma,
where \theta_{ij} := \cos^{-1}({\bf X}_i'{\bf X}_j)
\in [0, \pi]
,
x \in [-1, 1]
, and \omega_{p}
is the surface area of
S^{p - 1}
. A_x(\theta_{ij})
is the proportion of surface area
of S^{p - 1}
covered by the intersection of two hyperspherical caps
centered at {\bf X}_i
and {\bf X}_j
and with
common solid angle \pi - \cos^{-1}(x)
.
A_theta_x(theta, x, p, N = 160L, as_matrix = TRUE)
theta |
vector with values in |
x |
vector with values in |
p |
integer giving the dimension of the ambient space |
N |
number of points used in the
Gauss-Legendre quadrature. Defaults to
|
as_matrix |
return a matrix with the values of |
See García-Portugués et al. (2023) for more details about the
A_x(\theta)
function.
A matrix of size c(length(theta), length(x))
containing the
evaluation of A_x(\theta)
if as_matrix = TRUE
. Otherwise,
a vector of size c(length(theta)
if theta
and x
equal
in size.
García-Portugués, E., Navarro-Esteban, P., Cuesta-Albertos, J. A. (2023) On a projection-based class of uniformity tests on the hypersphere. Bernoulli, 29(1):181–204. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.3150/21-BEJ1454")}.
# Plot A_x(theta) for several dimensions and x's
A_lines <- function(x, th = seq(0, pi, l = 200)) {
plot(th, A_theta_x(theta = th, x = x, p = 2), type = "l",
col = 1, ylim = c(0, 1.25), main = paste("x =", x),
ylab = expression(A[x](theta)),
xlab = expression(theta), axes = FALSE)
axis(1, at = c(0, pi / 4, pi / 2, 3 * pi / 4, pi),
labels = expression(0, pi / 4, pi / 2, 3 * pi / 4, pi))
axis(2); box()
abline(h = c(0, 1), lty = 2)
lines(th, A_theta_x(theta = th, x = x, p = 3), col = 2)
lines(th, A_theta_x(theta = th, x = x, p = 4), col = 3)
lines(th, A_theta_x(theta = th, x = x, p = 5), col = 4)
legend("top", lwd = 2, legend = paste("p =", 2:5),
col = 1:4, cex = 0.75, horiz = TRUE)
}
old_par <- par(mfrow = c(2, 3))
A_lines(x = -0.75)
A_lines(x = -0.25)
A_lines(x = 0)
A_lines(x = 0.25)
A_lines(x = 0.5)
A_lines(x = 0.75)
par(old_par)
# As surface of (theta, x) for several dimensions
A_surf <- function(p, x = seq(-1, 1, l = 201), th = seq(0, pi, l = 201)) {
col <- c("white", viridisLite::viridis(20))
breaks <- c(-1, seq(1e-15, 1, l = 21))
A <- A_theta_x(theta = th, x = x, p = p)
image(th, x, A, main = paste("p =", p), col = col, breaks = breaks,
xlab = expression(theta), axes = FALSE)
axis(1, at = c(0, pi / 4, pi / 2, 3 * pi / 4, pi),
labels = expression(0, pi / 4, pi / 2, 3 * pi / 4, pi))
axis(2); box()
contour(th, x, A, levels = breaks, add = TRUE)
}
old_par <- par(mfrow = c(2, 2))
A_surf(p = 2)
A_surf(p = 3)
A_surf(p = 4)
A_surf(p = 5)
par(old_par)
# No matrix return
th <- seq(0, pi, l = 5)
x <- seq(-1, 1, l = 5)
diag(A_theta_x(theta = th, x = x, p = 2))
A_theta_x(theta = th, x = x, p = 2, as_matrix = FALSE)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.