diff --git a/dev/.documenter-siteinfo.json b/dev/.documenter-siteinfo.json index 5c876334e..c16b49ca0 100644 --- a/dev/.documenter-siteinfo.json +++ b/dev/.documenter-siteinfo.json @@ -1 +1 @@ -{"documenter":{"julia_version":"1.8.5","generation_timestamp":"2025-01-06T02:52:03","documenter_version":"1.8.0"}} \ No newline at end of file +{"documenter":{"julia_version":"1.8.5","generation_timestamp":"2025-01-07T02:48:02","documenter_version":"1.8.0"}} \ No newline at end of file diff --git a/dev/index.html b/dev/index.html index 0e034a1fd..d993c0850 100644 --- a/dev/index.html +++ b/dev/index.html @@ -1,3 +1,3 @@ Home · Knockoffs.jl

Knockoffs.jl

This is a Julia implementation of the knockoff filter. The knockoff filter is a general framework for controlling the false discovery rate when performing variable selection. As the name suggests, the knockoff filter operates by manufacturing knockoff variables that are cheap — their construction does not require collecting any new data — and are designed to mimic the correlation structure found within the original variables. The knockoffs serve as negative controls and they allow one to identify the truly important predictors, while controlling the false discovery rate (FDR) — the expected fraction of false discoveries among all discoveries.

Installation

Within Julia,

using Pkg
-Pkg.add("Knockoffs")

This package supports Julia v1.8+.

Manual Outline

+Pkg.add("Knockoffs")

This package supports Julia v1.8+.

Manual Outline

diff --git a/dev/man/JuliaCall/index.html b/dev/man/JuliaCall/index.html index 6dcaacda0..e1bc902fb 100644 --- a/dev/man/JuliaCall/index.html +++ b/dev/man/JuliaCall/index.html @@ -1,2 +1,2 @@ -Calling from R/Python · Knockoffs.jl

title: "Call Julia code from R" output: htmldocument: keepmd: true –-

Calling from R and/or Python

Knockoffs.jl can be called directly from R or Python via the packages

The name space is setup so that standard syntax of Julia translates directly over to the R/Python environment. There are 3 things to keep in mind:

  • All Knockoffs.jl commands are prefaced by ko$ (in R) or ko. (in python)
  • For R users, all commands with a ! are replaced with _bang, for example solve_s! becomes solve_s_bang.
  • All Knockoffs.jl functions that require a Symmetric matrix as inputs now accepts a regular matrix. However, for hc_partition_groups, one must provide an extra argument isCovariance to indicate whether the input data should be treated as a design matrix or a covariance matrix.

The first 2 points follows the practice of diffeqr.

+Calling from R/Python · Knockoffs.jl

title: "Call Julia code from R" output: htmldocument: keepmd: true –-

Calling from R and/or Python

Knockoffs.jl can be called directly from R or Python via the packages

The name space is setup so that standard syntax of Julia translates directly over to the R/Python environment. There are 3 things to keep in mind:

  • All Knockoffs.jl commands are prefaced by ko$ (in R) or ko. (in python)
  • For R users, all commands with a ! are replaced with _bang, for example solve_s! becomes solve_s_bang.
  • All Knockoffs.jl functions that require a Symmetric matrix as inputs now accepts a regular matrix. However, for hc_partition_groups, one must provide an extra argument isCovariance to indicate whether the input data should be treated as a design matrix or a covariance matrix.

The first 2 points follows the practice of diffeqr.

diff --git a/dev/man/api/index.html b/dev/man/api/index.html index 512557358..7557bc5e3 100644 --- a/dev/man/api/index.html +++ b/dev/man/api/index.html @@ -22,4 +22,4 @@ [inner_ccd_iter=1], [tol=0.0001], [ϵ=1e-6], [m=1], [robust=false], [verbose=false])

Solves the group-knockoff optimization problem based on Maximum Entropy objective. Users should call solve_s_group instead of this function.

Inputs

Optional inputs

