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 **Multi**modality”.

`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.

A list with class `"htest"`

containing the following
components:

the dip statistic \(D_n\), i.e.,
`dip(x)`

.

the p-value for the test, see details.

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

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

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.

see those in `dip`

.

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

.

# NOT RUN { ## 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)) # }