← Back to all sparks
Q

qtl2

ANALYTICS
Velocity2.5

R package qtl2 by rqtl — release notes from GitHub.

The standard QTL mapping package in R opened its genome scan to user-supplied likelihood models.

qtl-mappingstatistical-geneticsbioinformaticsr-packageeqtlextensibility
Current state
qtl2 is the R toolkit for QTL mapping in experimental crosses, covering genotype probability calculation, genome scans with and without polygenic effects, permutation testing, SNP association, and the plotting that goes with them. The last year of work has pushed hard in two directions: tooling for high-throughput expression and protein QTL studies, and a generalisation of the scan engine itself so the log-likelihood being maximised can be supplied by the user. Note that the release history reached this feed out of order, so feed position is not a reliable guide to which release came first.
Where it's heading
The eQTL and pQTL direction is the clearest thread — cis-trans plots, hotspot counting over a sliding window, multi-trait scan heat maps, and genome-wide genotype plots all arrived together, which is the toolkit an experiment with thousands of traits needs rather than one with a handful. Running underneath it is a steady generalisation of the core: a scan function that accepts an arbitrary likelihood, permutations that work with alternative scan functions, full variance-covariance output from single-position fits. Performance and parallelism get attention each cycle, including a more considerate default that leaves one core free. The rest is the ordinary maintenance of a long-lived package — renames to avoid tidyverse collisions, compiler warnings, and correctness fixes on specific cross types.
Prediction
With scan1gen and permutation support for alternative scan functions in place, the natural next step is more model types built on that hook rather than more special-cased scan functions; the entries do not indicate which models are planned.

Recent moves

  1. 27d ago

    chr_lengths() extended to cross2 objects

    A small convenience — chromosome lengths can be taken from a cross2 object, using the genetic map when present and the physical map otherwise — plus test adjustments to keep CRAN checks quiet. Routine upkeep between substantive releases.

    View source ↗
  2. 1mo ago

    A genome scan that takes your own likelihood function

    ⚡ SPARK

    scan1gen turns the package's central operation into a hook: supply an R function that computes the log10 likelihood and the scan machinery does the rest, with scan1perm able to permute against it. After years of adding purpose-built scan variants, the engine itself becomes the extension point.

    View source ↗
  3. 2mo ago

    Hotspot counting and cis-trans plots for eQTL studies

    The densest feature release in the window, and pointed squarely at expression and protein QTL work: calc_hotspots() counts QTL in a sliding window to find hotspots, plot_cistrans() puts gene location against QTL location, and plot_scan1_heatmap() renders many traits at once. fit1() can now return the full variance-covariance matrix of coefficients, with corrected standard errors in the zero-sum case.

    View source ↗
  4. 3mo ago

    Confidence interval plotting, plus a documentation correction

    plot_ci() adds a way to display QTL effect confidence intervals, later extended so multiple sets can be overlaid with an offset. The release also corrects the documented model for est_herit() and scan1() — a documentation fix, but on the covariance structure users rely on to interpret heritability estimates.

    View source ↗
  5. 1y ago

    Finer-grained parallelism for kinship-based scans

    Breaking positions into intervals gives multi-core scans with a polygenic effect better load distribution — the recurring performance concern for the most expensive operation this package performs. compare_founder_geno() extends genotype comparison to founders, and a segfault in reading multi-way RIL crosses with malformed cross information is fixed.

    View source ↗
  6. 1y ago

    CSV readers renamed to avoid the readr collision

    read_csv() and read_csv_numer() become fread_csv() and fread_csv_numer() to stop colliding with readr, a breaking rename of the kind an established package eventually has to make once the tidyverse claims a name. find_dup_markers() is ported over from the original qtl package for identifying markers with identical genotype data.

    View source ↗