source
Knockoffs.solve_group_mvr_hybridMethod
solve_group_mvr_hybrid(Σ, groups, [outer_iter=100], [inner_pca_iter=1],
     [inner_ccd_iter=1], [tol=0.0001], [ϵ=1e-6], [m=1], [robust=false], [verbose=false])

Solves the group-knockoff optimization problem based on MVR objective. Users should call solve_s_group instead of this function.

Inputs

  • Σ: Correlation matrix
  • groups: Group membership vector

Optional inputs

  • outer_iter: Maximum number of outer iterations. Each outer iteration will perform inner_pca_iter PCA updates inner_ccd_iter full optimization updates (default = 100).
  • inner_pca_iter: Number of full PCA updates before changing to fully general coordinate descent updates (default = 1)
  • inner_ccd_iter: Number of full general coordinate descent updates before changing to PCA updates (default = 1)
  • tol: convergence tolerance. Algorithm converges when abs((obj_new-obj_old)/obj_old) < tol OR when changes in S matrix falls below 1e-4
  • ϵ: tolerance added to the lower and upper bound, prevents numerical issues (default = 1e-6)
  • m: Number of knockoffs per variable (defaults 1)
  • robust: whether to use "robust" Cholesky updates. If robust=true, alg will be ~10x slower, only use this if robust=false causes cholesky updates to fail. (default false)
  • verbose: Whether to print intermediate results (default false)
source
Knockoffs.solve_group_sdp_hybridMethod
solve_group_sdp_hybrid(Σ, groups, [outer_iter=100], [inner_pca_iter=1],
     [inner_ccd_iter=1], [tol=0.0001], [ϵ=1e-6], [m=1], [robust=false], [verbose=false])

Solves the group-knockoff optimization problem based on SDP objective. Users should call solve_s_group instead of this function.

Inputs

  • Σ: Correlation matrix
  • groups: Group membership vector

Optional inputs

  • outer_iter: Maximum number of outer iterations. Each outer iteration will perform inner_pca_iter PCA updates inner_ccd_iter full optimization updates (default = 100).
  • inner_pca_iter: Number of full PCA updates before changing to fully general coordinate descent updates (default = 1)
  • inner_ccd_iter: Number of full general coordinate descent updates before changing to PCA updates (default = 1)
  • tol: convergence tolerance. Algorithm converges when abs((obj_new-obj_old)/obj_old) < tol OR when changes in S matrix falls below 1e-4
  • ϵ: tolerance added to the lower and upper bound, prevents numerical issues (default = 1e-6)
  • m: Number of knockoffs per variable (defaults 1)
  • robust: whether to use "robust" Cholesky updates. If robust=true, alg will be ~10x slower, only use this if robust=false causes cholesky updates to fail. (default false)
  • verbose: Whether to print intermediate results (default false)
source
Knockoffs.solve_max_entropyMethod
solve_max_entropy(Σ::AbstractMatrix)

Solves the maximum entropy knockoff problem for fixed-X and model-X knockoffs given correlation matrix Σ. Users should call solve_s instead of this function.

Reference

Algorithm 2.2 from Powerful Knockoffs via Minimizing Reconstructability: https://arxiv.org/pdf/2011.14625.pdf

Note

There is a typo in algorithm for computing ME knockoffs in "Powerful knockoffs via minimizing reconstructability" by Spector, Asher, and Lucas Janson (2020). In the supplemental section, equation 59, they needed to evaluate c_m = D^t_{-j,j}D^{-1}_{-j,-j}D_{-j,j}. They claimed the FANOK paper ("FANOK: KNOCKOFFS IN LINEAR TIME" by Askari et al. (2020)) implies that c_m = ||v_m||^2 where Lv_m = u. However, according to section A.1.2 of the FANOK paper, it seems like the actual update should be D^t_{-j,j}D^{-1}_{-j,-j}D_{-j,j} = ζ*||c_m||^2 / (ζ + ||c_m||^2) where ζ = 2Σ_{jj} - s_j.

