{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/normalizing-flows-for-knockoff-free","title":"Normalizing Flows for Knockoff-free Controlled Feature Selection","arxiv_id":"2106.01528","date":"2021-06-03","proceeding":null,"authors":["Derek Hansen","Brian Manzo","Jeffrey Regier"],"abstract":"Controlled feature selection aims to discover the features a response depends on while limiting the false discovery rate (FDR) to a predefined level. Recently, multiple deep-learning-based methods have been proposed to perform controlled feature selection through the Model-X knockoff framework. We demonstrate, however, that these methods often fail to control the FDR for two reasons. First, these methods often learn inaccurate models of features. Second, the \"swap\" property, which is required for knockoffs to be valid, is often not well enforced. We propose a new procedure called FlowSelect to perform controlled feature selection that does not suffer from either of these two problems. To more accurately model the features, FlowSelect uses normalizing flows, the state-of-the-art method for density estimation. Instead of enforcing the \"swap\" property, FlowSelect uses a novel MCMC-based procedure to calculate p-values for each feature directly. Asymptotically, FlowSelect computes valid p-values. Empirically, FlowSelect consistently controls the FDR on both synthetic and semi-synthetic benchmarks, whereas competing knockoff-based approaches do not. FlowSelect also demonstrates greater power on these benchmarks. Additionally, FlowSelect correctly infers the genetic variants associated with specific soybean traits from GWAS data.","url_abs":"https://arxiv.org/abs/2106.01528v3","url_pdf":"https://arxiv.org/pdf/2106.01528v3.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"normalizing-flows-for-knockoff-free","repo_url":"https://github.com/dereklhansen/flowselect","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok"}}],"tasks":[{"task_slug":"density-estimation","task_name":"Density Estimation"},{"task_slug":"feature-selection","task_name":"feature selection"},{"task_slug":null,"task_name":"valid"}],"methods":[{"method_slug":"feature-selection","method_name":"Feature Selection"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2106.01528","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2106.01528"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"provenance":"deterministic:regex_extraction","url":"https://github.com/rajesh-lab/ddlk","reach":{"status":"ok","spdx":"AGPL-3.0"}},{"provenance":"deterministic:regex_extraction","url":"https://github.com/msesia/deepknockoffs","reach":null},{"provenance":"deterministic:regex_extraction","url":"https://github.com/tansey/hrt","reach":null},{"provenance":"deterministic:regex_extraction","url":"https://github.com/firmai/tsgan","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/dereklhansen/flowselect","reach":{"status":"ok"}}],"summary":{"ran":9,"ran_draft_wrong":7,"ran_fixture":6,"ran_violates":1,"ran_honours":2,"unverified":8},"by_repo_kind":{"found_in_text":{"samples":33,"ran":25,"repositories":3}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":11,"samples":[{"code_sha256_prefix":"5c388071175a785e","entry":"BootstrapConditionalModel","repo":"tansey/hrt","repo_kind":"found_in_text","path":"pyhrt/hrt.py","file_url":"https://github.com/tansey/hrt/blob/HEAD/pyhrt/hrt.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"5c388071175a785e"}},{"code_sha256_prefix":"db6d9a8444f8edbd","entry":"CrossValidationSampler","repo":"tansey/hrt","repo_kind":"found_in_text","path":"pyhrt/hrt.py","file_url":"https://github.com/tansey/hrt/blob/HEAD/pyhrt/hrt.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"db6d9a8444f8edbd"}},{"code_sha256_prefix":"befe2dc54f127a04","entry":"DiscreteBootstrapConditionalModel","repo":"tansey/hrt","repo_kind":"found_in_text","path":"pyhrt/hrt.py","file_url":"https://github.com/tansey/hrt/blob/HEAD/pyhrt/hrt.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"befe2dc54f127a04"}},{"code_sha256_prefix":"aa9395158d2da40a","entry":"DiscreteClassifierNetwork","repo":"tansey/hrt","repo_kind":"found_in_text","path":"pyhrt/hrt.py","file_url":"https://github.com/tansey/hrt/blob/HEAD/pyhrt/hrt.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"aa9395158d2da40a"}},{"code_sha256_prefix":"d01652f4c7968e16","entry":"GaussianMixtureModel","repo":"tansey/hrt","repo_kind":"found_in_text","path":"pyhrt/hrt.py","file_url":"https://github.com/tansey/hrt/blob/HEAD/pyhrt/hrt.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"d01652f4c7968e16"}},{"code_sha256_prefix":"02fd42887a52a943","entry":"HoldoutSampler","repo":"tansey/hrt","repo_kind":"found_in_text","path":"pyhrt/hrt.py","file_url":"https://github.com/tansey/hrt/blob/HEAD/pyhrt/hrt.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"02fd42887a52a943"}},{"code_sha256_prefix":"cbe098cac4a6fd68","entry":"MixtureDensityNetwork","repo":"tansey/hrt","repo_kind":"found_in_text","path":"pyhrt/hrt.py","file_url":"https://github.com/tansey/hrt/blob/HEAD/pyhrt/hrt.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"cbe098cac4a6fd68"}},{"code_sha256_prefix":"e117979a67e9dbec","entry":"MultinomialModel","repo":"tansey/hrt","repo_kind":"found_in_text","path":"pyhrt/hrt.py","file_url":"https://github.com/tansey/hrt/blob/HEAD/pyhrt/hrt.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"e117979a67e9dbec"}},{"code_sha256_prefix":"44a37c78381afc80","entry":"Net","repo":"msesia/deepknockoffs","repo_kind":"found_in_text","path":"DeepKnockoffs/DeepKnockoffs/machine.py","file_url":"https://github.com/msesia/deepknockoffs/blob/HEAD/DeepKnockoffs/DeepKnockoffs/machine.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":"deterministic","behaviour_fingerprint":true,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"44a37c78381afc80"}},{"code_sha256_prefix":"48dd34f19c1766db","entry":"_mix_rbf_kernel","repo":"msesia/deepknockoffs","repo_kind":"found_in_text","path":"DeepKnockoffs/DeepKnockoffs/machine.py","file_url":"https://github.com/msesia/deepknockoffs/blob/HEAD/DeepKnockoffs/DeepKnockoffs/machine.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":true,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"48dd34f19c1766db"}},{"code_sha256_prefix":"ce10f353f05f5250","entry":"_mmd2","repo":"msesia/deepknockoffs","repo_kind":"found_in_text","path":"DeepKnockoffs/DeepKnockoffs/machine.py","file_url":"https://github.com/msesia/deepknockoffs/blob/HEAD/DeepKnockoffs/DeepKnockoffs/machine.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"ce10f353f05f5250"}},{"code_sha256_prefix":"ff0fb920ccf5b064","entry":"batches","repo":"tansey/hrt","repo_kind":"found_in_text","path":"pyhrt/hrt.py","file_url":"https://github.com/tansey/hrt/blob/HEAD/pyhrt/hrt.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"ff0fb920ccf5b064"}},{"code_sha256_prefix":"2e39bc098a25ff99","entry":"covariance_diff_biased","repo":"msesia/deepknockoffs","repo_kind":"found_in_text","path":"DeepKnockoffs/DeepKnockoffs/machine.py","file_url":"https://github.com/msesia/deepknockoffs/blob/HEAD/DeepKnockoffs/DeepKnockoffs/machine.py","link_basis":"first_harvest_node","language":"python","status":"ran_violates","verification_level":1,"contract_check":"VIOLATES","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"2e39bc098a25ff99"}},{"code_sha256_prefix":"d9996f0a1157eaa1","entry":"create_folds","repo":"tansey/hrt","repo_kind":"found_in_text","path":"pyhrt/hrt.py","file_url":"https://github.com/tansey/hrt/blob/HEAD/pyhrt/hrt.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"d9996f0a1157eaa1"}},{"code_sha256_prefix":"a10785afdd1943d9","entry":"gen_batches","repo":"msesia/deepknockoffs","repo_kind":"found_in_text","path":"DeepKnockoffs/DeepKnockoffs/machine.py","file_url":"https://github.com/msesia/deepknockoffs/blob/HEAD/DeepKnockoffs/DeepKnockoffs/machine.py","link_basis":"first_harvest_node","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"a10785afdd1943d9"}},{"code_sha256_prefix":"a929f8158e0f37f5","entry":"ks_test","repo":"tansey/hrt","repo_kind":"found_in_text","path":"pyhrt/hrt.py","file_url":"https://github.com/tansey/hrt/blob/HEAD/pyhrt/hrt.py","link_basis":"first_harvest_node","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"a929f8158e0f37f5"}},{"code_sha256_prefix":"c73bee7360661346","entry":"logsumexp","repo":"tansey/hrt","repo_kind":"found_in_text","path":"pyhrt/hrt.py","file_url":"https://github.com/tansey/hrt/blob/HEAD/pyhrt/hrt.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"c73bee7360661346"}},{"code_sha256_prefix":"db0aefbe8dbc29a8","entry":"matrix_str","repo":"tansey/hrt","repo_kind":"found_in_text","path":"pyhrt/hrt.py","file_url":"https://github.com/tansey/hrt/blob/HEAD/pyhrt/hrt.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"db0aefbe8dbc29a8"}},{"code_sha256_prefix":"661038d37be136e9","entry":"mix_rbf_mmd2","repo":"msesia/deepknockoffs","repo_kind":"found_in_text","path":"DeepKnockoffs/DeepKnockoffs/machine.py","file_url":"https://github.com/msesia/deepknockoffs/blob/HEAD/DeepKnockoffs/DeepKnockoffs/machine.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"661038d37be136e9"}},{"code_sha256_prefix":"6817b2d2b5a8ba50","entry":"mix_rbf_mmd2_loss","repo":"msesia/deepknockoffs","repo_kind":"found_in_text","path":"DeepKnockoffs/DeepKnockoffs/machine.py","file_url":"https://github.com/msesia/deepknockoffs/blob/HEAD/DeepKnockoffs/DeepKnockoffs/machine.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"6817b2d2b5a8ba50"}},{"code_sha256_prefix":"e1d9c760ce9d1c42","entry":"norm","repo":"msesia/deepknockoffs","repo_kind":"found_in_text","path":"DeepKnockoffs/DeepKnockoffs/machine.py","file_url":"https://github.com/msesia/deepknockoffs/blob/HEAD/DeepKnockoffs/DeepKnockoffs/machine.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"e1d9c760ce9d1c42"}},{"code_sha256_prefix":"ab49a597c1aff75c","entry":"pretty_str","repo":"tansey/hrt","repo_kind":"found_in_text","path":"pyhrt/hrt.py","file_url":"https://github.com/tansey/hrt/blob/HEAD/pyhrt/hrt.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"ab49a597c1aff75c"}},{"code_sha256_prefix":"45caf0e3cf7297ea","entry":"sample_holdout_dists","repo":"tansey/hrt","repo_kind":"found_in_text","path":"pyhrt/hrt.py","file_url":"https://github.com/tansey/hrt/blob/HEAD/pyhrt/hrt.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"45caf0e3cf7297ea"}},{"code_sha256_prefix":"b4c04d0603c1c2db","entry":"tv_test","repo":"tansey/hrt","repo_kind":"found_in_text","path":"pyhrt/hrt.py","file_url":"https://github.com/tansey/hrt/blob/HEAD/pyhrt/hrt.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"b4c04d0603c1c2db"}},{"code_sha256_prefix":"e69ab4938b9c4680","entry":"vector_str","repo":"tansey/hrt","repo_kind":"found_in_text","path":"pyhrt/hrt.py","file_url":"https://github.com/tansey/hrt/blob/HEAD/pyhrt/hrt.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"e69ab4938b9c4680"}},{"code_sha256_prefix":"a78618a3a2bcc9c2","entry":"KnockoffGAN","repo":"firmai/tsgan","repo_kind":"found_in_text","path":"alg/knockoffgan/KnockoffGAN.py","file_url":"https://github.com/firmai/tsgan/blob/HEAD/alg/knockoffgan/KnockoffGAN.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"a78618a3a2bcc9c2"}},{"code_sha256_prefix":"e61b4c8c3d64412e","entry":"KnockoffMachine","repo":"msesia/deepknockoffs","repo_kind":"found_in_text","path":"DeepKnockoffs/DeepKnockoffs/machine.py","file_url":"https://github.com/msesia/deepknockoffs/blob/HEAD/DeepKnockoffs/DeepKnockoffs/machine.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"e61b4c8c3d64412e"}},{"code_sha256_prefix":"c7dde2181bd90c3f","entry":"calibrate_continuous","repo":"tansey/hrt","repo_kind":"found_in_text","path":"pyhrt/hrt.py","file_url":"https://github.com/tansey/hrt/blob/HEAD/pyhrt/hrt.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"c7dde2181bd90c3f"}},{"code_sha256_prefix":"450d25e7824a48dc","entry":"calibrate_discrete","repo":"tansey/hrt","repo_kind":"found_in_text","path":"pyhrt/hrt.py","file_url":"https://github.com/tansey/hrt/blob/HEAD/pyhrt/hrt.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"450d25e7824a48dc"}},{"code_sha256_prefix":"0cddd24f3b7ed39a","entry":"fit_classifier","repo":"tansey/hrt","repo_kind":"found_in_text","path":"pyhrt/hrt.py","file_url":"https://github.com/tansey/hrt/blob/HEAD/pyhrt/hrt.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"0cddd24f3b7ed39a"}},{"code_sha256_prefix":"4d0755e27691fb59","entry":"fit_mdn","repo":"tansey/hrt","repo_kind":"found_in_text","path":"pyhrt/hrt.py","file_url":"https://github.com/tansey/hrt/blob/HEAD/pyhrt/hrt.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"4d0755e27691fb59"}},{"code_sha256_prefix":"2e296d67a46288e5","entry":"hrt","repo":"tansey/hrt","repo_kind":"found_in_text","path":"pyhrt/hrt.py","file_url":"https://github.com/tansey/hrt/blob/HEAD/pyhrt/hrt.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"2e296d67a46288e5"}},{"code_sha256_prefix":"96f1fefe68df3674","entry":"save_checkpoint","repo":"msesia/deepknockoffs","repo_kind":"found_in_text","path":"DeepKnockoffs/DeepKnockoffs/machine.py","file_url":"https://github.com/msesia/deepknockoffs/blob/HEAD/DeepKnockoffs/DeepKnockoffs/machine.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"96f1fefe68df3674"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}