Skip to content

Releases: senresearch/BulkLMM.jl

v1.2.0

28 Aug 17:31
d5ea4d3
Compare
Choose a tag to compare

Version 1.2.0

  • Help documentation added: to view the help documentation for functions scan(), and bulkscan(), type ? in front of the functions.
  • New features:
    • Added the wrapper function bulkscan() for the three algorithms of multiple-trait scans previously named as bulkscan_null(), bulkscan_null_grid(), bulkscan_alt_grid(). Now, the user can simply call the common interface bulkscan(...; method = ) by supplying with the method by the user's specific favor of computational speed or precision. Allowable inputs are string types, named as "null-exact", "null-grid", "alt-grid". The default option is "null-grid" with a loose grid of h2-step of size 0.1 (a grid of 10 values from 0.0, 0.10, ..., 0.90).
    • Added the option for SVD decomposition of the kinship matrix. To use this feature, supply the option decomp_scheme = svd.
    • Added the option in both scan() and bulkscan() functions for returning the $-log_{10}(p)$ result, where $p$ is the likelihood ratio test p-value: To use this feature, supply the option output_pvals = true. For more details, check the help instruction by ?scan(), ?bulkscan().
  • Fixed bugs:
    • Fixed a bug causing compilation error in bulkscan() "null-grid" algorithm with REML due to a typo.
    • Fixed a bug causing output dimension mismatch when using the function scan() for permutation testing with adjusted covariates.

v1.1.1

13 Jul 16:57
b33af06
Compare
Choose a tag to compare

Version 1.1.1:

Closed issues:

  • Fixed typos in README #85

Merged pull requests:

  • REML option in multiple trait scan functions ("bulkscan"'s) used to lead to compilation errors #87.
  • checkZeros() before will not consider and detect small floats that are significantly close to zero as "zeros" #82.
  • Updated the interface for the function to obtain permutation testing thresholds get_thresholds(): now the user will specify the significance levels to obtain the corresponding thresholds. For example, user input of significance level of 0.05 will give the 95th quantile of LOD scores from permutations 86.
  • Fixed numerical stability during testing #84

For more details, please check NEWS.md.

v1.1.0

20 Jun 16:20
5f5cde7
Compare
Choose a tag to compare

Version 1.1.0:

Closed issues:

  • No issues were closed compared to last release (v 1.0.1).

Merged pull requests:

  • Revised the algorithm for fast eQTL scans using grid-search for heritability estimated independently for each tested marker and trait. The function bulkscan_alt_grid() now also reports the heritability estimates for each marker and trait, stored in a 2-dimensional array. #75
  • Updated the function scan(...; permutation_test = true) for the feature of permutation testing: it now reports the variance components estimated under the null model, the raw output from permutation testing (LOD scores for permuted copies), and the LOD scores for the original tested trait. #75
  • Improved the implementation of the kinship function: using matrix multiplication to reduce the computational cost when sample size and/or marker size is large. #77
  • As the package BigRiverQTLPlots.jl that we developed is currently public, we updated the README.md of BulkLMM.jl by including the code to reproduce the example figures in the README.md. #78

For more details, please check NEWS.md.

v1.0.1

05 May 20:51
9c1427e
Compare
Choose a tag to compare

Version 1.0.1:

Closed issues:

No closed issue since the last release.

Merged pull requests:

  • Added the feature for modeling heteroskedastic variance component unexplained by genetic variants (#69)
  • Registered version 1.0.1 in Project.toml (#71).

v1.0.0

01 Apr 00:56
d71732c
Compare
Choose a tag to compare

Version 1.0.0 (March 09, 2023)

  • Renamed the scan functions: now use scan() for performing single-trait scans, and use bulkscan_...() for performing multiple-trait scans.

  • Permutation testing for single-trait scans is now through the same interface scan(...) by specifying the optional argument permutation_testing = true and also specifying how the permutation testing should be done.

    For example,

    scan(y, G, K; permutation_testing = true, nperms = 1000, rndseed = 0, original = true)
    

    will return the matrix of LOD scores done on permutated copies of the original trait, including itself, where each column is a vector of length $p-$the number of tested markers of the LOD scores after performing LMM scans on each permutated copy.

  • bulkscan_...(): there are three choices of algorithms for doing multiple-trait scans (using multi-threading).

    • bulkscan_null() will estimate the heritability parameter independently for each trait supplied under the null model. Based on the estimated heritability for each trait, the scan (overall markers) will be done independently for each trait, using multi-threaded loops.

    Example:

    results = bulkscan_null(Y, G, K) # results is a Julia object
    
    ## L: the array of LOD scores for all traits in Y and all markers in G
    results.L
    
    • bulkscan_null_grid() will estimate the heritability parameter under the null by approximating the possible values on a discrete grid for all traits and then group the traits with the "same" estimates together for downstream scans to get LOD scores. This method can be seen as an approximation of the bulkscan_null() method. (This algorithm is the fastest and empirically performs much faster than the other two multi-threaded methods for multiple-trait scans).

    Example: (need to supply a grid of candidates heritabilities as an array)

    grid = collect(0.0:0.05:0.95) # using a grid from 0.0 to 0.95 with step size of 0.05
    results = bulkscan_null_grid(Y, G, K, grid) # results is a Julia object
    
    ## L: the array of LOD scores for all traits in Y and all markers in G
    results.L
    
    • bulkscan_alt_grid() will estimate the heritability parameter independently for every combination of trait and marker but on a discrete grid. This method can be seen as an approximation of performing scan(y, G, K; assumption = alt) iteratively for every trait $y$.

    Example: (need to supply a grid of candidates heritabilities as an array)

    grid = collect(0.0:0.05:0.95) # using a grid from 0.0 to 0.95 with step size of 0.05
    results = bulkscan_alt_grid(Y, G, K, grid)
    
    ## the output `results` is the array of LOD scores for all traits in Y and all markers in G
    results
    
  • All scan functions can now model genome-wide associations after adjusting for additional covariates that are independent of the tested marker.

    • For example, to include the matrix $Z$ of additional covariates in a single-trait scan on the trait $y$, use
    scan(y, G, Z, K);
    
    • To use any of the bulkscan_...() functions for scanning multiple traits and to include the covariates $Z$, use
    
    ## bulkscan_null:
    bulkscan_null(y, G, Z, K);
    
    ## bulkscan_null_grid:
    grid = collect(0.0:0.05:0.95);
    bulkscan_null_grid(y, G, Z, K, grid);
    
    ## bulkscan_alt_grid:
    bulkscan_alt_grid(y, G, Z, K, grid);