Skip to main content

Samples.jl

PopGenSims.jl/src/Samples.jl

📦 not exported🟪 exported by PopGenSims.jl

📦 sample_locus

sample_locus(locus::Dict, n::Int, ploidy::Signed)

Internal function used by simulate to take a Dict of alleles => frequencies of a locus and return n number of genotypes (n_alleles = ploidy) by using weighted sampling of the allele-frequency pairs.

Example

d = Dict(133 => 0.125,135 => 0.5625,143 => 0.25,137 => 0.0625)

julia> sample_locus(d, 3, 2)
5-element Array{Tuple{Int16,Int16},1}:
(133, 135)
(135, 135)
(143, 137)

julia> sample_locus(d, 3, 3)
5-element Array{Tuple{Int16,Int16,Int16},1}:
(135, 135, 133)
(143, 135, 133)
(137, 135, 135)

📦 _simulatearbitrary

_simulatearbitrary(data::PopData, n::Dict{String, Int})

📦 _simulateflat

_simulateflat(data::PopData, n::Int)

📦 _simulatescale

_simulatescale(data::PopData, scale::Int)

🟪 simulate

simulate(data::PopData; n::Int)

Simulate n number of individuals per population using per-population allele frequencies derived from a PopData object. Returns a new PopData object with n * n_populations samples.

Example

julia> cats = @nanycats;

julia> sims = simulate(cats, n = 100)
PopData{Diploid, 9 Microsatellite Loci}
Samples: 1700
Populations: 17

simulate(data::PopData; n::Dict{String, Int})

Simulate an arbitrary number of samples per populations specified in the Dict n, given by Population => #samples. Uses per-population allele frequencies derived from a PopData object.

julia> cats = @nancycats;

julia> simscheme = Dict("1" => 5, "8" => 3, "11" => 20) ;

julia> simulate(cats, n = simscheme)
PopData{Diploid, 9 Microsatellite loci}
Samples: 28
Populations: 3

simulate(data::PopData; scale::Int)

Simulate individuals per population in the same proportions they appear in the PopData using per-population allele frequencies. Simulation volume can be multiplied using scale, i.e. if you want to keep the same proportions but generate twice the number of samples, scale would be 2. Returns a new PopData object with n_samples * scale samples.

julia> cats = @nanycats;

julia> sims_prop = simulate(cats, scale = 3)
PopData{Diploid, 9 Microsatellite Loci}
Samples: 711
Populations: 17