\newcommand{\simplex}[1]{\text{Simplex}{(#1)}} \newcommand{\dirichlet}[1]{\text{Dirichlet}{(#1)}} \renewcommand{\vec}[1]{\boldsymbol{#1}} \newcommand{\EE}{\mathop{\mathbb{E}}} \newcommand{\Var}{\mathop{\mathrm{Var}}}

knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

library(rsamplestudy)
library(magrittr)

This package contains functions to sample from a Dirichlet distribution.

Notation

We call $\simplex{p-1}$ the set of vectors in $\mathbb{R}^p$ whose components form a distribution on $p$ items.
In other words, $\vec{X} \in \simplex{p-1}$ iff $X_i \in [0,1]$ and $\sum_{i=1}^p X_i = 1$.

Let $\vec{X}$ be a vector in $\simplex{p-1}$, let $\vec{\alpha}$ be a vector in $\mathbb{R}^p$ with positive components.

Then, $X$ can have the Dirichlet distribution: $X \mid \vec{\alpha} \sim \dirichlet{\vec{\alpha}}$.

We can write $\vec{\alpha} = \alpha_0 \, \vec{\nu}$, where:

Properties

Particular cases

If $\vec{\nu}$ is constant, $\vec{\nu} = 1/p$. The Dirichlet distribution is called symmetric Dirichlet, and is only parametrised by the concentration parameter $\alpha_0$.

Examples

Sample from a $p=4$ Dirichlet:

n <- 100

# The parameter
alpha <- c(0.5, 0.1, 5, 0.1)
p <- length(alpha)

# Concentration and base measure
alpha0 <- sum(alpha)
nu <- alpha / alpha0

$\alpha_0 = r alpha0$
$\vec{\nu} = \left( r nu \right)$
$\vec{\alpha} = \left( r alpha \right)$

df_diri <- fun_rdirichlet(n, alpha)
head(df_diri)
source('scatter_matrix_simplex.R')
scatter_matrix_simplex(df_diri)

Uniform sampling

Uniform base measure, unitary Dirichlet parameters: $\vec{\alpha} = \vec{1}$.

nu <- rep(1, p)/p
alpha0 <- p
alpha <- nu * alpha0

$\alpha_0 = r alpha0$
$\vec{\nu} = \left( r nu \right)$
$\vec{\alpha} = \left( r alpha \right)$

df_diri <- fun_rdirichlet(n, alpha)
head(df_diri)
scatter_matrix_simplex(df_diri)

Concentrated sampling

Concentration parameter $\gg p$, Dirichlet parameters $\gg 1$

nu <- rep(1, p)/p
alpha0 <- 100
alpha <- nu * alpha0

$\alpha_0 = r alpha0$
$\vec{\nu} = \left( r nu \right)$
$\vec{\alpha} = \left( r alpha \right)$

df_diri <- fun_rdirichlet(n, alpha)
head(df_diri)
scatter_matrix_simplex(df_diri)

Degenerate sampling

Concentration parameter $\ p$, Dirichlet parameters $\ 1$

nu <- rep(1, p)/p
alpha0 <- 0.01
alpha <- nu * alpha0

$\alpha_0 = r alpha0$
$\vec{\nu} = \left( r nu \right)$
$\vec{\alpha} = \left( r alpha \right)$

df_diri <- fun_rdirichlet(n, alpha)
head(df_diri)
scatter_matrix_simplex(df_diri)


lgaborini/rsamplestudy documentation built on March 6, 2021, 3:18 p.m.