#' srr tags #' #' #' @srrstats {G1.5} Uniformity test example in the associated paper
Let $x_1, x_2, \ldots, x_n \sim F$ be a random sample with empirical distribution function $\hat{F}$. We test the null hypothesis of uniformity on the $d$-dimensional sphere, i.e., $H_0: F = G$ where $G$ is the uniform distribution on the $d$-dimensional sphere $\mathcal{S}^{d-1}$.
We compute the U-statistic estimate of the sample KBQD (Kernel-Based Quadratic Distance) $$ U_{n}=\frac{2}{n(n-1)}\sum_{i=2}^{n}\sum_{j=1}^{i-1}K_{cen}(\mathbf{x}{i}, \mathbf{x}{j}), $$ then the first test statistic is given as $$T_{n}=\frac{U_{n}}{\sqrt{Var(U_{n})}},$$ with $$ Var(U_{n})= \frac{2}{n(n-1)}\left[\frac{1+\rho^{2}}{(1-\rho^{2})^{d-1}}-1\right], $$
and the V-statistic estimate of the KBQD
$$
V_{n} = \frac{1}{n}\sum_{i=1}^{n}\sum_{j=1}^{n}K_{cen}(\mathbf{x}{i}, \mathbf{x}{j}),
$$
where $K_{cen}$ denotes the Poisson kernel $K_\rho$ centered with respect to the uniform distribution on the $d$-dimensional sphere, that is
$$
K_{cen}(\mathbf{u}, \mathbf{v}) = K_\rho(\mathbf{u}, \mathbf{v}) -1
$$
and
$$
K_\rho(\mathbf{u}, \mathbf{v}) = \frac{1-\rho^{2}}{\left(1+\rho^{2}-2\rho
(\mathbf{u}\cdot \mathbf{v})\right)^{d/2}},
$$
for every $\mathbf{u}, \mathbf{v} \in \mathcal{S}^{d-1} \times \mathcal{S}^{d-1}$.
We generated $n=200$ observations from the uniform distribution on $S^{d-1}$, with $d=3$.
library(QuadratiK) n <- 200 d <- 3 set.seed(2468) z <- matrix(rnorm(n * d), n, d) dat_sphere <- z/sqrt(rowSums(z^2))
The pk.test
is used for testing uniformity of the generated sample, providing the data matrix as x
and the value of the concentration parameter rho
.
rho <- 0.7 set.seed(2468) res_unif <- pk.test(x=dat_sphere, rho=rho) show(res_unif)
The pk.test()
function returns an object of class pk.test
. The show
function displays the computed statistics and the corresponding critical values.
The test correctly does not reject the null hypothesis of uniformity.
The summary
function for the pk.test
output object provides the results of the performed test, and generates a figure showing the qq-plots against the uniform distribution of each variable with a table of standard descriptive statistics.
summary_unif <- summary(res_unif)
The figure automatically generated by the summary
function on the result of the test for uniformity displays the qq-plots between the given samples and the uniform distribution with a table of the standard descriptive statistics for each variable.
The Poisson kernel-based test for uniformity exhibits excellent results especially in the case of multimodal distributions.
In this example, we generate data points from a mixture of 4 von Mises-Fisher distributions in 2 dimensions. The direction of the mean vectors for the distributions are set as (1, 0), (0, 1), (-1, 0), and (0, -1), with a concentration parameter $\kappa=5$.
# Load necessary libraries library(movMF) library(sphunif)
set.seed(2468) # Define the mean directions of the 4 von Mises-Fisher distributions means <- rbind( c(1, 0), c(0, 1), c(-1,0), c(0, -1) ) # Define the concentration parameter (kappa) kappa <- 5 # Generate 100 samples from a mixture of 4 von Mises-Fisher distributions samples <- matrix(rmovMF(100, theta = kappa * means), ncol=2)
We now compare the results of the pk.test
function with the Ajne and Bingham tests using the sphunif
package.
# Run the pk.test from the QuadratiK package to test the data pk_test_result <- pk.test(samples, rho=0.8) # Run the Bingham and Ajne tests from the sphunif package other_test_result <- unif_test(samples, type = c("Bingham", "Ajne")) pk_test_result other_test_result
In this example, the Poisson kernel-based test statistics reject the null hypothesis, while the Bingham test and Ajne test obtain p-values equal to 0.0532 and 0.3156, respectively.
Ding, Y., Markatou, M. and Saraceno, G. (2023). "Poisson Kernel-Based Tests for Uniformity on the d-Dimensional Sphere." Statistica Sinica. doi:10.5705/ss.202022.0347.
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.