source
Knockoffs.solve_sMethod
solve_s(Σ::Symmetric, method::Symbol; m=1, kwargs...)

Solves the vector s for generating knockoffs. Σ can be a general covariance matrix but it must be wrapped in the Symmetric keyword.

Inputs

  • Σ: A covariance matrix (one must wrap Symmetric(Σ) explicitly)
  • method: Can be one of the following
    • :mvr for minimum variance-based reconstructability knockoffs (alg 1 in ref 2)
    • :maxent for maximum entropy knockoffs (alg 2 in ref 2)
    • :equi for equi-distant knockoffs (eq 2.3 in ref 1),
    • :sdp for SDP knockoffs (eq 2.4 in ref 1)
    • :sdp_ccd fast SDP knockoffs via coordiate descent (alg 2.2 in ref 3)
  • m: Number of knockoffs per variable, defaults to 1.
  • kwargs: Extra arguments available for specific methods. For example, to use less stringent convergence tolerance for MVR knockoffs, specify tol = 0.001. For a list of available options, see solve_MVR, solve_max_entropy, solve_sdp_ccd, solve_SDP, or solve_equi

Reference

  1. "Controlling the false discovery rate via Knockoffs" by Barber and Candes (2015).
  2. "Powerful knockoffs via minimizing reconstructability" by Spector, Asher, and Lucas Janson (2020)
  3. "FANOK: Knockoffs in Linear Time" by Askari et al. (2020).
source
Knockoffs.solve_s_graphical_groupMethod
solve_s_graphical_group(Σ::Symmetric, groups::Vector{Int}, group_reps::Vector{Int},
-method; [m], [verbose])

Solves the group knockoff problem but the convex optimization problem only runs on the representatives. The non-representative variables are assumed to be independent by groups when conditioning on the reprensetatives.

Inputs

  • Σ: Symmetric p × p covariance matrix
  • groups: p dimensional vector of group membership
  • group_reps: Indices for the representatives.
  • method: Method for solving group knockoff problem
  • m: Number of knockoffs to generate per feature
  • verbose: Whether to print informative intermediate results
  • kwargs...: extra arguments for solve_s_group

Outputs

  • S: Matrix obtained from solving the optimization problem on the representatives.
  • D: A p × p (dense) matrix corresponding to the S matrix for both the representative and non-representative variables. Knockoff sampling should use this matrix. If the graphical conditional independent assumption is satisfied exactly, this matrix should be sparse, but it is always never sparse unless we use cond_indep_corr to force the covariance matrix to satisify it.
  • obj: Objective value for solving the optimization problem on the representatives.
source
Knockoffs.solve_s_groupMethod
solve_s_group(Σ, groups, method; [m=1], kwargs...)

Solves the group knockoff problem, returns block diagonal matrix S satisfying (m+1)/m*Σ - S ⪰ 0 where m is number of knockoffs per feature.

Inputs

  • Σ: A general covariance matrix wrapped by Symmetric keyword
  • groups: Vector of group membership, does not need to be contiguous
  • method: Method for constructing knockoffs. Options include
    • :maxent: (recommended) for fully general maximum entropy group knockoffs
    • :mvr: for fully general minimum variance-based reconstructability (MVR) group knockoffs
    • :equi: for equi-correlated knockoffs. This is the methodology proposed in Dai R, Barber R. The knockoff filter for FDR control in group-sparse and multitask regression. International conference on machine learning 2016 Jun 11 (pp. 1851-1859). PMLR.
    • :sdp: Fully general SDP group knockoffs based on coodinate descent
    • :sdp_subopt: Chooses each block S_{i} = γ_i * Σ_{ii}. This slightly generalizes the equi-correlated group knockoff idea proposed in Dai and Barber 2016.
    • :sdp_block: Fully general SDP group knockoffs where each block is solved exactly using an interior point solver.
  • m: Number of knockoffs per variable, defaults to 1.
  • kwargs: Extra arguments available for specific methods. For example, to use less stringent convergence tolerance, specify tol = 0.001. For a list of available options, see solve_group_mvr_hybrid, solve_group_max_entropy_hybrid, solve_group_sdp_hybrid, or solve_group_equi

