Dissention, for measuring dispersion in draws from ordinal distributions.
dissent(x)
# S3 method for default
dissent(x)
# S3 method for rvar
dissent(x)(multiple options) A vector to be interpreted as draws from an ordinal distribution, such as:
A factor
An rvar, rvar_factor, or rvar_ordered
If x is a factor or numeric, returns a length-1 numeric vector with a value
between 0 and 1 (inclusive) giving the dissention of x.
If x is an rvar, returns an array of the same shape as x, where each
cell is the dissention of the draws in the corresponding cell of x.
Calculates Tastle and Wierman's (2007) dissention measure:
$$-\sum_{i = 1}^{n} p_i \log_2 \left(1 - \frac{|x_i - \mathrm{E}(x)| }{\max(x) - \min(x)} \right)$$
This ranges from 0 (all probability in one category) through 0.5 (uniform) to 1 (bimodal: all probability split equally between the first and last category).
William J. Tastle, Mark J. Wierman (2007). Consensus and dissention: A measure of ordinal dispersion. International Journal of Approximate Reasoning. 45(3), 531--545. doi:10.1016/j.ijar.2006.06.024 .
set.seed(1234)
levels <- c("lowest", "low", "neutral", "high", "highest")
# a bimodal distribution: high dissention
x <- ordered(
sample(levels, 4000, replace = TRUE, prob = c(0.45, 0.04, 0.02, 0.04, 0.45)),
levels = levels
)
dissent(x)
#> [1] 0.9303737
# a unimodal distribution: low dissention
y <- ordered(
sample(levels, 4000, replace = TRUE, prob = c(0.95, 0.02, 0.015, 0.01, 0.005)),
levels = levels
)
dissent(y)
#> [1] 0.1046236
# both together, as an rvar
xy <- c(rvar(x), rvar(y))
xy
#> rvar_ordered<4000>[2] mode <dissent>:
#> [1] highest <0.93> lowest <0.10>
#> 5 levels: lowest < low < neutral < high < highest
dissent(xy)
#> [1] 0.9303737 0.1046236