Documentation | Build Status | Code Coverage |
---|---|---|
This is a Julia implementation of the knockoff filter, taking many inspirations from the MATLAB/R implementation of knockoff-filter, python implementation of knockpy, and also the C++/R code of knockoffgwas. 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.
For more information, please see the main webpage
Download and install Julia. Within Julia, copy and paste the following:
using Pkg
Pkg.add("Knockoffs")
This package supports Julia v1.8
+.
We provide direct wrappers for Knockoffs.jl
in both R and Python via the packages
knockoffsr
: https://github.com/biona001/knockoffsrknockoffspy
: https://github.com/biona001/knockoffspy
- Fast coordinate descent algorithms for MVR, ME, and SDP model-X knockoffs
- Grouped MVR/ME/SDP knockoffs for improved power when there are highly correlated features. We also provide a representative group knockoff approach, based on graphical models, which is much more computationally efficient and empirically has superior power.
- Preliminary support for many other kinds of knockoffs (ghost, HMM, IPAD...etc), see documentation.
- Built-in functions to compute feature importance scores via Lasso/marginal regressions
If you use Knockoffs.jl
in a research paper, please cite our paper. Scripts to reproduce the results featured in our paper can be found here.
Please open an issue if you find a bug or have feature requests. Feature requests are welcomed!
If you want to make contributions to this package, you should follow this workflow:
- Fork this repository
- Make a new branch on your fork, named after whatever changes you'll be making
- Apply your code changes to the branch on your fork
- When you're done, submit a PR to
Knockoffs.jl
to merge your fork into master branch.