Output

  • S: A matrix solved so that (m+1)/m*Σ - S ⪰ 0 and S ⪰ 0
  • γ: A vector that is only non-empty for equi and suboptimal knockoff constructions. They correspond to values of γ where S_{gg} = γΣ_{gg}. So for equi, the vector is length 1. For SDP, the vector has length equal to number of groups
  • obj: Final SDP/MVR/ME objective value given S. Equi-correlated group knockoffs and singleton (non-grouped knockoffs) returns 0 because they either no objective value or it is not necessary to evaluate the objectives

Warning

This function potentially permutes the columns/rows of Σ, and puts them back at the end. Thus one should NOT call solve_s_group on the same Σ simultaneously, e.g. in a multithreaded for loop. Permutation does not happen when groups are contiguous.

source
Knockoffs.solve_sdp_ccdMethod
solve_sdp_ccd(Σ::AbstractMatrix)

Solves the SDP problem for fixed-X and model-X knockoffs using coordinate descent, given correlation matrix Σ. Users should call solve_s instead of this function.

Reference

Algorithm 2.2 from "FANOK: Knockoffs in Linear Time" by Askari et al. (2020).

source
Knockoffs.thresholdMethod
threshold(w::AbstractVector, q::Number, [method=:knockoff], [m::Int=1])

