dip.test: Hartigans' Dip Test for Unimodality

View source: R/dipTest.R

dip.testR Documentation

Hartigans' Dip Test for Unimodality

Description

Compute Hartigans' dip statistic D_n, and its p-value for the test for unimodality, by interpolating tabulated quantiles of \sqrt{n} D_n.

For X_i \sim 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} D_n) 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 D_n, 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 documentation built on May 29, 2024, 9:15 a.m.