Become an expert in R — Interactive courses, Cheat Sheets, certificates and more!
Get Started for Free

dip.test

Hartigans' Dip Test for Unimodality


Description

Compute Hartigans' dip statistic Dn, and its p-value for the test for unimodality, by interpolating tabulated quantiles of sqrt(n) * Dn.

For X_i ~ F, i.i.d, the null hypothesis is that F is a unimodal distribution. Consequently, the test alternative is non-unimodal, i.e., at least bimodal. Using the language of medical testing, you would call the test “Test for Multimodality”.

Usage

dip.test(x, simulate.p.value = FALSE, B = 2000)

Arguments

x

numeric vector; sample to be tested for unimodality.

simulate.p.value

a logical indicating whether to compute p-values by Monte Carlo simulation.

B

an integer specifying the number of replicates used in the Monte Carlo test.

Details

If simulate.p.value is FALSE, the p-value is computed via linear interpolation (of sqrt(n) * Dn) in the qDiptab table. Otherwise the p-value is computed from a Monte Carlo simulation of a uniform distribution (runif(n)) with B replicates.

Value

A list with class "htest" containing the following components:

statistic

the dip statistic Dn, i.e., dip(x).

p.value

the p-value for the test, see details.

method

character string describing the test, and whether Monte Carlo simulation was used.

data.name

a character string giving the name(s) of the data.

Note

see also the package vignette, which describes the procedure in more details.

Author(s)

Martin Maechler

References

see those in dip.

See Also

For goodness-of-fit testing, notably of continuous distributions, ks.test.

Examples

## a first non-trivial case
(d.t <- dip.test(c(0,0, 1,1))) # "perfect bi-modal for n=4" --> p-value = 0
stopifnot(d.t$p.value == 0)

data(statfaculty)
plot(density(statfaculty)); rug(statfaculty)
(d.t <- dip.test(statfaculty))

x <- c(rnorm(50), rnorm(50) + 3)
plot(density(x)); rug(x)
## border-line bi-modal ...  BUT (most of the times) not significantly:
dip.test(x)
dip.test(x, simulate=TRUE, B=5000)

## really large n -- get a message
dip.test(runif(4e5))

diptest

Hartigan's Dip Test Statistic for Unimodality - Corrected

v0.76-0
GPL (>= 2)
Authors
Martin Maechler (originally from Fortran and S-plus by Dario Ringach, NYU.edu)
Initial release
2021-05-04

We don't support your browser anymore

Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.