Skip to content
@deckyard/forensicgenetics

@deckyard/forensicgenetics

Forensic and statistical genetics for Jennifer. The deck works on profiles (an unordered allele pair per autosomal STR locus, plus mtDNA and Y-STR haplotypes) and on reference frequency or count data. It does not handle sequences, apart from aligning an mtDNA region to name its differences.

This deck is part of Deckyard, community decks for Jennifer.

What it computes

QuestionStatisticGuide
Could the stain have come from someone else?RMP with NRC II theta, single-source LRMatch probability
How much of the population is not excluded from a mixture?PI / PE, CPI / CPEMixtures
Are these two people related, and how?kinship LR from IBD coefficientsKinship
Is this man the child's father?trio paternity index with a stepwise mutation modelPaternity
What does the whole family say?pedigree likelihood by Elston-Stewart peelingGeneral pedigrees
How common is this haplotype?Clopper-Pearson upper bound on a database countLineage markers

Modules

ModuleImportCovers
forensicgenetics.j@deckyard/forensicgenetics/profiles, FrequencyDb, match probability, mixtures
kinship.j@deckyard/forensicgenetics/kinship.jrelationship LRs, paternity
pedigree.j@deckyard/forensicgenetics/pedigree.jwhole-pedigree likelihoods
lineage.j@deckyard/forensicgenetics/lineage.jmtDNA and Y-STR

kinship and pedigree import the core; lineage imports nothing from the deck. The core reads no published frequency format: a reader deck such as @deckyard/strider (STRidER XML) converts one into a FrequencyDb.

jennifer
import "@deckyard/forensicgenetics/" as forensicgenetics;

def db as forensicgenetics.FrequencyDb init forensicgenetics.withLocus(
    forensicgenetics.db("example"), "D3S1358", 1034,
    {"15": 0.2456, "16": 0.2314, "17": 0.2007, "18": 0.3223});
def suspect as forensicgenetics.Profile init forensicgenetics.profile("S1", [
    forensicgenetics.genotype("D3S1358", "15", "16")
]);
def lr as float init forensicgenetics.matchLikelihoodRatio($db, $suspect,
    forensicgenetics.THETA_GENERAL);

Every module throws Error with its own kind: "forensicgenetics", "kinship", "pedigree" or "lineage".

Start with Installing the deck and the Quick start. Every formula and its source is in Formulae and sources; every export is in the Cheatsheet. Read Limitations before relying on a number.

Not a validated forensic tool

This deck implements published estimators and is tested against them, but it has not been through the validation any jurisdiction requires of software used in casework. Treat it as a library for research, teaching and cross-checking, and validate independently before it informs a real conclusion.

The frequency table the examples build (examples/lib/exampledb.j) is synthetic: made-up numbers that exist only to exercise the examples. Real reference data comes from STRidER and elsewhere; see Reference frequency data.

Do not use this deck for a legal proceeding. It is not intended for, and is not recommended for, any calculation that informs a prosecution, a defence, a paternity ruling, an immigration decision, a disaster-victim identification, or any other legal or official determination. Jurisdictions require validated, accredited software for that purpose, operated under an accredited process; this deck is neither. If a number from here would ever reach a court, reproduce it with validated software and let that result be the one you rely on.

No warranty, no liability

This software is provided as is, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose, and non-infringement. You use it entirely at your own risk.

The author accepts no responsibility and no liability for any claim, damage, loss, or other consequence arising from this software or from any number it produces, however that number was reached and whoever relied on it. Verifying that a result is correct, appropriate, and lawful for your purpose is your responsibility alone.

This restates - and does not narrow, extend, or replace - the warranty and liability disclaimers of the LGPL-3.0-only licence this deck is released under. Where the two differ, the licence governs.