Releases: senresearch/BulkLMM.jl
v1.2.0
Version 1.2.0
- Help documentation added: to view the help documentation for functions
scan()
, andbulkscan()
, type?
in front of the functions. - New features:
- Added the wrapper function
bulkscan()
for the three algorithms of multiple-trait scans previously named asbulkscan_null()
,bulkscan_null_grid()
,bulkscan_alt_grid()
. Now, the user can simply call the common interfacebulkscan(...; 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()
andbulkscan()
functions for returning the$-log_{10}(p)$ result, where$p$ is the likelihood ratio test p-value: To use this feature, supply the optionoutput_pvals = true
. For more details, check the help instruction by?scan()
,?bulkscan()
.
- Added the wrapper function
- 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.
- Fixed a bug causing compilation error in
v1.1.1
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
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
v1.0.0
Version 1.0.0 (March 09, 2023)
-
Renamed the scan functions: now use
scan()
for performing single-trait scans, and usebulkscan_...()
for performing multiple-trait scans. -
Permutation testing for single-trait scans is now through the same interface
scan(...)
by specifying the optional argumentpermutation_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 thebulkscan_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 performingscan(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);
- For example, to include the matrix