dip.test {diptest} | R Documentation |
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”.
dip.test(x, simulate.p.value = FALSE, B = 2000)
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. |
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.
A list with class "htest"
containing the following
components:
statistic |
the dip statistic |
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. |
see also the package vignette, which describes the procedure in more details.
Martin Maechler
see those in dip
.
For goodness-of-fit testing, notably of continuous distributions,
ks.test
.
## 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))