observed_allele_type X; allele_assignment_type Z; individual_admixture_distribution_type theta; population_allele_frequency_distribution_type P; diriclet_parameter_type alpha; diriclet_parameter_type lambda; allele_frequency_type Pr; for (auto population : populations) P(population) =~ dirichlet(lambda); for (auto individual : individuals) { theta(individual) =~ dirichlet(alpha); for (auto allele : alleles(individual)) { Z(individual,allele) =~ multinomial(theta(individual)); for (auto population : populations) Pr(individual) += Z(population,individual) * P(population); X(individual,allele) =~ bernoulli(Pr(individual,allele)); } }