R/Pnm_all.R
Pnm_all.Rd
Computes the exact distribution of the number of alleles in a \(m\)-person DNA
mixture typed with STR loci. For a m-person DNA mixture it is possible to
observe \(1,\ldots,2\times m \times L\) alleles, where \(L\) is
the total number of typed STR loci. The method allows incorporation of the
subpopulation correction, the so-called \(\theta\)-correction, to adjust
for shared ancestry. If needed, the locus-specific probabilities can be obtained using the
locuswise
argument.
Pnm_all(m, theta, probs, locuswise = FALSE) Pnm_locus(m, theta, alleleProbs)
m | The number of contributors |
---|---|
theta | The coancestery coefficient |
probs | List of vectors with allele probabilities for each locus |
locuswise | Logical. If |
alleleProbs | Vectors with allele probabilities |
Returns a vector of probabilities, or a matrix of locuswise probability vectors.
Computes the exact distribution of the number of alleles for a m-person DNA mixture.
T. Tvedebrink (2014). 'On the exact distribution of the number of alleles in DNA mixtures', International Journal of Legal Medicine; 128(3):427--37. <https://doi.org/10.1007/s00414-013-0951-3>
## Simulate some allele frequencies: freqs <- structure(replicate(10, { g = rgamma(n = 10, scale = 4, shape = 3); g/sum(g) }, simplify = FALSE), .Names = paste('locus', 1:10, sep = '.')) ## Compute \eqn{\Pr(N(m = 3) = n)}, \eqn{n = 1,\ldots,2 * L *m}, where \eqn{L = 10} ## here Pnm_all(m = 2, theta = 0, freqs)#> 1 2 3 4 5 6 #> 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 #> 7 8 9 10 11 12 #> 0.000000e+00 0.000000e+00 0.000000e+00 1.942242e-24 5.543109e-22 7.292726e-20 #> 13 14 15 16 17 18 #> 5.878483e-18 3.255642e-16 1.317186e-14 4.042732e-13 9.653068e-12 1.825469e-10 #> 19 20 21 22 23 24 #> 2.770483e-09 3.409100e-08 3.428781e-07 2.837183e-06 1.941626e-05 1.103509e-04 #> 25 26 27 28 29 30 #> 5.224765e-04 2.065100e-03 6.820962e-03 1.882553e-02 4.336021e-02 8.312557e-02 #> 31 32 33 34 35 36 #> 1.320806e-01 1.728655e-01 1.847290e-01 1.592194e-01 1.087899e-01 5.747393e-02 #> 37 38 39 40 #> 2.260729e-02 6.225429e-03 1.069792e-03 8.627028e-05## Same, but locuswise results Pnm_all(m = 2, theta = 0, freqs, locuswise = TRUE)#> 1 2 3 4 #> locus.1 0.004509230 0.11555881 0.4807493 0.3991826 #> locus.2 0.006440907 0.13856123 0.4922725 0.3627253 #> locus.3 0.002101605 0.08137847 0.4515649 0.4649550 #> locus.4 0.006604252 0.13690818 0.4932685 0.3632191 #> locus.5 0.002373395 0.09268969 0.4730040 0.4319329 #> locus.6 0.009941674 0.16324419 0.4988447 0.3279695 #> locus.7 0.006649907 0.13305449 0.4882864 0.3720092 #> locus.8 0.004932047 0.13527870 0.5032450 0.3565442 #> locus.9 0.001984470 0.08453274 0.4600866 0.4533962 #> locus.10 0.003137346 0.10446497 0.4782669 0.4141307