← Back to all sparks
D

dvir

ANALYTICS
Velocity0.0

Disaster Victim Identification

dvir keeps making disaster victim identification a single call instead of a workflow.

forensic geneticsvictim identificationpipelinescalabilityparallel computing
Current state
dvir handles disaster victim identification: matching unidentified remains against reference families using pedigree likelihoods. The package has consolidated around dviSolve(), a complete pipeline introduced in 3.2.1 and rewritten in 3.3.0 to use generalised likelihood ratios for families with several missing persons. Recent releases have been about making that pipeline survive large cases, adding dviGridSize() and a maxAssign cutoff to skip joint analysis when the combination count explodes, plus per-step timings.
Where it's heading
The arc is from a toolbox of functions toward one supervised pipeline, with the older jointDVI() now emitting a legacy message. The current constraint is combinatorial: joint analysis over many victims and missing persons blows up, so the work has gone to measuring the blowup and bailing out of it. Parallelism is mid-migration, with the parallel and pbapply implementation removed and a mirai replacement stated as planned but not yet shipped, leaving numCores accepted and ignored with a warning.
Prediction
The mirai-based parallelisation is announced as coming, so expect it next, most likely applied to the joint analysis step that maxAssign currently exists to avoid.

Recent moves

  1. 1mo ago

    Combination sizing and a cutoff for joint analysis

    dviGridSize() reports how many combinations a joint analysis would require and maxAssign skips it when that number is too large, with per-step timings added to dviSolve() output. The old parallel and pbapply implementation is removed with a mirai replacement only planned, so numCores is accepted and ignored with a warning for now.

    View source ↗
  2. 3mo ago

    Joint tables added to solver output

    dviSolve() output includes the joint tables with an LR column, and a bug producing wrong pairwise LRs in the joint report is fixed. Reporting and correctness on the same code path that 3.4.2 later learns to skip when too expensive.

    View source ↗
  3. 3mo ago

    Victim and database accessors, plus solver refinements

    addVictims() and getDatabase() fill obvious gaps in dataset manipulation, and the dviSolve() workflow gets documented in outline along with a long list of edge case fixes: empty components, duplicated references, families with no missing persons, victims with no remaining pairings. jointDVI() starts emitting a legacy message.

    View source ↗
  4. 1y ago

    Solver rewritten around generalised likelihood ratios

    dviSolve() is rewritten to use the generalised likelihood ratio for identifications in families with more than one missing person, with dviJoint(), swapOrientation(), and formatSummary() introduced to support it. It is the statistical foundation the current pipeline still rests on.

    View source ↗
  5. 2y ago

    dviSolve() pipeline and manual pairing controls

    The release that introduces dviSolve() as a complete DVI pipeline, alongside amDrivenDVI(), dviSim() for simulating marker data onto a dataset, and setPairing() and excludePairing() for manually fixing or forbidding assignments. The manual controls matter in practice, since real cases carry knowledge the likelihoods do not.

    View source ↗
  6. 2y ago

    Maintainer handover and small reporting additions

    The package changes maintainer, with minor additions to print output and a plotUndisputed() function. Small in content, but it marks the point where dvir joins the rest of the ped suite under one maintainer and starts moving in step with it.

    View source ↗