Chooses a threshold τ > 0 by choosing τ to be one of the following τ = min{ t > 0 : {#j: w[j] ≤ -t} / {#j: w[j] ≥ t} ≤ q } (method=:knockoff) τ = min{ t > 0 : (1 + {#j: w[j] ≤ -t}) / {#j: w[j] ≥ t} ≤ q } (method=:knockoff)

Inputs

  • w: Vector of feature important statistics
  • q: target FDR (between 0 and 1)
  • method: either :knockoff or :knockoff_plus (default)
  • rej_bounds: Number of values of top W to consider (default = 10000)

Reference:

Equation 3.10 (method=:knockoff) or 3.11 (method=:knockoff_plus) of "Panning for Gold: Model-X Knockoffs for High-dimensional Controlled Variable Selection" by Candes, Fan, Janson, and Lv (2018)

source
Knockoffs.update_normalizing_constants!Method
update_normalizing_constants!(Q::AbstractMatrix{T}, q::AbstractVector{T})

Computes normalizing constants recursively using equation (5).

Inputs

  • Q: K × K × p array. Q[:, :, j] is a K × K matrix of transition probabilities for jth state, i.e. Q[l, k, j] = P(X{j} = k | X{j - 1} = l). The first transition matrix is not used.
  • q: K × 1 vector of initial probabilities

todo: efficiency

source
Knockoffs.KnockoffType

A Knockoff holds the original design matrix X, along with its knockoff Xko.

source
Knockoffs.KnockoffFilterType

A KnockoffFilter is essentially a Knockoff that has gone through a feature selection procedure, such as the Lasso. It stores, among other things, the final estimated parameters beta after applying the knockoff-filter procedure.

The debiased variable is a boolean indicating whether estimated effect size have been debiased with Lasso. The W vector stores the feature importance statistic that satisfies the flip coin property. tau is the knockoff threshold, which controls the empirical FDR at level q

source
Knockoffs.MarkovChainTableType

Genotype states are index pairs (ka, kb) where ka, kb is unordered haplotype 1 and 2. If there are K=5 haplotype motifs, then the 15 possible genotype states and their index are

(1, 1) = 1 (1, 2) = 2 (2, 2) = 6 (1, 3) = 3 (2, 3) = 7 (3, 3) = 10 (1, 4) = 4 (2, 4) = 8 (3, 4) = 11 (4, 4) = 13 (1, 5) = 5 (2, 5) = 9 (3, 5) = 12 (4, 5) = 14 (5, 5) = 15

source
+method; [m], [verbose])

Solves the group knockoff problem but the convex optimization problem only runs on the representatives. The non-representative variables are assumed to be independent by groups when conditioning on the reprensetatives.

Inputs

Outputs

source
Knockoffs.solve_s_groupMethod
solve_s_group(Σ, groups, method; [m=1], kwargs...)

Solves the group knockoff problem, returns block diagonal matrix S satisfying (m+1)/m*Σ - S ⪰ 0 where m is number of knockoffs per feature.

Inputs

  • Σ: A general covariance matrix wrapped by Symmetric keyword
  • groups: Vector of group membership, does not need to be contiguous
  • method: Method for constructing knockoffs. Options include
    • :maxent: (recommended) for fully general maximum entropy group knockoffs
    • :mvr: for fully general minimum variance-based reconstructability (MVR) group knockoffs
    • :equi: for equi-correlated knockoffs. This is the methodology proposed in Dai R, Barber R. The knockoff filter for FDR control in group-sparse and multitask regression. International conference on machine learning 2016 Jun 11 (pp. 1851-1859). PMLR.
    • :sdp: Fully general SDP group knockoffs based on coodinate descent
    • :sdp_subopt: Chooses each block S_{i} = γ_i * Σ_{ii}. This slightly generalizes the equi-correlated group knockoff idea proposed in Dai and Barber 2016.
    • :sdp_block: Fully general SDP group knockoffs where each block is solved exactly using an interior point solver.
  • m: Number of knockoffs per variable, defaults to 1.
  • kwargs: Extra arguments available for specific methods. For example, to use less stringent convergence tolerance, specify tol = 0.001. For a list of available options, see solve_group_mvr_hybrid, solve_group_max_entropy_hybrid, solve_group_sdp_hybrid, or solve_group_equi

Output

  • S: A matrix solved so that (m+1)/m*Σ - S ⪰ 0 and S ⪰ 0
  • γ: A vector that is only non-empty for equi and suboptimal knockoff constructions. They correspond to values of γ where S_{gg} = γΣ_{gg}. So for equi, the vector is length 1. For SDP, the vector has length equal to number of groups
  • obj: Final SDP/MVR/ME objective value given S. Equi-correlated group knockoffs and singleton (non-grouped knockoffs) returns 0 because they either no objective value or it is not necessary to evaluate the objectives

Warning

This function potentially permutes the columns/rows of Σ, and puts them back at the end. Thus one should NOT call solve_s_group on the same Σ simultaneously, e.g. in a multithreaded for loop. Permutation does not happen when groups are contiguous.

source
Knockoffs.solve_sdp_ccdMethod
solve_sdp_ccd(Σ::AbstractMatrix)

Solves the SDP problem for fixed-X and model-X knockoffs using coordinate descent, given correlation matrix Σ. Users should call solve_s instead of this function.

Reference

Algorithm 2.2 from "FANOK: Knockoffs in Linear Time" by Askari et al. (2020).

source
Knockoffs.thresholdMethod
threshold(w::AbstractVector, q::Number, [method=:knockoff], [m::Int=1])

Chooses a threshold τ > 0 by choosing τ to be one of the following τ = min{ t > 0 : {#j: w[j] ≤ -t} / {#j: w[j] ≥ t} ≤ q } (method=:knockoff) τ = min{ t > 0 : (1 + {#j: w[j] ≤ -t}) / {#j: w[j] ≥ t} ≤ q } (method=:knockoff)

Inputs

  • w: Vector of feature important statistics
  • q: target FDR (between 0 and 1)
  • method: either :knockoff or :knockoff_plus (default)
  • rej_bounds: Number of values of top W to consider (default = 10000)

Reference:

Equation 3.10 (method=:knockoff) or 3.11 (method=:knockoff_plus) of "Panning for Gold: Model-X Knockoffs for High-dimensional Controlled Variable Selection" by Candes, Fan, Janson, and Lv (2018)

source
Knockoffs.update_normalizing_constants!Method
update_normalizing_constants!(Q::AbstractMatrix{T}, q::AbstractVector{T})

Computes normalizing constants recursively using equation (5).

Inputs

  • Q: K × K × p array. Q[:, :, j] is a K × K matrix of transition probabilities for jth state, i.e. Q[l, k, j] = P(X{j} = k | X{j - 1} = l). The first transition matrix is not used.
  • q: K × 1 vector of initial probabilities

todo: efficiency

source
Knockoffs.KnockoffType

A Knockoff holds the original design matrix X, along with its knockoff Xko.

source
Knockoffs.KnockoffFilterType

A KnockoffFilter is essentially a Knockoff that has gone through a feature selection procedure, such as the Lasso. It stores, among other things, the final estimated parameters beta after applying the knockoff-filter procedure.

The debiased variable is a boolean indicating whether estimated effect size have been debiased with Lasso. The W vector stores the feature importance statistic that satisfies the flip coin property. tau is the knockoff threshold, which controls the empirical FDR at level q

source
Knockoffs.MarkovChainTableType

Genotype states are index pairs (ka, kb) where ka, kb is unordered haplotype 1 and 2. If there are K=5 haplotype motifs, then the 15 possible genotype states and their index are

(1, 1) = 1 (1, 2) = 2 (2, 2) = 6 (1, 3) = 3 (2, 3) = 7 (3, 3) = 10 (1, 4) = 4 (2, 4) = 8 (3, 4) = 11 (4, 4) = 13 (1, 5) = 5 (2, 5) = 9 (3, 5) = 12 (4, 5) = 14 (5, 5) = 15

source
diff --git a/dev/man/fastphase_hmm/fastphase_hmm/index.html b/dev/man/fastphase_hmm/fastphase_hmm/index.html index df27d39af..9ff1409f2 100644 --- a/dev/man/fastphase_hmm/fastphase_hmm/index.html +++ b/dev/man/fastphase_hmm/fastphase_hmm/index.html @@ -186,4 +186,4 @@ power_plot = plot(FDR, empirical_power, xlabel="Target FDR", ylabel="Empirical power", legend=false) fdr_plot = plot(FDR, empirical_fdr, xlabel="Target FDR", ylabel="Empirical FDR", legend=false) Plots.abline!(fdr_plot, 1, 0, line=:dash) -plot(power_plot, fdr_plot)

png

Observe that

+plot(power_plot, fdr_plot)

png

Observe that

diff --git a/dev/man/fixed/fixed/index.html b/dev/man/fixed/fixed/index.html index 2f8530b57..488d8c509 100644 --- a/dev/man/fixed/fixed/index.html +++ b/dev/man/fixed/fixed/index.html @@ -163,4 +163,4 @@ 0.617052 seconds (102 allocations: 22.303 MiB) 0.885246 seconds (835 allocations: 46.493 MiB) 0.536176 seconds (102 allocations: 22.303 MiB) - 0.872704 seconds (835 allocations: 46.127 MiB, 0.15% gc time)

png

Conclusion:

+ 0.872704 seconds (835 allocations: 46.127 MiB, 0.15% gc time)

png

Conclusion:

diff --git a/dev/man/ghost_knockoffs/index.html b/dev/man/ghost_knockoffs/index.html index 636a00c08..ef1a33e1e 100644 --- a/dev/man/ghost_knockoffs/index.html +++ b/dev/man/ghost_knockoffs/index.html @@ -1,2 +1,2 @@ -Ghost Knockoffs · Knockoffs.jl

Ghost Knockoffs

Support for Ghost Knockoffs (useful for analyzing GWAS summary statistics) has been removed. The functionality is now supported by an independent package GhostKnockoffGWAS

+Ghost Knockoffs · Knockoffs.jl

Ghost Knockoffs

Support for Ghost Knockoffs (useful for analyzing GWAS summary statistics) has been removed. The functionality is now supported by an independent package GhostKnockoffGWAS

diff --git a/dev/man/group/index.html b/dev/man/group/index.html index eba3f2b12..2ce27feb9 100644 --- a/dev/man/group/index.html +++ b/dev/man/group/index.html @@ -244,4 +244,4 @@ ME (standard) knockoffs have average group power 0.26999999999999996 ME (standard) knockoffs have average group FDR 0.02222222222222222 -ME (standard) knockoffs took average 7.8343821335 seconds

Conclusion

+ME (standard) knockoffs took average 7.8343821335 seconds

Conclusion

diff --git a/dev/man/hmm/hmm/index.html b/dev/man/hmm/hmm/index.html index fd430f6e7..ef1e25174 100644 --- a/dev/man/hmm/hmm/index.html +++ b/dev/man/hmm/hmm/index.html @@ -834,4 +834,4 @@ 1.76602 1.68237 -0.311698 1.20757 -12.1861 -7.7633 1.76602 -1.1888 -1.75985 1.20757 0.0817861 0.12776 -1.13249 1.68237 1.13646 -1.65623 0.0817861 0.12776 - 0.316766 -1.1888 -1.75985 -0.22433 0.0817861 0.12776
+ 0.316766 -1.1888 -1.75985 -0.22433 0.0817861 0.12776
diff --git a/dev/man/ipad/index.html b/dev/man/ipad/index.html index 98b222349..f1f697453 100644 --- a/dev/man/ipad/index.html +++ b/dev/man/ipad/index.html @@ -697,4 +697,4 @@ 3 │ IPAD-ve 0.432 0.543536 0.0462691 4 │ ME 0.292 0.0737265 6.38856 5 │ MVR 0.292 0.0795809 6.61936 - 6 │ SDP 0.346 0.110874 23.0262

Summary (when $X$ is simulated based on real data)

+ 6 │ SDP 0.346 0.110874 23.0262

Summary (when $X$ is simulated based on real data)

diff --git a/dev/man/knockoffscreen/knockoffscreen/index.html b/dev/man/knockoffscreen/knockoffscreen/index.html index dd9e0a449..5b5ec2e71 100644 --- a/dev/man/knockoffscreen/knockoffscreen/index.html +++ b/dev/man/knockoffscreen/knockoffscreen/index.html @@ -91,4 +91,4 @@ push!(r1, cor(@view(X[:, j]), @view(X[:, j]))) push!(r2, cor(@view(X[:, j]), @view(X̃[:, j]))) end -histogram(r2, legend=false, xlabel="cor(Xj, X̃j)", ylabel="count")

png

+histogram(r2, legend=false, xlabel="cor(Xj, X̃j)", ylabel="count")

png

diff --git a/dev/man/modelX/modelX/index.html b/dev/man/modelX/modelX/index.html index 35c625fcf..67289df1f 100644 --- a/dev/man/modelX/modelX/index.html +++ b/dev/man/modelX/modelX/index.html @@ -245,4 +245,4 @@ 3.577488 seconds (907 allocations: 284.040 MiB, 0.17% gc time) 3.614974 seconds (907 allocations: 284.040 MiB, 0.18% gc time) 3.567592 seconds (907 allocations: 284.040 MiB, 0.19% gc time) - 3.588125 seconds (907 allocations: 284.040 MiB, 0.13% gc time)

png

Conclusion:

+ 3.588125 seconds (907 allocations: 284.040 MiB, 0.13% gc time)

png

Conclusion:

diff --git a/dev/man/shapeit_hmm/index.html b/dev/man/shapeit_hmm/index.html index ae8675bc7..ffe2a1256 100644 --- a/dev/man/shapeit_hmm/index.html +++ b/dev/man/shapeit_hmm/index.html @@ -722,4 +722,4 @@ 1.76602 1.68237 -0.311698 1.20757 -12.1861 -7.7633 1.76602 -1.1888 -1.75985 1.20757 0.0817861 0.12776 -1.13249 1.68237 1.13646 -1.65623 0.0817861 0.12776 - 0.316766 -1.1888 -1.75985 -0.22433 0.0817861 0.12776
+ 0.316766 -1.1888 -1.75985 -0.22433 0.0817861 0.12776