From 9e7a5239309e5b2fce6464a9fc922f559526ce91 Mon Sep 17 00:00:00 2001 From: Daniel Nachun Date: Wed, 21 Oct 2026 23:46:23 -0400 Subject: [PATCH 1/2] add support for LD matrix and use better genotype readers --- .github/recipe/recipe.yaml | 16 +- DESCRIPTION | 16 +- NAMESPACE | 63 +- R/AllClasses.R | 117 +- R/AllGenerics.R | 389 +- R/AnnotationMatrix.R | 2 +- R/ColocBoostResult.R | 16 +- R/ColocResult.R | 41 +- R/CtwasResult.R | 2 +- R/GenotypeDosageSeed.R | 383 ++ R/GenotypeHandle.R | 281 +- R/GenotypeMixture.R | 515 +++ R/GwasFineMappingResult.R | 16 +- R/H2Estimate.R | 11 +- R/JointGroup.R | 49 +- R/LdData.R | 723 ---- R/LdEigen.R | 147 +- R/LdMatrix.R | 652 ++++ R/LdScore.R | 256 +- R/LdStatistic.R | 425 ++- R/MethodOptions.R | 14 +- R/MethodParam.R | 27 +- R/MultiStudyQtlDataset.R | 21 +- R/QtlDataset.R | 165 +- R/QtlFineMappingResult.R | 38 +- R/RangedTupleList.R | 45 +- R/causalInferencePipeline.R | 196 +- R/colocPipeline.R | 177 +- R/colocboostPipeline.R | 441 ++- R/cpp11.R | 56 +- R/crossValidation.R | 89 +- R/ctwasPipeline.R | 631 ++-- R/ctwasWrapper.R | 31 + R/enloc.R | 8 +- R/exampleData.R | 43 +- R/fineMappingPipeline.R | 1302 +++---- R/fineMappingRow.R | 92 +- R/fineMappingWrappers.R | 417 ++- R/genotypeIo.R | 1834 +++++++--- R/gwasSumStats.R | 59 +- R/h2Annotations.R | 5 +- R/h2EstimationWrappers.R | 952 ++--- R/jointEngine.R | 470 ++- R/jointSpecification.R | 1599 +++------ R/ld.R | 3062 +++++++--------- R/manifestLoaders.R | 514 +-- R/mashPipeline.R | 94 +- R/mashWrapper.R | 36 +- R/pvalCombineWrappers.R | 90 +- R/qtlAssociationPostprocess.R | 16 +- R/qtlEnrichmentPipeline.R | 91 +- R/qtlSumStats.R | 49 +- R/regularizedRegressionWrappers.R | 1291 ++++--- R/relatednessQc.R | 4 +- R/resultReaders.R | 27 +- R/resultWriters.R | 223 +- R/sumstatsQc.R | 1980 ++++++----- R/tupleSelectors.R | 283 +- R/twasWeights.R | 171 +- R/twasWeightsPipeline.R | 1349 +++---- R/variantId.R | 19 +- README.md | 5 +- _pkgdown.yml | 32 +- data/colocboostResultExample.rda | Bin 2964 -> 2968 bytes data/ctwasEstExample.rda | Bin 249840 -> 249636 bytes data/ctwasFinemapExample.rda | Bin 250348 -> 250524 bytes data/ctwasInputsExample.rda | Bin 249768 -> 248948 bytes data/ctwasWeightsExample.rda | Bin 5924 -> 6528 bytes data/fsusieFineMappingExample.rda | Bin 22176 -> 22180 bytes data/gwasFineMappingExample.rda | Bin 650796 -> 651664 bytes data/gwasFineMappingLbfExample.rda | Bin 41348 -> 41356 bytes data/gwasSumStatsS4Example.rda | Bin 7448 -> 7344 bytes data/ldEigenExample.rda | Bin 963288 -> 973656 bytes data/ldScoreExample.rda | Bin 552068 -> 583572 bytes data/multiStudyQtlDatasetExample.rda | Bin 7456 -> 7172 bytes data/mvsusieFineMappingExample.rda | Bin 118008 -> 117592 bytes data/qtlDatasetExample.rda | Bin 5888 -> 5640 bytes data/qtlFineMappingExample.rda | Bin 212452 -> 211696 bytes data/qtlFineMappingLbfExample.rda | Bin 79192 -> 79176 bytes data/qtlFineMappingPairedExample.rda | Bin 19332 -> 19336 bytes data/qtlSumStatsExample.rda | Bin 8404 -> 8304 bytes data/qtlSumStatsMulticontextExample.rda | Bin 16488 -> 16384 bytes data/twasWeightsExample.rda | Bin 10104 -> 10132 bytes .../chr22/protocol_example.LD.chr22.afreq | 352 +- inst/scripts/build_bgen_fixtures.R | 45 + inst/scripts/build_ctwas_examples.R | 55 +- inst/scripts/build_examples.R | 76 +- inst/scripts/build_h2_examples.R | 117 +- inst/scripts/build_h2_parity_z.R | 80 + inst/scripts/build_sldsc_upstream_z.R | 69 - inst/scripts/prepare_example_data.R | 31 +- .../prepare_paired_finemapping_example.R | 2 +- man/ColocBoostResult.Rd | 4 +- man/ColocResult-class.Rd | 2 +- man/ColocResult.Rd | 4 +- man/ColocResultBase-class.Rd | 9 +- man/CredibleSetParam.Rd | 28 +- man/CrossValidationParam.Rd | 21 +- man/FineMappingResultBase-class.Rd | 11 +- man/GenotypeDosageSeed-class.Rd | 51 + man/GenotypeHandle-class.Rd | 65 +- man/GenotypeMixture-class.Rd | 47 + man/GenotypeMixture-constructor.Rd | 38 + man/GwasFineMappingParam.Rd | 4 +- man/GwasFineMappingResult.Rd | 6 +- man/GwasSumStats-class.Rd | 2 +- man/GwasSumStats.Rd | 20 +- man/LdData-class.Rd | 77 - man/LdData.Rd | 59 - man/LdEigen-class.Rd | 11 +- man/LdMatrix-class.Rd | 54 + man/LdMatrix-constructor.Rd | 65 + man/LdScore-class.Rd | 13 +- man/LdScore.Rd | 3 +- man/LdStatistic-class.Rd | 12 + man/PanelFilterParam.Rd | 5 +- man/PoolrOptions.Rd | 7 +- man/QtlDataset-class.Rd | 2 +- man/QtlFineMappingResult.Rd | 14 +- man/QtlSumStats-class.Rd | 2 +- man/QtlSumStats.Rd | 13 +- man/RaissParam.Rd | 25 +- man/SumStatsBase-class.Rd | 13 +- man/TwasWeights-class.Rd | 9 +- man/TwasWeights.Rd | 4 +- man/af.Rd | 23 +- man/assembleCtwasInputs.Rd | 7 +- man/blockMetadata.Rd | 31 - man/bplapplyBlocks.Rd | 24 - man/buildLdEigen.Rd | 57 +- man/buildLdScore.Rd | 77 +- man/causalInferencePipeline.Rd | 37 +- man/checkGenomeBuild.Rd | 6 +- man/colocPipeline.Rd | 32 +- man/colocViews.Rd | 2 +- man/colocboostPipeline.Rd | 22 +- man/combineFineMappingResults.Rd | 6 +- man/combineGwasSumStats.Rd | 17 +- man/combinePValues.Rd | 7 +- man/combineQtlSumStats.Rd | 12 +- man/combineTwasWeights.Rd | 6 +- man/computeCsCorrelation.Rd | 4 +- man/computeLd.Rd | 7 +- man/computeLdScores.Rd | 4 +- man/contexts.Rd | 10 +- man/credibleSetSummary.Rd | 2 +- man/credibleSets.Rd | 2 +- man/ctwasInputsExample.Rd | 5 +- man/ctwasPipeline.Rd | 54 +- man/cvResult.Rd | 6 +- man/dentist.Rd | 16 +- man/dentistSingleWindow.Rd | 12 +- man/dot-annotDetectFormat.Rd | 5 +- man/dot-penalizedRssWeights.Rd | 12 +- man/dot-plinkStem.Rd | 18 - man/dprWeights.Rd | 3 +- man/eigenList.Rd | 12 +- man/estCtwasGroupPriors.Rd | 6 +- man/estimateH2.Rd | 2 +- man/exportToBed.Rd | 12 +- man/exportToVcf.Rd | 9 +- man/extractCsInfo.Rd | 4 +- man/fineMappingPipeline.Rd | 128 +- man/fineMappingResult.Rd | 9 +- man/finemapCtwasRegions.Rd | 5 +- man/formatFinemappingOutput.Rd | 2 +- man/fsusieAffectedRegions.Rd | 2 +- man/fsusieCredibleBand.Rd | 2 +- man/fsusieTraitEffects.Rd | 2 +- man/genomicRegion.Rd | 2 +- man/genotypeFormat.Rd | 2 +- man/genotypeHandle.Rd | 19 +- man/genotypes.Rd | 12 +- man/gwasFineMappingExample.Rd | 4 +- man/gwasSumStatsS4Example.Rd | 2 +- man/hasGenotypes.Rd | 31 - man/jackknifeSe.Rd | 20 - man/l0learnRssWeights.Rd | 44 +- man/lassosumRss.Rd | 19 +- man/lassosumRssWeights.Rd | 43 +- man/lbf.Rd | 2 +- man/ldEigenExample.Rd | 20 +- man/ldMatrix.Rd | 23 +- man/ldMatrixList.Rd | 10 +- man/ldMismatchQc.Rd | 6 +- man/ldPanelNSamples.Rd | 19 +- man/ldPruneByCorrelation.Rd | 17 +- man/ldReference.Rd | 49 + man/ldScoreExample.Rd | 8 +- man/ldSketch.Rd | 41 - man/learnTwasWeights.Rd | 7 +- man/loadGenotypeRegion.Rd | 12 +- man/loadGwasSumStatsFromManifest.Rd | 24 +- man/loadLdMatrix.Rd | 98 - man/loadMultiStudyQtlDatasetFromManifest.Rd | 4 +- man/loadQtlSumStatsFromManifest.Rd | 10 +- man/marginalEffects.Rd | 2 +- man/mashInput.Rd | 10 +- man/mcpRssWeights.Rd | 44 +- man/mergeSusieCs.Rd | 2 +- man/methodNames.Rd | 4 +- man/mixtureWeights.Rd | 30 +- man/mrashRssWeights.Rd | 58 +- man/mrashWeights.Rd | 20 +- man/mrmashRssWeights.Rd | 20 +- man/mvsusieRssWeights.Rd | 23 +- man/nSamples.Rd | 15 +- man/pecotmr-genotype-io.Rd | 9 +- man/pecotmr-h2-gldsc.Rd | 11 +- man/pecotmr-h2-sldsc.Rd | 23 +- man/penalizedRss.Rd | 20 +- man/pip.Rd | 8 +- man/postprocessFinemappingFits.Rd | 2 +- man/prsCs.Rd | 47 +- man/prsCsWeights.Rd | 51 +- man/qtlEnrichment.Rd | 2 +- man/qtlEnrichmentPipeline.Rd | 27 +- man/qtlSumStatsExample.Rd | 2 +- man/qtlSumStatsFromBetaMatrix.Rd | 6 +- man/qtlSumStatsFromZMatrix.Rd | 6 +- man/raiss.Rd | 45 +- man/readGenotypes.Rd | 44 +- man/refPanel.Rd | 31 - man/refVariantInfo.Rd | 9 +- man/residualizedGenotypes.Rd | 4 +- man/residualizedPhenotypes.Rd | 4 +- man/resolveWeights.Rd | 11 +- man/scadRssWeights.Rd | 44 +- man/sdpr.Rd | 52 +- man/sdprWeights.Rd | 47 +- man/show-methods.Rd | 15 +- man/shrinkLd.Rd | 25 - man/slalom.Rd | 15 +- man/snpIdx.Rd | 31 - man/sumStats.Rd | 10 +- man/sumStatsDataFrame.Rd | 26 +- man/summaryStatsQc.Rd | 45 +- man/susieAshRssWeights.Rd | 11 +- man/susieFit.Rd | 3 +- man/susieInfRssWeights.Rd | 11 +- man/susieResult.Rd | 13 +- man/susieRssWeights.Rd | 11 +- man/topLoci.Rd | 2 +- man/traitNames.Rd | 8 +- man/traitPosition.Rd | 14 +- man/twasWeightsPipeline.Rd | 169 +- man/twasZ.Rd | 11 +- man/varY.Rd | 10 +- man/variantIds.Rd | 16 +- man/variantInfo.Rd | 30 - pixi.toml | 8 +- src/bgen.cpp | 220 ++ src/cpp11.cpp | 114 +- src/dentist_iterative_impute.cpp | 182 +- src/lassosum_rss.cpp | 110 +- src/ld_prune.cpp | 75 + src/penalized_rss.cpp | 169 +- src/prscs_mcmc.cpp | 103 +- src/prscs_mcmc.h | 111 +- src/qtl_enrichment.cpp | 2 +- src/rss_ld.h | 89 + src/sdpr.cpp | 135 +- src/sdpr_mcmc.cpp | 445 ++- src/sdpr_mcmc.h | 251 +- src/vcf_gt.cpp | 69 + tests/testthat/helper-bgen.R | 288 ++ tests/testthat/helper-cfgForwarding.R | 54 + tests/testthat/helper-h2Classes.R | 139 +- tests/testthat/helper-rrwFixtures.R | 27 +- tests/testthat/helper-s4Constructors.R | 4 +- tests/testthat/helper-showMethods.R | 4 +- tests/testthat/helper-vcf.R | 125 + tests/testthat/test_AllClasses.R | 39 +- tests/testthat/test_ColocResult.R | 3 +- tests/testthat/test_GenotypeDosageSeed.R | 303 ++ tests/testthat/test_GenotypeMixture.R | 301 ++ tests/testthat/test_GwasFineMappingResult.R | 20 +- tests/testthat/test_GwasSumStats.R | 48 +- tests/testthat/test_H2Estimate.R | 38 + tests/testthat/test_JointGroup.R | 42 +- tests/testthat/test_LdEigen.R | 66 +- tests/testthat/test_LdMatrix.R | 232 ++ tests/testthat/test_LdScore.R | 154 +- tests/testthat/test_LdStatistic.R | 340 +- tests/testthat/test_MethodParam.R | 203 ++ tests/testthat/test_MultiStudyQtlDataset.R | 10 +- tests/testthat/test_QtlDataset.R | 127 +- tests/testthat/test_QtlFineMappingResult.R | 18 +- tests/testthat/test_RangedTupleList.R | 32 +- tests/testthat/test_causalInferencePipeline.R | 213 +- tests/testthat/test_colocPipeline.R | 50 +- tests/testthat/test_colocboostPipeline.R | 148 +- tests/testthat/test_cpp11.R | 25 +- tests/testthat/test_crossValidation.R | 41 + tests/testthat/test_ctwasPipeline.R | 308 +- tests/testthat/test_ctwasWrapper.R | 54 +- tests/testthat/test_data/bgen/LICENSE_1_0.txt | 24 + tests/testthat/test_data/bgen/complex.bgen | Bin 0 -> 835 bytes .../testthat/test_data/bgen/complex.bgen.bgi | Bin 0 -> 3072 bytes tests/testthat/test_data/bgen/complex.sample | 6 + tests/testthat/test_data/bgen/complex.vcf | 15 + tests/testthat/test_data/bgen/haplotypes.bgen | Bin 0 -> 300 bytes .../test_data/bgen/haplotypes.bgen.bgi | Bin 0 -> 3072 bytes tests/testthat/test_data/bgen/haplotypes.haps | 4 + tests/testthat/test_data/h2ParityLd.rds | Bin 0 -> 435588 bytes .../{sldscUpstreamZ.rds => h2ParityZ.rds} | Bin tests/testthat/test_exampleData.R | 2 +- tests/testthat/test_fineMappingPipeline.R | 479 ++- tests/testthat/test_fineMappingWrappers.R | 306 +- tests/testthat/test_genotypeHandle.R | 390 +- tests/testthat/test_genotypeIo.R | 1374 ++++--- tests/testthat/test_h2EstimationWrappers.R | 586 +-- tests/testthat/test_jointEngine.R | 393 +- tests/testthat/test_jointSpecification.R | 621 +--- tests/testthat/test_ld.R | 3154 ++++------------- tests/testthat/test_ldData.R | 1048 ------ tests/testthat/test_manifestLoaders.R | 244 +- tests/testthat/test_mashPipeline.R | 78 +- tests/testthat/test_pvalCombineWrappers.R | 59 +- tests/testthat/test_qtlEnrichmentPipeline.R | 54 +- tests/testthat/test_qtlSumStats.R | 62 +- .../test_regularizedRegressionWrappers.R | 448 ++- tests/testthat/test_resultWriters.R | 216 +- tests/testthat/test_rrDispatch.R | 124 +- tests/testthat/test_rrLassosum.R | 16 +- tests/testthat/test_rrMrAshRss.R | 14 +- tests/testthat/test_rrMrash.R | 18 +- tests/testthat/test_rrPenalizedRss.R | 32 +- tests/testthat/test_rrPrsCs.R | 55 +- tests/testthat/test_rrSdpr.R | 4 +- tests/testthat/test_rrSignalRecovery.R | 13 +- tests/testthat/test_rrSusie.R | 19 - tests/testthat/test_sumstatsQc.R | 1880 ++++------ tests/testthat/test_tupleSelectors.R | 65 +- tests/testthat/test_twasWeights.R | 101 +- tests/testthat/test_twasWeightsPipeline.R | 707 +++- tests/testthat/test_variantId.R | 6 + vignettes/coloc-pipeline.Rmd | 13 +- vignettes/colocboost-pipeline.Rmd | 4 +- vignettes/constructing-qtl-datasets.Rmd | 5 +- vignettes/constructing-sumstats.Rmd | 38 +- vignettes/ctwas-pipeline.Rmd | 23 +- vignettes/fine-mapping.Rmd | 29 +- vignettes/heritability.Rmd | 78 +- vignettes/ld-infrastructure.Rmd | 173 +- vignettes/rss-qc.Rmd | 16 +- vignettes/twas-weights.Rmd | 101 +- vignettes/twas-zscore.Rmd | 18 +- vignettes/xqtl-enrichment.Rmd | 2 +- 349 files changed, 24720 insertions(+), 20109 deletions(-) create mode 100644 R/GenotypeDosageSeed.R create mode 100644 R/GenotypeMixture.R delete mode 100644 R/LdData.R create mode 100644 R/LdMatrix.R create mode 100644 inst/scripts/build_bgen_fixtures.R create mode 100644 inst/scripts/build_h2_parity_z.R delete mode 100644 inst/scripts/build_sldsc_upstream_z.R create mode 100644 man/GenotypeDosageSeed-class.Rd create mode 100644 man/GenotypeMixture-class.Rd create mode 100644 man/GenotypeMixture-constructor.Rd delete mode 100644 man/LdData-class.Rd delete mode 100644 man/LdData.Rd create mode 100644 man/LdMatrix-class.Rd create mode 100644 man/LdMatrix-constructor.Rd delete mode 100644 man/blockMetadata.Rd delete mode 100644 man/bplapplyBlocks.Rd delete mode 100644 man/dot-plinkStem.Rd delete mode 100644 man/hasGenotypes.Rd delete mode 100644 man/jackknifeSe.Rd create mode 100644 man/ldReference.Rd delete mode 100644 man/ldSketch.Rd delete mode 100644 man/loadLdMatrix.Rd delete mode 100644 man/refPanel.Rd delete mode 100644 man/shrinkLd.Rd delete mode 100644 man/snpIdx.Rd delete mode 100644 man/variantInfo.Rd create mode 100644 src/bgen.cpp create mode 100644 src/ld_prune.cpp create mode 100644 src/rss_ld.h create mode 100644 src/vcf_gt.cpp create mode 100644 tests/testthat/helper-bgen.R create mode 100644 tests/testthat/helper-vcf.R create mode 100644 tests/testthat/test_GenotypeDosageSeed.R create mode 100644 tests/testthat/test_GenotypeMixture.R create mode 100644 tests/testthat/test_LdMatrix.R create mode 100644 tests/testthat/test_data/bgen/LICENSE_1_0.txt create mode 100644 tests/testthat/test_data/bgen/complex.bgen create mode 100644 tests/testthat/test_data/bgen/complex.bgen.bgi create mode 100644 tests/testthat/test_data/bgen/complex.sample create mode 100644 tests/testthat/test_data/bgen/complex.vcf create mode 100644 tests/testthat/test_data/bgen/haplotypes.bgen create mode 100644 tests/testthat/test_data/bgen/haplotypes.bgen.bgi create mode 100644 tests/testthat/test_data/bgen/haplotypes.haps create mode 100644 tests/testthat/test_data/h2ParityLd.rds rename tests/testthat/test_data/{sldscUpstreamZ.rds => h2ParityZ.rds} (100%) delete mode 100644 tests/testthat/test_ldData.R diff --git a/.github/recipe/recipe.yaml b/.github/recipe/recipe.yaml index 99b9fa5f6..bc8891b77 100644 --- a/.github/recipe/recipe.yaml +++ b/.github/recipe/recipe.yaml @@ -24,17 +24,21 @@ requirements: - ${{ compiler('cxx') }} host: - bioconductor-biocparallel + - bioconductor-biocsingular + - bioconductor-gdsarray - bioconductor-genomicranges - bioconductor-iranges - bioconductor-qvalue - bioconductor-s4vectors - bioconductor-snprelate - bioconductor-snpstats - - bioconductor-mungesumstats - bioconductor-multiassayexperiment + - bioconductor-plinkmatrix - bioconductor-rsamtools - bioconductor-rtracklayer + - bioconductor-seqarray - bioconductor-summarizedexperiment + - bioconductor-variantannotation - r-archive - r-arrow - r-aspu @@ -49,6 +53,7 @@ requirements: - r-cpp11 - r-cpp11armadillo - r-ctwas + - r-dbi - r-dplyr - r-flashier - r-fsusier @@ -79,6 +84,7 @@ requirements: - r-rfast - r-rlang - r-robustbase + - r-rsqlite - r-softimpute - r-stringr - r-susier @@ -92,6 +98,8 @@ requirements: - r-yaml run: - bioconductor-biocparallel + - bioconductor-biocsingular + - bioconductor-gdsarray - bioconductor-genomicranges - bioconductor-iranges - bioconductor-qvalue @@ -99,10 +107,12 @@ requirements: - bioconductor-snprelate - bioconductor-snpstats - bioconductor-multiassayexperiment - - bioconductor-mungesumstats + - bioconductor-plinkmatrix - bioconductor-rsamtools - bioconductor-rtracklayer + - bioconductor-seqarray - bioconductor-summarizedexperiment + - bioconductor-variantannotation - r-archive - r-arrow - r-aspu @@ -117,6 +127,7 @@ requirements: - r-cpp11 - r-cpp11armadillo - r-ctwas + - r-dbi - r-dplyr - r-flashier - r-fsusier @@ -147,6 +158,7 @@ requirements: - r-rfast - r-rlang - r-robustbase + - r-rsqlite - r-softimpute - r-stringr - r-susier diff --git a/DESCRIPTION b/DESCRIPTION index c5494b181..fae439ffa 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -72,22 +72,26 @@ Suggests: coda, CorShrink, ctwas, + DBI, ebnm, flashier, fsusieR, GBJ, + GDSArray, gdsfmt, glmnet, harmonicmeanp, igraph, knitr, L0Learn, + logging, mashr, mr.mashr, mvsusieR, ncvreg, nnls, pgenlibr, + PlinkMatrix, plinkQC, plyranges, poolr, @@ -97,7 +101,9 @@ Suggests: Rfast, rmarkdown, robustbase, + RSQLite, rtracklayer, + SeqArray, SNPRelate, snpStats, testthat, @@ -119,6 +125,8 @@ VignetteBuilder: knitr Config/roxygen2/version: 8.1.0 Collate: 'AllGenerics.R' + 'GenotypeMixture.R' + 'LdMatrix.R' 'RangedTupleList.R' 'GenotypeHandle.R' 'AllClasses.R' @@ -128,24 +136,24 @@ Collate: 'tupleSelectors.R' 'CtwasResult.R' 'CtwasResultEntry.R' + 'GenotypeDosageSeed.R' 'GwasFineMappingResult.R' + 'MethodOptions.R' + 'MethodParam.R' 'H2Estimate.R' 'JointGroup.R' 'LdBlocks.R' - 'LdData.R' 'LdStatistic.R' 'LdEigen.R' 'LdScore.R' 'MashPrior.R' - 'MethodOptions.R' - 'MethodParam.R' + 'qtlSumStats.R' 'QtlDataset.R' 'MultiStudyQtlDataset.R' 'QtlFineMappingResult.R' 'SldscData.R' 'causalInferencePipeline.R' 'gwasSumStats.R' - 'qtlSumStats.R' 'fineMappingPipeline.R' 'ld.R' 'colocPipeline.R' diff --git a/NAMESPACE b/NAMESPACE index 57b01701e..2ac1a9307 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -67,6 +67,7 @@ export(FsusieOptions) export(GbjOmniOptions) export(GbjOptions) export(GenotypeFilterParam) +export(GenotypeMixture) export(GlmnetOptions) export(GwasFineMappingParam) export(GwasFineMappingResult) @@ -74,8 +75,8 @@ export(GwasSumStats) export(KrigingOptions) export(L0learnOptions) export(LassosumOptions) -export(LdData) export(LdEigen) +export(LdMatrix) export(LdPruningOptions) export(LdScore) export(MashComponentParam) @@ -155,7 +156,6 @@ export(bayesLWeights) export(bayesNWeights) export(bayesRWeights) export(blockId) -export(blockMetadata) export(buildLdEigen) export(buildLdScore) export(buildMrmashPriorMatrices) @@ -245,7 +245,6 @@ export(genotypeCovariates) export(genotypes) export(glmnetWeights) export(h2EstimateToSldscTrait) -export(hasGenotypes) export(heritabilityEstimate) export(heritabilityEstimateSe) export(heritabilityIntercept) @@ -263,7 +262,6 @@ export(krigingOutlierQc) export(l0learnRssWeights) export(l0learnWeights) export(lassoWeights) -export(lassosumRss) export(lassosumRssWeights) export(lbf) export(lbfToAlpha) @@ -274,11 +272,10 @@ export(ldMatrixList) export(ldMismatchQc) export(ldPanelNSamples) export(ldPruneByCorrelation) -export(ldSketch) +export(ldReference) export(learnTwasWeights) export(loadGenotypeRegion) export(loadGwasSumStatsFromManifest) -export(loadLdMatrix) export(loadMultiStudyQtlDatasetFromManifest) export(loadQtlDatasetFromManifest) export(loadQtlSumStatsFromManifest) @@ -329,12 +326,10 @@ export(overlapTopLoci) export(panelFilterParam) export(parseRegion) export(parseVariantId) -export(penalizedRss) export(perCsColumns) export(phenotypeCovariates) export(pip) export(postprocessFinemappingFits) -export(prsCs) export(prsCsWeights) export(pval) export(qcDiagnostics) @@ -354,7 +349,6 @@ export(readSldscAnnot) export(readSldscFrq) export(readSldscTrait) export(readTwasWeights) -export(refPanel) export(refVariantInfo) export(regionToDf) export(regionVcp) @@ -369,7 +363,6 @@ export(scaleResiduals) export(scoreFromCs) export(scoreStats) export(screenCtwasRegions) -export(sdpr) export(sdprWeights) export(se) export(secondaryCoverage) @@ -381,7 +374,6 @@ export(sldscPostprocessingPipeline) export(sldscResults) export(sldscSubsetMeta) export(sliceMashData) -export(snpIdx) export(standardizeSldscTrait) export(stratifiedHeritabilityEnrichment) export(studyName) @@ -412,7 +404,6 @@ export(twasZ) export(updateMashModelCov) export(varY) export(variantIds) -export(variantInfo) export(waldTestPval) export(weightStandardized) export(weightsDataType) @@ -436,12 +427,13 @@ exportClasses(FineMappingMethodsParam) exportClasses(FineMappingResultBase) exportClasses(FineMappingRow) exportClasses(GenotypeFilterParam) +exportClasses(GenotypeMixture) exportClasses(GwasFineMappingParam) exportClasses(GwasFineMappingResult) exportClasses(GwasSumStats) exportClasses(H2Estimate) -exportClasses(LdData) exportClasses(LdEigen) +exportClasses(LdMatrix) exportClasses(LdScore) exportClasses(LdStatistic) exportClasses(MashComponentParam) @@ -493,7 +485,6 @@ exportMethods(as.list) exportMethods(baselineAnnotations) exportMethods(bindROWS) exportMethods(blockId) -exportMethods(blockMetadata) exportMethods(coef) exportMethods(colnames) exportMethods(colocBoostOutcomes) @@ -526,7 +517,6 @@ exportMethods(fullFit) exportMethods(genomicRegion) exportMethods(genotypeCovariates) exportMethods(genotypes) -exportMethods(hasGenotypes) exportMethods(heritabilityEstimate) exportMethods(heritabilityEstimateSe) exportMethods(heritabilityIntercept) @@ -541,7 +531,7 @@ exportMethods(ldBlocks) exportMethods(ldMatrix) exportMethods(ldMatrixList) exportMethods(ldPanelNSamples) -exportMethods(ldSketch) +exportMethods(ldReference) exportMethods(length) exportMethods(localH2Blocks) exportMethods(longForm) @@ -568,7 +558,6 @@ exportMethods(qtlAssociationPostprocess) exportMethods(qtlDatasets) exportMethods(readAnnotations) exportMethods(readGenotypes) -exportMethods(refPanel) exportMethods(regionVcp) exportMethods(residualizedGenotypes) exportMethods(residualizedPhenotypes) @@ -580,7 +569,6 @@ exportMethods(se) exportMethods(show) exportMethods(significantQtls) exportMethods(sldscResults) -exportMethods(snpIdx) exportMethods(stratifiedHeritabilityEnrichment) exportMethods(studyName) exportMethods(subsetChr) @@ -596,7 +584,6 @@ exportMethods(twasWeights) exportMethods(twasWeightsPipeline) exportMethods(varY) exportMethods(variantIds) -exportMethods(variantInfo) exportMethods(weightStandardized) exportMethods(weights) exportMethods(weightsDataType) @@ -606,6 +593,7 @@ importClassesFrom(GenomicRanges,GRanges) importClassesFrom(MultiAssayExperiment,MultiAssayExperiment) importClassesFrom(S4Vectors,DataFrame) importClassesFrom(S4Vectors,SimpleList) +importClassesFrom(S4Vectors,Vector) importClassesFrom(S4Vectors,character_OR_NULL) importClassesFrom(SummarizedExperiment,RangedSummarizedExperiment) importFrom(BiocGenerics, @@ -613,12 +601,12 @@ importFrom(BiocGenerics, ncol, nrow, path, - weights + weights, + width ) importFrom(BiocParallel, MulticoreParam, bplapply, - bpparam, multicoreWorkers ) importFrom(Biostrings, @@ -635,10 +623,18 @@ importFrom(IRanges, CharacterList, DataFrameList, IRanges, - findOverlaps + findOverlaps, + overlapsAny ) importFrom(MASS,ginv) -importFrom(MultiAssayExperiment,longForm) +importFrom(MultiAssayExperiment, + ExperimentList, + MultiAssayExperiment, + experiments, + longForm, + subsetByAssay, + subsetByRow +) importFrom(Rsamtools, TabixFile, asBcf, @@ -656,8 +652,10 @@ importFrom(S4Vectors, SimpleList, bindROWS, endoapply, + extractROWS, mcols, metadata, + normalizeSingleBracketSubscript, queryHits, subjectHits ) @@ -696,7 +694,6 @@ importFrom(checkmate, checkList, checkMatrix, checkNames, - checkNull, checkNumeric, checkString, checkSubset, @@ -761,6 +758,7 @@ importFrom(purrr, list_rbind, map, map2, + map2_dbl, map2_lgl, map_chr, map_dbl, @@ -768,6 +766,7 @@ importFrom(purrr, map_int, map_lgl, partial, + pmap, possibly, reduce, set_names, @@ -788,19 +787,20 @@ importFrom(rlang, abort, arg_match, arg_match0, + caller_arg, cnd_signal, + eval_bare, + fn_env, + fn_fmls, inform, is_named, try_fetch, warn ) importFrom(stats, - as.dist, coef, complete.cases, cor, - cutree, - hclust, lm, lm.fit, median, @@ -861,15 +861,10 @@ importFrom(tidyr, separate ) importFrom(tidyselect,all_of) -importFrom(tools, - file_ext, - file_path_sans_ext -) +importFrom(tools,file_ext) importFrom(utils, combn, - head, - read.table, - tail + head ) importFrom(vctrs,vec_duplicate_detect) importFrom(vroom,vroom) diff --git a/R/AllClasses.R b/R/AllClasses.R index 153bd0f0f..044f16a68 100644 --- a/R/AllClasses.R +++ b/R/AllClasses.R @@ -11,71 +11,40 @@ # topologically orders the Collate field for us. # ============================================================================= -#' @include AllGenerics.R GenotypeHandle.R RangedTupleList.R +#' @include AllGenerics.R GenotypeHandle.R RangedTupleList.R LdMatrix.R +#' @include GenotypeMixture.R #' @importFrom methods setClass setMethod new is validObject +#' @importClassesFrom GenomicRanges GRanges +#' @importClassesFrom S4Vectors DataFrame NULL -# The LD reference panel a collection was harmonized against, as the same -# RangedSummarizedExperiment shape QtlDataset uses for its genotypes: variants -# in rowRanges, dosages in a DelayedArray assay that reads lazily through a -# GenotypeHandle. NULL when a collection carries no panel. -# -# A union rather than "ANY": the slot has always been documented as holding a -# panel, and an untyped slot with a typed docstring is the kind of thing that -# is only true until someone puts something else in it. -#' @importClassesFrom SummarizedExperiment RangedSummarizedExperiment -setClassUnion( - "LdSketch_OR_NULL", - c("RangedSummarizedExperiment", "NULL") -) - -# What an LdData can read genotypes from. Four shapes, all real: +# The LD reference a collection was harmonized against -- the one place every +# pipeline reads LD from. It is one of two things: # -# GenotypeHandle a lazy file-backed panel; `snpIdx` selects into its whole -# snpInfo, so the handle must not be pre-narrowed -# list one handle per panel for a mixture reference, averaged by -# `mixtureWeights` -# matrix dosages already extracted and filtered, kept so -# genotypes() answers without reopening the file (see -# .loadLdFromBlocks); `snpIdx` is NULL in this case because -# the matrix is already the subset -# NULL no genotypes -- the object carries a pre-computed R +# RangedSummarizedExperiment a genotype panel, the same shape QtlDataset +# uses for its genotypes: variants in rowRanges, +# dosages in a DelayedArray assay that reads +# lazily through a GenotypeHandle +# GenotypeMixture several such panels, their LD averaged +# LdMatrix a correlation matrix the caller built # -# A panel (RangedSummarizedExperiment) is what callers pass; the constructor -# unwraps it to its handle, so the slot itself never holds one. +# NULL when a collection carries no LD reference. # -# A union rather than "ANY", for the same reason as above: the slot's -# docstring named two of these four shapes and nothing enforced even that. +# A union rather than "ANY": the slot has always been documented as holding +# one of these, and an untyped slot with a typed docstring is the kind of +# thing that is only true until someone puts something else in it. +#' @importClassesFrom SummarizedExperiment RangedSummarizedExperiment setClassUnion( - "LdGenotypeSource", - c("GenotypeHandle", "matrix", "list", "NULL") + "LdReference_OR_NULL", + c("RangedSummarizedExperiment", "GenotypeMixture", "LdMatrix", "NULL") ) -# The rest of LdData's payload, typed for the same reason. Each union is the -# set of shapes the class is actually built with, confirmed by recording slot -# classes at validity across the LD test files (validity runs for every -# object, however it was constructed). -# -# `correlation` is a single matrix, or one matrix per block for -# block-diagonal LD, or NULL when it has to be computed from genotypes. -setClassUnion("LdCorrelation", c("matrix", "list", "NULL")) - -# `snpIdx` selects into the genotype source's snpInfo; NULL when the -# correlation is pre-computed, or when the source is already the subset. The -# constructor coerces to integer, so a caller may pass doubles. -setClassUnion("LdSnpIndex", c("integer", "NULL")) - -# Mixing proportions, one per panel, when `genotypeHandle` is a list. -#' @importClassesFrom GenomicRanges GRanges -#' @importClassesFrom S4Vectors DataFrame -setClassUnion("LdMixtureWeights", c("numeric", "NULL")) - # ============================================================================= # SumStatsBase # ----------------------------------------------------------------------------- # Shared parent of the QTL and GWAS summary statistics collections. # Concrete subclasses (QtlSumStats, GwasSumStats) inherit from -# RangedTupleList and share the ldSketch / qcInfo slots (the genome build +# RangedTupleList and share the ldReference / qcInfo slots (the genome build # lives in seqinfo, not a slot). Each element # is one tuple's per-variant GRanges: x[[i]], formerly x$entry[[i]]. # @@ -89,17 +58,20 @@ setClassUnion("LdMixtureWeights", c("numeric", "NULL")) #' @description Virtual base class for QTL and GWAS summary statistics #' collections. Concrete subclasses (\code{QtlSumStats}, \code{GwasSumStats}) #' inherit from \code{\linkS4class{RangedTupleList}} and share the -#' \code{ldSketch} / \code{qcInfo} slots, and the genome build in +#' \code{ldReference} / \code{qcInfo} slots, and the genome build in #' \code{seqinfo()}. #' #' Each element is the per-variant \code{GRanges} of one tuple, so #' \code{x[[i]]} is that tuple's summary statistics and the identity columns #' live in \code{mcols(x)}. There is no \code{entry} column: what used to be #' \code{x$entry[[i]]} is now simply \code{x[[i]]}. -#' @slot ldSketch The \code{GenotypeHandle} the QC pipeline harmonized against, -#' or \code{NULL}. Optional: LD-free workflows (e.g. mash, which operates -#' across conditions per variant) carry \code{NULL}; pipelines that need LD -#' validate its presence when they consume the collection. +#' @slot ldReference The LD reference the collection was harmonized against +#' and every pipeline reads LD from: a genotype panel (see +#' \code{\link{readGenotypes}}), a \code{\link{GenotypeMixture}} or an +#' \code{\link{LdMatrix}}, or \code{NULL}. Optional: LD-free workflows +#' (e.g. mash, which operates across conditions per variant) carry +#' \code{NULL}; pipelines that need LD validate its presence when they +#' consume the collection. #' @slot qcInfo A \code{list} recording which QC steps ran. Empty \code{list()} #' on construction; populated by \code{summaryStatsQc()} with a per-step audit #' record (filter names, drop counts, liftover target, RAISS settings, etc.). @@ -111,7 +83,7 @@ setClass( "SumStatsBase", contains = c("VIRTUAL", "RangedTupleList"), representation( - ldSketch = "LdSketch_OR_NULL", + ldReference = "LdReference_OR_NULL", qcInfo = "list" ) ) @@ -164,8 +136,10 @@ setClass( return(gr) } win <- .asGRegion(ranges) - onWindowChrom <- as.character(seqnames(gr)) %in% + onWindowChrom <- is_in( + as.character(seqnames(gr)), as.character(seqnames(win)) + ) if (!any(onWindowChrom)) { return(gr[0L]) } @@ -246,12 +220,12 @@ setMethod("qcDiagnostics", "SumStatsBase", function(x, entry = 1L) { } }) -#' @rdname ldSketch +#' @rdname ldReference #' @examples #' data(qtlSumStatsExample) -#' ldSketch(qtlSumStatsExample) +#' ldReference(qtlSumStatsExample) #' @export -setMethod("ldSketch", "SumStatsBase", function(x) x@ldSketch) +setMethod("ldReference", "SumStatsBase", function(x) x@ldReference) #' @rdname studyName #' @examples @@ -729,7 +703,7 @@ setMethod( # ----------------------------------------------------------------------------- # Shared parent of the QTL and GWAS fine-mapping result collections. # Concrete subclasses (QtlFineMappingResult, GwasFineMappingResult) carry -# a DFrame of per-fit rows plus a shared ldSketch slot. Downstream +# a DFrame of per-fit rows plus a shared ldReference slot. Downstream # pipelines dispatch on FineMappingResultBase for behaviors that apply to # either flavour, and on the concrete subclass when the tuple shape # matters. @@ -738,19 +712,20 @@ setMethod( #' @title Fine-Mapping Result Base Class #' @description Virtual base class for fine-mapping result collections. Concrete #' subclasses (\code{QtlFineMappingResult}, \code{GwasFineMappingResult}) -#' carry a \code{DFrame} of per-fit rows and a shared \code{ldSketch} slot. +#' carry a \code{DFrame} of per-fit rows and a shared \code{ldReference} slot. #' Downstream pipelines should dispatch on \code{FineMappingResultBase} for #' behaviors that apply to either flavour, and on the concrete subclass when #' the tuple shape matters. -#' @slot ldSketch The LD reference \code{GenotypeHandle} the fits were computed -#' against, or \code{NULL} when the fits were derived from individual-level -#' data (no LD reference). Used downstream for cross-pipeline LD-sketch -#' identity validation. +#' @slot ldReference The LD reference the fits were computed against (a +#' genotype panel, a \code{GenotypeMixture} or an \code{LdMatrix}), or +#' \code{NULL} when the fits were derived from individual-level data. Used +#' downstream to check that pipelines combining results share one LD +#' reference. #' @export setClass( "FineMappingResultBase", contains = c("VIRTUAL", "RangedTupleList"), - representation(ldSketch = "LdSketch_OR_NULL") + representation(ldReference = "LdReference_OR_NULL") ) #' @rdname studyName @@ -759,9 +734,9 @@ setMethod("studyName", "FineMappingResultBase", function(x) { unique(as.character(x$study)) }) -#' @rdname ldSketch +#' @rdname ldReference #' @export -setMethod("ldSketch", "FineMappingResultBase", function(x) x@ldSketch) +setMethod("ldReference", "FineMappingResultBase", function(x) x@ldReference) #' @rdname methodNames #' @examples @@ -846,7 +821,7 @@ setMethod( GenomicRanges::GRangesList(map(entries, variants)), value = .withEntryPayload(mcols(x, use.names = FALSE), entries) ) - new(class(x), grl, ldSketch = .asLdSketch(ldSketch(x))) + new(class(x), grl, ldReference = .asLdRef(ldReference(x))) } # TRUE when an entry shares at least one variant with `keepVariants`, matched diff --git a/R/AllGenerics.R b/R/AllGenerics.R index 6721f9499..deb1db412 100644 --- a/R/AllGenerics.R +++ b/R/AllGenerics.R @@ -73,7 +73,7 @@ NULL #' ) #' ss <- GwasSumStats(studyName = "trait1", entry = list(gr), #' genome = unique(unname(GenomeInfoDb::genome(ldScoreExample))), -#' ldSketch = panel) +#' ldReference = panel) #' estimateH2(ss, ldScoreExample, method = "sldsc") #' @export setGeneric( @@ -96,7 +96,9 @@ setGeneric( #' @title Compute LD Scores #' @description Compute LD scores from an LD reference, optionally stratified by -#' annotations. +#' annotations. Each r-squared is ldsc's small-sample unbiased estimate, +#' \eqn{r^2 - (1 - r^2)/(n - 2)} for a reference of \eqn{n} samples, as +#' \code{\link{buildLdScore}} stores, so the two agree. #' @param ldRef An \code{LdStatistic} object. #' @param annotations An \code{AnnotationMatrix} object, or NULL. #' @param ... Additional arguments. @@ -114,14 +116,14 @@ setGeneric("computeLdScores", function(ldRef, annotations = NULL, ...) { # ============================================================================= #' @title Read a Genotype Panel -#' @description Read genotype data (VCF, plink1, plink2 or GDS) as a +#' @description Read genotype data (VCF, plink1, plink2, GDS or BGEN) as a #' \code{RangedSummarizedExperiment}: variants in \code{rowRanges}, #' samples in \code{colData}, and dosages in a \code{DelayedArray} assay #' that reads from the file only when something touches it. Nothing is read #' here beyond the variant and sample metadata. #' #' The panel is the same shape a \code{QtlDataset} uses for its genotypes -#' and the same shape a collection carries as its \code{ldSketch}, so the +#' and the same shape a collection carries as its \code{ldReference}, so the #' Bioconductor and tidy surfaces apply throughout: subset it with #' \code{panel[i, j]}, ask \code{rowRanges()} for the variants, #' \code{colnames()} for the samples, and hand it to @@ -135,11 +137,35 @@ setGeneric("computeLdScores", function(ldRef, annotations = NULL, ...) { #' with \code{chroms}), or \code{ldMeta} plus \code{region} to resolve a #' block out of an LD-meta table. Exactly one source may be given. #' @param path Character, path to a single self-describing genotype file -#' (\code{.vcf}, \code{.vcf.gz}, \code{.vcf.bgz}, \code{.bcf} or -#' \code{.gds}). Omit it when naming the panel by one of the keyword -#' sources described above. -#' @param format Character, one of "vcf", "plink1", "plink2", "gds". If NULL, -#' inferred from file extension. +#' (\code{.vcf.gz}, \code{.vcf.bgz}, \code{.gds} or \code{.bgen}). Omit it +#' when naming the panel by one of the keyword sources described above. +#' +#' A VCF must be bgzip-compressed with its tabix index (\code{.tbi}) beside +#' it, through which its records are read a block at a time; a BCF cannot +#' be read. Its dosage is its FORMAT/DS when the header declares one, else +#' the copies of the ALT allele in each GT call, a call with a missing +#' allele being missing. +#' +#' A GDS file is SNPRelate's, whose genotype codes count the first of each +#' SNP's two alleles (A1), or SeqArray's, read like a VCF: its FORMAT/DS +#' when it stores one, else its genotype calls. +#' +#' A BGEN file of any layout (BGEN 1.1, 1.2 or 1.3), phased or unphased +#' and of any ploidy, needs its \code{.bgi} index beside it and its sample +#' ids in the file or in a \code{.sample} file beside it. Its dosage is the +#' expected count of A1, from 0 to the sample's ploidy. +#' +#' A PLINK1 fileset, a \code{.bed} with its \code{.bim} and \code{.fam} +#' beside it, is read through the PlinkMatrix package: its dosage counts +#' each variant's A1 allele, the \code{.bim}'s fifth column, a missing +#' call being missing. Its samples are named by the \code{.fam}'s +#' individual ids. +#' +#' In a VCF, a SeqArray GDS or a BGEN file, A2 is each record's first (REF) +#' allele, and a record with more than one other allele is read, with a +#' warning, as one variant per other allele, each counting its own. +#' @param format Character, one of "vcf", "plink1", "plink2", "gds", "bgen". +#' If NULL, inferred from file extension. #' @param ... The keyword source arguments described above, plus any further #' arguments forwarded to the format-specific reader. #' @param plink1Prefix,plink2Prefix Character. Stem of a plink1 @@ -151,7 +177,8 @@ setGeneric("computeLdScores", function(ldRef, annotations = NULL, ...) { #' plink2 triplet, when they do not share a stem. #' @param genoMeta One-file-per-chromosome specification: a path to a #' \code{#chr,path} meta file, or a named character vector (names = -#' chromosomes, values = payload paths / prefixes). +#' chromosomes, values = payload paths / prefixes). Every file must be of +#' one format and hold the same samples in the same order. #' @param chroms Optional character vector of chromosomes. Only the #' \code{genoMeta} shards whose chromosome is listed are read; chromosome #' labels are compared canonically. Meaningful only with \code{genoMeta}. @@ -162,7 +189,8 @@ setGeneric("computeLdScores", function(ldRef, annotations = NULL, ...) { #' \code{"chr:start-end"} string, or a one-row data.frame with #' \code{chrom}, \code{start}, \code{end}. #' @param vcfArgs Optional named list of arguments forwarded to -#' \code{VariantAnnotation::readVcf} when the source is a VCF. +#' \code{VariantAnnotation::readVcf} when a VCF's records are read (its +#' genotypes are read a block at a time, as they are needed). #' @return A \code{RangedSummarizedExperiment} of variants x samples. #' @seealso \code{\link{computeLd}} #' @examples @@ -272,8 +300,9 @@ setGeneric("z", function(x, ...) standardGeneric("z")) #' @title Get Sample Sizes #' @description Extract sample sizes: the per-variant sample-size vector of a #' \code{GwasSumStats} or \code{QtlSumStats} entry, selected by its identity -#' tuple, or the number of samples carried by a \code{GenotypeHandle}. -#' @param x A \code{GwasSumStats}, \code{QtlSumStats} or +#' tuple, the number of samples carried by a \code{GenotypeHandle}, or the +#' panel size an \code{\link{LdMatrix}} records. +#' @param x A \code{GwasSumStats}, \code{QtlSumStats}, \code{LdMatrix} or #' \code{GenotypeHandle} object. #' @param ... Class-specific selection arguments. #' @param studyName Character (length 1) or \code{NULL}. Restrict the selection @@ -287,7 +316,8 @@ setGeneric("z", function(x, ...) standardGeneric("z")) #' @param ranges A \code{GRanges} or \code{NULL} (default). Return only the #' variants overlapping these ranges; \code{NULL} returns everything. #' @return Numeric vector of sample sizes for a summary-statistic entry; -#' integer of length 1 for a \code{GenotypeHandle}. +#' integer of length 1 for a \code{GenotypeHandle} or an \code{LdMatrix} +#' (\code{NA} when the matrix records no size). #' @details The genotype handle is the seed layer behind a panel and is not #' part of the public interface; obtain a panel from #' \code{readGenotypes()} and ask it directly. @@ -435,16 +465,17 @@ setGeneric("nSamples<-", function(x, ..., value) { #' @title Get Effect-Allele Frequencies #' @description Extract the directional effect-allele (A1) frequency vector -#' for a \code{QtlDataset}, or for one entry of a \code{GwasSumStats} / -#' \code{QtlSumStats} collection. Unlike \code{\link{maf}}, the value is -#' \emph{not} folded to the minor allele: it is the frequency of the -#' dosage-counted allele (A1, the effect allele), matching the allele the -#' marginal effect sizes and the fine-mapping \code{af} column report. For -#' a summary-statistic collection this is \code{NULL} when the source +#' for a \code{QtlDataset}, an \code{\link{LdMatrix}}, or one entry of a +#' \code{GwasSumStats} / \code{QtlSumStats} collection. Unlike +#' \code{\link{maf}}, the value is \emph{not} folded to the minor allele: it +#' is the frequency of the dosage-counted allele (A1, the effect allele), +#' matching the allele the marginal effect sizes and the fine-mapping +#' \code{af} column report. For a summary-statistic collection this is +#' \code{NULL} when the source #' carried no frequency column -- see \code{\link{variantColumnReplace}} #' for supplying one afterwards. -#' @param x A \code{QtlDataset}, \code{GwasSumStats} or \code{QtlSumStats} -#' object. +#' @param x A \code{QtlDataset}, \code{LdMatrix}, \code{GwasSumStats} or +#' \code{QtlSumStats} object. #' @param ... Class-specific selection arguments (e.g., \code{traitId}, #' \code{region}, \code{cisWindow}, \code{samples} for \code{QtlDataset}). #' @param traitId Character or \code{NULL}. Molecular trait / feature identifier @@ -777,47 +808,46 @@ setGeneric("qcDiagnostics", function(x, entry = 1L, ...) { standardGeneric("qcDiagnostics") }) -#' @title Get LD Sketch -#' @description Return the genotype panel carrying the LD reference for -#' this collection. Defined on classes that embed an \code{ldSketch} slot: -#' \code{GwasSumStats}, \code{QtlSumStats}, \code{FineMappingResult}, -#' \code{TwasWeights}. Returns \code{NULL} when the slot is unset (e.g. a -#' \code{TwasWeights} fit from individual-level data via \code{QtlDataset}). -#' @param x An S4 object that carries an \code{ldSketch} slot. +#' @title Get LD Reference +#' @description Return the LD reference of this object: a genotype panel +#' (see \code{\link{readGenotypes}}), a \code{\link{GenotypeMixture}} or +#' an \code{\link{LdMatrix}}. Defined on classes that embed an +#' \code{ldReference} slot: \code{GwasSumStats}, \code{QtlSumStats}, +#' \code{FineMappingResultBase}, \code{TwasWeights}, +#' \code{ColocResultBase} and \code{LdStatistic}, whose reference is the +#' panel it reads its blocks' LD from. Returns \code{NULL} when the slot is +#' unset (e.g. a \code{TwasWeights} fit from individual-level data via +#' \code{QtlDataset}, or an \code{LdStatistic} built from \code{LdMatrix} +#' blocks). +#' @param x An S4 object that carries an \code{ldReference} slot. #' @param ... Unused. -#' @return A \code{RangedSummarizedExperiment} genotype panel, or -#' \code{NULL}. +#' @return A \code{RangedSummarizedExperiment} genotype panel, a +#' \code{GenotypeMixture}, an \code{LdMatrix}, or \code{NULL}. #' @export -setGeneric("ldSketch", function(x, ...) standardGeneric("ldSketch")) +setGeneric("ldReference", function(x, ...) standardGeneric("ldReference")) # ============================================================================= -# LdData accessor generics +# LD accessor generics # ============================================================================= #' @title Get LD Correlation Matrix -#' @description Extract the LD correlation matrix from an \code{LdData} object. -#' If only a genotype handle is available, recomputes R from genotypes on the -#' fly. -#' @param x An \code{LdData} object. -#' @return A correlation matrix, or a list of per-block matrices. +#' @description Extract the LD correlation matrix an \code{\link{LdMatrix}} +#' holds, labelled by its variant ids. +#' @param x An \code{LdMatrix}. +#' @return A correlation matrix. #' @examples #' data(eqtlRegionExample) #' X <- eqtlRegionExample$X[, 1:8] -#' gr <- GenomicRanges::GRanges("22", -#' IRanges::IRanges(seq(1L, by = 100L, length.out = 8), width = 1L)) -#' ld <- LdData(correlation = cor(X), variants = gr, -#' blockMetadata = S4Vectors::DataFrame( -#' chrom = "22", start = 1L, end = 1000L)) -#' ldMatrix(ld) +#' ld <- LdMatrix(cor(X), nSamples = nrow(X)) +#' ldMatrix(ld)[1:3, 1:3] #' @export setGeneric("ldMatrix", function(x) standardGeneric("ldMatrix")) #' @title Get Genotype Matrix #' @description Extract a genotype matrix from an object that carries genotype -#' data. For an \code{LdData}, returns the underlying genotype matrix via its -#' handle (or \code{NULL} if no handle is available). For a \code{QtlDataset}, -#' returns the genotype matrix for a selected set of traits or region (see -#' method documentation for the per-class selection arguments). +#' data. For a \code{QtlDataset}, returns the genotype matrix for a selected +#' set of traits or region (see method documentation for the per-class +#' selection arguments). #' @param x The object to extract from. #' @param ... Class-specific selection arguments (e.g., \code{traitId}, #' \code{region}, \code{cisWindow} for \code{QtlDataset}). @@ -837,26 +867,9 @@ setGeneric("ldMatrix", function(x) standardGeneric("ldMatrix")) #' @export setGeneric("genotypes", function(x, ...) standardGeneric("genotypes")) -#' @title Check Genotype Availability -#' @description Check whether an \code{LdData} object has a genotype handle for -#' extracting raw genotypes. -#' @param x An \code{LdData} object. -#' @return Logical. -#' @examples -#' data(eqtlRegionExample) -#' X <- eqtlRegionExample$X[, 1:8] -#' gr <- GenomicRanges::GRanges("22", -#' IRanges::IRanges(seq(1L, by = 100L, length.out = 8), width = 1L)) -#' ld <- LdData(correlation = cor(X), variants = gr, -#' blockMetadata = S4Vectors::DataFrame( -#' chrom = "22", start = 1L, end = 1000L)) -#' hasGenotypes(ld) -#' @export -setGeneric("hasGenotypes", function(x) standardGeneric("hasGenotypes")) - #' @title Get Variant IDs #' @description Extract variant ID vector from an object that carries one (e.g., -#' \code{LdData}, \code{FineMappingRow}, \code{TwasWeightsRow}) or from +#' \code{LdMatrix}, \code{FineMappingRow}, \code{TwasWeightsRow}) or from #' one entry of a collection class selected by its identity tuple. #' @param x The object. #' @param ... Class-specific selection arguments. @@ -920,17 +933,18 @@ setGeneric("molecularTraits", function(x, ...) { standardGeneric("molecularTraits") }) # ============================================================================= -# FineMappingResult accessor generics +# Fine-mapping result accessor generics # ============================================================================= #' @title Get a Single Fine-Mapping Entry -#' @description Return the \code{FineMappingRow} for one \code{(study, -#' context, trait, method)} row of a \code{FineMappingResult} collection. -#' @param x A \code{FineMappingResult} object. +#' @description Return one row of a \code{QtlFineMappingResult} or +#' \code{GwasFineMappingResult}, selected by its identity, as a single-row +#' collection of the same class. +#' @param x A \code{QtlFineMappingResult} or \code{GwasFineMappingResult}. #' @param studyName,context,trait,method Single character identifiers. All #' required when the collection has more than one row; optional when the #' collection has a single row. -#' @return A \code{FineMappingRow} object. +#' @return A single-row collection of the same class as \code{x}. #' @examples #' data(qtlFineMappingExample) #' fineMappingResult(qtlFineMappingExample, studyName = "study_1", @@ -955,8 +969,8 @@ setGeneric( #' \item The user declined to impute missing variants in a GWAS #' \code{SumStats}, so a downstream fine-mapping result needs #' PIPs restricted to the GWAS-covered intersection. -#' \item Colocalization between a GWAS \code{FineMappingResult} and a -#' QTL \code{FineMappingResult} computed on different variant +#' \item Colocalization between a \code{GwasFineMappingResult} and a +#' \code{QtlFineMappingResult} computed on different variant #' sets -- the GWAS PIPs (or QTL PIPs) get renormalized to the #' common variant set. #' } @@ -972,10 +986,10 @@ setGeneric("adjustPips", function(x, keepVariants, ...) { }) #' @title Get PIP Values -#' @description Extract posterior inclusion probabilities from a single -#' \code{FineMappingRow} or from one entry of a \code{FineMappingResult} -#' (selected by its identity tuple). -#' @param x A \code{FineMappingRow} or \code{FineMappingResult}. +#' @description Extract posterior inclusion probabilities from a +#' \code{QtlFineMappingResult} or \code{GwasFineMappingResult}, narrowed to +#' the entries its identity selectors pick. +#' @param x A \code{QtlFineMappingResult} or \code{GwasFineMappingResult}. #' @param ... Class-specific selection arguments. #' @param studyName Character (length 1) or \code{NULL}. Restrict the selection #' to this study; \code{NULL} matches all studies. @@ -1002,7 +1016,8 @@ setGeneric("pip", function(x, ...) standardGeneric("pip")) #' result. The fit may be the trimmed view (when the pipeline ran with the #' default \code{trim = TRUE}) or the full untrimmed \code{susie()} return #' (when \code{trim = FALSE}). -#' @param x A \code{FineMappingRow} or \code{FineMappingResult}. +#' @param x A \code{FineMappingRow}, \code{QtlFineMappingResult} or +#' \code{GwasFineMappingResult}. #' @param ... Class-specific selection arguments. #' @param studyName Character (length 1) or \code{NULL}. Restrict the selection #' to this study; \code{NULL} matches all studies. @@ -1027,14 +1042,14 @@ setGeneric("susieFit", function(x, ...) standardGeneric("susieFit")) #' \code{\link{fineMappingRow}} on demand from an LD source. The correlation #' is a view over the fit-time LD, which lives on the data object --- a #' \code{QtlDataset}'s genotypes or a \code{QtlSumStats} / \code{GwasSumStats} -#' LD sketch --- and is deliberately never stored on the fit. An +#' LD reference --- and is deliberately never stored on the fit. An #' \code{ldSource} is therefore always required. #' @param x A \code{\link{fineMappingRow}} carrying the fit (credible-set #' membership and PIP) and its variant ids. #' @param ldSource The object supplying the LD: a \code{QtlDataset} #' (individual-level; genotypes via \code{\link{genotypes}}) or a #' \code{QtlSumStats} / \code{GwasSumStats} (summary statistics; LD via -#' \code{\link{ldSketch}}). Any other type is an error. +#' \code{\link{ldReference}}). Any other type is an error. #' @param ... Passed to methods. #' @return A numeric \code{m x m} between-credible-set correlation matrix #' (\code{m} = number of credible sets), or \code{NULL} when the fit has @@ -1070,13 +1085,13 @@ setGeneric("computeCsCorrelation", function(x, ldSource, ...) { #' @title Get Cross-Validation Result #' @description Extract the cross-validation payload stored on a #' \code{FineMappingRow} (or the matching entry of a -#' \code{FineMappingResult}). The payload is a list with components +#' \code{QtlFineMappingResult}). The payload is a list with components #' \code{samplePartition} (a \code{data.frame} of \code{Sample}/\code{Fold} #' assignments), \code{predictions} (a named list of per-method out-of-fold #' prediction matrices), and \code{performance} (a named list of per-method #' metric matrices). \code{NULL} when fine-mapping was run without -#' cross-validation (\code{cvFolds <= 1}). -#' @param x A \code{FineMappingRow} or \code{FineMappingResult}. +#' cross-validation. +#' @param x A \code{FineMappingRow} or \code{QtlFineMappingResult}. #' @param ... Class-specific selection arguments. #' @param studyName Character (length 1) or \code{NULL}. Restrict the selection #' to this study; \code{NULL} matches all studies. @@ -1099,7 +1114,7 @@ setGeneric("cvResult", function(x, ...) standardGeneric("cvResult")) #' columns (\code{variant_id, chrom, pos, A1, A2}), context (\code{N, MAF}), #' and the marginal effect columns (\code{beta, se, z, p}). Populated #' uniformly across the individual-level and RSS paths. -#' @param x A \code{FineMappingRow} or \code{FineMappingResult}. +#' @param x A \code{QtlFineMappingResult} or \code{GwasFineMappingResult}. #' @param maxPval Optional numeric (length 1). When non-\code{NULL}, filter rows #' where \code{p > maxPval}. Default \code{NULL} (no filter). #' @param ... Class-specific selection arguments. @@ -1131,7 +1146,7 @@ setGeneric("marginalEffects", function(x, maxPval = NULL, ...) { #' \code{pip}, and credible-set membership columns (\code{cs_95}, etc.). Rows #' are filtered by PIP by default -- set \code{signalCutoff = 0} to return #' every variant. -#' @param x A \code{FineMappingRow} or \code{FineMappingResult}. +#' @param x A \code{QtlFineMappingResult} or \code{GwasFineMappingResult}. #' @param signalCutoff Numeric (length 1). Drop rows where \code{pip <= #' signalCutoff}. Default \code{0.025}. Use \code{signalCutoff = 0} to keep #' every variant. @@ -1171,7 +1186,7 @@ setGeneric( #' @title Get Credible Sets #' @description Extract credible set assignments at the requested coverage. -#' @param x A \code{FineMappingRow} or \code{FineMappingResult}. +#' @param x A \code{QtlFineMappingResult} or \code{GwasFineMappingResult}. #' @param ... Class-specific selection arguments plus \code{coverage}. #' @param studyName Character (length 1) or \code{NULL}. Restrict the selection #' to this study; \code{NULL} matches all studies. @@ -1204,15 +1219,16 @@ setGeneric("credibleSets", function(x, ...) standardGeneric("credibleSets")) #' single weight-source entry, so cTWAS and #' \code{\link{causalInferencePipeline}} extract weights identically whether #' the source is a \code{TwasWeights} collection (its learned weight vector) -#' or a \code{FineMappingResult} one (its topLoci posterior effect). The -#' selectors pin the single row the weights come from. -#' @param x A \code{TwasWeights} or a \code{FineMappingResult}. +#' or a fine-mapping one (its topLoci posterior effect). The selectors pin +#' the single row the weights come from. +#' @param x A \code{TwasWeights}, \code{QtlFineMappingResult} or +#' \code{GwasFineMappingResult}. #' @param studyName,context,trait,method Optional length-1 selectors pinning one #' row of a collection, as elsewhere; each \code{NULL} (default) leaves that #' part of the tuple unconstrained. Ignored when \code{x} is already a row. #' @param region Character (length 1, \code{"chr:start-end"}) or \code{NULL}. -#' A further selector for a \code{FineMappingResult}, whose rows also carry -#' a region; \code{NULL} (default) leaves it unconstrained. +#' A further selector for a fine-mapping result, whose rows also carry a +#' region; \code{NULL} (default) leaves it unconstrained. #' @param ... Reserved for future use. #' @return A \code{list} with \code{variantIds} (character) and \code{weights} #' (numeric) of equal length; both empty when no usable weights are present. @@ -1345,8 +1361,8 @@ setGeneric("cvFits", function(x, ...) standardGeneric("cvFits")) #' @title Get Method Names #' @description Extract the method name(s) an object was produced with: one #' per entry for a collection, a single name for one estimate. -#' @param x A \code{FineMappingResult}, \code{TwasWeights}, -#' \code{CtwasResult} or \code{H2Estimate} object. +#' @param x A \code{QtlFineMappingResult}, \code{GwasFineMappingResult}, +#' \code{TwasWeights}, \code{CtwasResult} or \code{H2Estimate} object. #' @return Character vector. #' @examples #' data(h2EstimateExample) @@ -1377,9 +1393,6 @@ setGeneric("weightsDataType", function(x, ...) { standardGeneric("weightsDataType") }) -# ============================================================================= -# AlleleQcResult accessor generics -# QcResult accessor generics # ============================================================================= # Published-output generics (VCF/BCF and BED) # ============================================================================= @@ -1397,7 +1410,7 @@ setGeneric("weightsDataType", function(x, ...) { #' \describe{ #' \item{\code{GwasSumStats}}{\code{ES} / \code{SS} / \code{AF} for one #' study.} -#' \item{\code{FineMappingResult}}{the marginal fields (\code{ES}, +#' \item{a fine-mapping result}{the marginal fields (\code{ES}, #' \code{SE}, \code{LP}, \code{SS}, \code{AF}) plus the posterior ones #' (\code{PIP}, \code{LBF}, \code{LFSR}, and a \code{CS}/\code{PUR} pair #' per credible-set coverage present).} @@ -1417,9 +1430,10 @@ setGeneric("weightsDataType", function(x, ...) { #' \code{splitByContext} / \code{splitByTrait} opt out of that and write one #' single-sample file per fit, at a path decorated with the axis value. #' -#' @param x A \code{GwasSumStats}, \code{FineMappingResult} or -#' \code{TwasWeights} object, or a \code{list} of \code{FineMappingResult} -#' / \code{TwasWeights} objects to combine first. +#' @param x A \code{GwasSumStats}, \code{QtlFineMappingResult}, +#' \code{GwasFineMappingResult} or \code{TwasWeights} object, or a +#' \code{list} of fine-mapping results or of \code{TwasWeights} objects to +#' combine first. #' @param outputPath File path for output. Extension determines format: #' \code{.vcf.gz} or \code{.vcf.bgz} for bgzipped VCF, \code{.bcf} for BCF, #' \code{.vcf} for uncompressed VCF. @@ -1459,7 +1473,7 @@ setGeneric("exportToVcf", function(x, outputPath, sampleName = NULL, ...) { #' observation. #' #' A \code{TwasWeights} writes one table, a row per (variant, weight column). -#' A \code{FineMappingResult} offers two, selected with \code{schema}: +#' A fine-mapping result offers two, selected with \code{schema}: #' \describe{ #' \item{\code{"topLoci"}}{(default) the posterior view joined to the #' marginal one, a row per (variant, context).} @@ -1483,12 +1497,12 @@ setGeneric("exportToVcf", function(x, outputPath, sampleName = NULL, ...) { #' \code{twasWeightsPipeline(fitFullData = FALSE)} produces) is refused rather #' than written out empty. #' -#' @param x A \code{FineMappingResult} or \code{TwasWeights} object, or a -#' \code{list} of either, to combine first. +#' @param x A \code{QtlFineMappingResult}, \code{GwasFineMappingResult} or +#' \code{TwasWeights} object, or a \code{list} of them, to combine first. #' @param outputPath Output path. A \code{.gz} / \code{.bgz} extension selects #' bgzip + tabix (via Rsamtools, so no htslib binary is needed); any other #' extension writes a plain table. -#' @param schema \code{FineMappingResult} only: which published schema to +#' @param schema Fine-mapping results only: which published schema to #' write, \code{"topLoci"} (default) or \code{"fsusie"}. #' @param coverage Which credible-set coverage levels to publish, as #' proportions (\code{c(0.95, 0.5)}). \code{NULL} (default) publishes every @@ -1505,9 +1519,9 @@ setGeneric("exportToVcf", function(x, outputPath, sampleName = NULL, ...) { #' written by default; naming one drops the other's columns, leaving a strict #' subset of the full table. #' @param signalCutoff PIP cutoff passed to \code{\link{topLoci}} -#' (\code{FineMappingResult}, \code{"topLoci"} schema only). Default 0.025. +#' (fine-mapping results, \code{"topLoci"} schema only). Default 0.025. #' @param minPurity Optional credible-set purity cutoff passed to -#' \code{\link{topLoci}} (\code{FineMappingResult}, \code{"topLoci"} schema +#' \code{\link{topLoci}} (fine-mapping results, \code{"topLoci"} schema #' only). Default \code{NULL} for no purity filter. #' @param columns Which of the SOURCE view's own variant-level columns to #' append after the published schema. \code{NULL} (default) appends none; @@ -1583,7 +1597,7 @@ setGeneric("traitNames", function(x) standardGeneric("traitNames")) #' @title Get Per-Row Analysis Windows #' @description Return the genomic interval each row was analysed over, as a #' \code{GRanges} with one range per row -- the trait's own region for a -#' \code{TwasWeights}, and for a \code{FineMappingResult} the window the fit +#' \code{TwasWeights}, and for a fine-mapping result the window the fit #' was run over (the requested region, or the trait's cis-window when the fit #' was driven by \code{traitId} + \code{cisWindow}). This is location #' provenance (e.g. for cTWAS LD-block placement). @@ -1642,8 +1656,8 @@ setGeneric("blockId", function(x, ...) standardGeneric("blockId")) #' @description Return the molecular feature's OWN genomic coordinates (the gene #' / peak range; TSS = \code{start()}) for each row of a per-tuple collection, #' as a \code{GRanges} with one range per row. Distinct from -#' \code{\link{genomicRegion}} (the fine-mapping window for a -#' \code{FineMappingResult}): the true trait position cannot be inferred from +#' \code{\link{genomicRegion}} (the window a fine-mapping result was fit +#' over): the true trait position cannot be inferred from #' summary statistics, so it is threaded from the QtlDataset \code{rowRanges} #' or an explicit QtlSumStats trait-position and carried as provenance onto #' \code{QtlFineMappingResult} and \code{TwasWeights}. @@ -1679,7 +1693,7 @@ setGeneric("traitPosition", function(x, ...) { #' around the trait; \code{NULL} uses the dataset default. #' @param samples Character vector or \code{NULL}. Restrict to these sample IDs; #' \code{NULL} uses all samples. -#' @param residualizationArgs What the data is residualized on, built with +#' @param residualizationParam What the data is residualized on, built with #' \code{\link{ResidualizationParam}}: \code{phenotypeCovariates} and #' \code{genotypeCovariates} choose the covariate sets, #' \code{residualizePhenotype} / \code{residualizeGenotype} turn each @@ -1711,7 +1725,7 @@ setGeneric("residualizedGenotypes", function(x, ...) { #' @param region Character (length 1, \code{"chr:start-end"}) or \code{NULL}. #' Restrict variants to this region; \code{NULL} uses the full cis window / #' all regions. -#' @param residualizationArgs What the data is residualized on, built with +#' @param residualizationParam What the data is residualized on, built with #' \code{\link{ResidualizationParam}}: \code{phenotypeCovariates} and #' \code{genotypeCovariates} choose the covariate sets, #' \code{residualizePhenotype} / \code{residualizeGenotype} turn each @@ -1779,7 +1793,7 @@ setGeneric("scaleResiduals", function(x) { }) # ============================================================================= -# GenotypeHandle / LD-statistic / Annotation / LdData / H2Estimate accessors +# GenotypeHandle / LD-statistic / LdMatrix / Annotation / H2Estimate accessors # ============================================================================= #' @title Get SNP Info @@ -1800,7 +1814,7 @@ setGeneric("snpInfo", function(x) standardGeneric("snpInfo")) #' @title Get Genotype Storage Format #' @description Return the detected genotype storage format. #' @param x A \code{GenotypeHandle}. -#' @return Character (length 1): one of "gds", "vcf", "plink1", "plink2". +#' @return Character (length 1): one of "plink1", "plink2", "bgen". #' @details The genotype handle is the seed layer behind a panel and #' is not part of the public interface; obtain a panel from #' \code{readGenotypes()} and ask it directly. @@ -1829,10 +1843,16 @@ setGeneric("sampleIds", function(x) standardGeneric("sampleIds")) setGeneric("pgenPtr", function(x) standardGeneric("pgenPtr")) #' @title Get Per-Block Eigendecompositions -#' @description Return the per-block eigendecomposition list carried by an -#' \code{LdEigen} object. +#' @description Return the per-block eigendecompositions of an +#' \code{LdEigen}: the stored ones, or, for one built from a genotype +#' panel (which stores none), every block's computed from the panel now. +#' That holds all of them in memory at once, which the estimators avoid by +#' decomposing one block at a time. #' @param x An \code{LdEigen}. -#' @return List of per-block eigen decompositions. +#' @return A list with one element per block, each a list with +#' \code{values}, \code{vectors} and \code{snpIdx}. One computed from a +#' panel also carries \code{nNull}: the number of the block's directions +#' whose eigenvalue is exactly zero, which it does not list. #' @examples #' data(ldEigenExample) #' eigenList(ldEigenExample) @@ -1841,18 +1861,12 @@ setGeneric("eigenList", function(x) standardGeneric("eigenList")) #' @title Get LD Reference Panel Size #' @description Return the reference-panel sample size used to compute an -#' \code{LdStatistic} or carried by an \code{LdData}. -#' @param x An \code{LdStatistic} or \code{LdData}. +#' \code{LdStatistic}. +#' @param x An \code{LdStatistic}. #' @return Integer (length 1). #' @examples -#' data(eqtlRegionExample) -#' X <- eqtlRegionExample$X[, 1:8] -#' gr <- GenomicRanges::GRanges("22", -#' IRanges::IRanges(seq(1L, by = 100L, length.out = 8), width = 1L)) -#' ld <- LdData(correlation = cor(X), variants = gr, -#' blockMetadata = S4Vectors::DataFrame( -#' chrom = "22", start = 1L, end = 1000L)) -#' ldPanelNSamples(ld) +#' data(ldEigenExample) +#' ldPanelNSamples(ldEigenExample) #' @export setGeneric("ldPanelNSamples", function(x) standardGeneric("ldPanelNSamples")) @@ -1868,10 +1882,14 @@ setGeneric("ldPanelNSamples", function(x) standardGeneric("ldPanelNSamples")) setGeneric("inSample", function(x) standardGeneric("inSample")) #' @title Get Per-Block LD Matrix List -#' @description Return the list of per-block LD (R^2) matrices used for the FGLS -#' residual covariance in g-LDSC. +#' @description Return the per-block LD correlation matrices g-LDSC forms its +#' FGLS residual covariance from: the stored ones, or, for an +#' \code{LdScore} built from a genotype panel (which stores none), every +#' block's computed from the panel now. That holds all of them in memory at +#' once, which the estimators avoid by reading one block at a time. #' @param x An \code{LdScore}. -#' @return List of matrices (empty list for S-LDSC). +#' @return A list with one element per block, each a list with \code{R} and +#' \code{snpIdx}; empty for a scores-only \code{LdScore}. #' @examples #' data(ldScoreExample) #' ldMatrixList(ldScoreExample) @@ -1890,13 +1908,13 @@ setGeneric("ldMatrixList", function(x) standardGeneric("ldMatrixList")) setGeneric("ldBlocks", function(x) standardGeneric("ldBlocks")) -#' @title Get GenotypeHandle from LdData -#' @description Return the \code{GenotypeHandle} (or list of handles for mixture -#' panels) carried by an \code{LdData}. -#' @param x An \code{LdData}. -#' @return A \code{GenotypeHandle}, a list of them, or NULL. For a -#' \code{QtlDataset} this is the handle itself; \code{genotypes()} -#' extracts a dosage block from it instead. +#' @title Get GenotypeHandle +#' @description Return the \code{GenotypeHandle} behind a \code{QtlDataset}'s +#' genotype experiment. +#' @param x A \code{QtlDataset}. +#' @return A \code{GenotypeHandle}, or NULL for genotypes read through no +#' handle (a VCF, GDS or PLINK1 file, or held in memory); +#' \code{genotypes()} extracts a dosage block instead. #' @details The genotype handle is the seed layer behind a panel and #' is not part of the public interface; obtain a panel from #' \code{readGenotypes()} and ask it directly. @@ -1906,92 +1924,25 @@ setGeneric("genotypeHandle", function(x) { }) #' @title Get Mixture Weights -#' @description Return the per-panel mixing proportions carried by an -#' \code{LdData} when its \code{genotypeHandle} slot is a list of panels. NULL -#' for single-panel objects. -#' @param x An \code{LdData}. +#' @description Return the weights a mixture's components are combined +#' with: an \code{\link{LdMatrix}} mixture's (\code{NULL} for a single +#' panel's LD), or a \code{\link{GenotypeMixture}}'s, named after its +#' panels. +#' @param x An \code{LdMatrix} or a \code{GenotypeMixture}. #' @return Numeric vector or NULL. #' @examples #' data(eqtlRegionExample) #' X <- eqtlRegionExample$X[, 1:8] -#' gr <- GenomicRanges::GRanges("22", -#' IRanges::IRanges(seq(1L, by = 100L, length.out = 8), width = 1L)) -#' ld <- LdData(correlation = cor(X), variants = gr, -#' blockMetadata = S4Vectors::DataFrame( -#' chrom = "22", start = 1L, end = 1000L)) -#' mixtureWeights(ld) +#' half <- seq_len(nrow(X) / 2) +#' mix <- LdMatrix( +#' list(LdMatrix(cor(X[half, ])), LdMatrix(cor(X[-half, ]))), +#' mixtureWeights = c(0.75, 0.25)) +#' mixtureWeights(mix) #' @export setGeneric("mixtureWeights", function(x) { standardGeneric("mixtureWeights") }) -#' @title Get SNP Indices -#' @description Return the integer indices into the handle's snpInfo carried by -#' an \code{LdData}. -#' @param x An \code{LdData}. -#' @return Integer vector or NULL. -#' @examples -#' data(eqtlRegionExample) -#' X <- eqtlRegionExample$X[, 1:8] -#' gr <- GenomicRanges::GRanges("22", -#' IRanges::IRanges(seq(1L, by = 100L, length.out = 8), width = 1L)) -#' ld <- LdData(correlation = cor(X), variants = gr, -#' blockMetadata = S4Vectors::DataFrame( -#' chrom = "22", start = 1L, end = 1000L)) -#' snpIdx(ld) -#' @export -setGeneric("snpIdx", function(x) standardGeneric("snpIdx")) - -#' @title Get Variant GRanges -#' @description Return the variant metadata \code{GRanges} of an \code{LdData}. -#' @param x An \code{LdData}. -#' @return A \code{GRanges}. -#' @examples -#' data(eqtlRegionExample) -#' X <- eqtlRegionExample$X[, 1:8] -#' gr <- GenomicRanges::GRanges("22", -#' IRanges::IRanges(seq(1L, by = 100L, length.out = 8), width = 1L)) -#' ld <- LdData(correlation = cor(X), variants = gr, -#' blockMetadata = S4Vectors::DataFrame( -#' chrom = "22", start = 1L, end = 1000L)) -#' variantInfo(ld) -#' @export -setGeneric("variantInfo", function(x) standardGeneric("variantInfo")) - -#' @title Get Block Metadata -#' @description Return the block metadata (\code{GRanges} or \code{data.frame}) -#' carried by an \code{LdData}. -#' @param x An \code{LdData}. -#' @return A \code{GRanges} or \code{data.frame}. -#' @examples -#' data(eqtlRegionExample) -#' X <- eqtlRegionExample$X[, 1:8] -#' gr <- GenomicRanges::GRanges("22", -#' IRanges::IRanges(seq(1L, by = 100L, length.out = 8), width = 1L)) -#' ld <- LdData(correlation = cor(X), variants = gr, -#' blockMetadata = S4Vectors::DataFrame( -#' chrom = "22", start = 1L, end = 1000L)) -#' blockMetadata(ld) -#' @export -setGeneric("blockMetadata", function(x) standardGeneric("blockMetadata")) - -#' @title Get Reference Panel (data.frame) -#' @description Flatten the variant \code{GRanges} of an \code{LdData} into a -#' reference-panel data.frame. -#' @param x An \code{LdData}. -#' @return A data.frame. -#' @examples -#' data(eqtlRegionExample) -#' X <- eqtlRegionExample$X[, 1:8] -#' gr <- GenomicRanges::GRanges("22", -#' IRanges::IRanges(seq(1L, by = 100L, length.out = 8), width = 1L)) -#' ld <- LdData(correlation = cor(X), variants = gr, -#' blockMetadata = S4Vectors::DataFrame( -#' chrom = "22", start = 1L, end = 1000L)) -#' refPanel(ld) -#' @export -setGeneric("refPanel", function(x) standardGeneric("refPanel")) - #' @title Get Per-Block tau Matrix #' @description Return the per-block jackknife tau matrix carried by an #' \code{H2Estimate}. @@ -2283,7 +2234,7 @@ setGeneric("sldscResults", function(x, trait = NULL, ...) { #' the five posterior probabilities, i.e. colocalization is the favoured #' hypothesis rather than merely a probable one. #' @param minAbsCorr Minimum absolute correlation between credible-set members -#' (purity). Requires the object's \code{ldSketch}; when that is absent, +#' (purity). Requires the object's \code{ldReference}; when that is absent, #' purity is reported as \code{NA} and no set is dropped. #' @param ... Additional arguments passed on to methods. #' @return A tibble at the requested granularity. @@ -2403,7 +2354,7 @@ setGeneric("chromPaths", function(x, ...) standardGeneric("chromPaths")) #' Across entries with different effect counts the collection method NA-fills #' the ragged columns. #' -#' @param x A \code{FineMappingRow} or \code{FineMappingResultBase}. +#' @param x A \code{QtlFineMappingResult} or \code{GwasFineMappingResult}. #' @param ... Ignored. #' @return A \code{tibble}: \code{variant_id} + \code{lbf_L1..lbf_LL} (the #' collection method also carries the entry identity columns). @@ -2421,7 +2372,7 @@ setGeneric("lbf", function(x, ...) standardGeneric("lbf")) #' per-variant \code{\link{credibleSets}}. Replaces the legacy #' per-effect `effect.tsv`. #' -#' @param x A \code{FineMappingRow} or \code{FineMappingResultBase}. +#' @param x A \code{QtlFineMappingResult} or \code{GwasFineMappingResult}. #' @param coverage Credible-set coverage to summarise. Default 0.95. #' @param ... Ignored. #' @return A \code{tibble}: \code{cs, effect_id, coverage, n_variants, @@ -2450,7 +2401,7 @@ setGeneric("credibleSetSummary", function(x, ...) { #' them from an untrimmed fit. Returns zero rows when the functional fields #' are absent. #' -#' @param x A \code{FineMappingRow} or \code{FineMappingResultBase}. +#' @param x A \code{QtlFineMappingResult} or \code{GwasFineMappingResult}. #' @param ... Ignored. #' @return A long \code{tibble}: \code{cs, chrom, pos, effect, lower, upper, #' halfwidth} -- \code{halfwidth} being \code{(upper - lower) / 2}, the @@ -2479,7 +2430,7 @@ setGeneric("fsusieCredibleBand", function(x, ...) { #' index-aligned because both describe the same joint group. Returns zero rows #' when the functional fields are absent. #' -#' @param x A \code{FineMappingRow} or \code{FineMappingResultBase}. +#' @param x A \code{QtlFineMappingResult} or \code{GwasFineMappingResult}. #' @param ... Ignored. #' @return A long \code{tibble}: \code{cs, chrom, jointTrait, traitPos, #' effect} (the collection method additionally carries the entry identity @@ -2503,7 +2454,7 @@ setGeneric("fsusieTraitEffects", function(x, ...) { #' (\code{"pos"}/\code{"neg"}; upstream discards it). Uses retained functional #' summaries or an untrimmed fit; empty when those fields are absent. #' -#' @param x A \code{FineMappingRow} or \code{FineMappingResultBase}. +#' @param x A \code{QtlFineMappingResult} or \code{GwasFineMappingResult}. #' @param ... Ignored. #' @return A \code{GRanges} of affected intervals with mcols \code{cs}, #' \code{purity}, \code{direction} (plus entry identity for the collection). diff --git a/R/AnnotationMatrix.R b/R/AnnotationMatrix.R index af272e841..3f066e345 100644 --- a/R/AnnotationMatrix.R +++ b/R/AnnotationMatrix.R @@ -195,9 +195,9 @@ AnnotationMatrix <- function( # Annotations of one tier. A column subset: SummarizedExperiment keeps the # rows, the assay and the per-annotation table aligned, where the previous # implementation rebuilt the object from three separately-subset pieces. -# @noRd # Callers are methods dispatching on AnnotationMatrix, so the class is # already guaranteed here -- no assertClass. +# @noRd .annotTier <- function(x, tier) { x[, SummarizedExperiment::colData(x)$tier == tier] } diff --git a/R/ColocBoostResult.R b/R/ColocBoostResult.R index 181c947c2..3db3f54a9 100644 --- a/R/ColocBoostResult.R +++ b/R/ColocBoostResult.R @@ -23,7 +23,7 @@ # # What the two DO share is the LD panel they were computed against and the # projection surface, so both extend ColocResultBase -- which carries the -# ldSketch slot and its accessor -- and both answer colocPairs() and +# ldReference slot and its accessor -- and both answer colocPairs() and # colocVariants(). # # element the member variants of one CoS @@ -32,7 +32,7 @@ # CharacterList -- native variable arity), purity, cosNpc, # minNpcOutcome, topVariable, topVariableVcp, focalOutcome, # isColocalized -# slots ldSketch, outcomeInfo, regionVcp, computingTime +# slots ldReference, outcomeInfo, regionVcp, computingTime # # Uncolocalized (outcome-specific) sets are elements too, flagged # isColocalized = FALSE, rather than living in a second container: they have @@ -204,7 +204,7 @@ setMethod("show", "ColocBoostResult", function(object) { #' naming the GWAS study for the per-study \code{separate_gwas} runs. #' @param outcomeInfo Data frame mapping outcome \code{name} to \code{study}, #' \code{context}, \code{trait} and \code{dataForm}. -#' @param ldSketch Optional genotype panel (see +#' @param ldReference Optional genotype panel (see #' \code{\link{readGenotypes}}). #' @param computingTime Optional list of per-analysis timings. #' @param includeUncolocalized Keep the outcome-specific (uncolocalized) sets @@ -232,7 +232,7 @@ ColocBoostResult <- function( analysis, gwasStudy = NA_character_, outcomeInfo = NULL, - ldSketch = NULL, + ldReference = NULL, computingTime = list(), includeUncolocalized = TRUE ) { @@ -257,7 +257,7 @@ ColocBoostResult <- function( rows, outcomeInfo = as.data.frame(outcomeInfo), regionVcp = .cbrRegionVcp(results), - ldSketch = .asLdSketch(ldSketch), + ldReference = .asLdRef(ldReference), computingTime = computingTime ) } @@ -430,8 +430,6 @@ ColocBoostResult <- function( if (is.null(v) || length(v) == 0L) NA_real_ else as.numeric(v)[[1L]] } -# @noRd - # `FALSE` means "no focal outcome was set"; anything else is the trait name. # @noRd .cbrFocalOutcome <- function(v) { @@ -471,7 +469,7 @@ ColocBoostResult <- function( rows, outcomeInfo, regionVcp, - ldSketch, + ldReference, computingTime ) { elements <- map(rows, .cbrElementFor) @@ -482,7 +480,7 @@ ColocBoostResult <- function( obj <- new( "ColocBoostResult", grl, - ldSketch = .asLdSketch(ldSketch), + ldReference = .asLdRef(ldReference), outcomeInfo = outcomeInfo, regionVcp = regionVcp, computingTime = computingTime diff --git a/R/ColocResult.R b/R/ColocResult.R index 867e1640b..08188b439 100644 --- a/R/ColocResult.R +++ b/R/ColocResult.R @@ -17,7 +17,7 @@ # inner mcols per-variant: SNP.PP.H4 # outer mcols per-pair: identity tuple, blockId, PP.H0..PP.H4, nSnps, # retained alpha mass (both sides), enrichment / p12Used -# slots ldSketch, for the credible-set view's purity calculation +# slots ldReference, for the credible-set view's purity calculation # # Nothing is filtered at write time (spec 5.3): every testable pair and every # variant is kept, and all narrowing is a view decision. Purity in particular @@ -46,28 +46,29 @@ NULL #' projection surface: both answer \code{\link{colocPairs}} and #' \code{\link{colocVariants}}, so code that only needs "which variants #' colocalized, and how strongly" works against either. -#' @slot ldSketch The LD reference panel the underlying fits were computed -#' against, or \code{NULL}. Shared by both subclasses: coloc and ColocBoost -#' report different statistics, but both are computed against a panel and -#' both are asked for it the same way. +#' @slot ldReference The LD reference the underlying fits were computed +#' against (a genotype panel, a \code{GenotypeMixture} or an +#' \code{LdMatrix}), or \code{NULL}. Shared by both subclasses: coloc and +#' ColocBoost report different statistics, but both are computed against a +#' reference and both are asked for it the same way. #' @export setClass( "ColocResultBase", contains = c("VIRTUAL", "RangedTupleList"), - representation(ldSketch = "LdSketch_OR_NULL"), - prototype(ldSketch = NULL) + representation(ldReference = "LdReference_OR_NULL"), + prototype(ldReference = NULL) ) -#' @rdname ldSketch +#' @rdname ldReference #' @export -setMethod("ldSketch", "ColocResultBase", function(x) x@ldSketch) +setMethod("ldReference", "ColocResultBase", function(x) x@ldReference) #' @title Colocalization Result #' @description A collection of colocalization results, one element per tested #' (QTL credible set, GWAS credible set, block) pair. Build the four views #' with \code{\link{colocPairs}}, \code{\link{colocVariants}}, #' \code{\link{colocCredibleSets}} and \code{\link{colocGenes}}. -#' @details The inherited \code{ldSketch} is what +#' @details The inherited \code{ldReference} is what #' \code{colocCredibleSets()} uses to compute credible-set purity. #' @seealso \code{\link{colocPipeline}} #' @export @@ -197,7 +198,7 @@ setMethod("show", "ColocResult", function(object) { #' columns are \code{NA} for it. #' @param variants A list, parallel to \code{pairs}' rows, of per-pair data #' frames with a \code{variant_id} column and a \code{SNP.PP.H4} column. -#' @param ldSketch Optional genotype panel (see \code{\link{readGenotypes}}) +#' @param ldReference Optional genotype panel (see \code{\link{readGenotypes}}) #' for the LD reference, used by \code{\link{colocCredibleSets}} to #' compute purity. #' @return A \code{ColocResult}. @@ -217,7 +218,7 @@ setMethod("show", "ColocResult", function(object) { #' )) #' ColocResult(pairs, variants) #' @export -ColocResult <- function(pairs, variants, ldSketch = NULL) { +ColocResult <- function(pairs, variants, ldReference = NULL) { pairs <- as.data.frame(pairs, stringsAsFactors = FALSE) if (!is.list(variants) || length(variants) != nrow(pairs)) { msg <- glue( @@ -237,7 +238,7 @@ ColocResult <- function(pairs, variants, ldSketch = NULL) { !!!c(as.list(pairs), list(check.names = FALSE)) ) ) - obj <- new("ColocResult", grl, ldSketch = .asLdSketch(ldSketch)) + obj <- new("ColocResult", grl, ldReference = .asLdRef(ldReference)) validObject(obj) obj } @@ -461,7 +462,7 @@ setMethod( } out <- bind_rows(sets) .crApplyPurityFilter( - mutate(out, purity = .crPuritiesFor(out, ldSketch(x))), + mutate(out, purity = .crPuritiesFor(out, ldReference(x))), minAbsCorr ) } @@ -535,23 +536,23 @@ setMethod( # one LD extraction per set (section 3.7). NA when there is no LD reference to # extract from -- reported honestly rather than defaulted to a passing value. # @noRd -.crPuritiesFor <- function(out, ldSketch) { - if (is.null(ldSketch)) { +.crPuritiesFor <- function(out, ldReference) { + if (is.null(ldReference)) { return(rep(NA_real_, nrow(out))) } - map_dbl(out$csVariants, .crPurityOne, ldSketch = ldSketch) + map_dbl(out$csVariants, .crPurityOne, ldReference = ldReference) } # @noRd #' @importFrom rlang try_fetch -.crPurityOne <- function(ids, ldSketch) { +.crPurityOne <- function(ids, ldReference) { # A singleton set has no pair to correlate, and susie treats it as pure. if (length(ids) < 2L) { return(1) } ld <- try_fetch( - .ldFromSketch( - ldSketch, + .ldFromRef( + ldReference, ids, label = "colocCredibleSets", onMissing = "drop" diff --git a/R/CtwasResult.R b/R/CtwasResult.R index 59bcfdb3c..cbe7b156e 100644 --- a/R/CtwasResult.R +++ b/R/CtwasResult.R @@ -8,7 +8,7 @@ # run, so genes live inside the payload. Optional joint columns (jointStudies, # jointContexts) tag rows born from a multi-study / multi-context cTWAS run and # participate in the uniqueness key, exactly as in the TwasWeights / -# FineMappingResult families. +# FineMappingResultBase families. # ============================================================================= #' @include AllGenerics.R tupleSelectors.R diff --git a/R/GenotypeDosageSeed.R b/R/GenotypeDosageSeed.R new file mode 100644 index 000000000..1cb587989 --- /dev/null +++ b/R/GenotypeDosageSeed.R @@ -0,0 +1,383 @@ +# ============================================================================= +# GenotypeDosageSeed -- a DelayedArray backend over a VCF, GDS or PLINK1 file +# ----------------------------------------------------------------------------- +# A VCF, GDS or PLINK1 panel reads its dosages through this seed, as a PLINK2 +# or BGEN panel reads through a GenotypeHandle's GhSeed. Each row is one +# variant: one ALT allele of one record of the file, so a record with several +# ALT alleles is read as one variant per ALT allele. The seed knows where each +# row's record is in the file and which allele the row counts, and turns what +# the file stores into that allele's dosage. What it reads is its `field`: +# +# vcfGt a VCF's GT calls, through VariantAnnotation +# vcfDs a VCF's FORMAT/DS values, through VariantAnnotation +# snpGdsSnpOrder a SNPRelate GDS's genotype codes, stored SNP by SNP +# snpGdsSampleOrder or sample by sample, through GDSArray +# seqArrayGt a SeqArray GDS's allele indices, through GDSArray +# seqArrayDs a SeqArray GDS's annotation/format/DS, through GDSArray +# plinkBed a PLINK1 .bed's genotype codes, through PlinkMatrix +# +# VCFArray's seed is not built on. It reads a row through every record that +# overlaps the row's range, so in a VCF whose records overlap -- a split +# multi-allelic site, a deletion spanning a SNP -- it returns more rows than +# were asked for and DelayedArray rejects the block. The VCF fields are read +# through VariantAnnotation, as VCFArray reads them, and each record is +# picked out of what its range returns. +# +# Orientation: variants x samples, as for GhSeed. +# ============================================================================= + +#' @include AllGenerics.R +NULL + +#' DelayedArray seed over a VCF, GDS or PLINK1 file +#' +#' Lets the dosages of a VCF, GDS or PLINK1 file back a \code{DelayedArray} +#' that reads the file a block at a time, as \code{GhSeed} does for the +#' formats a \code{GenotypeHandle} reads. +#' +#' @slot backend What the file is read through: a +#' \code{VariantAnnotation::VcfFile}, the \code{GDSArray} seed of the +#' GDS node holding the field, or the stem of a PLINK1 fileset, which +#' \code{PlinkMatrix::read_bed_subset()} reads. +#' @slot field Which field is read, and so how it becomes a dosage: +#' \code{"vcfGt"}, \code{"vcfDs"}, \code{"snpGdsSnpOrder"}, +#' \code{"snpGdsSampleOrder"}, \code{"seqArrayGt"}, +#' \code{"seqArrayDs"} or \code{"plinkBed"}. +#' @slot rowRecord Integer; for each row, the element of \code{records} it +#' reads. +#' @slot rowAllele Integer; for each row, the ALT allele it counts, 1 for a +#' record's first ALT allele. +#' @slot records Where each record is in the file. For a VCF, a +#' \code{GRanges} of each record's REF allele, with \code{posRank}, the +#' record's rank among those starting at its position; for a GDS, an +#' \code{IRanges} of the columns (or SeqArray's 2-bit planes) of the node +#' holding it; for a PLINK1 fileset, an \code{IRanges} of each variant's +#' position in the \code{.bed}. +#' @slot dn List of dimnames (variant ids, sample ids). +#' @name GenotypeDosageSeed-class +#' @keywords internal +#' @importClassesFrom S4Vectors Vector +#' @importFrom BiocGenerics width +setClass( + "GenotypeDosageSeed", + representation( + backend = "ANY", + field = "character", + rowRecord = "integer", + rowAllele = "integer", + records = "Vector", + dn = "list" + ) +) + +#' @rdname GenotypeDosageSeed-class +setMethod("dim", "GenotypeDosageSeed", function(x) { + c(length(x@rowRecord), length(x@dn[[2L]])) +}) + +#' @rdname GenotypeDosageSeed-class +setMethod("dimnames", "GenotypeDosageSeed", function(x) x@dn) + +#' @rdname GenotypeDosageSeed-class +#' @importFrom S4Arrays extract_array +setMethod("extract_array", "GenotypeDosageSeed", function(x, index) { + # A NULL index means everything along that dimension, as for GhSeed. + dm <- dim(x) + i <- index[[1L]] %||% seq_len(dm[[1L]]) + j <- index[[2L]] %||% seq_len(dm[[2L]]) + if (length(i) == 0L || length(j) == 0L) { + return(matrix(numeric(0), length(i), length(j))) + } + # Each distinct row and sample is read once, in file order, and the block + # then laid out as asked: DelayedArray may ask in any order, and repeat. + rows <- sort(unique(i)) + samples <- sort(unique(j)) + block <- .gdSeedRead(x, rows, samples) + block[match(i, rows), match(j, samples), drop = FALSE] +}) + +# Internal accessors: GenotypeDosageSeed is not exported, so these add no +# public surface, and they keep the `@` next to the class. +# @noRd +.gdSeedBackend <- function(x) x@backend + +# @noRd +.gdSeedField <- function(x) x@field + +# @noRd +.gdSeedRowRecord <- function(x) x@rowRecord + +# @noRd +.gdSeedRowAllele <- function(x) x@rowAllele + +# @noRd +.gdSeedRecords <- function(x) x@records + +# The dosages of rows `rows` for samples `samples`, both ascending and +# distinct: a length(rows) x length(samples) matrix. A GDS seed's backend is +# GDSArray's, whose methods are there only once its namespace is loaded, +# which reading a saved panel back does not do. +# @noRd +.gdSeedRead <- function(x, rows, samples) { + if (str_starts(.gdSeedField(x), "snpGds|seqArray")) { + loadNamespace("GDSArray") + } + switch( + .gdSeedField(x), + vcfGt = , + vcfDs = .vcfSeedRead(x, rows, samples), + snpGdsSnpOrder = , + snpGdsSampleOrder = .snpGdsSeedRead(x, rows, samples), + seqArrayGt = .seqArrayGtSeedRead(x, rows, samples), + seqArrayDs = .seqArrayDsSeedRead(x, rows, samples), + plinkBed = .plinkBedSeedRead(x, rows, samples) + ) +} + +# The seed cut to rows `keep` (ascending positions), carrying only the +# records those rows read, so a panel cut to a few variants does not carry +# every record of the file. +# @noRd +.gdSeedRows <- function(seed, keep) { + rowRecord <- .gdSeedRowRecord(seed)[keep] + used <- sort(unique(rowRecord)) + methods::initialize( + seed, + rowRecord = match(rowRecord, used), + rowAllele = .gdSeedRowAllele(seed)[keep], + records = .gdSeedRecords(seed)[used], + dn = list(dimnames(seed)[[1L]][keep], dimnames(seed)[[2L]]) + ) +} + +# ---- VCF ------------------------------------------------------------------- + +# The VCF FORMAT field a seed reads. +# @noRd +.vcfSeedFieldName <- function(x) { + if (.gdSeedField(x) == "vcfGt") "GT" else "DS" +} + +# A VCF seed's rows: the records they read are fetched by their ranges, each +# picked out of what its range returns, and the field turned into the +# dosage of each row's ALT allele. +# @noRd +.vcfSeedRead <- function(x, rows, samples) { + recordOfRow <- .gdSeedRowRecord(x)[rows] + wanted <- sort(unique(recordOfRow)) + spans <- .gdSeedRecords(x)[wanted] + queryRanges <- IRanges::reduce(spans) + queryRanges <- `names<-`( + queryRanges, + as.character(seq_along(queryRanges)) + ) + sampleIds <- dimnames(x)[[2L]][samples] + vcf <- VariantAnnotation::readVcf( + .vcfSeedFile(x), + param = VariantAnnotation::ScanVcfParam( + fixed = NA, + info = NA, + geno = .vcfSeedFieldName(x), + samples = sampleIds, + which = queryRanges + ) + ) + returned <- .vcfMatchRecords(spans, queryRanges, vcf, x) + values <- VariantAnnotation::geno(vcf)[[.vcfSeedFieldName(x)]] + picked <- values[ + returned[match(recordOfRow, wanted)], + match(sampleIds, colnames(values)), + drop = FALSE + ] + alleles <- .gdSeedRowAllele(x)[rows] + if (.gdSeedField(x) == "vcfGt") { + return(vcfGtDosageCpp(picked, alleles)) + } + .vcfDsDosage(picked, alleles) +} + +# A fresh VcfFile over the seed's file and index. The one the seed holds is +# not read through directly: one saved with the panel and loaded again would +# carry a stale connection. +# @noRd +.vcfSeedFile <- function(x) { + file <- .gdSeedBackend(x) + VariantAnnotation::VcfFile(path(file), index = Rsamtools::index(file)) +} + +# Which row of `vcf` holds each record of `spans`. +# +# A range returns every record overlapping it, so a record is not simply the +# n-th row returned. Each record lies in exactly one of the disjoint +# `queryRanges`, and that range returns every record starting at the +# record's position, in file order; so the record is the row from its range +# that starts at its position with its rank there, which `posRank` recorded +# when the panel was read. Matching on integers keeps the seed free of a +# string per record. +# @noRd +.vcfMatchRecords <- function(spans, queryRanges, vcf, x) { + got <- SummarizedExperiment::rowRanges(vcf) + have <- tibble( + range = as.integer(as.character(got$paramRangeID)), + start = as.integer(start(got)) + ) |> + mutate( + rank = row_number(), + .by = all_of(c("range", "start")) + ) + want <- tibble( + range = findOverlaps(spans, queryRanges, select = "first"), + start = as.integer(start(spans)), + rank = as.integer(S4Vectors::mcols(spans)$posRank) + ) + hit <- vctrs::vec_match(want, have) + if (anyNA(hit)) { + abort(c( + glue( + "{path(.gdSeedBackend(x))} no longer holds the records the ", + "panel read from it." + ), + i = "Read it again with readGenotypes()." + )) + } + hit +} + +# The dosage of each row's ALT allele from a block of FORMAT/DS values: one +# value per ALT allele (Number=A, list cells), or one per record (Number=1), +# which is then its first ALT allele's. A row asking for an allele the +# record holds no value for is missing. +# @noRd +.vcfDsDosage <- function(values, alleles) { + if (!is.list(values)) { + return(unname(`[<-`(values, alleles != 1L, , value = NA_real_))) + } + # A list keeps its dim through as.vector(); drop it to walk the cells. + cells <- `dim<-`(values, NULL) + nValues <- lengths(cells) + allele <- rep(alleles, times = ncol(values)) + held <- allele <= nValues + dosage <- rep(NA_real_, length(cells)) + if (any(held)) { + flat <- as.numeric(list_c(cells)) + at <- cumsum(nValues) - nValues + allele + dosage <- replace(dosage, held, flat[at[held]]) + } + matrix(dosage, nrow = nrow(values)) +} + +# ---- SNPRelate GDS --------------------------------------------------------- + +# A SNPRelate GDS stores genotype codes 0-2 counting the first of a SNP's two +# alleles, which is therefore A1, and 3 for a missing call. +# @noRd +.snpGdsSeedRead <- function(x, rows, samples) { + variant <- start(.gdSeedRecords(x))[.gdSeedRowRecord(x)[rows]] + codes <- if (.gdSeedField(x) == "snpGdsSnpOrder") { + extract_array(.gdSeedBackend(x), list(variant, samples)) + } else { + t(extract_array(.gdSeedBackend(x), list(samples, variant))) + } + replace(`storage.mode<-`(codes, "double"), codes == 3L, NA_real_) +} + +# ---- SeqArray GDS ---------------------------------------------------------- + +# A SeqArray GDS stores each call's allele indices (0 for REF, k for the +# k-th ALT allele) in 2-bit planes, ploidy x samples x planes: one plane per +# record, or more for a record with too many alleles for one, its index then +# the planes' sum weighted by 1, 4, 16, .... A missing allele sets every bit +# of the record's planes. A call with a missing allele is missing, as +# SeqArray's own dosages read it. +# @noRd +.seqArrayGtSeedRead <- function(x, rows, samples) { + recordOfRow <- .gdSeedRowRecord(x)[rows] + wanted <- sort(unique(recordOfRow)) + planes <- .gdSeedRecords(x)[wanted] + bits <- extract_array( + .gdSeedBackend(x), + list(NULL, samples, sequence(width(planes), start(planes))) + ) + last <- cumsum(width(planes)) + calls <- map2( + last - width(planes) + 1L, + width(planes), + .seqArrayRecordCalls, + bits = bits + ) + copies <- map2( + calls[match(recordOfRow, wanted)], + .gdSeedRowAllele(x)[rows], + .seqArrayCopies + ) + matrix(list_c(copies), nrow = length(rows), byrow = TRUE) +} + +# One record's allele indices, ploidy x samples, from its `n` planes starting +# at plane `first` of `bits`; NA where an allele is missing. +# @noRd +.seqArrayRecordCalls <- function(first, n, bits) { + weighted <- map( + seq_len(n), + .seqArrayPlaneValue, + first = first, + bits = bits + ) + value <- reduce(weighted, `+`) + replace(value, value == 4^n - 1, NA) +} + +# Plane `k` of a record whose planes start at `first`, weighted by its place. +# @noRd +.seqArrayPlaneValue <- function(k, first, bits) { + plane <- matrix(bits[,, first + k - 1L], nrow = dim(bits)[[1L]]) + plane * 4^(k - 1L) +} + +# The copies of ALT allele `allele` in each sample's call; NA for a call with +# a missing allele. +# @noRd +.seqArrayCopies <- function(calls, allele) { + colSums(calls == allele) +} + +# A SeqArray GDS stores FORMAT/DS as samples x values, each record's values +# in consecutive columns: one per ALT allele (Number=A), or one (Number=1), +# which is then its first ALT allele's. A missing value is stored as NaN. +# @noRd +.seqArrayDsSeedRead <- function(x, rows, samples) { + spans <- .gdSeedRecords(x)[.gdSeedRowRecord(x)[rows]] + alleles <- .gdSeedRowAllele(x)[rows] + column <- start(spans) + alleles - 1L + held <- alleles <= width(spans) + missing <- matrix(NA_real_, length(rows), length(samples)) + if (!any(held)) { + return(missing) + } + columns <- sort(unique(column[held])) + values <- t(extract_array(.gdSeedBackend(x), list(samples, columns))) + dosage <- `[<-`( + missing, + held, + , + value = values[match(column[held], columns), , drop = FALSE] + ) + replace(dosage, is.nan(dosage), NA_real_) +} + +# ---- PLINK1 ---------------------------------------------------------------- + +# A PLINK1 .bed stores 2-bit genotype codes SNP by SNP. PlinkMatrix reads them +# as the copies of each variant's A1 allele -- the .bim's fifth column, as +# pecotmr counts it -- with NA for a missing call. It is not told the sample +# count: it counts the .fam itself, and a wrong count would misread silently. +# The stem may be a bundled example's portable reference, resolved here. +# @noRd +.plinkBedSeedRead <- function(x, rows, samples) { + variant <- start(.gdSeedRecords(x))[.gdSeedRowRecord(x)[rows]] + PlinkMatrix::read_bed_subset( + .resolveGenotypeResourcePath(.gdSeedBackend(x)), + variant, + samples + ) +} diff --git a/R/GenotypeHandle.R b/R/GenotypeHandle.R index c424eb36c..133fe4418 100644 --- a/R/GenotypeHandle.R +++ b/R/GenotypeHandle.R @@ -1,9 +1,11 @@ # ============================================================================= # GenotypeHandle S4 class # ----------------------------------------------------------------------------- -# Lazy file handle for genotype data (PLINK1, PLINK2, VCF/BCF, GDS). Opens -# the file for metadata only (sample IDs and SNP info); dosage extraction -# is deferred until extractBlockGenotypes() is called. +# Lazy file handle for genotype data (PLINK2, BGEN). Opens the file for +# metadata only (sample IDs and SNP info); dosage extraction is deferred until +# extractBlockGenotypes() is called. A VCF, GDS or PLINK1 file is read as a +# panel directly, through a GenotypeDosageSeed (genotypeIo.R), not through a +# handle. # ============================================================================= #' @include AllGenerics.R @@ -11,13 +13,13 @@ NULL #' @title Genotype File Handle #' @description S4 container holding a path + format + metadata for lazy -#' genotype access. Supports PLINK1 (.bed/.bim/.fam), PLINK2 -#' (.pgen/.pvar/.psam), VCF/BCF, and GDS. +#' genotype access. Supports PLINK2 (.pgen/.pvar/.psam) and BGEN (.bgen +#' with its .bgi index); a VCF, GDS or PLINK1 file is read as a panel by +#' \code{readGenotypes()} without one. #' @slot path Character, file path. For a one-file-per-chromosome handle this is #' the chrom-meta file path (a display/provenance value); the per-chromosome #' payload files live in \code{chromPaths}. -#' @slot format Character, one of \code{"plink1"}, \code{"plink2"}, -#' \code{"vcf"}, \code{"gds"}. +#' @slot format Character, \code{"plink2"} or \code{"bgen"}. #' @slot snpInfo data.frame, SNP metadata read from the index/sidecar. For a #' sharded handle this is the union across chromosomes (row-bound in the order #' the shards were supplied), so \code{snpIdx} stays a single global index @@ -49,7 +51,7 @@ setClass( chromPaths = character(0) ), validity = function(object) { - validFormats <- c("gds", "vcf", "plink1", "plink2") + validFormats <- c("plink2", "bgen") nm <- names(object@chromPaths) badChromPaths <- length(object@chromPaths) > 0L && (is.null(nm) || any(str_length(nm) == 0L) || anyDuplicated(nm)) @@ -100,54 +102,51 @@ setMethod("show", "GenotypeHandle", function(object) { #' forms. Exactly one of the following must be specified: #' \describe{ #' \item{\code{path}}{A single file path with a recognized extension: -#' \code{.vcf}, \code{.vcf.gz}, \code{.vcf.bgz}, \code{.bcf}, or -#' \code{.gds}. Format is auto-detected from the extension.} -#' \item{\code{plink1Prefix}}{A path prefix; the constructor appends -#' \code{.bed}, \code{.bim}, and \code{.fam} to locate the triplet.} +#' \code{.bgen} or \code{.pgen}. Format is auto-detected from the +#' extension. A BGEN file needs its \code{.bgi} index beside it, and +#' its sample ids in the file or in a \code{.sample} file beside it. A +#' VCF, GDS or PLINK1 file is refused: it is read as a panel by +#' \code{readGenotypes()}.} #' \item{\code{plink2Prefix}}{A path prefix; the constructor appends #' \code{.pgen}, \code{.pvar} (or \code{.pvar.zst}), and \code{.psam} #' to locate the triplet.} -#' \item{\code{bed} + \code{bim} + \code{fam}}{Explicit PLINK1 triplet. -#' The three files must share a stem; if they don't, use -#' \code{plink1Prefix} or arrange symlinks at a common stem.} #' \item{\code{pgen} + \code{pvar} + \code{psam}}{Explicit PLINK2 -#' triplet. Same shared-stem requirement.} +#' triplet. The three files must share a stem; if they don't, use +#' \code{plink2Prefix} or arrange symlinks at a common stem.} #' \item{\code{genoMeta}}{One genotype file per chromosome. Either a path #' to a whitespace/TSV meta file whose first column is the chromosome #' (\code{#chr}) and second column the per-chromosome payload -#' (a \code{.bed}/\code{.pgen}/\code{.vcf[.gz]}/\code{.bcf}/\code{.gds} -#' file or a PLINK prefix; relative paths resolve against the meta -#' file's directory), or a named character vector mapping chromosome to -#' payload. All shards must share one format and identical sample IDs in -#' the same order. Extraction is routed to the correct file by the -#' requested region's chromosome.} +#' (a \code{.pgen}/\code{.bgen} file or a PLINK2 prefix; +#' relative paths resolve against the meta file's directory), or a +#' named character vector mapping chromosome to payload. All shards +#' must share one format and identical sample IDs in the same order. +#' Extraction is routed to the correct file by the requested region's +#' chromosome.} #' } #' The constructor opens the file for metadata only (sample IDs and SNP #' info); dosage extraction is deferred until \code{extractBlockGenotypes()} #' is called. #' -#' @param path Single file path (.vcf/.vcf.gz/.vcf.bgz/.bcf/.gds), or -#' \code{NULL}. -#' @param plink1Prefix Path prefix for a PLINK1 triplet, or \code{NULL}. +#' @param path Single file path (.bgen/.pgen), or \code{NULL}. #' @param plink2Prefix Path prefix for a PLINK2 triplet, or \code{NULL}. -#' @param bed,bim,fam Explicit paths to the PLINK1 triplet, or all \code{NULL}. #' @param pgen,pvar,psam Explicit paths to the PLINK2 triplet, or all #' \code{NULL}. #' @param ldMeta Path to an LD-meta TSV file (columns \code{chrom}, #' \code{start}, \code{end}, \code{path}; the \code{path} column may be #' comma-separated as \code{ld_file,bim_file}). Requires \code{region}. The #' constructor resolves the row covering \code{region}, then delegates to the -#' appropriate file-based handler. When the resolved row points at PLINK1 / -#' PLINK2 / VCF / GDS files, the corresponding reader is used; \code{.cor.xz} -#' (pre-computed LD-matrix) rows are not supported here -- use -#' \code{\link{loadLdMatrix}} for that case. +#' appropriate file-based handler. When the resolved row points at PLINK2 +#' or BGEN files, the corresponding reader is used; a row pointing +#' at a pre-computed LD matrix (\code{.cor.xz}) is refused, as pecotmr reads +#' no pre-computed LD from disk -- wrap such a matrix in an +#' \code{\link{LdMatrix}} instead. #' @param region Region specification for \code{ldMeta} lookup: #' \code{"chr:start-end"} string or a one-row data.frame with \code{chrom}, #' \code{start}, \code{end}. #' @param genoMeta One-file-per-chromosome specification: a path to a #' \code{#chr,path} meta file or a named character vector (names = #' chromosomes, values = payload paths/prefixes). Optionally pass -#' \code{format} via \code{...} to force a single backend for every shard. +#' \code{format} to force a single backend for every shard. #' @param chroms Optional character vector of chromosomes. With \code{genoMeta} #' (a sharded, one-file-per-chromosome panel) only the shards whose chromosome #' is listed are read, skipping the rest -- an I/O optimisation when the panel @@ -157,18 +156,15 @@ setMethod("show", "GenotypeHandle", function(object) { #' shard is read (so the caller's own absence check can report the mismatch). #' Only meaningful with \code{genoMeta}; supplying it with any other source is #' an error (a single-file panel has no per-chromosome shards to skip). -#' @param vcfArgs Optional named list of arguments forwarded to -#' \code{VariantAnnotation::readVcf} when the source is a VCF. +#' @param format Character, \code{"plink2"} or \code{"bgen"}, forcing the +#' backend of \code{path} or of every \code{genoMeta} shard. If NULL, +#' inferred from the file extension. #' @return A \code{GenotypeHandle} object. #' @keywords internal #' @rdname GenotypeHandle-class GenotypeHandle <- function( path = NULL, - plink1Prefix = NULL, plink2Prefix = NULL, - bed = NULL, - bim = NULL, - fam = NULL, pgen = NULL, pvar = NULL, psam = NULL, @@ -176,13 +172,12 @@ GenotypeHandle <- function( region = NULL, genoMeta = NULL, chroms = NULL, - format = NULL, - vcfArgs = list() + format = NULL ) { flags <- .ghValidateArgs( - bed = bed, - bim = bim, - fam = fam, + bed = NULL, + bim = NULL, + fam = NULL, pgen = pgen, pvar = pvar, psam = psam, @@ -191,28 +186,20 @@ GenotypeHandle <- function( ) sources <- .ghResolveSources( path = path, - plink1Prefix = plink1Prefix, + plink1Prefix = NULL, plink2Prefix = plink2Prefix, ldMeta = ldMeta, genoMeta = genoMeta, chroms = chroms, flags = flags ) - # .ghResolveSources() has already enforced that exactly one is TRUE, so - # the chosen name is well defined and the switch is total. switch( names(sources)[which(sources)], - path = .readGenotypeHandle(path, format = format, vcfArgs = vcfArgs), - plink1Prefix = .makePlink1Handle(plink1Prefix), + path = .readGenotypeHandle(path, format = format), plink2Prefix = .makePlink2Handle(plink2Prefix), - plink1Triplet = .genotypeHandleFromPlink1Triplet(bed, bim, fam), plink2Triplet = .genotypeHandleFromPlink2Triplet(pgen, pvar, psam), - ldMeta = .genotypeHandleFromLdMeta(ldMeta, region, vcfArgs = vcfArgs), - genoMeta = .genotypeHandleFromChromMeta( - genoMeta, - chroms = chroms, - format = format - ) + ldMeta = .genotypeHandleFromLdMeta(ldMeta, region), + genoMeta = .genotypeHandleFromChromMeta(genoMeta, chroms, format) ) } @@ -250,7 +237,8 @@ GenotypeHandle <- function( } # Build the exactly-one-source indicator vector; error unless exactly one input -# source was supplied, and gate `chroms` to the genoMeta path. +# source was supplied, and gate `chroms` to the genoMeta path. Because exactly +# one entry is TRUE, GenotypeHandle()'s switch on its name is total. # @noRd .ghResolveSources <- function( path, @@ -290,9 +278,8 @@ GenotypeHandle <- function( sources } -.genotypeHandleFromLdMeta <- function(ldMeta, region, vcfArgs = list()) { - ldPath <- .ghResolveLdPath(ldMeta, region) - .ghLdPathToHandle(ldPath, vcfArgs = vcfArgs) +.genotypeHandleFromLdMeta <- function(ldMeta, region) { + .ghLdPathToHandle(.ghResolveLdPath(ldMeta, region)) } # Resolve the single genotype-payload path for `region` from an LD meta, @@ -303,7 +290,7 @@ GenotypeHandle <- function( if (length(ldPaths) == 0L) { regionStr <- deparse(region) msg <- glue( - "GenotypeHandle: no LD-meta row covers region {regionStr} ", + "ldMeta: no LD-meta row covers region {regionStr} ", "in {ldMeta}." ) abort(msg) @@ -311,10 +298,9 @@ GenotypeHandle <- function( if (length(ldPaths) > 1L) { regionStr <- deparse(region) msg <- glue( - "GenotypeHandle: region {regionStr} spans multiple LD-meta ", - "rows; the GenotypeHandle constructor only resolves single-row ", - "regions. Use loadLdMatrix() for multi-row regions, or restrict ", - "the region to a single LD block." + "ldMeta: region {regionStr} spans multiple LD-meta rows; ", + "only a region within one row is resolved. Restrict the region ", + "to a single LD block." ) abort(msg) } @@ -322,53 +308,49 @@ GenotypeHandle <- function( if (str_detect(ldPath, regex("\\.cor(\\.xz)?$", ignore_case = TRUE))) { regionStr <- deparse(region) msg <- glue( - "GenotypeHandle: the LD-meta row for region {regionStr} points ", - "at a pre-computed correlation matrix ({ldPath}). Use ", - "loadLdMatrix() for .cor.xz inputs; ", - "GenotypeHandle accepts only genotype payloads (VCF/GDS/PLINK)." + "ldMeta: the LD-meta row for region {regionStr} points at a ", + "pre-computed correlation matrix ({ldPath}). pecotmr does not ", + "read pre-computed LD from disk; wrap the matrix in an LdMatrix ", + "instead. An LD-meta row names genotypes (VCF/GDS/BGEN/PLINK)." ) abort(msg) } ldPath } -# Dispatch a resolved genotype path to the format-specific reader by extension. +# The handle of the genotype file or PLINK prefix an LD-meta row names, for a +# format a GenotypeHandle reads. # @noRd -.ghLdPathToHandle <- function(ldPath, vcfArgs = list()) { - lower <- str_to_lower(ldPath) - if (str_detect(lower, "\\.vcf(\\.b?gz)?$") || str_ends(lower, "\\.bcf")) { - return(.readGenotypeHandle(ldPath, format = "vcf", vcfArgs = vcfArgs)) - } - if (str_ends(lower, "\\.gds")) { - return(.readGenotypeHandle(ldPath, format = "gds")) - } - if (str_ends(lower, "\\.bed")) { - return(.makePlink1Handle( - str_remove(ldPath, regex("\\.bed$", ignore_case = TRUE)) - )) - } - if (str_ends(lower, "\\.pgen")) { - return(.makePlink2Handle( - str_remove(ldPath, regex("\\.pgen$", ignore_case = TRUE)) - )) - } - msg <- glue( - "GenotypeHandle: unsupported LD-meta file extension on ", - "'{ldPath}'. Expected one of ", - ".vcf/.vcf.gz/.vcf.bgz/.bcf/.gds/.bed/.pgen." +.ghLdPathToHandle <- function(ldPath) { + .readGenotypeHandle( + ldPath, + format = .requireGenotypeFormat(ldPath, "ldMeta") + ) +} + +# The panel of the genotype file or PLINK prefix an LD-meta row names, in any +# format. +# @noRd +.ghLdPathToPanel <- function(ldPath, vcfArgs = list()) { + .readGenotypePanel( + ldPath, + format = .requireGenotypeFormat(ldPath, "ldMeta"), + vcfArgs = vcfArgs ) - abort(msg) } +# The stem the three files of a PLINK1 triplet share, which is how its panel +# is read. +# @noRd #' @importFrom checkmate assertString -.genotypeHandleFromPlink1Triplet <- function(bed, bim, fam) { +.plink1TripletStem <- function(bed, bim, fam) { assertString(bed) assertString(bim) assertString(fam) stems <- c( - bed = file_path_sans_ext(bed), - bim = file_path_sans_ext(bim), - fam = file_path_sans_ext(fam) + bed = .genotypeStem(bed), + bim = .genotypeStem(bim), + fam = .genotypeStem(fam) ) if (n_distinct(stems) != 1L) { stemList <- str_c(" ", names(stems), ": ", stems, collapse = "\n") @@ -382,7 +364,7 @@ GenotypeHandle <- function( ) abort(msg) } - .makePlink1Handle(unname(stems[1L])) + unname(stems[1L]) } .genotypeHandleFromPlink2Triplet <- function(pgen, pvar, psam) { @@ -391,11 +373,10 @@ GenotypeHandle <- function( abort("Each of `pgen`, `pvar`, `psam` must be a single file path.") } } - pvarStem <- str_remove(pvar, regex("\\.zst$", ignore_case = TRUE)) stems <- c( - pgen = file_path_sans_ext(pgen), - pvar = file_path_sans_ext(pvarStem), - psam = file_path_sans_ext(psam) + pgen = .genotypeStem(pgen), + pvar = .genotypeStem(pvar), + psam = .genotypeStem(psam) ) if (n_distinct(stems) != 1L) { stemList <- str_c(" ", names(stems), ": ", stems, collapse = "\n") @@ -447,7 +428,7 @@ GenotypeHandle <- function( if (length(multi) > 0L) { multiStr <- str_flatten(multi, ", ") msg <- glue( - "GenotypeHandle(genoMeta): chromosome(s) {multiStr} map to ", + "genoMeta: chromosome(s) {multiStr} map to ", "multiple genotype payloads; each chromosome must map to ", "exactly one payload (no sub-chromosomal blocks)." ) @@ -480,7 +461,7 @@ GenotypeHandle <- function( ))) } msg <- glue( - "GenotypeHandle(genoMeta): expected a path to a `#chr,path` meta ", + "genoMeta: expected a path to a `#chr,path` meta ", "file or a named character vector (names = chromosomes, ", "values = paths)." ) @@ -508,7 +489,7 @@ GenotypeHandle <- function( ) if (ncol(meta) < 2L) { msg <- glue( - "GenotypeHandle(genoMeta): meta file '{genoMeta}' must have ", + "genoMeta: meta file '{genoMeta}' must have ", "at least 2 columns (chromosome, path)." ) abort(msg) @@ -536,51 +517,50 @@ GenotypeHandle <- function( map_chr(pth, .ghResolvePath, base = base) } -# Build a single-file GenotypeHandle for one shard payload, dispatching to the -# right reader. `format` (optional) forces a backend; otherwise it is detected -# from the file extension, falling back to PLINK prefix probing. +# The format of one shard payload: `format` when it is forced, else told by +# the file extension, falling back to probing a PLINK prefix's sidecars. +# Nothing is read, so a set's shards can be checked to share one format +# before any of them is. +# @noRd +.shardFormat <- function(p, format = NULL) { + format %||% .requireGenotypeFormat(p, "genoMeta") +} + +# Build a single-file GenotypeHandle for one shard payload, of a format a +# handle reads. `format` (optional) forces a backend; otherwise it is detected +# as .shardFormat() detects it. #' @keywords internal .resolveGenotypeShard <- function(p, format = NULL) { - lower <- str_to_lower(p) - if (!is.null(format)) { - if (format == "plink1") { - return(.makePlink1Handle(p)) - } - if (format == "plink2") { - return(.makePlink2Handle(p)) - } - return(.readGenotypeHandle(p, format = format)) - } - if (str_detect(lower, "\\.vcf(\\.b?gz)?$") || str_ends(lower, "\\.bcf")) { - return(.readGenotypeHandle(p, format = "vcf")) - } - if (str_ends(lower, "\\.gds")) { - return(.readGenotypeHandle(p, format = "gds")) - } - if (str_ends(lower, "\\.bed")) { - return(.makePlink1Handle( - str_remove(p, regex("\\.bed$", ignore_case = TRUE)) - )) + .readGenotypeHandle(p, format = .shardFormat(p, format)) +} + +# The panel of a per-chromosome meta. A VCF, GDS or PLINK1 set is its +# shards' panels stacked (.stackDosagePanels()); a set in a format a handle +# reads, one sharded handle's panel. `chroms` (optional) restricts the read +# to the shards for those chromosomes, as for .genotypeHandleFromChromMeta(). +# @noRd +.chromMetaPanel <- function(genoMeta, chroms = NULL, format = NULL) { + parsed <- .parseChromMeta(genoMeta) + if (nrow(parsed) == 0L) { + abort( + "genoMeta: no chromosomes found in the meta input." + ) } - if (str_ends(lower, "\\.pgen")) { - return(.makePlink2Handle( - str_remove(p, regex("\\.pgen$", ignore_case = TRUE)) + selected <- .chromMetaSelect(parsed, chroms) + formats <- map_chr(selected$path, .shardFormat, format = format) + shared <- .chromMetaCheckFormats(formats) + if (!is_in(shared, .DOSAGE_PANEL_FORMATS)) { + return(.genotypeExperiment( + .genotypeHandleFromChromMeta(genoMeta, chroms, format) )) } - # No recognized extension: treat as a PLINK prefix, probe for the sidecar. - if (file.exists(str_c(p, ".bed"))) { - return(.makePlink1Handle(p)) - } - if (file.exists(str_c(p, ".pgen"))) { - return(.makePlink2Handle(p)) - } - msg <- glue( - "GenotypeHandle(genoMeta): cannot determine genotype format for ", - "'{p}'. Use a recognized extension ", - "(.bed/.pgen/.vcf[.gz]/.bcf/.gds), a PLINK prefix, or pass ", - "`format=`." - ) - abort(msg) + panels <- map2(selected$path, formats, .readDosagePanel) + .withSourceProjection(.stackDosagePanels( + panels, + shared, + .chromMetaPath(genoMeta), + selected$path + )) } # Assemble a sharded handle from a per-chromosome meta. Reads each shard's @@ -599,12 +579,12 @@ GenotypeHandle <- function( parsed <- .parseChromMeta(genoMeta) if (nrow(parsed) == 0L) { abort( - "GenotypeHandle(genoMeta): no chromosomes found in the meta input." + "genoMeta: no chromosomes found in the meta input." ) } selected <- .chromMetaSelect(parsed, chroms) shards <- map(selected$path, .resolveGenotypeShard, format = format) - sharedFormat <- .chromMetaCheckFormats(shards) + sharedFormat <- .chromMetaCheckFormats(map_chr(shards, .ghFormat)) .chromMetaCheckSamples(shards, selected) unifiedSnpInfo <- bind_rows(map(shards, .ghSnpInfo)) new( @@ -635,14 +615,13 @@ GenotypeHandle <- function( if (any(keep)) filter(parsed, keep) else parsed } -# Require a single shared format across shards; returns it. +# Require a single shared format across shards' `formats`; returns it. # @noRd -.chromMetaCheckFormats <- function(shards) { - formats <- map_chr(shards, .ghFormat) +.chromMetaCheckFormats <- function(formats) { if (n_distinct(formats) != 1L) { formatStr <- str_flatten(unique(formats), ", ") msg <- glue( - "GenotypeHandle(genoMeta): all per-chromosome files must share ", + "genoMeta: all per-chromosome files must share ", "one format; got: {formatStr}." ) abort(msg) @@ -658,7 +637,7 @@ GenotypeHandle <- function( if (!identical(shards[[i]]@sampleIds, sample0)) { mismatchPath <- parsed$path[[i]] msg <- glue( - "GenotypeHandle(genoMeta): all per-chromosome files must ", + "genoMeta: all per-chromosome files must ", "have identical sample IDs in the same order (mismatch ", "at '{mismatchPath}')." ) @@ -683,7 +662,7 @@ GenotypeHandle <- function( return(invisible(NULL)) } msg <- glue( - "GenotypeHandle(genoMeta): chromosome '{ch}' appears ", + "genoMeta: chromosome '{ch}' appears ", "in more than one per-chromosome file." ) abort(msg) diff --git a/R/GenotypeMixture.R b/R/GenotypeMixture.R new file mode 100644 index 000000000..4456c2104 --- /dev/null +++ b/R/GenotypeMixture.R @@ -0,0 +1,515 @@ +# ============================================================================= +# GenotypeMixture S4 class +# ----------------------------------------------------------------------------- +# A mixture of genotype panels used as one LD reference: a +# MultiAssayExperiment with one experiment per cohort, that cohort's panel. +# Its LD is the weighted average of the panels' LD, sum_k w_k R_k. The panels +# stay as they are -- lazy, on disk -- and are combined only when a step +# reads LD for some variants, so each keeps answering for its own samples: +# allele frequencies, sample size, missingness. +# ============================================================================= + +#' @include AllGenerics.R +NULL + +#' @title Mixture of Genotype Panels +#' @description A \code{GenotypeMixture} uses several genotype panels (see +#' \code{\link{readGenotypes}}) as one LD reference whose LD is the +#' weighted average of theirs, \eqn{\sum_k w_k R_k}. That is the LD of +#' summary statistics meta-analysed across cohorts, with each cohort's +#' weight its share of the GWAS sample size. +#' +#' Unlike an \code{\link{LdMatrix}} mixture, which is combined once when it +#' is built, the panels stay lazy and on disk: LD is read from each and +#' combined only for the variants a step asks about, and every panel keeps +#' answering for its own samples. A step that needs allele frequencies, +#' missingness or minor-allele counts judges each panel on its own and +#' drops a variant that fails in any of them. +#' +#' It \strong{is} a \code{MultiAssayExperiment} with one experiment per +#' cohort: that cohort's genotype panel, cut to the variants every panel +#' carries, in the first panel's order. The mixture's variants, as +#' \code{\link{variantIds}} gives them, are the first panel's. Each panel +#' keeps its own samples and allele coding, and its \code{rowData} column +#' \code{mixtureSign} is \code{1} where it codes a variant's alleles as the +#' first panel does and \code{-1} where it codes them the other way round. +#' The \code{sampleMap} names each sample \code{_}, since +#' cohorts can reuse sample ids, and the weights are +#' \code{metadata(x)$mixtureWeights} (see \code{\link{mixtureWeights}}). +#' +#' Row subsetting, \code{x[i, ]} by position, variant id or \code{GRanges}, +#' cuts every panel to the same variants, and column subsetting narrows +#' the panels' samples. A panel cannot be dropped, since the weights +#' describe all of them: build a new \code{GenotypeMixture} over the panels +#' wanted instead. +#' @seealso \code{\link{GenotypeMixture}} to build one, \code{\link{LdMatrix}}. +#' @importClassesFrom MultiAssayExperiment MultiAssayExperiment +#' @export +setClass("GenotypeMixture", contains = "MultiAssayExperiment") + +setValidity("GenotypeMixture", function(object) { + problems <- .gmCheckComponents(object) + if (length(problems) == 0L) { + problems <- c(.gmCheckSign(object), .gmCheckWeights(object)) + } + if (length(problems) == 0L) TRUE else problems +}) + +# @noRd +.gmCheckComponents <- function(object) { + comps <- .gmComponents(object) + if (length(comps) < 2L || !all(map_lgl(comps, .gmIsPanel))) { + return("the experiments must be at least two genotype panels.") + } + if (length(unique(map_int(comps, nrow))) != 1L) { + return("every panel must hold exactly the mixture's variants.") + } + character() +} + +# A panel as a mixture holds it: the RSE readGenotypes() returns. +# @noRd +.gmIsPanel <- function(x) { + methods::is(x, "RangedSummarizedExperiment") +} + +# @noRd +.gmCheckSign <- function(object) { + signs <- map(.gmComponents(object), .gmComponentSign) + if (all(map_lgl(signs, .gmIsSign)) && all(signs[[1L]] == 1)) { + return(character()) + } + str_c( + "every panel's rowData must carry `mixtureSign`, +1 or -1 per ", + "variant, and the first panel's must be all +1." + ) +} + +# @noRd +.gmIsSign <- function(s) { + !is.null(s) && all(is_in(s, c(-1, 1))) +} + +# @noRd +.gmCheckWeights <- function(object) { + w <- mixtureWeights(object) + named <- identical(names(w), names(.gmComponents(object))) + c( + .ldmCheckWeights(w), + if (length(w) == 0L || !named) { + "`mixtureWeights` must hold one weight per panel, named after it." + } + ) +} + +#' @title Build a GenotypeMixture +#' @description Combine genotype panels into one LD reference whose LD is +#' the weighted average of theirs. See \code{\link{GenotypeMixture-class}}. +#' +#' The panels are matched by position and alleles and put into the first +#' panel's allele coding, so they need not share variant ids or allele +#' orientation. The mixture covers the variants every panel carries; a +#' variant some panel lacks is left out, with a message. +#' @param panels A named list of at least two genotype panels (see +#' \code{\link{readGenotypes}}). The names are the cohorts: they name the +#' mixture's experiments and prefix its samples. +#' @param mixtureWeights One non-negative weight per panel, summing to 1; +#' typically each cohort's share of the GWAS sample size. Matched to the +#' panels by name when named, by position otherwise. +#' @return A \code{GenotypeMixture}. +#' @examples +#' panel <- readGenotypes(plink2Prefix = file.path(system.file("extdata", +#' "ld_reference", "chr22", package = "pecotmr"), +#' "protocol_example.LD.chr22")) +#' half <- seq_len(ncol(panel) / 2) +#' mix <- GenotypeMixture(list(EUR = panel[, half], AFR = panel[, -half]), +#' mixtureWeights = c(EUR = 0.7, AFR = 0.3)) +#' mix +#' @rdname GenotypeMixture-constructor +#' @importFrom MultiAssayExperiment MultiAssayExperiment +#' @export +GenotypeMixture <- function(panels, mixtureWeights) { + .gmAssertPanels(panels) + panels <- map(panels, .asLdRef) + if (!all(map_lgl(panels, .gmIsPanel))) { + abort("Every element of `panels` must be a genotype panel.") + } + w <- .gmNamedWeights(mixtureWeights, names(panels)) + ref <- panels[[1L]] + matched <- map(panels, .ldmMatchTo, ref = ref) + common <- sort(reduce(map(matched, "refIdx"), intersect)) + if (length(common) == 0L) { + abort("The genotype panels share no variant to combine over.") + } + .ldmReportDropped( + length(.ldRefRanges(ref)) - length(common), + length(common), + what = "GenotypeMixture" + ) + aligned <- map(matched, .ldmAlignedOn, common = common) + experiments <- map2(panels, aligned, .gmAlignedComponent) + mae <- MultiAssayExperiment( + experiments = experiments, + colData = .gmColData(experiments), + sampleMap = .gmSampleMap(experiments), + metadata = list(mixtureWeights = w) + ) + obj <- methods::new("GenotypeMixture", mae) + validObject(obj) + obj +} + +# @noRd +.gmAssertPanels <- function(panels) { + if (!is.list(panels) || length(panels) < 2L) { + abort("`panels` must be a list of at least two genotype panels.") + } + nms <- names(panels) + if (is.null(nms) || anyNA(nms) || any(!nzchar(nms)) || anyDuplicated(nms)) { + abort(c( + str_c( + "`panels` must be a named list: each name is a cohort, which ", + "names its experiment and prefixes its samples." + ), + i = "For example, list(EUR = eurPanel, AFR = afrPanel)." + )) + } + invisible(NULL) +} + +# The weights, one per panel and named after it: matched by name when they +# are named, by position otherwise. +# @noRd +.gmNamedWeights <- function(mixtureWeights, cohorts) { + given <- names(mixtureWeights) + w <- .ldmAssertWeights(mixtureWeights, length(cohorts)) + if (is.null(given)) { + return(set_names(w, cohorts)) + } + if (anyDuplicated(given) || !setequal(given, cohorts)) { + abort(glue( + "Named `mixtureWeights` must name each panel once: ", + "{str_flatten(cohorts, ', ')}." + )) + } + set_names(w, given)[cohorts] +} + +# A panel cut to the shared variants in the first panel's order, recording +# how it codes each one's alleles relative to the first panel. +# @noRd +.gmAlignedComponent <- function(panel, aligned) { + .gmWithSign(.ldRefSubset(panel, aligned$idx), aligned$sign) +} + +# @noRd +.gmWithSign <- function(panel, sign) { + rd <- SummarizedExperiment::rowData(panel) + rd$mixtureSign <- as.numeric(sign) + SummarizedExperiment::`rowData<-`(panel, value = rd) +} + +# The primary name of each of a cohort's samples. Cohorts can reuse sample +# ids, and every stochastic sketch does, so the cohort is part of the name. +# @noRd +.gmPrimaryIds <- function(cohort, ids) { + str_c(cohort, "_", ids) +} + +# One row per sample of every panel, recording its cohort. +# @noRd +.gmColData <- function(experiments) { + exec(rbind, !!!unname(imap(experiments, .gmColDataPart))) +} + +# @noRd +.gmColDataPart <- function(panel, cohort) { + ids <- as.character(colnames(panel)) + S4Vectors::DataFrame( + cohort = rep(cohort, length(ids)), + row.names = .gmPrimaryIds(cohort, ids) + ) +} + +# The sampleMap: each panel's samples under their cohort-prefixed names. +# @noRd +.gmSampleMap <- function(experiments) { + exec(rbind, !!!unname(imap(experiments, .gmSampleMapPart))) +} + +# @noRd +.gmSampleMapPart <- function(panel, cohort) { + ids <- as.character(colnames(panel)) + S4Vectors::DataFrame( + assay = factor(rep(cohort, length(ids)), levels = cohort), + primary = .gmPrimaryIds(cohort, ids), + colname = ids + ) +} + +# ---- subsetting ------------------------------------------------------------- + +# Row subsetting cuts every panel to the same variants. Every subscript is +# turned into positions on the first panel, whose ids and alleles the +# mixture's are, and those positions are applied to all of them: the panels' +# own ids can differ in allele order, so matching each on its own could cut +# them to different variants. +#' @importFrom MultiAssayExperiment subsetByRow +setMethod("subsetByRow", c("GenotypeMixture", "ANY"), function(x, y, ...) { + .gmRowsAt(x, .gmRowIndex(x, y)) +}) + +# The weights describe every panel, so none can be dropped. +#' @importFrom MultiAssayExperiment subsetByAssay +setMethod("subsetByAssay", "GenotypeMixture", function(x, y) { + abort(c( + str_c( + "A GenotypeMixture's panels cannot be subset: its weights ", + "describe all of them." + ), + i = "Build a new GenotypeMixture() over the panels wanted." + )) +}) + +# The positions of the variants a row subscript names: a position, a logical +# mask, a variant id (the first panel's row names) or a GRanges. +# @noRd +#' @importFrom IRanges overlapsAny +.gmRowIndex <- function(x, y) { + ranges <- .gmRanges(x) + if (methods::is(y, "GenomicRanges")) { + return(which(overlapsAny(ranges, y))) + } + if (is.character(y)) { + at <- match(y, names(ranges)) + return(at[!is.na(at)]) + } + if (is.logical(y) || is.numeric(y)) { + return(seq_along(ranges)[y]) + } + abort(str_c( + "A GenotypeMixture's rows are subset by position, logical mask, ", + "variant id or GRanges." + )) +} + +# The mixture with every panel cut to the variants at positions `i`, in +# that order. +# @noRd +#' @importFrom MultiAssayExperiment ExperimentList +.gmRowsAt <- function(x, i) { + comps <- map(.gmComponents(x), .gmComponentRowsAt, i = i) + MultiAssayExperiment::`experiments<-`(x, value = ExperimentList(comps)) +} + +# One panel's rows `i`. With no rows left it is held in memory with its +# samples, which the sampleMap names, so an empty mixture does not carry its +# panels' seeds (see .emptyPanel()). +# @noRd +.gmComponentRowsAt <- function(panel, i) { + sign <- .gmComponentSign(panel)[i] + rows <- if (length(i) == 0L) { + .emptyPanel(panel, keepSamples = TRUE) + } else { + .ldRefSubset(panel, i) + } + .gmWithSign(rows, sign) +} + +# ---- accessors -------------------------------------------------------------- + +#' @rdname mixtureWeights +#' @export +setMethod("mixtureWeights", "GenotypeMixture", function(x) { + S4Vectors::metadata(x)$mixtureWeights +}) + +#' @rdname variantIds +#' @export +setMethod("variantIds", "GenotypeMixture", function(x, ...) { + .ldRefVariantIds(x) +}) + +#' @rdname GenotypeMixture-class +#' @param object A \code{GenotypeMixture}. +#' @export +setMethod("show", "GenotypeMixture", function(object) { + w <- mixtureWeights(object) + comps <- .gmComponents(object) + cat(glue( + "GenotypeMixture: {.gmNVariants(object)} variants from ", + "{length(comps)} genotype panels\n", + .trim = FALSE + )) + cat(glue( + " panels {str_flatten(names(comps), ', ')}; weights ", + "{str_flatten(signif(w, 3), ', ')}; panel sizes ", + "{str_flatten(map_int(comps, ncol), ', ')}\n", + .trim = FALSE + )) +}) + +# ---- the LD reference answers, combined over the panels --------------------- + +# The panels, named after their cohorts. +# @noRd +#' @importFrom MultiAssayExperiment experiments +.gmComponents <- function(x) { + as.list(experiments(x)) +} + +# @noRd +.gmComponentSign <- function(panel) { + SummarizedExperiment::rowData(panel)$mixtureSign +} + +# A +1 / -1 matrix with one row per variant and one column per panel: each +# panel's allele coding relative to the first's. +# @noRd +.gmSign <- function(x) { + exec(cbind, !!!unname(map(.gmComponents(x), .gmComponentSign))) +} + +# The mixture's variants: the first panel's ranges, with the SNP / A1 / A2 +# columns that identify them. +# @noRd +.gmRanges <- function(x) { + rr <- SummarizedExperiment::rowRanges(.gmComponents(x)[[1L]]) + S4Vectors::`mcols<-`( + rr, + value = S4Vectors::mcols(rr)[, c("SNP", "A1", "A2")] + ) +} + +# @noRd +.gmNVariants <- function(x) { + nrow(.gmComponents(x)[[1L]]) +} + +# 1 / sum(w^2 / n_k) over the panels' sizes as `nOf` measures them: the size +# of one panel whose LD would be as noisy as the weighted average. +# @noRd +.gmPooledN <- function(x, nOf) { + n <- map_int(.gmComponents(x), nOf) + as.integer(round(1 / sum(mixtureWeights(x)^2 / n))) +} + +# The mixture's LD among its variants at `idx`: each panel's LD, re-signed +# into the first panel's allele coding, averaged with the weights. One +# panel's block is held at a time. +# @noRd +.gmLdAt <- function(x, idx) { + reduce( + seq_along(.gmComponents(x)), + .gmAddLd, + .init = NULL, + x = x, + idx = idx + ) +} + +# @noRd +.gmAddLd <- function(acc, k, x, idx) { + s <- .gmSign(x)[idx, k] + term <- mixtureWeights(x)[[k]] * + unname(.ldRefLdAt(.gmComponents(x)[[k]], idx)) * + outer(s, s) + if (is.null(acc)) term else acc + term +} + +# Per-variant statistics a panel filter judges, from each panel on its own +# terms: a variant's MAF is its smallest in any panel and its missingness its +# largest, so a cutoff drops a variant that fails in any of them. +# @noRd +.gmVariantStats <- function(x, idx, needMissing, step) { + each <- map( + .gmComponents(x), + .ldRefVariantStats, + idx = idx, + needMissing = needMissing, + step = step + ) + list( + maf = exec(pmin, !!!unname(map(each, "maf"))), + missRate = if (needMissing) exec(pmax, !!!unname(map(each, "missRate"))) + ) +} + +# The mixture's A1 frequency, sum_k w_k p_k with each panel's frequency put +# into the first panel's coding, or NULL unless every panel records one. +# @noRd +.gmAf <- function(x) { + afs <- map(.gmComponents(x), .ldRefAf) + if (any(map_lgl(afs, is.null))) { + return(NULL) + } + signs <- .gmSign(x) + aligned <- map(seq_along(afs), .gmAlignedAf, afs = afs, signs = signs) + reduce(map2(unname(mixtureWeights(x)), aligned, `*`), `+`) +} + +# @noRd +.gmAlignedAf <- function(k, afs, signs) { + if_else(signs[, k] > 0, afs[[k]], 1 - afs[[k]]) +} + +# Per-variant genotype variance averaged over the panels with the weights -- +# the average within-panel variance, which is what the averaged LD describes. +# The variance of the pooled frequency, 2p(1 - p), would also count the +# spread of frequencies between panels, which the mixture LD leaves out. +# @noRd +.gmVariance <- function(x, idx) { + each <- map(.gmComponents(x), .ldRefVariance, idx = idx) + reduce(map2(unname(mixtureWeights(x)), each, `*`), `+`) +} + +# A factor of the mixture's LD over `idx`: each panel's standardized +# dosages, re-signed and scaled by sqrt(w_k / (m_k - 1)), stacked by rows, +# then scaled so the crossproduct is (N - 1) R for N rows -- the same +# convention as a single panel's scaled dosages. Its crossproduct is the +# weighted average of the panels' LD exactly, .gmLdAt()'s. +# @noRd +.gmFactor <- function(x, idx) { + blocks <- map(seq_along(.gmComponents(x)), .gmFactorBlock, x = x, idx = idx) + stacked <- exec( + rbind, + !!!blocks, + !!!map2(blocks, unname(mixtureWeights(x)), .gmMonomorphicRows) + ) + stacked * sqrt(nrow(stacked) - 1) +} + +# A variant monomorphic in a panel has an all-zero column in that panel's +# block, which would leave the mixture's LD short of a unit diagonal. A +# panel's LD treats such a variant as independent of every other (see +# .ldCleanCorrelation()), so in the average it contributes w_k to the +# variant's own variance and nothing else: two rows per such variant, holding +# +/- sqrt(w_k / 2) in its column, so the column keeps a zero mean and an +# engine that centres the factor's rows itself still sees the same LD. +# @noRd +.gmMonomorphicRows <- function(block, w) { + dead <- which(colSums(block^2) == 0) + .ldPaddingRows(dead, ncol(block), sqrt(w / 2)) +} + +# @noRd +.gmFactorBlock <- function(k, x, idx) { + scaled <- .ldRefStandardized(.gmComponents(x)[[k]], idx) + signed <- sweep(scaled, 2L, .gmSign(x)[idx, k], `*`) + signed * sqrt(mixtureWeights(x)[[k]] / (nrow(scaled) - 1)) +} + +# TRUE when two mixtures average the same panels -- the same samples, in the +# same order -- with the same weights. Their variant sets may differ, as two +# QC'd subsets of one mixture's do. +# @noRd +.gmSameMixture <- function(x, y) { + cx <- .gmComponents(x) + cy <- .gmComponents(y) + length(cx) == length(cy) && + isTRUE(all.equal(mixtureWeights(x), mixtureWeights(y))) && + identical( + map(cx, .ldRefSampleIds), + map(cy, .ldRefSampleIds) + ) +} diff --git a/R/GwasFineMappingResult.R b/R/GwasFineMappingResult.R index 1a2aefd9c..db4978363 100644 --- a/R/GwasFineMappingResult.R +++ b/R/GwasFineMappingResult.R @@ -8,7 +8,7 @@ # range -- the genome-wide-across-blocks shape that # qtlEnrichmentPipeline / colocPipeline expect when sweeping a study # across LD blocks. Class-level slots: -# * ldSketch GenotypeHandle for the LD reference; required for the +# * ldReference GenotypeHandle for the LD reference; required for the # LD-block-indexed susieRSS workflow. # Methods that take per-row selectors accept (study, method) and ignore # context/trait (GWAS has no per-tuple context or trait axis). @@ -133,7 +133,7 @@ setClass( #' @param dataSource Optional per-row label for the kind of input the fit saw, #' \code{"individual"} or \code{"sumstat"}. Recorded rather than derived: a #' combined collection can hold rows of both kinds, and its single -#' \code{ldSketch} cannot say which row came from which. +#' \code{ldReference} cannot say which row came from which. #' @param weightStandardized Optional per-row flag: whether the posterior #' effect is on the STANDARDIZED genotype scale. The posterior effect IS the #' prediction weight, so it carries the same scale question as a TWAS @@ -141,7 +141,7 @@ setClass( #' it standardizes genotypes before fitting, and the posterior mean is #' reported on the scale of the \code{X} the fit was given. The argument #' exists for a collection assembled by hand, where only the caller knows. -#' @param ldSketch An optional genotype panel (see +#' @param ldReference An optional genotype panel (see #' \code{\link{readGenotypes}}). #' @param traitPos Optional per-row trait genomic anchor (a \code{GRanges} or #' \code{NULL}), carried forward as provenance; not part of the identity key. @@ -169,7 +169,7 @@ GwasFineMappingResult <- function( dataType = NULL, dataSource = NULL, weightStandardized = NULL, - ldSketch = NULL + ldReference = NULL ) { n <- length(studyName) if (length(method) != n || length(entry) != n) { @@ -200,7 +200,7 @@ GwasFineMappingResult <- function( obj <- new( "GwasFineMappingResult", grl, - ldSketch = .asLdSketch(ldSketch) + ldReference = .asLdRef(ldReference) ) validObject(obj) obj @@ -334,10 +334,10 @@ setMethod("show", "GwasFineMappingResult", function(object) { .trim = FALSE )) } - ldSrc <- if (is.null(object@ldSketch)) { + ldSrc <- if (is.null(object@ldReference)) { "NULL" } else { - .ldSketchLabel(object@ldSketch) + .ldRefLabel(object@ldReference) } - cat(glue(" LD sketch: {ldSrc}\n", .trim = FALSE)) + cat(glue(" LD reference: {ldSrc}\n", .trim = FALSE)) }) diff --git a/R/H2Estimate.R b/R/H2Estimate.R index 104382844..1f162578e 100644 --- a/R/H2Estimate.R +++ b/R/H2Estimate.R @@ -8,6 +8,9 @@ # integration with the sLDSC postprocessing pipeline. # ============================================================================= +#' @include MethodParam.R +NULL + #' @title Heritability Estimate #' @description Container for univariate heritability estimation results. Holds #' global, local, and annotation-stratified estimates. @@ -56,10 +59,10 @@ setClass( estimateSe = "numeric", intercept = "numeric", interceptSe = "numeric", - localBlocks = "ANY", # data.frame or NULL - enrichment = "ANY", # data.frame or NULL - annotationJackknifeCoefs = "ANY", # matrix or NULL - scoreStats = "ANY", # list or NULL + localBlocks = "data.frame_OR_NULL", + enrichment = "data.frame_OR_NULL", + annotationJackknifeCoefs = "matrix_OR_NULL", + scoreStats = "list_OR_NULL", method = "character", nSnps = "integer", traitName = "character" diff --git a/R/JointGroup.R b/R/JointGroup.R index 33404b177..3be7be749 100644 --- a/R/JointGroup.R +++ b/R/JointGroup.R @@ -95,7 +95,11 @@ setClass( # any of them is fitted. The sketch is a lazy panel, so the matrix is # derived once per group at fit time -- which is what the univariate RSS # path in fineMappingPipeline already does. - representation(Z = "matrix", ldSketch = "LdSketch_OR_NULL", N = "numeric"), + representation( + Z = "matrix", + ldReference = "LdReference_OR_NULL", + N = "numeric" + ), validity = function(object) { errors <- c( if (ncol(object@Z) != nrow(object@conditions)) { @@ -140,8 +144,9 @@ setClass( # ---- Pipeline markers ------------------------------------------------------- # Not empty: the `config` list carries the per-pipeline parameter tail -# (coverage/cvFolds/samplePartition/fitFullData/fitRetention/... for fm; -# fitRetention/cvFolds/... for twas), and dispatch on the concrete +# (credibleSetParam/crossValidationParam/fitRetention/... for fm; +# crossValidationParam/ensembleParam/fitRetention/... for twas), and dispatch on +# the concrete # class selects the result type via `construct()`. setClass("JointPipeline", contains = "VIRTUAL", representation(config = "list")) @@ -175,7 +180,7 @@ setClass("TwasJointPipeline", contains = "JointPipeline") .jgZ <- function(g) g@Z # @noRd -.jgLdSketch <- function(g) g@ldSketch +.jgLdRef <- function(g) g@ldReference # The variants a summary-statistics group covers, in Z's row order -- which is # the order the derived LD matrix comes back in. @@ -189,8 +194,8 @@ setClass("TwasJointPipeline", contains = "JointPipeline") # would recompute the same matrix for every condition. # @noRd .jgLdMatrix <- function(g) { - .ldFromSketch( - .jgLdSketch(g), + .ldFromRef( + .jgLdRef(g), .jgVariantIds(g), label = "jointEngine" ) @@ -199,6 +204,38 @@ setClass("TwasJointPipeline", contains = "JointPipeline") # @noRd .jgN <- function(g) g@N +# The group restricted to the conditions `keep` marks: each condition's Y / Z +# column goes with it, as does its trait position or sample size where those +# are per condition. NULL when none is kept. Rebuilt through initialize(), so +# the result is validated like any constructed group. +# @noRd +.jgKeepConditions <- function(g, keep) { + if (all(keep)) { + return(g) + } + if (!any(keep)) { + return(NULL) + } + idx <- which(keep) + cond <- slice(g@conditions, idx) + if (is(g, "IndividualJointGroup")) { + traitPos <- if (length(g@traitPos) > 0L) g@traitPos[idx] else g@traitPos + return(methods::initialize( + g, + conditions = cond, + Y = g@Y[, idx, drop = FALSE], + traitPos = traitPos + )) + } + N <- if (length(g@N) == length(keep)) g@N[idx] else g@N + methods::initialize( + g, + conditions = cond, + Z = g@Z[, idx, drop = FALSE], + N = N + ) +} + # @noRd .jcPattern <- function(cell) cell@pattern diff --git a/R/LdData.R b/R/LdData.R deleted file mode 100644 index 07a119ff8..000000000 --- a/R/LdData.R +++ /dev/null @@ -1,723 +0,0 @@ -# ============================================================================= -# LdData S4 class -# ----------------------------------------------------------------------------- -# Container for LD information used by fine-mapping / colocalization. Holds -# a pre-computed correlation matrix (or a list of per-block matrices) and/or -# a GenotypeHandle (or list of handles for mixture panels) for on-demand -# correlation computation. -# ============================================================================= - -#' @include GenotypeHandle.R AllClasses.R -NULL - -#' @title LD Data Container -#' @description S4 container for LD information. Stores either a pre-computed -#' correlation matrix or a \code{GenotypeHandle} (or list of handles for -#' mixture panels) for lazy genotype/correlation access. -#' -#' An \code{LdData} \strong{is} a \code{GRanges} over the variants it -#' covers -- carrying A1, A2, variant_id and optionally allele_freq, -#' variance and n_nomiss as metadata columns -- so \code{length()}, -#' \code{seqnames()} and \code{start()} answer directly, as they do for -#' \code{\link{LdScore}} and \code{\link{LdEigen}}. The correlation may -#' be NULL, in which case those ranges are the object's only record of which -#' variants it describes. -#' -#' @slot correlation A correlation matrix, a list of per-block matrices -#' (block-diagonal LD), or NULL if genotypes are available and R should be -#' computed on demand. -#' @slot genotypeHandle Where genotypes are read from: a genotype handle, a -#' list of them (for mixture panels), a matrix of dosages already extracted -#' and filtered, or NULL when only pre-computed R is available. Pass a -#' genotype panel (see \code{\link{readGenotypes}}) to the constructor and -#' it is unwrapped to its handle. -#' @slot snpIdx Integer vector of 1-based SNP indices into the handle's -#' \code{snpInfo}. NULL when correlation is pre-computed, or when the -#' source is a matrix (which is already the subset). -#' @slot blockMetadata A \code{GRanges} with one range per block: its -#' \code{seqnames} and range are the block's chromosome and genomic span, -#' and \code{mcols} carry \code{blockId}, \code{size}, \code{startIdx} -#' and \code{endIdx} -- the index range into the correlation matrix the -#' block addresses. Extra columns the caller supplied are kept as mcols. -#' A block whose index range is out of bounds has no span to derive and -#' gets a width-0 range. -#' @slot nSamples Integer, reference panel sample size. -#' @slot mixtureWeights NULL when \code{genotypeHandle} is a single -#' \code{GenotypeHandle}; a numeric vector of mixing proportions (one per -#' panel, summing to 1) when \code{genotypeHandle} is a list of -#' \code{GenotypeHandle}s. Used by \code{ldMatrix()} to compute a -#' weighted-average mixture LD matrix; required whenever \code{genotypeHandle} -#' is a list and \code{ldMatrix()} will be called. -#' @export -setClass( - "LdData", - contains = "GRanges", - representation( - correlation = "LdCorrelation", - genotypeHandle = "LdGenotypeSource", - snpIdx = "LdSnpIndex", - blockMetadata = "GRanges", - nSamples = "integer", - mixtureWeights = "LdMixtureWeights" - ), - validity = function(object) { - errors <- c( - if (is.null(object@correlation) && is.null(object@genotypeHandle)) { - str_c( - "At least one of 'correlation' or ", - "'genotypeHandle' must be non-NULL" - ) - }, - if (length(object) == 0) "an LdData must cover >= 1 variant", - .ldCheckGenotypeSource(object@genotypeHandle), - .ldCheckCorrelation(object@correlation), - .ldCheckMixtureWeights(object), - .ldCheckBlockMetadata(object) - ) - if (length(errors) == 0) TRUE else errors - } -) - -# Mixture weights are only meaningful over a LIST of panels, and must then be -# a proper simplex over them. NULL weights are always valid. -# @noRd -.ldCheckMixtureWeights <- function(object) { - if (is.null(object@mixtureWeights)) { - return(NULL) - } - if (!is.list(object@genotypeHandle)) { - return(str_c( - "'mixtureWeights' may only be set when ", - "'genotypeHandle' is a list of panels" - )) - } - w <- object@mixtureWeights - if (!is.numeric(w) || length(w) != length(object@genotypeHandle)) { - return(str_c( - "'mixtureWeights' must be numeric of length ", - "equal to the genotypeHandle list" - )) - } - if (any(w < 0) || abs(sum(w) - 1) > 1e-6) { - return("'mixtureWeights' must be non-negative and sum to 1") - } - NULL -} - -#' @describeIn LdData-class Refused. Subsetting would narrow the variants -#' while \code{correlation} -- variant-by-variant, and \code{snpIdx}, which -#' indexes the reference panel -- stayed as they were, leaving an LD matrix -#' describing variants the object no longer has. Build the LdData over the -#' variant set you want instead. -#' @param x An \code{LdData}. -#' @param i,j,... Subscripts; any use is an error. -#' @param drop Ignored. -#' @return Nothing: this method always signals an error. -#' @export -setMethod("[", "LdData", function(x, i, j, ..., drop = TRUE) { - abort(glue( - "an LdData cannot be subset: its correlation is variant-by-variant ", - "and its snpIdx addresses the reference panel, so narrowing the ", - "variants would leave both describing variants that are no longer ", - "present. Build the LdData over the variant set you want instead." - )) -}) - -#' @rdname show-methods -#' @export -setMethod("show", "LdData", function(object) { - n_var <- length(object) - has_R <- !is.null(object@correlation) - has_geno <- !is.null(object@genotypeHandle) - r_type <- if (has_R && is.list(object@correlation)) { - "block-diagonal" - } else { - "single" - } - cat(glue("LdData: {n_var} variants\n", .trim = FALSE)) - cat(glue( - " Correlation: {if (has_R) r_type else 'NULL'}, ", - "Genotype handle: {if (has_geno) 'available' else 'NULL'}\n", - .trim = FALSE - )) - cat(glue(" Reference N: {object@nSamples}\n", .trim = FALSE)) -}) - -# One element of a mixture list: unwrap a panel, pass anything else through -# for validity to judge. -# @noRd -.ldDataSourceElement <- function(x) { - open <- .openGenotypeHandle(x) - if (is.null(open)) x else open -} - -# Normalise whatever the caller passed for `genotypeHandle` into one of the -# shapes the slot admits. A panel is the public shape (readGenotypes()); the -# slot stores the handle behind it, because `snpIdx` selects into the handle's -# whole snpInfo and a panel adds nothing the handle does not already carry. -# Anything else is passed through for the slot's class union to accept or -# reject -- this is a normaliser, not a second type check. -# @noRd -.ldDataGenotypeSource <- function(x) { - if (is.null(x) || is.matrix(x)) { - return(x) - } - if (is.list(x)) { - # Unwrap the panels but do not reject here: validity reports a bad - # mixture element by its index, which a purrr-wrapped abort would bury. - return(map(x, .ldDataSourceElement)) - } - open <- .openGenotypeHandle(x) - if (!is.null(open)) { - return(open) - } - # The slot's class union would reject this anyway, but its message names - # the union rather than what to pass instead. - hint <- if (methods::is(x, "DelayedArray")) { - str_c( - " -- pass the panel it came from rather than its assay, so the ", - "variant selection in `snpIdx` still means something" - ) - } else { - "" - } - abort(glue( - "`genotypeHandle` must be a genotype panel from readGenotypes(), a ", - "list of them, a matrix of dosages, or NULL (got ", - "{class(x)[[1L]]}){hint}." - )) -} - -# --- block metadata -------------------------------------------------------- -# -# Five paths used to build this table -- the two region loaders, the two -# bare-matrix wrappers, and callers handing over a bare genomic span -- and -# each emitted a different set of columns, so consumers read `startIdx`, -# `size` and `chrom` that were there by luck rather than by contract. One -# normaliser at the only door (LdData()) fills whatever is absent and stores -# a single shape, the way .ldDataGenotypeSource() does for the handle. -# -# These are the columns consumers actually read. `blockStart` / `blockEnd` -# are deliberately NOT required: the two region loaders record a block's -# genomic span, nothing reads it, and demanding it would reject every -# multi-block table built without it. Supplied columns are carried through. -# @noRd -.ldBlockColumns <- c("blockId", "chrom", "size", "startIdx", "endIdx") - -# What survives as mcols once chrom / blockStart / blockEnd become the -# GRanges itself. -# @noRd -.ldBlockMcols <- c("blockId", "size", "startIdx", "endIdx") - -# Supplied values are never replaced: a caller handing over deliberately -# out-of-range indices keeps them, because partitionLdMatrix() still has to -# reject those and substituting valid ones would hide the error. -# @noRd -.ldBlockMetadata <- function(blockMetadata, variants) { - if (length(variants) == 0L) { - # Nothing to derive a block from. Validity rejects the object for - # covering no variant; crashing here would pre-empt that message. - return(GenomicRanges::GRanges()) - } - tbl <- .ldBlockMetadataTibble(blockMetadata) - if (nrow(tbl) == 0L) { - # A placeholder table means "one block", not "no blocks": an LdData - # always covers at least one variant. - tbl <- tibble(blockId = 1L) - } - tbl <- .ldBlockMetadataIndices(tbl, length(variants)) - tbl <- .ldBlockMetadataOrder(.ldBlockMetadataDerive(tbl, variants)) - .ldBlockMetadataGRanges(tbl, variants) -} - -# The stored shape: one range per block, so the invariants the merge logic -# depends on are the ones GRanges already answers -- isDisjoint() for -# overlap, sort() for order, seqnames() for the same-chromosome guard. The -# index payload the matrix is addressed by rides along in mcols. -# @noRd -.ldBlockMetadataGRanges <- function(tbl, variants) { - span <- .ldBlockSpans(tbl, variants) - gr <- GenomicRanges::GRanges( - seqnames = tbl$chrom, - ranges = IRanges::IRanges(start = span$start, end = span$end) - ) - keep <- c( - intersect(.ldBlockMcols, names(tbl)), - setdiff(names(tbl), c(.ldBlockColumns, "blockStart", "blockEnd")) - ) - S4Vectors::mcols(gr) <- S4Vectors::DataFrame( - as.data.frame(select(tbl, all_of(keep))) - ) - gr -} - -# Each block's genomic span. Supplied blockStart / blockEnd win; otherwise -# the span is read off the variants the index range covers. -# -# A block whose index range is out of bounds has no span to read, and a -# GRanges cannot hold an NA one (seqnames reject NAs outright). It gets a -# WIDTH-0 range at the first variant instead: legal, and visibly not an -# interval, so nothing downstream mistakes it for a real span. -# partitionLdMatrix() rejects the block on its indices regardless. -# @noRd -.ldBlockSpans <- function(tbl, variants) { - if (is_in("blockStart", names(tbl)) && is_in("blockEnd", names(tbl))) { - return(list(start = tbl$blockStart, end = tbl$blockEnd)) - } - parts <- map( - seq_len(nrow(tbl)), - .ldBlockSpanAt, - tbl = tbl, - variants = variants - ) - list( - start = map_dbl(parts, "start"), - end = map_dbl(parts, "end") - ) -} - -# @noRd -.ldBlockSpanAt <- function(i, tbl, variants) { - s <- tbl$startIdx[[i]] - e <- tbl$endIdx[[i]] - if (.ldBlockRangeUsable(s, e, length(variants))) { - part <- variants[seq.int(s, e)] - return(list( - start = min(GenomicRanges::start(part)), - end = max(GenomicRanges::end(part)) - )) - } - anchor <- GenomicRanges::start(variants)[[1L]] - list(start = anchor, end = anchor - 1L) -} - -# @noRd -.ldBlockRangeUsable <- function(s, e, n) { - !is.na(s) && !is.na(e) && s >= 1L && e >= s && e <= n -} - -# Any accepted shape as a tibble. `start`/`end` is how a bare genomic span -# arrives; they name the BLOCK's span, so they become blockStart/blockEnd. -# @noRd -.ldBlockMetadataTibble <- function(x) { - if (!is(x, "GRanges") && !is.data.frame(x) && !is(x, "DataFrame")) { - # as.data.frame() would happily turn a string into a one-column - # table, so the shapes have to be named rather than coerced blindly. - abort(glue( - "`blockMetadata` must be a GRanges, a data.frame or a ", - "DataFrame; got {class(x)[[1L]]}" - )) - } - tbl <- if (is(x, "GRanges")) { - .ldBlockMetadataFromGranges(x) - } else { - as_tibble(as.data.frame(x)) - } - .ldBlockMetadataRenameSpan(tbl) -} - -# @noRd -.ldBlockMetadataFromGranges <- function(x) { - md <- as_tibble(as.data.frame(S4Vectors::mcols(x))) - # An LdBlocks-style GRanges carries chrom / blockStart / blockEnd in its - # mcols as well as in its ranges. The mcols win: binding both would - # duplicate the names and leave no column called `chrom` at all. - fromRanges <- tibble( - chrom = as.character(GenomicRanges::seqnames(x)), - blockStart = GenomicRanges::start(x), - blockEnd = GenomicRanges::end(x) - ) - bind_cols( - md, - select( - fromRanges, - all_of(setdiff(names(fromRanges), names(md))) - ) - ) -} - -# @noRd -.ldBlockMetadataRenameSpan <- function(tbl) { - if (!is_in("blockStart", names(tbl)) && is_in("start", names(tbl))) { - tbl <- rename(tbl, blockStart = "start") - } - if (!is_in("blockEnd", names(tbl)) && is_in("end", names(tbl))) { - tbl <- rename(tbl, blockEnd = "end") - } - tbl -} - -# The index range is the one thing that cannot be derived for several -# blocks: only the caller knows which variants each covers. A single block -# covers all of them. -# @noRd -.ldBlockMetadataIndices <- function(tbl, n) { - absent <- setdiff(c("startIdx", "endIdx"), names(tbl)) - if (length(absent) == 0L) { - return(tbl) - } - if (length(absent) == 1L) { - abort(glue( - "`blockMetadata` gives one of startIdx / endIdx but not the ", - "other; supply both or neither." - )) - } - if (is_in("size", names(tbl))) { - # Blocks are taken in order, so the sizes give the ranges. This is - # the LdBlocks shape: a block table that says how many variants each - # block holds but not where they sit in the matrix. - sizes <- as.integer(tbl$size) - ends <- cumsum(sizes) - return(mutate(tbl, startIdx = ends - sizes + 1L, endIdx = ends)) - } - if (nrow(tbl) > 1L) { - abort(glue( - "`blockMetadata` describes {nrow(tbl)} blocks but gives neither ", - "an index range nor `size`, so which variants each block covers ", - "cannot be determined." - )) - } - mutate(tbl, startIdx = 1L, endIdx = n) -} - -# `blockId`, `chrom` and `size` all follow from the index range, for one -# block or many. -# @noRd -.ldBlockMetadataDerive <- function(tbl, variants) { - absent <- setdiff(.ldBlockColumns, names(tbl)) - if (length(absent) == 0L) { - return(tbl) - } - derived <- tibble( - blockId = seq_len(nrow(tbl)), - chrom = .ldBlockChroms(tbl, variants), - size = as.integer(tbl$endIdx - tbl$startIdx + 1L), - startIdx = tbl$startIdx, - endIdx = tbl$endIdx - ) - bind_cols(tbl, select(derived, all_of(absent))) -} - -# @noRd -.ldBlockChroms <- function(tbl, variants) { - map_chr( - seq_len(nrow(tbl)), - .ldBlockChromAt, - tbl = tbl, - variants = variants - ) -} - -# An out-of-range block falls back to the data's own chromosome rather than -# NA: seqnames cannot hold NA, and partitionLdMatrix() rejects the block on -# its indices anyway. Its range is width 0 (see .ldBlockSpanAt). -# @noRd -.ldBlockChromAt <- function(i, tbl, variants) { - s <- tbl$startIdx[[i]] - e <- tbl$endIdx[[i]] - part <- if (.ldBlockRangeUsable(s, e, length(variants))) { - variants[seq.int(s, e)] - } else { - variants - } - as.character(GenomicRanges::seqnames(part))[[1L]] -} - -# Canonical columns first, anything the caller added after. -# @noRd -.ldBlockMetadataOrder <- function(tbl) { - select(tbl, all_of(.ldBlockColumns), everything()) -} - -# Every LdData describes at least one block, with the columns its consumers -# read. The normaliser guarantees both; this is the backstop that keeps a -# future construction path from quietly dropping one. -# @noRd -.ldCheckBlockMetadata <- function(object) { - bm <- object@blockMetadata - absent <- setdiff(.ldBlockMcols, names(S4Vectors::mcols(bm))) - if (length(absent) > 0L) { - return(str_c( - "'blockMetadata' is missing required column(s): ", - str_flatten(absent, ", ") - )) - } - if (length(bm) == 0L) { - return("'blockMetadata' must describe at least one block") - } - NULL -} - -#' @title Create an LdData Object -#' @description Construct an \code{LdData} from a correlation matrix and/or -#' genotype handle, plus variant metadata as a GRanges. -#' @param correlation A correlation matrix, list of matrices, or NULL. -#' @param genotypeHandle A genotype panel (see -#' \code{\link{readGenotypes}}), a list of panels for a mixture reference, -#' a matrix of already-extracted dosages, or NULL. -#' @param snpIdx Vector of 1-based SNP indices, coerced to integer, or NULL. -#' @param variants A GRanges with variant metadata (must have variant_id in -#' mcols, plus A1, A2). -#' @param blockMetadata Block boundaries: a \code{GRanges}, a -#' \code{data.frame} or a \code{DataFrame}. Whatever is absent for a -#' single block is derived from \code{variants}, so a bare genomic span -#' -- or nothing at all -- is enough; with several blocks either the index -#' columns or \code{size} must be supplied. Normalised on the way in and -#' stored as a \code{GRanges} (see the \code{blockMetadata} slot). -#' @param nSamples Integer, reference panel sample size. -#' @param mixtureWeights Optional numeric vector of mixing proportions, one per -#' panel in \code{genotypeHandle} when it is a list. Must be non-negative and -#' sum to 1. Required whenever \code{genotypeHandle} is a list and downstream -#' code will call \code{ldMatrix()}. -#' @return An \code{LdData} object. -#' @examples -#' data(eqtlRegionExample) -#' X <- eqtlRegionExample$X[, 1:8] -#' gr <- GenomicRanges::GRanges("22", -#' IRanges::IRanges(seq(1L, by = 100L, length.out = 8), width = 1L)) -#' ld <- LdData(correlation = cor(X), variants = gr, -#' blockMetadata = S4Vectors::DataFrame( -#' chrom = "22", start = 1L, end = 1000L)) -#' ld -#' @importFrom checkmate assert checkMatrix checkList checkNull -#' @importFrom checkmate assertNumeric -#' @export -LdData <- function( - correlation = NULL, - genotypeHandle = NULL, - snpIdx = NULL, - variants, - blockMetadata, - nSamples = 0L, - mixtureWeights = NULL -) { - # correlation is documented as a matrix OR a list of matrices OR NULL, - # so this must be an or-combination, not assertMatrix. - assert( - checkMatrix(correlation), - checkList(correlation), - checkNull(correlation), - .var.name = "correlation" - ) - assertNumeric(mixtureWeights, null.ok = TRUE) - obj <- new( - "LdData", - variants, - correlation = correlation, - genotypeHandle = .ldDataGenotypeSource(genotypeHandle), - snpIdx = if (is.null(snpIdx)) NULL else as.integer(snpIdx), - blockMetadata = .ldBlockMetadata(blockMetadata, variants), - nSamples = as.integer(nSamples), - mixtureWeights = mixtureWeights - ) - validObject(obj) - obj -} - -# Internal: convert a refPanel data.frame (chrom/pos/A1/A2/variant_id, with -# optional allele_freq/variance/n_nomiss) into the GRanges an LdData is. -.refPanelToGranges <- function(refPanel) { - chr <- withChrPrefix(refPanel$chrom) - pos <- as.integer(refPanel$pos) - - gr <- GRanges( - seqnames = chr, - ranges = IRanges(start = pos, width = 1L) - ) - - mcolsData <- DataFrame( - variant_id = refPanel$variant_id, - A1 = refPanel$A1, - A2 = refPanel$A2 - ) - - optional <- intersect( - c("allele_freq", "variance", "n_nomiss"), - names(refPanel) - ) - `mcols<-`( - gr, - value = cbind( - mcolsData, - DataFrame(refPanel[optional], check.names = FALSE) - ) - ) -} - -# One panel scaled by its mixture weight. -# @noRd -.ldScalePanel <- function(w, panel) { - w * panel -} - -#' @rdname ldMatrix -#' @export -setMethod("ldMatrix", "LdData", function(x) { - if (!is.null(x@correlation)) { - return(x@correlation) - } - if (is.null(x@genotypeHandle)) { - abort("No correlation matrix or genotype handle available") - } - if (is.list(x@genotypeHandle)) { - if (is.null(x@mixtureWeights)) { - msg <- glue( - "Cannot compute mixture LD: `mixtureWeights` is NULL. ", - "Construct LdData with mixtureWeights = ", - "when supplying a list of GenotypeHandles." - ) - abort(msg) - } - perPanel <- map(x@genotypeHandle, .ldPanelLd, snpIdx = x@snpIdx) - dims <- map_int(perPanel, nrow) - if (length(unique(dims)) != 1L) { - msg <- glue( - "Mixture panels yielded LD matrices of differing ", - "dimensions: {str_flatten(dims, ', ')}. All panels ", - "must be aligned on the same variant subset." - ) - abort(msg) - } - # The mixture is a weighted sum over the panels, so it is a fold. - weighted <- map2(x@mixtureWeights, perPanel, .ldScalePanel) - return(`dimnames<-`( - reduce( - weighted, - `+`, - .init = matrix(0, nrow = dims[[1L]], ncol = dims[[1L]]) - ), - dimnames(perPanel[[1L]]) - )) - } - computeLd(.ldSourceDosages(x@genotypeHandle, x@snpIdx), method = "sample") -}) - -#' @rdname genotypes -#' @export -setMethod("genotypes", "LdData", function(x) { - if (is.null(x@genotypeHandle)) { - return(NULL) - } - if (is.list(x@genotypeHandle)) { - # A mixture list may hold matrices as well as handles. - map(x@genotypeHandle, .ldSourceDosages, x@snpIdx) - } else { - .ldSourceDosages(x@genotypeHandle, x@snpIdx) - } -}) - -#' @rdname hasGenotypes -#' @export -setMethod("hasGenotypes", "LdData", function(x) { - !is.null(genotypeHandle(x)) -}) - -#' @rdname variantIds -#' @export -setMethod("variantIds", "LdData", function(x) { - mcols(x)$variant_id -}) - -#' @rdname variantInfo -#' @export -setMethod("variantInfo", "LdData", function(x) { - # A plain GRanges view: callers subset and re-wrap it, and carrying the - # LD payload along would make those copies quietly expensive. - as(x, "GRanges") -}) - -#' @rdname blockMetadata -#' @export -setMethod("blockMetadata", "LdData", function(x) { - x@blockMetadata -}) - -#' @rdname refPanel -#' @export -setMethod("refPanel", "LdData", function(x) { - mutate( - as_tibble(as.data.frame(mcols(x))), - chrom = as.character(seqnames(x)), - pos = start(x) - ) -}) - -#' @rdname genotypeHandle -#' @keywords internal -setMethod("genotypeHandle", "LdData", function(x) x@genotypeHandle) - -#' @rdname mixtureWeights -#' @export -setMethod("mixtureWeights", "LdData", function(x) x@mixtureWeights) - -#' @rdname snpIdx -#' @export -setMethod("snpIdx", "LdData", function(x) x@snpIdx) - -#' @rdname ldPanelNSamples -#' @export -setMethod("ldPanelNSamples", "LdData", function(x) x@nSamples) - -# ---- map/apply helpers (lambda-free callbacks) --------------------------- - -# Sample-LD matrix for one mixture panel's genotype handle (over `snpIdx`). -# @noRd -.ldPanelLd <- function(h, snpIdx) { - computeLd(.ldSourceDosages(h, snpIdx), method = "sample") -} - -# Dosages from a genotype source. A matrix IS the dosages already -- extracted -# and filtered upstream, with `snpIdx` NULL because the matrix is the subset -- -# so it is returned as-is rather than fed to the file readers, which would -# dispatch on it and fail. -# @noRd -.ldSourceDosages <- function(x, snpIdx) { - if (is.matrix(x)) { - return(x) - } - .dosageMatrix(x, snpIdx) -} - -# Every element of a mixture list has to be something LD can be computed from. -# The class union admits any list, so the elements are checked here. -# @noRd -.ldCheckGenotypeSource <- function(x) { - if (!is.list(x)) { - return(character()) - } - ok <- map_lgl(x, .ldIsGenotypeSource) - if (all(ok)) { - return(character()) - } - str_c( - "'genotypeHandle' list elements must each be a genotype panel or a ", - "dosage matrix; element(s) ", - str_flatten(which(!ok), ", "), - " are not." - ) -} - -# @noRd -.ldIsGenotypeSource <- function(x) { - methods::is(x, "GenotypeHandle") || is.matrix(x) -} - -# Block-diagonal LD is one matrix per block. The union admits any list, so the -# elements are checked here -- a list of something else would otherwise sail -# through and fail later inside the LD arithmetic. -# @noRd -.ldCheckCorrelation <- function(x) { - if (!is.list(x)) { - return(character()) - } - ok <- map_lgl(x, is.matrix) - if (all(ok)) { - return(character()) - } - str_c( - "'correlation' list elements must each be a matrix (block-diagonal ", - "LD is one matrix per block); element(s) ", - str_flatten(which(!ok), ", "), - " are not." - ) -} diff --git a/R/LdEigen.R b/R/LdEigen.R index 1d37f3e70..b1daeb3dc 100644 --- a/R/LdEigen.R +++ b/R/LdEigen.R @@ -1,8 +1,9 @@ # ============================================================================= # LdEigen S4 class # ----------------------------------------------------------------------------- -# Pre-computed per-block eigendecompositions of the LD correlation matrix. -# Consumed by LDER / HDL / sHDL h2 estimators. +# Per-block eigendecompositions of the LD correlation matrix: stored for +# LdMatrix input, computed from the genotype panel one block at a time for +# panel input. Consumed by LDER / HDL / sHDL h2 estimators. # ============================================================================= #' @include LdStatistic.R @@ -18,7 +19,16 @@ NULL #' narrow when the ranges do, subsetting an \code{LdEigen} is refused #' rather than allowed to produce an object whose decompositions no longer #' describe its variants. -#' @slot eigenList A list of length \code{nBlocks}, each element a list with +#' +#' An \code{LdEigen} built from a genotype panel stores no +#' decompositions: each block's is computed from the panel's factor (its +#' standardized genotypes) when an estimator reaches the block. That gives +#' the block's nonzero eigenvalues and their eigenvectors; when the panel +#' has fewer samples than the block has variants, the block's remaining +#' eigenvalues are exactly zero, and the estimators account for those +#' directions without listing them. +#' @slot eigenList A list of length \code{nBlocks} (empty for an +#' \code{LdEigen} built from a genotype panel), each element a list with #' components: #' \describe{ #' \item{values}{Numeric vector of eigenvalues} @@ -47,9 +57,11 @@ setClass( if (!isTRUE(parentCheck)) { coll$push(parentCheck) } + # One decomposition per block, or none for an LdEigen that computes them + # from its genotype panel. assertList( object@eigenList, - len = length(object@ldBlocks), + len = if (is.null(object@ldReference)) length(object@ldBlocks) else 0L, .var.name = "eigenList", add = coll ) @@ -117,51 +129,58 @@ LdEigen <- function( } #' @importFrom checkmate assertCount assertFlag -#' @title Build an LdEigen from loaded LD -#' @description Eigendecompose already-loaded LD, block by block, into the +#' @title Build an LdEigen from an LD reference +#' @description Eigendecompose an LD reference, block by block, into the #' \code{LdEigen} that \code{\link{estimateH2}} consumes for #' \code{method = "lder"} and \code{method = "hdl"}. This is the supported #' route from an LD reference to an h2 input: \code{\link{LdEigen}} itself #' is the low-level constructor and expects the decompositions to have been #' computed already. #' -#' No file I/O happens here. Read the LD first with -#' \code{\link{loadLdMatrix}} -- passing a vector of regions returns one -#' \code{LdData} per block -- then pass the result in. -#' @param ldBlockData An \code{\link{LdData}}, or a list of them, covering -#' the reference variants. An \code{LdData} whose correlation is a list of -#' per-block matrices contributes one LD block per matrix; one whose -#' correlation is a single matrix contributes one block. Blocks are kept in -#' the order given, and that order defines the variant order of the result. +#' @param ldReference The LD reference, block by block: a list of +#' \code{\link{LdMatrix}} objects, one per LD block (a single +#' \code{LdMatrix} is one block), or a genotype panel (see +#' \code{\link{readGenotypes}}) together with \code{ldBlocks}. Blocks are +#' kept in the order given, and that order defines the variant order of the +#' result. #' #' Block structure matters downstream: \code{\link{estimateH2}} takes its #' standard error from a delete-one-block jackknife, so it requires at -#' least two blocks and wants many more. Loading a whole region as one -#' dense matrix yields a single block. -#' @param nSamples Integer, the LD reference panel sample size. Defaults to the -#' size recorded by the supplied \code{LdData}; required when they record -#' none, and an error when they disagree. +#' least two blocks and wants many more. +#' @param ldBlocks With a genotype panel, the LD blocks to cut it into: a +#' \code{GRanges}, or a data frame with columns \code{chrom}, \code{start} +#' and \code{end}. Each block's LD is computed from the panel variants +#' inside it; variants outside every block are left out. Not used with +#' \code{LdMatrix} blocks. +#' @param nSamples Integer, the number of samples the reference's LD was +#' estimated from. Defaults to a panel's sample count (a stochastic +#' sketch's effective size), or the size the \code{LdMatrix} blocks record; +#' required when they record none, and an error when they disagree. #' @param inSample Logical, whether the reference is the GWAS cohort itself. #' Selects LDER's weighting and HDL's finite-reference correction. #' @param genome Character, genome build. Defaults to the build recorded by -#' the supplied \code{LdData}, which \code{\link{loadLdMatrix}} leaves -#' unset. +#' the reference's variants. #' @param eigenvalueTruncation Numeric in (0, 1]; the proportion of each #' block's eigenvalue mass to retain. \code{1} (the default) keeps every #' component; HDL conventionally uses \code{0.9}. -#' @return An \code{LdEigen} over every variant in \code{ldBlockData}. +#' @return An \code{LdEigen} over every variant in the reference's blocks. +#' One built from a genotype panel keeps the panel and decomposes each +#' block when it is needed, rather than storing the decompositions. #' @seealso \code{\link{buildLdScore}} for the g-LDSC input, -#' \code{\link{estimateH2}}, \code{\link{loadLdMatrix}} +#' \code{\link{estimateH2}}, \code{\link{LdMatrix}} #' @examples -#' meta <- system.file("extdata", "ld_reference", "ld_meta_file.tsv", -#' package = "pecotmr") -#' ld <- loadLdMatrix(meta, region = "chr22:10000000-19000000") -#' ldEigen <- buildLdEigen(ld, genome = "hg38") +#' panel <- readGenotypes(plink2Prefix = file.path(system.file("extdata", +#' "ld_reference", "chr22", package = "pecotmr"), +#' "protocol_example.LD.chr22")) +#' blocks <- data.frame(chrom = "chr22", start = c(10000000, 15000001), +#' end = c(15000000, 19000000)) +#' ldEigen <- buildLdEigen(panel, ldBlocks = blocks, genome = "hg38") #' ldEigen #' length(eigenList(ldEigen)) #' @export buildLdEigen <- function( - ldBlockData, + ldReference, + ldBlocks = NULL, nSamples = NULL, inSample = FALSE, genome = NA_character_, @@ -169,7 +188,10 @@ buildLdEigen <- function( ) { assertCount(nSamples, positive = TRUE, null.ok = TRUE) assertFlag(inSample) - prep <- .ldRefPrepare(ldBlockData, nSamples, genome) + prep <- .h2RefPrepare(ldReference, ldBlocks, nSamples, genome) + if (!is.null(prep$ldReference)) { + return(.ldEigenFromPanel(prep, inSample, eigenvalueTruncation)) + } eigenList <- map2( prep$blocks, prep$snpIdx, @@ -187,6 +209,28 @@ buildLdEigen <- function( ) } +# An LdEigen over a genotype panel: the panel and each variant's row in it, +# and no decompositions, which are computed a block at a time when needed. +# Built in one step because an empty eigenList is valid only alongside the +# panel it is read from. +# @noRd +.ldEigenFromPanel <- function(prep, inSample, truncation) { + gr <- .ldStatRanges(prep$snpInfo, prep$genome) + S4Vectors::mcols(gr)$panelRow <- prep$panelRow + obj <- methods::new( + "LdEigen", + gr, + ldBlocks = .asLdBlockRanges(prep$ldBlocks), + nSamples = as.integer(prep$nRef), + inSample = isTRUE(inSample), + eigenList = list(), + eigenvalueTruncation = as.numeric(truncation), + ldReference = prep$ldReference + ) + validObject(obj) + obj +} + # One block's decomposition, truncated to the leading components carrying # `truncation` of its eigenvalue mass. # @noRd @@ -226,28 +270,67 @@ buildLdEigen <- function( #' @return Nothing: this method always signals an error. #' @export setMethod("[", "LdEigen", function(x, i, j, ..., drop = TRUE) { + .ldEigenRefuseSubset() +}) + +# head(), tail(), window() and subset() reach the rows through extractROWS() +# without passing `[`, so the refusal is made there as well. +setMethod("extractROWS", "LdEigen", function(x, i) { + .ldEigenRefuseSubset() +}) + +# @noRd +.ldEigenRefuseSubset <- function() { abort(glue( "an LdEigen cannot be subset: its eigendecompositions are per LD ", "block, so narrowing the variants would leave them describing ", "variants that are no longer present. Recompute over the subset." )) -}) +} #' @rdname show-methods #' @export setMethod("show", "LdEigen", function(object) { cat(glue( "LdEigen: {length(object)} SNPs across ", - "{length(object@eigenList)} blocks\n", + "{length(object@ldBlocks)} blocks\n", .trim = FALSE )) cat(sprintf(" Eigenvalue truncation: %.2f\n", object@eigenvalueTruncation)) + if (!is.null(object@ldReference)) { + cat(" Decompositions: computed from the genotype panel when needed\n") + } cat(glue( " Reference N: {object@nSamples}, In-sample: {object@inSample}\n", .trim = FALSE )) }) +# The block records of an LdEigen (see .ldStatLazyBlocks()). +# @noRd +.ldEigenBlocks <- function(x) { + if (length(x@eigenList) > 0L) { + return(map(x@eigenList, .ldEigenStoredBlock)) + } + .ldStatLazyBlocks(x) +} + +# @noRd +.ldEigenStoredBlock <- function(block) { + list(idx = block$snpIdx, eigen = block) +} + +# One block's decomposition, at the truncation the LdEigen records. +# @noRd +.ldEigenBlockAt <- function(block, x) { + .ldStatBlockEigen(block, x@ldReference, x@eigenvalueTruncation) +} + #' @rdname eigenList #' @export -setMethod("eigenList", "LdEigen", function(x) x@eigenList) +setMethod("eigenList", "LdEigen", function(x) { + if (is.null(x@ldReference)) { + return(x@eigenList) + } + map(.ldEigenBlocks(x), .ldEigenBlockAt, x = x) +}) diff --git a/R/LdMatrix.R b/R/LdMatrix.R new file mode 100644 index 000000000..590234958 --- /dev/null +++ b/R/LdMatrix.R @@ -0,0 +1,652 @@ +# ============================================================================= +# LdMatrix S4 class +# ----------------------------------------------------------------------------- +# An LD correlation matrix the caller supplies, over the variants it +# describes. This is one of the two ways LD enters pecotmr. The other is a +# genotype panel (readGenotypes()), which is read lazily from disk; pecotmr +# never reads a pre-computed matrix from disk, so a matrix is built in memory +# by the caller and handed over whole. +# ============================================================================= + +#' @include AllGenerics.R +NULL + +#' @title LD Correlation Matrix +#' @description An \code{LdMatrix} carries one LD correlation matrix together +#' with the variants it describes, and can stand wherever pecotmr takes an +#' LD reference (the \code{ldReference} of a summary-statistics collection, +#' \code{\link{raiss}}, the heritability builders). It \strong{is} a +#' \code{GRanges} over those variants, in the order of the matrix's rows, +#' with metadata columns \code{SNP} (the variant id), \code{A1} (the allele +#' whose dosage the correlations are signed by), \code{A2} and, optionally, +#' \code{AF} (the frequency of \code{A1}). +#' +#' The other kind of LD reference is a genotype panel (see +#' \code{\link{readGenotypes}}), which pecotmr reads from disk on demand. A +#' matrix carries no genotypes, so the steps that need them are not +#' available with one: the panel missingness filter, and RAiSS's +#' singular-value route (RAiSS falls back to the matrix itself). Steps that +#' need the panel's sample size or allele frequencies -- MAF / MAC panel +#' filters, DENTIST, ldsc's unbiased \eqn{r^2}, HDL -- use \code{nSamples} +#' and \code{AF} when they are supplied and refuse otherwise. +#' +#' Validity checks the matrix's shape and labels, that its diagonal is 1, +#' that its entries lie in \eqn{[-1, 1]}, and its symmetry on an evenly +#' spaced subset of entries. It does not check positive semi-definiteness, +#' which costs an eigendecomposition; run \code{\link{checkLd}} for that. +#' +#' @slot correlation The correlation matrix, its dimnames the variant ids. +#' @slot nSamples Integer, the number of independent samples the LD is +#' worth, or \code{NA} when unknown. For one panel this is its sample size. +#' For a mixture it is \eqn{1 / \sum_k w_k^2 / n_k}, the size of a single +#' panel whose LD would be as noisy. +#' @slot mixtureWeights The weights a mixture's components were combined +#' with; empty for a single panel's LD. +#' @seealso \code{\link{LdMatrix}} to build one, \code{\link{checkLd}}. +#' @importClassesFrom GenomicRanges GRanges +#' @importFrom S4Vectors extractROWS normalizeSingleBracketSubscript +#' @export +setClass( + "LdMatrix", + contains = "GRanges", + slots = c( + correlation = "matrix", + nSamples = "integer", + mixtureWeights = "numeric" + ), + prototype = prototype( + correlation = matrix(numeric(0), 0L, 0L), + nSamples = NA_integer_, + mixtureWeights = numeric(0) + ) +) + +setValidity("LdMatrix", function(object) { + problems <- c( + .ldmCheckColumns(object), + .ldmCheckShape(object), + .ldmCheckValues(object@correlation), + .ldmCheckAf(object), + .ldmCheckN(object@nSamples), + .ldmCheckWeights(object@mixtureWeights) + ) + if (length(problems) == 0L) TRUE else problems +}) + +# @noRd +.ldmCheckColumns <- function(object) { + missingCols <- setdiff( + c("SNP", "A1", "A2"), + colnames(S4Vectors::mcols(object)) + ) + if (length(missingCols) == 0L) { + return(character()) + } + str_c( + "the variants carry no ", + str_flatten(missingCols, ", "), + " column(s)." + ) +} + +# The matrix must be square over exactly the object's variants, labelled by +# their ids: every consumer looks LD up by id, so a matrix whose labels drift +# from the variant table would hand back some other variant's LD. +# @noRd +.ldmCheckShape <- function(object) { + R <- object@correlation + p <- length(object) + if (!is.numeric(R) || nrow(R) != p || ncol(R) != p) { + return(glue( + "`correlation` is {nrow(R)} x {ncol(R)} but there are {p} ", + "variant(s); it must be numeric and square over them." + )) + } + # An empty matrix has no labels to check: subsetting to zero variants + # leaves NULL dimnames, which is as labelled as nothing gets. + ids <- as.character(S4Vectors::mcols(object)$SNP) + if (p == 0L) { + return(character()) + } + if ( + !identical(rownames(R), ids) || + !identical(colnames(R), ids) + ) { + return( + "`correlation`'s row and column names must be the variant ids." + ) + } + character() +} + +# A correlation matrix has a unit diagonal, entries in [-1, 1] and is +# symmetric. Symmetry is checked on an evenly spaced block of rows and +# columns: comparing a large matrix with its transpose costs another copy of +# it, and the strided block catches a wrong input just as well. +# @noRd +.ldmCheckValues <- function(R, tol = 1e-6) { + p <- nrow(R) + if (!is.numeric(R) || p == 0L || nrow(R) != ncol(R)) { + return(character()) + } + if (anyNA(R)) { + return("`correlation` holds missing values.") + } + span <- range(R) + problems <- c( + if (span[[1L]] < -1 - tol || span[[2L]] > 1 + tol) { + "`correlation` holds entries outside [-1, 1]." + }, + if (max(abs(diag(R) - 1)) > tol) { + "`correlation`'s diagonal is not 1." + } + ) + probe <- unique(round(seq(1, p, length.out = min(p, 200L)))) + block <- R[probe, probe, drop = FALSE] + if (max(abs(block - t(block))) > tol) { + problems <- c(problems, "`correlation` is not symmetric.") + } + problems +} + +# @noRd +.ldmCheckAf <- function(object) { + af <- S4Vectors::mcols(object)$AF + if (is.null(af)) { + return(character()) + } + if (!is.numeric(af) || any(af < 0 | af > 1, na.rm = TRUE)) { + return("`AF` must be numeric allele frequencies in [0, 1].") + } + character() +} + +# @noRd +.ldmCheckN <- function(n) { + if (length(n) == 1L && (is.na(n) || n >= 1L)) { + return(character()) + } + "`nSamples` must be one positive count, or NA when unknown." +} + +# @noRd +.ldmCheckWeights <- function(w) { + if (length(w) == 0L) { + return(character()) + } + if (anyNA(w) || any(w < 0) || abs(sum(w) - 1) > 1e-8) { + return("`mixtureWeights` must be non-negative and sum to 1.") + } + character() +} + +# Documented on its own page, LdMatrix-constructor.Rd: the default LdMatrix.Rd +# would collide with the ldMatrix() generic's ldMatrix.Rd on a +# case-insensitive filesystem (macOS), and one would overwrite the other. +#' @title Build an LdMatrix +#' @description Wrap an LD correlation matrix, or combine several into a +#' mixture, for use as an LD reference. See \code{\link{LdMatrix-class}}. +#' +#' \strong{One panel's LD.} Pass the matrix and the variants it covers. +#' The variants may be given as a \code{GRanges} (metadata columns +#' \code{A1}, \code{A2}, and optionally \code{SNP} and \code{AF}), as a +#' data frame with columns \code{chrom}, \code{pos}, \code{A1}, \code{A2} +#' (and optionally \code{SNP}, \code{AF}), or omitted when the matrix's +#' dimnames are \code{chrom:pos:A2:A1} ids, from which they are parsed. The +#' correlations must be signed by the dosage of \code{A1}. +#' +#' \strong{A mixture.} Pass a list of \code{LdMatrix} objects and their +#' \code{mixtureWeights}. The result is their weighted average +#' \eqn{\sum_k w_k R_k}, computed once here, over the variants every +#' component covers; a variant some component lacks is left out, with a +#' message. Components are matched by position and alleles and put into +#' the first component's allele coding, so they need not share variant ids +#' or allele orientation. The mixture's \code{AF} is \eqn{\sum_k w_k AF_k} +#' when every component records \code{AF}, and its \code{nSamples} is +#' \eqn{1 / \sum_k w_k^2 / n_k} when every component records a size. +#' +#' @param correlation A numeric correlation matrix, or a list of +#' \code{LdMatrix} objects to combine into a mixture. +#' @param variants The variants the matrix covers, in its row order: a +#' \code{GRanges} or a data frame (see Description), or \code{NULL} to +#' parse them from the matrix's dimnames. Not used for a mixture. +#' @param nSamples The size of the panel the LD was estimated from, or +#' \code{NA} when unknown. Not used for a mixture. +#' @param mixtureWeights For a mixture, one non-negative weight per +#' component, summing to 1. +#' @return An \code{LdMatrix}. +#' @rdname LdMatrix-constructor +#' @examples +#' data(eqtlRegionExample) +#' X <- eqtlRegionExample$X[, 1:8] +#' ld <- LdMatrix(cor(X), nSamples = nrow(X)) +#' ld +#' ldMatrix(ld)[1:3, 1:3] +#' +#' # A mixture of two panels' LD, weighted 3:1. +#' half <- seq_len(nrow(X) / 2) +#' ldA <- LdMatrix(cor(X[half, ]), nSamples = length(half)) +#' ldB <- LdMatrix(cor(X[-half, ]), nSamples = nrow(X) - length(half)) +#' LdMatrix(list(ldA, ldB), mixtureWeights = c(0.75, 0.25)) +#' @importFrom checkmate assertNumber +#' @export +LdMatrix <- function( + correlation, + variants = NULL, + nSamples = NA_integer_, + mixtureWeights = NULL +) { + if (is.list(correlation) && !is.data.frame(correlation)) { + return(.ldmMixture(correlation, mixtureWeights)) + } + if (!is.null(mixtureWeights)) { + abort(c( + "`mixtureWeights` is for combining LD matrices.", + i = "Pass a list of LdMatrix objects as `correlation`." + )) + } + assertNumber(nSamples, na.ok = TRUE, lower = 1) + R <- .ldmAsMatrix(correlation) + gr <- .ldmVariants(variants, R) + .ldmNew(gr, .ldmLabelled(R, gr), nSamples, numeric(0)) +} + +# @noRd +.ldmNew <- function(gr, R, nSamples, mixtureWeights) { + obj <- methods::new( + "LdMatrix", + gr, + correlation = R, + nSamples = as.integer(round(nSamples)), + mixtureWeights = as.numeric(mixtureWeights) + ) + validObject(obj) + obj +} + +# A plain numeric matrix: a Matrix-package matrix is made dense, as every +# consumer works on one. +# @noRd +#' @importFrom checkmate assertMatrix +.ldmAsMatrix <- function(correlation) { + if (methods::is(correlation, "Matrix")) { + correlation <- as.matrix(correlation) + } + assertMatrix( + correlation, + mode = "numeric", + any.missing = FALSE, + .var.name = "correlation" + ) + correlation +} + +# The matrix labelled by the variant ids. A matrix that already carries +# labels must carry exactly these, in this order: a mismatch means the matrix +# and the variant table describe different variants, or the same ones in a +# different order. +# @noRd +.ldmLabelled <- function(R, gr) { + ids <- as.character(S4Vectors::mcols(gr)$SNP) + if (nrow(R) != length(ids) || ncol(R) != length(ids)) { + abort(glue( + "`correlation` is {nrow(R)} x {ncol(R)} but `variants` lists ", + "{length(ids)} variant(s)." + )) + } + labelled <- !is.null(rownames(R)) || !is.null(colnames(R)) + if ( + labelled && + (!identical(rownames(R), ids) || !identical(colnames(R), ids)) + ) { + abort(c( + "`correlation`'s dimnames do not match the variant ids.", + i = str_c( + "Order the matrix as the variants are ordered, or drop its ", + "dimnames to label it by `variants`." + ) + )) + } + `dimnames<-`(R, list(ids, ids)) +} + +# The variant table, normalised to the GRanges an LdMatrix is: chr-prefixed +# seqnames (as a genotype panel's), names and `SNP` the ids, `A1` / `A2`, and +# `AF` when supplied. +# @noRd +.ldmVariants <- function(variants, R) { + tbl <- if (is.null(variants)) { + .ldmVariantsFromIds(rownames(R)) + } else if (methods::is(variants, "GRanges")) { + .ldmVariantsFromRanges(variants, rownames(R)) + } else if (is.data.frame(variants)) { + .ldmVariantsFromTable(variants, rownames(R)) + } else { + abort(glue( + "`variants` must be a GRanges, a data frame or NULL ", + "(got {class(variants)[[1L]]})." + )) + } + .ldmRangesOf(tbl) +} + +# @noRd +.ldmVariantsFromIds <- function(ids) { + if (is.null(ids)) { + abort(c( + "`variants` is required when the matrix has no dimnames.", + i = "Pass the variants, or label the matrix chrom:pos:A2:A1." + )) + } + parsed <- parseVariantId(ids) + if (anyNA(parsed$pos) || anyNA(parsed$A1)) { + abort(c( + "The matrix's dimnames are not chrom:pos:A2:A1 variant ids.", + i = "Pass `variants` to say which variants it covers." + )) + } + tibble( + SNP = ids, + chrom = parsed$chrom, + pos = parsed$pos, + A1 = parsed$A1, + A2 = parsed$A2 + ) +} + +# @noRd +.ldmVariantsFromRanges <- function(gr, ids) { + mc <- as.data.frame(S4Vectors::mcols(gr)) + .ldmVariantsFromTable( + mutate( + as_tibble(mc), + chrom = as.character(GenomicRanges::seqnames(gr)), + pos = GenomicRanges::start(gr), + SNP = .ldmIdsOf(mc, names(gr), ids) + ), + ids + ) +} + +# @noRd +.ldmVariantsFromTable <- function(tbl, ids) { + missingCols <- setdiff(c("chrom", "pos", "A1", "A2"), colnames(tbl)) + if (length(missingCols) > 0L) { + abort(glue( + "`variants` lacks column(s) {str_flatten(missingCols, ', ')}." + )) + } + snp <- if (is_in("SNP", colnames(tbl))) { + as.character(tbl$SNP) + } else { + .ldmIdsOf(tbl, NULL, ids) + } + out <- tibble( + SNP = snp %||% + formatVariantId( + canonChrom(as.character(tbl$chrom)), + as.integer(tbl$pos), + as.character(tbl$A2), + as.character(tbl$A1) + ), + chrom = as.character(tbl$chrom), + pos = as.integer(tbl$pos), + A1 = as.character(tbl$A1), + A2 = as.character(tbl$A2) + ) + if (is_in("AF", colnames(tbl))) { + mutate(out, AF = as.numeric(tbl$AF)) + } else { + out + } +} + +# The ids a variant table names, in order of preference: its own SNP or +# variant_id column, then the ranges' names, then the matrix's dimnames. +# NULL when none of those exist. +# @noRd +.ldmIdsOf <- function(tbl, rangeNames, ids) { + if (is_in("SNP", colnames(tbl))) { + return(as.character(tbl$SNP)) + } + if (is_in("variant_id", colnames(tbl))) { + return(as.character(tbl$variant_id)) + } + if (!is.null(rangeNames)) { + return(as.character(rangeNames)) + } + ids +} + +# @noRd +.ldmRangesOf <- function(tbl) { + if (anyDuplicated(tbl$SNP) > 0L) { + abort("The variant ids must be unique.") + } + gr <- GenomicRanges::GRanges( + seqnames = withChrPrefix(as.character(tbl$chrom)), + ranges = IRanges::IRanges(as.integer(tbl$pos), width = 1L) + ) + S4Vectors::`mcols<-`( + `names<-`(gr, tbl$SNP), + value = S4Vectors::DataFrame( + select(tbl, -all_of(c("chrom", "pos"))), + row.names = NULL + ) + ) +} + +# ---- mixtures --------------------------------------------------------------- + +# The weighted average of several LD matrices, over the variants they all +# cover, in the first component's allele coding. +# @noRd +.ldmMixture <- function(components, mixtureWeights) { + .ldmAssertComponents(components) + w <- .ldmAssertWeights(mixtureWeights, length(components)) + ref <- components[[1L]] + matched <- map(components, .ldmMatchTo, ref = ref) + common <- sort(reduce(map(matched, "refIdx"), intersect)) + if (length(common) == 0L) { + abort("The LD matrices share no variant to combine over.") + } + .ldmReportDropped(length(ref) - length(common), length(common)) + aligned <- map(matched, .ldmAlignedOn, common = common) + R <- reduce( + seq_along(components), + .ldmAddComponent, + .init = NULL, + components = components, + aligned = aligned, + w = w + ) + ids <- rownames(ref@correlation)[common] + gr <- .ldmMixtureVariants(ref[common], components, aligned, w) + obj <- methods::new( + "LdMatrix", + gr, + correlation = `dimnames<-`(R, list(ids, ids)), + nSamples = .ldmMixtureN(map_int(components, nSamples), w), + mixtureWeights = w + ) + validObject(obj) + obj +} + +# @noRd +.ldmAssertComponents <- function(components) { + isLd <- map_lgl(components, methods::is, class2 = "LdMatrix") + if (length(components) < 2L || !all(isLd)) { + abort(c( + "A mixture needs a list of at least two LdMatrix objects.", + i = str_c( + "Build each component with LdMatrix(), then combine them ", + "with LdMatrix(list(...), mixtureWeights = ...)." + ) + )) + } +} + +# @noRd +.ldmAssertWeights <- function(w, k) { + if ( + is.null(w) || + !is.numeric(w) || + length(w) != k || + anyNA(w) || + any(w < 0) || + abs(sum(w) - 1) > 1e-8 + ) { + abort(glue( + "`mixtureWeights` must be {k} non-negative weights summing to 1, ", + "one per component." + )) + } + as.numeric(w) +} + +# Where each of `ref`'s variants sits in `x`, and with which allele sign. +# @noRd +.ldmMatchTo <- function(x, ref) { + m <- matchVariants( + .ldRefMatchIds(ref), + .ldRefMatchIds(x), + removeStrandAmbiguous = FALSE + ) + list(refIdx = m$idxA, idx = m$idxB, sign = m$sign) +} + +# A component's positions and signs for the shared variants, in `ref` order. +# @noRd +.ldmAlignedOn <- function(matched, common) { + at <- match(common, matched$refIdx) + list(idx = matched$idx[at], sign = matched$sign[at]) +} + +# A component's matrix over the shared variants, re-signed into the first +# component's allele coding: a swapped variant's dosage counts the other +# allele, which negates each of its correlations. +# @noRd +.ldmAlignedR <- function(x, aligned) { + R <- unname(x@correlation[aligned$idx, aligned$idx, drop = FALSE]) + if (all(aligned$sign > 0)) { + return(R) + } + R * outer(aligned$sign, aligned$sign) +} + +# Add the k-th component's weighted, aligned matrix to the running sum, so only +# one aligned copy exists at a time rather than every component's at once. +# @noRd +.ldmAddComponent <- function(acc, k, components, aligned, w) { + term <- w[[k]] * .ldmAlignedR(components[[k]], aligned[[k]]) + if (is.null(acc)) term else acc + term +} + +# The mixture's variant table: the first component's, with AF the weighted +# average of the components' (each put into the first component's coding) +# when every component records one. +# @noRd +.ldmMixtureVariants <- function(gr, components, aligned, w) { + afs <- map2(components, aligned, .ldmAlignedAf) + mc <- S4Vectors::mcols(gr) + mc$AF <- if (any(map_lgl(afs, is.null))) { + NULL + } else { + reduce(map2(w, afs, `*`), `+`) + } + S4Vectors::`mcols<-`(gr, value = mc) +} + +# @noRd +.ldmAlignedAf <- function(x, aligned) { + af <- S4Vectors::mcols(x)$AF + if (is.null(af)) { + return(NULL) + } + af <- as.numeric(af)[aligned$idx] + if_else(aligned$sign > 0, af, 1 - af) +} + +# 1 / sum(w^2 / n): the size of one panel whose LD is as noisy as the mixture. +# @noRd +.ldmMixtureN <- function(n, w) { + if (anyNA(n)) { + return(NA_integer_) + } + as.integer(round(1 / sum(w^2 / n))) +} + +# @noRd +.ldmReportDropped <- function(nDropped, nKept, what = "LdMatrix") { + if (nDropped == 0L) { + return(invisible(NULL)) + } + inform(glue( + "{what}: {nDropped} variant(s) of the first component are not in ", + "every component and are left out; the mixture covers {nKept}." + )) +} + +# ---- subsetting ------------------------------------------------------------- + +# Subsetting the variants subsets the matrix with them, so the two never fall +# out of step. +setMethod("extractROWS", "LdMatrix", function(x, i) { + i <- normalizeSingleBracketSubscript(i, x) + ans <- methods::callNextMethod(x, i) + ans@correlation <- x@correlation[i, i, drop = FALSE] + ans +}) + +# ---- accessors -------------------------------------------------------------- + +#' @rdname ldMatrix +#' @export +setMethod("ldMatrix", "LdMatrix", function(x) x@correlation) + +#' @rdname nSamples +#' @export +setMethod("nSamples", "LdMatrix", function(x, ...) x@nSamples) + +#' @rdname mixtureWeights +#' @export +setMethod("mixtureWeights", "LdMatrix", function(x) { + if (length(x@mixtureWeights) == 0L) NULL else x@mixtureWeights +}) + +#' @rdname variantIds +#' @export +setMethod("variantIds", "LdMatrix", function(x, ...) { + as.character(S4Vectors::mcols(x)$SNP) +}) + +#' @rdname af +#' @export +setMethod("af", "LdMatrix", function(x, ...) { + af <- S4Vectors::mcols(x)$AF + ids <- as.character(S4Vectors::mcols(x)$SNP) + set_names(if (is.null(af)) rep(NA_real_, length(ids)) else af, ids) +}) + +#' @rdname LdMatrix-class +#' @param object An \code{LdMatrix}. +#' @export +setMethod("show", "LdMatrix", function(object) { + n <- if (is.na(object@nSamples)) "unknown" else object@nSamples + cat(glue( + "LdMatrix: {length(object)} variants, panel size {n}\n", + .trim = FALSE + )) + w <- object@mixtureWeights + if (length(w) > 0L) { + cat(glue( + " mixture of {length(w)} panels, weights ", + "{str_flatten(signif(w, 3), ', ')}\n", + .trim = FALSE + )) + } + if (!is_in("AF", colnames(S4Vectors::mcols(object)))) { + cat(" no allele frequencies\n") + } +}) diff --git a/R/LdScore.R b/R/LdScore.R index 80223afc8..6442a3068 100644 --- a/R/LdScore.R +++ b/R/LdScore.R @@ -1,9 +1,10 @@ # ============================================================================= # LdScore S4 class # ----------------------------------------------------------------------------- -# Pre-computed LD scores (sum of r^2) per SNP. Consumed by S-LDSC and -# g-LDSC. Holds the optional per-block LD matrices needed for g-LDSC's -# FGLS residual covariance. +# Pre-computed LD scores (sum of ldsc's unbiased r^2) per SNP. Consumed by +# S-LDSC and g-LDSC. g-LDSC's FGLS residual covariance also needs each block's +# LD: stored per block for LdMatrix input, read from the genotype panel on +# demand for panel input. # ============================================================================= #' @include LdStatistic.R @@ -17,8 +18,17 @@ NULL #' slots, because they are parallel to the variants: as slots they would #' survive a subset unchanged while the ranges narrowed, leaving scores #' describing variants that are no longer there. -#' @slot ldMatrixList For g-LDSC: a list of per-block LD (R^2) matrices used to -#' compute the FGLS residual covariance. Empty for S-LDSC. +#' +#' An \code{LdScore} storing per-block LD matrices (\code{ldMatrixList}) +#' cannot be subset or reordered: each block's matrix indexes its variants +#' by position, so narrowing the variants would leave it describing other +#' variants. A scores-only object, or one reading its LD from a genotype +#' panel, subsets freely. +#' @slot ldMatrixList For g-LDSC: a list of per-block LD correlation (R) +#' matrices used to compute the FGLS residual covariance, kept when the +#' scores were built from \code{LdMatrix} blocks. Empty for a scores-only +#' object, and for one built from a genotype panel, which reads each +#' block's LD from the panel instead (see \code{\linkS4class{LdStatistic}}). #' @export setClass( "LdScore", @@ -50,7 +60,8 @@ setClass( #' @param snpInfo A \code{data.frame} with columns \code{SNP}, \code{CHR}, #' \code{BP}, \code{A1}, \code{A2} (and optionally \code{MAF}). #' @param ldScores A numeric matrix, one row per variant. The first column is -#' the base LD score (sum of r^2); further columns are +#' the base LD score (sum of r^2, which \code{\link{buildLdScore}} takes as +#' ldsc's unbiased r^2, as ldsc's own score files do); further columns are #' annotation-stratified scores. #' @param ldScoreWeights Numeric regression weights, one per variant. #' @param ldBlocks A \code{GRanges} of LD block intervals. @@ -109,56 +120,71 @@ LdScore <- function( } #' @importFrom checkmate assertCount assertFlag -#' @title Build an LdScore from loaded LD -#' @description Compute per-variant LD scores from already-loaded LD, block by +#' @title Build an LdScore from an LD reference +#' @description Compute per-variant LD scores from an LD reference, block by #' block, into the \code{LdScore} that \code{\link{estimateH2}} consumes #' for \code{method = "gldsc"}. This is the supported route from an LD #' reference to an h2 input: \code{\link{LdScore}} itself is the low-level #' constructor and expects the scores to have been computed already. #' -#' The score is \eqn{\ell_j = \sum_k r^2_{jk}} within each block, the same -#' quantity \code{\link{computeLdScores}} reconstructs from an -#' \code{\link{LdEigen}}, so the two agree on a shared reference. +#' The score is \eqn{\ell_j = \sum_k r^2_{jk}} within each block, with +#' each term ldsc's unbiased estimate of \eqn{r^2} (Bulik-Sullivan et al. +#' 2015, \code{ldscore.py}): \code{r^2 - (1 - r^2) / (n - 2)}, where +#' \code{n} is the reference panel sample size. A sample \eqn{r^2} +#' overstates the population value by about \code{(1 - r^2) / (n - 2)}, +#' and a block sums many of them. A variant's own term stays 1, and +#' negative estimates are kept, as in ldsc. \code{\link{computeLdScores}} +#' gives the same scores from an \code{\link{LdEigen}} built on the same +#' reference. #' -#' No file I/O happens here. Read the LD first with -#' \code{\link{loadLdMatrix}} -- passing a vector of regions returns one -#' \code{LdData} per block -- then pass the result in. -#' @param ldBlockData An \code{\link{LdData}}, or a list of them, covering -#' the reference variants. An \code{LdData} whose correlation is a list of -#' per-block matrices contributes one LD block per matrix; one whose -#' correlation is a single matrix contributes one block. Blocks are kept in -#' the order given, and that order defines the variant order of the result. +#' @param ldReference The LD reference, block by block: a list of +#' \code{\link{LdMatrix}} objects, one per LD block (a single +#' \code{LdMatrix} is one block), or a genotype panel (see +#' \code{\link{readGenotypes}}) together with \code{ldBlocks}. Blocks are +#' kept in the order given, and that order defines the variant order of the +#' result. #' #' Block structure matters downstream: \code{\link{estimateH2}} takes its #' standard error from a delete-one-block jackknife, so it requires at -#' least two blocks and wants many more. Loading a whole region as one -#' dense matrix yields a single block. -#' @param nSamples Integer, the LD reference panel sample size. Defaults to the -#' size recorded by the supplied \code{LdData}; required when they record -#' none, and an error when they disagree. +#' least two blocks and wants many more. +#' @param ldBlocks With a genotype panel, the LD blocks to cut it into: a +#' \code{GRanges}, or a data frame with columns \code{chrom}, \code{start} +#' and \code{end}. Each block's LD is computed from the panel variants +#' inside it; variants outside every block are left out. Not used with +#' \code{LdMatrix} blocks. +#' @param nSamples Integer, the number of samples the reference's LD was +#' estimated from. Defaults to a panel's sample count (a stochastic +#' sketch's effective size), or the size the \code{LdMatrix} blocks record; +#' required when they record none, and an error when they disagree. It is +#' also the \code{n} of the unbiased \eqn{r^2}, and it must exceed 2. #' @param inSample Logical, whether the reference is the GWAS cohort itself. #' @param genome Character, genome build. Defaults to the build recorded by -#' the supplied \code{LdData}, which \code{\link{loadLdMatrix}} leaves -#' unset. +#' the reference's variants. #' @param ldScoreWeights Optional numeric regression weights, one per variant. #' Defaults to the conventional \eqn{1/\max(\ell_j, 1)}. -#' @param keepLdMatrices Logical. Keep each block's LD matrix on the result. -#' \code{TRUE} (the default) is required for \code{method = "gldsc"}, -#' which forms its FGLS residual covariance from them and errors without -#' them. \code{FALSE} drops them, leaving a scores-only object. -#' @return An \code{LdScore} over every variant in \code{ldBlockData}. +#' @param keepLdMatrices Logical, for \code{LdMatrix} blocks: keep each +#' block's LD matrix on the result. \code{TRUE} (the default) is required +#' for \code{method = "gldsc"} and for annotation-stratified scores, which +#' need each block's LD. \code{FALSE} drops them, leaving a scores-only +#' object. A genotype panel is never copied into matrices: the result keeps +#' the panel and reads each block's LD from it when it is needed, so it +#' serves every method either way. +#' @return An \code{LdScore} over every variant in the reference's blocks. #' @seealso \code{\link{buildLdEigen}} for the LDER / HDL input, #' \code{\link{estimateH2}}, \code{\link{computeLdScores}} #' @examples -#' meta <- system.file("extdata", "ld_reference", "ld_meta_file.tsv", -#' package = "pecotmr") -#' ld <- loadLdMatrix(meta, region = "chr22:10000000-19000000") -#' ldScore <- buildLdScore(ld, genome = "hg38") +#' panel <- readGenotypes(plink2Prefix = file.path(system.file("extdata", +#' "ld_reference", "chr22", package = "pecotmr"), +#' "protocol_example.LD.chr22")) +#' blocks <- data.frame(chrom = "chr22", start = c(10000000, 15000001), +#' end = c(15000000, 19000000)) +#' ldScore <- buildLdScore(panel, ldBlocks = blocks, genome = "hg38") #' ldScore #' head(S4Vectors::mcols(ldScore)$ldScores) #' @export buildLdScore <- function( - ldBlockData, + ldReference, + ldBlocks = NULL, nSamples = NULL, inSample = FALSE, genome = NA_character_, @@ -168,14 +194,14 @@ buildLdScore <- function( assertCount(nSamples, positive = TRUE, null.ok = TRUE) assertFlag(inSample) assertFlag(keepLdMatrices) - prep <- .ldRefPrepare(ldBlockData, nSamples, genome) - l2 <- .ldScoreVector(prep$blocks, prep$snpIdx, nrow(prep$snpInfo)) - ldMatrixList <- if (isTRUE(keepLdMatrices)) { + prep <- .h2RefPrepare(ldReference, ldBlocks, nSamples, genome) + l2 <- .ldScoreVector(prep, .ldscAssertN(prep$nRef)) + ldMatrixList <- if (isTRUE(keepLdMatrices) && is.null(prep$ldReference)) { map2(prep$blocks, prep$snpIdx, .ldScoreKeepMatrix) } else { list() } - LdScore( + scores <- LdScore( snpInfo = prep$snpInfo, ldScores = matrix(l2, ncol = 1, dimnames = list(NULL, "base_l2")), ldScoreWeights = .ldScoreResolveWeights(ldScoreWeights, l2), @@ -185,27 +211,78 @@ buildLdScore <- function( genome = prep$genome, ldMatrixList = ldMatrixList ) + .ldStatAttachReference(scores, prep) +} + +# Per-variant sum of ldsc's unbiased r^2 within the variant's own block, in +# reference order. The blocks partition the variants, which are stacked +# block by block, so the blocks' sums concatenate into place; a genotype +# panel's blocks are read one at a time. +# @noRd +.ldScoreVector <- function(prep, nRef) { + blocks <- map2(prep$blocks, prep$snpIdx, .ldScoreBuildBlock) + list_c(map( + blocks, + .ldScoreBlockSums, + ldReference = prep$ldReference, + nRef = nRef + )) +} + +# A block of the reference being built, as the record the block readers take. +# @noRd +.ldScoreBuildBlock <- function(block, snpIdx) { + list(idx = snpIdx, R = block$R, rows = block$rows) +} + +# One block's base LD scores: the raw sums of r^2 over the block, corrected to +# ldsc's unbiased r^2 by its summed form. +# @noRd +.ldScoreBlockSums <- function(block, ldReference, nRef) { + ld <- .ldStatBlockLd(block, ldReference) + p <- .ldSourceSize(ld) + raw <- .ldSquaredProduct(ld, matrix(1, p, 1L)) + as.vector(.ldscUnbiasedSum(raw, p, nRef)) } -# Per-variant sum of r^2 within the variant's own block, scattered back into -# reference order. +# ldsc's unbiased estimator of r^2 (ldscore.py, __l2_unbiased__): a sample +# r^2 overstates the population value by about (1 - r^2) / (n - 2). The self +# term (r^2 = 1) stays 1, and negative estimates are kept, as in ldsc. Every +# LD score pecotmr computes goes through this or its summed form below. # @noRd -.ldScoreVector <- function(blocks, snpIdx, nVariants) { - if (length(blocks) == 0L) { - return(numeric(nVariants)) +.ldscUnbiasedR2 <- function(r2, nRef) { + r2 - (1 - r2) / (nRef - 2) +} + +# .ldscUnbiasedR2() summed over a block with weights a_k: +# sum_k a_k (r2_jk - (1 - r2_jk) / (n - 2)) +# = ((n - 1) * sum_k a_k r2_jk - sum_k a_k) / (n - 2). +# Exact, so a route that has the raw weighted sums but not r^2 itself -- an +# eigendecomposition -- corrects them without rebuilding the matrix. +# `rawSums` is variants x columns; `weightSums` holds each column's sum_k a_k +# over the block, which for the unweighted base score is the block size. +# @noRd +.ldscUnbiasedSum <- function(rawSums, weightSums, nRef) { + sweep((nRef - 1) * rawSums, 2L, weightSums) / (nRef - 2) +} + +# ldsc's unbiased r^2 divides by n - 2, so the panel must exceed 2 samples. +# @noRd +.ldscAssertN <- function(nRef) { + if (nRef > 2L) { + return(nRef) } - # The blocks partition the variants, so each variant's score lands in - # exactly one place; variants in no block stay zero. - replace( - numeric(nVariants), - list_c(snpIdx), - list_c(map(blocks, .ldScoreBlockSums)) - ) + abort(glue( + "ldsc's unbiased r^2 divides by n - 2, so the LD reference panel ", + "needs more than 2 samples, and it records {nRef}. Give the panel's ", + "size as `nSamples`." + )) } +# The n of ldsc's unbiased r^2 for a built LD reference: its panel size. # @noRd -.ldScoreBlockSums <- function(block) { - rowSums(block$R^2) +.ldscPanelN <- function(ldRef) { + .ldscAssertN(ldPanelNSamples(ldRef)) } # @noRd @@ -233,17 +310,76 @@ setMethod("show", "LdScore", function(object) { "{ncol(scores)} LD score columns\n", .trim = FALSE )) - cat(glue( - " Full LD matrices: {length(object@ldMatrixList) > 0} ", - "(needed for g-LDSC)\n", - .trim = FALSE - )) + cat(glue(" Block LD: {.ldScoreLdSource(object)}\n", .trim = FALSE)) cat(glue( " Reference N: {object@nSamples}, In-sample: {object@inSample}\n", .trim = FALSE )) }) +# Where an LdScore's per-block LD comes from, as show() describes it. +# @noRd +.ldScoreLdSource <- function(x) { + if (!is.null(x@ldReference)) { + return("read from the genotype panel when needed") + } + if (length(x@ldMatrixList) > 0L) { + return("stored matrices") + } + "none (scores only; g-LDSC and stratified scores need it)" +} + +# TRUE when each block's LD can be had: stored, or read from the panel. +# @noRd +.ldScoreHasLd <- function(x) { + !is.null(x@ldReference) || length(x@ldMatrixList) > 0L +} + +# The block records of an LdScore (see .ldStatLazyBlocks()). +# @noRd +.ldScoreBlocks <- function(x) { + if (length(x@ldMatrixList) > 0L) { + return(map(x@ldMatrixList, .ldScoreStoredBlock)) + } + .ldStatLazyBlocks(x) +} + +# @noRd +.ldScoreStoredBlock <- function(block) { + list(idx = block$snpIdx, R = block$R) +} + +# ---- subsetting ------------------------------------------------------------- + +# Stored block matrices index their variants by position (`snpIdx`), so a +# subset or reorder would leave them describing other variants. Without them +# each block's variants are found afresh from the ranges, so the subset is +# safe. Every subset -- `[`, head(), tail(), window(), subset() -- reaches the +# rows through extractROWS(). +setMethod("extractROWS", "LdScore", function(x, i) { + if (length(x@ldMatrixList) > 0L) { + abort(glue( + "an LdScore storing per-block LD matrices cannot be subset: each ", + "block's matrix indexes its variants by position, so narrowing ", + "or reordering the variants would leave it describing other ", + "variants. Rebuild the scores over the subset instead." + )) + } + methods::callNextMethod() +}) + #' @rdname ldMatrixList #' @export -setMethod("ldMatrixList", "LdScore", function(x) x@ldMatrixList) +setMethod("ldMatrixList", "LdScore", function(x) { + if (is.null(x@ldReference)) { + return(x@ldMatrixList) + } + map(.ldScoreBlocks(x), .ldScorePanelMatrix, ldReference = x@ldReference) +}) + +# One block's LD matrix computed from the panel an LdScore reads it from. +# @noRd +.ldScorePanelMatrix <- function(block, ldReference) { + F <- .ldRefFactor(ldReference, block$rows) + list(R = crossprod(F) / (nrow(F) - 1), snpIdx = block$idx) +} diff --git a/R/LdStatistic.R b/R/LdStatistic.R index c324cf174..bcd87248b 100644 --- a/R/LdStatistic.R +++ b/R/LdStatistic.R @@ -7,7 +7,7 @@ # LD-score-based methods (S-LDSC/g-LDSC). # ============================================================================= -#' @include AllGenerics.R LdBlocks.R +#' @include AllGenerics.R AllClasses.R LdBlocks.R NULL #' @title LD Statistic (Virtual Base Class) @@ -21,10 +21,21 @@ NULL #' live in \code{mcols} too, so subsetting narrows the ranges and the #' statistics together. The genome build comes from \code{seqinfo()} rather #' than a slot of its own. +#' +#' A statistic built from a genotype panel (or a +#' \code{\link{GenotypeMixture}}) keeps that reference rather than its +#' blocks' LD: each block's LD is read from the panel when an estimator +#' reaches the block, so only one block's is ever in memory, and +#' \code{mcols()} records each variant's row in the panel as +#' \code{panelRow}. One built from \code{\link{LdMatrix}} blocks stores +#' what it needs of their LD instead. #' @slot ldBlocks A \code{GRanges} of LD block intervals. #' @slot nSamples Integer, sample size of the LD reference panel. #' @slot inSample Logical, whether the LD reference is from the same cohort as #' the GWAS (affects bias correction). +#' @slot ldReference The genotype panel or \code{GenotypeMixture} the +#' statistic reads its blocks' LD from, or \code{NULL} when it was built +#' from \code{LdMatrix} blocks. #' @export setClass( "LdStatistic", @@ -32,8 +43,10 @@ setClass( representation( ldBlocks = "GRanges", nSamples = "integer", - inSample = "logical" + inSample = "logical", + ldReference = "LdReference_OR_NULL" ), + prototype(ldReference = NULL), validity = function(object) .validateLdStatistic(object) ) @@ -53,9 +66,41 @@ setClass( if (length(object) == 0L) { coll$push("an LdStatistic must carry at least one variant") } + referenceCheck <- .ldStatReferenceCheck(object) + if (!isTRUE(referenceCheck)) { + coll$push(referenceCheck) + } coll$getMessages() } +# A statistic read from a genotype reference finds each variant there by its +# `panelRow`, so every variant needs one, and it must be a row of the panel. +# @noRd +.ldStatReferenceCheck <- function(object) { + ref <- object@ldReference + if (is.null(ref)) { + return(TRUE) + } + if (!.ldIsGenotypeRef(ref)) { + return(str_c( + "`ldReference` must be a genotype panel or a GenotypeMixture: ", + "LdMatrix blocks are stored, not read on demand" + )) + } + rows <- S4Vectors::mcols(object, use.names = FALSE)$panelRow + nRows <- length(.ldRefRanges(ref)) + valid <- is.integer(rows) && + !anyNA(rows) && + all(rows >= 1L & rows <= nRows) + if (valid) { + return(TRUE) + } + str_c( + "a statistic read from `ldReference` needs an integer `panelRow` ", + "column naming each variant's row in it" + ) +} + # The variants of an LD reference, as the GRanges every subclass is built on. # Shared by the LdScore() and LdEigen() constructors so the two agree on what # a reference panel's variant table looks like. @@ -98,146 +143,161 @@ setClass( } # ============================================================================= -# Building an LD statistic from already-loaded LD +# Building an LD statistic from an LD reference # ----------------------------------------------------------------------------- -# buildLdEigen() and buildLdScore() both start from LD that has already been -# read -- one or more LdData, as loadLdMatrix() returns them -- -# and differ only in what they compute per block. Everything before that -# (splitting into blocks, assembling the variant table, resolving nRef and the -# genome build) is shared, so it lives here next to .ldStatRanges(). +# buildLdEigen() and buildLdScore() both start from an LD reference -- one +# LdMatrix per LD block, or a genotype panel cut at the blocks' spans -- and +# differ only in what they compute per block. Everything before that +# (splitting into blocks, assembling the variant table, resolving nRef and +# the genome build) is shared, so it lives here next to .ldStatRanges(). # ============================================================================= # Shared front half of buildLdEigen()/buildLdScore(): validate the input, -# split it into blocks, and resolve what the LdStatistic base needs. +# split it into blocks, and resolve what the LdStatistic base needs. A +# genotype reference is kept, with each variant's row in it, for the +# statistic to read its blocks from. # @noRd -.ldRefPrepare <- function(ldBlockData, nSamples, genome) { - dataList <- .ldRefAsDataList(ldBlockData) - blocks <- list_flatten(map(dataList, .ldRefBlocksOf)) - resolvedGenome <- .ldRefResolveGenome(dataList, genome) +.h2RefPrepare <- function(ldReference, ldBlocks, nSamples, genome) { + blocks <- .h2RefBlocks(ldReference, ldBlocks) + resolvedGenome <- .h2RefResolveGenome(ldReference, genome) + lazy <- .ldIsGenotypeRef(ldReference) list( blocks = blocks, - snpInfo = .ldRefSnpInfo(blocks), - snpIdx = .ldRefSnpIdx(blocks), - ldBlocks = .ldRefBlockRanges(blocks, resolvedGenome), - nRef = .ldRefResolveNRef(dataList, nSamples), - genome = resolvedGenome + snpInfo = .h2RefSnpInfo(blocks), + snpIdx = .h2RefSnpIdx(blocks), + ldBlocks = .h2RefBlockRanges(blocks, resolvedGenome), + nRef = .h2RefResolveNRef(ldReference, nSamples), + genome = resolvedGenome, + ldReference = if (lazy) ldReference, + panelRow = if (lazy) list_c(map(blocks, "rows")) ) } -# Accept a single LdData as well as a list of them. +# The reference's LD blocks: list(R, gr) per LdMatrix, or list(rows, gr) per +# block a genotype panel is cut into at `ldBlocks` -- the panel rows whose LD +# is computed when it is needed, not here. # @noRd -.ldRefAsDataList <- function(ldBlockData) { - if (is(ldBlockData, "LdData")) { - return(list(ldBlockData)) +.h2RefBlocks <- function(ldReference, ldBlocks) { + if (.ldIsGenotypeRef(ldReference)) { + return(.h2RefPanelBlocks(ldReference, ldBlocks)) } - if (!is.list(ldBlockData) || length(ldBlockData) == 0L) { - abort(glue( - "`ldBlockData` must be an LdData or a non-empty list of them ", - "(got {class(ldBlockData)[[1L]]})." + if (!is.null(ldBlocks)) { + abort(c( + "`ldBlocks` cuts a genotype panel into LD blocks.", + i = "A list of LdMatrix objects is already one block per element." )) } - bad <- which(!map_lgl(ldBlockData, is, class2 = "LdData")) - if (length(bad) > 0L) { - abort(glue( - "`ldBlockData` element(s) {str_flatten(bad, ', ')} are not ", - "LdData objects." + map(.h2RefMatrixList(ldReference), .h2RefMatrixBlock) +} + +# A single LdMatrix is one block; a list must hold LdMatrix objects only. +# @noRd +.h2RefMatrixList <- function(ldReference) { + if (.ldIsMatrixRef(ldReference)) { + return(list(ldReference)) + } + isList <- is.list(ldReference) && + length(ldReference) > 0L && + all(map_lgl(ldReference, .ldIsMatrixRef)) + if (!isList) { + abort(c( + str_c( + "`ldReference` must be a genotype panel, an LdMatrix, or a ", + "non-empty list of LdMatrix objects (one per LD block)." + ), + i = glue("Got {class(ldReference)[[1L]]}.") )) } - ldBlockData + ldReference } -# The per-block LD matrices of one LdData, each paired with the variants it -# describes. An LdData holds either a single matrix (one block) or a list of -# them (block-diagonal LD across a multi-block region). # @noRd -.ldRefBlocksOf <- function(x) { - R <- ldMatrix(x) - gr <- variantInfo(x) - if (!is.list(R)) { - return(list(.ldRefOneBlock(R, gr))) - } - idx <- .ldRefBlockIndices(x, R, length(gr)) - map2(R, idx, .ldRefBlockFromIdx, gr = gr) +.h2RefMatrixBlock <- function(x) { + list(R = ldMatrix(x), gr = as(x, "GRanges")) } +# A genotype panel cut into the LD blocks `ldBlocks` spans. Each block holds +# the panel variants inside it, whose LD is computed from their dosages; +# variants outside every block are not part of the reference, and a variant +# inside two blocks would be scored twice, so overlapping blocks are refused. # @noRd -.ldRefBlockFromIdx <- function(R, idx, gr) { - .ldRefOneBlock(R, gr[idx]) +.h2RefPanelBlocks <- function(panel, ldBlocks) { + if (is.null(ldBlocks)) { + abort(c( + "`ldBlocks` is required with a genotype panel.", + i = "It says where each LD block starts and ends." + )) + } + # A panel's seqnames are chr-prefixed; a block table may not be. + blocks <- .asLdBlockRanges(ldBlocks) + spans <- GenomeInfoDb::renameSeqlevels( + blocks, + withChrPrefix(GenomeInfoDb::seqlevels(blocks)) + ) + gr <- .ldRefRanges(panel) + hits <- GenomicRanges::findOverlaps(gr, spans) + if (anyDuplicated(S4Vectors::queryHits(hits)) > 0L) { + abort("`ldBlocks` overlap: a variant may sit in only one LD block.") + } + idx <- compact(map( + seq_along(spans), + .h2RefSpanIdx, + hits = hits + )) + if (length(idx) == 0L) { + abort("None of the panel's variants falls inside `ldBlocks`.") + } + map(idx, .h2RefPanelBlockAt, panel = panel, gr = gr) } +# The panel rows inside block `k`, in panel order, or NULL for an empty block. # @noRd -#' @importFrom checkmate assertMatrix -.ldRefOneBlock <- function(R, gr) { - R <- as.matrix(R) - assertMatrix(R, nrows = length(gr), .var.name = "LD block correlation") - list(R = R, gr = gr) +.h2RefSpanIdx <- function(k, hits) { + idx <- sort(S4Vectors::queryHits(hits)[S4Vectors::subjectHits(hits) == k]) + if (length(idx) == 0L) NULL else idx } -# Which variants each block matrix covers. blockMetadata's startIdx/endIdx is -# authoritative when it lines up with the matrices; otherwise the blocks are -# taken in order, each covering as many variants as its matrix has rows. # @noRd -.ldRefBlockIndices <- function(x, R, nVariants) { - sizes <- map_int(R, nrow) - if (sum(sizes) != nVariants) { - abort(glue( - "the LD block matrices cover {sum(sizes)} variant(s) but the ", - "LdData carries {nVariants}." - )) - } - md <- blockMetadata(x) - # blockMetadata is a GRanges: the index payload is in mcols. - hasIdx <- all(is_in( - c("startIdx", "endIdx"), - names(S4Vectors::mcols(md)) - )) && - length(md) == length(R) - if (hasIdx) { - return(map2(as.integer(md$startIdx), as.integer(md$endIdx), seq.int)) - } - ends <- cumsum(sizes) - map2(as.integer(ends - sizes + 1L), as.integer(ends), seq.int) +.h2RefPanelBlockAt <- function(idx, panel, gr) { + list(rows = idx, gr = gr[idx]) } # Global (concatenated) variant positions of each block. # @noRd -.ldRefSnpIdx <- function(blocks) { - sizes <- map_int(blocks, .ldRefBlockSize) +.h2RefSnpIdx <- function(blocks) { + sizes <- map_int(blocks, .h2RefBlockSize) ends <- cumsum(sizes) map2(as.integer(ends - sizes + 1L), as.integer(ends), seq.int) } # @noRd -.ldRefBlockSize <- function(block) length(block$gr) +.h2RefBlockSize <- function(block) length(block$gr) # The variant table .ldStatRanges() expects, stacked over the blocks in -# order. An LdData names its variants `variant_id`, and reports frequency as -# allele_freq rather than MAF. +# order. Both kinds of reference name their variants `SNP`; frequency comes +# from `AF` (an LdMatrix's, or a stochastic sketch's recorded one) as MAF. # @noRd -.ldRefSnpInfo <- function(blocks) { - bind_rows(map(blocks, .ldRefSnpInfoOne)) +.h2RefSnpInfo <- function(blocks) { + bind_rows(map(blocks, .h2RefSnpInfoOne)) } # @noRd -.ldRefSnpInfoOne <- function(block) { +.h2RefSnpInfoOne <- function(block) { gr <- block$gr md <- S4Vectors::mcols(gr, use.names = FALSE) info <- tibble( - SNP = .ldRefVariantIds(gr, md), + SNP = .h2RefVariantIds(gr, md), CHR = as.character(seqnames(gr)), BP = as.integer(start(gr)), - A1 = .ldRefAllele(md, "A1"), - A2 = .ldRefAllele(md, "A2") + A1 = .h2RefAllele(md, "A1"), + A2 = .h2RefAllele(md, "A2") ) - maf <- .ldRefMaf(md) + maf <- .h2RefMaf(md) if (is.null(maf)) info else mutate(info, MAF = maf) } # @noRd -.ldRefVariantIds <- function(gr, md) { - if (is_in("variant_id", colnames(md))) { - return(as.character(md$variant_id)) - } +.h2RefVariantIds <- function(gr, md) { if (is_in("SNP", colnames(md))) { return(as.character(md$SNP)) } @@ -248,7 +308,7 @@ setClass( } # @noRd -.ldRefAllele <- function(md, which) { +.h2RefAllele <- function(md, which) { if (!is_in(which, colnames(md))) { abort(glue( "the LD reference's variants carry no `{which}` column; an ", @@ -259,37 +319,35 @@ setClass( } # @noRd -.ldRefMaf <- function(md) { - if (is_in("MAF", colnames(md))) { - return(as.numeric(md$MAF)) +.h2RefMaf <- function(md) { + if (!is_in("AF", colnames(md))) { + return(NULL) } - if (is_in("allele_freq", colnames(md))) { - af <- as.numeric(md$allele_freq) - return(pmin(af, 1 - af)) - } - NULL + af <- as.numeric(md$AF) + pmin(af, 1 - af) } # One range per block, spanning the variants it covers. These are the blocks # the jackknife leaves out one at a time, so they must line up with -# eigenList / ldMatrixList element for element. +# eigenList / ldMatrixList element for element; a statistic read from a panel +# finds each block's variants by placing them in these ranges. # @noRd -.ldRefBlockRanges <- function(blocks, genome) { +.h2RefBlockRanges <- function(blocks, genome) { gr <- GRanges( - seqnames = map_chr(blocks, .ldRefBlockChrom), + seqnames = map_chr(blocks, .h2RefBlockChrom), ranges = IRanges::IRanges( - start = map_int(blocks, .ldRefBlockStart), - end = map_int(blocks, .ldRefBlockEnd) + start = map_int(blocks, .h2RefBlockStart), + end = map_int(blocks, .h2RefBlockEnd) ) ) - .withGenomeBuild(gr, .ldRefNamedGenome(genome), genome) + .withGenomeBuild(gr, .h2RefNamedGenome(genome), genome) } -# An LD block is within-chromosome by construction, and .ldRefBlockRanges() +# An LD block is within-chromosome by construction, and .h2RefBlockRanges() # collapses each to a single range, so a block spanning chromosomes would # silently get a range covering everything between them. # @noRd -.ldRefBlockChrom <- function(block) { +.h2RefBlockChrom <- function(block) { chrom <- unique(withChrPrefix(as.character(seqnames(block$gr)))) if (length(chrom) != 1L) { abort(glue( @@ -301,60 +359,75 @@ setClass( } # @noRd -.ldRefBlockStart <- function(block) as.integer(min(start(block$gr))) +.h2RefBlockStart <- function(block) as.integer(min(start(block$gr))) # @noRd -.ldRefBlockEnd <- function(block) as.integer(max(start(block$gr))) +.h2RefBlockEnd <- function(block) as.integer(max(start(block$gr))) # @noRd -.ldRefNamedGenome <- function(genome) { +.h2RefNamedGenome <- function(genome) { !is.null(genome) && length(genome) == 1L && !is.na(genome) && nzchar(genome) } -# nRef comes from the LdData unless the caller names one. Differing panel -# sizes are an error rather than a silent pick: nRef drives HDL's -# finite-reference correction, so the wrong one shifts h2. +# nRef is the number of independent samples the reference's LD is worth -- +# a panel's sample count, a sketch's effective size, or what each LdMatrix +# records -- unless the caller names one with `nSamples`. Differing sizes +# across LdMatrix blocks are an error rather than a silent pick: nRef drives +# HDL's finite-reference correction and the n of ldsc's unbiased r^2 in the +# LD scores, so the wrong one shifts h2. # @noRd -.ldRefResolveNRef <- function(dataList, nSamples) { +.h2RefResolveNRef <- function(ldReference, nSamples) { if (!is.null(nSamples)) { return(as.integer(nSamples)) } - found <- discard(unique(map_int(dataList, .ldRefNRefOf)), is.na) + if (.ldIsGenotypeRef(ldReference)) { + return(as.integer(.ldRefNoiseN(ldReference))) + } + found <- discard( + unique(map_int(.h2RefMatrixList(ldReference), .h2RefNSamplesOf)), + is.na + ) if (length(found) == 0L) { - abort(glue( - "`nRef` is required: none of the supplied LdData records a ", - "reference panel sample size." + abort(c( + "`nSamples` is required: no LdMatrix records its panel's size.", + i = "Pass `nSamples`, or build them with LdMatrix(nSamples = )." )) } if (length(found) > 1L) { abort(glue( - "the supplied LdData record differing reference panel sizes ", - "({str_flatten(found, ', ')}); pass `nRef` to choose one." + "the LdMatrix blocks record differing reference panel sizes ", + "({str_flatten(found, ', ')}); pass `nSamples` to choose one." )) } found[[1L]] } +# A named helper rather than `nSamples` itself: inside .h2RefResolveNRef() +# that name is the formal, which would shadow the accessor in FUN position. # @noRd -.ldRefNRefOf <- function(x) { - n <- ldPanelNSamples(x) - if (length(n) == 0L) NA_integer_ else as.integer(n[[1L]]) +.h2RefNSamplesOf <- function(x) { + nSamples(x) } # @noRd -.ldRefResolveGenome <- function(dataList, genome) { - if (.ldRefNamedGenome(genome)) { +.h2RefResolveGenome <- function(ldReference, genome) { + if (.h2RefNamedGenome(genome)) { return(genome) } - found <- discard(unique(map_chr(dataList, .ldRefGenomeOf)), is.na) + refs <- if (.ldIsGenotypeRef(ldReference)) { + list(.ldRefRanges(ldReference)) + } else { + .h2RefMatrixList(ldReference) + } + found <- discard(unique(map_chr(refs, .h2RefGenomeOf)), is.na) if (length(found) == 1L) found[[1L]] else NA_character_ } # @noRd -.ldRefGenomeOf <- function(x) { +.h2RefGenomeOf <- function(x) { g <- discard(unique(GenomeInfoDb::genome(as(x, "GRanges"))), is.na) if (length(g) == 1L) g[[1L]] else NA_character_ } @@ -370,3 +443,103 @@ setMethod("inSample", "LdStatistic", function(x) x@inSample) #' @rdname ldBlocks #' @export setMethod("ldBlocks", "LdStatistic", function(x) x@ldBlocks) + +#' @rdname ldReference +#' @export +setMethod("ldReference", "LdStatistic", function(x) x@ldReference) + +# ============================================================================= +# Reading an LD statistic's blocks +# ----------------------------------------------------------------------------- +# The estimators walk a statistic block by block. Each block is a record: +# `idx`, the block's variant positions in the statistic, and where its LD +# comes from -- `R`, the matrix an LdScore stores; `eigen`, the decomposition +# an LdEigen stores; or `rows`, the block's rows in the genotype reference it +# is read from. A scores-only LdScore has `idx` alone. The readers below turn +# a record into the LD form a computation needs, reading a genotype +# reference's block only then. +# ============================================================================= + +# The records of a statistic that stores nothing per block: its variants +# placed in its LD blocks, with their rows in its genotype reference when it +# has one. +# @noRd +.ldStatLazyBlocks <- function(x) { + idx <- .ldStatPlacedIdx(x) + if (is.null(x@ldReference)) { + return(map(idx, .ldStatIdxBlock)) + } + rows <- S4Vectors::mcols(x, use.names = FALSE)$panelRow + map(idx, .ldStatPanelBlock, rows = rows) +} + +# Each LD block's variant positions, in block order, found by placing the +# variants in `ldBlocks(x)`. A block no variant falls in has no entry: the +# placement only groups the hits there are. +# @noRd +.ldStatPlacedIdx <- function(x) { + snpInfo <- tibble(CHR = as.character(seqnames(x)), BP = start(x)) + idx <- unname(snpsPerBlock(snpInfo, x@ldBlocks)) + if (length(idx) == 0L) { + abort("no LD block covers any reference variant.") + } + idx +} + +# @noRd +.ldStatIdxBlock <- function(idx) { + list(idx = idx) +} + +# @noRd +.ldStatPanelBlock <- function(idx, rows) { + list(idx = idx, rows = rows[idx]) +} + +# A block's LD source (see .ldSourceRows()): the stored matrix, the stored +# decomposition, or a factor of it read from the genotype reference. +# @noRd +.ldStatBlockLd <- function(block, ldReference) { + if (!is.null(block$R)) { + return(list(R = block$R)) + } + if (!is.null(block$eigen)) { + return(block$eigen[c("vectors", "values")]) + } + list(F = .ldRefFactor(ldReference, block$rows)) +} + +# A block's eigendecomposition, keeping the leading components that carry +# `truncation` of its eigenvalue mass: the stored one, or one computed from +# the factor of the block read from the genotype reference. A computed one +# lists only the min(m, p) directions the factor's SVD returns; `nNull` counts +# the block's other directions, whose eigenvalue is exactly zero, when +# nothing is truncated. +# @noRd +.ldStatBlockEigen <- function(block, ldReference, truncation) { + if (!is.null(block$eigen)) { + return(list_assign(block$eigen, nNull = 0L)) + } + dec <- .ldFactorEigen(.ldRefFactor(ldReference, block$rows)) + keep <- .ldEigenKeep(dec$values, truncation) + list( + values = dec$values[keep], + vectors = dec$vectors[, keep, drop = FALSE], + snpIdx = block$idx, + nNull = if (truncation >= 1) dec$nNull else 0L + ) +} + +# `obj` reading its blocks from the genotype reference it was built from: the +# reference in its slot and each variant's row in it as `panelRow`. A +# statistic built from LdMatrix blocks is returned as it is. +# @noRd +.ldStatAttachReference <- function(obj, prep) { + if (is.null(prep$ldReference)) { + return(obj) + } + S4Vectors::mcols(obj)$panelRow <- prep$panelRow + obj@ldReference <- prep$ldReference + validObject(obj) + obj +} diff --git a/R/MethodOptions.R b/R/MethodOptions.R index 98607cf65..95522d970 100644 --- a/R/MethodOptions.R +++ b/R/MethodOptions.R @@ -92,7 +92,7 @@ setClass("MethodOptions", contains = "SimpleList") if (!requireNamespace(parts[[1L]], quietly = TRUE)) { return(NULL) } - tryCatch( + try_fetch( get(parts[[2L]], envir = asNamespace(parts[[1L]])), error = function(cnd) NULL ) @@ -123,7 +123,7 @@ setClass("MethodOptions", contains = "SimpleList") if (is.null(fn)) { return(NULL) } - fm <- tryCatch(names(formals(fn)), error = function(cnd) NULL) + fm <- try_fetch(names(formals(fn)), error = function(cnd) NULL) if (is.null(fm)) { return(NULL) } @@ -150,7 +150,7 @@ setClass("MethodOptions", contains = "SimpleList") if (is.null(fn)) { return(FALSE) } - fm <- tryCatch(names(formals(fn)), error = function(cnd) NULL) + fm <- try_fetch(names(formals(fn)), error = function(cnd) NULL) !is.null(fm) && is_in("...", fm) } @@ -169,7 +169,7 @@ setClass("MethodOptions", contains = "SimpleList") # One callee's formals with `...` removed, NULL when they cannot be read. # @noRd .engineExplicitFormals <- function(fn) { - setdiff(tryCatch(names(formals(fn)), error = function(cnd) NULL), "...") + setdiff(try_fetch(names(formals(fn)), error = function(cnd) NULL), "...") } # --- which input classes a set of engine arguments belongs to ------------- @@ -300,7 +300,7 @@ setClass("MethodOptions", contains = "SimpleList") defaults <- discard(defaults, is.null) overridden <- intersect(names(defaults), names(extra)) defaults[overridden] <- extra[overridden] - c(defaults, extra[!names(extra) %in% overridden]) + c(defaults, extra[!is_in(names(extra), overridden)]) } # Build one engine's argument record: pecotmr's defaults, overlaid with the @@ -575,7 +575,7 @@ setClass("MethodOptions", contains = "SimpleList") # sibling key that shares the same engine. # @noRd .nestedExpectedEngine <- function(key, ctors) { - rec <- tryCatch(ctors[[key]](), error = function(cnd) NULL) + rec <- try_fetch(ctors[[key]](), error = function(cnd) NULL) if (is.null(rec)) { return(key) } @@ -631,7 +631,7 @@ setClass("MethodOptions", contains = "SimpleList") "'{str_split_1(callee, fixed('::'))[[1L]]}' is not installed" )) } - fm <- tryCatch(names(formals(fn)), error = function(cnd) NULL) + fm <- try_fetch(names(formals(fn)), error = function(cnd) NULL) if (is.null(fm)) { return("argument names NOT checked: the engine's formals are unknown") } diff --git a/R/MethodParam.R b/R/MethodParam.R index e9048d210..d6dddff6b 100644 --- a/R/MethodParam.R +++ b/R/MethodParam.R @@ -44,6 +44,10 @@ NULL setClassUnion("numeric_OR_NULL", c("numeric", "NULL")) setClassUnion("logical_OR_NULL", c("logical", "NULL")) setClassUnion("list_OR_NULL", c("list", "NULL")) +# A tibble is a data.frame here, so it fills a data.frame_OR_NULL slot; a bare +# list does not. +setClassUnion("data.frame_OR_NULL", c("data.frame", "NULL")) +setClassUnion("matrix_OR_NULL", c("matrix", "NULL")) # The one cross-family slot: SusieRssParam() carries a SusieRssControlOptions() # record, which is a MethodOptions rather than a Param -- `control` really is @@ -311,10 +315,13 @@ setValidity("MethodsSelectionParam", function(object) { # "is mrmash requested", "are these methods available at all". # @noRd .methodsParamTokens <- function(param) { - unique(unlist(map( - .methodsSlotNames, - function(s) names(slot(param, s)) %||% character(0) - ))) + unique(unlist(map(.methodsSlotNames, .methodsSlotTokens, param = param))) +} + +# The method names one slot of a Param holds; empty when the slot is. +# @noRd +.methodsSlotTokens <- function(slotName, param) { + names(slot(param, slotName)) %||% character(0) } # The same Param with some methods removed from every slot -- the joint @@ -844,13 +851,13 @@ setValidity("MethodsSelectionParam", function(object) { # @noRd .methodsCtorHasCallee <- function(ctor, callee) { - rec <- tryCatch(ctor(), error = function(cnd) NULL) + rec <- try_fetch(ctor(), error = function(cnd) NULL) !is.null(rec) && identical(metadata(rec)$callee, callee) } # @noRd .methodsRecordEngine <- function(ctor) { - rec <- tryCatch(ctor(), error = function(cnd) NULL) + rec <- try_fetch(ctor(), error = function(cnd) NULL) if (is.null(rec)) { return(NULL) } @@ -1053,8 +1060,14 @@ setValidity("MethodsSelectionParam", function(object) { # *Param() has its own class, so handing `ColocPriorParam()` where # `CredibleSetParam()` was wanted is caught here rather than surfacing as a # missing field somewhere downstream. +# +# The message names the argument from the caller's own expression +# (caller_arg()), so it cannot drift from the argument's name the way a +# hand-written label did: 19 of 30 labels still named arguments that had +# since been renamed. # @noRd -.assertMethodParam <- function(x, ctor, argName, class = NULL) { +#' @importFrom rlang caller_arg +.assertMethodParam <- function(x, ctor, argName = caller_arg(x), class = NULL) { class <- class %||% .paramClassOf(ctor) if (is(x, class)) { return(invisible(x)) diff --git a/R/MultiStudyQtlDataset.R b/R/MultiStudyQtlDataset.R index 8136251ea..e9d27060c 100644 --- a/R/MultiStudyQtlDataset.R +++ b/R/MultiStudyQtlDataset.R @@ -8,9 +8,13 @@ # orchestrate joint or per-study analyses across multiple cohorts. # ============================================================================= -#' @include QtlDataset.R +#' @include QtlDataset.R qtlSumStats.R NULL +# The summary-statistic-only studies: a QtlSumStats, or NULL when there are +# none. The slot type refuses anything else when the object is built. +setClassUnion("QtlSumStats_OR_NULL", c("QtlSumStats", "NULL")) + #' @title Multi-Study QTL Dataset #' @description S4 container for a multi-study QTL analysis: a collection of #' individual-level \code{QtlDataset} studies, optionally combined with a @@ -34,7 +38,7 @@ setClass( "MultiStudyQtlDataset", representation( qtlDatasets = "list", - sumStats = "ANY" + sumStats = "QtlSumStats_OR_NULL" ), validity = function(object) .validateMultiStudyQtlDataset(object) ) @@ -46,10 +50,7 @@ setClass( # Each stage only makes sense once the previous one holds: the study count # reads slots the type checks just validated, and trait consistency reads # across the studies the count check just confirmed. - slotErrors <- c( - .msqdCheckDatasets(object@qtlDatasets), - .msqdCheckSumStats(object@sumStats) - ) + slotErrors <- .msqdCheckDatasets(object@qtlDatasets) if (length(slotErrors) > 0L) { return(slotErrors) } @@ -85,14 +86,6 @@ setClass( methods::is(d, "QtlDataset") } -# @noRd -.msqdCheckSumStats <- function(sumStats) { - if (!is.null(sumStats) && !methods::is(sumStats, "QtlSumStats")) { - return("'sumStats' must be a QtlSumStats object or NULL") - } - NULL -} - # At least 2 studies in total (individual-level + summary-statistic). # @noRd .msqdCheckStudyCount <- function(object) { diff --git a/R/QtlDataset.R b/R/QtlDataset.R index f3c7c1e55..0f1a2a133 100644 --- a/R/QtlDataset.R +++ b/R/QtlDataset.R @@ -45,7 +45,7 @@ NULL #' view of that experiment reads its dosages. #' #' @slot studyName Character (length 1). Study identifier; used in collection -#' classes to tag downstream \code{FineMappingResult} / \code{TwasWeights} +#' classes to tag downstream \code{QtlFineMappingResult} / \code{TwasWeights} #' entries. #' The \code{genotype} experiment's assay reads through this handle; the #' extraction accessors read it directly, so that QC can be applied per @@ -159,11 +159,6 @@ setClass( ) } -# Shape checks on the phenotype list handed to the constructor. Run before -# the MultiAssayExperiment is assembled, because a malformed list makes -# ExperimentList fail first with a message about experiments rather than -# about contexts. Returns an error vector. -# @noRd # What is wrong with the context names, if anything. The checks are ordered: # a list with no usable names is not also reported as having duplicates. # @noRd @@ -207,6 +202,11 @@ setClass( character(0) } +# Shape checks on the phenotype list handed to the constructor. Run before +# the MultiAssayExperiment is assembled, because a malformed list makes +# ExperimentList fail first with a message about experiments rather than +# about contexts. Returns an error vector. +# @noRd .qtlCheckPhenotypeList <- function(phenotypes) { emptyError <- if (length(phenotypes) == 0L) { "'phenotypes' must not be empty" @@ -334,7 +334,7 @@ setClass( # QtlDataset constructor and accessors # ============================================================================= -# Check the constructor's inputs and return the handle behind `genotypes`. +# Check the constructor's inputs and return the genotype source as given. # Every phenotype must be a usable SummarizedExperiment, and the genotype # source must be an unsubset panel (or a bare handle) -- see # .qtlCheckWholePanel for why the "unsubset" part matters. @@ -344,28 +344,42 @@ setClass( if (length(errors) > 0L) { abort(str_flatten(errors, "\n")) } - handle <- .openGenotypeHandle(genotypes) - if (is.null(handle)) { + source <- .openGenotypeSource(genotypes) + if (is.null(source)) { abort(glue( "'genotypes' must be a genotype panel from readGenotypes() ", "(got {class(genotypes)[[1L]]})" )) } - .qtlCheckWholePanel(genotypes, handle) - handle + .qtlCheckWholePanel(genotypes) + .qtlCheckRealGenotypes(genotypes) + source } -# A QtlDataset indexes variants positionally into the handle's whole snpInfo -# (see .qtlVariantIndices), so a panel that has already been narrowed would -# leave extraction reading the wrong rows. Refuse it rather than silently -# widening back to the file: narrowing belongs to keepVariants / keepSamples, -# which the extraction path honours. +# A stochastic LD sketch is a panel whose columns are pseudo-samples +# projected from real ones: it carries LD, not anyone's genotypes, so it +# cannot be the genotype experiment a QTL study is fitted on. # @noRd -.qtlCheckWholePanel <- function(genotypes, handle) { +.qtlCheckRealGenotypes <- function(genotypes) { + if (!.ldRefIsProjection(genotypes)) { + return(invisible(NULL)) + } + abort(c( + "'genotypes' is a stochastic LD sketch, not a study's genotypes.", + i = "Its samples are projections; use it as an `ldReference` instead." + )) +} + +# A panel that has already been narrowed is refused rather than taken as the +# study's genotypes: narrowing belongs to keepVariants / keepSamples, which +# the extraction path honours, and it is recorded there rather than in which +# panel happened to be passed. +# @noRd +.qtlCheckWholePanel <- function(genotypes) { if (!methods::is(genotypes, "RangedSummarizedExperiment")) { return(invisible(NULL)) } - full <- c(nrow(snpInfo(handle)), nSamples(handle)) + full <- .panelFullDims(genotypes) got <- c(nrow(genotypes), ncol(genotypes)) if (identical(as.integer(got), as.integer(full))) { return(invisible(NULL)) @@ -450,8 +464,7 @@ QtlDataset <- function( ) { .assertMethodParam( genotypeFilterParam, - "GenotypeFilterParam", - "genotypeFilter" + "GenotypeFilterParam" ) filt <- .qtlResolveFilter(genotypeFilterParam) handle <- .qtlValidateInputs(phenotypes, genotypes) @@ -743,12 +756,19 @@ setMethod("genotypeHandle", "QtlDataset", function(x) { # Derived, not stored. The handle already lives inside the genotype # assay's seed -- that is what lets the dosages read lazily -- so a # parallel slot was a second copy that had to be kept in step by hand. - # Reading it back removes the invariant instead of policing it. - .ldSketchHandle( - MultiAssayExperiment::experiments(x)[[.QTL_GENO_EXPERIMENT]] - ) + # Reading it back removes the invariant instead of policing it. NULL for + # genotypes read through another backend (VCF, GDS) or held in memory. + .ldRefHandle(.qtlGenotypeSe(x)) }) +# The genotype experiment's variants, one row per panel row: SNP (the +# panel's own ids), CHR (canonical), BP, A1, A2. Read off its rowRanges, so +# genotypes from any backend answer alike. +# @noRd +.qtlGenotypeVariants <- function(x) { + .rangesSnpInfo(SummarizedExperiment::rowRanges(.qtlGenotypeSe(x))) +} + #' @rdname qtlDatasetFilters #' @export setMethod("mafCutoff", "QtlDataset", function(x) x@mafCutoff) @@ -799,9 +819,6 @@ setMethod("keepIndel", "QtlDataset", function(x) x@keepIndel) .qtlLiteralRegion(region, cisWindow) } -# The union span (+/- cisWindow) of a trait's rowRanges across all contexts. -# Requires cisWindow and a single shared chromosome. -# @noRd # The requested traits' ranges within one context, or NULL when it carries # none of them. # @noRd @@ -821,6 +838,9 @@ setMethod("keepIndel", "QtlDataset", function(x) x@keepIndel) hits[!is.na(hits)] } +# The union span (+/- cisWindow) of the requested traits' rowRanges across all +# contexts. Requires cisWindow and a single shared chromosome. +# @noRd .qtlTraitRegion <- function(x, traitId, cisWindow) { if (is.null(cisWindow) || length(cisWindow) != 1L || cisWindow < 0) { msg <- glue( @@ -953,16 +973,16 @@ setMethod("traitPosition", "QtlDataset", function(x, traitId = NULL) { }) # Internal: map a GRanges region (one or more ranges) into 1-based snpIdx into -# handle@snpInfo. Indices are unioned across ranges in range order (first -# occurrence wins), so overlapping ranges contribute each variant once. +# the genotype experiment's rows. Indices are unioned across ranges in range +# order (first occurrence wins), so overlapping ranges contribute each +# variant once. .qtlVariantIndices <- function(x, region = NULL) { - handle <- genotypeHandle(x) + variants <- .qtlGenotypeVariants(x) if (is.null(region)) { - return(seq_len(nrow(snpInfo(handle)))) + return(seq_len(nrow(variants))) } - snpInfo <- snpInfo(handle) - siChr <- canonChrom(snpInfo$CHR) - bp <- as.integer(snpInfo$BP) + siChr <- variants$CHR + bp <- variants$BP rChr <- canonChrom(GenomicRanges::seqnames(region)) rStart <- GenomicRanges::start(region) rEnd <- GenomicRanges::end(region) @@ -1036,8 +1056,7 @@ setMethod("traitPosition", "QtlDataset", function(x, traitId = NULL) { .qtlApplyFilterOverrides <- function(data, genotypeFilterParam) { .assertMethodParam( genotypeFilterParam, - "GenotypeFilterParam", - "genotypeFilter" + "GenotypeFilterParam" ) # discard(is.null), not compact(): a keepVariants of character(0) is a # real instruction ("restrict to nothing was not asked, keep all"), and @@ -1117,8 +1136,12 @@ setMethod("traitPosition", "QtlDataset", function(x, traitId = NULL) { if (length(snpIdx) == 0L) { return(.qtlEmptyBlock()) } - handle <- genotypeHandle(x) - dosage <- .dosageMatrix(handle, snpIdx, meanImpute = FALSE) + se <- .qtlGenotypeSe(x) + # Labelled with the panel's own variant ids, as the rows a block reports. + dosage <- `colnames<-`( + .ldRefDosage(se, snpIdx, meanImpute = FALSE), + .ldRefVariantIds(se)[snpIdx] + ) keep <- .qtlResolveSamples(dosage, x, samples) if (length(keep) == 0L) { return(.qtlEmptyBlockNoSamples(dosage)) @@ -1138,16 +1161,16 @@ setMethod("traitPosition", "QtlDataset", function(x, traitId = NULL) { # Empty block preserving the full panel sample set (no variants selected). # @noRd .qtlEmptyBlockAllSamples <- function(x) { - handle <- genotypeHandle(x) + samples <- as.character(colnames(.qtlGenotypeSe(x))) list( geno = matrix( numeric(0), - nrow = nSamples(handle), + nrow = length(samples), ncol = 0L, - dimnames = list(sampleIds(handle), character(0)) + dimnames = list(samples, character(0)) ), variantIds = character(0), - sampleIds = sampleIds(handle), + sampleIds = samples, maf = numeric(0), af = numeric(0) ) @@ -1186,18 +1209,17 @@ setMethod("traitPosition", "QtlDataset", function(x, traitId = NULL) { # allele) and, unless kept, by dropping indels. Done before materialization. # @noRd .qtlNarrowSnpIdx <- function(x, snpIdx) { - handle <- genotypeHandle(x) + si <- .qtlGenotypeVariants(x) kept <- if (length(keepVariants(x)) == 0L) { snpIdx } else { - snpAll <- as.character(snpInfo(handle)$SNP[snpIdx]) + snpAll <- si$SNP[snpIdx] km <- matchVariants(snpAll, as.character(keepVariants(x))) snpIdx[replace(logical(length(snpAll)), km$idxA, TRUE)] } if (length(kept) == 0L || .qtlKeepIndel(x)) { return(kept) } - si <- snpInfo(handle) # which() (not the mask) so an NA mask drops the variant rather than # injecting an NA index. snpMask <- str_length(as.character(si$A1[kept])) == 1L & @@ -1659,11 +1681,11 @@ setMethod("phenotypeCovariates", "QtlDataset", function(x, contexts) { # convention `residualizePhenotype` / `residualizeGenotype` use -- a flat # formal defaulting to TRUE could not tell "FALSE" from "not given". # @noRd -.qtlScaleResiduals <- function(x, residualizationArgs) { - if (is.null(residualizationArgs)) { +.qtlScaleResiduals <- function(x, residualizationParam) { + if (is.null(residualizationParam)) { return(scaleResiduals(x)) } - residualizationArgs$scaleResiduals %||% scaleResiduals(x) + residualizationParam$scaleResiduals %||% scaleResiduals(x) } # Internal: residualize a numeric matrix Y (n x k) against a covariate @@ -1719,7 +1741,7 @@ setMethod("phenotypeCovariates", "QtlDataset", function(x, contexts) { if (length(keep) != length(requested)) { missingNames <- setdiff(requested, avail) msg <- glue( - "residualizationArgs$phenotypeCovariates: context '{ctx}' has no ", + "residualizationParam$phenotypeCovariates: context '{ctx}' has no ", "covariate(s) named: {str_flatten(missingNames, ', ')}" ) abort(msg) @@ -1866,10 +1888,6 @@ setMethod("phenotypeCovariates", "QtlDataset", function(x, contexts) { # Per-context phenotype covariate matrices (colData columns from # phenoSelection), column names prefixed with the context. # @noRd -# Sample names survive the coercion because the constructor requires every -# context to name its samples, which SummarizedExperiment carries into -# rownames(colData(se)). -# @noRd .qtlPhenoCovBlocks <- function(x, contexts, phenoSelection) { compact(set_names( map( @@ -1884,6 +1902,10 @@ setMethod("phenotypeCovariates", "QtlDataset", function(x, contexts) { # One context's selected covariate columns, context-qualified, or NULL when # nothing is selected there. +# +# Sample names survive the coercion because the constructor requires every +# context to name its samples, which SummarizedExperiment carries into +# rownames(colData(se)). # @noRd .qtlPhenoCovBlock <- function(ctx, x, phenoSelection) { keep <- phenoSelection[[ctx]] @@ -1998,7 +2020,7 @@ setMethod("phenotypeCovariates", "QtlDataset", function(x, contexts) { region = NULL, cisWindow = NULL, samples = NULL, - residualizationArgs = ResidualizationParam() + residualizationParam = ResidualizationParam() ) { if (missing(contexts) || is.null(contexts) || length(contexts) == 0L) { msg <- glue( @@ -2011,9 +2033,8 @@ setMethod("phenotypeCovariates", "QtlDataset", function(x, contexts) { abort(msg) } .assertMethodParam( - residualizationArgs, - "ResidualizationParam", - "residualizationArgs" + residualizationParam, + "ResidualizationParam" ) bad <- setdiff(contexts, contexts(x)) if (length(bad) > 0L) { @@ -2030,12 +2051,12 @@ setMethod("phenotypeCovariates", "QtlDataset", function(x, contexts) { if (ncol(G) == 0L) { return(G) } - C <- .qtlResidCovariateMatrix(x, contexts, residualizationArgs) + C <- .qtlResidCovariateMatrix(x, contexts, residualizationParam) aligned <- .qtlAlignGC(G, C, contexts) .qtlResidualizeQr( aligned$G, aligned$C, - scaleResiduals = .qtlScaleResiduals(x, residualizationArgs) + scaleResiduals = .qtlScaleResiduals(x, residualizationParam) ) } @@ -2130,7 +2151,7 @@ setMethod( outlierAction = c("keep", "drop"), outlierPvalThreshold = 1e-3, outlierArgs = CovMcdOptions(), - residualizationArgs = ResidualizationParam() + residualizationParam = ResidualizationParam() ) { if (missing(contexts) || is.null(contexts) || length(contexts) == 0L) { abort("`contexts` is required for residualizedPhenotypes().") @@ -2139,16 +2160,15 @@ setMethod( outlierAction <- arg_match(outlierAction) .assertMethodOptions(outlierArgs, "CovMcdOptions", "outlierArgs") .assertMethodParam( - residualizationArgs, - "ResidualizationParam", - "residualizationArgs" + residualizationParam, + "ResidualizationParam" ) bad <- setdiff(contexts, contexts(x)) if (length(bad) > 0L) { msg <- glue("Unknown context(s): {str_flatten(bad, \', \')}") abort(msg) } - C <- .qtlResidCovariateMatrix(x, contexts, residualizationArgs) + C <- .qtlResidCovariateMatrix(x, contexts, residualizationParam) Yraw <- .qtlResidPhenoY( x, contexts, @@ -2164,7 +2184,7 @@ setMethod( outlierAction = outlierAction, outlierPvalThreshold = outlierPvalThreshold, outlierArgs = outlierArgs, - scaleResiduals = .qtlScaleResiduals(x, residualizationArgs) + scaleResiduals = .qtlScaleResiduals(x, residualizationParam) ) } @@ -2181,15 +2201,15 @@ setMethod( # they select, build the design, and apply the NA policy to it. One step, # because none of the four halves means anything without the others. # @noRd -.qtlResidCovariateMatrix <- function(x, contexts, residualizationArgs) { +.qtlResidCovariateMatrix <- function(x, contexts, residualizationParam) { # arg_match() reports on its argument by name, so it must be handed a # symbol: resolve the bundle field first, then validate it. - covariateNaAction <- residualizationArgs$covariateNaAction %||% "impute" + covariateNaAction <- residualizationParam$covariateNaAction %||% "impute" covariateNaAction <- arg_match(covariateNaAction, c("impute", "drop")) phenoSel <- .qtlResolvePhenoSelection( x, contexts, - residualizationArgs$phenotypeCovariates + residualizationParam$phenotypeCovariates ) design <- .qtlBuildResidualizationDesign( x, @@ -2197,13 +2217,13 @@ setMethod( phenoSelection = phenoSel, genoSelection = .qtlResolveGenoSelection( x, - residualizationArgs$genotypeCovariates + residualizationParam$genotypeCovariates ), # Unset means "residualize on this side": the accessors' own # historical default, now expressed as the absence of a value # rather than as a formal defaulting to TRUE. - includePheno = residualizationArgs$residualizePhenotype %||% TRUE, - includeGeno = residualizationArgs$residualizeGenotype %||% TRUE + includePheno = residualizationParam$residualizePhenotype %||% TRUE, + includeGeno = residualizationParam$residualizeGenotype %||% TRUE ) .qtlHandleCovariateNa(design, covariateNaAction) } @@ -2254,9 +2274,8 @@ setMethod("show", "QtlDataset", function(object) { .trim = FALSE )) cat(glue(" {totalTraits} unique traits across contexts\n", .trim = FALSE)) - gh <- genotypeHandle(object) cat(glue( - " Genotypes: {genotypeFormat(gh)} @ {path(gh)}\n", + " Genotypes: {.ldRefLabel(.qtlGenotypeSe(object))}\n", .trim = FALSE )) cat(glue( diff --git a/R/QtlFineMappingResult.R b/R/QtlFineMappingResult.R index f7dfe39ac..d90de27ed 100644 --- a/R/QtlFineMappingResult.R +++ b/R/QtlFineMappingResult.R @@ -4,7 +4,7 @@ # DFrame-subclass collection keyed by the identity tuple (study, context, # trait, method). Each row holds a FineMappingRow payload. Class-level # slots: -# * ldSketch GenotypeHandle (NULL for individual-level fits, the +# * ldReference GenotypeHandle (NULL for individual-level fits, the # LD-sketch handle for RSS-derived fits). # Optional columns jointStudies / jointContexts / jointTraits carry # semicolon-joined member identities for cross-axis joint fits emitted by @@ -39,7 +39,7 @@ setClass( # ---- QtlFineMappingResult validity helpers --------------------------------- # Collect all contract violations (empty vector = valid). The per-entry checks -# run only once the required columns are present; the ldSketch check always +# run only once the required columns are present; the ldReference check always # runs. # @noRd #' @importFrom checkmate makeAssertCollection assertNames checkNames @@ -92,10 +92,6 @@ setClass( str_c("missing entry payload columns: ", res) } -# @noRd - -# @noRd - # Each present joint* column must be character. # @noRd .qfmrCheckJointCols <- function(object, jointCols) { @@ -138,7 +134,7 @@ setClass( .tupleColumn(object, cn) } -# ldSketch must be a GenotypeHandle or NULL. +# ldReference must be a GenotypeHandle or NULL. # The identity-tuple vectors and the payload list are parallel: one entry per # (study, context, trait, method). A length mismatch would otherwise surface as @@ -163,8 +159,8 @@ setClass( #' @title Create a QtlFineMappingResult Collection #' @description Construct a \code{QtlFineMappingResult} DFrame-subclass #' collection from per-tuple vectors and a list of \code{FineMappingRow} -#' payloads (one per tuple). The optional \code{ldSketch} slot records the LD -#' reference used for RSS-derived fits; pass \code{NULL} (the default) for +#' payloads (one per tuple). The optional \code{ldReference} slot records the +#' LD reference used for RSS-derived fits; pass \code{NULL} (the default) for #' individual-level fits. #' @param studyName Character vector of study identifiers (per tuple). Use the #' sentinel \code{"joint"} for rows produced by a cross-study joint fit. @@ -188,7 +184,7 @@ setClass( #' @param dataSource Optional per-row label for the kind of input the fit saw, #' \code{"individual"} or \code{"sumstat"}. Recorded rather than derived: a #' combined collection can hold rows of both kinds, and its single -#' \code{ldSketch} cannot say which row came from which. +#' \code{ldReference} cannot say which row came from which. #' @param weightStandardized Optional per-row flag: whether the posterior #' effect is on the STANDARDIZED genotype scale. The posterior effect IS the #' prediction weight, so it carries the same scale question as a TWAS @@ -196,9 +192,9 @@ setClass( #' it standardizes genotypes before fitting, and the posterior mean is #' reported on the scale of the \code{X} the fit was given. The argument #' exists for a collection assembled by hand, where only the caller knows. -#' @param ldSketch An optional genotype panel (see \code{\link{readGenotypes}}) -#' (the LD reference for RSS-derived fits), or \code{NULL} for -#' individual-level fits. +#' @param ldReference An optional genotype panel (see +#' \code{\link{readGenotypes}}) (the LD reference for RSS-derived fits), or +#' \code{NULL} for individual-level fits. #' @param traitPos Optional per-row trait genomic anchor (a \code{GRanges} or #' \code{NULL}), carried forward as provenance; not part of the identity key. #' \code{NULL} (default) omits the column. @@ -232,7 +228,7 @@ QtlFineMappingResult <- function( dataType = NULL, dataSource = NULL, weightStandardized = NULL, - ldSketch = NULL + ldReference = NULL ) { .qfmrAssertArgs( studyName, @@ -264,13 +260,7 @@ QtlFineMappingResult <- function( weightStandardized, n ) - obj <- new( - "QtlFineMappingResult", - .rtlGrlWithMetadata(payloads, cols), - ldSketch = .asLdSketch(ldSketch) - ) - validObject(obj) - obj + .rtlNewValidated("QtlFineMappingResult", payloads, cols, ldReference) } # Every argument's type contract, checked before anything is built. @@ -509,10 +499,10 @@ setMethod("show", "QtlFineMappingResult", function(object) { .trim = FALSE )) } - ldSrc <- if (is.null(object@ldSketch)) { + ldSrc <- if (is.null(object@ldReference)) { "NULL (individual-level fit)" } else { - .ldSketchLabel(object@ldSketch) + .ldRefLabel(object@ldReference) } - cat(glue(" LD sketch: {ldSrc}\n", .trim = FALSE)) + cat(glue(" LD reference: {ldSrc}\n", .trim = FALSE)) }) diff --git a/R/RangedTupleList.R b/R/RangedTupleList.R index 26cece45a..83b46fc13 100644 --- a/R/RangedTupleList.R +++ b/R/RangedTupleList.R @@ -15,10 +15,10 @@ # `[[` is left alone on purpose: on a GRangesList it addresses elements, so # overloading it for columns would collide. Use `mcols(x)[i, j]` for a cell. # -# Slots hold COLLECTION-LEVEL scalars only (ldSketch, genome, qcInfo). Anything -# with one value per element belongs in mcols -- a per-element slot silently -# desyncs on subsetting, because `x[i]` narrows the elements and the mcols but -# has no idea the slot is parallel to them. +# Slots hold COLLECTION-LEVEL scalars only (ldReference, genome, qcInfo). +# Anything with one value per element belongs in mcols -- a per-element slot +# silently desyncs on subsetting, because `x[i]` narrows the elements and the +# mcols but has no idea the slot is parallel to them. # ============================================================================= #' @include AllGenerics.R @@ -128,14 +128,6 @@ methods::setValidity("RangedTupleList", function(object) { ) } -# Rebuild `x` from a new list of GRanges elements, carrying every -# collection-level slot over and narrowing mcols by `keep`. -# -# This is the ONLY supported way to produce a modified collection. `endoapply` -# via a `setAs("list", )` coercion looks like it works but silently -# drops the subclass's slots -- verified -- which is exactly the desync this -# class exists to prevent. -# @noRd # Put `x`'s seqinfo back onto a rebuilt GRangesList. Only the seqlevels the # rebuild actually spans can be kept, so this restores the genome (and any # lengths) for those, and supplies the whole seqinfo when the rebuild spans @@ -160,6 +152,14 @@ methods::setValidity("RangedTupleList", function(object) { ) } +# Rebuild `x` from a new list of GRanges elements, carrying every +# collection-level slot over and narrowing mcols by `keep`. +# +# This is the ONLY supported way to produce a modified collection. `endoapply` +# via a `setAs("list", )` coercion looks like it works but silently +# drops the subclass's slots -- verified -- which is exactly the desync this +# class exists to prevent. +# @noRd .rtlRebuild <- function(x, elements, keep) { # mcols and slots are attached BEFORE new(), not after: new() validates # during initialize(), and a subclass's validity method reads its identity @@ -352,7 +352,7 @@ setMethod("endoapply", "RangedTupleList", function(X, FUN, ...) { # Defined explicitly rather than left to the inherited machinery. Stock # `endoapply` on a subclass errors unless a `setAs("list", )` # coercion exists, and adding that coercion makes it run while silently - # DROPPING the subclass's slots (verified: genome / ldSketch come back + # DROPPING the subclass's slots (verified: genome / ldReference come back # unset). Rebuilding here keeps every collection-level slot. # # Call this as `endoapply(x, ...)`, NOT `S4Vectors::endoapply(x, ...)`: @@ -431,6 +431,20 @@ setMethod("subsetRegion", "RangedTupleList", function(x, region) { ) } +# Build and validate a RangedTupleList subclass from its payloads and metadata +# columns -- the shared tail of the TwasWeights and QtlFineMappingResult +# constructors. +# @noRd +.rtlNewValidated <- function(Class, payloads, cols, ldReference) { + obj <- new( + Class, + .rtlGrlWithMetadata(payloads, cols), + ldReference = .asLdRef(ldReference) + ) + validObject(obj) + obj +} + # Split any multi-seqname element into one element per seqname, and report the # index each piece came from so the caller can replicate that element's # metadata row alongside it. @@ -621,7 +635,10 @@ setMethod("subsetRegion", "RangedTupleList", function(x, region) { # on every call -- pure noise for a collection spanning several chromosomes. # @noRd .rtlRestrictOne <- function(g, win) { - onWindowChrom <- as.character(seqnames(g)) %in% as.character(seqnames(win)) + onWindowChrom <- is_in( + as.character(seqnames(g)), + as.character(seqnames(win)) + ) if (!any(onWindowChrom)) { return(g[0L]) } diff --git a/R/causalInferencePipeline.R b/R/causalInferencePipeline.R index 35512d902..80ea97dba 100644 --- a/R/causalInferencePipeline.R +++ b/R/causalInferencePipeline.R @@ -13,22 +13,25 @@ NULL #' \item \code{twasWeights} alone (no \code{fineMappingResult}): #' TWAS Z only, no MR. #' \item \code{fineMappingResult} alone (no \code{twasWeights}): -#' TWAS Z derived from SuSiE-style coefficients carried on the -#' \code{topLoci} slot of each FineMappingRow; plus MR. +#' TWAS Z derived from the SuSiE-style coefficients in each +#' row's top loci (\code{\link{topLoci}}); plus MR. #' \item both: TWAS Z computed from \code{twasWeights}; #' MR computed from \code{fineMappingResult}. #' } #' -#' @section LD-sketch compatibility check: If a QTL input (TwasWeights or -#' QtlFineMappingResult) carries a non-\code{NULL} \code{ldSketch}, it must -#' come from the same reference panel as the \code{ldSketch} on -#' \code{gwasSumStats} --- same samples, same allele orientation on the -#' shared variants. The two need NOT carry the same variants: QC-ing the two -#' sides separately trims each sketch to its own surviving variants, and a -#' partial overlap only warns. A different sample set, a swapped A1/A2 on a -#' shared variant, or no shared variant at all is a hard error. A QTL input -#' with \code{ldSketch = NULL} (the fit was learned from individual-level -#' data) skips the validation for that input. +#' @section LD reference compatibility check: If a QTL input +#' (TwasWeights or QtlFineMappingResult) carries a non-\code{NULL} +#' \code{ldReference}, it must be the same LD reference as the +#' \code{ldReference} on \code{gwasSumStats}. +#' The two must be the same kind of reference. Two genotype panels must +#' share their samples and allele orientation; two \code{LdMatrix} objects +#' must agree on the LD they share; two \code{GenotypeMixture} objects must +#' average the same panels with the same weights. The two need NOT carry +#' the same variants: QC-ing the two sides separately trims each reference +#' to its own surviving variants, and a partial overlap only warns. A +#' mismatch of any of those, or no shared variant at all, is a hard error. A +#' QTL input with \code{ldReference = NULL} (the fit was learned from +#' individual-level data) skips the validation for that input. #' #' @section Output shape: #' A long-format \code{GRanges} with one row per @@ -55,7 +58,7 @@ NULL #' supplied, drives the MR computation and (when \code{twasWeights = NULL}) #' the TWAS-Z weights via the SuSiE-style coefficients on each entry's #' \code{topLoci}. -#' @param weightSelectionArgs How one TWAS method's weights are picked per +#' @param weightSelectionParam How one TWAS method's weights are picked per #' \code{(study, context, trait, gwasStudy)} tuple, built with #' \code{\link{WeightSelectionParam}}: \code{cutoff} (minimum #' cross-validated r-squared, default \code{0}), \code{pvalCutoff} (the @@ -66,7 +69,7 @@ NULL #' gates that also produced a finite TWAS Z. Otherwise every method is #' carried through. Ports the legacy \code{twas_pipeline} #' \code{pick_best_model} / \code{update_twas_method}. -#' @param mrArgs How Mendelian randomization is run, built with +#' @param mrParam How Mendelian randomization is run, built with #' \code{\link{MrParam}}: \code{method} (\code{"ivwPerVariant"}, the #' default, or \code{"csAware"}), the PIP threshold that method reads #' (\code{pipCutoff} or \code{cpipCutoff}), and \code{pvalCutoff}, the @@ -93,25 +96,24 @@ causalInferencePipeline <- function( gwasSumStats, twasWeights = NULL, fineMappingResult = NULL, - weightSelectionArgs = WeightSelectionParam(), - mrArgs = MrParam(), + weightSelectionParam = WeightSelectionParam(), + mrParam = MrParam(), combineMethods = NULL, alleleFlip = TRUE ) { .assertMethodParam( - weightSelectionArgs, - "WeightSelectionParam", - "weightSelection" + weightSelectionParam, + "WeightSelectionParam" ) - .assertMethodParam(mrArgs, "MrParam", "mr") + .assertMethodParam(mrParam, "MrParam") .cipRun( gwasSumStats = gwasSumStats, twasWeights = twasWeights, fineMappingResult = fineMappingResult, combineMethods = combineMethods, - weightSelectionArgs = weightSelectionArgs, + weightSelectionParam = weightSelectionParam, alleleFlip = alleleFlip, - mrArgs = mrArgs + mrParam = mrParam ) } @@ -123,12 +125,12 @@ causalInferencePipeline <- function( twasWeights, fineMappingResult, combineMethods, - weightSelectionArgs, + weightSelectionParam, alleleFlip, - mrArgs + mrParam ) { .cipValidateInputs(gwasSumStats, twasWeights, fineMappingResult) - gwasLd <- .cipCheckLdSketches( + gwasLd <- .cipCheckLdRefs( gwasSumStats, twasWeights, fineMappingResult @@ -137,7 +139,7 @@ causalInferencePipeline <- function( sel <- .cipCvSelection( qtlRows = allRows, twasWeights = twasWeights, - weightSelectionArgs = weightSelectionArgs + weightSelectionParam = weightSelectionParam ) qtlRows <- sel$qtlRows outRows <- list_flatten(map( @@ -149,7 +151,7 @@ causalInferencePipeline <- function( gwasSumStats = gwasSumStats, gwasLd = gwasLd, alleleFlip = alleleFlip, - mrArgs = mrArgs + mrParam = mrParam )) if (length(outRows) == 0L) { abort( @@ -199,18 +201,18 @@ causalInferencePipeline <- function( # Require the twasWeights / fineMappingResult LD sketches to match the GWAS one; # returns the GWAS LD sketch. # @noRd -.cipCheckLdSketches <- function(gwasSumStats, twasWeights, fineMappingResult) { - gwasLd <- ldSketch(gwasSumStats) +.cipCheckLdRefs <- function(gwasSumStats, twasWeights, fineMappingResult) { + gwasLd <- ldReference(gwasSumStats) if (!is.null(twasWeights)) { - .cipRequireMatchingLdSketches( - ldSketch(twasWeights), + .cipRequireMatchingLdRefs( + ldReference(twasWeights), gwasLd, label = "twasWeights" ) } if (!is.null(fineMappingResult)) { - .cipRequireMatchingLdSketches( - ldSketch(fineMappingResult), + .cipRequireMatchingLdRefs( + ldReference(fineMappingResult), gwasLd, label = "fineMappingResult" ) @@ -256,14 +258,14 @@ causalInferencePipeline <- function( .cipCvSelection <- function( qtlRows, twasWeights, - weightSelectionArgs + weightSelectionParam ) { # The bundle's terminal. .cipMethodMetrics / .cipEligibleRowsIn below # take plain scalars, so it is unrolled once, here. - rsqCutoff <- weightSelectionArgs$cutoff - rsqPvalCutoff <- weightSelectionArgs$pvalCutoff - rsqOption <- weightSelectionArgs$metric - rsqPvalOption <- weightSelectionArgs$pvalMetric + rsqCutoff <- weightSelectionParam$cutoff + rsqPvalCutoff <- weightSelectionParam$pvalCutoff + rsqOption <- weightSelectionParam$metric + rsqPvalOption <- weightSelectionParam$pvalMetric selectionActive <- !is.null(twasWeights) && (rsqCutoff > 0 || is.finite(rsqPvalCutoff)) if (!selectionActive) { @@ -309,7 +311,7 @@ causalInferencePipeline <- function( gwasSumStats, gwasLd, alleleFlip, - mrArgs + mrParam ) { tuple <- list( qStudy = qtlRows$qtlStudy[[qi]], @@ -345,11 +347,12 @@ causalInferencePipeline <- function( gwasSumStats = gwasSumStats, gwasLd = gwasLd, alleleFlip = alleleFlip, - mrArgs = mrArgs + mrParam = mrParam )) } -# Resolve the FineMappingRow for a tuple (NULL when the fmr lacks it). +# The tuple's single-row collection from `fineMappingResult` (NULL when it +# lacks the tuple). # @noRd .cipResolveFmrEntry <- function( fineMappingResult, @@ -383,7 +386,7 @@ causalInferencePipeline <- function( gwasSumStats, gwasLd, alleleFlip, - mrArgs + mrParam ) { gStudy <- as.character(gwasSumStats$study)[[gi]] gdf <- as.data.frame( @@ -407,7 +410,7 @@ causalInferencePipeline <- function( gdf, twasOut, alleleFlip = alleleFlip, - mrArgs = mrArgs + mrParam = mrParam ) .cipResultRow(tuple, gStudy, twasOut, mrOut) } @@ -430,13 +433,13 @@ causalInferencePipeline <- function( gdf, twasOut, alleleFlip, - mrArgs + mrParam ) { # The bundle's terminal; the MR engines below take plain scalars. - mrMethod <- mrArgs$method - mrPipCutoff <- mrArgs$pipCutoff - mrCpipCutoff <- mrArgs$cpipCutoff - mrPvalCutoff <- mrArgs$pvalCutoff + mrMethod <- mrParam$method + mrPipCutoff <- mrParam$pipCutoff + mrCpipCutoff <- mrParam$cpipCutoff + mrPvalCutoff <- mrParam$pvalCutoff mrGateOpen <- mrPvalCutoff >= 1 || (!is.na(twasOut$pval) && twasOut$pval < mrPvalCutoff) if (is.null(fmrEntry) || !mrGateOpen) { @@ -525,9 +528,9 @@ causalInferencePipeline <- function( # ============================================================================= # Check two LD sketches for reference-panel compatibility. Thin wrapper over -# the shared `.requireMatchingLdSketches` helper (R/ld.R). -.cipRequireMatchingLdSketches <- function(qtlLd, gwasLd, label) { - .requireMatchingLdSketches( +# the shared `.requireMatchingLdRefs` helper (R/ld.R). +.cipRequireMatchingLdRefs <- function(qtlLd, gwasLd, label) { + .requireMatchingLdRefs( qtlLd, gwasLd, pipelineName = "causalInferencePipeline", @@ -744,7 +747,7 @@ causalInferencePipeline <- function( } # Fetch the per-tuple weight-source entry (a TwasWeightsRow from -# `twasWeights`, or a FineMappingRow from `fineMappingResult`) and resolve it +# `twasWeights`, or the tuple's row of `fineMappingResult`) and resolve it # to an aligned (variantIds, weights) pair via the shared `resolveWeights` -- # the SuSiE-style posterior effect for the FMR path. Returns NULL when the tuple # is absent or has no usable weights. @@ -805,7 +808,7 @@ causalInferencePipeline <- function( ) } -# FineMappingResult entry for a tuple (NULL when absent). +# The fine-mapping entry for a tuple (NULL when absent). # @noRd .cipWeightsFromFmr <- function( fineMappingResult, @@ -856,9 +859,7 @@ causalInferencePipeline <- function( wSub <- weights[m$idxA] * m$sign zSub <- gwasDf$z[m$idxB] gwasIds <- gwasDf$variant_id[m$idxB] - ldMat <- .ldFromSketch(gwasLd, gwasIds, label = "causalInferencePipeline") - - res <- twasZ(weights = wSub, z = zSub, R = ldMat) + res <- .cipTwasZ(wSub, zSub, gwasLd, gwasIds) zMat <- res$Z zVal <- as.numeric(zMat[1L, "Z"]) pVal <- as.numeric(zMat[1L, "pval"]) @@ -875,6 +876,22 @@ causalInferencePipeline <- function( ) } +# twasZ() of weights `w` against GWAS z-scores `z` over the GWAS variants +# `gwasIds`, needing w'Rw only: a genotype reference gives its LD factor, so +# the p x p LD is never formed; an LdMatrix gives the matrix. +# @noRd +.cipTwasZ <- function(w, z, gwasLd, gwasIds) { + label <- "causalInferencePipeline" + if (.ldIsGenotypeRef(gwasLd)) { + return(twasZ( + weights = w, + z = z, + X = .ldFactorFromRef(gwasLd, gwasIds, label) + )) + } + twasZ(weights = w, z = z, R = .ldFromRef(gwasLd, gwasIds, label)) +} + # Report how many QTL weight variants failed to match the GWAS sumstats. # Dropping below two matches yields no TWAS Z at all, which used to be a silent # NULL, so that case is called out separately. @@ -957,9 +974,6 @@ causalInferencePipeline <- function( ) } -# Instrumental variables from a FineMappingRow's topLoci: variants with PIP > -# pipCutoff. Returns list(ivVars, betaX, seX) or NULL when none qualify. -# @noRd # The per-variant top-loci table of one entry. topLoci() returns ranges and # mcols() is exactly the pre-conversion table -- as.data.frame() on the # ranges would add the standard seqnames/start/end/width/strand columns the @@ -971,6 +985,9 @@ causalInferencePipeline <- function( as.data.frame(S4Vectors::mcols(topLoci(fmrEntry))) } +# Instrumental variables from a FineMappingRow's topLoci: variants with PIP > +# pipCutoff. Returns list(ivVars, betaX, seX) or NULL when none qualify. +# @noRd .cipMrInstruments <- function(fmrEntry, pipCutoff) { tl <- .cipTopLociTable(fmrEntry) if (is.null(tl) || nrow(tl) == 0L) { @@ -1014,7 +1031,8 @@ causalInferencePipeline <- function( # # Logic: # 1. Group topLoci variants by credible set (column `cs` in topLoci, or -# first column matching ^cs). +# first column matching ^cs -- cs_95 on a stored result, whose +# "_" labels are parsed to the set index). # 2. Per CS, compute cumulative PIP; drop CSs with cpip < cpipCutoff. # 3. Per surviving CS, compute a PIP-weighted composite Wald ratio # `composite_bhat = sum((bhatY/bhatX * pip) / cpip)` with the @@ -1083,7 +1101,10 @@ causalInferencePipeline <- function( # with NA cs / non-positive cs / NA pip / NA beta. Returns NULL when none valid. # @noRd .cipCsAwareRaw <- function(tl, cols) { - cs <- as.integer(tl[[cols$cs[[1L]]]]) + csCol <- tl[[cols$cs[[1L]]]] + # A stored topLoci table labels each variant's set "_" + # (cs_95); a caller-built table may carry the bare integer instead. + cs <- if (is.character(csCol)) .csLabelIndex(csCol) else as.integer(csCol) pip <- as.numeric(tl[[cols$pip[[1L]]]]) bhatX <- as.numeric(tl[[cols$beta[[1L]]]]) sbhatX <- as.numeric(tl[[cols$se[[1L]]]]) @@ -1367,9 +1388,9 @@ causalInferencePipeline <- function( list_c(pieces) } -# One combined row: the group's first row re-stamped with the combined -# p-value for method `m`. The per-method statistics do not carry over, so -# they are blanked rather than inherited. +# One combined row: the group's first row, carrying the combined p-value for +# method `m` in place of its own. The per-method statistics do not carry +# over, so they are blanked rather than inherited. # @noRd .cipCombinedRow <- function(m, mc, rows, cp) { mutate( @@ -1473,17 +1494,39 @@ causalInferencePipeline <- function( V } -# R / X path: covY = W^T R W (R computed from X when R is absent). +# R / X path: covY = W^T R W. From a genotype matrix X the LD is never formed: +# W^T R W = crossprod(F W) / (n - 1) for F, X's LD factor +# (.ldFactorFromDosage()), which is computeLd()'s LD exactly. # @noRd .twasZCovYR <- function(weights, R, X, rn) { - if (is.null(R)) { - if (is.null(X)) { - abort("twasZ: provide R, X, or the (V, D, nSketch) SVD triplet.") + if (!is.null(R)) { + rSub <- .twasZAlignR(R, rn, nrow(weights)) + return(list(covY = crossprod(weights, rSub) %*% weights)) + } + if (is.null(X)) { + abort("twasZ: provide R, X, or the (V, D, nSketch) SVD triplet.") + } + factor <- .ldFactorFromDosage(.twasZAlignX(X, rn, nrow(weights))) + list(covY = crossprod(factor %*% weights) / (nrow(factor) - 1)) +} + +# Column-align X to the weights (by name when available, else positionally). +# @noRd +#' @importFrom checkmate assertMatrix +.twasZAlignX <- function(X, rn, nW) { + if (!is.null(colnames(X)) && !is.null(rn)) { + idx <- match(rn, colnames(X)) + if (anyNA(idx)) { + msg <- glue( + "twasZ: X is missing columns for {sum(is.na(idx))} ", + "variant(s) named in weights." + ) + abort(msg) } - R <- computeLd(X) + return(X[, idx, drop = FALSE]) } - rSub <- .twasZAlignR(R, rn, nrow(weights)) - list(covY = crossprod(weights, rSub) %*% weights) + assertMatrix(X, ncols = nW, .var.name = "X (positional alignment)") + X } # Symmetric-align R to the weights (by name when available, else positionally). @@ -1528,8 +1571,10 @@ causalInferencePipeline <- function( #' The SVD path (\code{V}, \code{D}, \code{nSketch}) lets the caller avoid #' materializing the full LD matrix: \code{covY = (V^TW * sqrt(Lambda))^T (V^TW #' * sqrt(Lambda))} with \code{Lambda_i = D_i^2 / (nSketch - 1)}. Use the -#' \code{R} path when an LD correlation matrix is already available; use the -#' \code{X} path to compute \code{R} from a genotype matrix. +#' \code{R} path when an LD correlation matrix is already available; the +#' \code{X} path works from a genotype matrix directly, as +#' \code{covY = (F W)^T (F W) / (n - 1)} for its standardized dosages +#' \code{F}, never forming \code{R}. #' #' @param weights Numeric vector of weights (single tuple) or a numeric matrix #' with one column per tuple (method / context). When a vector, the column @@ -1537,8 +1582,9 @@ causalInferencePipeline <- function( #' @param z Numeric vector of GWAS Z-scores aligned to the rows of #' \code{weights}. #' @param R Optional LD correlation matrix. -#' @param X Optional genotype matrix used to compute \code{R} when \code{R} is -#' missing. +#' @param X Optional genotype matrix (samples x variants) standing in for +#' \code{R} when \code{R} is missing; its LD is taken as +#' \code{\link{computeLd}}'s, without forming it. #' @param V,D,nSketch SVD components of the LD sketch (right-singular vectors, #' singular values, panel sample size). Supplying all three selects the SVD #' path. diff --git a/R/colocPipeline.R b/R/colocPipeline.R index f3e301843..d297e2267 100644 --- a/R/colocPipeline.R +++ b/R/colocPipeline.R @@ -25,9 +25,9 @@ NULL # The three argument groups, checked in one place so the pipeline body does # not open with three near-identical lines. # @noRd -.colocAssertGroups <- function(priors, lbfFilterArgs, methodArgs) { - .assertMethodParam(priors, "ColocPriorParam", "priors") - .assertMethodParam(lbfFilterArgs, "ColocLbfFilterParam", "lbfFilter") +.colocAssertGroups <- function(priors, colocLbfFilterParam, methodArgs) { + .assertMethodParam(priors, "ColocPriorParam") + .assertMethodParam(colocLbfFilterParam, "ColocLbfFilterParam") .assertMethodOptions(methodArgs, "ColocOptions", "methodArgs") } @@ -175,8 +175,8 @@ setClass( #' \code{\link{fineMappingPipeline}}; the settings that pipeline exposes #' but that cannot apply here are deliberately absent: #' \code{fineMappingResult} (the pipeline is being asked to produce one), -#' \code{crossValidation} (refused on summary statistics) and -#' \code{residualization} (nothing to regress out). +#' \code{crossValidationParam} (refused on summary statistics) and +#' \code{residualizationParam} (nothing to regress out). #' #' The whole bundle is inert when \code{gwasInput} is already a #' fine-mapping result, since no fit is run. @@ -260,7 +260,7 @@ GwasFineMappingParam <- function( #' \item \strong{fSuSiE support}: the LBF matrix lives at a different #' slot for fSuSiE fits (\code{fsusie_result$lBF}) and gets stacked #' into a single matrix. -#' \item \strong{Effect filtering}: \code{lbfFilter}'s +#' \item \strong{Effect filtering}: \code{colocLbfFilterParam}'s #' \code{filterLbfCs} keeps only effects that produced a credible #' set, its \code{secondary} keeps effects at a secondary coverage; #' otherwise the default filter drops effects whose prior variance is @@ -282,16 +282,18 @@ GwasFineMappingParam <- function( #' inline fine-mapping. #' } #' -#' @section LD-sketch compatibility check: If -#' \code{ldSketch(qtlFineMappingResult)} is non-\code{NULL}, it must come -#' from the same reference panel as the LD sketch on \code{gwasInput}: the -#' same samples, and the same allele orientation on the variants the two -#' carry in common. The two need NOT carry the same variants --- running -#' \code{\link{summaryStatsQc}} on the two sides separately normally leaves -#' each sketch trimmed to its own surviving variants, and LD is looked up per -#' variant, so a partial overlap only warns (once per session). No shared -#' variant at all, a different sample set, or a swapped A1/A2 on a shared -#' variant is a hard error. When the first side's \code{ldSketch} is +#' @section LD reference compatibility check: If +#' \code{ldReference(qtlFineMappingResult)} is non-\code{NULL}, it must be +#' the same LD reference as the one on \code{gwasInput}. +#' The two must be the same kind of reference. Two genotype panels must +#' share their samples and allele orientation; two \code{LdMatrix} objects +#' must agree on the LD they share; two \code{GenotypeMixture} objects must +#' average the same panels with the same weights. The two need NOT +#' carry the same variants --- running \code{\link{summaryStatsQc}} on the +#' two sides separately normally leaves each reference trimmed to its own +#' surviving variants, and LD is looked up per variant, so a partial overlap +#' only warns (once per session). No shared variant at all, or a mismatch of +#' any of those, is a hard error. When the first side's \code{ldReference} is #' \code{NULL} (individual-level fit), the validation is skipped on that side #' and the second side's panel is what the result carries forward. #' @@ -302,7 +304,7 @@ GwasFineMappingParam <- function( #' \code{\link{GwasFineMappingResult}}, or the summary statistics to #' fine-map inline (\code{\link{QtlSumStats}} or #' \code{\link{GwasSumStats}}). -#' @param lbfFilterArgs Credible-set filtering applied before scoring, +#' @param colocLbfFilterParam Credible-set filtering applied before scoring, #' built with #' \code{\link{ColocLbfFilterParam}}. \code{filterLbfCs} keeps only effects #' that produced a credible set; supplying \code{secondary} instead runs a @@ -317,7 +319,7 @@ GwasFineMappingParam <- function( #' \code{\link{ColocPriorParam}}: \code{p1} (QTL signal), \code{p2} (GWAS #' signal) and \code{p12} (shared). Mutually exclusive with #' \code{enrichment}, which derives the same three. -#' @param gwasFineMappingArgs How \code{gwasInput} is fine-mapped when it is +#' @param gwasFineMappingParam How \code{gwasInput} is fine-mapped when it is #' summary statistics rather than a fine-mapping result, built with #' \code{\link{GwasFineMappingParam}}: \code{methods}, #' \code{credibleSetParam}, \code{susieRssParam}, @@ -405,8 +407,8 @@ colocPipeline <- function( qtlFineMappingResult, gwasInput, priors = ColocPriorParam(), - lbfFilterArgs = ColocLbfFilterParam(), - gwasFineMappingArgs = GwasFineMappingParam(), + colocLbfFilterParam = ColocLbfFilterParam(), + gwasFineMappingParam = GwasFineMappingParam(), returnGwasFineMapping = FALSE, enrichment = NULL, adjustPips = TRUE, @@ -417,17 +419,17 @@ colocPipeline <- function( qtlFineMappingResult = qtlFineMappingResult, gwasInput = gwasInput, priors = priors, - gwasFineMappingArgs = gwasFineMappingArgs, + gwasFineMappingParam = gwasFineMappingParam, enrichment = enrichment, adjustPips = adjustPips, methodArgs = methodArgs, - lbfFilterArgs = lbfFilterArgs, + colocLbfFilterParam = colocLbfFilterParam, priorsMissing = missing(priors) ) - # Pre-extract per-GWAS-tuple LBF matrices: group the GWAS FMR by study, - # stack each study's LBF rows, and store per-(study, method) batched - # matrices (reproduces the legacy row-wise combine per xQTL). - gwasLbfByPair <- .colocPreextractGwasLbf(prepared$gwasFmr, lbfFilterArgs) + gwasLbfByPair <- .colocPreextractGwasLbf( + prepared$gwasFmr, + colocLbfFilterParam + ) # Both exits -- no scorable GWAS effect, and the scored result -- shape # their output from the same five values, so they are named once. shape <- list( @@ -443,7 +445,7 @@ colocPipeline <- function( results <- .colocScoreAll( prepared, gwasLbfByPair, - lbfFilterArgs = lbfFilterArgs, + colocLbfFilterParam = colocLbfFilterParam, enrichment = enrichment, priors = priors, alleleFlip = alleleFlip @@ -456,7 +458,7 @@ colocPipeline <- function( .colocScoreAll <- function( prepared, gwasLbfByPair, - lbfFilterArgs, + colocLbfFilterParam, enrichment, priors, alleleFlip @@ -466,7 +468,7 @@ colocPipeline <- function( .colocScoreQtlTuple, qtlFineMappingResult = prepared$qtlFineMappingResult, gwasLbfByPair = gwasLbfByPair, - lbfFilterArgs = lbfFilterArgs, + colocLbfFilterParam = colocLbfFilterParam, useEnrichment = prepared$useEnrichment, enrichment = enrichment, priors = priors, @@ -484,14 +486,14 @@ colocPipeline <- function( qtlFineMappingResult, gwasInput, priors, - gwasFineMappingArgs, + gwasFineMappingParam, enrichment, adjustPips, methodArgs, - lbfFilterArgs, + colocLbfFilterParam, priorsMissing ) { - .colocAssertGroups(priors, lbfFilterArgs, methodArgs) + .colocAssertGroups(priors, colocLbfFilterParam, methodArgs) .colocRefusePriorsWithEnrichment(priors, enrichment, priorsMissing) useEnrichment <- !is.null(enrichment) .colocValidateInputs( @@ -500,10 +502,10 @@ colocPipeline <- function( enrichment = enrichment, useEnrichment = useEnrichment ) - rawGwasFmr <- .colocResolveGwasFmr(gwasInput, gwasFineMappingArgs) - .colocRequireMatchingLdSketches( - ldSketch(qtlFineMappingResult), - ldSketch(rawGwasFmr) + rawGwasFmr <- .colocResolveGwasFmr(gwasInput, gwasFineMappingParam) + .colocRequireMatchingLdRefs( + ldReference(qtlFineMappingResult), + ldReference(rawGwasFmr) ) adjusted <- .colocMaybeAdjustPips( adjustPips = adjustPips, @@ -598,17 +600,16 @@ colocPipeline <- function( # Resolve the second side to a fine-mapping collection (fine-map QC'd sumstats # when summary statistics are passed, whichever flavour they are). # @noRd -.colocResolveGwasFmr <- function(gwasInput, gwasFineMappingArgs) { +.colocResolveGwasFmr <- function(gwasInput, gwasFineMappingParam) { if (methods::is(gwasInput, "FineMappingResultBase")) { # Already fine-mapped: nothing in the bundle applies, so a setting # given here would be dropped rather than honoured. - .colocAssertGwasFmrUnset(gwasFineMappingArgs, class(gwasInput)[[1L]]) + .colocAssertGwasFmrUnset(gwasFineMappingParam, class(gwasInput)[[1L]]) return(gwasInput) } .assertMethodParam( - gwasFineMappingArgs, - "GwasFineMappingParam", - "gwasFineMapping" + gwasFineMappingParam, + "GwasFineMappingParam" ) if (length(qcInfo(gwasInput)) == 0L) { msg <- glue( @@ -619,44 +620,44 @@ colocPipeline <- function( } # The bundle's terminal: fineMappingPipeline takes these as its own # arguments, so it is unrolled once, here. + withSusieInf <- gwasFineMappingParam$initializeWithSusieInf %||% TRUE fineMappingPipeline( gwasInput, - methods = gwasFineMappingArgs$methods %||% "susie", - credibleSetParam = gwasFineMappingArgs$credibleSetParam %||% + methods = gwasFineMappingParam$methods %||% "susie", + credibleSetParam = gwasFineMappingParam$credibleSetParam %||% CredibleSetParam(), - susieRssParam = gwasFineMappingArgs$susieRssParam %||% SusieRssParam(), - panelFilterParam = gwasFineMappingArgs$panelFilterParam %||% + susieRssParam = gwasFineMappingParam$susieRssParam %||% SusieRssParam(), + panelFilterParam = gwasFineMappingParam$panelFilterParam %||% PanelFilterParam(), - initializeWithSusieInf = gwasFineMappingArgs$initializeWithSusieInf %||% - TRUE, - fitRetention = gwasFineMappingArgs$fitRetention %||% "slim" + initializeWithSusieInf = withSusieInf, + fitRetention = gwasFineMappingParam$fitRetention %||% "slim" ) } -# `gwasFineMapping` configures the fine-mapping run colocPipeline does on a -# raw GWAS input. A caller who has already fine-mapped the GWAS has no such +# `gwasFineMappingParam` configures the fine-mapping run colocPipeline does on +# a raw GWAS input. A caller who has already fine-mapped the GWAS has no such # run, so a non-default bundle is an instruction that cannot be carried out. # @noRd -.colocAssertGwasFmrUnset <- function(gwasFineMappingArgs, inputClass) { - if (!.isMethodParam(gwasFineMappingArgs)) { +.colocAssertGwasFmrUnset <- function(gwasFineMappingParam, inputClass) { + if (!.isMethodParam(gwasFineMappingParam)) { return(invisible(NULL)) } defaults <- GwasFineMappingParam() set <- keep( names(defaults), .colocGwasFmrFieldSet, - given = gwasFineMappingArgs, + given = gwasFineMappingParam, defaults = defaults ) if (length(set) == 0L) { return(invisible(NULL)) } abort(glue( - "colocPipeline: `gwasFineMapping` ", + "colocPipeline: `gwasFineMappingParam` ", "({str_flatten(str_c(set, ' ='), ', ')}) configures the GWAS ", "fine-mapping run, but `gwasInput` is already a ", "{inputClass} -- there is no run to configure. ", - "Drop `gwasFineMapping`, or pass the raw GwasSumStats instead." + "Drop `gwasFineMappingParam`, or pass the raw GwasSumStats instead." )) } @@ -695,12 +696,12 @@ colocPipeline <- function( # The LD reference the result carries forward, so colocCredibleSets() can # recompute purity (section 3.7) without being handed a sketch separately. The # two sides' sketches are already required to match by -# .colocRequireMatchingLdSketches, so either one identifies the panel -- but a +# .colocRequireMatchingLdRefs, so either one identifies the panel -- but a # first side fit on individual-level data carries none, and then the second # side's panel is the only one there is. # @noRd -.colocLdSketch <- function(qtlFineMappingResult, gwasFmr) { - ldSketch(qtlFineMappingResult) %||% ldSketch(gwasFmr) +.colocLdRef <- function(qtlFineMappingResult, gwasFmr) { + ldReference(qtlFineMappingResult) %||% ldReference(gwasFmr) } # Empty-result early return (attaching the GWAS fine-mapping when requested). @@ -714,7 +715,7 @@ colocPipeline <- function( ) { out <- .colocEmptyResult( enriched = useEnrichment, - ldSketch = .colocLdSketch(qtlFineMappingResult, gwasFmr) + ldReference = .colocLdRef(qtlFineMappingResult, gwasFmr) ) .colocAttachGwasFm(out, returnGwasFineMapping, gwasInput, gwasFmr) } @@ -725,7 +726,7 @@ colocPipeline <- function( qi, qtlFineMappingResult, gwasLbfByPair, - lbfFilterArgs, + colocLbfFilterParam, useEnrichment, enrichment, priors, @@ -735,7 +736,7 @@ colocPipeline <- function( q <- .colocQtlTupleInfo(qi, qtlFineMappingResult) qLbfInfo <- .colocExtractLbfFromEntry( q$parts, - lbfFilterArgs, + colocLbfFilterParam, label = q$label ) if (is.null(qLbfInfo)) { @@ -1050,7 +1051,7 @@ colocPipeline <- function( out <- .colocAssemble( results, useEnrichment, - .colocLdSketch(qtlFineMappingResult, gwasFmr) + .colocLdRef(qtlFineMappingResult, gwasFmr) ) .colocAttachGwasFm(out, returnGwasFineMapping, gwasInput, gwasFmr) } @@ -1067,13 +1068,16 @@ colocPipeline <- function( # Row-bind + column-order the per-pair summary rows (empty result when none). # @noRd -.colocAssemble <- function(results, useEnrichment, ldSketch = NULL) { +.colocAssemble <- function(results, useEnrichment, ldReference = NULL) { if (length(results) == 0L) { - return(.colocEmptyResult(enriched = useEnrichment, ldSketch = ldSketch)) + return(.colocEmptyResult( + enriched = useEnrichment, + ldReference = ldReference + )) } rows <- bind_rows(map(map(results, "rows"), .colocStandardiseRow)) variants <- list_c(map(results, "variants")) - ColocResult(.colocOrderColumns(rows, useEnrichment), variants, ldSketch) + ColocResult(.colocOrderColumns(rows, useEnrichment), variants, ldReference) } # Identity columns first, then everything coloc produced. @@ -1101,11 +1105,11 @@ colocPipeline <- function( # ============================================================================= # LD-sketch compatibility check. Thin wrapper over the shared -# `.requireMatchingLdSketches` helper (R/ld.R). Shared with +# `.requireMatchingLdRefs` helper (R/ld.R). Shared with # qtlEnrichmentPipeline. # @noRd -.colocRequireMatchingLdSketches <- function(qtlLd, gwasLd) { - .requireMatchingLdSketches(qtlLd, gwasLd, pipelineName = "colocPipeline") +.colocRequireMatchingLdRefs <- function(qtlLd, gwasLd) { + .requireMatchingLdRefs(qtlLd, gwasLd, pipelineName = "colocPipeline") } # SuSiE credible-set concentration filter. Given a trimmed SuSiE fit @@ -1136,7 +1140,8 @@ colocPipeline <- function( # Extract an LBF matrix (effects x variants) from a FineMappingRow, # applying the same filtering knobs as the legacy .extractLbfMatrix, now -# carried as one `lbfFilter` bundle rather than three loose arguments: +# carried as one `colocLbfFilterParam` bundle rather than three loose +# arguments: # - filterLbfCs (CS-only) # - secondary (secondary coverage CS, with a concentration cutoff) # - priorTol drop on V (default) @@ -1146,7 +1151,7 @@ colocPipeline <- function( # @noRd .colocExtractLbfFromEntry <- function( parts, - lbfFilterArgs, + colocLbfFilterParam, label = "entry" ) { fit <- susieFit(parts) @@ -1161,7 +1166,7 @@ colocPipeline <- function( # stays a skip; it is only an ABSENT LBF that is an error. allRows <- .colocLbfMatrix(fit, label) allMass <- .colocEffectRetainedMass(fit, nrow(allRows)) - keep <- .colocSelectLbfRows(allRows, fit, lbfFilterArgs) + keep <- .colocSelectLbfRows(allRows, fit, colocLbfFilterParam) kept <- allRows[keep, , drop = FALSE] mass <- allMass[keep] if (nrow(kept) == 0L) { @@ -1223,25 +1228,28 @@ colocPipeline <- function( # matching when the exact name is absent, so a fit carrying `sets_secondary` # but no `sets` would silently filter on the wrong element. # @noRd -.colocSelectLbfRows <- function(lbfMatrix, fit, lbfFilterArgs) { +.colocSelectLbfRows <- function(lbfMatrix, fit, colocLbfFilterParam) { # Read off the bundle like the other three filter fields, rather than # taken as a second copy of a value the caller already has in hand. - priorTol <- lbfFilterArgs$priorTol %||% 1e-9 + priorTol <- colocLbfFilterParam$priorTol %||% 1e-9 # The only place the filter's fields are read. Every function between # here and colocPipeline carries the bundle whole, so the names cannot # drift apart on the way down. allRows <- seq_len(nrow(lbfMatrix)) - if (isTRUE(lbfFilterArgs$filterLbfCs) && is.null(lbfFilterArgs$secondary)) { + if ( + isTRUE(colocLbfFilterParam$filterLbfCs) && + is.null(colocLbfFilterParam$secondary) + ) { csIdx <- fit[["sets"]][["cs_index"]] if (!is.null(csIdx) && length(csIdx) > 0L) { return(csIdx) } - } else if (!is.null(lbfFilterArgs$secondary)) { + } else if (!is.null(colocLbfFilterParam$secondary)) { secIdx <- try_fetch( .colocFilterCsByConcentration( fit, - coverage = lbfFilterArgs$secondary, - concentration = lbfFilterArgs$concentration + coverage = colocLbfFilterParam$secondary, + concentration = colocLbfFilterParam$concentration ), error = function(cnd) NULL ) @@ -1299,7 +1307,7 @@ colocPipeline <- function( # another's. Nothing downstream indexes this list by name, so positional # records make the collision impossible instead of merely unlikely. # @noRd -.colocPreextractGwasLbf <- function(gwasFmr, lbfFilterArgs) { +.colocPreextractGwasLbf <- function(gwasFmr, colocLbfFilterParam) { if (nrow(gwasFmr) == 0L) { return(list()) } @@ -1309,7 +1317,7 @@ colocPipeline <- function( gwasFmr = gwasFmr, blockIds = .colocGwasBlockIds(gwasFmr), side = .fmrSideName(gwasFmr), - lbfFilterArgs = lbfFilterArgs + colocLbfFilterParam = colocLbfFilterParam )) } @@ -1321,14 +1329,14 @@ colocPipeline <- function( gwasFmr, blockIds, side, - lbfFilterArgs + colocLbfFilterParam ) { ident <- .colocTupleIdentity(gwasFmr, ri) blockId <- blockIds[[ri]] label <- .fmrTupleLabel(side, ident, block = blockId) info <- .colocExtractLbfFromEntry( .fmrRowParts(gwasFmr, ri), - lbfFilterArgs, + colocLbfFilterParam, label = label ) if (is.null(info)) { @@ -1387,7 +1395,7 @@ colocPipeline <- function( # do not have to special-case a NULL return. When `enriched = TRUE` the # enrichment + p12Used columns are appended (the enloc-mode schema). # @noRd -.colocEmptyResult <- function(enriched = FALSE, ldSketch = NULL) { +.colocEmptyResult <- function(enriched = FALSE, ldReference = NULL) { base <- tibble( study = character(0), context = character(0), @@ -1414,7 +1422,7 @@ colocPipeline <- function( ColocResult( mutate(base, !!!.colocEnrichmentCols(enriched, NULL)), list(), - ldSketch = ldSketch + ldReference = ldReference ) } @@ -1542,9 +1550,6 @@ colocPipeline <- function( # ---- map/apply helpers (lambda-free callbacks) --------------------------- -# The variant ids of one fine-mapping entry (S4 slot; not pluckable by name). -# @noRd - # Score the first side's LBF against one second-side record -> a summary row # (or NULL). # @noRd diff --git a/R/colocboostPipeline.R b/R/colocboostPipeline.R index 592ad5c77..633b86dfc 100644 --- a/R/colocboostPipeline.R +++ b/R/colocboostPipeline.R @@ -8,7 +8,7 @@ #' extracted from the dataset (filtering knobs on the #' constructor apply lazily inside the accessors). #' \item \code{QtlSumStats} -- summary-statistic-only QTL data with a -#' shared LD reference (\code{ldSketch}). Must already have +#' shared LD reference (\code{ldReference}). Must already have #' been passed through \code{\link{summaryStatsQc}} (the #' pipeline rejects inputs whose \code{qcInfo()} is empty). #' Every analysis variant is available on this input, including @@ -21,7 +21,7 @@ #' GWAS is optional and always passed separately as a #' \code{GwasSumStats} object (must also be QC'd). #' -#' \code{colocboostPipeline} does \strong{not} accept a \code{FineMappingResult} +#' \code{colocboostPipeline} does \strong{not} accept a fine-mapping result #' for either side; colocboost has its own variable-selection algorithm. #' #' @section QC contract: @@ -32,17 +32,17 @@ #' \code{genotypes()} / \code{residualizedGenotypes()}. #' The pipeline does \emph{not} run a separate #' individual-level QC pass. -#' \item \code{panelFilter} acts at ANALYSIS time on the sumstat +#' \item \code{panelFilterParam} acts at ANALYSIS time on the sumstat #' sides, measured against the \strong{LD reference panel}: a #' variant whose panel genotypes fall below its cutoffs is dropped #' before the LD matrix is built. It applies to a #' \code{QtlSumStats} QTL side and to a \code{GwasSumStats} GWAS #' side (so it still bites when the QTL side is #' individual-level). Its defaults filter nothing. Unlike -#' \code{summaryStatsQc(imputeArgs = ...)}, which only bounds what +#' \code{summaryStatsQc(raissParam = ...)}, which only bounds what #' RAISS will impute, these discard \emph{observed} variants. #' \item All summary-statistic QC (variant filters, harmonization -#' against the \code{ldSketch}, LD-mismatch detection, RAISS +#' against the \code{ldReference}, LD-mismatch detection, RAISS #' imputation, etc.) lives in #' \code{\link{summaryStatsQc}}. The pipeline rejects any #' \code{QtlSumStats} or \code{GwasSumStats} where @@ -96,7 +96,7 @@ #' GWAS study focal. #' @param xqtlColoc,jointGwas,separateGwas Logical flags selecting which #' colocboost variants to run. -#' @param signalScreenArgs Individual-level pre-filter (ports the legacy +#' @param signalScreenParam Individual-level pre-filter (ports the legacy #' \code{pip_cutoff_to_skip_ind}), built with #' \code{\link{SignalScreenParam}}. For each context every outcome is fit #' with a single-effect SuSiE (\code{L = 1}) and dropped unless the chosen @@ -121,7 +121,7 @@ #' below its cutoffs is dropped before the LD matrix is built. The defaults #' filter nothing. See the Details section for how these relate to the #' individual-level cutoffs recorded on a \code{QtlDataset}. -#' @param residualizationArgs Covariate residualization settings for +#' @param residualizationParam Covariate residualization settings for #' individual-level input, built with \code{\link{ResidualizationParam}}. #' Reaches both \code{\link{residualizedGenotypes}} and #' \code{\link{residualizedPhenotypes}}, so it governs what is regressed @@ -243,16 +243,16 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { # Helpers (private) # ============================================================================= -# Build the LD / X_ref slot of the colocboost call from a list of LD -# matrices. When any matrix is non-square it is treated as a samples x -# variants genotype reference and routed to X_ref; otherwise routed to LD. -.cbBuildLdArgs <- function(ldList) { +# Build the LD / X_ref slot of the colocboost call from a bundle's LD list. +# `ldArg` says which the list holds -- LD matrices ("LD") or factors of them +# ("X_ref"), which colocboost correlates itself -- as .cbMergeSumstatBundles() +# records it; a factor can be square by coincidence, so its shape cannot say. +.cbBuildLdArgs <- function(ldList, ldArg = "LD") { ldList <- compact(ldList) if (length(ldList) == 0L) { return(list()) } - isGeno <- any(map_lgl(ldList, .cbIsNonSquare)) - if (isGeno) list(X_ref = ldList) else list(LD = ldList) + set_names(list(ldList), ldArg) } # Reject SumStats objects that have not been passed through @@ -308,7 +308,7 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { cisWindow = NULL, samples = NULL, pipCutoffToSkip = 0, - residualizationArgs = ResidualizationParam() + residualizationParam = ResidualizationParam() ) { contexts <- .cbResolveBundleContexts(qd, contexts) p <- list( @@ -318,7 +318,7 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { cisWindow = cisWindow, samples = samples, pipCutoffToSkip = pipCutoffToSkip, - residualizationArgs = residualizationArgs + residualizationParam = residualizationParam ) built <- compact(map(contexts, .cbBuildContextXY, p = p)) if (length(built) == 0L) { @@ -373,7 +373,7 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { ctx, p$traitId, p$region, - p$residualizationArgs + p$residualizationParam ) if (is.null(rawY) || ncol(rawY) == 0L) { return(NULL) @@ -385,7 +385,7 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { p$region, p$cisWindow, p$samples, - p$residualizationArgs + p$residualizationParam ) if (is.null(rawX) || ncol(rawX) == 0L) { return(NULL) @@ -425,7 +425,7 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { ctx, traitId, region, - residualizationArgs = ResidualizationParam() + residualizationParam = ResidualizationParam() ) { try_fetch( residualizedPhenotypes( @@ -433,7 +433,7 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { contexts = ctx, traitId = traitId, region = region, - residualizationArgs = residualizationArgs + residualizationParam = residualizationParam ), error = function(cnd) { msg <- glue( @@ -455,7 +455,7 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { region, cisWindow, samples, - residualizationArgs = ResidualizationParam() + residualizationParam = ResidualizationParam() ) { try_fetch( residualizedGenotypes( @@ -465,7 +465,7 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { region = region, cisWindow = cisWindow, samples = samples, - residualizationArgs = residualizationArgs + residualizationParam = residualizationParam ), error = function(cnd) { msg <- glue( @@ -621,10 +621,10 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { # Build a single (sumstat data.frame, LD correlation matrix) pair from a # QtlSumStats / GwasSumStats entry. Returns NULL when the entry has no -# variants overlapping the ldSketch panel. +# variants overlapping the ldReference panel. .cbSumstatPair <- function( df, - ldSketch, + ldReference, varY = NULL, nCase = NULL, nControl = NULL, @@ -644,35 +644,42 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { # the two. wanted <- variantIds[.panelKeepMask( variantIds, - ldSketch, + ldReference, cutoffs, ".cbSumstatPair" )] if (length(wanted) == 0L) { return(NULL) } - # Use the shared `.ldFromSketch` helper in "drop" mode so missing-from-panel - # variants are silently filtered (the colocboost path expects to operate - # only on the overlap). - R <- .ldFromSketch( - ldSketch, - wanted, - label = ".cbSumstatPair", - onMissing = "drop" - ) - if (is.null(R)) { + ld <- .cbPairLd(ldReference, wanted) + if (is.null(ld)) { return(NULL) } - keptIds <- attr(R, "keptVariantIds") + keptIds <- attr(ld, "keptVariantIds") kept <- filter(df, is_in(variantIds, keptIds)) ss <- .cbSumstatFrame(kept, keptIds, nCase, nControl, varY) list( sumstat = ss, - LD = `attr<-`(R, "keptVariantIds", NULL), - variantIds = keptIds + LD = `attr<-`(ld, "keptVariantIds", NULL), + variantIds = keptIds, + isFactor = .ldIsGenotypeRef(ldReference) ) } +# The LD of the `wanted` variants the panel holds, the rest dropped (the +# colocboost path expects to operate only on the overlap): a genotype +# reference's factor, which colocboost takes as X_ref and correlates itself, +# or an LdMatrix's matrix. +# @noRd +.cbPairLd <- function(ldReference, wanted) { + ldFrom <- if (.ldIsGenotypeRef(ldReference)) { + .ldFactorFromRef + } else { + .ldFromRef + } + ldFrom(ldReference, wanted, label = ".cbSumstatPair", onMissing = "drop") +} + # The colocboost sumstat frame for one entry, over the variants the LD panel # kept. `var_y` is added only when supplied: colocboost treats its absence as # "z-scale", so writing NA would change the model rather than say nothing. @@ -734,7 +741,7 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { if (is.null(ss) || nrow(ss) == 0L) { return(list()) } - ldSketch <- ldSketch(ss) + ldReference <- ldReference(ss) byContext <- if (!is.null(contexts) && length(contexts) > 0L) { is_in(as.character(ss$context), contexts) } else { @@ -756,7 +763,7 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { rows, .cbQtlEntryPair, ss = ss, - ldSketch = ldSketch, + ldReference = ldReference, cutoffs = cutoffs ), map_chr(rows, .cbQtlEntryLabel, ss = ss) @@ -775,7 +782,7 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { # One QTL entry's (sumstat, LD) pair, or NULL when it has no panel overlap. # @noRd -.cbQtlEntryPair <- function(i, ss, ldSketch, cutoffs) { +.cbQtlEntryPair <- function(i, ss, ldReference, cutoffs) { .cbSumstatPair( df = as.data.frame( ss, @@ -784,7 +791,7 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { trait = as.character(ss$trait)[[i]], require = "Z" ), - ldSketch = ldSketch, + ldReference = ldReference, varY = .cbTupleValue(ss, "varY", i), cutoffs = cutoffs ) @@ -807,13 +814,13 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { if (is.null(gws) || nrow(gws) == 0L) { return(list()) } - ldSketch <- ldSketch(gws) + ldReference <- ldReference(gws) compact(set_names( map( seq_len(nrow(gws)), .cbGwasEntryPair, gws = gws, - ldSketch = ldSketch, + ldReference = ldReference, cutoffs = cutoffs ), as.character(gws$study) @@ -822,14 +829,14 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { # One GWAS entry's (sumstat, LD) pair, or NULL when it has no panel overlap. # @noRd -.cbGwasEntryPair <- function(i, gws, ldSketch, cutoffs) { +.cbGwasEntryPair <- function(i, gws, ldReference, cutoffs) { .cbSumstatPair( df = as.data.frame( gws, studyName = as.character(gws$study)[[i]], require = "Z" ), - ldSketch = ldSketch, + ldReference = ldReference, varY = .cbTupleValue(gws, "varY", i), nCase = .cbTupleValue(gws, "nCase", i), nControl = .cbTupleValue(gws, "nControl", i), @@ -838,12 +845,12 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { } # Check two LD sketches for the reference-panel compatibility contract. Thin -# wrapper over the shared `.requireMatchingLdSketches` helper (R/ld.R) +# wrapper over the shared `.requireMatchingLdRefs` helper (R/ld.R) # using the "lenient" null policy: a NULL on either side skips the check # (only colocboostPipeline allows that, since some bundles only have a # QTL side or only a GWAS side). -.cbRequireMatchingLdSketches <- function(qtlLd, gwasLd) { - .requireMatchingLdSketches( +.cbRequireMatchingLdRefs <- function(qtlLd, gwasLd) { + .requireMatchingLdRefs( qtlLd, gwasLd, pipelineName = "colocboostPipeline", @@ -853,15 +860,26 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { # Combine sumstat bundles into the (sumstat-list, LD-list, dict) shape # colocboost expects. Deduplicates identical LD matrices so dict_sumstatLD -# can point multiple sumstats at one LD. +# can point multiple sumstats at one LD, and records in `ldArg` whether the +# list holds LD matrices ("LD") or factors of them ("X_ref"). Every side of +# a run reads one LD reference (.cbRequireMatchingLdRefs()), so the bundles +# never mix the two. .cbMergeSumstatBundles <- function(bundles) { if (length(bundles) == 0L) { return(list( sumstat = list(), LD = list(), - dict_sumstatLD = matrix(integer(0), ncol = 2L) + dict_sumstatLD = matrix(integer(0), ncol = 2L), + ldArg = "LD" )) } + kinds <- unique(map_lgl(bundles, .cbPairIsFactor)) + if (length(kinds) > 1L) { + abort( + "colocboost inputs mix LD matrices and genotype factors.", + .internal = TRUE + ) + } # Same shape as .cbDedupX: every bundle resolves to the first bundle # carrying an identical LD matrix, so the unique set and the back-mapping # both fall out without carrying state. @@ -874,7 +892,8 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { dict_sumstatLD = cbind( sumstat = seq_along(bundles), LD = match(firstIdx, keepIdx) - ) + ), + ldArg = if (kinds) "X_ref" else "LD" ) } @@ -903,10 +922,6 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { ) } -# A requested analysis with nothing to run on would otherwise be a silent -# no-op: the caller gets an empty ColocBoostResult whose computingTime() -# entries are all NULL, with no indication of why. Say so. -# @noRd # TRUE when an analysis was requested and has the data to run. When it was # requested but cannot run, warn and answer FALSE, so the caller's compact() # drops it instead of skipping it silently. @@ -922,6 +937,10 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { FALSE } +# A requested analysis with nothing to run on would otherwise be a silent +# no-op: the caller gets an empty ColocBoostResult whose computingTime() +# entries are all NULL, with no indication of why. Say so. +# @noRd .cbWarnNoData <- function(flag, needed) { msg <- glue( "colocboostPipeline: {flag} = TRUE was requested, but there is no ", @@ -933,48 +952,25 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { } # Shared dispatch: accepts a fully-prepared individual bundle (possibly -# NULL) plus a sumstat bundle (possibly empty) and runs the three -# colocboost variants the user requested. `qtlSumstatBundle` is the QTL-side -# subset of `sumstatBundle` (see .cbDriver); only the xQTL-only run uses it, -# so that a GWAS study never becomes an xQTL-only outcome. -# The analyses that were requested AND have data to run on, keyed by the -# result slot each fills. .cbCanRun warns in the "requested but cannot" case -# so the skip is never silent, and compact() drops what did not run. +# NULL) plus a sumstat bundle (possibly empty) and runs the colocboost +# variants `run` (from .cbResolveRuns) switched on. `qtlSumstatBundle` is the +# QTL-side subset of `sumstatBundle` (see .cbDriver); only the xQTL-only run +# uses it, so that a GWAS study never becomes an xQTL-only outcome. The +# result is keyed by the result slot each run fills; compact() drops what did +# not run. # @noRd .cbDispatchRuns <- function( individualBundle, sumstatBundle, qtlSumstatBundle, - xqtlColoc, - jointGwas, - separateGwas, + run, hasInd, - hasSs, - hasQtlSs, focalTrait, methodArgs, - gwasRunBundles = list(), - hasGwasSs = FALSE + gwasRunBundles = list() ) { - # Resolved first, in the order the runs are listed: .cbCanRun() warns - # when a requested analysis has no data for it, and hoisting keeps those - # warnings in the same order they were emitted inline. - ssNeeded <- "summary-statistic data" - runXqtl <- .cbCanRun( - xqtlColoc, - hasInd || hasQtlSs, - "xqtlColoc", - "QTL data" - ) - runJoint <- .cbCanRun(jointGwas, hasSs, "jointGwas", ssNeeded) - runSeparate <- .cbCanRun( - separateGwas, - hasGwasSs, - "separateGwas", - "GWAS summary statistics" - ) compact(list( - xqtl_coloc = if (runXqtl) { + xqtl_coloc = if (run$xqtl) { .cbRunXqtlOnly( individualBundle, qtlSumstatBundle, @@ -983,7 +979,7 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { methodArgs ) }, - joint_gwas = if (runJoint) { + joint_gwas = if (run$joint) { .cbRunJointGwas( individualBundle, sumstatBundle, @@ -992,7 +988,7 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { gwasNames = names(gwasRunBundles) ) }, - separate_gwas = if (runSeparate) { + separate_gwas = if (run$separate) { .cbRunSeparateGwas( individualBundle, gwasRunBundles, @@ -1003,6 +999,45 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { )) } +# Which analyses were requested AND have data to run on. .cbCanRun warns in +# the "requested but cannot" case so the skip is never silent; the flags are +# resolved in the order the runs are listed, so those warnings keep that +# order. separateGwas needs a GWAS, not merely "some summary statistics": a +# QTL-only sumstat input used to satisfy a `hasSs` guard and then run one +# focal pass per QTL study. +# @noRd +.cbResolveRuns <- function( + xqtlColoc, + jointGwas, + separateGwas, + hasInd, + hasSs, + qtlSumstatBundle, + gwasRunBundles +) { + hasQtlSs <- length(qtlSumstatBundle$sumstat) > 0L + list( + xqtl = .cbCanRun( + xqtlColoc, + hasInd || hasQtlSs, + "xqtlColoc", + "QTL data" + ), + joint = .cbCanRun( + jointGwas, + hasSs, + "jointGwas", + "summary-statistic data" + ), + separate = .cbCanRun( + separateGwas, + length(gwasRunBundles) > 0L, + "separateGwas", + "GWAS summary statistics" + ) + ) +} + # Each run's result and timing folded into the empty result skeleton, so a # slot no analysis filled keeps the skeleton's own (empty) value. # @noRd @@ -1044,7 +1079,9 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { Y[, keep, drop = FALSE] } - +# Run the requested colocboost analyses over the prepared bundles and fold +# them into a ColocBoostResult (an empty one when no QTL input remains). +# @noRd .cbRunVariants <- function( individualBundle, sumstatBundle, @@ -1053,19 +1090,13 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { separateGwas, focalTrait, methodArgs, - qtlLdSketch = NULL, + qtlLdReference = NULL, qtlSumstatBundle = NULL, gwasRunBundles = list() ) { - empty <- .cbEmptyResult() hasInd <- !is.null(individualBundle) hasSs <- length(sumstatBundle$sumstat) > 0L qtlSumstatBundle <- qtlSumstatBundle %||% .cbMergeSumstatBundles(list()) - hasQtlSs <- length(qtlSumstatBundle$sumstat) > 0L - # separateGwas needs a GWAS, not merely "some summary statistics": a - # QTL-only sumstat input used to satisfy the old `hasSs` guard and then - # run one focal pass per QTL study. - hasGwasSs <- length(gwasRunBundles) > 0L if (!hasInd && !hasSs) { msg <- glue( "colocboostPipeline: no QTL inputs remain after selection. ", @@ -1074,26 +1105,30 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { inform(msg) return(.cbEmptyResultObject()) } - runs <- .cbDispatchRuns( - individualBundle, - sumstatBundle, - qtlSumstatBundle, + run <- .cbResolveRuns( xqtlColoc, jointGwas, separateGwas, hasInd, hasSs, - hasQtlSs, + qtlSumstatBundle, + gwasRunBundles + ) + runs <- .cbDispatchRuns( + individualBundle, + sumstatBundle, + qtlSumstatBundle, + run, + hasInd, focalTrait, methodArgs, - gwasRunBundles = gwasRunBundles, - hasGwasSs = hasGwasSs + gwasRunBundles = gwasRunBundles ) - results <- .cbMergeRuns(empty, runs) + results <- .cbMergeRuns(.cbEmptyResult(), runs) .cbToResultObject( results, .cbOutcomeInfo(individualBundle, sumstatBundle, hasInd), - qtlLdSketch + qtlLdReference ) } @@ -1110,14 +1145,6 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { ) } -# Flatten the three raw colocboost runs into one ColocBoostResult. -# -# The three analyses are NOT parallel structures: xqtl_coloc and joint_gwas are -# each a single colocboost object, while separate_gwas is a NAMED LIST of them, -# one per GWAS study -- one level deeper. That is why `gwasStudy` exists as a -# key: without it the separate-GWAS sets would be indistinguishable from each -# other once flattened. -# @noRd # @noRd .cbJointRun <- function(nm, results) { if (is.null(results[[nm]])) { @@ -1143,7 +1170,15 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { map_chr(entries, field) } -.cbToResultObject <- function(results, outcomeInfo, ldSketch = NULL) { +# Flatten the three raw colocboost runs into one ColocBoostResult. +# +# The three analyses are NOT parallel structures: xqtl_coloc and joint_gwas are +# each a single colocboost object, while separate_gwas is a NAMED LIST of them, +# one per GWAS study -- one level deeper. That is why `gwasStudy` exists as a +# key: without it the separate-GWAS sets would be indistinguishable from each +# other once flattened. +# @noRd +.cbToResultObject <- function(results, outcomeInfo, ldReference = NULL) { sep <- results$separate_gwas sepRuns <- if (is.null(sep) || length(sep) == 0L) { list() @@ -1170,7 +1205,7 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { analysis = .cbEntryField(entries, "analysis"), gwasStudy = .cbEntryField(entries, "gwasStudy"), outcomeInfo = outcomeInfo, - ldSketch = ldSketch, + ldReference = ldReference, computingTime = results$computing_time %||% list() ) } @@ -1219,7 +1254,11 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { nCtx <- if (hasInd) length(individualBundle$Y) else 0L nSs <- length(sumstatBundle$sumstat) .cbAnnounceXqtl(nCtx, nSs) - ldArgs <- if (nSs > 0L) .cbBuildLdArgs(sumstatBundle$LD) else list() + ldArgs <- if (nSs > 0L) { + .cbBuildLdArgs(sumstatBundle$LD, sumstatBundle$ldArg) + } else { + list() + } args <- c( list( X = if (hasInd) individualBundle$X else NULL, @@ -1298,7 +1337,7 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { if (hasInd) individualBundle$outcomeNames else character(), ssNames ) - ldArgs <- .cbBuildLdArgs(sumstatBundle$LD) + ldArgs <- .cbBuildLdArgs(sumstatBundle$LD, sumstatBundle$ldArg) # The merged bundle holds QTL sumstats as well as GWAS, so split the # labels rather than calling every sumstat a GWAS: a context is any # outcome that is not one of the GWAS studies, whether it arrived as @@ -1381,7 +1420,7 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { # `runBundle` carries every QTL sumstat followed by this one GWAS, so the # whole LD list and its dict come along -- the same shape as the joint # run, but focal on the last outcome. - ldArgs <- .cbBuildLdArgs(runBundle$LD) + ldArgs <- .cbBuildLdArgs(runBundle$LD, runBundle$ldArg) traits <- c( if (hasInd) individualBundle$outcomeNames else character(), names(runBundle$sumstat) @@ -1443,9 +1482,10 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { # Relabel a (sumstat, LD) pair to the canonical coding: flip the z-score and the # LD sign-submatrix for variants swapped relative to canonical -# (LD_ij -> sign_i * sign_j * LD_ij), drop unmatched variants, and relabel to -# canonical. The sumstat and its LD share one sign vector, so they stay -# consistent. Returns NULL when no variant matches. +# (LD_ij -> sign_i * sign_j * LD_ij; on a factor, the swapped columns are +# negated), drop unmatched variants, and relabel to canonical. The sumstat +# and its LD share one sign vector, so they stay consistent. Returns NULL +# when no variant matches. # @noRd .cbFlipPairToCanonical <- function(p, canonical) { mm <- matchVariants(p$sumstat$variant, canonical) @@ -1461,11 +1501,31 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { z = .data$z * sgn, variant = canonical[ib] ) - ld <- `dimnames<-`( - p$LD[ia, ia, drop = FALSE] * outer(sgn, sgn), - list(canonical[ib], canonical[ib]) + isFactor <- .cbPairIsFactor(p) + ld <- if (isFactor) { + `colnames<-`( + sweep(p$LD[, ia, drop = FALSE], 2L, sgn, FUN = "*"), + canonical[ib] + ) + } else { + `dimnames<-`( + p$LD[ia, ia, drop = FALSE] * outer(sgn, sgn), + list(canonical[ib], canonical[ib]) + ) + } + list( + sumstat = ss, + LD = ld, + variantIds = canonical[ib], + isFactor = isFactor ) - list(sumstat = ss, LD = ld, variantIds = canonical[ib]) +} + +# TRUE when a (sumstat, LD) pair carries a factor of its LD rather than the +# matrix. +# @noRd +.cbPairIsFactor <- function(p) { + isTRUE(p$isFactor) } # Harmonize the allele coding of every colocboost input (individual X columns, @@ -1528,6 +1588,12 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { # are per-tuple lists of `list(sumstat, LD)` produced by the per-class # bundle helpers; they are merged here so dict_sumstatLD can dedupe # identical LD matrices across QTL and GWAS sides. +# +# The xQTL-only run gets its own bundle over just the QTL-side pairs, so a +# GWAS study is never treated as an xQTL outcome. Rebuilding it through +# .cbMergeSumstatBundles (rather than subsetting the merged one) keeps the +# deduplicated LD list and dict_sumstatLD consistent for the subset. +# @noRd .cbDriver <- function( individualBundle, qtlPairs, @@ -1537,7 +1603,7 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { separateGwas, focalTrait, methodArgs, - qtlLdSketch = NULL, + qtlLdReference = NULL, alleleFlip = TRUE, cutoffs = NULL ) { @@ -1548,7 +1614,7 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { combinedPairs <- .cbAppendGwasPairs( qtlPairs, gwasSumStats, - qtlLdSketch, + qtlLdReference, cutoffs = cutoffs ) harmonized <- .cbMaybeHarmonize( @@ -1557,29 +1623,9 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { alleleFlip ) sumstatBundle <- .cbMergeSumstatBundles(harmonized$pairs) - # The xQTL-only run gets its own bundle over just the QTL-side pairs, so - # a GWAS study is never treated as an xQTL outcome. Rebuilding it through - # .cbMergeSumstatBundles (rather than subsetting the merged one) keeps the - # deduplicated LD list and dict_sumstatLD consistent for the subset. qtlKeys <- intersect(names(harmonized$pairs), names(qtlPairs)) qtlSumstatBundle <- .cbMergeSumstatBundles(harmonized$pairs[qtlKeys]) - # The separate-GWAS runs are FOCAL: each is one GWAS tested against the - # whole QTL side, so each needs its own bundle of (every QTL pair + that - # one GWAS). Built the same way and for the same reason as the xQTL - # bundle above -- the deduplicated LD list and dict_sumstatLD have to - # match the subset, which subsetting the merged bundle would not give. - # Without this the separate loop ran over EVERY merged label and treated - # each QTL study as a focal GWAS in its own right. - gwasKeys <- setdiff(names(harmonized$pairs), qtlKeys) - gwasRunBundles <- set_names( - map( - gwasKeys, - .cbGwasRunBundle, - pairs = harmonized$pairs, - qtlKeys = qtlKeys - ), - gwasKeys - ) + gwasRunBundles <- .cbGwasRunBundles(harmonized$pairs, qtlKeys) .cbRunVariants( harmonized$individualBundle, sumstatBundle, @@ -1588,12 +1634,28 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { separateGwas, focalTrait, methodArgs, - qtlLdSketch = qtlLdSketch, + qtlLdReference = qtlLdReference, qtlSumstatBundle = qtlSumstatBundle, gwasRunBundles = gwasRunBundles ) } +# The separate-GWAS run bundles, keyed by GWAS label. The runs are FOCAL: each +# is one GWAS tested against the whole QTL side, so each needs its own bundle +# of (every QTL pair + that one GWAS). Built through .cbMergeSumstatBundles +# for the same reason as the xQTL bundle in .cbDriver -- the deduplicated LD +# list and dict_sumstatLD have to match the subset, which subsetting the +# merged bundle would not give. Without this the separate loop ran over EVERY +# merged label and treated each QTL study as a focal GWAS in its own right. +# @noRd +.cbGwasRunBundles <- function(pairs, qtlKeys) { + gwasKeys <- setdiff(names(pairs), qtlKeys) + set_names( + map(gwasKeys, .cbGwasRunBundle, pairs = pairs, qtlKeys = qtlKeys), + gwasKeys + ) +} + # Append the GWAS sumstat pairs to the QTL pairs, QC-gating gwasSumStats and # make.unique-ing colliding labels. (Sequential key resolution -- kept as a # loop.) @@ -1601,15 +1663,15 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { .cbAppendGwasPairs <- function( qtlPairs, gwasSumStats, - qtlLdSketch, + qtlLdReference, cutoffs = NULL ) { if (is.null(gwasSumStats)) { return(qtlPairs) } .cbRequireSumStatsQc(gwasSumStats, "gwasSumStats") - if (!is.null(qtlLdSketch)) { - .cbRequireMatchingLdSketches(qtlLdSketch, ldSketch(gwasSumStats)) + if (!is.null(qtlLdReference)) { + .cbRequireMatchingLdRefs(qtlLdReference, ldReference(gwasSumStats)) } gwasPairs <- .cbGwasSumStatsBundle(gwasSumStats, cutoffs = cutoffs) if (length(gwasPairs) == 0L) { @@ -1647,12 +1709,12 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { separateGwas, samples, panelFilterParam, - signalScreenArgs, + signalScreenParam, alleleFlip, methodArgs, - residualizationArgs + residualizationParam ) { - screenSpec <- .screenResolve(signalScreenArgs) + screenSpec <- .screenResolve(signalScreenParam) indBundle <- .cbIndividualBundle( qtlData, contexts = contexts, @@ -1661,7 +1723,7 @@ setGeneric("colocboostPipeline", function(qtlData, gwasSumStats = NULL, ...) { cisWindow = cisWindow, samples = samples, pipCutoffToSkip = screenSpec, - residualizationArgs = residualizationArgs + residualizationParam = residualizationParam ) .cbDriver( indBundle, @@ -1698,9 +1760,9 @@ setMethod( separateGwas = FALSE, samples = NULL, panelFilterParam = PanelFilterParam(), - signalScreenArgs = SignalScreenParam(), + signalScreenParam = SignalScreenParam(), alleleFlip = TRUE, - residualizationArgs = ResidualizationParam(), + residualizationParam = ResidualizationParam(), # `list()`, not ColocboostOptions(): the formal shadows the # constructor, so a constructor-call default is a recursive # reference. An empty list is the "no options" spelling @@ -1722,10 +1784,10 @@ setMethod( separateGwas = separateGwas, samples = samples, panelFilterParam = panelFilterParam, - signalScreenArgs = signalScreenArgs, + signalScreenParam = signalScreenParam, alleleFlip = alleleFlip, methodArgs = methodArgs, - residualizationArgs = residualizationArgs + residualizationParam = residualizationParam ) } ) @@ -1767,7 +1829,7 @@ setMethod( separateGwas = separateGwas, focalTrait = focalTrait, methodArgs = methodArgs, - qtlLdSketch = ldSketch(qtlData), + qtlLdReference = ldReference(qtlData), alleleFlip = alleleFlip, cutoffs = cutoffs ) @@ -1792,9 +1854,9 @@ setMethod( separateGwas = FALSE, samples = NULL, panelFilterParam = PanelFilterParam(), - signalScreenArgs = SignalScreenParam(), + signalScreenParam = SignalScreenParam(), alleleFlip = TRUE, - residualizationArgs = ResidualizationParam(), + residualizationParam = ResidualizationParam(), # `list()`, not ColocboostOptions(): the formal shadows the # constructor, so a constructor-call default is a recursive # reference. An empty list is the "no options" spelling @@ -1816,10 +1878,10 @@ setMethod( separateGwas = separateGwas, samples = samples, panelFilterParam = panelFilterParam, - signalScreenArgs = signalScreenArgs, + signalScreenParam = signalScreenParam, alleleFlip = alleleFlip, methodArgs = methodArgs, - residualizationArgs = residualizationArgs + residualizationParam = residualizationParam ) } ) @@ -1840,12 +1902,12 @@ setMethod( separateGwas, samples, panelFilterParam, - signalScreenArgs, + signalScreenParam, alleleFlip, methodArgs, - residualizationArgs + residualizationParam ) { - screenSpec <- .screenResolve(signalScreenArgs) + screenSpec <- .screenResolve(signalScreenParam) indBundle <- .cbMultiStudyIndBundle( qtlData = qtlData, contexts = contexts, @@ -1854,7 +1916,7 @@ setMethod( cisWindow = cisWindow, samples = samples, screenSpec = screenSpec, - residualizationArgs = residualizationArgs + residualizationParam = residualizationParam ) cutoffs <- .panelCutoffs(panelFilterParam) ss <- .cbMultiStudySumstats( @@ -1872,17 +1934,12 @@ setMethod( separateGwas, focalTrait, methodArgs, - qtlLdSketch = ss$qtlLdSketch, + qtlLdReference = ss$qtlLdReference, alleleFlip = alleleFlip, cutoffs = cutoffs ) } -# Aggregate the individual-level bundles across all QtlDataset members. Per- -# study trait names are prefixed with "{study}:" so colocboost sees distinct -# outcomes when two studies share a trait. Returns the combined bundle or NULL. -# (Sequential offset-shifted merge -- kept as a loop.) -# @noRd # One study's bundle with its names study-prefixed, or NULL when it has # nothing to contribute. # @noRd @@ -1895,7 +1952,7 @@ setMethod( cisWindow, samples, screenSpec, - residualizationArgs = ResidualizationParam() + residualizationParam = ResidualizationParam() ) { sub <- .cbIndividualBundle( qtlDatasets[[studyName]], @@ -1905,7 +1962,7 @@ setMethod( cisWindow = cisWindow, samples = samples, pipCutoffToSkip = screenSpec, - residualizationArgs = residualizationArgs + residualizationParam = residualizationParam ) if (is.null(sub)) { return(NULL) @@ -1931,6 +1988,12 @@ setMethod( cbind(Y = d[, "Y"] + yOffsets[[i]], X = d[, "X"] + xOffsets[[i]]) } +# The individual-level bundle across every study of a MultiStudyQtlDataset. +# Each study's dict indexes its own X and Y, so it shifts by however many +# entries the studies before it contributed -- a cumulative count, known once +# all the bundles are in hand rather than tracked while looping. +# NULL when no study has anything to contribute. +# @noRd .cbMultiStudyIndBundle <- function( qtlData, contexts, @@ -1939,7 +2002,7 @@ setMethod( cisWindow, samples, screenSpec, - residualizationArgs = ResidualizationParam() + residualizationParam = ResidualizationParam() ) { qtlDatasets <- qtlDatasets(qtlData) subs <- compact(map( @@ -1952,14 +2015,11 @@ setMethod( cisWindow = cisWindow, samples = samples, screenSpec = screenSpec, - residualizationArgs = residualizationArgs + residualizationParam = residualizationParam )) if (length(subs) == 0L) { return(NULL) } - # Each study's dict indexes its own X and Y, so it shifts by however many - # entries the studies before it contributed -- a cumulative count, known - # once all the bundles are in hand rather than tracked while looping. xOffsets <- .cbOffsets(map_int(subs, .cbFieldLength, field = "X")) yOffsets <- .cbOffsets(map_int(subs, .cbFieldLength, field = "Y")) combinedX <- .cbConcat(map(subs, "X")) @@ -1985,7 +2045,8 @@ setMethod( } # Prefix a study's X names + outcome names with "{study}:" (Y names track the -# outcome names). +# outcome names), so colocboost sees distinct outcomes when two studies share +# a trait. # @noRd .cbPrefixStudyNames <- function(sub, studyName) { outcomeNames <- str_c(studyName, sub$outcomeNames, sep = ":") @@ -2014,7 +2075,7 @@ setMethod( } # Sumstat side of a MultiStudyQtlDataset: bundle any embedded QtlSumStats. -# Returns list(qtlPairs, qtlLdSketch). +# Returns list(qtlPairs, qtlLdReference). # @noRd .cbMultiStudySumstats <- function( qtlData, @@ -2024,7 +2085,7 @@ setMethod( ) { embeddedSs <- sumStats(qtlData) if (is.null(embeddedSs)) { - return(list(qtlPairs = list(), qtlLdSketch = NULL)) + return(list(qtlPairs = list(), qtlLdReference = NULL)) } .cbRequireSumStatsQc(embeddedSs, "MultiStudyQtlDataset@sumStats") list( @@ -2034,18 +2095,12 @@ setMethod( traitId = traitId, cutoffs = cutoffs ), - qtlLdSketch = ldSketch(embeddedSs) + qtlLdReference = ldReference(embeddedSs) ) } # ---- map/apply helpers (lambda-free callbacks) --------------------------- -# TRUE when a matrix is non-square (a samples x variants genotype reference). -# @noRd -.cbIsNonSquare <- function(m) { - nrow(m) != ncol(m) -} - # Single-effect screen decision for outcome column `j` (drop on failure). # @noRd .cbScreenOutcome <- function(j, X, Y, spec) { diff --git a/R/cpp11.R b/R/cpp11.R index 725ad5d98..141781dea 100644 --- a/R/cpp11.R +++ b/R/cpp11.R @@ -1,25 +1,61 @@ # Generated by cpp11: do not edit by hand +bgenDosageCpp <- function(data, nSamples, alleles) { + .Call(`_pecotmr_bgenDosageCpp`, data, nSamples, alleles) +} + +bgenSampleIdsCpp <- function(ids, nSamples) { + .Call(`_pecotmr_bgenSampleIdsCpp`, ids, nSamples) +} + dentistIterativeImpute <- function(ldMatR, nSample, zScoreR, pValueThreshold, propSVD, gcControl, nIter, gPvalueThreshold, numThreads, correctChenEtAlBug, verbose, seed) { .Call(`_pecotmr_dentistIterativeImpute`, ldMatR, nSample, zScoreR, pValueThreshold, propSVD, gcControl, nIter, gPvalueThreshold, numThreads, correctChenEtAlBug, verbose, seed) } -lassosumRssRcpp <- function(zR, LD, lambdaR, thr, maxiter) { - .Call(`_pecotmr_lassosumRssRcpp`, zR, LD, lambdaR, thr, maxiter) +dentistIterativeImputeFactor <- function(factorR, nSample, zScoreR, pValueThreshold, propSVD, gcControl, nIter, gPvalueThreshold, numThreads, correctChenEtAlBug, verbose, seed) { + .Call(`_pecotmr_dentistIterativeImputeFactor`, factorR, nSample, zScoreR, pValueThreshold, propSVD, gcControl, nIter, gPvalueThreshold, numThreads, correctChenEtAlBug, verbose, seed) +} + +lassosumRssCpp <- function(zR, LD, shrink, lambdaR, thr, maxiter) { + .Call(`_pecotmr_lassosumRssCpp`, zR, LD, shrink, lambdaR, thr, maxiter) +} + +lassosumRssFactorCpp <- function(zR, factorR, shrink, lambdaR, thr, maxiter) { + .Call(`_pecotmr_lassosumRssFactorCpp`, zR, factorR, shrink, lambdaR, thr, maxiter) +} + +ldThresholdComponents <- function(standardized, threshold, stripe) { + .Call(`_pecotmr_ldThresholdComponents`, standardized, threshold, stripe) +} + +penalizedRssCpp <- function(zR, LD, shrink, lambdaR, penaltyStr, gamma, alpha, lambda0, lambda2, thr, maxiter, maxSwaps) { + .Call(`_pecotmr_penalizedRssCpp`, zR, LD, shrink, lambdaR, penaltyStr, gamma, alpha, lambda0, lambda2, thr, maxiter, maxSwaps) +} + +penalizedRssFactorCpp <- function(zR, factorR, shrink, lambdaR, penaltyStr, gamma, alpha, lambda0, lambda2, thr, maxiter, maxSwaps) { + .Call(`_pecotmr_penalizedRssFactorCpp`, zR, factorR, shrink, lambdaR, penaltyStr, gamma, alpha, lambda0, lambda2, thr, maxiter, maxSwaps) +} + +prsCsCpp <- function(a, b, phi, bhat, maf, n, ldBlk, nIter, nBurnin, thin, verbose, seed) { + .Call(`_pecotmr_prsCsCpp`, a, b, phi, bhat, maf, n, ldBlk, nIter, nBurnin, thin, verbose, seed) +} + +prsCsFactorCpp <- function(a, b, phi, bhat, maf, n, factorR, nIter, nBurnin, thin, verbose, seed) { + .Call(`_pecotmr_prsCsFactorCpp`, a, b, phi, bhat, maf, n, factorR, nIter, nBurnin, thin, verbose, seed) } -penalizedRssRcpp <- function(zR, LD, lambdaR, penaltyStr, gamma, alpha, lambda0, lambda2, thr, maxiter, maxSwaps) { - .Call(`_pecotmr_penalizedRssRcpp`, zR, LD, lambdaR, penaltyStr, gamma, alpha, lambda0, lambda2, thr, maxiter, maxSwaps) +qtlEnrichmentCpp <- function(rGwasPip, rQtlSusieFit, piGwas, piQtl, ImpN, shrinkageLambda, doubleShrinkage, besselCorrection, numThreads, seed) { + .Call(`_pecotmr_qtlEnrichmentCpp`, rGwasPip, rQtlSusieFit, piGwas, piQtl, ImpN, shrinkageLambda, doubleShrinkage, besselCorrection, numThreads, seed) } -prsCsRcpp <- function(a, b, phi, bhat, maf, n, ldBlk, nIter, nBurnin, thin, verbose, seed) { - .Call(`_pecotmr_prsCsRcpp`, a, b, phi, bhat, maf, n, ldBlk, nIter, nBurnin, thin, verbose, seed) +sdprCpp <- function(bhatR, LD, n, perVariantSampleSize, array, a, c, M, a0k, b0k, iter, burn, thin, numThreads, optLlk, verbose, seed) { + .Call(`_pecotmr_sdprCpp`, bhatR, LD, n, perVariantSampleSize, array, a, c, M, a0k, b0k, iter, burn, thin, numThreads, optLlk, verbose, seed) } -qtlEnrichmentRcpp <- function(rGwasPip, rQtlSusieFit, piGwas, piQtl, ImpN, shrinkageLambda, doubleShrinkage, besselCorrection, numThreads, seed) { - .Call(`_pecotmr_qtlEnrichmentRcpp`, rGwasPip, rQtlSusieFit, piGwas, piQtl, ImpN, shrinkageLambda, doubleShrinkage, besselCorrection, numThreads, seed) +sdprFactorCpp <- function(bhatR, factorR, n, perVariantSampleSize, array, a, c, M, a0k, b0k, iter, burn, thin, numThreads, optLlk, verbose, seed) { + .Call(`_pecotmr_sdprFactorCpp`, bhatR, factorR, n, perVariantSampleSize, array, a, c, M, a0k, b0k, iter, burn, thin, numThreads, optLlk, verbose, seed) } -sdprRcpp <- function(bhatR, LD, n, perVariantSampleSize, array, a, c, M, a0k, b0k, iter, burn, thin, numThreads, optLlk, verbose, seed) { - .Call(`_pecotmr_sdprRcpp`, bhatR, LD, n, perVariantSampleSize, array, a, c, M, a0k, b0k, iter, burn, thin, numThreads, optLlk, verbose, seed) +vcfGtDosageCpp <- function(gt, alleles) { + .Call(`_pecotmr_vcfGtDosageCpp`, gt, alleles) } diff --git a/R/crossValidation.R b/R/crossValidation.R index 90b0384a6..b3d5f356f 100644 --- a/R/crossValidation.R +++ b/R/crossValidation.R @@ -347,17 +347,15 @@ NULL samplePartitions } -# @noRd # multicoreWorkers() rather than bpworkers(MulticoreParam()): the two answer # the same number, but constructing a MulticoreParam costs ~0.6s (almost all # of it garbage collection) and this runs on every fit. +# @noRd .cvNumCores <- function(numThreads) { avail <- multicoreWorkers() min(if (numThreads == -1) avail else numThreads, avail) } -# Run each fold (parallel via BiocParallel when >= 2 cores). -# @noRd # MulticoreParam for CV / weight-fitting parallelism. A NULL seed keeps the # historical default RNGseed = 1L (reproducible); a caller-supplied seed # overrides it so the parallel L'Ecuyer streams are reproducible under it. This @@ -383,6 +381,8 @@ NULL } } +# Run each fold (parallel via BiocParallel when >= 2 cores). +# @noRd .cvRunFolds <- function(foldIds, cvState, numCores) { if (numCores >= 2) { return(bplapply( @@ -528,19 +528,43 @@ setClass( numThreads = "numeric", samplePartition = "list_OR_NULL", maxVariants = "numeric_OR_NULL", - weightMethods = "list_OR_NULL" + weightMethods = "list_OR_NULL", + fitFullData = "logical" ) ) +setValidity("CrossValidationParam", function(object) { + problems <- .cvFitFullDataProblem(object@fitFullData, object@folds) + if (length(problems) == 0L) TRUE else problems +}) + +# `fitFullData = FALSE` asks for cross-validation results alone, which is only +# a request for something when cross-validation runs: without folds there +# would be no fit of any kind. Checked here, at construction, rather than +# separately by each pipeline that reads it. +# @noRd +.cvFitFullDataProblem <- function(fitFullData, folds) { + if (length(fitFullData) != 1L || is.na(fitFullData)) { + return("`fitFullData` must be a single TRUE or FALSE.") + } + if (!fitFullData && !.cvEnabled(list(folds = folds))) { + return(str_c( + "fitFullData = FALSE requires cross-validation (folds >= 2): ", + "without folds there would be no fit at all." + )) + } + NULL +} + #' @title Cross-Validation Settings #' @description How cross-validation runs, shared by #' \code{\link{fineMappingPipeline}} and \code{\link{twasWeightsPipeline}}. #' -#' \code{folds}, \code{numThreads} and \code{samplePartition} mean the same -#' thing in both. \code{maxVariants} and \code{weightMethods} are honoured -#' by \code{\link{twasWeightsPipeline}} only and are \strong{ignored} by -#' \code{\link{fineMappingPipeline}}, so one bundle can be handed to -#' either pipeline unchanged. +#' \code{folds}, \code{numThreads}, \code{samplePartition} and +#' \code{fitFullData} mean the same thing in both. \code{maxVariants} and +#' \code{weightMethods} are honoured by \code{\link{twasWeightsPipeline}} +#' only and are \strong{ignored} by \code{\link{fineMappingPipeline}}, so +#' one bundle can be handed to either pipeline unchanged. #' @param folds Integer. Number of folds; \code{0} (the default) or #' \code{1} skips cross-validation. The same value in both pipelines --- #' \code{twasWeightsPipeline} used to default to \code{5}, which made an @@ -561,16 +585,24 @@ setClass( #' \strong{\code{twasWeightsPipeline} only} --- #' \code{fineMappingPipeline} ignores it, because its \code{methods=} are #' fine-mapping methods and its CV refits all of them. +#' @param fitFullData Logical. \code{TRUE} (default) fits the final model on +#' the full data as well as cross-validating it; \code{FALSE} keeps only +#' the cross-validation results, and requires \code{folds >= 2}. A row +#' from such a run carries its \code{cvResult} and nothing else, so it +#' cannot be exported and cannot supply full-data weights or fits +#' downstream. #' @return A \code{CrossValidationParam} object, a \code{\link{MethodParam}}. #' @examples #' CrossValidationParam(folds = 10, numThreads = 4) +#' CrossValidationParam(folds = 5, fitFullData = FALSE) #' @export CrossValidationParam <- function( folds = 0, numThreads = 1, samplePartition = NULL, maxVariants = NULL, - weightMethods = NULL + weightMethods = NULL, + fitFullData = TRUE ) { new( "CrossValidationParam", @@ -578,22 +610,24 @@ CrossValidationParam <- function( numThreads = numThreads, samplePartition = samplePartition, maxVariants = maxVariants, - weightMethods = weightMethods + weightMethods = weightMethods, + fitFullData = fitFullData ) } # The fields a pipeline reads, as a plain list so call sites index it without # caring that the caller passed a constructor result. # @noRd -.cvResolve <- function(crossValidationArgs) { +.cvResolve <- function(crossValidationParam) { list( - folds = crossValidationArgs$folds %||% 0, - numThreads = crossValidationArgs$numThreads %||% 1, - samplePartition = crossValidationArgs$samplePartition, + folds = crossValidationParam$folds %||% 0, + numThreads = crossValidationParam$numThreads %||% 1, + samplePartition = crossValidationParam$samplePartition, # -1 is twasWeightsCv()'s "no cap" sentinel. fineMappingPipeline # resolves these two as well but never reads them. - maxVariants = crossValidationArgs$maxVariants %||% -1, - weightMethods = crossValidationArgs$weightMethods + maxVariants = crossValidationParam$maxVariants %||% -1, + weightMethods = crossValidationParam$weightMethods, + fitFullData = crossValidationParam$fitFullData %||% TRUE ) } @@ -601,8 +635,8 @@ CrossValidationParam <- function( # and anything that needs out-of-fold predictions has to ask this rather than # testing `folds` itself. # @noRd -.cvEnabled <- function(crossValidationArgs) { - folds <- crossValidationArgs$folds %||% 0 +.cvEnabled <- function(crossValidationParam) { + folds <- crossValidationParam$folds %||% 0 !is.null(folds) && length(folds) == 1L && !is.na(folds) && folds >= 2L } @@ -611,9 +645,9 @@ CrossValidationParam <- function( # unimplemented but meaningless -- saying so beats running to completion and # returning results that were never cross-validated. # @noRd -.cvRefuseOnSumstats <- function(crossValidationArgs, pipeline, cls) { - set <- names(crossValidationArgs)[ - map_lgl(as.list(crossValidationArgs), .cvFieldIsSet) +.cvRefuseOnSumstats <- function(crossValidationParam, pipeline, cls) { + set <- names(crossValidationParam)[ + map_lgl(as.list(crossValidationParam), .cvFieldIsSet) ] if (length(set) == 0L) { return(invisible(NULL)) @@ -627,9 +661,10 @@ CrossValidationParam <- function( # A field counts as "set" when it differs from the constructor's own default, # so passing CrossValidationParam() unchanged is not mistaken for a request. +# fitFullData = TRUE is that field's default. # @noRd .cvFieldIsSet <- function(x) { - if (is.null(x)) { + if (is.null(x) || isTRUE(x)) { return(FALSE) } # numThreads = 1 and folds = 0 are the no-op defaults. @@ -648,10 +683,14 @@ CrossValidationParam <- function( # two pipelines disagreed on what an unspecified `cvFolds` meant; converging # on "off unless asked" makes one bundle mean one thing. The knock-on is that # the SR-TWAS ensemble, which needs out-of-fold predictions, no longer runs by -# default -- so `ensemble` defaults to FALSE too, and asking for an ensemble +# default -- so `EnsembleParam(enabled =)` defaults to FALSE too, and asking +# for an ensemble # without folds is an error rather than a silently missing row. # -# Two of the five fields are honoured by twasWeightsPipeline() only, and are +# `fitFullData` means the same thing in both pipelines: keep only the +# cross-validation results, skipping the full-data fit. +# +# Two of the six fields are honoured by twasWeightsPipeline() only, and are # IGNORED rather than rejected by fineMappingPipeline() -- one bundle the # caller can hand to either pipeline without rewriting it: # diff --git a/R/ctwasPipeline.R b/R/ctwasPipeline.R index f4b0599e6..e095f8bc2 100644 --- a/R/ctwasPipeline.R +++ b/R/ctwasPipeline.R @@ -158,21 +158,19 @@ BoundaryMergeParam <- function( # in the messages are the pipeline's own, which drop the `Args` suffix. # @noRd .ctwasAssertBundles <- function( - ctwasPriorArgs, - variantPruningArgs, - boundaryMergeArgs, + ctwasPriorParam, + variantPruningParam, + boundaryMergeParam, methodArgs ) { - .assertMethodParam(ctwasPriorArgs, "CtwasPriorParam", "ctwasPrior") + .assertMethodParam(ctwasPriorParam, "CtwasPriorParam") .assertMethodParam( - variantPruningArgs, - "VariantPruningParam", - "variantPruning" + variantPruningParam, + "VariantPruningParam" ) .assertMethodParam( - boundaryMergeArgs, - "BoundaryMergeParam", - "boundaryMerge" + boundaryMergeParam, + "BoundaryMergeParam" ) .assertMethodOptions(methodArgs, "CtwasOptions", "methodArgs") } @@ -180,7 +178,7 @@ BoundaryMergeParam <- function( #' @title Causal TWAS Pipeline (cTWAS, multi LD block) #' @description Pipeline that hands a per-block set of #' \code{\link{GwasSumStats}} of GWAS Z-scores together with the matching -#' per-block per-gene TWAS weights and LD sketches to +#' per-block per-gene TWAS weights and LD references to #' \code{ctwas::ctwas_sumstats}, producing per-gene posterior inclusion #' probabilities for causal genes. Optionally accepts a precomputed TWAS-Z #' \code{GRanges} from \code{\link{causalInferencePipeline}} as the @@ -191,18 +189,28 @@ BoundaryMergeParam <- function( #' \code{blockId} column -- build it with #' \code{loadGwasSumStatsFromManifest(..., ldBlocks = )}. Per-block #' \code{region_info}, \code{LD_map}, and \code{snp_map} entries are built -#' automatically from the LD sketch and concatenated before the call to +#' automatically from the LD reference and concatenated before the call to #' \code{ctwas::ctwas_sumstats}. A single-block input is rejected: cTWAS's EM #' cannot converge on a single region, so callers must supply at least two #' blocks. #' -#' @section LD-sketch compatibility check: Per block: -#' \code{ldSketch(twasWeights)} (when non-NULL) must come from the same -#' reference panel as \code{ldSketch(gwasSumStats)} --- same samples, same -#' allele orientation on the shared variants. The two need NOT carry the same -#' variants; a partial overlap, which is what QC-ing the two sides separately -#' produces, only warns. A different sample set, a swapped A1/A2 on a shared -#' variant, or no shared variant at all is a hard error. +#' @section cTWAS's log: cTWAS narrates each of its steps through the +#' \code{logging} package, which writes to the console with \code{cat()}, +#' out of reach of \code{suppressMessages()}. The pipeline keeps that +#' narration off the console, cTWAS's warnings excepted. To keep the full +#' log, give a step a log file through its options, e.g. +#' \code{CtwasEstParamOptions(logfile = "est_param.log")}. +#' +#' @section LD reference compatibility check: Per block: +#' \code{ldReference(twasWeights)} (when non-NULL) must be the same LD +#' reference as \code{ldReference(gwasSumStats)}. +#' The two must be the same kind of reference. Two genotype panels must +#' share their samples and allele orientation; two \code{LdMatrix} objects +#' must agree on the LD they share; two \code{GenotypeMixture} objects must +#' average the same panels with the same weights. The two need NOT carry the +#' same variants; a partial overlap, which is what QC-ing the two sides +#' separately produces, only warns. A mismatch of any of those, or no shared +#' variant at all, is a hard error. #' #' @param gwasSumStats A \code{\link{GwasSumStats}} whose elements are LD #' blocks (at least two), keyed by its \code{blockId} column, with @@ -242,17 +250,18 @@ BoundaryMergeParam <- function( #' fine-mapping. Default \code{5}. Pass-through to #' \code{ctwas::ctwas_sumstats}. #' @param numThreads Number of cores. Default \code{1}. -#' @param ctwasPriorArgs The EM stage that estimates cTWAS's group priors, built -#' with \code{\link{CtwasPriorParam}}: \code{thin}, \code{niterPrefit}, -#' \code{niter}, \code{varStructure} and \code{fallbackToPrefit}. Handed -#' whole to \code{\link{estCtwasGroupPriors}}. -#' @param variantPruningArgs Which variants survive into each gene's weight +#' @param ctwasPriorParam The EM stage that estimates cTWAS's group priors, +#' built with \code{\link{CtwasPriorParam}}: \code{thin}, +#' \code{niterPrefit}, \code{niter}, \code{varStructure} and +#' \code{fallbackToPrefit}. Handed whole to +#' \code{\link{estCtwasGroupPriors}}. +#' @param variantPruningParam Which variants survive into each gene's weight #' matrix, built with \code{\link{VariantPruningParam}}: #' \code{weightCutoff}, \code{csMinCor}, \code{pipRescue} and #' \code{maxVariants}. Handed whole to #' \code{\link{assembleCtwasInputs}}. The \code{csMinCor} / #' \code{pipRescue} rescues need a \code{fineMappingResult}. -#' @param boundaryMergeArgs Whether a high-PIP gene straddling an LD-block +#' @param boundaryMergeParam Whether a high-PIP gene straddling an LD-block #' boundary has its regions merged and re-fine-mapped, built with #' \code{\link{BoundaryMergeParam}}: \code{enabled} (default #' \code{FALSE}), \code{pipThreshold}, \code{filterCs} and @@ -291,12 +300,13 @@ BoundaryMergeParam <- function( #' IRanges::IRanges(c(10000000, 15000001), c(15000000, 19000000)), #' blockId = c("chr22_1", "chr22_2")) #' gss <- loadGwasSumStatsFromManifest(manifest = mani, genome = "hg38", -#' ldSketch = ldStem, region = "chr22:10000000-19000000", ldBlocks = blocks) +#' ldReference = ldStem, region = "chr22:10000000-19000000", +#' ldBlocks = blocks) #' gwasByRegion <- summaryStatsQc(gss, #' panelFilterParam = PanelFilterParam(mafCutoff = 0.0025)) #' ctwasPipeline(gwasSumStats = gwasByRegion, #' twasWeights = list(ctwasWeightsExample), -#' ctwasPrior = CtwasPriorParam(thin = 1, niterPrefit = 3, niter = 10, +#' ctwasPriorParam = CtwasPriorParam(thin = 1, niterPrefit = 3, niter = 10, #' fallbackToPrefit = TRUE), #' methodArgs = CtwasOptions( #' regionData = CtwasRegionDataOptions(min_group_size = 1), @@ -313,16 +323,16 @@ ctwasPipeline <- function( method = NULL, maxNumSingleEffects = 5L, numThreads = 1L, - ctwasPriorArgs = CtwasPriorParam(), - variantPruningArgs = VariantPruningParam(), - boundaryMergeArgs = BoundaryMergeParam(), + ctwasPriorParam = CtwasPriorParam(), + variantPruningParam = VariantPruningParam(), + boundaryMergeParam = BoundaryMergeParam(), keepSnps = FALSE, methodArgs = CtwasOptions() ) { .ctwasAssertBundles( - ctwasPriorArgs, - variantPruningArgs, - boundaryMergeArgs, + ctwasPriorParam, + variantPruningParam, + boundaryMergeParam, methodArgs ) .ctwasRequireNamedLists(gwasSumStats, twasWeights) @@ -335,11 +345,11 @@ ctwasPipeline <- function( twasWeights = twasWeights, twasZ = twasZ, fineMappingResult = fineMappingResult, - variantPruningArgs = variantPruningArgs, - ctwasPriorArgs = ctwasPriorArgs, + variantPruningParam = variantPruningParam, + ctwasPriorParam = ctwasPriorParam, numThreads = numThreads, maxNumSingleEffects = maxNumSingleEffects, - boundaryMergeArgs = boundaryMergeArgs, + boundaryMergeParam = boundaryMergeParam, gwasStudy = gwasStudy, keepSnps = keepSnps, methodArgs = methodArgs @@ -362,15 +372,15 @@ ctwasPipeline <- function( # @noRd .ctwasRunStages <- function( inputs, - ctwasPriorArgs, - boundaryMergeArgs, + ctwasPriorParam, + boundaryMergeParam, maxNumSingleEffects, numThreads, methodArgs ) { est <- estCtwasGroupPriors( inputs, - ctwasPriorArgs = ctwasPriorArgs, + ctwasPriorParam = ctwasPriorParam, numThreads = numThreads, methodArgs = methodArgs ) @@ -385,12 +395,12 @@ ctwasPipeline <- function( numThreads = numThreads, methodArgs = methodArgs ) - if (!isTRUE(boundaryMergeArgs$enabled)) { + if (!isTRUE(boundaryMergeParam$enabled)) { return(finemap) } .ctwasMaybeMerge( finemap, - boundaryMergeArgs = boundaryMergeArgs, + boundaryMergeParam = boundaryMergeParam, maxNumSingleEffects = maxNumSingleEffects, numThreads = numThreads, methodArgs = methodArgs @@ -407,11 +417,11 @@ ctwasPipeline <- function( twasWeights, twasZ, fineMappingResult, - variantPruningArgs, - ctwasPriorArgs, + variantPruningParam, + ctwasPriorParam, numThreads, maxNumSingleEffects, - boundaryMergeArgs, + boundaryMergeParam, gwasStudy, keepSnps, methodArgs @@ -422,12 +432,12 @@ ctwasPipeline <- function( twasZ = twasZ, fineMappingResult = fineMappingResult, method = m, - variantPruningArgs = variantPruningArgs + variantPruningParam = variantPruningParam ) merged <- .ctwasRunStages( inputs, - ctwasPriorArgs = ctwasPriorArgs, - boundaryMergeArgs = boundaryMergeArgs, + ctwasPriorParam = ctwasPriorParam, + boundaryMergeParam = boundaryMergeParam, maxNumSingleEffects = maxNumSingleEffects, numThreads = numThreads, methodArgs = methodArgs @@ -445,15 +455,15 @@ ctwasPipeline <- function( # @noRd .ctwasMaybeMerge <- function( posteriors, - boundaryMergeArgs, + boundaryMergeParam, maxNumSingleEffects, numThreads, methodArgs ) { # The bundle's terminal; mergeCtwasBoundaryRegions() takes scalars. - mergePipThresh <- boundaryMergeArgs$pipThreshold - mergeFilterCs <- boundaryMergeArgs$filterCs - mergeMaxSNP <- boundaryMergeArgs$maxSnp + mergePipThresh <- boundaryMergeParam$pipThreshold + mergeFilterCs <- boundaryMergeParam$filterCs + mergeMaxSNP <- boundaryMergeParam$maxSnp # methodArgs stays a record all the way down: mergeCtwasBoundaryRegions # takes one, and c()-ing it into an argument list would append the S4 # object as a single element rather than splice its entries. @@ -499,7 +509,8 @@ ctwasPipeline <- function( #' IRanges::IRanges(c(10000000, 15000001), c(15000000, 19000000)), #' blockId = c("chr22_1", "chr22_2")) #' gss <- loadGwasSumStatsFromManifest(manifest = mani, genome = "hg38", -#' ldSketch = ldStem, region = "chr22:10000000-19000000", ldBlocks = blocks) +#' ldReference = ldStem, region = "chr22:10000000-19000000", +#' ldBlocks = blocks) #' gwasByRegion <- summaryStatsQc(gss, #' panelFilterParam = PanelFilterParam(mafCutoff = 0.0025)) #' assembleCtwasInputs(gwasSumStats = gwasByRegion, @@ -511,18 +522,17 @@ assembleCtwasInputs <- function( twasZ = NULL, fineMappingResult = NULL, method = NULL, - variantPruningArgs = VariantPruningParam() + variantPruningParam = VariantPruningParam() ) { .assertMethodParam( - variantPruningArgs, - "VariantPruningParam", - "variantPruning" + variantPruningParam, + "VariantPruningParam" ) # The bundle's terminal: .ctwasBuildWeights and below take scalars. - twasWeightCutoff <- variantPruningArgs$weightCutoff - csMinCor <- variantPruningArgs$csMinCor - minPipCutoff <- variantPruningArgs$pipRescue - maxNumVariants <- variantPruningArgs$maxVariants + twasWeightCutoff <- variantPruningParam$weightCutoff + csMinCor <- variantPruningParam$csMinCor + minPipCutoff <- variantPruningParam$pipRescue + maxNumVariants <- variantPruningParam$maxVariants .ctwasValidateGwasList(gwasSumStats) globalPanelInfo <- .ctwasGlobalPanelInfo(gwasSumStats) gwasSumStats <- .ctwasGwasByBlock(gwasSumStats) @@ -618,8 +628,8 @@ assembleCtwasInputs <- function( } # One single-element GwasSumStats per LD block, keyed by blockId -- the shape -# the two-pass assembly consumes. The collection's own ldSketch rides along on -# each subset, so per-region LD lookups are unchanged. +# the two-pass assembly consumes. The collection's own ldReference rides along +# on each subset, so per-region LD lookups are unchanged. # @noRd .ctwasGwasByBlock <- function(gwasSumStats) { set_names( @@ -629,7 +639,7 @@ assembleCtwasInputs <- function( } # One block's slice of the collection. `[` carries the collection-level -# ldSketch through verbatim, and combineGwasSumStats() deliberately UNIONS +# ldReference through verbatim, and combineGwasSumStats() deliberately UNIONS # the per-piece panels, so without narrowing here every block references the # whole chromosome and its LD panel would cover all of it (a # chr19-wide panel runs to ~155 GB). Narrowed to the block's own variants @@ -637,13 +647,13 @@ assembleCtwasInputs <- function( # @noRd .ctwasPickBlock <- function(i, x) { block <- x[i] - sketch <- ldSketch(block) + sketch <- ldReference(block) if (is.null(sketch)) { return(block) } methods::initialize( block, - ldSketch = .subsetSketchToIds(sketch, as.list(block)) + ldReference = .subsetLdRefToIds(sketch, as.list(block)) ) } @@ -722,13 +732,6 @@ assembleCtwasInputs <- function( } } -# First pass: cache LD panels + build z_snp / region_info / snp_map per region. -# We need the union of GWAS variant ids ACROSS all blocks before filtering each -# per-block TwasWeights (a gene's weight variants can straddle adjacent blocks). -# Returns list(ldPanelsByRegion, zSnpPieces, regionInfoPieces, snpMap, -# ldFileByRegion). -# @noRd -# One region's GWAS LD sketch, checked against the region's weights. # The ctwas-shaped snpInfo for the whole collection's panel, captured BEFORE # .ctwasGwasByBlock() narrows each block's sketch to its own variants. A # gene's cis SPAN has to cover every block it reaches or @@ -739,26 +742,27 @@ assembleCtwasInputs <- function( # that case with its own message, so this must not pre-empt it. # @noRd .ctwasGlobalPanelInfo <- function(gwasSumStats) { - sketch <- ldSketch(gwasSumStats) + sketch <- ldReference(gwasSumStats) if (is.null(sketch)) { return(NULL) } .ctwasSnpInfoForBlock(sketch) } +# One region's GWAS LD sketch, checked against the region's weights. # @noRd .ctwasRegionGwasLd <- function(rid, gwasSumStats, twasWeights) { - gwasLd <- ldSketch(gwasSumStats[[rid]]) + gwasLd <- ldReference(gwasSumStats[[rid]]) if (is.null(gwasLd)) { msg <- glue( "ctwasPipeline: GwasSumStats for region '{rid}' carries no ", - "ldSketch (ldSketch = NULL); cTWAS requires an LD reference." + "ldReference (ldReference = NULL); cTWAS requires an LD reference." ) abort(msg) } tw <- twasWeights[[rid]] if (!is.null(tw)) { - .ctwasRequireMatchingLdSketches(ldSketch(tw), gwasLd) + .ctwasRequireMatchingLdRefs(ldReference(tw), gwasLd) } gwasLd } @@ -935,7 +939,11 @@ assembleCtwasInputs <- function( ) list( z_snp = zSnp, - z_gene = if (!is.null(twasZ)) .ctwasBuildZGene(twasZ) else NULL, + z_gene = if (!is.null(twasZ)) { + .ctwasBuildZGene(twasZ) + } else { + .ctwasGeneZ(weightsList, zSnp) + }, weights = weightsList, region_info = regionInfo, snp_map = fp$snpMap, @@ -946,6 +954,11 @@ assembleCtwasInputs <- function( ) } +# estCtwasGroupPriors(): CtwasPriorParam is the bundle's terminal; the EM +# helpers take its fields as plain scalars. assemble_region_data does not echo +# z_gene back, so the precomputed z_gene passed in is propagated onto the +# result (inputs$z_gene is NULL when twasZ was not supplied) so $z_gene +# resolves to the right entry. #' Estimate cTWAS group prior + prior variance #' #' @description Step 2 of the three-step \code{\link{ctwasPipeline}}: assembles @@ -955,7 +968,7 @@ assembleCtwasInputs <- function( #' \code{boundary_genes}, \code{z_gene}, and \code{param}. #' #' @param inputs A list returned by \code{\link{assembleCtwasInputs}}. -#' @param ctwasPriorArgs The EM settings, built with +#' @param ctwasPriorParam The EM settings, built with #' \code{\link{CtwasPriorParam}}: \code{thin} (SNP thinning when #' assembling region data), \code{niterPrefit} and \code{niter} (prefit / #' accurate EM iterations), \code{varStructure}, and @@ -971,7 +984,7 @@ assembleCtwasInputs <- function( #' @examples #' data(ctwasInputsExample) #' estCtwasGroupPriors(ctwasInputsExample, -#' ctwasPrior = CtwasPriorParam(thin = 1, niterPrefit = 3, niter = 10, +#' ctwasPriorParam = CtwasPriorParam(thin = 1, niterPrefit = 3, niter = 10, #' fallbackToPrefit = TRUE), #' methodArgs = CtwasOptions( #' regionData = CtwasRegionDataOptions(min_group_size = 1), @@ -982,17 +995,11 @@ assembleCtwasInputs <- function( #' @export estCtwasGroupPriors <- function( inputs, - ctwasPriorArgs = CtwasPriorParam(), + ctwasPriorParam = CtwasPriorParam(), numThreads = 1L, methodArgs = CtwasOptions() ) { - .assertMethodParam(ctwasPriorArgs, "CtwasPriorParam", "ctwasPrior") - # The bundle's terminal: the EM helpers below take plain scalars. - thin <- ctwasPriorArgs$thin - niterPrefit <- ctwasPriorArgs$niterPrefit - niter <- ctwasPriorArgs$niter - groupPriorVarStructure <- ctwasPriorArgs$varStructure - fallbackToPrefit <- ctwasPriorArgs$fallbackToPrefit + .assertMethodParam(ctwasPriorParam, "CtwasPriorParam") .assertMethodOptions(methodArgs, "CtwasOptions", "methodArgs") if (!requireNamespace("ctwas", quietly = TRUE)) { abort("Package 'ctwas' is required for estCtwasGroupPriors.") @@ -1003,7 +1010,7 @@ estCtwasGroupPriors <- function( regionData <- .ctwasAssembleRegionData( inputs, zGene, - thin, + ctwasPriorParam$thin, numThreads, methodArgs$regionData ) @@ -1014,17 +1021,14 @@ estCtwasGroupPriors <- function( ) paramRes <- .ctwasEstParamOrFallback( regionData, - niterPrefit, - niter, - groupPriorVarStructure, + ctwasPriorParam$niterPrefit, + ctwasPriorParam$niter, + ctwasPriorParam$varStructure, numThreads, - thin, - fallbackToPrefit, + ctwasPriorParam$thin, + ctwasPriorParam$fallbackToPrefit, methodArgs$estParam ) - # assemble_region_data does not echo z_gene back, so propagate the - # precomputed z_gene we passed in (inputs$z_gene is NULL when twasZ was not - # supplied) so $z_gene resolves to the right entry. c( list_assign(inputs, z_gene = zGene), list( @@ -1121,13 +1125,14 @@ estCtwasGroupPriors <- function( #' IRanges::IRanges(c(10000000, 15000001), c(15000000, 19000000)), #' blockId = c("chr22_1", "chr22_2")) #' gss <- loadGwasSumStatsFromManifest(manifest = mani, genome = "hg38", -#' ldSketch = ldStem, region = "chr22:10000000-19000000", ldBlocks = blocks) +#' ldReference = ldStem, region = "chr22:10000000-19000000", +#' ldBlocks = blocks) #' gwasByRegion <- summaryStatsQc(gss, #' panelFilterParam = PanelFilterParam(mafCutoff = 0.0025)) #' inp <- assembleCtwasInputs(gwasSumStats = gwasByRegion, #' twasWeights = list(ctwasWeightsExample)) #' est <- estCtwasGroupPriors(inp, -#' ctwasPrior = CtwasPriorParam(thin = 1, niterPrefit = 3, niter = 10, +#' ctwasPriorParam = CtwasPriorParam(thin = 1, niterPrefit = 3, niter = 10, #' fallbackToPrefit = TRUE), #' methodArgs = CtwasOptions( #' regionData = CtwasRegionDataOptions(min_group_size = 1), @@ -1257,7 +1262,7 @@ mergeCtwasBoundaryRegions <- function( # as a positional argument. user <- as.list(methodArgs$merge) callArgs <- c(fa$args, user[setdiff(names(user), names(fa$args))]) - res <- exec(fa$fn, !!!callArgs) + res <- .ctwasQuietly(fa$fn, callArgs) .ctwasApplyMergeResult(finemapResult, res) } @@ -1331,7 +1336,7 @@ mergeCtwasBoundaryRegions <- function( } args <- c(args, usable) } - exec(fn, !!!args) + .ctwasQuietly(fn, args) } # Run ONLY ctwas's prefit EM step against `region_data` and return a @@ -1436,9 +1441,9 @@ mergeCtwasBoundaryRegions <- function( # ============================================================================= # LD-sketch compatibility check. Thin wrapper over the shared -# `.requireMatchingLdSketches` helper (R/ld.R). -.ctwasRequireMatchingLdSketches <- function(twLd, gwasLd) { - .requireMatchingLdSketches(twLd, gwasLd, pipelineName = "ctwasPipeline") +# `.requireMatchingLdRefs` helper (R/ld.R). +.ctwasRequireMatchingLdRefs <- function(twLd, gwasLd) { + .requireMatchingLdRefs(twLd, gwasLd, pipelineName = "ctwasPipeline") } # Resolve which TWAS method's weights to feed into ctwas given a @@ -1564,16 +1569,6 @@ mergeCtwasBoundaryRegions <- function( abort(msg) } -# Parse cTWAS block-manifest keys ("chr1_1000_2000" / "chr1:1000-2000") into a -# per-key GRanges. -# -# This is cTWAS's OWN `region_id` concept, not pecotmr's: cTWAS keys its -# region_info, snp_map and per-region data by these strings, so the package has -# to be able to read them even though pecotmr's own collections now key on the -# element range instead (section 4.4). A key that carries no coordinates -# becomes a 0-width chrUn sentinel, which matches no anchor and so yields the -# documented "NA when the anchor falls in no block". -# @noRd # One block id parsed into chrom/start/end, or the unplaced sentinel when it # does not parse as a range. # @noRd @@ -1596,6 +1591,16 @@ mergeCtwasBoundaryRegions <- function( ) } +# Parse cTWAS block-manifest keys ("chr1_1000_2000" / "chr1:1000-2000") into a +# per-key GRanges. +# +# This is cTWAS's OWN `region_id` concept, not pecotmr's: cTWAS keys its +# region_info, snp_map and per-region data by these strings, so the package has +# to be able to read them even though pecotmr's own collections now key on the +# element range instead (section 4.4). A key that carries no coordinates +# becomes a 0-width chrUn sentinel, which matches no anchor and so yields the +# documented "NA when the anchor falls in no block". +# @noRd .ctwasBlockGrFromIds <- function(ids) { coords <- map(ids, .ctwasBlockCoords) GenomicRanges::GRanges( @@ -1675,16 +1680,12 @@ mergeCtwasBoundaryRegions <- function( length(g) == 0L } -# Bucket a flat weight source into a per-region named list keyed to the block -# grid, homing each gene by start(region). Each per-block sub-collection carries -# that block's GWAS LD sketch (the panel its weights are harmonized against, and -# what the downstream match-check expects). -# @noRd # The genes homed into region `rid`, carrying that region's LD sketch, or # NULL when nothing landed there. `slot<-` applied as a function returns a # copy rather than writing into the subset in place. # @noRd #' @importFrom methods slot<- +# @noRd .ctwasBucketForRegion <- function(rid, combined, home, gwasSumStats) { idx <- which(home == rid) if (length(idx) == 0L) { @@ -1692,11 +1693,16 @@ mergeCtwasBoundaryRegions <- function( } `slot<-`( combined[idx, ], - "ldSketch", - value = ldSketch(gwasSumStats[[rid]]) + "ldReference", + value = ldReference(gwasSumStats[[rid]]) ) } +# Bucket a flat weight source into a per-region named list keyed to the block +# grid, homing each gene by start(region). Each per-block sub-collection carries +# that block's GWAS LD sketch (the panel its weights are harmonized against, and +# what the downstream match-check expects). +# @noRd .ctwasBucketWeights <- function(weights, gwasSumStats) { combined <- .ctwasCombineWeightSources(weights) # Placement anchors on the GENE's own position, not on a stored analysis @@ -2074,7 +2080,7 @@ mergeCtwasBoundaryRegions <- function( return(ri) } cols <- names(ri) - if (!all(c("chrom", "start", "stop") %in% cols)) { + if (!all(is_in(c("chrom", "start", "stop"), cols))) { return(ri) } gr <- GenomicRanges::GRanges( @@ -2315,14 +2321,9 @@ asCtwasResult <- function(finemapResult, keepSnps = FALSE) { } # Row subset carries every column forward (joint* / region / ...); the old # hand-listed rebuild silently dropped them. - methods::initialize(tw[keep, ], ldSketch = ldSketch(tw)) + methods::initialize(tw[keep, ], ldReference = ldReference(tw)) } -# Build the per-variant Z data.frame ctwas expects from a GwasSumStats. -# Stacks each study row's GRanges via the shared `.entryToSumstatDf` -# helper (R/sumstatsQc.R), then projects to ctwas's column shape and -# bolts on the `study` column ctwas uses to disambiguate stacked rows. -# @noRd # Match variant ids against the LD panel's ids the way every other LD consumer # in the package does -- by (chrom, pos, allele) with ref/alt swaps tolerated -- # rather than by exact string identity. @@ -2330,7 +2331,7 @@ asCtwasResult <- function(finemapResult, keepSnps = FALSE) { # ctwas already harmonizes TWAS weights this way (see # `.ctwasHarmonizeWeights()` below). The GWAS side used plain string joins, so # one variant could be kept for the weights and dropped for the z-scores. -# `removeStrandAmbiguous = FALSE` matches `.ldFromSketchMatch()`, the shared +# `removeStrandAmbiguous = FALSE` matches `.ldFromRefMatch()`, the shared # entry point: the panel defines the frame, so an A/T variant is not discarded # merely for being palindromic. # @noRd @@ -2390,6 +2391,11 @@ asCtwasResult <- function(finemapResult, keepSnps = FALSE) { ) } +# Build the per-variant Z data.frame ctwas expects from a GwasSumStats. +# Stacks each study row's GRanges via the shared `.entryToSumstatDf` +# helper (R/sumstatsQc.R), then projects to ctwas's column shape and +# bolts on the `study` column ctwas uses to disambiguate stacked rows. +# @noRd .ctwasBuildZSnp <- function(gwasSumStats, panelIds) { pieces <- map( seq_len(nrow(gwasSumStats)), @@ -2399,10 +2405,6 @@ asCtwasResult <- function(finemapResult, keepSnps = FALSE) { .ctwasHarmonizeZToPanel(bind_rows(pieces), panelIds) } -# Derive the single-row region_info from the LD sketch's snpInfo -# (min/max BP per chromosome). The sketch is assumed to cover exactly -# one block. -# @noRd # @noRd .ctwasEntryPositions <- function(i, gss) { gr <- gss[[i]] @@ -2428,11 +2430,15 @@ asCtwasResult <- function(finemapResult, keepSnps = FALSE) { list_c(pieces) } +# The single-row region_info for block `regionId`: its chromosome and the +# [start, stop] span of the GWAS variants it holds. An empty block, or one +# spanning several chromosomes, is an error. +# @noRd .ctwasBuildSingleRegionInfo <- function(regionId, gss) { # Derive the block's [start, stop] from the GWAS variants actually in this # block (the GwasSumStats entry GRanges) -- NOT the LD sketch. When many # blocks share one whole-chromosome LD payload (the common one-file-per-chr - # layout), snpInfo(ldSketch) spans the entire chromosome, so every region + # layout), snpInfo(ldReference) spans the entire chromosome, so every region # would collapse to the same whole-chromosome [start, stop] and every SNP # would be assigned to every region (inflating SNP group_size N-fold and # diluting the gene prior to ~0). @@ -2476,9 +2482,9 @@ asCtwasResult <- function(finemapResult, keepSnps = FALSE) { # supported by the downstream cTWAS model. # @noRd .ctwasSnpInfoForBlock <- function(gwasLd) { - gr <- .ldSketchRanges(gwasLd) + gr <- .ldRefRanges(gwasLd) mc <- S4Vectors::mcols(gr) - # `.ldSketchMatchIds()`, not the raw SNP label: this id becomes the R + # `.ldRefMatchIds()`, not the raw SNP label: this id becomes the R # dimnames, the `variance` names, `panelSnps` and the weight-harmonization # reference id all at once, and every one of those is compared against a # harmonized (reference-allele) id from the GWAS or the weights. A panel @@ -2489,8 +2495,8 @@ asCtwasResult <- function(finemapResult, keepSnps = FALSE) { # (df[, "pos"] -> vector for region-bound min/max); a tibble column is a # 1-col list and errors min(). data.frame( - chrom = as.integer(.ldSketchChrom(gwasLd)), - id = .ldSketchMatchIds(gwasLd), + chrom = as.integer(.ldRefChrom(gwasLd)), + id = .ldRefMatchIds(gwasLd), pos = as.integer(GenomicRanges::start(gr)), alt = as.character(mc$A1), ref = as.character(mc$A2), @@ -2502,9 +2508,10 @@ asCtwasResult <- function(finemapResult, keepSnps = FALSE) { # from so the expensive part can be built later. Returns a list with: # snpInfo : ctwas-shaped per-block table (chrom, id, pos, alt, ref) # -- both the snp_map element and the snpinfo loader return. -# variance : named numeric vector of per-variant dosage variance from the -# LD reference, used to scale non-standardized TWAS weights to -# the correlation scale ctwas expects. +# variance : named numeric vector of per-variant genotype variance from +# the LD reference (see .ldRefVariance()), used to scale +# non-standardized TWAS weights to the correlation scale ctwas +# expects. # sketch : the block's narrowed LD sketch, retained because the n x n # correlation is deliberately NOT built here. # @@ -2513,21 +2520,16 @@ asCtwasResult <- function(finemapResult, keepSnps = FALSE) { # O(n^2) apiece on panels that are frequently never read at all. # @noRd .ctwasPanelFor <- function(gwasLd) { - # Share the validator with `.ldFromSketch()`, the entry point every other + # Share the validator with `.ldFromRef()`, the entry point every other # pipeline uses: skipping the guard meant a NULL or non-panel sketch # surfaced as "unable to find an inherited method for 'snpInfo'" # instead of saying the LD reference was missing. - .ldFromSketchValidate(gwasLd, "ctwasPipeline") + .ldFromRefValidate(gwasLd, "ctwasPipeline") snpInfo <- .ctwasSnpInfoForBlock(gwasLd) - geno <- .ldSketchDosage( - gwasLd, - seq_len(nrow(snpInfo)), - meanImpute = TRUE - ) list( snpInfo = snpInfo, variance = set_names( - apply(geno, 2, stats::var, na.rm = TRUE), + .ldRefVariance(gwasLd, seq_len(nrow(snpInfo))), snpInfo$id ), sketch = gwasLd @@ -2549,51 +2551,9 @@ asCtwasResult <- function(finemapResult, keepSnps = FALSE) { ) } -# The correlation over `vids` alone. Identical to slicing the full matrix -- -# mean imputation is per column, so correlating a subset of the dosages gives -# the same pairwise values -- at O(|vids|^2) instead of O(n^2). -# @noRd -.ctwasPanelLdSubset <- function(panel, vids) { - idx <- match(vids, panel$snpInfo$id) - if (anyNA(idx)) { - msg <- glue( - "ctwasPipeline: {sum(is.na(idx))} weight variant(s) absent from ", - "the block's LD panel." - ) - abort(msg) - } - if (!is.null(panel$R)) { - return(panel$R[vids, vids, drop = FALSE]) - } - .ctwasPanelLdFor(panel, idx, vids) -} - # @noRd .ctwasPanelLdFor <- function(panel, idx, ids) { - geno <- .ldSketchDosage(panel$sketch, idx, meanImpute = TRUE) - `dimnames<-`( - computeLd(geno, method = "sample"), - list(ids, ids) - ) -} - -# Whether to build the block's full correlation once and slice it per gene, -# or to compute one small correlation per gene. Per-gene submatrices are what -# keep a block ctwas never fine-maps from ever forming its n x n matrix, but -# g genes on |vids| variants each cost sum(|vids|^2) against n^2 for the -# whole block, so the full matrix wins once the weights are dense enough. -# Returns the full matrix in that case and NULL in the other. -# @noRd -.ctwasRWgtSource <- function(ldPanel, nVids) { - # Already built: slicing it is free, so there is nothing to weigh up. - if (!is.null(ldPanel$R)) { - return(ldPanel$R) - } - n <- as.numeric(nrow(ldPanel$snpInfo)) - if (length(nVids) == 0L || sum(as.numeric(nVids)^2) < n^2) { - return(NULL) - } - .ctwasPanelLd(ldPanel) + `dimnames<-`(.ldRefLdAt(panel$sketch, idx), list(ids, ids)) } # Harmonize TWAS weight variants against the LD reference panel. Same @@ -2729,10 +2689,12 @@ asCtwasResult <- function(finemapResult, keepSnps = FALSE) { # Build the weights list ctwas expects: keyed by per-tuple gene id, # each element a list with wgt (variants x 1 matrix; rownames = SNP id), -# R_wgt (per-gene LD submatrix), and gene metadata. ctwas's compute_gene_z -# pulls rownames(wgt) for the SNP IDs and computes z.gene = crossprod(wgt, -# z.s) / sqrt(t(wgt) %*% R_wgt %*% wgt), so wgt must be a numeric matrix -# (not a vector) and R_wgt must be the LD submatrix over the same SNPs. +# wgt_var (the weight variance w'Rw), and gene metadata. ctwas's +# compute_gene_z would compute z.gene = crossprod(wgt, z.s) / +# sqrt(t(wgt) %*% R_wgt %*% wgt) from a per-gene LD submatrix R_wgt; the +# pipeline computes the same z from wgt_var instead (.ctwasGeneZ()) and +# supplies it, so wgt must still be a numeric matrix (not a vector) but no +# weight LD matrix is formed. # # The panel variants a gene's cis span may reach. # @@ -2770,10 +2732,9 @@ asCtwasResult <- function(finemapResult, keepSnps = FALSE) { # table wherever the two overlap, so nothing about the in-block result # changes. # -# Genes are prepared in one sweep and given their `R_wgt` in a second, so -# that choice is made with every gene's fitted size in hand -- which is what -# lets a block no gene needs densely skip its n x n correlation entirely. -# .ctwasRWgtSource() picks, and says why. Variants absent from the panel are +# Genes are prepared in one sweep and given their weight variances in a +# second, so the block's LD is read once, over every gene's fitted variants +# together (.ctwasWeightVariances()). Variants absent from the panel are # dropped from that gene's row set. # @noRd .ctwasBuildWeights <- function( @@ -2812,12 +2773,10 @@ asCtwasResult <- function(finemapResult, keepSnps = FALSE) { twasWeights = twasWeights, ctx = ctx )) - fullR <- .ctwasRWgtSource(ldPanel, map_int(prepared, .ctwasPreparedSize)) - genes <- map( + genes <- map2( prepared, + .ctwasWeightVariances(ldPanel, prepared), .ctwasGeneEntryFor, - ldPanel = ldPanel, - fullR = fullR, spanInfo = spanInfo ) # Later genes overwrite an earlier one sharing a key, which is what the @@ -2913,19 +2872,23 @@ asCtwasResult <- function(finemapResult, keepSnps = FALSE) { if (anyNA(varLookup)) { msg <- glue( ".ctwasBuildWeights: missing genotype variance for ", - "{sum(is.na(varLookup))} variant(s) in the LD panel." + "{sum(is.na(varLookup))} variant(s) in the LD panel; an LdMatrix ", + "needs an `AF` column to scale non-standardized weights." ) abort(msg) } renormalized * sqrt(varLookup) } -# The ctwas per-gene weight entry (weight matrix, LD submatrix, chrom/BP span, -# plus identity metadata). +# The ctwas per-gene weight entry (weight matrix, weight variance w'Rw, +# chrom/BP span, plus identity metadata). ctwas would read the weights' LD +# submatrix (R_wgt) only to compute the gene z (compute_gene_z); the pipeline +# supplies that z itself (.ctwasGeneZ()), so the entry carries the scalar +# w'Rw instead. # # `spanVids` is the variant set the chrom/p0/p1 span is measured over, and it is # deliberately allowed to be WIDER than the fitted `vids`: ctwas fine-maps one -# region at a time, so `wgt` / `R_wgt` must stay inside that region, while +# region at a time, so `wgt` must stay inside that region, while # `ctwas::get_boundary_genes` reads p0/p1 to decide which genes straddle a # region boundary. Measuring the span over the fitted subset would clip a # boundary gene down to its home region and hide it from merge_regions. @@ -2933,19 +2896,19 @@ asCtwasResult <- function(finemapResult, keepSnps = FALSE) { .ctwasGeneEntry <- function( vids, w, - rWgt, + wgtVar, meta, spanVids = vids, spanInfo ) { - # Span coordinates come from the whole-panel table, while `rWgt` was + # Span coordinates come from the whole-panel table, while `wgtVar` was # computed on the block's own panel: ctwas fine-maps one region at a # time, but a boundary gene's span has to reach past it. panelInfo <- spanInfo rowIdx <- match(spanVids, panelInfo$id) list( wgt = matrix(w, ncol = 1L, dimnames = list(vids, "wgt")), - R_wgt = rWgt, + wgt_var = wgtVar, type = meta$context, context = meta$context, gene_name = meta$trait, @@ -2984,7 +2947,7 @@ asCtwasResult <- function(finemapResult, keepSnps = FALSE) { # @noRd .ctwasGenePrepared <- function(i, twasWeights, ctx) { # Polymorphic: the weight source may be a TwasWeights or a - # FineMappingResult, so the payload comes from the class-aware bridge. + # fine-mapping result, so the payload comes from the class-aware bridge. parts <- .rowParts(twasWeights, i) aligned <- .ctwasAlignGeneWeights(parts, ctx$refVariants, ctx$panelSnps) if (is.null(aligned)) { @@ -3021,9 +2984,8 @@ asCtwasResult <- function(finemapResult, keepSnps = FALSE) { if (!any(inRegion)) { return(NULL) } - # No LD yet. R_wgt is built in a second sweep, once every gene's fitted - # size is known and the block can choose between forming one full - # correlation and one small correlation per gene. + # No LD yet: the weight variances come in a second sweep, from one read + # of the block's LD over every gene's fitted variants together. list( key = meta$key, vids = kept$vids[inRegion], @@ -3033,27 +2995,15 @@ asCtwasResult <- function(finemapResult, keepSnps = FALSE) { ) } +# One prepared gene's ctwas entry, given its weight variance w'Rw. # @noRd -.ctwasPreparedSize <- function(g) { - length(g$vids) -} - -# One prepared gene's ctwas entry. `fullR` is the block's correlation when -# .ctwasRWgtSource() chose to form it, and NULL when each gene computes its -# own small one. -# @noRd -.ctwasGeneEntryFor <- function(g, ldPanel, fullR, spanInfo) { - rWgt <- if (is.null(fullR)) { - .ctwasPanelLdSubset(ldPanel, g$vids) - } else { - fullR[g$vids, g$vids, drop = FALSE] - } +.ctwasGeneEntryFor <- function(g, wgtVar, spanInfo) { list( key = g$key, entry = .ctwasGeneEntry( g$vids, g$w, - rWgt, + wgtVar, g$meta, spanVids = g$spanVids, spanInfo = spanInfo @@ -3061,6 +3011,102 @@ asCtwasResult <- function(finemapResult, keepSnps = FALSE) { ) } +# Each prepared gene's weight variance w'Rw, from one read of the block's LD +# over the union of the genes' weight variants. ctwas reads a gene's weight +# LD only for this quadratic form (compute_gene_z), so the pipeline computes +# the gene z itself (.ctwasGeneZ()) and no per-gene or block-wide LD matrix +# is ever formed for it. +# @noRd +.ctwasWeightVariances <- function(ldPanel, prepared) { + if (length(prepared) == 0L) { + return(numeric(0)) + } + vids <- unique(list_c(map(prepared, "vids"))) + ld <- .ctwasPanelWeightLd(ldPanel, vids) + map_dbl(prepared, .ctwasWeightVariance, ld = ld) +} + +# The block's LD over `vids`, for weight variances: list(F = ) holding a +# genotype reference's factor (.ldRefFactor()), or list(R = ) holding the +# matrix a panel already carries -- a caller who computed it, or a payload it +# travelled with -- or an LdMatrix's. +# @noRd +.ctwasPanelWeightLd <- function(ldPanel, vids) { + idx <- match(vids, ldPanel$snpInfo$id) + if (anyNA(idx)) { + msg <- glue( + "ctwasPipeline: {sum(is.na(idx))} weight variant(s) absent from ", + "the block's LD panel." + ) + abort(msg) + } + if (!is.null(ldPanel$R)) { + return(list(R = ldPanel$R[vids, vids, drop = FALSE])) + } + if (.ldIsGenotypeRef(ldPanel$sketch)) { + factor <- .ldRefFactor(ldPanel$sketch, idx) + return(list(F = `colnames<-`(factor, vids))) + } + list(R = .ctwasPanelLdFor(ldPanel, idx, vids)) +} + +# One gene's weight variance w'Rw from .ctwasPanelWeightLd()'s LD. +# @noRd +.ctwasWeightVariance <- function(g, ld) { + if (!is.null(ld$F)) { + f <- ld$F[, g$vids, drop = FALSE] + return(sum((f %*% g$w)^2) / (nrow(f) - 1)) + } + r <- ld$R[g$vids, g$vids, drop = FALSE] + as.numeric(crossprod(g$w, r %*% g$w)) +} + +# The gene z-scores ctwas::compute_gene_z() would compute, +# w'z / sqrt(w'Rw), from each entry's weights and the weight variance the +# pipeline already holds (`wgt_var`), with ctwas's columns and its rule of +# dropping a gene whose z is infinite. +# @noRd +.ctwasGeneZ <- function(weightsList, zSnp) { + if (length(weightsList) == 0L) { + return(NULL) + } + zGene <- list_rbind(map2( + weightsList, + names(weightsList), + .ctwasGeneZRow, + zSnp = zSnp + )) + infinite <- is.infinite(zGene$z) + if (any(infinite)) { + warn(glue( + "ctwasPipeline: dropped {sum(infinite)} gene(s) with an infinite ", + "z-score." + )) + } + as.data.frame(filter(zGene, !infinite)) +} + +# One gene's z row. Every weight variant must carry a GWAS z, as +# compute_gene_z() requires. +# @noRd +.ctwasGeneZRow <- function(entry, id, zSnp) { + wgt <- entry$wgt + zs <- zSnp$z[match(rownames(wgt), zSnp$id)] + if (anyNA(zs)) { + abort(glue( + "ctwasPipeline: {sum(is.na(zs))} weight variant(s) of gene ", + "'{id}' have no GWAS z-score." + )) + } + tibble( + id = id, + z = as.numeric(crossprod(wgt, zs)) / sqrt(entry$wgt_var), + type = entry$type, + context = entry$context, + group = str_c(entry$context, "|", entry$type) + ) +} + # Which of a gene's weight variants lie in the region being fine-mapped. A NULL # region set means the caller supplied none, so nothing is restricted. # @noRd @@ -3073,7 +3119,7 @@ asCtwasResult <- function(finemapResult, keepSnps = FALSE) { # Look up the per-(study, context, trait, method) PIP vector and the # 95% credible-set membership / purity for one gene from the supplied -# FineMappingResult. Returns NULL when no FineMappingResult was passed +# fine-mapping result. Returns NULL when none was passed # or no matching tuple exists. Output is a list with: # pip : named numeric vector keyed by variant_id # csMembers : list of character vectors (one per CS at 95% coverage) @@ -3118,10 +3164,6 @@ asCtwasResult <- function(finemapResult, keepSnps = FALSE) { list(pip = pip, csMembers = cs$csMembers, csPurity = cs$csPurity) } -# Per-CS membership + purity at 95% coverage from a topLoci table. cs_95 stores -# `_` where idx == 0 means "not in any CS"; cs_95_purity (when -# present) broadcasts one purity value across a CS's rows. -# @noRd # One credible set's member variants and its purity. # @noRd .ctwasCsEntry <- function(k, tl, csIdx, keepIdx) { @@ -3134,11 +3176,15 @@ asCtwasResult <- function(finemapResult, keepSnps = FALSE) { list(members = as.character(tl$variant_id)[inCs], purity = purity) } +# Per-CS membership + purity at 95% coverage from a topLoci table. cs_95 stores +# `_` where idx == 0 means "not in any CS"; cs_95_purity (when +# present) broadcasts one purity value across a CS's rows. +# @noRd .ctwasCsMembership <- function(tl) { if (!is_in("cs_95", names(tl))) { return(list(csMembers = list(), csPurity = numeric(0))) } - csIdx <- suppressWarnings(as.integer(str_remove(tl$cs_95, "^.*_"))) + csIdx <- .csLabelIndex(tl$cs_95) keepIdx <- !is.na(csIdx) & csIdx > 0L entries <- map( sort(unique(csIdx[keepIdx])), @@ -3265,9 +3311,6 @@ asCtwasResult <- function(finemapResult, keepSnps = FALSE) { ) } -# Variants that must survive the cap: members of any high-purity (>= csMinCor) -# credible set, plus any with PIP > minPipCutoff. Empty when no finemapAux. -# @noRd # Variants rescued by credible set `k`, when that set is pure enough. # @noRd .ctwasCsRescued <- function(k, finemapAux, vids, csMinCor) { @@ -3277,6 +3320,9 @@ asCtwasResult <- function(finemapResult, keepSnps = FALSE) { intersect(finemapAux$csMembers[[k]], vids) } +# Variants that must survive the cap: members of any high-purity (>= csMinCor) +# credible set, plus any with PIP > minPipCutoff. Empty when no finemapAux. +# @noRd .ctwasMustKeep <- function(vids, finemapAux, csMinCor, minPipCutoff) { if (is.null(finemapAux)) { return(character(0)) @@ -3427,8 +3473,8 @@ asCtwasResult <- function(finemapResult, keepSnps = FALSE) { ) } -# The panel cache the loader closures were built over, or NULL when the -# payload carries loaders this package did not create. +# The panel cache a payload's loader carries, or NULL when the payload +# carries loaders this package did not create. # @noRd .ctwasCachedPanels <- function(payload) { loader <- payload$LD_loader_fun @@ -3442,57 +3488,70 @@ asCtwasResult <- function(finemapResult, keepSnps = FALSE) { # `LD_loader_fun(LD_file)` per region during region_data assembly and # fine-mapping; we dispatch by `LD_file` (the same string set on # `LD_map$LD_file`) into the cached per-sketch ldPanel. +# +# ctwas passes the loader that one argument and nothing else, so the panel +# cache travels on the function object itself, as its `ldPanelsByRegion` +# attribute: .ctwasLoadRegionLd() reads it back through sys.function(), and +# .ctwasCachedPanels() reads the same attribute, so the cache has one home. # @noRd .ctwasMultiBlockLdLoader <- function(ldPanelsByRegion) { - force(ldPanelsByRegion) - fn <- function(LD_file) { - panel <- ldPanelsByRegion[[LD_file]] - if (is.null(panel)) { - msg <- glue( - "ctwasPipeline LD loader: no cached panel for ", - "LD_file = '{LD_file}'" - ) - abort(msg) - } - # Built here rather than up front: this is the only place a region's - # full LD is actually needed, and ctwas reaches it only for regions - # that survived screening. - .ctwasPanelLd(panel) - } - # Published explicitly so .ctwasCachedPanels can recover the cache from a - # loader we built, instead of looking the name up inside the closure's - # environment. - `attr<-`(fn, "ldPanelsByRegion", ldPanelsByRegion) + `attr<-`(.ctwasLoadRegionLd, "ldPanelsByRegion", ldPanelsByRegion) +} + +# The LD loader ctwas calls: region `LD_file`'s full LD, from the panel cache +# carried on this function's own attribute (see .ctwasMultiBlockLdLoader()). +# Built here rather than up front: this is the only place a region's full LD +# is actually needed, and ctwas reaches it only for regions that survived +# screening. +# @noRd +.ctwasLoadRegionLd <- function(LD_file) { + .ctwasPanelLd(.ctwasLoaderPanel(sys.function(), LD_file, "LD loader")) } # Multi-block SNP-info loader for ctwas. Mirrors the LD loader. # @noRd .ctwasMultiBlockSnpInfoLoader <- function(ldPanelsByRegion) { - force(ldPanelsByRegion) - function(LD_file) { - panel <- ldPanelsByRegion[[LD_file]] - if (is.null(panel)) { - msg <- glue( - "ctwasPipeline snpInfo loader: no cached panel for ", - "LD_file = '{LD_file}'" - ) - abort(msg) - } - panel$snpInfo + `attr<-`(.ctwasLoadRegionSnpInfo, "ldPanelsByRegion", ldPanelsByRegion) +} + +# The snpInfo loader ctwas calls, reading the same attribute. +# @noRd +.ctwasLoadRegionSnpInfo <- function(LD_file) { + .ctwasLoaderPanel(sys.function(), LD_file, "snpInfo loader")$snpInfo +} + +# The cached panel `loader` carries for `LD_file`; an error naming the token +# when its cache has none. +# @noRd +.ctwasLoaderPanel <- function(loader, LD_file, what) { + panel <- attr(loader, "ldPanelsByRegion")[[LD_file]] + if (is.null(panel)) { + msg <- glue( + "ctwasPipeline {what}: no cached panel for ", + "LD_file = '{LD_file}'" + ) + abort(msg) } + panel } -# Derive the LD_file token for ctwas from a GenotypeHandle. We point -# at the on-disk file that already backs the sketch's data, so the -# `file.exists(LD_map$LD_file)` assertion in ctwas::ctwas_sumstats -# passes WITHOUT pecotmr doing any new I/O. The token also serves as -# the dispatch key for the multi-block LD / snpInfo loaders, so two -# blocks sharing the same on-disk LD payload share one cached panel. +# The on-disk file that backs an LD panel's data, checked to exist before the +# panel builder reads dosages out of it. An LdMatrix holds its LD in memory, +# and a panel held in memory its dosages, so neither has a payload to find. # @noRd .ctwasLdPanelKey <- function(sketch) { - handle <- .ldSketchHandle(sketch) - fmt <- genotypeFormat(handle) - stem <- .genotypeReadPath(handle) + if (.ldIsMatrixRef(sketch)) { + return(invisible(NULL)) + } + if (.ldIsMixtureRef(sketch)) { + walk(.gmComponents(sketch), .ctwasLdPanelKey) + return(invisible(NULL)) + } + fmt <- .ldRefFormat(sketch) + if (is.null(fmt)) { + return(invisible(NULL)) + } + stem <- .ldRefReadPath(sketch) candidates <- switch( fmt, "plink2" = c(str_c(stem, ".pgen")), @@ -3504,8 +3563,8 @@ asCtwasResult <- function(finemapResult, keepSnps = FALSE) { hit <- candidates[file.exists(candidates)] if (length(hit) == 0L) { msg <- glue( - "ctwasPipeline: could not derive an existing LD-file token for ", - "the GenotypeHandle (format={fmt}, path={stem}). Looked for: ", + "ctwasPipeline: could not find the file behind the LD panel ", + "(format={fmt}, path={stem}). Looked for: ", "{str_flatten(candidates, ', ')}" ) abort(msg) @@ -3572,11 +3631,6 @@ asCtwasResult <- function(finemapResult, keepSnps = FALSE) { invisible(NULL) } -# Build a per-block snpInfo table restricted to variants present in the -# GwasSumStats entry. Mirrors `.ctwasSnpInfoForBlock` but restricts to -# the block's GWAS variants (intersected against the cached panel) so -# snp_map[[region_id]] is sized to the block, not the whole panel. -# @noRd # One entry's variant ids, or none when it does not carry a SNP column. # @noRd .ctwasEntrySnpIds <- function(i, gwasSumStats) { @@ -3587,6 +3641,11 @@ asCtwasResult <- function(finemapResult, keepSnps = FALSE) { as.character(mc$SNP) } +# Build a per-block snpInfo table restricted to variants present in the +# GwasSumStats entry. Mirrors `.ctwasSnpInfoForBlock` but restricts to +# the block's GWAS variants (intersected against the cached panel) so +# snp_map[[region_id]] is sized to the block, not the whole panel. +# @noRd .ctwasSnpInfoForGwasBlock <- function(gwasSumStats, panelSnpInfo) { blockIds <- unique(.ctwasConcatChr(map( seq_len(nrow(gwasSumStats)), diff --git a/R/ctwasWrapper.R b/R/ctwasWrapper.R index 7595b0a99..790151539 100644 --- a/R/ctwasWrapper.R +++ b/R/ctwasWrapper.R @@ -7,6 +7,37 @@ # forwards arguments to one of those calls. # ============================================================================= +# Run a ctwas step with its console log lowered to warnings. ctwas narrates +# every step through the logging package, whose console handler writes to +# stdout with cat(), so neither suppressMessages() nor knitr's message = FALSE +# can hide it. Only that handler is lowered: a log file asked of the step +# (`logfile=`) still receives every record. A handler the step adds is removed +# after it, as ctwas never removes the one it opens for `logfile=`, which +# would otherwise go on receiving every later step's records. +# @noRd +.ctwasQuietly <- function(fn, args) { + if (!requireNamespace("logging", quietly = TRUE)) { + return(exec(fn, !!!args)) + } + before <- names(logging::getLogger()[["handlers"]]) + on.exit(.ctwasDropAddedHandlers(before), add = TRUE) + console <- logging::getHandler("basic.stdout") + if (!is.null(console)) { + level <- console[["level"]] + logging::setLevel("WARN", console) + on.exit(logging::setLevel(level, console), add = TRUE) + } + exec(fn, !!!args) +} + +# Remove the log handlers added since `before` was taken. +# @noRd +.ctwasDropAddedHandlers <- function(before) { + added <- setdiff(names(logging::getLogger()[["handlers"]]), before) + walk(added, logging::removeHandler) + invisible(NULL) +} + # z_gene for assemble_region_data (which requires it non-NULL): use the caller's # inputs$z_gene, else compute via ctwas::compute_gene_z (mirrors # ctwas_sumstats). Routed through .ctwasInvoke so `methodArgs` reaches it -- diff --git a/R/enloc.R b/R/enloc.R index 35c6605cf..5dd1c5c74 100644 --- a/R/enloc.R +++ b/R/enloc.R @@ -30,7 +30,7 @@ NULL # The GWAS Bayes factors fastenloc recovers from fine-mapped PIPs, contrasting # against "every variant in the cluster has no effect" (controller.cc): # log10bf = log10(pip) - log10(P_gwas) + log10(1 - P_gwas) - log10(1 - cpip) -# A zero PIP is floored, as upstream does, so the log is finite. +# A zero PIP is floored, as the original fastenloc does, so the log is finite. # @noRd .enlocGwasLog10Bf <- function(gwasPip, pGwas, clusterPip) { floored <- replace(gwasPip, gwasPip == 0, 1e-10) @@ -93,8 +93,8 @@ enlocClusterProbabilities <- function( )) } bf <- 10^gwasLog10Bf - # The cluster's total eQTL posterior, capped as upstream does so that - # log(1 - clusterPip) stays finite. + # The cluster's total eQTL posterior, capped as the original fastenloc + # does so that log(1 - clusterPip) stays finite. clusterPip <- min(sum(qtlPip), 1 - 1e-8) pri <- .enlocConfigPriors(pi1e, pi1ne, p) # case 4, split by whether the GWAS hit is the causal eQTL @@ -124,7 +124,7 @@ enlocClusterProbabilities <- function( # enloc's priors from the enrichment parameters, as # fastenloc's set_enrich_params(a0, a1) computes them. `a1` is capped first, -# matching the --cap_a1 option upstream. +# matching the original fastenloc's --cap_a1 option. # @noRd .enlocPriorsFromEnrichment <- function(a0, a1, pQtl, capA1 = Inf) { a1 <- min(a1, capA1) diff --git a/R/exampleData.R b/R/exampleData.R index 3527bba39..9c12051bf 100644 --- a/R/exampleData.R +++ b/R/exampleData.R @@ -80,8 +80,8 @@ NULL #' chr22) keyed by \code{study_1} / \code{susie}, carrying the SuSiE-RSS fit #' and a per-variant table with the standard post-processing columns #' (\code{pip}, \code{logBF}, \code{cs_95} / \code{cs_70} / \code{cs_50} and -#' their purities, marginal statistics). Four credible sets. \code{ldSketch} is -#' the bundled \code{toy_canonical} genotype panel, present +#' their purities, marginal statistics). Four credible sets. \code{ldReference} +#' is the bundled \code{toy_canonical} genotype panel, present #' because \code{\link{qtlEnrichmentPipeline}} requires the GWAS collection to #' carry one as its RSS-derived marker; the LD actually used for the fit is an #' in-memory correlation matrix computed from \code{\link{eqtlRegionExample}}. @@ -264,7 +264,7 @@ NULL #' @description A pre-QC'd \code{\link{QtlSumStats}} collection covering the #' same (study, context, trait) tuple as \code{\link{qtlDatasetExample}}; #' the per-variant Z / BETA / SE / N values were computed from the synthetic -#' phenotype by per-variant linear regression. The \code{ldSketch} slot +#' phenotype by per-variant linear regression. The \code{ldReference} slot #' references the same toy PLINK1 panel. #' #' @format A \code{QtlSumStats} S4 collection with one row (study1, brain, @@ -319,7 +319,7 @@ NULL #' synthetic trait (\code{"trait1"}, N = 50,000). The signal pattern shares #' one causal variant with \code{\link{qtlSumStatsExample}} (for #' colocalization demos) and adds a second GWAS-only causal variant. -#' The \code{ldSketch} slot references the same toy PLINK1 panel used +#' The \code{ldReference} slot references the same toy PLINK1 panel used #' for the QTL example. #' #' @format A \code{GwasSumStats} S4 collection with one row (trait1) @@ -605,7 +605,10 @@ NULL #' #' @format A list with the cTWAS input components \code{z_snp}, \code{z_gene}, #' \code{weights}, \code{region_info}, \code{snp_map}, \code{LD_map}, and the -#' LD / SNP-info loader closures. +#' LD / SNP-info loader closures. Each \code{weights} entry carries the +#' weights \code{wgt} and their variance \code{wgt_var} (w'Rw), from which +#' the pipeline computes \code{z_gene}, in place of ctwas's per-gene LD +#' matrix \code{R_wgt}. #' #' @keywords data #' @@ -673,16 +676,18 @@ NULL #' @description An \code{LdEigen} reference for the eigendecomposition-based #' heritability estimators (\code{\link{estimateH2}} with #' \code{method = "lder"} or \code{"hdl"}, and -#' \code{\link{computeLdScores}}). Built by \code{\link{buildLdEigen}} from -#' the first 14 chr22 LD blocks of the de-identified \code{protocol_example} -#' reference panel, so the LD is real rather than simulated. Describes the -#' same variants as \code{\link{ldScoreExample}}, so the four estimators can -#' be compared on one reference. -#' -#' The panel behind it has \code{nSamples = 1000}. That is small enough that -#' \code{method = "hdl"}, which models reference-panel noise explicitly, -#' shrinks its estimate hard -- correct behaviour for a panel this size -#' rather than a fault. +#' \code{\link{computeLdScores}}). Built by \code{\link{buildLdEigen}} +#' over the first 14 chr22 LD blocks of the de-identified +#' \code{protocol_example} reference. Describes the same variants as +#' \code{\link{ldScoreExample}}, so the four estimators can be compared on +#' one reference. +#' +#' The LD is that of a panel of 20,000 people simulated from the +#' \code{protocol_example} panel's own LD, which is a sketch of 60 people: +#' the estimators correct for the noise in a reference's LD, and at 60 that +#' correction swamps the signal. A large simulated panel keeps the LD +#' structure real while giving the reference a realistic size +#' (\code{nSamples = 20000}); see \code{inst/scripts/build_h2_examples.R}. #' #' @format An \code{LdEigen} object (extends \code{LdStatistic}) with an #' \code{eigenList} of per-block \code{values} / \code{vectors} / @@ -706,10 +711,10 @@ NULL #' @description An \code{LdScore} reference (per-variant LD scores, weights, #' and per-block LD matrices) for the LD-score-based heritability estimators #' (\code{\link{estimateH2}} with \code{method = "sldsc"} or -#' \code{"gldsc"}). Built by \code{\link{buildLdScore}} from the first 14 -#' chr22 LD blocks of the de-identified \code{protocol_example} reference -#' panel, so the LD is real rather than simulated. Describes the same variants -#' as \code{\link{ldEigenExample}}. +#' \code{"gldsc"}). Built by \code{\link{buildLdScore}} over the first 14 +#' chr22 LD blocks of the de-identified \code{protocol_example} reference, +#' from the same simulated 20,000-person panel as +#' \code{\link{ldEigenExample}}, and describes the same variants. #' #' The per-block LD matrices are retained because \code{"gldsc"} and #' stratified \code{"sldsc"} both need them; unstratified \code{"sldsc"} diff --git a/R/fineMappingPipeline.R b/R/fineMappingPipeline.R index 8b6ffcb50..821a8c754 100644 --- a/R/fineMappingPipeline.R +++ b/R/fineMappingPipeline.R @@ -64,13 +64,13 @@ #' @section QC contract: All \code{QtlSumStats} and \code{GwasSumStats} inputs #' must have been QC'd via \code{\link{summaryStatsQc}}; the pipeline errors #' on inputs where \code{length(qcInfo(x)) == 0L}. \code{summaryStatsQc} -#' also drops variants absent from the \code{ldSketch}, so by the time +#' also drops variants absent from the \code{ldReference}, so by the time #' per-entry processing runs every variant is guaranteed to be present in the #' LD panel and a local LD matrix can be built with #' \code{extractBlockGenotypes} + \code{computeLd("sample")}. #' #' @section Optional resume cache: Supplying \code{fineMappingResult} of an -#' existing \code{FineMappingResult} skips re-fitting any \code{(study, +#' existing fine-mapping result skips re-fitting any \code{(study, #' context, trait, method)} tuple that already has a matching row; cached #' entries are merged with the newly-fit entries in the returned collection. #' @@ -82,8 +82,8 @@ #' \itemize{ #' \item TWAS weights computation (\code{twasWeights = TRUE} path): #' lives in \code{\link{twasWeightsPipeline}} now. -#' \item Filtering knobs (now \code{genotypeFilter} / -#' \code{panelFilter}, \code{ldReferenceMetaFile}): individual- +#' \item Filtering knobs (now \code{genotypeFilterParam} / +#' \code{panelFilterParam}, \code{ldReferenceMetaFile}): individual- #' level QC lives on the \code{QtlDataset} constructor; sumstat #' QC lives in \code{summaryStatsQc()}. No filtering happens #' inside this pipeline. @@ -97,10 +97,10 @@ #' \item \code{loadRssData} and explicit #' \code{ldReferenceMetaFile} arguments: the new #' \code{QtlSumStats} / \code{GwasSumStats} carry the -#' (already-QC'd) sumstats and \code{ldSketch} directly. +#' (already-QC'd) sumstats and \code{ldReference} directly. #' \item Verbose \code{methodName} suffixing (e.g. #' \code{"susie_rss_NO_QC"}, \code{"susie_rss_SLALOM_RAISS_imputed"}): -#' the method column on the returned \code{FineMappingResult} +#' the method column on the returned collection #' carries the bare token (\code{"susie"}, #' \code{"susieInf"}, \code{"mvsusie"}, ...) only. QC #' provenance is recorded on the sumstats' \code{qcInfo}. @@ -131,10 +131,21 @@ #' by the pipeline (e.g. you can override \code{model_init} #' even when fitting from a susieInf chain). #' } -#' @param contexts Optional character vector of context names. Default -#' \code{NULL} (all contexts). -#' @param traitId Optional character vector of trait names to restrict -#' processing to. +#' @param contexts Optional context selection; \code{NULL} (the default) uses +#' every context. A character vector applies to every study: a context no +#' study has is an error, and one only some studies lack is skipped for +#' those, with a warning. A list keyed by study name picks each study's +#' contexts separately (\code{list(A = "liver")}); studies it does not name +#' keep all of theirs. +#' @param traitId Optional trait selection; \code{NULL} (the default) uses +#' every trait, or those overlapping \code{region} when one is given. A +#' character vector applies to every study. A list keyed by study name +#' picks each study's traits separately (\code{list(A = "ENSG1")}), and a +#' study's entry may itself be a list keyed by context +#' (\code{list(A = list(brain = "ENSG1"))}). Studies and contexts the list +#' does not name keep all of their traits. A joint fit spanning a study's +#' contexts uses every trait selected in any of them, minus the (context, +#' trait) pairs a per-context entry leaves out. #' @param region Optional variant window for QtlDataset trait selection: a #' \code{GRanges}, a \code{"chr:start-end"} string, or a one-row data.frame #' with \code{chrom}/\code{start}/\code{end}. Mutually exclusive with @@ -172,15 +183,22 @@ #' \code{maxNumSingleEffectsGreedy} are the exception: they are seeded #' onto each SuSiE-family token's own arguments, so changing them needs a #' refit. -#' @param fineMappingResult Optional existing \code{FineMappingResult} to use as -#' a resume cache; tuples already present are not refit. -#' @param crossValidationArgs Cross-validation settings, built with +#' @param fineMappingResult Optional existing \code{QtlFineMappingResult} or +#' \code{GwasFineMappingResult} to use as a resume cache; tuples already +#' present are not refit. +#' @param crossValidationParam Cross-validation settings, built with #' \code{\link{CrossValidationParam}}: \code{folds} (default \code{0}, no #' CV), \code{numThreads} for the per-fold refits, and \code{samplePartition} #' to reuse a fixed partition across methods. When \code{folds > 1} each #' method is refit on every fold's training samples and used to predict the #' held-out ones; the partition, the out-of-fold predictions and the metrics #' are stored on each \code{FineMappingRow}'s \code{cvResult} slot. +#' \code{fitFullData = FALSE} keeps only that: each row carries its +#' \code{cvResult} and no full-data fit, variants or top loci. A +#' \code{fineMappingResult} resume cache is only reused where it carries +#' what the run asks for -- a full-data fit unless the run is +#' cross-validation-only, and a \code{cvResult} when the run +#' cross-validates -- and the other tuples are refit. #' #' Cross-validation holds out \strong{samples}, so it is not possible on #' \code{QtlSumStats} / \code{GwasSumStats} input. Those methods accept @@ -194,7 +212,7 @@ #' reproducible fits; the global RNG state is restored on return. Default #' \code{NULL} #' (no seeding). -#' @param signalScreenArgs Individual-level single-effect (SER) pre-screen +#' @param signalScreenParam Individual-level single-effect (SER) pre-screen #' applied to each residualized \code{(X, y)} block before a full fit, #' built with \code{\link{SignalScreenParam}}. A susie model with #' \code{L = 1} is fit and the block is skipped unless the chosen metric @@ -211,38 +229,45 @@ #' \code{\link{SignalScreenParam}} enforces when you build it. Unset (the #' default) screens nothing. The summary-statistics analog lives in #' \code{\link{summaryStatsQc}}. -#' @param usePCA Logical (length 1). \code{QtlDataset} only. When \code{TRUE} +#' @param usePCA Logical (length 1). Individual-level data only: a +#' \code{QtlDataset}, or the \code{QtlDataset} components of a +#' \code{MultiStudyQtlDataset}. When \code{TRUE} #' (default \code{FALSE}), each multi-trait context's PCA-reduced phenotype is #' fine-mapped with univariate SuSiE on its top principal components (ports #' the legacy \code{fsusie.R} \code{susie_on_top_pc}). Each PC becomes a #' pseudo-trait row keyed \code{trait = "topPC\{i\}"}, \code{method = #' "susie"}. Single-trait contexts have no PCA and are skipped. -#' @param nPCs Integer (length 1). \code{QtlDataset} only. Caps the number of -#' top principal components fine-mapped per context when \code{usePCA = TRUE} -#' (default \code{10}). The effective count is \code{min(nPCs, usable -#' traits)}. -#' @param jointSpecification Optional joint-fit specification (NULL by default). -#' When NULL, the pipeline runs the implicit multi-context / multi-trait -#' mvSuSiE / fSuSiE branches as before. When non-NULL, the argument is parsed -#' and validated via the joint-spec grammar documented under -#' \code{parseJointSpecification} (a character vector of axes, or a list of -#' \code{list(axes, scope)} specs); the per-spec axis dispatcher -#' implementation is in progress and a non-NULL value currently errors with an -#' informative message. See the design notes in \code{R/jointSpecification.R} -#' for the accepted grammar. +#' @param nPCs Integer (length 1). Individual-level data only. Caps the +#' number of top principal components fine-mapped per context when +#' \code{usePCA = TRUE} (default \code{10}). The effective count is +#' \code{min(nPCs, usable traits)}. +#' @param jointSpecification Optional joint-fit specification saying which +#' axes \code{mvsusie} / \code{fsusie} fit across. When NULL (the default) +#' they fit across traits if the input has two or more, else across +#' contexts. Otherwise give a character vector of axes (one spec) or a list +#' of specs. A spec is a character vector drawn from \code{"study"}, +#' \code{"context"} and \code{"trait"}, or +#' \code{list(axes = , scope = )}, where \code{scope} +#' (keys \code{study}, \code{context}, \code{trait}) limits the fit to the +#' listed values, each of which must exist in \code{data}. A list-form +#' spec always goes inside the outer list, even on its own. Other methods +#' run per (study, context, trait) as usual. The \code{"study"} axis needs +#' summary statistics: it is rejected on a \code{QtlDataset}, and on a +#' \code{MultiStudyQtlDataset} only the summary-statistics studies take +#' part. #' @section Panel filters on the RSS path: On \code{QtlSumStats} / #' \code{GwasSumStats} input there is no genotype matrix to filter, so -#' \code{panelFilter}'s \code{mafCutoff} / \code{macCutoff} / +#' \code{panelFilterParam}'s \code{mafCutoff} / \code{macCutoff} / #' \code{imissCutoff} are measured against the \strong{LD reference panel} #' instead: a variant whose panel genotypes fall below the cutoffs is #' dropped before the z-scores and LD matrix are built. The thresholds mean -#' the same thing as \code{genotypeFilter}'s on the \code{QtlDataset} path -#' (MAC is converted to a MAF equivalent and the stricter of the two +#' the same thing as \code{genotypeFilterParam}'s on the \code{QtlDataset} +#' path (MAC is converted to a MAF equivalent and the stricter of the two #' applies), so one number carries across input types. The defaults filter #' nothing. #' #' This discards \emph{observed} variants, unlike -#' \code{summaryStatsQc(imputeArgs = ...)}, which only bounds which variants +#' \code{summaryStatsQc(raissParam = ...)}, which only bounds which variants #' RAISS will impute. Use it when the panel cannot support the LD estimate a #' rare variant would need. #' @@ -266,7 +291,7 @@ #' @param naAction Character. How to handle missing values in the extracted #' phenotype/genotype data. #' @param verbose Verbosity (0 silent, 1 default). Default \code{1}. -#' @param residualizationArgs Covariate residualization settings, built with +#' @param residualizationParam Covariate residualization settings, built with #' \code{\link{ResidualizationParam}}: \code{phenotypeCovariates} and #' \code{genotypeCovariates} name which covariates to regress out #' (\code{NULL}, the default, uses every available one), and @@ -276,7 +301,8 @@ #' Only meaningful for \code{QtlDataset} / \code{MultiStudyQtlDataset} #' input. A \code{QtlSumStats} / \code{GwasSumStats} run has no covariates #' to regress out, so the bundle is \strong{ignored} there rather than -#' refused --- unlike \code{crossValidation}, which errors. Residualization +#' refused --- unlike \code{crossValidationParam}, which errors. +#' Residualization #' is on by default, so refusing a non-default value would reject the #' default bundle; CV is off by default, so a non-default value there is an #' explicit request for something the input cannot do. @@ -291,7 +317,7 @@ #' posterior #' matrices. The per-variant \code{topLoci} table is fully populated #' either way --- its per-credible-set columns are governed by -#' \code{credibleSet}'s \code{perCsColumns}, not by this. +#' \code{credibleSetParam}'s \code{perCsColumns}, not by this. #' @param susieRssParam Summary-statistics solver settings for #' \code{QtlSumStats} / \code{GwasSumStats} input, built with #' \code{\link{SusieRssParam}}: \itemize{ @@ -311,7 +337,7 @@ #' \code{R_finite} correction. \code{NULL} (default) uses susieR's #' own, except when a finite/EB mode is active (\code{serFallback} or #' \code{rMismatch != "none"}), where it falls back to the LD panel's -#' \code{nSamples(ldSketch)}. +#' \code{nSamples(ldReference)}. #' \item \code{rMismatch} (default \code{"none"}) --- LD-mismatch #' correction forwarded as \code{R_mismatch}: also \code{"eb"} or #' \code{"eb_mix"}. @@ -349,10 +375,12 @@ #' is the scale the LD correlations and z-scores behind a TWAS Z are already #' on. #' -#' @return A \code{FineMappingResult} collection keyed by \code{(study, context, -#' trait, method)}. The \code{ldSketch} slot is set automatically: \code{NULL} +#' @return A \code{QtlFineMappingResult} keyed by \code{(study, context, +#' trait, method)} -- for \code{GwasSumStats} input, a +#' \code{GwasFineMappingResult} keyed by \code{(study, method)} and range. +#' The \code{ldReference} slot is set automatically: \code{NULL} #' for individual-level (QtlDataset / all-individual-level -#' MultiStudyQtlDataset) fits, the input's \code{ldSketch} for RSS-derived +#' MultiStudyQtlDataset) fits, the input's \code{ldReference} for RSS-derived #' fits. #' @examples #' data(qtlDatasetExample) @@ -464,10 +492,6 @@ setGeneric("fineMappingPipeline", function(data, ...) { # them with a clear pointer rather than an "unknown token" error. .fmTwasOnlyTokens <- c("mrmash") -# Normalize a user-supplied `methods` argument into a character vector of -# canonical tokens. Mirrors `.twasNormalizeMethods` but the fine-mapping -# pipeline takes only a character vector (no preset strings, no list form). -# @noRd # Normalize a user-supplied `methods` argument into `(tokens, methodArgs)`. # # Accepts: * character vector c("susie", "susieInf") -> empty kwargs per token @@ -821,6 +845,37 @@ setGeneric("fineMappingPipeline", function(data, ...) { .fmrRowParts(fineMappingResult, idx[[1L]]) } +# The rows of a resume cache this run may reuse. A cross-validation-only row +# (no full-data fit) cannot stand in for a run that needs the fit, and a row +# without cross-validation cannot stand in for a run that cross-validates; +# either would come back short of what was asked for, so those tuples are +# refit instead. `cvCfg` is the run's resolved CrossValidationParam. +# @noRd +.fmCacheForRun <- function(fineMappingResult, cvCfg) { + if (!is(fineMappingResult, "FineMappingResultBase")) { + return(fineMappingResult) + } + rows <- seq_len(nrow(fineMappingResult)) + hasFit <- map_lgl( + rows, + .fmrRowHasFit, + fineMappingResult = fineMappingResult + ) + hasCv <- map_lgl(rows, .fmrRowHasCv, fineMappingResult = fineMappingResult) + usable <- (hasFit | !isTRUE(cvCfg$fitFullData)) & + (hasCv | !.cvEnabled(cvCfg)) + if (all(usable)) { + return(fineMappingResult) + } + fineMappingResult[which(usable)] +} + +# Whether row `i` of a fine-mapping result carries a full-data fit. +# @noRd +.fmrRowHasFit <- function(i, fineMappingResult) { + length(.fmrPartsVariantIds(.fmrRowParts(fineMappingResult, i))) > 0L +} + # GwasFineMappingResult cache lookup using the (study, method, range) identity. # Multi-block FMRs carry one entry per block, so the key has to include the # block -- but the block is now the element's own RANGE rather than a stored @@ -903,7 +958,7 @@ setGeneric("fineMappingPipeline", function(data, ...) { jointTraits = NULL, traitPos = NULL, region = NULL, - ldSketch = NULL, + ldReference = NULL, allowEmpty = FALSE ) { if (length(entries) == 0L && !allowEmpty) { @@ -924,7 +979,7 @@ setGeneric("fineMappingPipeline", function(data, ...) { jointTraits = jointTraits, traitPos = traitPos, region = region, - ldSketch = ldSketch + ldReference = ldReference ) } @@ -982,7 +1037,7 @@ setGeneric("fineMappingPipeline", function(data, ...) { entries, blockIds = NULL, region = NULL, - ldSketch = NULL, + ldReference = NULL, allowEmpty = FALSE ) { if (length(entries) == 0L && !allowEmpty) { @@ -998,7 +1053,7 @@ setGeneric("fineMappingPipeline", function(data, ...) { blockId = blockIds, entry = entries, region = region, - ldSketch = ldSketch + ldReference = ldReference ) } @@ -1038,11 +1093,6 @@ setGeneric("fineMappingPipeline", function(data, ...) { set_names(as.numeric(mc$AF), as.character(mc$SNP))[variantIds] } -# Block label derived from a GwasSumStats entry's GRanges. Built through the -# same helper the collection uses for its range key, so a label minted here and -# the identity of the row it ends up on agree by construction rather than by -# two formatters happening to match. -# @noRd # The block key for GWAS entry `i`: the one the caller SUPPLIED when the # GwasSumStats carries it, else derived from the entry's variant span. # @@ -1052,6 +1102,7 @@ setGeneric("fineMappingPipeline", function(data, ...) { # deriving from that element silently discarded a supplied key and replaced a # true block boundary (chr22_49355984_50799822) with the narrower span of the # variants that survived QC (chr22_49363017_50598205). +# # A supplied key is one that carries COORDINATES. GwasSumStats() always # materializes a blockId, but with no `ldBlocks` manifest and no explicit # `blockId` it falls back to the bare seqname ("chr22") -- which is the @@ -1073,9 +1124,12 @@ setGeneric("fineMappingPipeline", function(data, ...) { .fmGwasRangeKey(gr) } -# The entry's own range key. This is what the resume cache matches on -- it -# compares a cached row's DERIVED range key, so it must stay derived even when -# a block manifest supplies a wider boundary for the stored provenance. +# The entry's own range key, built through the same helper the collection uses +# for its range key, so a label minted here and the identity of the row it ends +# up on agree by construction rather than by two formatters happening to match. +# This is what the resume cache matches on -- it compares a cached row's +# DERIVED range key, so it must stay derived even when a block manifest +# supplies a wider boundary for the stored provenance. # @noRd .fmGwasRangeKey <- function(gr) { .rtlOneRangeKey(range(gr)) @@ -1130,7 +1184,7 @@ setGeneric("fineMappingPipeline", function(data, ...) { # A row whose blockId holds no coordinates still needs a range; the # chrUn sentinel marks it, matching .anchorVector()'s convention. sentinel <- GenomicRanges::GRanges("chrUn", IRanges::IRanges(1L, 1L)) - exec(c, !!!map(gs, function(g) if (is.null(g)) sentinel else g)) + exec(c, !!!map(gs, `%||%`, sentinel)) } # @noRd @@ -1189,7 +1243,7 @@ setGeneric("fineMappingPipeline", function(data, ...) { zn <- .fmExtractZn( gr, glue("fineMappingPipeline(GwasSumStats): study='{st}'"), - ldSketch = cfg$ldSketch, + ldReference = cfg$ldReference, cutoffs = .panelCutoffs(cfg$panelFilterParam) ) # Two different things that used to be one: the key the resume cache @@ -1234,7 +1288,10 @@ setGeneric("fineMappingPipeline", function(data, ...) { list( data = data, credibleSetParam = credibleSetParam, - fineMappingResult = fineMappingResult, + fineMappingResult = .fmCacheForRun( + fineMappingResult, + .cvResolve(CrossValidationParam()) + ), fitRetention = fitRetention, verbose = verbose, panelFilterParam = panelFilterParam @@ -1249,7 +1306,7 @@ setGeneric("fineMappingPipeline", function(data, ...) { # @noRd .fmRssRunCfg <- function( common, - ldSketch, + ldReference, initializeWithSusieInf, methodArgs, susieRssParam @@ -1257,7 +1314,7 @@ setGeneric("fineMappingPipeline", function(data, ...) { c( common, list( - ldSketch = ldSketch, + ldReference = ldReference, initializeWithSusieInf = initializeWithSusieInf, methodArgs = methodArgs, susieRssParam = susieRssParam @@ -1269,14 +1326,14 @@ setGeneric("fineMappingPipeline", function(data, ...) { # the block-specific arguments. The RSS analog of .fmFitXBlockP. # @noRd .fmFitRssBlockP <- function(z, zn, toRun, label, af, cfg, region = NULL) { - ldMat <- .ldFromSketch( - cfg$ldSketch, - zn$variantIds, - label = "fineMappingPipeline" - ) .fmFitRssBlock( z, - ldMat, + .fmRssLd( + cfg$ldReference, + zn$variantIds, + toRun, + cfg$initializeWithSusieInf + ), zn$n, toRun, cfg$initializeWithSusieInf, @@ -1292,6 +1349,24 @@ setGeneric("fineMappingPipeline", function(data, ...) { ) } +# The LD one block's RSS fits read, as list(R, X), in the cheapest form each +# fit accepts. A genotype reference gives its factor X (.ldFactorFromRef()): +# the plain susie model and every credible set's purity read it directly, +# never forming the p x p matrix. The matrix R is formed only when a fit has +# no factor route -- susieInf, and susieAsh, whose susie_rss low-rank paths +# fail (dev/ld-factor-audit.md) -- and is all an LdMatrix has. +# @noRd +.fmRssLd <- function(ldReference, variantIds, toRun, initializeWithSusieInf) { + label <- "fineMappingPipeline" + if (!.ldIsGenotypeRef(ldReference)) { + return(list(R = .ldFromRef(ldReference, variantIds, label = label))) + } + X <- .ldFactorFromRef(ldReference, variantIds, label = label) + chain <- .fmResolveSusieChain(toRun, initializeWithSusieInf) + needsR <- chain$runInf || is_in("susieAsh", toRun) + list(R = if (needsR) crossprod(X) / (nrow(X) - 1), X = X) +} + # Fit the still-to-run RSS tokens for one QtlSumStats entry and return one # row-record per fitted token. # @noRd @@ -1303,7 +1378,7 @@ setGeneric("fineMappingPipeline", function(data, ...) { "fineMappingPipeline(QtlSumStats): entry {i} (study='{st}', ", "context='{ctx}', trait='{tr}')" ), - ldSketch = cfg$ldSketch, + ldReference = cfg$ldReference, cutoffs = .panelCutoffs(cfg$panelFilterParam) ) ents <- .fmFitRssBlockP( @@ -1368,20 +1443,20 @@ setGeneric("fineMappingPipeline", function(data, ...) { list(rows = c(cachedRows, computed), skipped = FALSE) } -# Concatenate two same-class FineMappingResult collections row-wise, carrying -# forward every column (delegates to the generic `.rbindCollections`). +# Concatenate two same-class fine-mapping result collections row-wise, +# carrying forward every column (delegates to the generic `.rbindCollections`). # @noRd #' @importFrom checkmate assertClass -.rbindFineMappingResult <- function(a, b, ldSketch = NULL) { +.rbindFineMappingResult <- function(a, b, ldReference = NULL) { assertClass(a, "FineMappingResultBase") assertClass(b, "FineMappingResultBase") # Carry forward every column (blockId / joint* / ...) and reconcile the # collection-level slots via the shared combine; the concrete class # (QTL vs GWAS) is preserved and checked there. - .combineTupleCollections(list(a, b), ldSketch, ".rbindFineMappingResult") + .combineTupleCollections(list(a, b), ldReference, ".rbindFineMappingResult") } -#' Combine FineMappingResult collections +#' Combine fine-mapping result collections #' #' Row-bind two or more fine-mapping result collections of the SAME concrete #' class (all \code{\link{QtlFineMappingResult}} or all @@ -1391,7 +1466,7 @@ setGeneric("fineMappingPipeline", function(data, ...) { #' #' @param ... Two or more \code{FineMappingResultBase} objects, or a single #' \code{list} of them. -#' @param ldSketch Optional genotype panel (see +#' @param ldReference Optional genotype panel (see #' \code{\link{readGenotypes}}) to attach to the #' combined collection. Default \code{NULL}. Applied when combining two or #' more inputs; a single input is returned unchanged. @@ -1401,13 +1476,13 @@ setGeneric("fineMappingPipeline", function(data, ...) { #' data(qtlFineMappingExample) #' combineFineMappingResults(qtlFineMappingExample) #' @export -combineFineMappingResults <- function(..., ldSketch = NULL) { +combineFineMappingResults <- function(..., ldReference = NULL) { parts <- .asCombineList( list(...), "FineMappingResultBase", "combineFineMappingResults" ) - .combineTupleCollections(parts, ldSketch, "combineFineMappingResults") + .combineTupleCollections(parts, ldReference, "combineFineMappingResults") } @@ -1417,7 +1492,7 @@ combineFineMappingResults <- function(..., ldSketch = NULL) { # would also drop a legitimately zero-length `contexts` / `samples`. .fmResidPheno <- function( x, - residualizationArgs, + residualizationParam, contexts = NULL, traitId = NULL, naAction = NULL @@ -1431,7 +1506,7 @@ combineFineMappingResults <- function(..., ldSketch = NULL) { !!!c( list( x = x, - residualizationArgs = residualizationArgs %||% + residualizationParam = residualizationParam %||% ResidualizationParam() ), sel @@ -1441,7 +1516,7 @@ combineFineMappingResults <- function(..., ldSketch = NULL) { .fmResidGeno <- function( x, - residualizationArgs, + residualizationParam, contexts = NULL, traitId = NULL, region = NULL, @@ -1470,7 +1545,7 @@ combineFineMappingResults <- function(..., ldSketch = NULL) { !!!c( list( x = x, - residualizationArgs = residualizationArgs %||% + residualizationParam = residualizationParam %||% ResidualizationParam() ), sel @@ -1620,6 +1695,37 @@ combineFineMappingResults <- function(..., ldSketch = NULL) { } } +# `region` and `cisWindow` are alternative ways to name the variant window: +# `cisWindow` expands each trait's own coordinates, `region` is taken +# literally. A call supplying both signals a misunderstanding, so it is +# rejected. The one check behind the QtlDataset and MultiStudyQtlDataset +# methods of both fineMappingPipeline() and twasWeightsPipeline(); `label` +# names the caller in the message. +# @noRd +.rejectRegionWithCisWindow <- function(region, cisWindow, label) { + if (!is.null(region) && !is.null(cisWindow)) { + abort(glue( + "{label}: specify either `region` or `cisWindow`, not both. ", + "`cisWindow` expands each trait's own coordinates, whereas ", + "`region` is the literal variant window." + )) + } + invisible(NULL) +} + +# The MultiStudyQtlDataset inputs both pipelines resolve the same way: the +# region + cisWindow guard, the naAction choice and the joint-region spec. The +# per-call filter overrides are left to the components, which apply them to +# their own data. +# @noRd +.msResolveInputs <- function(naAction, region, cisWindow, jointRegions, label) { + .rejectRegionWithCisWindow(region, cisWindow, label) + list( + naAction = arg_match(naAction, c("drop", "impute")), + xRegions = .makeXRegions(region, jointRegions) + ) +} + # Rows of a TwasWeights whose method is mr.mash and whose identity matches # every axis the caller FIXED. A NULL axis means "do not filter on it". # @noRd @@ -1874,10 +1980,12 @@ combineFineMappingResults <- function(..., ldSketch = NULL) { allNames <- unique(list_c(map(tls, names))) csCols <- allNames[str_detect(allNames, "^cs_[0-9]+$")] topLoci <- bind_rows(.fmRenumberCs(tls, csCols)) - susieFit <- set_names( - map(entries, .fmEntrySusieFit), - str_c("region", seq_along(entries)) - ) + fits <- map(entries, .fmEntrySusieFit) + susieFit <- if (all(map_lgl(fits, is.null))) { + NULL + } else { + set_names(fits, str_c("region", seq_along(entries))) + } # Per-region CV partitions/predictions kept under region* names so a # multi-region entry retains each block's CV (NULL when no region had CV). cvList <- set_names( @@ -1893,11 +2001,6 @@ combineFineMappingResults <- function(..., ldSketch = NULL) { ) } -# Renumber per-region credible-set columns so region-local cs indices do not -# collide once concatenated: each region's indices are shifted by the running -# max of the regions before it (a sequential offset fold, per cs_ -# column). -# @noRd # The highest credible-set index table `tl` uses in column `cc`, or 0 when it # has no such column. # @noRd @@ -1945,6 +2048,11 @@ combineFineMappingResults <- function(..., ldSketch = NULL) { ) } +# Renumber per-region credible-set columns so region-local cs indices do not +# collide once concatenated: each region's indices are shifted by the running +# max of the regions before it (a sequential offset fold, per cs_ +# column). +# @noRd .fmRenumberCs <- function(tls, csCols) { # A table's offset in a column is how many credible sets the tables # before it contributed there -- a cumulative count, so it is known up @@ -1959,12 +2067,6 @@ combineFineMappingResults <- function(..., ldSketch = NULL) { ) } -# Merge per-method user kwargs onto a base arg list. `userArgs` is the -# per-token kwargs supplied by the caller (e.g. `list(L = 1, refine = -# FALSE)`); the capability table's `args` default fills in any keys the -# user did not set. User-supplied values always win over base, capability -# defaults, and chain-derived args. Returns the merged list. -# @noRd # Split a merged argument list into the target's own formals plus a # `methodArgs` remainder. Callers build one flat list (base args, capability # defaults, user overrides); this routes each name to the right place, so a @@ -1999,6 +2101,12 @@ combineFineMappingResults <- function(..., ldSketch = NULL) { exec(match.fun(as.character(d[[1L]])), !!!extra) } +# Merge per-method user kwargs onto a base arg list. `userArgs` is the +# per-token kwargs supplied by the caller (e.g. `list(L = 1, refine = +# FALSE)`); the capability table's `args` default fills in any keys the +# user did not set. User-supplied values always win over base, capability +# defaults, and chain-derived args. Returns the merged list. +# @noRd .fmMergeUserArgs <- function(baseArgs, token, userArgs = NULL) { if (is.null(userArgs)) { userArgs <- list() @@ -2028,13 +2136,13 @@ combineFineMappingResults <- function(..., ldSketch = NULL) { # GwasSumStats entry GRanges. Errors when Z or N is missing. Wraps the # shared `.entryToSumstatDf` helper (R/sumstatsQc.R). # @noRd -.fmExtractZn <- function(gr, label, ldSketch = NULL, cutoffs = NULL) { +.fmExtractZn <- function(gr, label, ldReference = NULL, cutoffs = NULL) { allDf <- .entryToSumstatDf(gr, require = c("SNP", "Z", "N"), label = label) # Filtered HERE rather than at the LD build: z, the LD matrix and the # allele frequencies are all keyed off `variantIds`, so narrowing the id # set at its source keeps them aligned by construction instead of by three # subsetting steps staying in step with one another. - keep <- .panelKeepMask(allDf$variant_id, ldSketch, cutoffs, label) + keep <- .panelKeepMask(allDf$variant_id, ldReference, cutoffs, label) df <- allDf[keep, , drop = FALSE] list( variantIds = df$variant_id, @@ -2417,6 +2525,7 @@ combineFineMappingResults <- function(..., ldSketch = NULL) { ) } + # ============================================================================= # Residualized genotype for one X window: the trait-derived cis block when # `rg` is NULL, else the explicit region. Shared by the univariate and PCA @@ -2429,7 +2538,7 @@ combineFineMappingResults <- function(..., ldSketch = NULL) { samples, data, cisWindow, - residualizationArgs + residualizationParam ) { if (is.null(rg)) { .fmResidGeno( @@ -2438,7 +2547,7 @@ combineFineMappingResults <- function(..., ldSketch = NULL) { traitId = traitId, cisWindow = cisWindow, samples = samples, - residualizationArgs = residualizationArgs + residualizationParam = residualizationParam ) } else { .fmResidGeno( @@ -2446,7 +2555,7 @@ combineFineMappingResults <- function(..., ldSketch = NULL) { contexts = ctx, region = rg, samples = samples, - residualizationArgs = residualizationArgs + residualizationParam = residualizationParam ) } } @@ -2491,14 +2600,15 @@ combineFineMappingResults <- function(..., ldSketch = NULL) { cfg$verbose, ctx, label, - cvFolds = cfg$crossValidationArgs$folds, - cvThreads = cfg$crossValidationArgs$numThreads, - samplePartition = cfg$crossValidationArgs$samplePartition, + cvFolds = cfg$crossValidationParam$folds, + cvThreads = cfg$crossValidationParam$numThreads, + samplePartition = cfg$crossValidationParam$samplePartition, af = afVec, credibleSetParam = cfg$credibleSetParam, fitRetention = cfg$fitRetention, seed = cfg$seed, - region = region + region = region, + fitFullData = cfg$crossValidationParam$fitFullData ) } @@ -2514,22 +2624,11 @@ combineFineMappingResults <- function(..., ldSketch = NULL) { rownames(Y), data = cfg$data, cisWindow = cfg$cisWindow, - residualizationArgs = cfg$residualizationArgs + residualizationParam = cfg$residualizationParam ) - common <- intersect(rownames(allX), rownames(Y)) - if (length(common) < 2L) { - abort(glue( - "fineMappingPipeline: too few shared samples between ", - "residualized X and Y for (context='{ctx}', trait='{tid}')." - )) - } - X <- allX[common, , drop = FALSE] - yBlock <- Y[common, , drop = FALSE] - y <- if (ncol(yBlock) > 1L) { - yBlock[, 1L, drop = TRUE] - } else { - drop(yBlock) - } + xy <- .fmAlignXY(allX, Y, ctx, tid) + X <- xy$X + y <- xy$y if (!.fmSerScreen(X, y, cfg$screen)) { if (cfg$verbose >= 1) { inform(glue( @@ -2559,6 +2658,26 @@ combineFineMappingResults <- function(..., ldSketch = NULL) { ) } +# Align the residualized genotype block to Y's samples; `y` is Y's first +# column. Errors when fewer than two samples are shared. +# @noRd +.fmAlignXY <- function(allX, Y, ctx, tid) { + common <- intersect(rownames(allX), rownames(Y)) + if (length(common) < 2L) { + abort(glue( + "fineMappingPipeline: too few shared samples between ", + "residualized X and Y for (context='{ctx}', trait='{tid}')." + )) + } + yBlock <- Y[common, , drop = FALSE] + y <- if (ncol(yBlock) > 1L) { + yBlock[, 1L, drop = TRUE] + } else { + drop(yBlock) + } + list(X = allX[common, , drop = FALSE], y = y) +} + # All univariate row-records for one (context, trait): cache hits, then (when # tokens remain) per-window fits merged per token. # @noRd @@ -2587,7 +2706,7 @@ combineFineMappingResults <- function(..., ldSketch = NULL) { contexts = ctx, traitId = tid, naAction = cfg$naAction, - residualizationArgs = cfg$residualizationArgs + residualizationParam = cfg$residualizationParam ) blockEntries <- map( cfg$xRegions, @@ -2614,7 +2733,7 @@ combineFineMappingResults <- function(..., ldSketch = NULL) { samples, data = cfg$data, cisWindow = cfg$cisWindow, - residualizationArgs = cfg$residualizationArgs + residualizationParam = cfg$residualizationParam ) common <- intersect(rownames(X), names(pcY)) if (length(common) < 2L) { @@ -2689,7 +2808,7 @@ combineFineMappingResults <- function(..., ldSketch = NULL) { contexts = ctx, traitId = traits, naAction = cfg$naAction, - residualizationArgs = cfg$residualizationArgs + residualizationParam = cfg$residualizationParam ) scores <- .fmTopPcScores(Yctx, cfg$nPCs) if (is.null(scores)) { @@ -2716,54 +2835,50 @@ combineFineMappingResults <- function(..., ldSketch = NULL) { # QtlDataset method # ============================================================================= -# The settings every QtlDataset joint-phase function forwards to the shared -# joint dispatcher: the common fine-mapping record plus the scope and -# TWAS-weight fields only the joint engine uses. +# The record a QtlDataset run hands both its joint dispatch and its per-tuple +# dispatch, and that a MultiStudyQtlDataset run hands each individual-level +# component's joint dispatch. One builder, so a setting added for one path +# reaches the others: the per-study joint dispatch used to assemble its own +# record and lost six settings that way. `data` is the dataset after its +# per-call filter overrides; `screen` is the resolved signal screen. # @noRd -.fmQdsJointCfg <- function( - common, +.fmIndividualJointCfg <- function( + data, contexts, traitId, + cisWindow, + xRegions, + credibleSetParam, + crossValidationParam, + residualizationParam, + screen, + fineMappingResult, + fitRetention, + verbose, + seed, mrmashPrior, dataDrivenPriorWeightsCutoff ) { - c( - common, - list( - contexts = contexts, - traitId = traitId, - mrmashPrior = mrmashPrior, - dataDrivenPriorWeightsCutoff = dataDrivenPriorWeightsCutoff - ) + cvCfg <- .cvResolve(crossValidationParam) + list( + data = data, + contexts = contexts, + traitId = traitId, + cisWindow = cisWindow, + xRegions = xRegions, + credibleSetParam = credibleSetParam, + crossValidationParam = cvCfg, + residualizationParam = residualizationParam, + screen = screen, + fineMappingResult = .fmCacheForRun(fineMappingResult, cvCfg), + fitRetention = fitRetention, + verbose = verbose, + seed = seed, + mrmashPrior = mrmashPrior, + dataDrivenPriorWeightsCutoff = dataDrivenPriorWeightsCutoff ) } -# Run the joint engine for a QtlDataset with the given spec + token set. Shared -# by the explicit-jointSpecification path and the auto-detected multivariate -# path; only the spec and token arguments differ between them. -# @noRd -.fmQdsJointDispatch <- function(jointSpec, tokens, methodArgs, cfg) { - .fmDispatchJointSpecsQtlDataset( - jointSpec, - cfg$data, - tokens, - cfg$contexts, - cfg$traitId, - cfg$cisWindow, - cfg$verbose, - methodArgs = methodArgs, - xRegions = cfg$xRegions, - mrmashPrior = cfg$mrmashPrior, - dataDrivenPriorWeightsCutoff = cfg$dataDrivenPriorWeightsCutoff, - crossValidationArgs = cfg$crossValidationArgs, - residualizationArgs = cfg$residualizationArgs, - pipCutoffToSkip = cfg$screen, - fineMappingResult = cfg$fineMappingResult, - credibleSetParam = cfg$credibleSetParam, - fitRetention = cfg$fitRetention, - seed = cfg$seed - ) -} # Resolve the signal screen, apply per-call filter overrides to a validated # copy of the dataset, and derive the X windows. Rejects the region + cisWindow @@ -2771,23 +2886,19 @@ combineFineMappingResults <- function(..., ldSketch = NULL) { # @noRd .fmQdsResolveInputs <- function( data, - signalScreenArgs, + signalScreenParam, genotypeFilterParam, region, cisWindow, jointRegions ) { - .assertMethodParam(signalScreenArgs, "SignalScreenParam", "signalScreen") - screen <- .screenResolve(signalScreenArgs) + screen <- .fmResolveScreen(signalScreenParam) data <- .qtlApplyFilterOverrides(data, genotypeFilterParam) - if (!is.null(region) && !is.null(cisWindow)) { - msg <- glue( - "fineMappingPipeline(QtlDataset): specify either `region` or ", - "`cisWindow`, not both. `cisWindow` expands each trait's own ", - "coordinates, whereas `region` is the literal variant window." - ) - abort(msg) - } + .rejectRegionWithCisWindow( + region, + cisWindow, + "fineMappingPipeline(QtlDataset)" + ) list( data = data, screen = screen, @@ -2795,8 +2906,13 @@ combineFineMappingResults <- function(..., ldSketch = NULL) { ) } -# Normalize methods, capability-check them, then hand off to the joint phase. +# The signal screen a run applies, from its SignalScreenParam. # @noRd +.fmResolveScreen <- function(signalScreenParam) { + .assertMethodParam(signalScreenParam, "SignalScreenParam") + .screenResolve(signalScreenParam) +} + # The joint-specification phase for the QtlDataset path: dispatch whatever the # spec covers, narrow the tokens the joint fits consumed, and report whether # anything is left for the per-tuple loop. `done = TRUE` means the joint fits @@ -2816,7 +2932,7 @@ combineFineMappingResults <- function(..., ldSketch = NULL) { methodArgs = norm$methodArgs )) } - jointResult <- .fmQdsJointDispatch( + jointResult <- .fmDispatchJointSpecsQtlDataset( parsedJointSpec, intersect(norm$tokens, c("mvsusie", "fsusie")), norm$methodArgs, @@ -2843,6 +2959,8 @@ combineFineMappingResults <- function(..., ldSketch = NULL) { ) } +# Normalize methods, capability-check them, then hand off to the joint phase. +# @noRd .fmQdsResolveTokens <- function( jointSpecification, methods, @@ -2873,14 +2991,19 @@ combineFineMappingResults <- function(..., ldSketch = NULL) { list(tokens = remaining, methodArgs = methodArgs[remaining]) } -# Trait ids available in one context, intersected with the requested traitId or -# overlapping the requested region (mirrors twasWeightsPipeline). +# Trait ids available in one context: the ones `traitId` selects there, else +# those overlapping the requested region (mirrors twasWeightsPipeline). A +# `traitId` that leaves this context out keeps all of its traits -- region +# picks traits only when no traitId is given at all. # @noRd .fmQdsTraitsForContext <- function(ctx, data, traitId, region) { se <- molecularTraits(data, contexts = ctx) allIds <- rownames(se) ids <- if (!is.null(traitId)) { - intersect(allIds, traitId) + intersect( + allIds, + .selectedTraits(traitId, studyName(data), ctx) %||% allIds + ) } else if (!is.null(region)) { allIds[IRanges::overlapsAny( SummarizedExperiment::rowRanges(se), @@ -2892,26 +3015,13 @@ combineFineMappingResults <- function(..., ldSketch = NULL) { ids } -# Resolve the study, the contexts to use (validating any requested ones), and -# the per-context trait lists. Returns `p` extended with study / useCtx / -# perCtxTraits / nCtx / nTraits. +# Resolve the study, the contexts to use, and the per-context trait lists. +# `contexts` / `traitId` arrive parsed (parseContexts() / parseTraitIds()), +# which is where requested contexts were checked. Returns `p` extended with +# study / useCtx / perCtxTraits / nCtx / nTraits. # @noRd .fmQdsResolveContexts <- function(data, contexts, traitId, region) { - allCtx <- contexts(data) - useCtx <- if (is.null(contexts)) { - allCtx - } else { - bad <- setdiff(contexts, allCtx) - if (length(bad) > 0L) { - badStr <- str_flatten(bad, ", ") - msg <- glue( - "fineMappingPipeline(QtlDataset): unknown context(s): ", - "{badStr}" - ) - abort(msg) - } - contexts - } + useCtx <- .selectedContexts(contexts, studyName(data)) %||% contexts(data) perCtxTraits <- set_names( map( useCtx, @@ -2965,9 +3075,6 @@ combineFineMappingResults <- function(..., ldSketch = NULL) { ) } -# Univariate + usePCA dispatch: each (context, trait) -> merged-per-token -# row-records; each multi-trait context's top PCs -> pseudo-trait rows. -# @noRd # The per-run settings the univariate / PCA row builders all need: the common # fine-mapping record plus the grid and method fields only the per-tuple # dispatch uses. The chain threads a single record instead of two dozen @@ -3002,6 +3109,9 @@ combineFineMappingResults <- function(..., ldSketch = NULL) { ) } +# Univariate + usePCA dispatch: each (context, trait) -> merged-per-token +# row-records; each multi-trait context's top PCs -> pseudo-trait rows. +# @noRd .fmQdsDispatchRows <- function(cfg) { univRows <- if (length(cfg$univTokens) > 0L) { list_flatten(map(cfg$useCtx, .fmUnivContextRows, cfg = cfg)) @@ -3032,7 +3142,7 @@ combineFineMappingResults <- function(..., ldSketch = NULL) { if (length(mvTokens) == 0L && length(fsTokens) == 0L) { return(jointResult) } - autoJoint <- .fmQdsJointDispatch( + autoJoint <- .fmDispatchJointSpecsQtlDataset( .fmSynthesizeJointSpec(nCtx, nTraits), c(mvTokens, fsTokens), methodArgs, @@ -3043,7 +3153,7 @@ combineFineMappingResults <- function(..., ldSketch = NULL) { } else if (is.null(autoJoint)) { jointResult } else { - .rbindFineMappingResult(jointResult, autoJoint, ldSketch = NULL) + .rbindFineMappingResult(jointResult, autoJoint, ldReference = NULL) } } @@ -3079,7 +3189,7 @@ combineFineMappingResults <- function(..., ldSketch = NULL) { cisWindow, length(rows) ), - ldSketch = NULL + ldReference = NULL ) } else { NULL @@ -3097,7 +3207,7 @@ combineFineMappingResults <- function(..., ldSketch = NULL) { if (is.null(perTupleResult)) { return(jointResult) } - .rbindFineMappingResult(perTupleResult, jointResult, ldSketch = NULL) + .rbindFineMappingResult(perTupleResult, jointResult, ldReference = NULL) } # Resolve the context/trait tuples, split the tokens across the univariate, @@ -3107,9 +3217,7 @@ combineFineMappingResults <- function(..., ldSketch = NULL) { # to be read together. # @noRd .fmQdsRunAndAssemble <- function( - data, - commonCfg, - jointCfg, + cfg, contexts, traitId, region, @@ -3122,14 +3230,14 @@ combineFineMappingResults <- function(..., ldSketch = NULL) { usePCA ) { ctxInfo <- .fmQdsResolveContexts( - data = data, + data = cfg$data, contexts = contexts, traitId = traitId, region = region ) split <- .fmQdsSplitTokens(tokens, ctxInfo$nCtx, ctxInfo$nTraits) rows <- .fmQdsDispatchRows(.fmQdsRunCfg( - commonCfg, + cfg, initializeWithSusieInf = initializeWithSusieInf, methodArgs = methodArgs, nPCs = nPCs, @@ -3141,12 +3249,12 @@ combineFineMappingResults <- function(..., ldSketch = NULL) { usePCA = usePCA )) .fmQdsAssemble( - data, + cfg$data, rows, region = region, - cisWindow = commonCfg$cisWindow, + cisWindow = cfg$cisWindow, .fmQdsAutoJoint( - jointCfg, + cfg, mvTokens = split$mvTokens, fsTokens = split$fsTokens, jointResult = jointResult, @@ -3162,6 +3270,13 @@ combineFineMappingResults <- function(..., ldSketch = NULL) { # on a captured environment. The susieInf chaining is applied downstream # inside .fmFitXBlock / .fmFitRssBlock (which recompute # .fmResolveSusieChain), so no chain config is threaded here. +# +# `genotypeFilterParam` is a per-call override; NULL uses the QtlDataset's +# construct-time slot value (applied lazily at extraction). The +# CrossValidationParam bundle is the user-facing form; below it the cfg +# plumbing (and the joint engine that reads it) keeps plain scalars. +# `cfg` (.fmIndividualJointCfg()) holds the settings the joint phase and the +# per-tuple dispatch share, built once so the two cannot disagree. # @noRd .fmPipelineQtlDataset <- function( data, @@ -3170,17 +3285,15 @@ combineFineMappingResults <- function(..., ldSketch = NULL) { traitId = NULL, region = NULL, cisWindow = NULL, - # Per-call genotype-filter overrides; NULL = use the QtlDataset's - # construct-time slot value (applied lazily at extraction). genotypeFilterParam = GenotypeFilterParam(), jointRegions = FALSE, jointSpecification = NULL, initializeWithSusieInf = TRUE, credibleSetParam = CredibleSetParam(), fineMappingResult = NULL, - crossValidationArgs = CrossValidationParam(), - residualizationArgs = ResidualizationParam(), - signalScreenArgs = SignalScreenParam(), + crossValidationParam = CrossValidationParam(), + residualizationParam = ResidualizationParam(), + signalScreenParam = SignalScreenParam(), usePCA = FALSE, nPCs = 10L, seed = NULL, @@ -3193,44 +3306,33 @@ combineFineMappingResults <- function(..., ldSketch = NULL) { ) { fitRetention <- arg_match(fitRetention) naAction <- arg_match(naAction, c("drop", "impute")) + contexts <- parseContexts(contexts, data) + traitId <- parseTraitIds(traitId, data) if (!is.null(seed)) { withr::local_seed(as.integer(seed)) } - # Each stage returns only the values it derives; nothing is grafted onto a - # captured environment. resolved <- .fmQdsResolveInputs( data = data, - signalScreenArgs = signalScreenArgs, + signalScreenParam = signalScreenParam, genotypeFilterParam = genotypeFilterParam, region = region, cisWindow = cisWindow, jointRegions = jointRegions ) - data <- resolved$data - screen <- resolved$screen - xRegions <- resolved$xRegions - # The bundle is the user-facing form; below this line the existing cfg - # plumbing (and the joint engine that reads it) keeps plain scalars. - cvCfg <- .cvResolve(crossValidationArgs) - # The settings the joint phase and the per-tuple dispatch share, named - # once so the two records built from it cannot disagree. - commonCfg <- list( - data = data, + cfg <- .fmIndividualJointCfg( + data = resolved$data, + contexts = contexts, + traitId = traitId, cisWindow = cisWindow, + xRegions = resolved$xRegions, credibleSetParam = credibleSetParam, - screen = screen, - xRegions = xRegions, - crossValidationArgs = cvCfg, - residualizationArgs = residualizationArgs, + crossValidationParam = crossValidationParam, + residualizationParam = residualizationParam, + screen = resolved$screen, fineMappingResult = fineMappingResult, fitRetention = fitRetention, verbose = verbose, - seed = seed - ) - jointCfg <- .fmQdsJointCfg( - commonCfg, - contexts = contexts, - traitId = traitId, + seed = seed, mrmashPrior = mrmashPrior, dataDrivenPriorWeightsCutoff = dataDrivenPriorWeightsCutoff ) @@ -3239,36 +3341,30 @@ combineFineMappingResults <- function(..., ldSketch = NULL) { methods, credibleSetParam$maxNumSingleEffects %||% 10L, credibleSetParam$maxNumSingleEffectsGreedy, - jointCfg + cfg ) - if (rt$done) { - return(.fmRecordProvenance( - rt$result, - dataType, - "individual", - .qtlScaleResiduals(data, residualizationArgs) - )) + out <- if (rt$done) { + rt$result + } else { + .fmQdsRunAndAssemble( + cfg, + contexts = contexts, + traitId = traitId, + region = region, + tokens = rt$tokens, + methodArgs = rt$methodArgs, + jointResult = rt$result, + initializeWithSusieInf = initializeWithSusieInf, + nPCs = nPCs, + naAction = naAction, + usePCA = usePCA + ) } - out <- .fmQdsRunAndAssemble( - data, - commonCfg, - jointCfg, - contexts = contexts, - traitId = traitId, - region = region, - tokens = rt$tokens, - methodArgs = rt$methodArgs, - jointResult = rt$result, - initializeWithSusieInf = initializeWithSusieInf, - nPCs = nPCs, - naAction = naAction, - usePCA = usePCA - ) .fmRecordProvenance( out, dataType, "individual", - .qtlScaleResiduals(data, residualizationArgs) + .qtlScaleResiduals(cfg$data, residualizationParam) ) } @@ -3291,9 +3387,9 @@ setMethod( # own slots do, and a collection whose studies disagree gets NA rather than a # guess. A sumstats-only collection is in standardized units regardless. # @noRd -.fmMsScaleResiduals <- function(data, residualizationArgs) { - if (!is.null(residualizationArgs$scaleResiduals)) { - return(residualizationArgs$scaleResiduals) +.fmMsScaleResiduals <- function(data, residualizationParam) { + if (!is.null(residualizationParam$scaleResiduals)) { + return(residualizationParam$scaleResiduals) } if (identical(.fmMsDataSource(data), "sumstat")) { return(TRUE) @@ -3326,6 +3422,13 @@ setMethod( if (length(m) == 0L) { return(NULL) } + # `cfg` carries the parsed selection for every study; this study gets its + # own share, and a study with none of its contexts selected sits out. + s <- studyName(qd) + contexts <- .selectedContexts(cfg$contexts, s) + if (!is.null(contexts) && length(contexts) == 0L) { + return(NULL) + } # Every setting is named. `cfg` also carries panelFilterParam and # susieRssParam, # which belong to the summary-statistics path: a study's own genotypes @@ -3337,8 +3440,8 @@ setMethod( data = qd, methods = m, jointSpecification = NULL, - contexts = cfg$contexts, - traitId = cfg$traitId, + contexts = contexts, + traitId = .studyTraitIdArg(cfg$traitId, s), region = cfg$region, cisWindow = cfg$cisWindow, jointRegions = cfg$jointRegions, @@ -3346,11 +3449,11 @@ setMethod( credibleSetParam = cfg$credibleSetParam, fineMappingResult = cfg$fineMappingResult, verbose = cfg$verbose, - crossValidationArgs = cfg$crossValidationArgs, - residualizationArgs = cfg$residualizationArgs, + crossValidationParam = cfg$crossValidationParam, + residualizationParam = cfg$residualizationParam, seed = cfg$seed, naAction = cfg$naAction, - signalScreenArgs = cfg$signalScreenArgs, + signalScreenParam = cfg$signalScreenParam, genotypeFilterParam = cfg$genotypeFilterParam, usePCA = cfg$usePCA, nPCs = cfg$nPCs, @@ -3369,17 +3472,24 @@ setMethod( if (length(m) == 0L) { return(NULL) } + # The parsed selection is applied here, to the rows, so the recursion runs + # on what it keeps with nothing left to filter -- and rows it leaves out + # are not an error when another component holds the selected tuples. + keepRows <- .sumStatsRowsSelected(ss, cfg$contexts, cfg$traitId) + if (!any(keepRows)) { + return(NULL) + } # Summary statistics carry no genotypes and no per-study region # selection: the region is already baked into the input, and there is # nothing to residualize, screen, cross-validate or PCA. `cfg` carries # those settings for the individual-level sibling and they are not # forwarded here. fineMappingPipeline( - data = ss, + data = if (all(keepRows)) ss else ss[which(keepRows)], methods = m, jointSpecification = NULL, - contexts = cfg$contexts, - traitId = cfg$traitId, + contexts = NULL, + traitId = NULL, initializeWithSusieInf = cfg$initializeWithSusieInf, credibleSetParam = cfg$credibleSetParam, fineMappingResult = cfg$fineMappingResult, @@ -3393,42 +3503,6 @@ setMethod( ) } -# Validate the naAction choice and the region + cisWindow combination, then -# derive the X windows. Mirrors .fmQdsResolveInputs, minus the filter -# overrides the components apply themselves. -# @noRd -.fmMsResolveInputs <- function(naAction, region, cisWindow, jointRegions) { - if (!is.null(region) && !is.null(cisWindow)) { - msg <- glue( - "fineMappingPipeline(MultiStudyQtlDataset): specify either ", - "`region` or `cisWindow`, not both." - ) - abort(msg) - } - list( - naAction = arg_match(naAction, c("drop", "impute")), - xRegions = .makeXRegions(region, jointRegions) - ) -} - -# Run the joint engine for a MultiStudyQtlDataset with the given spec + token -# set. -# @noRd -.fmMsJointDispatch <- function(jointSpec, tokens, methodArgs, cfg) { - .fmDispatchJointSpecsMultiStudy( - jointSpec, - cfg$data, - tokens, - cfg$contexts, - cfg$traitId, - cfg$cisWindow, - cfg$verbose, - methodArgs = methodArgs, - xRegions = cfg$xRegions, - mrmashPrior = cfg$mrmashPrior, - dataDrivenPriorWeightsCutoff = cfg$dataDrivenPriorWeightsCutoff - ) -} # The joint-specification phase for the MultiStudyQtlDataset path: dispatch # whatever the spec covers, narrow the tokens the joint fits consumed, and @@ -3447,7 +3521,7 @@ setMethod( methodArgs = norm$methodArgs )) } - jointResult <- .fmMsJointDispatch( + jointResult <- .fmDispatchJointSpecsMultiStudy( parsedJointSpec, intersect(norm$tokens, c("mvsusie", "fsusie")), norm$methodArgs, @@ -3530,6 +3604,13 @@ setMethod( # MultiStudyQtlDataset fine-mapping worker. After resolving the explicit # joint spec it routes each remaining method to the components it supports, # via the shared multi-study driver. +# +# The joint rows' provenance is recorded here; each per-study recursion +# records its own, so both sides of the driver's rbind carry the same columns. +# A sumstats-only collection is in standardized units whatever the +# residualization hatch says; otherwise the hatch decides. `jointCfg` is one +# record of the settings the joint phase and the shared dispatcher both need, +# so each names them once. # @noRd .fmPipelineMultiStudy <- function( data, @@ -3547,9 +3628,9 @@ setMethod( fineMappingResult = NULL, mrmashPrior = NULL, dataDrivenPriorWeightsCutoff = 1e-10, - crossValidationArgs = CrossValidationParam(), - residualizationArgs = ResidualizationParam(), - signalScreenArgs = SignalScreenParam(), + crossValidationParam = CrossValidationParam(), + residualizationParam = ResidualizationParam(), + signalScreenParam = SignalScreenParam(), susieRssParam = SusieRssParam(), usePCA = FALSE, nPCs = 10L, @@ -3560,23 +3641,44 @@ setMethod( dataType = NULL ) { fitRetention <- arg_match(fitRetention) - # The joint rows are recorded here; each per-study recursion records its - # own, so both sides of the driver's rbind carry the same columns. - inputs <- .fmMsResolveInputs(naAction, region, cisWindow, jointRegions) + inputs <- .msResolveInputs( + naAction, + region, + cisWindow, + jointRegions, + "fineMappingPipeline(MultiStudyQtlDataset)" + ) naAction <- inputs$naAction - # One record of the settings the joint phase and the shared dispatcher - # both need, so each names them once. - jointCfg <- list( - data = data, - contexts = contexts, - traitId = traitId, + if (!is.null(seed)) { + withr::local_seed(as.integer(seed)) + } + cfg <- list( + methods = methods, + contexts = parseContexts(contexts, data), + traitId = parseTraitIds(traitId, data), + region = region, cisWindow = cisWindow, + jointRegions = jointRegions, + initializeWithSusieInf = initializeWithSusieInf, credibleSetParam = credibleSetParam, + fineMappingResult = fineMappingResult, verbose = verbose, - xRegions = inputs$xRegions, + crossValidationParam = crossValidationParam, + residualizationParam = residualizationParam, + seed = seed, + naAction = naAction, + signalScreenParam = signalScreenParam, + genotypeFilterParam = genotypeFilterParam, + panelFilterParam = panelFilterParam, + susieRssParam = susieRssParam, + usePCA = usePCA, + nPCs = nPCs, + fitRetention = fitRetention, mrmashPrior = mrmashPrior, - dataDrivenPriorWeightsCutoff = dataDrivenPriorWeightsCutoff + dataDrivenPriorWeightsCutoff = dataDrivenPriorWeightsCutoff, + dataType = dataType ) + jointCfg <- .fmMsJointCfg(cfg, data, inputs$xRegions) rt <- .fmMsResolveTokens( jointSpecification, methods, @@ -3588,51 +3690,54 @@ setMethod( rt$result, dataType, .fmMsDataSource(data), - # A sumstats-only collection is in standardized units whatever the - # hatch says; otherwise the hatch decides. - .fmMsScaleResiduals(data, residualizationArgs) + .fmMsScaleResiduals(data, residualizationParam) ) if (rt$done) { return(jointResult) } - methods <- rt$methods .multiStudyPipelineDriver( data, jointResult, .fmPerStudy, .fmSumStats, - list( - methods = methods, - contexts = contexts, - traitId = traitId, - region = region, - cisWindow = cisWindow, - jointRegions = jointRegions, - initializeWithSusieInf = initializeWithSusieInf, - credibleSetParam = credibleSetParam, - fineMappingResult = fineMappingResult, - verbose = verbose, - crossValidationArgs = crossValidationArgs, - residualizationArgs = residualizationArgs, - seed = seed, - naAction = naAction, - signalScreenArgs = signalScreenArgs, - genotypeFilterParam = genotypeFilterParam, - panelFilterParam = panelFilterParam, - susieRssParam = susieRssParam, - usePCA = usePCA, - nPCs = nPCs, - fitRetention = fitRetention, - mrmashPrior = mrmashPrior, - dataDrivenPriorWeightsCutoff = dataDrivenPriorWeightsCutoff, - dataType = dataType - ), + list_assign(cfg, methods = rt$methods), .rbindFineMappingResult, QtlFineMappingResult, "fineMappingPipeline" ) } +# The MultiStudyQtlDataset joint record, derived from the record the +# per-component recursion receives (`cfg`): the individual-level joint record +# its components' own QtlDataset runs build, plus the two filters the +# components apply. Deriving it, rather than re-listing the settings, is what +# keeps the per-study joint fits on exactly the settings of the per-study +# fits. +# @noRd +.fmMsJointCfg <- function(cfg, data, xRegions) { + list_assign( + .fmIndividualJointCfg( + data = data, + contexts = cfg$contexts, + traitId = cfg$traitId, + cisWindow = cfg$cisWindow, + xRegions = xRegions, + credibleSetParam = cfg$credibleSetParam, + crossValidationParam = cfg$crossValidationParam, + residualizationParam = cfg$residualizationParam, + screen = .fmResolveScreen(cfg$signalScreenParam), + fineMappingResult = cfg$fineMappingResult, + fitRetention = cfg$fitRetention, + verbose = cfg$verbose, + seed = cfg$seed, + mrmashPrior = cfg$mrmashPrior, + dataDrivenPriorWeightsCutoff = cfg$dataDrivenPriorWeightsCutoff + ), + genotypeFilterParam = cfg$genotypeFilterParam, + panelFilterParam = cfg$panelFilterParam + ) +} + #' @rdname fineMappingPipeline #' @export setMethod( @@ -3667,27 +3772,6 @@ setMethod( ) } -# Run the joint engine for a QtlSumStats with the given spec + token set. -# Shared by the explicit-jointSpecification path and the auto-detected -# cross-context path; only the spec and token arguments differ between them. -# @noRd -.fmQssJointDispatch <- function(jointSpec, tokens, methodArgs, cfg) { - .fmDispatchJointSpecsQtlSumStats( - jointSpec, - cfg$data, - tokens, - cfg$contexts, - cfg$traitId, - cfg$verbose, - methodArgs = methodArgs, - mrmashPrior = cfg$mrmashPrior, - dataDrivenPriorWeightsCutoff = cfg$dataDrivenPriorWeightsCutoff, - fineMappingResult = cfg$fineMappingResult, - credibleSetParam = cfg$credibleSetParam, - fitRetention = cfg$fitRetention, - panelFilterParam = cfg$panelFilterParam %||% PanelFilterParam() - ) -} # The joint-specification phase for the QtlSumStats path: dispatch whatever # the spec covers, narrow the tokens the joint fits consumed, and report @@ -3706,7 +3790,7 @@ setMethod( methodArgs = norm$methodArgs )) } - jointResult <- .fmQssJointDispatch( + jointResult <- .fmDispatchJointSpecsQtlSumStats( parsedJointSpec, intersect(norm$tokens, "mvsusie"), norm$methodArgs, @@ -3739,23 +3823,6 @@ setMethod( # input is individual-level or summary statistics, so each constructor checks # against BOTH, taken live from the capability table rather than transcribed. -# The engine(s) a fine-mapping token forwards to, from the capability table. -# @noRd -.fmMethodCallees <- function(token) { - info <- .fineMappingMethodCapabilities[[token]] - unique(compact(list(info$individualImpl, info$sumstatImpl))) -} - -# Shared body for the per-engine constructors: pecotmr keeps no defaults of -# its own here (they are seeded per run from `L` / `Lgreedy`), so everything -# the caller gives is checked against that ONE engine and carried through. -# -# One constructor per engine, not per token. A method whose two input paths -# run different engines gets one for each: checking the union instead would -# accept a susie_rss-only name on an individual-level run and then drop it, -# and mvsusie could not be checked at all, since mvsusie_rss takes `...` and -# a union containing it accepts anything. -# @noRd # Engine arguments pecotmr supplies itself, per engine, with where the caller # sets each one instead. Keyed on the engine rather than the token because one # engine serves several tokens, and derived from what the wrappers actually @@ -3764,6 +3831,20 @@ setMethod( # caller's `SusieOptions(L = 3)` is a valid susie formal that pecotmr then # overwrites (or, on the mvsusie path, that silently overwrites pecotmr's own # X / Y). +# +# Per-engine notes: +# - mvsusie: `residual_variance` is deliberately NOT owned, though the +# pipeline does pass it: the prior's V can be NULL, compact() then drops it +# from the base, and a user value is the only source left. Refusing it would +# close the only path -- the QggOptions(nit=) mistake. +# - mvsusie_rss: `L` does not reach it, but `coverage` does: the pipeline +# threads csCoverage() into fitMvsusieRss()'s own `coverage` formal, so this +# engine takes that one entry of csHome and not the rest. +# - fsusie: only what the pipeline ACTUALLY supplies. `prior`, `max_scale` and +# `max_SNP_EM` used to be listed because this row described the retired +# fsusieWrapper(), which passed them; the pipeline calls fitFsusie() and +# never did, so refusing them closed the only path to setting them at all -- +# the same trap as `residual_variance` above. # @noRd .fmOwnedEngineArgs <- function(callee) { fromData <- "supplied from the data by the pipeline" @@ -3789,10 +3870,6 @@ setMethod( set_names(rep(fromData, 2L), c("z", "n")), csHome["coverage"] ), - # `residual_variance` is deliberately NOT owned, though the pipeline - # does pass it: the prior's V can be NULL, compact() then drops it - # from the base, and a user value is the only source left. Refusing - # it would close the only path -- the QggOptions(nit=) mistake. "mvsusieR::mvsusie" = c( set_names( rep(fromData, 3L), @@ -3800,9 +3877,6 @@ setMethod( ), csHome ), - # `L` does not reach mvsusie_rss, but `coverage` does: the pipeline - # threads csCoverage() into fitMvsusieRss()'s own `coverage` formal, - # so this engine takes that one entry of csHome and not the rest. "mvsusieR::mvsusie_rss" = c( set_names( rep(fromData, 4L), @@ -3810,12 +3884,6 @@ setMethod( ), csHome["coverage"] ), - # Only what the pipeline ACTUALLY supplies. `prior`, `max_scale` and - # `max_SNP_EM` used to be listed here because this row described the - # retired fsusieWrapper(), which passed them; the pipeline calls - # fitFsusie() and never did, so refusing them closed the only path to - # setting them at all -- the same trap the `residual_variance` note - # above records. "fsusieR::susiF" = c( set_names(rep(fromData, 3L), c("X", "Y", "pos")), c( @@ -3828,6 +3896,16 @@ setMethod( ) } +# Shared body for the per-engine constructors: pecotmr keeps no defaults of +# its own here (they are seeded per run from `L` / `Lgreedy`), so everything +# the caller gives is checked against that ONE engine and carried through. +# +# One constructor per engine, not per token. A method whose two input paths +# run different engines gets one for each: checking the union instead would +# accept a susie_rss-only name on an individual-level run and then drop it, +# and mvsusie could not be checked at all, since mvsusie_rss takes `...` and +# a union containing it accepts anything. +# @noRd .fmMethodOptions <- function(callee, label, engine, extra) { .configRefuseOwned(extra, .fmOwnedEngineArgs(callee), label) .newMethodOptions( @@ -3839,11 +3917,6 @@ setMethod( ) } -# The union constructor behind a token, for splicing a PLAIN LIST in the -# aggregator. A plain list declares no engine and the run's input class is -# not known yet, so it must stay acceptable for either path; the per-input -# check in .fmCheckMethodArgsForInput narrows it once the class is known. -# @noRd #' @rdname FineMappingMethodsParam #' @aliases FineMappingMethodsParam-class #' @exportClass FineMappingMethodsParam @@ -3927,46 +4000,6 @@ FineMappingMethodsParam <- function( !identical(inputKind, "GwasSumStats") || isTRUE(info$gwasAllowed) } -# One method's Options constructor for ONE input path, validating against -# just that path's callee. -# -# Deliberately not the union of both callees: validating against the union -# would accept a name valid on only one of them -- `susie` takes 41 -# arguments on individual data and 49 on summary statistics, sharing 37, so -# the union admits 16 names that are wrong for whichever path actually runs. -# Once the caller knows its input class there is no reason to be that -# lenient. -# @noRd -.fmTokenPathConfig <- function(token, inputKind) { - force(token) - force(inputKind) - callee <- .fmMethodCalleeFor(token, inputKind) - if (is.null(callee)) { - return(NULL) - } - function(...) { - .newMethodOptions( - callee, - defaults = list(), - extra = list(...), - label = glue("method '{token}' on {inputKind}"), - engine = token - ) - } -} - -# Every method's constructor for one input path, omitting the methods that -# do not run on it -- `fsusie` has no summary-statistics implementation, -# `ser` no individual one. -# @noRd -.fmMethodCtorsFor <- function(inputKind) { - toks <- names(.fineMappingMethodCapabilities) - compact(set_names( - map(toks, .fmTokenPathConfig, inputKind = inputKind), - toks - )) -} - #' @title Arguments For A Fine-Mapping Engine #' @description Options forwarded to one fine-mapping engine, checked #' against that engine's live formals. @@ -4051,16 +4084,7 @@ NULL studyCol <- as.character(data$study) contextCol <- as.character(data$context) traitCol <- as.character(data$trait) - byContext <- if (is.null(contexts)) { - seq_len(nrow(data)) - } else { - which(is_in(contextCol, contexts)) - } - selRows <- if (is.null(traitId)) { - byContext - } else { - byContext[is_in(traitCol[byContext], traitId)] - } + selRows <- which(.sumStatsRowsSelected(data, contexts, traitId)) if (length(selRows) == 0L) { msg <- glue( "fineMappingPipeline(QtlSumStats): no entries matched the ", @@ -4109,11 +4133,17 @@ NULL # joint) for mvsusie WITHOUT an explicit jointSpecification, merged with any # explicit-spec result the joint phase already produced. # @noRd -.fmQssAutoJoint <- function(cfg, mvTokens, methodArgs, jointResult, ldSketch) { +.fmQssAutoJoint <- function( + cfg, + mvTokens, + methodArgs, + jointResult, + ldReference +) { if (length(mvTokens) == 0L) { return(jointResult) } - autoJoint <- .fmQssJointDispatch( + autoJoint <- .fmDispatchJointSpecsQtlSumStats( list(list(axes = "context", scope = NULL)), mvTokens, methodArgs, @@ -4124,7 +4154,11 @@ NULL } else if (is.null(autoJoint)) { jointResult } else { - .rbindFineMappingResult(jointResult, autoJoint, ldSketch = ldSketch) + .rbindFineMappingResult( + jointResult, + autoJoint, + ldReference = ldReference + ) } } @@ -4135,37 +4169,12 @@ NULL # @noRd .fmQssAssemble <- function( data, - ldSketch, + ldReference, rows, nSkipped, jointResult ) { - rowContext <- map_chr(rows, "context") - rowTrait <- map_chr(rows, "trait") - perTupleResult <- if (length(rows) > 0L) { - .fmBuildQtlResult( - map_chr(rows, "study"), - rowContext, - rowTrait, - map_chr(rows, "method"), - map(rows, "entry"), - traitPos = try_fetch( - .anchorVector(data, rowContext, rowTrait, "traitPos"), - error = function(cnd) NULL - ), - region = .fmRowWindows( - data, - rowContext, - rowTrait, - NULL, - NULL, - length(rows) - ), - ldSketch = ldSketch - ) - } else { - NULL - } + perTupleResult <- .fmQssPerTupleResult(data, rows, ldReference) if (is.null(jointResult)) { if (!is.null(perTupleResult)) { return(perTupleResult) @@ -4177,7 +4186,7 @@ NULL character(0), character(0), list(), - ldSketch = ldSketch, + ldReference = ldReference, allowEmpty = TRUE )) } @@ -4188,7 +4197,43 @@ NULL if (is.null(perTupleResult)) { return(jointResult) } - .rbindFineMappingResult(perTupleResult, jointResult, ldSketch = ldSketch) + .rbindFineMappingResult( + perTupleResult, + jointResult, + ldReference = ldReference + ) +} + +# The per-tuple QtlFineMappingResult from the collected row-records, or NULL +# when there are none. Each row's region is its entry's variant span (no +# cis-window). +# @noRd +.fmQssPerTupleResult <- function(data, rows, ldReference) { + if (length(rows) == 0L) { + return(NULL) + } + rowContext <- map_chr(rows, "context") + rowTrait <- map_chr(rows, "trait") + .fmBuildQtlResult( + map_chr(rows, "study"), + rowContext, + rowTrait, + map_chr(rows, "method"), + map(rows, "entry"), + traitPos = try_fetch( + .anchorVector(data, rowContext, rowTrait, "traitPos"), + error = function(cnd) NULL + ), + region = .fmRowWindows( + data, + rowContext, + rowTrait, + NULL, + NULL, + length(rows) + ), + ldReference = ldReference + ) } # The settings the joint phase and the RSS row builders share, named once @@ -4248,6 +4293,8 @@ NULL dataType = NULL ) { .fmAssertQcd(data) + contexts <- parseContexts(contexts, data) + traitId <- parseTraitIds(traitId, data) cfgs <- .fmQssConfigs( data = data, credibleSetParam = credibleSetParam, @@ -4260,23 +4307,17 @@ NULL mrmashPrior = mrmashPrior, dataDrivenPriorWeightsCutoff = dataDrivenPriorWeightsCutoff ) - commonCfg <- cfgs$common - jointCfg <- cfgs$joint rt <- .fmQssResolveTokens( jointSpecification, methods, credibleSetParam$maxNumSingleEffects %||% 10L, credibleSetParam$maxNumSingleEffectsGreedy, - jointCfg + cfgs$joint ) - if (rt$done) { - return(.fmRecordProvenance(rt$result, dataType, "sumstat", TRUE)) - } out <- .fmQssAfterJoint( data, rt = rt, - commonCfg = commonCfg, - jointCfg = jointCfg, + cfgs = cfgs, contexts = contexts, traitId = traitId, initializeWithSusieInf = initializeWithSusieInf, @@ -4288,34 +4329,38 @@ NULL # Everything after the joint phase has had its say: select the rows the # univariate tokens run on, resolve the LD-finiteness setting against the # sketch, and fit. `rt` is .fmQssResolveTokens()'s record -- it carries the -# remaining tokens, their options, and whatever the joint phase produced. +# remaining tokens, their options, and whatever the joint phase produced; when +# the joint phase consumed every method (`rt$done`) its result is returned +# as is. `cfgs` is .fmQssConfigs()'s (common, joint) pair. # @noRd .fmQssAfterJoint <- function( data, rt, - commonCfg, - jointCfg, + cfgs, contexts, traitId, initializeWithSusieInf, susieRssParam ) { + if (rt$done) { + return(rt$result) + } sel <- .fmQssSelectRows(data = data, contexts = contexts, traitId = traitId) - ldSketch <- ldSketch(data) + ldReference <- ldReference(data) cfg <- .fmRssRunCfg( - commonCfg, - ldSketch = ldSketch, + cfgs$common, + ldReference = ldReference, initializeWithSusieInf = initializeWithSusieInf, methodArgs = rt$methodArgs, - susieRssParam = .fmRssArgsResolved(susieRssParam, ldSketch) + susieRssParam = .fmRssArgsResolved(susieRssParam, ldReference) ) .fmQssRunRows( data, sel = sel, split = .fmQssSplitTokens(rt$tokens, sel), cfg = cfg, - jointCfg = jointCfg, - ldSketch = ldSketch, + jointCfg = cfgs$joint, + ldReference = ldReference, methodArgs = rt$methodArgs, jointResult = rt$result ) @@ -4332,7 +4377,7 @@ NULL split, cfg, jointCfg, - ldSketch, + ldReference, methodArgs, jointResult ) { @@ -4351,7 +4396,7 @@ NULL } .fmQssAssemble( data = data, - ldSketch = ldSketch, + ldReference = ldReference, rows = list_flatten(map(univOut, "rows")), nSkipped = sum(map_lgl(univOut, "skipped")), jointResult = .fmQssAutoJoint( @@ -4359,7 +4404,7 @@ NULL mvTokens = split$mvTokens, methodArgs = methodArgs, jointResult = jointResult, - ldSketch = ldSketch + ldReference = ldReference ) ) } @@ -4384,13 +4429,13 @@ setMethod( fitRetention = c("slim", "full"), susieRssParam = SusieRssParam(), panelFilterParam = PanelFilterParam(), - crossValidationArgs = CrossValidationParam(), - residualizationArgs = ResidualizationParam(), + crossValidationParam = CrossValidationParam(), + residualizationParam = ResidualizationParam(), dataType = NULL ) { fitRetention <- arg_match(fitRetention) .cvRefuseOnSumstats( - crossValidationArgs, + crossValidationParam, "fineMappingPipeline", "QtlSumStats" ) @@ -4418,22 +4463,17 @@ setMethod( # GwasSumStats method # ============================================================================= -# Default the finite-sample LD reference size when an EB / SER-fallback LD- -# mismatch mode is active (serFallback on, or rMismatch other than "none") and -# rFinite is unset: use the LD-panel sample size (the notebook's `B`). Shared by -# the QtlSumStats and GwasSumStats workers. -# @noRd # The resolved record, still a SusieRssParam. Previously the resolved value was # carried alongside the record as a second cfg field and spliced in with # list_assign(as.list(...)) at the point of use, which handed everything # downstream a bare list exactly where the value became concrete. # @noRd -.fmRssArgsResolved <- function(susieRssParam, ldSketch) { +.fmRssArgsResolved <- function(susieRssParam, ldReference) { resolved <- .fmResolveRFinite( susieRssParam$rFinite, susieRssParam$serFallback, susieRssParam$rMismatch, - ldSketch + ldReference ) if (identical(resolved, susieRssParam$rFinite)) { return(susieRssParam) @@ -4441,15 +4481,29 @@ setMethod( .rssParamWithRFinite(susieRssParam, resolved) } -.fmResolveRFinite <- function(rFinite, serFallback, rMismatch, ldSketch) { +# Default the finite-sample LD reference size when an EB / SER-fallback LD- +# mismatch mode is active (serFallback on, or rMismatch other than "none") and +# rFinite is unset: use the LD-panel sample size (the notebook's `B`), or the +# size an LdMatrix records. Shared by the QtlSumStats and GwasSumStats workers. +# @noRd +.fmResolveRFinite <- function(rFinite, serFallback, rMismatch, ldReference) { if ( - is.null(rFinite) && - (isTRUE(serFallback) || !identical(rMismatch, "none")) + !is.null(rFinite) || + (!isTRUE(serFallback) && identical(rMismatch, "none")) ) { - .ldSketchNSamples(ldSketch) - } else { - rFinite + return(rFinite) } + n <- .ldRefNSamples(ldReference) + if (is.na(n)) { + abort(c( + str_c( + "The finite-reference LD mismatch model needs the LD ", + "reference's size." + ), + i = "Set `rFinite`, or record it with LdMatrix(nSamples = )." + )) + } + n } # GwasSumStats fine-mapping worker. The resolved tokens, LD sketch and @@ -4479,11 +4533,11 @@ setMethod( ) .fmCheckMethodCapabilities(norm$tokens, "GwasSumStats") .fmCheckMethodArgsForInput(norm$methodArgs, "GwasSumStats") - ldSketch <- ldSketch(data) + ldReference <- ldReference(data) # Derived values are ordinary locals now, not fields grafted onto a bundle. tokens <- norm$tokens methodArgs <- norm$methodArgs - susieRssParam <- .fmRssArgsResolved(susieRssParam, ldSketch) + susieRssParam <- .fmRssArgsResolved(susieRssParam, ldReference) studyCol <- as.character(data$study) commonCfg <- .fmSsCommonCfg( data = data, @@ -4498,7 +4552,7 @@ setMethod( studyCol = studyCol, tokens = tokens, commonCfg = commonCfg, - ldSketch = ldSketch, + ldReference = ldReference, initializeWithSusieInf = initializeWithSusieInf, methodArgs = methodArgs, susieRssParam = susieRssParam @@ -4513,7 +4567,7 @@ setMethod( studyCol, tokens, commonCfg, - ldSketch, + ldReference, initializeWithSusieInf, methodArgs, susieRssParam @@ -4525,7 +4579,7 @@ setMethod( tokens = tokens, cfg = .fmRssRunCfg( commonCfg, - ldSketch = ldSketch, + ldReference = ldReference, initializeWithSusieInf = initializeWithSusieInf, methodArgs = methodArgs, susieRssParam = susieRssParam @@ -4544,7 +4598,7 @@ setMethod( # the same window .fmRssFitWindow() gives the per-row grange columns, # so the two cannot disagree. region = .fmGwasRowWindows(rows), - ldSketch = ldSketch, + ldReference = ldReference, allowEmpty = (nSkipped > 0L || nrow(data) == 0L) ) } @@ -4564,13 +4618,13 @@ setMethod( fitRetention = c("slim", "full"), susieRssParam = SusieRssParam(), panelFilterParam = PanelFilterParam(), - crossValidationArgs = CrossValidationParam(), - residualizationArgs = ResidualizationParam(), + crossValidationParam = CrossValidationParam(), + residualizationParam = ResidualizationParam(), dataType = NULL ) { fitRetention <- arg_match(fitRetention) .cvRefuseOnSumstats( - crossValidationArgs, + crossValidationParam, "fineMappingPipeline", "GwasSumStats" ) @@ -4754,93 +4808,6 @@ setMethod( # see colocPipeline(), crossValidation() and fineMappingPipeline(). # ============================================================================= -# --- CredibleSetParam accessors -------------------------------------------- -# Setters revalidate: slot assignment checks the declared type on its own but -# does not re-run a validity method, and this package does write those (see -# SignalScreenParam). - -#' @rdname CredibleSetParam -setMethod("csCoverage", "CredibleSetParam", function(x) x@coverage) - -#' @rdname CredibleSetParam -setReplaceMethod("csCoverage", "CredibleSetParam", function(x, value) { - x@coverage <- value - validObject(x) - x -}) - -#' @rdname CredibleSetParam -setMethod("secondaryCoverage", "CredibleSetParam", function(x) { - x@secondaryCoverage -}) - -#' @rdname CredibleSetParam -setReplaceMethod("secondaryCoverage", "CredibleSetParam", function(x, value) { - x@secondaryCoverage <- value - validObject(x) - x -}) - -#' @rdname CredibleSetParam -setMethod("signalCutoff", "CredibleSetParam", function(x) x@signalCutoff) - -#' @rdname CredibleSetParam -setReplaceMethod("signalCutoff", "CredibleSetParam", function(x, value) { - x@signalCutoff <- value - validObject(x) - x -}) - -#' @rdname CredibleSetParam -setMethod("minAbsCorr", "CredibleSetParam", function(x) x@minAbsCorr) - -#' @rdname CredibleSetParam -setReplaceMethod("minAbsCorr", "CredibleSetParam", function(x, value) { - x@minAbsCorr <- value - validObject(x) - x -}) - -#' @rdname CredibleSetParam -setMethod("medianAbsCorr", "CredibleSetParam", function(x) x@medianAbsCorr) - -#' @rdname CredibleSetParam -setReplaceMethod("medianAbsCorr", "CredibleSetParam", function(x, value) { - x@medianAbsCorr <- value - validObject(x) - x -}) - -#' @rdname CredibleSetParam -setMethod("includeAllCs", "CredibleSetParam", function(x) x@includeAllCs) - -#' @rdname CredibleSetParam -setReplaceMethod("includeAllCs", "CredibleSetParam", function(x, value) { - x@includeAllCs <- value - validObject(x) - x -}) - -#' @rdname CredibleSetParam -setMethod("perCsColumns", "CredibleSetParam", function(x) x@perCsColumns) - -#' @rdname CredibleSetParam -setReplaceMethod("perCsColumns", "CredibleSetParam", function(x, value) { - x@perCsColumns <- value - validObject(x) - x -}) - -#' @rdname CredibleSetParam -setMethod("maxNumSingleEffects", "CredibleSetParam", function(x) { - x@maxNumSingleEffects -}) - -#' @rdname CredibleSetParam -setMethod("maxNumSingleEffectsGreedy", "CredibleSetParam", function(x) { - x@maxNumSingleEffectsGreedy -}) - #' @rdname SignalScreenParam #' @aliases SignalScreenParam-class #' @exportClass SignalScreenParam @@ -5131,6 +5098,93 @@ CredibleSetParam <- function( ) } +# --- CredibleSetParam accessors -------------------------------------------- +# Setters revalidate: slot assignment checks the declared type on its own but +# does not re-run a validity method, and this package does write those (see +# SignalScreenParam). + +#' @rdname CredibleSetParam +setMethod("csCoverage", "CredibleSetParam", function(x) x@coverage) + +#' @rdname CredibleSetParam +setReplaceMethod("csCoverage", "CredibleSetParam", function(x, value) { + x@coverage <- value + validObject(x) + x +}) + +#' @rdname CredibleSetParam +setMethod("secondaryCoverage", "CredibleSetParam", function(x) { + x@secondaryCoverage +}) + +#' @rdname CredibleSetParam +setReplaceMethod("secondaryCoverage", "CredibleSetParam", function(x, value) { + x@secondaryCoverage <- value + validObject(x) + x +}) + +#' @rdname CredibleSetParam +setMethod("signalCutoff", "CredibleSetParam", function(x) x@signalCutoff) + +#' @rdname CredibleSetParam +setReplaceMethod("signalCutoff", "CredibleSetParam", function(x, value) { + x@signalCutoff <- value + validObject(x) + x +}) + +#' @rdname CredibleSetParam +setMethod("minAbsCorr", "CredibleSetParam", function(x) x@minAbsCorr) + +#' @rdname CredibleSetParam +setReplaceMethod("minAbsCorr", "CredibleSetParam", function(x, value) { + x@minAbsCorr <- value + validObject(x) + x +}) + +#' @rdname CredibleSetParam +setMethod("medianAbsCorr", "CredibleSetParam", function(x) x@medianAbsCorr) + +#' @rdname CredibleSetParam +setReplaceMethod("medianAbsCorr", "CredibleSetParam", function(x, value) { + x@medianAbsCorr <- value + validObject(x) + x +}) + +#' @rdname CredibleSetParam +setMethod("includeAllCs", "CredibleSetParam", function(x) x@includeAllCs) + +#' @rdname CredibleSetParam +setReplaceMethod("includeAllCs", "CredibleSetParam", function(x, value) { + x@includeAllCs <- value + validObject(x) + x +}) + +#' @rdname CredibleSetParam +setMethod("perCsColumns", "CredibleSetParam", function(x) x@perCsColumns) + +#' @rdname CredibleSetParam +setReplaceMethod("perCsColumns", "CredibleSetParam", function(x, value) { + x@perCsColumns <- value + validObject(x) + x +}) + +#' @rdname CredibleSetParam +setMethod("maxNumSingleEffects", "CredibleSetParam", function(x) { + x@maxNumSingleEffects +}) + +#' @rdname CredibleSetParam +setMethod("maxNumSingleEffectsGreedy", "CredibleSetParam", function(x) { + x@maxNumSingleEffectsGreedy +}) + #' @rdname SusieRssParam #' @aliases SusieRssParam-class #' @exportClass SusieRssParam diff --git a/R/fineMappingRow.R b/R/fineMappingRow.R index e70c541b6..793f7681f 100644 --- a/R/fineMappingRow.R +++ b/R/fineMappingRow.R @@ -2,10 +2,10 @@ # FineMappingRow S4 class # ----------------------------------------------------------------------------- # One row's fine-mapping payload: the variants (with topLoci as their metadata -# columns) plus the stored fit. This is what a FineMappingResult collection is +# columns) plus the stored fit. This is what a fine-mapping result collection is # built FROM and what its per-row views are computed OVER. # -# It replaces the retired FineMappingRow, but is a different object in the +# It replaces the retired FineMappingEntry, but is a different object in the # two ways that made that class expensive: # # * It is NOT a dispatch target. The per-row views (.fmrRowTopLoci, .fmrRowCs, @@ -123,6 +123,20 @@ fineMappingRow <- function(variantIds, susieFit, topLoci, cvResult = NULL) { obj } +# The row a cross-validation-only fit leaves (CrossValidationParam(fitFullData = +# FALSE)): no variants, no fit, no top loci -- only the cross-validation result +# attached afterwards. The writers refuse such rows (.fmbIncompleteRows()), and +# a resume cache only reuses them for another cross-validation-only run. +# @noRd +.fmCvOnlyRow <- function(cvResult = NULL) { + fineMappingRow( + variantIds = character(0), + susieFit = NULL, + topLoci = tibble(), + cvResult = cvResult + ) +} + # Attach topLoci's payload columns to the variant GRanges, keeping the # identity columns `.variantIdsToGRanges()` already put in mcols. Replacing # mcols wholesale would drop those, and the variant ids could no longer be @@ -162,40 +176,6 @@ fineMappingRow <- function(variantIds, susieFit, topLoci, cvResult = NULL) { } -# ---- FineMappingRow validity helpers ------------------------------------- - -# Full validity check: collect all contract violations (empty vector = valid). -# @noRd - -# cvResult must be NULL or a list. -# @noRd - -# topLoci contract checks (only meaningful when topLoci has rows). -# @noRd - -# Minimal column contract: variant_id + pip. Canonical projector columns -# (marginal_*, posterior_*, ...) are pipeline-populated; skeletal entries may -# omit them (accessor projections then return NA-filled cols). -# @noRd - -# topLoci row count must match variantIds length. -# @noRd - -# topLoci$variant_id must equal variantIds in order. -# -# Still earns its place after the migration. The collection stores topLoci AS -# the element's inner mcols, where alignment is definitional -- but the entry -# VIEW keeps `variantIds` and `topLoci` in separate slots, and -# .fmeEntryToGRanges() builds the range from the former while taking mcols -# positionally from the latter. Without this check a misaligned entry would -# convert into silently mis-assigned mcols. It becomes deletable only if the -# entry stops carrying the two separately. -# @noRd - -# Drift check: a susieFit$pip vector must match the topLoci pip column. Catches -# adjustPips() (or any mutator) updating one and forgetting the other. -# @noRd - # ---- fSuSiE credible-band / affected-region helpers -------------------- .isFsusieFit <- function(fit) { @@ -359,14 +339,6 @@ fineMappingRow <- function(variantIds, susieFit, topLoci, cvResult = NULL) { bind_rows(parts) } -# Map each fit-effect index (1..L, as affected_reg's `CS`) to pecotmr's -# canonical CS label + purity. The raw fSuSiE fit stores no purity (fsusieR -# computes it from the genotype matrix, which the fit does not retain), so the -# canonical value is `cs_95_purity` in the entry's topLoci. Matching is by the -# CS's variant -# MEMBERSHIP (not by index), which is robust to pecotmr's CS -# filtering/renumbering. -# @noRd # One fit effect's variant ids, resolving positional membership through the # fit's own variant order. # @noRd @@ -397,6 +369,13 @@ fineMappingRow <- function(variantIds, susieFit, topLoci, cvResult = NULL) { as.numeric(topLoci$cs_95_purity[topLoci$cs_95 == lab][1]) } +# Map each fit-effect index (1..L, as affected_reg's `CS`) to pecotmr's +# canonical CS label + purity. The raw fSuSiE fit stores no purity (fsusieR +# computes it from the genotype matrix, which the fit does not retain), so the +# canonical value is `cs_95_purity` in the entry's topLoci. Matching is by the +# CS's variant MEMBERSHIP (not by index), which is robust to pecotmr's CS +# filtering/renumbering. +# @noRd .fsusieCsMapFromTopLoci <- function(fit, topLoci) { L <- length(fit$cs) defaultLabel <- set_names(str_c("fsusie_", seq_len(L)), seq_len(L)) @@ -645,7 +624,7 @@ fineMappingRow <- function(variantIds, susieFit, topLoci, cvResult = NULL) { m <- filter(tl, !is.na(.data[[csCol]]) & .data[[csCol]] == lab) list( ids = as.character(m$variant_id), - eff = suppressWarnings(as.integer(str_remove(lab, "^.*_"))), + eff = .csLabelIndex(lab), lab = lab ) } @@ -1453,6 +1432,12 @@ fineMappingRow <- function(variantIds, susieFit, topLoci, cvResult = NULL) { # the two views silently joinable into a mix of the two quantities. posterior_effect = .tlCol(tl, "posterior_mean", "numeric"), posterior_se = .tlCol(tl, "posterior_sd", "numeric"), + # The infinitesimal part of `posterior_effect`, on the same scale. + # susieInf / susieAsh split their posterior into a sparse and an + # infinitesimal term and coef.susie() sums them, so the published + # effect is correct for those methods either way -- `theta` is what + # makes the split visible. Zero where the method has no such term. + theta = .tlCol(tl, "posterior_theta", "numeric"), pip = .tlCol(tl, "pip", "numeric"), logBF = .tlCol(tl, "logBF", "numeric") ) @@ -1478,6 +1463,7 @@ fineMappingRow <- function(variantIds, susieFit, topLoci, cvResult = NULL) { af = numeric(0), posterior_effect = numeric(0), posterior_se = numeric(0), + theta = numeric(0), pip = numeric(0), logBF = numeric(0) ) @@ -1576,22 +1562,6 @@ fineMappingRow <- function(variantIds, susieFit, topLoci, cvResult = NULL) { # @noRd .fmeIdentityCols <- c("variant_id", "chrom", "pos", "A1", "A2") -# Every `entry` must be a FineMappingRow. Checked before the payload is -# unpacked, so a wrong type names itself rather than failing as a missing -# method on whatever was passed instead. -# @noRd - -# One entry -> its element. -# @noRd - -# The entry view for a collection row (or rows). A tuple split across -# chromosomes owns several elements; they are stitched back into the single -# entry callers expect, the same contract sumStats() keeps. -# @noRd - -# One element (plus its outer-mcols payload) -> the entry view. -# @noRd - # Rebuild the canonical topLoci table from an element: the identity columns are # re-rendered from the range and alleles, the rest come straight from mcols. # @noRd diff --git a/R/fineMappingWrappers.R b/R/fineMappingWrappers.R index 9c01a6f9a..b000a8bb6 100644 --- a/R/fineMappingWrappers.R +++ b/R/fineMappingWrappers.R @@ -293,7 +293,7 @@ fitSusieInfThenSusie <- function( #' @param fitRetention How much of each fit is kept: \code{"slim"} (default) #' trims the retained fit to what downstream needs, \code{"full"} keeps the #' whole fit object. The \code{topLoci} table's per-credible-set columns -#' are governed by \code{credibleSet}'s \code{perCsColumns} instead. +#' are governed by \code{credibleSetParam}'s \code{perCsColumns} instead. #' @param otherQuantities Optional named list of extra per-method quantities to #' carry on the result untouched (returned as the \code{otherQuantities} #' element). Default \code{NULL}. @@ -771,6 +771,8 @@ extractVariantNames <- function(fit) { normalizeVariantId(variantNames) } +#' @importFrom susieR univariate_regression +#' @noRd extractSumstats <- function( dataX, dataY, @@ -973,7 +975,8 @@ computeCsTable <- function( # fSuSiE credible sets: purity is the min |correlation| WITHIN each CS # (fsusieR::cal_purity), recorded as sets$purity$min.abs.corr for the canonical -# .csPurityVec() reader; cs_corr keeps the BETWEEN-CS correlation matrix. +# .csPurityVec() reader. The correlation BETWEEN sets is not kept; +# computeCsCorrelation() derives it from an LD source on demand. .csTableFsusie <- function(fit, dataX, coverage) { sets <- try_fetch( fsusieGetCs(fit, dataX, requestedCoverage = coverage), @@ -1009,7 +1012,15 @@ computeCsTable <- function( # X vs Xcorr only changes how susie_get_cs computes purity; the between-CS # correlation is derived on demand later by computeCsCorrelation(), so it is # no longer stored on the fit. - ldArg <- if (csInput == "X") list(X = dataX) else list(Xcorr = dataX) + ldArg <- if (csInput == "Xcorr") { + list(Xcorr = dataX) + } else if (inherits(fit, "susieRss")) { + # An RSS fit's X is its LD reference's factor, standing in for the + # matrix, so its purity must be the matrix route's: never subsampled. + list(X = dataX, n_purity = Inf) + } else { + list(X = dataX) + } sets <- exec(susie_get_cs, !!!c(list(fit), csArgs, ldArg)) list(sets = sets, pip = fit$pip) } @@ -1020,9 +1031,43 @@ computeCsTable <- function( # fit. get_cs_correlation() needs only the CS membership + PIP + the LD, with # the LD columns/rows ALIGNED to the fit's variable order (variantIds). +# A fit's credible sets: a susie fit keeps them in sets$cs, an fSuSiE fit +# (class "susiF") in cs. Reading only the first made every fSuSiE fit look +# set-less, so its between-CS correlation was never computed. +# @noRd +.csSetsOf <- function(fit) { + if (inherits(fit, "susiF")) fit$cs else fit$sets$cs +} + # TRUE when the fit has fewer than two credible sets (no between-CS corr). .csCountBelowTwo <- function(fit) { - is.null(fit$sets) || is.null(fit$sets$cs) || length(fit$sets$cs) < 2L + length(.csSetsOf(fit)) < 2L +} + +# An fSuSiE fit's between-CS correlation as fsusieR::cal_cor_cs() defines it +# -- for each pair of sets, the largest correlation between a member of one +# and a member of the other, so 1 on the diagonal -- read from the LD among +# the sets' members alone. +# @noRd +.fsusieCsCorrelationLd <- function(cs, ldReference, ids, label) { + members <- sort(unique(as.integer(list_c(cs)))) + R <- .ldFromRef(ldReference, ids[members], label, onMissing = "error") + sets <- map(cs, match, table = members) + n <- length(cs) + values <- map2_dbl( + rep(seq_len(n), times = n), + rep(seq_len(n), each = n), + .csPairMaxCorrelation, + sets = sets, + R = R + ) + matrix(values, n, n) +} + +# The largest correlation between a member of set `l` and one of set `k`. +# @noRd +.csPairMaxCorrelation <- function(l, k, sets, R) { + max(R[sets[[l]], sets[[k]]]) } # GRanges spanning the fit's variants (parsed from chrom:pos in the ids). @@ -1058,6 +1103,7 @@ computeCsTable <- function( } #' @rdname computeCsCorrelation +#' @importFrom purrr map2_dbl setMethod( "computeCsCorrelation", signature(x = "FineMappingResultBase", ldSource = "SumStatsBase"), @@ -1073,22 +1119,29 @@ setMethod( if (.csCountBelowTwo(fit)) { return(NULL) } - ldSketch <- ldSketch(ldSource) - if (is.null(ldSketch)) { + ldReference <- ldReference(ldSource) + if (is.null(ldReference)) { abort(glue( "computeCsCorrelation(): the summary-statistics ldSource ", - "carries no LD sketch to derive the correlation from." + "carries no LD reference to derive the correlation from." )) } # onMissing = "error": every fit variant must be in the panel, else the # 1..p sets$cs indices would misalign with a shrunken LD matrix. - xcorr <- .ldFromSketch( - ldSketch, - .fmrPartsVariantIds(parts), - label = "computeCsCorrelation", - onMissing = "error" - ) - get_cs_correlation(list(sets = fit$sets, pip = fit$pip), Xcorr = xcorr) + ids <- .fmrPartsVariantIds(parts) + label <- "computeCsCorrelation" + if (inherits(fit, "susiF")) { + return(.fsusieCsCorrelationLd(fit$cs, ldReference, ids, label)) + } + csFit <- list(sets = fit$sets, pip = fit$pip) + if (!.ldIsGenotypeRef(ldReference)) { + xcorr <- .ldFromRef(ldReference, ids, label, onMissing = "error") + return(get_cs_correlation(csFit, Xcorr = xcorr)) + } + # A genotype reference's factor: get_cs_correlation() correlates only + # the credible sets' lead columns of it, never forming the p x p LD. + factor <- .ldFactorFromRef(ldReference, ids, label, onMissing = "error") + get_cs_correlation(csFit, X = factor) } } @@ -1780,12 +1833,19 @@ buildTopLoci <- function( mu <- .fmSliceCond(fit$mu, conditionIdx) mu2 <- .fmSliceCond(fit$mu2, conditionIdx) scaleFactors <- .btlScaleFactors(fit, nV) + infinitesimal <- .btlInfinitesimal(fit, nV) meanStd <- if (!is.null(mu) && all(dim(alpha) == dim(mu))) { - colSums(alpha * mu) + .btlInfinitesimal(fit, nV) + colSums(alpha * mu) + infinitesimal } else { rep(NA_real_, nV) } postMean <- meanStd / scaleFactors + # Reported on the SAME scale as postMean, because that is the question it + # answers: how much of the published weight is the infinitesimal term + # rather than the sparse one. The sum is already inside postMean -- this + # only lets a reader see the split, which is otherwise unrecoverable. + # Zero for every method that has no infinitesimal component. + postTheta <- infinitesimal / scaleFactors postSd <- if (!is.null(mu2) && all(dim(alpha) == dim(mu2))) { # From the STANDARDIZED mean, then rescaled: an SD rescales the same # way its mean does, but the mu2 identity only holds in the units mu2 @@ -1810,6 +1870,7 @@ buildTopLoci <- function( mu2 = mu2, postMean = postMean, postSd = postSd, + postTheta = postTheta, logBF = logBF ) } @@ -2014,9 +2075,6 @@ buildTopLoci <- function( list_c(pieces) } -# One credible set's conditional-lfsr values, or NULL when its effect is out -# of range or it covers no in-range variant. -# @noRd # The conditional lfsr of a univariate susie fit, which reports none. # # It has everything needed to compute one: the single-effect posterior for @@ -2049,6 +2107,9 @@ buildTopLoci <- function( array(lfsr, dim = c(dim(mu), 1L)) } +# One credible set's conditional-lfsr values, or NULL when its effect is out +# of range or it covers no in-range variant. +# @noRd .btlCondLfsrForSet <- function( csPos, setsPrim, @@ -2190,6 +2251,7 @@ buildTopLoci <- function( pip = as.numeric(fit$pip), posterior_mean = unname(post$postMean), posterior_sd = unname(post$postSd), + posterior_theta = unname(post$postTheta), logBF = unname(post$logBF) ) meta <- tibble( @@ -2229,6 +2291,7 @@ buildTopLoci <- function( pip = numeric(), posterior_mean = numeric(), posterior_sd = numeric(), + posterior_theta = numeric(), logBF = numeric(), cs_95 = character(), cs_70 = character(), @@ -2438,7 +2501,7 @@ trimFinemappingFit <- function(fit, effectIdx, method, csTables) { #' Promotes the primary method's per-method post-processing payload to the root #' level and attaches the unified \code{top_loci} table. The primary method's #' bare \code{FineMappingRow} appears at \code{$finemappingEntry}; wrap it -#' into a \code{FineMappingResult} collection at the pipeline level once (study, +#' into a fine-mapping result collection at the pipeline level once (study, #' context, trait, method) identity tags are known. #' #' @param post Output from \code{\link{postprocessFinemappingFits}}. @@ -2503,28 +2566,6 @@ csInfo <- function(susieOutputSetsCs, topVariantsIdx) { ) bind_rows(rows) } -#' @title Calculate Purity Measures for Credible Sets -#' -#' @description As an extension of the internal cal_purity function. This -#' function computes purity metrics (minimum, mean, and median absolute -#' correlations) for each credible set in a list of credible set indices, -#' based on the provided X matrix. The output Purity depends on the method -#' specified: for the 'min' method, it returns a single value for -#' single-element sets or the minimum absolute correlation for others. For -#' other methods, it returns a vector of three values (min, mean, median) for -#' each set. -#' -#' @param lCs A list of credible set indices, where each element is a vector of -#' indices corresponding to variables in a credible set. -#' @param X The data matrix used to compute correlations between variables in -#' each credible set. -#' @param method A character string specifying the method to use for calculating -#' purity. Defaults to 'min'. Other methods return a vector of min, mean, and -#' median absolute correlations for each credible set. -#' @return A list where each element corresponds to a credible set and contains -#' either a single purity value (for 'min' method and single-element sets) or -#' a vector of purity metrics (for other methods and multi-element sets). -#' @noRd # Absolute off-diagonal correlations among one credible set's variants. The # diagonal is blanked so a set is never judged pure by its self-correlation. @@ -2556,6 +2597,28 @@ csInfo <- function(susieOutputSetsCs, topVariantsIdx) { ) } +#' @title Calculate Purity Measures for Credible Sets +#' +#' @description As an extension of the internal cal_purity function. This +#' function computes purity metrics (minimum, mean, and median absolute +#' correlations) for each credible set in a list of credible set indices, +#' based on the provided X matrix. The output Purity depends on the method +#' specified: for the 'min' method, it returns a single value for +#' single-element sets or the minimum absolute correlation for others. For +#' other methods, it returns a vector of three values (min, mean, median) for +#' each set. +#' +#' @param lCs A list of credible set indices, where each element is a vector of +#' indices corresponding to variables in a credible set. +#' @param X The data matrix used to compute correlations between variables in +#' each credible set. +#' @param method A character string specifying the method to use for calculating +#' purity. Defaults to 'min'. Other methods return a vector of min, mean, and +#' median absolute correlations for each credible set. +#' @return A list where each element corresponds to a credible set and contains +#' either a single purity value (for 'min' method and single-element sets) or +#' a vector of purity metrics (for other methods and multi-element sets). +#' @noRd calPurity <- function(lCs, X, method = "min") { # Each `lCs[[k]]` is documented (and always supplied) as a plain index # vector; the unlist() that used to sit here was a no-op that quietly @@ -2597,12 +2660,12 @@ fsusieGetCs <- function(fsusieObj, X, requestedCoverage = 0.95) { str_c("L", seq_along(fsusieObj$cs)) ) - # Create 'purity' data frame - purity <- `colnames<-`( - bind_rows( - map(calPurity(fsusieObj$cs, X = X, method = "susie"), .asDataFrameT) - ), - c("minAbsCorr", "meanAbsCorr", "medianAbsCorr") + # Create 'purity' data frame: each set's (min, mean, median) |r|. + setPurity <- calPurity(fsusieObj$cs, X = X, method = "susie") + purity <- tibble( + minAbsCorr = map_dbl(setPurity, 1L), + meanAbsCorr = map_dbl(setPurity, 2L), + medianAbsCorr = map_dbl(setPurity, 3L) ) # Credible-set label as a `cs` column (was rownames; tibbles carry none). purityDf <- bind_cols(tibble(cs = names(csNamed)), purity) @@ -2957,10 +3020,6 @@ fitFsusie <- function( # extractors live with the rest of the fine-mapping/SuSiE wrappers). # ============================================================================= -# Shared helper for susie/susieAsh/susieInf weight extraction. -# @param fit A susie fit object (or NULL to fit from X, y). -# @param X Genotype matrix (optional). -# @param y Phenotype vector (optional). # Drop-intercept TWAS coefficient weights from a fitted SuSiE(-RSS) model # (zero the intercept, then coef.susie without the intercept row). # @noRd @@ -2968,13 +3027,18 @@ fitFsusie <- function( coef.susie(list_assign(fit, intercept = 0))[-1] } -# @param requiredFields Fields that must be present in the fit to extract -# weights. -# @param token SuSiE-family token ("susie" / "susieInf" / "susieAsh") selecting -# the unmappable_effects mode. The fit is delegated to .fmFitSusieIndiv so the -# package keeps a single susie-invocation point. -# @param userArgs Extra arguments forwarded to susieR::susie via -# .fmFitSusieIndiv. +# Shared helper for susie/susieAsh/susieInf weight extraction: the +# drop-intercept coefficients of an EXISTING fit. These never fine-map, so a +# NULL `fit` is an error naming the run that would produce one. +# @param fit A susie fit object. +# @param X Genotype matrix, or NULL; when given, its column count is checked +# against the fit's variants. +# @param requiredFields Fields the fit must carry for weights to be extracted; +# the weights are all zero when any is missing. +# @param token SuSiE-family token ("susie" / "susieInf" / "susieAsh") the +# error names. +# @param fitRetention "none" returns the weights alone; otherwise the fit rides +# along as their "fit" attribute. #' @importFrom susieR coef.susie susie #' @noRd .susieExtractWeights <- function( @@ -3191,7 +3255,7 @@ susieInfWeights <- function( #' @noRd .susieRssExtractWeights <- function( fit, - R, + nVariants, requiredFields, token = "susie", fitRetention = c("none", "slim", "full") @@ -3206,12 +3270,11 @@ susieInfWeights <- function( ) abort(msg) } - if (length(fit$pip) != nrow(R)) { + if (!is.na(nVariants) && length(fit$pip) != nVariants) { nPip <- length(fit$pip) - nR <- nrow(R) msg <- glue( - "Dimension mismatch: susieRss fit has {nPip} variants but R ", - "has {nR} rows." + "Dimension mismatch: susieRss fit has {nPip} variants but the ", + "statistics describe {nVariants}." ) abort(msg) } @@ -3232,8 +3295,11 @@ susieInfWeights <- function( #' \code{susieR::susie_rss()} from summary statistics and LD. #' #' @param stat List with components \code{z} (z-scores), \code{n} (sample -#' sizes). -#' @param LD LD correlation matrix. +#' sizes) and, to check against an \code{ldReference}, \code{variantNames}. +#' @param ldReference Optional LD reference: a genotype panel, a +#' \code{\link{GenotypeMixture}} or an \code{\link{LdMatrix}}. The fit is +#' checked against the statistics' variants and, with a reference, those +#' variants must also be in it. No LD is read. #' @param susieRssFit A fitted SuSiE-RSS object. Required: these wrappers #' extract weights and never run fine-mapping themselves. #' @param fitRetention How much of the fit is kept on the returned weights: @@ -3255,12 +3321,12 @@ susieInfWeights <- function( #' n = rep(nrow(X), ncol(X))) #' LD <- cor(X) #' fit <- susieR::susie_rss(z = stat$z, R = LD, n = nrow(X), L = 5) -#' susieRssWeights(stat, LD, susieRssFit = fit) +#' susieRssWeights(stat, susieRssFit = fit) #' @importFrom checkmate assertList assertFlag #' @export susieRssWeights <- function( stat, - LD, + ldReference = NULL, susieRssFit = NULL, fitRetention = c("slim", "none", "full") ) { @@ -3268,7 +3334,7 @@ susieRssWeights <- function( fitRetention <- arg_match(fitRetention) .susieRssExtractWeights( fit = susieRssFit, - R = LD, + nVariants = .rssVariantCount(stat, ldReference, "susieRssWeights"), requiredFields = c("alpha", "mu", "X_column_scale_factors"), token = "susie", fitRetention = fitRetention @@ -3297,12 +3363,12 @@ susieRssWeights <- function( #' n = rep(nrow(X), ncol(X))) #' LD <- cor(X) #' fit <- susieR::susie_rss(z = stat$z, R = LD, n = nrow(X), L = 5) -#' susieInfRssWeights(stat, LD, susieInfRssFit = fit) +#' susieInfRssWeights(stat, susieInfRssFit = fit) #' @importFrom checkmate assertList assertFlag #' @export susieInfRssWeights <- function( stat, - LD, + ldReference = NULL, susieInfRssFit = NULL, fitRetention = c("slim", "none", "full") ) { @@ -3310,7 +3376,7 @@ susieInfRssWeights <- function( fitRetention <- arg_match(fitRetention) .susieRssExtractWeights( fit = susieInfRssFit, - R = LD, + nVariants = .rssVariantCount(stat, ldReference, "susieInfRssWeights"), requiredFields = c("alpha", "mu", "theta", "X_column_scale_factors"), token = "susieInf", fitRetention = fitRetention @@ -3339,12 +3405,12 @@ susieInfRssWeights <- function( #' n = rep(nrow(X), ncol(X))) #' LD <- cor(X) #' fit <- susieR::susie_rss(z = stat$z, R = LD, n = nrow(X), L = 5) -#' susieAshRssWeights(stat, LD, susieAshRssFit = fit) +#' susieAshRssWeights(stat, susieAshRssFit = fit) #' @importFrom checkmate assertList assertFlag #' @export susieAshRssWeights <- function( stat, - LD, + ldReference = NULL, susieAshRssFit = NULL, fitRetention = c("slim", "none", "full") ) { @@ -3352,7 +3418,7 @@ susieAshRssWeights <- function( fitRetention <- arg_match(fitRetention) .susieRssExtractWeights( fit = susieAshRssFit, - R = LD, + nVariants = .rssVariantCount(stat, ldReference, "susieAshRssWeights"), requiredFields = c("alpha", "mu", "theta", "X_column_scale_factors"), token = "susieAsh", fitRetention = fitRetention @@ -3656,15 +3722,18 @@ fsusieWeights <- function( #' extracts coefficients from an existing \code{mvsusieR::mvsusie_rss} fit. #' It never runs fine-mapping itself --- \code{mvsusieRssFit} is required. #' -#' Follows the \code{*_rss_weights(stat, LD, ...)} contract: \code{stat} and -#' \code{LD} describe the block the fit is being extracted against, and the -#' fit is checked against them rather than refitted. +#' Follows the RSS weights contract: \code{stat} (and \code{ldReference}, +#' when given) describe the block the fit is being extracted against, and +#' the fit is checked against them rather than refitted. #' -#' @param stat A list with \code{z} (matrix variants x conditions) and \code{n} -#' (numeric vector or scalar), describing the block the fit came from. -#' @param LD LD correlation matrix for that block. The fit must cover the -#' same number of variants; a mismatch is an error, since weights from one -#' block are not comparable against another's LD. +#' @param stat A list with \code{z} (matrix variants x conditions), \code{n} +#' (numeric vector or scalar) and, to check against an \code{ldReference}, +#' \code{variantNames}, describing the block the fit came from. The fit +#' must cover the same number of variants; a mismatch is an error, since +#' weights from one block are not comparable against another's. +#' @param ldReference Optional LD reference for that block: a genotype +#' panel, a \code{\link{GenotypeMixture}} or an \code{\link{LdMatrix}}. +#' With one, the statistics' variants must also be in it. No LD is read. #' @param mvsusieRssFit A fitted \code{mvsusieRss} object. Required: this #' extracts weights and never runs fine-mapping itself. #' @param fitRetention How much of the fit is kept on the returned weights: @@ -3689,11 +3758,11 @@ fsusieWeights <- function( #' LD <- cor(X) #' fit <- fitMvsusieRss(Z = stat$z, R = LD, N = nrow(X), #' prior_variance = 1) -#' mvsusieRssWeights(stat, LD, mvsusieRssFit = fit) +#' mvsusieRssWeights(stat, mvsusieRssFit = fit) #' @export mvsusieRssWeights <- function( stat, - LD, + ldReference = NULL, mvsusieRssFit = NULL, fitRetention = c("none", "slim", "full") ) { @@ -3712,11 +3781,14 @@ mvsusieRssWeights <- function( abort(msg) } weights <- mvsusieR::coef.mvsusie(mvsusieRssFit)[-1, , drop = FALSE] - # `stat` / `LD` describe the block the fit is being combined with. The - # susie *RssWeights wrappers check the fit against them; this one used - # to take both and read neither, so a fit from a different block was - # extracted without complaint. - .mvsusieRssAssertBlock(weights, LD) + # `stat` (and `ldReference`) describe the block the fit is being combined + # with. The susie *RssWeights wrappers check the fit against them; this + # one used to take both and read neither, so a fit from a different block + # was extracted without complaint. + .mvsusieRssAssertBlock( + weights, + .rssVariantCount(stat, ldReference, "mvsusieRssWeights") + ) if (identical(fitRetention, "none")) { return(weights) } @@ -3726,13 +3798,13 @@ mvsusieRssWeights <- function( # The supplied fit must describe the LD block it is being extracted against; # the pairing is what makes the weights comparable across a region. # @noRd -.mvsusieRssAssertBlock <- function(weights, LD) { - if (is.null(LD) || nrow(weights) == nrow(LD)) { +.mvsusieRssAssertBlock <- function(weights, nVariants) { + if (is.na(nVariants) || nrow(weights) == nVariants) { return(invisible(NULL)) } abort(glue( "Dimension mismatch: mvsusieRss fit has {nrow(weights)} variants ", - "but LD has {nrow(LD)} rows." + "but the statistics describe {nVariants}." )) } @@ -3741,8 +3813,6 @@ mvsusieRssWeights <- function( # Cross-condition credible-set merging # ============================================================================= -# Identify variant IDs that are associated with more than one credible set. -# @noRd # The sets a variant belongs to, but only when it belongs to more than one. # @noRd .ovlMultiSets <- function(entry) { @@ -3750,6 +3820,8 @@ mvsusieRssWeights <- function( if (length(sets) > 1) sets else NULL } +# Identify variant IDs that are associated with more than one credible set. +# @noRd .identifyOverlapSets <- function(variantsSetsAndPipsList) { compact(map(variantsSetsAndPipsList, .ovlMultiSets)) } @@ -3776,8 +3848,6 @@ mvsusieRssWeights <- function( `[[<-`(parent, rootB, value = rootA) } -# Merge overlapping credible sets using connected components (union-find). -# @noRd # @noRd .ufPair <- function(s, first) { list(a = first, b = s) @@ -3804,6 +3874,8 @@ mvsusieRssWeights <- function( set_names(as.list(rep(label, length(members))), members) } +# Merge overlapping credible sets using connected components (union-find). +# @noRd .mergeAndUpdateOverlapSets <- function(variantsSetsAndPipsList, overlapSets) { allSets <- unique(list_c(overlapSets)) if (length(allSets) == 0) { @@ -3899,7 +3971,7 @@ mvsusieRssWeights <- function( #' the \code{"strong"} input for \code{\link{mashPipeline}}. #' #' @param fineMappingResult A \code{\link{QtlFineMappingResult}} (or any -#' \code{FineMappingResult}) produced by per-condition SuSiE fine-mapping. +#' \code{FineMappingResultBase}) produced by per-condition SuSiE fine-mapping. #' Each entry's \code{topLoci} must carry a credible-set column #' (\code{cs_}, e.g. \code{cs_95}, with values such as #' \code{"susie_1"} where the trailing integer is the set index and \code{_0} @@ -3919,8 +3991,8 @@ mvsusieRssWeights <- function( mergeSusieCs <- function(fineMappingResult, coverage = 0.95) { if (!is(fineMappingResult, "FineMappingResultBase")) { msg <- glue( - "`fineMappingResult` must be a QtlFineMappingResult (or ", - "FineMappingResult)." + "`fineMappingResult` must be a QtlFineMappingResult or ", + "GwasFineMappingResult." ) abort(msg) } @@ -3957,28 +4029,30 @@ mergeSusieCs <- function(fineMappingResult, coverage = 0.95) { #' Extract the trimmed SuSiE fit from a finemapping pipeline result #' -#' Returns the trimmed model fit underlying \code{con_data$finemappingEntry} (a -#' \code{FineMappingRow} S4 object), or NULL if no fine-mapping entry is -#' attached. +#' Returns the trimmed model fit underlying \code{conData$finemappingEntry} (a +#' \code{FineMappingRow}, or a single-row fine-mapping result), or NULL if no +#' fine-mapping entry is attached. #' #' @param conData List. The method-layer entry from a finemapping pipeline #' result, expected to carry \code{$finemappingEntry} as a -#' \code{FineMappingRow} object. +#' \code{FineMappingRow} or a single-row fine-mapping result. #' @return The trimmed fit (a list with \code{pip}, \code{sets}, etc.) or NULL. #' @examples -#' data(qtlSumStatsExample) -#' susieResult(qtlSumStatsExample) +#' data(qtlFineMappingExample) +#' fit <- susieResult(list(finemappingEntry = qtlFineMappingExample[1])) +#' head(fit$pip) #' @importFrom checkmate assertList #' @export susieResult <- function(conData) { - # No type guard: this is duck-typed on `$` and `length()` and returns NULL - # for anything without a `finemappingEntry`. Its own @example passes a - # QtlSumStats, which assertList rejects. + # Duck-typed on `$` and `length()`: NULL for anything without a + # fine-mapping entry. The entry is one row's worth of fine-mapping -- a + # FineMappingRow, or the single-row result fineMappingResult() returns -- + # which .fmrPartsSusieFit() reads alike. if (length(conData) == 0) { return(NULL) } fm <- conData$finemappingEntry - if (is.null(fm) || !is(fm, "FineMappingResultBase")) { + if (!is(fm, "FineMappingRow") && !is(fm, "FineMappingResultBase")) { return(NULL) } trimmed <- .fmrPartsSusieFit(fm) @@ -4019,8 +4093,8 @@ susieResult <- function(conData) { #' CS (its row of the between-CS matrix, self-correlation on the diagonal), #' computed on demand from \code{ldSource}. Absent when there are fewer than #' two credible sets.} -#' \item{cs_corr_max}{Maximum absolute between-CS correlation (excluding the -#' self == 1); \code{NA} for a single CS.} +#' \item{cs_corr_max}{Maximum absolute correlation with the other credible +#' sets; \code{NA} for a single CS.} #' \item{cs_corr_min}{Minimum absolute between-CS correlation; \code{NA} for a #' single CS.} #' @@ -4135,43 +4209,40 @@ extractTopPipInfo <- function(fmRow, sumstats) { ) } -# Reduce one credible set's correlation vector (a row of the between-CS matrix, -# the self-correlation == 1 on the diagonal) to its |corr| max/min, excluding -# every self / perfect correlation (== 1). An empty result yields NA. +# Credible set `i`'s largest and smallest |correlation| with the other sets +# in the between-CS matrix `csCorr`. Only its own entry is dropped, by +# position: two sets in perfect LD still report |r| = 1, and a diagonal a few +# ulps short of 1 (as a factor's correlation gives) is still the set with +# itself. `csCorr` exists only for two or more sets, so others always remain. # @noRd -.extractCorrelations <- function(x) { - filtered <- abs(x[x != 1]) - if (length(filtered) == 0L) { - return(list(max_corr = NA_real_, min_corr = NA_real_)) - } +.extractCorrelations <- function(i, csCorr) { + others <- abs(csCorr[i, -i]) list( - max_corr = max(filtered, na.rm = TRUE), - min_corr = min(filtered, na.rm = TRUE) + max_corr = max(others, na.rm = TRUE), + min_corr = min(others, na.rm = TRUE) ) } # Append the between-CS correlation columns to the per-CS summary `base` from # the m x m matrix `csCorr` (whose rows are aligned to `base`): the expanded # cs_corr_1..m (each CS's row, self-correlation on the diagonal) plus -# cs_corr_max / cs_corr_min (|corr| excluding the self == 1). A NULL matrix +# cs_corr_max / cs_corr_min (|corr| with the other sets). A NULL matrix # (fewer than two credible sets) yields NA max/min and no expanded columns. # @noRd .csAppendCorrelationCols <- function(base, csCorr) { if (is.null(csCorr)) { return(mutate(base, cs_corr_max = NA_real_, cs_corr_min = NA_real_)) } - perRow <- apply(csCorr, 1L, .extractCorrelations, simplify = FALSE) + perRow <- map(seq_len(nrow(csCorr)), .extractCorrelations, csCorr = csCorr) expanded <- `names<-`( as_tibble(csCorr, .name_repair = "minimal"), str_c("cs_corr_", seq_len(ncol(csCorr))) ) - # unname(): apply() names its result by the matrix rownames, which map_dbl - # then carries into the column (tibbles preserve element names). base |> bind_cols(expanded) |> mutate( - cs_corr_max = unname(map_dbl(perRow, "max_corr")), - cs_corr_min = unname(map_dbl(perRow, "min_corr")) + cs_corr_max = map_dbl(perRow, "max_corr"), + cs_corr_min = map_dbl(perRow, "min_corr") ) } @@ -4267,7 +4338,9 @@ extractTopPipInfo <- function(fmRow, sumstats) { # Sumstat counterpart of .fmFitSusieIndiv. Calls susieR::susie_rss with -# the same unmappable_effects switch, chained init, and userArgs merge. +# the same unmappable_effects switch, chained init, and userArgs merge. The +# LD is either the matrix `R` or, in its place, a factor `X` of it (see +# .ldRefFactor()), which susie_rss correlates itself without forming R. # @noRd .fmFitSusieRss <- function( z, @@ -4279,14 +4352,16 @@ extractTopPipInfo <- function(fmRow, sumstats) { userArgs = NULL, rFinite = NULL, rMismatch = "none", - rssControl = NULL + rssControl = NULL, + X = NULL ) { info <- .fmRssValidateToken(token) + ldArgs <- if (is.null(X)) list(R = R) else list(X = X) baseArgs <- .fmRssAddControl( c( + list(z = z), + ldArgs, list( - z = z, - R = R, n = n, coverage = coverage, unmappable_effects = info$unmappableEffects @@ -4306,7 +4381,7 @@ extractTopPipInfo <- function(fmRow, sumstats) { userArgs, chainFromInf, z, - R, + ldArgs, n, coverage ) @@ -4354,14 +4429,15 @@ extractTopPipInfo <- function(fmRow, sumstats) { } # SuSiE-RSS(-ash) initialised from a SuSiE-inf fit; userArgs folded into the arg -# prep so L_greedy is clamped rather than passed through raw. +# prep so L_greedy is clamped rather than passed through raw. `ldArgs` is +# list(R = ) or list(X = ), whichever form of the LD the fit reads. .fmRssChainedArgs <- function( baseArgs, token, userArgs, chainFromInf, z, - R, + ldArgs, n, coverage ) { @@ -4374,7 +4450,7 @@ extractTopPipInfo <- function(fmRow, sumstats) { list_assign( list_modify(baseArgs, !!!compact(chainedArgs)), z = z, - R = R, + !!!ldArgs, n = n, coverage = coverage ) @@ -4481,8 +4557,12 @@ extractTopPipInfo <- function(fmRow, sumstats) { tid, af, fitRetention, - region = NULL + region = NULL, + fitFullData = TRUE ) { + if (isFALSE(fitFullData)) { + return(set_names(rep(list(.fmCvOnlyRow()), length(toRun)), toRun)) + } chainLocal <- .fmResolveSusieChain(toRun, initializeWithSusieInf) infFit <- .fmXInfFit( chainLocal, @@ -4531,7 +4611,8 @@ extractTopPipInfo <- function(fmRow, sumstats) { af = NULL, fitRetention = "slim", seed = NULL, - region = NULL + region = NULL, + fitFullData = TRUE ) { out <- .fmXFitAll( toRun, @@ -4545,7 +4626,8 @@ extractTopPipInfo <- function(fmRow, sumstats) { tid = tid, af = af, fitRetention = fitRetention, - region = region + region = region, + fitFullData = fitFullData ) .fmXCrossValidate( out, @@ -4708,13 +4790,15 @@ extractTopPipInfo <- function(fmRow, sumstats) { .fmAttachCv(out[[tk]], .fmSliceCv(cv, tk)) } -# Fit every requested RSS token on one (z, R, n) sumstat block, returning a +# Fit every requested RSS token on one (z, LD, n) sumstat block, returning a # named list (token -> FineMappingRow). The sumstat analog of .fmFitXBlock: # the QtlSumStats and GwasSumStats methods both call it and differ only in how -# they push the returned entries (tuple shape) and the progress `label`. +# they push the returned entries (tuple shape) and the progress `label`. `ld` +# is list(R, X) as .fmRssLd() builds it: the LD matrix, the LD reference's +# factor, or both. .fmFitRssBlock <- function( z, - R, + ld, n, toRun, initializeWithSusieInf, @@ -4732,7 +4816,7 @@ extractTopPipInfo <- function(fmRow, sumstats) { infFit <- .fmRssInfFit( chainLocal, z = z, - R = R, + R = ld$R, n = n, coverage = credibleSetParam$coverage, methodArgs = methodArgs, @@ -4747,7 +4831,7 @@ extractTopPipInfo <- function(fmRow, sumstats) { chainLocal = chainLocal, infFit = infFit, z = z, - R = R, + ld = ld, n = n, credibleSetParam = credibleSetParam, methodArgs = methodArgs, @@ -4771,7 +4855,7 @@ extractTopPipInfo <- function(fmRow, sumstats) { chainLocal, infFit, z, - R, + ld, n, credibleSetParam, methodArgs, @@ -4788,7 +4872,7 @@ extractTopPipInfo <- function(fmRow, sumstats) { chainLocal, infFit, z = z, - R = R, + ld = ld, n = n, coverage = credibleSetParam$coverage, methodArgs = methodArgs, @@ -4801,7 +4885,7 @@ extractTopPipInfo <- function(fmRow, sumstats) { } entry <- .fmRssPostprocess( f$fit, - R = R, + ld = ld, z = z, credibleSetParam = credibleSetParam, af = af, @@ -4849,12 +4933,14 @@ extractTopPipInfo <- function(fmRow, sumstats) { # Standard multi-effect SuSiE-RSS fit (susie / susieAsh): the only branch that # carries susieR's finite-sample R diagnostics and honours the SER fallback. +# The plain susie model reads the LD reference's factor when there is one; +# susieAsh needs the matrix (see .fmRssLd()). .fmRssFitStd <- function( tk, chainLocal, infFit, z, - R, + ld, n, coverage, methodArgs, @@ -4874,9 +4960,10 @@ extractTopPipInfo <- function(fmRow, sumstats) { msg <- glue("Fitting {tk} (RSS) for {label} ...") inform(msg) } + useFactor <- tk == "susie" && !is.null(ld$X) fit <- .fmFitSusieRss( z, - R, + if (useFactor) NULL else ld$R, n, tk, chainFromInf = chainFrom, @@ -4884,7 +4971,8 @@ extractTopPipInfo <- function(fmRow, sumstats) { userArgs = methodArgs[[tk]], rFinite = susieRssParam$rFinite, rMismatch = susieRssParam$rMismatch, - rssControl = .rssControlList(susieRssParam$control) + rssControl = .rssControlList(susieRssParam$control), + X = if (useFactor) ld$X ) .fmRssSerFallback(fit, susieRssParam) } @@ -4921,7 +5009,7 @@ extractTopPipInfo <- function(fmRow, sumstats) { chainLocal, infFit, z, - R, + ld, n, coverage, methodArgs, @@ -4953,7 +5041,7 @@ extractTopPipInfo <- function(fmRow, sumstats) { chainLocal, infFit, z = z, - R = R, + ld = ld, n = n, coverage = coverage, methodArgs = methodArgs, @@ -4964,10 +5052,12 @@ extractTopPipInfo <- function(fmRow, sumstats) { list(fit = std$fit, flag = std$flag, isStd = TRUE, multiFit = std$multiFit) } -# Post-process one RSS fit into a finemapping entry. +# Post-process one RSS fit into a finemapping entry. The credible sets' +# purity reads the LD reference's factor when there is one (only the sets' +# own columns are correlated), else the LD matrix. .fmRssPostprocess <- function( fit, - R, + ld, z, credibleSetParam, af, @@ -4978,7 +5068,7 @@ extractTopPipInfo <- function(fmRow, sumstats) { .fmPostprocessOne( fit = fit, method = "susieRss", - dataX = R, + dataX = ld$X %||% ld$R, dataY = list(z = z), af = af, # Per-variant effective N (reporting-only, top_loci$N). NULL on any @@ -4986,7 +5076,7 @@ extractTopPipInfo <- function(fmRow, sumstats) { # never 1. This is NOT `n` (the scalar median the RSS fit consumes). n = nVar, region = region, - csInput = "Xcorr", + csInput = if (is.null(ld$X)) "Xcorr" else "X", credibleSetParam = credibleSetParam, fitRetention = fitRetention ) @@ -5130,13 +5220,13 @@ extractTopPipInfo <- function(fmRow, sumstats) { str_c(methodTag, "_", ix) } -# Trailing integer of a "_" cs string (0 when empty / NA). +# Trailing integer of "_" credible-set labels, the inverse of +# .btlCsLabel ("susie_3" -> 3L). Vectorized. 0 marks "in no credible set", +# which is also what an empty or NA label means. # @noRd -.cs95ToIndex <- function(s) { - if (is.na(s) || str_length(s) == 0L) { - return(0L) - } - suppressWarnings(as.integer(str_remove(s, "^.*_"))) +.csLabelIndex <- function(labels) { + idx <- suppressWarnings(as.integer(str_remove(labels, "^.*_"))) + replace(idx, is.na(labels) | str_length(labels) == 0L, 0L) } # @noRd @@ -5166,11 +5256,6 @@ extractTopPipInfo <- function(fmRow, sumstats) { ) } -# @noRd -.asDataFrameT <- function(x) { - as.data.frame(t(x)) -} - # @noRd .amRow <- function(l, am) { as.numeric(am[l, ]) diff --git a/R/genotypeIo.R b/R/genotypeIo.R index cc5d515c2..0fdb4feab 100644 --- a/R/genotypeIo.R +++ b/R/genotypeIo.R @@ -1,7 +1,8 @@ -#' @title Genotype I/O via GenotypeHandle -#' @description Read genotype data from various formats (VCF, plink1, plink2, -#' GDS) and provide block-level genotype extraction without requiring format -#' conversion. +#' @title Genotype I/O +#' @description Read genotype data in its own format (VCF, plink1, plink2, +#' GDS, BGEN) as a lazily read genotype panel, without converting it: +#' PLINK2 and BGEN files through a GenotypeHandle, VCF, GDS and PLINK1 +#' files through a GenotypeDosageSeed. #' @name pecotmr-genotype-io #' @keywords internal #' @importFrom SummarizedExperiment SummarizedExperiment rowRanges @@ -34,9 +35,7 @@ setMethod( "readGenotypes", signature(path = "character"), function(path, format = NULL, vcfArgs = list()) { - .genotypeExperiment( - .readGenotypeHandle(path, format = format, vcfArgs = vcfArgs) - ) + .readGenotypePanel(path, format = format, vcfArgs = vcfArgs) } ) @@ -63,10 +62,9 @@ setMethod( vcfArgs = list() ) { # The keyword sources are declared here rather than absorbed by `...` - # and forwarded: GenotypeHandle() is internal, so this signature is - # the only place a caller can name them, and a misspelled source - # should be an error at the call rather than a silently unset one. - .genotypeExperiment(GenotypeHandle( + # and forwarded, so a misspelled source is an error at the call + # rather than a silently unset one. + .genotypePanelFromSources( plink1Prefix = plink1Prefix, plink2Prefix = plink2Prefix, bed = bed, @@ -81,24 +79,100 @@ setMethod( chroms = chroms, format = format, vcfArgs = vcfArgs - )) + ) } ) -# The handle behind a panel. Internal: the handle is the seed layer, and the +# The panel a keyword source names: exactly one source, checked as +# GenotypeHandle() checks it. A PLINK2 triplet is read through a handle, a +# PLINK1 one as a panel; a file an LD-meta row or a per-chromosome meta +# names, through whatever reads its format. +# @noRd +.genotypePanelFromSources <- function( + plink1Prefix = NULL, + plink2Prefix = NULL, + bed = NULL, + bim = NULL, + fam = NULL, + pgen = NULL, + pvar = NULL, + psam = NULL, + ldMeta = NULL, + region = NULL, + genoMeta = NULL, + chroms = NULL, + format = NULL, + vcfArgs = list() +) { + flags <- .ghValidateArgs( + bed = bed, + bim = bim, + fam = fam, + pgen = pgen, + pvar = pvar, + psam = psam, + ldMeta = ldMeta, + region = region + ) + sources <- .ghResolveSources( + path = NULL, + plink1Prefix = plink1Prefix, + plink2Prefix = plink2Prefix, + ldMeta = ldMeta, + genoMeta = genoMeta, + chroms = chroms, + flags = flags + ) + switch( + names(sources)[which(sources)], + plink1Prefix = .readGenotypePanel(plink1Prefix, format = "plink1"), + plink2Prefix = .genotypeExperiment(.makePlink2Handle(plink2Prefix)), + plink1Triplet = .readGenotypePanel( + .plink1TripletStem(bed, bim, fam), + format = "plink1" + ), + plink2Triplet = .genotypeExperiment( + .genotypeHandleFromPlink2Triplet(pgen, pvar, psam) + ), + ldMeta = .ghLdPathToPanel(.ghResolveLdPath(ldMeta, region), vcfArgs), + genoMeta = .chromMetaPanel(genoMeta, chroms, format) + ) +} + +# The formats read as a panel directly, through a GenotypeDosageSeed; every +# other format is read through a GenotypeHandle. +# @noRd +.DOSAGE_PANEL_FORMATS <- c("vcf", "gds", "plink1") + +# The panel of one genotype file or PLINK prefix. A VCF, GDS or PLINK1 file +# is read as a panel directly; a PLINK2 or BGEN file through a +# GenotypeHandle. +# @noRd +.readGenotypePanel <- function(path, format = NULL, vcfArgs = list()) { + format <- format %||% .requireGenotypeFormat(path, "readGenotypes") + if (!is_in(format, .DOSAGE_PANEL_FORMATS)) { + return(.genotypeExperiment(.readGenotypeHandle(path, format = format))) + } + .withSourceProjection(.readDosagePanel(path, format, vcfArgs)) +} + +# The handle behind a panel of a format a GenotypeHandle reads: PLINK2 or +# BGEN. Internal: the handle is the seed layer, and the # handle-construction machinery below calls this rather than readGenotypes() # so it does not wrap and immediately unwrap a panel on every hop. # @noRd -.readGenotypeHandle <- function(path, format = NULL, vcfArgs = list()) { - if (is.null(format)) { - format <- .h2DetectFormat(path) - } +.readGenotypeHandle <- function(path, format = NULL) { + format <- format %||% .requireGenotypeFormat(path, "readGenotypes") switch( format, - "gds" = .makeGdsHandle(path), - "vcf" = .makeVcfHandle(path, vcfArgs = vcfArgs), - "plink1" = .makePlink1Handle(path), "plink2" = .makePlink2Handle(path), + "bgen" = .makeBgenHandle(path), + "vcf" = , + "gds" = , + "plink1" = abort(c( + glue("A {format} file is read as a genotype panel, not a handle."), + i = "Read it with readGenotypes()." + )), .abortUnsupportedFormat(format) ) } @@ -111,21 +185,13 @@ setMethod( # lets @snpInfo be row-subset (e.g. to the range of a study's summary stats) # while genotype reads that index BY FILE POSITION still resolve correctly: # PLINK2's ReadList(variant_subset=) and the per-chromosome PLINK2 view inside -# sharded routing read fileIdx[snpIdx]; the by-id backends (plink1/gds/vcf) look -# up snpInfo$SNP[snpIdx] / $BP[snpIdx] and ignore fileIdx entirely. For a full -# (unsubset) handle fileIdx == seq_len(nrow), so reads are unchanged. +# sharded routing read fileIdx[snpIdx]. For a full (unsubset) handle fileIdx +# == seq_len(nrow), so reads are unchanged. # @noRd .withFileIdx <- function(snpInfo) { mutate(snpInfo, fileIdx = seq_len(nrow(snpInfo))) } -# Restrict a GenotypeHandle's @snpInfo to `keep` (a logical mask or integer row -# indices into @snpInfo). Genotype reads stay correct because fileIdx carries -# each kept variant's original file position; everything else (path/format/ -# pgenPtr/chromPaths/samples) is preserved. NULL-safe; a no-op when nothing is -# dropped. Handles built before the fileIdx column existed are NOT subset (the -# read path would be positional) -- return them unchanged. -# @noRd # A handle trimmed to zero variants, every other property preserved. # # Separate from .subsetGenotypeHandle() because that declines to subset a @@ -142,7 +208,7 @@ setMethod( # dead weight (~10k anonymous names, the bulk of a skipped-region file). # nSamples must go to 0 alongside sampleIds, or dm (variants x nSamples) # would disagree with the now-empty derived sample dimnames. Reached only - # via .emptySketch (the empty / PIP-skip path), never on a surviving region. + # via .emptyLdRef (the empty / PIP-skip path), never on a surviving region. methods::initialize( handle, snpInfo = slice(snpInfo(handle), integer(0)), @@ -151,6 +217,13 @@ setMethod( ) } +# Restrict a GenotypeHandle's @snpInfo to `keep` (a logical mask or integer row +# indices into @snpInfo). Genotype reads stay correct because fileIdx carries +# each kept variant's original file position; everything else (path/format/ +# pgenPtr/chromPaths/samples) is preserved. NULL-safe; a no-op when nothing is +# dropped. Handles built before the fileIdx column existed are NOT subset (the +# read path would be positional) -- return them unchanged. +# @noRd .subsetGenotypeHandle <- function(handle, keep) { if (is.null(handle)) { return(NULL) @@ -166,149 +239,13 @@ setMethod( methods::initialize(handle, snpInfo = slice(si, keepIdx)) } -#' @importFrom checkmate assertFileExists -#' @keywords internal -.makeGdsHandle <- function(path) { - if (!requireNamespace("SNPRelate", quietly = TRUE)) { - abort("Package 'SNPRelate' is required for reading GDS files.") - } - if (!requireNamespace("gdsfmt", quietly = TRUE)) { - abort("Package 'gdsfmt' is required for reading GDS files.") - } - assertFileExists(path, access = "r", .var.name = "GDS file") - - snpInfo <- .gdsSnpInfo(path) - - sampleIds <- .withGds(path, .gdsReadSampleIds) - nSamples <- length(sampleIds) - - new( - "GenotypeHandle", - path = path, - format = "gds", - snpInfo = .withFileIdx(snpInfo), - nSamples = as.integer(nSamples), - sampleIds = sampleIds, - pgenPtr = NULL - ) -} - -#' @importFrom checkmate assertFileExists -#' @keywords internal -.makeVcfHandle <- function(path, vcfArgs = list()) { - if (!requireNamespace("VariantAnnotation", quietly = TRUE)) { - abort("Package 'VariantAnnotation' is required for reading VCF files.") - } - assertFileExists(path, access = "r", .var.name = "VCF file") - - hdr <- VariantAnnotation::scanVcfHeader(path) - sampleIds <- as.character(VariantAnnotation::samples(hdr)) - nSamples <- length(sampleIds) - - param <- VariantAnnotation::ScanVcfParam( - fixed = c("ALT"), - info = NA, - geno = NA - ) - vcf <- exec( - VariantAnnotation::readVcf, - path, - param = param, - !!!vcfArgs - ) - rd <- rowRanges(vcf) - - # pecotmr convention: A1 = ALT (effect), A2 = REF - snpInfo <- tibble( - SNP = names(rd), - CHR = as.character(seqnames(rd)), - BP = as.integer(start(rd)), - A1 = map_chr(rd$ALT, .gtFirstAllele), - A2 = as.character(rd$REF) - ) - - new( - "GenotypeHandle", - path = normalizePath(path), - format = "vcf", - snpInfo = .withFileIdx(snpInfo), - nSamples = as.integer(nSamples), - sampleIds = sampleIds, - pgenPtr = NULL - ) -} - -#' @keywords internal -.makePlink1Handle <- function(path) { - if (!requireNamespace("snpStats", quietly = TRUE)) { - abort("Package 'snpStats' is required for reading plink1 files.") - } - stem <- .plink1RequireFiles(path) - meta <- .plink1ReadMeta(stem) - new( - "GenotypeHandle", - path = stem, - format = "plink1", - snpInfo = .withFileIdx(meta$snpInfo), - nSamples = as.integer(meta$nSamples), - sampleIds = meta$sampleIds, - pgenPtr = NULL - ) -} - -# Resolve the plink1 stem and assert its .bed/.bim/.fam all exist. -# @noRd -#' @importFrom checkmate assertFileExists -.plink1RequireFiles <- function(path) { - stem <- .plinkStem(path) - assertFileExists( - str_c(stem, c(".bed", ".bim", ".fam")), - access = "r", - .var.name = "Plink file" - ) - stem -} - -# Read the .bim / .fam sidecars into snpInfo + sample metadata. Returns -# list(snpInfo, sampleIds, nSamples). -# @noRd -.plink1ReadMeta <- function(stem) { - # col_types all-character so readr never coerces a column: a bim whose - # allele column is uniformly "T"/"F" (all-A/T SNPs) would otherwise become - # logical, silently corrupting A1/A2 (BP is cast to integer below). - bim <- read_table( - str_c(stem, ".bim"), - col_names = c("CHR", "SNP", "CM", "BP", "A1", "A2"), - col_types = cols(.default = col_character()) - ) - fam <- read_table( - str_c(stem, ".fam"), - col_names = FALSE, - col_types = cols(.default = col_character()) - ) - # plink1 bim: col5 = A1 (minor/effect), col6 = A2 (major/ref); matches the - # pecotmr convention directly. - snpInfo <- tibble( - SNP = bim$SNP, - CHR = as.character(bim$CHR), - BP = as.integer(bim$BP), - A1 = bim$A1, - A2 = bim$A2 - ) - list( - snpInfo = snpInfo, - sampleIds = as.character(fam[[2]]), - nSamples = nrow(fam) - ) -} - #' @keywords internal .makePlink2Handle <- function(path) { if (!requireNamespace("pgenlibr", quietly = TRUE)) { abort("Package 'pgenlibr' is required for reading plink2 files.") } - stem <- .plinkStem(path) + stem <- .genotypeStem(path) # Use pecotmr's resolvePlink2Paths for robust path detection (.pvar.zst) paths <- resolvePlink2Paths(stem) @@ -376,11 +313,8 @@ extractBlockGenotypes <- function(handle, snpIdx, meanImpute = TRUE) { if (length(.genotypeChromPaths(handle)) > 0L) { return(.extractBlockSharded(handle, snpIdx, meanImpute = meanImpute)) } - # An empty request is answered without reaching a reader. This is not - # defensive tidiness: snpStats::read.plink(select.snps = character(0)) - # SEGFAULTS, taking the R session with it rather than raising a condition - # tryCatch could see. The sharded branch above already returns early for - # the same reason; this is the single-file path catching up. + # An empty request is answered without reaching a reader, which need not + # accept one, as the sharded branch above already answers it. if (length(snpIdx) == 0L) { return(.emptyBlockSe(sampleIds(handle))) } @@ -388,9 +322,6 @@ extractBlockGenotypes <- function(handle, snpIdx, meanImpute = TRUE) { # .restoreRequestedOrder() for why this is not merely tidiness. ord <- order(.genotypeFilePos(handle, snpIdx)) raw <- .extractBlockByFormat(handle, snpIdx[ord]) - if (is.null(raw)) { - return(NULL) - } ordered <- .restoreRequestedOrder(raw, ord) geno <- if (meanImpute) .meanImputeGeno(ordered) else ordered .blockGenotypesToSe(geno, handle, snpIdx) @@ -408,17 +339,14 @@ extractBlockGenotypes <- function(handle, snpIdx, meanImpute = TRUE) { # Put a block's variant columns back into the order the caller asked for. # -# snpStats (`select.snps=`) and SNPRelate (`snp.id=`) return variants in FILE -# order however they were asked for, while .blockGenotypesToSe() labels the -# block from snpInfo[snpIdx], i.e. the REQUESTED order. An unsorted request -# therefore produced a block whose names and dosages described different -# variants -- silently, since both are the right length. pgenlibr reads -# positionally and was unaffected. -# -# Reading ascending and permuting back is correct for every backend, including -# the ones that do honour the request: given a sorted request they return -# sorted output either way, so the inverse permutation restores the caller's -# order in both cases. +# .blockGenotypesToSe() labels the block from snpInfo[snpIdx], i.e. the +# REQUESTED order, so a backend returning variants in FILE order however they +# were asked for -- snpStats did, when it read PLINK1 -- would yield a block +# whose names and dosages describe different variants, silently, since both +# are the right length. Reading ascending and permuting back is correct for +# every backend, whether or not it honours the requested order: given a +# sorted request it returns sorted output either way, so the inverse +# permutation restores the caller's order. # @noRd .restoreRequestedOrder <- function(geno, ord) { if (ncol(geno) != length(ord)) { @@ -449,10 +377,18 @@ extractBlockGenotypes <- function(handle, snpIdx, meanImpute = TRUE) { as.matrix(genotypeCovariates) } cd <- .genotypeColData(gCov, colnames(dosage)) - SummarizedExperiment::SummarizedExperiment( - assays = list(dosage = dosage), - rowRanges = .genotypeSnpRanges(genotypes, rownames(dosage)), - colData = cd + # A stochastic sketch's dosages are projections, so its real sample count + # and allele frequencies are recorded from its sidecar here, once; and + # where the genotypes come from is recorded for what needs the file + # (.ldRefSource()). + .withLdProjection( + SummarizedExperiment::SummarizedExperiment( + assays = list(dosage = dosage), + rowRanges = .genotypeSnpRanges(genotypes, rownames(dosage)), + colData = cd, + metadata = list(genotypeSource = .genotypeSourceRecord(genotypes)) + ), + .sketchProjectionRecord(genotypes) ) } @@ -518,7 +454,28 @@ extractBlockGenotypes <- function(handle, snpIdx, meanImpute = TRUE) { # describe variants the same way, and overlaps between the two actually hit. # @noRd .genotypeSnpRanges <- function(genotypes, variantIds) { - si <- snpInfo(genotypes) + .snpInfoRanges(snpInfo(genotypes), variantIds) +} + +# A panel's variants snpInfo-style, one row per rowRanges element: SNP (the +# file's own ids), CHR (canonical), BP, A1, A2. The inverse of +# .snpInfoRanges(), so genotypes from any backend answer alike. +# @noRd +.rangesSnpInfo <- function(gr) { + mc <- S4Vectors::mcols(gr) + tibble( + SNP = as.character(mc$SNP), + CHR = canonChrom(as.character(seqnames(gr))), + BP = as.integer(start(gr)), + A1 = as.character(mc$A1), + A2 = as.character(mc$A2) + ) +} + +# The rowRanges of variants described snpInfo-style (SNP, CHR, BP, A1, A2), +# named `variantIds`: a handle's, or a VCF, GDS or PLINK1 panel's rows. +# @noRd +.snpInfoRanges <- function(si, variantIds) { `names<-`( GenomicRanges::GRanges( seqnames = withChrPrefix(as.character(si$CHR)), @@ -537,10 +494,8 @@ extractBlockGenotypes <- function(handle, snpIdx, meanImpute = TRUE) { fmt <- genotypeFormat(handle) switch( fmt, - "gds" = .extractBlockGds(handle, snpIdx), - "vcf" = .extractBlockVcf(handle, snpIdx), - "plink1" = .extractBlockPlink1(handle, snpIdx), "plink2" = .extractBlockPlink2(handle, snpIdx), + "bgen" = .extractBlockBgen(handle, snpIdx), .abortUnsupportedFormat(fmt, "extractBlockGenotypes") ) } @@ -668,60 +623,6 @@ extractBlockGenotypes <- function(handle, snpIdx, meanImpute = TRUE) { ) } -#' @keywords internal -.extractBlockGds <- function(handle, snpIdx) { - .withGds( - .genotypeReadPath(handle), - .gdsBlockGeno, - fnArgs = list(handle = handle, snpIdx = snpIdx), - allow.fork = TRUE - ) -} - -#' @keywords internal -.extractBlockVcf <- function(handle, snpIdx) { - si <- slice(snpInfo(handle), snpIdx) - gr <- GRanges( - seqnames = si$CHR, - ranges = IRanges(start = si$BP, end = si$BP) - ) - param <- VariantAnnotation::ScanVcfParam( - which = gr, - fixed = NA, - info = NA, - geno = "GT" - ) - vcf <- VariantAnnotation::readVcf( - .genotypeReadPath(handle), - genome = "", - param = param - ) - gt <- VariantAnnotation::geno(vcf)$GT - - # Convert GT strings to ALT dosage (A1 dosage): one column per variant, - # laid side by side rather than filled into a preallocated matrix. - matrix( - map_dbl(as.vector(t(gt)), .gtStringToDosage), - nrow = ncol(gt), - ncol = nrow(gt) - ) -} - -#' @keywords internal -.extractBlockPlink1 <- function(handle, snpIdx) { - snpIds <- snpInfo(handle)$SNP[snpIdx] - pathStem <- .genotypeReadPath(handle) - plinkData <- snpStats::read.plink( - bed = str_c(pathStem, ".bed"), - bim = str_c(pathStem, ".bim"), - fam = str_c(pathStem, ".fam"), - select.snps = snpIds - ) - # snpStats as(x, "numeric") gives count of B allele (A2/bim col 6). - # Flip to count A1 (bim col 5 / effect allele). - `storage.mode<-`(2 - as(plinkData$genotypes, "numeric"), "double") -} - #' @keywords internal #' @importFrom rlang try_fetch .extractBlockPlink2 <- function(handle, snpIdx) { @@ -769,21 +670,17 @@ extractBlockGenotypes <- function(handle, snpIdx, meanImpute = TRUE) { # @noRd .dosageMatrix <- function(handle, snpIdx, meanImpute = TRUE) { block <- extractBlockGenotypes(handle, snpIdx, meanImpute = meanImpute) - # NULL, not an error, when the reader declines the block: callers read - # that as "no genotypes here" (computeLd answers with an identity). - if (is.null(block)) { - return(NULL) - } t(SummarizedExperiment::assay(block, "dosage")) } -# Open a GDS read-only, guarantee it is closed on exit, and return fn(gds). -# The shared form of the snpgdsOpen(...) + on.exit(snpgdsClose(gds)) idiom -# used across the GDS readers. +# Resource bracket: open the SNPRelate GDS at `path` read-only, guarantee it +# is closed on exit, and run `fn(gds, ...)` -- the snpgdsOpen(...) + +# on.exit(snpgdsClose(gds)) idiom of the on-disk LD routine, which needs +# SNPRelate's own handle. `fn` is a top-level function (not an inline +# closure); its per-call inputs are threaded through `...`. A file a panel's +# GDSArray backend already holds open in this session is opened again rather +# than refused. # @noRd -# Resource bracket: open the GDS at `path`, guarantee it is closed on exit, and -# run `fn(gds, ...)`. `fn` is a top-level function (not an inline closure); its -# per-call inputs are threaded through `...`. .withGds <- function( path, fn, @@ -794,6 +691,7 @@ extractBlockGenotypes <- function(handle, snpIdx, meanImpute = TRUE) { gds <- SNPRelate::snpgdsOpen( path, readonly = readonly, + allow.duplicate = TRUE, allow.fork = allow.fork ) on.exit(SNPRelate::snpgdsClose(gds)) @@ -801,11 +699,11 @@ extractBlockGenotypes <- function(handle, snpIdx, meanImpute = TRUE) { } #' @keywords internal -.computeBlockLdGds <- function(handle, snpIdx) { +.computeBlockLdGds <- function(path, snpIds) { .withGds( - .genotypeReadPath(handle), + path, .gdsBlockLd, - fnArgs = list(handle = handle, snpIdx = snpIdx), + fnArgs = list(snpIds = snpIds), allow.fork = TRUE ) } @@ -861,88 +759,86 @@ extractBlockGenotypes <- function(handle, snpIdx, meanImpute = TRUE) { replace(geno, naMask, means[col(geno)[naMask]]) } -#' @keywords internal -.gdsSnpInfo <- function(gdsPath) { - .withGds(gdsPath, .gdsReadSnpInfo) -} +# ============================================================================= +# Genotype format detection +# ----------------------------------------------------------------------------- +# The one place a genotype path's format is told. A file is told by its +# extension, in any case; a PLINK prefix by the PLINK file beside it, a .pgen +# before a .bed (PLINK2 can hold dosages, so it wins when both are there). A +# VCF, GDS or BGEN file is always named by its own path. +# ============================================================================= -# Map a lowercase file extension to a genotype format, or NULL if unrecognized. +# The extensions naming each genotype format, as regular expressions. # @noRd -.h2FormatFromExt <- function(ext) { - switch( - ext, - "vcf" = "vcf", - "bcf" = "vcf", - "bed" = "plink1", - "bim" = "plink1", - "fam" = "plink1", - "pgen" = "plink2", - "pvar" = "plink2", - "psam" = "plink2", - "gds" = "gds", - "rds" = "rds", - "rdata" = "rds", - "annot" = "ldsc_annot", - "bw" = "bigwig", - "bigwig" = "bigwig", - NULL - ) -} - -.h2DetectFormat <- function(path) { - lpath <- str_to_lower(path) - if ( - str_detect(lpath, "\\.vcf\\.gz$") || - str_detect(lpath, "\\.vcf\\.bgz$") - ) { - return("vcf") - } - if (str_detect(lpath, "\\.annot\\.gz$")) { - return("ldsc_annot") - } +.GENOTYPE_EXTENSIONS <- c( + vcf = "vcf(\\.b?gz)?|bcf", + gds = "gds", + bgen = "bgen", + plink1 = "bed|bim|fam", + plink2 = "pgen|pvar(\\.zst)?|psam" +) + +# The genotype format a file's extension names, or NULL when it names none. +# @noRd +.genotypeFileFormat <- function(path) { + named <- str_detect( + str_to_lower(path), + str_c("\\.(", .GENOTYPE_EXTENSIONS, ")$") + ) + if (any(named)) names(.GENOTYPE_EXTENSIONS)[which(named)[[1L]]] else NULL +} - ext <- str_to_lower(file_ext(path)) - if (str_length(ext) > 0L) { - detected <- .h2FormatFromExt(ext) - if (!is.null(detected)) return(detected) +# The genotype format of a file or PLINK prefix: by the file's extension, or +# for a prefix by the PLINK file beside it; NULL when neither tells. +# @noRd +.genotypePathFormat <- function(path) { + byExtension <- .genotypeFileFormat(path) + if (!is.null(byExtension)) { + return(byExtension) } - # Check for file stems, including dotted prefixes such as sample.EUR.chr21. - if ( - file.exists(str_c(path, ".pgen")) || file.exists(str_c(path, ".pvar")) - ) { + if (file.exists(str_c(path, ".pgen"))) { return("plink2") } - if (file.exists(str_c(path, ".bed")) || file.exists(str_c(path, ".bim"))) { + if (file.exists(str_c(path, ".bed"))) { return("plink1") } - if (file.exists(str_c(path, ".gds"))) { - return("gds") - } - if (str_length(ext) > 0L) { - msg <- glue("Cannot detect format from extension: {ext}") - abort(msg) - } - msg <- glue("Cannot detect genotype format for path: {path}") - abort(msg) + NULL } -#' @title Detect Plink File Stem -#' @description Given any plink file path, return the stem. -#' @param path Character, path to any plink file. -#' @return Character, file stem without extension. -#' @keywords internal -.plinkStem <- function(path) { - # Only strip known plink extensions; leave other paths as-is (they may - # already be the stem, e.g. "prefix.genotype" -> "prefix.genotype.bed") - ext <- file_ext(path) - plinkExts <- c("bed", "bim", "fam", "pgen", "pvar", "psam") - if (is_in(str_to_lower(ext), plinkExts)) { - file_path_sans_ext(path) - } else { - path - } +# .genotypePathFormat(), or an error from `label` when the path names no +# genotype format. +# @noRd +.requireGenotypeFormat <- function(path, label) { + format <- .genotypePathFormat(path) + if (!is.null(format)) { + return(format) + } + abort(c( + glue( + "{label}: '{path}' is neither a genotype file nor a PLINK prefix." + ), + i = str_c( + "A genotype file is named by its extension (.vcf.gz, .vcf.bgz, ", + ".gds, .bgen, .bed, .pgen); a PLINK prefix by the .pgen or .bed ", + "beside it." + ) + )) } +# The stem of a genotype path: the path without the extension naming its +# format, which is what PLINK's readers and a file's sidecars (.afreq, +# .stochastic_meta.tsv, .sample) are named after. A PLINK prefix is its own +# stem. +# @noRd +.genotypeStem <- function(path) { + str_remove( + path, + regex( + str_c("\\.(", str_flatten(.GENOTYPE_EXTENSIONS, "|"), ")$"), + ignore_case = TRUE + ) + ) +} # ============================================================================= # Format-specific file readers @@ -956,34 +852,17 @@ extractBlockGenotypes <- function(handle, snpIdx, meanImpute = TRUE) { # read PLINK files #' @importFrom vroom vroom -#' @importFrom tools file_path_sans_ext #' @importFrom Rsamtools TabixFile seqnamesTabix scanTabix headerTabix #' @importFrom GenomicRanges GRanges seqnames #' @importFrom SummarizedExperiment assay readBim <- function(bed) { - bimf <- str_c(file_path_sans_ext(bed), ".bim") + bimf <- str_c(.genotypeStem(bed), ".bim") `colnames<-`( vroom(bimf, col_names = FALSE), c("chrom", "id", "gpos", "pos", "a1", "a0") ) } -#' @importFrom vroom vroom -#' @importFrom tools file_path_sans_ext -readFam <- function(bed) { - famf <- str_c(file_path_sans_ext(bed), ".fam") - return(vroom(famf, col_names = FALSE)) -} - -# open bed/bim/fam: A PLINK 1 .bed is a valid .pgen -openBed <- function(bed) { - if (!requireNamespace("pgenlibr", quietly = TRUE)) { - abort("Package 'pgenlibr' is required for this function.") - } - rawSCt <- nrow(readFam(bed)) - return(pgenlibr::NewPgen(bed, raw_sample_ct = rawSCt)) -} - #' Read a PLINK2 allele frequency file (.afreq or .afreq.zst) #' #' @param prefix File prefix (without .afreq extension). @@ -1103,19 +982,16 @@ readStochasticMeta <- function(path, format = NULL) { #' Search for a stochastic genotype sidecar file alongside a genotype path. #' #' Looks for \code{.afreq}, \code{.afreq.zst}, and \code{.stochastic_meta.tsv} -#' files next to the given genotype path. For extension-based paths (VCF, GDS), -#' the extension is stripped first. For prefix-based paths (PLINK1/2), the -#' prefix is used directly. +#' files next to the given genotype path. For extension-based paths (VCF, GDS, +#' BGEN, or a PLINK file), the extension is stripped first. For prefix-based +#' paths (PLINK1/2), the prefix is used directly. #' #' @param genotypePath Path to the genotype data (prefix or file path). #' @return Path to the first sidecar file found, or \code{NULL}. #' @noRd findStochasticMeta <- function(genotypePath) { # Strip known genotype extensions to get the stem - stem <- str_remove( - genotypePath, - "\\.(vcf|vcf\\.gz|bcf|gds|bed|bim|fam|pgen|pvar|psam)$" - ) + stem <- .genotypeStem(genotypePath) candidates <- c( str_c(stem, ".afreq"), str_c(stem, ".afreq.zst"), @@ -1125,7 +1001,6 @@ findStochasticMeta <- function(genotypePath) { if (length(found) > 0) found[1] else NULL } - #' Invert min-max [0,2] scaling to recover the original U matrix #' #' Stochastic genotype data is stored after min-max scaling: U_scaled = 2 * (U - @@ -1207,64 +1082,13 @@ readPvar <- function(pvarPath) { ) } -# PLINK1 .bim files come in a 6-column form and a 9-column extended form; -# the column meanings are positional, so the width selects the header. -# @noRd -.plinkVariantColnames <- function(n, snpFilePath) { - if (n == 6) { - return(c("chrom", "id", "gpos", "pos", "A1", "A2")) - } - if (n == 9) { - return(c( - "chrom", - "id", - "gpos", - "pos", - "A1", - "A2", - "variance", - "allele_freq", - "n_nomiss" - )) - } - abort(glue( - "Unexpected number of columns ({n}) in variant file: ", - "{snpFilePath}" - )) -} - -#' Read variant metadata from either .bim or .pvar/.pvar.zst file. -#' -#' Auto-detects the format by extension and header, then returns a standardized -#' data.frame. For PLINK1 .bim files, assigns column names based on the number -#' of columns (6 or 9). For PLINK2 .pvar files, delegates to \code{readPvar()}. -#' -#' @param snpFilePath Path to .bim, .pvar, or .pvar.zst file. -#' @return data.frame with at minimum columns: chrom, id, pos, A2, A1. Extended -#' .bim files (9 columns) also include: variance, allele_freq, n_nomiss. -#' @importFrom readr read_table cols col_character -#' @noRd -readVariantMetadata <- function(snpFilePath) { - # Extension first, then the header line: a .pvar written without its - # extension still announces itself with a #CHROM header. - byExtension <- str_detect(snpFilePath, "\\.(pvar|pvar\\.zst)$") - isPvar <- byExtension || - str_detect(read_lines(snpFilePath, n_max = 1), "^#CHROM") - - if (isPvar) { - readPvar(snpFilePath) - } else { - df <- read_table(snpFilePath, col_names = FALSE, col_types = cols()) - `names<-`(df, .plinkVariantColnames(ncol(df), snpFilePath)) - } -} - #' Get variant information from any LD reference source #' -#' Auto-detects the source type (PLINK2, PLINK1, VCF, GDS, or pre-computed LD -#' metadata) and returns variant metadata. For PLINK2, opens only the .pvar -#' file. For PLINK1, reads only the .bim file. For VCF and GDS, loads the full -#' file and extracts variant info. +#' Auto-detects the source type (PLINK2, PLINK1, VCF, GDS or BGEN, given +#' directly or through LD metadata whose rows point at genotype files) and +#' returns variant metadata. For PLINK2, opens only the .pvar file. For PLINK1, +#' reads only the .bim file. For VCF, GDS and BGEN, loads the full file and +#' extracts variant info. #' #' @param source Genotype file path/prefix or LD metadata file path. #' @param region Region of interest: "chr:start-end" string or data.frame with @@ -1285,10 +1109,8 @@ refVariantInfo <- function(source, region = NULL) { info <- .refInfoPlink2(dataPath) } else if (resolved$type == "plink1") { info <- .refInfoPlink1(dataPath) - } else if (is_in(resolved$type, c("vcf", "gds"))) { - return(.refInfoVcfGds(dataPath, region)) } else { - return(.refInfoPrecomputedLd(resolved, region)) + return(.refInfoVcfGds(dataPath, region)) } # Region filter for plink2 / plink1 (the loader-based paths self-filter). .refRegionFilter(info, region) @@ -1298,7 +1120,10 @@ refVariantInfo <- function(source, region = NULL) { # else the resolved data path. # @noRd .refDataPath <- function(resolved, region) { - usesMeta <- is_in(resolved$type, c("plink2", "plink1", "vcf", "gds")) && + usesMeta <- is_in( + resolved$type, + c("plink2", "plink1", "vcf", "gds", "bgen") + ) && !is.null(resolved$metaPath) && !is.null(region) if (usesMeta) { @@ -1351,42 +1176,6 @@ refVariantInfo <- function(source, region = NULL) { ) } -# Pre-computed LD variant info: read the per-intersection bim/pvar metadata -# (already region-filtered by regionalLdMeta). -# @noRd -.refInfoPrecomputedLd <- function(resolved, region) { - bimPaths <- regionalLdMeta( - resolved$metaPath, - region - )$intersections$bimFilePaths - bind_rows(map(bimPaths, .refReadBimMeta)) |> - mutate(id = normalizeVariantId(.data$id)) -} - -# Read one bim/pvar metadata file into a canonical variant-info data.frame, -# carrying the optional variance / allele_freq / n_nomiss columns when present. -# @noRd -.refReadBimMeta <- function(path) { - df <- readVariantMetadata(path) - out <- tibble( - chrom = df$chrom, - id = df$id, - pos = df$pos, - A2 = df$A2, - A1 = df$A1 - ) - optional <- intersect(c("variance", "allele_freq", "n_nomiss"), names(df)) - mutate( - out, - !!!set_names(map(optional, .refMetaColumn, df = df), optional) - ) -} - -# @noRd -.refMetaColumn <- function(col, df) { - df[[col]] -} - # Filter plink2 / plink1 variant info to the requested region. # @noRd .refRegionFilter <- function(info, region) { @@ -1480,17 +1269,16 @@ matchVariantsToKeep <- function(variantInfo, keepVariantsPath) { } } - #' Load genotype data for a specific region #' #' Auto-detects PLINK2 (.pgen/.pvar[.zst]/.psam), PLINK1 (.bed/.bim/.fam), VCF -#' (.vcf/.vcf.gz/.bcf), or GDS (.gds) format and loads genotype data via -#' \code{\link{readGenotypes}} and \code{\link{extractBlockGenotypes}}. If a -#' stochastic genotype sidecar file (.afreq or .stochastic_meta.tsv) is found -#' alongside the genotype file, non-integer dosages are automatically rescaled -#' using the stored U_MIN/U_MAX values. +#' (.vcf.gz/.vcf.bgz, bgzipped with a tabix index), GDS (.gds) or BGEN (.bgen) +#' format, reads the file as a panel with \code{\link{readGenotypes}} and +#' loads the region's dosages. If a stochastic genotype sidecar file (.afreq +#' or .stochastic_meta.tsv) is found alongside the genotype file, non-integer +#' dosages are automatically rescaled using the stored U_MIN/U_MAX values. #' -#' @param genotype Path to the genotype data file (without extension). +#' @param genotype Path to the genotype data file, or a PLINK prefix. #' @param region The target region in the format "chr:start-end". #' @param keepIndel Whether to keep indel SNPs. #' @param keepVariantsPath Path to a file listing variants to keep. @@ -1521,15 +1309,22 @@ loadGenotypeRegion <- function( stochasticMetaPath = NULL, stochasticMetaFormat = NULL ) { - handle <- .loadGenoHandle(genotype) - handleSnpInfo <- snpInfo(handle) - snpIdx <- .loadGenoSnpIdx(handleSnpInfo, region) - # Samples x variants matrix (pecotmr convention); callers handle missing. + panel <- .readGenotypePanel( + genotype, + format = .requireGenotypeFormat(genotype, "loadGenotypeRegion") + ) + variants <- .rangesSnpInfo(SummarizedExperiment::rowRanges(panel)) + snpIdx <- .loadGenoSnpIdx(variants, region) + # Samples x variants matrix (pecotmr convention), its columns named by + # the file's own variant ids; callers handle missing. extracted <- list( - X = .dosageMatrix(handle, snpIdx, meanImpute = FALSE), + X = `colnames<-`( + .ldRefDosage(panel, snpIdx, meanImpute = FALSE), + variants$SNP[snpIdx] + ), variant_info = .loadGenoAttachAfreq( - handle, - .snpInfoToVariantInfo(slice(handleSnpInfo, snpIdx)) + panel, + .snpInfoToVariantInfo(slice(variants, snpIdx)) ) ) filtered <- .loadGenoPostFilter(extracted, keepIndel, keepVariantsPath) @@ -1542,37 +1337,13 @@ loadGenotypeRegion <- function( if (returnVariantInfo) result else result$X } -# Detect the genotype file format and open the matching GenotypeHandle. -# @noRd -.loadGenoHandle <- function(genotype) { - if (str_detect(genotype, "\\.(vcf|vcf\\.gz|bcf)$")) { - return(.readGenotypeHandle(genotype, format = "vcf")) - } - if (str_detect(genotype, "\\.gds$")) { - return(.readGenotypeHandle(genotype, format = "gds")) - } - if (hasPlink2Files(genotype)) { - return(.readGenotypeHandle(genotype, format = "plink2")) - } - if (hasPlink1Files(genotype)) { - return(.readGenotypeHandle(genotype, format = "plink1")) - } - msg <- glue( - "Genotype files not found at: {genotype}\n", - " Expected: .vcf/.vcf.gz/.bcf, .gds, or PLINK prefix ", - "(.pgen/.pvar[.zst]/.psam or .bed/.bim/.fam)", - .trim = FALSE - ) - abort(msg) -} - # Resolve the SNP indices for a region (all variants when region is NULL). # @noRd -.loadGenoSnpIdx <- function(handleSnpInfo, region) { +.loadGenoSnpIdx <- function(variants, region) { if (is.null(region)) { - return(seq_len(nrow(handleSnpInfo))) + return(seq_len(nrow(variants))) } - snpIdx <- .regionToSnpIdx(handleSnpInfo, region) + snpIdx <- .regionToSnpIdx(variants, region) if (length(snpIdx) == 0) { msg <- glue("No SNPs found in the specified region {region}") abort(msg, class = "NoSnpsError") @@ -1583,11 +1354,11 @@ loadGenotypeRegion <- function( # Attach allele frequency from the .afreq sidecar (plink2 only). #' @importFrom dplyr left_join #' @noRd -.loadGenoAttachAfreq <- function(handle, variantInfo) { - if (genotypeFormat(handle) != "plink2") { +.loadGenoAttachAfreq <- function(panel, variantInfo) { + if (!identical(.ldRefFormat(panel), "plink2")) { return(variantInfo) } - afreq <- readAfreq(.genotypeReadPath(handle)) + afreq <- readAfreq(.ldRefReadPath(panel)) if (is.null(afreq)) { return(variantInfo) } @@ -1631,8 +1402,10 @@ loadGenotypeRegion <- function( ) } -# Detect stochastic genotype scaling and restore the original scale from a -# metadata sidecar; warn (only) when non-integer dosages have no sidecar. +# Restore a stochastic sketch's original scale from its metadata sidecar. +# Without one the dosages are taken as they are: a dosage need not be a whole +# number (imputed BGEN, VCF FORMAT/DS, PLINK2 dosages), so whether the values +# are whole says nothing about whether the file is a sketch. # @noRd .loadGenoInvertStochastic <- function( result, @@ -1642,7 +1415,6 @@ loadGenotypeRegion <- function( ) { metaPath <- stochasticMetaPath %||% findStochasticMeta(genotype) if (is.null(metaPath)) { - .loadGenoWarnStochastic(result$X) return(result) } smeta <- readStochasticMeta(metaPath, format = stochasticMetaFormat) @@ -1681,45 +1453,14 @@ loadGenotypeRegion <- function( restored } -# Warn when non-integer dosages are present but no stochastic sidecar was found. -# @noRd -.loadGenoWarnStochastic <- function(X) { - if (all(X == round(X), na.rm = TRUE)) { - return(invisible(NULL)) - } - msg <- glue( - "Non-integer genotype values detected but no stochastic metadata ", - "sidecar found. Place a .afreq or .stochastic_meta.tsv file with ", - "u_min/u_max columns alongside the genotype files to restore the ", - "original scale." - ) - warn(msg) -} - # ---- map/apply helpers (lambda-free callbacks) --------------------------- -# The first ALT allele of a variant (as character). -# @noRd -.gtFirstAllele <- function(x) { - as.character(x)[1] -} - # The dosage assay matrix of one per-chromosome SummarizedExperiment. # @noRd .seDosage <- function(se) { SummarizedExperiment::assay(se, "dosage") } -# ALT (A1) dosage from a VCF GT string; NA for missing ("./." or NA). -# @noRd -.gtStringToDosage <- function(x) { - if (is.na(x) || x == "./.") { - return(NA_real_) - } - alleles <- str_split(x, "[/|]")[[1L]] - sum(alleles != "0") -} - # Variant `i`'s chromosome from an open pvar handle. # @noRd .pvarChrom <- function(i, pvar) { @@ -1744,7 +1485,7 @@ loadGenotypeRegion <- function( pgenlibr::GetAlleleCode(pvar, i, k) } -# ---- .withGds resource-body functions (run inside the open-GDS bracket) --- +# ---- GDS resource-body functions (run inside an open-GDS bracket) --------- # The sample ids stored in an open GDS. # @noRd @@ -1752,42 +1493,26 @@ loadGenotypeRegion <- function( as.character(gdsfmt::read.gdsn(gdsfmt::index.gdsn(gds, "sample.id"))) } -# The dosage matrix for `handle`'s `snpIdx` variants (NULL when none selected). -# snpgdsGetGeno counts the first allele (labelled A1 in .gdsSnpInfo), so no flip -# is needed; it also handles non-contiguous SNP selection. +# The sample-LD matrix of the SNPs `snpIds` (NA correlations -> 0). # @noRd -.gdsBlockGeno <- function(gds, handle, snpIdx) { - snpIds <- snpInfo(handle)$SNP[snpIdx] - geno <- SNPRelate::snpgdsGetGeno( - gds, - snp.id = snpIds, - with.id = FALSE, - verbose = FALSE - ) - if (is.null(geno) || length(geno) == 0) { - return(NULL) - } - `storage.mode<-`(geno, "double") -} - -# The sample-LD matrix for `handle`'s `snpIdx` variants (NA correlations -> 0). -# @noRd -.gdsBlockLd <- function(gds, handle, snpIdx) { +.gdsBlockLd <- function(gds, snpIds) { # snpgdsLDMat() returns variants in FILE order whatever order snp.id is - # given in, and labels nothing. Ask in ascending order and permute back, - # exactly as the block readers do, so the matrix agrees with its names. - ord <- order(.genotypeFilePos(handle, snpIdx)) - snpIds <- snpInfo(handle)$SNP[snpIdx[ord]] + # given in, and labels nothing. Ask in file order and permute back, so the + # matrix agrees with its names; the file's own ids are passed, since a + # GDS may store them as integers. + fileIds <- gdsfmt::read.gdsn(gdsfmt::index.gdsn(gds, "snp.id")) + pos <- match(as.character(snpIds), as.character(fileIds)) + ord <- order(pos) ldMat <- SNPRelate::snpgdsLDMat( gds, - snp.id = snpIds, + snp.id = fileIds[pos[ord]], method = "corr", slide = -1, verbose = FALSE ) raw <- replace(ldMat$LD, is.na(ldMat$LD), 0) inv <- order(ord) - ids <- snpInfo(handle)$SNP[snpIdx] + ids <- as.character(snpIds) `dimnames<-`(raw[inv, inv, drop = FALSE], list(ids, ids)) } @@ -1811,3 +1536,992 @@ loadGenotypeRegion <- function( A2 = a2 ) } + +# ============================================================================= +# BGEN genotype reading +# ----------------------------------------------------------------------------- +# A "bgen" GenotypeHandle reads a BGEN file lazily, without converting it: +# its variants come from the .bgi index (bgenix's SQLite database), its +# samples from the file's sample block or a .sample file beside it, and a +# block's dosages are read record by record at the offsets the index gives. +# +# Every revision is read: layout 1 (BGEN 1.1: diploid, biallelic, three +# 16-bit probabilities per sample, zlib or no compression) and layout 2 (BGEN +# 1.2 and 1.3: phased or unphased, any ploidy, any bit depth, zlib, zstd or +# no compression). A record with more than two alleles becomes one variant +# per non-first allele. The dosage is the expected count of A1, the variant's +# second (or later) allele, with the first as A2, as bgen's own tools count +# it: from 0 to the sample's ploidy. +# ============================================================================= + +# The handle of a BGEN file. Only its header, its index and its sample ids +# are read here. +# @noRd +#' @importFrom checkmate assertFileExists +.makeBgenHandle <- function(path) { + walk(c("DBI", "RSQLite"), .bgenRequirePackage) + assertFileExists(path, access = "r", .var.name = "BGEN file") + path <- normalizePath(path) + header <- .bgenReadHeader(path, withSamples = TRUE) + sampleIds <- header$sampleIds %||% .bgenSampleFileIds(path) + if (length(sampleIds) != header$nSamples) { + abort(glue( + "BGEN file {path} declares {header$nSamples} samples but ", + "{length(sampleIds)} sample ids were found." + )) + } + new( + "GenotypeHandle", + path = path, + format = "bgen", + snpInfo = .withFileIdx(.bgenSnpInfo(path)), + nSamples = as.integer(header$nSamples), + sampleIds = sampleIds, + pgenPtr = NULL + ) +} + +# @noRd +.bgenRequirePackage <- function(pkg) { + if (!requireNamespace(pkg, quietly = TRUE)) { + abort(glue( + "Package '{pkg}' is required for reading BGEN files, whose .bgi ", + "index is an SQLite database." + )) + } + invisible(NULL) +} + +# A little-endian unsigned integer from raw bytes, as a double (a uint32 can +# exceed R's integer range). +# @noRd +.bgenUint <- function(bytes) { + sum(as.numeric(bytes) * 256^(seq_along(bytes) - 1L)) +} + +# The header block: the sample count, the compression and layout flags and, +# when the file stores them and they are asked for, the sample ids. An +# unknown layout or compression is refused here, before any variant is +# read. +# @noRd +.bgenReadHeader <- function(path, withSamples = FALSE) { + con <- file(path, "rb") + on.exit(close(con)) + fixed <- readBin(con, "raw", 20L) + if (length(fixed) < 20L) { + abort(glue("{path} is too short to be a BGEN file.")) + } + headerLength <- .bgenUint(fixed[5:8]) + magic <- fixed[17:20] + if (!identical(magic, charToRaw("bgen")) && any(magic != as.raw(0L))) { + abort(glue("{path} is not a BGEN file (no 'bgen' magic number).")) + } + readBin(con, "raw", headerLength - 20) + flags <- as.integer(readBin(con, "raw", 4L)) + compression <- bitwAnd(flags[[1L]], 3L) + layout <- bitwAnd(bitwShiftR(flags[[1L]], 2L), 15L) + .bgenCheckFlags(path, compression, layout) + nSamples <- .bgenUint(fixed[13:16]) + hasIds <- bitwAnd(flags[[4L]], 128L) > 0L + list( + nSamples = nSamples, + compression = compression, + layout = layout, + sampleIds = if (withSamples && hasIds) { + .bgenReadSampleBlock(con, nSamples) + } + ) +} + +# @noRd +.bgenCheckFlags <- function(path, compression, layout) { + if (!is_in(layout, 1:2)) { + abort(glue( + "{path} has BGEN layout {layout}; the spec defines layouts 1 and 2." + )) + } + if (compression > 2L) { + abort(glue("{path} has an unknown BGEN compression ({compression}).")) + } + if (layout == 1L && compression == 2L) { + abort(glue( + "{path} is a layout-1 (BGEN 1.1) file compressed with zstd, which ", + "the spec does not allow." + )) + } + invisible(NULL) +} + +# The sample identifier block, which follows the header: its length, the +# sample count again, then each id as a 2-byte length and its bytes. +# @noRd +.bgenReadSampleBlock <- function(con, nSamples) { + blockLength <- .bgenUint(readBin(con, "raw", 4L)) + block <- readBin(con, "raw", blockLength - 4) + if (.bgenUint(block[1:4]) != nSamples) { + abort("The BGEN sample block's sample count disagrees with its header.") + } + bgenSampleIdsCpp(block[-(1:4)], as.integer(nSamples)) +} + +# The sample ids of a BGEN file that does not store them, from the .sample +# file beside it (`.sample`): the first column, after the header line +# and the line of column types. +# @noRd +#' @importFrom readr read_table cols col_character +.bgenSampleFileIds <- function(path) { + samplePath <- str_c(.genotypeStem(path), ".sample") + if (!file.exists(samplePath)) { + abort(c( + glue("{path} stores no sample ids, and {samplePath} is missing."), + i = "Put the Oxford-format .sample file beside the .bgen file." + )) + } + tbl <- read_table( + samplePath, + col_types = cols(.default = col_character()), + progress = FALSE + ) + as.character(tbl[[1L]][-1L]) +} + +# The variant table: one row per (record, non-first allele), in file order, +# with each record's offset and length from the .bgi index and the allele the +# row reads. Built column-wise for the biallelic records, which are nearly +# all of them; only a multi-allelic record is read to learn its alleles. +# @noRd +#' @importFrom dplyr arrange bind_rows +#' @importFrom purrr pmap +.bgenSnpInfo <- function(path) { + index <- .bgenReadIndex(str_c(path, ".bgi")) + multi <- index$number_of_alleles > 2L + rows <- .bgenBiallelicRows(index[!multi, ]) + if (!any(multi)) { + return(rows) + } + warn(glue( + "{sum(multi)} BGEN record(s) of {path} carry more than two alleles; ", + "each is read as one biallelic variant per non-first allele." + )) + split <- pmap( + list( + chrom = index$chromosome[multi], + pos = index$position[multi], + alleles = .bgenRecordAlleles( + path, + index$file_start_position[multi], + index$size_in_bytes[multi] + ), + offset = index$file_start_position[multi], + size = index$size_in_bytes[multi] + ), + .bgenSplitRecordRows + ) + arrange( + bind_rows(rows, list_rbind(split)), + .data$bgen_offset, + .data$bgen_allele + ) +} + +# The rows of the biallelic records: A2 the first allele, A1 the second. A +# record keeps its rsid as its id when it has one, else is named +# chr:pos:A2:A1. +# @noRd +.bgenBiallelicRows <- function(index) { + ids <- formatVariantId( + index$chromosome, + index$position, + index$allele1, + index$allele2 + ) + named <- !is.na(index$rsid) & nzchar(index$rsid) & index$rsid != "." + tibble( + SNP = if_else(named, index$rsid, ids), + CHR = canonChrom(index$chromosome), + BP = as.integer(index$position), + A1 = index$allele2, + A2 = index$allele1, + bgen_offset = as.numeric(index$file_start_position), + bgen_size = as.numeric(index$size_in_bytes), + bgen_allele = rep(2L, nrow(index)) + ) +} + +# A multi-allelic record's rows: A2 its first allele, A1 each other allele +# in turn, every row named chr:pos:A2:A1 so they stay distinct. +# @noRd +.bgenSplitRecordRows <- function(chrom, pos, alleles, offset, size) { + others <- alleles[-1L] + tibble( + SNP = formatVariantId(chrom, pos, alleles[[1L]], others), + CHR = canonChrom(chrom), + BP = as.integer(pos), + A1 = others, + A2 = alleles[[1L]], + bgen_offset = as.numeric(offset), + bgen_size = as.numeric(size), + bgen_allele = seq_along(others) + 1L + ) +} + +# The .bgi index's Variant table, in file order. +# @noRd +.bgenReadIndex <- function(bgiPath) { + if (!file.exists(bgiPath)) { + abort(c( + str_c( + "A BGEN file is read through its .bgi index: ", + bgiPath, + " is missing." + ), + i = "Build it with bgenix (`bgenix -g .bgen -index`)." + )) + } + con <- DBI::dbConnect( + RSQLite::SQLite(), + bgiPath, + flags = RSQLite::SQLITE_RO + ) + on.exit(DBI::dbDisconnect(con)) + as_tibble(DBI::dbGetQuery( + con, + str_c( + "SELECT chromosome, position, rsid, number_of_alleles, allele1, ", + "allele2, file_start_position, size_in_bytes FROM Variant ", + "ORDER BY file_start_position" + ) + )) +} + +# The alleles of the records at `offsets`, read from their identifying data: +# the .bgi index holds only the first two. +# @noRd +.bgenRecordAlleles <- function(path, offsets, sizes) { + con <- file(path, "rb") + on.exit(close(con)) + map2(offsets, sizes, .bgenReadRecordAlleles, con = con) +} + +# Only a layout-2 record can carry more than two alleles, so only one is +# parsed here. +# @noRd +.bgenReadRecordAlleles <- function(offset, size, con) { + record <- .bgenReadRecord(con, offset, size) + .bgenParseIdentifying(record, layout = 2L)$alleles +} + +# @noRd +.bgenReadRecord <- function(con, offset, size) { + seek(con, where = offset) + readBin(con, "raw", size) +} + +# A record's identifying data: its alleles, and where its genotype block +# starts (1-based). A layout-1 record opens with its sample count and has two +# alleles without saying so; a layout-2 one states its allele count. +# @noRd +.bgenParseIdentifying <- function(record, layout) { + at <- if (layout == 1L) 5L else 1L + for (field in 1:3) { + # variant id, rsid, chromosome: a 2-byte length and the bytes + at <- at + 2L + .bgenUint(record[at:(at + 1L)]) + } + at <- at + 4L + nAlleles <- 2L + if (layout == 2L) { + nAlleles <- .bgenUint(record[at:(at + 1L)]) + at <- at + 2L + } + alleles <- character(nAlleles) + for (k in seq_len(nAlleles)) { + len <- .bgenUint(record[at:(at + 3L)]) + alleles[[k]] <- rawToChar(record[(at + 4L):(at + 3L + len)]) + at <- at + 4L + len + } + list(alleles = alleles, genotypeStart = at) +} + +# The samples x variants dosages of the handle's variants at `snpIdx`: each +# record read once, its probabilities decompressed and decoded for the +# alleles its rows ask about. +# @noRd +.extractBlockBgen <- function(handle, snpIdx) { + si <- slice(snpInfo(handle), snpIdx) + path <- .genotypeReadPath(handle) + header <- .bgenReadHeader(path) + con <- file(path, "rb") + on.exit(close(con)) + offsets <- unique(si$bgen_offset) + blocks <- map( + offsets, + .bgenRecordDosage, + si = si, + con = con, + header = header, + nSamples = handle@nSamples + ) + out <- exec(cbind, !!!blocks) + # The blocks hold the rows grouped by record; put them back in `si`'s + # order. + rowOrder <- list_c(map(offsets, .bgenRowsOf, si = si)) + out[, order(rowOrder), drop = FALSE] +} + +# @noRd +.bgenRowsOf <- function(offset, si) { + which(si$bgen_offset == offset) +} + +# One record's dosage columns, for the rows of `si` that read it. +# @noRd +.bgenRecordDosage <- function(offset, si, con, header, nSamples) { + rows <- .bgenRowsOf(offset, si) + record <- .bgenReadRecord(con, offset, si$bgen_size[[rows[[1L]]]]) + if (header$layout == 1L) { + return(.bgenLayout1Dosage(record, header$compression, nSamples)) + } + probabilities <- .bgenProbabilityData(record, header$compression) + bgenDosageCpp( + probabilities, + as.integer(nSamples), + as.integer(si$bgen_allele[rows]) + ) +} + +# A layout-1 record's dosage column: per sample three 16-bit probabilities, +# of the genotypes AA, AB and BB, each out of 32768, zlib-compressed or +# stored as they are. The second allele's expected count is P(AB) + 2 P(BB); +# a sample whose three are all zero is missing. +# @noRd +.bgenLayout1Dosage <- function(record, compression, nSamples) { + at <- .bgenParseIdentifying(record, layout = 1L)$genotypeStart + nBytes <- 6 * nSamples + data <- if (compression == 0L) { + record[at:(at + nBytes - 1)] + } else { + stored <- .bgenUint(record[at:(at + 3L)]) + memDecompress(record[(at + 4L):(at + 3L + stored)], type = "gzip") + } + if (length(data) != nBytes) { + abort("A layout-1 BGEN record holds the wrong amount of data.") + } + p <- matrix( + readBin( + data, + "integer", + n = 3 * nSamples, + size = 2L, + signed = FALSE, + endian = "little" + ) / + 32768, + nrow = 3L + ) + dosage <- p[2L, ] + 2 * p[3L, ] + matrix(replace(dosage, colSums(p) == 0, NA_real_), ncol = 1L) +} + +# A layout-2 record's genotype probability data, uncompressed. +# @noRd +.bgenProbabilityData <- function(record, compression) { + at <- .bgenParseIdentifying(record, layout = 2L)$genotypeStart + stored <- .bgenUint(record[at:(at + 3L)]) + if (compression == 0L) { + return(record[(at + 4L):(at + 3L + stored)]) + } + uncompressed <- .bgenUint(record[(at + 4L):(at + 7L)]) + payload <- record[(at + 8L):(at + 3L + stored)] + .bgenUncompress(payload, compression, uncompressed) +} + +# zlib through base R; zstd through archive, since R need not be built with +# it. +# @noRd +#' @importFrom archive archive_read +.bgenUncompress <- function(payload, compression, uncompressed) { + if (compression == 1L) { + return(memDecompress(payload, type = "gzip")) + } + con <- archive_read(rawConnection(payload), format = "raw", filter = "zstd") + open(con, "rb") + on.exit(close(con)) + readBin(con, "raw", uncompressed) +} + +# ============================================================================= +# VCF, GDS and PLINK1 genotype panels +# ----------------------------------------------------------------------------- +# A VCF, GDS or PLINK1 file is read as a genotype panel directly rather than +# through a GenotypeHandle: its variants and samples are read here, its +# dosages through a GenotypeDosageSeed, a block at a time, when something +# touches them. The +# panel records where it came from (metadata(panel)$genotypeSource), which is +# what anything needing the file reads -- a stochastic sketch's .afreq +# sidecar, the per-chromosome files of a manifest. +# +# A record with several ALT alleles becomes one variant per ALT allele, with a +# warning, its dosage the count of that allele, as for BGEN; a record with no +# ALT allele holds no variant. The dosage is FORMAT/DS where the file declares +# one, else the count from the GT calls. A SNPRelate GDS stores genotype codes +# counting the first of a SNP's two alleles, which is therefore A1, as +# SNPRelate reads it. A PLINK1 .bed's codes are read through PlinkMatrix as +# the count of A1, the .bim's fifth column. +# ============================================================================= + +# @noRd +.requireReaderPackage <- function(pkg, format) { + if (!requireNamespace(pkg, quietly = TRUE)) { + abort(glue("Package '{pkg}' is required for reading {format} files.")) + } + invisible(NULL) +} + +# The panel of a VCF, GDS or PLINK1 file, without the record of a stochastic +# sketch's sidecar (.withSourceProjection() adds it, once the panel is whole). +# @noRd +.readDosagePanel <- function(path, format, vcfArgs = list()) { + switch( + format, + vcf = .vcfPanel(path, vcfArgs), + gds = .gdsPanel(path), + plink1 = .plinkBedPanel(path) + ) +} + +# A panel over a GenotypeDosageSeed: its rows' variants as rowRanges, shaped +# as .genotypeExperiment() shapes a handle's, and where it came from. +# @noRd +.dosageSeedPanel <- function(seed, rows, format, path) { + dosage <- DelayedArray::DelayedArray(seed) + SummarizedExperiment::SummarizedExperiment( + assays = list(dosage = dosage), + rowRanges = .snpInfoRanges(rows, rownames(dosage)), + colData = S4Vectors::DataFrame(row.names = colnames(dosage)), + metadata = list( + genotypeSource = list( + format = format, + path = path, + chromPaths = character(0) + ) + ) + ) +} + +# One row per (record, ALT allele), in file order: A2 the record's REF +# allele, A1 the ALT allele the row counts. A record keeps its own id when it +# has one and a single ALT allele; otherwise each of its rows is named +# chr:pos:A2:A1, so they stay distinct. +# @noRd +.recordVariantRows <- function(records, path, label) { + nAlt <- lengths(records$alt) + multi <- nAlt > 1L + if (any(multi)) { + warn(glue( + "{sum(multi)} {label} record(s) of {path} carry more than one ", + "ALT allele; each is read as one biallelic variant per ALT allele." + )) + } + record <- rep(seq_len(nrow(records)), nAlt) + a1 <- as.character(list_c(records$alt)) + a2 <- records$ref[record] + named <- !is.na(records$id) & !multi + tibble( + SNP = if_else( + named[record], + records$id[record], + formatVariantId(records$chrom[record], records$pos[record], a2, a1) + ), + CHR = canonChrom(records$chrom[record]), + BP = as.integer(records$pos[record]), + A1 = a1, + A2 = a2, + record = record, + allele = sequence(nAlt) + ) +} + +# ---- VCF ------------------------------------------------------------------- + +# A VCF's panel. Only its header and its records' fixed fields are read here. +# @noRd +.vcfPanel <- function(path, vcfArgs = list()) { + .requireReaderPackage("VariantAnnotation", "VCF") + file <- .vcfIndexedFile(path) + header <- VariantAnnotation::scanVcfHeader(file) + field <- .vcfDosageField(header, path(file)) + records <- .vcfRecords(file, vcfArgs) + rows <- .recordVariantRows(records, path(file), "VCF") + seed <- methods::new( + "GenotypeDosageSeed", + backend = file, + field = if (field == "DS") "vcfDs" else "vcfGt", + rowRecord = rows$record, + rowAllele = rows$allele, + records = GRanges( + seqnames = records$chrom, + ranges = IRanges(records$pos, records$end), + posRank = .positionRank(records$chrom, records$pos) + ), + dn = list( + normalizeVariantId(rows$SNP), + as.character(VariantAnnotation::samples(header)) + ) + ) + .dosageSeedPanel(seed, rows, "vcf", path(file)) +} + +# The VCF at `path` with its tabix index, through which its records are read +# a block at a time. A VCF without one cannot be read lazily; a BCF cannot be +# read at all, Rsamtools having its BCF support disabled. +# @noRd +#' @importFrom checkmate assertFileExists +.vcfIndexedFile <- function(path) { + assertFileExists(path, access = "r", .var.name = "VCF file") + path <- normalizePath(path) + if (str_ends(str_to_lower(path), "\\.bcf")) { + abort(c( + glue("{path} is a BCF file, which pecotmr cannot read."), + i = str_c( + "Rsamtools ships with its BCF support disabled; convert it ", + "to a bgzipped, tabix-indexed VCF." + ) + )) + } + index <- str_c(path, ".tbi") + if (!file.exists(index)) { + abort(c( + glue( + "A VCF is read a block at a time through its tabix index, ", + "and {index} is missing." + ), + i = str_c( + "Compress the VCF with bgzip and index it, e.g. with ", + "Rsamtools::bgzip() and Rsamtools::indexTabix(format = 'vcf')." + ) + )) + } + VariantAnnotation::VcfFile(path, index = index) +} + +# The FORMAT field the dosages are read from: DS when the header declares +# it, with one value per ALT allele (Number=A) or one per record (Number=1), +# else GT. +# @noRd +.vcfDosageField <- function(header, path) { + declared <- VariantAnnotation::geno(header) + fields <- rownames(declared) + if (is_in("DS", fields)) { + number <- declared$Number[match("DS", fields)] + if (!is_in(number, c("A", "1"))) { + abort(glue( + "{path} declares FORMAT/DS with Number={number}; a dosage ", + "has one value per ALT allele (Number=A) or one per record ", + "(Number=1)." + )) + } + return("DS") + } + if (is_in("GT", fields)) { + return("GT") + } + abort(glue( + "{path} declares neither FORMAT/DS nor FORMAT/GT, so it holds no ", + "genotypes to read." + )) +} + +# One row per record of the VCF, in file order: its position and the end of +# its REF allele, its own ID (NA where it has none), its REF allele and its +# ALT alleles. +# @noRd +.vcfRecords <- function(file, vcfArgs) { + vcf <- exec( + VariantAnnotation::readVcf, + file, + param = VariantAnnotation::ScanVcfParam( + fixed = "ALT", + info = NA, + geno = NA + ), + !!!vcfArgs + ) + rr <- SummarizedExperiment::rowRanges(vcf) + chrom <- as.character(seqnames(rr)) + pos <- as.integer(start(rr)) + ref <- as.character(rr$REF) + alt <- as.list(methods::as(rr$ALT, "CharacterList")) + tibble( + chrom = chrom, + pos = pos, + end = as.integer(end(rr)), + id = .vcfRecordIds(names(rr), chrom, pos, ref, alt), + ref = ref, + alt = map(alt, .vcfAltAlleles) + ) +} + +# Each record's own ID, or NA where it has none. VariantAnnotation names a +# record whose ID is "." from the line's own text, CHROM:POS_REF/ALT, and +# that name is no ID of the record's. +# @noRd +.vcfRecordIds <- function(ids, chrom, pos, ref, alt) { + if (is.null(ids)) { + return(rep(NA_character_, length(chrom))) + } + altText <- map_chr(alt, str_flatten, collapse = ",") + synthetic <- str_c( + chrom, + ":", + pos, + "_", + ref, + "/", + if_else(altText == "", ".", altText) + ) + if_else(ids == synthetic | ids == ".", NA_character_, ids) +} + +# A record's ALT alleles; a record whose ALT is "." has none. +# @noRd +.vcfAltAlleles <- function(alt) { + alt[!is_in(alt, c("", "."))] +} + +# Each record's rank among the records starting at its position, in file +# order: 1 for nearly all of them. +# @noRd +.positionRank <- function(chrom, pos) { + tibble(chrom = chrom, pos = pos) |> + mutate(rank = row_number(), .by = all_of(c("chrom", "pos"))) |> + pull("rank") +} + +# ---- GDS ------------------------------------------------------------------- + +# A GDS file's panel: a SNPRelate (SNP_ARRAY) or SeqArray (SEQ_ARRAY) file, +# told apart by the format its root node records. +# @noRd +#' @importFrom checkmate assertFileExists +.gdsPanel <- function(path) { + walk(c("gdsfmt", "GDSArray"), .requireReaderPackage, format = "GDS") + assertFileExists(path, access = "r", .var.name = "GDS file") + path <- normalizePath(path) + kind <- .withGdsFile(path, .gdsFileFormat) + switch( + kind, + SNP_ARRAY = .snpGdsPanel(path), + SEQ_ARRAY = .seqArrayPanel(path), + abort(glue( + "{path} is a GDS file of format '{kind}'; genotypes are read ", + "from SNPRelate (SNP_ARRAY) and SeqArray (SEQ_ARRAY) files." + )) + ) +} + +# Resource bracket: open the GDS at `path` read-only with gdsfmt, close it on +# exit, and run `fn(gds, ...)`. A file GDSArray already holds open in this +# session is opened again rather than refused. +# @noRd +.withGdsFile <- function(path, fn, fnArgs = list()) { + gds <- gdsfmt::openfn.gds(path, readonly = TRUE, allow.duplicate = TRUE) + on.exit(gdsfmt::closefn.gds(gds)) + exec(fn, gds, !!!fnArgs) +} + +# The kind of GDS file an open GDS is, as its root node records it. +# @noRd +.gdsFileFormat <- function(gds) { + as.character(gdsfmt::get.attr.gdsn(gds$root)$FileFormat %||% "unknown") +} + +# A node of an open GDS, read whole. +# @noRd +.gdsRead <- function(gds, name) { + gdsfmt::read.gdsn(gdsfmt::index.gdsn(gds, name)) +} + +# A SNPRelate GDS's panel. +# @noRd +.snpGdsPanel <- function(path) { + meta <- .withGdsFile(path, .snpGdsMeta) + rows <- mutate( + meta$snpInfo, + SNP = as.character(.data$SNP), + CHR = canonChrom(.data$CHR), + record = row_number(), + allele = 1L + ) + backend <- DelayedArray::seed(GDSArray::GDSArray(path, "genotype")) + stored <- c(nrow(rows), length(meta$sampleIds)) + expected <- if (meta$snpFirst) stored else rev(stored) + if (!identical(as.integer(dim(backend)), as.integer(expected))) { + abort(glue( + "The genotype matrix of {path} is ", + "{str_flatten(dim(backend), ' x ')}, but the file lists ", + "{nrow(rows)} SNPs and {length(meta$sampleIds)} samples." + )) + } + seed <- methods::new( + "GenotypeDosageSeed", + backend = backend, + field = if (meta$snpFirst) "snpGdsSnpOrder" else "snpGdsSampleOrder", + rowRecord = rows$record, + rowAllele = rows$allele, + records = IRanges(rows$record, width = 1L), + dn = list(normalizeVariantId(rows$SNP), meta$sampleIds) + ) + .dosageSeedPanel(seed, rows, "gds", path) +} + +# An open SNPRelate GDS's SNPs, its samples, and how its genotype matrix is +# stored: SNP by SNP unless its node says sample.order, as SNPRelate reads +# it. +# @noRd +.snpGdsMeta <- function(gds) { + node <- gdsfmt::index.gdsn(gds, "genotype") + list( + snpInfo = .gdsReadSnpInfo(gds), + sampleIds = .gdsReadSampleIds(gds), + snpFirst = !is_in("sample.order", names(gdsfmt::get.attr.gdsn(node))) + ) +} + +# A SeqArray GDS's panel. +# @noRd +.seqArrayPanel <- function(path) { + meta <- .withGdsFile(path, .seqArrayMeta, fnArgs = list(path = path)) + rows <- .recordVariantRows(meta$records, path, "SeqArray GDS") + counts <- as.integer(meta$counts) + seed <- methods::new( + "GenotypeDosageSeed", + backend = DelayedArray::seed(GDSArray::GDSArray(path, meta$node)), + field = meta$field, + rowRecord = rows$record, + rowAllele = rows$allele, + records = IRanges(start = cumsum(counts) - counts + 1L, width = counts), + dn = list(normalizeVariantId(rows$SNP), meta$sampleIds) + ) + .dosageSeedPanel(seed, rows, "gds", path) +} + +# An open SeqArray GDS's samples and records, and the node its dosages are +# read from, with how many of that node's columns (or 2-bit planes) each +# record takes. +# @noRd +.seqArrayMeta <- function(gds, path) { + alleles <- str_split(as.character(.gdsRead(gds, "allele")), ",") + c( + list( + sampleIds = as.character(.gdsRead(gds, "sample.id")), + records = tibble( + chrom = as.character(.gdsRead(gds, "chromosome")), + pos = as.integer(.gdsRead(gds, "position")), + id = .seqArrayIds(gds, length(alleles)), + ref = map_chr(alleles, 1L), + alt = map(alleles, .seqArrayAltAlleles) + ) + ), + .seqArrayDosageNode(gds, path) + ) +} + +# Each record's own ID, or NA where it has none or the file stores none. +# @noRd +.seqArrayIds <- function(gds, nRecords) { + node <- gdsfmt::index.gdsn(gds, "annotation/id", silent = TRUE) + if (is.null(node)) { + return(rep(NA_character_, nRecords)) + } + ids <- as.character(gdsfmt::read.gdsn(node)) + if_else(is_in(ids, c("", ".")), NA_character_, ids) +} + +# A record's ALT alleles: every allele after its first, the REF. +# @noRd +.seqArrayAltAlleles <- function(alleles) { + .vcfAltAlleles(alleles[-1L]) +} + +# Where a SeqArray GDS's dosages are: its FORMAT/DS when it stores one, with +# one value per ALT allele or one per record, else its genotype calls. +# @noRd +.seqArrayDosageNode <- function(gds, path) { + ds <- gdsfmt::index.gdsn(gds, "annotation/format/DS", silent = TRUE) + if (!is.null(ds)) { + number <- as.character(gdsfmt::get.attr.gdsn(ds)$Number %||% "") + if (!is_in(number, c("A", "1"))) { + abort(glue( + "{path} stores FORMAT/DS with Number={number}; a dosage has ", + "one value per ALT allele (Number=A) or one per record ", + "(Number=1)." + )) + } + return(list( + node = "annotation/format/DS/data", + field = "seqArrayDs", + counts = .gdsRead(gds, "annotation/format/DS/@data") + )) + } + .seqArrayCheckGenotypes(gds, path) + list( + node = "genotype/data", + field = "seqArrayGt", + counts = .gdsRead(gds, "genotype/@data") + ) +} + +# The genotype calls are read from their 2-bit planes, so a file storing +# them otherwise, or storing calls beyond its ploidy apart from them, is +# refused rather than misread. +# @noRd +.seqArrayCheckGenotypes <- function(gds, path) { + data <- gdsfmt::objdesp.gdsn(gdsfmt::index.gdsn(gds, "genotype/data")) + if (!identical(data$trait, "Bit2")) { + abort(glue( + "{path} stores its genotype calls as {data$trait}; SeqArray ", + "stores them in 2-bit planes, which is what is read." + )) + } + extra <- gdsfmt::index.gdsn(gds, "genotype/extra.index", silent = TRUE) + nExtra <- if (is.null(extra)) 0L else gdsfmt::objdesp.gdsn(extra)$dim[[2L]] + if (nExtra > 0L) { + abort(glue( + "{path} stores {nExtra} genotype call(s) beyond its ploidy, ", + "which are not read." + )) + } + invisible(NULL) +} + +# ---- PLINK1 ---------------------------------------------------------------- + +# A PLINK1 fileset's panel: its .bim and .fam are read here, its genotypes a +# block at a time through PlinkMatrix (.plinkBedSeedRead()). The stem is +# recorded absolute, as a VCF's or GDS file's path is, so the panel still +# reads from another working directory. +# @noRd +.plinkBedPanel <- function(path) { + .requireReaderPackage("PlinkMatrix", "PLINK1") + named <- .plink1RequireFiles(path) + stem <- file.path(normalizePath(dirname(named)), basename(named)) + meta <- .plink1ReadMeta(stem) + nVariants <- nrow(meta$snpInfo) + seed <- methods::new( + "GenotypeDosageSeed", + backend = stem, + field = "plinkBed", + rowRecord = seq_len(nVariants), + rowAllele = rep(1L, nVariants), + records = IRanges(seq_len(nVariants), width = 1L), + dn = list(normalizeVariantId(meta$snpInfo$SNP), meta$sampleIds) + ) + .dosageSeedPanel(seed, meta$snpInfo, "plink1", stem) +} + +# Resolve the plink1 stem and assert its .bed/.bim/.fam all exist. +# @noRd +#' @importFrom checkmate assertFileExists +.plink1RequireFiles <- function(path) { + stem <- .genotypeStem(path) + assertFileExists( + str_c(stem, c(".bed", ".bim", ".fam")), + access = "r", + .var.name = "Plink file" + ) + stem +} + +# Read the .bim / .fam sidecars into snpInfo + sample metadata. Returns +# list(snpInfo, sampleIds, nSamples). +# @noRd +#' @importFrom readr read_table cols col_character +.plink1ReadMeta <- function(stem) { + # col_types all-character so readr never coerces a column: a bim whose + # allele column is uniformly "T"/"F" (all-A/T SNPs) would otherwise become + # logical, silently corrupting A1/A2 (BP is cast to integer below). + bim <- read_table( + str_c(stem, ".bim"), + col_names = c("CHR", "SNP", "CM", "BP", "A1", "A2"), + col_types = cols(.default = col_character()) + ) + fam <- read_table( + str_c(stem, ".fam"), + col_names = FALSE, + col_types = cols(.default = col_character()) + ) + # plink1 bim: col5 = A1 (minor/effect), col6 = A2 (major/ref); matches the + # pecotmr convention directly. + snpInfo <- tibble( + SNP = bim$SNP, + CHR = as.character(bim$CHR), + BP = as.integer(bim$BP), + A1 = bim$A1, + A2 = bim$A2 + ) + list( + snpInfo = snpInfo, + sampleIds = as.character(fam[[2]]), + nSamples = nrow(fam) + ) +} + +# ---- Per-chromosome VCF / GDS / PLINK1 sets -------------------------------- + +# The panel of a per-chromosome VCF, GDS or PLINK1 set: the shards' panels +# stacked -- DelayedArray binds their assays, so nothing is read -- recording +# each chromosome's file as a sharded GenotypeHandle does. Every shard must +# hold the same samples, in the same order. +# @noRd +.stackDosagePanels <- function(panels, format, metaPath, paths) { + .stackCheckSamples(panels, paths) + rowRangesList <- unname(map(panels, SummarizedExperiment::rowRanges)) + SummarizedExperiment::SummarizedExperiment( + assays = list( + dosage = exec( + BiocGenerics::rbind, + !!!unname(map(panels, .seDosage)) + ) + ), + rowRanges = suppressWarnings(exec(c, !!!rowRangesList)), + colData = SummarizedExperiment::colData(panels[[1L]]), + metadata = list( + genotypeSource = list( + format = format, + path = metaPath, + chromPaths = .panelChromPaths(panels) + ) + ) + ) +} + +# @noRd +.stackCheckSamples <- function(panels, paths) { + first <- colnames(panels[[1L]]) + same <- map_lgl(map(panels, colnames), identical, first) + if (all(same)) { + return(invisible(NULL)) + } + abort(glue( + "genoMeta: all per-chromosome files must have ", + "identical sample IDs in the same order (mismatch at ", + "'{paths[[which(!same)[[1L]]]]}')." + )) +} + +# Each chromosome's file, named by chromosome; a chromosome found in two +# files is refused, as for a sharded GenotypeHandle. +# @noRd +.panelChromPaths <- function(panels) { + chromPaths <- list_c(map(panels, .panelShardPaths)) + counts <- table(names(chromPaths)) + walk2(names(counts), as.integer(counts), .checkChromNotSplit) + chromPaths +} + +# One shard panel's chromosomes, each mapped to its file. +# @noRd +.panelShardPaths <- function(panel) { + chroms <- unique(.ldRefChrom(panel)) + set_names(rep(.ldRefSource(panel)$path, length(chroms)), chroms) +} diff --git a/R/gwasSumStats.R b/R/gwasSumStats.R index 013773065..9e488c0ca 100644 --- a/R/gwasSumStats.R +++ b/R/gwasSumStats.R @@ -4,7 +4,7 @@ # DFrame-subclass collection keyed by the identity tuple (study). Each # row holds a per-study GRanges of GWAS summary statistics covering a # single LD block; build a separate collection per block when sweeping -# the genome. Class-level slots ldSketch + genome + qcInfo apply +# the genome. Class-level slots ldReference + genome + qcInfo apply # uniformly across rows. # ============================================================================= @@ -18,7 +18,7 @@ NULL #' block when sweeping the genome. #' @details Required column: \code{study}, unique across rows. The class-level #' slots inherited from \code{\linkS4class{SumStatsBase}} -- -#' \code{ldSketch}, \code{genome} and \code{qcInfo} -- apply uniformly to +#' \code{ldReference}, \code{genome} and \code{qcInfo} -- apply uniformly to #' every row. #' @seealso \code{\link{GwasSumStats}} for the constructor and #' \code{\linkS4class{QtlSumStats}} for the QTL counterpart. @@ -28,7 +28,7 @@ setClass( "GwasSumStats", contains = "SumStatsBase", validity = function(object) { - # The ldSketch slot's class union enforces its type. + # The ldReference slot's class union enforces its type. coll <- makeAssertCollection() assertNames( colnames(mcols(object)) %||% character(0), @@ -65,13 +65,13 @@ setMethod("show", "GwasSumStats", function(object) { "genome build {GenomeInfoDb::genome(object)}\n", .trim = FALSE )) - ld <- object@ldSketch + ld <- object@ldReference ldSrc <- if (is.null(ld)) { "none (LD-free)" } else { - .ldSketchLabel(ld) + .ldRefLabel(ld) } - cat(glue(" LD sketch: {ldSrc}\n", .trim = FALSE)) + cat(glue(" LD reference: {ldSrc}\n", .trim = FALSE)) }) @@ -107,7 +107,7 @@ NULL #' @title Create a GwasSumStats Collection Object #' @description Construct a \code{GwasSumStats} S4 DFrame-subclass collection #' from per-study tuple vectors and a list of \code{GRanges} entries (one per -#' study), plus a single LD sketch handle and a single genome build that apply +#' study), plus a single LD reference and a single genome build that apply #' to the whole collection. #' #' Each \code{GRanges} entry must carry per-variant statistics in its mcols (at @@ -118,9 +118,10 @@ NULL #' study. #' @param genome Single character string giving the genome build (e.g., #' \code{"hg19"}, \code{"hg38"}). Uniform across the collection because all -#' entries share the same LD sketch. -#' @param ldSketch A genotype panel (see \code{\link{readGenotypes}}) -#' carrying the LD reference. +#' entries share the same LD reference. +#' @param ldReference The LD reference: a genotype panel (see +#' \code{\link{readGenotypes}}), a \code{\link{GenotypeMixture}} or an +#' \code{\link{LdMatrix}}. #' @param varY Optional numeric vector of per-study phenotype variances #' (\code{NA_real_} entries allowed). Used by the sufficient-statistic #' interface; z-score RSS analyses should leave entries as NA. @@ -137,10 +138,9 @@ NULL #' no per-variant \code{N} column and no case/control counts. Named #' \code{nSample} to avoid clashing with \code{nSamples()} (the LD-panel #' sample size). -#' @param ldBlocks Optional LD-block specification: an \code{LdBlocks}, a -#' \code{GRanges}, a data.frame with \code{chrom}/\code{start}/\code{end} -#' (plus an optional \code{blockId}), or a path to such a table. When -#' supplied, each +#' @param ldBlocks Optional LD-block specification: a \code{GRanges}, a +#' data.frame with \code{chrom}/\code{start}/\code{end} (plus an optional +#' \code{blockId}), or a path to such a table. When supplied, each #' study's variants are split into one element per block rather than one per #' chromosome, and \code{blockId} takes the block's key (its \code{names}, #' else a \code{blockId} metadata column, else its coordinates). cTWAS needs @@ -170,13 +170,13 @@ NULL #' S4Vectors::mcols(gr) <- S4Vectors::DataFrame(SNP = paste0("rs", 1:3), #' A1 = "A", A2 = "G", Z = rnorm(3), N = 100L) #' GwasSumStats(studyName = "t1", entry = list(gr), genome = "hg38", -#' ldSketch = panel) +#' ldReference = panel) #' @export GwasSumStats <- function( studyName, entry, genome, - ldSketch = NULL, + ldReference = NULL, varY = NA_real_, nCase = NULL, nControl = NULL, @@ -217,7 +217,7 @@ GwasSumStats <- function( GenomicRanges::GRangesList(split$entry), value = md ) - .sumStatsNewValidated("GwasSumStats", grl, ldSketch, genome, qcInfo) + .sumStatsNewValidated("GwasSumStats", grl, ldReference, genome, qcInfo) } # Build and validate a SumStatsBase subclass from its GRangesList plus the @@ -225,7 +225,7 @@ GwasSumStats <- function( # rather than duplicated so the two constructors cannot drift in how they # coerce those slots. Used by qtlSumStats.R too. # @noRd -.sumStatsNewValidated <- function(Class, grl, ldSketch, genome, qcInfo) { +.sumStatsNewValidated <- function(Class, grl, ldReference, genome, qcInfo) { # The build goes into seqinfo, which is where a GRangesList keeps it and # where every Bioconductor consumer reads it from. Assigned before new() # so validity sees the finished object. @@ -233,7 +233,7 @@ GwasSumStats <- function( obj <- methods::new( Class, built, - ldSketch = .asLdSketch(ldSketch), + ldReference = .asLdRef(ldReference), qcInfo = as.list(qcInfo) ) methods::validObject(obj) @@ -302,7 +302,7 @@ GwasSumStats <- function( if (length(genome) != 1L) { msg <- glue( "`genome` must be a single character string (one build per ", - "collection, because all entries share the LD sketch)." + "collection, because all entries share the LD reference)." ) abort(msg) } @@ -525,15 +525,18 @@ setMethod("varY", "GwasSumStats", function(x, studyName = NULL) { #' across the inputs (a mismatch is an error, not a silent first-wins), the #' per-element \code{qcInfo$entryAudit} concatenates in element order so #' \code{\link{qcDiagnostics}} keeps addressing the right element, and the -#' LD sketches union into one panel over the shared genotype handle. That last -#' one matters: block-parallel pipelines narrow each piece's panel to its own -#' block, so keeping only the first would leave a multi-block collection whose -#' LD reference covers one block. +#' LD references combine: genotype panels union into one panel over the shared +#' genotype handle. That last one matters: block-parallel pipelines narrow each +#' piece's panel to its own block, so keeping only the first would leave a +#' multi-block collection whose LD reference covers one block. An +#' \code{LdMatrix} or a \code{GenotypeMixture} cannot be unioned that way; +#' one of the inputs' references must already cover the others, or the +#' combined one is passed as \code{ldReference}. #' #' @param ... Two or more \code{GwasSumStats} objects, or a single \code{list} #' of them. -#' @param ldSketch Optional genotype panel (see \code{\link{readGenotypes}}) to -#' attach to the combined collection, overriding the unioned one. Default +#' @param ldReference Optional genotype panel (see \code{\link{readGenotypes}}) +#' to attach to the combined collection, overriding the unioned one. Default #' \code{NULL}. #' @return A single combined \code{GwasSumStats}. #' @seealso \code{\link{combineQtlSumStats}}, @@ -542,7 +545,7 @@ setMethod("varY", "GwasSumStats", function(x, studyName = NULL) { #' data(gwasSumStatsS4Example) #' combineGwasSumStats(gwasSumStatsS4Example) #' @export -combineGwasSumStats <- function(..., ldSketch = NULL) { +combineGwasSumStats <- function(..., ldReference = NULL) { parts <- .asCombineList( list(...), "GwasSumStats", @@ -551,5 +554,5 @@ combineGwasSumStats <- function(..., ldSketch = NULL) { if (length(parts) == 1L) { return(parts[[1L]]) } - .rbindSumStats(parts, ldSketch, "combineGwasSumStats") + .rbindSumStats(parts, ldReference, "combineGwasSumStats") } diff --git a/R/h2Annotations.R b/R/h2Annotations.R index 72179c116..1a23f69bb 100644 --- a/R/h2Annotations.R +++ b/R/h2Annotations.R @@ -102,8 +102,9 @@ setMethod( #' @title Detect Annotation File Format #' @description Detect annotation file format from extension. This is separate -#' from \code{.h2DetectFormat} because BED annotation files (genomic intervals -#' for rtracklayer) must be distinguished from plink BED files. +#' from the genotype format detection (\code{.genotypePathFormat}) because +#' BED annotation files (genomic intervals for rtracklayer) must be +#' distinguished from plink BED files. #' @param path Character, file path. #' @return Character, one of "bigwig", "ldsc_annot", or "bed". #' @keywords internal diff --git a/R/h2EstimationWrappers.R b/R/h2EstimationWrappers.R index 6d7bfb1c7..a35a813bd 100644 --- a/R/h2EstimationWrappers.R +++ b/R/h2EstimationWrappers.R @@ -8,10 +8,10 @@ # * HDL/sHDL (High-Definition Likelihood, Ning et al. 2020 + Zhao 2023) # * LDER (LD Eigenvalue Regression, Song et al. 2022) # -# Plus shared utilities (block ops, WLS, jackknife SE, enrichment, LD -# shrinkage, genome-build checks, tauStar standardization, meta-analysis) -# and the converter that bridges H2Estimate results into the sLDSC -# postprocessing pipeline. +# Plus shared utilities (block ops, WLS, jackknife SE, enrichment, +# genome-build checks, tauStar standardization, meta-analysis) and the +# converter that bridges H2Estimate results into the sLDSC postprocessing +# pipeline. # # The H2Estimate result class itself lives in R/h2Estimate.R. # ============================================================================= @@ -22,7 +22,6 @@ #' @name pecotmr-h2-utils #' @keywords internal #' @importFrom GenomicRanges GRanges -#' @importFrom BiocParallel bplapply bpparam #' @importFrom IRanges findOverlaps #' @importFrom S4Vectors queryHits subjectHits NULL @@ -48,45 +47,6 @@ snpsPerBlock <- function(snpInfo, ldBlocks) { split(queryHits(hits), subjectHits(hits)) } -#' @title Apply Function Per Block with BiocParallel -#' @description Apply a function to each LD block in parallel. -#' @param blockIndices List of SNP index vectors per block. -#' @param FUN Function to apply to each block's indices. -#' @param BPPARAM BiocParallel parameter object. -#' @param ... Additional arguments passed to FUN. -#' @return A list of results, one per block. -#' @keywords internal -bplapplyBlocks <- function(blockIndices, FUN, BPPARAM = NULL, ...) { - if (is.null(BPPARAM)) { - BPPARAM <- bpparam() - } - bplapply(blockIndices, FUN, BPPARAM = BPPARAM, ...) -} - -# ============================================================================= -# Regression utilities -# ============================================================================= - -#' @title Jackknife Standard Errors by Block -#' @description Compute jackknife SE estimates using leave-one-block-out. -#' @param estimatesFull Numeric vector, full-sample parameter estimates. -#' @param estimatesLoo A matrix (nBlocks x nParams), leave-one-out estimates. -#' @return Numeric vector of jackknife SEs. -#' @keywords internal -jackknifeSe <- function(estimatesFull, estimatesLoo) { - nBlocks <- nrow(estimatesLoo) - pseudoVals <- nBlocks * - matrix( - estimatesFull, - nrow = nBlocks, - ncol = length(estimatesFull), - byrow = TRUE - ) - - (nBlocks - 1) * estimatesLoo - jkVar <- apply(pseudoVals, 2, var) / nBlocks - sqrt(jkVar) -} - # ============================================================================= # Baseline enrichment computation # ============================================================================= @@ -165,42 +125,6 @@ computeBaselineEnrichment <- function( ) } -# ============================================================================= -# LD shrinkage -# ============================================================================= - -#' @title Apply LD Shrinkage -#' @description Apply shrinkage to sample LD matrix to reduce noise from finite -#' reference panel size, following Wen & Stephens (2010). -#' @param R Numeric matrix, sample LD correlation matrix. -#' @param nSamples Integer, reference panel sample size. -#' @param shrinkageType Character, one of "wen_stephens", "constant". -#' @param geneticMap Numeric vector, genetic map positions for SNPs in R. -#' @return Shrunk LD correlation matrix. -#' @keywords internal -shrinkLd <- function( - R, - nSamples, - shrinkageType = "wen_stephens", - geneticMap = NULL -) { - if (shrinkageType == "wen_stephens" && !is.null(geneticMap)) { - # Wen & Stephens (2010) shrinkage based on genetic distance - p <- nrow(R) - theta <- 2 * nSamples / (22 * nSamples + 16) # effective recombination - distCm <- abs(outer(geneticMap, geneticMap, "-")) - shrinkFactor <- exp( - -4 * nSamples * distCm / (100 * (2 * nSamples + 16)) - ) - RShrunk <- `diag<-`(R * shrinkFactor, 1) - } else { - # Simple constant shrinkage - lambda <- 1 / sqrt(nSamples) - RShrunk <- (1 - lambda) * R + lambda * diag(nrow(R)) - } - RShrunk -} - # ============================================================================= # Genome build utilities # ============================================================================= @@ -209,9 +133,9 @@ shrinkLd <- function( #' @description Check that genome builds match between objects. Each object #' contributes a single genome build (from its \code{genome} slot). An #' object that records no build is skipped rather than treated as a -#' mismatch: \code{loadLdMatrix()} leaves the build unset, so an LD -#' reference built from it names no build, and an unknown build cannot -#' contradict a known one. +#' mismatch: an LD reference often names no build (a genotype panel's +#' variants rarely carry one), and an unknown build cannot contradict a +#' known one. #' @param ... Objects with a \code{genome} slot. #' @return TRUE if all match, error otherwise. #' @keywords internal @@ -235,10 +159,10 @@ checkGenomeBuild <- function(...) { } # genome() is per-seqlevel, so flatten across objects before uniquing: one # object naming two builds and two objects disagreeing are the same error. - # An object naming none contributes NA and is skipped, because - # loadLdMatrix() leaves the build unset and demanding one here would - # reject every LD reference the package's own loader produces. The - # coordinate check in .h2CheckPositions() is the stronger guard regardless. + # An object naming none contributes NA and is skipped, because an LD + # reference often names no build and demanding one here would reject most + # of them. The coordinate check in .h2CheckPositions() is the stronger + # guard regardless. builds <- unname(discard( unique(list_c(map(objects, GenomeInfoDb::genome))), is.na @@ -304,24 +228,9 @@ standardizeTauStar <- function( # DerSimonian-Laird random-effects meta-analysis # ============================================================================= -#' @title Random-Effects Meta-Analysis (metafor wrapper) -#' @description Thin convenience wrapper around \code{metafor::rma()}. pecotmr -#' does not implement its own meta-analysis engine -- this helper only guards -#' the degenerate 0- and 1-study cases (where \code{rma} is undefined) and -#' reshapes the \code{metafor} fit into a small list. The between-study -#' variance estimator is chosen by \code{method} and passed straight through. -#' @param means Numeric vector of study-level point estimates. -#' @param ses Numeric vector of study-level standard errors (must be positive -#' and finite). -#' @param method Between-study variance estimator forwarded to -#' \code{metafor::rma(method = )} (e.g. \code{"DL"} (default), \code{"REML"}, -#' \code{"ML"}, \code{"EB"}). -#' @return A list with \code{mean}, \code{se}, \code{tau2}, \code{I2} (a [0, 1] -#' proportion) and \code{Q} (Cochran's Q). -#' @importFrom metafor rma -#' @noRd # Degenerate meta-analysis inputs: k = 0 (all NA) or k = 1 (pass-through), plus # positivity validation. Returns NULL when the full estimator should run. +# @noRd .rmaMetaEarly <- function(means, ses, k) { if (k == 0L) { return(list( @@ -405,6 +314,24 @@ RmaOptions <- function(...) { ) } +#' @title Random-Effects Meta-Analysis (metafor wrapper) +#' @description Thin convenience wrapper around \code{metafor::rma()}. pecotmr +#' does not implement its own meta-analysis engine -- this helper only guards +#' the degenerate 0- and 1-study cases (where \code{rma} is undefined) and +#' reshapes the \code{metafor} fit into a small list. The between-study +#' variance estimator is chosen by \code{method} and passed straight through. +#' @param means Numeric vector of study-level point estimates. +#' @param ses Numeric vector of study-level standard errors (must be positive +#' and finite). +#' @param method Between-study variance estimator forwarded to +#' \code{metafor::rma(method = )} (e.g. \code{"DL"} (default), \code{"REML"}, +#' \code{"ML"}, \code{"EB"}). +#' @param metaArgs Extra \code{metafor::rma()} arguments, an +#' \code{\link{RmaOptions}} record. +#' @return A list with \code{mean}, \code{se}, \code{tau2}, \code{I2} (a [0, 1] +#' proportion) and \code{Q} (Cochran's Q). +#' @importFrom metafor rma +#' @noRd #' @importFrom rlang try_fetch .rmaMeta <- function(means, ses, method = "DL", metaArgs = list()) { k <- length(means) @@ -506,18 +433,48 @@ NULL # Per-block whitened statistics x_i = (u_i'z)/sqrt(lam_i) and stratified # eigenvalue scores l_{ia} = sum_j A_{ja} V_{ji}^2 (all-ones column when -# unstratified). Near-null directions (lam < 1e-6) are zeroed (as upstream). -.lderBlockStats <- function(block, z, baselineMat) { - V <- block$vectors - lam <- block$values - raw <- as.vector(crossprod(V, z[block$snpIdx]) / sqrt(pmax(lam, 1e-12))) - x <- replace(raw, lam < 1e-6, 0) - ldAnnot <- if (is.null(baselineMat)) { - matrix(1, length(lam), 1) - } else { - crossprod(V^2, baselineMat[block$snpIdx, , drop = FALSE]) +# unstratified), plus the candidate annotations' scores, from the block's +# decomposition. Near-null directions (lam < 1e-6) are zeroed, as in the +# original LDER implementation, which keeps every direction of the block: +# the zero-eigenvalue directions a decomposition from a panel's factor does +# not list are added as rows with x = 0 and lam = 0. +.lderBlockStats <- function(block, eigenRef, z, baselineMat, candMat) { + dec <- .ldEigenBlockAt(block, eigenRef) + lam <- dec$values + raw <- as.vector( + crossprod(dec$vectors, z[dec$snpIdx]) / sqrt(pmax(lam, 1e-12)) + ) + nAll <- length(lam) + dec$nNull + list( + x = c(replace(raw, lam < 1e-6, 0), numeric(dec$nNull)), + lam = c(lam, numeric(dec$nNull)), + ldAnnot = .h2EigenAnnot(dec, baselineMat) %||% matrix(1, nAll, 1), + ldCand = .h2EigenAnnot(dec, candMat) + ) +} + +# One block's eigenvalue scores sum_k V_ki^2 a_k for each column of +# `annotMat`, with a zero row for each zero-eigenvalue direction the +# decomposition does not list: every use multiplies a direction's row by its +# eigenvalue. NULL without annotations. +.h2EigenAnnot <- function(dec, annotMat) { + if (is.null(annotMat)) { + return(NULL) + } + listed <- crossprod( + dec$vectors^2, + annotMat[dec$snpIdx, , drop = FALSE] + ) + rbind(listed, matrix(0, dec$nNull, ncol(annotMat))) +} + +# The candidate (tested) annotations, or NULL when there are none to score. +.h2CandidateMat <- function(annotations) { + if (is.null(annotations)) { + return(NULL) } - list(x = x, lam = lam, ldAnnot = ldAnnot) + candMat <- assay(testedAnnotations(annotations), "annotations") + if (ncol(candMat) == 0L) NULL else candMat } # Concatenate per-block stats into the genome-wide regression design. M_a is @@ -645,15 +602,23 @@ NULL aLoo <- map_dbl(loo, "a") tauList <- map(loo, "tau") jkCoefs <- exec(rbind, !!!tauList) - jkSe <- function(v) sqrt((nB - 1) / nB * sum((v - mean(v))^2)) list( - h2Se = jkSe(h2Loo), - aSe = jkSe(aLoo), - tauSe = apply(jkCoefs, 2, jkSe), + h2Se = .jackknifeSeFromLoo(h2Loo), + aSe = .jackknifeSeFromLoo(aLoo), + tauSe = apply(jkCoefs, 2, .jackknifeSeFromLoo), annotationJackknifeCoefs = jkCoefs ) } +# Delete-one-block jackknife standard error from the n leave-one-out +# estimates `v`: sqrt((n - 1) / n * sum((v - mean(v))^2)). The LDER, gLDSC, +# HDL and S-LDSC jackknifes all report this quantity. +# @noRd +.jackknifeSeFromLoo <- function(v) { + n <- length(v) + sqrt((n - 1) / n * sum((v - mean(v))^2)) +} + # tau / tauSe / annotationJackknifeCoefs for the enrichment framework # (univariate: tau = h2). .lderEnrichParts <- function(fit, jk, baselineMat) { @@ -735,7 +700,7 @@ NULL } # LDER candidate-annotation score statistics against the fitted baseline. -.lderScoreStats <- function(eigenRef, annotations, design, fit, N) { +.lderScoreStats <- function(blockStats, annotations, design, fit, N) { candidate <- testedAnnotations(annotations) candMat <- assay(candidate, "annotations") nCand <- ncol(candMat) @@ -749,12 +714,7 @@ NULL ) w <- 1 / (2 * mu^2) resid <- design$x^2 - mu - candCross <- map( - eigenList(eigenRef), - .h2EigenCandCrossprod, - candMat = candMat - ) - ldCand <- exec(rbind, !!!candCross) + ldCand <- exec(rbind, !!!map(blockStats, "ldCand")) keepAll <- rep(TRUE, length(lam)) scoreZ <- map_dbl( seq_len(nCand), @@ -779,11 +739,15 @@ lderUnivariate <- function( ) { rough <- !inSample(eigenRef) baselineMat <- .h2BaselineMat(annotations) + # One pass over the blocks, each decomposed only while its statistics are + # taken, so a reference read from a panel holds one block at a time. blockStats <- map( - eigenList(eigenRef), + .ldEigenBlocks(eigenRef), .lderBlockStats, + eigenRef = eigenRef, z = z, - baselineMat = baselineMat + baselineMat = baselineMat, + candMat = .h2CandidateMat(annotations) ) design <- .lderDesign(blockStats, baselineMat) M <- length(design$x) @@ -800,24 +764,31 @@ lderUnivariate <- function( jk <- .lderJackknife(blockStats, baselineMat, n, M, design$M_a, rough, TRUE) ep <- .lderEnrichParts(fit, jk, baselineMat) localDf <- if (local) .lderLocal(blockStats, n, fit$a) else NULL - scoreStats <- if (is.null(annotations)) { - NULL - } else { - .lderScoreStats(eigenRef, annotations, design, fit, n)$scoreStats - } - jkRes <- list( + .h2JackknifeResult( + h2 = fit$h2, + intercept = fit$a, se = c(jk$h2Se, jk$aSe), - tauSe = ep$tauSe, - annotationJackknifeCoefs = ep$annotationJackknifeCoefs - ) - enrichmentDf <- .h2Enrichment( - baselineMat, - ep$tau, - ep$tauSe, - ep$annotationJackknifeCoefs, - fit$h2 + ep = ep, + baselineMat = baselineMat, + localDf = localDf, + scoreStats = .lderCandidateScores( + blockStats, + annotations, + design, + fit, + n + ) ) - .h2Result(fit$h2, jkRes, fit$a, ep$tau, localDf, enrichmentDf, scoreStats) +} + +# LDER's score statistics for the candidate annotations; NULL when there are +# none to test. +# @noRd +.lderCandidateScores <- function(blockStats, annotations, design, fit, n) { + if (is.null(annotations)) { + return(NULL) + } + .lderScoreStats(blockStats, annotations, design, fit, n)$scoreStats } @@ -860,6 +831,35 @@ lderUnivariate <- function( ) } +# The result of an estimator jackknifed over its blocks (LDER, HDL): `se` +# holds the standard errors of h2 and of the intercept, and `ep` the +# enrichment parts (tau, tauSe, annotationJackknifeCoefs) that the +# per-annotation enrichment table is built from. +# @noRd +.h2JackknifeResult <- function( + h2, + intercept, + se, + ep, + baselineMat, + localDf, + scoreStats +) { + jkRes <- list( + se = se, + tauSe = ep$tauSe, + annotationJackknifeCoefs = ep$annotationJackknifeCoefs + ) + enrichmentDf <- .h2Enrichment( + baselineMat, + ep$tau, + ep$tauSe, + ep$annotationJackknifeCoefs, + h2 + ) + .h2Result(h2, jkRes, intercept, ep$tau, localDf, enrichmentDf, scoreStats) +} + # Per-annotation enrichment table via the shared tau-based framework (used by # HDL and LDER; g-LDSC builds its own from partitioned h2). NULL when # unstratified. @@ -892,10 +892,15 @@ lderUnivariate <- function( #' @description Estimate heritability and functional enrichment by feasible #' generalized least squares (FGLS) on LD scores (Xiong et al. 2024). The #' response \eqn{Z_j^2 - 1} is regressed on stratified LD scores -#' \eqn{\ell_{ja} = \sum_k R^2_{jk} A_{ka}} (with a confounding intercept) -#' using the full residual covariance +#' \eqn{\ell_{ja} = \sum_k R^2_{jk} A_{ka}} (with a confounding intercept; +#' the raw sample \eqn{R^2}, as the original gLDSC implementation forms +#' them, not the unbiased \eqn{r^2} of the S-LDSC scores) using the full +#' residual covariance #' \eqn{\Omega = (\hat{N\tau}\, R D_a R + R)^2} (elementwise), inverted per LD -#' block via a 99\%-eigenvalue-mass truncation. \eqn{\hat{N\tau} = \sum(Z^2-1) +#' block via a 99\%-eigenvalue-mass truncation. Each block's \eqn{\Omega} +#' is formed, decomposed and dropped in turn; for a reference read from a +#' genotype panel it is formed from the panel's factor, never from the +#' block's \eqn{R}. \eqn{\hat{N\tau} = \sum(Z^2-1) #' / \sum \ell} is a method-of-moments plug-in; #' \eqn{D_a = diag(\sum_a A_{ja})}. #' Coefficients are \eqn{\tau = (X'\Omega^{-1}X)^{-1} X'\Omega^{-1} y / N} and @@ -919,32 +924,89 @@ NULL if (is.null(baselineMat)) matrix(1, M, 1) else cbind(base = 1, baselineMat) } -# Per-block quantities: LD matrix R, block annotations, stratified LD scores -# l = (R^2) A, and response y = Z^2 - 1. -.gldscBlockPrep <- function(block, z, A) { - R <- block$R - idx <- block$snpIdx +# Per-block design: the block's annotations, its stratified LD scores +# l = (R o R) A, the candidate annotations' scores (R o R) C, and the +# response y = Z^2 - 1. The one LD score here that stays on the raw r^2: the +# original gLDSC implementation squares its LD matrix as is (middle_fun.R +# LDSCmatrix), and the GLS design is reproduced from it. A block read from a +# genotype panel gets its scores from the panel's factor a stripe of rows at +# a time (.ldSquaredProduct()). +.gldscBlockDesign <- function(block, panel, z, A, candMat) { + idx <- block$idx Ab <- A[idx, , drop = FALSE] - list(R = R, Ab = Ab, ldsc = (R^2) %*% Ab, y = z[idx]^2 - 1, snpIdx = idx) + Cb <- if (!is.null(candMat)) candMat[idx, , drop = FALSE] + scores <- .ldSquaredProduct(.ldStatBlockLd(block, panel), cbind(Ab, Cb)) + nA <- ncol(Ab) + list( + Ab = Ab, + ldsc = scores[, seq_len(nA), drop = FALSE], + ldCand = if (!is.null(Cb)) scores[, -seq_len(nA), drop = FALSE], + y = z[idx]^2 - 1 + ) } -# 99%-mass truncated inverse of Omega = (rawNtau * R Da R + R)^2 (upstream -# eigen.cut). Da = diag(rowSums(A)) so R Da R = crossprod(R sqrt(Da)). -.gldscOmegaInv <- function(R, Ab, rawNtau, cutpoint = 0.99) { - Omega <- (rawNtau * crossprod(R * sqrt(rowSums(Ab))) + R)^2 - ei <- eigen(Omega, symmetric = TRUE) +# Omega = S o S, with S = rawNtau * R Da R + R and Da = diag(rowSums(A)), +# reduced to its leading eigenpairs carrying `cutpoint` of the eigenvalue +# mass (eigen.cut in the original gLDSC implementation): Omega^-1 is applied +# as V diag(1 / values) V' and never formed. +.gldscOmegaEigen <- function(ld, Ab, rawNtau, cutpoint = 0.99) { + S <- .gldscS(ld, rowSums(Ab), rawNtau) + ei <- eigen(S^2, symmetric = TRUE) k <- which(cumsum(ei$values) / sum(ei$values) >= cutpoint)[1] - Vc <- ei$vectors[, seq_len(k), drop = FALSE] - Vc %*% (t(Vc) / ei$values[seq_len(k)]) + list( + vectors = ei$vectors[, seq_len(k), drop = FALSE], + values = ei$values[seq_len(k)] + ) +} + +# S = rawNtau * R Da R + R for a block's LD source, with Da = diag(d). From a +# stored R, R Da R = crossprod(R sqrt(Da)). From a factor F, with +# R = F'F / (m - 1), S = F' (rawNtau / (m - 1) * (F Da F') F + F) / (m - 1): +# only S is formed, which Omega needs whole, never the block's R. +.gldscS <- function(ld, d, rawNtau) { + if (!is.null(ld$R)) { + return(rawNtau * crossprod(ld$R * sqrt(d)) + ld$R) + } + F <- ld$F + m1 <- nrow(F) - 1 + gram <- tcrossprod(sweep(F, 2L, sqrt(d), "*")) + crossprod(F, rawNtau / m1 * (gram %*% F) + F) / m1 +} + +# One block's contribution to the GLS normal equations, L = X'Omega^-1 X and +# R = X'Omega^-1 y with X = [1 | l], plus its candidate-score pieces. Omega +# is formed for the block, decomposed and dropped, so only one block's is +# ever in memory. +.gldscBlockContrib <- function(block, design, panel, rawNtau) { + om <- .gldscOmegaEigen(.ldStatBlockLd(block, panel), design$Ab, rawNtau) + X <- cbind(1, design$ldsc) + P <- crossprod(om$vectors, X) + Py <- crossprod(om$vectors, design$y) + Pw <- P / om$values + list( + L = crossprod(Pw, P), + R = as.vector(crossprod(Pw, Py)), + p = length(block$idx), + cand = .gldscCandidatePieces(om, design$ldCand, P, Py) + ) } -# Block contribution to the GLS normal equations: L = X'Omega^-1 X, -# R = X'Omega^-1 y, with X = [1 | l]. -.gldscBlockGls <- function(prep, rawNtau) { - OmInv <- .gldscOmegaInv(prep$R, prep$Ab, rawNtau) - X <- cbind(1, prep$ldsc) - XtOi <- crossprod(X, OmInv) - list(L = XtOi %*% X, R = as.vector(XtOi %*% prep$y)) +# A block's candidate-score pieces. The score is taken against the FITTED +# baseline residual, U_c = l_c' Omega^-1 (y - X coef), which is linear in +# coef: keeping l_c' Omega^-1 y and l_c' Omega^-1 X lets the block's score be +# formed once the fit is known, without revisiting the block. Alongside, +# I_c = l_c' Omega^-1 l_c. NULL without candidates. +.gldscCandidatePieces <- function(om, ldCand, P, Py) { + if (is.null(ldCand)) { + return(NULL) + } + Q <- crossprod(om$vectors, ldCand) + Qw <- Q / om$values + list( + Uy = as.vector(crossprod(Qw, Py)), + UX = crossprod(Qw, P), + I = colSums(Q * Qw) + ) } # GLS estimate from accumulated normal equations: tau = solve(L, R)/N (the @@ -968,7 +1030,6 @@ NULL # from the accumulated normal equations (so folds stay GLS-weighted). Jackknife # variance = var * (nB-1)^2 / nB (Xiong et al.). .gldscJackknife <- function(contrib, left, right, A, N) { - nB <- length(contrib) loo <- map( contrib, .gldscLooEstimate, @@ -982,11 +1043,10 @@ NULL tauList <- map(loo, "tau") jkCoefs <- exec(rbind, !!!tauList) intLoo <- map_dbl(loo, "intercept") - jkSe <- function(v) sqrt(var(v) * (nB - 1)^2 / nB) list( - h2Se = jkSe(estHBlocks[, 1]), - intSe = jkSe(intLoo), - tauSe = apply(jkCoefs, 2, jkSe), + h2Se = .jackknifeSeFromLoo(estHBlocks[, 1]), + intSe = .jackknifeSeFromLoo(intLoo), + tauSe = apply(jkCoefs, 2, .jackknifeSeFromLoo), annotationJackknifeCoefs = jkCoefs, estHBlocks = estHBlocks ) @@ -1022,64 +1082,48 @@ NULL ) } -# Local heritability for one LD block: a per-block GLS on [1 | base LD score]; +# Local heritability for one LD block: a per-block GLS on [1 | base LD score], +# whose normal equations are the leading 2 x 2 of the block's own; # h2Local = tau_base * (block SNPs), SE from the GLS coefficient covariance. -.gldscLocalBlock <- function(prep, b, rawNtau, N) { - OmInv <- .gldscOmegaInv(prep$R, prep$Ab, rawNtau) - X <- cbind(1, prep$ldsc[, 1]) - XtOi <- crossprod(X, OmInv) - L <- XtOi %*% X - coef <- solve(L, as.vector(XtOi %*% prep$y)) - p <- nrow(prep$R) +.gldscLocalBlock <- function(cb, b, N) { + L <- cb$L[1:2, 1:2] + coef <- solve(L, cb$R[1:2]) covTau <- (solve(L) / N^2)[2, 2] tibble( blockId = b, - h2Local = coef[2] / N * p, - h2LocalSe = sqrt(max(covTau, 0)) * p + h2Local = coef[2] / N * cb$p, + h2LocalSe = sqrt(max(covTau, 0)) * cb$p ) } # Per-block local heritability (NULL unless requested). -.gldscLocal <- function(preps, rawNtau, N) { +.gldscLocal <- function(contrib, N) { bind_rows( map( - seq_along(preps), + seq_along(contrib), .gldscLocalRow, - preps = preps, - rawNtau = rawNtau, + contrib = contrib, N = N ) ) } -# Candidate-annotation score against the FITTED baseline GLS residual -# r = y - X coef: U_c = sum_b l_c' Omega^-1 r, I_c = sum_b l_c' Omega^-1 l_c, -# scoreZ = U_c / sqrt(I_c). Uses the real fitted coefficients (not a refit). -.gldscCandidateBlock <- function(prep, candMat, rawNtau, coef) { - OmInv <- .gldscOmegaInv(prep$R, prep$Ab, rawNtau) - r <- prep$y - as.vector(cbind(1, prep$ldsc) %*% coef) - ldCand <- (prep$R^2) %*% candMat[prep$snpIdx, , drop = FALSE] - ct <- crossprod(ldCand, OmInv) - list(U = as.vector(ct %*% r), I = diag(ct %*% ldCand)) +# One block's candidate scores at the fitted coefficients, against the +# fitted baseline GLS residual r = y - X coef: U_c = l_c' Omega^-1 r and +# I_c = l_c' Omega^-1 l_c. +.gldscCandidateBlock <- function(cb, coef) { + list(U = cb$cand$Uy - as.vector(cb$cand$UX %*% coef), I = cb$cand$I) } -# sHDL-style candidate score statistics + jackknife score correlation. -.gldscScoreStats <- function(preps, candMat, rawNtau, coef) { - nCand <- ncol(candMat) - if (nCand == 0) { - return(NULL) - } - per <- map( - preps, - .gldscCandidateBlock, - candMat = candMat, - rawNtau = rawNtau, - coef = coef - ) +# sHDL-style candidate score statistics + jackknife score correlation: +# scoreZ = sum_b U_c / sqrt(sum_b I_c), at the real fitted coefficients (not +# a refit). +.gldscScoreStats <- function(contrib, coef) { + per <- map(contrib, .gldscCandidateBlock, coef = coef) U <- reduce(map(per, "U"), `+`) I <- reduce(map(per, "I"), `+`) scoreZ <- U / sqrt(pmax(I, 1e-10)) - R <- if (nCand == 1) { + R <- if (length(U) == 1L) { matrix(1, 1, 1) } else { looRows <- map( @@ -1089,8 +1133,7 @@ NULL U = U, I = I ) - looZ <- exec(rbind, !!!looRows) - Rc <- cor(looZ) + Rc <- cor(exec(rbind, !!!looRows)) replace(Rc, is.na(Rc), 0) } list(scoreZ = scoreZ, R = R) @@ -1103,39 +1146,53 @@ gldscUnivariate <- function( annotations = NULL, local = FALSE ) { - ldMatrixList <- ldMatrixList(ldRef) - if (length(ldMatrixList) == 0L) { - msg <- glue( - "g-LDSC requires full per-block LD matrices (ldMatrixList). ", - "Read the LD reference with the LD matrices retained." - ) - abort(msg) + if (!.ldScoreHasLd(ldRef)) { + abort(c( + "g-LDSC needs each LD block's LD, and this LdScore carries none.", + i = str_c( + "Build it from a genotype panel, or from LdMatrix blocks ", + "with `keepLdMatrices = TRUE`." + ) + )) } M <- length(ldRef) A <- .gldscAnnotMatrix(annotations, M) - preps <- map(ldMatrixList, .gldscBlockPrep, z = z, A = A) - rawNtau <- sum(list_c(map(preps, "y"))) / - sum(list_c(map(preps, "ldsc"))) - contrib <- map(preps, .gldscBlockGls, rawNtau = rawNtau) + panel <- ldReference(ldRef) + blocks <- .ldScoreBlocks(ldRef) + # Two passes over the blocks: Omega depends on rawNtau, which needs every + # block's design first. A block read from a panel is read once per pass. + designs <- map( + blocks, + .gldscBlockDesign, + panel = panel, + z = z, + A = A, + candMat = .h2CandidateMat(annotations) + ) + rawNtau <- sum(list_c(map(designs, "y"))) / + sum(list_c(map(designs, "ldsc"))) + contrib <- map2( + blocks, + designs, + .gldscBlockContrib, + panel = panel, + rawNtau = rawNtau + ) left <- reduce(map(contrib, "L"), `+`) right <- reduce(map(contrib, "R"), `+`) fit <- .gldscEstimate(left, right, A, n) jk <- .gldscJackknife(contrib, left, right, A, n) - .gldscResult(fit, jk, annotations, preps, rawNtau, local, n, M) + .gldscResult(fit, jk, annotations, contrib, local, n, M) } -# The candidate-annotation score statistics, when candidates were supplied and -# the score test could be formed for them. NULL otherwise. +# The candidate-annotation score statistics, when candidates were supplied. +# NULL otherwise. # @noRd -.gldscCandidateScores <- function(annotations, preps, rawNtau, fit) { - if (is.null(annotations)) { - return(NULL) - } - candMat <- assay(testedAnnotations(annotations), "annotations") - sc <- .gldscScoreStats(preps, candMat, rawNtau, fit$coef) - if (is.null(sc)) { +.gldscCandidateScores <- function(annotations, contrib, fit) { + if (is.null(.h2CandidateMat(annotations))) { return(NULL) } + sc <- .gldscScoreStats(contrib, fit$coef) list( z = sc$scoreZ, R = sc$R, @@ -1146,9 +1203,9 @@ gldscUnivariate <- function( } # Assemble the gldscUnivariate return (enrichment, local, candidate scores). -.gldscResult <- function(fit, jk, annotations, preps, rawNtau, local, n, M) { +.gldscResult <- function(fit, jk, annotations, contrib, local, n, M) { baselineMat <- .h2BaselineMat(annotations) - localDf <- if (local) .gldscLocal(preps, rawNtau, n) else NULL + localDf <- if (local) .gldscLocal(contrib, n) else NULL enrichmentDf <- if (is.null(baselineMat)) { NULL } else { @@ -1162,7 +1219,7 @@ gldscUnivariate <- function( M ) } - scoreStats <- .gldscCandidateScores(annotations, preps, rawNtau, fit) + scoreStats <- .gldscCandidateScores(annotations, contrib, fit) tau <- if (is.null(baselineMat)) fit$h2 else fit$tau[-1] tauSe <- if (is.null(baselineMat)) jk$h2Se else jk$tauSe[-1] jkRes <- list( @@ -1216,9 +1273,9 @@ NULL # variance of rotated coordinate i is # lamh2_i = s_i lam_i^2 - lam_i h2Total / nRef + int lam_i / n, # s_i = (ldAnnotScaled %*% h2a)_i and h2Total = sum(h2a). With a single 1/M -# score column this is exactly upstream HDL's llfun (Ning et al. 2020). -# param = c(h2_1, .., h2_nTau, int). -# `lim` is upstream HDL's floor on the modelled per-direction variance +# score column this is exactly llfun in the original HDL implementation +# (Ning et al. 2020). param = c(h2_1, .., h2_nTau, int). +# `lim` is the original HDL's floor on the modelled per-direction variance # (llfun.R uses exp(-10)). It has to match: with 40% of a real reference's # eigen-directions near zero the floor is active for most of them, and the # `bstar^2 / lamh2` term it feeds dominates the likelihood -- a smaller floor @@ -1247,23 +1304,34 @@ NULL } # Per-block HDL quantities: eigenvalues, rotated N-normalized effects -# bstar = V'(z/sqrt(n)), and stratified eigenvalue scores l_{ia} (NULL when -# unstratified). -.hdlBlockData <- function(block, z, n, baselineMat) { - idx <- block$snpIdx - V <- block$vectors - ldAnnot <- if (is.null(baselineMat)) { - NULL - } else { - crossprod(V^2, baselineMat[idx, , drop = FALSE]) - } +# bstar = V'(z/sqrt(n)), stratified eigenvalue scores l_{ia} (NULL when +# unstratified) and the candidate annotations' scores, from the block's +# decomposition. The zero-eigenvalue directions a decomposition from a +# panel's factor does not list are added with lam = 0. +.hdlBlockData <- function(block, eigenRef, z, n, baselineMat, candMat) { + dec <- .ldEigenBlockAt(block, eigenRef) + zb <- z[dec$snpIdx] / sqrt(n) + bstar <- as.vector(crossprod(dec$vectors, zb)) list( - lam = block$values, - bstar = as.vector(crossprod(V, z[idx] / sqrt(n))), - ldAnnot = ldAnnot + lam = c(dec$values, numeric(dec$nNull)), + bstar = c(bstar, .hdlNullBstar(zb, bstar, dec$nNull)), + ldAnnot = .h2EigenAnnot(dec, baselineMat), + ldCand = .h2EigenAnnot(dec, candMat) ) } +# The rotated effects along a block's unlisted zero-eigenvalue directions. +# HDL gives every such direction the same modelled variance, its floor, so +# the likelihood sees only their total sum of squares: the part of z outside +# the listed directions, spread evenly over them, leaves every estimate as a +# full decomposition would give it. +.hdlNullBstar <- function(zb, bstar, nNull) { + if (nNull == 0L) { + return(numeric()) + } + rep(sqrt(max(sum(zb^2) - sum(bstar^2), 0) / nNull), nNull) +} + # Genome-wide design: eigenvalues, rotated effects, block ids, the M_a-scaled # eigenvalue-score matrix, and M_a. Univariate uses a single all-ones score # column (l_{i,base} = 1) scaled by total M. @@ -1395,11 +1463,10 @@ NULL h2aList <- map(loo, "h2a") h2aBlocks <- exec(rbind, !!!h2aList) intLoo <- map_dbl(loo, "int") - jkSe <- function(x) sqrt(mean((x - mean(x))^2) * (nBlocks - 1)) list( - h2aSe = apply(h2aBlocks, 2, jkSe), - h2Se = jkSe(rowSums(h2aBlocks)), - intSe = jkSe(intLoo), + h2aSe = apply(h2aBlocks, 2, .jackknifeSeFromLoo), + h2Se = .jackknifeSeFromLoo(rowSums(h2aBlocks)), + intSe = .jackknifeSeFromLoo(intLoo), h2aBlocks = h2aBlocks ) } @@ -1429,15 +1496,19 @@ NULL # intercept fixed at the global fit; SE from the Gaussian-variance Fisher # information sum((dlamh2/dh2)^2 / (2 lamh2^2)). .hdlLocalBlock <- function(bd, b, n, nSamples, int, M, lim = exp(-10)) { - varOf <- function(h2) { - pmax( - h2 / M * bd$lam^2 - h2 * bd$lam / nSamples + int * bd$lam / n, - lim - ) - } - nll <- function(h2) sum(log(varOf(h2)) + bd$bstar^2 / varOf(h2)) - h2 <- optimize(nll, c(0, 1))$minimum - lamh2 <- varOf(h2) + # `intercept`, not `int`: optimize() would partially match `int` to its + # own `interval` argument. + h2 <- optimize( + .hdlLocalNll, + c(0, 1), + bd = bd, + M = M, + nSamples = nSamples, + intercept = int, + n = n, + lim = lim + )$minimum + lamh2 <- .hdlLocalVar(h2, bd, M, nSamples, int, n, lim) g <- bd$lam^2 / M - bd$lam / nSamples info <- sum(g^2 / (2 * lamh2^2)) tibble( @@ -1447,6 +1518,24 @@ NULL ) } +# Modeled variance of one block's bstar^2 at local heritability `h2`, the +# intercept fixed at the global fit; floored at `lim`. +# @noRd +.hdlLocalVar <- function(h2, bd, M, nSamples, intercept, n, lim) { + pmax( + h2 / M * bd$lam^2 - h2 * bd$lam / nSamples + intercept * bd$lam / n, + lim + ) +} + +# Gaussian negative log-likelihood (up to a constant) of one block's bstar at +# local heritability `h2` -- what .hdlLocalBlock() minimizes. +# @noRd +.hdlLocalNll <- function(h2, bd, M, nSamples, intercept, n, lim) { + lamh2 <- .hdlLocalVar(h2, bd, M, nSamples, intercept, n, lim) + sum(log(lamh2) + bd$bstar^2 / lamh2) +} + # Per-block local heritability (NULL unless requested). .hdlLocal <- function(blockData, n, nSamples, int, M) { bind_rows( @@ -1480,21 +1569,15 @@ NULL } # sHDL candidate-annotation score statistics + jackknife score correlation. -.shdlStratified <- function(eigenRef, annotations, design, lamh2) { +.shdlStratified <- function(blockData, nPanel, annotations, design, lamh2) { candidate <- testedAnnotations(annotations) candMat <- assay(candidate, "annotations") nCand <- ncol(candMat) if (nCand == 0) { return(list(enrichment = NULL, scoreStats = NULL)) } - nPanel <- ldPanelNSamples(eigenRef) M_c <- colSums(candMat) - candCross <- map( - eigenList(eigenRef), - .h2EigenCandCrossprod, - candMat = candMat - ) - ldCand <- exec(rbind, !!!candCross) + ldCand <- exec(rbind, !!!map(blockData, "ldCand")) scoreResid <- design$bstar^2 / lamh2^2 - 1 / lamh2 keepAll <- rep(TRUE, length(lamh2)) scoreZ <- map_dbl( @@ -1554,41 +1637,51 @@ hdlUnivariate <- function( annotations = NULL, local = FALSE ) { - eigenList <- eigenList(eigenRef) M <- length(eigenRef) nPanel <- ldPanelNSamples(eigenRef) baselineMat <- .h2BaselineMat(annotations) + # One pass over the blocks, each decomposed only while its data are taken. blockData <- map( - eigenList, + .ldEigenBlocks(eigenRef), .hdlBlockData, + eigenRef = eigenRef, z = z, n = n, - baselineMat = baselineMat + baselineMat = baselineMat, + candMat = .h2CandidateMat(annotations) ) design <- .hdlDesign(blockData, M, baselineMat) ft <- .hdlFit(design, n, nPanel) jk <- .hdlJackknife(blockData, M, baselineMat, n, nPanel) ep <- .hdlEnrichParts(ft, jk, design, baselineMat) localDf <- if (local) .hdlLocal(blockData, n, nPanel, ft$int, M) else NULL - scoreStats <- if (is.null(annotations)) { - NULL - } else { - lamh2 <- .hdlBaselineVar(design, ft, n, nPanel) - .shdlStratified(eigenRef, annotations, design, lamh2)$scoreStats - } - jkRes <- list( + .h2JackknifeResult( + h2 = ft$h2, + intercept = ft$int, se = c(jk$h2Se, jk$intSe), - tauSe = ep$tauSe, - annotationJackknifeCoefs = ep$annotationJackknifeCoefs - ) - enrichmentDf <- .h2Enrichment( - baselineMat, - ep$tau, - ep$tauSe, - ep$annotationJackknifeCoefs, - ft$h2 + ep = ep, + baselineMat = baselineMat, + localDf = localDf, + scoreStats = .hdlCandidateScores( + blockData, + nPanel, + annotations, + design, + ft, + n + ) ) - .h2Result(ft$h2, jkRes, ft$int, ep$tau, localDf, enrichmentDf, scoreStats) +} + +# sHDL's score statistics for the candidate annotations, under the variances +# the baseline fit implies; NULL when there are none to test. +# @noRd +.hdlCandidateScores <- function(blockData, nPanel, annotations, design, ft, n) { + if (is.null(annotations)) { + return(NULL) + } + lamh2 <- .hdlBaselineVar(design, ft, n, nPanel) + .shdlStratified(blockData, nPanel, annotations, design, lamh2)$scoreStats } @@ -1622,8 +1715,10 @@ NULL #' least squares on LD scores (Finucane et al. 2015) -- the original method #' the other three estimators descend from. Per-variant \eqn{\chi^2_j} is #' regressed on annotation-stratified LD scores -#' \eqn{\ell_{jC} = \sum_{k \in C} r^2_{jk}} with a confounding -#' intercept, fitting +#' \eqn{\ell_{jC} = \sum_{k \in C} r^2_{jk}}, each \eqn{r^2} being ldsc's +#' unbiased estimate \code{r^2 - (1 - r^2) / (n - 2)} at the reference +#' panel size \code{n} (see \code{\link{buildLdScore}}), with a +#' confounding intercept, fitting #' \eqn{E[\chi^2_j] = N \sum_C \tau_C \ell_{jC} + Na + 1}. #' #' Weights are LDSC's two multiplied factors, both floored at 1: the @@ -1638,8 +1733,9 @@ NULL #' \item{unstratified}{the two-step estimator: the intercept is fit on #' the variants with \eqn{\chi^2 < 30}, then held fixed while the #' slope is fit over all of them.} -#' \item{stratified}{no two-step -- upstream refuses one on a -#' partitioned design. Variants with \eqn{\chi^2 >} \code{max(0.001 +#' \item{stratified}{no two-step -- the original \code{ldsc} refuses +#' one on a partitioned design. Variants with \eqn{\chi^2 >} +#' \code{max(0.001 #' N, 80)} are dropped, the design is weighted once, and a single #' weighted least-squares fit follows.} #' } @@ -1649,15 +1745,17 @@ NULL #' than an error to clamp away, and clamping would move the heritability #' too. #' -#' Estimates agree with upstream \code{ldsc} to roughly 1e-6 relative; -#' the residual is a small ridge in the weighted solve, which upstream has -#' no equivalent of and which exists so an exactly singular design returns -#' a value rather than \code{NA}. +#' Estimates agree with the original \code{ldsc} implementation to +#' roughly 1e-6 relative; the residual is a small ridge in the weighted +#' solve, which the original has no equivalent of and which exists so an +#' exactly singular design returns a value rather than \code{NA}. #' #' Unlike \code{\link{pecotmr-h2-gldsc}} this needs only the per-variant #' scores when unstratified, so it runs on a scores-only #' \code{\link{LdScore}}; the stratified fit forms per-annotation scores -#' from the per-block LD matrices and therefore requires them. +#' from each block's LD, so it needs an \code{LdScore} that carries it: +#' one built from a genotype panel, or from \code{LdMatrix} blocks with +#' their matrices kept. #' #' \strong{Scale.} LD score regression is a genome-scale method -- real #' analyses regress over roughly a million variants. On a reference of a @@ -1698,62 +1796,60 @@ sldscUnivariate <- function( } # The design's LD-score columns: the base score first, then one stratified -# score per baseline annotation. Stratified scores come from the per-block LD -# matrices, the same source g-LDSC uses. +# score per baseline annotation. Stratified scores come from each block's LD, +# the same source g-LDSC uses, and take ldsc's unbiased r^2 as the stored +# base score does: ldsc applies it to every annotation column. # @noRd .sldscScoreMatrix <- function(ldRef, baselineMat, M) { base <- as.vector(mcols(ldRef)$ldScores[, 1L]) if (is.null(baselineMat)) { return(matrix(base, ncol = 1L, dimnames = list(NULL, "base_l2"))) } - ldMatrixList <- ldMatrixList(ldRef) - if (length(ldMatrixList) == 0L) { - msg <- glue( - "stratified S-LDSC requires full per-block LD matrices ", - "(ldMatrixList) to form the per-annotation LD scores. Build the ", - "reference with `buildLdScore(keepLdMatrices = TRUE)`." - ) - abort(msg) + if (!.ldScoreHasLd(ldRef)) { + abort(str_c( + "stratified S-LDSC needs each LD block's LD to form the ", + "per-annotation LD scores. Build the reference from a genotype ", + "panel, or with `buildLdScore(keepLdMatrices = TRUE)`." + )) } - strat <- .h2ScatterBlockRows( - matrix(0, M, ncol(baselineMat)), - map(ldMatrixList, .h2BlockAnnotScores, baselineMat = baselineMat) - ) - cbind(base_l2 = base, strat) + cbind(base_l2 = base, .h2StratifiedScores(ldRef, baselineMat)) } -# One block's per-annotation LD scores from its full LD matrix. +# Annotation-stratified LD scores sum_k r^2_jk a_k under ldsc's unbiased r^2, +# one column per annotation, from each block's LD: stored, or read from the +# genotype panel a block at a time. # @noRd -.h2BlockAnnotScores <- function(block, baselineMat) { - idx <- block$snpIdx - list( - idx = idx, - values = (block$R^2) %*% baselineMat[idx, , drop = FALSE] +.h2StratifiedScores <- function(ldRef, annotMat) { + .h2ScatterBlockRows( + matrix(0, length(ldRef), ncol(annotMat)), + map( + .ldScoreBlocks(ldRef), + .h2BlockAnnotScores, + panel = ldReference(ldRef), + annotMat = annotMat, + nRef = .ldscPanelN(ldRef) + ) ) } -# Per-block variant indices, from the LD matrices when present and otherwise -# by overlapping the reference's variants with its LD blocks. The jackknife -# leaves one of these out at a time. +# One block's per-annotation LD scores from its LD, summing ldsc's unbiased +# r^2 by its summed form. +# @noRd +.h2BlockAnnotScores <- function(block, panel, annotMat, nRef) { + idx <- block$idx + Ab <- annotMat[idx, , drop = FALSE] + raw <- .ldSquaredProduct(.ldStatBlockLd(block, panel), Ab) + list(idx = idx, values = .ldscUnbiasedSum(raw, colSums(Ab), nRef)) +} + +# Per-block variant indices: the LD blocks the estimators walk, which the +# jackknife leaves out one at a time. # @noRd .sldscBlockIndex <- function(ldRef) { - ldMatrixList <- ldMatrixList(ldRef) - if (length(ldMatrixList) > 0L) { - return(map(ldMatrixList, "snpIdx")) - } - snpInfo <- tibble( - CHR = as.character(seqnames(ldRef)), - BP = start(ldRef) - ) - idx <- snpsPerBlock(snpInfo, ldBlocks(ldRef)) - keep <- idx[map_int(idx, length) > 0L] - if (length(keep) == 0L) { - abort("S-LDSC: no LD block covers any reference variant.") - } - keep + map(.ldScoreBlocks(ldRef), "idx") } -# Upstream `Hsq.weights` verbatim (ldsc/ldscore/regressions.py): +# `Hsq.weights` from the original ldsc, verbatim (ldscore/regressions.py): # # hsq = clamp(hsq, 0, 1) # ld = max(ld, 1); w_ld = max(w_ld, 1) @@ -1763,8 +1859,8 @@ sldscUnivariate <- function( # # `ld` is the LD score entering the model and `w_ld` the one computed over # just the regression variants. pecotmr carries a single score, so both read -# the same column -- also the usual case upstream, where --w-ld-chr names the -# same file as --ref-ld-chr. +# the same column -- also the usual case with the original ldsc, where +# --w-ld-chr names the same file as --ref-ld-chr. # @noRd .sldscWeights <- function(ld, wLd, n, M, hsq, intercept) { hsq <- min(max(hsq, 0), 1) @@ -1781,8 +1877,8 @@ sldscUnivariate <- function( M * (mean(chi2) - intercept) / mean(n * baseScore) } -# Upstream takes two different routes and the split is on annotation count, -# not on preference (ldscore/sumstats.py): +# The original ldsc takes two different routes and the split is on annotation +# count, not on preference (ldscore/sumstats.py): # # univariate -- two-step estimator, chi2 < 30 selects step 1, IRWLS twice # partitioned -- NO two-step; it raises rather than attempt one. Variants @@ -1807,7 +1903,8 @@ sldscUnivariate <- function( capped <- chi2 < 30 keep <- if (sum(capped) < 4L) rep(TRUE, length(chi2)) else capped # One set of initial weights, formed on the full data, reused by both - # steps -- upstream computes `initial_w` once and subsets it for step 1. + # steps -- the original ldsc computes `initial_w` once and subsets it for + # step 1. xTot <- rowSums(scores) aggH2 <- .sldscAggregateH2(chi2, xTot, n, M) w0 <- .sldscWeights(xTot, baseScore, n, M, aggH2, 1) @@ -1821,8 +1918,8 @@ sldscUnivariate <- function( freeIntercept = TRUE, w0 = w0[keep] ) - # Not floored at 1. The model implies an intercept of at least 1, but - # upstream reports whatever step 1 estimates -- a value below 1 is + # Not floored at 1. The model implies an intercept of at least 1, but the + # original ldsc reports whatever step 1 estimates -- a value below 1 is # informative (it says the data are inconsistent with the model, often # deflation) and clamping it silently would change the h2 as well. intercept <- step1$intercept @@ -1854,15 +1951,16 @@ sldscUnivariate <- function( chi2 <- chi2[keep] scores <- scores[keep, , drop = FALSE] baseScore <- baseScore[keep] - # `x_tot` upstream: the row-sum of the design's annotation columns, which - # coincides with the base score only when there is a single column. + # `x_tot` in the original ldsc: the row-sum of the design's annotation + # columns, which coincides with the base score only when there is a + # single column. xTot <- rowSums(scores) hsq <- .sldscAggregateH2(chi2, xTot, n, M) w <- .sldscWeights(xTot, baseScore, n, M, hsq, 1) .sldscCoefToFit(.sldscWlsCoef(cbind(scores, 1), chi2, w), n, A) } -# Two IRWLS passes, matching upstream's `for i in range(2)`. +# Two IRWLS passes, matching the original ldsc's `for i in range(2)`. # @noRd .sldscIrwls <- function( y, @@ -1885,19 +1983,19 @@ sldscUnivariate <- function( coef <- NULL for (i in seq_len(max(1L, nIter))) { coef <- .sldscWlsCoef(design, y, w) - # Upstream builds the weight from the FIRST coefficient and `x_tot` - # alone -- a univariate approximation even for a partitioned design -- - # rather than from the full fitted values. + # The original ldsc builds the weight from the FIRST coefficient and + # `x_tot` alone -- a univariate approximation even for a partitioned + # design -- rather than from the full fitted values. hsq <- M * coef[[1L]] / n if (freeIntercept) { intercept <- max(coef[[length(coef)]], 0) } w <- .sldscWeights(xTot, baseScore, n, M, hsq, intercept) } - # Upstream's loop updates the weights `nIter` times and then solves once - # more with the converged weights -- three solves for its two passes, not - # two. Stopping at the loop's last solve leaves the final weight update - # unused and shifts the estimate by around a percent. + # The original ldsc's loop updates the weights `nIter` times and then + # solves once more with the converged weights -- three solves for its two + # passes, not two. Stopping at the loop's last solve leaves the final + # weight update unused and shifts the estimate by around a percent. coef <- .sldscWlsCoef(design, y, w) list( coef = coef[seq_len(ncol(scores))], @@ -1955,12 +2053,10 @@ sldscUnivariate <- function( jkCoefs <- exec(rbind, !!!map(loo, "tau")) estHBlocks <- exec(rbind, !!!map(loo, "estH")) intLoo <- map_dbl(loo, "intercept") - nB <- length(loo) - jkSe <- function(v) sqrt(var(v) * (nB - 1)^2 / nB) list( - h2Se = jkSe(estHBlocks[, 1L]), - intSe = jkSe(intLoo), - tauSe = apply(jkCoefs, 2, jkSe), + h2Se = .jackknifeSeFromLoo(estHBlocks[, 1L]), + intSe = .jackknifeSeFromLoo(intLoo), + tauSe = apply(jkCoefs, 2, .jackknifeSeFromLoo), annotationJackknifeCoefs = jkCoefs, estHBlocks = estHBlocks ) @@ -2065,8 +2161,9 @@ sldscUnivariate <- function( # trailing arguments (`nIter` for sldsc; the others take none today), so # an unknown name should fail here rather than at whichever estimator the # method token happens to select. lder/gldsc/hdl used to advertise a - # ridge `lambda` here that nothing read -- upstream LDER and HDL have no - # such penalty, and the function behind it had no callers. + # ridge `lambda` here that nothing read -- the original LDER and HDL + # implementations have no such penalty, and the function behind it had no + # callers. base <- list(z, n, ldRef, annotations, local) fn <- switch( method, @@ -2249,50 +2346,83 @@ setMethod( base } -# One block's base LD scores. +# One block's base LD scores. sum_k r^2_jk is sum_i (V[j,i] d[i])^2 because +# R = V D V' with orthonormal V, so the raw sum needs no R; the summed form of +# ldsc's unbiased r^2 then corrects it exactly, the block size being the +# weight sum. # @noRd -.h2BlockBaseScores <- function(block) { +.h2BlockBaseScores <- function(block, nRef) { Vd <- sweep(block$vectors, 2, block$values, "*") - list(idx = block$snpIdx, values = rowSums(Vd^2)) + list( + idx = block$snpIdx, + values = .ldscUnbiasedSum( + cbind(rowSums(Vd^2)), + length(block$snpIdx), + nRef + ) + ) } -# Base LD scores l2[j] = sum_i (V[j,i] * d[i])^2 (since R = V D V'). -.computeLdScoresBase <- function(eigenList, nSnps) { +# Base LD scores: ldsc's unbiased r^2 summed over each variant's block. +.computeLdScoresBase <- function(ldRef, nRef) { .h2ScatterBlockRows( - matrix(0, nrow = nSnps, ncol = 1, dimnames = list(NULL, "base_l2")), - map(eigenList, .h2BlockBaseScores) + matrix( + 0, + nrow = length(ldRef), + ncol = 1, + dimnames = list(NULL, "base_l2") + ), + map( + .ldEigenBlocks(ldRef), + .h2BlockBaseScoresAt, + ldRef = ldRef, + nRef = nRef + ) ) } +# @noRd +.h2BlockBaseScoresAt <- function(block, ldRef, nRef) { + .h2BlockBaseScores(.ldEigenBlockAt(block, ldRef), nRef) +} + # Base + annotation-stratified LD scores. Stratified column a: -# l2_a[j] = sum_i (V[j,i] d[i])^2 * (sum_k V[k,i]^2 annot[k,a]). -.computeLdScoresStratified <- function(eigenList, annotations, nSnps) { +# l2_a[j] = sum_k r^2_jk annot[k, a], under ldsc's unbiased r^2. +.computeLdScoresStratified <- function(ldRef, annotations, nRef) { annotMat <- assay(annotations, "annotations") annotNames <- SummarizedExperiment::colData(annotations)$name .h2ScatterBlockRows( matrix( 0, - nrow = nSnps, + nrow = length(ldRef), ncol = 1 + ncol(annotMat), dimnames = list(NULL, c("base_l2", annotNames)) ), - map(eigenList, .h2BlockStratScores, annotMat = annotMat) + map( + .ldEigenBlocks(ldRef), + .h2BlockStratScores, + ldRef = ldRef, + annotMat = annotMat, + nRef = nRef + ) ) } -# One block's base + annotation-stratified scores. All annotations are taken -# in a single matrix product rather than one column at a time. +# One block's base + annotation-stratified scores. The weighted sums need R's +# entries: the eigen shortcut sum_i (V[j,i] d[i])^2 * sum_k V[k,i]^2 +# annot[k,a] drops the cross terms between eigenvectors, which cancel only +# when every annot[k, a] is 1, so it is not the stratified score. R's rows +# are rebuilt from the decomposition a stripe at a time, and the summed form +# of ldsc's unbiased r^2 corrects every column at once. # @noRd -.h2BlockStratScores <- function(block, annotMat) { - idx <- block$snpIdx - V <- block$vectors - Vd2 <- sweep(V, 2, block$values, "*")^2 +.h2BlockStratScores <- function(block, ldRef, annotMat, nRef) { + dec <- .ldEigenBlockAt(block, ldRef) + idx <- dec$snpIdx + Ab <- annotMat[idx, , drop = FALSE] + raw <- .ldSquaredProduct(dec[c("vectors", "values")], cbind(1, Ab)) list( idx = idx, - values = cbind( - rowSums(Vd2), - Vd2 %*% crossprod(V^2, annotMat[idx, , drop = FALSE]) - ) + values = .ldscUnbiasedSum(raw, c(length(idx), colSums(Ab)), nRef) ) } @@ -2302,14 +2432,13 @@ setMethod( "computeLdScores", signature(ldRef = "LdEigen"), function(ldRef, annotations = NULL) { - # Reconstruct LD scores from eigendecompositions - # l2[j] = sum_k r^2_{jk} = sum_b sum_{eigenvalues in b} V[j,.]^2 * d - nSnps <- length(ldRef) - eigenList <- eigenList(ldRef) + # LD scores from the eigendecompositions, under ldsc's unbiased r^2, + # so they match buildLdScore() on the same reference. + nRef <- .ldscPanelN(ldRef) if (is.null(annotations)) { - return(.computeLdScoresBase(eigenList, nSnps)) + return(.computeLdScoresBase(ldRef, nRef)) } - .computeLdScoresStratified(eigenList, annotations, nSnps) + .computeLdScoresStratified(ldRef, annotations, nRef) } ) @@ -2322,25 +2451,20 @@ setMethod( if (is.null(annotations)) { return(mcols(ldRef)$ldScores) } - - # Compute annotation-stratified LD scores using LD matrices - ldMatrixList <- ldMatrixList(ldRef) - if (length(ldMatrixList) == 0) { - msg <- glue( - "Annotation-stratified LD scores require ldMatrixList in ", - "LdScore. ", - "Recompute the LD reference with full LD matrices." - ) - abort(msg) + if (!.ldScoreHasLd(ldRef)) { + abort(str_c( + "Annotation-stratified LD scores need each LD block's LD, ", + "and this LdScore carries none. Build it from a genotype ", + "panel, or from LdMatrix blocks with `keepLdMatrices = TRUE`." + )) } - - annotMat <- assay(annotations, "annotations") - # The stratified columns l2_a[j] = sum_k R^2_{jk} annot[k, a] are - # scattered per block; the base column comes from the reference and - # is joined on afterwards, so the scatter never touches it. - strat <- .h2ScatterBlockRows( - matrix(0, nrow = length(ldRef), ncol = ncol(annotMat)), - map(ldMatrixList, .h2BlockAnnotScores, baselineMat = annotMat) + # The stratified columns l2_a[j] = sum_k r^2_jk annot[k, a], under + # ldsc's unbiased r^2, are scattered per block; the base column comes + # from the reference and is joined on afterwards, so the scatter + # never touches it. + strat <- .h2StratifiedScores( + ldRef, + assay(annotations, "annotations") ) `colnames<-`( cbind(mcols(ldRef)$ldScores[, 1], strat), @@ -2423,14 +2547,6 @@ h2EstimateToSldscTrait <- function(h2Est) { # ---- map/apply helpers (lambda-free callbacks) --------------------------- -# crossprod of one eigen block's squared vectors against its -# candidate-annotation -# rows. Shared by the LDER and sHDL candidate-score assemblies. -# @noRd -.h2EigenCandCrossprod <- function(bk, candMat) { - crossprod(bk$vectors^2, candMat[bk$snpIdx, , drop = FALSE]) -} - # One LDER delete-one-block jackknife fold: design and fit with block `b` left # out. # @noRd @@ -2486,8 +2602,8 @@ h2EstimateToSldscTrait <- function(h2Est) { # One g-LDSC local-heritability row for block `b`. # @noRd -.gldscLocalRow <- function(b, preps, rawNtau, N) { - .gldscLocalBlock(preps[[b]], b, rawNtau, N) +.gldscLocalRow <- function(b, contrib, N) { + .gldscLocalBlock(contrib[[b]], b, N) } # g-LDSC leave-one-block-out standardized candidate score vector for block `b`. diff --git a/R/jointEngine.R b/R/jointEngine.R index fce1a4eaa..8ba305283 100644 --- a/R/jointEngine.R +++ b/R/jointEngine.R @@ -328,6 +328,28 @@ setMethod( # fsusie joint fit (functional SuSiE over the trait domain; individual-level, # cross-trait). Keep the first post-processed entry for this joint fit. +# +# The credible-set arguments supply what .fmOwnedEngineArgs("fsusieR::susiF") +# says is supplied: these are refused in FsusieOptions, so the pipeline is +# their only source. They are fitFsusie() formals, so .splitMethodArgs() +# routes them past the constructor that refuses them. +# +# The functional fit is collapsed to a variants x features weight matrix now +# (trimming later drops fitted_wc) and stored on $coef, so a trimmed fit can +# still yield TWAS weights. +# +# Returns ONE entry for the whole joint fit, unlike mvsusie's +# one-per-condition. mvsusie's posteriors carry a conditions axis, so +# .fmSliceCond() gives each condition its own 2-D slice and N rows partition +# the fit at no cost. An fsusie fit has no such axis: each trait is a POSITION +# on a shared functional grid, so `fitted_func` / `cred_band` / `outing_grid` +# describe all traits at once and cannot be sliced per trait. One row per +# trait would therefore store N copies of the same curve. +# +# The trait list itself is not lost -- every row carries the full joint +# membership in its `jointTraits` column. Only the grid POSITIONS are +# unrecoverable from that, and they are what maps a curve position back to a +# trait, so they ride on the fit. # @noRd .jointFitFsusie <- function(group, Xc, Yc, nCond, cfg, args) { if (length(.jgTraitPos(group)) != nCond) { @@ -338,10 +360,31 @@ setMethod( abort(msg) } verbose <- if (is.null(cfg$verbose)) 1 else cfg$verbose - # Supply what .fmOwnedEngineArgs("fsusieR::susiF") says is supplied: - # these are refused in FsusieOptions, so the pipeline is their only - # source. They are fitFsusie() formals, so .splitMethodArgs() routes them - # past the constructor that refuses them. + fit <- if (.jointFitsFullData(cfg)) { + .jointFsusieFullFit(group, Xc, Yc, cfg, args) + } else { + NULL + } + cvM <- .jointFsusieCv(Xc, Yc, group, cfg, args, verbose) + entry <- .jointFsusieEntry( + r = 1L, + fit = fit, + cvM = cvM, + Xc = Xc, + cfg = cfg, + af = args$af, + region = args$region + ) + if (!is.null(fit)) { + entry@susieFit$trait_positions <- .jgTraitPos(group) + } + list(entry) +} + +# The full-data fSuSiE fit of one joint group, with its functional fit +# collapsed to a variants x features weight matrix on $coef. +# @noRd +.jointFsusieFullFit <- function(group, Xc, Yc, cfg, args) { csp <- cfg$credibleSetParam fitArgs <- .fmMergeUserArgs( list( @@ -356,10 +399,7 @@ setMethod( args$methodArgs[["fsusie"]] ) raw <- exec(fitFsusie, !!!.splitMethodArgs(fitFsusie, fitArgs)) - # Collapse the functional fit to a variants x features weight matrix now - # (trimming later drops fitted_wc); store on $coef so a trimmed fit - # can still yield TWAS weights. - fit <- list_assign( + list_assign( raw, coef = try_fetch( fsusieWeights(fsusieFit = raw, variantIds = colnames(Xc)), @@ -367,36 +407,12 @@ setMethod( ) ) |> .setFinemappingFitClass("fsusie") - cvM <- .jointFsusieCv(Xc, Yc, group, cfg, args, verbose) - entry <- .jointFsusieEntry( - r = 1L, - fit = fit, - cvM = cvM, - Xc = Xc, - cfg = cfg, - af = args$af, - region = args$region - ) - # ONE entry for the whole joint fit, unlike mvsusie's one-per-condition. - # mvsusie's posteriors carry a conditions axis, so .fmSliceCond() gives - # each condition its own 2-D slice and N rows partition the fit at no - # cost. An fsusie fit has no such axis: each trait is a POSITION on a - # shared functional grid, so `fitted_func` / `cred_band` / `outing_grid` - # describe all traits at once and cannot be sliced per trait. One row per - # trait would therefore store N copies of the same curve. - # - # The trait list itself is not lost -- every row carries the full joint - # membership in its `jointTraits` column. Only the grid POSITIONS are - # unrecoverable from that, and they are what maps a curve position back - # to a trait, so they ride on the fit. - entry@susieFit$trait_positions <- .jgTraitPos(group) - list(entry) } # Per-fold fsusie CV slice, or NULL when CV is disabled. # @noRd .jointFsusieCv <- function(Xc, Yc, group, cfg, args, verbose) { - cv <- cfg$crossValidationArgs %||% list() + cv <- cfg$crossValidationParam %||% list() cvFolds <- cv$folds %||% 0L if (cvFolds <= 1L) { return(NULL) @@ -407,11 +423,11 @@ setMethod( "fsusie", args$methodArgs, cvFolds, - samplePartition = cfg$crossValidationArgs$samplePartition, + samplePartition = cfg$crossValidationParam$samplePartition, coverage = cfg$credibleSetParam$coverage, pos = .jgTraitPos(group), verbose = verbose, - numThreads = cv$threads %||% 1L, + numThreads = cv$numThreads %||% 1L, seed = cfg$seed ) .fmSliceCv(cv, "fsusie") @@ -430,18 +446,22 @@ setMethod( af = NULL, region = NULL ) { - bare <- .fmPostprocessOne( - fit = fit, - method = "fsusie", - dataX = Xc, - dataY = NULL, - af = af, - region = region, - conditionIdx = r, - csInput = "fsusie", - credibleSetParam = cfg$credibleSetParam, - fitRetention = cfg$fitRetention - ) + bare <- if (is.null(fit)) { + .fmCvOnlyRow() + } else { + .fmPostprocessOne( + fit = fit, + method = "fsusie", + dataX = Xc, + dataY = NULL, + af = af, + region = region, + conditionIdx = r, + csInput = "fsusie", + credibleSetParam = cfg$credibleSetParam, + fitRetention = cfg$fitRetention + ) + } e <- if (is.null(cvM)) { bare } else { @@ -531,6 +551,28 @@ setMethod( context = key$context ) mvPrior <- .buildMvsusieReweightedPrior(mvFitParts, colnames(Ys), ddCut) + fit <- if (.jointFitsFullData(cfg)) { + .jointMvFullFit(Xc, Ys, cfg, args, mvPrior) + } else { + NULL + } + cvM <- .jointMvCv( + Xc, + Ys, + cfg, + args, + mvPrior, + mvFitParts, + mvCv, + ddCut, + verbose + ) + list(fit = fit, cvM = cvM) +} + +# The full-data mvSuSiE fit of one joint group, under the reweighted prior. +# @noRd +.jointMvFullFit <- function(Xc, Ys, cfg, args, mvPrior) { mvBaseArgs <- c( list( X = Xc, @@ -545,20 +587,15 @@ setMethod( "mvsusie", args$methodArgs[["mvsusie"]] ) - fit <- exec(fitMvsusie, !!!.splitMethodArgs(fitMvsusie, fitArgs)) |> + exec(fitMvsusie, !!!.splitMethodArgs(fitMvsusie, fitArgs)) |> .setFinemappingFitClass("mvsusie") - cvM <- .jointMvCv( - Xc, - Ys, - cfg, - args, - mvPrior, - mvFitParts, - mvCv, - ddCut, - verbose - ) - list(fit = fit, cvM = cvM) +} + +# Whether a joint run fits the full data as well as cross-validating, from the +# CrossValidationParam's fitFullData (TRUE when unset). +# @noRd +.jointFitsFullData <- function(cfg) { + isTRUE(cfg$crossValidationParam$fitFullData %||% TRUE) } # Per-fold mvsusie CV slice (reusing the mr.mash prior per fold), or NULL. @@ -574,12 +611,12 @@ setMethod( ddCut, verbose ) { - cv <- cfg$crossValidationArgs %||% list() + cv <- cfg$crossValidationParam %||% list() cvFolds <- cv$folds %||% 0L if (cvFolds <= 1L) { return(NULL) } - sp <- cfg$crossValidationArgs$samplePartition %||% mvCv$samplePartition + sp <- cfg$crossValidationParam$samplePartition %||% mvCv$samplePartition mvPriorCv <- .fmBuildMvsusiePriorCv(mvCv, mvFitParts, colnames(Ys), ddCut) cv <- .fmWeightsCv( Xc, @@ -592,7 +629,7 @@ setMethod( verbose = verbose, mvPrior = mvPrior, mvPriorCv = mvPriorCv, - numThreads = cv$threads %||% 1L, + numThreads = cv$numThreads %||% 1L, seed = cfg$seed ) .fmSliceCv(cv, "mvsusie") @@ -617,18 +654,22 @@ setMethod( return(NULL) } r <- match(i, survivors) - bare <- .fmPostprocessOne( - fit = fitted$fit, - method = "mvsusie", - dataX = Xc, - dataY = NULL, - af = af, - region = region, - conditionIdx = r, - csInput = "X", - credibleSetParam = cfg$credibleSetParam, - fitRetention = cfg$fitRetention - ) + bare <- if (is.null(fitted$fit)) { + .fmCvOnlyRow() + } else { + .fmPostprocessOne( + fit = fitted$fit, + method = "mvsusie", + dataX = Xc, + dataY = NULL, + af = af, + region = region, + conditionIdx = r, + csInput = "X", + credibleSetParam = cfg$credibleSetParam, + fitRetention = cfg$fitRetention + ) + } e <- if (is.null(fitted$cvM)) { bare } else { @@ -715,10 +756,10 @@ setMethod( } # One RSS per-condition FineMappingRow (csInput = "Xcorr"). -# @noRd -# `credibleSet` / `fitRetention` come off `cfg`, which is what the caller +# `credibleSetParam` / `fitRetention` come off `cfg`, which is what the caller # supplies; they were also declared as formals with no defaults, so nothing # could ever have passed them without erroring. `group` was unused too. +# @noRd .jointRssEntry <- function(r, fit, ldMat, cfg, region = NULL) { .fmPostprocessOne( fit = fit, @@ -960,8 +1001,30 @@ setMethod( if (identical(level, "none")) "slim" else level } +# The mr.mash RSS fit of one summary-statistics joint group, with the caller's +# per-method options split across the wrapper's own formals and the engine's +# arguments exactly as the per-tuple path splits them (.twasWeightCallArgs()). +# @noRd +.jointMrmashRssWeights <- function(group, cfg, args) { + callArgs <- .twasWeightCallArgs( + "mrmashRssWeights", + list( + stat = list( + z = .jgZ(group), + n = .jgN(group), + variantNames = .jgVariantIds(group) + ), + ldReference = .jgLdRef(group), + fitRetention = .jointRetentionLevel(cfg) + ), + .twasUserArgs(args$methodArgs, "mrmash") + ) + exec(mrmashRssWeights, !!!callArgs) +} + # Full-data TWAS weight fit for a joint group. Returns list(W, fitParts, vids); -# W is NULL (a CV-only run) when fitFullData is FALSE. +# W is NULL (a CV-only run) when the CrossValidationParam's fitFullData is +# FALSE. # @noRd .jointTwasFitFull <- function( Xc, @@ -973,12 +1036,7 @@ setMethod( stdz, nCond ) { - fitFullData <- if (is.null(cfg$fitFullData)) { - TRUE - } else { - isTRUE(cfg$fitFullData) - } - if (!fitFullData) { + if (!.jointFitsFullData(cfg)) { return(list(W = NULL, fitParts = NULL, vids = colnames(Xc))) } retention <- .jointRetentionLevel(cfg) @@ -1053,13 +1111,12 @@ setMethod( is_in(token, c(canonical[!is.na(canonical)], bare)) } -# @noRd # Whether this token is barred from cross-validation: not requested, or its # weights are all zero so there is nothing to validate. A fine-mapping method # with no recoverable per-fold fits is an error rather than a silent skip. # @noRd .jointTwasCvBlocked <- function(W, cfg, token) { - if (!.jointTwasCvRequested(cfg$crossValidationArgs$weightMethods, token)) { + if (!.jointTwasCvRequested(cfg$crossValidationParam$weightMethods, token)) { return(TRUE) } if (!is.null(W) && all(W == 0)) { @@ -1091,7 +1148,7 @@ setMethod( # per-call args first and the pipeline config as the fallback. # @noRd .jointTwasRunCv <- function(Xc, Yc, wm, args, cfg, cvFolds) { - cv <- cfg$crossValidationArgs %||% list() + cv <- cfg$crossValidationParam %||% list() maxCv <- if ((cv$maxVariants %||% -1) <= 0) { Inf } else { @@ -1105,15 +1162,16 @@ setMethod( weightMethods = wm, fitRetention = "slim", maxNumVariants = maxCv, - numThreads = cfg$crossValidationArgs$threads %||% 1, + numThreads = cfg$crossValidationParam$numThreads %||% 1, dataDrivenPriorMatricesCv = args$dataDrivenPriorMatricesCv, verbose = cfg$verbose %||% 1, seed = cfg$seed ) } +# @noRd .jointTwasCv <- function(Xc, Yc, wm, ma, W, args, cfg, token) { - cv <- cfg$crossValidationArgs %||% list() + cv <- cfg$crossValidationParam %||% list() cvFolds <- cv$folds %||% 0L if (cvFolds <= 1L) { return(NULL) @@ -1168,11 +1226,7 @@ setMethod( signature("SumStatsJointGroup", "TwasJointPipeline"), function(group, pipeline, token, args) { cfg <- .jpConfig(pipeline) - weights <- mrmashRssWeights( - stat = list(z = .jgZ(group), n = .jgN(group)), - LD = .jgLdMatrix(group), - fitRetention = .jointRetentionLevel(cfg) - ) + weights <- .jointMrmashRssWeights(group, cfg, args) vids <- rownames(weights) %||% rownames(.jgZ(group)) fitParts <- attr(weights, "fit") # A single-condition fit comes back as a bare vector; the per-condition @@ -1206,29 +1260,30 @@ setMethod( # columns for axes that actually vary are attached. # Fold the accumulator's per-row records into one collection: build each record # into a 1-row collection via `constructor`, then union them with the generic -# .rbindCollections (which aligns optional columns and sets the ldSketch slot). -# The only per-row transforms are: wrap `entry` in a list, and drop an NA joint* -# value so the 1-row collection omits that column (the union re-adds it, padded, -# only when some row is joint). Every other field -- study/context/trait/method, -# region, and any future column -- flows through untouched. -.buildJointResult <- function(constructor, records, ldSketch = NULL) { +# .rbindCollections (which aligns optional columns and sets the ldReference +# slot). The only per-row transforms are: wrap `entry` in a list, and drop an NA +# joint* value so the 1-row collection omits that column (the union re-adds it, +# padded, only when some row is joint). Every other field -- +# study/context/trait/method, region, and any future column -- flows through +# untouched. +.buildJointResult <- function(constructor, records, ldReference = NULL) { if (length(records) == 0L) { return(NULL) } parts <- map(records, .jointBuildRecordPart, constructor = constructor) - .rbindCollections(parts, ldSketch = ldSketch) + .rbindCollections(parts, ldReference = ldReference) } setMethod("construct", "FmJointPipeline", function(pipeline, records) { .buildJointResult( QtlFineMappingResult, records, - .jpConfig(pipeline)$ldSketch + .jpConfig(pipeline)$ldReference ) }) setMethod("construct", "TwasJointPipeline", function(pipeline, records) { - .buildJointResult(TwasWeights, records, .jpConfig(pipeline)$ldSketch) + .buildJointResult(TwasWeights, records, .jpConfig(pipeline)$ldReference) }) # ---- enumerators (pattern x dataForm -> list) -------------------- @@ -1275,7 +1330,7 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { verbose, label = "jointCrossContext", region = args$region, - residualizationArgs = args$residualizationArgs + residualizationParam = args$residualizationParam ) if (is.null(xy)) { return(NULL) @@ -1294,7 +1349,7 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { # cross-context / sumstats. .enumCrossContextSumstats <- function(data, scope, args = list()) { - ldSketch <- ldSketch(data) + ldReference <- ldReference(data) studyCol <- as.character(data$study) contextCol <- as.character(data$context) traitCol <- as.character(data$trait) @@ -1304,7 +1359,7 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { data = data, scope = scope, args = args, - ldSketch = ldSketch, + ldReference = ldReference, studyCol = studyCol, contextCol = contextCol, traitCol = traitCol @@ -1327,7 +1382,7 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { data, scope, args, - ldSketch, + ldReference, studyCol, contextCol, traitCol @@ -1343,7 +1398,7 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { s = s, scopedContexts = scopedContexts, args = args, - ldSketch = ldSketch, + ldReference = ldReference, studyCol = studyCol, contextCol = contextCol, traitCol = traitCol @@ -1359,7 +1414,7 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { s, scopedContexts, args, - ldSketch, + ldReference, studyCol, contextCol, traitCol @@ -1376,14 +1431,14 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { tupleRows, ctxNames, errorLabel = "jointCrossContext (QtlSumStats)", - ldSketch = ldSketch, + ldReference = ldReference, cutoffs = args$cutoffs ) new( "SumStatsJointGroup", conditions = tibble(study = s, context = ctxNames, trait = tid), Z = jz$Z, - ldSketch = ldSketch, + ldReference = ldReference, N = jz$nVec ) } @@ -1428,7 +1483,7 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { label = "jointCrossTrait", studyName = studyName, region = args$region, - residualizationArgs = args$residualizationArgs + residualizationParam = args$residualizationParam ) if (is.null(xy)) { return(NULL) @@ -1455,7 +1510,7 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { # cross-trait / sumstats. .enumCrossTraitSumstats <- function(data, scope, args = list()) { - ldSketch <- ldSketch(data) + ldReference <- ldReference(data) studyCol <- as.character(data$study) contextCol <- as.character(data$context) traitCol <- as.character(data$trait) @@ -1465,7 +1520,7 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { data = data, scope = scope, args = args, - ldSketch = ldSketch, + ldReference = ldReference, studyCol = studyCol, contextCol = contextCol, traitCol = traitCol @@ -1478,7 +1533,7 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { data, scope, args, - ldSketch, + ldReference, studyCol, contextCol, traitCol @@ -1490,7 +1545,7 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { s = s, scopedTraits = scope$traits[[s]], args = args, - ldSketch = ldSketch, + ldReference = ldReference, studyCol = studyCol, contextCol = contextCol, traitCol = traitCol @@ -1506,7 +1561,7 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { s, scopedTraits, args, - ldSketch, + ldReference, studyCol, contextCol, traitCol @@ -1523,14 +1578,14 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { tupleRows, trNames, errorLabel = "jointCrossTrait (QtlSumStats)", - ldSketch = ldSketch, + ldReference = ldReference, cutoffs = args$cutoffs ) new( "SumStatsJointGroup", conditions = tibble(study = s, context = cx, trait = trNames), Z = jz$Z, - ldSketch = ldSketch, + ldReference = ldReference, N = jz$nVec ) } @@ -1539,7 +1594,7 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { # disjoint samples). One group per (context, trait) present in >= 2 scoped # studies; the study axis varies -> "joint" + jointStudies. .enumCrossStudySumstats <- function(data, scope, args = list()) { - ldSketch <- ldSketch(data) + ldReference <- ldReference(data) cols <- list( study = as.character(data$study), context = as.character(data$context), @@ -1555,7 +1610,7 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { args = args, cols = cols, allTrs = allTrs, - ldSketch = ldSketch + ldReference = ldReference )) } @@ -1568,7 +1623,7 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { args, cols, allTrs, - ldSketch + ldReference ) { compact(map( allTrs, @@ -1578,7 +1633,7 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { args = args, cols = cols, cx = cx, - ldSketch = ldSketch + ldReference = ldReference )) } @@ -1591,16 +1646,24 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { args, cols, cx, - ldSketch + ldReference ) { - .enumCrossStudyGroup(data, scope, args, cols, cx, tid, ldSketch) + .enumCrossStudyGroup(data, scope, args, cols, cx, tid, ldReference) } # One cross-study joint group for a (context, trait) cell, or NULL when fewer # than two studies survive the scope filter -- a "joint" fit over one study is # just that study, so the cell contributes nothing. # @noRd -.enumCrossStudyGroup <- function(data, scope, args, cols, cx, tid, ldSketch) { +.enumCrossStudyGroup <- function( + data, + scope, + args, + cols, + cx, + tid, + ldReference +) { candidates <- which( cols$context == cx & cols$trait == tid & @@ -1624,7 +1687,7 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { tupleRows, stNames, errorLabel = "jointCrossStudy", - ldSketch = ldSketch, + ldReference = ldReference, cutoffs = args$cutoffs ) new( @@ -1635,7 +1698,7 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { trait = tid ), Z = jz$Z, - ldSketch = ldSketch, + ldReference = ldReference, N = jz$nVec ) } @@ -1658,7 +1721,7 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { verbose, label = "composed", region = args$region, - residualizationArgs = args$residualizationArgs + residualizationParam = args$residualizationParam ) if (is.null(xy)) { return(list()) @@ -1707,8 +1770,15 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { naAction ) { se <- molecularTraits(data, contexts = cx) - compact(map( + traits <- keep( intersect(scope$traits[[studyName]], rownames(se)), + .traitSelectedAt, + traitId = scope$traitSelection, + s = studyName, + cx = cx + ) + compact(map( + traits, .enumUnivariateGroupFor, data = data, args = args, @@ -1727,7 +1797,7 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { contexts = cx, traitId = tid, naAction = naAction, - residualizationArgs = args$residualizationArgs + residualizationParam = args$residualizationParam ) X <- if (is.null(args$region)) { .fmResidGeno( @@ -1735,14 +1805,14 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { contexts = cx, traitId = tid, cisWindow = args$cisWindow, - residualizationArgs = args$residualizationArgs + residualizationParam = args$residualizationParam ) } else { .fmResidGeno( data, contexts = cx, region = args$region, - residualizationArgs = args$residualizationArgs + residualizationParam = args$residualizationParam ) } common <- intersect(rownames(X), rownames(Y)) @@ -1762,7 +1832,7 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { # (fixed) axes form one group each. Reuses .enumerateComposedSumstatGroups. .enumComposedSumstats <- function(data, scope, args = list()) { axes <- args$axes %||% c("context", "trait") - ldSketch <- ldSketch(data) + ldReference <- ldReference(data) gi <- .enumerateComposedSumstatGroups(list(axes = axes), data, scope) if (is.null(gi)) { return(list()) @@ -1776,14 +1846,14 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { data = data, gi = gi, args = args, - ldSketch = ldSketch + ldReference = ldReference ))) } # One composed cell's group, or NULL when it spans fewer than two tuples -- # a "joint" fit over one tuple is just that tuple. # @noRd -.enumComposedGroupFor <- function(gIdx, data, gi, args, ldSketch) { +.enumComposedGroupFor <- function(gIdx, data, gi, args, ldReference) { if (length(gIdx) < 2L) { return(NULL) } @@ -1792,7 +1862,7 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { gIdx, map_chr(gIdx, .jointGroupColLabel, gi = gi), errorLabel = "composed (QtlSumStats)", - ldSketch = ldSketch, + ldReference = ldReference, cutoffs = args$cutoffs ) new( @@ -1803,7 +1873,7 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { trait = gi$traitCol[gIdx] ), Z = jz$Z, - ldSketch = ldSketch, + ldReference = ldReference, N = jz$nVec ) } @@ -1821,7 +1891,7 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { cfg <- .jpConfig(pipeline) cond <- .jgConditions(g) out <- list_assign(args, !!!.twasGroupFmArgs(args, cond)) - cv <- cfg$crossValidationArgs %||% list() + cv <- cfg$crossValidationParam %||% list() cvF <- cv$folds %||% 0L if (cvF <= 1L || !is(g, "IndividualJointGroup")) { return(out) @@ -1950,13 +2020,22 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { # -- one method -> per-condition entries; the SR-TWAS ensemble is a layer ON TOP # of that. .runJointCell <- function(cell, pipeline, data, scope, tokens, args = list()) { + # PC groups are labelled by component, not by trait: their enumerator + # applies the selection itself, to the traits the components come from. + selection <- if (identical(.jcPattern(cell), "topPc")) { + NULL + } else { + scope$traitSelection + } groups <- .jcEnumerate(cell)(data, scope, args) |> + map(.jointGroupSelect, traitId = selection) |> + compact() |> keep(.jointGroupMeetsMin, minGroup = .jcMinGroup(cell)) if (length(groups) == 0L) { return(NULL) } doEnsemble <- is(pipeline, "TwasJointPipeline") && - isTRUE(.jpConfig(pipeline)$ensembleArgs$enabled) + isTRUE(.jpConfig(pipeline)$ensembleParam$enabled) records <- list_flatten(map( groups, .jointCellGroup, @@ -1969,30 +2048,63 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { construct(pipeline, records) } +# The group less any (context, trait) condition a per-context `traitId` +# selection leaves out, or NULL when it leaves out every one. A NULL +# selection keeps the group whole. +# @noRd +.jointGroupSelect <- function(g, traitId) { + if (is.null(traitId)) { + return(g) + } + cond <- .jgConditions(g) + .jgKeepConditions( + g, + map_lgl( + seq_len(nrow(cond)), + .jointConditionSelectedAt, + cond = cond, + traitId = traitId + ) + ) +} + +# Whether the selection keeps condition `i` of a group's conditions table. +# @noRd +.jointConditionSelectedAt <- function(i, cond, traitId) { + .traitSelectedAt( + cond$trait[[i]], + traitId, + cond$study[[i]], + cond$context[[i]] + ) +} + # Fit every token for one joint group -> records, plus the optional SR-TWAS # ensemble layer (built ON TOP of the shared per-method fits, when >= 2 methods # produced entries). +# +# `grp` carries provenance: the ";"-joined members of each varying axis +# (identical on every per-context row of this group), and the window this +# group was analysed over -- the caller's region when one was named, else the +# group's own cis window (the union span of its traits +/- cisWindow). The +# window is recorded because the fit only ever sees whichever variants +# survived QC; it is read back by genomicRegion(). +# +# `fitArgs$af` / `fitArgs$region` are provenance the fitters cannot recover for +# themselves: `data` lives here but not inside fitJointGroup(), and the +# requested window is only ever known to the caller. Both are read back as +# args$af / args$region where the entries are post-processed. # @noRd .jointCellGroup <- function(g, pipeline, data, tokens, args, doEnsemble) { cond <- .jgConditions(g) - # Provenance: the ";"-joined members of each varying axis (identical on - # every per-context row of this group). grp <- list( cond = cond, js = .jointAxisMembers(cond, "study"), jc = .jointAxisMembers(cond, "context"), jt = .jointAxisMembers(cond, "trait"), - # The window this group was analysed over: the caller's region when - # one was named, else the group's own cis window (the union span of - # its traits +/- cisWindow). Recorded because the fit only ever sees - # whichever variants survived QC; read back by genomicRegion(). region = .jointGroupWindow(data, cond, args) ) fitArgs <- .twasGroupArgs(g, pipeline, args) - # Provenance the fitters cannot recover for themselves: `data` lives here - # but not inside fitJointGroup(), and the requested window is only ever - # known to the caller. Both are read back as args$af / args$region where - # the entries are post-processed. fitArgs$af <- .jointAfForGroup(data, g) fitArgs$region <- args$region perTokenEntries <- compact(set_names( @@ -2095,17 +2207,21 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { .twasEnsembleLayer <- function(group, perTokenEntries, cfg) { tokens <- names(perTokenEntries) Y <- .jgY(group) - r2Cut <- if (is.null(cfg$ensembleArgs$r2Threshold)) { + r2Cut <- if (is.null(cfg$ensembleParam$r2Threshold)) { 0.01 } else { - cfg$ensembleArgs$r2Threshold + cfg$ensembleParam$r2Threshold } - solver <- if (is.null(cfg$ensembleArgs$solver)) { + solver <- if (is.null(cfg$ensembleParam$solver)) { "quadprog" } else { - cfg$ensembleArgs$solver + cfg$ensembleParam$solver + } + alpha <- if (is.null(cfg$ensembleParam$alpha)) { + 1 + } else { + cfg$ensembleParam$alpha } - alpha <- if (is.null(cfg$ensembleArgs$alpha)) 1 else cfg$ensembleArgs$alpha stdz <- cfg$standardized %||% FALSE map( seq_len(nrow(.jgConditions(group))), @@ -2121,9 +2237,6 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { ) } -# Per-condition CV predictions + weights + R^2 across the group's methods. -# Returns list(preds, wts, rsq), skipping methods with no CV / weights. -# @noRd # One token's ensemble inputs for condition `r`, or NULL when it has no # cross-validated predictions or no weights to contribute. # @noRd @@ -2158,6 +2271,9 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { ) } +# Per-condition CV predictions + weights + R^2 across the group's methods. +# Returns list(preds, wts, rsq), skipping methods with no CV / weights. +# @noRd .twasEnsembleCollect <- function(r, perTokenEntries, tokens) { parts <- compact(map( tokens, @@ -2259,7 +2375,13 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { # @noRd .enumTopPcForContext <- function(cx, data, scope, args, studyName, naAction) { se <- molecularTraits(data, contexts = cx) - traits <- intersect(scope$traits[[studyName]], rownames(se)) + traits <- keep( + intersect(scope$traits[[studyName]], rownames(se)), + .traitSelectedAt, + traitId = scope$traitSelection, + s = studyName, + cx = cx + ) # PCA is undefined for a single trait, matching the fine-mapping rule. if (length(traits) < 2L) { return(list()) @@ -2269,7 +2391,7 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { contexts = cx, traitId = traits, naAction = naAction, - residualizationArgs = args$residualizationArgs + residualizationParam = args$residualizationParam ) scores <- .fmTopPcScores(Y, args$nPCs %||% 10L) if (is.null(scores)) { @@ -2298,14 +2420,14 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { contexts = cx, traitId = traits, cisWindow = args$cisWindow, - residualizationArgs = args$residualizationArgs + residualizationParam = args$residualizationParam )) } .fmResidGeno( data, contexts = cx, region = args$region, - residualizationArgs = args$residualizationArgs + residualizationParam = args$residualizationParam ) } @@ -2422,7 +2544,7 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { if (length(jointMethods) == 0L || length(parsedJointSpec) == 0L) { return(NULL) } - ldSketch <- .jpConfig(pipeline)$ldSketch + ldReference <- .jpConfig(pipeline)$ldReference isFm <- is(pipeline, "FmJointPipeline") results <- compact(map( parsedJointSpec, @@ -2441,9 +2563,9 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { rbindFn <- if (isFm) .rbindFineMappingResult else .rbindTwasWeights reduce( results, - .jointRbindWithSketch, + .jointRbindWithLdRef, rbindFn = rbindFn, - ldSketch = ldSketch + ldReference = ldReference ) } @@ -2472,8 +2594,8 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { } # @noRd -.jointRbindWithSketch <- function(acc, res, rbindFn, ldSketch) { - rbindFn(acc, res, ldSketch = ldSketch) +.jointRbindWithLdRef <- function(acc, res, rbindFn, ldReference) { + rbindFn(acc, res, ldReference = ldReference) } # Run all joint methods for ONE spec: resolve its scope (optionally @@ -2511,10 +2633,6 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { .runJointCell(cell, pipeline, data, scope, jointMethods, spArgs) } -# Region mode without an explicit traitId: restrict each study's scoped traits -# to the genes overlapping the locus (matches fineMappingPipeline). Gene coords -# are context-independent, so the first scoped context's SE supplies them. -# @noRd # One study's traits narrowed to those inside `region`; left alone when the # study has no context to read a phenotype from. # @noRd @@ -2531,6 +2649,10 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { ) } +# Region mode without an explicit traitId: restrict each study's scoped traits +# to the genes overlapping the locus (matches fineMappingPipeline). Gene coords +# are context-independent, so the first scoped context's SE supplies them. +# @noRd .jointRestrictRegionTraits <- function(scope, data, region) { studies <- names(scope$traits) list_assign( @@ -2596,9 +2718,6 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { ) } -# Build one record into a 1-row collection: wrap `entry` in a list and drop any -# NA joint* axis (so the union re-adds it, padded, only when some row is joint). -# @noRd # A joint-axis column holding a lone NA means "not a joint axis", so it is # dropped rather than carried as a column of NA. # @noRd @@ -2606,6 +2725,9 @@ setMethod("construct", "TwasJointPipeline", function(pipeline, records) { !is.null(value) && length(value) == 1L && is.na(value) } +# Build one record into a 1-row collection: wrap `entry` in a list and drop any +# NA joint* axis (so the union re-adds it, padded, only when some row is joint). +# @noRd .jointBuildRecordPart <- function(rec, constructor) { jointCols <- c("jointStudies", "jointContexts", "jointTraits") absent <- jointCols[map_lgl(rec[jointCols], .jointAxisIsAbsent)] diff --git a/R/jointSpecification.R b/R/jointSpecification.R index 3030c80e9..1d3e38f63 100644 --- a/R/jointSpecification.R +++ b/R/jointSpecification.R @@ -1,7 +1,7 @@ # ============================================================================= # Joint-specification grammar and ragged input-argument parsing for the -# fineMapping / twasWeights pipelines. Pure validation + normalization; -# no pipeline dispatch or fits live here. +# fineMapping / twasWeights pipelines, plus the joint-specification +# dispatchers and multi-region / multi-study merges they share. # ============================================================================= # ----------------------------------------------------------------------------- @@ -76,9 +76,6 @@ abort(msg) } -# Return character vector of contexts in `data` (across all studies when -# `study = NULL`, or for one study otherwise). -# @noRd # Concatenate a list of pieces into one, the way `c()` did, but safe on the # empty case (`list_c()` has no zero-length identity to return). # @noRd @@ -89,6 +86,9 @@ list_c(pieces) } +# Return character vector of contexts in `data` (across all studies when +# `study = NULL`, or for one study otherwise). +# @noRd .spListContexts <- function(data, studyName = NULL) { if (is(data, "QtlDataset")) { if (!is.null(studyName) && !identical(studyName, studyName(data))) { @@ -134,9 +134,6 @@ abort(msg) } -# Return character vector of traits in `data` (filtered by study and/or -# context when supplied). -# @noRd # The trait ids present in one context of a QtlDataset. # @noRd .spTraitsInContext <- function(context, data) { @@ -193,6 +190,9 @@ character(0) } +# Return character vector of traits in `data` (filtered by study and/or +# context when supplied). +# @noRd .spListTraits <- function(data, studyName = NULL, context = NULL) { if (is(data, "QtlDataset")) { return(.spListTraitsQtlDataset(data, studyName, context)) @@ -230,7 +230,6 @@ .spValidJointAxes <- c("study", "context", "trait") -# @noRd # --- parseJointSpecification helpers ---------------------------------------- # Extract (axes, scope) from a spec (character vector or named list). @@ -341,6 +340,7 @@ list(axes = axes, scope = scope) } +# @noRd parseJointSpecification <- function(jointSpecification, data) { if (is.null(jointSpecification)) { return(list()) @@ -371,10 +371,12 @@ parseJointSpecification <- function(jointSpecification, data) { # of selected contexts. NULL input is preserved as NULL ("all contexts"). # ----------------------------------------------------------------------------- -# @noRd # --- parseContexts helpers -------------------------------------------------- -# Vector form: apply uniformly to every study, filtering to availability. +# Vector form: apply uniformly to every study, filtering to availability. A +# context no study has is a mistake rather than a gap -- with one study it +# is the only way to name a missing context -- so that is an error; one that +# only some studies lack is dropped for those, with a warning. .parseContextsVec <- function(contexts, studies, data) { if (length(contexts) == 0L) { msg <- glue( @@ -383,6 +385,12 @@ parseJointSpecification <- function(jointSpecification, data) { ) abort(msg) } + unknown <- setdiff(contexts, .spListContexts(data)) + if (length(unknown) > 0L) { + unknownStr <- str_flatten(unknown, ", ") + msg <- glue("`contexts` names context(s) no study has: {unknownStr}") + abort(msg) + } set_names( map(studies, .parseContextsAvail, data = data, contexts = contexts), studies @@ -454,6 +462,7 @@ parseJointSpecification <- function(jointSpecification, data) { ) } +# @noRd parseContexts <- function(contexts, data) { if (is.null(contexts)) { return(NULL) @@ -482,7 +491,6 @@ parseContexts <- function(contexts, data) { # available traits). Validates IDs against `.spListTraits` lookups. # ----------------------------------------------------------------------------- -# @noRd # --- parseTraitIds helpers -------------------------------------------------- # Validate a per-(study, context) trait vector against the data. @@ -561,6 +569,7 @@ parseContexts <- function(contexts, data) { abort(msg) } +# @noRd parseTraitIds <- function(traitId, data) { if (is.null(traitId)) { return(NULL) @@ -614,379 +623,100 @@ parseTraitIds <- function(traitId, data) { } # ----------------------------------------------------------------------------- -# parseMethods -- normalize and validate the `methods` argument with optional -# `sumStatsMethods` / `qtlDatasetMethods` overrides. Validates: -# * mutual exclusivity (methods XOR split-by-data-form) -# * nested list structure (vector OR named list at each level; never both) -# * method names against the capability table -# * multi-axis methods may NOT appear at per-context or per-trait levels -# * mr.mash and mvsusie pipeline scope -# -# `caps` is the capability table for the pipeline (see -# `.fineMappingMethodCapabilities` and `.twasMethodCapabilities`). -# `multivariateMethods` is the subset of tokens whose `multivariate = TRUE`; -# used for per-context / per-trait placement rejection. -# `rejectedAtUser` is a character vector of tokens forbidden as user-requested -# methods on this pipeline (e.g. "mrmash" in fineMapping, "mvsusie" in twas). -# -# Returns a list with components: -# methods (NULL if not given) -# sumStatsMethods (NULL if not given) -# qtlDatasetMethods (NULL if not given) -# shape "primary" if `methods` was given, "split" otherwise +# Reading a parsed selection. The pipelines normalize `contexts` / `traitId` +# once, at entry, with parseContexts() / parseTraitIds(); these answer "what +# does it select here?" for one study, context or row. A study or context the +# selection does not mention keeps everything it has. # ----------------------------------------------------------------------------- -# Walk a (possibly nested) methods spec and return the depth at which leaf -# vectors live: 1 = top-level vector, 2 = per-study, 3 = per-(study,context), -# 4 = per-(study,context,trait). Returns a tibble-like list of (path, vec). -# `levelNames` is c("study", "context", "trait"); the leaf level is where -# the vector lives. -# @noRd -# Validate a named-list method node before recursing into it. -.spWalkValidate <- function(spec, label, depth, maxDepth) { - if (!is.list(spec)) { - cls <- class(spec)[[1L]] - msg <- glue( - "{label}: every node must be a character vector or a named ", - "list (got class '{cls}')" - ) - abort(msg) - } - if (depth >= maxDepth) { - msg <- glue( - "{label}: cannot nest below the trait level (depth ", - "{maxDepth} is the deepest a vector may appear at)." - ) - abort(msg) - } - specNm <- names(spec) - if (is.null(specNm) || any(str_length(specNm) == 0L, na.rm = TRUE)) { - d <- depth + 1L - msg <- glue( - "{label}: named-list nodes must have non-empty names at ", - "depth {d}" - ) - abort(msg) - } - if (length(spec) == 0L) { - d <- depth + 1L - msg <- glue("{label}: empty named list at depth {d}") - abort(msg) - } -} - -.spWalkMethods <- function( - spec, - label = "methods", - depth = 0L, - maxDepth = 3L, - path = character(0) -) { - if (is.character(spec)) { - return(list(list(depth = depth, path = path, methods = unique(spec)))) - } - .spWalkValidate(spec, label, depth, maxDepth) - out <- .spConcat(map( - names(spec), - .spWalkMethodsAt, - spec = spec, - label = label, - depth = depth, - maxDepth = maxDepth, - path = path - )) - out -} - -# Walk one named branch of a methods spec. +# The contexts selected for study `s` (possibly none), or NULL for all. # @noRd -.spWalkMethodsAt <- function(nm, spec, label, depth, maxDepth, path) { - .spWalkMethods( - spec[[nm]], - label = label, - depth = depth + 1L, - maxDepth = maxDepth, - path = c(path, nm) - ) +.selectedContexts <- function(contexts, s) { + if (is.null(contexts)) NULL else contexts[[s]] } -# Validate one leaf method vector: non-empty character, all tokens known (in -# `caps`), and none in `rejectedAtUser`. +# The traits selected for study `s` in context `cx`, or NULL for all. # @noRd -.jointValidateLeafVec <- function(vec, label, caps, rejectedAtUser) { - if (!is.character(vec) || length(vec) == 0L) { - msg <- glue( - "{label}: method vector must be a non-empty character vector" - ) - abort(msg) - } - bad <- setdiff(vec, names(caps)) - if (length(bad) > 0L) { - badStr <- str_flatten(bad, ", ") - knownStr <- str_flatten(names(caps), ", ") - msg <- glue( - "{label}: unknown method token(s): {badStr}. ", - "Known tokens: {knownStr}" - ) - abort(msg) - } - rejected <- intersect(vec, rejectedAtUser) - if (length(rejected) > 0L) { - rejectedStr <- str_flatten(rejected, ", ") - msg <- glue( - "{label}: method(s) cannot be user-requested on this ", - "pipeline: {rejectedStr}" - ) - abort(msg) +.selectedTraits <- function(traitId, s, cx) { + if (!is.list(traitId)) { + return(traitId) } - invisible(NULL) + entry <- traitId[[s]] + if (is.list(entry)) entry[[cx]] else entry } +# TRUE when trait `tid` is selected for study `s` in context `cx`. # @noRd -# --- parseMethods helpers --------------------------------------------------- - -# Validate mutual exclusivity of primary vs split method specs. -#' @importFrom checkmate assertCharacter -.parseMethodsValidateArgs <- function( - primaryGiven, - splitGiven, - sumStatsMethods, - qtlDatasetMethods -) { - if (primaryGiven && splitGiven) { - msg <- glue( - "Use either `methods` or (`sumStatsMethods` + ", - "`qtlDatasetMethods`), not both." - ) - abort(msg) - } - if (!primaryGiven && !splitGiven) { - msg <- glue( - "Specify `methods`, or both `sumStatsMethods` and ", - "`qtlDatasetMethods`." - ) - abort(msg) - } - if (splitGiven) { - if (is.null(sumStatsMethods) || is.null(qtlDatasetMethods)) { - msg <- glue( - "`sumStatsMethods` and `qtlDatasetMethods` must be given ", - "together." - ) - abort(msg) - } - assertCharacter(sumStatsMethods, min.len = 1L) - assertCharacter(qtlDatasetMethods, min.len = 1L) - } -} - -# Multi-axis methods may not appear below the per-study level. -.parseMethodsCheckMultiAxis <- function(leaf, lab, multivariateMethods) { - if (leaf$depth < 2L) { - return(invisible(NULL)) - } - bad <- intersect(leaf$methods, multivariateMethods) - if (length(bad) > 0L) { - badStr <- str_flatten(bad, ", ") - levelName <- c("per-study", "per-context", "per-trait")[[leaf$depth]] - msg <- glue( - "{lab}: multi-axis method(s) {badStr} cannot be assigned at ", - "the {levelName} level (multi-axis methods operate across ", - "axes)." - ) - abort(msg) - } +.traitSelectedAt <- function(tid, traitId, s, cx) { + sel <- .selectedTraits(traitId, s, cx) + is.null(sel) || is_in(tid, sel) } -# Study/context/trait keys of a method leaf must reference valid entities. -.parseMethodsCheckPath <- function(leaf, lab, data, studyNames) { - # The path is (study, context, trait); each level is only checked once the - # leaf is deep enough to name it -- a shallower leaf has no such entry to - # read, so the depth guard has to come before the extraction. - if (leaf$depth < 1L) { - return(invisible(NULL)) - } - s <- leaf$path[[1L]] - if (!is_in(s, studyNames)) { - msg <- glue("{lab}: unknown study '{s}'") - abort(msg) - } - if (leaf$depth < 2L) { - return(invisible(NULL)) - } - cx <- leaf$path[[2L]] - if (!is_in(cx, .spListContexts(data, s))) { - msg <- glue("{lab}: unknown context '{cx}' for study '{s}'") - abort(msg) - } - if (leaf$depth < 3L) { - return(invisible(NULL)) +# The traits study `s` takes part with across `studyContexts`, the contexts in +# play for it -- what a fit spanning those contexts draws on: the union of +# their selections, or NULL when any of them keeps all of its traits. +# @noRd +.selectedStudyTraits <- function(traitId, s, studyContexts) { + entry <- if (is.list(traitId)) traitId[[s]] else traitId + if (!is.list(entry)) { + return(entry) } - tr <- leaf$path[[3L]] - if (!is_in(tr, .spListTraits(data, studyName = s, context = cx))) { - msg <- glue( - "{lab}: unknown trait '{tr}' for (study '{s}', ", - "context '{cx}')" - ) - abort(msg) + if (!all(is_in(studyContexts, names(entry)))) { + return(NULL) } + unique(as.character(list_c(unname(entry[studyContexts])))) } -# Validate one method leaf (leaf vector + multi-axis + path references). -.parseMethodsCheckLeaf <- function( - leaf, - data, - caps, - multivariateMethods, - rejectedAtUser, - studyNames -) { - lab <- if (length(leaf$path) == 0L) { - "methods" - } else { - pathStr <- str_flatten(str_c("'", leaf$path, "'"), "$") - glue("methods[[{pathStr}]]") - } - .jointValidateLeafVec(leaf$methods, lab, caps, rejectedAtUser) - .parseMethodsCheckMultiAxis(leaf, lab, multivariateMethods) - .parseMethodsCheckPath(leaf, lab, data, studyNames) +# TRUE when some study's traits are chosen context by context. Only then can +# a (context, trait) pair inside a study's selected traits still be left out. +# @noRd +.hasNestedTraitSelection <- function(traitId) { + is.list(traitId) && any(map_lgl(traitId, is.list)) } -# Walk a primary `methods` tree and validate every leaf. -.parseMethodsWalked <- function( - methods, - data, - caps, - multivariateMethods, - rejectedAtUser -) { - walked <- .spWalkMethods(methods, label = "methods", maxDepth = 3L) - studyNames <- .spListStudies(data) - for (leaf in walked) { - .parseMethodsCheckLeaf( - leaf, - data, - caps, - multivariateMethods, - rejectedAtUser, - studyNames - ) - } +# Which rows of a summary-statistics collection the parsed `contexts` / +# `traitId` selection keeps. +# @noRd +.sumStatsRowsSelected <- function(data, contexts, traitId) { + map_lgl( + seq_len(nrow(data)), + .sumStatsRowSelectedAt, + studyCol = as.character(data$study), + contextCol = as.character(data$context), + traitCol = as.character(data$trait), + contexts = contexts, + traitId = traitId + ) } -parseMethods <- function( - methods, - sumStatsMethods = NULL, - qtlDatasetMethods = NULL, - data, - caps, - multivariateMethods, - rejectedAtUser = character(0) +# Whether the selection keeps row `i`. +# @noRd +.sumStatsRowSelectedAt <- function( + i, + studyCol, + contextCol, + traitCol, + contexts, + traitId ) { - primaryGiven <- !is.null(methods) - splitGiven <- !is.null(sumStatsMethods) || !is.null(qtlDatasetMethods) - .parseMethodsValidateArgs( - primaryGiven, - splitGiven, - sumStatsMethods, - qtlDatasetMethods - ) - if (splitGiven) { - .jointValidateLeafVec( - sumStatsMethods, - "sumStatsMethods", - caps, - rejectedAtUser - ) - .jointValidateLeafVec( - qtlDatasetMethods, - "qtlDatasetMethods", - caps, - rejectedAtUser - ) - } else { - .parseMethodsWalked( - methods, - data, - caps, - multivariateMethods, - rejectedAtUser - ) - } - list( - methods = methods, - sumStatsMethods = sumStatsMethods, - qtlDatasetMethods = qtlDatasetMethods, - shape = if (primaryGiven) "primary" else "split" - ) + s <- studyCol[[i]] + cx <- contextCol[[i]] + ctxSel <- .selectedContexts(contexts, s) + (is.null(ctxSel) || is_in(cx, ctxSel)) && + .traitSelectedAt(traitCol[[i]], traitId, s, cx) } - -# ----------------------------------------------------------------------------- -# validateMethodsVsJointSpec -- cross-validation. A per-axis method assignment -# at or below the axis being jointed in any spec contradicts user intent. -# E.g. axes = "context" + per-context methods = contradiction. Joint flags -# operate on axes that haven't been pinned to per-axis methods. -# -# The rule: for each jointSpec, every axis in `axes` must NOT be a level at -# which the methods list nests. Concretely: -# - "study" in axes -> methods must not be a named list keyed by study -# (i.e. methods must be a top-level vector OR the -# split form). Per-study methods would mean different -# methods per study, incompatible with cross-study -# joints. -# - "context" in axes -> no per-(study, context) nesting at any study. -# - "trait" in axes -> no per-(study, context, trait) nesting at any -# (study, context). -# ----------------------------------------------------------------------------- - +# Study `s`'s share of a parsed `traitId`, in a form the single-study entry +# point parses back to the same selection: unchanged when it is one vector +# for every study, else that study's entry, keyed by the study when it is +# chosen context by context. NULL when the study keeps all of its traits. # @noRd -validateMethodsVsJointSpec <- function(methodsParsed, jointSpecParsed) { - # Split-form methods are flat per-data-form vectors -- nothing to check. - if (methodsParsed$shape == "split") { - return(invisible(NULL)) - } - if (length(jointSpecParsed) == 0L) { - return(invisible(NULL)) - } - methods <- methodsParsed$methods - if (is.character(methods)) { - return(invisible(NULL)) - } # top-level vector OK - - walked <- .spWalkMethods(methods, label = "methods", maxDepth = 3L) - # depth observed at leaves; max depth in the spec reflects nesting level. - maxDepth <- max(map_int(walked, "depth")) - - for (i in seq_along(jointSpecParsed)) { - axes <- jointSpecParsed[[i]]$axes - lab <- glue("jointSpecification[[{i}]]") - if (is_in("study", axes) && maxDepth >= 1L) { - msg <- glue( - "{lab}: `axes` includes 'study' but `methods` nests ", - "per-study; remove per-study method assignment when ", - "joining over studies." - ) - abort(msg) - } - if (is_in("context", axes) && maxDepth >= 2L) { - msg <- glue( - "{lab}: `axes` includes 'context' but `methods` nests ", - "per-context; remove per-context method assignment when ", - "joining over contexts." - ) - abort(msg) - } - if (is_in("trait", axes) && maxDepth >= 3L) { - msg <- glue( - "{lab}: `axes` includes 'trait' but `methods` nests ", - "per-trait; remove per-trait method assignment when ", - "joining over traits." - ) - abort(msg) - } +.studyTraitIdArg <- function(traitId, s) { + if (!is.list(traitId)) { + return(traitId) } - invisible(NULL) + entry <- traitId[[s]] + if (is.list(entry)) set_names(list(entry), s) else entry } # ============================================================================= @@ -1019,7 +749,6 @@ validateMethodsVsJointSpec <- function(methodsParsed, jointSpecParsed) { avail = .spListContexts, scopeLimit = scope$context, userSpec = contexts, - requireCharacter = FALSE, data = data ), studies @@ -1027,16 +756,23 @@ validateMethodsVsJointSpec <- function(methodsParsed, jointSpecParsed) { traitsOut <- set_names( map( studies, - .fmScopeAxis, - avail = .fmScopeTraits, + .fmScopeStudyTraits, scopeLimit = scope$trait, - userSpec = traitIds, - requireCharacter = TRUE, + traitIds = traitIds, + contextsOut = contextsOut, data = data ), studies ) - list(studies = studies, contexts = contextsOut, traits = traitsOut) + # A joint fit spans a study's contexts, so its traits are the union of + # the per-context selections; when the selection is per context, the + # cell runner then drops each (context, trait) pair it leaves out. + list( + studies = studies, + contexts = contextsOut, + traits = traitsOut, + traitSelection = if (.hasNestedTraitSelection(traitIds)) traitIds + ) } # `.spListTraits` takes the study by name, so give it the same (data, s) @@ -1046,41 +782,32 @@ validateMethodsVsJointSpec <- function(methodsParsed, jointSpecParsed) { .spListTraits(data, studyName = s) } -# What a pipeline-level `contexts` / `traitIds` argument narrows study `s` to, -# or NULL when it says nothing about it. `requireCharacter` mirrors the trait -# axis, which ignores a non-character per-study entry. +# What a pipeline-level `contexts` argument narrows study `s` to, or NULL when +# it says nothing about it: one vector for every study, or parseContexts()'s +# per-study list. # @noRd -.fmScopeUserLimit <- function(spec, s, requireCharacter) { - if (is.null(spec)) { - return(NULL) - } - if (is.character(spec)) { - return(spec) - } - if (!is.list(spec) || !is_in(s, names(spec))) { - return(NULL) - } - entry <- spec[[s]] - if (!requireCharacter || is.character(entry)) entry else NULL +.fmScopeUserLimit <- function(spec, s) { + if (is.list(spec)) .selectedContexts(spec, s) else spec } # One axis for one study: everything it has, narrowed by the spec's scope and # then by the caller's argument. Each narrowing is an intersect, so the chain # is a fold rather than a variable rewritten in place. # @noRd -.fmScopeAxis <- function( - s, - avail, - scopeLimit, - userSpec, - requireCharacter, - data -) { +.fmScopeAxis <- function(s, avail, scopeLimit, userSpec, data) { + limits <- compact(list(scopeLimit, .fmScopeUserLimit(userSpec, s))) + reduce(limits, intersect, .init = avail(data, s)) +} + +# Study `s`'s traits: everything it has, narrowed by the spec's scope and by +# the caller's `traitId` over the contexts in play for it. +# @noRd +.fmScopeStudyTraits <- function(s, scopeLimit, traitIds, contextsOut, data) { limits <- compact(list( scopeLimit, - .fmScopeUserLimit(userSpec, s, requireCharacter) + .selectedStudyTraits(traitIds, s, contextsOut[[s]]) )) - reduce(limits, intersect, .init = avail(data, s)) + reduce(limits, intersect, .init = .fmScopeTraits(data, s)) } @@ -1094,7 +821,7 @@ validateMethodsVsJointSpec <- function(methodsParsed, jointSpecParsed) { tupleRows, colLabels, errorLabel, - ldSketch = NULL, + ldReference = NULL, cutoffs = NULL ) { cols <- list( @@ -1113,7 +840,7 @@ validateMethodsVsJointSpec <- function(methodsParsed, jointSpecParsed) { # entry's ids filters the group: Z is built against this vector and each # entry is checked against it. firstDf <- allDf[ - .panelKeepMask(allDf$variant_id, ldSketch, cutoffs, errorLabel), + .panelKeepMask(allDf$variant_id, ldReference, cutoffs, errorLabel), , drop = FALSE ] @@ -1196,20 +923,16 @@ validateMethodsVsJointSpec <- function(methodsParsed, jointSpecParsed) { } -# Build a multi-context Y matrix for a single (study, trait) from an -# individual-level QtlDataset. Returns list(X, Y, perTraitContexts) or -# NULL when fewer than 2 contexts carry `tid` or the sample / complete-Y -# subset is too small to fit. -# @noRd # --- .buildIndividualCrossContextXy helpers --------------------------------- -# Scoped contexts in which a trait is present; NULL if fewer than 2. # Does context `cx` carry trait `tid`? # @noRd .ccContextHasTrait <- function(cx, data, tid) { is_in(tid, rownames(molecularTraits(data, contexts = cx))) } +# Scoped contexts in which a trait is present; NULL if fewer than 2. +# @noRd .crossContextPerTrait <- function(data, tid, scopedContexts, verbose, label) { perTraitContexts <- keep( scopedContexts, @@ -1283,6 +1006,11 @@ validateMethodsVsJointSpec <- function(methodsParsed, jointSpecParsed) { ) } +# Build a multi-context Y matrix for a single (study, trait) from an +# individual-level QtlDataset. Returns list(X, Y, perTraitContexts) or +# NULL when fewer than 2 contexts carry `tid` or the sample / complete-Y +# subset is too small to fit. +# @noRd .buildIndividualCrossContextXy <- function( data, tid, @@ -1291,7 +1019,7 @@ validateMethodsVsJointSpec <- function(methodsParsed, jointSpecParsed) { verbose, label, region = NULL, - residualizationArgs + residualizationParam ) { perTraitContexts <- .crossContextPerTrait( data, @@ -1309,13 +1037,13 @@ validateMethodsVsJointSpec <- function(methodsParsed, jointSpecParsed) { tid, cisWindow, region, - residualizationArgs + residualizationParam ) Yres <- .fmResidPheno( data, contexts = perTraitContexts, traitId = tid, - residualizationArgs = residualizationArgs + residualizationParam = residualizationParam ) .crossContextAssemble(X, Yres, perTraitContexts, verbose, label, tid) } @@ -1335,12 +1063,8 @@ validateMethodsVsJointSpec <- function(methodsParsed, jointSpecParsed) { traits[IRanges::overlapsAny(rr[traits], region)] } -# Build a multi-trait Y matrix for a single (study, context) from an -# individual-level QtlDataset. Returns list(X, Y, traitsHere, se) or NULL -# when fewer than 2 traits live in the context or the sample / complete-Y -# subset is too small. -# @noRd # Warn + signal skip when a context has fewer than 2 scoped traits. +# @noRd .crossTraitTooFew <- function(traitsHere, cx, studyName, verbose, label) { if (length(traitsHere) >= 2L) { return(FALSE) @@ -1356,6 +1080,11 @@ validateMethodsVsJointSpec <- function(methodsParsed, jointSpecParsed) { TRUE } +# Build a multi-trait Y matrix for a single (study, context) from an +# individual-level QtlDataset. Returns list(X, Y, traitsHere, se) or NULL +# when fewer than 2 traits live in the context or the sample / complete-Y +# subset is too small. +# @noRd .buildIndividualCrossTraitXy <- function( data, cx, @@ -1365,7 +1094,7 @@ validateMethodsVsJointSpec <- function(methodsParsed, jointSpecParsed) { label, studyName, region = NULL, - residualizationArgs + residualizationParam ) { se <- molecularTraits(data, contexts = cx) # scopedTraits is already region-restricted upstream (.runJointSpecs) when @@ -1380,13 +1109,13 @@ validateMethodsVsJointSpec <- function(methodsParsed, jointSpecParsed) { traitsHere, cisWindow, region, - residualizationArgs + residualizationParam ) allY <- .fmResidPheno( data, contexts = cx, traitId = traitsHere, - residualizationArgs = residualizationArgs + residualizationParam = residualizationParam ) common <- intersect(rownames(allX), rownames(allY)) if (length(common) < 2L) { @@ -1407,18 +1136,16 @@ validateMethodsVsJointSpec <- function(methodsParsed, jointSpecParsed) { } -# Build a composed-axes (context, trait) X/Y for individual-level -# QtlDataset. Returns list(X, Y, tuples) or NULL. -# @noRd # Residualized genotype for the cross-* / composed builders (cis-window or an # explicit region). Shared by the individual multi-axis Xy builders. +# @noRd .buildResidGeno <- function( data, contexts, traitId, cisWindow, region, - residualizationArgs + residualizationParam ) { if (is.null(region)) { .fmResidGeno( @@ -1426,14 +1153,14 @@ validateMethodsVsJointSpec <- function(methodsParsed, jointSpecParsed) { contexts = contexts, traitId = traitId, cisWindow = cisWindow, - residualizationArgs = residualizationArgs + residualizationParam = residualizationParam ) } else { .fmResidGeno( data, contexts = contexts, region = region, - residualizationArgs = residualizationArgs + residualizationParam = residualizationParam ) } } @@ -1515,7 +1242,7 @@ validateMethodsVsJointSpec <- function(methodsParsed, jointSpecParsed) { allTraits, cisWindow, region, - residualizationArgs + residualizationParam ) { # Genotypes first, as the inline version did: reading them is what # fails on a missing panel file, and that error must stay the one the @@ -1526,13 +1253,13 @@ validateMethodsVsJointSpec <- function(methodsParsed, jointSpecParsed) { allTraits, cisWindow, region, - residualizationArgs + residualizationParam ) resid <- .fmResidPheno( data, contexts = allContexts, traitId = allTraits, - residualizationArgs = residualizationArgs + residualizationParam = residualizationParam ) list( X = allX, @@ -1545,6 +1272,9 @@ validateMethodsVsJointSpec <- function(methodsParsed, jointSpecParsed) { ) } +# Build a composed-axes (context, trait) X/Y for individual-level +# QtlDataset. Returns list(X, Y, tuples) or NULL. +# @noRd .buildComposedIndividualXy <- function( data, scope, @@ -1553,7 +1283,7 @@ validateMethodsVsJointSpec <- function(methodsParsed, jointSpecParsed) { verbose, label, region = NULL, - residualizationArgs + residualizationParam ) { tuples <- .composedTuples(data, scope, studyName, verbose, label) if (is.null(tuples)) { @@ -1567,7 +1297,7 @@ validateMethodsVsJointSpec <- function(methodsParsed, jointSpecParsed) { allTraits, cisWindow, region, - residualizationArgs + residualizationParam ) allX <- sides$X YresList <- sides$YresList @@ -1662,8 +1392,6 @@ validateMethodsVsJointSpec <- function(methodsParsed, jointSpecParsed) { ) } -# Top-level joint dispatcher for fineMappingPipeline(QtlDataset). -# @noRd # Merge per-region QtlFineMappingResult collections (same keys across regions) # into one by merging each (study, context, trait, method) row's entry via # .fmMergeEntries (per-region susieFit list + renumbered credible sets). @@ -1690,7 +1418,7 @@ validateMethodsVsJointSpec <- function(methodsParsed, jointSpecParsed) { entry = mergedEntries ), .jointCols(base), - list(ldSketch = NULL) + list(ldReference = NULL) ) exec(QtlFineMappingResult, !!!qfmrArgs) } @@ -1726,22 +1454,12 @@ validateMethodsVsJointSpec <- function(methodsParsed, jointSpecParsed) { ) } -# Shared tail of the MultiStudyQtlDataset fineMapping / twasWeights pipeline -# methods: recurse into each embedded QtlDataset then the embedded QtlSumStats, -# row-bind the per-study results, build the per-tuple result object, and combine -# it with any joint-specification result. `perStudyFn` / `sumStatsFn` are the -# (method-specific) single-study recursions; `rbindFn` / `resultCtor` / -# `pipelineName` supply the per-pipeline pieces. Each method keeps its own -# (divergent) method-gating / joint-dispatch preamble and passes the computed -# `jointResult` in. -# @noRd # --- .multiStudyPipelineDriver helpers -------------------------------------- -# Accumulate per-study + sumstats results (tracking the embedded LD sketch). # rbind two results with no LD sketch -- the per-study combine. # @noRd .msRbindNoLd <- function(acc, x, rbindFn) { - rbindFn(acc, x, ldSketch = NULL) + rbindFn(acc, x, ldReference = NULL) } # Fold per-study results together, skipping studies that produced nothing. @@ -1755,6 +1473,8 @@ validateMethodsVsJointSpec <- function(methodsParsed, jointSpecParsed) { reduce(kept, .msRbindNoLd, rbindFn = rbindFn) } +# Accumulate per-study + sumstats results (tracking the embedded LD sketch). +# @noRd .msDriverAccumulate <- function( qtlDatasets, sumStats, @@ -1771,19 +1491,19 @@ validateMethodsVsJointSpec <- function(methodsParsed, jointSpecParsed) { if (is.null(ssRes)) { return(list(out = fromStudies, embeddedLd = NULL)) } - embeddedLd <- ldSketch(ssRes) + embeddedLd <- ldReference(ssRes) out <- if (is.null(fromStudies)) { ssRes } else { - rbindFn(fromStudies, ssRes, ldSketch = embeddedLd) + rbindFn(fromStudies, ssRes, ldReference = embeddedLd) } list(out = out, embeddedLd = embeddedLd) } # Reconstruct the per-tuple result object from the accumulated rows. .msDriverPerTuple <- function(out, resultCtor, embeddedLd) { - # ldSketch: NULL if all studies were individual-level; the embedded - # sumStats's ldSketch otherwise. + # ldReference: NULL if all studies were individual-level; the embedded + # sumStats's ldReference otherwise. ctorArgs <- c( list( study = as.character(out$study), @@ -1793,11 +1513,20 @@ validateMethodsVsJointSpec <- function(methodsParsed, jointSpecParsed) { entry = .collectionEntries(out) ), .jointCols(out), - list(ldSketch = embeddedLd) + list(ldReference = embeddedLd) ) exec(resultCtor, !!!ctorArgs) } +# Shared tail of the MultiStudyQtlDataset fineMapping / twasWeights pipeline +# methods: recurse into each embedded QtlDataset then the embedded QtlSumStats, +# row-bind the per-study results, build the per-tuple result object, and combine +# it with any joint-specification result. `perStudyFn` / `sumStatsFn` are the +# (method-specific) single-study recursions; `rbindFn` / `resultCtor` / +# `pipelineName` supply the per-pipeline pieces. Each method keeps its own +# (divergent) method-gating / joint-dispatch preamble and passes the computed +# `jointResult` in. +# @noRd .multiStudyPipelineDriver <- function( data, jointResult, @@ -1837,7 +1566,7 @@ validateMethodsVsJointSpec <- function(methodsParsed, jointSpecParsed) { if (is.null(perTupleResult)) { return(jointResult) } - rbindFn(perTupleResult, jointResult, ldSketch = embeddedLd) + rbindFn(perTupleResult, jointResult, ldReference = embeddedLd) } # Synthesize a jointSpecification for the AUTO-DETECTION path (no explicit @@ -1859,366 +1588,201 @@ validateMethodsVsJointSpec <- function(methodsParsed, jointSpecParsed) { list() } } - - +# ---- fine-mapping joint dispatch -------------------------------------------- +# +# Every fine-mapping joint dispatch hands the engine a pipeline config and an +# `args` list built from ONE record: the pipeline's own joint record +# (.fmIndividualJointCfg() / .fmQssConfigs()), or, for a component of a +# MultiStudyQtlDataset, that record with the component's data in it. +# Re-listing the settings at each dispatch layer is how they went missing -- +# the per-study dispatch dropped cross-validation, residualization, the +# screen, fitRetention and the seed, and passed the rest positionally into +# the wrong slots. + +# Run joint specs on a QtlDataset, once per region block, merging per (study, +# context, trait, method) across the blocks. A study axis has no meaning on +# individual-level data, and rejecting it up front keeps the error ahead of +# the fit. +# @noRd .fmDispatchJointSpecsQtlDataset <- function( parsedJointSpec, - data, - methods, - contexts, - traitIds, - cisWindow, - credibleSetParam = CredibleSetParam(includeAllCs = FALSE), - verbose, - methodArgs = list(), - xRegions = list(NULL), - mrmashPrior = NULL, - dataDrivenPriorWeightsCutoff = 1e-10, - crossValidationArgs = CrossValidationParam(), - residualizationArgs = ResidualizationParam(), - pipCutoffToSkip = 0, - fineMappingResult = NULL, - fitRetention = c("slim", "none", "full"), - seed = NULL + tokens, + methodArgs, + cfg ) { - fitRetention <- arg_match(fitRetention) - # Run the joint dispatch once per region block, then merge per - # (study, context, trait, method) across regions. A single block (cis or - # jointRegions=TRUE concatenated) returns its result directly. - # xRegions is deliberately absent: each region is supplied per call. - perRegion <- map( - xRegions, + .jointRejectStudyOnIndividual(parsedJointSpec) + perRegion <- compact(map( + cfg$xRegions, .fmDispatchJointSpecRegion, parsedJointSpec = parsedJointSpec, - data = data, - methods = methods, - contexts = contexts, - traitIds = traitIds, - cisWindow = cisWindow, - credibleSetParam = credibleSetParam, - verbose = verbose, + tokens = tokens, methodArgs = methodArgs, - mrmashPrior = mrmashPrior, - dataDrivenPriorWeightsCutoff = dataDrivenPriorWeightsCutoff, - crossValidationArgs = crossValidationArgs, - residualizationArgs = residualizationArgs, - pipCutoffToSkip = pipCutoffToSkip, - fineMappingResult = fineMappingResult, - fitRetention = fitRetention, - seed = seed - ) |> - compact() + cfg = cfg + )) .fmCombineRegionResults(perRegion) } -# Merge the per-region joint results by (study, context, trait, method). A -# single block -- cis, or jointRegions = TRUE concatenated -- is returned -# directly rather than merged with itself. +# One region block of .fmDispatchJointSpecsQtlDataset(). # @noRd -.fmCombineRegionResults <- function(perRegion) { - if (length(perRegion) == 0L) { - return(NULL) - } - if (length(perRegion) == 1L) { - return(perRegion[[1L]]) - } - .fmMergeResultsByKey(perRegion) +.fmDispatchJointSpecRegion <- function( + region, + parsedJointSpec, + tokens, + methodArgs, + cfg +) { + .runJointSpecs( + parsedJointSpec, + cfg$data, + dataForm = "individual", + pipeline = .fmJointPipeline(cfg, cfg$crossValidationParam, NULL), + jointMethods = intersect(tokens, c("mvsusie", "fsusie")), + contexts = cfg$contexts, + traitIds = cfg$traitId, + args = .fmJointIndividualArgs(cfg, methodArgs, region) + ) } -# FmJointPipeline for individual-level fine-mapping, built from the call params. -.fmJointPipeline <- function( - credibleSetParam = CredibleSetParam(includeAllCs = FALSE), - dataDrivenPriorWeightsCutoff, - crossValidationArgs, - residualizationArgs, - verbose, - fitRetention = c("slim", "none", "full"), - seed -) { - fitRetention <- arg_match(fitRetention) +# The FmJointPipeline a joint run fits under: the settings the fitters read +# off the pipeline. Summary statistics pass the no-CV record (there are no +# samples to hold out) and the collection's LD sketch; individual-level data +# pass the caller's resolved CV record and no sketch. +# @noRd +.fmJointPipeline <- function(cfg, crossValidationParam, ldReference) { new( "FmJointPipeline", config = list( - credibleSetParam = credibleSetParam, - dataDrivenPriorWeightsCutoff = dataDrivenPriorWeightsCutoff, - crossValidationArgs = crossValidationArgs, - residualizationArgs = residualizationArgs, - verbose = verbose, - fitRetention = fitRetention, - seed = seed, - ldSketch = NULL + credibleSetParam = cfg$credibleSetParam, + dataDrivenPriorWeightsCutoff = cfg$dataDrivenPriorWeightsCutoff, + crossValidationParam = crossValidationParam, + verbose = cfg$verbose, + fitRetention = cfg$fitRetention, + seed = cfg$seed, + ldReference = ldReference ) ) } -# The joint pipeline record, once the spec has been checked against the -# individual-level form -- a study axis has no meaning there, and building -# a pipeline for a spec that names one would defer the error past the fit. +# The engine `args` of an individual-level joint run over one region block. +# Residualization rides here rather than on the pipeline config: the group +# enumerators read it while extracting X and Y. # @noRd -.fmJointPipelineChecked <- function( - parsedJointSpec, - credibleSetParam, - dataDrivenPriorWeightsCutoff, - crossValidationArgs, - residualizationArgs, - verbose, - fitRetention, - seed -) { - .jointRejectStudyOnIndividual(parsedJointSpec) - .fmJointPipeline( - credibleSetParam = credibleSetParam, - dataDrivenPriorWeightsCutoff = dataDrivenPriorWeightsCutoff, - crossValidationArgs = crossValidationArgs, - residualizationArgs = residualizationArgs, - verbose = verbose, - fitRetention = fitRetention, - seed = seed - ) -} - -# Engine routing (jointEngine.R) for one region block; the caller loops the -# regions. -# @noRd -.fmDispatchJointSpecsQtlDatasetOneRegion <- function( - parsedJointSpec, - data, - methods, - contexts, - traitIds, - cisWindow, - verbose, - methodArgs = list(), - region = NULL, - mrmashPrior = NULL, - dataDrivenPriorWeightsCutoff = 1e-10, - crossValidationArgs = CrossValidationParam(), - residualizationArgs = ResidualizationParam(), - pipCutoffToSkip = 0, - fineMappingResult = NULL, - seed = NULL, - credibleSetParam, - fitRetention -) { - pipeline <- .fmJointPipelineChecked( - parsedJointSpec, - credibleSetParam = credibleSetParam, - dataDrivenPriorWeightsCutoff = dataDrivenPriorWeightsCutoff, - crossValidationArgs = crossValidationArgs, - residualizationArgs = residualizationArgs, - verbose = verbose, - fitRetention = fitRetention, - seed = seed - ) - .runJointSpecs( - parsedJointSpec, - data, - dataForm = "individual", - pipeline = pipeline, - jointMethods = intersect(methods, c("mvsusie", "fsusie")), - contexts = contexts, - traitIds = traitIds, - args = list( - mrmashPrior = mrmashPrior, - dataDrivenPriorWeightsCutoff = dataDrivenPriorWeightsCutoff, - methodArgs = methodArgs, - cisWindow = cisWindow, - region = region, - verbose = verbose, - pipCutoffToSkip = pipCutoffToSkip, - cache = fineMappingResult - ) +.fmJointIndividualArgs <- function(cfg, methodArgs, region) { + list( + mrmashPrior = cfg$mrmashPrior, + dataDrivenPriorWeightsCutoff = cfg$dataDrivenPriorWeightsCutoff, + methodArgs = methodArgs, + cisWindow = cfg$cisWindow, + region = region, + verbose = cfg$verbose, + pipCutoffToSkip = cfg$screen, + cache = cfg$fineMappingResult, + residualizationParam = cfg$residualizationParam ) } - -# Top-level joint dispatcher for fineMappingPipeline(QtlSumStats). +# Run joint specs on a QtlSumStats collection. `cfg` is the summary-statistics +# joint record (.fmQssConfigs()$joint), or a MultiStudy record with the +# collection as its data. # @noRd -# FmJointPipeline for summary-statistics fine-mapping (RSS: no sample folds; -# LD sketch drawn from the data). -.fmSumStatsPipeline <- function( - data, - credibleSetParam, - dataDrivenPriorWeightsCutoff, - verbose, - fitRetention -) { - new( - "FmJointPipeline", - config = list( - credibleSetParam = credibleSetParam, - dataDrivenPriorWeightsCutoff = dataDrivenPriorWeightsCutoff, - verbose = verbose, - fitRetention = fitRetention, - crossValidationArgs = .cvResolve(CrossValidationParam()), - ldSketch = ldSketch(data) - ) - ) -} - .fmDispatchJointSpecsQtlSumStats <- function( parsedJointSpec, - data, - methods, - contexts, - traitIds, - verbose, - methodArgs = list(), - mrmashPrior = NULL, - dataDrivenPriorWeightsCutoff = 1e-10, - fineMappingResult = NULL, - panelFilterParam = PanelFilterParam(), - credibleSetParam, - fitRetention + tokens, + methodArgs, + cfg ) { - # Engine routing (jointEngine.R): the dispatch table + .runJointCell replace - # the per-axis switch + the cross-context/trait/study/composed leaf - # dispatchers. - pipeline <- .fmSumStatsPipeline( - data = data, - credibleSetParam = credibleSetParam, - dataDrivenPriorWeightsCutoff = dataDrivenPriorWeightsCutoff, - verbose = verbose, - fitRetention = fitRetention - ) .runJointSpecs( parsedJointSpec, - data, + cfg$data, dataForm = "sumstats", - pipeline = pipeline, - jointMethods = intersect(methods, c("mvsusie", "fsusie")), - contexts = contexts, - traitIds = traitIds, + pipeline = .fmJointPipeline( + cfg, + .cvResolve(CrossValidationParam()), + ldReference(cfg$data) + ), + jointMethods = intersect(tokens, c("mvsusie", "fsusie")), + contexts = cfg$contexts, + traitIds = cfg$traitId, args = list( - mrmashPrior = mrmashPrior, - dataDrivenPriorWeightsCutoff = dataDrivenPriorWeightsCutoff, + mrmashPrior = cfg$mrmashPrior, + dataDrivenPriorWeightsCutoff = cfg$dataDrivenPriorWeightsCutoff, methodArgs = methodArgs, - verbose = verbose, - cache = fineMappingResult, - cutoffs = .panelCutoffs(panelFilterParam) + verbose = cfg$verbose, + cache = cfg$fineMappingResult, + cutoffs = .panelCutoffs( + cfg$panelFilterParam %||% PanelFilterParam() + ) ) ) } - -# Top-level joint dispatcher for fineMappingPipeline(MultiStudyQtlDataset). -# Routes per-component AND per-axis: a spec with `axes = "study"` only -# touches the sumStats slot; `axes = "context"` and `axes = "trait"` run -# on every component. +# Joint dispatch for a MultiStudyQtlDataset. Per component AND per axis: a +# spec with a `study` axis only touches the summary statistics, while the +# other specs run on every individual-level component -- each under the same +# settings, with the component's own data (its genotype-filter overrides +# applied, as the per-study recursion applies them) -- and on the summary +# statistics too. `cfg` is the individual-level joint record plus +# `genotypeFilterParam` and `panelFilterParam`, with the collection as data. # @noRd -# --- .fmDispatchJointSpecsMultiStudy helpers -------------------------------- - -# Partition joint specs into those with a `study` axis and the rest. -.fmSplitStudyAxisSpecs <- function(parsedJointSpec) { - hasStudy <- map_lgl(parsedJointSpec, .jsHasStudyAxis) - list( - study = parsedJointSpec[hasStudy], - nonStudy = parsedJointSpec[!hasStudy] - ) -} - -# Note that individual-level studies are excluded from cross-study fits. -.fmMultiStudyWarnExcluded <- function(studyAxisSpecs, qtlDatasets, verbose) { - if ( - length(studyAxisSpecs) > 0L && length(qtlDatasets) > 0L && verbose >= 1 - ) { - qdNames <- str_flatten(names(qtlDatasets), ", ") - msg <- glue( - "jointCrossStudy: excluding individual-level studies ", - "({qdNames}) from cross-study fits (no LD sketch available); ", - "sumstats studies participate." - ) - inform(msg) - } -} - -# Fine-map the non-study-axis specs on each individual-level QtlDataset. -.fmMultiStudyQtlLoop <- function( - nonStudyAxisSpecs, - qtlDatasets, - methods, - contexts, - traitIds, - cisWindow, - credibleSetParam, - verbose, +.fmDispatchJointSpecsMultiStudy <- function( + parsedJointSpec, + tokens, methodArgs, - xRegions, - mrmashPrior, - dataDrivenPriorWeightsCutoff + cfg ) { - if (length(nonStudyAxisSpecs) == 0L) { - return(NULL) + qtlDatasets <- qtlDatasets(cfg$data) + specs <- .fmSplitStudyAxisSpecs(parsedJointSpec) + .fmMultiStudyWarnExcluded(specs$study, qtlDatasets, cfg$verbose) + out <- if (length(specs$nonStudy) == 0L) { + NULL + } else { + .msFoldStudyResults( + map( + qtlDatasets, + .fmStudyJointResult, + specs = specs$nonStudy, + tokens = tokens, + methodArgs = methodArgs, + cfg = cfg + ), + .rbindFineMappingResult + ) } - .msFoldStudyResults( - map( - qtlDatasets, - .fmDispatchForStudy, - nonStudyAxisSpecs = nonStudyAxisSpecs, - methods = methods, - contexts = contexts, - traitIds = traitIds, - cisWindow = cisWindow, - credibleSetParam = credibleSetParam, - verbose = verbose, - methodArgs = methodArgs, - xRegions = xRegions, - mrmashPrior = mrmashPrior, - dataDrivenPriorWeightsCutoff = dataDrivenPriorWeightsCutoff - ), - .rbindFineMappingResult + .fmMultiStudySumStats( + parsedJointSpec, + specs$study, + out, + tokens, + methodArgs, + cfg ) } -# `map()` hands the dataset first; the dispatcher wants the specs first. +# One individual-level component's joint fits: the shared record with the +# component as its data. # @noRd -.fmDispatchForStudy <- function( - qd, - nonStudyAxisSpecs, - methods, - contexts, - traitIds, - cisWindow, - verbose, - methodArgs, - xRegions, - mrmashPrior, - dataDrivenPriorWeightsCutoff, - credibleSetParam -) { - .fmDispatchJointSpecsQtlDataset( - nonStudyAxisSpecs, - qd, - methods = methods, - contexts = contexts, - traitIds = traitIds, - cisWindow = cisWindow, - credibleSetParam = credibleSetParam, - verbose = verbose, - methodArgs = methodArgs, - xRegions = xRegions, - mrmashPrior = mrmashPrior, - dataDrivenPriorWeightsCutoff = dataDrivenPriorWeightsCutoff +.fmStudyJointResult <- function(qd, specs, tokens, methodArgs, cfg) { + studyCfg <- list_assign( + cfg, + data = .qtlApplyFilterOverrides(qd, cfg$genotypeFilterParam) ) + .fmDispatchJointSpecsQtlDataset(specs, tokens, methodArgs, studyCfg) } -# Fine-map all specs on the sumstats collection; rbind onto `out`. +# Fine-map every spec on the summary-statistics component and rbind onto the +# individual-level results `out`. +# @noRd .fmMultiStudySumStats <- function( parsedJointSpec, - sumStats, studyAxisSpecs, out, - methods, - contexts, - traitIds, - verbose, + tokens, methodArgs, - mrmashPrior, - dataDrivenPriorWeightsCutoff, - credibleSetParam + cfg ) { + sumStats <- sumStats(cfg$data) if (is.null(sumStats)) { - if (length(studyAxisSpecs) > 0L && verbose >= 1) { + if (length(studyAxisSpecs) > 0L && cfg$verbose >= 1) { msg <- glue( "jointCrossStudy: no sumStats slot present on this ", "MultiStudyQtlDataset; cross-study specs produce no result." @@ -2229,81 +1793,66 @@ validateMethodsVsJointSpec <- function(methodsParsed, jointSpecParsed) { } ssRes <- .fmDispatchJointSpecsQtlSumStats( parsedJointSpec, - sumStats, - methods = methods, - contexts = contexts, - traitIds = traitIds, - credibleSetParam = credibleSetParam, - verbose = verbose, - methodArgs = methodArgs, - mrmashPrior = mrmashPrior, - dataDrivenPriorWeightsCutoff = dataDrivenPriorWeightsCutoff + tokens, + methodArgs, + list_assign(cfg, data = sumStats) ) if (is.null(ssRes)) { return(out) } - embeddedLd <- ldSketch(ssRes) if (is.null(out)) { - ssRes - } else { - .rbindFineMappingResult(out, ssRes, ldSketch = embeddedLd) + return(ssRes) } + .rbindFineMappingResult(out, ssRes, ldReference = ldReference(ssRes)) } -.fmDispatchJointSpecsMultiStudy <- function( - parsedJointSpec, - data, - methods, - contexts, - traitIds, - cisWindow, - credibleSetParam, - verbose, - methodArgs = list(), - xRegions = list(NULL), - mrmashPrior = NULL, - dataDrivenPriorWeightsCutoff = 1e-10 -) { - qtlDatasets <- qtlDatasets(data) - sumStats <- sumStats(data) - specs <- .fmSplitStudyAxisSpecs(parsedJointSpec) - .fmMultiStudyWarnExcluded(specs$study, qtlDatasets, verbose) - out <- .fmMultiStudyQtlLoop( - specs$nonStudy, - qtlDatasets, - methods = methods, - contexts = contexts, - traitIds = traitIds, - cisWindow = cisWindow, - credibleSetParam = credibleSetParam, - verbose = verbose, - methodArgs = methodArgs, - xRegions = xRegions, - mrmashPrior = mrmashPrior, - dataDrivenPriorWeightsCutoff = dataDrivenPriorWeightsCutoff - ) - .fmMultiStudySumStats( - parsedJointSpec, - sumStats, - specs$study, - out, - methods = methods, - contexts = contexts, - traitIds = traitIds, - verbose = verbose, - methodArgs = methodArgs, - mrmashPrior = mrmashPrior, - dataDrivenPriorWeightsCutoff = dataDrivenPriorWeightsCutoff + +# Merge the per-region joint results by (study, context, trait, method). A +# single block -- cis, or jointRegions = TRUE concatenated -- is returned +# directly rather than merged with itself. +# @noRd +.fmCombineRegionResults <- function(perRegion) { + if (length(perRegion) == 0L) { + return(NULL) + } + if (length(perRegion) == 1L) { + return(perRegion[[1L]]) + } + .fmMergeResultsByKey(perRegion) +} + + +# --- .fmDispatchJointSpecsMultiStudy helpers -------------------------------- + +# Partition joint specs into those with a `study` axis and the rest. +.fmSplitStudyAxisSpecs <- function(parsedJointSpec) { + hasStudy <- map_lgl(parsedJointSpec, .jsHasStudyAxis) + list( + study = parsedJointSpec[hasStudy], + nonStudy = parsedJointSpec[!hasStudy] ) } +# Note that individual-level studies are excluded from cross-study fits. +.fmMultiStudyWarnExcluded <- function(studyAxisSpecs, qtlDatasets, verbose) { + if ( + length(studyAxisSpecs) > 0L && length(qtlDatasets) > 0L && verbose >= 1 + ) { + qdNames <- str_flatten(names(qtlDatasets), ", ") + msg <- glue( + "jointCrossStudy: excluding individual-level studies ", + "({qdNames}) from cross-study fits (no LD reference available); ", + "sumstats studies participate." + ) + inform(msg) + } +} + # ============================================================================= # TWAS-weights dispatchers # ============================================================================= -# Top-level joint dispatcher for twasWeightsPipeline(QtlDataset). -# @noRd # Merge per-region TwasWeights collections (same keys across regions) into one # by concatenating each (study, context, trait, method) row's entry via # .twasMergeRegionEntries (stacked weights + flat per-region cvResult). @@ -2338,243 +1887,151 @@ validateMethodsVsJointSpec <- function(methodsParsed, jointSpecParsed) { exec(TwasWeights, !!!twArgs) } -.twasDispatchJointSpecsQtlDataset <- function( - parsedJointSpec, - data, - methods, - contexts, - traitIds, - cisWindow, - weightsDataType, - verbose, - xRegions = list(NULL), - fitRetention = c("slim", "none", "full"), - seed = NULL -) { - fitRetention <- arg_match(fitRetention) - # Run the joint dispatch once per region block, then merge per - # (study, context, trait, method) across regions. A single block (cis or - # jointRegions=TRUE concatenated) returns its result directly. - allRegions <- map( - xRegions, - .twasDispatchJointSpecRegion, - parsedJointSpec = parsedJointSpec, - data = data, - methods = methods, - contexts = contexts, - traitIds = traitIds, - cisWindow = cisWindow, - weightsDataType = weightsDataType, - verbose = verbose, - fitRetention = fitRetention, - seed = seed - ) - allLabs <- map_chr(xRegions, .twasRegionLabel) - keep <- !map_lgl(allRegions, is.null) - perRegion <- allRegions[keep] - labs <- allLabs[keep] - if (length(perRegion) == 0L) { - return(NULL) - } - if (length(perRegion) == 1L) { - return(perRegion[[1L]]) - } - .twasMergeResultsByKey(perRegion, labs) -} +# ---- TWAS joint dispatch ---------------------------------------------------- +# +# An explicit jointSpecification fits under the same pipeline marker and the +# same engine `args` as the per-tuple multivariate grid (.twasJointSetup() / +# .twasRunJointSpecGrid()), so cross-validation, residualization, +# fitRetention, the per-method options and the mash prior reach an explicit +# joint fit exactly as they reach the rest. The explicit path used to build a +# bare pipeline record of its own -- default cross-validation, no +# fitRetention -- and to hand the engine no residualization and no options. -.twasDispatchJointSpecsQtlDatasetOneRegion <- function( +# Explicit joint specs (mr.mash) on a QtlDataset. +# @noRd +.twasDispatchJointSpecsQtlDataset <- function( parsedJointSpec, - data, - methods, + tokens, + marker, + ctx, contexts, - traitIds, - cisWindow, - weightsDataType, - verbose, - region = NULL, - fitRetention = c("slim", "none", "full"), - seed = NULL + traitIds ) { - fitRetention <- arg_match(fitRetention) - # Engine routing (jointEngine.R); one region block (the caller loops - # regions). .jointRejectStudyOnIndividual(parsedJointSpec) - pipeline <- new( - "TwasJointPipeline", - config = list( - dataType = weightsDataType, - crossValidationArgs = .cvResolve(CrossValidationParam()), - fitFullData = TRUE, - # What the accessor will actually do on this path. No - # residualization bundle reaches the TWAS joint dispatcher, so - # `residualizedGenotypes()` falls back to the dataset's own - # `scaleResiduals` slot -- which is therefore the honest answer - # here, and `NULL` says that explicitly rather than by omission. - standardized = .qtlScaleResiduals(data, NULL), - seed = seed, - ldSketch = NULL - ) - ) - .runJointSpecs( + .twasRunJointSpecGrid( parsedJointSpec, - data, - dataForm = "individual", - pipeline = pipeline, - jointMethods = intersect(methods, "mrmash"), - contexts = contexts, - traitIds = traitIds, - args = list( - methodArgs = list(), - cisWindow = cisWindow, - region = region, - verbose = verbose - ) + intersect(tokens, "mrmash"), + contexts, + traitIds, + marker, + ctx ) } - -# Top-level joint dispatcher for twasWeightsPipeline(QtlSumStats). +# Explicit joint specs (mr.mash RSS) on a QtlSumStats collection. `cfg` is +# the summary-statistics joint record, or a MultiStudy record with the +# collection as its data; `methodArgs` are the summary-statistics path's +# per-method options. # @noRd .twasDispatchJointSpecsQtlSumStats <- function( parsedJointSpec, - data, - methods, - contexts, - traitIds, - weightsDataType, - verbose, - fitRetention = c("slim", "none", "full"), - panelFilterParam = PanelFilterParam() + tokens, + methodArgs, + cfg ) { - fitRetention <- arg_match(fitRetention) - # Engine routing (jointEngine.R). pipeline <- new( "TwasJointPipeline", config = list( - dataType = weightsDataType, - crossValidationArgs = .cvResolve(CrossValidationParam()), - fitFullData = TRUE, + dataType = cfg$weightsDataType, + crossValidationParam = .cvResolve(CrossValidationParam()), + fitRetention = cfg$fitRetention, standardized = TRUE, - ldSketch = ldSketch(data) + verbose = cfg$verbose, + seed = cfg$seed, + ldReference = ldReference(cfg$data) ) ) .runJointSpecs( parsedJointSpec, - data, + cfg$data, dataForm = "sumstats", pipeline = pipeline, - jointMethods = intersect(methods, "mrmash"), - contexts = contexts, - traitIds = traitIds, + jointMethods = intersect(tokens, "mrmash"), + contexts = cfg$contexts, + traitIds = cfg$traitId, args = list( - methodArgs = list(), - verbose = verbose, - cutoffs = .panelCutoffs(panelFilterParam) + methodArgs = methodArgs, + verbose = cfg$verbose, + cutoffs = .panelCutoffs( + cfg$panelFilterParam %||% PanelFilterParam() + ) ) ) } - -# Top-level joint dispatcher for twasWeightsPipeline(MultiStudyQtlDataset). +# Joint dispatch for a MultiStudyQtlDataset. Non-study specs run on every +# individual-level component, each fitting under the setup its own QtlDataset +# run would use (.twasJointSetup() on the component, its genotype-filter +# overrides applied); every spec runs on the summary-statistics component. +# `cfg` is .twasJointCfg()'s record plus the collection, `genotypeFilterParam` +# and `panelFilterParam`; `methods` is the translated methods record. # @noRd -# --- .twasDispatchJointSpecsMultiStudy helpers ------------------------------ - -# Note that individual-level studies are excluded from cross-study TWAS fits. -.twasMultiStudyWarnExcluded <- function(studyAxisSpecs, qtlDatasets, verbose) { - if ( - length(studyAxisSpecs) > 0L && length(qtlDatasets) > 0L && verbose >= 1 - ) { - qdNames <- str_flatten(names(qtlDatasets), ", ") - msg <- glue( - "jointCrossStudy (twas): excluding individual-level ", - "studies ({qdNames}) from cross-study fits; sumstats studies ", - "participate." - ) - inform(msg) - } -} - -# Learn weights for the non-study-axis specs on each individual-level dataset. -.twasMultiStudyQtlLoop <- function( - nonStudyAxisSpecs, - qtlDatasets, +.twasDispatchJointSpecsMultiStudy <- function( + parsedJointSpec, + tokens, methods, - contexts, - traitIds, - cisWindow, - weightsDataType, - verbose, - xRegions, - fitRetention, - seed + cfg ) { - if (length(nonStudyAxisSpecs) == 0L) { - return(NULL) + qtlDatasets <- qtlDatasets(cfg$data) + specs <- .fmSplitStudyAxisSpecs(parsedJointSpec) + .twasMultiStudyWarnExcluded(specs$study, qtlDatasets, cfg$verbose) + out <- if (length(specs$nonStudy) == 0L) { + NULL + } else { + .msFoldStudyResults( + map( + qtlDatasets, + .twasStudyJointResult, + specs = specs$nonStudy, + tokens = tokens, + methods = methods, + cfg = cfg + ), + .rbindTwasWeights + ) } - .msFoldStudyResults( - map( - qtlDatasets, - .twasDispatchForStudy, - nonStudyAxisSpecs = nonStudyAxisSpecs, - methods = methods, - contexts = contexts, - traitIds = traitIds, - cisWindow = cisWindow, - weightsDataType = weightsDataType, - verbose = verbose, - xRegions = xRegions, - fitRetention = fitRetention, - seed = seed - ), - .rbindTwasWeights + .twasMultiStudySumStats( + parsedJointSpec, + specs$study, + out, + tokens, + methods, + cfg ) } -# `map()` hands the dataset first; the dispatcher wants the specs first. +# One individual-level component's joint fits. # @noRd -.twasDispatchForStudy <- function( - qd, - nonStudyAxisSpecs, - methods, - contexts, - traitIds, - cisWindow, - weightsDataType, - verbose, - xRegions, - fitRetention, - seed -) { +.twasStudyJointResult <- function(qd, specs, tokens, methods, cfg) { + setup <- .twasJointSetup( + .qtlApplyFilterOverrides(qd, cfg$genotypeFilterParam), + .twasNormalizeMethods(methods), + cfg + ) .twasDispatchJointSpecsQtlDataset( - nonStudyAxisSpecs, - qd, - methods = methods, - contexts = contexts, - traitIds = traitIds, - cisWindow = cisWindow, - weightsDataType = weightsDataType, - verbose = verbose, - xRegions = xRegions, - fitRetention = fitRetention, - seed = seed + specs, + tokens, + setup$marker, + setup$ctx, + cfg$contexts, + cfg$traitId ) } -# Learn weights for all specs on the sumstats collection; rbind onto `out`. +# Fit every spec on the summary-statistics component and rbind onto the +# individual-level results `out`. +# @noRd .twasMultiStudySumStats <- function( parsedJointSpec, - sumStats, studyAxisSpecs, out, + tokens, methods, - contexts, - traitIds, - weightsDataType, - verbose, - fitRetention + cfg ) { + sumStats <- sumStats(cfg$data) if (is.null(sumStats)) { - if (length(studyAxisSpecs) > 0L && verbose >= 1) { + if (length(studyAxisSpecs) > 0L && cfg$verbose >= 1) { msg <- glue( "jointCrossStudy (twas): no sumStats slot present on this ", "MultiStudyQtlDataset; cross-study specs produce no result." @@ -2585,70 +2042,38 @@ validateMethodsVsJointSpec <- function(methodsParsed, jointSpecParsed) { } ssRes <- .twasDispatchJointSpecsQtlSumStats( parsedJointSpec, - sumStats, - methods = methods, - contexts = contexts, - traitIds = traitIds, - weightsDataType = weightsDataType, - verbose = verbose, - fitRetention = fitRetention + tokens, + .twasSumStatsMethodTokens(methods)$methodArgs, + list_assign(cfg, data = sumStats) ) if (is.null(ssRes)) { return(out) } - embeddedLd <- ldSketch(ssRes) if (is.null(out)) { - ssRes - } else { - .rbindTwasWeights(out, ssRes, ldSketch = embeddedLd) + return(ssRes) } + .rbindTwasWeights(out, ssRes, ldReference = ldReference(ssRes)) } -.twasDispatchJointSpecsMultiStudy <- function( - parsedJointSpec, - data, - methods, - contexts, - traitIds, - cisWindow, - weightsDataType, - verbose, - xRegions = list(NULL), - fitRetention = c("slim", "none", "full"), - seed = NULL -) { - fitRetention <- arg_match(fitRetention) - qtlDatasets <- qtlDatasets(data) - sumStats <- sumStats(data) - specs <- .fmSplitStudyAxisSpecs(parsedJointSpec) - .twasMultiStudyWarnExcluded(specs$study, qtlDatasets, verbose) - out <- .twasMultiStudyQtlLoop( - specs$nonStudy, - qtlDatasets, - methods = methods, - contexts = contexts, - traitIds = traitIds, - cisWindow = cisWindow, - weightsDataType = weightsDataType, - verbose = verbose, - xRegions = xRegions, - fitRetention = fitRetention, - seed = seed - ) - .twasMultiStudySumStats( - parsedJointSpec, - sumStats, - specs$study, - out, - methods = methods, - contexts = contexts, - traitIds = traitIds, - weightsDataType = weightsDataType, - verbose = verbose, - fitRetention = fitRetention - ) + +# --- .twasDispatchJointSpecsMultiStudy helpers ------------------------------ + +# Note that individual-level studies are excluded from cross-study TWAS fits. +.twasMultiStudyWarnExcluded <- function(studyAxisSpecs, qtlDatasets, verbose) { + if ( + length(studyAxisSpecs) > 0L && length(qtlDatasets) > 0L && verbose >= 1 + ) { + qdNames <- str_flatten(names(qtlDatasets), ", ") + msg <- glue( + "jointCrossStudy (twas): excluding individual-level ", + "studies ({qdNames}) from cross-study fits; sumstats studies ", + "participate." + ) + inform(msg) + } } + # ---- map/apply helpers (lambda-free callbacks) --------------------------- # Parse the joint spec at position `i` (element + its index carry to the @@ -2720,77 +2145,3 @@ validateMethodsVsJointSpec <- function(methodsParsed, jointSpecParsed) { .jsHasStudyAxis <- function(s) { is_in("study", s$axes) } - -# One region's FM joint-spec dispatch; `args` bundles the shared call arguments. -# @noRd -.fmDispatchJointSpecRegion <- function( - rg, - parsedJointSpec, - data, - methods, - contexts, - traitIds, - cisWindow, - credibleSetParam, - verbose, - methodArgs, - mrmashPrior, - dataDrivenPriorWeightsCutoff, - crossValidationArgs, - residualizationArgs, - pipCutoffToSkip, - fineMappingResult, - fitRetention, - seed -) { - .fmDispatchJointSpecsQtlDatasetOneRegion( - parsedJointSpec = parsedJointSpec, - data = data, - methods = methods, - contexts = contexts, - traitIds = traitIds, - cisWindow = cisWindow, - credibleSetParam = credibleSetParam, - verbose = verbose, - methodArgs = methodArgs, - mrmashPrior = mrmashPrior, - dataDrivenPriorWeightsCutoff = dataDrivenPriorWeightsCutoff, - crossValidationArgs = crossValidationArgs, - residualizationArgs = residualizationArgs, - pipCutoffToSkip = pipCutoffToSkip, - fineMappingResult = fineMappingResult, - fitRetention = fitRetention, - seed = seed, - region = rg - ) -} - -# One region's TWAS joint-spec dispatch over a QtlDataset. -# @noRd -.twasDispatchJointSpecRegion <- function( - rg, - parsedJointSpec, - data, - methods, - contexts, - traitIds, - cisWindow, - weightsDataType, - verbose, - fitRetention, - seed = NULL -) { - .twasDispatchJointSpecsQtlDatasetOneRegion( - parsedJointSpec, - data, - methods, - contexts, - traitIds, - cisWindow, - weightsDataType, - verbose, - region = rg, - fitRetention = fitRetention, - seed = seed - ) -} diff --git a/R/ld.R b/R/ld.R index 7b2c57f10..6e90a446f 100644 --- a/R/ld.R +++ b/R/ld.R @@ -119,20 +119,8 @@ extractFilePaths <- function(genomicData, intersectionRows, columnToExtract) { ) } -#' Find LD blocks overlapping a query region from a metadata TSV file. -#' -#' @param ldReferenceMetaFile TSV with columns chrom, start, end, path. The path -#' column may be comma-separated: "ld_file,bim_file". -#' @param region "chr:start-end" string or data.frame with chrom/start/end. -#' @param completeCoverageRequired If TRUE, error when the region extends beyond -#' available LD blocks. -#' @return A list with: intersections (LD_file_paths, bimFilePaths), ldMetaData, -#' and parsed region. -#' @importFrom stringr str_split -#' @importFrom dplyr select -#' @importFrom vroom vroom -#' @noRd # Split the comma-joined path column into LD (+ optional bim) path columns. +# @noRd .regionalLdParsePaths <- function(genomicData) { parts <- str_split(genomicData$path, ",", simplify = TRUE) pathNames <- if (ncol(parts) == 2) { @@ -183,6 +171,19 @@ extractFilePaths <- function(genomicData, intersectionRows, columnToExtract) { ) } +#' Find LD blocks overlapping a query region from a metadata TSV file. +#' +#' @param ldReferenceMetaFile TSV with columns chrom, start, end, path. The path +#' column may be comma-separated: "ld_file,bim_file". +#' @param region "chr:start-end" string or data.frame with chrom/start/end. +#' @param completeCoverageRequired If TRUE, error when the region extends beyond +#' available LD blocks. +#' @return A list with: intersections (LD_file_paths, bimFilePaths), ldMetaData, +#' and parsed region. +#' @importFrom stringr str_split +#' @importFrom dplyr select +#' @importFrom vroom vroom +#' @noRd regionalLdMeta <- function( ldReferenceMetaFile, region, @@ -231,658 +232,11 @@ regionalLdMeta <- function( ) } -#' Read a pre-computed LD matrix (.cor.xz) and its bim file, returning a -#' symmetric matrix with variants ordered by position. -#' @importFrom dplyr mutate -#' @importFrom utils read.table -#' @importFrom stats setNames -#' @noRd -# Auto-detect the variant-metadata file (.bim / .pvar / .pvar.zst). -.processLdSnpFile <- function(ldFilePath, snpFilePath) { - if (!is.null(snpFilePath)) { - return(snpFilePath) - } - candidates <- str_c(ldFilePath, c(".bim", ".pvar", ".pvar.zst")) - found <- candidates[file.exists(candidates)] - if (length(found) == 0) { - msg <- glue( - "No variant file found for: {ldFilePath} ", - "(tried .bim, .pvar, .pvar.zst)" - ) - abort(msg) - } - found[1] -} - -# Read + normalise the LD variant metadata (canonical chrom / variant id / GD). -.processLdVariants <- function(snpFilePath) { - raw <- readVariantMetadata(snpFilePath) - isPvar <- !is_in("gpos", names(raw)) - ldVariants <- mutate( - raw, - chrom = canonChrom(.data$chrom), - variants = normalizeVariantId(.data$id) - ) - if (!isPvar) { - return(rename(ldVariants, GD = "gpos")) - } - # A .pvar carries no genetic distance, so GD and pos both take the - # position parsed back out of the variant id. - parsedPos <- map_int(ldVariants$variants, .ldVariantPos) - rename(ldVariants, GD = "pos") |> - mutate(GD = parsedPos, pos = parsedPos) -} - -processLdMatrix <- function(ldFilePath, snpFilePath = NULL) { - ldFileCon <- xzfile(ldFilePath) - ldValues <- scan(ldFileCon, quiet = TRUE) - close(ldFileCon) - snpFilePath <- .processLdSnpFile(ldFilePath, snpFilePath) - rawVariants <- .processLdVariants(snpFilePath) - # Label and symmetrize the matrix. - labelled <- `dimnames<-`( - matrix(ldValues, ncol = sqrt(length(ldValues)), byrow = TRUE), - list(rawVariants$variants, rawVariants$variants) - ) - # Only one triangle is stored on disk; mirror whichever one is empty. - lower <- lower.tri(labelled) - upper <- upper.tri(labelled) - ldMatrix <- if (all(labelled[lower] == 0)) { - replace(labelled, lower, t(labelled)[lower]) - } else { - replace(labelled, upper, t(labelled)[upper]) - } - # Order variants by genomic position. - posOrder <- order(map_int(rawVariants$variants, .ldVariantPos)) - ldVariants <- slice(rawVariants, posOrder) - list( - ldMatrix = ldMatrix[ldVariants$variants, ldVariants$variants], - ldVariants = ldVariants - ) -} - -#' Subset an LD matrix and variant info to a genomic region, optionally further -#' restricted to specific coordinates. -#' @importFrom dplyr mutate select inner_join -#' @noRd -extractLdForRegion <- function(ldMatrix, variants, region, extractCoordinates) { - inRegion <- filter( - variants, - .data$chrom == region$chrom & - .data$pos >= region$start & - .data$pos <= region$end - ) - extracted <- if (is.null(extractCoordinates)) { - inRegion - } else { - .ldRestrictToCoordinates(inRegion, extractCoordinates) - } - mat <- ldMatrix[extracted$variants, extracted$variants, drop = FALSE] - list(extractedLdMatrix = mat, extractedLdVariants = extracted) -} - -# The region's variants restricted to an explicit (chrom, pos) list, keeping -# only the variant-info columns the callers read back. -# @noRd -.ldRestrictToCoordinates <- function(inRegion, extractCoordinates) { - wanted <- extractCoordinates |> - mutate(chrom = canonChrom(.data$chrom)) |> - select("chrom", "pos") - joined <- inRegion |> - mutate(chrom = canonChrom(.data$chrom)) |> - inner_join(wanted, by = c("chrom", "pos")) - keepCols <- intersect( - c( - "chrom", - "variants", - "pos", - "GD", - "A1", - "A2", - "variance", - "allele_freq", - "n_nomiss" - ), - names(joined) - ) - select(joined, all_of(keepCols)) -} - -# Concatenate per-block variant-id lists into one deduplicated vector, dropping -# a repeated boundary variant shared between adjacent blocks. -# @noRd -.ldMergeVariants <- function(variantList) { - # Only the running tail decides whether a block's first id is a repeated - # boundary variant, so the merge is a fold. - reduce(variantList, .ldAppendBlockVariants, .init = character(0)) -} - -# @noRd -.ldAppendBlockVariants <- function(merged, v) { - ids <- if (is.list(v) && !is.null(v$variants)) v$variants else v - if (length(ids) == 0) { - return(merged) - } - repeatsBoundary <- length(merged) > 0 && tail(merged, 1) == ids[1] - c(merged, if (repeatsBoundary) ids[-1] else ids) -} - -#' Combine multiple block-level LD matrices into one, handling boundary -#' overlaps. -#' @importFrom utils tail -#' @noRd -createLdMatrix <- function(ldMatrices, variants) { - allVariants <- .ldMergeVariants(variants) - combined <- matrix( - 0, - nrow = length(allVariants), - ncol = length(allVariants), - dimnames = list(allVariants, allVariants) - ) - - # Deliberate preallocate-and-scatter: `combined` is variants x variants, - # so building it by folding full-size copies would multiply the memory - # this function needs by the number of blocks. - for (i in seq_along(ldMatrices)) { - v <- rownames(ldMatrices[[i]]) - idx <- match(v, allVariants) - combined[idx, idx] <- ldMatrices[[i]] - } - combined -} - -# Dispatch to the genotype- or pre-computed-block LD loader for the source. -.loadLdDispatch <- function( - source, - isGeno, - region, - extractCoordinates, - returnGenotype, - nSample -) { - if (isGeno) { - genoPath <- resolveGenotypePathForRegion(source$metaPath, region) - return(loadLdFromGenotype( - genoPath, - region, - returnGenotype = returnGenotype, - nSample = nSample - )) - } - if (returnGenotype) { - msg <- glue( - "returnGenotype=TRUE requires genotype files, not ", - "pre-computed LD matrices." - ) - abort(msg) - } - loadLdFromBlocks( - source$metaPath, - region, - extractCoordinates, - nSample = nSample - ) -} - -# Drop duplicate variant ids (boundary-overlap safety net). -.loadLdDedup <- function(result) { - variantIds <- variantIds(result) - if (is.null(variantIds)) { - return(result) - } - dupIdx <- which(duplicated(variantIds)) - if (length(dupIdx) == 0) { - return(result) - } - full <- ldMatrix(result) - corr <- if (is.null(full)) { - NULL - } else { - full[-dupIdx, -dupIdx, drop = FALSE] - } - LdData( - correlation = corr, - genotypeHandle = genotypeHandle(result), - snpIdx = snpIdx(result), - variants = variantInfo(result)[-dupIdx], - blockMetadata = blockMetadata(result), - nSamples = ldPanelNSamples(result) - ) -} - -#' Load and Process Linkage Disequilibrium (LD) Matrix -#' -#' Unified entry point for loading LD data from a metadata TSV file. -#' -#' The metadata TSV must have columns: chrom, start, end, path. Two formats: -#' \itemize{ -#' \item Pre-computed LD blocks: many rows per chromosome with block -#' boundaries -#' in start/end and path pointing to .cor.xz files (optionally -#' comma-separated -#' with a .bim path). -#' \item PLINK genotype files: one row per chromosome with start=0, end=0, and -#' path pointing to a per-chromosome PLINK prefix (.pgen/.pvar[.zst]/.psam -#' or -#' .bed/.bim/.fam). LD is computed on the fly via \code{computeLd()}. -#' } -#' -#' @param ldMetaFilePath Path to the LD metadata TSV file. -#' @param region Region of interest: "chr:start-end" string or data.frame with -#' chrom/start/end. -#' @param block Integer block index (or vector of them), for sources that -#' carry no coordinates: an \code{ldInfo} table (the cTWAS \code{LD_map} -#' shape -- an \code{LD_file} column and optionally \code{SNP_file}), a -#' correlation or genotype matrix, or a list of either. Supply exactly one -#' of \code{region} and \code{block}. -#' @param dropMonomorphic Logical. Drop variants with no variation, which -#' carry no LD and make a correlation undefined. Needs allele frequencies, -#' so it applies to genotype sources. -#' @param materializeGenotypes Logical. Read the dosages once and keep them on -#' the returned object, so later access does no file I/O. Costs memory and -#' saves repeated reads. -#' @param maxVariants Integer or \code{NULL}. Randomly thin any block larger -#' than this, to bound memory. -#' @param seed Integer or \code{NULL}. Seeds the \code{maxVariants} draw, -#' offset by the block index so blocks are independent yet reproducible, via -#' a scoped \code{withr::local_seed} that leaves the session RNG alone. -#' @param extractCoordinates Optional data.frame with columns "chrom" and "pos" -#' for specific coordinates extraction (only for pre-computed LD blocks). -#' @param returnGenotype Controls what ldMatrix contains in the return value. -#' FALSE (default): always return correlation matrix R. TRUE: return genotype -#' matrix X (only valid for PLINK sources). "auto": return X for PLINK -#' sources, R for pre-computed sources. -#' @param nSample Optional sample size for computing variance (= -#' 2*p*(1-p)*n/(n-1)). If NULL, ref_panel will not include variance or -#' n_nomiss columns. Only used for PLINK genotype sources. -#' -#' @return A list with: -#' \describe{ -#' \item{ldVariants}{Character vector of variant IDs (canonical format).} -#' \item{ldMatrix}{LD correlation matrix R (or genotype matrix X when -#' returnGenotype is TRUE or "auto" with PLINK source).} -#' \item{ref_panel}{Data.frame with variant metadata (chrom, pos, A2, A1, -#' variant_id, -#' and optionally allele_freq, variance, n_nomiss).} -#' \item{is_genotype}{Logical: TRUE if ldMatrix contains genotype X, FALSE if -#' correlation R.} -#' \item{blockMetadata}{Data.frame with region/block info. For pre-computed -#' LD: one row per block. -#' For PLINK: a single row spanning the loaded region.} -#' } -#' @examples -#' meta <- system.file("extdata", "ld_reference", "ld_meta_file.tsv", -#' package = "pecotmr") -#' loadLdMatrix(ldMetaFilePath = meta, region = "chr22:16000000-18000000") -#' # Several regions at once return one LdData per block. -#' length(loadLdMatrix(meta, region = rep("chr22:16000000-18000000", 2))) -#' @export -loadLdMatrix <- function( - ldMetaFilePath, - region = NULL, - block = NULL, - extractCoordinates = NULL, - returnGenotype = FALSE, - dropMonomorphic = FALSE, - materializeGenotypes = FALSE, - maxVariants = NULL, - seed = NULL, - nSample = NULL -) { - .ldLoadValidateAddress(ldMetaFilePath, region, block) - keys <- if (is.null(region)) block else region - # Only an atomic vector addresses several blocks. `region` also accepts a - # single data.frame / GRanges spec, whose length is its column count -- - # treating that as many keys would map over the columns. - if (is.atomic(keys) && length(keys) > 1L) { - return(map( - keys, - .loadLdOne, - source = ldMetaFilePath, - byRegion = is.null(block), - extractCoordinates = extractCoordinates, - returnGenotype = returnGenotype, - dropMonomorphic = dropMonomorphic, - materializeGenotypes = materializeGenotypes, - maxVariants = maxVariants, - seed = seed, - nSample = nSample - )) - } - .loadLdOne( - keys, - ldMetaFilePath, - byRegion = is.null(block), - extractCoordinates = extractCoordinates, - returnGenotype = returnGenotype, - dropMonomorphic = dropMonomorphic, - materializeGenotypes = materializeGenotypes, - maxVariants = maxVariants, - seed = seed, - nSample = nSample - ) -} - -# A source is addressed either by genomic region (an LD meta file, which -# carries coordinates) or by block index (an `ldInfo` table or in-memory -# matrices, which do not). Exactly one addressing mode applies. -# @noRd -.ldLoadValidateAddress <- function(source, region, block) { - if (is.null(region) && is.null(block)) { - abort("loadLdMatrix: supply either `region` or `block`.") - } - if (!is.null(region) && !is.null(block)) { - abort("loadLdMatrix: supply `region` or `block`, not both.") - } - if (!is.null(region) && !is.character(source)) { - msg <- glue( - "loadLdMatrix: `region` addresses an LD meta file, but ", - "`ldMetaFilePath` is a {class(source)[[1L]]}. Coordinate-free ", - "sources (an `ldInfo` table, a matrix, or a list of matrices) ", - "are addressed with `block`." - ) - abort(msg) - } - invisible(TRUE) -} - -# One block, whatever the source. Everything that is not an LD meta file is -# coordinate-free and indexed by `block`. -# @noRd -.loadLdOne <- function( - key, - source, - byRegion, - extractCoordinates, - returnGenotype, - dropMonomorphic, - materializeGenotypes, - maxVariants, - seed, - nSample -) { - loaded <- if (byRegion) { - .loadLdFromMeta( - source, - key, - extractCoordinates, - returnGenotype, - nSample - ) - } else { - .loadLdFromIndexed(source, key) - } - loaded |> - .loadLdDedup() |> - .ldApplyMonomorphic(dropMonomorphic) |> - .ldApplySubsample(maxVariants, seed, key) |> - .ldApplyMaterialize(materializeGenotypes) -} - -# Coordinate-free sources, addressed by block index: an `ldInfo` table (the -# cTWAS LD_map shape -- LD_file plus optional SNP_file, no coordinates), a -# single in-memory matrix, or a list of them. Every source returns an LdData, -# so callers never have to branch on what they loaded from. -# @noRd -.loadLdFromIndexed <- function(source, block) { - if (is.data.frame(source)) { - return(.ldInfoBlock(source, block)) - } - mat <- if (is.list(source)) source[[block]] else source - if (!is.matrix(mat)) { - msg <- glue( - "loadLdMatrix: cannot address a {class(source)[[1L]]} by block. ", - "Supply an LD meta file path, an `ldInfo` data.frame, a matrix, ", - "or a list of matrices." - ) - abort(msg) - } - .ldDataFromMatrix(mat, isGenotype = nrow(mat) > ncol(mat)) -} - -# One row of an `ldInfo` table. Genotype paths are read and correlated; -# pre-computed .cor.xz blocks are read directly. -# @noRd -.ldInfoBlock <- function(ldInfo, block) { - if (!is_in("LD_file", colnames(ldInfo))) { - abort("loadLdMatrix: an `ldInfo` table needs an `LD_file` column.") - } - ldPath <- as.character(ldInfo$LD_file)[block] - if (isGenotypeSource(ldPath)) { - geno <- loadGenotypeRegion(ldPath) - return(.ldDataFromMatrix(geno, isGenotype = TRUE)) - } - snpFile <- if (is_in("SNP_file", colnames(ldInfo))) { - as.character(ldInfo$SNP_file)[block] - } else { - NULL # processLdMatrix auto-detects the .bim / .pvar companion - } - .ldDataFromProcessed(processLdMatrix(ldPath, snpFile)) -} - -# Wrap processLdMatrix()'s (matrix, variants) pair as an LdData so BOTH -# `ldInfo` sources return one type -- the contract .loadLdFromIndexed states -# and the post-load chain (dedup / monomorphic / subsample) relies on. -# -# Not .ldDataFromMatrix(): that one is for a bare matrix with no metadata and -# substitutes placeholder chrNA:1..n coordinates. A precomputed LD block comes -# with its .bim/.pvar, so the real chrom/pos/alleles are carried through. -# @noRd -.ldDataFromProcessed <- function(proc) { - v <- proc$ldVariants - n <- nrow(v) - gr <- .refPanelToGranges(data.frame( - chrom = as.character(v$chrom), - pos = as.integer(v$pos), - variant_id = as.character(v$variants), - A1 = as.character(v$A1), - A2 = as.character(v$A2), - stringsAsFactors = FALSE - )) - LdData( - correlation = proc$ldMatrix, - variants = gr, - blockMetadata = tibble( - blockId = 1L, - size = n, - startIdx = 1L, - endIdx = n - ), - nSamples = 0L - ) -} - -# Wrap a bare matrix as an LdData so every source returns one type. Variant -# identity comes from the dimnames when present. -# @noRd -.ldDataFromMatrix <- function(mat, isGenotype) { - n <- if (isGenotype) ncol(mat) else nrow(mat) - named <- if (isGenotype) colnames(mat) else rownames(mat) - ids <- named %||% str_c("v", seq_len(n)) - gr <- S4Vectors::`mcols<-`( - GRanges( - seqnames = rep("chrNA", n), - ranges = IRanges::IRanges(start = seq_len(n), width = 1L) - ), - value = S4Vectors::DataFrame(variant_id = ids) - ) - LdData( - correlation = if (isGenotype) NULL else mat, - genotypeHandle = if (isGenotype) mat else NULL, - variants = gr, - blockMetadata = tibble(blockId = 1L, size = n), - nSamples = if (isGenotype) nrow(mat) else 0L - ) -} - -# Drop variants with no variation. They carry no LD, and a zero-variance -# column makes a correlation undefined. -# @noRd -.ldApplyMonomorphic <- function(ld, dropMonomorphic) { - if (!isTRUE(dropMonomorphic)) { - return(ld) - } - refPanel <- refPanel(ld) - if (is.null(refPanel) || !is_in("allele_freq", colnames(refPanel))) { - return(ld) - } - p <- refPanel$allele_freq - keep <- !is.na(p) & p > 0 & p < 1 - if (all(keep)) { - return(ld) - } - .ldSubsetData(ld, which(keep)) -} - -# Randomly thin an oversized block, seeded per block so a run is reproducible -# without disturbing the session RNG. -# @noRd -.ldApplySubsample <- function(ld, maxVariants, seed, key) { - if (is.null(maxVariants) || length(ld) <= maxVariants) { - return(ld) - } - if (!is.null(seed)) { - offset <- if (is.numeric(key)) as.integer(key) else 0L - withr::local_seed(as.integer(seed) + offset) - } - .ldSubsetData(ld, sort(sample(length(ld), maxVariants))) -} - -# Read the dosages once and keep them on the object, so later access does no -# file I/O. -# @noRd -.ldApplyMaterialize <- function(ld, materializeGenotypes) { - if (!isTRUE(materializeGenotypes) || !hasGenotypes(ld)) { - return(ld) - } - X <- genotypes(ld) - if (!is.matrix(X)) { - return(ld) - } - LdData( - correlation = NULL, - genotypeHandle = X, - snpIdx = NULL, - variants = variantInfo(ld), - blockMetadata = blockMetadata(ld), - nSamples = ldPanelNSamples(ld) - ) -} - -# Narrow an LdData to a subset of its variants, keeping correlation and -# genotypes consistent with the ranges. -# @noRd -.ldSubsetData <- function(ld, idx) { - full <- ld@correlation - R <- if (!is.null(full) && is.matrix(full)) { - full[idx, idx, drop = FALSE] - } else { - full - } - raw <- ld@genotypeHandle - gh <- if (is.matrix(raw)) raw[, idx, drop = FALSE] else raw - snpIdx <- if (is.matrix(raw) || is.null(ld@snpIdx)) { - ld@snpIdx - } else { - ld@snpIdx[idx] - } - LdData( - correlation = R, - genotypeHandle = gh, - snpIdx = if (is.matrix(gh)) NULL else snpIdx, - variants = variantInfo(ld)[idx], - blockMetadata = blockMetadata(ld), - nSamples = ldPanelNSamples(ld) - ) -} - -# @noRd -.loadLdFromMeta <- function( - ldMetaFilePath, - region, - extractCoordinates, - returnGenotype, - nSample -) { - source <- resolveLdSource(ldMetaFilePath) - isGeno <- is_in(source$type, c("plink2", "plink1", "vcf", "gds")) - # "auto": return X for genotype sources, R for pre-computed. - if (identical(returnGenotype, "auto")) { - returnGenotype <- isGeno - } - .loadLdDispatch( - source, - isGeno, - region, - extractCoordinates, - returnGenotype, - nSample - ) -} - # ---------- Internal: resolve LD source type ---------- -#' @noRd -hasPlink2Files <- function(prefix) { - file.exists(str_c(prefix, ".pgen")) && - (file.exists(str_c(prefix, ".pvar")) || - file.exists(str_c(prefix, ".pvar.zst"))) && - file.exists(str_c(prefix, ".psam")) -} - -#' @noRd -hasPlink1Files <- function(prefix) { - file.exists(str_c(prefix, ".bed")) && - file.exists(str_c(prefix, ".bim")) && - file.exists(str_c(prefix, ".fam")) -} - -#' @noRd -isVcfPath <- function(path) { - str_detect(path, "\\.(vcf|vcf\\.gz|bcf)$") && file.exists(path) -} - -#' @noRd -isGdsPath <- function(path) { - str_detect(path, "\\.gds$") && file.exists(path) -} - -#' Check whether a path points to a genotype source (PLINK, VCF, or GDS). -#' @noRd -isGenotypeSource <- function(path) { - hasPlink2Files(path) || - hasPlink1Files(path) || - isVcfPath(path) || - isGdsPath(path) -} - -#' Resolve an LD source metadata TSV to its actual data type. -#' -#' The metadata TSV has columns: chrom, start, end, path. Three categories are -#' supported: -#' \itemize{ -#' \item Pre-computed LD blocks (.cor.xz): many rows per chromosome, each with -#' specific start/end block boundaries and path pointing to .cor.xz files. -#' \item Genotype files (PLINK2, PLINK1, VCF, or GDS): one row per chromosome -#' with start=0, end=0, and path pointing to a per-chromosome genotype file -#' or prefix. The actual region filter is applied by the genotype loader. -#' } -#' -#' This function peeks at the first row to determine the data type. The actual -#' per-chromosome path is resolved later by -#' \code{resolveGenotypePathForRegion()} at load time. -#' -#' @param path Path to a metadata TSV file with columns chrom, start, end, path. -#' @return A list with: -#' \item{type}{"plink2", "plink1", "vcf", "gds", or "precomputed"} -#' \item{dataPath}{Genotype path from first row (for type detection only; -#' actual -#' per-chromosome path is resolved at load time)} -#' \item{metaPath}{The metadata TSV path (always set)} -#' @importFrom vroom vroom -#' @noRd # Read + validate the first row of an LD metadata TSV (>=4 columns). #' @importFrom checkmate checkFileExists +# @noRd .resolveLdReadMeta <- function(path) { res <- checkFileExists(path, access = "r") if (!isTRUE(res)) { @@ -907,24 +261,53 @@ isGenotypeSource <- function(path) { ) } -# Genotype source descriptor for the resolved path, or NULL if pre-computed. +# Genotype source descriptor for the resolved path, or NULL when it is not a +# genotype file or PLINK prefix, its format told as readGenotypes() tells it. +# A PLINK source is described by its stem, which its readers take. .resolveLdGenotypeType <- function(resolved, path) { - if (hasPlink2Files(resolved)) { - return(list(type = "plink2", dataPath = resolved, metaPath = path)) - } - if (hasPlink1Files(resolved)) { - return(list(type = "plink1", dataPath = resolved, metaPath = path)) - } - if (isVcfPath(resolved)) { - return(list(type = "vcf", dataPath = resolved, metaPath = path)) + format <- .genotypePathFormat(resolved) + if (is.null(format)) { + return(NULL) } - if (isGdsPath(resolved)) { - return(list(type = "gds", dataPath = resolved, metaPath = path)) + dataPath <- if (str_starts(format, "plink")) { + .genotypeStem(resolved) + } else { + resolved } - NULL + list(type = format, dataPath = dataPath, metaPath = path) } +#' Resolve an LD source metadata TSV to its genotype file type. +#' +#' The metadata TSV has columns: chrom, start, end, path, with one row per +#' chromosome (start=0, end=0) whose path is a per-chromosome genotype file or +#' prefix (PLINK2, PLINK1, VCF, GDS or BGEN). The actual region filter is +#' applied by the genotype loader. pecotmr does not read pre-computed LD from +#' disk, so a row pointing at anything else is an error. +#' +#' This function peeks at the first row to determine the data type. The actual +#' per-chromosome path is resolved later by +#' \code{resolveGenotypePathForRegion()} at load time. +#' +#' A path that is itself a genotype file or PLINK prefix is that source, with +#' no metadata. +#' +#' @param path Path to a metadata TSV file with columns chrom, start, end, +#' path, or to a genotype file or PLINK prefix. +#' @return A list with: +#' \item{type}{"plink2", "plink1", "vcf", "gds" or "bgen"} +#' \item{dataPath}{Genotype path from first row (for type detection only; +#' actual +#' per-chromosome path is resolved at load time)} +#' \item{metaPath}{The metadata TSV path, or NULL for a genotype source +#' given directly} +#' @importFrom vroom vroom +#' @noRd resolveLdSource <- function(path) { + direct <- .resolveLdGenotypeType(path, NULL) + if (!is.null(direct)) { + return(direct) + } meta <- .resolveLdReadMeta(path) # Strip the comma-separated bim path, then resolve relative to the meta dir. rawPath <- str_remove(meta$path[1], ",.*$") @@ -933,22 +316,17 @@ resolveLdSource <- function(path) { if (!is.null(genoType)) { return(genoType) } - if ( - !is.na(meta$start) && - !is.na(meta$end) && - meta$start == 0 && - meta$end == 0 - ) { - msg <- glue( - "Metadata has start=0, end=0 but path does not resolve to ", - "genotype files: {resolved}", - "\n The 0:0 sentinel is only valid for whole-chromosome ", - "genotype files.", - .trim = FALSE + abort(c( + glue( + "The LD metadata's path does not resolve to genotype files: ", + "{resolved}" + ), + i = str_c( + "pecotmr reads LD only from genotypes (PLINK2, PLINK1, VCF, GDS, ", + "BGEN); ", + "wrap a pre-computed LD matrix in an LdMatrix instead." ) - abort(msg) - } - list(type = "precomputed", metaPath = path) + )) } #' Resolve the correct genotype path for a given region from a metadata TSV. @@ -975,220 +353,181 @@ resolveGenotypePathForRegion <- function(metaPath, region) { file.path(dirname(metaPath), rawPath) } -# ---------- Internal: load LD from genotype files ---------- - -#' Load genotype data and compute LD or return genotype matrix. -#' @noRd -# --- loadLdFromGenotype helpers --------------------------------------------- - -# Reference panel from variant ids + allele frequency (.afreq or dosage-derived) -# + variance when a sample size is supplied. -.loadLdGtRefPanel <- function( - X, - variantInfo, - variantIds, - genotypePath, - nSample -) { - afreq <- readAfreq(genotypePath) - alleleFreq <- if (is.null(afreq)) { - colMeans(X, na.rm = TRUE) / 2 - } else { - freqMatch <- match(variantInfo$id, afreq$id) - nUnmatched <- sum(is.na(freqMatch)) - if (nUnmatched > 0) { - nFreq <- length(freqMatch) - msg <- glue( - "{nUnmatched} out of {nFreq} variants have no allele ", - "frequency in .afreq file." - ) - warn(msg) - } - afreq$alt_freq[freqMatch] +# ---------- LD reference: what it is and how it is held ---------- +# +# An LD reference is one of these, and every helper below answers for each: +# +# a genotype panel a RangedSummarizedExperiment over a GenotypeHandle, +# read lazily from disk -- the same shape as QtlDataset's +# genotype experiment. A bare GenotypeHandle, which objects +# serialised before the slot became an RSE still carry, is +# treated as one. +# a GenotypeMixture several genotype panels whose LD is averaged, still +# lazy: each panel is read only for the variants asked +# about, and answers for its own samples. +# an LdMatrix a correlation matrix the caller built, held in memory. + +# Normalise an LD-reference input to the shape the slot holds: a panel or an +# LdMatrix as given, a bare GenotypeHandle wrapped into a panel -- so a sketch +# and QtlDataset's genotype experiment end up being the same object with +# different provenance rather than two spellings of one idea. +# @noRd +.asLdRef <- function(x) { + if (is.null(x) || .ldIsMatrixRef(x) || .ldIsMixtureRef(x)) { + return(x) } - mutate( - parseVariantId(variantIds), - variant_id = variantIds, - allele_freq = alleleFreq, - !!!.ldPanelSampleCols(alleleFreq, nSample) - ) + if (methods::is(x, "RangedSummarizedExperiment")) { + return(x) + } + if (methods::is(x, "GenotypeHandle")) { + return(.genotypeExperiment(x)) + } + abort(glue( + "`ldReference` must be a genotype panel (see readGenotypes()), a ", + "GenotypeMixture or an LdMatrix (got {class(x)[[1L]]})." + )) } -# The panel's per-variant variance / non-missing count, which are only -# derivable once the caller declares the sample size behind the frequencies. +# TRUE for an LD reference held as a matrix rather than as genotypes. # @noRd -.ldPanelSampleCols <- function(p, nSample) { - if (is.null(nSample)) { - return(list()) - } - list( - variance = 2 * p * (1 - p) * nSample / (nSample - 1), - n_nomiss = nSample - ) +.ldIsMatrixRef <- function(x) { + methods::is(x, "LdMatrix") } -# Single-block metadata spanning the loaded region. -.loadLdGtBlockMeta <- function(variantInfo, variantIds) { - positions <- variantInfo$pos - tibble( - blockId = 1L, - chrom = as.character(variantInfo$chrom[1]), - blockStart = min(positions), - blockEnd = max(positions), - size = length(variantIds), - startIdx = 1L, - endIdx = length(variantIds) - ) +# TRUE for a mixture of genotype panels. +# @noRd +.ldIsMixtureRef <- function(x) { + methods::is(x, "GenotypeMixture") } -# Lazy-genotype LdData result (handle + region snp index, no correlation). -.loadLdGtGenotypeResult <- function( - genotypePath, - region, - variantsGr, - blockMetadata, - X -) { - handle <- .readGenotypeHandle(genotypePath) - snpIdx <- .regionToSnpIdx(snpInfo(handle), region) - LdData( - correlation = NULL, - genotypeHandle = handle, - snpIdx = snpIdx, - variants = variantsGr, - blockMetadata = blockMetadata, - nSamples = as.integer(nrow(X)) - ) +# TRUE for an LD reference backed by genotypes: a panel or a mixture of them. +# @noRd +.ldIsGenotypeRef <- function(x) { + .ldIsPanel(x) || .ldIsMixtureRef(x) } -loadLdFromGenotype <- function( - genotypePath, - region, - returnGenotype = FALSE, - nSample = NULL -) { - result <- loadGenotypeRegion( - genotypePath, - region = region, - returnVariantInfo = TRUE - ) - variantInfo <- result$variant_info - variantIds <- normalizeVariantId(formatVariantId( - variantInfo$chrom, - variantInfo$pos, - variantInfo$A2, - variantInfo$A1 - )) - X <- `colnames<-`(result$X, variantIds) - refPanel <- .loadLdGtRefPanel( - X, - variantInfo, - variantIds, - genotypePath, - nSample - ) - blockMetadata <- .loadLdGtBlockMeta(variantInfo, variantIds) - variantsGr <- .refPanelToGranges(refPanel) - if (returnGenotype) { - return(.loadLdGtGenotypeResult( - genotypePath, - region, - variantsGr, - blockMetadata, - X - )) - } - R <- computeLd(X, method = "sample") - LdData( - correlation = R, - genotypeHandle = NULL, - snpIdx = NULL, - variants = variantsGr, - blockMetadata = blockMetadata, - nSamples = as.integer(nrow(X)) - ) +# TRUE for anything that can serve as an LD reference. +# @noRd +.ldIsReference <- function(x) { + .ldIsGenotypeRef(x) || .ldIsMatrixRef(x) } -# ---------- LD sketch: per-variant LD matrix ---------- - -# Internal: build a sample-correlation LD matrix for a specified variant -# subset of an `ldSketch` `GenotypeHandle`. Called directly by -# twasWeightsPipeline, fineMappingPipeline, jointEngine, -# causalInferencePipeline, colocboostPipeline and the coloc / summaryStatsQc -# paths, which differ only in their error message prefix and in whether -# variants absent from the panel raise an error or get silently dropped -- -# both of which are arguments here rather than a per-pipeline wrapper. -# -# Arguments: -# ldSketch A GenotypeHandle. -# variantIds Character vector of SNP IDs to extract. -# label Error-message prefix, e.g. "twasWeightsPipeline". -# onMissing "error" (default) -> any unmatched id stops the call; -# "drop" -> unmatched ids are silently filtered. -# When "drop" leaves no surviving variants the function -# returns NULL. -# -# Returns: -# A `length(variantIds) x length(variantIds)` symmetric LD matrix with -# rows/cols named by the (possibly filtered) `variantIds`. -# With `onMissing = "drop"` the returned matrix carries an attribute -# `"keptVariantIds"` so callers can recover which ids survived. -# Require a non-NULL GenotypeHandle ldSketch. -# Normalise an LD-sketch input to the RangedSummarizedExperiment the slot -# holds. Accepts a bare GenotypeHandle, which is what every caller has passed -# until now, and wraps it -- so a sketch and QtlDataset's genotype experiment -# end up being the same object with different provenance rather than two -# spellings of one idea. -# @noRd -.asLdSketch <- function(x) { - if (is.null(x)) { +# The GenotypeHandle a panel reads through, or NULL when it reads through +# none: an LdMatrix, a mixture, or a panel whose dosages come from another +# backend (a VCF, GDS or PLINK1 seed, or a matrix held in memory). The handle +# is the DelayedArray seed of the dosage assay, so it stays reachable after +# the panel is subset. Tolerates a bare handle, which is what objects +# serialised before the slot became an RSE still carry. +# @noRd +.ldRefHandle <- function(x) { + if (is.null(x) || .ldIsMatrixRef(x) || .ldIsMixtureRef(x)) { return(NULL) } - if (methods::is(x, "RangedSummarizedExperiment")) { + if (methods::is(x, "GenotypeHandle")) { return(x) } - if (methods::is(x, "GenotypeHandle")) { - return(.genotypeExperiment(x)) + seed <- .panelSeed(x) + if (!methods::is(seed, "GhSeed")) { + return(NULL) } - abort(glue( - "`ldSketch` must be a genotype panel -- a ", - "RangedSummarizedExperiment or a GenotypeHandle (got ", - "{class(x)[[1L]]})." - )) + .ghSeedHandle(seed) } -# The GenotypeHandle a sketch reads through. The handle is the DelayedArray -# seed of the dosage assay, so it stays reachable after the sketch is subset. -# Tolerates a bare handle, which is what objects serialised before the slot -# became an RSE still carry. +# The DelayedArray seed under a panel's dosage assay -- a GhSeed, or a +# GenotypeDosageSeed for a VCF, GDS or PLINK1 panel -- or NULL for an assay +# held in memory or combined from several seeds (a per-chromosome set of +# those). # @noRd -.ldSketchHandle <- function(x) { - if (is.null(x)) { +#' @importFrom rlang try_fetch +.panelSeed <- function(panel) { + dosage <- SummarizedExperiment::assay( + panel, + "dosage", + withDimnames = FALSE + ) + if (!methods::is(dosage, "DelayedArray")) { return(NULL) } - if (methods::is(x, "GenotypeHandle")) { - return(x) - } - .ghSeedHandle( - DelayedArray::seed(SummarizedExperiment::assay(x, "dosage")) + try_fetch(DelayedArray::seed(dosage), error = function(cnd) NULL) +} + +# ---------- LD reference: where its genotypes come from ---------- +# +# A panel records when it is built where its genotypes come from -- +# list(format, path, chromPaths) -- as metadata(panel)$genotypeSource. What +# needs the file reads it there: a sketch's .afreq sidecar, a label, ctwas's +# check that the payload exists, a per-chromosome manifest's shards. So a +# panel need not read through a GenotypeHandle: a VCF, GDS or PLINK1 panel +# reads through its own backend, and any RSE with a dosage assay can serve. + +# The record of a handle's genotype source. +# @noRd +.genotypeSourceRecord <- function(handle) { + list( + format = genotypeFormat(handle), + path = path(handle), + chromPaths = .genotypeChromPaths(handle) ) } -# Narrow a sketch to a variant subset. On an RSE this is ordinary subsetting, -# which brings the DelayedArray's index bookkeeping with it; a legacy bare -# handle falls back to the handle-level trim, which needs fileIdx to stay -# read-safe. +# An LD reference's genotype source: the record its panel carries -- or, for +# a panel built before panels carried one and for a bare handle, its +# handle's -- or NULL for a panel held in memory, an LdMatrix or a mixture. +# @noRd +.ldRefSource <- function(x) { + if (is.null(x) || .ldIsMatrixRef(x) || .ldIsMixtureRef(x)) { + return(NULL) + } + if (methods::is(x, "RangedSummarizedExperiment")) { + recorded <- S4Vectors::metadata(x)$genotypeSource + if (!is.null(recorded)) { + return(recorded) + } + } + handle <- .ldRefHandle(x) + if (is.null(handle)) NULL else .genotypeSourceRecord(handle) +} + +# @noRd +.ldRefFormat <- function(x) { + .ldRefSource(x)$format +} + +# The file an LD reference reads, resolved to a real path (a bundled +# example's portable reference resolves under the installed package), or +# NULL when it reads none. +# @noRd +.ldRefReadPath <- function(x) { + p <- .ldRefSource(x)$path + if (is.null(p)) NULL else .resolveGenotypeResourcePath(p) +} + +# The per-chromosome files of a panel read from a manifest, named by +# chromosome; empty for a panel read from one file. +# @noRd +.ldRefChromPaths <- function(x) { + .ldRefSource(x)$chromPaths %||% character(0) +} + +# Narrow an LD reference to a variant subset. A panel is cut so that, where it +# can, its seed sheds the dropped variants too (.panelSubsetRows()); an +# LdMatrix subsets its matrix along with its variants; a legacy bare handle +# falls back to the handle-level trim, which needs fileIdx to stay read-safe. # @noRd -.ldSketchSubset <- function(x, keep) { +.ldRefSubset <- function(x, keep) { if (is.null(x)) { return(NULL) } + if (.ldIsMatrixRef(x)) { + return(x[keep]) + } + if (.ldIsMixtureRef(x)) { + return(.gmRowsAt(x, keep)) + } if (methods::is(x, "GenotypeHandle")) { return(.subsetGenotypeHandle(x, keep)) } - # `drop = FALSE`: the fallback shape is the matrix sketch, which a - # one-variant `keep` would otherwise collapse to a vector. - x[keep, , drop = FALSE] + .panelSubsetRows(x, keep) } # A sketch trimmed to zero variants, every other property preserved. Used when @@ -1197,26 +536,135 @@ loadLdFromGenotype <- function( # which on a real panel is ~135 MB of serialized dead weight per such entry. # NULL-safe and idempotent. # @noRd -.emptySketch <- function(x) { +.emptyLdRef <- function(x) { if (is.null(x)) { return(NULL) } + if (.ldIsMatrixRef(x)) { + return(x[integer(0)]) + } + if (.ldIsMixtureRef(x)) { + return(.gmRowsAt(x, integer(0))) + } if (methods::is(x, "GenotypeHandle")) { return(.emptyGenotypeHandle(x)) } - # A panel holds its handle TWICE -- as rowRanges and inside the dosage - # assay's DelayedArray seed. `x[integer(0), ]` drops the rows but leaves - # the seed carrying the whole panel's snpInfo, which is precisely the - # weight this exists to shed. Rebuild from an emptied handle so both go. - .genotypeExperiment(.emptyGenotypeHandle(.ldSketchHandle(x))) + .emptyPanel(x, keepSamples = FALSE) +} + +# A panel cut to the variants `keep` marks (a mask or positions). A panel +# whose rows are exactly its seed's, cut to an ordered subset, has the seed +# cut too -- a GenotypeHandle trimmed, a VCF, GDS or PLINK1 seed cut to the +# records the kept rows read -- so the cut panel's seed does not carry the +# dropped variants' metadata (see .emptyPanel()); its rowRanges, samples, +# colData and recorded metadata are its own, cut alike, so no sidecar is read +# again. Any other cut -- of a panel that is itself a row subset, of one held +# in memory or whose handle predates fileIdx, or one that reorders or repeats +# rows -- is taken from its assay, which then reads only those rows. +# @noRd +.panelSubsetRows <- function(panel, keep) { + keepIdx <- if (is.logical(keep)) which(keep) else as.integer(keep) + dosage <- .panelCutDosage(panel, keepIdx) + if (is.null(dosage)) { + # `drop = FALSE`: a one-variant `keep` would otherwise collapse the + # assay to a vector. + return(panel[keep, , drop = FALSE]) + } + SummarizedExperiment::SummarizedExperiment( + assays = list(dosage = dosage[, colnames(panel), drop = FALSE]), + rowRanges = SummarizedExperiment::rowRanges(panel)[keepIdx], + colData = SummarizedExperiment::colData(panel), + metadata = S4Vectors::metadata(panel) + ) +} + +# The dosage assay of a panel cut to rows `keepIdx`, over a seed cut alike, +# or NULL when the seed cannot be cut so (see .panelSubsetRows()). +# @noRd +.panelCutDosage <- function(panel, keepIdx) { + if ( + length(keepIdx) >= nrow(panel) || + is.unsorted(keepIdx, strictly = TRUE) + ) { + return(NULL) + } + seed <- .panelSeed(panel) + if ( + methods::is(seed, "GenotypeDosageSeed") && + identical(rownames(panel), dimnames(seed)[[1L]]) + ) { + return(DelayedArray::DelayedArray(.gdSeedRows(seed, keepIdx))) + } + handle <- .ldRefHandle(panel) + if (is.null(handle) || !.panelRowsAreHandle(panel, handle)) { + return(NULL) + } + genotypeDelayedArray(.subsetGenotypeHandle(handle, keepIdx)) +} + +# A panel's dimensions before any subsetting: its dosage seed's, or its own +# when it holds its dosages in memory. +# @noRd +.panelFullDims <- function(panel) { + seed <- .panelSeed(panel) + if (is.null(seed)) dim(panel) else dim(seed) +} + +# TRUE when a panel's rows are its handle's own, in order, and the handle can +# be trimmed (it records each variant's file position). +# @noRd +.panelRowsAreHandle <- function(panel, handle) { + si <- snpInfo(handle) + is_in("fileIdx", names(si)) && + identical(rownames(panel), normalizeVariantId(as.character(si$SNP))) +} + +# A panel with no variants, held in memory. `x[integer(0), ]` would drop the +# rows but keep the dosage seed -- a handle carrying every variant's +# metadata, or a backend over the whole file -- which is precisely the +# weight an empty panel exists to shed, so no seed is kept. Where it came +# from stays recorded (.ldRefSource()). `keepSamples` keeps its samples and +# their colData, as a mixture's sampleMap needs; otherwise they go too. +# @noRd +.emptyPanel <- function(panel, keepSamples) { + cols <- if (keepSamples) seq_len(ncol(panel)) else integer(0) + SummarizedExperiment::SummarizedExperiment( + assays = list( + dosage = matrix( + numeric(0), + 0L, + length(cols), + dimnames = list(NULL, colnames(panel)[cols]) + ) + ), + rowRanges = SummarizedExperiment::rowRanges(panel)[integer(0)], + colData = SummarizedExperiment::colData(panel)[cols, , drop = FALSE], + metadata = list_assign( + S4Vectors::metadata(panel), + genotypeSource = .ldRefSource(panel) + ) + ) } # "format @ path" for show methods, which describe where a panel came from -# rather than what is in it. +# rather than what is in it. An LdMatrix came from no file, so it is +# described by its size instead. # @noRd -.ldSketchLabel <- function(x) { - handle <- .ldSketchHandle(x) - glue("{genotypeFormat(handle)} @ {path(handle)}") +.ldRefLabel <- function(x) { + if (.ldIsMatrixRef(x)) { + return(glue("LdMatrix of {length(x)} variants")) + } + if (.ldIsMixtureRef(x)) { + return(glue( + "GenotypeMixture of {length(.gmComponents(x))} panels: ", + "{str_flatten(map_chr(.gmComponents(x), .ldRefLabel), '; ')}" + )) + } + source <- .ldRefSource(x) + if (is.null(source)) { + return(glue("genotype panel of {ncol(x)} samples held in memory")) + } + glue("{source$format} @ {source$path}") } # TRUE for anything that can serve as an LD panel. A bare GenotypeHandle @@ -1228,97 +676,301 @@ loadLdFromGenotype <- function( methods::is(x, "GenotypeHandle") } -# The handle behind an already-open genotype source, or NULL when the value is -# not one. Callers that accept "a panel, a bare handle, or a spec to resolve" -# use this to separate the first two -- which are ready to use -- from the -# third. A panel is the public shape (readGenotypes()); a bare handle is what -# internal callers and objects serialised before the change still carry. +# An already-open genotype source -- a panel, or a bare handle -- as given, +# or NULL when the value is not one. Callers that accept "a panel, a bare +# handle, or a spec to resolve" use this to separate the first two, which are +# ready to use, from the third. A panel is the public shape (readGenotypes()); +# a bare handle is what internal callers and objects serialised before the +# change still carry. # @noRd -.openGenotypeHandle <- function(x) { - if (!.ldIsPanel(x)) { - return(NULL) - } - .ldSketchHandle(x) +.openGenotypeSource <- function(x) { + if (.ldIsPanel(x)) x else NULL } -# ---------- LD sketch: the panel's own view of itself ---------- +# ---------- LD reference: its own view of itself ---------- # -# These read the panel through the SummarizedExperiment interface rather than +# These read a panel through the SummarizedExperiment interface rather than # reaching past it to the GenotypeHandle. The handle is the DelayedArray's # seed -- the READ PATH -- and unwrapping it for metadata leaks that seed into # callers that only ever wanted chrom/pos/alleles or a sample count, which the -# RSE already answers. Reaching for `.ldSketchHandle()` is now reserved for +# RSE already answers. Reaching for `.ldRefHandle()` is now reserved for # what genuinely lives on the handle: file format/path, chromosome shard # routing, the `.afreq` sidecar, and building or pruning the seed itself. # # A bare GenotypeHandle -- what objects serialised before the slot became an # RSE carry -- is projected exactly the way `.genotypeExperiment()` projects -# one, so both shapes answer identically. +# one, so both shapes answer identically. An LdMatrix is itself the GRanges +# of its variants, with the same SNP / A1 / A2 columns. -# The panel's variant ranges: seqnames = chromosome (chr-prefixed), start = -# position, mcols = SNP / A1 / A2. +# The reference's variant ranges: seqnames = chromosome (chr-prefixed), start = +# position, mcols = SNP / A1 / A2 (and AF on an LdMatrix that records it). # @noRd -.ldSketchRanges <- function(x, label = "LD sketch") { +.ldRefRanges <- function(x, label = "LD reference") { # The chokepoint every panel accessor funnels through, so the guard lives # here rather than being repeated at each entry point. Without it a NULL # or non-panel sketch surfaces as "unable to find an inherited method for # 'snpInfo'" from whichever accessor happened to touch it first, which # says nothing about the LD reference being the problem. Callers that - # validate with their own label (`.ldFromSketch`, the ctwas assembler) do + # validate with their own label (`.ldFromRef`, the ctwas assembler) do # so first, so their message wins. - .ldFromSketchValidate(x, label) + .ldFromRefValidate(x, label) + if (.ldIsMatrixRef(x)) { + return(as(x, "GRanges")) + } + if (.ldIsMixtureRef(x)) { + return(.gmRanges(x)) + } if (methods::is(x, "RangedSummarizedExperiment")) { return(SummarizedExperiment::rowRanges(x)) } .genotypeSnpRanges(x, normalizeVariantId(as.character(snpInfo(x)$SNP))) } +# How many variants an LD reference covers. +# @noRd +.ldRefNVariants <- function(x) { + length(.ldRefRanges(x)) +} + # The panel's variant ids in the panel's OWN labelling. This is the mcols # column, not `names()`: the names are normalized ids, while anything keyed on # the panel FILE -- the `.afreq` sidecar, the ctwas snp_map -- has to see the # panel's raw labels. # @noRd -.ldSketchVariantIds <- function(x) { - as.character(S4Vectors::mcols(.ldSketchRanges(x))$SNP) +.ldRefVariantIds <- function(x) { + as.character(S4Vectors::mcols(.ldRefRanges(x))$SNP) } # The panel's variant ids as MATCHING keys: the raw labels, with any id whose # allele slot holds a tag rather than an allele (chr21:13988152:INS:T) re- # rendered from the panel's own A1 / A2 columns, which are correct. Use this # wherever a panel id is matched against summary statistics or another id set, -# and `.ldSketchVariantIds()` only where the file's literal label is wanted. +# and `.ldRefVariantIds()` only where the file's literal label is wanted. # # The repair is what lets an untidily-named panel entry be MATCHED rather than # discarded: harmonization re-keys a surviving variant to the reference-allele # id, so the panel side has to speak the same form or every later id lookup # misses the variant it just harmonized. # @noRd -.ldSketchMatchIds <- function(x) { - mc <- S4Vectors::mcols(.ldSketchRanges(x)) - ids <- as.character(mc$SNP) - if (is.null(mc$A1) || is.null(mc$A2)) { - return(ids) +.ldRefMatchIds <- function(x) { + mc <- S4Vectors::mcols(.ldRefRanges(x)) + ids <- as.character(mc$SNP) + if (is.null(mc$A1) || is.null(mc$A2)) { + return(ids) + } + .repairVariantIds(ids, as.character(mc$A2), as.character(mc$A1)) +} + +# Per-variant chromosome, canonical (no chr prefix). +# @noRd +.ldRefChrom <- function(x) { + canonChrom(as.character(GenomicRanges::seqnames(.ldRefRanges(x)))) +} + +# A panel's sample ids. An LdMatrix has no samples, so asking is a bug in the +# caller rather than something to answer with an empty vector. +# @noRd +.ldRefSampleIds <- function(x) { + if (.ldIsMatrixRef(x) || .ldIsMixtureRef(x)) { + abort( + "Only a single genotype panel has one sample set.", + .internal = TRUE + ) + } + if (methods::is(x, "RangedSummarizedExperiment")) { + return(as.character(colnames(x))) + } + as.character(sampleIds(x)) +} + +# A panel's column count -- its samples, or a sketch's pseudo-samples -- or +# the size an LdMatrix records (NA when it records none). +# @noRd +.ldRefNSamples <- function(x) { + if (.ldIsMatrixRef(x)) { + return(nSamples(x)) + } + if (.ldIsMixtureRef(x)) { + return(.gmPooledN(x, .ldRefNSamples)) + } + length(.ldRefSampleIds(x)) +} + +# The number of real people behind an LD reference, for statistics that count +# them -- a MAC cutoff's allele counts, DENTIST's truncation rank. A genotype +# panel's columns are its samples. A stochastic sketch's columns are B +# pseudo-samples projected from n real ones (the projection cannot raise the +# rank of their LD above n), so its n is the one its projection record holds. +# An LdMatrix records its size, or NA. +# @noRd +.ldRefRealNSamples <- function(x) { + if (.ldIsMatrixRef(x)) { + return(nSamples(x)) + } + if (.ldIsMixtureRef(x)) { + return(sum(map_int(.gmComponents(x), .ldRefRealNSamples))) + } + .ldRefProjection(x)$nSamples %||% .ldRefNSamples(x) +} + +# The number of independent samples a reference's LD is worth, for the +# estimators that correct for LD-estimation noise (ldsc's unbiased r^2, HDL's +# finite reference). A stochastic sketch's LD carries the noise of its n real +# samples and of its B pseudo-samples, so it is worth 1 / (1/n + 1/B). An +# LdMatrix records this directly. +# @noRd +.ldRefNoiseN <- function(x) { + if (.ldIsMatrixRef(x)) { + return(nSamples(x)) + } + if (.ldIsMixtureRef(x)) { + return(.gmPooledN(x, .ldRefNoiseN)) + } + nCols <- .ldRefNSamples(x) + n <- .ldRefProjection(x)$nSamples + if (is.null(n)) { + return(nCols) + } + as.integer(round(1 / (1 / n + 1 / nCols))) +} + +# Each of the reference's variants' A1 frequency, or NULL when it records +# none. An LdMatrix and a stochastic sketch carry an `AF` column; a bare +# sketch handle (an object serialised before the slot became an RSE) answers +# from its sidecar. A panel of real genotypes measures frequencies from its +# dosages instead, so it answers NULL here. +# @noRd +.ldRefAf <- function(x) { + if (.ldIsMixtureRef(x)) { + return(.gmAf(x)) + } + af <- S4Vectors::mcols(.ldRefRanges(x))$AF + if (!is.null(af) || !methods::is(x, "GenotypeHandle")) { + return(af) + } + record <- .ldRefProjection(x) + if (is.null(record)) { + return(NULL) + } + as.numeric(record$af$alt_freq)[match(.ldRefVariantIds(x), record$af$id)] +} + +# The real sample size a step needs, or an error naming the step when the +# reference cannot say -- an LdMatrix built without `nSamples`. +# @noRd +.ldRefRequireNSamples <- function(x, step) { + n <- .ldRefRealNSamples(x) + if (is.na(n)) { + abort(c( + glue("{step} needs the LD reference's sample size."), + i = "Record it with LdMatrix(nSamples = )." + )) + } + n +} + +# A stochastic sketch's projection record -- list(nSamples, af) -- or NULL for +# a panel of real genotypes and for an LdMatrix. A panel built by +# .genotypeExperiment() carries it from construction (see .withLdProjection); +# a bare handle, which only objects serialised before the slot became an RSE +# carry, is read from its sidecar on demand. +# @noRd +.ldRefProjection <- function(x) { + if (is.null(x) || .ldIsMatrixRef(x) || .ldIsMixtureRef(x)) { + return(NULL) + } + if (methods::is(x, "RangedSummarizedExperiment")) { + return(S4Vectors::metadata(x)$ldProjection) + } + .sketchProjectionRecord(.ldRefHandle(x)) +} + +# TRUE for a stochastic sketch: a panel whose columns are pseudo-samples +# projected from real ones, so its dosages are not genotypes and say nothing +# about allele frequency or missingness. +# @noRd +.ldRefIsProjection <- function(x) { + !is.null(.ldRefProjection(x)) +} + +# Read a stochastic sketch's sidecar: its real sample count -- the largest +# OBS_CT, halved (OBS_CT counts alleles, two per diploid sample; variants with +# missing calls count fewer) -- and each variant's real A1 frequency. NULL +# when the handle is not a sketch, i.e. carries no PLINK2-style .afreq beside +# it (in any genotype format) with U_MIN / U_MAX and OBS_CT. +# @noRd +.sketchProjectionRecord <- function(handle) { + if (is.null(handle)) { + return(NULL) } - .repairVariantIds(ids, as.character(mc$A2), as.character(mc$A1)) + .afreqProjectionRecord(.genotypeSourceRecord(handle), snpInfo(handle)$CHR) } -# Per-variant chromosome, canonical (no chr prefix). +# .sketchProjectionRecord() for a genotype source and the chromosomes its +# panel spans, for a panel that reads through no handle. # @noRd -.ldSketchChrom <- function(x) { - canonChrom(as.character(GenomicRanges::seqnames(.ldSketchRanges(x)))) +.afreqProjectionRecord <- function(source, chroms) { + tbls <- compact(map(.afreqPrefixes(source, chroms), .afreqIfStochastic)) + if (length(tbls) == 0L) { + return(NULL) + } + af <- list_rbind(tbls) + list( + nSamples = as.integer(max(as.numeric(af$obs_ct), na.rm = TRUE) %/% 2), + af = select(af, all_of(c("id", "alt_freq"))) + ) } +# Record a stochastic sketch's real sample count and allele frequencies on the +# panel built over it: the count in metadata, the frequencies as an `AF` +# column of rowRanges (the frequency of A1, which PLINK2 writes as ALT). Done +# once, at construction, so nothing downstream re-reads the sidecar -- or, +# worse, measures frequencies off the projected dosages. # @noRd -.ldSketchSampleIds <- function(x) { - if (methods::is(x, "RangedSummarizedExperiment")) { - return(as.character(colnames(x))) +.withLdProjection <- function(panel, record) { + if (is.null(record)) { + return(panel) } - as.character(sampleIds(x)) + rr <- SummarizedExperiment::rowRanges(panel) + mc <- S4Vectors::mcols(rr) + mc$AF <- as.numeric(record$af$alt_freq)[ + match(as.character(mc$SNP), record$af$id) + ] + withAf <- SummarizedExperiment::`rowRanges<-`( + panel, + value = S4Vectors::`mcols<-`(rr, value = mc) + ) + S4Vectors::`metadata<-`( + withAf, + value = c( + S4Vectors::metadata(withAf), + list(ldProjection = list(nSamples = record$nSamples)) + ) + ) +} + +# .withLdProjection() for a panel that reads through no handle -- a VCF or +# GDS panel, or a per-chromosome set of them -- its sidecar found from the +# genotype source the panel records. +# @noRd +.withSourceProjection <- function(panel) { + .withLdProjection( + panel, + .afreqProjectionRecord(.ldRefSource(panel), .ldRefChrom(panel)) + ) } +# The .afreq at `prefix` when it is a stochastic sketch's (it carries U_MIN / +# U_MAX) and records OBS_CT, else NULL. A malformed sidecar reads as absent, +# as it does for the panel filter. # @noRd -.ldSketchNSamples <- function(x) { - length(.ldSketchSampleIds(x)) +#' @importFrom rlang try_fetch +.afreqIfStochastic <- function(prefix) { + af <- try_fetch(readAfreq(prefix), error = function(cnd) NULL) + if (is.null(af) || !all(is_in(c("u_min", "obs_ct"), colnames(af)))) { + return(NULL) + } + af } # Dosage for a variant subset, samples x variants. @@ -1329,9 +981,15 @@ loadLdFromGenotype <- function( # delegates to that same function with `meanImpute = FALSE`, so imputation is # layered on here rather than pushed down. # @noRd -.ldSketchDosage <- function(x, snpIdx, meanImpute = TRUE) { - # The other primitive that does not pass through `.ldSketchRanges()`. - .ldFromSketchValidate(x, "LD sketch") +.ldRefDosage <- function(x, snpIdx, meanImpute = TRUE) { + # The other primitive that does not pass through `.ldRefRanges()`. + .ldFromRefValidate(x, "LD reference") + if (.ldIsMatrixRef(x) || .ldIsMixtureRef(x)) { + abort( + "Only a single genotype panel has dosages to read.", + .internal = TRUE + ) + } if (!methods::is(x, "RangedSummarizedExperiment")) { return(.dosageMatrix(x, snpIdx, meanImpute = meanImpute)) } @@ -1341,39 +999,43 @@ loadLdFromGenotype <- function( if (meanImpute) .qtlMeanImpute(dosage) else dosage } -.ldFromSketchValidate <- function(ldSketch, label) { - if (is.null(ldSketch)) { +# Require a non-NULL LD reference: a genotype panel (a +# RangedSummarizedExperiment, or a bare GenotypeHandle) or an LdMatrix. +# @noRd +.ldFromRefValidate <- function(ldReference, label) { + if (is.null(ldReference)) { msg <- glue( - "{label}: the SumStats/collection carries no ldSketch ", - "(ldSketch = NULL); this step needs an LD reference." + "{label}: the SumStats/collection carries no ldReference ", + "(ldReference = NULL); this step needs an LD reference." ) abort(msg) } # A bare GenotypeHandle is still accepted: that is what objects # serialised before the slot became an RSE carry. - if (!.ldIsPanel(ldSketch)) { + if (!.ldIsReference(ldReference)) { msg <- glue( - "{label}: ldSketch must be a genotype panel ", - "(RangedSummarizedExperiment or GenotypeHandle)." + "{label}: ldReference must be a genotype panel ", + "(RangedSummarizedExperiment or GenotypeHandle), a ", + "GenotypeMixture or an LdMatrix." ) abort(msg) } } # Match requested ids to the panel; NULL if none match. Returns kept ids/order. -.ldFromSketchMatch <- function(ldSketch, variantIds, label, onMissing) { +.ldFromRefMatch <- function(ldReference, variantIds, label, onMissing) { # Match by (chrom, pos, allele) tuple with an exact id-string fallback for # rsID panels; the caller's original ids and order are preserved. m <- matchVariants( variantIds, - .ldSketchMatchIds(ldSketch), + .ldRefMatchIds(ldReference), removeStrandAmbiguous = FALSE ) nMissing <- length(variantIds) - length(m$idxA) if (nMissing > 0L && onMissing == "error") { msg <- glue( "{label}: {nMissing} variant id(s) not present in the LD ", - "sketch panel." + "reference." ) abort(msg) } @@ -1388,23 +1050,44 @@ loadLdFromGenotype <- function( ) } -.ldFromSketch <- function( - ldSketch, +# The LD matrix over a specified variant subset of an LD reference: computed +# from a genotype panel's dosages, or read out of an LdMatrix. Called directly +# by +# twasWeightsPipeline, fineMappingPipeline, jointEngine, +# causalInferencePipeline, colocboostPipeline and the coloc / summaryStatsQc +# paths, which differ only in their error message prefix and in whether +# variants absent from the panel raise an error or get silently dropped -- +# both of which are arguments here rather than a per-pipeline wrapper. +# +# Arguments: +# ldReference A genotype panel (RangedSummarizedExperiment, or a bare +# GenotypeHandle) or an LdMatrix. +# variantIds Character vector of SNP IDs to extract. +# label Error-message prefix, e.g. "twasWeightsPipeline". +# onMissing "error" (default) -> any unmatched id stops the call; +# "drop" -> unmatched ids are silently filtered. +# When "drop" leaves no surviving variants the function +# returns NULL. +# +# Returns: +# A `length(variantIds) x length(variantIds)` symmetric LD matrix with +# rows/cols named by the (possibly filtered) `variantIds`. +# With `onMissing = "drop"` the returned matrix carries an attribute +# `"keptVariantIds"` so callers can recover which ids survived. +# @noRd +.ldFromRef <- function( + ldReference, variantIds, - label = ".ldFromSketch", + label = ".ldFromRef", onMissing = c("error", "drop") ) { - .ldFromSketchValidate(ldSketch, label) + .ldFromRefValidate(ldReference, label) onMissing <- arg_match(onMissing) - matched <- .ldFromSketchMatch(ldSketch, variantIds, label, onMissing) + matched <- .ldFromRefMatch(ldReference, variantIds, label, onMissing) if (is.null(matched)) { return(NULL) } - ldMat <- computeLd( - ldSketch, - method = "sample", - snpIdx = matched$idx - ) + ldMat <- .ldRefLdAt(ldReference, matched$idx) # The match above is allele-aware, so a panel entry whose alleles are # swapped relative to the caller's id still matches -- but the dosage it # returns counts the OTHER allele, which negates every correlation that @@ -1424,7 +1107,238 @@ loadLdFromGenotype <- function( named } -# ---------- LD sketch: per-variant panel statistics and filtering ---------- +# The factor of a genotype reference's LD over `variantIds` (see +# .ldRefFactor()), matched and allele-aligned exactly as .ldFromRef() does: +# columns follow the caller's ids and are named by them, and a column whose +# panel alleles are swapped is negated, so crossprod(F) / (nrow(F) - 1) is +# .ldFromRef()'s matrix. An LdMatrix has no factor, so callers send it down +# the matrix path instead. +# @noRd +.ldFactorFromRef <- function( + ldReference, + variantIds, + label = ".ldFactorFromRef", + onMissing = c("error", "drop") +) { + .ldFromRefValidate(ldReference, label) + onMissing <- arg_match(onMissing) + matched <- .ldFromRefMatch(ldReference, variantIds, label, onMissing) + if (is.null(matched)) { + return(NULL) + } + factor <- .ldRefFactor(ldReference, matched$idx) + signed <- if (any(matched$sign < 0)) { + sweep(factor, 2L, matched$sign, `*`) + } else { + factor + } + named <- `dimnames<-`(signed, list(NULL, matched$keptIds)) + if (onMissing == "drop") { + return(`attr<-`(named, "keptVariantIds", matched$keptIds)) + } + named +} + +# The LD among the reference's variants at `idx`, in the reference's own +# allele coding: the sample correlation of a panel's dosages, or the +# corresponding block of an LdMatrix. +# @noRd +.ldRefLdAt <- function(ldReference, idx) { + if (.ldIsMatrixRef(ldReference)) { + return(unname(ldMatrix(ldReference)[idx, idx, drop = FALSE])) + } + if (.ldIsMixtureRef(ldReference)) { + return(.gmLdAt(ldReference, idx)) + } + computeLd(ldReference, method = "sample", snpIdx = idx) +} + +# A factor F of a genotype reference's LD over `idx`: a matrix with +# zero-mean columns whose crossprod(F) / (nrow(F) - 1) is exactly the LD +# .ldRefLdAt() returns, so every computation on that LD -- quadratic forms, +# products, columns, eigenvectors -- can run on F without forming the p x p +# matrix. Its rows behave as samples, so an engine that correlates them +# itself recovers the same LD. A panel's factor is its standardized dosages; +# a mixture's stacks its panels' (.gmFactor()). +# @noRd +.ldRefFactor <- function(ldReference, idx) { + if (.ldIsMixtureRef(ldReference)) { + return(.gmFactor(ldReference, idx)) + } + .ldFactorFromDosage(.ldRefDosage(ldReference, idx, meanImpute = TRUE)) +} + +# A panel's mean-imputed, standardized dosages over `idx`, with a monomorphic +# column left at zero: the blocks a mixture's factor is stacked from. +# @noRd +.ldRefStandardized <- function(ldReference, idx) { + .ldStandardize(.ldRefDosage(ldReference, idx, meanImpute = TRUE)) +} + +# The factor of a dosage matrix's (samples x variants) LD, under +# .ldRefFactor()'s contract. A monomorphic variant is independent of every +# other with unit variance in computeLd()'s LD, while its standardized +# column is all zero; two padding rows of +/- sqrt((m - 1) / 2) restore its +# variance without correlating it with anything or moving any column's mean, +# and the other rows are rescaled for the m rows the factor then has. +# @noRd +.ldFactorFromDosage <- function(X) { + standardized <- .ldStandardize(X) + dead <- which(colSums(standardized^2) == 0) + if (length(dead) == 0L) { + return(standardized) + } + n <- nrow(standardized) + m <- n + 2L * length(dead) + rbind( + standardized * sqrt((m - 1) / (n - 1)), + .ldPaddingRows(dead, ncol(standardized), sqrt((m - 1) / 2)) + ) +} + +# Mean-imputed columns, centred and scaled to unit variance (n - 1 +# denominator), as scale() would make them, except that a constant column +# stays zero rather than turning into NaN. +# @noRd +.ldStandardize <- function(X) { + imputed <- if (anyNA(X)) .ldMeanImputeColumns(X) else X + centred <- sweep(imputed, 2L, colMeans(imputed)) + sds <- sqrt(colSums(centred^2) / (nrow(centred) - 1)) + sweep(centred, 2L, replace(sds, sds == 0, 1), `/`) +} + +# Two rows per column in `cols`, holding +value and -value in that column +# and zero elsewhere. They add 2 value^2 to the column's sum of squares and +# nothing to its mean or to any crossproduct. +# @noRd +.ldPaddingRows <- function(cols, p, value) { + rows <- matrix(0, 2L * length(cols), p) + i <- seq_along(cols) + rows[cbind(2L * i - 1L, cols)] <- value + rows[cbind(2L * i, cols)] <- -value + rows +} + +# The eigendecomposition of the LD R = crossprod(F) / (m - 1), from the thin +# SVD of its factor F (m x p) rather than from R: the eigenvalues d^2 / (m - 1) +# and the right singular vectors, for the min(m, p) directions the SVD +# returns, largest first. R's other p - min(m, p) eigenvalues are exactly +# zero; `nNull` counts them, for an estimator that counts every direction. +# @noRd +.ldFactorEigen <- function(F) { + s <- svd(F, nu = 0L) + list( + values = s$d^2 / (nrow(F) - 1), + vectors = s$v, + nNull = ncol(F) - length(s$d) + ) +} + +# ---------- LD rows a stripe at a time ---------- +# +# An LD source is one block's LD in any of three forms: the matrix itself, +# list(R = ); a factor of it, list(F = ) with R = crossprod(F) / (m - 1); or +# an eigendecomposition, list(vectors = , values = ) with R = V diag(values) +# V'. The helpers below read R's rows from any of them, so a computation over +# R's rows never needs the matrix whole. + +# How many of R's rows a stripe holds. +# @noRd +.ldStripeSize <- function() 256L + +# The number of variants an LD source covers. +# @noRd +.ldSourceSize <- function(ld) { + if (!is.null(ld$R)) { + return(nrow(ld$R)) + } + if (!is.null(ld$F)) { + return(ncol(ld$F)) + } + nrow(ld$vectors) +} + +# Rows `rows` of an LD source's R, without forming the rest. +# @noRd +.ldSourceRows <- function(ld, rows) { + if (!is.null(ld$R)) { + return(ld$R[rows, , drop = FALSE]) + } + if (!is.null(ld$F)) { + return( + crossprod(ld$F[, rows, drop = FALSE], ld$F) / (nrow(ld$F) - 1) + ) + } + scaled <- sweep(ld$vectors[rows, , drop = FALSE], 2L, ld$values, "*") + tcrossprod(scaled, ld$vectors) +} + +# (R o R) A -- R squared element-wise, times A -- for an LD source: column a +# of the result is the LD score sum_k r^2_jk a_k. The element-wise square +# does not inherit a factor's low rank (R has rank below m, R o R is in +# general full rank), so no product through the factor serves every column +# of A at once: one Gram matrix F diag(a) F' per column would cost m^2 p for +# each. Instead R's rows are formed a stripe at a time, squared, and +# multiplied by all of A, which costs p^2 (m + ncol(A)) and holds one stripe. +# A stored matrix is used as it is. +# @noRd +.ldSquaredProduct <- function(ld, A) { + if (!is.null(ld$R)) { + return((ld$R^2) %*% A) + } + p <- .ldSourceSize(ld) + starts <- seq.int(1L, p, by = .ldStripeSize()) + stripes <- map(starts, .ldSquaredProductStripe, ld = ld, A = A, p = p) + exec(rbind, !!!stripes) +} + +# @noRd +.ldSquaredProductStripe <- function(start, ld, A, p) { + rows <- seq.int(start, min(start + .ldStripeSize() - 1L, p)) + .ldSourceRows(ld, rows)^2 %*% A +} + +# `ldReference` cut to the variants `variantIds` names (matched as +# .ldFromRef() matches them), for a caller that reads the same block's LD +# several times: a panel's dosage is read from its files once, here, and held +# in memory, rather than read again by every reader. An LdMatrix is cut to +# those variants, and a GenotypeMixture is cut with its panels left to read +# as they are needed. +# @noRd +.ldRefInMemory <- function(ldReference, variantIds, label) { + .ldFromRefValidate(ldReference, label) + matched <- .ldFromRefMatch(ldReference, variantIds, label, "error") + rows <- sort(unique(matched$idx)) + if (!methods::is(ldReference, "RangedSummarizedExperiment")) { + if (methods::is(ldReference, "GenotypeHandle")) { + return(ldReference) + } + return(ldReference[rows]) + } + block <- ldReference[rows, ] + SummarizedExperiment::`assay<-`( + block, + "dosage", + withDimnames = FALSE, + value = as.matrix(SummarizedExperiment::assay( + block, + "dosage", + withDimnames = FALSE + )) + ) +} + +# b' R b for each column b of B, from an LD matrix or a factor of it: +# ||F b||^2 / (m - 1), never forming R. +# @noRd +.ldQuadForms <- function(ld, B) { + if (!is.null(ld$R)) { + return(colSums(B * (ld$R %*% B))) + } + colSums((ld$F %*% B)^2) / (nrow(ld$F) - 1) +} + +# ---------- LD reference: per-variant statistics and filtering ---------- # Per-variant minor allele frequency and missingness rate from panel dosage. # @@ -1459,19 +1373,23 @@ loadLdFromGenotype <- function( max(mafCutoff, macAsMaf) } -# The .afreq stems to read for a panel: the handle's own stem, or one per -# chromosome the panel actually spans. A sharded handle lists every -# chromosome in its manifest, and reading the shards the summary statistics -# never touch is the cost per-chromosome sketch trimming exists to avoid. +# The .afreq stems to read for a genotype source: its file's, or one per +# chromosome of `chroms` (those its panel spans) for a per-chromosome +# manifest. A manifest lists every chromosome, and reading the shards the +# summary statistics never touch is the cost per-chromosome sketch trimming +# exists to avoid. None for a panel that reads no file. # @noRd -.panelAfreqPrefixes <- function(handle) { - chromPaths <- .genotypeChromPaths(handle) +.afreqPrefixes <- function(source, chroms) { + if (is.null(source)) { + return(character(0)) + } + chromPaths <- source$chromPaths %||% character(0) if (length(chromPaths) == 0L) { - return(.genotypeReadPath(handle)) + return(.genotypeStem(.resolveGenotypeResourcePath(source$path))) } - spanned <- unique(canonChrom(as.character(snpInfo(handle)$CHR))) + spanned <- unique(canonChrom(as.character(chroms))) paths <- unname(chromPaths[is_in(names(chromPaths), spanned)]) - map_chr(paths, .resolveGenotypeResourcePath) + .genotypeStem(map_chr(paths, .resolveGenotypeResourcePath)) } # One shard's id/alt_freq pairs, or NULL when the sidecar is missing or does @@ -1487,18 +1405,16 @@ loadLdFromGenotype <- function( select(af, all_of(c("id", "alt_freq"))) } -# Panel minor allele frequency for `variantIds` read from the PLINK2 .afreq -# sidecar, or NULL when the sidecar cannot answer for every id. +# Panel minor allele frequency for `variantIds` read from the PLINK2-style +# .afreq sidecar beside the panel's file, in any genotype format, or NULL +# when the sidecar cannot answer for every id. # # Refusing a PARTIAL sidecar is deliberate: the dosage path treats a variant # it cannot measure as a drop, so a fast path that quietly kept the ids # .afreq happens to omit would disagree with it about the same variant. # @noRd -.panelAfreqMaf <- function(handle, variantIds) { - if (genotypeFormat(handle) != "plink2") { - return(NULL) - } - tbls <- compact(map(.panelAfreqPrefixes(handle), .panelAfreqTable)) +.panelAfreqMaf <- function(source, chroms, variantIds) { + tbls <- compact(map(.afreqPrefixes(source, chroms), .panelAfreqTable)) if (length(tbls) == 0L) { return(NULL) } @@ -1511,54 +1427,160 @@ loadLdFromGenotype <- function( pmin(altFreq, 1 - altFreq) } -# TRUE for each matched panel variant that fails the cutoffs. -# -# Allele frequency alone answers MAF and MAC, so with no missingness cutoff -# set the .afreq sidecar decides the whole mask without materializing panel -# dosage -- which is what makes the filter affordable on a panel far larger -# than the analysed variant set. Missingness is not derivable from the -# sidecar (its observation count is an ALLELE count, whose ploidy the mask -# would have to guess), so an imissCutoff always takes the dosage path. -# @noRd -.panelDropMask <- function(ldSketch, matched, panelFilterParam) { +# TRUE for each matched variant of the LD reference that fails the cutoffs. +# The statistics come from `.ldRefVariantStats()`, which knows where each +# kind of reference keeps them truthfully; missingness is only asked for when +# a missingness cutoff is set. +# @noRd +.panelDropMask <- function(ldReference, matched, panelFilterParam) { imissCutoff <- panelFilterParam$imissCutoff - if (imissCutoff >= 1) { - # Keyed on the PANEL's own variant labels, not the caller's: .afreq - # carries the .pvar ids, while `keptIds` is whatever id form the - # caller asked in (normalized, most often). - panelIds <- .ldSketchVariantIds(ldSketch)[matched$idx] - # The handle stays for this one read: the sidecar is a file beside - # the genotypes, which only the seed knows how to find. - maf <- .panelAfreqMaf(.ldSketchHandle(ldSketch), panelIds) - if (!is.null(maf)) { - effMaf <- .panelEffectiveMaf( - panelFilterParam$mafCutoff, - panelFilterParam$macCutoff, - .ldSketchNSamples(ldSketch) - ) - return(is.na(maf) | maf < effMaf) - } - } - dosage <- .ldSketchDosage(ldSketch, matched$idx, meanImpute = FALSE) - stats <- .panelVariantStats(dosage) + stats <- .ldRefVariantStats( + ldReference, + matched$idx, + needMissing = imissCutoff < 1, + step = "The LD-panel filter" + ) effMaf <- .panelEffectiveMaf( panelFilterParam$mafCutoff, panelFilterParam$macCutoff, - nrow(dosage) + .ldRefMacSamples(ldReference, panelFilterParam$macCutoff) ) - is.na(stats$maf) | stats$maf < effMaf | stats$missRate > imissCutoff + fails <- is.na(stats$maf) | stats$maf < effMaf + if (is.null(stats$missRate)) { + return(fails) + } + fails | stats$missRate > imissCutoff +} + +# Per-variant MAF -- and missingness, when `needMissing` -- for the +# reference's variants at `idx`, from wherever the reference records them +# truthfully: +# +# genotype panel the .afreq sidecar when it answers for every variant and +# no missingness is wanted (no dosage need be read, which is +# what keeps the filter affordable on a panel far larger +# than the analysed variant set); the dosages otherwise +# sketch the real frequencies its projection record holds. Its +# dosages are projections taken after mean-filling, so they +# carry neither frequencies nor missingness +# LdMatrix its AF column; it has no genotypes to be missing +# +# `step` names the caller in the error when the reference cannot answer. +# @noRd +.ldRefVariantStats <- function(ldReference, idx, needMissing, step) { + if (.ldIsMixtureRef(ldReference)) { + return(.gmVariantStats(ldReference, idx, needMissing, step)) + } + if (.ldIsMatrixRef(ldReference) || .ldRefIsProjection(ldReference)) { + return(.ldRefRecordedStats(ldReference, idx, needMissing, step)) + } + if (!needMissing) { + # Keyed on the PANEL's own variant labels: .afreq carries the .pvar + # ids. The handle stays for this one read, since the sidecar is a + # file beside the genotypes, which only the seed knows how to find. + panelIds <- .ldRefVariantIds(ldReference)[idx] + maf <- .panelAfreqMaf( + .ldRefSource(ldReference), + .ldRefChrom(ldReference), + panelIds + ) + if (!is.null(maf)) { + return(list(maf = maf, missRate = NULL)) + } + } + .panelVariantStats(.ldRefDosage(ldReference, idx, meanImpute = FALSE)) +} + +# Frequencies from a reference that records them rather than measuring them: +# an LdMatrix or a stochastic sketch. Neither can say how often a genotype is +# missing, so a missingness cutoff is refused rather than silently skipped. +# @noRd +.ldRefRecordedStats <- function(ldReference, idx, needMissing, step) { + what <- if (.ldIsMatrixRef(ldReference)) { + "an LdMatrix, which has no genotypes" + } else { + "a stochastic sketch, whose dosages are projections" + } + if (needMissing) { + abort(c( + glue( + "{step} needs genotype missingness, and the LD reference is ", + "{what}." + ), + i = "Leave its missingness cutoff unset." + )) + } + af <- .ldRefAf(ldReference) + if (is.null(af)) { + abort(c( + glue( + "{step} needs allele frequencies, and the LD reference ", + "records none." + ), + i = "Give the LdMatrix's variants an `AF` column." + )) + } + af <- as.numeric(af)[idx] + list(maf = pmin(af, 1 - af), missRate = NULL) +} + +# Per-variant genotype variance at `idx`, for scaling non-standardized weights +# to the correlation scale. A panel of real genotypes measures it on its +# (mean-imputed) dosages. A sketch or an LdMatrix has no genotypes to measure, +# so it gives 2p(1 - p) from its recorded A1 frequency -- the dosage variance +# under Hardy-Weinberg -- or NA when it records none. +# @noRd +.ldRefVariance <- function(ldReference, idx) { + if (.ldIsMixtureRef(ldReference)) { + return(.gmVariance(ldReference, idx)) + } + if (.ldIsMatrixRef(ldReference) || .ldRefIsProjection(ldReference)) { + af <- .ldRefAf(ldReference) + if (is.null(af)) { + return(rep(NA_real_, length(idx))) + } + af <- as.numeric(af)[idx] + return(2 * af * (1 - af)) + } + geno <- .ldRefDosage(ldReference, idx, meanImpute = TRUE) + apply(geno, 2, stats::var, na.rm = TRUE) +} + +# The real sample count a MAC cutoff divides by, or 0 when no MAC cutoff is +# set (which .panelEffectiveMaf() reads as "no MAC term"). A mixture of +# panels has no single count, so a MAC cutoff on one is refused. +# @noRd +.ldRefMacSamples <- function(ldReference, macCutoff) { + if (macCutoff <= 0) { + return(0L) + } + # A mixture's statistics are its panels' worst (see .gmVariantStats()), so + # its counts are judged against its smallest panel. + if (.ldIsMixtureRef(ldReference)) { + return(min(map_int(.gmComponents(ldReference), .ldRefRealNSamples))) + } + if (.ldIsMatrixRef(ldReference) && !is.null(mixtureWeights(ldReference))) { + abort(c( + str_c( + "A MAC cutoff counts one panel's alleles, and the LdMatrix ", + "is a mixture." + ), + i = "Use `mafCutoff` instead." + )) + } + .ldRefRequireNSamples(ldReference, "A MAC cutoff") } # The subset of `variantIds` whose LD-panel genotypes clear the cutoffs, # returned in the caller's order. # # Variants absent from the panel are passed through untouched. Whether a -# missing variant is an error or is silently dropped belongs to `.ldFromSketch` +# missing variant is an error or is silently dropped belongs to `.ldFromRef` # (its `onMissing`), and deciding it a second time here would let the two # disagree about the same variant. # @noRd .panelVariantFilter <- function( - ldSketch, + ldReference, variantIds, panelFilterParam = PanelFilterParam(), label = ".panelVariantFilter" @@ -1569,25 +1591,25 @@ loadLdFromGenotype <- function( if (is.null(cutoffs)) { return(variantIds) } - if (is.null(ldSketch) || length(variantIds) == 0L) { + if (is.null(ldReference) || length(variantIds) == 0L) { return(variantIds) } - matched <- .ldFromSketchMatch(ldSketch, variantIds, label, "drop") + matched <- .ldFromRefMatch(ldReference, variantIds, label, "drop") if (is.null(matched)) { return(variantIds) } - drop <- .panelDropMask(ldSketch, matched, cutoffs) + drop <- .panelDropMask(ldReference, matched, cutoffs) variantIds[!is_in(variantIds, matched$keptIds[drop])] } # Row mask for the variants clearing the LD-panel cutoffs, reporting how many # were dropped. A no-op when no cutoff is set. # @noRd -.panelKeepMask <- function(variantIds, ldSketch, cutoffs, label) { - if (is.null(ldSketch) || is.null(cutoffs)) { +.panelKeepMask <- function(variantIds, ldReference, cutoffs, label) { + if (is.null(ldReference) || is.null(cutoffs)) { return(rep(TRUE, length(variantIds))) } - kept <- .panelVariantFilter(ldSketch, variantIds, cutoffs, label = label) + kept <- .panelVariantFilter(ldReference, variantIds, cutoffs, label = label) keep <- is_in(variantIds, kept) nDropped <- sum(!keep) if (nDropped > 0L) { @@ -1615,11 +1637,12 @@ loadLdFromGenotype <- function( } list(mafCutoff = maf, macCutoff = mac, imissCutoff = imiss) } -# ---------- LD sketch: cross-pipeline LD-panel compatibility check ---------- +# ---------- LD reference: cross-pipeline compatibility check ---------- -# Internal: assert that two LD sketches describe the same reference panel -- -# the same samples, and the same allele coding (A1/A2 in the same orientation) -# on the variants they share. The SNP label is not compared, so a pure +# Internal: assert that two LD references describe the same reference panel -- +# the same samples (for genotype panels) or the same LD (for LdMatrix +# objects), and the same allele coding (A1/A2 in the same orientation) on the +# variants they share. The SNP label is not compared, so a pure # chr-prefix difference does not fail; an allele swap still does, since it # means the two panels code their LD in opposite directions. # @@ -1642,11 +1665,11 @@ loadLdFromGenotype <- function( # "twasWeights" or "fineMappingResult"); it is woven into the error # messages when provided. `pipelineName` prefixes every error so the # failure source remains discoverable. -# --- .requireMatchingLdSketches helpers ------------------------------------- +# --- .requireMatchingLdRefs helpers ------------------------------------- # Null handling: TRUE if the caller should return early (qtl NULL, or gwas NULL # under a lenient policy); errors when a non-NULL qtl faces a NULL gwas sketch. -.ldSketchNullGuard <- function(qtlLd, gwasLd, pipelineName, label, nullPolicy) { +.ldRefNullGuard <- function(qtlLd, gwasLd, pipelineName, label, nullPolicy) { if (is.null(qtlLd)) { return(TRUE) } @@ -1655,12 +1678,12 @@ loadLdFromGenotype <- function( return(TRUE) } labelPart <- if (!is.null(label)) { - glue("ldSketch on `{label}` is non-NULL ") + glue("ldReference on `{label}` is non-NULL ") } else { - "qtl ldSketch is non-NULL " + "qtl ldReference is non-NULL " } msg <- glue( - "{pipelineName}: {labelPart}but the GWAS ldSketch is NULL." + "{pipelineName}: {labelPart}but the GWAS ldReference is NULL." ) abort(msg) } @@ -1670,32 +1693,54 @@ loadLdFromGenotype <- function( # Both must be genotype panels. Panel SIZE is deliberately NOT compared: two # objects that share one LD sketch stop carrying identical variant sets as soon # as they are QC'd separately, because each object's sketch is trimmed to its -# own position span at load (`.subsetSketchToRange`) and to its own surviving -# variants at the end of QC (`.subsetSketchToIds`). A QTL and a GWAS collection +# own position span at load (`.subsetLdRefToRange`) and to its own surviving +# variants at the end of QC (`.subsetLdRefToIds`). A QTL and a GWAS collection # put through `summaryStatsQc` independently therefore diverge by construction, # which is the normal case rather than a mistake. Every downstream LD lookup -# matches by variant id (`.ldFromSketch`), never by position in the panel, so +# matches by variant id (`.ldFromRef`), never by position in the panel, so # divergent variant sets cost only the variants one side lacks. What would not # be harmless -- two genuinely different reference panels -- is what -# `.ldSketchCheckContent` catches, by sample set and by allele coding. -.ldSketchCheckShape <- function(qtlLd, gwasLd, pipelineName, between) { - if (!.ldIsPanel(qtlLd) || !.ldIsPanel(gwasLd)) { +# `.ldRefCheckContent` catches, by sample set and by allele coding. +.ldRefCheckShape <- function(qtlLd, gwasLd, pipelineName, between) { + if (!.ldIsReference(qtlLd) || !.ldIsReference(gwasLd)) { + msg <- glue( + "{pipelineName}: ldReference slots{between} must both be genotype ", + "panels or LdMatrix objects for the cross-pipeline LD reference ", + "check." + ) + abort(msg) + } + kinds <- c(.ldRefKind(qtlLd), .ldRefKind(gwasLd)) + if (kinds[[1L]] != kinds[[2L]]) { msg <- glue( - "{pipelineName}: ldSketch slots{between} must both be genotype ", - "panels for the cross-pipeline LD reference check." + "{pipelineName}: one side's ldReference is {kinds[[1L]]} and ", + "the other's {kinds[[2L]]}{between}; use the same LD reference ", + "on both." ) abort(msg) } } +# What kind of LD reference `x` is, in words, for messages that compare two. +# @noRd +.ldRefKind <- function(x) { + if (.ldIsMatrixRef(x)) { + return("an LdMatrix") + } + if (.ldIsMixtureRef(x)) { + return("a GenotypeMixture") + } + "a genotype panel" +} + # The (chrom, position, allele-pair) key the two panels are compared on. The # allele pair is order-insensitive, so an A1/A2 swap keys to the SAME variant # and is then reported as an allele-coding difference rather than looking like # two unrelated variants that happen not to overlap. A panel carrying no allele # columns falls back to chrom:position, which is all it can be keyed on. # @noRd -.ldSketchVariantKeys <- function(x) { - gr <- .ldSketchRanges(x) +.ldRefVariantKeys <- function(x) { + gr <- .ldRefRanges(x) mc <- S4Vectors::mcols(gr) stem <- str_c( canonChrom(as.character(GenomicRanges::seqnames(gr))), @@ -1717,8 +1762,8 @@ loadLdFromGenotype <- function( # The panel's A1 (effect / counted) allele, which fixes the sign of every # correlation the variant takes part in. # @noRd -.ldSketchA1 <- function(x) { - as.character(S4Vectors::mcols(.ldSketchRanges(x))$A1) +.ldRefA1 <- function(x) { + as.character(S4Vectors::mcols(.ldRefRanges(x))$A1) } # A shared variant whose A1/A2 are swapped between the panels is the same @@ -1726,7 +1771,7 @@ loadLdFromGenotype <- function( # in sign wherever it appears. That is a different reference, not a trimming # difference, and it is an error. # @noRd -.ldSketchCheckAlleleCoding <- function( +.ldRefCheckAlleleCoding <- function( qtlLd, gwasLd, qIdx, @@ -1734,18 +1779,18 @@ loadLdFromGenotype <- function( pipelineName, between ) { - qA1 <- .ldSketchA1(qtlLd)[qIdx] - gA1 <- .ldSketchA1(gwasLd)[gIdx] + qA1 <- .ldRefA1(qtlLd)[qIdx] + gA1 <- .ldRefA1(gwasLd)[gIdx] if (length(qA1) == 0L || length(gA1) == 0L) { return(invisible(NULL)) } nSwapped <- sum(qA1 != gA1, na.rm = TRUE) if (nSwapped > 0L) { msg <- glue( - "{pipelineName}: {nSwapped} variant(s) present in both ldSketch ", - "panels carry swapped A1/A2 alleles{between}, so the two panels ", - "code their LD in opposite directions; use the same ldSketch on ", - "both." + "{pipelineName}: {nSwapped} variant(s) present in both ", + "ldReference panels carry swapped A1/A2 alleles{between}, so the ", + "two panels code their LD in opposite directions; use the same ", + "ldReference on both." ) abort(msg) } @@ -1756,20 +1801,21 @@ loadLdFromGenotype <- function( # so it is reported once per session rather than on every call: ctwasPipeline # and colocboostPipeline run this check once per region / per bundle. # @noRd -.ldSketchReportOverlap <- function(nQ, nG, nShared, pipelineName, between) { +.ldRefReportOverlap <- function(nQ, nG, nShared, pipelineName, between) { if (nShared == nQ && nShared == nG) { return(invisible(NULL)) } msg <- glue( - "{pipelineName}: the two ldSketch panels share {nShared} variant(s) ", - "of {nQ} (QTL side) and {nG} (GWAS side){between}. LD is looked up ", - "per variant, so only the shared ones contribute. Differing variant ", - "sets are expected when the two sides were QC'd separately." + "{pipelineName}: the two ldReference panels share {nShared} ", + "variant(s) of {nQ} (QTL side) and {nG} (GWAS side){between}. LD is ", + "looked up per variant, so only the shared ones contribute. ", + "Differing variant sets are expected when the two sides were QC'd ", + "separately." ) warn( msg, .frequency = "once", - .frequency_id = str_c("pecotmrLdSketchOverlap-", pipelineName) + .frequency_id = str_c("pecotmrLdReferenceOverlap-", pipelineName) ) invisible(NULL) } @@ -1778,9 +1824,9 @@ loadLdFromGenotype <- function( # fails is no overlap at all (two unrelated panels) or a shared variant whose # alleles are swapped. # @noRd -.ldSketchCheckOverlap <- function(qtlLd, gwasLd, pipelineName, between) { - qKey <- .ldSketchVariantKeys(qtlLd) - gKey <- .ldSketchVariantKeys(gwasLd) +.ldRefCheckOverlap <- function(qtlLd, gwasLd, pipelineName, between) { + qKey <- .ldRefVariantKeys(qtlLd) + gKey <- .ldRefVariantKeys(gwasLd) # An emptied panel -- what a zero-variant object carries, since it # references no LD -- contradicts nothing, so there is nothing to compare. if (length(qKey) == 0L || length(gKey) == 0L) { @@ -1790,13 +1836,13 @@ loadLdFromGenotype <- function( shared <- which(!is.na(idx)) if (length(shared) == 0L) { msg <- glue( - "{pipelineName}: the two ldSketch panels share no variant", + "{pipelineName}: the two ldReference panels share no variant", "{between} ({length(qKey)} vs {length(gKey)} variants); they ", "describe different LD references." ) abort(msg) } - .ldSketchCheckAlleleCoding( + .ldRefCheckAlleleCoding( qtlLd, gwasLd, shared, @@ -1804,248 +1850,118 @@ loadLdFromGenotype <- function( pipelineName, between ) - .ldSketchReportOverlap( + .ldRefReportOverlap( length(qKey), length(gKey), length(shared), pipelineName, between ) + invisible(list(qIdx = shared, gIdx = idx[shared])) } -# Panels must describe the same reference panel: the same samples, and the same -# allele coding on the variants they share. Their variant SETS need not agree -# -- see `.ldSketchCheckShape` for why. -.ldSketchCheckContent <- function(qtlLd, gwasLd, pipelineName, between) { - qIds <- .ldSketchSampleIds(qtlLd) - gIds <- .ldSketchSampleIds(gwasLd) - if (!identical(qIds, gIds)) { +# Two LdMatrix objects describe the same LD reference when they agree on the +# LD among the variants they share -- what two QC'd subsets of one matrix do, +# and two unrelated matrices do not. Checked on an evenly spaced subset of the +# shared variants, as validity checks symmetry, so the cost does not grow with +# the overlap. +# @noRd +.ldRefCheckSameLd <- function(qtlLd, gwasLd, shared, pipelineName, between) { + if (is.null(shared)) { + return(invisible(NULL)) + } + if (!.ldmAgreesOn(qtlLd, gwasLd, shared$qIdx, shared$gIdx)) { msg <- glue( - "{pipelineName}: ldSketch panels have different sample sets", - "{between}; use the same ldSketch on both." + "{pipelineName}: the two LdMatrix references disagree on the LD ", + "among the variants they share{between}; they describe different ", + "LD references." ) abort(msg) } - .ldSketchCheckOverlap(qtlLd, gwasLd, pipelineName, between) -} - -.requireMatchingLdSketches <- function( - qtlLd, - gwasLd, - pipelineName, - label = NULL, - nullPolicy = c("qtl-required", "lenient") -) { - nullPolicy <- arg_match(nullPolicy) - if (.ldSketchNullGuard(qtlLd, gwasLd, pipelineName, label, nullPolicy)) { - return(invisible(NULL)) - } - between <- if (!is.null(label)) { - glue(" between `{label}` and gwas inputs", .trim = FALSE) - } else { - "" - } - .ldSketchCheckShape(qtlLd, gwasLd, pipelineName, between) - .ldSketchCheckContent(qtlLd, gwasLd, pipelineName, between) invisible(NULL) } -# ---------- LD sketch: genotype loading ---------- - -#' HWE-based standardization of a genotype matrix -#' -#' Centers by 2*alleleFreq, scales by sqrt(2*alleleFreq*(1-alleleFreq)). Assumes -#' monomorphic variants have already been removed. -#' -#' @param X Numeric genotype matrix (n x p). -#' @param alleleFreq Numeric vector of allele frequencies (length p). -#' @return Standardized matrix (n x p). -#' @noRd -standardizeGenotypeHwe <- function(X, alleleFreq) { - Xstd <- sweep(X, 2, 2 * alleleFreq) - sweep(Xstd, 2, sqrt(2 * alleleFreq * (1 - alleleFreq)), "/") -} - - -# ---------- Internal: load LD from pre-computed blocks ---------- - -#' Load pre-computed LD from block-based metadata files. -#' @importFrom purrr map_chr map_int map_dbl -#' @noRd -# --- loadLdFromBlocks helpers ----------------------------------------------- - -# One block's record: the region-extracted matrix, its variants, and the -# chromosome it sits on (falling back to the requested region's when the -# block contributed nothing). -# -# A RECORD rather than a position in three parallel lists: the filter and the -# metadata builder below would otherwise have to keep four sequences in the -# same order by hand, and a slip there would silently attach one block's -# chromosome to another block's variants. -# @noRd -.loadLdOneBlock <- function( - j, - ldFilePaths, - bimFilePaths, - intersectedLdFiles, - extractCoordinates -) { - proc <- processLdMatrix(ldFilePaths[[j]], bimFilePaths[[j]]) - extracted <- extractLdForRegion( - ldMatrix = proc$ldMatrix, - variants = proc$ldVariants, - region = intersectedLdFiles$region, - extractCoordinates = extractCoordinates - ) - blockVariants <- extracted$extractedLdVariants - list( - matrix = extracted$extractedLdMatrix, - variants = blockVariants, - chrom = if (nrow(blockVariants) > 0) { - as.character(blockVariants$chrom[[1L]]) - } else { - as.character(intersectedLdFiles$region$chrom) - } - ) -} - -# Load + region-extract each LD block, one record per block. -.loadLdBlocksLoop <- function( - ldFilePaths, - bimFilePaths, - intersectedLdFiles, - extractCoordinates -) { - map( - seq_along(ldFilePaths), - .loadLdOneBlock, - ldFilePaths = ldFilePaths, - bimFilePaths = bimFilePaths, - intersectedLdFiles = intersectedLdFiles, - extractCoordinates = extractCoordinates - ) -} - -# Drop blocks with no variants in the region (error if none remain). -.loadLdFilterEmpty <- function(blocks) { - nonEmpty <- map_lgl(map(blocks, "variants"), .ldBlockHasVariants) - if (!any(nonEmpty)) { - abort("No variants found in any LD block for the specified region.") - } - if (any(!nonEmpty)) { - nEmpty <- sum(!nonEmpty) +# Two mixtures describe the same LD reference when they average the same +# panels (by their samples) with the same weights. +# @noRd +.ldRefCheckSameMixture <- function(qtlLd, gwasLd, pipelineName, between) { + if (!.gmSameMixture(qtlLd, gwasLd)) { msg <- glue( - "Removing {nEmpty} empty LD block(s) with no variants in ", - "the region." + "{pipelineName}: the two GenotypeMixture references{between} ", + "average different panels or weight them differently; use the ", + "same LD reference on both." ) - inform(msg) + abort(msg) } - blocks[nonEmpty] -} - -# Per-block metadata (id, chrom, span, size, index range in the merged matrix). -.loadLdBlockMetadata <- function(blocks, ldVariants) { - variants <- map(blocks, "variants") - blockVariants <- map(variants, "variants") - blockPositions <- map(variants, "pos") - tibble( - blockId = seq_along(blocks), - chrom = map_chr(blocks, "chrom"), - blockStart = map_dbl(blockPositions, min), - blockEnd = map_dbl(blockPositions, max), - size = map_int(blockVariants, length), - startIdx = map_int( - blockVariants, - .ldBlockStartIdx, - ldVariants = ldVariants - ), - endIdx = map_int( - blockVariants, - .ldBlockEndIdx, - ldVariants = ldVariants - ) - ) + invisible(NULL) } -# Build the reference panel: variant ids + merged per-variant annotations, -# deriving variance from nSample + allele_freq when it is otherwise absent. -# One annotation column aligned to the panel's variant order. +# TRUE when two LdMatrix objects hold the same LD among the variants at +# `xIdx` in one and `yIdx` in the other (matched pairs, same allele coding). +# Compared on an evenly spaced subset, so the cost does not grow with the +# overlap. # @noRd -.ldAnnotationColumn <- function(col, mergedVariantList, ids) { - mergedVariantList[[col]][match(ids, mergedVariantList$variants)] +.ldmAgreesOn <- function(x, y, xIdx, yIdx, tol = 1e-6) { + n <- length(xIdx) + if (n == 0L) { + return(TRUE) + } + probe <- unique(round(seq(1, n, length.out = min(n, 200L)))) + xR <- ldMatrix(x)[xIdx[probe], xIdx[probe], drop = FALSE] + yR <- ldMatrix(y)[yIdx[probe], yIdx[probe], drop = FALSE] + max(abs(xR - yR)) <= tol } -.loadLdRefPanel <- function(ldMatrix, extractedLdVariantsList, nSample) { - ids <- rownames(ldMatrix) - mergedVariantList <- bind_rows(extractedLdVariantsList) - annotations <- intersect( - c("allele_freq", "variance", "n_nomiss"), - colnames(mergedVariantList) - ) - panel <- mutate( - parseVariantId(ids), - variant_id = ids, - !!!set_names( - map( - annotations, - .ldAnnotationColumn, - mergedVariantList = mergedVariantList, - ids = ids - ), - annotations +# Panels must describe the same reference panel: the same samples, and the same +# allele coding on the variants they share. Two LdMatrix objects must agree on +# the LD they share instead, having no samples to compare. Their variant SETS +# need not agree -- see `.ldRefCheckShape` for why. +.ldRefCheckContent <- function(qtlLd, gwasLd, pipelineName, between) { + if (.ldIsMatrixRef(qtlLd)) { + shared <- .ldRefCheckOverlap(qtlLd, gwasLd, pipelineName, between) + return( + .ldRefCheckSameLd(qtlLd, gwasLd, shared, pipelineName, between) ) - ) - needVar <- !is_in("variance", colnames(panel)) || all(is.na(panel$variance)) - if ( - is.null(nSample) || - !needVar || - !is_in("allele_freq", colnames(panel)) - ) { - return(panel) } - p <- panel$allele_freq - mutate( - panel, - variance = 2 * p * (1 - p) * nSample / (nSample - 1), - n_nomiss = nSample - ) + if (.ldIsMixtureRef(qtlLd)) { + .ldRefCheckSameMixture(qtlLd, gwasLd, pipelineName, between) + return(.ldRefCheckOverlap(qtlLd, gwasLd, pipelineName, between)) + } + qIds <- .ldRefSampleIds(qtlLd) + gIds <- .ldRefSampleIds(gwasLd) + if (!identical(qIds, gIds)) { + msg <- glue( + "{pipelineName}: ldReference panels have different sample sets", + "{between}; use the same ldReference on both." + ) + abort(msg) + } + .ldRefCheckOverlap(qtlLd, gwasLd, pipelineName, between) } -loadLdFromBlocks <- function( - ldMetaFilePath, - region, - extractCoordinates = NULL, - nSample = NULL +.requireMatchingLdRefs <- function( + qtlLd, + gwasLd, + pipelineName, + label = NULL, + nullPolicy = c("qtl-required", "lenient") ) { - intersectedLdFiles <- regionalLdMeta(ldMetaFilePath, region) - ldFilePaths <- intersectedLdFiles$intersections$LD_file_paths - bimFilePaths <- intersectedLdFiles$intersections$bimFilePaths - blocks <- .loadLdBlocksLoop( - ldFilePaths, - bimFilePaths, - intersectedLdFiles, - extractCoordinates - ) - kept <- .loadLdFilterEmpty(blocks) - keptVariants <- map(kept, "variants") - ldMatrix <- createLdMatrix( - ldMatrices = map(kept, "matrix"), - variants = keptVariants - ) - ldVariants <- rownames(ldMatrix) - blockMetadata <- .loadLdBlockMetadata(kept, ldVariants) - refPanel <- .loadLdRefPanel(ldMatrix, keptVariants, nSample) - variantsGr <- .refPanelToGranges(refPanel) - LdData( - correlation = ldMatrix, - genotypeHandle = NULL, - snpIdx = NULL, - variants = variantsGr, - blockMetadata = blockMetadata, - nSamples = if (is.null(nSample)) 0L else as.integer(nSample) - ) + nullPolicy <- arg_match(nullPolicy) + if (.ldRefNullGuard(qtlLd, gwasLd, pipelineName, label, nullPolicy)) { + return(invisible(NULL)) + } + between <- if (!is.null(label)) { + glue(" between `{label}` and gwas inputs", .trim = FALSE) + } else { + "" + } + .ldRefCheckShape(qtlLd, gwasLd, pipelineName, between) + .ldRefCheckContent(qtlLd, gwasLd, pipelineName, between) + invisible(NULL) } +# ---------- Variant lookups against an LD reference on disk ---------- + #' Filter variants by LD Reference #' #' Filters a vector of variant IDs to those present in the LD reference panel. @@ -2108,390 +2024,7 @@ filterVariantsByLdReference <- function( list(data = variantIds[keepIndices], idx = keepIndices) } -#' Partition LD Matrix into Block-Specific Matrices -#' -#' This function takes the output from loadLdMatrix and partitions the combined -#' LD matrix into a list of smaller matrices based on the block_indices, making -#' it easier to work with large LD matrices that span multiple blocks. -#' -#' @param ldData An \code{LdData} S4 object as returned by -#' \code{loadLdMatrix()}. -#' @param mergeSmallBlocks Logical, whether to merge blocks smaller than -#' minMergedBlockSize (default: TRUE). -#' @param minMergedBlockSize Integer, minimum number of variants for a block -#' after merging (default: 500). -#' @param maxMergedBlockSize Integer, maximum number of variants in a block -#' after merging (default: 10000). -#' -#' @return returns a list containing: -#' \describe{ -#' \item{ldMatrices}{A list of matrices, each representing LD for a specific -#' block.} -#' \item{variantIndices}{A data frame that maps variant IDs to their -#' corresponding block.} -#' \item{blockMetadata}{Information about each block including size, -#' chromosome, start and end positions.} -#' } -#' @noRd -# --- partitionLdMatrix helpers ---------------------------------------------- - -# Reject empty/NULL matrices; align row/col names to the variant ids. -.partitionValidateMatrix <- function(combinedMatrix, variantIds) { - if ( - is.null(combinedMatrix) || - nrow(combinedMatrix) == 0 || - ncol(combinedMatrix) == 0 - ) { - abort("Empty or NULL LD matrix provided.") - } - wanted <- list(variantIds, variantIds) - if (!identical(dimnames(combinedMatrix), wanted)) { - return(`dimnames<-`(combinedMatrix, wanted)) - } - combinedMatrix -} - -# Drop blocks with invalid/out-of-range indices; renumber the survivors. -.partitionFilterBlocks <- function(blockMetadata, nVariants) { - validBlocks <- map_lgl( - seq_along(blockMetadata), - .ldBlockValid, - blockMetadata = blockMetadata, - nVariants = nVariants - ) - if (!any(validBlocks)) { - msg <- glue( - "No valid LD blocks found. All block indices are out of ", - "range or empty." - ) - abort(msg) - } - if (any(!validBlocks)) { - nInvalid <- sum(!validBlocks) - msg <- glue( - "Removing {nInvalid} LD block(s) with invalid or ", - "out-of-range indices." - ) - inform(msg) - kept <- blockMetadata[validBlocks] - kept$blockId <- seq_along(kept) - return(kept) - } - blockMetadata -} - -#' @importFrom checkmate assertClass -partitionLdMatrix <- function( - ldData, - mergeSmallBlocks = TRUE, - minMergedBlockSize = 500, - maxMergedBlockSize = 10000 -) { - assertClass(ldData, "LdData") - variantIds <- variantIds(ldData) - combinedMatrix <- .partitionValidateMatrix( - ldMatrix(ldData), - variantIds - ) - # The slot is always a GRanges now, so no flattening: every consumer - # below reads it as one (mcols via `$`, blocks via `[` and length()). - blocks <- .partitionFilterBlocks( - blockMetadata(ldData), - length(variantIds) - ) - # Validate the block structure of the matrix (skip if only one block). - if (length(blocks) > 1) { - validateBlockStructure(combinedMatrix, blocks, variantIds) - } - merging <- mergeSmallBlocks && - any(blocks$size < minMergedBlockSize) && - length(blocks) > 1 - blockMetadata <- if (merging) { - mergeBlocks(blocks, minMergedBlockSize, maxMergedBlockSize) - } else { - blocks - } - extractBlockMatrices(combinedMatrix, blockMetadata, variantIds) -} - -# Blocks must not overlap. The merge logic only ever considers i - 1 and -# i + 1, so a block's position in the table has to mean its position on the -# chromosome; that held by convention -- the loaders sort by position -- but -# nothing checked it, and a violation would silently merge non-neighbours. -# As a GRanges it is one call. Width-0 blocks are skipped: they mark an -# out-of-range index range that .partitionFilterBlocks() drops anyway. -# @noRd -.ldBlockOrderAssert <- function(blockMetadata) { - spanned <- blockMetadata[GenomicRanges::width(blockMetadata) > 0L] - if (length(spanned) < 2L || GenomicRanges::isDisjoint(spanned)) { - return(invisible(NULL)) - } - abort( - "LD blocks overlap: each block must cover a span of its own." - ) -} - -# Every (i, j) block pair with i < j. -# @noRd -.ldUpperPairs <- function(nBlocks) { - grid <- expand.grid(i = seq_len(nBlocks), j = seq_len(nBlocks)) - grid[grid$i < grid$j, , drop = FALSE] -} - -# @noRd -.blockPairMessagesAt <- function( - k, - pairs, - blockMetadata, - matrix, - variantIds, - n -) { - .blockPairMessages( - pairs$i[[k]], - pairs$j[[k]], - blockMetadata, - matrix, - variantIds, - n - ) -} - -# Concatenate per-item message vectors, empty-safe. -# @noRd -.ldConcatChr <- function(pieces) { - if (length(pieces) == 0L) { - return(character(0)) - } - as.character(list_c(pieces)) -} - -#' Validate that cross-block entries are zero (excluding boundary variants). -#' @noRd -validateBlockStructure <- function(matrix, blockMetadata, variantIds) { - .ldBlockOrderAssert(blockMetadata) - n <- length(variantIds) - pairs <- .ldUpperPairs(length(blockMetadata)) - msgs <- .ldConcatChr(map( - seq_len(nrow(pairs)), - .blockPairMessagesAt, - pairs = pairs, - blockMetadata = blockMetadata, - matrix = matrix, - variantIds = variantIds, - n = n - )) - if (length(msgs) > 0) { - msgList <- str_flatten(msgs, collapse = "\n") - msg <- glue( - "Matrix lacks expected block structure:\n{msgList}", - .trim = FALSE - ) - abort(msg) - } -} - -# Overlap-consistency messages for one block pair (i, j): out-of-range indices, -# or non-zero cross-block correlation with boundary variants excluded. Returns a -# (possibly empty) character vector. -# @noRd -.blockPairMessages <- function(i, j, blockMetadata, matrix, variantIds, n) { - si <- blockMetadata$startIdx[i] - ei <- blockMetadata$endIdx[i] - sj <- blockMetadata$startIdx[j] - ej <- blockMetadata$endIdx[j] - if (si > n || ei > n || sj > n || ej > n) { - return(str_c( - "Block indices out of range for blocks", - i, - "and", - j, - sep = " " - )) - } - # Exclude boundary variants (potential overlaps) - vi <- variantIds[si:(ei - 1)] - vj <- variantIds[(sj + 1):ej] - maxVal <- max(abs(matrix[vi, vj, drop = FALSE])) - if (maxVal <= 1e-10) { - return(character(0)) - } - str_c( - "Non-zero correlation between blocks", - i, - "and", - j, - "- max:", - maxVal, - sep = " " - ) -} - -#' Can blocks `i` and `j` of `blockMetadata` merge (same chrom, combined size -#' within `maxSize`)? Indexes the columns directly rather than slicing rows. -#' @noRd -canMerge <- function(blockMetadata, i, j, maxSize) { - chrom <- as.character(GenomicRanges::seqnames(blockMetadata)) - chrom[i] == chrom[j] && - (blockMetadata$size[i] + blockMetadata$size[j]) <= maxSize -} - -#' @noRd -mergeTwoBlocks <- function(blockMetadata, idx1, idx2) { - if (idx1 > idx2) { - tmp <- idx1 - idx1 <- idx2 - idx2 <- tmp - } - merged <- blockMetadata - merged$endIdx[idx1] <- blockMetadata$endIdx[idx2] - merged$size[idx1] <- blockMetadata$size[idx1] + - blockMetadata$size[idx2] - # The merged block spans both, so its RANGE has to grow with its index - # range. While this was a data.frame the two could drift apart unnoticed, - # because nothing read blockStart / blockEnd. - GenomicRanges::end(merged)[idx1] <- - GenomicRanges::end(blockMetadata)[idx2] - merged <- merged[-idx2] - merged$blockId <- seq_along(merged) - merged -} - -#' Find blocks below minSize and identify the best neighbor to merge with. -#' @noRd -findMergeCandidates <- function(blockMetadata, minSize, maxSize) { - found <- compact(map( - seq_along(blockMetadata), - .ldMergeCandidateFor, - blockMetadata = blockMetadata, - minSize = minSize, - maxSize = maxSize - )) - if (length(found) == 0L) { - return(tibble(block_idx = integer(), merge_with = integer())) - } - bind_rows(found) -} - -# Which neighbour block `i` should merge into (the smaller one when both -# qualify), or NULL when it is big enough already or neither neighbour can -# take it. -# @noRd -.ldMergeCandidateFor <- function(i, blockMetadata, minSize, maxSize) { - if (blockMetadata$size[i] >= minSize) { - return(NULL) - } - prevOk <- i > 1 && canMerge(blockMetadata, i, i - 1, maxSize) - nextOk <- i < length(blockMetadata) && - canMerge(blockMetadata, i, i + 1, maxSize) - mergeWith <- if (prevOk && nextOk) { - if (blockMetadata$size[i - 1] <= blockMetadata$size[i + 1]) { - i - 1 - } else { - i + 1 - } - } else if (prevOk) { - i - 1 - } else if (nextOk) { - i + 1 - } else { - return(NULL) - } - tibble(block_idx = i, merge_with = mergeWith) -} - -#' Iteratively merge blocks below minSize with their smallest neighbor. -#' @noRd -mergeBlocks <- function(blockMetadata, minSize, maxSize) { - if (length(blockMetadata) <= 1) { - return(blockMetadata) - } - candidates <- findMergeCandidates(blockMetadata, minSize, maxSize) - if (nrow(candidates) == 0) { - return(blockMetadata) - } - # Each merge changes which blocks are still too small, so this is a fixed - # point: recurse on the merged metadata rather than rebinding it. - mergeBlocks( - mergeTwoBlocks( - blockMetadata, - candidates$block_idx[1], - candidates$merge_with[1] - ), - minSize, - maxSize - ) -} - -# Helper function to extract block matrices -# Extract one block's submatrix + mapping (NULL to skip empty/OOB blocks). -.extractOneBlock <- function(matrix, variantIds, startIdx, endIdx, i) { - if (endIdx < startIdx) { - return(NULL) - } - if (startIdx > length(variantIds) || endIdx > length(variantIds)) { - msg <- glue( - "Block {i} has indices outside the range of variantIds. ", - "Skipping." - ) - warn(msg) - return(NULL) - } - blockVariants <- variantIds[startIdx:endIdx] - list( - matrix = matrix[blockVariants, blockVariants, drop = FALSE], - mapping = tibble( - variant_id = blockVariants, - blockId = i - ) - ) -} - -# @noRd -.ldExtractBlockAt <- function(i, matrix, variantIds, blockMetadata) { - .extractOneBlock( - matrix, - variantIds, - blockMetadata$startIdx[i], - blockMetadata$endIdx[i], - i - ) -} - -# `x[[i]] <- v` in a loop never extends past the last assigned position, so -# trailing skipped blocks leave no entry at all. -# @noRd -.ldTrimTrailingNull <- function(xs) { - filled <- which(!map_lgl(xs, is.null)) - if (length(filled) == 0L) { - return(list()) - } - xs[seq_len(max(filled))] -} - -extractBlockMatrices <- function(matrix, blockMetadata, variantIds) { - blocks <- map( - seq_along(blockMetadata), - .ldExtractBlockAt, - matrix = matrix, - variantIds = variantIds, - blockMetadata = blockMetadata - ) - kept <- compact(blocks) - mappings <- map(kept, "mapping") - list( - # A skipped block leaves a hole, as `ldMatrices[[i]] <- ...` did: - # positions stay aligned with blockMetadata rows. - ldMatrices = .ldTrimTrailingNull(map(blocks, "matrix")), - variantIndices = if (length(mappings) == 0L) { - tibble(variant_id = character(), blockId = integer()) - } else { - bind_rows(mappings) - }, - blockMetadata = blockMetadata - ) -} - +# ---------- LD matrix checks and repair ---------- # The PSD repair `method` asks for, or the matrix unchanged when it is # already positive definite. Returns list(R, methodApplied). @@ -2610,19 +2143,18 @@ checkLd <- function( ) } -# hclust (single-linkage) LD pruning: keep one representative per |cor| cluster. +# Single-linkage LD pruning: keep one representative per |cor| cluster. +# Single-linkage clusters cut at 1 - corThres are the connected components +# of the graph joining columns with |cor| >= corThres, so they are found from +# the columns' correlations a stripe of rows at a time +# (ldThresholdComponents()), never the full matrix. .ldPruneHclust <- function(X, corThres, verbose) { - # Engine-call exception: Rfast::cora is a fast drop-in for base cor(), a - # numeric primitive rather than an analysis engine. p <- ncol(X) - if (requireNamespace("Rfast", quietly = TRUE)) { - cor.X <- Rfast::cora(X, large = TRUE) - } else { - cor.X <- cor(X) - } - Sigma.distance <- as.dist(1 - abs(cor.X)) - fit <- hclust(Sigma.distance, method = "single") - clusters <- cutree(fit, h = 1 - corThres) + clusters <- ldThresholdComponents( + .ldStandardize(X), + corThres, + .ldStripeSize() + ) # Keep the first member of each cluster and drop the rest -- which is # exactly the entries that repeat a cluster already seen. ind.delete <- which(duplicated(clusters)) @@ -2695,9 +2227,12 @@ LdPruningOptions <- function(...) { #' Prune columns by pairwise correlation (LD-style prune) #' #' Performs LD pruning using one of two backends. The default \code{"hclust"} -#' backend computes the full correlation matrix, builds a single-linkage -#' hierarchical clustering on the distance (1 - |cor|), and keeps one -#' representative column per cluster. The \code{"snprelate"} backend delegates +#' backend groups the columns as single-linkage hierarchical clustering on the +#' distance (1 - |cor|), cut at 1 - \code{corThres}, would, and keeps the +#' first column of each group. Those groups are the connected components +#' of the graph joining columns with |cor| >= \code{corThres}, found from the +#' correlations a stripe of rows at a time, so the full correlation matrix is +#' never formed. The \code{"snprelate"} backend delegates #' to \code{SNPRelate::snpgdsLDpruning}, which performs a sliding-window greedy #' prune directly on a temporary GDS file. #' @@ -2709,11 +2244,13 @@ LdPruningOptions <- function(...) { #' @param backend Character, one of \code{"hclust"} (default) or #' \code{"snprelate"}. Controls the pruning algorithm: #' \describe{ -#' \item{\code{"hclust"}}{Uses the internal hierarchical-clustering approach -#' with \code{Rfast::cora} (if available) or base \code{cor()}.} +#' \item{\code{"hclust"}}{Single-linkage groups, found as the connected +#' components of the |cor| >= \code{corThres} graph.} #' \item{\code{"snprelate"}}{Requires \pkg{SNPRelate} and \pkg{gdsfmt}. #' Creates a temporary GDS file and runs -#' \code{SNPRelate::snpgdsLDpruning(method = "corr")}.} +#' \code{SNPRelate::snpgdsLDpruning(method = "corr")}. GDS stores +#' genotypes as the integer codes 0, 1 and 2, so fractional dosages are +#' refused rather than rounded.} #' } #' @param verbose Logical. If TRUE, print progress messages. Default FALSE. #' @param methodArgs Extra arguments for @@ -2737,7 +2274,7 @@ LdPruningOptions <- function(...) { #' res <- ldPruneByCorrelation(X, corThres = 0.9) #' ncol(res$X.new) #' -#' @importFrom stats as.dist hclust cutree cor +#' @importFrom stats cor #' @export ldPruneByCorrelation <- function( X, @@ -2782,9 +2319,9 @@ ldPruneByCorrelation <- function( } } -# Write X (rounded to integer genotype codes) to a temporary GDS for SNPRelate. +# Write X, integer genotype codes, to a temporary GDS for SNPRelate. .ldPruneSnprelateCreateGds <- function(tmpGds, X, snpNames, p) { - genoInt <- `storage.mode<-`(round(X), "integer") + genoInt <- `storage.mode<-`(X, "integer") SNPRelate::snpgdsCreateGeno( gds.fn = tmpGds, genmat = t(genoInt), @@ -2799,6 +2336,7 @@ ldPruneByCorrelation <- function( .ldPruneSnprelate <- function(X, corThres, verbose, methodArgs) { .ldPruneSnprelateDeps() + .ldRequireIntegerGenotypes(X, "snprelate", "hclust") p <- ncol(X) snpNames <- colnames(X) %||% str_c("snp", seq_len(p)) tmpGds <- tempfile(fileext = ".gds") @@ -2827,43 +2365,8 @@ ldPruneByCorrelation <- function( list(X.new = X.new, filter.id = keepIds) } -#' Drop collinear columns from a design matrix by a chosen strategy -#' -#' Given a numeric matrix \code{X} and a set of column names known to be -#' involved in linear dependencies, remove one column using one of three -#' strategies. Designed to be called iteratively by -#' \code{\link{enforceDesignFullRank}}, but can be used standalone. -#' -#' @param X Numeric matrix. Must have column names covering -#' \code{problematicCols}. -#' @param problematicCols Character vector of column names in \code{X} that are -#' candidates for removal. If empty, \code{X} is returned unchanged. -#' @param strategy One of \code{"correlation"} (remove the column with the -#' largest sum of absolute pairwise correlations among the candidates; when -#' only two candidates, one is picked at random), \code{"variance"} (remove -#' the lowest-variance candidate), or \code{"responseCorrelation"} (remove -#' the candidate whose correlation with \code{response} has the smallest -#' magnitude). -#' @param response Numeric vector required when \code{strategy = -#' "responseCorrelation"}; the outcome to correlate against. -#' @param verbose Logical. If TRUE, print which column was removed. Default -#' FALSE. -#' -#' @return \code{X} with exactly one column removed (or unchanged if -#' \code{problematicCols} is empty). -#' -#' @examples -#' set.seed(1) -#' X <- matrix(rnorm(100 * 3), 100, 3) -#' X[, 3] <- X[, 1] + X[, 2] -#' colnames(X) <- c("a", "b", "c") -#' dropCollinearColumns(X, problematicCols = c("a", "b", "c"), -#' strategy = "variance") -#' -#' @importFrom stats var cor -#' @keywords internal -#' @noRd # Correlation strategy: drop the most-connected column (random tie-break at 2). +# @noRd .dropCollinearPickCor <- function(X, problematicCols, verbose, seed = NULL) { corMatrix <- `diag<-`( abs(cor(X[, problematicCols, drop = FALSE])), @@ -2937,6 +2440,42 @@ ldPruneByCorrelation <- function( colToRemove } +#' Drop collinear columns from a design matrix by a chosen strategy +#' +#' Given a numeric matrix \code{X} and a set of column names known to be +#' involved in linear dependencies, remove one column using one of three +#' strategies. Designed to be called iteratively by +#' \code{\link{enforceDesignFullRank}}, but can be used standalone. +#' +#' @param X Numeric matrix. Must have column names covering +#' \code{problematicCols}. +#' @param problematicCols Character vector of column names in \code{X} that are +#' candidates for removal. If empty, \code{X} is returned unchanged. +#' @param strategy One of \code{"correlation"} (remove the column with the +#' largest sum of absolute pairwise correlations among the candidates; when +#' only two candidates, one is picked at random), \code{"variance"} (remove +#' the lowest-variance candidate), or \code{"responseCorrelation"} (remove +#' the candidate whose correlation with \code{response} has the smallest +#' magnitude). +#' @param response Numeric vector required when \code{strategy = +#' "responseCorrelation"}; the outcome to correlate against. +#' @param verbose Logical. If TRUE, print which column was removed. Default +#' FALSE. +#' +#' @return \code{X} with exactly one column removed (or unchanged if +#' \code{problematicCols} is empty). +#' +#' @examples +#' set.seed(1) +#' X <- matrix(rnorm(100 * 3), 100, 3) +#' X[, 3] <- X[, 1] + X[, 2] +#' colnames(X) <- c("a", "b", "c") +#' dropCollinearColumns(X, problematicCols = c("a", "b", "c"), +#' strategy = "variance") +#' +#' @importFrom stats var cor +#' @keywords internal +#' @noRd dropCollinearColumns <- function( X, problematicCols, @@ -3314,34 +2853,6 @@ ldClumpByScore <- function( keep } - -# ============================================================================= -# Block-wise LD loaders -# ----------------------------------------------------------------------------- -# High-level helpers that sit on top of `loadLdMatrix` / `processLdMatrix` -# to retrieve per-block LD or genotype matrices on demand. Used by -# downstream pipelines (cTWAS, etc.) that need to walk many LD blocks -# without materializing them all in memory at once. -# ============================================================================= - -#' Extract the LD or genotype matrix from an LdData S4 object. -#' @param ld An LdData object. -#' @param wantGenotype Logical; if TRUE, extract the genotype matrix (via -#' \code{genotypes()}). -#' @return A matrix. -#' @importFrom checkmate assertClass -#' @noRd -extractLdMatrix <- function(ld, wantGenotype = FALSE) { - assertClass(ld, "LdData") - if (wantGenotype && hasGenotypes(ld)) { - return(genotypes(ld)) - } - ldMatrix(ld) -} - - -# ---- Per-block helpers ------------------------------------------------------ - # ============================================================================= # LD correlation matrix from a dosage matrix # ----------------------------------------------------------------------------- @@ -3354,10 +2865,10 @@ extractLdMatrix <- function(ld, wantGenotype = FALSE) { # LD for a block of a genotype panel: read the dosages, then correlate them. # -# The guards are the reason this is a function rather than two lines at the -# call site. A backend that cannot read the block returns NULL, and a -# single-variant block has no correlation structure; both mean "identity", -# and open-coding that in every caller is how one of them ends up omitting it. +# The guard is the reason this is a function rather than two lines at the +# call site: a single-variant block has no correlation structure, so its LD +# is the identity, and open-coding that in every caller is how one of them +# ends up omitting it. # @noRd .computeLdFromPanel <- function( panel, @@ -3368,14 +2879,11 @@ extractLdMatrix <- function(ld, wantGenotype = FALSE) { shrinkage ) { idx <- if (is.null(snpIdx)) { - seq_along(.ldSketchRanges(panel)) + seq_along(.ldRefRanges(panel)) } else { snpIdx } - geno <- .ldSketchDosage(panel, idx) - if (is.null(geno)) { - return(diag(length(idx))) - } + geno <- .ldRefDosage(panel, idx) if (ncol(geno) < 2L) { return(diag(length(idx))) } @@ -3425,21 +2933,30 @@ extractLdMatrix <- function(ld, wantGenotype = FALSE) { "already in memory, which is what onDisk exists to avoid." )) } - fmt <- genotypeFormat(.ldSketchHandle(X)) + fmt <- .ldRefFormat(X) %||% "held in memory" if (fmt != "gds") { abort(glue( "computeLd(onDisk = TRUE) needs a GDS-backed panel; this one is ", "'{fmt}'. Only GDS exposes an on-disk LD routine." )) } + if (.withGdsFile(.ldRefReadPath(X), .gdsFileFormat) != "SNP_ARRAY") { + abort(glue( + "computeLd(onDisk = TRUE) reads SNPRelate's SNP GDS files; ", + "{.ldRefReadPath(X)} is a SeqArray GDS file. Use ", + "computeLd(onDisk = FALSE), which reads its dosages." + )) + } idx <- if (is.null(snpIdx)) { - seq_along(.ldSketchRanges(X)) + seq_along(.ldRefRanges(X)) } else { snpIdx } - # The handle stays here on purpose: the GDS on-disk LD routine reads the - # file directly, which is a seed-level operation with no assay equivalent. - R <- .ldCleanCorrelation(.computeBlockLdGds(.ldSketchHandle(X), idx)) + # The GDS on-disk LD routine reads the file directly, which has no assay + # equivalent: it is handed the file and the variants' own ids. + R <- .ldCleanCorrelation( + .computeBlockLdGds(.ldRefReadPath(X), .ldRefVariantIds(X)[idx]) + ) .ldShrinkToIdentity(R, shrinkage) } @@ -3581,7 +3098,10 @@ extractLdMatrix <- function(ld, wantGenotype = FALSE) { #' \code{cor()} without it) and is both the fastest and the default; #' \code{"snprelate"} and \code{"snpstats"} exist to cross-check it and do #' strictly more work, since each converts the same matrix into its own -#' representation first. +#' representation first. Both store genotypes as the integer codes 0, 1 and +#' 2, so they refuse fractional dosages (imputed, or a stochastic sketch's) +#' rather than round them; \code{"internal"} correlates dosages as they +#' are. #' @param X A numeric dosage matrix (samples x variants), or a genotype panel #' -- a \code{RangedSummarizedExperiment} whose dosage assay reads through #' a genotype handle. @@ -3611,7 +3131,7 @@ extractLdMatrix <- function(ld, wantGenotype = FALSE) { #' \code{dimnames} taken from the block where available. #' @examples #' data(qtlSumStatsExample) -#' panel <- ldSketch(qtlSumStatsExample) +#' panel <- ldReference(qtlSumStatsExample) #' R <- computeLd(panel, snpIdx = 1:5) #' dim(R) #' # A dosage matrix already in memory is correlated directly. @@ -3673,6 +3193,28 @@ computeLd <- function( `dimnames<-`(R, list(nms, nms)) } +# SNPRelate (GDS) and snpStats (SnpMatrix) hold a genotype as a 2-bit code, +# so a dosage outside 0, 1 and 2 -- an imputed or projected one -- would be +# rounded, and its LD changed, without a word. They take genotype codes only; +# dosages go to the backend that correlates them as they are. +# @noRd +.ldRequireIntegerGenotypes <- function(X, backend, instead) { + bad <- !is.na(X) & !is_in(X, c(0, 1, 2)) + if (!any(bad)) { + return(invisible(TRUE)) + } + abort(c( + glue( + "backend = \"{backend}\" stores genotypes as the codes 0, 1 and ", + "2, and {sum(bad)} value(s) here are not one of them." + ), + i = glue( + "Rounding them would change their LD. Use backend = ", + "\"{instead}\", which takes dosages as they are." + ) + )) +} + #' Compute LD via SNPRelate (creates a temporary GDS file from the dosage #' matrix). #' @param X Numeric genotype matrix (samples x SNPs). @@ -3686,12 +3228,12 @@ computeLd <- function( abort("Package 'gdsfmt' is required for backend='snprelate'") } + .ldRequireIntegerGenotypes(X, "snprelate", "internal") tmpGds <- tempfile(fileext = ".gds") on.exit(unlink(tmpGds), add = TRUE) - # Round to integer dosage for GDS (0/1/2) - # 3L is the GDS missing code. - X_int <- replace(`storage.mode<-`(round(X), "integer"), is.na(X), 3L) + # Integer genotype codes 0/1/2, with 3L, the GDS missing code, for NA. + X_int <- replace(`storage.mode<-`(X, "integer"), is.na(X), 3L) snpIds <- colnames(X) %||% seq_len(ncol(X)) sampleIds <- rownames(X) %||% seq_len(nrow(X)) @@ -3726,11 +3268,11 @@ computeLd <- function( if (!requireNamespace("snpStats", quietly = TRUE)) { abort("Package 'snpStats' is required for backend='snpstats'") } + .ldRequireIntegerGenotypes(X, "snpstats", "internal") # snpStats expects counts of the B allele as raw codes: 1=AA, 2=AB, 3=BB, # 0=NA pecotmr dosage is ALT count (0/1/2), so map: 0->1, 1->2, 2->3, NA->0 - shifted <- round(X) + 1L - coded <- pmin(replace(shifted, is.na(X) | shifted < 1L, 0L), 3L) + coded <- replace(X + 1L, is.na(X), 0L) sm <- new("SnpMatrix", `storage.mode<-`(coded, "raw")) raw <- as.matrix(snpStats::ld(sm, stats = "R", depth = ncol(X) - 1L)) @@ -3738,49 +3280,6 @@ computeLd <- function( .ldCleanCorrelation(raw) } -# ---- map/apply helpers (lambda-free callbacks) --------------------------- - -# The integer BP position parsed from a "chrom:pos:a1:a2" variant id. -# @noRd -.ldVariantPos <- function(v) { - as.integer(str_split(v, ":")[[1L]][2]) -} - -# TRUE when a per-block variant table has at least one row. -# @noRd -.ldBlockHasVariants <- function(v) { - nrow(v) > 0 -} - -# The first index of a block's variants in the merged variant order. -# @noRd -.ldBlockStartIdx <- function(v, ldVariants) { - min(match(v, ldVariants)) -} - -# The last index of a block's variants in the merged variant order. -# @noRd -.ldBlockEndIdx <- function(v, ldVariants) { - max(match(v, ldVariants)) -} - -# TRUE when block `i`'s index range is present, finite, and within -# [1, nVariants]. -# @noRd -.ldBlockValid <- function(i, blockMetadata, nVariants) { - s <- blockMetadata$startIdx[i] - e <- blockMetadata$endIdx[i] - sz <- blockMetadata$size[i] - !is.na(s) && - !is.na(e) && - is.finite(s) && - is.finite(e) && - sz > 0 && - s >= 1 && - e >= s && - e <= nVariants -} - #' @rdname PanelFilterParam #' @aliases PanelFilterParam-class #' @exportClass PanelFilterParam @@ -3802,8 +3301,9 @@ setClass( #' missingness default is \code{1} (no filter) rather than \code{0}. #' @param mafCutoff Minor-allele-frequency floor. Default \code{0}. #' @param macCutoff Minor-allele-count floor; the stricter of this and -#' \code{mafCutoff} applies, using the panel's own sample count. Default -#' \code{0}. +#' \code{mafCutoff} applies, using the panel's real sample count -- for a +#' stochastic LD sketch, the one its \code{.afreq} records, not its +#' pseudo-samples. Default \code{0}. #' @param imissCutoff Per-variant missingness ceiling. Default \code{1}, which #' filters nothing and lets the allele-frequency sidecar be read instead of #' materializing dosage. diff --git a/R/manifestLoaders.R b/R/manifestLoaders.R index f3f909f74..a2f009024 100644 --- a/R/manifestLoaders.R +++ b/R/manifestLoaders.R @@ -70,10 +70,6 @@ NULL file.path(base, p) } -# Rename accepted aliases to the canonical camelCase name and validate that all -# `required` canonical columns are present. `aliases` is a named list keyed by -# canonical name; each value is the character vector of accepted source names -# (including the canonical name itself). The first alias present wins. # The QtlDataset pass-through arguments, asserted at the loader so a bad value # is reported against the argument the caller passed rather than surfacing from # QtlDataset's validity several hundred lines later. Types match @@ -84,8 +80,7 @@ NULL assertLogical(scaleResiduals, len = 1L) .assertMethodParam( genotypeFilterParam, - "GenotypeFilterParam", - "genotypeFilter" + "GenotypeFilterParam" ) # Only what the caller actually set: an unset field defers to QtlDataset's # own default and has nothing to check here. @@ -138,6 +133,11 @@ NULL hit[[1L]] } +# Rename accepted aliases to the canonical camelCase name and validate that all +# `required` canonical columns are present. `aliases` is a named list keyed by +# canonical name; each value is the character vector of accepted source names +# (including the canonical name itself). The first alias present wins. +# @noRd .canonManifestCols <- function(df, aliases, required, label) { # Each alias resolves against the ORIGINAL names, so renaming one cannot # change what another matches. @@ -204,149 +204,124 @@ NULL # Genotype-format detection + LD-sketch resolution # ============================================================================= -# Build a single-file / prefix GenotypeHandle, detecting the backend from the -# path. Recognised: .vcf[.gz|.bgz]/.bcf/.gds single files, .bed/.pgen single -# files, and bare PLINK1/PLINK2 prefixes (probed by sidecar existence). -.detectGenotypeFormat <- function(path) { - lower <- str_to_lower(path) - if ( - str_detect(lower, "\\.vcf(\\.b?gz)?$") || - str_ends(lower, "\\.bcf") || - str_ends(lower, "\\.gds") - ) { - return(GenotypeHandle(path = path)) - } - if (str_ends(lower, "\\.bed")) { - return(GenotypeHandle( - plink1Prefix = str_remove( - path, - regex("\\.bed$", ignore_case = TRUE) - ) - )) - } - if (str_ends(lower, "\\.pgen")) { - return(GenotypeHandle( - plink2Prefix = str_remove( - path, - regex("\\.pgen$", ignore_case = TRUE) - ) - )) - } - if (file.exists(str_c(path, ".bed"))) { - return(GenotypeHandle(plink1Prefix = path)) - } - if (file.exists(str_c(path, ".pgen"))) { - return(GenotypeHandle(plink2Prefix = path)) - } - msg <- glue( - "Could not determine genotype format for '{path}' ", - "(expected .bed/.pgen/.vcf[.gz]/.bcf/.gds or a PLINK prefix)." +# The genotype panel of a single file or PLINK prefix, its format told as +# readGenotypes() tells it (.genotypePathFormat()). +.readGenotypePath <- function(path) { + .readGenotypePanel( + path, + format = .requireGenotypeFormat(path, "manifest") ) - abort(msg) } -# Turn an ldSketch specification into a GenotypeHandle. Accepts a prebuilt -# handle, a named chrom -> path vector (genoMeta), or a single string that is -# either a genotype file/prefix or a chrom-sharded genoMeta meta file. -# `chroms` (optional) restricts a chrom-sharded panel to those chromosomes so -# the other per-chromosome shards are never read; it is ignored for a single -# genotype file (which has no shards to skip). -.resolveLdSketch <- function(spec, chroms = NULL) { +# Turn an ldReference specification into a genotype panel, or pass an LdMatrix +# or a mixture through. Accepts a panel (or a bare handle), a named chrom -> +# path vector (genoMeta), or a single string that is either a genotype +# file/prefix or a chrom-sharded genoMeta meta file. `chroms` (optional) +# restricts a chrom-sharded panel to those chromosomes so the other +# per-chromosome shards are never read; it is ignored for a single genotype +# file (which has no shards to skip). +.resolveLdRef <- function(spec, chroms = NULL) { if (is.null(spec)) { return(NULL) } - open <- .openGenotypeHandle(spec) + open <- .openLdRef(spec) if (!is.null(open)) { return(open) } if (is.character(spec) && !is.null(names(spec))) { - return(GenotypeHandle(genoMeta = spec, chroms = chroms)) + return(.chromMetaPanel(spec, chroms)) } if (is.character(spec) && length(spec) == 1L) { - lower <- str_to_lower(spec) - looksLikeGenotype <- str_detect(lower, "\\.vcf(\\.b?gz)?$") || - str_ends(lower, "\\.bcf") || - str_ends(lower, "\\.gds") || - str_ends(lower, "\\.bed") || - str_ends(lower, "\\.pgen") || - file.exists(str_c(spec, ".bed")) || - file.exists(str_c(spec, ".pgen")) - if (looksLikeGenotype) { - return(.detectGenotypeFormat(spec)) + if (!is.null(.genotypePathFormat(spec))) { + return(.readGenotypePath(spec)) } # Otherwise treat it as a chrom-sharded genoMeta meta file. - return(GenotypeHandle(genoMeta = spec, chroms = chroms)) + return(.chromMetaPanel(spec, chroms)) } msg <- glue( - "`ldSketch` must be a genotype panel, a genotype path/prefix, or a ", - "genoMeta spec (named chrom->path vector or meta-file path)." + "`ldReference` must be a genotype panel, a genotype path/prefix, a ", + "genoMeta spec (named chrom->path vector or meta-file path), or an ", + "LdMatrix." ) abort(msg) } -# Resolve the LD sketch SPEC from the (argument, ldSketchPath column) pair, -# without reading any genotype metadata yet. Returns the handle behind an -# already-open panel (when the caller passed one), or the reconciled spec +# An LD reference that is already open -- a genotype panel or a bare handle, +# an LdMatrix or a mixture, as it stands -- or NULL for a spec still to be +# resolved. +# @noRd +.openLdRef <- function(x) { + if (.ldIsMatrixRef(x) || .ldIsMixtureRef(x)) { + return(x) + } + .openGenotypeSource(x) +} + +# Resolve the LD sketch SPEC from the (argument, ldReferencePath column) pair, +# without reading any genotype metadata yet. Returns an already-open panel +# (when the caller passed one) as it is, or the reconciled spec # (a path/prefix or a # genoMeta path/named-vector) for later materialisation. Deferring the read to -# `.materializeLdSketch` lets the loader first learn which chromosomes the +# `.materializeLdRef` lets the loader first learn which chromosomes the # summary statistics cover and skip the panel's other per-chromosome shards. -.resolveLdSketchInput <- function(df, ldSketch, base) { - open <- .openGenotypeHandle(ldSketch) +.resolveLdRefInput <- function(df, ldReference, base) { + open <- .openLdRef(ldReference) if (!is.null(open)) { return(open) } - # is_in guard, not `!is.null(df$ldSketchPath)`: on a tibble `$` for an + # is_in guard, not `!is.null(df$ldReferencePath)`: on a tibble `$` for an # absent column NULLs but WARNS ("Unknown or uninitialised column"), where a - # data.frame was silent. ldSketchPath is optional (LD may come via - # `ldSketch`). - colSpec <- if (!is_in("ldSketchPath", names(df))) { + # data.frame was silent. ldReferencePath is optional (LD may come via + # `ldReference`). + colSpec <- if (!is_in("ldReferencePath", names(df))) { NULL } else { - v <- unique(as.character(df$ldSketchPath[ - !is.na(df$ldSketchPath) & - str_length(as.character(df$ldSketchPath)) > 0L + v <- unique(as.character(df$ldReferencePath[ + !is.na(df$ldReferencePath) & + str_length(as.character(df$ldReferencePath)) > 0L ])) if (length(v) > 1L) { - abort("`ldSketchPath` column must be constant across the manifest.") + abort( + "`ldReferencePath` column must be constant across the manifest." + ) } if (length(v) == 1L) .resolveRel(v, base) else NULL } - spec <- ldSketch %||% colSpec + spec <- ldReference %||% colSpec if ( - !is.null(ldSketch) && + !is.null(ldReference) && !is.null(colSpec) && - !identical(as.character(ldSketch), as.character(colSpec)) + !identical(as.character(ldReference), as.character(colSpec)) ) { msg <- glue( - "`ldSketch` argument disagrees with the manifest ", - "`ldSketchPath` column." + "`ldReference` argument disagrees with the manifest ", + "`ldReferencePath` column." ) abort(msg) } if (is.null(spec)) { msg <- glue( - "`ldSketch` must be provided as an argument or an ", - "`ldSketchPath` column." + "`ldReference` must be provided as an argument or an ", + "`ldReferencePath` column." ) abort(msg) } spec } -# Materialise a resolved ldSketch spec into a GenotypeHandle, reading only the -# shards for `chroms` when the spec is a chrom-sharded panel. A spec that is -# already a GenotypeHandle (the caller passed a prebuilt handle) is returned -# unchanged: its snpInfo is already in memory, so there is no read to restrict. -.materializeLdSketch <- function(spec, chroms) { +# Materialise a resolved ldReference spec into a genotype panel, reading only +# the shards for `chroms` when the spec is a chrom-sharded panel. A spec that is +# already open (the caller passed a panel) is returned unchanged: its variants +# are already in memory, so there is no read to restrict. +.materializeLdRef <- function(spec, chroms) { if (is.null(spec)) { return(NULL) } - open <- .openGenotypeHandle(spec) + open <- .openLdRef(spec) if (!is.null(open)) { return(open) } - .resolveLdSketch(spec, chroms = chroms) + .resolveLdRef(spec, chroms = chroms) } # Canonical chromosomes present across a list of sumstats entry GRanges. NULL / @@ -363,15 +338,15 @@ NULL # LD-sketch containment check (validation only; no filtering) # ============================================================================= -# Canonical chromosomes present in an LD sketch: for a sharded handle these are -# the chromPaths names; for a single-file handle the unique snpInfo chromosomes. -.ldSketchChroms <- function(ldSketch) { - handle <- .ldSketchHandle(ldSketch) - if (length(chromPaths(handle)) > 0L) { - canonChrom(names(chromPaths(handle))) - } else { - unique(.ldSketchChrom(ldSketch)) +# Canonical chromosomes present in an LD reference: for a panel read from a +# per-chromosome manifest these are the manifest's chromosomes; otherwise the +# chromosomes of its variants. +.ldRefChroms <- function(ldReference) { + chromPaths <- .ldRefChromPaths(ldReference) + if (length(chromPaths) > 0L) { + return(canonChrom(names(chromPaths))) } + unique(.ldRefChrom(ldReference)) } # Two-tier containment check for one entry GRanges against the LD sketch: @@ -379,15 +354,15 @@ NULL # * variant tier: match entry variants against the sketch's variants on the # shared chromosomes. Zero overlap -> error; overlap fraction below # `minLdOverlapWarn` -> warning. Never filters. -.checkLdContainment <- function(ldSketch, entryGr, minLdOverlapWarn, label) { +.checkLdContainment <- function(ldReference, entryGr, minLdOverlapWarn, label) { if (length(entryGr) == 0L) { return(invisible(NULL)) } - reqChrom <- .ldContainmentCheckChroms(entryGr, ldSketch, label) - sketchGr <- .ldSketchRanges(ldSketch) + reqChrom <- .ldContainmentCheckChroms(entryGr, ldReference, label) + sketchGr <- .ldRefRanges(ldReference) if (length(sketchGr) == 0L) { msg <- glue( - "{label}: LD sketch carries no variant metadata; ", + "{label}: the LD reference carries no variant metadata; ", "skipping the variant-overlap check." ) warn(msg) @@ -404,16 +379,16 @@ NULL # The entry's chromosomes must all be present in the LD sketch; returns them. # @noRd -.ldContainmentCheckChroms <- function(entryGr, ldSketch, label) { +.ldContainmentCheckChroms <- function(entryGr, ldReference, label) { reqChrom <- unique(canonChrom( as.character(GenomicRanges::seqnames(entryGr)) )) - availChrom <- .ldSketchChroms(ldSketch) + availChrom <- .ldRefChroms(ldReference) missingChrom <- setdiff(reqChrom, availChrom) if (length(missingChrom) > 0L) { msg <- glue( "{label}: chromosome(s) {str_flatten(missingChrom, ', ')} ", - "are absent from the LD sketch ", + "are absent from the LD reference ", "(available: {str_flatten(availChrom, ', ')})." ) abort(msg) @@ -434,7 +409,7 @@ NULL canonChrom(as.character(GenomicRanges::seqnames(sketchGr))), reqChrom ) - # Same matching relation `.ldFromSketch()` will use when the LD is + # Same matching relation `.ldFromRef()` will use when the LD is # actually loaded, palindromes included -- otherwise this counts an A/T # variant as absent, under-reports the overlap and warns about a panel # that will in fact match. @@ -448,7 +423,7 @@ NULL if (nOverlap == 0L) { msg <- glue( "{label}: none of the {length(entryGr)} summary-statistic ", - "variants are present in the LD sketch." + "variants are present in the LD reference." ) abort(msg) } @@ -457,7 +432,7 @@ NULL pct <- sprintf("%.1f", 100 * frac) msg <- glue( "{label}: only {pct}% of summary-statistic variants ", - "({nOverlap}/{length(entryGr)}) are present in the LD sketch." + "({nOverlap}/{length(entryGr)}) are present in the LD reference." ) warn(msg) } @@ -806,9 +781,6 @@ NULL ) } -# Assemble the standardized sumstat data.frame (chrom/pos/SNP/A1/A2/Z, optional -# N / N_CASE / N_CONTROL, and any present BETA/SE/P/MAF/INFO). -# @noRd # The source columns named by explicit mappings, so an auto-detected key never # re-reads a column another key already claimed. # @noRd @@ -866,6 +838,9 @@ NULL keep(sources, .sumstatSourceFound) } +# Assemble the standardized sumstat data.frame (chrom/pos/SNP/A1/A2/Z, optional +# N / N_CASE / N_CONTROL, and any present BETA/SE/P/MAF/INFO). +# @noRd .buildSumstatOut <- function(df, resolved, z, n, mapping, label) { claimed <- .sumstatClaimedCols(mapping) present <- .sumstatOptionalSources(df, mapping, label, claimed) @@ -920,7 +895,8 @@ NULL )) return(invisible(NULL)) } - if (all(is.na(out$AF))) { + # An empty result has no values to be unusable: all() of none is TRUE. + if (length(out$AF) > 0L && all(is.na(out$AF))) { warn(glue( "{label}: effect-allele frequency `af` was declared but its ", "values are all missing/unusable; top_loci$af will be NA." @@ -989,24 +965,25 @@ NULL # Read column `tag` from the GWAS-VCF geno matrix for one sample as numeric, or # NULL when the tag is absent/unmapped. -# @noRd +# # `tag` may name SEVERAL candidate keys in priority order (the spec's key then # the spellings found in the wild), so the first one the file actually carries -# wins. A single string still works -- it is a length-1 candidate list. +# wins. A single string still works -- it is a length-1 candidate list. The +# result is unnamed: geno matrix columns carry variant-id element names that +# the canonical sumstat tibble must not keep (data.frame stripped them). # @noRd .vcfGetField <- function(tag, geno, sample) { hit <- intersect(as.character(tag %||% character(0)), names(geno)) if (length(hit) == 0L) { return(NULL) } - # unname: geno matrix columns carry variant-id element names that the - # canonical sumstat tibble must not keep (data.frame stripped them). unname(as.numeric(geno[[hit[[1L]]]][, sample])) } # Convert a VCF (GWAS-VCF format) into the canonical sumstats data.frame. The # effect allele (A1) is ALT; the other allele (A2) is REF. Stats come from the # per-study FORMAT fields ES/SE/LP/SS/EAF, with Z = ES / SE. +# @noRd .vcfToSumstatDf <- function(vcf, sampleSelect, formatMapping, label) { fmap <- list_modify( .gwasVcfFormatDefaults, @@ -1016,59 +993,66 @@ NULL ) rr <- SummarizedExperiment::rowRanges(vcf) altList <- VariantAnnotation::alt(vcf) - alt <- unname(map_chr(as.list(altList), .mlFirstAlt)) - ref <- unname(as.character(VariantAnnotation::ref(vcf))) - geno <- VariantAnnotation::geno(vcf) sample <- .pickVcfSample(colnames(vcf), sampleSelect, label) - es <- .vcfGetField(fmap$BETA, geno, sample) - se <- .vcfGetField(fmap$SE, geno, sample) - ez <- .vcfGetField(fmap$Z, geno, sample) - lp <- .vcfGetField(fmap$P, geno, sample) - ss <- .vcfGetField(fmap$N, geno, sample) - af <- .vcfGetField(fmap$AF, geno, sample) - eaf <- .vcfGetField(fmap$MAF, geno, sample) - if ((is.null(es) || is.null(se)) && is.null(ez)) { + fld <- map( + fmap[c("BETA", "SE", "Z", "P", "N", "AF", "MAF")], + .vcfGetField, + geno = VariantAnnotation::geno(vcf), + sample = sample + ) + .vcfRequireSumstatFields(fld, label) + z <- .vcfSumstatZ(fld$BETA, fld$SE, fld$Z, length(rr)) + out <- tibble( + chrom = as.character(GenomicRanges::seqnames(rr)), + pos = unname(as.integer(GenomicRanges::start(rr))), + SNP = names(rr), + A1 = unname(map_chr(as.list(altList), .mlFirstAlt)), + A2 = unname(as.character(VariantAnnotation::ref(vcf))), + Z = z$z, + z_supplied = z$supplied, + N = fld$N + ) + mutate(out, !!!.vcfOptionalSumstatCols(fld)) +} + +# A GWAS-VCF must yield a z (supplied, or derivable from ES and SE) and a +# sample size. `fld` is the per-field read of `.vcfToSumstatDf()`. +# @noRd +.vcfRequireSumstatFields <- function(fld, label) { + if ((is.null(fld$BETA) || is.null(fld$SE)) && is.null(fld$Z)) { msg <- glue( "{label}: GWAS-VCF must carry either a supplied z (EZ) or ES and ", "SE to derive one from (configure via `formatMapping`)." ) abort(msg) } - if (is.null(ss)) { + if (is.null(fld$N)) { msg <- glue( "{label}: GWAS-VCF must carry a sample-size FORMAT field ", "(NS, or SS in older files; configure via `formatMapping`)." ) abort(msg) } - z <- .vcfSumstatZ(es, se, ez, length(rr)) - out <- tibble( - chrom = as.character(GenomicRanges::seqnames(rr)), - pos = unname(as.integer(GenomicRanges::start(rr))), - SNP = names(rr), - A1 = alt, - A2 = ref, - Z = z$z, - z_supplied = z$supplied, - N = ss - ) - mutate( - out, - !!!compact(list( - BETA = es, - SE = se, - P = if (!is.null(lp)) 10^(-lp), - AF = af, - # A directionless MAF of its own when the file has one; else - # folded from AF, which is QC-usable and keeps `AF` intact - # alongside it rather than consuming it. - MAF = if (!is.null(eaf)) { - pmin(eaf, 1 - eaf) - } else if (!is.null(af)) { - pmin(af, 1 - af) - } - )) - ) +} + +# The optional sumstat columns a GWAS-VCF may carry, NULL ones dropped. MAF is +# the file's own directionless MAF when it has one; else folded from AF, which +# is QC-usable and keeps `AF` intact alongside it rather than consuming it. +# @noRd +.vcfOptionalSumstatCols <- function(fld) { + eaf <- fld$MAF + af <- fld$AF + compact(list( + BETA = fld$BETA, + SE = fld$SE, + P = if (!is.null(fld$P)) 10^(-fld$P), + AF = af, + MAF = if (!is.null(eaf)) { + pmin(eaf, 1 - eaf) + } else if (!is.null(af)) { + pmin(af, 1 - af) + } + )) } # The z and its provenance, per variant. A supplied `EZ` wins where it has a @@ -1178,11 +1162,14 @@ NULL if (is.null(order) || identical(order, "none")) { return(df) } - have <- map_lgl( + alleleCols <- map( c("A1", "A2"), - function(k) !.mlIsNaOrNull(.resolveSumstatKey(k, df, mapping, label)) + .resolveSumstatKey, + df = df, + mapping = mapping, + label = label ) - if (any(have)) { + if (!all(map_lgl(alleleCols, .mlIsNaOrNull))) { return(df) # a real allele column always wins } idCol <- .resolveSumstatKey("variant_id", df, mapping, label) @@ -1332,13 +1319,15 @@ NULL # holds row identifiers; `transpose = TRUE` handles QTLtools-format inputs # (covariates as rows, samples as columns). .readCovariateMatrix <- function(path, transpose = FALSE) { - raw <- as.data.frame( - readr::read_tsv(path, show_col_types = FALSE, progress = FALSE), - check.names = FALSE + raw <- readr::read_tsv( + path, + show_col_types = FALSE, + progress = FALSE, + name_repair = "minimal" ) m <- `rownames<-`( - `storage.mode<-`(as.matrix(raw[, -1L, drop = FALSE]), "double"), - as.character(raw[[1L]]) + `storage.mode<-`(as.matrix(select(raw, -1L)), "double"), + as.character(pull(raw, 1L)) ) if (transpose) { return(t(m)) @@ -1359,8 +1348,6 @@ NULL ) } -# Read a phenotype BED into an expression matrix (genes x samples) + rowRanges. -# @noRd # Column names (and their case/alias variants) that are metadata, not # expression samples, in a phenotype BED. # @noRd @@ -1382,15 +1369,15 @@ NULL ) } +# Read a phenotype BED into an expression matrix (genes x samples) + rowRanges. +# @noRd .readPhenotypeBed <- function(bedPath) { - bed <- as.data.frame( - readr::read_tsv( - bedPath, - show_col_types = FALSE, - progress = FALSE, - comment = "" - ), - check.names = FALSE + bed <- readr::read_tsv( + bedPath, + show_col_types = FALSE, + progress = FALSE, + comment = "", + name_repair = "minimal" ) chrCol <- intersect(c("#chr", "#chrom", "chrom", "chr"), names(bed))[1L] startCol <- intersect(c("start", "Start"), names(bed))[1L] @@ -1404,12 +1391,12 @@ NULL abort(msg) } meta <- `names<-`( - bed[, c(chrCol, startCol, endCol, geneCol)], + select(bed, all_of(c(chrCol, startCol, endCol, geneCol))), c("chrom", "start", "end", "gene_id") ) sampleCols <- setdiff(names(bed), .bedReservedCols()) expr <- `rownames<-`( - `storage.mode<-`(as.matrix(bed[, sampleCols, drop = FALSE]), "double"), + `storage.mode<-`(as.matrix(select(bed, all_of(sampleCols))), "double"), meta$gene_id ) rr <- `names<-`( @@ -1501,7 +1488,7 @@ NULL ), contexts ) - genoHandle <- .resolveGenoHandle(rows, studyName, base, genotypesOverride) + genotypes <- .resolveGenotypes(rows, studyName, base, genotypesOverride) genoCov <- .resolveGenoCov( rows, studyName, @@ -1512,7 +1499,7 @@ NULL qtlArgs <- c( list( study = studyName, - genotypes = genoHandle, + genotypes = genotypes, phenotypes = phenotypes, genotypeCovariates = genoCov ), @@ -1561,11 +1548,12 @@ NULL .resolveRel(covs[[1L]], base) } -# The genotype handle: an override panel/path, else the study's single -# genotypePath (auto-detecting the format). +# The genotype panel: an override panel (or bare handle) as given, an +# override path, else the study's single genotypePath (auto-detecting the +# format). # @noRd -.resolveGenoHandle <- function(rows, studyName, base, genotypesOverride) { - open <- .openGenotypeHandle(genotypesOverride) +.resolveGenotypes <- function(rows, studyName, base, genotypesOverride) { + open <- .openGenotypeSource(genotypesOverride) if (!is.null(open)) { return(open) } @@ -1582,7 +1570,7 @@ NULL } v[[1L]] } - .detectGenotypeFormat(.resolveRel(spec, base)) + .readGenotypePath(.resolveRel(spec, base)) } # The genotype covariate matrix: an override matrix/path, else the study's @@ -1715,7 +1703,7 @@ loadQtlDatasetFromManifest <- function( nSample = c("nSample", "n_sample"), varY = c("varY", "var_y"), genome = c("genome"), - ldSketchPath = c("ldSketchPath", "ld_sketch_path", "ld_sketch") + ldReferencePath = c("ldReferencePath", "ld_reference_path", "ld_reference") ) .qtlSumStatsManifestAliases <- list( @@ -1738,7 +1726,7 @@ loadQtlDatasetFromManifest <- function( nSample = c("nSample", "n_sample"), varY = c("varY", "var_y"), genome = c("genome"), - ldSketchPath = c("ldSketchPath", "ld_sketch_path", "ld_sketch") + ldReferencePath = c("ldReferencePath", "ld_reference_path", "ld_reference") ) # TRUE if study `i` has usable case/control counts OR a total-N scalar, so a @@ -1758,18 +1746,18 @@ loadQtlDatasetFromManifest <- function( # range. The checks sit between the two steps because containment is only # answerable once the sketch is read, and trimming would hide a miss. # @noRd -.manifestGwasLdSketch <- function( - ldSketchSpec, +.manifestGwasLdRef <- function( + ldReferenceSpec, entries, df, minLdOverlapWarn ) { - materialized <- .materializeLdSketch( - ldSketchSpec, + materialized <- .materializeLdRef( + ldReferenceSpec, .entriesChroms(entries) ) .checkGwasLdContainment(materialized, entries, df, minLdOverlapWarn) - .subsetSketchToRange(materialized, entries) + .subsetLdRefToRange(materialized, entries) } #' @title Load a GwasSumStats collection from a manifest @@ -1782,27 +1770,29 @@ loadQtlDatasetFromManifest <- function( #' \code{study} (required, unique), \code{sumStatsPath} (required), #' \code{columnMapping} (optional), \code{nCase} / \code{nControl} (optional), #' \code{nSample} (optional study-level total N), \code{varY} (optional), and -#' the single-valued \code{genome} / \code{ldSketchPath}. When a row supplies -#' a study-level scalar (\code{nCase} + \code{nControl}, or \code{nSample}), -#' its sumstats file need not carry a per-variant \code{N} column; +#' the single-valued \code{genome} / \code{ldReferencePath}. When a row +#' supplies a study-level scalar (\code{nCase} + \code{nControl}, or +#' \code{nSample}), its sumstats file need not carry a per-variant \code{N} +#' column; #' \code{\link{summaryStatsQc}} fills \code{N} from the scalar. #' @param genome Genome build; reconciled with a \code{genome} column. -#' @param ldSketch A genotype panel (see \code{\link{readGenotypes}}) or a spec -#' (path/prefix/genoMeta); reconciled with an \code{ldSketchPath} column. +#' @param ldReference A genotype panel (see \code{\link{readGenotypes}}) or a +#' spec (path/prefix/genoMeta); reconciled with an \code{ldReferencePath} +#' column. #' @param region Optional \code{chr:start-end} string, GRanges, or one-row #' data.frame restricting the variants read (honoured only for tabix-indexed #' text and bgzipped+tabixed VCF; ignored with a warning otherwise). #' @param minLdOverlapWarn Warn when the fraction of sumstats variants present -#' in the LD sketch falls below this (default 0.5). +#' in the LD reference falls below this (default 0.5). #' @param columnMapping Optional default column mapping (a named list/vector, or #' a path to a YAML file of \code{standardName: sourceName} entries) applied #' when a row has no \code{columnMapping}. #' @param sampleSelect Optional GWAS-VCF FORMAT sample (study) column to read. #' @param formatMapping Optional GWAS-VCF FORMAT tag mapping (canonical stat -> #' FORMAT field), overriding ES/SE/LP/SS/EAF defaults. -#' @param ldBlocks Optional LD-block specification (an \code{LdBlocks}, a -#' \code{GRanges}, a data.frame with \code{chrom}/\code{start}/\code{end}, -#' or a path to such a table). Without it a genome-wide file splits into one +#' @param ldBlocks Optional LD-block specification (a \code{GRanges}, a +#' data.frame with \code{chrom}/\code{start}/\code{end}, or a path to such +#' a table). Without it a genome-wide file splits into one #' element per chromosome; with it, into one element per LD block, which is #' the granularity \code{\link{assembleCtwasInputs}} needs. #' @return A \code{GwasSumStats} object. @@ -1813,12 +1803,12 @@ loadQtlDatasetFromManifest <- function( #' package = "pecotmr"), "protocol_example.LD.chr22") #' manifest <- data.frame(study = "g1", sumStatsPath = gwasTsv) #' loadGwasSumStatsFromManifest(manifest = manifest, genome = "hg38", -#' ldSketch = ldStem, region = "chr22:10000000-19000000") +#' ldReference = ldStem, region = "chr22:10000000-19000000") #' @export loadGwasSumStatsFromManifest <- function( manifest, genome = NULL, - ldSketch = NULL, + ldReference = NULL, region = NULL, minLdOverlapWarn = 0.5, columnMapping = NULL, @@ -1837,7 +1827,7 @@ loadGwasSumStatsFromManifest <- function( abort("GwasSumStats manifest `study` values must be unique.") } genome <- .reconcileScalar(df[["genome"]], genome, "genome") - ldSketchSpec <- .resolveLdSketchInput(df, ldSketch, base) + ldReferenceSpec <- .resolveLdRefInput(df, ldReference, base) ns <- .gwasStudyScalars(df) entries <- map( seq_len(nrow(df)), @@ -1850,8 +1840,8 @@ loadGwasSumStatsFromManifest <- function( formatMapping = formatMapping, ns = ns ) - ldSketch <- .manifestGwasLdSketch( - ldSketchSpec, + ldReference <- .manifestGwasLdRef( + ldReferenceSpec, entries, df, minLdOverlapWarn @@ -1860,7 +1850,7 @@ loadGwasSumStatsFromManifest <- function( # is too coarse for cTWAS; with one, each study becomes one element per LD # block. The constructor does the splitting either way. gwasArgs <- list_assign( - .gwasSumStatsArgs(df, entries, genome, ldSketch, ns), + .gwasSumStatsArgs(df, entries, genome, ldReference, ns), ldBlocks = ldBlocks ) exec(GwasSumStats, !!!gwasArgs) @@ -1926,10 +1916,15 @@ loadGwasSumStatsFromManifest <- function( # Per-study LD-containment checks (deferred until the sketch is materialised). # @noRd -.checkGwasLdContainment <- function(ldSketch, entries, df, minLdOverlapWarn) { +.checkGwasLdContainment <- function( + ldReference, + entries, + df, + minLdOverlapWarn +) { for (i in seq_len(nrow(df))) { .checkLdContainment( - ldSketch, + ldReference, entries[[i]], minLdOverlapWarn, str_c("GwasSumStats[study=", df$study[[i]], "]") @@ -1939,13 +1934,13 @@ loadGwasSumStatsFromManifest <- function( # GwasSumStats() constructor args, including any present study scalars + varY. # @noRd -.gwasSumStatsArgs <- function(df, entries, genome, ldSketch, ns) { +.gwasSumStatsArgs <- function(df, entries, genome, ldReference, ns) { c( list( study = as.character(df$study), entry = entries, genome = genome, - ldSketch = ldSketch + ldReference = ldReference ), compact(list( nCase = ns$nCase, @@ -1998,14 +1993,14 @@ loadGwasSumStatsFromManifest <- function( #' \code{study}, \code{context}, \code{trait} (required), \code{sumStatsPath} #' (required), \code{columnMapping} (optional), \code{nSample} (optional #' tuple-level total N), \code{varY} (optional), and the single-valued -#' \code{genome} / \code{ldSketchPath}. When a row supplies \code{nSample}, +#' \code{genome} / \code{ldReferencePath}. When a row supplies \code{nSample}, #' its sumstats file need not carry a per-variant \code{N} column; #' \code{\link{summaryStatsQc}} fills \code{N} from the scalar. (Unlike the #' GWAS loader, there are no \code{nCase}/\code{nControl} columns: molecular #' QTL traits are quantitative.) #' @param genome Genome build; reconciled with a \code{genome} column. -#' @param ldSketch A genotype panel (see \code{\link{readGenotypes}}) or spec; -#' reconciled with an \code{ldSketchPath} column. +#' @param ldReference A genotype panel (see \code{\link{readGenotypes}}) or +#' spec; reconciled with an \code{ldReferencePath} column. #' @param region,minLdOverlapWarn,columnMapping,sampleSelect,formatMapping As #' for \code{\link{loadGwasSumStatsFromManifest}}. #' @param traitColumn Optional column of the sumstats file naming the trait of @@ -2033,12 +2028,12 @@ loadGwasSumStatsFromManifest <- function( #' manifest <- data.frame(study = "s1", context = "brain", #' trait = "ENSG1", sumStatsPath = tsv) #' loadQtlSumStatsFromManifest(manifest = manifest, genome = "hg38", -#' ldSketch = ldStem, region = "chr22:10000000-19000000") +#' ldReference = ldStem, region = "chr22:10000000-19000000") #' @export loadQtlSumStatsFromManifest <- function( manifest, genome = NULL, - ldSketch = NULL, + ldReference = NULL, region = NULL, minLdOverlapWarn = 0.5, columnMapping = NULL, @@ -2049,14 +2044,9 @@ loadQtlSumStatsFromManifest <- function( ) { variantIdAlleles <- arg_match(variantIdAlleles) base <- .manifestBase(manifest) - df <- .canonManifestCols( - .readManifest(manifest), - .qtlSumStatsManifestAliases, - required = c("study", "context", "trait", "sumStatsPath"), - label = "QtlSumStats" - ) + df <- .qtlSumStatsManifest(manifest) genome <- .reconcileScalar(df[["genome"]], genome, "genome") - ldSketchSpec <- .resolveLdSketchInput(df, ldSketch, base) + ldReferenceSpec <- .resolveLdRefInput(df, ldReference, base) nSample <- .qtlManifestNSample(df) entries <- .loadQtlSumStatsEntries( df, @@ -2069,21 +2059,53 @@ loadQtlSumStatsFromManifest <- function( traitColumn = traitColumn, variantIdAlleles = variantIdAlleles ) - - # Materialise the LD sketch reading only the chromosomes the summary stats - # cover (skips other shards of a chrom-sharded panel), check containment, - # then trim its snpInfo to the summary stats' per-chromosome position span. - materialized <- .materializeLdSketch( - ldSketchSpec, - .entriesChroms(entries) + ldReference <- .manifestQtlLdRef( + ldReferenceSpec, + entries, + df, + minLdOverlapWarn ) - .qtlSumStatsCheckContainment(materialized, entries, df, minLdOverlapWarn) - ldSketch <- .subsetSketchToRange(materialized, entries) - exec( QtlSumStats, - !!!.qtlSumStatsArgs(df, entries, genome, ldSketch, nSample$nSampleCol) + !!!.qtlSumStatsArgs( + df, + entries, + genome, + ldReference, + nSample$nSampleCol + ) + ) +} + +# A QtlSumStats manifest's rows, its columns under their canonical names and +# the required ones present. +# @noRd +.qtlSumStatsManifest <- function(manifest) { + .canonManifestCols( + .readManifest(manifest), + .qtlSumStatsManifestAliases, + required = c("study", "context", "trait", "sumStatsPath"), + label = "QtlSumStats" + ) +} + +# Materialise the LD sketch reading only the chromosomes the summary stats +# cover (skipping the other shards of a chrom-sharded panel), check +# containment, then trim it to the summary stats' per-chromosome position +# span, as .manifestGwasLdRef() does for a GwasSumStats manifest. +# @noRd +.manifestQtlLdRef <- function( + ldReferenceSpec, + entries, + df, + minLdOverlapWarn +) { + materialized <- .materializeLdRef( + ldReferenceSpec, + .entriesChroms(entries) ) + .qtlSumStatsCheckContainment(materialized, entries, df, minLdOverlapWarn) + .subsetLdRefToRange(materialized, entries) } # The tuple-level total-N scalar a manifest may carry, plus the per-row @@ -2106,17 +2128,17 @@ loadQtlSumStatsFromManifest <- function( # Per-row LD-containment check (no-op when the sketch is NULL). # @noRd .qtlSumStatsCheckContainment <- function( - ldSketch, + ldReference, entries, df, minLdOverlapWarn ) { - if (is.null(ldSketch)) { + if (is.null(ldReference)) { return(invisible(NULL)) } for (i in seq_len(nrow(df))) { .checkLdContainment( - ldSketch, + ldReference, entries[[i]], minLdOverlapWarn, str_c( @@ -2135,14 +2157,14 @@ loadQtlSumStatsFromManifest <- function( # Assemble the QtlSumStats() argument list from a canonicalised manifest. # @noRd -.qtlSumStatsArgs <- function(df, entries, genome, ldSketch, nSampleCol) { +.qtlSumStatsArgs <- function(df, entries, genome, ldReference, nSampleCol) { args <- list( study = as.character(df$study), context = as.character(df$context), trait = as.character(df$trait), entry = entries, genome = genome, - ldSketch = ldSketch + ldReference = ldReference ) c( args, @@ -2162,7 +2184,7 @@ loadQtlSumStatsFromManifest <- function( #' \code{study}); one \code{QtlDataset} is built per study group. #' @param sumStatsManifest Optional QtlSumStats manifest (see #' \code{\link{loadQtlSumStatsFromManifest}}). -#' @param genome,ldSketch,region,minLdOverlapWarn Passed to the QtlSumStats +#' @param genome,ldReference,region,minLdOverlapWarn Passed to the QtlSumStats #' loader for \code{sumStatsManifest}. #' @param columnMapping,sampleSelect,formatMapping Passed to the QtlSumStats #' loader for \code{sumStatsManifest}. @@ -2185,7 +2207,7 @@ loadMultiStudyQtlDatasetFromManifest <- function( qtlDatasetsManifest, sumStatsManifest = NULL, genome = NULL, - ldSketch = NULL, + ldReference = NULL, region = NULL, minLdOverlapWarn = 0.5, columnMapping = NULL, @@ -2207,7 +2229,7 @@ loadMultiStudyQtlDatasetFromManifest <- function( sumStats <- .msqLoadSumStats( sumStatsManifest, genome, - ldSketch, + ldReference, region, minLdOverlapWarn, columnMapping, @@ -2257,7 +2279,7 @@ loadMultiStudyQtlDatasetFromManifest <- function( .msqLoadSumStats <- function( sumStatsManifest, genome, - ldSketch, + ldReference, region, minLdOverlapWarn, columnMapping, @@ -2270,7 +2292,7 @@ loadMultiStudyQtlDatasetFromManifest <- function( loadQtlSumStatsFromManifest( sumStatsManifest, genome = genome, - ldSketch = ldSketch, + ldReference = ldReference, region = region, minLdOverlapWarn = minLdOverlapWarn, columnMapping = columnMapping, diff --git a/R/mashPipeline.R b/R/mashPipeline.R index 9c9301fee..055d4c254 100644 --- a/R/mashPipeline.R +++ b/R/mashPipeline.R @@ -285,7 +285,7 @@ mashPipeline <- function( # Every bundle mashPipeline() takes, checked together. # @noRd .mashPipelineAssert <- function(prior, mashDataArgs, mashArgs) { - .assertMethodParam(prior, "MashPriorParam", "prior") + .assertMethodParam(prior, "MashPriorParam") .assertMethodOptions(mashDataArgs, "MashDataOptions", "mashDataArgs") .assertMethodOptions(mashArgs, "MashOptions", "mashArgs") } @@ -652,9 +652,6 @@ mashCovarianceComponents <- function( .mashComponentList(c(built$canonical, built$dataDriven)) } -# `components` and `engine` each take a name or that choice's own -# constructor, so both resolve to a (name, options) pair the same way. -# @noRd # Both arguments arrive already normalized -- a MashComponentParam and an # Options record or NULL -- so this only splits them into the shapes the # cov_* chain downstream expects. NULL engine is "none": no refinement. @@ -669,6 +666,9 @@ mashCovarianceComponents <- function( ) } +# mashPriorCovariances() is exported with the same convenience arguments as +# MashPriorParam(), so it normalizes through the same helpers rather than +# resolving a second time in its own way. #' @title Estimate mash Prior Covariances and Mixture Weights #' @description Build the mash prior covariance list \code{U} and mixture #' weights \code{w} from a \code{{strong[, random, null]}} SumStats @@ -753,17 +753,10 @@ mashPriorCovariances <- function( .assertMethodOptions(mashDataArgs, "MashDataOptions", "mashDataArgs") .assertMethodOptions(mashArgs, "MashOptions", "mashArgs") inputScale <- arg_match(inputScale) - # Exported with the same convenience arguments as MashPriorParam(), so - # it normalizes through the same helpers rather than resolving a second - # time in its own way. choice <- .mashResolvePriorChoice( .mashNormalizeComponents(components), .mashNormalizeEngine(engine) ) - components <- choice$components - componentArgs <- choice$componentArgs - engine <- choice$engine - engineArgs <- choice$engineArgs .mashRequirePriorPackages() if (methods::is(sumStatsList, "SimpleList")) { sumStatsList <- as.list(sumStatsList) @@ -783,11 +776,11 @@ mashPriorCovariances <- function( mashData, priorCovariances = priorCovariances, priorComponents = priorComponents, - components = components, + components = choice$components, nPcs = nPcs, - engine = engine, - engineArgs = engineArgs, - componentArgs = componentArgs, + engine = choice$engine, + engineArgs = choice$engineArgs, + componentArgs = choice$componentArgs, mashArgs = mashArgs ) } @@ -939,25 +932,6 @@ MashComponentParam <- function( # Reject unknown prior-covariance component names. # @noRd -# `components` may be a character vector or a MashComponentParam() record. -# Naming a component in the record selects it, so the two forms carry the -# same information and the record additionally carries per-component options. -# @noRd -.mashResolveComponentChoice <- function(components) { - if (is(components, "MashComponentParam")) { - entries <- slot(components, "components") %||% list() - return(list(names = names(entries), args = entries)) - } - if (!is.character(components)) { - abort(glue( - "mashPriorCovariances: `components` must be a character vector ", - "or a MashComponentParam() record." - )) - } - .mashValidateComponents(components) - list(names = components, args = NULL) -} - .mashValidateComponents <- function( components, caller = "mashPriorCovariances" @@ -1358,9 +1332,6 @@ fitMashContrast <- function( ) } -# Pairwise (all-pairs) contrasts, with grouped conditions' contributions split -# evenly across the group. -# @noRd # One grouped condition's share of a pairwise column: the group's matched # contribution split evenly across its members. # @noRd @@ -1395,6 +1366,9 @@ fitMashContrast <- function( ) } +# Pairwise (all-pairs) contrasts, with grouped conditions' contributions split +# evenly across the group. +# @noRd .mashPairwiseContrast <- function(tested, grouping, pairwiseVector) { twoCombn <- combn(tested, 2) pwNames <- apply(twoCombn, 2, str_flatten, collapse = "_vs_") @@ -2550,7 +2524,7 @@ mergeMashData <- function(resData, oneData) { } msg <- glue( "mashInput: each element of `objects` must be a QtlSumStats, ", - "GwasSumStats, or FineMappingResult; got ", + "GwasSumStats, QtlFineMappingResult or GwasFineMappingResult; got ", "{str_flatten(class(obj), '/')}." ) abort(msg) @@ -2566,9 +2540,9 @@ mergeMashData <- function(resData, oneData) { list(b = mats$b, s = mats$s, strongRows = strongRows) } -# (Bhat, Shat, strongRows) from a FineMappingResult: pivot the marginal effects -# to a variants x contexts matrix pair; strong = each credible set's lead (max -# PIP) variant. +# (Bhat, Shat, strongRows) from a fine-mapping result: pivot the marginal +# effects to a variants x contexts matrix pair; strong = each credible set's +# lead (max PIP) variant. # @noRd .mashFmrMatrices <- function(obj, coverage) { rawMe <- marginalEffects(obj) @@ -2576,7 +2550,7 @@ mergeMashData <- function(resData, oneData) { if (!all(is_in(c("variant_id", "context", "beta", "se"), names(rawMe)))) { msg <- glue( "mashInput: marginalEffects() must return variant_id/context/", - "beta/se columns; a FineMappingResult with >= 2 contexts is ", + "beta/se columns; a fine-mapping result with >= 2 contexts is ", "required." ) abort(msg) @@ -2601,7 +2575,7 @@ mergeMashData <- function(resData, oneData) { ) } -# A multi-method FineMappingResult would duplicate (variant, context) cells; +# A multi-method fine-mapping result would duplicate (variant, context) cells; # pin the first method so the pivot is unambiguous. # @noRd .mashFmrMethodPin <- function(me, cs) { @@ -2610,7 +2584,7 @@ mergeMashData <- function(resData, oneData) { } m1 <- me$method[[1L]] msg <- glue( - "mashInput: FineMappingResult carries multiple methods; using ", + "mashInput: the fine-mapping result carries multiple methods; using ", "'{m1}'." ) warn(msg) @@ -2746,7 +2720,7 @@ mergeMashData <- function(resData, oneData) { #' \describe{ #' \item{strong}{The high-signal variants (deterministic, class-specific). #' \code{QtlSumStats}: the single most significant variant (\eqn{\max|z|}) -#' per condition, unioned. \code{FineMappingResult}: the lead variant +#' per condition, unioned. A fine-mapping result: the lead variant #' (\eqn{\max} PIP) of each credible set in each condition, unioned #' (conditions with no credible set contribute nothing).} #' \item{random}{\code{nRandom} variants sampled uniformly at random -- @@ -2762,21 +2736,21 @@ mergeMashData <- function(resData, oneData) { #' and the strong \code{XtX} cross-product appended. #' #' @param objects A named \code{list} of \code{\link{QtlSumStats}} and/or -#' \code{FineMappingResult} objects, one per region. Names disambiguate +#' fine-mapping result objects, one per region. Names disambiguate #' rownames across regions (defaults to \code{region1}, \code{region2}, ...). #' For \code{QtlSumStats} inputs \code{\link{summaryStatsQc}} must have been #' run (the matrix builder rejects un-QC'd SumStats). #' @param nRandom,nNull Per-object random / null sample sizes (default 10 each). #' @param excludeCondition Character vector of condition (column) names to drop. -#' @param coverage Credible-set coverage for \code{FineMappingResult} strong -#' selection (default 0.95). +#' @param coverage Credible-set coverage for the strong selection on +#' fine-mapping results (default 0.95). #' @param zOnly When \code{TRUE} the returned partitions carry only \code{.z} #' (the \code{.b}/\code{.s} matrices are dropped after z is derived). #' @param sigPCutoff Significance cutoff applied to the strong partition #' (default 1e-6). #' @param inputScale Matrix scale for \code{QtlSumStats} inputs #' (\code{"auto"}/\code{"beta"}/\code{"z"}); ignored for -#' \code{FineMappingResult} (always effect-size scale). +#' fine-mapping results (always effect-size scale). #' @param independentVariants Optional character vector of variant ids (e.g. an #' LD-pruned independent SNP list). When supplied, the \emph{random} and #' \emph{null} background of every object is restricted to variants that match @@ -2835,7 +2809,7 @@ mashInput <- function( if (!is.list(objects) || length(objects) == 0L) { msg <- glue( "mashInput: `objects` must be a non-empty list of QtlSumStats ", - "and/or FineMappingResult objects." + "and/or fine-mapping result objects." ) abort(msg) } @@ -2974,7 +2948,7 @@ mashInput <- function( #' variant ids (ideally \code{chr:pos:A2:A1}); \code{colnames(z)} label the #' conditions. #' @param studyName Study identifier (recycled across conditions). -#' @param ldSketch A genotype panel (see \code{\link{readGenotypes}}) +#' @param ldReference A genotype panel (see \code{\link{readGenotypes}}) #' embedded in the collection, or \code{NULL} (default) -- mash operates #' across #' conditions per variant and needs no LD reference. @@ -2997,13 +2971,13 @@ mashInput <- function( #' system.file("extdata", "toy_ref.bed", package = "pecotmr")) #' z <- matrix(rnorm(6), 2, 3, dimnames = list( #' c("chr22:1:A:G", "chr22:2:A:G"), c("brain", "blood", "muscle"))) -#' qtlSumStatsFromZMatrix(z = z, studyName = "s1", ldSketch = panel, +#' qtlSumStatsFromZMatrix(z = z, studyName = "s1", ldReference = panel, #' context = colnames(z), trait = "g1", genome = "hg38", n = 100) #' @export qtlSumStatsFromZMatrix <- function( z, studyName, - ldSketch = NULL, + ldReference = NULL, context = colnames(z), trait = "mash", genome = "GRCh38", @@ -3024,7 +2998,7 @@ qtlSumStatsFromZMatrix <- function( vids = vids, nCond = ncol(z), studyName = studyName, - ldSketch = ldSketch, + ldReference = ldReference, context = context, trait = trait, genome = genome, @@ -3050,7 +3024,7 @@ qtlSumStatsFromZMatrix <- function( #' @param shat Numeric matrix of standard errors, aligned with \code{bhat} #' (identical dimensions and row/column order). #' @param studyName Study identifier (recycled across conditions). -#' @param ldSketch A genotype panel (see \code{\link{readGenotypes}}) +#' @param ldReference A genotype panel (see \code{\link{readGenotypes}}) #' embedded in the collection, or \code{NULL} (default) -- mash operates #' across #' conditions per variant and needs no LD reference. @@ -3072,14 +3046,14 @@ qtlSumStatsFromZMatrix <- function( #' c("chr22:1:A:G", "chr22:2:A:G"), c("brain", "blood", "muscle"))) #' shat <- matrix(0.1, 2, 3, dimnames = dimnames(bhat)) #' qtlSumStatsFromBetaMatrix(bhat = bhat, shat = shat, studyName = "s1", -#' ldSketch = panel, context = colnames(bhat), trait = "g1", +#' ldReference = panel, context = colnames(bhat), trait = "g1", #' genome = "hg38", n = 100) #' @export qtlSumStatsFromBetaMatrix <- function( bhat, shat, studyName, - ldSketch = NULL, + ldReference = NULL, context = colnames(bhat), trait = "mash", genome = "GRCh38", @@ -3094,7 +3068,7 @@ qtlSumStatsFromBetaMatrix <- function( vids = vids, nCond = ncol(bhat), studyName = studyName, - ldSketch = ldSketch, + ldReference = ldReference, context = context, trait = trait, genome = genome, @@ -3174,7 +3148,7 @@ qtlSumStatsFromBetaMatrix <- function( vids, nCond, studyName, - ldSketch, + ldReference, context, trait, genome, @@ -3202,7 +3176,7 @@ qtlSumStatsFromBetaMatrix <- function( trait = trait, entry = entries, genome = genome, - ldSketch = ldSketch, + ldReference = ldReference, qcInfo = list(role = role, entryAudit = vector("list", nCond)) ) } diff --git a/R/mashWrapper.R b/R/mashWrapper.R index 4caddc888..a36871167 100644 --- a/R/mashWrapper.R +++ b/R/mashWrapper.R @@ -151,16 +151,16 @@ ) } -# Internal: build the requested data-driven covariance components off a prepared -# mashr data object, in a fixed order (canonical, pca, flash, flashNonneg) so a -# given `components` set reproduces the same ordering everywhere. RNG is -# consumed only by cov_flash / cov_flash(nonneg). Shared by mashPriorCovariances -# and the exported mashCovarianceComponents. -# @noRd # Build the requested components, keeping the two roles apart: `canonical` # are fixed structural hypotheses that go to the mash fit unrefined, while # `dataDriven` are the generator output the engine refines. mashr's own eQTL # vignette draws exactly this line -- cov_ed sees only the data-driven set. +# +# The components are built off a prepared mashr data object in a fixed order +# (canonical, pca, flash, flashNonneg), so a given `components` set +# reproduces the same ordering everywhere. RNG is consumed only by cov_flash +# / cov_flash(nonneg). Shared by mashPriorCovariances and the exported +# mashCovarianceComponents. # @noRd .mashBuildComponents <- function( mashData, @@ -169,26 +169,34 @@ componentArgs = NULL ) { npc <- nPcs %||% (ncol(mashData$Bhat) - 1) - argsFor <- function(key) as.list(componentArgs[[key]] %||% list()) canonical <- if (is_in("canonical", components)) { exec( mashr::cov_canonical, mashData, - !!!compact(argsFor("canonical")) + !!!compact(.mashComponentArgs("canonical", componentArgs)) ) } pca <- if (is_in("pca", components)) { - exec(mashr::cov_pca, mashData, npc = npc, !!!compact(argsFor("pca"))) + exec( + mashr::cov_pca, + mashData, + npc = npc, + !!!compact(.mashComponentArgs("pca", componentArgs)) + ) } flash <- if (is_in("flash", components)) { - exec(mashr::cov_flash, mashData, !!!compact(argsFor("flash"))) + exec( + mashr::cov_flash, + mashData, + !!!compact(.mashComponentArgs("flash", componentArgs)) + ) } flashNonneg <- if (is_in("flashNonneg", components)) { exec( mashr::cov_flash, mashData, factors = "nonneg", - !!!compact(argsFor("flashNonneg")) + !!!compact(.mashComponentArgs("flashNonneg", componentArgs)) ) } list( @@ -197,6 +205,12 @@ ) } +# The caller's extra arguments for one component generator, as a list. +# @noRd +.mashComponentArgs <- function(key, componentArgs) { + as.list(componentArgs[[key]] %||% list()) +} + # The covariance list and its mixture weights. A supplied `priorCovariances` # short-circuits the cov_* chain; either way the weights come from a # weights-only mash() fit unless the covariance step already produced them diff --git a/R/pvalCombineWrappers.R b/R/pvalCombineWrappers.R index 2fe643076..10cfbf118 100644 --- a/R/pvalCombineWrappers.R +++ b/R/pvalCombineWrappers.R @@ -132,7 +132,33 @@ pvalPoolr <- function(pvals, method, R, methodArgs = PoolrOptions()) { invchisq = poolr::invchisq, .abortUnknownMethod("poolr", method) ) - exec(fn, pvals, R = R, !!!as.list(methodArgs))$p + args <- as.list(methodArgs) + exec(fn, pvals, R = .poolrDependence(R, method, args), !!!args)$p +} + +# `R` in the form poolr's adjustment reads it. `R` holds the correlations +# among the test statistics. The generalized adjustment wants the covariances +# among each test's transformed statistic (-2 log p for Fisher, z for +# Stouffer, the 1-df chi-square for invchisq), and the effective-number +# adjustments want the correlations among the p-values; mvnconv() converts to +# both. "empirical" simulates from the statistics' own correlations. +# @noRd +.poolrDependence <- function(R, method, args) { + adjust <- args$adjust %||% "none" + if (is.null(R) || is_in(adjust, c("none", "empirical"))) { + return(R) + } + side <- args$side %||% 2 + if (identical(adjust, "generalized")) { + target <- switch( + method, + fisher = "m2lp", + stouffer = "z", + invchisq = "chisq1" + ) + return(poolr::mvnconv(R, side = side, target = target)) + } + poolr::mvnconv(R, side = side, target = "p", cov2cor = TRUE) } pvalGbj <- function(zScores, R, method, methodArgs = GbjOptions()) { @@ -290,8 +316,14 @@ pvalAspu <- function( # Internal: compute one method's combined p-value. Assumes inputs have # already been validity-filtered (positive, finite, < 1) and aligned with R. -.combinePvalSingle <- function(method, pvals, zScores, R, methodArgs = list()) { - args <- .combinePvalMethodArgs(methodArgs, method) +.combinePvalSingle <- function( + method, + pvals, + zScores, + R, + pvalMethodsParam = list() +) { + args <- .combinePvalMethodArgs(pvalMethodsParam, method) switch( method, acat = pvalAcat(pvals), @@ -327,8 +359,8 @@ pvalAspu <- function( # constructor's result rather than list() keeps each engine's pecotmr # defaults -- poolr's `adjust = "generalized"` -- in force either way. # @noRd -.combinePvalMethodArgs <- function(methodArgs, method) { - entries <- .pvalMethodEntriesOf(methodArgs) +.combinePvalMethodArgs <- function(pvalMethodsParam, method) { + entries <- .pvalMethodEntriesOf(pvalMethodsParam) i <- match(method, names(entries)) if (!is.na(i)) { return(entries[[i]]) @@ -340,11 +372,11 @@ pvalAspu <- function( # The per-method entries, whether they arrived in a PvalMethodsParam or as # the bare list() that still means "no settings". # @noRd -.pvalMethodEntriesOf <- function(methodArgs) { - if (is(methodArgs, "PvalMethodsParam")) { - return(slot(methodArgs, "methods") %||% list()) +.pvalMethodEntriesOf <- function(pvalMethodsParam) { + if (is(pvalMethodsParam, "PvalMethodsParam")) { + return(slot(pvalMethodsParam, "methods") %||% list()) } - methodArgs %||% list() + pvalMethodsParam %||% list() } #' Combine P-values via Any of a Menu of Methods @@ -379,11 +411,12 @@ pvalAspu <- function( #' @param zScores Optional numeric vector of signed z-scores. #' @param methods Character vector of combination method names; see above for #' the menu (lowercase). -#' @param R Optional correlation matrix aligned to \code{pvals} / +#' @param R Optional correlation matrix among the test statistics (for +#' variant-level tests, their LD), aligned to \code{pvals} / #' \code{zScores}. Required for the correlation-adjusted methods. #' @param naRm Logical; if \code{TRUE} (default), drop NA p-values before #' combination. -#' @param methodArgs Per-method engine options, built with +#' @param pvalMethodsParam Per-method engine options, built with #' \code{\link{PvalMethodsParam}} -- for example #' \code{PvalMethodsParam(aspu = AspuOptions(n.perm = 5000))}. Configuring #' a method that \code{methods} does not request is an error rather than a @@ -407,12 +440,12 @@ combinePValues <- function( methods, R = NULL, naRm = TRUE, - methodArgs = PvalMethodsParam() + pvalMethodsParam = PvalMethodsParam() ) { assertFlag(naRm) - .assertMethodParam(methodArgs, "PvalMethodsParam", "methodArgs") + .assertMethodParam(pvalMethodsParam, "PvalMethodsParam") methods <- .combinePvalCheckMethods(methods) - .combinePvalCheckMethodArgs(methodArgs, methods) + .combinePvalCheckMethodArgs(pvalMethodsParam, methods) nPvalsIn <- if (is.null(pvals)) 0L else length(pvals) nZScoresIn <- if (is.null(zScores)) 0L else length(zScores) .combinePvalCheckPrereqs(methods, zScores, R) @@ -435,7 +468,7 @@ combinePValues <- function( filt$pvalsK, filt$zScoresK, Raligned, - methodArgs + pvalMethodsParam ) .combinePvalResult(perMethod, input) } @@ -462,14 +495,14 @@ combinePValues <- function( # Options for a method that was not requested would be dropped in silence -- # exactly the failure the constructors exist to prevent -- so say so instead. # @noRd -.combinePvalCheckMethodArgs <- function(methodArgs, methods) { - configured <- names(.pvalMethodEntriesOf(methodArgs)) +.combinePvalCheckMethodArgs <- function(pvalMethodsParam, methods) { + configured <- names(.pvalMethodEntriesOf(pvalMethodsParam)) unused <- setdiff(configured, methods) if (length(unused) == 0L) { return(invisible(NULL)) } msg <- glue( - "combinePValues: `methodArgs` configures ", + "combinePValues: `pvalMethodsParam` configures ", "{str_flatten(unused, ', ')}, which `methods` does not request ", "({str_flatten(methods, ', ')}), so those options would be ignored." ) @@ -584,7 +617,7 @@ combinePValues <- function( pvalsK, zScoresK, Raligned, - methodArgs + pvalMethodsParam ) { set_names( map( @@ -593,7 +626,7 @@ combinePValues <- function( pvalsK = pvalsK, zScoresK = zScoresK, Raligned = Raligned, - methodArgs = methodArgs + pvalMethodsParam = pvalMethodsParam ), methods ) @@ -601,14 +634,20 @@ combinePValues <- function( # @noRd #' @importFrom rlang try_fetch -.combinePvalRunOne <- function(m, pvalsK, zScoresK, Raligned, methodArgs) { +.combinePvalRunOne <- function( + m, + pvalsK, + zScoresK, + Raligned, + pvalMethodsParam +) { p <- try_fetch( .combinePvalSingle( m, pvals = pvalsK, zScores = zScoresK, R = Raligned, - methodArgs = methodArgs + pvalMethodsParam = pvalMethodsParam ), error = function(cnd) { msg <- glue("combinePValues: method '{m}' failed") @@ -740,7 +779,12 @@ AspuOptions <- function(...) { #' \code{m}, \code{size}, \code{threshold}, \code{side}, \code{batchsize} #' and \code{nearpd}. The \pkg{poolr} signatures end in \code{...}, so #' names cannot be checked here and a misspelling is passed through. -#' \code{p} and \code{R} are supplied by pecotmr and refused. +#' \code{p} and \code{R} are supplied by pecotmr and refused: \code{R} is +#' the caller's correlation among the test statistics, which pecotmr +#' converts with \code{poolr::mvnconv()} into the form the adjustment +#' reads (the covariances of each test's transformed statistic for +#' \code{"generalized"}, the correlations among the p-values for the +#' effective-number adjustments, unchanged for \code{"empirical"}). #' @return A \code{MethodOptions} record for #' \code{\link{PvalMethodsParam}}. #' @seealso \code{\link{combinePValues}} diff --git a/R/qtlAssociationPostprocess.R b/R/qtlAssociationPostprocess.R index 33ff5470c..375fb9d1c 100644 --- a/R/qtlAssociationPostprocess.R +++ b/R/qtlAssociationPostprocess.R @@ -283,9 +283,6 @@ QvalueOptions <- function(...) { keep & !is.na(keep) } -# Q-value significance: per-entry mask of variant q-values below the threshold -# for the FDR-significant genes. -# @noRd # Entry `i`'s q-value mask, or the incoming mask when the gene is not # FDR-significant or carries no per-variant q-values. # @noRd @@ -297,6 +294,9 @@ QvalueOptions <- function(...) { !is.na(mc$qvalue) & mc$qvalue < threshold } +# Q-value significance: per-entry mask of variant q-values below the threshold +# for the FDR-significant genes. +# @noRd .qapMaskQvalue <- function(x, masks, threshold) { qCol <- if (!is.null(x$q_beta)) "q_beta" else "q_bonferroni_min_original" if (is.null(.tupleColumn(x, qCol))) { @@ -381,7 +381,7 @@ setMethod( methods::new( "QtlSumStats", grl, - ldSketch = ldSketch(x), + ldReference = ldReference(x), qcInfo = qcInfo ) } @@ -565,10 +565,6 @@ setMethod( as.numeric(x$n_variants) } -# Per-gene min Bonferroni-adjusted p (original + filtered). The upstream p-value -# pre-filter always retains the global-min variant, so the min over the entry is -# the exact per-gene min. Returns list(orig, filt). -# @noRd # One gene's Bonferroni-adjusted minimum p-value, before and after the # variant filter. NA on either side means the gene had nothing to adjust. # @noRd @@ -606,6 +602,10 @@ setMethod( ) } +# Per-gene min Bonferroni-adjusted p (original + filtered). The upstream p-value +# pre-filter always retains the global-min variant, so the min over the entry is +# the exact per-gene min. Returns list(orig, filt). +# @noRd .qapBonferroniPerGene <- function( x, nVar, diff --git a/R/qtlEnrichmentPipeline.R b/R/qtlEnrichmentPipeline.R index fbf510f16..ff8a69d72 100644 --- a/R/qtlEnrichmentPipeline.R +++ b/R/qtlEnrichmentPipeline.R @@ -80,30 +80,33 @@ QtlEnrichmentParam <- function( #' @section Inputs: #' \itemize{ #' \item \code{gwasFineMappingResult}: the genome-wide outcome collection. -#' Each entry's \code{FineMappingRow$trimmedFit} must carry a \code{pip} +#' Each row's stored fit (\code{\link{susieFit}}) must carry a \code{pip} #' vector. One PIP vector is built per outcome trait -- keyed by #' \code{study} for a GWAS collection (one trait per study) and by #' (\code{study}, \code{context}, \code{trait}) for a QTL one, since a #' variant's PIP differs between molecular traits and pooling them would #' collide. -#' \item \code{qtlFineMappingResult}: the annotation collection. Each entry's -#' \code{trimmedFit} must carry \code{alpha}, \code{pip}, and +#' \item \code{qtlFineMappingResult}: the annotation collection. Each row's +#' stored fit must carry \code{alpha}, \code{pip}, and #' prior-variance fields (\code{V}). Its region fits are pooled per #' (\code{study}, \code{context}) -- per \code{study} alone for a GWAS #' collection, which has no context axis. #' } #' -#' @section LD-sketch compatibility check: A GWAS outcome collection must have -#' a non-NULL \code{ldSketch} (it should be RSS-derived). Where both sides -#' carry one, the two must come from the same reference panel --- same -#' samples, same allele orientation on the variants they share --- but need -#' NOT carry the same variants: QC-ing the two sides separately trims each -#' sketch to its own surviving variants, and a partial overlap only warns. A +#' @section LD reference compatibility check: A GWAS outcome collection +#' must have a non-NULL \code{ldReference} (it should be RSS-derived). Where +#' both sides carry one, the two must be the same LD reference. +#' The two must be the same kind of reference. Two genotype panels must +#' share their samples and allele orientation; two \code{LdMatrix} objects +#' must agree on the LD they share; two \code{GenotypeMixture} objects must +#' average the same panels with the same weights. They need NOT carry the +#' same variants: QC-ing the two sides separately trims each reference to +#' its own surviving variants, and a partial overlap only warns. A #' \code{NULL} on either side (an individual-level fit) skips the check. #' #' @param gwasFineMappingResult The outcome side; see above. #' @param qtlFineMappingResult The annotation side; see above. -#' @param methodArgs The estimator's algorithmic settings, built with +#' @param qtlEnrichmentParam The estimator's algorithmic settings, built with #' \code{\link{QtlEnrichmentParam}}: \code{numGwas}, \code{piQtl}, #' \code{lambda}, \code{impN}, \code{doubleShrinkage} and #' \code{besselCorrection}. A bare list is refused, since it cannot be @@ -147,12 +150,12 @@ QtlEnrichmentParam <- function( qtlEnrichmentPipeline <- function( gwasFineMappingResult, qtlFineMappingResult, - methodArgs = QtlEnrichmentParam(), + qtlEnrichmentParam = QtlEnrichmentParam(), numThreads = 1L, seed = NULL, verbose = TRUE ) { - .assertMethodParam(methodArgs, "QtlEnrichmentParam", "methodArgs") + .assertMethodParam(qtlEnrichmentParam, "QtlEnrichmentParam") .enrValidateInputs(gwasFineMappingResult, qtlFineMappingResult) prep <- .enrPrepare(gwasFineMappingResult, qtlFineMappingResult) gwasTuples <- prep$gwasTuples @@ -164,7 +167,7 @@ qtlEnrichmentPipeline <- function( gwasPipByTuple = prep$gwasPipByTuple, qtlRegionsByTuple = prep$qtlRegionsByTuple, alignedByTuple = alignedByTuple, - methodArgs = methodArgs, + qtlEnrichmentParam = qtlEnrichmentParam, numThreads = numThreads, seed = seed, verbose = verbose, @@ -186,22 +189,22 @@ qtlEnrichmentPipeline <- function( fmrClasses <- c("GwasFineMappingResult", "QtlFineMappingResult") assertMultiClass(gwasFineMappingResult, fmrClasses) assertMultiClass(qtlFineMappingResult, fmrClasses) - outcomeLd <- ldSketch(gwasFineMappingResult) + outcomeLd <- ldReference(gwasFineMappingResult) if ( is.null(outcomeLd) && methods::is(gwasFineMappingResult, "GwasFineMappingResult") ) { msg <- glue( - "qtlEnrichmentPipeline: the GWAS FineMappingResult must have a ", - "non-NULL ldSketch (it should be RSS-derived)." + "qtlEnrichmentPipeline: the GwasFineMappingResult must have a ", + "non-NULL ldReference (it should be RSS-derived)." ) abort(msg) } # Lenient rather than qtl-required: a QTL outcome side may be an # individual-level fit carrying no panel, and the requirement above already # covers the RSS-derived GWAS case. - .requireMatchingLdSketches( - ldSketch(qtlFineMappingResult), + .requireMatchingLdRefs( + ldReference(qtlFineMappingResult), outcomeLd, pipelineName = "qtlEnrichmentPipeline", nullPolicy = "lenient" @@ -343,7 +346,7 @@ qtlEnrichmentPipeline <- function( gwasPipByTuple, qtlRegionsByTuple, alignedByTuple = alignedByTuple, - methodArgs, + qtlEnrichmentParam, numThreads, seed, verbose, @@ -369,7 +372,7 @@ qtlEnrichmentPipeline <- function( gwasPip = gwasPip, qtlRegionsByTuple = qtlRegionsByTuple, alignedByTuple = alignedByTuple, - methodArgs = methodArgs, + qtlEnrichmentParam = qtlEnrichmentParam, numThreads = numThreads, seed = seed, verbose = verbose, @@ -389,7 +392,7 @@ qtlEnrichmentPipeline <- function( gwasPip, qtlRegionsByTuple, alignedByTuple = alignedByTuple, - methodArgs, + qtlEnrichmentParam, numThreads, seed, verbose, @@ -412,7 +415,7 @@ qtlEnrichmentPipeline <- function( gwasPip, k, alignedByTuple = alignedByTuple, - methodArgs = methodArgs, + qtlEnrichmentParam = qtlEnrichmentParam, numThreads = numThreads, seed = seed, verbose = verbose, @@ -457,7 +460,7 @@ qtlEnrichmentPipeline <- function( gwasPip, k, alignedByTuple, - methodArgs, + qtlEnrichmentParam, numThreads, seed, verbose, @@ -473,7 +476,7 @@ qtlEnrichmentPipeline <- function( cnd_signal(aligned) } # alignNames = FALSE reuses the per-tuple alignment; it is the - # pipeline's own invariant, which is why `methodArgs` cannot + # pipeline's own invariant, which is why `qtlEnrichmentParam` cannot # carry it -- QtlEnrichmentParam() has no such formal. exec( qtlEnrichment, @@ -483,7 +486,7 @@ qtlEnrichmentPipeline <- function( seed = seed, verbose = verbose, alignNames = FALSE, - !!!methodArgs + !!!qtlEnrichmentParam ) }, error = function(cnd) { @@ -545,14 +548,6 @@ qtlEnrichmentPipeline <- function( map(regions, .enrAlignRegion, unionGwasNames = unionGwasNames) } -# Build a named outcome PIP vector for one trait. Walks every row of the -# collection carrying that identity, extracts the per-row pip from each -# FineMappingRow, and concatenates with variant-id names. Errors if any single -# variant appears with conflicting PIP values across rows -- which is why the -# identity is the full trait tuple: pooling two molecular traits of one study -# would collide on every variant they share. -#' @importFrom dplyr add_count -#' @noRd # One row's PIP vector keyed by variant id, or NULL when the row carries no # fit, no PIPs, or ids that do not line up with them. # @noRd @@ -570,6 +565,14 @@ qtlEnrichmentPipeline <- function( set_names(pip, as.character(ids)) } +# Build a named outcome PIP vector for one trait. Walks every row of the +# collection carrying that identity, extracts the per-row pip from each +# FineMappingRow, and concatenates with variant-id names. Errors if any single +# variant appears with conflicting PIP values across rows -- which is why the +# identity is the full trait tuple: pooling two molecular traits of one study +# would collide on every variant they share. +#' @importFrom dplyr add_count +#' @noRd .enrBuildGwasPipVector <- function(gwasFmr, ident) { idx <- .enrMatchRows(gwasFmr, ident) if (length(idx) == 0L) { @@ -662,16 +665,16 @@ qtlEnrichmentPipeline <- function( # Project qtlEnrichment()'s output onto the columns this pipeline publishes. # # The field names are the estimator's own, written in src/qtl_enrichment.h and -# shared verbatim with upstream fastenloc's enloc.enrich.out, so they are +# shared verbatim with the original fastenloc's enloc.enrich.out, so they are # matched literally rather than guessed at. The shrinkage estimates are the -# ones reported, matching upstream, which likewise switches to the shrunk a1 -# before deriving the coloc priors. +# ones reported, matching the original fastenloc, which likewise switches to +# the shrunk a1 before deriving the coloc priors. # -# `enrichment` is expm1 of the log-odds a1 rather than a1 itself, because -# colocPipeline consumes it as `p12 * (1 + enrichment)`, which is then exactly -# the enloc-adjusted prior `p12 * exp(a1)` -- and leaves p12 untouched for an -# unenriched annotation (a1 = 0). expm1 is bounded below by -1, so a depleted -# annotation shrinks p12 towards 0 rather than past it. +# `enrichment` is expm1 of the log-odds a1 rather than a1 itself: the +# relative change in an annotated variant's odds of being a QTL, 0 for an +# unenriched annotation and bounded below by -1. colocPipeline reports it +# beside each pair; its priors are the coloc p1 / p2 / p12 the estimator +# derives (colocP1, colocP2, colocP12), not a rescaling of this column. # @noRd .enrFlattenEnrichment <- function(enr) { if (!is.list(enr) || !is_in("Enrichment (w/ shrinkage)", names(enr))) { @@ -728,7 +731,7 @@ qtlEnrichmentPipeline <- function( # ----------------------------------------------------------------------------- # Per-(GWAS, QTL-region-list) enrichment estimator. Called per-(gwasStudy, # qtlContext) pair by qtlEnrichmentPipeline above. Uses the fastenloc-style -# C++ kernel (qtlEnrichmentRcpp) under the hood. +# C++ kernel (qtlEnrichmentCpp) under the hood. # ============================================================================= #' @title Implementation of enrichment analysis described in #' https://doi.org/10.1371/journal.pgen.1006646 @@ -785,7 +788,7 @@ qtlEnrichmentPipeline <- function( #' \code{sd (w/ shrinkage)}, \code{Alternative (coloc) p1} / \code{p2} / #' \code{p12} and \code{Effective MI rounds} -- plus #' \code{unused_xqtl_variants}, the QTL variants of each region that no GWAS -#' variant matched. The names are upstream fastenloc's; +#' variant matched. The names are the original fastenloc's; #' \code{\link{qtlEnrichmentPipeline}} is what renames them to a tidy table. #' #' @examples @@ -848,7 +851,7 @@ qtlEnrichment <- function( unmatchedVariants <- map(aligned, "unmatched_variants") susieQtlRegions <- map(aligned, .enrStripUnmatched) # cpp11 requires exact integer types for int parameters. - en <- qtlEnrichmentRcpp( + en <- qtlEnrichmentCpp( rGwasPip = gwasPip, rQtlSusieFit = susieQtlRegions, piGwas = piGwas, diff --git a/R/qtlSumStats.R b/R/qtlSumStats.R index fabac26a1..ac68c7b93 100644 --- a/R/qtlSumStats.R +++ b/R/qtlSumStats.R @@ -3,7 +3,7 @@ # ----------------------------------------------------------------------------- # DFrame-subclass collection keyed by the identity tuple (study, context, # trait). Each row holds a per-tuple GRanges of summary statistics -# (variant_id + per-variant Z/N/MAF mcols). Class-level slots ldSketch +# (variant_id + per-variant Z/N/MAF mcols). Class-level slots ldReference # (a GenotypeHandle for the LD reference) + genome (the genome build) # apply uniformly across rows. Built-in qcInfo slot tracks which # summaryStatsQc() passes have been run. @@ -19,7 +19,7 @@ NULL #' Z / N / MAF mcols. #' @details Required columns: \code{study}, \code{context} and \code{trait}; #' the 3-tuple is unique. The class-level slots inherited from -#' \code{\linkS4class{SumStatsBase}} -- \code{ldSketch}, \code{genome} and +#' \code{\linkS4class{SumStatsBase}} -- \code{ldReference}, \code{genome} and #' \code{qcInfo} -- apply uniformly to every row, and \code{qcInfo} records #' which \code{\link{summaryStatsQc}} passes have run. #' @seealso \code{\link{QtlSumStats}} for the constructor and @@ -97,7 +97,7 @@ NULL #' @title Create a QtlSumStats Collection Object #' @description Construct a \code{QtlSumStats} S4 DFrame-subclass collection #' from per-tuple vectors and a list of \code{GRanges} entries (one per -#' tuple), plus a single LD sketch handle and a single genome build that apply +#' tuple), plus a single LD reference and a single genome build that apply #' to the whole collection. Each \code{GRanges} entry must carry per-variant #' statistics in its mcols (\code{SNP}, \code{A1}, \code{A2}, \code{Z}, #' \code{N}; plus optional \code{MAF}, \code{INFO}, \code{BETA}, \code{SE}, @@ -109,9 +109,10 @@ NULL #' Same length as \code{study}, \code{context}, and \code{trait}. #' @param genome Single character string giving the genome build (e.g., #' \code{"hg19"}, \code{"hg38"}). Uniform across the collection because all -#' entries share the same LD sketch. -#' @param ldSketch A genotype panel (see \code{\link{readGenotypes}}) -#' carrying the LD reference. +#' entries share the same LD reference. +#' @param ldReference The LD reference: a genotype panel (see +#' \code{\link{readGenotypes}}), a \code{\link{GenotypeMixture}} or an +#' \code{\link{LdMatrix}}. #' @param varY Optional numeric vector of per-tuple phenotype variances #' (\code{NA_real_} entries allowed). #' @param nSample Optional per-tuple total sample size (numeric; default @@ -141,7 +142,7 @@ NULL #' S4Vectors::mcols(gr) <- S4Vectors::DataFrame(SNP = paste0("rs", 1:3), #' A1 = "A", A2 = "G", Z = rnorm(3), N = 100L) #' QtlSumStats(studyName = "s1", context = "brain", trait = "g1", entry = -#' list(gr), genome = "hg38", ldSketch = panel) +#' list(gr), genome = "hg38", ldReference = panel) #' @export QtlSumStats <- function( studyName, @@ -149,7 +150,7 @@ QtlSumStats <- function( trait, entry, genome, - ldSketch = NULL, + ldReference = NULL, varY = NA_real_, nSample = NULL, qcInfo = list(), @@ -190,7 +191,7 @@ QtlSumStats <- function( GenomicRanges::GRangesList(split$entry), value = md[split$fromIdx, , drop = FALSE] ) - .sumStatsNewValidated("QtlSumStats", grl, ldSketch, genome, qcInfo) + .sumStatsNewValidated("QtlSumStats", grl, ldReference, genome, qcInfo) } # Validate genome / entry / length consistency and recycle varY. Returns the @@ -200,7 +201,7 @@ QtlSumStats <- function( if (length(genome) != 1L) { msg <- glue( "`genome` must be a single character string (one build per ", - "collection, because all entries share the LD sketch)." + "collection, because all entries share the LD reference)." ) abort(msg) } @@ -523,21 +524,17 @@ setMethod("show", "QtlSumStats", function(object) { .trim = FALSE )) } - ld <- ldSketch(object) + ld <- ldReference(object) ldSrc <- if (is.null(ld)) { "none (LD-free)" } else { - .ldSketchLabel(ld) + .ldRefLabel(ld) } - cat(glue(" LD sketch: {ldSrc}\n", .trim = FALSE)) + cat(glue(" LD reference: {ldSrc}\n", .trim = FALSE)) }) # ---- map/apply helpers (lambda-free callbacks) --------------------------- -# Column `cn` of `object`, via `[[` (preserves the required `entry` column that -# `object[, cn]` would drop). -# @noRd - # Append tss_distance / tes_distance mcols to entry `i` from traitPos[i] (no-op # when the entry is empty or the trait position is unset). Existing distance # mcols are preserved. @@ -573,10 +570,6 @@ setMethod("show", "QtlSumStats", function(object) { ) } -# Entry `i` of a SumStats collection restricted to chromosome `chrName`. Shared -# by the QtlSumStats and GwasSumStats subsetChr methods. -# @noRd - #' Combine QtlSumStats collections #' #' Row-bind two or more \code{\link{QtlSumStats}} collections into one -- e.g. @@ -587,14 +580,14 @@ setMethod("show", "QtlSumStats", function(object) { #' The three collection-level slots are merged rather than taken from the first #' input, on the same rules as \code{\link{combineGwasSumStats}}: \code{genome} #' and the \code{\link{summaryStatsQc}} options must agree, the per-element -#' \code{qcInfo$entryAudit} concatenates in element order, and the LD sketches -#' union over the shared genotype handle (all-\code{NULL} stays \code{NULL}, -#' which is the usual case for individual-level QTL data). +#' \code{qcInfo$entryAudit} concatenates in element order, and the LD +#' references combine the same way (all-\code{NULL} stays \code{NULL}, which +#' is the usual case for individual-level QTL data). #' #' @param ... Two or more \code{QtlSumStats} objects, or a single \code{list} #' of them. -#' @param ldSketch Optional genotype panel (see \code{\link{readGenotypes}}) to -#' attach to the combined collection, overriding the unioned one. Default +#' @param ldReference Optional genotype panel (see \code{\link{readGenotypes}}) +#' to attach to the combined collection, overriding the unioned one. Default #' \code{NULL}. #' @return A single combined \code{QtlSumStats}. #' @seealso \code{\link{combineGwasSumStats}}, @@ -603,7 +596,7 @@ setMethod("show", "QtlSumStats", function(object) { #' data(qtlSumStatsExample) #' combineQtlSumStats(qtlSumStatsExample) #' @export -combineQtlSumStats <- function(..., ldSketch = NULL) { +combineQtlSumStats <- function(..., ldReference = NULL) { parts <- .asCombineList( list(...), "QtlSumStats", @@ -612,5 +605,5 @@ combineQtlSumStats <- function(..., ldSketch = NULL) { if (length(parts) == 1L) { return(parts[[1L]]) } - .rbindSumStats(parts, ldSketch, "combineQtlSumStats") + .rbindSumStats(parts, ldReference, "combineQtlSumStats") } diff --git a/R/regularizedRegressionWrappers.R b/R/regularizedRegressionWrappers.R index 4c880976b..33de5fc23 100644 --- a/R/regularizedRegressionWrappers.R +++ b/R/regularizedRegressionWrappers.R @@ -2,23 +2,35 @@ NULL #' Extract weights from mr.ash.rss (susieR) -#' @param stat A list of summary statistics with elements \code{b} (effect -#' sizes), \code{seb} (standard errors) and \code{n} (per-variant sample -#' sizes). -#' @param LD Numeric LD (correlation) matrix aligned to the variants in -#' \code{stat}. -#' @param varY Numeric. Variance of the phenotype. -#' @param sigma2E Numeric. Residual error variance estimate. -#' @param s0 Numeric vector of prior mixture standard deviations (the sigma0 -#' grid). -#' @param w0 Numeric vector of prior mixture weights (summing to 1). -#' @param z Optional numeric vector of z-scores; defaults to \code{numeric(0)} -#' (derived from \code{stat}). +#' @param stat A list of summary statistics: \code{n} (per-variant sample +#' sizes), \code{variantNames}, and the marginal effects as \code{z}, or as +#' \code{b} with \code{seb}. +#' @param ldReference The LD reference the statistics' variants are matched +#' to by \code{stat$variantNames}: a genotype panel (see +#' \code{\link{readGenotypes}}), a \code{\link{GenotypeMixture}} or an +#' \code{\link{LdMatrix}}. \code{mr.ash.rss} takes an LD matrix, which is +#' formed from the reference over these variants. +#' @param varY Variance of the phenotype, or \code{NULL} (default) to fit on +#' the standardized scale. Used only with \code{b} and \code{seb}. +#' @param sigma2E Initial residual variance, or \code{NULL} (default) for +#' \code{mr.ash.rss}'s own. +#' @param s0 Prior variances of the mixture components, relative to the +#' residual variance, or \code{NULL} (default) for the grid +#' \code{susieR::mr.ash} uses by default, built for these statistics. +#' @param w0 Prior mixture weights (summing to 1), or \code{NULL} (default) +#' for equal weights. +#' @param fitRetention How much of the fit is kept as the \code{"fit"} +#' attribute of the returned weights: \code{"none"} (default) attaches +#' nothing, \code{"slim"} and \code{"full"} attach the fitted +#' \code{mr.ash.rss} model. This engine keeps no trimmable intermediates, +#' so the two retaining levels behave alike here. #' @param methodArgs Options forwarded to \code{susieR::mr.ash.rss}, built -#' with \code{\link{MrashOptions}}. A bare list is refused: it cannot be +#' with \code{\link{MrashRssOptions}}. A bare list is refused: it cannot be #' checked against the engine, so a misspelled option would be #' silently ignored. -#' @return A numeric vector of the posterior mean of the coefficients. +#' @return A numeric vector of the posterior mean of the coefficients. Unless +#' \code{fitRetention = "none"}, the fitted model is attached as attribute +#' \code{"fit"}. #' @importFrom susieR mr.ash.rss #' @examples #' data(eqtlRegionExample) @@ -28,41 +40,78 @@ NULL #' coef(summary(lm(y ~ X[, j])))[2, 1:2] #' }) #' stat <- list(b = vapply(ss, `[`, numeric(1), 1L), -#' seb = vapply(ss, `[`, numeric(1), 2L), n = rep(nrow(X), ncol(X))) -#' mrashRssWeights(stat, cor(X), varY = var(y), sigma2E = var(y), -#' s0 = c(0, 0.1, 0.5), w0 = c(0.8, 0.1, 0.1)) -#' @importFrom checkmate assertList assertNumeric +#' seb = vapply(ss, `[`, numeric(1), 2L), n = rep(nrow(X), ncol(X)), +#' variantNames = colnames(X)) +#' mrashRssWeights(stat, LdMatrix(cor(X))) +#' @importFrom checkmate assertList #' @export mrashRssWeights <- function( stat, - LD, - varY, - sigma2E, - s0, - w0, - z = numeric(0), + ldReference, + varY = NULL, + sigma2E = NULL, + s0 = NULL, + w0 = NULL, + fitRetention = c("none", "slim", "full"), methodArgs = MrashRssOptions() ) { + fitRetention <- arg_match(fitRetention) .assertMethodOptions(methodArgs, "MrashRssOptions", "methodArgs") assertList(stat) - assertNumeric(z) + R <- .rssLdMatrix(stat, ldReference, "mrashRssWeights") + n <- median(stat$n) + shat <- as.numeric(stat$seb %||% numeric(0)) + z <- .mrashRssZ(stat) + s0 <- s0 %||% .mrashRssDefaultGrid(n, z, shat, varY) callArgs <- list_modify( list( - bhat = stat$b, - shat = stat$seb, + bhat = as.numeric(stat$b %||% numeric(0)), + shat = shat, z = z, - R = LD, + R = R, var_y = varY, - n = median(stat$n), + n = n, sigma2_e = sigma2E, s0 = s0, - w0 = w0 + # A copy: mr.ash.rss() writes its fitted weights over the vector + # it is given, which would otherwise be the caller's. + w0 = (w0 %||% rep(1 / length(s0), length(s0))) + 0 ), !!!methodArgs ) model <- exec(mr.ash.rss, !!!callArgs) + if (identical(fitRetention, "none")) { + return(model$mu1) + } + `attr<-`(model$mu1, "fit", model) +} + +# The z-scores mr.ash.rss() fits: the statistics' own, or b / seb. +# @noRd +.mrashRssZ <- function(stat) { + hasBetaSe <- !is.null(stat$b) && !is.null(stat$seb) + z <- stat$z %||% (if (hasBetaSe) stat$b / stat$seb) + if (is.null(z)) { + abort("mrashRssWeights: `stat` must carry `z`, or `b` with `seb`.") + } + as.numeric(z) +} - return(model$mu1) +# susieR::mr.ash()'s own default prior grid, (2^((k - 1) / 25) - 1)^2 scaled +# by n / median(w) with w the columns' sums of squares, for the sufficient +# statistics mr.ash.rss() builds from these: w = n - 1 on the standardized +# scale it fits without both a finite varY and seb, and otherwise +# varY * adj / seb^2, with adj = (n - 1) / (z^2 + n - 2) the shrinkage it +# applies. +# @noRd +.mrashRssDefaultGrid <- function(n, z, shat, varY) { + unstandardized <- length(shat) > 0L && !is.null(varY) && is.finite(varY) + w <- if (unstandardized) { + varY * (n - 1) / (z^2 + n - 2) / shat^2 + } else { + rep(n - 1, length(z)) + } + (2^((0:24) / 25) - 1)^2 / median(w) * n } #' PRS-CS: a polygenic prediction method that infers posterior SNP effect sizes @@ -73,6 +122,11 @@ mrashRssWeights <- function( #' panel and infers posterior SNP effect sizes using Bayesian regression with #' continuous shrinkage priors. #' +#' Internal: \code{\link{prsCsWeights}} is the public interface. It forwards +#' the arguments below other than \code{bhat}, \code{R} and \code{n} through +#' \code{\link{PrsCsOptions}}, and with \code{fitRetention} returns this +#' function's list as the \code{"fit"} attribute of its weights. +#' #' @param bhat A vector of marginal effect sizes. #' @param R The LD correlation matrix (a single matrix over the analysed #' window), as in \code{susieR::susie_rss()}. @@ -93,48 +147,7 @@ mrashRssWeights <- function( #' estimates of SNP effect sizes. - psiEst: Posterior estimates of psi #' (shrinkage parameters). - sigmaEst: Posterior estimate of the residual #' variance. - phiEst: Posterior estimate of the global shrinkage parameter. -#' @examples -#' # Generate example data -#' set.seed(985115) -#' n <- 350 -#' p <- 16 -#' sigmasq_error <- 0.5 -#' zeroes <- rbinom(p, 1, 0.6) -#' beta.true <- rnorm(p, 1, sd = 4) -#' beta.true[zeroes] <- 0 -#' -#' X <- cbind(matrix(rnorm(n * p), nrow = n)) -#' X <- scale(X, center = TRUE, scale = FALSE) -#' y <- X %*% matrix(beta.true, ncol = 1) + rnorm(n, 0, sqrt(sigmasq_error)) -#' y <- scale(y, center = TRUE, scale = FALSE) -#' -#' # Calculate sufficient statistics -#' XtX <- t(X) %*% X -#' Xty <- t(X) %*% y -#' yty <- t(y) %*% y -#' -#' # Set the prior -#' K <- 9 -#' sigma0 <- c(0.001, .1, .5, 1, 5, 10, 20, 30, .005) -#' omega0 <- rep(1 / K, K) -#' -#' # Calculate summary statistics -#' b.hat <- sapply(1:p, function(j) { -#' summary(lm(y ~ X[, j]))$coefficients[-1, 1] -#' }) -#' s.hat <- sapply(1:p, function(j) { -#' summary(lm(y ~ X[, j]))$coefficients[-1, 2] -#' }) -#' R.hat <- cor(X) -#' var_y <- var(y) -#' sigmasq_init <- 1.5 -#' -#' # Run PRS CS -#' maf <- rep(0.5, length(b.hat)) # fake MAF -#' out <- prsCs(b.hat, R.hat, n, maf = maf) -#' # In sample prediction correlations -#' cor(X %*% out$betaEst, y) # 0.9944553 -#' @export +#' @keywords internal prsCs <- function( bhat, R, @@ -149,29 +162,63 @@ prsCs <- function( verbose = FALSE, seed = NULL ) { - # Shared LD-matrix validation, then the prsCs-specific maf length check. .rssValidateInputs(bhat, R, n) + .prsCsRun( + bhat, + list(R = R), + n, + a, + b, + phi, + maf, + nIter, + nBurnin, + thin, + verbose, + seed + ) +} + +# PRS-CS on an LD source (.ldSourceRows()): the sampler that factors R for a +# matrix, or for a factor the one that never forms R (prscs_mcmc.h), which +# draws differently from the same posterior. +# @noRd +.prsCsRun <- function( + bhat, + ld, + n, + a, + b, + phi, + maf, + nIter, + nBurnin, + thin, + verbose, + seed +) { if (!is.null(maf) && length(bhat) != length(maf)) { abort("The length of 'bhat' must be the same as 'maf'.") } - - # Run PRS-CS # cpp11 requires exact integer types for int parameters - result <- prsCsRcpp( + settings <- list( a = a, b = b, phi = phi, bhat = bhat, maf = maf, n = as.integer(n), - ldBlk = list(blk1 = R), nIter = as.integer(nIter), nBurnin = as.integer(nBurnin), thin = as.integer(thin), verbose = verbose, seed = seed ) - + result <- if (is.null(ld$F)) { + exec(prsCsCpp, !!!settings, ldBlk = list(blk1 = ld$R)) + } else { + exec(prsCsFactorCpp, !!!settings, factorR = ld$F) + } # Return the result as a list (camelCase to match the rest of the package # API). list( @@ -183,15 +230,30 @@ prsCs <- function( } #' Extract weights from prsCs function -#' @param stat A list of summary statistics with elements \code{b} (effect -#' sizes) and \code{n} (per-variant sample sizes). -#' @param LD Numeric LD (correlation) matrix aligned to the variants in -#' \code{stat}. -#' @param methodArgs Options forwarded to \code{prsCs}, built -#' with \code{\link{PrsCsOptions}}. A bare list is refused: it cannot be -#' checked against the engine, so a misspelled option would be +#' @param stat A list of summary statistics: \code{n} (per-variant sample +#' sizes) and the marginal effects as \code{cor} (standardized), \code{z}, +#' \code{b} with \code{seb}, or \code{b} alone, taken as already +#' standardized. The engine receives the standardized effects z / sqrt(n), +#' with n the median of \code{n}. +#' @param ldReference The LD reference the statistics' variants are matched +#' to by \code{stat$variantNames}: a genotype panel (see +#' \code{\link{readGenotypes}}), a \code{\link{GenotypeMixture}} or an +#' \code{\link{LdMatrix}}. A genotype reference's LD is used through its +#' standardized genotypes, never formed as a matrix. +#' @param fitRetention How much of the fit is kept as the \code{"fit"} +#' attribute of the returned weights: \code{"none"} (default) attaches +#' nothing, \code{"slim"} and \code{"full"} attach the sampler's posterior +#' estimates: \code{betaEst}, the local shrinkage parameters +#' \code{psiEst}, the residual variance \code{sigmaEst} and the global +#' shrinkage \code{phiEst}. This engine keeps no trimmable intermediates, +#' so the two retaining levels behave alike here. +#' @param methodArgs Options forwarded to the sampler, \code{\link{prsCs}}, +#' built with \code{\link{PrsCsOptions}}. A bare list is refused: it cannot +#' be checked against the engine, so a misspelled option would be #' silently ignored. -#' @return A numeric vector of the posterior SNP coefficients. +#' @return A numeric vector of the posterior SNP coefficients. Unless +#' \code{fitRetention = "none"}, the sampler's estimates are attached as +#' attribute \code{"fit"}. #' @examples #' data(eqtlRegionExample) #' X <- eqtlRegionExample$X[, 1:30] @@ -201,20 +263,51 @@ prsCs <- function( #' stat <- list( #' b = vapply(ss, `[`, numeric(1), 1L), #' seb = vapply(ss, `[`, numeric(1), 2L), -#' n = rep(nrow(X), ncol(X)) +#' n = rep(nrow(X), ncol(X)), +#' variantNames = colnames(X) +#' ) +#' w <- prsCsWeights( +#' stat, +#' LdMatrix(cor(X)), +#' fitRetention = "slim", +#' methodArgs = PrsCsOptions(maf = rep(0.3, ncol(X))) #' ) -#' LD <- cor(X) -#' prsCsWeights(stat, LD, methodArgs = PrsCsOptions(maf = rep(0.3, ncol(X)))) +#' attr(w, "fit")$phiEst #' @export -prsCsWeights <- function(stat, LD, methodArgs = PrsCsOptions()) { +prsCsWeights <- function( + stat, + ldReference, + fitRetention = c("none", "slim", "full"), + methodArgs = PrsCsOptions() +) { + fitRetention <- arg_match(fitRetention) .assertMethodOptions(methodArgs, "PrsCsOptions", "methodArgs") - callArgs <- list_modify( - list(bhat = stat$b, R = LD, n = median(stat$n)), - !!!methodArgs + ld <- .rssLdSource(stat, ldReference, "prsCsWeights") + n <- median(stat$n) + bhat <- .rssMarginalCor(stat, n = n, p = .ldSourceSize(ld)) + .rssValidateSource(bhat, ld, n) + settings <- list_modify( + .formalDefaults( + prsCs, + c( + "a", + "b", + "phi", + "maf", + "nIter", + "nBurnin", + "thin", + "verbose", + "seed" + ) + ), + !!!as.list(methodArgs) ) - model <- exec(prsCs, !!!callArgs) - - return(model$betaEst) + model <- exec(.prsCsRun, bhat = bhat, ld = ld, n = n, !!!settings) + if (identical(fitRetention, "none")) { + return(model$betaEst) + } + `attr<-`(model$betaEst, "fit", model) } #' SDPR (Summary-Statistics-Based Dirichelt Process Regression for Polygenic @@ -224,6 +317,11 @@ prsCsWeights <- function(stat, LD, methodArgs = PrsCsOptions()) { #' Markov Chain Monte Carlo (MCMC) for estimating effect sizes and heritability #' based on summary statistics and reference LD matrices. #' +#' Internal: \code{\link{sdprWeights}} is the public interface. It forwards +#' the arguments below other than \code{bhat}, \code{R} and \code{n} through +#' \code{\link{SdprOptions}}, and with \code{fitRetention} returns this +#' function's list as the \code{"fit"} attribute of its weights. +#' #' @param bhat A vector of marginal beta values for each SNP. #' @param R The LD correlation matrix (a single matrix over the analysed #' window). @@ -251,56 +349,14 @@ prsCsWeights <- function(stat, LD, methodArgs = PrsCsOptions()) { #' @param seed Integer or \code{NULL}. Random seed for the Gibbs sampler; #' \code{NULL} leaves the RNG state unchanged. #' @return A list with \code{betaEst} (the estimated effect sizes) and -#' \code{h2} (the estimated heritability). \code{sdprWeights()} returns -#' only \code{betaEst}; call this directly when you also want \code{h2}. -#' @examples -#' # Generate example data -#' set.seed(985115) -#' n <- 350 -#' p <- 16 -#' sigmasq_error <- 0.5 -#' zeroes <- rbinom(p, 1, 0.6) -#' beta.true <- rnorm(p, 1, sd = 4) -#' beta.true[zeroes] <- 0 -#' -#' X <- cbind(matrix(rnorm(n * p), nrow = n)) -#' X <- scale(X, center = TRUE, scale = FALSE) -#' y <- X %*% matrix(beta.true, ncol = 1) + rnorm(n, 0, sqrt(sigmasq_error)) -#' y <- scale(y, center = TRUE, scale = FALSE) -#' -#' # Calculate sufficient statistics -#' XtX <- t(X) %*% X -#' Xty <- t(X) %*% y -#' yty <- t(y) %*% y -#' -#' # Set the prior -#' K <- 9 -#' sigma0 <- c(0.001, .1, .5, 1, 5, 10, 20, 30, .005) -#' omega0 <- rep(1 / K, K) -#' -#' # Calculate summary statistics -#' b.hat <- sapply(1:p, function(j) { -#' summary(lm(y ~ X[, j]))$coefficients[-1, 1] -#' }) -#' s.hat <- sapply(1:p, function(j) { -#' summary(lm(y ~ X[, j]))$coefficients[-1, 2] -#' }) -#' R.hat <- cor(X) -#' var_y <- var(y) -#' sigmasq_init <- 1.5 -#' -#' # Run SDPR -#' out <- sdpr(b.hat, R.hat, n) -#' # In sample prediction correlations -#' cor(X %*% out$betaEst, y) # -#' +#' \code{h2} (the estimated heritability). #' @note This function wraps a rewritten and adapted version of the SDPR C++ #' implementation. SDPR is described in Zhou G, Zhao H (2021), "A fast and #' robust Bayesian nonparametric method for prediction of complex traits #' using summary statistics", PLoS Genetics 17(7): e1009697. #' \doi{10.1371/journal.pgen.1009697} #' -#' @export +#' @keywords internal sdpr <- function( bhat, R, @@ -320,12 +376,55 @@ sdpr <- function( verbose = TRUE, seed = NULL ) { - .sdprValidate(bhat, R, n, M, perVariantSampleSize, array) - # The C++ backend takes a block list; wrap the single-window matrix R as one - # block. cpp11 requires exact integer types for int params + sexp vectors. - sdprRcpp( + .rssValidateInputs(bhat, R, n) + .sdprRun( + bhat, + list(R = R), + n, + perVariantSampleSize, + array, + a, + c, + M, + a0k, + b0k, + iter, + burn, + thin, + numThreads, + optLlk, + verbose, + seed + ) +} + +# SDPR on an LD source (.ldSourceRows()): the sampler on the matrix, or the +# same sampler on the low-rank form of SDPR's matrices from a factor of it +# (sdpr_mcmc.h), which draws as the matrix route does without forming R. +# @noRd +.sdprRun <- function( + bhat, + ld, + n, + perVariantSampleSize, + array, + a, + c, + M, + a0k, + b0k, + iter, + burn, + thin, + numThreads, + optLlk, + verbose, + seed +) { + .sdprValidate(M, perVariantSampleSize, array) + # cpp11 requires exact integer types for int params + sexp vectors. + settings <- list( bhatR = bhat, - LD = list(blk1 = R), n = as.integer(n), perVariantSampleSize = perVariantSampleSize, array = if (!is.null(array)) as.integer(array) else NULL, @@ -342,13 +441,18 @@ sdpr <- function( verbose = verbose, seed = seed ) + if (is.null(ld$F)) { + # The C++ backend takes a block list; the window is one block. + return(exec(sdprCpp, !!!settings, LD = list(blk1 = ld$R))) + } + exec(sdprFactorCpp, !!!settings, factorR = ld$F) } -# Validate the SDPR inputs: RSS contract, M >= 4 (SDPR uses M-2 indexing in -# sample_V; M < 4 overflows), positive per-variant N, and array in {0, 1, 2}. +# Validate the SDPR settings: M >= 4 (SDPR uses M-2 indexing in sample_V; +# M < 4 overflows), positive per-variant N, and array in {0, 1, 2}. The RSS +# contract (bhat, LD, n) is checked by the callers. # @noRd -.sdprValidate <- function(bhat, R, n, M, perVariantSampleSize, array) { - .rssValidateInputs(bhat, R, n) +.sdprValidate <- function(M, perVariantSampleSize, array) { if (M < 4) { abort("'M' must be at least 4.") } @@ -366,15 +470,31 @@ sdpr <- function( } #' Extract weights from sdpr function -#' @param stat A list of summary statistics with elements \code{b} (effect -#' sizes) and \code{n} (per-variant sample sizes). -#' @param LD Numeric LD (correlation) matrix aligned to the variants in -#' \code{stat}. -#' @param methodArgs Options forwarded to \code{sdpr}, built -#' with \code{\link{SdprOptions}}. A bare list is refused: it cannot be -#' checked against the engine, so a misspelled option would be +#' @param stat A list of summary statistics: \code{n} (per-variant sample +#' sizes) and the marginal effects as \code{cor} (standardized), \code{z}, +#' \code{b} with \code{seb}, or \code{b} alone, taken as already +#' standardized. The engine receives the standardized effects z / sqrt(n), +#' with n the median of \code{n}. +#' @param ldReference The LD reference the statistics' variants are matched +#' to by \code{stat$variantNames}: a genotype panel (see +#' \code{\link{readGenotypes}}), a \code{\link{GenotypeMixture}} or an +#' \code{\link{LdMatrix}}. A genotype reference's LD is used through its +#' standardized genotypes and not formed as a matrix, except under +#' \code{optLlk = 2} when the per-variant sample sizes and arrays are +#' too varied for its low-rank form to pay. +#' @param fitRetention How much of the fit is kept as the \code{"fit"} +#' attribute of the returned weights: \code{"none"} (default) attaches +#' nothing, \code{"slim"} and \code{"full"} attach the sampler's +#' estimates, \code{betaEst} and the heritability \code{h2}. This engine +#' keeps no trimmable intermediates, so the two retaining levels behave +#' alike here. +#' @param methodArgs Options forwarded to the sampler, \code{\link{sdpr}}, +#' built with \code{\link{SdprOptions}}. A bare list is refused: it cannot +#' be checked against the engine, so a misspelled option would be #' silently ignored. -#' @return A numeric vector of the posterior SNP coefficients. +#' @return A numeric vector of the posterior SNP coefficients. Unless +#' \code{fitRetention = "none"}, the sampler's estimates, the heritability +#' among them, are attached as attribute \code{"fit"}. #' @examples #' data(eqtlRegionExample) #' X <- eqtlRegionExample$X[, 1:30] @@ -384,20 +504,51 @@ sdpr <- function( #' stat <- list( #' b = vapply(ss, `[`, numeric(1), 1L), #' seb = vapply(ss, `[`, numeric(1), 2L), -#' n = rep(nrow(X), ncol(X)) +#' n = rep(nrow(X), ncol(X)), +#' variantNames = colnames(X) #' ) -#' LD <- cor(X) -#' sdprWeights(stat, LD) +#' w <- sdprWeights(stat, LdMatrix(cor(X)), fitRetention = "slim") +#' attr(w, "fit")$h2 #' @export -sdprWeights <- function(stat, LD, methodArgs = SdprOptions()) { +sdprWeights <- function( + stat, + ldReference, + fitRetention = c("none", "slim", "full"), + methodArgs = SdprOptions() +) { + fitRetention <- arg_match(fitRetention) .assertMethodOptions(methodArgs, "SdprOptions", "methodArgs") - callArgs <- list_modify( - list(bhat = stat$b, R = LD, n = median(stat$n)), - !!!methodArgs + ld <- .rssLdSource(stat, ldReference, "sdprWeights") + n <- median(stat$n) + bhat <- .rssMarginalCor(stat, n = n, p = .ldSourceSize(ld)) + .rssValidateSource(bhat, ld, n) + settings <- list_modify( + .formalDefaults( + sdpr, + c( + "perVariantSampleSize", + "array", + "a", + "c", + "M", + "a0k", + "b0k", + "iter", + "burn", + "thin", + "numThreads", + "optLlk", + "verbose", + "seed" + ) + ), + !!!as.list(methodArgs) ) - model <- exec(sdpr, !!!callArgs) - - return(model$betaEst) + model <- exec(.sdprRun, bhat = bhat, ld = ld, n = n, !!!settings) + if (identical(fitRetention, "none")) { + return(model$betaEst) + } + `attr<-`(model$betaEst, "fit", model) } @@ -537,10 +688,15 @@ mrmashWeights <- function( #' \code{\link{computeCovDiag}}, or \code{mashr::cov_flash}) to add #' data-driven covariance components alongside the canonical mixture. #' -#' @param stat A list with \code{z} (variants x conditions matrix) and \code{n} -#' (per-context numeric vector or scalar). May also include \code{Bhat}, -#' \code{Shat} matrices. -#' @param LD LD correlation matrix. +#' @param stat A list with \code{z} (variants x conditions matrix), +#' \code{n} (per-context numeric vector or scalar) and \code{variantNames}. +#' May also include \code{Bhat}, \code{Shat} matrices. +#' @param ldReference The LD reference the statistics' variants are matched +#' to by \code{stat$variantNames}: a genotype panel (see +#' \code{\link{readGenotypes}}), a \code{\link{GenotypeMixture}} or an +#' \code{\link{LdMatrix}}. \code{mr.mash.rss} takes an LD matrix, which is +#' formed from the reference over these variants; it is not read when +#' \code{mrmashRssFit} is supplied. #' @param mrmashRssFit Optional pre-fitted \code{mr.mash.rss} object; skips #' fitting when supplied. #' @param dataDrivenPriorMatrices Optional list with element \code{U} (list of @@ -579,15 +735,16 @@ mrmashWeights <- function( #' cond <- c("brain", "blood", "muscle") #' zmat <- matrix(rnorm(30 * 3), 30, 3, #' dimnames = list(colnames(X), cond)) -#' stat <- list(z = zmat, n = matrix(nrow(X), 30, 3)) -#' mrmashRssWeights(stat, cor(X), +#' stat <- list(z = zmat, n = matrix(nrow(X), 30, 3), +#' variantNames = colnames(X)) +#' mrmashRssWeights(stat, LdMatrix(cor(X)), #' dataDrivenPriorMatrices = multiTraitData$priorMatrices, #' canonicalPriorMatrices = TRUE) #' @export #' @importFrom checkmate assertFlag assertList mrmashRssWeights <- function( stat, - LD, + ldReference, mrmashRssFit = NULL, dataDrivenPriorMatrices = NULL, canonicalPriorMatrices = TRUE, @@ -606,7 +763,7 @@ mrmashRssWeights <- function( if (is.null(mrmashRssFit)) { mrmashRssFit <- .mrmashRssComputeFit( stat, - LD, + .rssLdMatrix(stat, ldReference, "mrmashRssWeights"), dataDrivenPriorMatrices, canonicalPriorMatrices, S0, @@ -630,11 +787,7 @@ mrmashRssWeights <- function( # @noRd .mrmashRssRequirePackage <- function() { if (!requireNamespace("mr.mashr", quietly = TRUE)) { - msg <- glue( - "Package 'mr.mashr' is required. ", - "is required." - ) - abort(msg) + abort("Package 'mr.mashr' is required for mrmashRssWeights().") } } @@ -713,18 +866,6 @@ mrmashRssWeights <- function( } -# Get a reasonable setting for the standard deviations of the mixture -# components in the mixture-of-normals prior based on the data (X, y). -# Input se is an estimate of the residual *variance*, and n is the -# number of standard deviations to return. This code is adapted from -# the autoselect.mixsd function in the ashr package. -#' @importFrom susieR univariate_regression -initPriorSd <- function(X, y, n = 30) { - res <- univariate_regression(X, y) - smax <- 3 * max(res$betahat) - seq(0, smax, length.out = n) -} - # Identify zero-variance columns of X and warn the caller before they are # dropped. Returns a logical vector of length ncol(X) where TRUE indicates a # column to keep. The downstream solvers in pecotmr's regression wrappers @@ -1002,16 +1143,16 @@ MrashRssOptions <- function(...) { c( bhat = "supplied from the data by the pipeline", shat = "supplied from the data by the pipeline", + z = "supplied from the data by the pipeline", R = "supplied from the data by the pipeline", n = "supplied from the data by the pipeline", - # The engine writes these five in snake_case while the wrapper - # spells them camelCase, so they read as unrelated names; every - # one is still fed straight from a formal. - z = "the wrapper's `z`", - var_y = "the wrapper's `varY`", - sigma2_e = "the wrapper's `sigma2E`", s0 = "the wrapper's `s0`", - w0 = "the wrapper's `w0`" + w0 = "the wrapper's `w0`", + # The engine writes these two in snake_case while the wrapper + # spells them camelCase, so they read as unrelated names; both + # are still fed straight from a formal. + var_y = "the wrapper's `varY`", + sigma2_e = "the wrapper's `sigma2E`" ), "MrashRssOptions" ) @@ -1338,9 +1479,10 @@ lassoWeights <- function(X, y, methodArgs = GlmnetOptions()) { #' Compute Weights Using mr.ash Shrinkage #' #' This function fits the `mr.ash` model (adaptive shrinkage regression) to -#' estimate weights for a given set of predictors and response. It uses optional -#' prior standard deviation initialization and can accept custom initial beta -#' values. +#' estimate weights for a given set of predictors and response. The prior is +#' \code{susieR::mr.ash}'s own default mixture grid unless \code{sa2} is +#' supplied through \code{methodArgs}, and custom initial beta values are +#' accepted. #' #' @examples #' set.seed(1) @@ -1351,14 +1493,11 @@ lassoWeights <- function(X, y, methodArgs = GlmnetOptions()) { #' @importFrom stats predict #' @param X Numeric genotype / design matrix (samples x variants). #' @param y Numeric response (phenotype) vector of length \code{nrow(X)}. -#' @param initPriorSd Logical. Initialize the prior standard-deviation grid -#' from the data. Default \code{TRUE}. #' @param fitRetention How much of the fit is kept as the \code{"fit"} #' attribute of the returned weights: \code{"none"} (default) attaches #' nothing, \code{"slim"} and \code{"full"} attach the fitted model. This #' engine keeps no trimmable intermediates, so the two retaining levels #' behave alike here. -#' Default \code{FALSE}. #' @param methodArgs Options forwarded to \code{susieR::mr.ash}, built #' with \code{\link{MrashOptions}}. A bare list is refused: it cannot be #' checked against the engine, so a misspelled option would be @@ -1367,17 +1506,14 @@ lassoWeights <- function(X, y, methodArgs = GlmnetOptions()) { #' zero-variance columns receive weight 0. Unless #' \code{fitRetention = "none"} the fitted \code{mr.ash} object is #' attached as attribute \code{"fit"}. -#' @importFrom checkmate assertFlag #' @export mrashWeights <- function( X, y, - initPriorSd = TRUE, fitRetention = c("none", "slim", "full"), methodArgs = MrashOptions() ) { .assertMethodOptions(methodArgs, "MrashOptions", "methodArgs") - assertFlag(initPriorSd) fitRetention <- arg_match(fitRetention) keep <- .dropZeroVariance(X, "mrashWeights") XKeep <- X[, keep, drop = FALSE] @@ -1387,15 +1523,7 @@ mrashWeights <- function( as.list(methodArgs), !!!.mrashBetaInit(methodArgs, XKeep, y, X, keep) ) - MrashOptions <- c( - list( - X = XKeep, - y = y, - sa2 = if (initPriorSd) initPriorSd(XKeep, y)^2 else NULL - ), - argsList - ) - fit.mr.ash <- exec(mr.ash, !!!MrashOptions) + fit.mr.ash <- exec(mr.ash, X = XKeep, y = y, !!!argsList) # Zero-variance columns were never fitted and keep a zero weight. eff.wgt <- replace( rep(0, ncol(X)), @@ -2153,6 +2281,12 @@ bayesRWeights <- function( #' Based on Mak et al (2017) "Polygenic scores via penalized regression on #' summary statistics", Genetic Epidemiology 41(6):469-480. #' +#' Internal: \code{\link{lassosumRssWeights}} is the public interface. It +#' runs this over a grid of LD shrinkage values, forwards \code{lambda}, +#' \code{thr} and \code{maxiter} through \code{\link{LassosumOptions}}, and +#' with \code{fitRetention} returns the paths as the \code{"fit"} attribute +#' of its weights. +#' #' @param bhat A vector of marginal effect sizes. #' @param R The LD correlation matrix (a single matrix over the analysed #' window), as in \code{susieR::susie_rss()}. If shrinkage is desired, apply @@ -2172,18 +2306,7 @@ bayesRWeights <- function( #' \item{fbeta}{Full objective value at each lambda.} #' \item{nparams}{Number of non-zero coefficients at each lambda.} #' -#' @examples -#' set.seed(42) -#' p <- 10 -#' n <- 100 -#' bhat <- rnorm(p, sd = 0.1) -#' R <- diag(p) -#' for (i in 1:(p - 1)) { -#' R[i, i + 1] <- 0.3 -#' R[i + 1, i] <- 0.3 -#' } -#' out <- lassosumRss(bhat, R, n) -#' @export +#' @keywords internal #' @importFrom checkmate assertCount assertNumber assertNumeric lassosumRss <- function( bhat, @@ -2193,14 +2316,19 @@ lassosumRss <- function( thr = 1e-4, maxiter = 10000 ) { + .lassosumRssPath(bhat, list(R = R), n, lambda, thr, maxiter) +} + +# lassosumRss() on an LD source: the matrix, or a factor of it with its +# shrinkage, which the factor solver applies without forming R. +# @noRd +.lassosumRssPath <- function(bhat, ld, n, lambda, thr, maxiter) { assertNumeric(lambda, lower = 0, any.missing = FALSE) assertNumber(thr, lower = 0, finite = TRUE) assertCount(maxiter, positive = TRUE) - # cpp11 requires exact integer types; the C++ backend takes a block list, so - # the single-window matrix R is wrapped as one block here. .rssSolvePath( bhat, - R, + ld, n, lambda, .rssLassosumSolve, @@ -2208,25 +2336,49 @@ lassosumRss <- function( ) } -.lassosumCorFromStat <- function(stat, n, p) { +# .lassosumRssPath() with lassosumRss()'s own defaults under `args`, the +# caller's options. A matrix takes exactly the path lassosumRss() does. +# @noRd +.lassosumRssOn <- function(bhat, ld, n, args) { + settings <- list_modify( + .formalDefaults(lassosumRss, c("lambda", "thr", "maxiter")), + !!!args + ) + exec(.lassosumRssPath, bhat = bhat, ld = ld, n = n, !!!settings) +} + +# The values `fn` declares as the defaults of its formals `fmlNames`, +# evaluated as the function itself would evaluate them. The internal LD-source +# paths run lassosumRss(), penalizedRss(), prsCs() and sdpr() on a factor of +# the LD, and take those functions' defaults from here rather than restating +# them. +# @noRd +#' @importFrom rlang fn_fmls fn_env eval_bare +.formalDefaults <- function(fn, fmlNames) { + map(fn_fmls(fn)[fmlNames], eval_bare, env = fn_env(fn)) +} + +# The standardized marginal effects, z / sqrt(n): the scale lassosum, PRS-CS +# and SDPR all fit. Read from `cor` as given, else from `z`, else from +# `b / seb`, which is a z-score whatever scale `b` is on, else from `b` alone, +# taken as already standardized. +.rssMarginalCor <- function(stat, n, p) { corInput <- if (!is.null(stat$cor)) { as.numeric(stat$cor) } else if (!is.null(stat$z)) { as.numeric(stat$z) / sqrt(n) + } else if (!is.null(stat$b) && !is.null(stat$seb)) { + as.numeric(stat$b) / as.numeric(stat$seb) / sqrt(n) } else if (!is.null(stat$b)) { as.numeric(stat$b) } else { - msg <- glue( - "stat must contain one of 'cor', 'z', or 'b' for lassosum ", - "selection." - ) - abort(msg) + abort("stat must contain one of 'cor', 'z', or 'b'.") } if (length(corInput) != p) { nInput <- length(corInput) msg <- glue( - "The length of lassosum input statistics ({nInput}) must ", - "equal nrow(LD) ({p})." + "The length of the input statistics ({nInput}) must equal the ", + "number of LD variants ({p})." ) abort(msg) } @@ -2254,10 +2406,9 @@ lassosumRss <- function( ) } -.lassosumSelectLdQuadratic <- function(candidateBeta, corInput, LD) { - ldBeta <- LD %*% candidateBeta +.lassosumSelectLdQuadratic <- function(candidateBeta, corInput, ld) { bxy <- as.numeric(crossprod(corInput, candidateBeta)) - bxxb <- colSums(candidateBeta * ldBeta) + bxxb <- .ldQuadForms(ld, candidateBeta) positive <- is.finite(bxxb) & bxxb > 0 scores <- replace( rep(-Inf, length(bxy)), @@ -2276,9 +2427,9 @@ lassosumRss <- function( # penalizedRss via .rssSolvePath, prsCs, and sdpr). R is a single LD correlation # matrix over one cis-window, matching susieR::susie_rss; bhat must match # nrow(R). missing() guards turn an omitted R / n into a clear message instead -# of an "argument is missing" error, and propagate through the public wrappers -# (verified two levels deep). Method-specific checks -- prsCs's maf length, -# sdpr's M / perVariantSampleSize / array -- stay in the caller. +# of an "argument is missing" error, and propagate through the solvers' +# callers (verified two levels deep). Method-specific checks -- prsCs's maf +# length, sdpr's M / perVariantSampleSize / array -- stay in the caller. #' @importFrom checkmate assertVector .rssValidateInputs <- function(bhat, R, n) { if (missing(R) || !is.matrix(R)) { @@ -2291,19 +2442,35 @@ lassosumRss <- function( invisible(NULL) } -# Validate (bhat, LD, n), run a decreasing-lambda coordinate-descent sweep via -# `solveFn` (the penalty-specific Rcpp backend), then reorder back to the input +# .rssValidateInputs() for an LD source (.ldSourceRows()): the matrix +# checks for a matrix, and for a factor the same checks against its columns. +# @noRd +.rssValidateSource <- function(bhat, ld, n) { + if (!is.null(ld$R)) { + return(.rssValidateInputs(bhat, ld$R, n)) + } + if (missing(n) || n <= 0) { + abort("Please provide a valid sample size using 'n'.") + } + assertVector(bhat, len = ncol(ld$F)) + invisible(NULL) +} + +# Validate (bhat, ld, n), run a decreasing-lambda coordinate-descent sweep via +# `solveFn` (the penalty-specific C++ solver), then reorder back to the input # lambda order via the inverse permutation and assemble the standard result -# list. Shared by lassosumRss and penalizedRss, which differ only in which Rcpp +# list. Shared by lassosumRss and penalizedRss, which differ only in which C++ # solver they pass as `solveFn` (and penalizedRss's per-penalty gamma default). -.rssSolvePath <- function(bhat, R, n, lambda, solveFn, solveArgs = list()) { - .rssValidateInputs(bhat, R, n) +# `ld` is an LD source: the matrix, or a factor of it with the shrinkage the +# factor solver applies itself. +.rssSolvePath <- function(bhat, ld, n, lambda, solveFn, solveArgs = list()) { + .rssValidateSource(bhat, ld, n) z <- bhat / sqrt(n) order <- order(lambda, decreasing = TRUE) # `solveArgs` rather than `...`: the two solvers take different fixed # argument sets, and both callers know theirs statically, so an unknown # solver argument should be an error here rather than reaching the solver. - solved <- exec(solveFn, z, lambda[order], R, !!!solveArgs) + solved <- exec(solveFn, z, lambda[order], ld, !!!solveArgs) # Reorder back to original lambda order via the inverse permutation. invOrder <- order(order) beta <- solved$beta[, invOrder, drop = FALSE] @@ -2324,44 +2491,42 @@ lassosumRss <- function( # fields apply). Returns list(beta, meta); l0learn's inner lambda0 sweep is # here. # @noRd -.rssFitOne <- function(method, solverInput, LDs, n, sVal, config) { +.rssFitOne <- function(method, solverInput, ld, n, sVal, config) { switch( method, - lassosum = .rssFitLassosum(solverInput, LDs, n, sVal, config), - penalized = .rssFitPenalized(solverInput, LDs, n, sVal, config), - l0learn = .rssFitL0learn(solverInput, LDs, n, sVal, config) + lassosum = .rssFitLassosum(solverInput, ld, n, sVal, config), + penalized = .rssFitPenalized(solverInput, ld, n, sVal, config), + l0learn = .rssFitL0learn(solverInput, ld, n, sVal, config) ) } -# Shared (s, lambda, fbeta) path-metadata frame for a single-path model. +# Shared per-candidate frame for a single-path model: the shrinkage s and +# each lambda, with the solver's objective, loss, convergence flag and number +# of non-zero coefficients there. # @noRd .rssPathMeta <- function(sVal, model) { tibble( s = rep(sVal, length(model$lambda)), lambda = model$lambda, - fbeta = model$fbeta + fbeta = model$fbeta, + loss = model$loss, + conv = model$conv, + nparams = model$nparams ) } -# lassosum shrinkage path for one s. +# lassosum shrinkage path for one s, against `ld` shrunk to that s. # @noRd -.rssFitLassosum <- function(solverInput, LDs, n, sVal, config) { - lsArgs <- c( - list(bhat = solverInput, R = LDs, n = n), - as.list(config$dotArgs) - ) - model <- exec(lassosumRss, !!!lsArgs) +.rssFitLassosum <- function(solverInput, ld, n, sVal, config) { + model <- .lassosumRssOn(solverInput, ld, n, as.list(config$dotArgs)) list(beta = model$beta, meta = .rssPathMeta(sVal, model)) } -# ncvreg-penalized shrinkage path for one s. +# ncvreg-penalized shrinkage path for one s, against `ld` shrunk to that s. # @noRd -.rssFitPenalized <- function(solverInput, LDs, n, sVal, config) { - penArgs <- c( +.rssFitPenalized <- function(solverInput, ld, n, sVal, config) { + settings <- c( list( - bhat = solverInput, - R = LDs, - n = n, penalty = config$penalty, gamma = config$gamma, alpha = config$alpha, @@ -2370,18 +2535,18 @@ lassosumRss <- function( ), as.list(config$dotArgs) ) - model <- exec(penalizedRss, !!!penArgs) + model <- .penalizedRssOn(solverInput, ld, n, settings) list(beta = model$beta, meta = .rssPathMeta(sVal, model)) } # L0Learn path for one s: one penalizedRss fit per lambda0, column-bound. # @noRd -.rssFitL0learn <- function(solverInput, LDs, n, sVal, config) { +.rssFitL0learn <- function(solverInput, ld, n, sVal, config) { fits <- map( config$lambda0, .rssL0LambdaFit, solverInput = solverInput, - LDs = LDs, + ld = ld, n = n, sVal = sVal, config = config @@ -2428,57 +2593,147 @@ lassosumRss <- function( `attr<-`(bestBeta, attrName, selection) } -# Shared scaffold for the RSS shrinkage-grid weight functions -# (lassosumRssWeights / .penalizedRssWeights / l0learnRssWeights). Standardizes -# the stat -> solverInput conversion, the outer LD-shrinkage grid over `s`, the -# candidate accumulation, and the ldQuadratic / minFbeta selection. `method` + -# `config` pick the per-`s` solver (.rssFitOne) and the finalizer -# (.rssFinalize). -# One shrinkage level's fit against the correspondingly shrunk LD. +# The LD the RSS weight methods read, matched to the statistics' variants +# (`stat$variantNames`): a factor of it for a genotype reference, which the +# factor solvers use without forming the p x p matrix, or the matrix an +# LdMatrix holds. Matching, allele flips, standardizing and padding are the +# LD reference layer's own (.ldFactorFromRef(), .ldFromRef()). # @noRd -.rssFitAtS <- function(sVal, method, solverInput, LD, n, p, config) { - .rssFitOne( - method, - solverInput, - (1 - sVal) * LD + sVal * diag(p), - n, - sVal, - config - ) +.rssLdSource <- function(stat, ldReference, label) { + ids <- .rssStatVariantIds(stat, label) + if (.ldIsGenotypeRef(ldReference)) { + return(list(F = .ldFactorFromRef(ldReference, ids, label))) + } + list(R = .ldFromRef(ldReference, ids, label)) +} + +# The LD matrix itself, for the engines that take nothing else (mr.ash.rss, +# mr.mash.rss). +# @noRd +.rssLdMatrix <- function(stat, ldReference, label) { + .ldFromRef(ldReference, .rssStatVariantIds(stat, label), label) +} + +# The variant ids an LD reference is matched on. +# @noRd +.rssStatVariantIds <- function(stat, label) { + ids <- stat$variantNames + if (is.null(ids)) { + abort(glue( + "{label}: `stat` must carry `variantNames`, the variant ids ", + "`ldReference` is matched on." + )) + } + ids +} + +# How many variants the statistics describe, for the weight extractors that +# check a fit against them: their variant ids, all of which must be in +# `ldReference` when one is given, or else their z-scores or effects (rows, +# for a multi-condition matrix). NA when the statistics carry none of these. +# @noRd +.rssVariantCount <- function(stat, ldReference, label) { + if (!is.null(ldReference)) { + ids <- .rssStatVariantIds(stat, label) + .ldFromRefValidate(ldReference, label) + .ldFromRefMatch(ldReference, ids, label, "error") + return(length(ids)) + } + described <- stat$variantNames %||% stat$z %||% stat$b + if (is.null(described)) NA_integer_ else NROW(described) +} + +# One shrinkage level's fit against R_s = (1 - s) R + s I. +# @noRd +.rssFitAtS <- function(sVal, method, solverInput, ld, n, config) { + .rssFitOne(method, solverInput, .rssShrunkLd(ld, sVal), n, sVal, config) +} + +# An LD source shrunk to R_s = (1 - s) R + s I: the source carries s to the +# solver, which applies it to the matrix or the factor without forming R_s, +# so the grid over s shares one LD matrix rather than copying it per s. +# @noRd +.rssShrunkLd <- function(ld, s) { + list_assign(ld, shrink = s) } +# Shared scaffold for the RSS shrinkage-grid weight functions +# (lassosumRssWeights / .penalizedRssWeights / l0learnRssWeights), run for the +# statistics `stat` against the LD source `ld` (see .rssLdSource()). +# Standardizes the stat -> solverInput conversion, the outer LD-shrinkage grid +# over `s`, the candidate accumulation, and the ldQuadratic / minFbeta +# selection. `method` + `config` pick the per-`s` solver (.rssFitOne) and the +# finalizer (.rssFinalize); `fitRetention` how much of the search is kept. +# @noRd .rssShrinkGridWeights <- function( stat, - LD, + ld, s, method, config, - selection = c("ldQuadratic", "minFbeta") + selection = c("ldQuadratic", "minFbeta"), + fitRetention = c("none", "slim", "full") ) { selection <- arg_match(selection) + fitRetention <- arg_match(fitRetention) n <- median(stat$n) - p <- nrow(LD) - corInput <- .lassosumClampCor(.lassosumCorFromStat(stat, n = n, p = p)) + p <- .ldSourceSize(ld) + corInput <- .lassosumClampCor(.rssMarginalCor(stat, n = n, p = p)) solverInput <- corInput * sqrt(n) fits <- map( s, .rssFitAtS, method = method, solverInput = solverInput, - LD = LD, + ld = ld, n = n, - p = p, config = config ) candidateBeta <- exec(cbind, !!!map(fits, "beta")) candidateMeta <- bind_rows(map(fits, "meta")) selectorResult <- if (selection == "ldQuadratic") { - .lassosumSelectLdQuadratic(candidateBeta, corInput, LD) + .lassosumSelectLdQuadratic(candidateBeta, corInput, ld) } else { .lassosumSelectMinFbeta(candidateBeta, candidateMeta) } bestBeta <- as.numeric(selectorResult$beta) - .rssFinalize(method, bestBeta, selectorResult, candidateMeta, config) + weights <- .rssFinalize( + method, + bestBeta, + selectorResult, + candidateMeta, + config + ) + .rssAttachGridFit( + weights, + candidateBeta, + candidateMeta, + selectorResult$index, + fitRetention + ) +} + +# The search behind the grid weights as their "fit" attribute: `path`, one +# row per candidate fit with the solver's diagnostics and `selected` marking +# the one returned, and at fitRetention = "full" also `beta`, the candidates' +# coefficients (variants x candidates, in path's row order). Returns `weights` +# unchanged at fitRetention = "none". +# @noRd +.rssAttachGridFit <- function( + weights, + candidateBeta, + candidateMeta, + index, + fitRetention +) { + if (identical(fitRetention, "none")) { + return(weights) + } + fit <- c( + list(path = mutate(candidateMeta, selected = row_number() == index)), + compact(list(beta = if (fitRetention == "full") candidateBeta)) + ) + `attr<-`(weights, "fit", fit) } #' Extract weights from lassosumRss with shrinkage grid search @@ -2501,20 +2756,36 @@ lassosumRss <- function( #' This implementation therefore uses the supplied LD matrix directly for #' selection. \code{min(fbeta)} is retained only as an explicit debug option. #' -#' @param stat A list with \code{$b} (effect sizes) and \code{$n} (per-variant -#' sample sizes). -#' @param LD LD correlation matrix R (single matrix, NOT pre-shrunk). +#' @param stat A list of summary statistics: \code{n} (per-variant sample +#' sizes) and the marginal effects as \code{cor} (standardized), \code{z}, +#' \code{b} with \code{seb}, or \code{b} alone, taken as already +#' standardized. The engine receives the standardized effects z / sqrt(n), +#' with n the median of \code{n}. +#' @param ldReference The LD reference the statistics' variants are matched +#' to by \code{stat$variantNames}: a genotype panel (see +#' \code{\link{readGenotypes}}), a \code{\link{GenotypeMixture}} or an +#' \code{\link{LdMatrix}}. A genotype reference's LD is used through its +#' standardized genotypes, never formed as a matrix. #' @param s Numeric vector of shrinkage parameters to search over. Default: #' \code{c(0.2, 0.5, 0.9, 1.0)} following Mak et al (2017) and OTTERS. #' @param selection Selection strategy. Default \code{"ldQuadratic"} uses #' \eqn{c^T \beta / \sqrt{\beta^T R \beta}} on the supplied LD matrix. #' \code{"minFbeta"} is retained as an explicit alternative for debugging. -#' @param methodArgs Options forwarded to \code{lassosumRss}, built -#' with \code{\link{LassosumOptions}}. A bare list is refused: it cannot be -#' checked against the engine, so a misspelled option would be -#' silently ignored. +#' @param fitRetention How much of the search is kept as the \code{"fit"} +#' attribute of the returned weights. \code{"none"} (default) attaches +#' nothing. \code{"slim"} keeps \code{path}, a table with one row per +#' candidate (\code{s}, \code{lambda}) giving the solver's objective +#' \code{fbeta}, \code{loss}, convergence flag \code{conv} and number of +#' non-zero coefficients \code{nparams}, with \code{selected} marking the +#' candidate returned. \code{"full"} also keeps \code{beta}, the +#' candidates' coefficients (variants x candidates, in the rows' order). +#' @param methodArgs Options forwarded to the solver, +#' \code{\link{lassosumRss}}, built with \code{\link{LassosumOptions}}. A +#' bare list is refused: it cannot be checked against the engine, so a +#' misspelled option would be silently ignored. #' @return A numeric vector of the posterior SNP coefficients at the best (s, -#' lambda). +#' lambda). Unless \code{fitRetention = "none"}, the search is attached as +#' attribute \code{"fit"}. #' @examples #' data(eqtlRegionExample) #' X <- eqtlRegionExample$X[, 1:30] @@ -2524,27 +2795,31 @@ lassosumRss <- function( #' stat <- list( #' b = vapply(ss, `[`, numeric(1), 1L), #' seb = vapply(ss, `[`, numeric(1), 2L), -#' n = rep(nrow(X), ncol(X)) +#' n = rep(nrow(X), ncol(X)), +#' variantNames = colnames(X) #' ) -#' LD <- cor(X) -#' lassosumRssWeights(stat, LD) +#' w <- lassosumRssWeights(stat, LdMatrix(cor(X)), fitRetention = "slim") +#' head(attr(w, "fit")$path) #' @export lassosumRssWeights <- function( stat, - LD, + ldReference, s = c(0.2, 0.5, 0.9, 1.0), selection = c("ldQuadratic", "minFbeta"), + fitRetention = c("none", "slim", "full"), methodArgs = LassosumOptions() ) { .assertMethodOptions(methodArgs, "LassosumOptions", "methodArgs") selection <- arg_match(selection) + fitRetention <- arg_match(fitRetention) .rssShrinkGridWeights( stat, - LD, + .rssLdSource(stat, ldReference, "lassosumRssWeights"), s, "lassosum", list(dotArgs = methodArgs), - selection + selection, + fitRetention ) } @@ -2556,6 +2831,13 @@ lassosumRssWeights <- function( #' where \eqn{R} is a (possibly pre-shrunk) LD matrix and \eqn{z = \hat\beta / #' \sqrt{n}}. #' +#' Internal: \code{\link{scadRssWeights}}, \code{\link{mcpRssWeights}} and +#' \code{\link{l0learnRssWeights}} are the public interface, with +#' \code{\link{lassosumRssWeights}} for the lasso. They run this over a grid +#' of LD shrinkage values, forward its options through +#' \code{\link{PenalizedRssOptions}}, and with \code{fitRetention} return +#' the paths as the \code{"fit"} attribute of their weights. +#' #' @param bhat Numeric vector of marginal effect estimates (length p). #' @param R The LD correlation matrix (a single matrix over the analysed #' window), as in \code{lassosumRss()}. @@ -2590,19 +2872,7 @@ lassosumRssWeights <- function( #' \item{betaEst}{Coefficient vector at the lambda minimizing fbeta.} #' } #' -#' @examples -#' set.seed(42) -#' p <- 10; n <- 100 -#' bhat <- rnorm(p, sd = 0.1) -#' R <- diag(p) -#' # MCP -#' penalizedRss(bhat, R, n, penalty = "MCP") -#' # SCAD -#' penalizedRss(bhat, R, n, penalty = "SCAD") -#' # L0 -#' penalizedRss(bhat, R, n, penalty = "L0", lambda0 = 0.01, -#' lambda = c(0)) -#' @export +#' @keywords internal penalizedRss <- function( bhat, R, @@ -2617,16 +2887,44 @@ penalizedRss <- function( maxiter = 10000, maxSwaps = 100 ) { - penalty <- arg_match(penalty) + .penalizedRssPath( + bhat, + list(R = R), + n, + arg_match(penalty), + lambda, + gamma, + alpha, + lambda0, + lambda2, + thr, + maxiter, + maxSwaps + ) +} + +# penalizedRss() on an LD source: the matrix, or a factor of it with its +# shrinkage, which the factor solver applies without forming R. +# @noRd +.penalizedRssPath <- function( + bhat, + ld, + n, + penalty, + lambda, + gamma, + alpha, + lambda0, + lambda2, + thr, + maxiter, + maxSwaps +) { # Default gamma per penalty - if (is.null(gamma)) { - gamma <- switch(penalty, SCAD = 3.7, MCP = 3.0, 0.0) - } - # C++ backend takes a block list; wrap the single-window matrix R as one - # block. + gamma <- gamma %||% switch(penalty, SCAD = 3.7, MCP = 3.0, 0.0) .rssSolvePath( bhat, - R, + ld, n, lambda, .rssPenalizedSolve, @@ -2643,6 +2941,30 @@ penalizedRss <- function( ) } +# .penalizedRssPath() with penalizedRss()'s own defaults under `args`, the +# caller's settings, which always name the penalty. A matrix takes exactly +# the path penalizedRss() does. +# @noRd +.penalizedRssOn <- function(bhat, ld, n, args) { + settings <- list_modify( + .formalDefaults( + penalizedRss, + c( + "lambda", + "gamma", + "alpha", + "lambda0", + "lambda2", + "thr", + "maxiter", + "maxSwaps" + ) + ), + !!!args + ) + exec(.penalizedRssPath, bhat = bhat, ld = ld, n = n, !!!settings) +} + #' RSS Weights Helper for Penalized Methods #' #' Shared implementation for \code{scadRssWeights()} and \code{mcpRssWeights()}. @@ -2652,15 +2974,17 @@ penalizedRss <- function( #' sI}) and selects the best candidate via LD-quadratic pseudovalidation or #' minimum penalized objective. #' -#' @param stat,LD,s,selection,penalty,gamma,alpha,lambda0,lambda2 See the -#' public wrappers for details. +#' @param stat,ldReference,s,selection,penalty,gamma,alpha,lambda0,lambda2 See +#' the public wrappers for details. +#' @param fitRetention How much of the search is kept as the \code{"fit"} +#' attribute; see \code{\link{scadRssWeights}}. #' @param methodArgs Options forwarded to \code{penalizedRss}, built with #' \code{\link{PenalizedRssOptions}}. -#' @return Numeric weight vector of length \code{nrow(LD)}. +#' @return Numeric weight vector, one weight per variant of \code{stat}. #' @keywords internal .penalizedRssWeights <- function( stat, - LD, + ldReference, penalty, s = c(0.2, 0.5, 0.9, 1.0), gamma = NULL, @@ -2668,13 +2992,19 @@ penalizedRss <- function( lambda0 = 0, lambda2 = 0, selection = c("ldQuadratic", "minFbeta"), + fitRetention = c("none", "slim", "full"), methodArgs = PenalizedRssOptions() ) { .assertMethodOptions(methodArgs, "PenalizedRssOptions", "methodArgs") selection <- arg_match(selection) + fitRetention <- arg_match(fitRetention) .rssShrinkGridWeights( stat, - LD, + .rssLdSource( + stat, + ldReference, + str_c(str_to_lower(penalty), "RssWeights") + ), s, "penalized", list( @@ -2685,7 +3015,8 @@ penalizedRss <- function( lambda2 = lambda2, dotArgs = methodArgs ), - selection + selection, + fitRetention ) } @@ -2695,20 +3026,31 @@ penalizedRss <- function( #' shrinkage grid \code{s} and lambda path. Model selection uses LD-quadratic #' pseudovalidation by default. #' -#' @param stat A list with \code{$b} (effect sizes) and \code{$n} (per-variant -#' sample sizes). -#' @param LD LD correlation matrix R (single matrix, NOT pre-shrunk). +#' @param stat A list of summary statistics: \code{n} (per-variant sample +#' sizes) and the marginal effects as \code{cor} (standardized), \code{z}, +#' \code{b} with \code{seb}, or \code{b} alone, taken as already +#' standardized. The engine receives the standardized effects z / sqrt(n), +#' with n the median of \code{n}. +#' @param ldReference The LD reference the statistics' variants are matched +#' to by \code{stat$variantNames}: a genotype panel (see +#' \code{\link{readGenotypes}}), a \code{\link{GenotypeMixture}} or an +#' \code{\link{LdMatrix}}. A genotype reference's LD is used through its +#' standardized genotypes, never formed as a matrix. #' @param s Numeric vector of LD shrinkage parameters. Default: \code{c(0.2, #' 0.5, 0.9, 1.0)}. #' @param gamma SCAD concavity parameter. Default 3.7. #' @param alpha Elastic-net mixing (1 = pure L1). Default 1. #' @param selection Selection strategy: \code{"ldQuadratic"} (default) or #' \code{"minFbeta"}. -#' @param methodArgs Options forwarded to \code{penalizedRss}, built -#' with \code{\link{PenalizedRssOptions}}. A bare list is refused: it -#' cannot be checked against the engine, so a misspelled option would -#' be silently ignored. -#' @return A numeric vector of SNP coefficient weights. +#' @param methodArgs Options forwarded to the solver, +#' \code{\link{penalizedRss}}, built with +#' \code{\link{PenalizedRssOptions}}. A bare list is refused: it cannot +#' be checked against the engine, so a misspelled option would be +#' silently ignored. +#' @inheritParams lassosumRssWeights +#' @return A numeric vector of SNP coefficient weights. Unless +#' \code{fitRetention = "none"}, the search is attached as attribute +#' \code{"fit"}. #' @examples #' data(eqtlRegionExample) #' X <- eqtlRegionExample$X[, 1:30] @@ -2718,34 +3060,37 @@ penalizedRss <- function( #' stat <- list( #' b = vapply(ss, `[`, numeric(1), 1L), #' seb = vapply(ss, `[`, numeric(1), 2L), -#' n = rep(nrow(X), ncol(X)) +#' n = rep(nrow(X), ncol(X)), +#' variantNames = colnames(X) #' ) -#' LD <- cor(X) -#' scadRssWeights(stat, LD) +#' scadRssWeights(stat, LdMatrix(cor(X))) #' @importFrom checkmate assertList assertNumeric assertNumber #' @export scadRssWeights <- function( stat, - LD, + ldReference, s = c(0.2, 0.5, 0.9, 1.0), gamma = 3.7, alpha = 1.0, selection = c("ldQuadratic", "minFbeta"), + fitRetention = c("none", "slim", "full"), methodArgs = PenalizedRssOptions() ) { .assertMethodOptions(methodArgs, "PenalizedRssOptions", "methodArgs") + fitRetention <- arg_match(fitRetention) assertList(stat) assertNumeric(s, lower = 0, any.missing = FALSE) assertNumber(gamma, finite = TRUE) assertNumber(alpha, finite = TRUE) .penalizedRssWeights( stat = stat, - LD = LD, + ldReference = ldReference, penalty = "SCAD", s = s, gamma = gamma, alpha = alpha, selection = selection, + fitRetention = fitRetention, methodArgs = methodArgs ) } @@ -2756,20 +3101,31 @@ scadRssWeights <- function( #' shrinkage grid \code{s} and lambda path. Model selection uses LD-quadratic #' pseudovalidation by default. #' -#' @param stat A list with \code{$b} (effect sizes) and \code{$n} (per-variant -#' sample sizes). -#' @param LD LD correlation matrix R (single matrix, NOT pre-shrunk). +#' @param stat A list of summary statistics: \code{n} (per-variant sample +#' sizes) and the marginal effects as \code{cor} (standardized), \code{z}, +#' \code{b} with \code{seb}, or \code{b} alone, taken as already +#' standardized. The engine receives the standardized effects z / sqrt(n), +#' with n the median of \code{n}. +#' @param ldReference The LD reference the statistics' variants are matched +#' to by \code{stat$variantNames}: a genotype panel (see +#' \code{\link{readGenotypes}}), a \code{\link{GenotypeMixture}} or an +#' \code{\link{LdMatrix}}. A genotype reference's LD is used through its +#' standardized genotypes, never formed as a matrix. #' @param s Numeric vector of LD shrinkage parameters. Default: \code{c(0.2, #' 0.5, 0.9, 1.0)}. #' @param gamma MCP concavity parameter. Default 3. #' @param alpha Elastic-net mixing (1 = pure L1). Default 1. #' @param selection Selection strategy: \code{"ldQuadratic"} (default) or #' \code{"minFbeta"}. -#' @param methodArgs Options forwarded to \code{penalizedRss}, built -#' with \code{\link{PenalizedRssOptions}}. A bare list is refused: it -#' cannot be checked against the engine, so a misspelled option would -#' be silently ignored. -#' @return A numeric vector of SNP coefficient weights. +#' @param methodArgs Options forwarded to the solver, +#' \code{\link{penalizedRss}}, built with +#' \code{\link{PenalizedRssOptions}}. A bare list is refused: it cannot +#' be checked against the engine, so a misspelled option would be +#' silently ignored. +#' @inheritParams lassosumRssWeights +#' @return A numeric vector of SNP coefficient weights. Unless +#' \code{fitRetention = "none"}, the search is attached as attribute +#' \code{"fit"}. #' @examples #' data(eqtlRegionExample) #' X <- eqtlRegionExample$X[, 1:30] @@ -2779,34 +3135,37 @@ scadRssWeights <- function( #' stat <- list( #' b = vapply(ss, `[`, numeric(1), 1L), #' seb = vapply(ss, `[`, numeric(1), 2L), -#' n = rep(nrow(X), ncol(X)) +#' n = rep(nrow(X), ncol(X)), +#' variantNames = colnames(X) #' ) -#' LD <- cor(X) -#' mcpRssWeights(stat, LD) +#' mcpRssWeights(stat, LdMatrix(cor(X))) #' @importFrom checkmate assertList assertNumeric assertNumber #' @export mcpRssWeights <- function( stat, - LD, + ldReference, s = c(0.2, 0.5, 0.9, 1.0), gamma = 3.0, alpha = 1.0, selection = c("ldQuadratic", "minFbeta"), + fitRetention = c("none", "slim", "full"), methodArgs = PenalizedRssOptions() ) { .assertMethodOptions(methodArgs, "PenalizedRssOptions", "methodArgs") + fitRetention <- arg_match(fitRetention) assertList(stat) assertNumeric(s, lower = 0, any.missing = FALSE) assertNumber(gamma, finite = TRUE) assertNumber(alpha, finite = TRUE) .penalizedRssWeights( stat = stat, - LD = LD, + ldReference = ldReference, penalty = "MCP", s = s, gamma = gamma, alpha = alpha, selection = selection, + fitRetention = fitRetention, methodArgs = methodArgs ) } @@ -2821,9 +3180,16 @@ mcpRssWeights <- function( #' converges, non-zero coefficients are tested for swaps with zero ones to #' escape local optima. #' -#' @param stat A list with \code{$b} (effect sizes) and \code{$n} (per-variant -#' sample sizes). -#' @param LD LD correlation matrix R (single matrix, NOT pre-shrunk). +#' @param stat A list of summary statistics: \code{n} (per-variant sample +#' sizes) and the marginal effects as \code{cor} (standardized), \code{z}, +#' \code{b} with \code{seb}, or \code{b} alone, taken as already +#' standardized. The engine receives the standardized effects z / sqrt(n), +#' with n the median of \code{n}. +#' @param ldReference The LD reference the statistics' variants are matched +#' to by \code{stat$variantNames}: a genotype panel (see +#' \code{\link{readGenotypes}}), a \code{\link{GenotypeMixture}} or an +#' \code{\link{LdMatrix}}. A genotype reference's LD is used through its +#' standardized genotypes, never formed as a matrix. #' @param penalty L0 variant: \code{"L0"}, \code{"L0L1"}, or \code{"L0L2"}. #' Default \code{"L0"}. #' @param s Numeric vector of LD shrinkage parameters. Default: \code{c(0.2, @@ -2836,11 +3202,22 @@ mcpRssWeights <- function( #' @param selection Selection strategy: \code{"ldQuadratic"} (default) or #' \code{"minFbeta"}. #' @param maxSwaps Maximum swap rounds per lambda. Default 100. -#' @param methodArgs Options forwarded to \code{penalizedRss}, built -#' with \code{\link{PenalizedRssOptions}}. A bare list is refused: it -#' cannot be checked against the engine, so a misspelled option would -#' be silently ignored. -#' @return A numeric vector of SNP coefficient weights. +#' @param fitRetention How much of the search is kept as the \code{"fit"} +#' attribute of the returned weights. \code{"none"} (default) attaches +#' nothing. \code{"slim"} keeps \code{path}, a table with one row per +#' candidate (\code{s}, \code{lambda0}, \code{lambda}) giving the solver's +#' objective \code{fbeta}, \code{loss}, convergence flag \code{conv} and +#' number of non-zero coefficients \code{nparams}, with \code{selected} +#' marking the candidate returned. \code{"full"} also keeps \code{beta}, +#' the candidates' coefficients (variants x candidates, in the rows' order). +#' @param methodArgs Options forwarded to the solver, +#' \code{\link{penalizedRss}}, built with +#' \code{\link{PenalizedRssOptions}}. A bare list is refused: it cannot be +#' checked against the engine, so a misspelled option would be silently +#' ignored. +#' @return A numeric vector of SNP coefficient weights. Unless +#' \code{fitRetention = "none"}, the search is attached as attribute +#' \code{"fit"}. #' @examples #' data(eqtlRegionExample) #' X <- eqtlRegionExample$X[, 1:30] @@ -2850,14 +3227,14 @@ mcpRssWeights <- function( #' stat <- list( #' b = vapply(ss, `[`, numeric(1), 1L), #' seb = vapply(ss, `[`, numeric(1), 2L), -#' n = rep(nrow(X), ncol(X)) +#' n = rep(nrow(X), ncol(X)), +#' variantNames = colnames(X) #' ) -#' LD <- cor(X) -#' l0learnRssWeights(stat, LD) +#' l0learnRssWeights(stat, LdMatrix(cor(X))) #' @export l0learnRssWeights <- function( stat, - LD, + ldReference, penalty = c("L0", "L0L1", "L0L2"), s = c(0.2, 0.5, 0.9, 1.0), lambda0 = exp(seq(log(0.001), log(1), length.out = 10)), @@ -2865,11 +3242,13 @@ l0learnRssWeights <- function( lambda2 = 0, selection = c("ldQuadratic", "minFbeta"), maxSwaps = 100, + fitRetention = c("none", "slim", "full"), methodArgs = PenalizedRssOptions() ) { .assertMethodOptions(methodArgs, "PenalizedRssOptions", "methodArgs") penalty <- arg_match(penalty) selection <- arg_match(selection) + fitRetention <- arg_match(fitRetention) # Default lambda (L1 component) depends on variant if (is.null(lambda)) { @@ -2882,7 +3261,7 @@ l0learnRssWeights <- function( .rssShrinkGridWeights( stat, - LD, + .rssLdSource(stat, ldReference, "l0learnRssWeights"), s, "l0learn", list( @@ -2893,7 +3272,8 @@ l0learnRssWeights <- function( maxSwaps = maxSwaps, dotArgs = methodArgs ), - selection + selection, + fitRetention ) } @@ -3259,7 +3639,6 @@ bLassoWeights <- function( #' nothing, \code{"slim"} and \code{"full"} attach the fitted model. This #' engine keeps no trimmable intermediates, so the two retaining levels #' behave alike here. -#' Default \code{FALSE}. #' @param nK Integer. Number of variational mixture components for the VB fit #' (\code{dprVbWeights}). Default \code{8}. #' @param sStep Integer. Number of Gibbs sampling steps for the Gibbs fit @@ -3422,7 +3801,7 @@ dprAdaptiveGibbsWeights <- function( numThreads ) { .mrmashRequirePackages() - .assertMethodParam(prior, "MrmashPriorParam", "prior") + .assertMethodParam(prior, "MrmashPriorParam") .assertMethodOptions(methodArgs, "MrmashOptions", "methodArgs") priorOpts <- as.list(prior) .mrmashValidateWrapper( @@ -3658,6 +4037,7 @@ mrmashWrapper <- function( Y, alpha = 0.5, standardize = standardize, + numThreads = numThreads, Xnew = NULL ) } @@ -3701,12 +4081,11 @@ mrmashWrapper <- function( ) } -# Run mr.mash with the resolved prior / init / V. -# @noRd -# The mr.mash call. Everything pecotmr derives -- the prior, the residual -# covariance, the coefficient initialisation -- is supplied here and cannot be -# overridden; the rest of mr.mash's arguments come from `methodArgs` under -# mr.mash's own names, with pecotmr's defaults underneath. +# Run mr.mash with the resolved prior / init / V. Everything pecotmr derives -- +# the prior, the residual covariance, the coefficient initialisation -- is +# supplied here and cannot be overridden; the rest of mr.mash's arguments come +# from `methodArgs` under mr.mash's own names, with pecotmr's defaults +# underneath. # @noRd .mrmashFit <- function( S0, @@ -3860,17 +4239,34 @@ computeCoefficientsGlasso <- function( return(res) } -### Function to compute coefficients for univariate glmnet +# Initial mr.mash coefficients from one cv.glmnet per response. The fits are +# independent, so with `numThreads` >= 2 they run in parallel, each worker on +# its own seeded RNG stream (cv.glmnet draws its folds at random); one thread +# runs them in turn on the session RNG, as before. +# @noRd computeCoefficientsUnivGlmnet <- function( X, Y, alpha, standardize, + numThreads = 1L, Xnew = NULL ) { r <- ncol(Y) - - out <- map(seq_len(r), .linreg, X, Y, alpha, standardize, Xnew) + out <- if (numThreads >= 2L) { + bplapply( + seq_len(r), + .linreg, + X = X, + Y = Y, + alpha = alpha, + standardize = standardize, + Xnew = Xnew, + BPPARAM = .bpSeedParam(numThreads) + ) + } else { + map(seq_len(r), .linreg, X, Y, alpha, standardize, Xnew) + } bhatList <- map(out, "bhat") Bhat <- exec(cbind, !!!bhatList) @@ -3952,10 +4348,11 @@ rescaleCovW0 <- function(w0) { # ceiling(log2(gmax/gmin)/log2(mult)), carried fewer points than mr.mash # would have used. # -# `mult = sqrt(2)` (finer than upstream's default 2) and the square are -# pecotmr's own choices: this grid scales variances, not standard -# deviations. autoselect.mixsd() drops Shat that is zero or non-finite, -# which covers NA, so the port's extra is.na() term was redundant. +# `mult = sqrt(2)` and the square follow mr.mashr's own documented recipe +# (the mr.mash() and mr.mash.rss() examples build their grids exactly so): +# this grid scales variances, not standard deviations. autoselect.mixsd() +# drops Shat that is zero or non-finite, which covers NA, so the port's extra +# is.na() term was redundant. # @noRd computeGrid <- function(bhat, sbhat) { mr.mashr::autoselect.mixsd( @@ -4192,22 +4589,12 @@ buildMrmashPriorMatrices <- function( if (is.null(priorGrid)) { priorGrid <- computeGrid(bhat = Bhat, sbhat = Shat) } - - if (isTRUE(canonicalPriorMatrices)) { - canonical <- exec( - mr.mashr::compute_canonical_covs, - K, - !!!as.list(canonicalCovs) - ) - S0_raw <- if (!is.null(dataDrivenPriorMatrices)) { - c(canonical, dataDrivenPriorMatrices$U) - } else { - canonical - } - } else { - S0_raw <- dataDrivenPriorMatrices$U - } - + S0_raw <- .mrmashRawPriorCovs( + K, + dataDrivenPriorMatrices, + canonicalPriorMatrices, + canonicalCovs + ) S0 <- exec( mr.mashr::expand_covs, S0_raw, @@ -4217,26 +4604,62 @@ buildMrmashPriorMatrices <- function( list(S0 = S0, priorGrid = priorGrid) } +# The unexpanded prior covariances: the canonical set (when requested) plus +# any data-driven matrices, or the data-driven matrices alone. +# @noRd +.mrmashRawPriorCovs <- function( + K, + dataDrivenPriorMatrices, + canonicalPriorMatrices, + canonicalCovs +) { + if (!isTRUE(canonicalPriorMatrices)) { + return(dataDrivenPriorMatrices$U) + } + canonical <- exec( + mr.mashr::compute_canonical_covs, + K, + !!!as.list(canonicalCovs) + ) + if (is.null(dataDrivenPriorMatrices)) { + return(canonical) + } + c(canonical, dataDrivenPriorMatrices$U) +} + # ---- map/apply helpers (lambda-free callbacks) --------------------------- -# `.rssSolvePath` solver for lassosum: RSS lasso over the ordered lambda path. +# `.rssSolvePath` solver for lassosum: RSS lasso over the ordered lambda path, +# on the LD matrix or on a factor of it (never forming R). # @noRd -.rssLassosumSolve <- function(z, lam, R, thr, maxiter) { - lassosumRssRcpp( +.rssLassosumSolve <- function(z, lam, ld, thr, maxiter) { + if (!is.null(ld$F)) { + return(lassosumRssFactorCpp( + zR = z, + factorR = ld$F, + shrink = ld$shrink %||% 0, + lambdaR = lam, + thr = thr, + maxiter = as.integer(maxiter) + )) + } + lassosumRssCpp( zR = z, - LD = list(blk1 = R), + LD = list(blk1 = ld$R), + shrink = ld$shrink %||% 0, lambdaR = lam, thr = thr, maxiter = as.integer(maxiter) ) } -# `.rssSolvePath` solver for the penalized (MCP/SCAD/L0...) RSS path. +# `.rssSolvePath` solver for the penalized (MCP/SCAD/L0...) RSS path, on the +# LD matrix or on a factor of it (never forming R). # @noRd .rssPenalizedSolve <- function( z, lam, - R, + ld, penalty, gamma, alpha, @@ -4246,9 +4669,7 @@ buildMrmashPriorMatrices <- function( maxiter, maxSwaps ) { - penalizedRssRcpp( - zR = z, - LD = list(blk1 = R), + settings <- list( lambdaR = lam, penaltyStr = penalty, gamma = gamma, @@ -4259,16 +4680,29 @@ buildMrmashPriorMatrices <- function( maxiter = as.integer(maxiter), maxSwaps = as.integer(maxSwaps) ) + if (!is.null(ld$F)) { + return(exec( + penalizedRssFactorCpp, + zR = z, + factorR = ld$F, + shrink = ld$shrink %||% 0, + !!!settings + )) + } + exec( + penalizedRssCpp, + zR = z, + LD = list(blk1 = ld$R), + shrink = ld$shrink %||% 0, + !!!settings + ) } # One L0Learn fit at lambda0 = `l0Val`: penalizedRss over the lambda path. # @noRd -.rssL0LambdaFit <- function(l0Val, solverInput, LDs, n, sVal, config) { - penArgs <- c( +.rssL0LambdaFit <- function(l0Val, solverInput, ld, n, sVal, config) { + settings <- c( list( - bhat = solverInput, - R = LDs, - n = n, penalty = config$penalty, lambda = config$lambda, lambda0 = l0Val, @@ -4277,15 +4711,10 @@ buildMrmashPriorMatrices <- function( ), as.list(config$dotArgs) ) - model <- exec(penalizedRss, !!!penArgs) + model <- .penalizedRssOn(solverInput, ld, n, settings) list( beta = model$beta, - meta = tibble( - s = rep(sVal, length(model$lambda)), - lambda0 = rep(l0Val, length(model$lambda)), - lambda = model$lambda, - fbeta = model$fbeta - ) + meta = mutate(.rssPathMeta(sVal, model), lambda0 = l0Val, .after = "s") ) } diff --git a/R/relatednessQc.R b/R/relatednessQc.R index 8a398a229..54e690eee 100644 --- a/R/relatednessQc.R +++ b/R/relatednessQc.R @@ -233,8 +233,8 @@ filterRelatedness <- function( verbose = FALSE ) { .relatednessRequirePackages() - .assertMethodParam(columns, "RelatednessColumnsParam", "columns") - .assertMethodParam(pruning, "RelatednessPruningParam", "pruning") + .assertMethodParam(columns, "RelatednessColumnsParam") + .assertMethodParam(pruning, "RelatednessPruningParam") .assertMethodOptions(plinkQcArgs, "PlinkQcOptions", "plinkQc") analysisType <- arg_match(analysisType) relatedness <- as_tibble(relatedness) diff --git a/R/resultReaders.R b/R/resultReaders.R index b42ebca4f..5b9a3f870 100644 --- a/R/resultReaders.R +++ b/R/resultReaders.R @@ -64,6 +64,7 @@ NULL SE = "marginal_se", WGT = "posterior_mean", WGTSE = "posterior_sd", + THETA = "posterior_theta", PIP = "pip", LBF = "logBF", LFSR = "lfsr" @@ -1216,13 +1217,7 @@ readTwasWeights <- function( label <- "readTwasWeights" src <- .prdRead(path, region, format, sampleSelect, label) df <- src$table - if (!is_in("WGT", names(df))) { - abort(glue( - "{label}: no `WGT` column. The weight is the whole content of a ", - "TwasWeights. For a fine-mapping table use ", - "readFineMappingResult()." - )) - } + .prdRequireWgt(df, label) .prdRequireStandardized(df, weightStandardized, label) supplied <- compact(list( study = studyName, @@ -1239,6 +1234,24 @@ readTwasWeights <- function( supplied = supplied, label = label ) + .prdTwFromRows(rows, label) +} + +# @noRd +.prdRequireWgt <- function(df, label) { + if (!is_in("WGT", names(df))) { + abort(glue( + "{label}: no `WGT` column. The weight is the whole content of a ", + "TwasWeights. For a fine-mapping table use ", + "readFineMappingResult()." + )) + } +} + +# Assemble the TwasWeights collection from the per-group `.prdTwRow()` +# records; an empty file reads back as an empty collection. +# @noRd +.prdTwFromRows <- function(rows, label) { if (length(rows) == 0L) { return(TwasWeights( studyName = character(0), diff --git a/R/resultWriters.R b/R/resultWriters.R index e8b5e6e0f..0bb61c8fd 100644 --- a/R/resultWriters.R +++ b/R/resultWriters.R @@ -7,10 +7,11 @@ # exportToVcf(x, path, ...) GWAS-VCF-style: one record per variant, one # SAMPLE per study / fitted model, the statistics # as FORMAT fields. GwasSumStats, every -# FineMappingResult, TwasWeights. +# FineMappingResultBase, TwasWeights. # exportToBed(x, path, ...) the published long-format tables, one row per # published observation, bgzipped + tabix-indexed -# on request. FineMappingResult, TwasWeights. +# on request. FineMappingResultBase, +# TwasWeights. # # One file because they are one problem -- project an S4 collection onto a # FIXED published schema, join the posterior view to the marginal one, sort @@ -170,8 +171,9 @@ NULL return(combineFineMappingResults(x)) } abort(glue( - "`x` must be a TwasWeights or FineMappingResult object, or a list ", - "of one of those; got a list of {class(x[[1L]])[[1L]]}." + "`x` must be a TwasWeights, QtlFineMappingResult or ", + "GwasFineMappingResult object, or a list of one of those; got a ", + "list of {class(x[[1L]])[[1L]]}." )) } @@ -250,15 +252,16 @@ NULL # Refuse to export a collection whose rows lack a FULL-DATA fit. # # Cross-validation alone is not publishable. A CV-only run -- which is what -# `twasWeightsPipeline(fitFullData = FALSE)` produces, and which is legal only -# WITH cross-validation -- stores each row as an empty element with no weights -# and nothing but its `cvResult`. All it holds is fold-level results, and those -# cannot go in a published file: fold membership is sample-level information -# and sample names can be protected. So an export needs the full-data fit, and -# its absence is an ERROR rather than a silently empty output file. +# twasWeightsPipeline() produces under `CrossValidationParam(fitFullData = +# FALSE)`, legal only WITH cross-validation -- stores each row as an empty +# element with no weights and nothing but its `cvResult`. All it holds is +# fold-level results, and those cannot go in a published file: fold +# membership is sample-level information and sample names can be protected. +# So an export needs the full-data fit, and its absence is an ERROR rather +# than a silently empty output file. # -# The check is on the OBJECT, not on the flag: `fitFullData` is a pipeline -# argument that may not have been the thing that emptied a row, and an export +# The check is on the OBJECT, not on the flag: `fitFullData` is a run setting +# that may not have been the thing that emptied a row, and an export # has to be safe whatever produced its input. # # It also keeps genomicRegion() honest. That derives a row's analysis window @@ -275,7 +278,8 @@ NULL "full-data fit, only cross-validation results -- ", "{str_flatten(.pubRowLabels(x, incomplete), ', ')}. Fold-level ", "results cannot be published (fold membership is sample-level ", - "information), so refit with `fitFullData = TRUE` and export that. ", + "information), so refit with ", + "`CrossValidationParam(fitFullData = TRUE)` and export that. ", "The cross-validation record stays available through cvResult()." )) } @@ -293,10 +297,9 @@ NULL # @noRd .twbRowHasWeights <- function(i, x) !is.null(mcols(x[[i]])$weight) -# Rows of a FineMappingResult with no fitted variants. Fine-mapping has no -# CV-only mode today -- .fmAttachCv() rebuilds the row around its existing -# susieFit and topLoci, so CV is strictly additive -- but the export checks -# rather than assumes it. +# Rows of a fine-mapping result with no fitted variants: what a +# cross-validation only run (CrossValidationParam(fitFullData = FALSE)) leaves +# in each row. # @noRd .fmbIncompleteRows <- function(x) { which(lengths(x) == 0L) @@ -409,10 +412,10 @@ genomicOrder <- function(chrom, start, end = NULL) { # # utils::write.table(), not vroom_write(): the two differ in how they format a # float (1e-06 vs 1e-6) and in how many digits they keep. -# @noRd # `emptySchema` is the header an empty result still documents -- the schema of # whichever table was being written, since the fsusie table's vocabulary is not # the per-variant one. +# @noRd .pubWriteTable <- function( out, path, @@ -788,6 +791,12 @@ setMethod( # susie posterior mean IS the TWAS coefficient. # @noRd .vcfCoreSpecs <- function(base, m, nSnps) { + c(.vcfMarginalSpecs(m, nSnps), .vcfFitSpecs(base, nSnps)) +} + +# The marginal-association FORMAT fields, from the joined marginals `m`. +# @noRd +.vcfMarginalSpecs <- function(m, nSnps) { p <- suppressWarnings(as.numeric(.pubCol(m, "p", nSnps))) list( .vcfSpec( @@ -825,7 +834,15 @@ setMethod( "Variant-specific number of samples/individuals with called ", "genotypes used to test association with specified trait" ) - ), + ) + ) +} + +# The per-variant FORMAT fields read off the fit itself (`base`): allele +# frequency and the posterior effect / prediction weight. +# @noRd +.vcfFitSpecs <- function(base, nSnps) { + list( .vcfSpec( "AF", .pubCol(base, "af", nSnps), @@ -843,6 +860,15 @@ setMethod( .pubCol(base, "posterior_se", nSnps), "Float", "Standard error of the posterior effect estimate" + ), + .vcfSpec( + "THETA", + .pubCol(base, "theta", nSnps), + "Float", + str_c( + "Infinitesimal component of WGT (susieInf / susieAsh); ", + "already included in WGT, 0 for methods without one" + ) ) ) } @@ -1247,7 +1273,6 @@ setMethod( ) } -# @noRd # One mcols cell as a string. `[[row]]` then pack, rather than # as.character() on the column: several of these are List columns (a # TwasWeights `dataType` is one) and as.character() on a CompressedList @@ -1290,7 +1315,7 @@ setMethod( } # The same rule the BED path applies, and for the same reason: a # fine-mapping method's "weights" are the posterior re-expressed, so - # the FineMappingResult says strictly more. This path used to publish + # the fine-mapping result says strictly more. This path used to publish # them, which made the two formats disagree about what a weights file # contains. rows <- intersect(rows, .twbExportableRows(x, "exportToVcf")) @@ -1298,7 +1323,7 @@ setMethod( abort(str_c( "exportToVcf: every selected row is fine-mapping-derived, so ", "there is nothing to write as weights. Export the ", - "FineMappingResult." + "fine-mapping result." )) } .twvWriteSamples( @@ -1699,12 +1724,12 @@ setMethod( "grid_band_halfwidth" ) -# @noRd # The trait-level group. `joint_traits` rather than a new `trait_names`: these # ARE the joint members (fsusieTraitEffects() reads them from the row's # `jointTraits` column), so they use the vocabulary the rest of the schema # already has for joint membership. "epi_mark" also presumed epigenomic data, # which a functional fit does not require. +# @noRd .FMB_FSUSIE_TRAIT_COLUMNS <- c( "trait_positions", "trait_effects", @@ -1773,6 +1798,15 @@ setMethod( # One (row, credible set) block of the fSuSiE table. `v` is that CS's # credibleSets() rows; `band` / `marks` are the matching curve views, already # narrowed to the same row. +# +# The "chr" prefix is kept, as in the other two schemas and in the protocol's +# own phenotype BEDs; stripping it here was unique to this table and made one +# reader rule impossible. AF, not MAF, is published: the same `af` the other +# table publishes. Writing pmin(af, 1 - af) here lost which allele the +# frequency referred to, so one export of an object was recoverable and the +# other was not. Membership is written at EVERY coverage the fit carries, not +# just the one keying the rows -- a secondary coverage would otherwise be +# silently dropped. # @noRd .fmbFsusieBlock <- function( v, @@ -1788,41 +1822,26 @@ setMethod( key <- .pubIdentityKey(v, .PUB_ROW_COLS)[[1L]] cs <- v[[str_c("cs_", primary)]][[1L]] context <- v$context[[1L]] - bKey <- .pubIdentityKey(band, .PUB_ROW_COLS) - mKey <- .pubIdentityKey(marks, .PUB_ROW_COLS) - b <- band[bKey == key & band$cs == cs, , drop = FALSE] + b <- .fmbCurveRows(band, key, cs) if (nrow(b) == 0L) { return(NULL) } - m <- marks[mKey == key & marks$cs == cs, , drop = FALSE] + m <- .fmbCurveRows(marks, key, cs) i <- match(key, names(rowRegionIds)) regionId <- rowRegionIds[[i]] rg <- rowRegions[i] csId <- str_c(context, regionId, str_remove(cs, "^fsusie_"), sep = ":") out <- tibble( - # The "chr" prefix is kept, as in the other two schemas and in the - # protocol's own phenotype BEDs; stripping it here was unique to this - # table and made one reader rule impossible. `#chr` = as.character(v$chrom), start = v$pos - 1L, end = v$pos, ID = v$variant_id, REF = .pubCol(v, "A2"), ALT = .pubCol(v, "A1"), - # AF, not MAF: the same `af` the other table publishes. Writing - # pmin(af, 1 - af) here lost which allele the frequency referred to, - # so one export of an object was recoverable and the other was not. AF = .pubCol(v, "af"), PIP = v$pip, cs_id = csId, cs_root = csId, - grid_resolution = nrow(b), - grid_positions = .pubPack(b$pos), - grid_effects = .pubPack(b$effect), - grid_band_halfwidth = .pubPack(b$halfwidth), - trait_positions = .pubPack(m$traitPos), - trait_effects = .pubPack(m$effect), - joint_traits = .pubPack(m$jointTrait), study = .pubCol(v, "study"), context = context, trait = .pubCol(v, "trait"), @@ -1831,15 +1850,46 @@ setMethod( region_start = start(rg) - 1L, region_end = end(rg) ) - # Membership at EVERY coverage the fit carries, not just the one keying - # the rows -- a secondary coverage would otherwise be silently dropped. - out <- bind_cols(out, .pubFrameCs(v, csCols)) + out <- bind_cols(out, .fmbFsusieGrid(b, m), .pubFrameCs(v, csCols)) bind_cols( select(out, all_of(.fmbFsusieColumns(levels, csCols))), select(v, all_of(added)) ) } +# The rows of a curve view (credible band or trait marks) belonging to one +# (row identity, credible set) pair. +# @noRd +.fmbCurveRows <- function(view, key, cs) { + keep <- .pubIdentityKey(view, .PUB_ROW_COLS) == key & view$cs == cs + view[keep, , drop = FALSE] +} + +# The packed functional-grid columns of one fSuSiE block: the credible band +# `b` over the grid and the per-trait marks `m`. +# @noRd +.fmbFsusieGrid <- function(b, m) { + tibble( + grid_resolution = nrow(b), + grid_positions = .pubPack(b$pos), + grid_effects = .pubPack(b$effect), + grid_band_halfwidth = .pubPack(b$halfwidth), + trait_positions = .pubPack(m$traitPos), + trait_effects = .pubPack(m$effect), + joint_traits = .pubPack(m$jointTrait) + ) +} + +# The fSuSiE BED table: one block per (row, credible set) of the fsusie rows. +# +# genomicRegion() is the window each row was ANALYSED over (the requested +# region, or the trait's cis window), which is what a publication table means +# by its region -- not the narrower span of whichever variants survived QC. +# +# Splitting the views on (context, cs) alone is only safe for a single +# region: once several regions are combined into one table, two regions can +# each contribute context "c1" / "fsusie_1", and they must stay separate rows +# with their own windows. # @noRd .fmbFsusieTable <- function(x, columns, levels, coverage) { fs <- x[as.character(.tupleColumn(x, "method")) == "fsusie"] @@ -1858,19 +1908,11 @@ setMethod( primary <- .fmbPrimaryCsLevel(csTbl, coverage) csCols <- .pubCsColumns(csTbl, coverage) marks <- as.data.frame(fsusieTraitEffects(fs)) - # genomicRegion() is the window each row was ANALYSED over (the requested - # region, or the trait's cis window), which is what a publication table - # means by its region -- not the narrower span of whichever variants - # survived QC. rowRegions <- genomicRegion(fs) rowRegionIds <- set_names( .pubRegionIds(rowRegions), .pubCollectionKey(fs, .PUB_ROW_COLS) ) - # Splitting the views on (context, cs) alone is only safe for a single - # region: once several regions are combined into one table, two regions can - # each contribute context "c1" / "fsusie_1", and they must stay separate - # rows with their own windows. pieces <- compact(map( split( csTbl, @@ -1946,6 +1988,11 @@ setMethod( # columns that are both here. "WGT", "WGTSE", + # The infinitesimal half of WGT. susieInf / susieAsh split the posterior + # into a sparse and an infinitesimal term and coef.susie() sums them, so + # WGT is right either way -- this is what makes the split visible, which + # is otherwise unrecoverable from the published file. 0 elsewhere. + "THETA", # Fine-mapping posterior. CS/PUR are spliced in after these. "PIP", "LBF", @@ -1959,7 +2006,8 @@ setMethod( "block_id", # Provenance. `data_type` is the assay/modality; `data_source` is # individual-level vs summary-statistics, which `data_type` was being - # mistaken for and which is derivable from whether an ldSketch is present. + # mistaken for and which is derivable from whether an ldReference is + # present. "data_type", "data_source", "weight_standardized", @@ -2114,6 +2162,14 @@ setMethod( "p" ) +# The topLoci BED table. +# +# `tl$beta`/`tl$se` are the POSTERIOR mean and sd -- topLoci() is the +# posterior view -- while `mm$beta`/`mm$se` are the MARGINAL estimates. Same +# column name, different quantity, which is why they land in different +# published fields. Per-CS variant-level columns from a fullFit build ride +# after the fixed schema; `columns` adds whatever else the caller asked for +# after those. # @noRd .fmbTopLociTable <- function(x, signalCutoff, minPurity, columns, coverage) { tl <- as.data.frame( @@ -2122,10 +2178,6 @@ setMethod( if (nrow(tl) == 0L) { return(NULL) } - # `tl$beta`/`tl$se` are the POSTERIOR mean and sd -- topLoci() is the - # posterior view -- while `mm$beta`/`mm$se` are the MARGINAL estimates. - # Same column name, different quantity, which is why they land in - # different published fields. mm <- .pubJoinMarginals(tl, as.data.frame(marginalEffects(x))) win <- .fmbRowWindows(x, tl) pos <- .pubCol(tl, "pos") @@ -2147,6 +2199,7 @@ setMethod( LP = if_else(is.na(p) | p <= 0, NA_real_, -log10(p)), WGT = .pubCol(tl, "posterior_effect"), WGTSE = .pubCol(tl, "posterior_se"), + THETA = .pubCol(tl, "theta"), PIP = .pubCol(tl, "pip"), LBF = .pubCol(tl, "logBF"), LFSR = .pubCol(tl, "lfsr") @@ -2160,8 +2213,6 @@ setMethod( ) ) out <- .pubFrame(cols, .pubSchema(csCols)) - # Per-CS variant-level columns from a fullFit build ride after the fixed - # schema; `columns` adds whatever else the caller asked for after those. added <- union( .pubFullFitColumns(tl), .pubViewColumns(tl, columns, .FMB_TOPLOCI_SOURCE) @@ -2211,8 +2262,9 @@ setMethod( } # The identity and provenance values shared by both record kinds. `data_source` -# is derived rather than stored: a collection's ldSketch is the LD reference the -# fit was run against, so its absence means the fit saw individual-level data. +# is derived rather than stored: a collection's ldReference is the LD reference +# the fit was run against, so its absence means the fit saw individual-level +# data. # @noRd .pubIdentityValues <- function(x, view) { list( @@ -2230,19 +2282,15 @@ setMethod( ) } -# The collection-level fallback for `data_source`: an ldSketch is the LD +# The collection-level fallback for `data_source`: an ldReference is the LD # reference a fit was run against, so its absence means individual-level data. # Only a fallback -- a row that recorded its own wins, because a combined -# collection can hold rows of both kinds and has only one ldSketch. +# collection can hold rows of both kinds and has only one ldReference. # @noRd .pubDataSource <- function(x) { - if (is.null(ldSketch(x))) "individual" else "sumstat" + if (is.null(ldReference(x))) "individual" else "sumstat" } -# @noRd -# Absent OR entirely empty both mean "the rows did not record this", because -# .fmrRowMetadata() NA-fills a column the collection lacks -- so testing only -# for absence would return the NA column and never reach the fallback. # `EZ` only when the SOURCE supplied z. The spec defines the field as the z # "provided if it was used to derive the ES and SE fields", so publishing a z # that pecotmr itself computed as beta/se would invert its meaning -- and a @@ -2262,6 +2310,9 @@ setMethod( replace(z, is.na(supplied) | !supplied, NA_real_) } +# Absent OR entirely empty both mean "the rows did not record this", because +# .fmrRowMetadata() NA-fills a column the collection lacks -- so testing only +# for absence would return the NA column and never reach the fallback. # @noRd .pubRowOrDerived <- function(view, nm, fallback) { v <- .pubCol(view, nm) @@ -2292,11 +2343,6 @@ setMethod( ) } -# The analysis window of the collection row each long-view row came from, -# matched on the row identity so a folded multi-row table keeps each row's own -# window rather than the first one's. -# @noRd - # ---- BED: fine-mapping entry point ------------------------------------------ #' @rdname exportToBed @@ -2465,7 +2511,7 @@ setMethod( } # Fine-mapping methods have no business in a weights export: their "weights" -# are the fine-mapping posterior re-expressed, so the FineMappingResult says +# are the fine-mapping posterior re-expressed, so the fine-mapping result says # strictly more. Those rows are skipped with a message rather than written. # @noRd .TWB_FINE_MAPPING_METHODS <- c( @@ -2485,8 +2531,8 @@ setMethod( "{label}: skipping {length(skip)} fine-mapping-derived ", "row(s) ({str_flatten(unique(methods[skip]), ', ')}). Those ", "weights are the fine-mapping posterior re-expressed -- export ", - "the FineMappingResult instead, which carries the posterior, its ", - "standard error and the credible sets." + "the fine-mapping result instead, which carries the posterior, ", + "its standard error and the credible sets." )) } setdiff(seq_len(nrow(x)), skip) @@ -2574,24 +2620,21 @@ setMethod( )) } -# Per-variant allele frequency, from the collection's LD panel when it has one. -# A TwasWeights element records only alleles and a weight, so without a panel -# there is no frequency to publish -- and `AF` is what the standardized-to-raw -# weight conversion needs, so its absence is worth seeing rather than faking. +# Per-variant allele frequency, from the collection's LD reference when it +# records one (an LdMatrix with an AF column, or a stochastic sketch, whose +# real frequencies are recorded from its sidecar). A TwasWeights element +# records only alleles and a weight, so otherwise there is no frequency to +# publish -- and `AF` is what the standardized-to-raw weight conversion needs, +# so its absence is worth seeing rather than faking. # @noRd .twbVariantAf <- function(x, gr) { - panel <- ldSketch(x) - if (is.null(panel)) { - return(NA_real_) - } - rr <- try_fetch( - SummarizedExperiment::rowRanges(panel), - error = function(cnd) NULL - ) - if (is.null(rr) || !is_in("af", colnames(mcols(rr)))) { + ref <- ldReference(x) + af <- if (is.null(ref)) NULL else .ldRefAf(ref) + if (is.null(af)) { return(NA_real_) } - as.numeric(mcols(rr)$af)[match(.grVariantIds(gr), .grVariantIds(rr))] + rr <- .ldRefRanges(ref) + as.numeric(af)[match(.grVariantIds(gr), .grVariantIds(rr))] } # @noRd @@ -2600,7 +2643,7 @@ setMethod( if (length(rows) == 0L) { abort(str_c( "exportToBed: every row is fine-mapping-derived, so there is ", - "nothing to write as weights. Export the FineMappingResult." + "nothing to write as weights. Export the fine-mapping result." )) } schema <- .pubSchema(.pubCsColumns(tibble(), coverage)) diff --git a/R/sumstatsQc.R b/R/sumstatsQc.R index be92e1649..48ea8998a 100644 --- a/R/sumstatsQc.R +++ b/R/sumstatsQc.R @@ -26,7 +26,7 @@ NULL # Allele harmonization (harmonizeAlleles) now lives in R/variantId.R, alongside # the other variant-matching primitives (parseVariantId, matchVariants). It is -# package-internal and called from here (.matchAgainstSketch), ctwasPipeline, +# package-internal and called from here (.matchAgainstLdRef), ctwasPipeline, # and the pipeline join sites. # Standardize a variant set (GRanges or data.frame) to a chrom/pos/alt/ref @@ -140,12 +140,7 @@ resolveLdInput <- function( needNSample = FALSE, ldMethod = "sample" ) { - if (is.null(R) && is.null(X)) { - abort("Either R (LD matrix) or X (genotype matrix) must be provided.") - } - if (!is.null(R) && !is.null(X)) { - abort("Provide either R or X, not both.") - } + .ldRequireOneSource(R, X) if (!is.null(X)) { if (!is.matrix(X)) { X <- as.matrix(X) @@ -161,6 +156,18 @@ resolveLdInput <- function( list(R = R, nSample = nSample) } +# Require exactly one of R (LD matrix) or X (genotype matrix). +# @noRd +.ldRequireOneSource <- function(R, X) { + if (is.null(R) && is.null(X)) { + abort("Either R (LD matrix) or X (genotype matrix) must be provided.") + } + if (!is.null(R) && !is.null(X)) { + abort("Provide either R or X, not both.") + } + invisible(NULL) +} + # --- dentist helpers -------------------------------------------------------- # Validate/rename the pos and z columns (accepting position/zscore) + sort. @@ -196,16 +203,19 @@ resolveLdInput <- function( } # Run DENTIST on a single window, unpacking the shared tuning parameters. -.dentistCallSingle <- function(zScore, ldMat, nSample, methodArgs) { +# `ld` is .dentistLdInput()'s list(R) or list(F); a factor goes in as X, which +# dentistSingleWindow() reads without forming the LD. +.dentistCallSingle <- function(zScore, ld, nSample, dentistParam) { # dentistSingleWindow is what DentistParam() is built for -- ldMismatchQc # splices the same bundle into it -- so the tunables travel as one value # rather than being named again at every hop down from dentist(). exec( dentistSingleWindow, zScore, - R = ldMat, + R = ld$R, + X = ld$F, nSample = nSample, - !!!methodArgs + !!!dentistParam ) } @@ -215,10 +225,10 @@ resolveLdInput <- function( .dentistWindowAt <- function( k, sumStat, - ldMat, + ld, nSample, windowDividedRes, - methodArgs + dentistParam ) { # windowEndIdx is 1-based exclusive; convert to an inclusive range. idxRange <- windowDividedRes$windowStartIdx[ @@ -226,20 +236,52 @@ resolveLdInput <- function( ]:(windowDividedRes$windowEndIdx[k] - 1L) .dentistCallSingle( sumStat$z[idxRange], - ldMat[idxRange, idxRange], + .dentistLdSlice(ld, idxRange), nSample, - methodArgs + dentistParam + ) +} + +# One window's LD: the matrix's diagonal block, or the factor's columns. +# @noRd +.dentistLdSlice <- function(ld, idx) { + if (is.null(ld$F)) { + return(list(R = ld$R[idx, idx, drop = FALSE])) + } + list(F = ld$F[, idx, drop = FALSE]) +} + +# The LD a DENTIST run reads, with the sample size it needs. Genotypes under +# the sample estimator give their factor (.ldFactorFromDosage()), which +# DENTIST's factor kernel reads without forming the p x p LD; an LD matrix, +# or genotypes under another estimator, give the matrix (resolveLdInput()). +# Without `nSample`, genotypes count their own rows, as resolveLdInput() +# does. +# @noRd +.dentistLdInput <- function(R, X, nSample, ldMethod) { + .ldRequireOneSource(R, X) + if (is.null(R) && identical(ldMethod, "sample")) { + X <- as.matrix(X) + return(list(F = .ldFactorFromDosage(X), nSample = nSample %||% nrow(X))) + } + ld <- resolveLdInput( + R = R, + X = X, + nSample = nSample, + needNSample = TRUE, + ldMethod = ldMethod ) + list(R = ld$R, nSample = ld$nSample) } .dentistWindows <- function( sumStat, - ldMat, + ld, nSample, windowMode, windowSize, minDim, - methodArgs + dentistParam ) { if (windowMode == "distance") { windowDividedRes <- segmentByDist( @@ -254,10 +296,10 @@ resolveLdInput <- function( seq_len(nrow(windowDividedRes)), .dentistWindowAt, sumStat = sumStat, - ldMat = ldMat, + ld = ld, nSample = nSample, windowDividedRes = windowDividedRes, - methodArgs = methodArgs + dentistParam = dentistParam ) mergeWindows(dentistResultByWindow, windowDividedRes) } @@ -274,8 +316,10 @@ resolveLdInput <- function( #' @param sumStat A data frame containing summary statistics, including 'pos' or #' 'position' and 'z' or 'zscore' columns. #' @param R Square LD correlation matrix. Provide either \code{R} or \code{X}. -#' @param X Genotype matrix (samples x SNPs). If provided, LD is computed via -#' \code{computeLd(X)} and \code{nSample} defaults to \code{nrow(X)}. +#' @param X Genotype matrix (samples x SNPs). With \code{ldMethod = "sample"} +#' DENTIST works on the standardized genotypes and never forms the LD +#' matrix; any other \code{ldMethod} computes LD via \code{computeLd(X)}. +#' \code{nSample} defaults to \code{nrow(X)}. #' @param nSample The number of samples in the LD reference panel (NOT the GWAS #' sample size). This controls the SVD truncation rank K = min(idx_size, #' nSample) * propSVD. Required when \code{R} is provided; inferred from @@ -287,7 +331,7 @@ resolveLdInput <- function( #' \code{"distance"} (default) creates windows by physical distance using #' \code{segmentByDist} (C++ \code{--wind-dist}), and \code{"count"} creates #' windows by variant count using \code{segmentByCount} (C++ \code{--wind}). -#' @param methodArgs The DENTIST algorithm settings, built with +#' @param dentistParam The DENTIST algorithm settings, built with #' \code{\link{DentistParam}}: \code{pValueThreshold}, \code{propSVD}, #' \code{gcControl}, \code{nIter}, \code{gPvalueThreshold}, #' \code{duprThreshold}, \code{numThreads}, \code{correctChenEtAlBug} @@ -299,9 +343,9 @@ resolveLdInput <- function( #' 2000). In count mode: the number of variants per window (i.e., the window #' size). #' @param ldMethod Character string specifying the LD computation method when -#' \code{X} is provided. Passed to \code{computeLd}. One of \code{"sample"} -#' (default), \code{"population"}, or \code{"gcta"}. Ignored when \code{R} is -#' provided directly. +#' \code{X} is provided: \code{"sample"} (default), which uses the +#' genotypes directly, or \code{"population"} or \code{"gcta"}, which go +#' through \code{computeLd}. Ignored when \code{R} is provided directly. #' #' @return A data frame containing the imputed result and detected outliers. #' @@ -367,42 +411,38 @@ dentist <- function( windowMode = c("distance", "count"), minDim = 2000, ldMethod = "sample", - methodArgs = DentistParam() + dentistParam = DentistParam() ) { # The tunables arrive as the record rather than as nine formals of their # own: DentistParam() is already what ldMismatchQc(method =) takes and # what every helper below is spliced with, and duplicating its defaults # here left two places to change one number. - .assertMethodParam(methodArgs, "DentistParam", "methodArgs") - resolved <- resolveLdInput( - R = R, - X = X, - nSample = nSample, - needNSample = TRUE, - ldMethod = ldMethod - ) - ldMat <- resolved$R - nSample <- resolved$nSample + .assertMethodParam(dentistParam, "DentistParam") + # Genotypes become one factor of the LD here, and each window reads its + # columns; the region-wide LD is never formed. + ld <- .dentistLdInput(R, X, nSample, ldMethod) + nSample <- ld$nSample sumStat <- .dentistResolveColumns(sumStat) windowMode <- arg_match(windowMode) if (nrow(sumStat) < minDim) { - return(.dentistCallSingle(sumStat$z, ldMat, nSample, methodArgs)) + return(.dentistCallSingle(sumStat$z, ld, nSample, dentistParam)) } .dentistWindows( sumStat, - ldMat, + ld, nSample, windowMode, windowSize, minDim, - methodArgs + dentistParam ) } # --- dentistSingleWindow helpers ------------------------------------------- -# Warn on small windows; validate the LD matrix shape against zScore. -.dentistValidateInput <- function(zScore, ldMat) { +# Warn on small windows; validate the LD's shape against zScore: a square +# matrix over the variants, or a factor with one column per variant. +.dentistValidateInput <- function(zScore, ld) { if (length(zScore) < 2000) { nZ <- length(zScore) msg <- glue( @@ -414,6 +454,16 @@ dentist <- function( ) warn(msg) } + if (!is.null(ld$F)) { + if (ncol(ld$F) != length(zScore)) { + abort(glue( + "The genotypes must have one column per z-score ", + "({ncol(ld$F)} columns, {length(zScore)} z-scores)." + )) + } + return(invisible(NULL)) + } + ldMat <- ld$R if ( !is.matrix(ldMat) || nrow(ldMat) != ncol(ldMat) || @@ -428,12 +478,16 @@ dentist <- function( } # Optionally deduplicate near-perfectly-correlated variants before imputation. -.dentistDedup <- function(zScore, ldMat, duprThreshold) { +.dentistDedup <- function(zScore, ld, duprThreshold) { if (duprThreshold >= 1.0) { - return(list(zScore = zScore, ldMat = ldMat, dedupRes = NULL)) + return(list(zScore = zScore, ld = ld, dedupRes = NULL)) } rThreshold <- round(sqrt(duprThreshold) * 1000) / 1000 - dedupRes <- .findDuplicateVariants(zScore, ldMat, rThreshold) + dedupRes <- if (is.null(ld$F)) { + .findDuplicateVariants(zScore, ld$R, rThreshold) + } else { + .findDuplicateVariantsFactor(zScore, ld$F, rThreshold) + } numDup <- sum(dedupRes$dupBearer != -1) if (numDup > 0) { nZ <- length(zScore) @@ -445,7 +499,11 @@ dentist <- function( } list( zScore = dedupRes$filteredZ, - ldMat = dedupRes$filteredLD, + ld = if (is.null(ld$F)) { + list(R = dedupRes$filteredLD) + } else { + list(F = dedupRes$filteredFactor) + }, dedupRes = dedupRes ) } @@ -453,11 +511,17 @@ dentist <- function( # Run the C++ iterative imputation and snake_case the output. The C++ returns # any rsq values it capped at 1.0 in `rsqExceed`; summarize them into a single # warning here (no warning handler / shared env needed). -.dentistRunImpute <- function(ldMat, nSample, zScore, p) { +.dentistRunImpute <- function(ld, nSample, zScore, p) { verboseIter <- getOption("pecotmr.dentist.verbose", FALSE) - raw <- dentistIterativeImpute( + # The factor kernel imputes from the LD's factor without forming it. + kernel <- if (is.null(ld$F)) { + dentistIterativeImpute + } else { + dentistIterativeImputeFactor + } + raw <- kernel( # cpp11 requires exact integer types for int parameters - ldMat, + ld$R %||% ld$F, as.integer(nSample), zScore, p$pValueThreshold, @@ -515,8 +579,10 @@ dentist <- function( #' #' @param zScore Numeric vector of z-scores. #' @param R Square LD correlation matrix. Provide either \code{R} or \code{X}. -#' @param X Genotype matrix (samples x SNPs). If provided, LD is computed via -#' \code{computeLd(X)} and \code{nSample} defaults to \code{nrow(X)}. +#' @param X Genotype matrix (samples x SNPs). With \code{ldMethod = "sample"} +#' DENTIST works on the standardized genotypes and never forms the LD +#' matrix; any other \code{ldMethod} computes LD via \code{computeLd(X)}. +#' \code{nSample} defaults to \code{nrow(X)}. #' @param nSample Number of samples in the LD reference panel (NOT the GWAS #' sample size). Controls the SVD truncation rank. Required when \code{R} is #' provided; inferred from \code{X} when \code{X} is provided. @@ -531,9 +597,9 @@ dentist <- function( #' @param correctChenEtAlBug Correct the original DENTIST operator! bug. Default #' is TRUE. #' @param ldMethod Character string specifying the LD computation method when -#' \code{X} is provided. Passed to \code{computeLd}. One of \code{"sample"} -#' (default), \code{"population"}, or \code{"gcta"}. Ignored when \code{R} is -#' provided directly. +#' \code{X} is provided: \code{"sample"} (default), which uses the +#' genotypes directly, or \code{"population"} or \code{"gcta"}, which go +#' through \code{computeLd}. Ignored when \code{R} is provided directly. #' @param seed Integer or \code{NULL}. Random seed for the iterative #' variant-partitioning RNG. \code{NULL} (default) preserves the original #' DENTIST hard-coded seeds (\code{10} for the initial partition, @@ -565,16 +631,9 @@ dentistSingleWindow <- function( ldMethod = "sample", seed = NULL ) { - ld <- resolveLdInput( - R = R, - X = X, - nSample = nSample, - needNSample = TRUE, - ldMethod = ldMethod - ) + ld <- .dentistLdInput(R, X, nSample, ldMethod) nSample <- ld$nSample - ldMat <- ld$R - .dentistValidateInput(zScore, ldMat) + .dentistValidateInput(zScore, ld) p <- list( pValueThreshold = pValueThreshold, propSVD = propSVD, @@ -586,8 +645,8 @@ dentistSingleWindow <- function( seed = seed ) orgZscore <- zScore - dedup <- .dentistDedup(zScore, ldMat, duprThreshold) - imputed <- .dentistRunImpute(dedup$ldMat, nSample, dedup$zScore, p) + dedup <- .dentistDedup(zScore, ld, duprThreshold) + imputed <- .dentistRunImpute(dedup$ld, nSample, dedup$zScore, p) res <- if (duprThreshold < 1.0) { addDupsBackDentist(orgZscore, imputed, dedup$dedupRes) } else { @@ -596,21 +655,6 @@ dentistSingleWindow <- function( .dentistOutlierStat(res, pValueThreshold) } -#' Add duplicates back to DENTIST output -#' -#' This function takes the output from the DENTIST algorithm and adds back the -#' duplicated variants based on the output from the `findDuplicateVariants` -#' function. -#' @param zScore The original zScore -#' @param dentistOutput A data frame containing the output from the DENTIST -#' algorithm. -#' @param findDupOutput A list containing the output from the -#' `findDuplicateVariants` function. -#' -#' @return A data frame with duplicated variants added back and an additional -#' column indicating duplicates. -#' -#' @noRd # --- addDupsBackDentist helpers --------------------------------------------- # Validate DENTIST output vs the duplicate-bearer bookkeeping. @@ -666,6 +710,21 @@ dentistSingleWindow <- function( ) } +#' Add duplicates back to DENTIST output +#' +#' This function takes the output from the DENTIST algorithm and adds back the +#' duplicated variants based on the output from the `findDuplicateVariants` +#' function. +#' @param zScore The original zScore +#' @param dentistOutput A data frame containing the output from the DENTIST +#' algorithm. +#' @param findDupOutput A list containing the output from the +#' `findDuplicateVariants` function. +#' +#' @return A data frame with duplicated variants added back and an additional +#' column indicating duplicates. +#' +#' @noRd addDupsBackDentist <- function(zScore, dentistOutput, findDupOutput) { dupBearer <- findDupOutput$dupBearer nrowsDup <- length(dupBearer) @@ -764,37 +823,6 @@ buildSegmentResult <- function( ) } -#' Sliding Window Loop for Genomic Segmentation -#' -#' Core overlapping-window loop shared by both distance-based and count-based -#' segmentation strategies. Iterates over contiguous blocks (separated by gaps), -#' creates overlapping windows within each block using mode-specific callbacks, -#' and assembles the result. -#' -#' @param allGaps Integer vector of 1-based block boundaries from -#' \code{\link{detectGaps}}. -#' @param n Total number of positions. -#' @param ctx Named list bundling the caller's mode-specific segmentation state; -#' passed as the final argument to every callback below (so they can be -#' top-level functions rather than closures). -#' @param minBlockFn Function(blockSize, ctx) -> logical; returns TRUE if the -#' block is large enough to process. -#' @param initEndFn Function(startIdx, blockEnd, ctx) -> integer; computes the -#' initial window end index for the first window in a block. -#' @param fillFn Function(startIdx, endIdx, notStartInterval, notLastInterval, -#' ctx) -> list(start, end); computes fill boundaries for each window. -#' @param stepFn Function(startIdx, blockEnd, ctx) -> list(startIdx, endIdx); -#' advances to the next window. -#' @param adjustLastFn Optional function(startIdx, oldStartIdx, endIdx, -#' blockEnd, ctx) -> integer; adjusts startIdx when the last interval is -#' detected. Used by distance mode for small-last-interval correction. Default -#' is NULL (no adjustment). -#' @param verbose Logical; print interval info. Default is FALSE. -#' -#' @return A data frame with columns: windowIdx, windowStartIdx, windowEndIdx, -#' fillStartIdx, fillEndIdx. -#' -#' @noRd # --- slidingWindowLoop helpers ---------------------------------------------- # Generate the window tuples for one block via the mode-specific callbacks in @@ -932,6 +960,37 @@ buildSegmentResult <- function( ) } +#' Sliding Window Loop for Genomic Segmentation +#' +#' Core overlapping-window loop shared by both distance-based and count-based +#' segmentation strategies. Iterates over contiguous blocks (separated by gaps), +#' creates overlapping windows within each block using mode-specific callbacks, +#' and assembles the result. +#' +#' @param allGaps Integer vector of 1-based block boundaries from +#' \code{\link{detectGaps}}. +#' @param n Total number of positions. +#' @param ctx Named list bundling the caller's mode-specific segmentation state; +#' passed as the final argument to every callback below (so they can be +#' top-level functions rather than closures). +#' @param minBlockFn Function(blockSize, ctx) -> logical; returns TRUE if the +#' block is large enough to process. +#' @param initEndFn Function(startIdx, blockEnd, ctx) -> integer; computes the +#' initial window end index for the first window in a block. +#' @param fillFn Function(startIdx, endIdx, notStartInterval, notLastInterval, +#' ctx) -> list(start, end); computes fill boundaries for each window. +#' @param stepFn Function(startIdx, blockEnd, ctx) -> list(startIdx, endIdx); +#' advances to the next window. +#' @param adjustLastFn Optional function(startIdx, oldStartIdx, endIdx, +#' blockEnd, ctx) -> integer; adjusts startIdx when the last interval is +#' detected. Used by distance mode for small-last-interval correction. Default +#' is NULL (no adjustment). +#' @param verbose Logical; print interval info. Default is FALSE. +#' +#' @return A data frame with columns: windowIdx, windowStartIdx, windowEndIdx, +#' fillStartIdx, fillEndIdx. +#' +#' @noRd slidingWindowLoop <- function( allGaps, n, @@ -974,9 +1033,6 @@ slidingWindowLoop <- function( ) } -# Apply the quarter-distance index map `quaterIdx` `n` times to `x` (n = 1..4 -# gives the 1st..4th quarter boundary from x). Used by segmentByDist. -# @noRd # One quarter-index hop; the step index is unused, `reduce` just applies it # `n` times. # @noRd @@ -984,53 +1040,17 @@ slidingWindowLoop <- function( quaterIdx[x] } +# Apply the quarter-distance index map `quaterIdx` `n` times to `x` (n = 1..4 +# gives the 1st..4th quarter boundary from x). Used by segmentByDist. +# @noRd .nthQuaterIdx <- function(x, n, quaterIdx) { reduce(seq_len(n), .nthQuaterStep, quaterIdx = quaterIdx, .init = x) } -#' Segment Genomic Region by Distance (Original DENTIST Algorithm) -#' -#' Implements the same windowing/segmentation algorithm as the original DENTIST -#' C++ binary's \code{segmentingByDist} function. Windows are created using -#' quarter-distance SNP index lookups, with gap detection for centromeres and -#' large gaps. -#' -#' @param pos Integer vector of base pair positions (must be sorted). -#' @param maxDist Maximum distance (bp) between SNPs for windowing. Default is -#' 2000000. -#' @param minDim Minimum number of SNPs per window. Default is 2000. -#' @param verbose Logical; print segmentation info. Default is FALSE. -#' -#' @return A data frame with columns: windowIdx, windowStartIdx, windowEndIdx, -#' fillStartIdx, fillEndIdx. Start indices are 1-based inclusive; end indices -#' (windowEndIdx, fillEndIdx) are 1-based exclusive (one past last element), -#' matching the C++ convention. Use \code{startIdx:(endIdx - 1)} for R -#' inclusive ranges. -#' -#' @details -#' This is a faithful R translation of the C++ \code{segmentingByDist} function. -#' The algorithm: -#' \enumerate{ -#' \item Precomputes for each SNP: the index of the farthest SNP within -#' \code{maxDist}, -#' and the index of the SNP at \code{maxDist/4} distance. -#' \item Detects gaps > \code{maxDist/4} in the position vector (e.g., -#' centromeres). -#' \item Creates overlapping windows that slide by half the distance cutoff, -#' with fill -#' regions covering the inner three-quarters of each window. -#' \item The first window's fill starts at the window start; the last -#' window's fill -#' ends at the window end. -#' } -#' -#' @seealso \code{\link{dentistSingleWindow}}, \code{\link{dentist}} -#' -#' @noRd # --- segmentByDist helpers -------------------------------------------------- -# For each SNP, the last SNP index within cutoff/4 distance (clamped to [1, n]). -# For each SNP, the index of the last SNP within a quarter of `cutoff`. +# For each SNP, the index of the last SNP within a quarter of `cutoff`, +# clamped to [1, n]. # # The C++ original walks a second pointer forward, which is the same thing as # counting how many positions fall strictly below each target -- that is @@ -1087,6 +1107,45 @@ slidingWindowLoop <- function( ) } +#' Segment Genomic Region by Distance (Original DENTIST Algorithm) +#' +#' Implements the same windowing/segmentation algorithm as the original DENTIST +#' C++ binary's \code{segmentingByDist} function. Windows are created using +#' quarter-distance SNP index lookups, with gap detection for centromeres and +#' large gaps. +#' +#' @param pos Integer vector of base pair positions (must be sorted). +#' @param maxDist Maximum distance (bp) between SNPs for windowing. Default is +#' 2000000. +#' @param minDim Minimum number of SNPs per window. Default is 2000. +#' @param verbose Logical; print segmentation info. Default is FALSE. +#' +#' @return A data frame with columns: windowIdx, windowStartIdx, windowEndIdx, +#' fillStartIdx, fillEndIdx. Start indices are 1-based inclusive; end indices +#' (windowEndIdx, fillEndIdx) are 1-based exclusive (one past last element), +#' matching the C++ convention. Use \code{startIdx:(endIdx - 1)} for R +#' inclusive ranges. +#' +#' @details +#' This is a faithful R translation of the C++ \code{segmentingByDist} function. +#' The algorithm: +#' \enumerate{ +#' \item Precomputes for each SNP: the index of the farthest SNP within +#' \code{maxDist}, +#' and the index of the SNP at \code{maxDist/4} distance. +#' \item Detects gaps > \code{maxDist/4} in the position vector (e.g., +#' centromeres). +#' \item Creates overlapping windows that slide by half the distance cutoff, +#' with fill +#' regions covering the inner three-quarters of each window. +#' \item The first window's fill starts at the window start; the last +#' window's fill +#' ends at the window end. +#' } +#' +#' @seealso \code{\link{dentistSingleWindow}}, \code{\link{dentist}} +#' +#' @noRd segmentByDist <- function( pos, maxDist = 2000000, @@ -1171,6 +1230,22 @@ segmentByCount <- function(pos, maxCount, gapDist = 1e6, verbose = FALSE) { ) } +# Window `k`'s rows, indexed globally and trimmed to that window's fill range. +# @noRd +.dentistMergeWindowAt <- function(k, dentistResultByWindow, windowDividedRes) { + imputedK <- dentistResultByWindow[[k]] + offset <- windowDividedRes$windowStartIdx[k] - 1 + imputedK |> + mutate( + index_within_window = seq_len(nrow(imputedK)), + index_global = .data$index_within_window + offset + ) |> + filter( + .data$index_global >= windowDividedRes$fillStartIdx[k] & + .data$index_global < windowDividedRes$fillEndIdx[k] + ) +} + #' Merge dentist Results by Window #' #' This function merges DENTIST results by window into a single data frame. @@ -1188,22 +1263,6 @@ segmentByCount <- function(pos, maxCount, gapDist = 1e6, verbose = FALSE) { #' within the fillers and combines them into a single data frame. #' #' @noRd -# Window `k`'s rows, indexed globally and trimmed to that window's fill range. -# @noRd -.dentistMergeWindowAt <- function(k, dentistResultByWindow, windowDividedRes) { - imputedK <- dentistResultByWindow[[k]] - offset <- windowDividedRes$windowStartIdx[k] - 1 - imputedK |> - mutate( - index_within_window = seq_len(nrow(imputedK)), - index_global = .data$index_within_window + offset - ) |> - filter( - .data$index_global >= windowDividedRes$fillStartIdx[k] & - .data$index_global < windowDividedRes$fillEndIdx[k] - ) -} - mergeWindows <- function(dentistResultByWindow, windowDividedRes) { if (length(dentistResultByWindow) != nrow(windowDividedRes)) { abort("Different number of windows and imputed results!") @@ -1253,12 +1312,22 @@ mergeWindows <- function(dentistResultByWindow, windowDividedRes) { # --- slalom helpers --------------------------------------------------------- -# Require exactly one of R (LD matrix) or X (genotype matrix). -# Lead-variant LD column. `R` has already been resolved from `X` where the -# caller gave genotypes, so there is one source here and `ldMethod` has -# already been applied. +# Lead-variant LD column. From genotypes under the sample estimator it is read +# off X's LD factor -- crossprod(F, F[, lead]) / (n - 1), computeLd()'s column +# exactly -- without forming the p x p matrix. The population and GCTA +# estimators treat missing calls their own way, so they still build it +# through resolveLdInput(), as dentist does. #' @importFrom checkmate assertMatrix -.slalomLeadR <- function(zScore, R, leadIdx) { +.slalomLeadR <- function(zScore, R, X, leadIdx, ldMethod) { + if (is.null(R) && identical(ldMethod, "sample")) { + factor <- .ldFactorFromDosage(as.matrix(X)) + assertMatrix(factor, ncols = length(zScore)) + lead <- crossprod(factor, factor[, leadIdx, drop = FALSE]) + # The lead's correlation with itself is 1 exactly, as on the + # matrix's unit diagonal, not 1 give or take rounding. + return(replace(drop(lead) / (nrow(factor) - 1), leadIdx, 1)) + } + R <- resolveLdInput(R = R, X = X, ldMethod = ldMethod)$R assertMatrix(R, nrows = length(zScore), ncols = length(zScore)) R[, leadIdx] } @@ -1326,12 +1395,15 @@ mergeWindows <- function(dentistResultByWindow, windowDividedRes) { #' p-values from z-scores assuming a two-sided standard normal distribution. #' #' Provide either an LD correlation matrix \code{R} or a genotype matrix -#' \code{X} (from which LD is derived automatically via \code{computeLd}). +#' \code{X}. SLALOM needs only the lead variant's LD with the others, so with +#' \code{ldMethod = "sample"} it computes that one column from the genotypes +#' and never forms the LD matrix. #' #' @param zScore Numeric vector of z-scores corresponding to each variant. #' @param R Square LD correlation matrix. Provide either \code{R} or \code{X}. -#' @param X Genotype matrix (samples x SNPs). If provided, LD is computed via -#' \code{computeLd(X)}. +#' @param X Genotype matrix (samples x SNPs). With \code{ldMethod = "sample"} +#' only the lead variant's LD column is computed from it; any other +#' \code{ldMethod} computes the LD matrix via \code{computeLd(X)}. #' @param standardError Optional numeric vector of standard errors corresponding #' to each z-score. If not provided, a default value of 1 is assumed for all #' variants. @@ -1344,9 +1416,9 @@ mergeWindows <- function(dentistResultByWindow, windowDividedRes) { #' @param leadVariantChoice Character, method to choose the lead variant, either #' "pvalue" or "abf", with default "pvalue". #' @param ldMethod Character string specifying the LD computation method when -#' \code{X} is provided. Passed to \code{computeLd}. One of \code{"sample"} -#' (default), \code{"population"}, or \code{"gcta"}. Ignored when \code{R} is -#' provided directly. +#' \code{X} is provided: \code{"sample"} (default), which uses the +#' genotypes directly, or \code{"population"} or \code{"gcta"}, which go +#' through \code{computeLd}. Ignored when \code{R} is provided directly. #' @return A list containing the annotated LD matrix with ABF results, credible #' sets, lead variant, and DENTIST-S statistics; and a summary dataframe with #' aggregate statistics. @@ -1373,13 +1445,7 @@ slalom <- function( leadVariantChoice = "pvalue", ldMethod = "sample" ) { - # Resolve the LD the same way dentist does, so `ldMethod` selects the - # estimator it advertises. This used to correlate the lead column of `X` - # with cor() directly, which skipped computeLd entirely: "population" - # and "gcta" were accepted and silently given sample LD. Building the - # full matrix is the cost of honouring the choice, and is what the - # sibling QC method already pays on the same input. - R <- resolveLdInput(R = R, X = X, ldMethod = ldMethod)$R + .ldRequireOneSource(R, X) # One-sided p-value matching the original Python (stats.norm.cdf): lead is # the most negative z-score when leadVariantChoice == "pvalue". pvalue <- pnorm(zScore) @@ -1396,7 +1462,7 @@ slalom <- function( } else { which.max(prob) } - rLead <- .slalomLeadR(zScore, R, leadIdx) + rLead <- .slalomLeadR(zScore, R, X, leadIdx, ldMethod) ds <- .slalomDentistS( zScore, rLead, @@ -1492,28 +1558,6 @@ autoDecision <- function(df, highCorrCols) { # RAISS: regression-based sumstats imputation # ============================================================================= -#' Core RAISS implementation for a single LD matrix -#' -#' @param refPanel A data frame containing 'chrom', 'pos', 'variant_id', 'A1', -#' and 'A2'. -#' @param knownZscores A data frame containing 'chrom', 'pos', 'variant_id', -#' 'A1', 'A2', and 'z' values. -#' @param ldMatrix A square matrix of dimension equal to the number of rows in -#' refPanel. -#' @param lamb Regularization term added to the diagonal of the ldMatrix. -#' @param rcond Threshold for filtering eigenvalues in the pseudo-inverse -#' computation. -#' @param r2Threshold R square threshold below which SNPs are filtered from the -#' output. -#' @param minimumLd Minimum LD score threshold for SNP filtering. -#' @param verbose Logical indicating whether to print progress information. -#' -#' @return A list containing filtered and unfiltered results, and filtered LD -#' matrix. -#' @importFrom MASS ginv -#' @importFrom dplyr arrange -#' @noRd -# Drop LD-matrix rows/cols for variants filtered out of the imputation result. # Panel rows that are unsafe to impute, over and above being already known. # # Both cases come from a reference panel that carries a variant and its own @@ -1614,15 +1658,18 @@ autoDecision <- function(df, highCorrCols) { if (is.null(refPanel$chrom) || is.null(knownZ$chrom) || n == 0L) { return(rep(FALSE, n)) } - key <- function(chrom, pos) { - str_c(canonChrom(as.character(chrom)), ":", as.character(pos)) - } is_in( - key(refPanel$chrom, refPanel$pos), - key(knownZ$chrom, knownZ$pos) + .raissPositionKey(refPanel$chrom, refPanel$pos), + .raissPositionKey(knownZ$chrom, knownZ$pos) ) } +# Canonical "chrom:pos" keys, so a "chr1"/"1" difference is one site. +# @noRd +.raissPositionKey <- function(chrom, pos) { + str_c(canonChrom(as.character(chrom)), ":", as.character(pos)) +} + # Imputation targets: panel rows the sumstats do not carry, minus the rows no # imputed value could be trusted for and the rows sitting at a position the # GWAS already typed. @@ -1634,6 +1681,8 @@ autoDecision <- function(df, highCorrCols) { which(candidate & !unsafe & !observed) } +# Drop LD-matrix rows/cols for variants filtered out of the imputation result. +# @noRd .raissFilterLd <- function(ldMatrix, refPanel, resultFilter) { filteredOutVariant <- setdiff(refPanel$variant_id, resultFilter$variant_id) if (length(filteredOutVariant) > 0) { @@ -1644,6 +1693,27 @@ autoDecision <- function(df, highCorrCols) { } } +#' Core RAISS implementation for a single LD matrix +#' +#' @param refPanel A data frame containing 'chrom', 'pos', 'variant_id', 'A1', +#' and 'A2'. +#' @param knownZscores A data frame containing 'chrom', 'pos', 'variant_id', +#' 'A1', 'A2', and 'z' values. +#' @param ldMatrix A square matrix of dimension equal to the number of rows in +#' refPanel. +#' @param lamb Regularization term added to the diagonal of the ldMatrix. +#' @param rcond Threshold for filtering eigenvalues in the pseudo-inverse +#' computation. +#' @param r2Threshold R square threshold below which SNPs are filtered from the +#' output. +#' @param minimumLd Minimum LD score threshold for SNP filtering. +#' @param verbose Logical indicating whether to print progress information. +#' +#' @return A list containing filtered and unfiltered results, and filtered LD +#' matrix. +#' @importFrom MASS ginv +#' @importFrom dplyr arrange +#' @noRd raissSingleMatrix <- function( refPanel, knownZscores, @@ -1684,33 +1754,6 @@ raissSingleMatrix <- function( ) } -#' Core RAISS implementation from a genotype matrix X (SVD-based) -#' -#' Performs the same imputation as \code{raissSingleMatrix} but works directly -#' with the genotype matrix X instead of the LD correlation matrix R. This -#' avoids forming the p x p LD matrix, saving O(p^2) memory and O(np^2) compute. -#' -#' The reformulation is mathematically exact: using the thin SVD of Xt (the -#' known variant columns), all RAISS quantities (mu, var, ld_score) are computed -#' in the SVD basis without ever forming R = X'X/(n-1). -#' -#' @param refPanel A data frame containing 'chrom', 'pos', 'variant_id', 'A1', -#' and 'A2'. -#' @param knownZscores A data frame containing 'chrom', 'pos', 'variant_id', -#' 'A1', 'A2', and 'z' values. -#' @param X Centered and scaled genotype matrix (nSamples x pVariants). Column -#' order must match the variant order in refPanel. -#' @param lamb Regularization term (same role as in the LD-based path). -#' @param svdTol Relative tolerance for filtering small singular values in the -#' SVD of Xt. -#' @param r2Threshold R square threshold below which SNPs are filtered from the -#' output. -#' @param minimumLd Minimum LD score threshold for SNP filtering. -#' @param verbose Logical indicating whether to print progress information. -#' -#' @return A list containing filtered and unfiltered results, and ldMat = NULL. -#' @importFrom dplyr arrange -#' @noRd # --- raissSingleMatrixFromX helpers ---------------------------------------- # Early-return cases: no known variants (NULL) or nothing to impute (knowns). @@ -1745,7 +1788,24 @@ raissSingleMatrix <- function( # SVD-based imputation from the genotype matrix (avoids forming R). Computes # X' %*% [w | U] in a single BLAS call to skip an O(n*m) copy of X_unknown. -.raissSvdImpute <- function(X, knowns, unknowns, zt, lamb, svdTol, nSamples) { +# +# The LD route pseudo-inverts the ridged LD of the known variants with +# MASS::ginv(tol = rcond), which drops every eigen-direction whose eigenvalue +# is below `rcond` times the largest. Here those eigenvalues are +# (d^2 + cReg) / (nSamples - 1), so the same directions are dropped and the +# two routes impute identically. Directions outside the genotypes' span carry +# no LD with the variants being imputed, so they change neither route. The LD +# score inverts nothing and keeps every direction. +.raissSvdImpute <- function( + X, + knowns, + unknowns, + zt, + lamb, + rcond, + svdTol, + nSamples +) { # Thin SVD of the known columns (n x k -> U: n x r, d: r, V: k x r). Xt <- X[, knowns, drop = FALSE] svdResult <- .safeSvd(Xt, tol = svdTol) @@ -1756,9 +1816,11 @@ raissSingleMatrix <- function( cReg <- lamb * (nSamples - 1) d2 <- d^2 d2PlusC <- d2 + cReg - # w = U %*% diag(d / (d^2 + c)) %*% V' zt (projection of zt through SVD). + inverted <- d2PlusC > rcond * d2PlusC[[1L]] + # w = U %*% diag(d / (d^2 + c)) %*% V' zt (projection of zt through SVD), + # over the directions the pseudo-inverse keeps. VtZt <- crossprod(V, zt) - w <- U %*% (d / d2PlusC * VtZt) + w <- U %*% (inverted * d / d2PlusC * VtZt) # Single dgemm X' %*% [w | U]: col 1 (rows unknowns) -> mu; rest -> A. XtWU <- crossprod(X, cbind(w, U)) muRaw <- as.numeric(XtWU[unknowns, 1]) @@ -1767,33 +1829,59 @@ raissSingleMatrix <- function( # Variance and LD score in one pass over A^2. ASq <- A^2 rm(A) - dWeights <- cbind(d2 / d2PlusC, d2) + dWeights <- cbind(inverted * d2 / d2PlusC, d2) scores <- ASq %*% dWeights rm(ASq) nm1 <- nSamples - 1 varRaw <- (1 + lamb) - scores[, 1] / nm1 raissLdScore <- scores[, 2] / nm1^2 rm(scores) - conditionNumber <- rep(d[1] / d[length(d)], length(unknowns)) - correctInversion <- rep(TRUE, length(unknowns)) - # R2 correction (same as raissModel). - varNorm <- varInBoundaries(varRaw, lamb) - R2 <- (1 + lamb) - varNorm - mu <- muRaw / sqrt(R2) - list( - var = varNorm, - mu = mu, + .raissResult( + varRaw = varRaw, + muRaw = muRaw, + lamb = lamb, raissLdScore = raissLdScore, - conditionNumber = conditionNumber, - correctInversion = correctInversion + conditionNumber = rep(d[1] / d[length(d)], length(unknowns)), + correctInversion = rep(TRUE, length(unknowns)) ) } +#' Core RAISS implementation from a genotype matrix X (SVD-based) +#' +#' Performs the same imputation as \code{raissSingleMatrix} but works directly +#' with the genotype matrix X instead of the LD correlation matrix R. This +#' avoids forming the p x p LD matrix, saving O(p^2) memory and O(np^2) compute. +#' +#' The reformulation is mathematically exact: using the thin SVD of Xt (the +#' known variant columns), all RAISS quantities (mu, var, ld_score) are computed +#' in the SVD basis without ever forming R = X'X/(n-1). +#' +#' @param refPanel A data frame containing 'chrom', 'pos', 'variant_id', 'A1', +#' and 'A2'. +#' @param knownZscores A data frame containing 'chrom', 'pos', 'variant_id', +#' 'A1', 'A2', and 'z' values. +#' @param X Centered and scaled genotype matrix (nSamples x pVariants). Column +#' order must match the variant order in refPanel. +#' @param lamb Regularization term (same role as in the LD-based path). +#' @param rcond Eigenvalue cutoff for the pseudo-inverse, as on the LD-based +#' path: directions whose ridged eigenvalue is below \code{rcond} times the +#' largest are dropped. +#' @param svdTol Relative tolerance below which singular values of Xt are +#' treated as numerically zero. +#' @param r2Threshold R square threshold below which SNPs are filtered from the +#' output. +#' @param minimumLd Minimum LD score threshold for SNP filtering. +#' @param verbose Logical indicating whether to print progress information. +#' +#' @return A list containing filtered and unfiltered results, and ldMat = NULL. +#' @importFrom dplyr arrange +#' @noRd raissSingleMatrixFromX <- function( refPanel, knownZscores, X, lamb = 0.01, + rcond = 0.01, svdTol = 1e-8, r2Threshold = 0.6, minimumLd = 5, @@ -1814,9 +1902,10 @@ raissSingleMatrixFromX <- function( knowns, unknowns, knownZscores$z, - lamb, - svdTol, - nrow(X) + lamb = lamb, + rcond = rcond, + svdTol = svdTol, + nSamples = nrow(X) ) results <- formatRaissDf(imp, refPanel, unknowns) |> filterRaissOutput(r2Threshold, minimumLd, verbose) @@ -1831,255 +1920,34 @@ raissSingleMatrixFromX <- function( ) } -# Sequentially append RAISS block results, resolving the shared boundary variant -# (duplicated across adjacent blocks) by keeping the higher-R2 imputation. -# @noRd -.combineWithBoundaryCheck <- function(combinedResult, newResult) { - # If either is empty, simply return the non-empty one or empty data frame - if (is.null(combinedResult)) { - return(newResult) - } - if (is.null(newResult)) { - return(combinedResult) - } - - # Check if the last variant of combined matches the first of new - lastVar <- combinedResult$variant_id[nrow(combinedResult)] - firstVar <- newResult$variant_id[1] - - if (lastVar != firstVar) { - # No overlap - combine all rows - return(bind_rows(combinedResult, newResult)) - } - # The shared boundary variant is kept from whichever side imputed it - # better; two NAs, a tie, or an NA on the new side keep the existing row. - newR2 <- newResult$raissR2[1] - oldR2 <- combinedResult$raissR2[nrow(combinedResult)] - preferNew <- !is.na(newR2) && (is.na(oldR2) || newR2 > oldR2) - resolved <- if (preferNew) { - bind_rows(combinedResult[-nrow(combinedResult), ], newResult[1, ]) - } else { - combinedResult - } - # Every row of `newResult` past the boundary variant is new. - bind_rows(resolved, newResult[-1, ]) -} - -# --- raiss: genotype-matrix and LD-matrix path helpers --------------------- +# --- raiss: the genotype and LD-matrix routes -------------------------------- -# List of genotype-matrix blocks: impute each via SVD, then row-bind. -# One genotype block's imputation, or NULL when the block yields nothing. +# The genotype route: SVD-based imputation from a standardized genotype +# matrix, which never forms the p x p LD matrix. # @noRd -.raissGenotypeBlockAt <- function( - i, - refPanel, - knownZscores, - genotypeMatrix, - p -) { - if (p$verbose) { - nBlocks <- length(genotypeMatrix) - msg <- glue("Processing block {i} of {nBlocks}") - inform(msg) - } - raissSingleMatrixFromX( - refPanel, - knownZscores, - genotypeMatrix[[i]], - p$lamb, - p$svdTol, - p$r2Threshold, - p$minimumLd, - verbose = FALSE - ) -} - -.raissGenotypeBlocks <- function(refPanel, knownZscores, genotypeMatrix, p) { - if (p$verbose) { - msg <- glue( - "Processing multiple genotype matrix blocks via SVD-based ", - "imputation..." - ) - inform(msg) - } - resultsList <- compact(map( - seq_along(genotypeMatrix), - .raissGenotypeBlockAt, - refPanel = refPanel, - knownZscores = knownZscores, - genotypeMatrix = genotypeMatrix, - p = p - )) - if (length(resultsList) == 0) { - if (p$verbose) { - inform("No blocks could be processed.") - } - return(NULL) - } - combinedNofilter <- bind_rows(map(resultsList, "resultNofilter")) - combinedFilter <- bind_rows(map(resultsList, "resultFilter")) - list( - resultNofilter = combinedNofilter |> arrange(.data$pos), - resultFilter = combinedFilter |> arrange(.data$pos), - ldMat = NULL - ) -} - -# Genotype-matrix imputation path: single matrix, list of blocks, or error. .raissGenotypePath <- function(refPanel, knownZscores, genotypeMatrix, p) { - if (is.matrix(genotypeMatrix)) { - if (p$verbose) { - inform("Processing genotype matrix via SVD-based imputation...") - } - return(raissSingleMatrixFromX( - refPanel, - knownZscores, - genotypeMatrix, - p$lamb, - p$svdTol, - p$r2Threshold, - p$minimumLd, - p$verbose - )) - } - if (is.list(genotypeMatrix)) { - return(.raissGenotypeBlocks(refPanel, knownZscores, genotypeMatrix, p)) - } - abort("genotypeMatrix must be a matrix or a list of matrices.") -} - -# Impute one LD block against its reference-panel subset. -.raissLdBlockOne <- function( - refPanel, - knownZscores, - ldMatrix, - variantIndices, - blockId, - p -) { - blockVariantIds <- variantIndices$variant_id[ - variantIndices$blockId == blockId - ] - blockIndices <- match(blockVariantIds, refPanel$variant_id) - blockRefPanel <- refPanel[blockIndices, ] - blockLdMatrix <- ldMatrix$ldMatrices[[blockId]] - blockKnownZscores <- knownZscores |> - filter(is_in(.data$variant_id, blockVariantIds)) - if (nrow(blockLdMatrix) != nrow(blockRefPanel)) { - msg <- glue( - "Block {blockId} : LD matrix dimension does not match number ", - "of variants in reference panel" - ) - abort(msg) - } - raissSingleMatrix( - blockRefPanel, - blockKnownZscores, - blockLdMatrix, - p$lamb, - p$rcond, - p$r2Threshold, - p$minimumLd, - verbose = FALSE - ) -} - -# Combine per-block imputation results (boundary-dedup) + rebuild LD matrix. -.raissLdBlocksCombine <- function(resultsList) { - combinedNofilter <- reduce( - map(resultsList, "resultNofilter"), - .combineWithBoundaryCheck - ) - combinedFilter <- reduce( - map(resultsList, "resultFilter"), - .combineWithBoundaryCheck - ) - ldFilteredList <- map(resultsList, "ldMat") - variantList <- map(ldFilteredList, .ldVariantsDf) - ldMatrix <- createLdMatrix( - ldMatrices = ldFilteredList, - variants = variantList - ) - list( - resultNofilter = combinedNofilter, - resultFilter = combinedFilter, - ldMat = ldMatrix - ) -} - -# LD-block imputation path: impute each block then combine. -# One LD block's imputation, or NULL when the block yields nothing. -# @noRd -.raissLdBlockAt <- function( - blockId, - refPanel, - knownZscores, - ldMatrix, - variantIndices, - blockIds, - p -) { if (p$verbose) { - nBlocks <- length(blockIds) - msg <- glue("Processing block {blockId} of {nBlocks}") - inform(msg) + inform("Processing genotype matrix via SVD-based imputation...") } - .raissLdBlockOne( + raissSingleMatrixFromX( refPanel, knownZscores, - ldMatrix, - variantIndices, - blockId, - p + genotypeMatrix, + lamb = p$lamb, + rcond = p$rcond, + svdTol = p$svdTol, + r2Threshold = p$r2Threshold, + minimumLd = p$minimumLd, + verbose = p$verbose ) } -.raissLdBlocksPath <- function(refPanel, knownZscores, ldMatrix, p) { - if (p$verbose) { - inform("Processing multiple LD blocks...") - } - variantIndices <- ldMatrix$variantIndices - blockIds <- unique(variantIndices$blockId) - perBlock <- map( - blockIds, - .raissLdBlockAt, - refPanel = refPanel, - knownZscores = knownZscores, - ldMatrix = ldMatrix, - variantIndices = variantIndices, - blockIds = blockIds, - p = p - ) - # `resultsList[[blockId]] <- ...` named the entries only when blockIds are - # character, so keep that distinction rather than inventing names. - blockResults <- if (is.character(blockIds)) { - set_names(perBlock, blockIds) - } else { - perBlock - } - resultsList <- compact(blockResults) - if (length(resultsList) == 0) { - if (p$verbose) { - msg <- glue( - "No blocks could be processed. Check that knownZscores ", - "overlap with variants in the blocks." - ) - inform(msg) - } - return(NULL) - } - .raissLdBlocksCombine(resultsList) -} - -# Single LD-matrix imputation path (extracts matrix from a 1-block list). -.raissSingleLdPath <- function(refPanel, knownZscores, ldMatrix, p) { +# The LD-matrix route: imputation from the correlation matrix of refPanel's +# variants. +# @noRd +.raissLdPath <- function(refPanel, knownZscores, ldMatrix, p) { if (p$verbose) { - fromList <- if (!is.matrix(ldMatrix)) " from list" else "" - msg <- glue("Processing single LD matrix{fromList}...") - inform(msg) - } - if (!is.matrix(ldMatrix)) { - ldMatrix <- ldMatrix$ldMatrices[[1]] + inform("Processing LD matrix...") } raissSingleMatrix( refPanel, @@ -2093,6 +1961,65 @@ raissSingleMatrixFromX <- function( ) } +# The LD reference a raiss() call names, if any: an LdMatrix passed as +# `ldMatrix`, or the genotype panel (or mixture of panels) passed as +# `genotypes`. Genotypes are taken only that way, never as a bare matrix: +# centring, scaling, column order and allele coding are all the caller's to get +# right in a bare matrix, and every one of them fails silently. A reference +# passed through the other argument is refused rather than read the wrong way. +# @noRd +.raissReferenceOf <- function(ldMatrix, genotypes) { + if (.ldIsGenotypeRef(ldMatrix)) { + abort("Pass genotypes as `genotypes`, not `ldMatrix`.") + } + if (!is.null(genotypes) && !.ldIsGenotypeRef(genotypes)) { + abort(c( + "`genotypes` must be a genotype panel or a GenotypeMixture.", + i = "Read one with readGenotypes(), or pass LD as `ldMatrix`." + )) + } + if (.ldIsMatrixRef(ldMatrix) || !is.null(genotypes)) { + return(ldMatrix %||% genotypes) + } + if (!is.null(ldMatrix) && !is.matrix(ldMatrix)) { + abort("`ldMatrix` must be a square LD matrix or an LdMatrix.") + } + NULL +} + +# An LD reference brings its own variant table, which refPanel defaults to. +# Known and imputed rows are merged on chrom, and the table labels +# chromosomes canonically ("22"), so knownZscores has to as well; say so here +# rather than in a failed join. +# @noRd +.raissRefPanelOf <- function(ref, knownZscores) { + panel <- .refVariantsFromLdRef(ref) + sameLabels <- is.character(knownZscores$chrom) && + any(is_in(knownZscores$chrom, panel$chrom)) + if (!sameLabels) { + abort(c( + str_c( + "`knownZscores$chrom` must use the LD reference's chromosome ", + "labels." + ), + i = glue( + "They are canonical character labels, like ", + "'{panel$chrom[[1L]]}'." + ) + )) + } + panel +} + +# The genotypes' LD factor for refPanel's variants (see .ldRefFactor()), the +# way summaryStatsQc() hands it to the SVD route, re-signed into refPanel's +# allele coding. +# @noRd +.raissScaledDosage <- function(genotypes, refPanel) { + m <- .ldFromRefMatch(genotypes, refPanel$variant_id, "raiss", "error") + sweep(.ldRefFactor(genotypes, m$idx), 2L, m$sign, `*`) +} + #' Impute Summary Statistics Using LD (RAISS) #' #' An R port of the RAISS summary-statistic imputation library, described in @@ -2105,34 +2032,43 @@ raissSingleMatrixFromX <- function( #' statistics enhances evidence of functional enrichment", Bioinformatics #' 30(20):2906-2914. \doi{10.1093/bioinformatics/btu416} #' -#' This function can process either a single LD matrix or a list of LD matrices -#' for different blocks. For a list of matrices, it processes each block -#' separately and combines the results. Alternatively, it can accept a genotype -#' matrix X directly, avoiding the need to form the p x p LD matrix (memory and +#' One call imputes one region, from either of the two kinds of LD reference. +#' The LD can be given as a square correlation matrix or an +#' \code{\link{LdMatrix}}, and the imputation then inverts it. Or a genotype +#' panel from \code{\link{readGenotypes}} can be given instead, and the +#' imputation then works from the singular value decomposition of its +#' standardized dosages, never forming the p x p LD matrix (memory and #' compute savings when n << p). #' #' @param refPanel A data frame containing 'chrom', 'pos', 'variant_id', 'A1', -#' and 'A2'. +#' and 'A2'. Optional when the LD comes as an \code{LdMatrix} or a genotype +#' panel, whose own variants are used; \code{knownZscores} must then label +#' chromosomes canonically, as character (e.g. \code{"22"}). Required +#' with a plain \code{ldMatrix}, whose rows and columns follow it. #' @param knownZscores A data frame containing 'chrom', 'pos', 'variant_id', #' 'A1', 'A2', and 'z' values. -#' @param ldMatrix Either a square matrix or a list of matrices for LD blocks. -#' Provide either \code{ldMatrix} or \code{genotypeMatrix}, not both. -#' @param genotypeMatrix A centered and scaled genotype matrix (n x p) as an -#' alternative to \code{ldMatrix}. Column order must match the variant order -#' in \code{refPanel}. When provided, the imputation uses an SVD-based -#' approach that avoids forming the p x p LD matrix. +#' @param ldMatrix A square LD matrix over \code{refPanel}'s variants, in its +#' order, or an \code{LdMatrix} covering them. Provide either +#' \code{ldMatrix} or \code{genotypes}, not both. +#' @param genotypes A genotype panel (see \code{\link{readGenotypes}}) or a +#' \code{\link{GenotypeMixture}} covering the variants, as an alternative +#' to \code{ldMatrix}. Its dosages are matched to \code{refPanel} by +#' variant and allele, mean-imputed and standardized here. #' @param lamb Regularization term added to the diagonal of the ldMatrix. -#' @param rcond Threshold for filtering eigenvalues in the pseudo-inverse -#' computation (only used with ldMatrix path). -#' @param svdTol Relative tolerance for filtering small singular values (only -#' used with genotypeMatrix path). +#' @param rcond Eigenvalue cutoff for the pseudo-inverse of the known +#' variants' LD: directions whose ridged eigenvalue is below \code{rcond} +#' times the largest are dropped. Applied on both routes, so a genotype +#' panel and the LD matrix computed from it give the same imputation. +#' @param svdTol Relative tolerance below which singular values of the +#' standardized genotypes are treated as numerically zero (genotype route +#' only). #' @param r2Threshold R square threshold below which SNPs are filtered from the #' output. #' @param minimumLd Minimum LD score threshold for SNP filtering. #' @param verbose Logical indicating whether to print progress information. #' #' @return A list containing filtered and unfiltered results, and filtered LD -#' matrix (ldMat is NULL when using genotypeMatrix path). +#' matrix (ldMat is NULL on the genotype route). #' @importFrom dplyr arrange bind_rows #' @examples #' data(eqtlRegionExample) @@ -2146,10 +2082,10 @@ raissSingleMatrixFromX <- function( #' ldMatrix = cor(X)) #' @export raiss <- function( - refPanel, + refPanel = NULL, knownZscores, ldMatrix = NULL, - genotypeMatrix = NULL, + genotypes = NULL, lamb = 0.01, rcond = 0.01, svdTol = 1e-8, @@ -2165,23 +2101,31 @@ raiss <- function( minimumLd = minimumLd, verbose = verbose ) - if (!is.null(genotypeMatrix)) { - if (!is.null(ldMatrix)) { - abort("Provide either ldMatrix or genotypeMatrix, not both.") - } - return(.raissGenotypePath(refPanel, knownZscores, genotypeMatrix, p)) + if (!is.null(genotypes) && !is.null(ldMatrix)) { + abort("Provide either ldMatrix or genotypes, not both.") + } + if (is.null(genotypes) && is.null(ldMatrix)) { + abort("Provide either ldMatrix or genotypes.") + } + ref <- .raissReferenceOf(ldMatrix, genotypes) + if (!is.null(ref)) { + refPanel <- refPanel %||% .raissRefPanelOf(ref, knownZscores) + } else if (is.null(refPanel)) { + abort(str_c( + "`refPanel` is required unless the LD comes as an LdMatrix or a ", + "genotype panel." + )) } - if (is.null(ldMatrix)) { - abort("Provide either ldMatrix or genotypeMatrix.") + if (!is.null(genotypes)) { + X <- .raissScaledDosage(genotypes, refPanel) + return(.raissGenotypePath(refPanel, knownZscores, X, p)) } - isSingleMatrixCase <- is.matrix(ldMatrix) || - (is.list(ldMatrix) && - !is.null(ldMatrix$ldMatrices) && - length(ldMatrix$ldMatrices) == 1) - if (isSingleMatrixCase) { - return(.raissSingleLdPath(refPanel, knownZscores, ldMatrix, p)) + R <- if (is.null(ref)) { + ldMatrix + } else { + .ldFromRef(ref, refPanel$variant_id, label = "raiss") } - .raissLdBlocksPath(refPanel, knownZscores, ldMatrix, p) + .raissLdPath(refPanel, knownZscores, R, p) } #' @rdname RaissParam @@ -2192,6 +2136,7 @@ setClass( contains = "MethodParam", slots = c( lamb = "numeric", + rcond = "numeric", svdTol = "numeric", r2Threshold = "numeric", minimumLd = "numeric", @@ -2204,20 +2149,25 @@ setClass( #' @title Arguments For RAISS Imputation During Summary-Statistic QC #' @description The settings \code{\link{summaryStatsQc}} uses when -#' \code{impute = TRUE}. Four are forwarded to \code{\link{raiss}}; the +#' \code{impute = TRUE}. Five are forwarded to \code{\link{raiss}}; the #' other four are pecotmr's own, bounding which panel variants RAISS is #' asked to impute and how wide a window it reads. #' -#' \code{\link{raiss}} also takes an \code{rcond}, but only on its -#' LD-matrix path. QC always hands it a genotype matrix, which routes -#' through the SVD solver and uses \code{svdTol} instead, so \code{rcond} -#' is not offered here --- naming it is an error rather than a setting that -#' silently does nothing. +#' \code{rcond} applies whatever the collection's LD reference is: QC hands +#' RAISS a genotype panel's dosages, which route through the SVD solver, or +#' an \code{\link{LdMatrix}}'s correlations, which are inverted directly, +#' and both drop the same weak directions. \code{svdTol} only matters on +#' the genotype route. #' @param lamb Regularization term added to the LD diagonal. Default #' \code{0.01}. -#' @param svdTol Singular-value cutoff for the pseudo-inverse. Default -#' \code{1e-12}. Note this is tighter than \code{\link{raiss}}'s own -#' \code{1e-8} default. +#' @param rcond Eigenvalue cutoff for the pseudo-inverse of the known +#' variants' LD: directions whose ridged eigenvalue is below \code{rcond} +#' times the largest are dropped. Default \code{0.01}, as +#' \code{\link{raiss}}'s own. +#' @param svdTol Relative tolerance below which singular values of the +#' standardized genotypes are treated as numerically zero, used when the LD +#' reference is a genotype panel. Default \code{1e-12}. Note this is +#' tighter than \code{\link{raiss}}'s own \code{1e-8} default. #' @param r2Threshold Imputation \eqn{R^2} below which a variant is dropped #' from the output. Default \code{0.6}. #' @param minimumLd Minimum LD score for retaining an imputed variant. @@ -2236,6 +2186,7 @@ setClass( #' @export RaissParam <- function( lamb = 0.01, + rcond = 0.01, svdTol = 1e-12, r2Threshold = 0.6, minimumLd = 5, @@ -2247,6 +2198,7 @@ RaissParam <- function( new( "RaissParam", lamb = lamb, + rcond = rcond, svdTol = svdTol, r2Threshold = r2Threshold, minimumLd = minimumLd, @@ -2258,15 +2210,15 @@ RaissParam <- function( } # The RAISS bundle as a plain list with every field present. A constructor -# result already carries all eight -- they are all formals with defaults -- +# result already carries all nine -- they are all formals with defaults -- # and the empty list that means "no options" becomes the defaults outright, # so the read sites need no per-field fallback. # @noRd -.ssqcResolveImputeArgs <- function(imputeArgs) { - if (length(imputeArgs) == 0L) { +.ssqcResolveImputeArgs <- function(raissParam) { + if (length(raissParam) == 0L) { return(as.list(RaissParam())) } - as.list(imputeArgs) + as.list(raissParam) } #' @importFrom checkmate assertNumeric @@ -2296,39 +2248,73 @@ raissModel <- function( assertNumeric(zt) assertNumeric(sigT) assertNumeric(sigIT) - if (batch) { - conditionNumber <- if (reportConditionNumber) { - rep(kappa(sigT, exact = TRUE, norm = "2"), nrow(sigIT)) - } else { - NA - } - correctInversion <- rep(checkInversion(sigT, sigTInv), nrow(sigIT)) - } else { - conditionNumber <- if (reportConditionNumber) { - kappa(sigT, exact = TRUE, norm = "2") - } else { - NA - } - correctInversion <- checkInversion(sigT, sigTInv) - } - + checks <- .raissInversionChecks( + sigT, + sigTInv, + lamb, + nOut = if (batch) nrow(sigIT) else 1L, + reportConditionNumber = reportConditionNumber + ) varRaissLdScore <- computeVar(sigIT, sigTInv, lamb, batch) - var <- varRaissLdScore$var - raissLdScore <- varRaissLdScore$raissLdScore - - mu <- computeMu(sigIT, sigTInv, zt) - varNorm <- varInBoundaries(var, lamb) + .raissResult( + varRaw = varRaissLdScore$var, + muRaw = computeMu(sigIT, sigTInv, zt), + lamb = lamb, + raissLdScore = varRaissLdScore$raissLdScore, + conditionNumber = checks$conditionNumber, + correctInversion = checks$correctInversion + ) +} - R2 <- ((1 + lamb) - varNorm) - mu <- mu / sqrt(R2) +# The inversion's diagnostics, repeated for each of the `nOut` variants a +# batch imputes: sigT's condition number when asked for (NA otherwise), and +# whether sigTInv inverts what was inverted. That is the ridged matrix +# (diagonal 1 + lamb), so it is what the inverse is checked against; against +# the raw sigT the check could only fail, off by O(lamb). The original RAiSS +# implementation checks the ridged matrix too: its fill_diagonal() writes the +# ridge into sig_t in place. +# @noRd +.raissInversionChecks <- function( + sigT, + sigTInv, + lamb, + nOut, + reportConditionNumber +) { + conditionNumber <- if (reportConditionNumber) { + rep(kappa(sigT, exact = TRUE, norm = "2"), nOut) + } else { + NA + } + sigTRidged <- `diag<-`(sigT, 1 + lamb) + list( + conditionNumber = conditionNumber, + correctInversion = rep(checkInversion(sigTRidged, sigTInv), nOut) + ) +} - return(list( +# An imputation's result from its raw variances and means, as both RAiSS +# routes (raissModel(), .raissSvdImpute()) report it: the variances bounded +# by varInBoundaries(), and each mean scaled by sqrt(R2), with R2 = (1 + lamb) +# minus that variance. +# @noRd +.raissResult <- function( + varRaw, + muRaw, + lamb, + raissLdScore, + conditionNumber, + correctInversion +) { + varNorm <- varInBoundaries(varRaw, lamb) + R2 <- (1 + lamb) - varNorm + list( var = varNorm, - mu = mu, + mu = muRaw / sqrt(R2), raissLdScore = raissLdScore, conditionNumber = conditionNumber, correctInversion = correctInversion - )) + ) } #' @param imp is the output of raissModel() @@ -2502,8 +2488,10 @@ computeVar <- function(sigIT, sigTInv, lamb, batch = TRUE) { return(list(var = var, raissLdScore = raissLdScore)) } +# TRUE when sigTInv is a pseudo-inverse of sigT (sigT sigTInv sigT == sigT), +# else FALSE -- never all.equal()'s text describing the difference. checkInversion <- function(sigT, sigTInv) { - return(all.equal(sigT, sigT %*% (sigTInv %*% sigT), tolerance = 1e-5)) + isTRUE(all.equal(sigT, sigT %*% (sigTInv %*% sigT), tolerance = 1e-5)) } varInBoundaries <- function(var, lamb) { @@ -2546,31 +2534,6 @@ invertMatRecursive <- function(mat, lamb, rcond) { ) } -invertMatEigen <- function(mat, tol = 1e-3) { - eigenMat <- eigen(mat) - L <- which(cumsum(eigenMat$values) / sum(eigenMat$values) > 1 - tol)[1] - if (is.na(L)) { - # all eigen values are extremely small - msg <- glue( - "Cannot invert the input matrix because all its eigen ", - "values are negative or close to zero" - ) - abort(msg) - } - # Both guards matter when L == 1: the subscript would drop to a vector, - # and diag() of a length-one value returns an identity matrix of THAT - # ORDER -- diag(0.1) is 0x0 -- not a 1x1 matrix holding the value, so - # the product failed with "non-conformable arguments". - kept <- seq_len(L) - vectors <- eigenMat$vectors[, kept, drop = FALSE] - matInv <- vectors %*% - diag(1 / eigenMat$values[kept], nrow = L) %*% - t(vectors) - - return(matInv) -} - - # ============================================================================= # Top-level summaryStatsQc() pipeline + helpers # ============================================================================= @@ -2729,8 +2692,10 @@ DentistParam <- function( #' #' @param zScore Numeric vector of z-scores. #' @param R Square LD correlation matrix. Provide either \code{R} or \code{X}. -#' @param X Genotype matrix (samples x SNPs). If provided, LD is computed via -#' \code{computeLd} and \code{nSample} defaults to \code{nrow(X)}. +#' @param X Genotype matrix (samples x SNPs). With \code{ldMethod = "sample"} +#' both methods work on the genotypes without forming the LD matrix; any +#' other \code{ldMethod} computes LD via \code{computeLd}. \code{nSample} +#' defaults to \code{nrow(X)}. #' @param nSample Number of samples in the LD reference panel. Required when #' \code{R} is provided and \code{method = "dentist"}; inferred from \code{X} #' when \code{X} is provided. @@ -2771,7 +2736,7 @@ ldMismatchQc <- function( names(.ldMismatchCtors()), "method" ) - methodArgs <- chosen$args + engineParam <- chosen$args if (chosen$engine == "dentist") { callArgs <- list_modify( list( @@ -2781,13 +2746,13 @@ ldMismatchQc <- function( nSample = nSample, ldMethod = ldMethod ), - !!!methodArgs + !!!engineParam ) return(exec(dentistSingleWindow, !!!callArgs)) } else { callArgs <- list_modify( list(zScore, R = R, X = X, ldMethod = ldMethod), - !!!methodArgs + !!!engineParam ) qcResults <- exec(slalom, !!!callArgs) # Standardize output: slalom uses "outliers", rename to "outlier" for @@ -2838,7 +2803,7 @@ effectiveN <- function(nCase, nControl) { # ============================================================================= # summaryStatsQc -- SumStats-input QC pipeline (replaces the previous -# data.frame/LdData/QcResult-based summaryStatsQc and rssBasicQc). +# data.frame- and QcResult-based summaryStatsQc and rssBasicQc). # ============================================================================= # Convert one entry's GRanges into a flat tibble with the column shape @@ -2857,18 +2822,18 @@ effectiveN <- function(nCase, nControl) { # Build a refVariants data.frame (chrom, pos, A1, A2, variant_id) from the # panel's own variant ranges so harmonizeAlleles can join by (chrom, pos). -# The id comes from `.ldSketchMatchIds()`, not the raw SNP label: a panel entry +# The id comes from `.ldRefMatchIds()`, not the raw SNP label: a panel entry # that spells a tag where an allele belongs still harmonizes off its A1/A2 # columns, and the repaired id is what the LD lookups downstream can find. -.refVariantsFromSketch <- function(ldSketch) { - gr <- .ldSketchRanges(ldSketch) +.refVariantsFromLdRef <- function(ldReference) { + gr <- .ldRefRanges(ldReference) mc <- S4Vectors::mcols(gr) data.frame( - chrom = .ldSketchChrom(ldSketch), + chrom = .ldRefChrom(ldReference), pos = as.integer(GenomicRanges::start(gr)), A1 = as.character(mc$A1), A2 = as.character(mc$A2), - variant_id = .ldSketchMatchIds(ldSketch), + variant_id = .ldRefMatchIds(ldReference), stringsAsFactors = FALSE ) } @@ -2930,46 +2895,38 @@ effectiveN <- function(nCase, nControl) { # Shared entry-to-sumstat data.frame converter # ----------------------------------------------------------------------------- -# Internal: convert one sumstat-entry GRanges into a flat data.frame with -# (variant_id, chrom, pos, A1, A2) base columns plus a configurable set -# of stats columns (z, beta, se, N, maf). Shared by the four pipelines -# that walk sumstats GRanges (fineMappingPipeline, twasWeights, -# ctwasPipeline, colocboostPipeline). -# -# `require` character vector of mcol names that MUST be present; errors -# when any is missing. Use this for the strict callers -# (e.g. `.fmExtractZn` needs SNP + Z + N to proceed). -# `derive` when "zFromBetaSe" and `z` is absent but BETA + SE are -# present, set z := BETA/SE. Default "none". -# `label` error-message prefix for missing-`require` errors. -# `keepChrPrefix` when TRUE keep the seqname as-is ("chr1"); when FALSE, -# strip any leading "chr" so callers that expect numeric -# chrom (ctwas, colocboost) see "1". # Base (variant_id/chrom/pos/A1/A2) frame for one sumstat-entry GRanges. +# @noRd .entryDfBase <- function(gr, mc, chr) { - colOr <- function(name) { - if (is_in(name, colnames(mc))) { - as.character(mc[[name]]) - } else { - rep(NA_character_, length(gr)) - } - } + n <- length(gr) tibble( - variant_id = colOr("SNP"), + variant_id = .entryDfCharColumn("SNP", mc, n), chrom = chr, pos = unname(as.integer(GenomicRanges::start(gr))), - A1 = colOr("A1"), - A2 = colOr("A2") + A1 = .entryDfCharColumn("A1", mc, n), + A2 = .entryDfCharColumn("A2", mc, n) ) } -# Append the optional numeric stat columns present on the entry's mcols. +# One mcols column as character, or NA for each of the `n` variants when the +# entry does not carry it. +# @noRd +.entryDfCharColumn <- function(name, mc, n) { + if (is_in(name, colnames(mc))) { + as.character(mc[[name]]) + } else { + rep(NA_character_, n) + } +} + # One mcols column as numeric. # @noRd .entryStatColumn <- function(src, mc) { as.numeric(mc[[src]]) } +# Append the optional numeric stat columns present on the entry's mcols. +# @noRd .entryDfAddStats <- function(df, mc) { statMap <- c( z = "Z", @@ -3009,6 +2966,22 @@ effectiveN <- function(nCase, nControl) { mutate(df, maf = pmin(.data$af, 1 - .data$af)) } +# Convert one sumstat-entry GRanges into a flat data.frame with +# (variant_id, chrom, pos, A1, A2) base columns plus a configurable set +# of stats columns (z, beta, se, N, maf). Shared by the four pipelines +# that walk sumstats GRanges (fineMappingPipeline, twasWeights, +# ctwasPipeline, colocboostPipeline). +# +# `require` character vector of mcol names that MUST be present; errors +# when any is missing. Use this for the strict callers +# (e.g. `.fmExtractZn` needs SNP + Z + N to proceed). +# `derive` when "zFromBetaSe" and `z` is absent but BETA + SE are +# present, set z := BETA/SE. Default "none". +# `label` error-message prefix for missing-`require` errors. +# `keepChrPrefix` when TRUE keep the seqname as-is ("chr1"); when FALSE, +# strip any leading "chr" so callers that expect numeric +# chrom (ctwas, colocboost) see "1". +# @noRd .entryToSumstatDf <- function( gr, require = character(0), @@ -3085,33 +3058,70 @@ effectiveN <- function(nCase, nControl) { # bookkeeping that DENTIST's addDupsBackDentist uses to splice the # dropped variants back into the output. .findDuplicateVariants <- function(z, ld, rThreshold) { + walk <- .dupWalk(z, rThreshold, list(R = ld)) + kept <- walk$dupBearer == -1 + c( + list( + filteredZ = z[kept], + filteredLD = ld[kept, kept, drop = FALSE] + ), + walk + ) +} + +# .findDuplicateVariants() from a factor of the LD: the same walk, its LD rows +# computed a stripe at a time from the factor, so the p x p matrix is never +# formed; the duplicates are dropped from the factor's columns. +# @noRd +.findDuplicateVariantsFactor <- function(z, factor, rThreshold) { + walk <- .dupWalk(z, rThreshold, list(F = factor)) + kept <- walk$dupBearer == -1 + c( + list( + filteredZ = z[kept], + filteredFactor = factor[, kept, drop = FALSE] + ), + walk + ) +} + +# The duplicate walk: left to right, each variant not yet marked a duplicate +# anchors every later unmarked variant whose |r| with it exceeds rThreshold. +# Its LD rows are read from the LD source `ld` (.ldSourceRows()) a stripe of +# anchors at a time, so a factor never has to supply more than a stripe. +# @noRd +.dupWalk <- function(z, rThreshold, ld) { p <- length(z) dupBearer <- rep(-1, p) corABS <- rep(0, p) sign <- rep(1, p) count <- 1L minValue <- 1 + blockSize <- .ldStripeSize() + block <- NULL + blockStart <- 0L for (i in seq_len(p - 1L)) { if (dupBearer[i] != -1) { next } + if (is.null(block) || i >= blockStart + nrow(block)) { + blockStart <- i + block <- .ldSourceRows(ld, i:min(i + blockSize - 1L, p - 1L)) + } + row <- block[i - blockStart + 1L, ] idx <- (i + 1L):p - corVec <- abs(ld[i, idx]) + corVec <- abs(row[idx]) dupIdx <- which(dupBearer[idx] == -1 & corVec > rThreshold) if (length(dupIdx) > 0) { j <- idx[dupIdx] - sign[j] <- if_else(ld[i, j] < 0, -1, sign[j]) + sign[j] <- if_else(row[j] < 0, -1, sign[j]) corABS[j] <- corVec[dupIdx] dupBearer[j] <- count } minValue <- min(minValue, min(corVec)) count <- count + 1L } - filteredZ <- z[dupBearer == -1] - filteredLD <- ld[dupBearer == -1, dupBearer == -1, drop = FALSE] list( - filteredZ = filteredZ, - filteredLD = filteredLD, dupBearer = dupBearer, corABS = corABS, sign = sign, @@ -3215,18 +3225,18 @@ effectiveN <- function(nCase, nControl) { } # Apply the panel-vs-sumstats allele harmonization using the slim -# harmonizeAlleles against the ldSketch's variant info. Threads the +# harmonizeAlleles against the ldReference's variant info. Threads the # variant-level filters (indels, strand-ambiguous, duplicates) through # so the LD-panel-anchored pass handles them in a single sweep. -.matchAgainstSketch <- function( +.matchAgainstLdRef <- function( df, - ldSketch, + ldReference, matchMinProp, removeIndels = FALSE, removeStrandAmbiguous = TRUE, removeDups = TRUE ) { - refVariants <- .refVariantsFromSketch(ldSketch) + refVariants <- .refVariantsFromLdRef(ldReference) flipCandidates <- c("Z", "BETA") colToFlip <- intersect(flipCandidates, colnames(df)) if (length(colToFlip) == 0L) { @@ -3634,38 +3644,64 @@ effectiveN <- function(nCase, nControl) { # leaves the drop to onMissing here, so they are dropped here (keeping df # aligned with the returned LD) rather than aborting the run. # -# Returns list(R, df, dropped). `R` is NULL when no variant is panel-supported, -# and `df` is empty then -- each caller shapes its own empty result. +# Returns list(R, X, df, dropped): a genotype reference gives X, the factor of +# its LD (.ldFactorFromRef()), which the mismatch QC reads directly; an +# LdMatrix gives the matrix R. Both are NULL when no variant is +# panel-supported, and `df` is empty then -- each caller shapes its own empty +# result. .qcPanelLdMatrix() turns either into the matrix for a step that +# needs one. # @noRd -.qcPanelSupportedLd <- function(df, ldSketch, label) { +.qcPanelSupportedLd <- function(df, ldReference, label) { nIn <- nrow(df) - raw <- .ldFromSketch(ldSketch, df$SNP, label = label, onMissing = "drop") + isFactor <- .ldIsGenotypeRef(ldReference) + ldFrom <- if (isFactor) .ldFactorFromRef else .ldFromRef + raw <- ldFrom(ldReference, df$SNP, label = label, onMissing = "drop") if (is.null(raw)) { - return(list(R = NULL, df = df[0L, , drop = FALSE], dropped = nIn)) + return(list(df = df[0L, , drop = FALSE], dropped = nIn)) } keptIds <- attr(raw, "keptVariantIds") - R <- `attr<-`(raw, "keptVariantIds", NULL) - if (is.null(keptIds) || length(keptIds) >= nIn) { - return(list(R = R, df = df, dropped = 0L)) + ld <- `attr<-`(raw, "keptVariantIds", NULL) + supported <- if (is.null(keptIds) || length(keptIds) >= nIn) { + list(df = df, dropped = 0L) + } else { + list( + df = filter(df, is_in(.data$SNP, keptIds)), + dropped = nIn - length(keptIds) + ) } - list( - R = R, - df = filter(df, is_in(.data$SNP, keptIds)), - dropped = nIn - length(keptIds) - ) + c(if (isFactor) list(X = ld) else list(R = ld), supported) } +# The LD matrix of a .qcPanelSupportedLd() result, formed from its factor +# when that is what the reference gave. # @noRd -.applyLdMismatchQcToEntry <- function(df, ldSketch, method) { +.qcPanelLdMatrix <- function(panel) { + panel$R %||% (crossprod(panel$X) / (nrow(panel$X) - 1)) +} + +# DENTIST truncates its SVD at a rank bounded by the panel's real size, so it +# needs that size; SLALOM does not, so a reference that cannot say (an +# LdMatrix built without `nSamples`) passes NULL there. +# @noRd +.qcMismatchNSample <- function(ldReference, method) { + if (identical(method, "dentist")) { + return(.ldRefRequireNSamples(ldReference, "DENTIST")) + } + n <- .ldRefRealNSamples(ldReference) + if (is.na(n)) NULL else n +} + +.applyLdMismatchQcToEntry <- function(df, ldReference, method, panel = NULL) { if (is.null(df$SNP) || any(is.na(df$SNP))) { abort("summaryStatsQc: ldMismatchQc requires SNP column on the entry.") } - panel <- .qcPanelSupportedLd( - df, - ldSketch, - "summaryStatsQc: ldMismatchQcMethod" - ) - if (is.null(panel$R)) { + panel <- panel %||% + .qcPanelSupportedLd( + df, + ldReference, + "summaryStatsQc: ldMismatchQcMethod" + ) + if (is.null(panel$R) && is.null(panel$X)) { return(list( df = panel$df, outliers = 0L, @@ -3673,13 +3709,15 @@ effectiveN <- function(nCase, nControl) { panelUnsupportedDropped = panel$dropped )) } - R <- panel$R df <- panel$df variantIds <- df$SNP + # A genotype reference's factor goes in as X: SLALOM reads only the lead + # column of it. qc <- ldMismatchQc( zScore = df$Z, - R = R, - nSample = .ldSketchNSamples(ldSketch), + R = panel$R, + X = panel$X, + nSample = .qcMismatchNSample(ldReference, method), method = method ) # slalom / dentist can leave NA in the outlier column when their @@ -3688,25 +3726,29 @@ effectiveN <- function(nCase, nControl) { # "no evidence of being an outlier" (conservative: keep the variant) # so the downstream df / sum() / IRanges construction stay finite. outlierFlags <- replace(qc$outlier, is.na(qc$outlier), FALSE) - # Attach the variant_id column so the diagnostics data.frame stays - # self-describing once it's separated from the input df. - diagnostics <- if (is.data.frame(qc)) { - cbind( - variant_id = as.character(variantIds), - qc, - stringsAsFactors = FALSE - ) - } else { - NULL - } list( df = filter(df, !outlierFlags), outliers = sum(outlierFlags), - diagnostics = diagnostics, + diagnostics = .ldMismatchDiagnostics(qc, variantIds), panelUnsupportedDropped = panel$dropped ) } +# The QC's per-variant statistics with each variant's id attached, so the +# table stays self-describing once it is separated from the entry; NULL when +# the method returned no table. +# @noRd +.ldMismatchDiagnostics <- function(qc, variantIds) { + if (!is.data.frame(qc)) { + return(NULL) + } + cbind( + variant_id = as.character(variantIds), + qc, + stringsAsFactors = FALSE + ) +} + # ----------------------------------------------------------------------------- # Signal screen: skip an entry/block with no strong signal by a chosen metric. # ----------------------------------------------------------------------------- @@ -3897,7 +3939,7 @@ effectiveN <- function(nCase, nControl) { # --- .runEntrySummaryStatsQc: RAISS imputation step helpers ---------------- # Panel/dosage window indices for the entry, scoped per chromosome. -.qcRaissWindowIdx <- function(df, ldSketch, flank) { +.qcRaissWindowIdx <- function(df, ldReference, flank) { # canonChrom on BOTH sides: the panel answers in its own seqnames # convention, so the two are only comparable once canonicalized. bounds <- tibble( @@ -3913,9 +3955,9 @@ effectiveN <- function(nCase, nControl) { # inner_join keeps only sketch SNPs whose chromosome appears in df (the # old is_in(skChrom, names(loByChr)) guard); filter keeps those inside the # [lo, hi] window. idx carries the original sketch row positions. - gr <- .ldSketchRanges(ldSketch) + gr <- .ldRefRanges(ldReference) tibble( - chrom = .ldSketchChrom(ldSketch), + chrom = .ldRefChrom(ldReference), bp = as.integer(GenomicRanges::start(gr)), idx = seq_along(gr) ) |> @@ -3960,37 +4002,81 @@ effectiveN <- function(nCase, nControl) { knownZ |> mutate(!!!extras) |> arrange(.data$pos) } -.qcRaissBuildInputs <- function(df, ldSketch, windowIdx, opts) { - windowPanel <- .refVariantsFromSketch(ldSketch)[ +.qcRaissBuildInputs <- function(df, ldReference, windowIdx, opts) { + # `refIdx` keeps each window variant's position in the reference through + # the sort, so dosage, frequencies and LD are all read in panel order. + windowPanel <- .refVariantsFromLdRef(ldReference)[ windowIdx, , drop = FALSE ] |> - mutate(variant_id = normalizeVariantId(.data$variant_id)) |> + mutate( + variant_id = normalizeVariantId(.data$variant_id), + refIdx = windowIdx + ) |> arrange(.data$pos) knownZ <- .qcRaissKnownZ(df) - # meanImpute = FALSE so per-variant missingness is still visible; the - # surviving columns are mean-imputed below, which is what meanImpute = - # TRUE did. - windowDosage <- `colnames<-`( - .ldSketchDosage(ldSketch, windowIdx, meanImpute = FALSE), - normalizeVariantId(.ldSketchMatchIds(ldSketch)[windowIdx]) - ) - windowed <- windowDosage[, windowPanel$variant_id, drop = FALSE] - keep <- .qcRaissTargetMask(windowPanel, knownZ, windowed, opts) - refPanel <- windowPanel[keep, , drop = FALSE] + rp <- opts$raissParam + windowed <- if (.ldIsPanel(ldReference)) { + # meanImpute = FALSE so per-variant missingness is still visible; the + # surviving columns are mean-imputed below. + .ldRefDosage(ldReference, windowPanel$refIdx, meanImpute = FALSE) + } + keep <- .qcRaissTargetMask( + windowPanel, + knownZ, + .qcRaissTargetStats(ldReference, windowPanel$refIdx, windowed, rp), + opts, + nSamples = .ldRefMacSamples(ldReference, rp$macCutoff) + ) + c( + list( + refPanel = select(windowPanel[keep, , drop = FALSE], -"refIdx"), + knownZ = knownZ, + nDroppedTargets = sum(!keep) + ), + .qcRaissLdInput(ldReference, windowPanel$refIdx[keep], windowed, keep) + ) +} + +# What RAISS imputes from: a panel's standardized dosages or a mixture's +# stacked factor, for its singular-value route, or an LdMatrix's block over +# the kept variants. +# @noRd +.qcRaissLdInput <- function(ldReference, refIdx, windowed, keep) { + if (.ldIsMatrixRef(ldReference)) { + return(list(ldMatrix = .ldRefLdAt(ldReference, refIdx))) + } + if (.ldIsMixtureRef(ldReference)) { + return(list(genotypeMatrix = .ldRefFactor(ldReference, refIdx))) + } scaled <- scale(.qtlMeanImpute(windowed[, keep, drop = FALSE])) - scaledDosage <- replace(scaled, is.na(scaled), 0) - list( - refPanel = refPanel, - knownZ = knownZ, - scaledDosage = scaledDosage, - nDroppedTargets = sum(!keep) + list(genotypeMatrix = replace(scaled, is.na(scaled), 0)) +} + +# The per-variant statistics the target cutoffs are judged on, or NULL when +# no cutoff is set. A panel of real genotypes measures them on the window's +# dosages, already in hand; a sketch or an LdMatrix answers from what it +# records (see .ldRefVariantStats()). +# @noRd +.qcRaissTargetStats <- function(ldReference, refIdx, windowed, rp) { + if (rp$mafCutoff <= 0 && rp$macCutoff <= 0 && rp$imissCutoff >= 1) { + return(NULL) + } + if (!is.null(windowed) && !.ldRefIsProjection(ldReference)) { + return(.qcRaissVariantStats(windowed)) + } + .ldRefVariantStats( + ldReference, + refIdx, + needMissing = rp$imissCutoff < 1, + step = "RAISS target filtering" ) } # Which reference-panel variants to keep, given the MAF / MAC / missingness -# cutoffs in `imputeArgs`. +# cutoffs in `raissParam` and the per-variant `stats` they are judged on +# (NULL when no cutoff is set). # # The cutoffs govern what RAISS is willing to IMPUTE, not what it is willing to # keep, so an observed variant survives whatever its frequency in the LD panel. @@ -4003,14 +4089,12 @@ effectiveN <- function(nCase, nControl) { # an imputation target, which is both slow and statistically pointless when the # study is much smaller than the panel. # @noRd -.qcRaissTargetMask <- function(refPanel, knownZ, dosage, opts) { - mafCutoff <- opts$imputeArgs$mafCutoff - macCutoff <- opts$imputeArgs$macCutoff - imissCutoff <- opts$imputeArgs$imissCutoff +.qcRaissTargetMask <- function(refPanel, knownZ, stats, opts, nSamples) { keep <- rep(TRUE, nrow(refPanel)) - if (mafCutoff <= 0 && macCutoff <= 0 && imissCutoff >= 1) { + if (is.null(stats)) { return(keep) } + rp <- opts$raissParam # Identified exactly as raissSingleMatrixFromX() does, so this mask cannot # disagree with the knowns/unknowns split it derives moments later. knownIds <- intersect(knownZ$variant_id, refPanel$variant_id) @@ -4020,11 +4104,11 @@ effectiveN <- function(nCase, nControl) { unsafe <- isTarget & (.raissUnsafeToImpute(refPanel$variant_id, knownZ$variant_id) | .raissObservedPosition(refPanel, knownZ)) - stats <- .qcRaissVariantStats(dosage) - effectiveMaf <- .panelEffectiveMaf(mafCutoff, macCutoff, nrow(dosage)) - fails <- (!is.na(stats$maf) & stats$maf < effectiveMaf) | - stats$missRate > imissCutoff | - is.na(stats$maf) + effectiveMaf <- .panelEffectiveMaf(rp$mafCutoff, rp$macCutoff, nSamples) + fails <- (!is.na(stats$maf) & stats$maf < effectiveMaf) | is.na(stats$maf) + if (!is.null(stats$missRate)) { + fails <- fails | stats$missRate > rp$imissCutoff + } keep & !(isTarget & fails) & !unsafe } @@ -4038,30 +4122,35 @@ effectiveN <- function(nCase, nControl) { } -# RaissParam() covers two audiences: four fields are raiss()'s own formals and +# RaissParam() covers two audiences: five fields are raiss()'s own formals and # four bound what RAISS is asked to impute. Splitting the bundle here lets the # call site splice rather than name each field, and keeps the two groups from # being confused for one another. # @noRd .raissForwardedNames <- function() { - c("lamb", "svdTol", "r2Threshold", "minimumLd") + c("lamb", "rcond", "svdTol", "r2Threshold", "minimumLd") } # @noRd -.raissForwardedArgs <- function(imputeArgs) { - as.list(imputeArgs)[.raissForwardedNames()] +.raissForwardedArgs <- function(raissParam) { + as.list(raissParam)[.raissForwardedNames()] } -# Run RAISS with per-call option defaults. +# Run RAISS on the inputs .qcRaissBuildInputs() assembled: the window's +# standardized dosages on the genotype route, or its LD block on the matrix +# route. These were built here from the collection's own LD reference, so +# they go straight to the route rather than back through raiss()'s checks. .qcRaissRun <- function(inp, opts) { - exec( - raiss, - refPanel = inp$refPanel, - knownZscores = inp$knownZ, - genotypeMatrix = inp$scaledDosage, - verbose = FALSE, - !!!.raissForwardedArgs(opts$imputeArgs) - ) + p <- c(.raissForwardedArgs(opts$raissParam), list(verbose = FALSE)) + if (!is.null(inp$genotypeMatrix)) { + return(.raissGenotypePath( + inp$refPanel, + inp$knownZ, + inp$genotypeMatrix, + p + )) + } + .raissLdPath(inp$refPanel, inp$knownZ, inp$ldMatrix, p) } # Convert the imputer output back into a QC tibble. @@ -4150,12 +4239,12 @@ effectiveN <- function(nCase, nControl) { ) } -# Optional RAISS imputation against the ldSketch. Returns updated df + audit +# Optional RAISS imputation against the ldReference. Returns updated df + audit # fields + before/after counts (imputation adds variants, so not monotonic). -.qcRaissImpute <- function(df, ldSketch, opts, lbl) { +.qcRaissImpute <- function(df, ldReference, opts, lbl) { imputeBefore <- nrow(df) - flank <- as.integer(opts$imputeArgs$flank) - windowIdx <- .qcRaissWindowIdx(df, ldSketch, flank) + flank <- as.integer(opts$raissParam$flank) + windowIdx <- .qcRaissWindowIdx(df, ldReference, flank) if (length(windowIdx) == 0L) { .qcEmit( lbl, @@ -4170,7 +4259,7 @@ effectiveN <- function(nCase, nControl) { imputeAfter = nrow(df) )) } - inp <- .qcRaissBuildInputs(df, ldSketch, windowIdx, opts) + inp <- .qcRaissBuildInputs(df, ldReference, windowIdx, opts) if (inp$nDroppedTargets > 0L) { .qcEmit( lbl, @@ -4268,18 +4357,18 @@ effectiveN <- function(nCase, nControl) { # --- .runEntrySummaryStatsQc: harmonization / kriging / mismatch steps ------ # Panel-vs-sumstats allele harmonization + counter bookkeeping. -.qcHarmonizeEntry <- function(df, ldSketch, opts, lbl) { +.qcHarmonizeEntry <- function(df, ldReference, opts, lbl) { nHarmIn <- nrow(df) - matched <- .matchAgainstSketch( + matched <- .matchAgainstLdRef( df, - ldSketch, + ldReference, matchMinProp = opts$matchMinProp, - removeIndels = opts$sumstatsFilterArgs$removeIndels, - removeStrandAmbiguous = opts$sumstatsFilterArgs$removeStrandAmbiguous, + removeIndels = opts$sumstatsFilterParam$removeIndels, + removeStrandAmbiguous = opts$sumstatsFilterParam$removeStrandAmbiguous, removeDups = TRUE ) harmCounts <- attr(matched, "qcCounts") - # Re-key SNP to the harmonized id: .matchAgainstSketch rewrites variant_id + # Re-key SNP to the harmonized id: .matchAgainstLdRef rewrites variant_id # to the panel orientation + sign-flips swapped variants but leaves SNP; a # stale SNP makes flipped variants miss the panel in later lookups. reKeyed <- mutate( @@ -4306,7 +4395,7 @@ effectiveN <- function(nCase, nControl) { ) list( df = reKeyed, - audit = list(matchedAgainstSketch = nrow(reKeyed)), + audit = list(matchedAgainstLdReference = nrow(reKeyed)), counts = counts ) } @@ -4359,17 +4448,18 @@ effectiveN <- function(nCase, nControl) { } # @noRd -.qcKrigingFlip <- function(df, ldSketch, opts, lbl) { - if (!isTRUE(opts$alleleFlipKriging) || nrow(df) < 2L) { +.qcKrigingFlip <- function(df, ldReference, opts, lbl, panel = NULL) { + if (!.qcKrigingRuns(df, opts)) { return(list(df = df, audit = list(), count = 0L)) } nKrIn <- nrow(df) - panel <- .qcPanelSupportedLd( - df, - ldSketch, - "summaryStatsQc: kriging prefilter" - ) - if (is.null(panel$R)) { + panel <- panel %||% + .qcPanelSupportedLd( + df, + ldReference, + "summaryStatsQc: kriging prefilter" + ) + if (is.null(panel$R) && is.null(panel$X)) { return(list( df = panel$df, count = 0L, @@ -4379,9 +4469,10 @@ effectiveN <- function(nCase, nControl) { supported <- panel$df nPanelDrop <- panel$dropped .qcEmitPanelDrop(lbl, nPanelDrop, nKrIn) + # kriging_rss takes nothing but the matrix (dev/ld-factor-audit.md). kr <- krigingOutlierQc( supported$Z, - panel$R, + .qcPanelLdMatrix(panel), n = .qcKrigingN(supported, opts), variantIds = supported$SNP ) @@ -4406,16 +4497,32 @@ effectiveN <- function(nCase, nControl) { ) } +# TRUE when the kriging allele-flip check runs on this entry. +# @noRd +.qcKrigingRuns <- function(df, opts) { + isTRUE(opts$alleleFlipKriging) && nrow(df) >= 2L +} + +# TRUE when an LD-mismatch check runs on this entry. +# @noRd +.qcMismatchRuns <- function(df, opts) { + !identical(.engineOf(opts$ldMismatchQcMethod), "none") && nrow(df) >= 2L +} + # LD-mismatch QC (SLALOM / DENTIST). Retains full per-variant diagnostics. -.qcMismatchQc <- function(df, ldSketch, opts, lbl) { - if ( - identical(.engineOf(opts$ldMismatchQcMethod), "none") || - nrow(df) < 2L - ) { +# `panel` is the entry's panel-supported LD when the caller has already read +# it (see .qcPhaseLdChecks()). +.qcMismatchQc <- function(df, ldReference, opts, lbl, panel = NULL) { + if (!.qcMismatchRuns(df, opts)) { return(list(df = df, audit = list(), count = 0L)) } nMmIn <- nrow(df) - ldQc <- .applyLdMismatchQcToEntry(df, ldSketch, opts$ldMismatchQcMethod) + ldQc <- .applyLdMismatchQcToEntry( + df, + ldReference, + opts$ldMismatchQcMethod, + panel = panel + ) df <- ldQc$df baseAudit <- list( ldMismatchOutliersDropped = ldQc$outliers, @@ -4485,7 +4592,7 @@ effectiveN <- function(nCase, nControl) { nSanIn <- nrow(df) # The boundary: the bundle travels this far, and .applySanityChecks and # the per-check helpers below it keep plain scalars. - cleaning <- opts$sumstatsCleaningArgs + cleaning <- opts$sumstatsCleaningParam sanity <- exec(.applySanityChecks, df, !!!cleaning) df <- sanity$df audit <- .qcAudit( @@ -4535,8 +4642,8 @@ effectiveN <- function(nCase, nControl) { cf <- .applyContentFilters( df, mafCutoff = opts$panelFilterParam$mafCutoff, - infoCutoff = opts$sumstatsFilterArgs$infoCutoff, - nCutoff = opts$sumstatsFilterArgs$nCutoff + infoCutoff = opts$sumstatsFilterParam$infoCutoff, + nCutoff = opts$sumstatsFilterParam$nCutoff ) df <- cf$df audit <- .qcAudit( @@ -4585,7 +4692,7 @@ effectiveN <- function(nCase, nControl) { # Re-clamp the P values just derived from Z, and report how many moved. # @noRd .qcClampDerivedP <- function(df, opts) { - cleaning <- opts$sumstatsCleaningArgs + cleaning <- opts$sumstatsCleaningParam if (!isTRUE(cleaning$clampSmallP) || nrow(df) == 0L) { return(list(df = df, nClamped = 0L)) } @@ -4659,11 +4766,11 @@ effectiveN <- function(nCase, nControl) { } # Optional RAISS imputation step wrapper (guarded; threads impute counters). -.qcRaissImputeStep <- function(df, ldSketch, opts, lbl, qcCount) { +.qcRaissImputeStep <- function(df, ldReference, opts, lbl, qcCount) { if (!isTRUE(opts$impute) || nrow(df) < 1L) { return(list(df = df, audit = list(), qcCount = qcCount)) } - imp <- .qcRaissImpute(df, ldSketch, opts, lbl) + imp <- .qcRaissImpute(df, ldReference, opts, lbl) list( df = imp$df, audit = imp$audit, @@ -4690,7 +4797,7 @@ effectiveN <- function(nCase, nControl) { # Each QC phase below is (state) -> state, so the sequence reads as a pipeline # rather than a run of reassignments. `state` carries df + entryAudit + opts + -# qcCount + lbl (+ ldSketch for the panel-aware phases); a phase touches only +# qcCount + lbl (+ ldReference for the panel-aware phases); a phase touches only # the parts it owns and passes the rest through. # Per-row sanity checks. @@ -4751,7 +4858,7 @@ effectiveN <- function(nCase, nControl) { .qcPhaseHarmonize <- function(state) { harm <- .qcHarmonizeEntry( state$df, - state$ldSketch, + state$ldReference, state$opts, state$lbl ) @@ -4778,8 +4885,32 @@ effectiveN <- function(nCase, nControl) { # reads the kriging-corrected frame and the two counts are reported together. # @noRd .qcPhaseLdChecks <- function(state) { - kr <- .qcKrigingFlip(state$df, state$ldSketch, state$opts, state$lbl) - mm <- .qcMismatchQc(kr$df, state$ldSketch, state$opts, state$lbl) + # Both checks read the same panel-supported variants -- kriging only flips + # signs -- so when both run the reference is read once, for the two. + shared <- if ( + .qcKrigingRuns(state$df, state$opts) && + .qcMismatchRuns(state$df, state$opts) + ) { + .qcPanelSupportedLd(state$df, state$ldReference, "summaryStatsQc") + } + kr <- .qcKrigingFlip( + state$df, + state$ldReference, + state$opts, + state$lbl, + panel = shared + ) + mm <- .qcMismatchQc( + kr$df, + state$ldReference, + state$opts, + state$lbl, + # Kriging has already recorded the panel's drops; its output carries + # only supported variants. + panel = if (!is.null(shared)) { + list_assign(shared, df = kr$df, dropped = 0L) + } + ) list_assign( state, df = mm$df, @@ -4800,7 +4931,7 @@ effectiveN <- function(nCase, nControl) { .qcPhaseImpute <- function(state) { imp <- .qcRaissImputeStep( state$df, - state$ldSketch, + state$ldReference, state$opts, state$lbl, state$qcCount @@ -4840,7 +4971,7 @@ effectiveN <- function(nCase, nControl) { .runEntrySummaryStatsQc <- function( gr, - ldSketch, + ldReference, opts, entryLabel = NULL ) { @@ -4861,7 +4992,7 @@ effectiveN <- function(nCase, nControl) { qcCount = pre$qcCount, opts = pre$opts, lbl = pre$lbl, - ldSketch = ldSketch + ldReference = ldReference ) |> .qcPhaseHarmonize() |> .qcPhaseScreen() |> @@ -4881,6 +5012,12 @@ effectiveN <- function(nCase, nControl) { ) } +# Number of ranges an entry contributes, NULL-safe. +# @noRd +.entryRangeCount <- function(gr) { + if (is.null(gr)) 0L else length(gr) +} + # Shrink an LD-sketch GenotypeHandle to the panel variants inside the summary # statistics' per-chromosome position span. `entries` is a list/SimpleList of # per-study (or per-tuple) GRanges. A genome-wide sketch otherwise carries a @@ -4889,14 +5026,8 @@ effectiveN <- function(nCase, nControl) { # rest is dropped at load time. NULL-safe; a no-op when the span already covers # the panel. See [[.subsetGenotypeHandle]] for why this is read-safe. # @noRd -# Number of ranges an entry contributes, NULL-safe. -# @noRd -.entryRangeCount <- function(gr) { - if (is.null(gr)) 0L else length(gr) -} - -.subsetSketchToRange <- function(ldSketch, entries) { - if (is.null(ldSketch)) { +.subsetLdRefToRange <- function(ldReference, entries) { + if (is.null(ldReference)) { return(NULL) } chromAll <- unname(list_c(map(entries, .entryChrom))) @@ -4907,18 +5038,18 @@ effectiveN <- function(nCase, nControl) { if (length(pos) == 0L) { # No span to keep: a zero-variant object references no LD, so the # retained panel is empty rather than the full genome-wide sketch. - return(.emptySketch(ldSketch)) + return(.emptyLdRef(ldReference)) } bounds <- tibble(chrom = chrom, pos = pos) |> group_by(chrom) |> summarise(lo = min(pos), hi = max(pos), .groups = "drop") - gr <- .ldSketchRanges(ldSketch) + gr <- .ldRefRanges(ldReference) # left_join keeps every sketch SNP; one on a chromosome absent from the # entries gets lo/hi = NA -> inWindow FALSE (the old is_in guard). The # explicit is.na() guards force FALSE (never NA) for an absent chrom or an # NA bp, replacing the base keep[is.na(keep)] <- FALSE. keep <- tibble( - chrom = .ldSketchChrom(ldSketch), + chrom = .ldRefChrom(ldReference), bp = as.integer(GenomicRanges::start(gr)) ) |> left_join(bounds, by = "chrom") |> @@ -4929,7 +5060,7 @@ effectiveN <- function(nCase, nControl) { .data$bp <= .data$hi ) |> pull("inWindow") - .ldSketchSubset(ldSketch, keep) + .ldRefSubset(ldReference, keep) } # Shrink an LD-sketch GenotypeHandle to EXACTLY the variants present across the @@ -4937,8 +5068,8 @@ effectiveN <- function(nCase, nControl) { # matched by canonical variant id. Applied at the end of summaryStatsQc so the # retained sketch mirrors the object's final variant set. NULL-safe. # @noRd -.subsetSketchToIds <- function(ldSketch, entries) { - if (is.null(ldSketch)) { +.subsetLdRefToIds <- function(ldReference, entries) { + if (is.null(ldReference)) { return(NULL) } # Genuine variant count (ranges) across entries, read independently of the @@ -4948,11 +5079,11 @@ effectiveN <- function(nCase, nControl) { # sketch rather than blanking a panel it simply could not key. nRanges <- sum(map_int(entries, .entryRangeCount)) if (nRanges == 0L) { - return(.emptySketch(ldSketch)) + return(.emptyLdRef(ldReference)) } ids <- unname(list_c(map(entries, .entrySnpIds))) if (length(ids) == 0L) { - return(ldSketch) + return(ldReference) } # Match on the (chrom, pos, allele) tuple rather than the raw id string. # The entry ids have just been canonicalized to chr:pos:A2:A1 by the QC @@ -4961,15 +5092,15 @@ effectiveN <- function(nCase, nControl) { # -- so a panel keyed chr:pos:A1:A2 (which is how a PLINK .bim writes ids; # a .pvar writes REF:ALT and is therefore already canonical) matches # nothing under string equality and the panel is silently emptied. This is - # the matcher `.ldFromSketchMatch()` and every other LD lookup already use. - panelIds <- .ldSketchMatchIds(ldSketch) + # the matcher `.ldFromRefMatch()` and every other LD lookup already use. + panelIds <- .ldRefMatchIds(ldReference) matched <- matchVariants( panelIds, unique(ids), removeStrandAmbiguous = FALSE ) keep <- is_in(seq_along(panelIds), matched$idxA) - .ldSketchSubset(ldSketch, keep) + .ldRefSubset(ldReference, keep) } # --- summaryStatsQc orchestration helpers ---------------------------------- @@ -5018,39 +5149,39 @@ effectiveN <- function(nCase, nControl) { # Build the per-entry QC options list from the captured call parameters. .ssqcBuildOpts <- function( - sumstatsFilterArgs, + sumstatsFilterParam, panelFilterParam, skipRegion, ldMismatchQcMethod, alleleFlipKriging, effectiveN, impute, - imputeArgs, + raissParam, matchMinProp, - sumstatsCleaningArgs, + sumstatsCleaningParam, keepVariants, - signalScreenArgs + signalScreenParam ) { # Built explicitly rather than by subsetting a captured environment with a # character vector: a renamed argument is now an error, not a NULL entry. opts <- list( - sumstatsFilterArgs = sumstatsFilterArgs, + sumstatsFilterParam = sumstatsFilterParam, panelFilterParam = panelFilterParam, skipRegion = skipRegion, ldMismatchQcMethod = ldMismatchQcMethod, alleleFlipKriging = alleleFlipKriging, effectiveN = effectiveN, impute = impute, - imputeArgs = imputeArgs, + raissParam = raissParam, matchMinProp = matchMinProp, - sumstatsCleaningArgs = sumstatsCleaningArgs + sumstatsCleaningParam = sumstatsCleaningParam ) # nCase / nControl / nForPip are deliberately absent here: they are # per-entry, and `.ssqcEntryOpts()` adds them for the entry being run. list_assign( opts, keepVariants = as.character(keepVariants), - screen = .screenResolve(signalScreenArgs) + screen = .screenResolve(signalScreenParam) ) } @@ -5099,38 +5230,38 @@ effectiveN <- function(nCase, nControl) { # retained panel no longer covers, and kriging, SLALOM/DENTIST and the RAISS # known/unknown split then only ever see what survived. # @noRd -.ssqcPrunePanel <- function(ldSketch, cutoffs, label) { - if (is.null(ldSketch) || is.null(cutoffs)) { - return(ldSketch) +.ssqcPrunePanel <- function(ldReference, cutoffs, label) { + if (is.null(ldReference) || is.null(cutoffs)) { + return(ldReference) } - ids <- .ldSketchMatchIds(ldSketch) + ids <- .ldRefMatchIds(ldReference) if (length(ids) == 0L) { - return(ldSketch) + return(ldReference) } - keep <- .panelKeepMask(ids, ldSketch, cutoffs, label) + keep <- .panelKeepMask(ids, ldReference, cutoffs, label) if (all(keep)) { - return(ldSketch) + return(ldReference) + } + if (.ldIsMatrixRef(ldReference) || .ldIsMixtureRef(ldReference)) { + return(.ldRefSubset(ldReference, keep)) } - # Prune the underlying GenotypeHandle, not just an RSE row view: the - # handle is the dosage DelayedArray's seed, and `sketch[keep, ]` leaves - # that seed carrying the whole panel (the trap `.emptySketch()` - # documents), so every read would still see the dropped variants. This is - # a seed-level edit, which is why it reaches for the handle. - pruned <- .subsetGenotypeHandle(.ldSketchHandle(ldSketch), keep) - if (methods::is(ldSketch, "GenotypeHandle")) { - return(pruned) + if (methods::is(ldReference, "GenotypeHandle")) { + return(.subsetGenotypeHandle(ldReference, keep)) } - .genotypeExperiment(pruned) + # A panel is cut where it can shed the dropped variants from its seed as + # well as from its rows (.panelSubsetRows()). The mask is over the + # PANEL's rows, so it is never applied to a handle whose rows differ. + .panelSubsetRows(ldReference, keep) } # One entry's QC result: list(gr, audit). `opts` arrives as the shared base # options; the per-entry fields are derived here rather than carried over from # the previous entry. # @noRd -.ssqcRunEntry <- function(i, sumstats, opts, ldSketch, isQtl) { +.ssqcRunEntry <- function(i, sumstats, opts, ldReference, isQtl) { .runEntrySummaryStatsQc( gr = .collectionEntry(sumstats, i), - ldSketch = ldSketch, + ldReference = ldReference, opts = .ssqcEntryOpts(opts, sumstats, i), entryLabel = .ssqcEntryLabel(sumstats, i, isQtl) ) @@ -5142,8 +5273,8 @@ effectiveN <- function(nCase, nControl) { # Panel filter, once for the shared LD reference and BEFORE any entry is # harmonized, so a variant the panel cannot support is gone from the LD # and from the summary statistics alike. - ldSketch <- .ssqcPrunePanel( - ldSketch(sumstats), + ldReference <- .ssqcPrunePanel( + ldReference(sumstats), .panelCutoffs(opts$panelFilterParam), "summaryStatsQc" ) @@ -5153,13 +5284,13 @@ effectiveN <- function(nCase, nControl) { .ssqcRunEntry, sumstats = sumstats, opts = opts, - ldSketch = ldSketch, + ldReference = ldReference, isQtl = isQtl ) list( newEntries = map(results, "gr"), entryAudits = map(results, "audit"), - ldSketch = ldSketch + ldReference = ldReference ) } @@ -5168,21 +5299,21 @@ effectiveN <- function(nCase, nControl) { # like qcDiagnostics() index these four names, so the output shape is kept # even though the input is now one argument. # @noRd -.ssqcScreenEcho <- function(signalScreenArgs, metric) { - signalScreenArgs[[metric]] %||% 0 +.ssqcScreenEcho <- function(signalScreenParam, metric) { + signalScreenParam[[metric]] %||% 0 } # Assemble the qcInfo record (echoed options + per-entry audits). .ssqcBuildQcInfo <- function( entryAudits, - sumstatsFilterArgs, + sumstatsFilterParam, panelFilterParam, - signalScreenArgs, + signalScreenParam, ldMismatchQcMethod, alleleFlipKriging, effectiveN, impute, - sumstatsCleaningArgs + sumstatsCleaningParam ) { list( timestamp = NA_character_, @@ -5191,50 +5322,58 @@ effectiveN <- function(nCase, nControl) { # these names. The bundles are an argument convention, not an # output one. options = list( - removeIndels = sumstatsFilterArgs$removeIndels, - removeStrandAmbiguous = sumstatsFilterArgs$removeStrandAmbiguous, + removeIndels = sumstatsFilterParam$removeIndels, + removeStrandAmbiguous = sumstatsFilterParam$removeStrandAmbiguous, mafCutoff = panelFilterParam$mafCutoff, macCutoff = panelFilterParam$macCutoff, imissCutoff = panelFilterParam$imissCutoff, - infoCutoff = sumstatsFilterArgs$infoCutoff, - nCutoff = sumstatsFilterArgs$nCutoff, - pipCutoffToSkip = .ssqcScreenEcho(signalScreenArgs, "pip"), - absZCutoffToSkip = .ssqcScreenEcho(signalScreenArgs, "absZ"), - bfCutoffToSkip = .ssqcScreenEcho(signalScreenArgs, "bf"), - logBfCutoffToSkip = .ssqcScreenEcho(signalScreenArgs, "logBf"), + infoCutoff = sumstatsFilterParam$infoCutoff, + nCutoff = sumstatsFilterParam$nCutoff, + pipCutoffToSkip = .ssqcScreenEcho(signalScreenParam, "pip"), + absZCutoffToSkip = .ssqcScreenEcho(signalScreenParam, "absZ"), + bfCutoffToSkip = .ssqcScreenEcho(signalScreenParam, "bf"), + logBfCutoffToSkip = .ssqcScreenEcho(signalScreenParam, "logBf"), ldMismatchQcMethod = ldMismatchQcMethod, alleleFlipKriging = alleleFlipKriging, effectiveN = effectiveN, impute = impute, # Echoed FLAT for the same reason the screen cutoffs are: these # nine names are part of the returned object's shape. - coerceNumeric = sumstatsCleaningArgs$coerceNumeric, - normalizeChr = sumstatsCleaningArgs$normalizeChr, - dropNonstandardChr = sumstatsCleaningArgs$dropNonstandardChr, - dropMissData = sumstatsCleaningArgs$dropMissData, - dropPOutOfRange = sumstatsCleaningArgs$dropPOutOfRange, - clampSmallP = sumstatsCleaningArgs$clampSmallP, - smallPFloor = sumstatsCleaningArgs$smallPFloor, - dropZeroEffect = sumstatsCleaningArgs$dropZeroEffect, - dropNonpositiveSe = sumstatsCleaningArgs$dropNonpositiveSe + coerceNumeric = sumstatsCleaningParam$coerceNumeric, + normalizeChr = sumstatsCleaningParam$normalizeChr, + dropNonstandardChr = sumstatsCleaningParam$dropNonstandardChr, + dropMissData = sumstatsCleaningParam$dropMissData, + dropPOutOfRange = sumstatsCleaningParam$dropPOutOfRange, + clampSmallP = sumstatsCleaningParam$clampSmallP, + smallPFloor = sumstatsCleaningParam$smallPFloor, + dropZeroEffect = sumstatsCleaningParam$dropZeroEffect, + dropNonpositiveSe = sumstatsCleaningParam$dropNonpositiveSe ), entryAudit = entryAudits ) } # Rebuild the SumStats object with QC'd entries, trimmed sketch, and qcInfo. -.ssqcRebuild <- function(sumstats, newEntries, newLdSketch, qcInfo) { - has <- function(nm) is_in(nm, .tupleColumnNames(sumstats)) - nSample <- if (has("nSample")) as.numeric(sumstats$nSample) else NULL +.ssqcRebuild <- function(sumstats, newEntries, newLdReference, qcInfo) { + cols <- .tupleColumnNames(sumstats) + nSample <- if (is_in("nSample", cols)) { + as.numeric(sumstats$nSample) + } else { + NULL + } if (methods::is(sumstats, "GwasSumStats")) { GwasSumStats( studyName = as.character(sumstats$study), entry = newEntries, genome = unique(unname(GenomeInfoDb::genome(sumstats))), - ldSketch = newLdSketch, + ldReference = newLdReference, varY = as.numeric(sumstats$varY), - nCase = if (has("nCase")) as.numeric(sumstats$nCase) else NULL, - nControl = if (has("nControl")) { + nCase = if (is_in("nCase", cols)) { + as.numeric(sumstats$nCase) + } else { + NULL + }, + nControl = if (is_in("nControl", cols)) { as.numeric(sumstats$nControl) } else { NULL @@ -5244,7 +5383,7 @@ effectiveN <- function(nCase, nControl) { # Carry the existing block keys through: the entries are already # split, so without this the constructor re-derives them from # seqname and every block on one chromosome collapses to one key. - blockId = if (has("blockId")) { + blockId = if (is_in("blockId", cols)) { as.character(sumstats$blockId) } else { NULL @@ -5257,7 +5396,7 @@ effectiveN <- function(nCase, nControl) { trait = as.character(sumstats$trait), entry = newEntries, genome = unique(unname(GenomeInfoDb::genome(sumstats))), - ldSketch = newLdSketch, + ldReference = newLdReference, varY = as.numeric(sumstats$varY), nSample = nSample, qcInfo = qcInfo @@ -5273,10 +5412,11 @@ effectiveN <- function(nCase, nControl) { #' tiny P; normalize CHR; coerce signed columns to numeric), variant-content #' filters (MAF / INFO / N) via \code{.applyContentFilters}, optional #' \code{skipRegion} drop, optional PIP screen, panel-vs-sumstats allele -#' harmonization against the \code{ldSketch} via \code{harmonizeAlleles} (which -#' handles indels, strand-ambiguous variants, sign / strand flips, and duplicate -#' drops in a single sweep), optional SLALOM/DENTIST LD-mismatch QC, and -#' optional RAISS imputation. No Bioconductor genome / dbSNP packages required. +#' harmonization against the \code{ldReference} via \code{harmonizeAlleles} +#' (which handles indels, strand-ambiguous variants, sign / strand flips, and +#' duplicate drops in a single sweep), optional SLALOM/DENTIST LD-mismatch QC, +#' and optional RAISS imputation. No Bioconductor genome / dbSNP packages +#' required. #' #' The returned collection has its \code{qcInfo} slot populated with a per-entry #' audit record (variant counts, drop counts at each step, which filters fired, @@ -5310,7 +5450,7 @@ effectiveN <- function(nCase, nControl) { #' variant common in the panel but rare in the study is dropped as well. #' #' @param sumstats A \code{QtlSumStats} or \code{GwasSumStats} collection. -#' @param sumstatsFilterArgs Row filters applied to the summary statistics +#' @param sumstatsFilterParam Row filters applied to the summary statistics #' themselves, built with \code{\link{SumstatsFilterParam}}: #' \code{removeIndels} drops indels during panel harmonization, #' \code{removeStrandAmbiguous} drops A/T and C/G variants, @@ -5321,8 +5461,10 @@ effectiveN <- function(nCase, nControl) { #' @param panelFilterParam LD-reference-panel filters, built with #' \code{\link{PanelFilterParam}}. \code{macCutoff} is converted to a MAF #' equivalent using \code{macCutoff / (2 * nSamples)} and the stricter of -#' it and \code{mafCutoff} applies; \code{imissCutoff} is a per-variant -#' missingness ceiling. See the panel-filters section below. +#' it and \code{mafCutoff} applies; \code{nSamples} counts the panel's real +#' samples, which for a stochastic LD sketch are those its \code{.afreq} +#' records rather than its pseudo-samples. \code{imissCutoff} is a +#' per-variant missingness ceiling. See the panel-filters section below. #' #' \code{mafCutoff} is the one setting that reaches past the panel: it is #' measured wherever it can be, against the summary statistics' own @@ -5333,7 +5475,7 @@ effectiveN <- function(nCase, nControl) { #' retain prior to harmonization. #' @param skipRegion Optional character vector of \code{"chr:start-end"} #' strings, or a \code{GRanges}, of regions to drop. -#' @param signalScreenArgs Whether to skip an entry before fitting it, +#' @param signalScreenParam Whether to skip an entry before fitting it, #' built with #' \code{\link{SignalScreenParam}} --- the same bundle #' \code{\link{fineMappingPipeline}} and \code{\link{colocboostPipeline}} @@ -5366,14 +5508,14 @@ effectiveN <- function(nCase, nControl) { #' records the setting and each entry's \code{nSource} is one of #' \code{"effective"}, \code{"column"}, \code{"total"}, or \code{NA}. #' @param impute Logical (length 1). Run RAISS imputation against the -#' \code{ldSketch}. Default \code{FALSE}. (Note: RAISS against the sketch is -#' not yet fully wired for the new path; the option is accepted but currently -#' emits a warning and is skipped.) -#' @param imputeArgs RAISS settings, built with \code{\link{RaissParam}}. +#' \code{ldReference}'s genotype panel as the last QC step, adding z-scores +#' for panel variants the input lacks (see \code{raissParam}). The audit +#' records how many variants were imputed. Default \code{FALSE}. +#' @param raissParam RAISS settings, built with \code{\link{RaissParam}}. #' A bare list is refused, since it cannot be checked. #' #' RAISS imputation scopes its reference panel to the analysis-region window -#' (so a per-chromosome / genome-wide \code{ldSketch} does not materialize +#' (so a per-chromosome / genome-wide \code{ldReference} does not materialize #' its full dosage); \code{flank} widens that window by the given number of #' base pairs on each side to retain LD context for edge variants. #' @@ -5390,7 +5532,7 @@ effectiveN <- function(nCase, nControl) { #' the panel handed to RAISS holds nothing below those. Use them to impute #' only common variants from a panel deliberately kept wider than that --- #' e.g. \code{mafCutoff = 0.001} with -#' \code{imputeArgs = RaissParam(mafCutoff = 0.01)}. A variant present in +#' \code{raissParam = RaissParam(mafCutoff = 0.01)}. A variant present in #' the sumstats is never dropped here: RAISS derives its LD basis from those #' same panel rows. #' @@ -5398,12 +5540,12 @@ effectiveN <- function(nCase, nControl) { #' are forwarded to \code{\link{raiss}} itself. #' @param matchMinProp Minimum proportion of LD panel variants that must be #' matched by the sumstats; default 0. -#' @param sumstatsCleaningArgs What makes a row a well-formed record, built with -#' \code{\link{SumstatsCleaningParam}}: \code{coerceNumeric}, +#' @param sumstatsCleaningParam What makes a row a well-formed record, built +#' with \code{\link{SumstatsCleaningParam}}: \code{coerceNumeric}, #' \code{normalizeChr} / \code{dropNonstandardChr}, \code{dropMissData}, #' \code{dropPOutOfRange}, \code{clampSmallP} / \code{smallPFloor}, #' \code{dropZeroEffect} and \code{dropNonpositiveSe}. Applied before any -#' filter or screen. Distinct from \code{sumstatsFilter}, which applies +#' filter or screen. Distinct from \code{sumstatsFilterParam}, which applies #' quality thresholds to rows that are already well formed. #' @return A new \code{QtlSumStats} / \code{GwasSumStats} with cleaned entries #' and \code{qcInfo} populated. @@ -5413,55 +5555,44 @@ effectiveN <- function(nCase, nControl) { #' @export summaryStatsQc <- function( sumstats, - sumstatsFilterArgs = SumstatsFilterParam(), + sumstatsFilterParam = SumstatsFilterParam(), panelFilterParam = PanelFilterParam(), keepVariants = NULL, skipRegion = NULL, - signalScreenArgs = SignalScreenParam(), + signalScreenParam = SignalScreenParam(), ldMismatchQcMethod = c("none", "slalom", "dentist"), alleleFlipKriging = FALSE, effectiveN = TRUE, impute = FALSE, - imputeArgs = RaissParam(), + raissParam = RaissParam(), matchMinProp = 0, - sumstatsCleaningArgs = SumstatsCleaningParam() + sumstatsCleaningParam = SumstatsCleaningParam() ) { r <- .ssqcResolveInputs( sumstats, - sumstatsFilterArgs, + sumstatsFilterParam, panelFilterParam, - signalScreenArgs, - sumstatsCleaningArgs, - imputeArgs, + signalScreenParam, + sumstatsCleaningParam, + raissParam, ldMismatchQcMethod ) opts <- .ssqcBuildOpts( - sumstatsFilterArgs = sumstatsFilterArgs, + sumstatsFilterParam = sumstatsFilterParam, panelFilterParam = panelFilterParam, skipRegion = skipRegion, ldMismatchQcMethod = r$ldMismatchQcMethod, alleleFlipKriging = alleleFlipKriging, effectiveN = effectiveN, impute = impute, - imputeArgs = r$imputeArgs, + raissParam = r$raissParam, matchMinProp = matchMinProp, - sumstatsCleaningArgs = r$cleaning, + sumstatsCleaningParam = r$cleaning, keepVariants = keepVariants, - signalScreenArgs = signalScreenArgs + signalScreenParam = signalScreenParam ) res <- .ssqcRunEntries(sumstats, opts) - .ssqcAssemble( - sumstats, - res, - sumstatsFilterArgs = sumstatsFilterArgs, - panelFilterParam = panelFilterParam, - signalScreenArgs = signalScreenArgs, - ldMismatchQcMethod = r$ldMismatchQcMethod, - alleleFlipKriging = alleleFlipKriging, - effectiveN = effectiveN, - impute = impute, - cleaning = r$cleaning - ) + .ssqcAssemble(sumstats, res, opts, signalScreenParam) } # Validate every bundle and resolve the three that have a resolved form: @@ -5471,59 +5602,47 @@ summaryStatsQc <- function( # @noRd .ssqcResolveInputs <- function( sumstats, - sumstatsFilterArgs, + sumstatsFilterParam, panelFilterParam, - signalScreenArgs, - sumstatsCleaningArgs, - imputeArgs, + signalScreenParam, + sumstatsCleaningParam, + raissParam, ldMismatchQcMethod ) { .assertMethodParam( - sumstatsFilterArgs, - "SumstatsFilterParam", - "sumstatsFilter" + sumstatsFilterParam, + "SumstatsFilterParam" ) - .assertMethodParam(panelFilterParam, "PanelFilterParam", "panelFilter") - .assertMethodParam(signalScreenArgs, "SignalScreenParam", "signalScreen") - .assertMethodParam(imputeArgs, "RaissParam", "imputeArgs") - .ssqcCheckEntries(sumstats, sumstatsFilterArgs$infoCutoff) + .assertMethodParam(panelFilterParam, "PanelFilterParam") + .assertMethodParam(signalScreenParam, "SignalScreenParam") + .assertMethodParam(raissParam, "RaissParam") + .ssqcCheckEntries(sumstats, sumstatsFilterParam$infoCutoff) .ssqcCheckPanelCutoffs(panelFilterParam) list( ldMismatchQcMethod = .resolveLdMismatchChoice(ldMismatchQcMethod), - cleaning = .sumstatsCleaningResolve(sumstatsCleaningArgs), - imputeArgs = .ssqcResolveImputeArgs(imputeArgs) + cleaning = .sumstatsCleaningResolve(sumstatsCleaningParam), + raissParam = .ssqcResolveImputeArgs(raissParam) ) } # The QC record and the rebuilt object around the filtered entries. # @noRd -.ssqcAssemble <- function( - sumstats, - res, - sumstatsFilterArgs, - panelFilterParam, - signalScreenArgs, - ldMismatchQcMethod, - alleleFlipKriging, - effectiveN, - impute, - cleaning -) { +.ssqcAssemble <- function(sumstats, res, opts, signalScreenParam) { qcInfo <- .ssqcBuildQcInfo( res$entryAudits, - sumstatsFilterArgs = sumstatsFilterArgs, - panelFilterParam = panelFilterParam, - signalScreenArgs = signalScreenArgs, - ldMismatchQcMethod = ldMismatchQcMethod, - alleleFlipKriging = alleleFlipKriging, - effectiveN = effectiveN, - impute = impute, - sumstatsCleaningArgs = cleaning + sumstatsFilterParam = opts$sumstatsFilterParam, + panelFilterParam = opts$panelFilterParam, + signalScreenParam = signalScreenParam, + ldMismatchQcMethod = opts$ldMismatchQcMethod, + alleleFlipKriging = opts$alleleFlipKriging, + effectiveN = opts$effectiveN, + impute = opts$impute, + sumstatsCleaningParam = opts$sumstatsCleaningParam ) # From the PRUNED panel, not the input's: narrowing the original again # would hand back a sketch the panel filter never reached. - newLdSketch <- .subsetSketchToIds(res$ldSketch, res$newEntries) - .ssqcRebuild(sumstats, res$newEntries, newLdSketch, qcInfo) + newLdReference <- .subsetLdRefToIds(res$ldReference, res$newEntries) + .ssqcRebuild(sumstats, res$newEntries, newLdReference, qcInfo) } # ---- slidingWindowLoop callbacks (distance mode) ------------------------ @@ -5802,21 +5921,20 @@ SumstatsCleaningParam <- function( # .assertMethodOptions accepts `list()` as "no options", and .applySanityChecks # tests these with `if (!flag)`, so a missing field must not arrive as NULL. # @noRd -.sumstatsCleaningResolve <- function(sumstatsCleaningArgs) { +.sumstatsCleaningResolve <- function(sumstatsCleaningParam) { .assertMethodParam( - sumstatsCleaningArgs, - "SumstatsCleaningParam", - "sumstatsCleaning" + sumstatsCleaningParam, + "SumstatsCleaningParam" ) list( - coerceNumeric = sumstatsCleaningArgs$coerceNumeric %||% TRUE, - normalizeChr = sumstatsCleaningArgs$normalizeChr %||% TRUE, - dropNonstandardChr = sumstatsCleaningArgs$dropNonstandardChr %||% TRUE, - dropMissData = sumstatsCleaningArgs$dropMissData %||% TRUE, - dropPOutOfRange = sumstatsCleaningArgs$dropPOutOfRange %||% TRUE, - clampSmallP = sumstatsCleaningArgs$clampSmallP %||% TRUE, - smallPFloor = sumstatsCleaningArgs$smallPFloor %||% 5e-324, - dropZeroEffect = sumstatsCleaningArgs$dropZeroEffect %||% TRUE, - dropNonpositiveSe = sumstatsCleaningArgs$dropNonpositiveSe %||% TRUE + coerceNumeric = sumstatsCleaningParam$coerceNumeric %||% TRUE, + normalizeChr = sumstatsCleaningParam$normalizeChr %||% TRUE, + dropNonstandardChr = sumstatsCleaningParam$dropNonstandardChr %||% TRUE, + dropMissData = sumstatsCleaningParam$dropMissData %||% TRUE, + dropPOutOfRange = sumstatsCleaningParam$dropPOutOfRange %||% TRUE, + clampSmallP = sumstatsCleaningParam$clampSmallP %||% TRUE, + smallPFloor = sumstatsCleaningParam$smallPFloor %||% 5e-324, + dropZeroEffect = sumstatsCleaningParam$dropZeroEffect %||% TRUE, + dropNonpositiveSe = sumstatsCleaningParam$dropNonpositiveSe %||% TRUE ) } diff --git a/R/tupleSelectors.R b/R/tupleSelectors.R index 094ef3408..70e718088 100644 --- a/R/tupleSelectors.R +++ b/R/tupleSelectors.R @@ -1,7 +1,7 @@ # ============================================================================= # Tuple row matchers # ----------------------------------------------------------------------------- -# Internal helpers shared by the FineMappingResult / TwasWeights / SumStats +# Internal helpers shared by the fine-mapping result / TwasWeights / SumStats # collections to resolve a tuple-keyed selection to a single row index. Every # collection is a RangedTupleList, so these read identity columns off mcols # and payloads off the elements -- there is no second shape to branch on. @@ -398,14 +398,14 @@ } # Internal: append a validated `region` GRanges to a constructor's column list -# (no-op when NULL). Shared by the TwasWeights / FineMappingResult +# (no-op when NULL). Shared by the TwasWeights / FineMappingResultBase # constructors so the provenance column is added identically everywhere. # Internal: an optional per-row provenance column. One helper for all three # (`dataType`, `dataSource`, `standardized`) since they differ only in name and # coercion. # # `dataSource` is per ROW, not per collection: it used to be derived from the -# collection's single `ldSketch` slot, so after combineFineMappingResults() +# collection's single `ldReference` slot, so after combineFineMappingResults() # folded individual-level and RSS-derived fits together every row got the # combined object's answer. # @@ -426,11 +426,6 @@ c(cols, set_names(list(rep(v, length.out = n)), nm)) } -# @noRd -.appendDataTypeCol <- function(cols, dataType, n) { - .appendProvenanceCol(cols, dataType, "dataType", n) -} - # @noRd .appendFmProvenanceCols <- function( cols, @@ -458,7 +453,7 @@ } # Internal: validate the optional `region` GRanges column (one range per row), -# shared by the TwasWeights / FineMappingResult validity methods. Returns a +# shared by the TwasWeights / FineMappingResultBase validity methods. Returns a # character vector of errors (empty when valid or the column is absent). .validateRegionColumn <- function(object) { if (!is_in("region", .tupleColumnNames(object))) { @@ -554,23 +549,23 @@ } # Internal: row-bind two or more per-tuple collection objects (TwasWeights / -# FineMappingResult subclasses), carrying forward EVERY column. Columns are +# FineMappingResultBase subclasses), carrying forward EVERY column. Columns are # unioned, and a collection lacking an optional column (e.g. jointContexts or # region) is padded with `.naLikeColumn` -- so adding a column to a class flows # through combines automatically rather than being hand-listed at each site. -# Preserves the concrete class and sets the `ldSketch` slot explicitly (rbind +# Preserves the concrete class and sets the `ldReference` slot explicitly (rbind # does not reliably carry it). Returns NULL when given no inputs. Every # collection is a RangedTupleList now, so this only drops the NULL parts and # hands off; the old DFrame path went with the rebase onto GRangesList. # # `slots` carries the collection-level state a concrete subclass adds beyond -# `ldSketch` (SumStatsBase's `genome` / `qcInfo`). It is passed in rather than -# read off `parts[[1L]]` because those slots describe the WHOLE collection, so -# merging them is the caller's decision -- first-wins would silently drop the +# `ldReference` (SumStatsBase's `genome` / `qcInfo`). It is passed in rather +# than read off `parts[[1L]]` because those slots describe the WHOLE collection, +# so merging them is the caller's decision -- first-wins would silently drop the # other parts' QC audit. .rbindCollections <- function( parts, - ldSketch = NULL, + ldReference = NULL, slots = list(), genome = NULL ) { @@ -578,7 +573,7 @@ if (length(parts) == 0L) { return(NULL) } - .rbindRangedCollections(parts, ldSketch, slots, genome) + .rbindRangedCollections(parts, ldReference, slots, genome) } # Internal: aggregate a per-entry accessor across every row of a @@ -706,7 +701,7 @@ .fmrEntryPart <- function(i, x, perEntry, meta, viewArgs) { # `perEntry` is an internal per-row function taking the stored payload, not # an S4 generic dispatching on a rebuilt entry. That indirection is what - # the FineMappingRow class existed for. + # the retired FineMappingEntry class existed for. raw <- exec(perEntry, .fmrRowParts(x, i), !!!viewArgs) if (is.null(raw) || nrow(raw) == 0L) { return(NULL) @@ -737,8 +732,6 @@ } } -# Concatenate column `cn` across all parts (NA-filling parts that lack it). -# @noRd # Row-binding a collection: the elements append and the mcols rbind. # # S4Vectors::combineRows() does the union-with-NA-fill this needs, but it @@ -749,7 +742,7 @@ # @noRd .rbindRangedCollections <- function( parts, - ldSketch, + ldReference, slots = list(), genome = NULL ) { @@ -775,12 +768,14 @@ methods::new, cls, grl, - !!!c(list(ldSketch = ldSketch), slots) + !!!c(list(ldReference = ldReference), slots) ) validObject(out) out } +# Concatenate column `cn` across all parts (NA-filling parts that lack it). +# @noRd .rbindColumn <- function(cn, parts) { pieces <- map(parts, .rbindColPiece, cn = cn, parts = parts) # GRanges concat may warn on seqinfo. @@ -790,7 +785,7 @@ # ============================================================================= # Per-row primitives # ----------------------------------------------------------------------------- -# The per-row views a collection projects. These replace the FineMappingRow +# The per-row views a collection projects. These replace the FineMappingEntry # S4 class, which existed only to be the DISPATCH TARGET for exactly this work: # a collection method would rebuild an entry for each row and call the exported # generic on it. That indirection cost a whole class, a validity method and a @@ -819,11 +814,6 @@ ) } -# The same, for a set of rows collapsed into one logical entry (a multi-block -# row group). The fit payload comes from the first row, matching the previous -# .fmeEntryFromRows behaviour. -# @noRd - # @noRd .fmrPartsVariantIds <- function(parts) { variantIds(.asFmRowPayload(parts)) @@ -845,7 +835,7 @@ } # ---- per-row views ---------------------------------------------------------- -# Each of these is the body of what used to be a FineMappingRow method, +# Each of these is the body of what used to be a FineMappingEntry method, # reading the stored form through `parts` instead of through S4 slots. They are # what .fmrAggregateView() maps over. @@ -1024,7 +1014,7 @@ list(variantIds = vids[ok], weights = w[ok]) } -# Class-aware row payload: the TwasWeights and FineMappingResult shapes differ +# Class-aware row payload: the TwasWeights and fine-mapping shapes differ # (weights vs a susie fit), so callers that accept either weight source route # through here. Replaces the old .collectionEntry bridge. # @noRd @@ -1051,7 +1041,7 @@ # A fine-mapping row deliberately reports NULL: cTWAS would otherwise # renormalize alpha into an UNstandardized weight, which is inconsistent with # the standardized posterior effect the topLoci view already carries. Preserved -# verbatim from the FineMappingRow methodFits method. +# verbatim from the retired FineMappingEntry methodFits method. # @noRd .rowFits <- function(parts) { if (methods::is(parts, "TwasWeightsRow")) methodFits(parts) else NULL @@ -1070,15 +1060,12 @@ TRUE } -# ---- row-payload builders --------------------------------------------------- -# What callers use in place of the retired FineMappingRow / TwasWeightsRow -# constructors. Same arguments, but they return the STORED form directly -- a -# plain list holding one GRanges plus the fit payload -- so nothing has to be -# converted on the way into a collection. +# ---- row-payload normalizers ------------------------------------------------ +# The per-row views read a FineMappingRow / TwasWeightsRow. Callers may also +# hold a single-row collection -- what fineMappingResult() returns -- so these +# accept either and hand back the row. -# Accept either a row payload (the stored form) or a legacy entry object, so -# the constructors can be flipped independently of their ~300 call sites. -# Delete the entry branch once nothing constructs entries. +# A FineMappingRow from a row or from a fine-mapping collection's rows. # @noRd .asFmRowPayload <- function(e) { # A single-row collection is the other shape callers hand over -- it is @@ -1120,8 +1107,6 @@ abort(msg) } -# @noRd - # Shape-tolerant readers for values that may still be a legacy entry object # while the flip is in progress. Delete the entry branch (and these) once # nothing produces entries. @@ -1155,7 +1140,7 @@ # ============================================================================= # Combining summary-statistics collections # ----------------------------------------------------------------------------- -# A SumStatsBase subclass carries three COLLECTION-level slots -- ldSketch, +# A SumStatsBase subclass carries three COLLECTION-level slots -- ldReference, # genome and qcInfo -- on top of the elements and their mcols, so row-binding # per-block pieces back into one collection has to say what happens to each. # The rules live here once, shared by combineGwasSumStats() and @@ -1165,9 +1150,9 @@ # qcInfo `entryAudit` concatenates in element order (it is indexed BY # element); the rest is carried from the first part after checking # the QC options agree -# ldSketch the panels union, read through the parts' shared GenotypeHandle +# ldReference the panels union, read through the parts' shared GenotypeHandle # -# The ldSketch rule is the one that matters for correctness. A block-parallel +# The ldReference rule is the one that matters for correctness. A block-parallel # pipeline narrows each piece's panel to that block, so first-wins would hand # back a collection spanning every block whose LD reference covers only the # first -- and cTWAS computes its full-panel LD from exactly that slot. @@ -1192,14 +1177,14 @@ invisible(NULL) } -# The collection-level slots BEYOND ldSketch that a combine has to merge, for +# The collection-level slots BEYOND ldReference that a combine has to merge, for # whatever concrete class `parts` are. A slot describes the whole collection, # so first-wins would silently drop the other parts' state; each gets its own # rule and an unrecognised slot is an error rather than a quiet default, so # adding one to a class cannot slip through a combine unnoticed. # @noRd .rtlExtraSlots <- function(parts, fn) { - own <- setdiff(.rtlOwnSlots(parts[[1L]]), "ldSketch") + own <- setdiff(.rtlOwnSlots(parts[[1L]]), "ldReference") out <- compact(list( qcInfo = if (is_in("qcInfo", own)) .ssCombineQcInfo(parts, fn) )) @@ -1217,9 +1202,9 @@ # Merge `parts` into one collection, reconciling every collection-level slot. # The single path behind `c()` / `append()` and the four combine*() wrappers. -# A non-NULL `ldSketch` overrides the unioned panel. +# A non-NULL `ldReference` overrides the unioned panel. # @noRd -.combineTupleCollections <- function(parts, ldSketch, fn) { +.combineTupleCollections <- function(parts, ldReference, fn) { .rtlRequireSameClass(parts, fn) # Forced before the rebuild: GRangesList() merges seqinfo and rejects # mismatched builds itself, with a message about sequence-level genomes @@ -1227,7 +1212,7 @@ genome <- .rtlCombineGenome(parts, fn) .rbindCollections( parts, - ldSketch = ldSketch %||% .combineLdSketch(parts, fn), + ldReference = ldReference %||% .combineLdRef(parts, fn), slots = .rtlExtraSlots(parts, fn), genome = genome ) @@ -1244,10 +1229,10 @@ } # Row-bind summary-statistics parts, merging the three collection-level slots. -# `ldSketch` (when non-NULL) overrides the unioned panel. +# `ldReference` (when non-NULL) overrides the unioned panel. # @noRd -.rbindSumStats <- function(parts, ldSketch, fn) { - .combineTupleCollections(parts, ldSketch, fn) +.rbindSumStats <- function(parts, ldReference, fn) { + .combineTupleCollections(parts, ldReference, fn) } # One genome build per collection (every entry shares the LD sketch), so the @@ -1340,8 +1325,8 @@ # collection has no panel); a mix is an error, because silently keeping the # panels that exist would leave elements harmonized against nothing. # @noRd -.combineLdSketch <- function(parts, fn) { - sketches <- map(parts, ldSketch) +.combineLdRef <- function(parts, fn) { + sketches <- map(parts, ldReference) present <- !map_lgl(sketches, is.null) if (!any(present)) { return(NULL) @@ -1349,40 +1334,161 @@ if (!all(present)) { msg <- glue( "{fn}: {sum(!present)} of {length(parts)} inputs carry no ", - "ldSketch. Combine collections that all have an LD reference, or ", - "all have none." + "ldReference. Combine collections that all have an LD reference, ", + "or all have none." ) abort(msg) } - handles <- map(sketches, .ldSketchHandle) - .ssCheckSameSource(handles, fn) + if (any(map_lgl(sketches, .ldIsMatrixRef))) { + return(.combineLdMatrixRefs(sketches, fn)) + } + if (any(map_lgl(sketches, .ldIsMixtureRef))) { + return(.combineMixtureRefs(sketches, fn)) + } + .ssCheckSameSource(sketches, fn) + chromPaths <- .ssUnionChromPaths(sketches, fn) + handles <- map(sketches, .ldRefHandle) + if (any(map_lgl(handles, is.null))) { + return(.ssUnionPanels(sketches, chromPaths)) + } handle <- methods::initialize( handles[[1L]], snpInfo = .ssUnionSnpInfo(handles), - chromPaths = .ssUnionChromPaths(handles, fn) + chromPaths = chromPaths ) - .asLdSketch(handle) + .asLdRef(handle) } -# Union the per-chromosome shard paths across handles. Two sketches trimmed -# from one genoMeta panel to different chromosomes share path/format/samples -# and differ ONLY here, so unioning is what lets their snpInfo rows keep -# routing: a row reaches its file by its own CHR. One chromosome mapping to -# two different files means the parts are not the same panel after all. +# The union of panels from one source that read through no handle -- a VCF, +# GDS or PLINK1 panel, or a per-chromosome set of them: their rows, each +# once, in genomic order, over the first panel's samples. The parts' assays +# are bound, not read. Parts that are all the same panel union to it. # @noRd -.ssUnionChromPaths <- function(handles, fn) { - combined <- .ssConcatChr(map(handles, .ssHandleChromPaths)) +.ssUnionPanels <- function(panels, chromPaths) { + first <- panels[[1L]] + if (all(map_lgl(map(panels, rownames), identical, rownames(first)))) { + return(first) + } + rr <- suppressWarnings( + exec(c, !!!unname(map(panels, SummarizedExperiment::rowRanges))) + ) + stacked <- SummarizedExperiment::SummarizedExperiment( + assays = list( + dosage = exec( + BiocGenerics::rbind, + !!!unname(map(panels, .seDosage)) + ) + ), + rowRanges = rr, + colData = SummarizedExperiment::colData(first), + metadata = S4Vectors::metadata(first) + ) + kept <- which(!duplicated(names(rr))) + ord <- kept[order( + canonChrom(as.character(seqnames(rr)[kept])), + start(rr)[kept] + )] + md <- S4Vectors::metadata(stacked) + if (!is.null(md$genotypeSource)) { + md$genotypeSource$chromPaths <- chromPaths + } + S4Vectors::`metadata<-`(stacked[ord, ], value = md) +} + +# LdMatrix references, unlike panels, cannot be unioned: the LD between +# variants held by different parts is recorded in neither. They combine only +# when one of them already holds every other's variants with the same LD -- +# the same matrix, or one part that kept all of the others' variants. +# Otherwise the caller passes the matrix covering them all as `ldReference`. +# @noRd +.combineLdMatrixRefs <- function(refs, fn) { + if (!all(map_lgl(refs, .ldIsMatrixRef))) { + msg <- glue( + "{fn}: inputs mix genotype-panel and LdMatrix references; ", + "combine collections that share one LD reference." + ) + abort(msg) + } + widest <- refs[[which.max(map_int(refs, length))]] + if (all(map_lgl(refs, .ldmCoveredBy, by = widest))) { + return(widest) + } + abort(c( + glue( + "{fn}: the inputs' LdMatrix references cover different variants, ", + "and the LD between them is held by none." + ), + i = "Pass an LdMatrix covering all of their variants as `ldReference`." + )) +} + +# Mixture references combine like LdMatrix ones: when one of them already +# holds every other's variants and they average the same panels with the +# same weights. Their panels stay lazy, so the widest mixture loses nothing. +# @noRd +.combineMixtureRefs <- function(refs, fn) { + if (!all(map_lgl(refs, .ldIsMixtureRef))) { + msg <- glue( + "{fn}: inputs mix GenotypeMixture references with other kinds; ", + "combine collections that share one LD reference." + ) + abort(msg) + } + widest <- refs[[which.max(map_int(refs, .ldRefNVariants))]] + sameMix <- map_lgl(refs, .gmSameMixture, y = widest) + covered <- map_lgl(refs, .ldRefVariantsCoveredBy, by = widest) + if (all(sameMix & covered)) { + return(widest) + } + abort(c( + glue( + "{fn}: the inputs' GenotypeMixture references differ or cover ", + "different variants." + ), + i = "Pass the mixture covering all of their variants as `ldReference`." + )) +} + +# TRUE when every variant of `x` is in `by`, coded the same way. +# @noRd +.ldRefVariantsCoveredBy <- function(x, by) { + m <- matchVariants( + .ldRefMatchIds(x), + .ldRefMatchIds(by), + removeStrandAmbiguous = FALSE + ) + length(m$idxA) == .ldRefNVariants(x) && all(m$sign > 0) +} + +# TRUE when every variant of `x` is in `by`, coded the same way, with the +# same LD. +# @noRd +.ldmCoveredBy <- function(x, by) { + m <- matchVariants( + .ldRefMatchIds(x), + .ldRefMatchIds(by), + removeStrandAmbiguous = FALSE + ) + length(m$idxA) == length(x) && + all(m$sign > 0) && + .ldmAgreesOn(x, by, m$idxA, m$idxB) +} + +# Union the per-chromosome shard paths across LD references (panels, or +# bare handles). Two sketches trimmed from one genoMeta panel to different +# chromosomes share path/format/samples and differ ONLY here, so unioning is +# what lets their rows keep routing: a row reaches its file by its own CHR. +# One chromosome mapping to two different files means the parts are not the +# same panel after all. +# @noRd +.ssUnionChromPaths <- function(refs, fn) { + combined <- .ssConcatChr(map(refs, .ldRefChromPaths)) byChrom <- split(unname(combined), names(combined)) walk2(names(byChrom), byChrom, .ssCheckOneFilePerChrom, fn = fn) # Every chromosome agrees, so the first mapping stands for all of them. combined[!duplicated(names(combined))] } -# @noRd -.ssHandleChromPaths <- function(h) { - h@chromPaths -} - # @noRd .ssConcatChr <- function(pieces) { if (length(pieces) == 0L) { @@ -1400,41 +1506,48 @@ } msg <- glue( "{fn}: chromosome '{ch}' maps to two different genotype ", - "files across the inputs, so their LD sketches cannot ", + "files across the inputs, so their LD references cannot ", "be unioned." ) abort(msg) } -# Every panel must read from the same file(s): the union keeps the first -# handle and widens its snpInfo, and each row's `fileIdx` addresses a position -# in THAT file, so rows from another panel would read the wrong variants. +# Every panel must read from the same file(s) and samples: a handle union +# keeps the first handle and widens its snpInfo, each row's `fileIdx` +# addressing a position in THAT file, and a panel union binds the parts over +# the first one's samples. # @noRd -.ssCheckSameSource <- function(handles, fn) { - same <- map_lgl(handles, .ssSameGenotypeSource, first = handles[[1L]]) +.ssCheckSameSource <- function(sketches, fn) { + same <- map_lgl(sketches, .ssSameGenotypeSource, first = sketches[[1L]]) if (all(same)) { return(invisible(NULL)) } msg <- glue( "{fn}: inputs reference different genotype panels (input ", - "{which(!same)[[1L]]} differs from the first). Their LD sketches ", + "{which(!same)[[1L]]} differs from the first). Their LD references ", "cannot be unioned." ) abort(msg) } # @noRd -.ssSameGenotypeSource <- function(h, first) { +.ssSameGenotypeSource <- function(x, first) { # chromPaths is deliberately NOT compared: two sketches trimmed from the # same genoMeta panel to different chromosomes differ there and nowhere # else, and .ssUnionChromPaths() merges them (erroring on a genuine # conflict). Everything below must match for the union to mean anything -- - # snpInfo rows carry file POSITIONS, which only make sense against the - # same files and the same sample axis. - identical(h@path, first@path) && - identical(h@format, first@format) && - identical(h@nSamples, first@nSamples) && - identical(h@sampleIds, first@sampleIds) + # rows address the same files, over the same sample axis. + a <- .ldRefSource(x) + b <- .ldRefSource(first) + identical(a$path, b$path) && + identical(a$format, b$format) && + identical(.ssSampleIds(x), .ssSampleIds(first)) +} + +# An LD reference's samples: a panel's columns, a bare handle's sample ids. +# @noRd +.ssSampleIds <- function(x) { + if (methods::is(x, "GenotypeHandle")) sampleIds(x) else colnames(x) } # The parts' snpInfo rows, de-duplicated by variant id and returned in genomic diff --git a/R/twasWeights.R b/R/twasWeights.R index 0fcc17316..6d05440bb 100644 --- a/R/twasWeights.R +++ b/R/twasWeights.R @@ -26,7 +26,7 @@ # DFrame-subclass collection keyed by the identity tuple (study, context, # trait, method). Each row holds a TwasWeightsRow payload (variant ids # + per-variant weight vector/matrix). Class-level slots: -# * ldSketch GenotypeHandle (NULL for individual-level fits, the +# * ldReference GenotypeHandle (NULL for individual-level fits, the # LD-sketch handle for RSS-derived weights). # Constructor + accessors below. The twasWeights pipeline helpers # (learnTwasWeights, CV, ensemble, etc.) follow at the bottom. @@ -52,21 +52,22 @@ NULL #' column lists the semicolon-joined members of the joined axis. For non-joint #' rows the joint columns are \code{NA_character_}. Tuple uniqueness is enforced #' jointly across the identity-tuple columns and any present joint columns. -#' @slot ldSketch The LD reference genotype panel the weights were -#' derived against, or \code{NULL} when the weights were learned from -#' individual-level data. Used downstream for cross-pipeline LD-sketch -#' identity validation. +#' @slot ldReference The LD reference the weights were derived against (a +#' genotype panel, a \code{GenotypeMixture} or an \code{LdMatrix}), or +#' \code{NULL} when the weights were learned from individual-level data. +#' Used downstream to check that pipelines combining results share one LD +#' reference. #' @export setClass( "TwasWeights", contains = "RangedTupleList", - representation(ldSketch = "LdSketch_OR_NULL"), + representation(ldReference = "LdReference_OR_NULL"), validity = function(object) .validateTwasWeights(object) ) # Validity for the TwasWeights collection: required columns, entry payloads, # region/traitPos provenance, joint* column types, tuple uniqueness, and the -# optional ldSketch. Returns TRUE or a character vector of error messages. +# optional ldReference. Returns TRUE or a character vector of error messages. # @noRd #' @importFrom checkmate makeAssertCollection assertNames .validateTwasWeights <- function(object) { @@ -170,7 +171,7 @@ setClass( #' shape as \code{jointStudies}. #' @param jointTraits Optional character vector for cross-trait joints. Same #' shape as \code{jointStudies}. -#' @param ldSketch An optional genotype panel (see +#' @param ldReference An optional genotype panel (see #' \code{\link{readGenotypes}}), or \code{NULL} for individual-level fits. #' @param traitPos Optional per-row trait genomic anchor (a \code{GRanges} or #' \code{NULL}), carried forward as provenance; not part of the identity key. @@ -202,7 +203,7 @@ TwasWeights <- function( jointTraits = NULL, traitPos = NULL, region = NULL, - ldSketch = NULL + ldReference = NULL ) { .twasAssertArgs( studyName, @@ -230,13 +231,7 @@ TwasWeights <- function( region, n ) - obj <- new( - "TwasWeights", - .rtlGrlWithMetadata(entry, cols), - ldSketch = .asLdSketch(ldSketch) - ) - validObject(obj) - obj + .rtlNewValidated("TwasWeights", entry, cols, ldReference) } # The identity and joint-axis arguments, checked. Mirrors @@ -302,24 +297,11 @@ TwasWeights <- function( .appendRegionCol(.appendTraitPosCol(withJoint, traitPos, n), region, n) } -# One entry -> its element: the variants as a GRanges, with the per-variant -# weights carried in the element's own mcols alongside the alleles. -# @noRd - -# The non-variant half of each entry, as outer mcols columns. Objects of -# arbitrary shape (fits, cvResult, dataType) ride in SimpleLists. -# @noRd - # @noRd .twPayloadStandardized <- function(p) { weightStandardized(p) } -# Every `entry` must be a TwasWeightsRow. Checked before the payload is -# unpacked, so a wrong type reports itself rather than surfacing as a missing -# method on whatever was passed instead. -# @noRd - # Require study/context/trait/method/entry to share one length; returns it. # @noRd .twasCheckRowLengths <- function(studyName, context, trait, method, entry) { @@ -432,15 +414,6 @@ setMethod( mcols(x[[i]])$weight } -# Rebuild the TwasWeightsRow for a tuple from its stored element(s). -# -# The entry is a DERIVED VIEW, not stored state: the variants live in the -# element, the weights in that element's mcols, and the rest of the payload in -# the collection's mcols. A tuple split across chromosomes owns several -# elements, so they are stitched back into the single entry callers expect -- -# the same contract sumStats() keeps. -# @noRd - # The row payload a (study, context, trait, method) selector pins. # # Read directly rather than via twasWeights(): that accessor returns a @@ -609,9 +582,9 @@ setMethod( #' @export setMethod("studyName", "TwasWeights", function(x) unique(as.character(x$study))) -#' @rdname ldSketch +#' @rdname ldReference #' @export -setMethod("ldSketch", "TwasWeights", function(x) x@ldSketch) +setMethod("ldReference", "TwasWeights", function(x) x@ldReference) #' @rdname contexts #' @export @@ -645,12 +618,12 @@ setMethod("show", "TwasWeights", function(object) { .trim = FALSE )) } - ldSrc <- if (is.null(object@ldSketch)) { + ldSrc <- if (is.null(object@ldReference)) { "NULL (individual-level fit)" } else { - .ldSketchLabel(object@ldSketch) + .ldRefLabel(object@ldReference) } - cat(glue(" LD sketch: {ldSrc}\n", .trim = FALSE)) + cat(glue(" LD reference: {ldSrc}\n", .trim = FALSE)) }) @@ -715,7 +688,7 @@ setMethod("show", "TwasWeights", function(object) { mrash = list( fn = "mrash_weights", impl = "mrashWeights", - args = list(initPriorSd = TRUE, max.iter = 100) + args = list(max.iter = 100) ), enet = list(fn = "enet_weights", impl = "enetWeights", args = list()), lasso = list( @@ -857,7 +830,7 @@ setMethod("show", "TwasWeights", function(object) { # fit enters -- not by reading the sources, which hides forwarding behind # list_modify()/exec() and imported-without-:: calls. test_twasWeights.R # re-traces them and fails if one drifts. -# @noRd + # Which wrapper and engine each TWAS weight method actually reaches. Split # by data path because the two share almost nothing: a method's individual # and summary-statistic routes usually run different engines entirely, and @@ -909,7 +882,12 @@ setMethod("show", "TwasWeights", function(object) { } # Summary statistics: each chain ends in pecotmr's own RSS solver or an -# upstream *.rss entry point, never the individual-level engine. +# upstream *.rss entry point, never the individual-level engine. pecotmr's +# solvers are reached through their LD-source paths (.penalizedRssPath(), +# .lassosumRssPath(), .prsCsRun(), .sdprRun()), which take the options of +# penalizedRss(), lassosumRss(), prsCs() and sdpr() under the same names, so +# a genotype reference can be used through its factor without forming the LD +# matrix. # @noRd .twasMethodChainsSumstat <- function() { list( @@ -917,26 +895,26 @@ setMethod("show", "TwasWeights", function(object) { "scadRssWeights", ".penalizedRssWeights", ".rssShrinkGridWeights", - "penalizedRss" + ".penalizedRssPath" ), mcp = c( "mcpRssWeights", ".penalizedRssWeights", ".rssShrinkGridWeights", - "penalizedRss" + ".penalizedRssPath" ), l0learn = c( "l0learnRssWeights", ".rssShrinkGridWeights", - "penalizedRss" + ".penalizedRssPath" ), lasso = c( "lassosumRssWeights", ".rssShrinkGridWeights", - "lassosumRss" + ".lassosumRssPath" ), - prsCs = c("prsCsWeights", "prsCs"), - dprGibbs = c("sdprWeights", "sdpr"), + prsCs = c("prsCsWeights", ".prsCsRun"), + dprGibbs = c("sdprWeights", ".sdprRun"), mrash = c("mrashRssWeights", "susieR::mr.ash.rss"), mrmash = c( "mrmashRssWeights", @@ -964,7 +942,9 @@ setMethod("show", "TwasWeights", function(object) { "Y", "y", "stat", + "ldReference", "LD", + "ld", "bhat", "shat", "R", @@ -994,7 +974,7 @@ setMethod("show", "TwasWeights", function(object) { fn <- if (str_detect(nm, fixed("::"))) { .engineCallee(nm) } else { - tryCatch( + try_fetch( get(nm, envir = asNamespace("pecotmr")), error = function(cnd) NULL ) @@ -1028,11 +1008,6 @@ setMethod("show", "TwasWeights", function(object) { } -# The argument constructor for each weight-method token. Several tokens share -# an engine, so this maps token -> constructor rather than token -> package. -# Tokens absent from this list take no options at all; .twasTokenNoArgsReason -# says why, so the error can be specific. -# @noRd # The implementation that runs one method on one input path. # @noRd .twasMethodImplFor <- function(token, inputKind) { @@ -1060,7 +1035,7 @@ setMethod("show", "TwasWeights", function(object) { if (is.null(impl)) { return(NULL) } - fn <- tryCatch( + fn <- try_fetch( get(impl, envir = asNamespace("pecotmr")), error = function(cnd) NULL ) @@ -1083,7 +1058,7 @@ setMethod("show", "TwasWeights", function(object) { if (is.null(nm)) { return(NULL) } - tryCatch( + try_fetch( get(nm, envir = asNamespace("pecotmr")), error = function(cnd) NULL ) @@ -1105,7 +1080,8 @@ setMethod("show", "TwasWeights", function(object) { .twasMethodsFor <- function(inputKind) { conf <- keep( .twasConfigurableMethods(), - function(tk) !is.null(.twasMethodImplFor(tk, inputKind)) + .twasMethodRunsOn, + inputKind = inputKind ) unique(c( conf, @@ -1113,6 +1089,12 @@ setMethod("show", "TwasWeights", function(object) { )) } +# Whether configurable method `token` has an implementation on `inputKind`. +# @noRd +.twasMethodRunsOn <- function(token, inputKind) { + !is.null(.twasMethodImplFor(token, inputKind)) +} + # Every configurable method's name, independent of input path. The answer to # "is this a method that takes options", which the token normalisers ask. # @noRd @@ -1120,21 +1102,6 @@ setMethod("show", "TwasWeights", function(object) { names(.twasMethodCapabilities) } -# Path-blind view, kept for the callers that have not yet been taught which -# input class they are serving: the individual-level constructor, or the -# summary-statistics one for a method that only runs there (prsCs). -# @noRd -.twasMethodCtors <- function() { - toks <- .twasConfigurableMethods() - set_names( - map(toks, function(tk) { - .twasMethodCtorFor(tk, "QtlDataset") %||% - .twasMethodCtorFor(tk, "QtlSumStats") - }), - toks - ) -} - # Why a token takes no options, so the error can say something useful rather # than just "unknown method". # @noRd @@ -1460,15 +1427,15 @@ setMethod("show", "TwasWeights", function(object) { # the fit it needs. These wrappers extract weights from an existing fit and # never fine-map, so the run is already doomed; checking here reports the # missing fit by name instead of surfacing it from inside the per-fold map. -# `available(token)` answers "is this token's fit present?" for the caller's -# own supply channel. +# `available(token, ...)` answers "is this token's fit present?" for the +# caller's own supply channel; `...` carries what that channel needs. # @noRd -.twasRequireSusieFits <- function(weightMethods, available, fnLabel, how) { +.twasRequireSusieFits <- function(weightMethods, available, fnLabel, how, ...) { tokens <- .twasSusieTokensRequested(weightMethods) if (length(tokens) == 0L) { return(invisible(NULL)) } - missing <- tokens[!map_lgl(tokens, available)] + missing <- tokens[!map_lgl(tokens, available, ...)] if (length(missing) == 0L) { return(invisible(NULL)) } @@ -1895,7 +1862,7 @@ twasWeightsCv <- function( # fit trained on a different split has seen some of this split's held-out # samples, so its out-of-fold predictions are contaminated and the CV metrics # come out optimistic -- silently. Fits carry the producer's partition -# fingerprint (see .cvPartitionKey); anything unstamped is refused too, since +# fingerprint (see .cvPartitionKey); a fit carrying none is refused too, since # it cannot be shown to match. # @noRd .twasCheckFoldFitPartition <- function(fittedModelsCv, samplePartitions) { @@ -2028,15 +1995,14 @@ twasWeightsCv <- function( .twasCheckFoldFitPartition(fittedModelsCv, samplePartitions) .twasRequireSusieFits( weightMethods, - available = function(tk) { - !is.null(.twasFoldFitsFor(fittedModelsCv, tk)) - }, + available = .twasFoldFitAvailable, fnLabel = "twasWeightsCv", how = str_c( "Cross-validation refits on each fold, so it needs that fold's ", "own fit: pass `fittedModelsCv = list( = )` ", "from a fineMappingPipeline() run with cvFolds > 1." - ) + ), + fittedModelsCv = fittedModelsCv ) if (is.null(seed) && !exists(".Random.seed") && verbose >= 1) { inform(str_c( @@ -2047,6 +2013,12 @@ twasWeightsCv <- function( .twasAsMethodRecord(weightMethods) } +# Whether `fittedModelsCv` carries per-fold fits for `tk`. +# @noRd +.twasFoldFitAvailable <- function(tk, fittedModelsCv) { + !is.null(.twasFoldFitsFor(fittedModelsCv, tk)) +} + # Fit one TWAS weight method by name against the filtered design matrix, # embedding the fitted weights back into the full variant space. `ctx` carries # the shared fit state (X, Y, Xfiltered, validColumns, fitRetention, @@ -2321,8 +2293,9 @@ twasWeightsCv <- function( #' are already standardized. Default \code{FALSE}. #' @param weightsDataType Character or \code{NULL}. Data-type label recorded on #' the weights (e.g. \code{"individual"}). -#' @param ldSketch A genotype panel (see \code{\link{readGenotypes}}) to -#' record on the weights as their LD sketch, or \code{NULL}. +#' @param ldReference An LD reference (a genotype panel, see +#' \code{\link{readGenotypes}}, a \code{GenotypeMixture} or an +#' \code{LdMatrix}) to record on the weights, or \code{NULL}. #' @param seed Integer or \code{NULL}. When supplied, seeds the main-process #' RNG and the parallel method-fitting RNG via the \code{BiocParallel} #' \code{RNGseed}, for reproducibility under multi-threading. The @@ -2360,7 +2333,7 @@ learnTwasWeights <- function( fitRetention = c("none", "slim", "full"), weightStandardized = FALSE, weightsDataType = NULL, - ldSketch = NULL, + ldReference = NULL, verbose = 1, seed = NULL ) { @@ -2391,7 +2364,7 @@ learnTwasWeights <- function( fitRetention = fitRetention, weightStandardized = weightStandardized, weightsDataType = weightsDataType, - ldSketch = ldSketch, + ldReference = ldReference, verbose = verbose, seed = seed ) @@ -2479,17 +2452,15 @@ learnTwasWeights <- function( .twasRequireLearnFits <- function(resolvedMethods, fittedModels) { .twasRequireSusieFits( resolvedMethods, - available = partial( - .twasLearnFitAvailable, - resolvedMethods = resolvedMethods, - fittedModels = fittedModels - ), + available = .twasLearnFitAvailable, fnLabel = "learnTwasWeights", how = str_c( "Pass it as `fittedModels = list( = )`, or on the ", "method's own arguments; run fineMappingPipeline() first to ", "produce one." - ) + ), + resolvedMethods = resolvedMethods, + fittedModels = fittedModels ) } @@ -2505,7 +2476,7 @@ learnTwasWeights <- function( fitRetention, weightStandardized, weightsDataType, - ldSketch, + ldReference, verbose, seed ) { @@ -2539,7 +2510,7 @@ learnTwasWeights <- function( ) |> .twasApplyRownames(X) rows <- .buildTwasWeightEntries(weightsList, .twasVariantIds(X), ctx) - .twasLearnResult(rows, ldSketch) + .twasLearnResult(rows, ldReference) } # The learn path's column-wise row record as a TwasWeights collection. NOT @@ -2547,14 +2518,14 @@ learnTwasWeights <- function( # and map_chr()s across them -- a different input entirely, and sharing a # name with it would let collate order decide which one a call reaches. # @noRd -.twasLearnResult <- function(rows, ldSketch) { +.twasLearnResult <- function(rows, ldReference) { TwasWeights( studyName = rows$study, context = rows$context, trait = rows$trait, method = rows$method, entry = rows$entry, - ldSketch = ldSketch + ldReference = ldReference ) } @@ -2748,7 +2719,7 @@ estimateSparsity <- function(weightResults) { } # Route a caller's per-method arguments into a weight function. A wrapper's -# own formals (a pre-fit, fitRetention, initPriorSd, ...) bind by name; any +# own formals (a pre-fit, fitRetention, ...) bind by name; any # else is a tool option and goes in the wrapper's `methodArgs` list, so an # unknown option errors inside the wrapper rather than vanishing. Wrappers # with no `methodArgs` formal get everything by name, and R reports an unused diff --git a/R/twasWeightsPipeline.R b/R/twasWeightsPipeline.R index 3cc2440ed..cb865b6cd 100644 --- a/R/twasWeightsPipeline.R +++ b/R/twasWeightsPipeline.R @@ -7,12 +7,12 @@ # and pads a side lacking an optional column such as joint* / region). # @noRd #' @importFrom checkmate assertClass -.rbindTwasWeights <- function(a, b, ldSketch = NULL) { +.rbindTwasWeights <- function(a, b, ldReference = NULL) { assertClass(a, "TwasWeights") assertClass(b, "TwasWeights") # Carry forward every column (joint*, region, ...) and reconcile the # collection-level slots via the shared combine. - .combineTupleCollections(list(a, b), ldSketch, ".rbindTwasWeights") + .combineTupleCollections(list(a, b), ldReference, ".rbindTwasWeights") } # Normalize combine() varargs: accept either N objects or a single list of @@ -49,8 +49,8 @@ #' #' @param ... Two or more \code{TwasWeights} objects, or a single \code{list} of #' them. -#' @param ldSketch Optional genotype panel (see \code{\link{readGenotypes}}) to -#' attach to the +#' @param ldReference Optional genotype panel (see \code{\link{readGenotypes}}) +#' to attach to the #' combined collection. Default \code{NULL}. Applied when combining two or #' more inputs; a single input is returned unchanged. #' @return A single combined \code{TwasWeights}. @@ -66,9 +66,9 @@ #' combineTwasWeights(tw1, tw2) #' @importFrom stringr str_starts #' @export -combineTwasWeights <- function(..., ldSketch = NULL) { +combineTwasWeights <- function(..., ldReference = NULL) { parts <- .asCombineList(list(...), "TwasWeights", "combineTwasWeights") - .combineTupleCollections(parts, ldSketch, "combineTwasWeights") + .combineTupleCollections(parts, ldReference, "combineTwasWeights") } # --- Multi-region (jointRegions) helpers for the QtlDataset method ---------- @@ -169,21 +169,6 @@ combineTwasWeights <- function(..., ldSketch = NULL) { ) } -# Mapping from short / canonical TWAS weight-method name to dispatch -# capability. Used to reject incompatible (input class, method) pairs. -# -# `allowsIndiv` : may be invoked on a QtlDataset (individual-level X, Y). -# `allowsRss` : may be invoked on a QtlSumStats / GwasSumStats (RSS). -# `multivariate` : requires a multi-trait / multi-context Y (mvsusie / -# mr.mash family). -# -# Rules from `dev/refactor-design.md` (`twasWeightsPipeline` row): -# - PRS-CS is RSS-only. -# - BGLR / CRAN-stable qgg methods (bayes_a/b/c/l/n/r, b_lasso, dpr_*) -# are individual-level only. -# - mr.mash / mvsusie follow the multi-trait / multi-context rules of -# the mvSuSiE fine-mapping family. -# @noRd # User-facing TWAS method tokens are unified across input classes; # auto-dispatch picks the individual-level vs sumstat implementation based # on the QtlDataset / QtlSumStats input. Each entry records: @@ -198,9 +183,10 @@ combineTwasWeights <- function(..., ldSketch = NULL) { # b_lasso) are individual-only until the qgg CRAN release adds qBayes # sumstat support. dpr_gibbs has the SDPR sumstat counterpart; # dpr_vb / dpr_adaptive_gibbs remain individual-only. enet has no cpp11 -# sumstat solver yet (lassosumRssRcpp is pure L1, no alpha mixing) and is +# sumstat solver yet (lassosumRssCpp is pure L1, no alpha mixing) and is # documented as individual-only for now. prsCs has no individual-level # counterpart (it is a sumstat-only Bayesian shrinkage method). +# @noRd .twasMethodCapabilities <- list( # NOTE: fine-mapping methods (susie / susieInf / susieAsh / mvsusie / # fsusie) are NOT listed here. Their availability is governed by @@ -369,11 +355,6 @@ combineTwasWeights <- function(..., ldSketch = NULL) { list(tokens = unique(methods), methodList = methodList) } -# Named-list `methods`: re-key each entry to its canonical `_weights` -# name, merge the caller's kwargs over the method's defaults, and carry the -# token->impl map as an "impl" attribute (without this, downstream -# .resolveMethodFunction falls back to the bare token, which is not a function). -# @noRd # One `methods` entry re-keyed to its canonical name, with the caller's # kwargs merged over the method's defaults. A token with no learner default # is kept under its own name (the capability gate reports it downstream). @@ -393,6 +374,11 @@ combineTwasWeights <- function(..., ldSketch = NULL) { ) } +# Named-list `methods`: re-key each entry to its canonical `_weights` +# name, merge the caller's kwargs over the method's defaults, and carry the +# token->impl map as an "impl" attribute (without this, downstream +# .resolveMethodFunction falls back to the bare token, which is not a function). +# @noRd .twasNormalizeListMethods <- function(methods) { entries <- map(names(methods), .twasNormalizeOneMethod, methods = methods) # Later entries win on a repeated canonical key, as the keyed assignment @@ -610,7 +596,7 @@ combineTwasWeights <- function(..., ldSketch = NULL) { } # Canonical fine-mapping tokens actually present as methods in a -# FineMappingResult, matched tolerantly across canonical / camelCase / +# fine-mapping result, matched tolerantly across canonical / camelCase / # snake_case spellings (mirrors the candidate logic in .twasFineMappingFits). # @noRd .twasFineMappingMethodsPresent <- function(fineMappingResult) { @@ -641,7 +627,7 @@ combineTwasWeights <- function(..., ldSketch = NULL) { } # Reject fine-mapping methods (susie / susieInf / susieAsh / mvsusie / -# fsusie) when no FineMappingResult is supplied. twasWeightsPipeline is +# fsusie) when no fine-mapping result is supplied. twasWeightsPipeline is # not allowed to re-fit fine-mapping models from scratch; users must run # fineMappingPipeline() first and pass the result via `fineMappingResult`. # Input-class compatibility (e.g. fsusie has no QtlSumStats path) is @@ -653,7 +639,8 @@ combineTwasWeights <- function(..., ldSketch = NULL) { tokens, fineMappingResult, inputKind, - cvFolds = 0 + cvFolds = 0, + fitFullData = TRUE ) { fmTokens <- intersect(tokens, .twasFineMappingTokens()) if (length(fmTokens) == 0L) { @@ -666,16 +653,19 @@ combineTwasWeights <- function(..., ldSketch = NULL) { .twasRequireFmResult(fineMappingResult, fmTokens) .twasCheckFmPresent(fmTokens, fineMappingResult) .twasCheckFmCvPresent(fmTokens, fineMappingResult, cvFolds) + if (isTRUE(fitFullData)) { + .twasCheckFmFullFits(fmTokens, fineMappingResult) + } invisible(NULL) } -# Whether row `i` of a FineMappingResult carries a cross-validation result. +# Whether row `i` of a fine-mapping result carries a cross-validation result. # @noRd .fmrRowHasCv <- function(i, fineMappingResult) { !is.null(cvResult(.fmrRowParts(fineMappingResult, i))) } -# Whether a FineMappingResult carries any cross-validation result at all. +# Whether a fine-mapping result carries any cross-validation result at all. # @noRd .fmrAnyCvResult <- function(fineMappingResult) { if (!is(fineMappingResult, "FineMappingResultBase")) { @@ -715,6 +705,31 @@ combineTwasWeights <- function(..., ldSketch = NULL) { abort(msg) } +# Full-data weights for a fine-mapping-derived method are read off the +# fine-mapping fit, so a row from a cross-validation-only fine-mapping run +# (CrossValidationParam(fitFullData = FALSE)) cannot supply them. Say so up +# front rather than failing inside the extraction. +# @noRd +.twasCheckFmFullFits <- function(fmTokens, fineMappingResult) { + rows <- seq_len(nrow(fineMappingResult)) + method <- as.character(fineMappingResult$method) + noFit <- rows[ + is_in(method, fmTokens) & + !map_lgl(rows, .fmrRowHasFit, fineMappingResult = fineMappingResult) + ] + if (length(noFit) == 0L) { + return(invisible(NULL)) + } + msg <- glue( + "twasWeightsPipeline: {length(noFit)} fineMappingResult row(s) for ", + "{str_flatten(unique(method[noFit]), ', ')} carry no full-data fit -- ", + "they come from a cross-validation-only fine-mapping run. Rerun ", + "fineMappingPipeline() with CrossValidationParam(fitFullData = TRUE), ", + "or run twasWeightsPipeline() cross-validation-only as well." + ) + abort(msg) +} + # Reject fine-mapping methods that have no TWAS-weight extractor (e.g. fsusie). # @noRd .twasCheckFmAdapters <- function(fmTokens) { @@ -732,7 +747,7 @@ combineTwasWeights <- function(..., ldSketch = NULL) { } # A supplied fineMappingResult is mandatory (fine-mapping is never re-fit) and -# must be a FineMappingResult. +# must be a FineMappingResultBase. # @noRd #' @importFrom checkmate assertClass .twasRequireFmResult <- function(fineMappingResult, fmTokens) { @@ -742,7 +757,7 @@ combineTwasWeights <- function(..., ldSketch = NULL) { "twasWeightsPipeline: method(s) {fmStr} are fine-mapping ", "methods and may not be re-fit by twasWeightsPipeline. Run ", "fineMappingPipeline() first and pass the result via ", - "`fineMappingResult = `." + "`fineMappingResult = `." ) abort(msg) } @@ -766,7 +781,7 @@ combineTwasWeights <- function(..., ldSketch = NULL) { "twasWeightsPipeline: method(s) {missingStr} were requested but ", "the supplied fineMappingResult contains no such fine-mapping ", "fit. Run fineMappingPipeline() with method(s) {missingStr} first ", - "and pass the result via `fineMappingResult = `." + "and pass the result via `fineMappingResult = `." ) abort(msg) } @@ -788,11 +803,6 @@ combineTwasWeights <- function(..., ldSketch = NULL) { FALSE } -# Enforce the multi-trait / multi-context rule for mvsusie / mr.mash -# methods (same family as the fine-mapping mvSuSiE rule in the design -# doc). Multivariate methods need at least 2 traits *or* at least 2 -# contexts in the Y matrix passed to learnTwasWeights. -# @noRd # The multivariate rule across a MultiStudyQtlDataset's components. # # A multivariate method -- mvsusie, mr.mash, fsusie, and the PCA alternative @@ -835,13 +845,18 @@ combineTwasWeights <- function(..., ldSketch = NULL) { # @noRd .twasComponentIsUnivariate <- function(key, components) { d <- components[[key]] - nTraits <- length(tryCatch(traitNames(d), error = function(cnd) { + nTraits <- length(try_fetch(traitNames(d), error = function(cnd) { character(0) })) - nCtx <- length(tryCatch(contexts(d), error = function(cnd) character(0))) + nCtx <- length(try_fetch(contexts(d), error = function(cnd) character(0))) nTraits < 2L && nCtx < 2L } +# Enforce the multi-trait / multi-context rule for mvsusie / mr.mash +# methods (same family as the fine-mapping mvSuSiE rule in the design +# doc). Multivariate methods need at least 2 traits *or* at least 2 +# contexts in the Y matrix passed to learnTwasWeights. +# @noRd .twasCheckMultivariateY <- function(tokens, nTraits, nContexts) { multivariateTokens <- tokens[map_lgl(tokens, .twasIsMultivariateToken)] if (length(multivariateTokens) == 0L) { @@ -858,7 +873,10 @@ combineTwasWeights <- function(..., ldSketch = NULL) { } } -# Reject SumStats inputs that have not been QC'd via summaryStatsQc. +# Reject SumStats inputs that have not been QC'd via summaryStatsQc(), which +# is mandatory before twasWeightsPipeline for SumStats input: it also drops the +# variants absent from the ldReference, so once this passes every entry's SNP +# set is a subset of the ldReference panel. # @noRd .twasAssertQcd <- function(sumstats) { if (length(qcInfo(sumstats)) == 0L) { @@ -900,7 +918,7 @@ combineTwasWeights <- function(..., ldSketch = NULL) { .twrRowParts(twasWeights, idx[[1L]]) } -# Convert a FineMappingResult (single-method susie/susie_inf row matched +# Convert a fine-mapping result (single-method susie/susie_inf row matched # to the requested study/context/trait) into a `fittedModels` list # suitable for `learnTwasWeights`. Pulls the trimmedFit from the matching # entry. Returns a (possibly empty) list. @@ -977,17 +995,6 @@ combineTwasWeights <- function(..., ldSketch = NULL) { fits[[token]] } -# Collect the cross-validation payload that fineMappingPipeline stored on the -# FineMappingResult for one (study, context, trait) tuple. fineMapping records -# one cvResult per (study, context, trait, method) entry (samplePartition + -# per-fold predictions/metrics, keyed by the TWAS snake method name); this -# merges them across the fine-mapping methods of the tuple into a single -# twasWeightsCv()-shaped list so twasWeightsPipeline can reuse the partition and -# feed those out-of-fold predictions into the SR-TWAS ensemble without re- -# fitting the fine-mapping models. A multi-region entry stores cvResult as a -# per-region list; the first region carrying CV is used. Returns NULL when no -# fine-mapping entry for the tuple recorded CV. -# @noRd # Concatenate per-row lists, empty-safe. # @noRd .twasCvConcat <- function(pieces) { @@ -1016,6 +1023,17 @@ combineTwasWeights <- function(..., ldSketch = NULL) { hit[[1L]] } +# Collect the cross-validation payload that fineMappingPipeline stored on the +# fine-mapping result for one (study, context, trait) tuple. It records one +# cvResult per (study, context, trait, method) entry (samplePartition + +# per-fold predictions/metrics, keyed by the TWAS snake method name); this +# merges them across the fine-mapping methods of the tuple into a single +# twasWeightsCv()-shaped list so twasWeightsPipeline can reuse the partition and +# feed those out-of-fold predictions into the SR-TWAS ensemble without re- +# fitting the fine-mapping models. A multi-region entry stores cvResult as a +# per-region list; the first region carrying CV is used. Returns NULL when no +# fine-mapping entry for the tuple recorded CV. +# @noRd .twasCvResultFor <- function(fineMappingResult, studyName, context, trait) { if (is.null(fineMappingResult)) { return(NULL) @@ -1056,8 +1074,9 @@ combineTwasWeights <- function(..., ldSketch = NULL) { #' \itemize{ #' \item a \code{\link{QtlDataset}} for individual-level cohort fits; #' \item a \code{\link{QtlSumStats}} for per-trait RSS fits; -#' \item a \code{\link{GwasSumStats}} for per-LD-block PRS-CS-style fits -#' from GWAS summary statistics. +#' \item a \code{\link{MultiStudyQtlDataset}}, whose individual-level +#' studies and optional summary-statistic studies are each fitted, +#' then combined. #' } #' #' Method-restriction rules (enforced): @@ -1065,33 +1084,35 @@ combineTwasWeights <- function(..., ldSketch = NULL) { #' \item \code{mr.mash}, \code{mvsusie} follow the multi-trait / #' multi-context rules of the fine-mapping \code{mvsusie} family #' (require at least two traits OR at least two contexts). -#' \item RSS-only methods (PRS-CS, \code{lassosumRss}, SDPR, all -#' \code{*Rss} variants) are rejected on \code{QtlDataset} -#' input. -#' \item Individual-level-only methods (BGLR and CRAN-stable qgg: -#' \code{bayes_a/b/c/l/n/r}, \code{b_lasso}, \code{dpr_*}) are -#' rejected on \code{QtlSumStats} / \code{GwasSumStats} input. +#' \item \code{prsCs} runs only on summary statistics, so it is rejected +#' on \code{QtlDataset} input. +#' \item \code{enet}, \code{dprVb}, \code{dprAdaptiveGibbs} and the +#' Bayesian alphabet (\code{bayesA}, \code{bayesB}, \code{bayesC}, +#' \code{bayesL}, \code{bayesN}, \code{bayesR}, \code{bLasso}) run +#' only on individual-level data, so they are rejected on +#' \code{QtlSumStats} input. #' } #' -#' Both \code{QtlSumStats} and \code{GwasSumStats} inputs must have been QC'd -#' via \code{\link{summaryStatsQc}} first; otherwise an error is raised pointing +#' A \code{QtlSumStats} input must have been QC'd via +#' \code{\link{summaryStatsQc}} first; otherwise an error is raised pointing #' at that function. #' -#' The returned \code{\link{TwasWeights}} collection's \code{ldSketch} slot is -#' set automatically: \code{NULL} for individual-level fits, the input's -#' \code{ldSketch} for RSS-derived fits. +#' The returned \code{\link{TwasWeights}} collection's \code{ldReference} slot +#' is set automatically: \code{NULL} for individual-level fits, the input's +#' \code{ldReference} for RSS-derived fits. #' -#' Optionally a \code{FineMappingResult} may be supplied as a source of pre-fit -#' SuSiE / SuSiE-inf / SuSiE-ash objects; their \code{trimmedFit} payloads are -#' passed through to \code{learnTwasWeights} / the RSS sub-pipelines via the +#' Optionally a \code{QtlFineMappingResult} may be supplied as a source of +#' pre-fit SuSiE / SuSiE-inf / SuSiE-ash objects; their stored fits are passed +#' through to \code{learnTwasWeights} / the RSS sub-pipelines via the #' \code{fittedModels} slot, avoiding a re-fit. #' -#' When the supplied \code{FineMappingResult} was produced with cross-validation -#' (\code{fineMappingPipeline(..., cvFolds > 1)}), each matching \code{(study, -#' context, trait)} entry's \code{cvResult} is reused: its fold partition -#' becomes the CV partition (unless \code{samplePartition} is given explicitly) -#' and its per-fold out-of-fold predictions/metrics are fed directly into the -#' SR-TWAS ensemble in place of re-fitting those fine-mapping methods here. +#' When the supplied result was produced with cross-validation (a +#' \code{\link{CrossValidationParam}} with \code{folds >= 2}), each matching +#' \code{(study, context, trait)} entry's \code{cvResult} is reused: its fold +#' partition becomes the CV partition (unless \code{samplePartition} is given +#' explicitly) and its per-fold out-of-fold predictions/metrics are fed +#' directly into the SR-TWAS ensemble in place of re-fitting those +#' fine-mapping methods here. #' Non-fine-mapping methods (lasso, enet, ...) are still cross-validated on the #' same shared partition. #' @@ -1101,14 +1122,25 @@ combineTwasWeights <- function(..., ldSketch = NULL) { #' embedded \code{QtlSumStats}, then rbinds the results. #' @param methods A character vector of short method names, a preset string #' (\code{"default"} or \code{"fastDefault"}), or a named list of -#' \code{_weights = args} entries. For QtlSumStats / GwasSumStats -#' inputs the default switches to the RSS preset (\code{c("susieRss", -#' "susieInfRss", "lassosumRss", "prsCs", "sdpr")}). -#' @param contexts Optional character vector of contexts to restrict processing -#' to (QtlDataset / QtlSumStats inputs). Default \code{NULL} (use all -#' contexts). -#' @param traitId Optional character vector of trait identifiers to restrict -#' processing to (QtlDataset / QtlSumStats inputs). Default \code{NULL}. +#' \code{_weights = args} entries. For QtlSumStats input the +#' default is \code{c("lasso", "prsCs", "dprGibbs")}, which there run +#' lassosum, PRS-CS and SDPR; the fine-mapping methods are not in it, and +#' are requested by name together with a \code{fineMappingResult}. +#' @param contexts Optional context selection; \code{NULL} (the default) uses +#' every context. A character vector applies to every study: a context no +#' study has is an error, and one only some studies lack is skipped for +#' those, with a warning. A list keyed by study name picks each study's +#' contexts separately (\code{list(A = "liver")}); studies it does not name +#' keep all of theirs. +#' @param traitId Optional trait selection; \code{NULL} (the default) uses +#' every trait, or those overlapping \code{region} when one is given. A +#' character vector applies to every study. A list keyed by study name +#' picks each study's traits separately (\code{list(A = "ENSG1")}), and a +#' study's entry may itself be a list keyed by context +#' (\code{list(A = list(brain = "ENSG1"))}). Studies and contexts the list +#' does not name keep all of their traits. A joint fit spanning a study's +#' contexts uses every trait selected in any of them, minus the (context, +#' trait) pairs a per-context entry leaves out. #' @param region Optional variant window for QtlDataset trait selection: a #' \code{GRanges}, a \code{"chr:start-end"} string, or a one-row data.frame #' with \code{chrom}/\code{start}/\code{end}. Mutually exclusive with @@ -1117,17 +1149,17 @@ combineTwasWeights <- function(..., ldSketch = NULL) { #' position when extracting variants. Required when \code{traitId} is #' supplied. Mutually exclusive with \code{region}. #' @section Panel filters on the RSS path: On \code{QtlSumStats} input there -#' is no genotype matrix to filter, so \code{panelFilter}'s +#' is no genotype matrix to filter, so \code{panelFilterParam}'s #' \code{mafCutoff} / \code{macCutoff} / \code{imissCutoff} are measured #' against the \strong{LD reference panel} instead: a variant whose panel #' genotypes fall below the cutoffs is dropped before the z-scores and LD #' matrix are built. The thresholds mean the same thing as -#' \code{genotypeFilter}'s on the \code{QtlDataset} path (MAC is converted -#' to a MAF equivalent and the stricter of the two applies), so one number -#' carries across input types. The defaults filter nothing. +#' \code{genotypeFilterParam}'s on the \code{QtlDataset} path (MAC is +#' converted to a MAF equivalent and the stricter of the two applies), so +#' one number carries across input types. The defaults filter nothing. #' #' This discards \emph{observed} variants, unlike -#' \code{summaryStatsQc(imputeArgs = ...)}, which only bounds which variants +#' \code{summaryStatsQc(raissParam = ...)}, which only bounds which variants #' RAISS will impute. #' #' @param genotypeFilterParam For QtlDataset: per-call genotype-filter @@ -1149,14 +1181,20 @@ combineTwasWeights <- function(..., ldSketch = NULL) { #' flat \code{cvResult} data frame (one row per region). \code{TRUE} #' concatenates the ranges' genotypes into one joint fit. Ignored for a #' single-range / cis request. -#' @param jointSpecification Optional joint-fit specification (NULL by default). -#' When NULL, the pipeline runs the implicit multi-trait / multi-context -#' mr.mash branches as before. When non-NULL, the argument is parsed and -#' validated via the joint-spec grammar documented under -#' \code{parseJointSpecification}; the per-spec axis dispatcher implementation -#' is in progress and a non-NULL value currently errors with an informative -#' message. -#' @param fineMappingResult Optional \code{FineMappingResult}. When supplied, +#' @param jointSpecification Optional joint-fit specification saying which +#' axes \code{mrmash} fits across. When NULL (the default) it runs its +#' implicit multi-trait / multi-context fit. Otherwise give a character +#' vector of axes (one spec) or a list of specs. A spec is a character +#' vector drawn from \code{"study"}, \code{"context"} and \code{"trait"}, +#' or \code{list(axes = , scope = )}, where \code{scope} +#' (keys \code{study}, \code{context}, \code{trait}) limits the fit to the +#' listed values, each of which must exist in \code{data}. A list-form +#' spec always goes inside the outer list, even on its own. Other methods +#' run per (study, context, trait) as usual. The \code{"study"} axis needs +#' summary statistics: it is rejected on a \code{QtlDataset}, and on a +#' \code{MultiStudyQtlDataset} only the summary-statistics studies take +#' part. +#' @param fineMappingResult Optional \code{QtlFineMappingResult}. When supplied, #' its SuSiE / SuSiE-inf / SuSiE-ash trimmed fits for the matching (study, #' context, trait) tuples are injected into \code{learnTwasWeights} via #' \code{fittedModels} so SuSiE-family weight methods reuse the prior fit @@ -1172,9 +1210,9 @@ combineTwasWeights <- function(..., ldSketch = NULL) { #' produce one fit jointly across multiple \code{(context, trait)} columns. #' @param mashPrior Optional \code{\link{MashPrior}} (or coercible) supplying #' data-driven prior matrices for mr.mash weight methods; \code{NULL} to skip. -#' @param fitFullData Logical. If \code{TRUE}, fit final weights on the full -#' data after cross-validation. Default \code{TRUE}. -#' @param usePCA Logical (length 1). \code{QtlDataset} only. When +#' @param usePCA Logical (length 1). Individual-level data only: a +#' \code{QtlDataset}, or the \code{QtlDataset} components of a +#' \code{MultiStudyQtlDataset}. When #' \code{TRUE}, each multi-trait context is additionally PCA-reduced and #' weights are fitted for each top principal component \emph{as a trait} #' (\code{topPC1}, \code{topPC2}, ...), alongside the per-trait rows. The @@ -1191,18 +1229,21 @@ combineTwasWeights <- function(..., ldSketch = NULL) { #' takes, which has no \code{"none"} --- its \code{susieFit} slot is part #' of the returned object's contract. #' -#' \code{"full"} is honoured only by the mr.mash engines, the only ones -#' that distinguish the two retaining levels; every other method keeps its -#' fit whole or not at all. Requesting \code{"full"} for a run where no -#' method can honour it is an error, and a mixed run warns rather than -#' dropping it in silence. +#' \code{"full"} is honoured by the mr.mash engines and, on summary +#' statistics, by \code{lasso}, \code{scad}, \code{mcp} and +#' \code{l0learn}, whose full fit also keeps every candidate's +#' coefficients; every other method keeps its fit whole or not at all. +#' Requesting \code{"full"} for a run where no method can honour it is an +#' error, and a mixed run warns rather than dropping it in silence. #' @param naAction Character. How to handle missing values in the extracted #' data. -#' @param crossValidationArgs Cross-validation settings, built with +#' @param crossValidationParam Cross-validation settings, built with #' \code{\link{CrossValidationParam}}: \code{folds} (default \code{0}, no #' CV), \code{threads}, \code{samplePartition}, \code{maxVariants} (cap -#' on the CV design matrix) and \code{weightMethods} (which methods to -#' cross-validate; unset means every method with non-zero weights). +#' on the CV design matrix), \code{weightMethods} (which methods to +#' cross-validate; unset means every method with non-zero weights) and +#' \code{fitFullData} (\code{FALSE} keeps only the cross-validation +#' results; default \code{TRUE}). #' #' \code{folds} defaulted to \code{5} before, while #' \code{\link{fineMappingPipeline}}'s defaulted to \code{0}. The two now @@ -1211,16 +1252,16 @@ combineTwasWeights <- function(..., ldSketch = NULL) { #' Cross-validation holds out \strong{samples}, so it is not possible on #' \code{QtlSumStats} input; that method \strong{errors} if it is set #' rather than returning results that were never cross-validated. -#' @param ensembleArgs SR-TWAS ensemble settings, built with +#' @param ensembleParam SR-TWAS ensemble settings, built with #' \code{\link{EnsembleParam}}: \code{enabled} (default \code{FALSE}), #' \code{r2Threshold}, \code{solver} and \code{alpha}. Stacking reads #' out-of-fold predictions, so \code{enabled = TRUE} requires -#' \code{crossValidation} with \code{folds >= 2} and is an error +#' \code{crossValidationParam} with \code{folds >= 2} and is an error #' otherwise --- it previously returned a result quietly missing its #' ensemble row. #' @param estimatePi If TRUE, estimate spike-and-slab sparsity from mr.ash #' before BGLR / qgg spike-and-slab methods that consume it. -#' @param residualizationArgs Covariate residualization settings, built with +#' @param residualizationParam Covariate residualization settings, built with #' \code{\link{ResidualizationParam}} and forwarded to #' \code{\link{residualizedPhenotypes}} / #' \code{\link{residualizedGenotypes}}: \code{phenotypeCovariates} and @@ -1232,7 +1273,8 @@ combineTwasWeights <- function(..., ldSketch = NULL) { #' \code{QtlDataset} / \code{MultiStudyQtlDataset} input only. A #' \code{QtlSumStats} run has no covariates to regress out, so the bundle #' is \strong{ignored} there rather than refused --- unlike -#' \code{crossValidation}, which errors. Residualization is on by default, +#' \code{crossValidationParam}, which errors. Residualization is on by +#' default, #' so refusing a non-default value would reject the default bundle; CV is #' off by default, so a non-default value there is an explicit request for #' something the input cannot do. @@ -1270,8 +1312,8 @@ combineTwasWeights <- function(..., ldSketch = NULL) { #' @param ... Reserved for method-specific arguments. #' #' @return A \code{\link{TwasWeights}} collection keyed by \code{(study, -#' context, trait, method)}. The \code{ldSketch} slot is \code{NULL} for -#' individual-level fits and equals the input's \code{ldSketch} for +#' context, trait, method)}. The \code{ldReference} slot is \code{NULL} for +#' individual-level fits and equals the input's \code{ldReference} for #' RSS-derived fits. #' @examples #' data(qtlDatasetExample) @@ -1299,23 +1341,23 @@ setGeneric("twasWeightsPipeline", function(data, ...) { )) } -# Run the multivariate joint TWAS-weight fit over the (context, trait) grid for -# `traits`: dispatch each cis-region through the joint engine and merge -# per-region results. `marker` = the TwasJointPipeline config; `ctx` bundles the -# shared state -# (xRegions, data, norm, useCtx, fineMappingResult, dataDrivenPriorMatricesCv, -# cisWindow, verbose). +# Run joint specs through the engine over every region block of `ctx` and +# merge the per-region results by (study, context, trait, method). Shared by +# the per-tuple multivariate grid (a synthesized context x trait spec) and the +# explicit jointSpecification path, so both fit under the same pipeline +# `marker` and the same engine `args`. `ctx` is .twasJointSetup()'s record. # @noRd -.twasRunMultivariateGrid <- function(traits, marker, ctx) { - synthSpec <- list(list(axes = c("context", "trait"), scope = NULL)) +.twasRunJointSpecGrid <- function(spec, tokens, contexts, traits, marker, ctx) { allLabs <- map_chr(ctx$xRegions, .twasRegionLabel) allRegions <- map( seq_along(ctx$xRegions), - .twasMvGridRegion, - synthSpec = synthSpec, + .twasJointSpecRegion, + spec = spec, + tokens = tokens, + contexts = contexts, + traits = traits, marker = marker, - ctx = ctx, - traits = traits + ctx = ctx ) keep <- !map_lgl(allRegions, is.null) perRegion <- allRegions[keep] @@ -1343,21 +1385,25 @@ setGeneric("twasWeightsPipeline", function(data, ...) { fineMappingResult, dataDrivenPriorMatricesCv, cisWindow, - residualizationArgs, + residualizationParam, verbose ) { - .twasRunMultivariateGrid( - grid$allTraits, + # A per-context selection goes in whole: the joint scope then takes each + # study's union of it and drops the (context, trait) pairs it leaves out. + .twasRunJointSpecGrid( + list(list(axes = c("context", "trait"), scope = NULL)), + norm$tokens, + grid$useCtx, + grid$traitSelection %||% grid$allTraits, marker, list( xRegions = xRegions, data = data, norm = norm, - useCtx = grid$useCtx, fineMappingResult = fineMappingResult, dataDrivenPriorMatricesCv = dataDrivenPriorMatricesCv, cisWindow = cisWindow, - residualizationArgs = residualizationArgs, + residualizationParam = residualizationParam, verbose = verbose ) ) @@ -1378,7 +1424,7 @@ setGeneric("twasWeightsPipeline", function(data, ...) { dataDrivenPriorMatricesCv, cisWindow, naAction, - residualizationArgs, + residualizationParam, usePCA, nPCs, verbose @@ -1393,7 +1439,7 @@ setGeneric("twasWeightsPipeline", function(data, ...) { fineMappingResult = fineMappingResult, dataDrivenPriorMatricesCv = dataDrivenPriorMatricesCv, cisWindow = cisWindow, - residualizationArgs = residualizationArgs, + residualizationParam = residualizationParam, verbose = verbose )) } @@ -1401,6 +1447,7 @@ setGeneric("twasWeightsPipeline", function(data, ...) { studyName = grid$study, useCtx = grid$useCtx, allTraits = grid$allTraits, + traitSelection = grid$traitSelection, marker = marker, data = data, xRegions = xRegions, @@ -1410,7 +1457,7 @@ setGeneric("twasWeightsPipeline", function(data, ...) { dataDrivenPriorMatricesCv = dataDrivenPriorMatricesCv, cisWindow = cisWindow, naAction = naAction, - residualizationArgs = residualizationArgs, + residualizationParam = residualizationParam, usePCA = usePCA, nPCs = nPCs, verbose = verbose @@ -1423,20 +1470,27 @@ setGeneric("twasWeightsPipeline", function(data, ...) { .twasQdsAssertParams <- function( methods, fitRetention, - crossValidationArgs, - ensembleArgs + crossValidationParam, + ensembleParam ) { - .twasWarnUnretainableDetail(fitRetention, methods) + .twasWarnUnretainableDetail(fitRetention, methods, "QtlDataset") .assertMethodParam( - crossValidationArgs, - "CrossValidationParam", - "crossValidation" + crossValidationParam, + "CrossValidationParam" ) - .assertMethodParam(ensembleArgs, "EnsembleParam", "ensemble") - .ensembleAssertCv(ensembleArgs, crossValidationArgs) + .assertMethodParam(ensembleParam, "EnsembleParam") + .ensembleAssertCv(ensembleParam, crossValidationParam) invisible(NULL) } +# The QtlDataset method of twasWeightsPipeline(). Each stage returns only the +# values it derives; nothing is grafted onto a captured environment. `cfg` +# (.twasJointCfg()) is the one record of the run's settings, and the pipeline +# marker is built from it BEFORE the joint phase, so explicit joint fits run +# under the same marker and engine args as the per-tuple loop. The joint phase +# consumes the mrmash token; `norm` comes back holding only the methods that +# still have to go through the per-tuple loop. +# @noRd .twasPipelineQtlDataset <- function( data, methods = "default", @@ -1450,14 +1504,13 @@ setGeneric("twasWeightsPipeline", function(data, ...) { fineMappingResult = NULL, twasWeights = NULL, mashPrior = NULL, - crossValidationArgs = CrossValidationParam(), - fitFullData = TRUE, - ensembleArgs = EnsembleParam(), + crossValidationParam = CrossValidationParam(), + ensembleParam = EnsembleParam(), estimatePi = TRUE, usePCA = FALSE, nPCs = 10L, fitRetention = c("slim", "none", "full"), - residualizationArgs = ResidualizationParam(), + residualizationParam = ResidualizationParam(), weightsDataType = NULL, naAction = c("drop", "impute"), verbose = 1, @@ -1465,15 +1518,14 @@ setGeneric("twasWeightsPipeline", function(data, ...) { ) { naAction <- arg_match(naAction) fitRetention <- arg_match(fitRetention) + contexts <- parseContexts(contexts, data) + traitId <- parseTraitIds(traitId, data) .twasQdsAssertParams( methods, fitRetention, - crossValidationArgs, - ensembleArgs + crossValidationParam, + ensembleParam ) - cvCfg <- .cvResolve(crossValidationArgs) - # Each stage returns only the values it derives; nothing is grafted onto a - # captured environment. resolved <- .twasQdsResolveInputs( data = data, region = region, @@ -1482,67 +1534,59 @@ setGeneric("twasWeightsPipeline", function(data, ...) { genotypeFilterParam = genotypeFilterParam ) data <- resolved$data - xRegions <- resolved$xRegions - # One record of the settings the joint phase and the shared dispatcher - # both need, so each names them once. - jointCfg <- list( - data = data, + cfg <- .twasJointCfg( contexts = contexts, traitId = traitId, cisWindow = cisWindow, - dataType = weightsDataType, - verbose = verbose, - xRegions = xRegions, + xRegions = resolved$xRegions, + fineMappingResult = fineMappingResult, + mashPrior = mashPrior, + crossValidationParam = crossValidationParam, + ensembleParam = ensembleParam, + estimatePi = estimatePi, fitRetention = fitRetention, + residualizationParam = residualizationParam, + weightsDataType = weightsDataType, + verbose = verbose, seed = seed ) - joint <- .twasQdsResolveTokens( + resolvedTokens <- .twasQdsResolveTokens( jointSpecification, methods, fineMappingResult, - cvCfg$folds, - fitFullData, - mashPrior, - cvCfg$samplePartition, - jointCfg + .cvResolve(crossValidationParam), + data + ) + setup <- .twasJointSetup(data, resolvedTokens$norm, cfg) + joint <- .twasQdsJointPhase( + resolvedTokens$parsedJointSpec, + setup$marker, + setup$ctx, + contexts, + traitId ) if (joint$done) { return(joint$result) } - # The joint phase consumes the mrmash token; `norm` comes back holding - # only the methods that still have to go through the per-tuple loop. - norm <- joint$norm - samplePartition <- joint$samplePartition - dataDrivenPriorMatricesCv <- joint$dataDrivenPriorMatricesCv - grid <- .twasQdsResolveGrid(data, contexts, traitId, region, norm$tokens) - # The bundles are the user-facing form; below this line the marker and - # the joint engine that reads it keep plain scalars. - marker <- .twasQdsMarker( - crossValidationArgs = list_assign( - cvCfg, - samplePartition = samplePartition - ), - ensembleArgs = .ensembleResolve(ensembleArgs), - fitFullData = fitFullData, - weightsDataType = weightsDataType, - standardized = .qtlScaleResiduals(data, residualizationArgs), - fitRetention = fitRetention, - estimatePi = estimatePi, - verbose = verbose, - seed = seed + grid <- .twasQdsResolveGrid( + data, + contexts, + traitId, + region, + joint$norm$tokens ) tw <- .twasQdsRunGrid( grid, - marker, + setup$marker, data = data, - xRegions = xRegions, - norm = norm, + xRegions = resolved$xRegions, + norm = joint$norm, fineMappingResult = fineMappingResult, twasWeights = twasWeights, - dataDrivenPriorMatricesCv = dataDrivenPriorMatricesCv, + dataDrivenPriorMatricesCv = setup$ctx$dataDrivenPriorMatricesCv, cisWindow = cisWindow, naAction = naAction, - residualizationArgs = residualizationArgs, + residualizationParam = residualizationParam, usePCA = usePCA, nPCs = nPCs, verbose = verbose @@ -1558,40 +1602,6 @@ setMethod( .twasPipelineQtlDataset ) -# `cisWindow` expands a trait's own coordinates; `region` is literal. Supplying -# both signals a misunderstanding -> reject. -# @noRd -.twasQdsCheckRegionCisWindow <- function( - region, - cisWindow -) { - if (!is.null(region) && !is.null(cisWindow)) { - msg <- glue( - "twasWeightsPipeline(QtlDataset): specify either `region` or ", - "`cisWindow`, not both. `cisWindow` expands each trait's own ", - "coordinates, whereas `region` is the literal variant window." - ) - abort(msg) - } - invisible(NULL) -} - -# fitFullData = FALSE (CV-only) is meaningful only with cross-validation. -# @noRd -.twasQdsCheckFitFull <- function( - fitFullData, - cvFolds -) { - if (!isTRUE(fitFullData) && cvFolds <= 1L) { - msg <- glue( - "twasWeightsPipeline: fitFullData = FALSE requires ", - "cross-validation (cvFolds > 1)." - ) - abort(msg) - } - invisible(NULL) -} - # Unpack the MashPrior bundle: route the full-data prior into the mr.mash method # args, the per-fold priors + fold partition into the CV machinery. Returns the # updated parameter bundle. @@ -1650,44 +1660,41 @@ setMethod( jointRegions, genotypeFilterParam ) { - .twasQdsCheckRegionCisWindow(region, cisWindow) + .rejectRegionWithCisWindow( + region, + cisWindow, + "twasWeightsPipeline(QtlDataset)" + ) list( data = .qtlApplyFilterOverrides(data, genotypeFilterParam), xRegions = .makeXRegions(region, jointRegions) ) } -# Run the joint engine for a QtlDataset with the given spec + token set. -# @noRd -.twasQdsJointDispatch <- function(jointSpec, tokens, cfg) { - .twasDispatchJointSpecsQtlDataset( - jointSpec, - cfg$data, - tokens, - cfg$contexts, - cfg$traitId, - cfg$cisWindow, - cfg$dataType, - cfg$verbose, - xRegions = cfg$xRegions, - fitRetention = cfg$fitRetention, - seed = cfg$seed - ) -} # Explicit jointSpecification path: run the per-spec axis dispatcher for # mr.mash. Returns list(done, result, norm): `done` requests an early return # with `result`; otherwise `norm` is the mrmash-stripped normalization for the # per-tuple loop below. # @noRd -.twasQdsJointPhase <- function(parsedJointSpec, norm, cfg) { +.twasQdsJointPhase <- function( + parsedJointSpec, + marker, + ctx, + contexts, + traitId +) { + norm <- ctx$norm if (length(parsedJointSpec) == 0L) { return(list(done = FALSE, result = NULL, norm = norm)) } - jointResult <- .twasQdsJointDispatch( + jointResult <- .twasDispatchJointSpecsQtlDataset( parsedJointSpec, - intersect(norm$tokens, "mrmash"), - cfg + norm$tokens, + marker, + ctx, + contexts, + traitId ) keep <- setdiff(norm$tokens, intersect(norm$tokens, "mrmash")) if (length(keep) == 0L) { @@ -1715,40 +1722,106 @@ setMethod( ) } -# Normalize methods, run the capability / fine-mapping / fit-full gates and the -# mash-prior unpacking, then hand off to the joint phase. Returns the phase -# record extended with the mash-derived sample partition and CV prior matrices -# the per-tuple loop still needs. Mirrors .fmQdsResolveTokens. +# Parse the joint spec and normalize the methods, then run the capability, +# per-input argument and fine-mapping gates. The mash-prior unpacking and the +# joint phase follow once the pipeline marker exists (.twasJointSetup()), so +# that explicit joint fits run under the same marker as everything else. # @noRd .twasQdsResolveTokens <- function( jointSpecification, methods, fineMappingResult, - cvFolds, - fitFullData, - mashPrior, - samplePartition, - cfg + cvCfg, + data ) { - parsedJointSpec <- parseJointSpecification(jointSpecification, cfg$data) - rawNorm <- .twasNormalizeMethods(methods) - .twasCheckMethodCapabilities(rawNorm$tokens, "QtlDataset") + parsedJointSpec <- parseJointSpecification(jointSpecification, data) + norm <- .twasNormalizeMethods(methods) + .twasCheckMethodCapabilities(norm$tokens, "QtlDataset") .twasCheckMethodArgsForInput( - .twasMethodListArgs(rawNorm$methodList), + .twasMethodListArgs(norm$methodList), "QtlDataset" ) .twasCheckFineMappingMethods( - rawNorm$tokens, + norm$tokens, fineMappingResult, "QtlDataset", - cvFolds = cvFolds + cvFolds = cvCfg$folds, + fitFullData = cvCfg$fitFullData ) - .twasQdsCheckFitFull(fitFullData, cvFolds) - mash <- .twasQdsUnpackMash(mashPrior, samplePartition, rawNorm) - list_assign( - .twasQdsJointPhase(parsedJointSpec, mash$norm, cfg), - samplePartition = mash$samplePartition, - dataDrivenPriorMatricesCv = mash$dataDrivenPriorMatricesCv + list(parsedJointSpec = parsedJointSpec, norm = norm) +} + +# The individual-level settings a TWAS run fits under, as one record: built +# once by the QtlDataset method and once by the MultiStudyQtlDataset method, +# with the same builder, so a setting added for one reaches the other. +# @noRd +.twasJointCfg <- function( + contexts, + traitId, + cisWindow, + xRegions, + fineMappingResult, + mashPrior, + crossValidationParam, + ensembleParam, + estimatePi, + fitRetention, + residualizationParam, + weightsDataType, + verbose, + seed +) { + list( + contexts = contexts, + traitId = traitId, + cisWindow = cisWindow, + xRegions = xRegions, + fineMappingResult = fineMappingResult, + mashPrior = mashPrior, + crossValidationParam = crossValidationParam, + ensembleParam = ensembleParam, + estimatePi = estimatePi, + fitRetention = fitRetention, + residualizationParam = residualizationParam, + weightsDataType = weightsDataType, + verbose = verbose, + seed = seed + ) +} + +# Everything an individual-level TWAS fit on `data` needs from the record +# `cfg` (.twasJointCfg()): the mash prior unpacked into the methods, the +# pipeline marker, and the engine-args context. Used for the QtlDataset +# method's own run and for each MultiStudyQtlDataset component's joint fits. +# @noRd +.twasJointSetup <- function(data, norm, cfg) { + cvCfg <- .cvResolve(cfg$crossValidationParam) + mash <- .twasQdsUnpackMash(cfg$mashPrior, cvCfg$samplePartition, norm) + marker <- .twasQdsMarker( + crossValidationParam = list_assign( + cvCfg, + samplePartition = mash$samplePartition + ), + ensembleParam = .ensembleResolve(cfg$ensembleParam), + weightsDataType = cfg$weightsDataType, + standardized = .qtlScaleResiduals(data, cfg$residualizationParam), + fitRetention = cfg$fitRetention, + estimatePi = cfg$estimatePi, + verbose = cfg$verbose, + seed = cfg$seed + ) + list( + marker = marker, + ctx = list( + data = data, + xRegions = cfg$xRegions, + norm = mash$norm, + fineMappingResult = cfg$fineMappingResult, + dataDrivenPriorMatricesCv = mash$dataDrivenPriorMatricesCv, + cisWindow = cfg$cisWindow, + residualizationParam = cfg$residualizationParam, + verbose = cfg$verbose + ) ) } @@ -1770,26 +1843,18 @@ setMethod( study = studyName, useCtx = useCtx, allTraits = allTraits, + # Set only when traits are chosen context by context: the grid spans + # every (context, trait) pair of allTraits, and this drops the pairs + # the selection leaves out. + traitSelection = if (.hasNestedTraitSelection(traitId)) traitId, multivariate = any(map_lgl(tokens, .twasIsMultivariateToken)) ) } -# Selected contexts (all when NULL; else validated against the dataset). +# Selected contexts: those parseContexts() kept for this study, or all. # @noRd .twasQdsResolveContexts <- function(data, contexts) { - allCtx <- contexts(data) - if (is.null(contexts)) { - return(allCtx) - } - bad <- setdiff(contexts, allCtx) - if (length(bad) > 0L) { - badStr <- str_flatten(bad, ", ") - msg <- glue( - "twasWeightsPipeline(QtlDataset): unknown context(s): {badStr}" - ) - abort(msg) - } - contexts + .selectedContexts(contexts, studyName(data)) %||% contexts(data) } # Traits to iterate: traitId when supplied, else per-context region overlap, @@ -1813,9 +1878,8 @@ setMethod( # Joint-pipeline marker carrying the CV / ensemble config for the engine. # @noRd .twasQdsMarker <- function( - crossValidationArgs, - ensembleArgs, - fitFullData, + crossValidationParam, + ensembleParam, weightsDataType, standardized, fitRetention, @@ -1829,9 +1893,8 @@ setMethod( # The two groups travel as records, not as nine loose fields: # this function's only job is to store them, so unrolling them # into its signature would name each one twice for nothing. - crossValidationArgs = crossValidationArgs, - ensembleArgs = ensembleArgs, - fitFullData = fitFullData, + crossValidationParam = crossValidationParam, + ensembleParam = ensembleParam, dataType = weightsDataType, fitRetention = fitRetention, # DERIVED from what the accessors actually do: genotypes reach @@ -1843,7 +1906,7 @@ setMethod( estimatePi = estimatePi, verbose = verbose, seed = seed, - ldSketch = NULL + ldReference = NULL ) ) } @@ -1852,7 +1915,13 @@ setMethod( # adds top-PC rows ALONGSIDE the per-trait ones, matching # fineMappingPipeline's c(univRows, pcaRows). # @noRd -.twasQdsUnivPlan <- function(usePCA, studyName, useCtx, allTraits) { +.twasQdsUnivPlan <- function( + usePCA, + studyName, + useCtx, + allTraits, + traitSelection +) { univCell <- .lookupJointCell("univariate", "individual") list( cells = if (isTRUE(usePCA)) { @@ -1863,7 +1932,8 @@ setMethod( scope = list( studies = studyName, contexts = set_names(list(useCtx), studyName), - traits = set_names(list(allTraits), studyName) + traits = set_names(list(allTraits), studyName), + traitSelection = traitSelection ) ) } @@ -1876,6 +1946,7 @@ setMethod( studyName, useCtx, allTraits, + traitSelection, marker, data, xRegions, @@ -1885,12 +1956,18 @@ setMethod( dataDrivenPriorMatricesCv, cisWindow, naAction, - residualizationArgs, + residualizationParam, usePCA, nPCs, verbose ) { - plan <- .twasQdsUnivPlan(usePCA, studyName, useCtx, allTraits) + plan <- .twasQdsUnivPlan( + usePCA, + studyName, + useCtx, + allTraits, + traitSelection + ) cells <- plan$cells scope <- plan$scope labs <- map_chr(xRegions, .twasRegionLabel) @@ -1908,7 +1985,7 @@ setMethod( dataDrivenPriorMatricesCv = dataDrivenPriorMatricesCv, cisWindow = cisWindow, naAction = naAction, - residualizationArgs = residualizationArgs, + residualizationParam = residualizationParam, nPCs = nPCs, verbose = verbose ) @@ -1927,7 +2004,7 @@ setMethod( dataDrivenPriorMatricesCv, cisWindow, naAction, - residualizationArgs, + residualizationParam, nPCs, verbose ) { @@ -1941,7 +2018,7 @@ setMethod( regionIndex = bi, nRegions = length(xRegions), naAction = naAction, - residualizationArgs = residualizationArgs, + residualizationParam = residualizationParam, nPCs = nPCs, verbose = verbose ) @@ -1975,7 +2052,7 @@ setMethod( if (is.null(jointResult)) { return(tw) } - .rbindTwasWeights(tw, jointResult, ldSketch = NULL) + .rbindTwasWeights(tw, jointResult, ldReference = NULL) } #' @rdname twasWeightsPipeline @@ -1995,12 +2072,12 @@ setMethod( weightsDataType = NULL, verbose = 1L, panelFilterParam = PanelFilterParam(), - crossValidationArgs = CrossValidationParam() + crossValidationParam = CrossValidationParam() ) { fitRetention <- arg_match(fitRetention) - .twasWarnUnretainableDetail(fitRetention, methods) + .twasWarnUnretainableDetail(fitRetention, methods, "QtlSumStats") .cvRefuseOnSumstats( - crossValidationArgs, + crossValidationParam, "twasWeightsPipeline", "QtlSumStats" ) @@ -2032,12 +2109,10 @@ setMethod( studyCol = part$studyCol, contextCol = part$contextCol, traitCol = part$traitCol, - ldSketch = part$ldSketch, + ldReference = part$ldReference, methodArgs = methodArgs ) c( - # The univariate builder keeps whatever the per-method fit returns, - # so it takes no fitRetention. exec( .twasQssUnivariateRows, !!!rowArgs, @@ -2045,6 +2120,7 @@ setMethod( data = cfg$data, twasWeights = cfg$twasWeights, weightsDataType = cfg$dataType, + fitRetention = cfg$fitRetention, fineMappingResult = cfg$fineMappingResult, panelFilterParam = cfg$panelFilterParam ), @@ -2079,17 +2155,16 @@ setMethod( verbose, panelFilterParam ) { - # summaryStatsQc() is mandatory before twasWeightsPipeline for SumStats - # input; it also drops variants not present in the ldSketch, so every - # entry's SNP set is a subset of the ldSketch panel by the time we get here. .twasAssertQcd(data) + contexts <- parseContexts(contexts, data) + traitId <- parseTraitIds(traitId, data) # One record of the settings the joint phase and the shared dispatcher # both need, so each names them once. jointCfg <- list( data = data, contexts = contexts, traitId = traitId, - dataType = weightsDataType, + weightsDataType = weightsDataType, verbose = verbose, fitRetention = fitRetention, panelFilterParam = panelFilterParam @@ -2149,12 +2224,12 @@ setMethod( panelFilterParam = panelFilterParam ) ) - .twasQssAssemble(rows, joint$result, part$ldSketch) + .twasQssAssemble(rows, joint$result, part$ldReference) } # Normalize the methods argument into (tokens, methodArgs). The default set # excludes fine-mapping methods; those must be requested explicitly together -# with a FineMappingResult passed via `fineMappingResult`. +# with a fine-mapping result passed via `fineMappingResult`. # @noRd .twasSumStatsMethodTokens <- function(methods) { if (is.null(methods)) { @@ -2199,21 +2274,6 @@ setMethod( set_names(rep(list(list()), length(tokens)), tokens) } -# Run the joint engine for a QtlSumStats with the given spec + token set. -# @noRd -.twasQssJointDispatch <- function(jointSpec, tokens, cfg) { - .twasDispatchJointSpecsQtlSumStats( - jointSpec, - cfg$data, - tokens, - cfg$contexts, - cfg$traitId, - cfg$dataType, - cfg$verbose, - fitRetention = cfg$fitRetention, - panelFilterParam = cfg$panelFilterParam %||% PanelFilterParam() - ) -} # Joint-specification dispatch for mrmash. Returns list(done, result, tokens, # methodArgs): `done` requests an early return with `result`; otherwise the @@ -2228,9 +2288,10 @@ setMethod( methodArgs = methodArgs )) } - jointResult <- .twasQssJointDispatch( + jointResult <- .twasDispatchJointSpecsQtlSumStats( parsedJointSpec, - intersect(tokens, "mrmash"), + tokens, + methodArgs, cfg ) keep <- setdiff(tokens, "mrmash") @@ -2273,13 +2334,7 @@ setMethod( studyCol <- as.character(data$study) contextCol <- as.character(data$context) traitCol <- as.character(data$trait) - selRows <- .twasQssSelectRows( - data, - contextCol, - traitCol, - contexts, - traitId - ) + selRows <- .twasQssSelectRows(data, contexts, traitId) isMv <- map_lgl(tokens, .twasIsMultivariateToken) multivariateTokens <- tokens[isMv] univariateTokens <- tokens[!isMv] @@ -2297,29 +2352,14 @@ setMethod( selRows = selRows, multivariateTokens = multivariateTokens, univariateTokens = univariateTokens, - ldSketch = ldSketch(data) + ldReference = ldReference(data) ) } # Row indices matching the contexts / traitId filters (error if none). # @noRd -.twasQssSelectRows <- function( - data, - contextCol, - traitCol, - contexts, - traitId -) { - byContext <- if (is.null(contexts)) { - seq_len(nrow(data)) - } else { - which(is_in(contextCol, contexts)) - } - selRows <- if (is.null(traitId)) { - byContext - } else { - byContext[is_in(traitCol[byContext], traitId)] - } +.twasQssSelectRows <- function(data, contexts, traitId) { + selRows <- which(.sumStatsRowsSelected(data, contexts, traitId)) if (length(selRows) == 0L) { msg <- glue( "twasWeightsPipeline(QtlSumStats): no entries matched the ", @@ -2376,7 +2416,7 @@ setMethod( # Assemble a TwasWeights collection from a flat list of row records. # @noRd -.twasRowsToWeights <- function(rows, ldSketch) { +.twasRowsToWeights <- function(rows, ldReference) { if (length(rows) == 0L) { return(NULL) } @@ -2386,7 +2426,7 @@ setMethod( trait = map_chr(rows, "trait"), method = map_chr(rows, "method"), entry = map(rows, "entry"), - ldSketch = ldSketch + ldReference = ldReference ) } @@ -2425,16 +2465,29 @@ setMethod( ) } +# The pipeline's fitRetention for a summary-statistics weight function that +# takes one, unless the caller set it for that method; a function without the +# argument keeps no fit. "none" is passed on too, unlike on the +# individual-level path: the fine-mapping adapters here keep a slim fit +# unless told otherwise, so leaving it unset would not drop it. +# @noRd +.twasQssRetainArgs <- function(args, fnName, fitRetention) { + if (!is_in("fitRetention", names(formals(fnName)))) { + return(args) + } + list_assign(args, fitRetention = args$fitRetention %||% fitRetention) +} + # Run a weight function, warning (with `errPrefix`) and returning NULL on error. # @noRd #' @importFrom rlang try_fetch -.twasTryWeights <- function(fn, stat, ldMat, userArgs, errPrefix) { +.twasTryWeights <- function(fn, stat, ldReference, userArgs, errPrefix) { try_fetch( { wfn <- get(fn, mode = "function") wArgs <- .twasWeightCallArgs( fn, - list(stat = stat, LD = ldMat), + list(stat = stat, ldReference = ldReference), userArgs ) exec(wfn, !!!wArgs) @@ -2455,9 +2508,10 @@ setMethod( contextCol, traitCol, data, - ldSketch, + ldReference, twasWeights, weightsDataType, + fitRetention, fineMappingResult, methodArgs, panelFilterParam @@ -2473,9 +2527,10 @@ setMethod( contextCol = contextCol, traitCol = traitCol, data = data, - ldSketch = ldSketch, + ldReference = ldReference, twasWeights = twasWeights, weightsDataType = weightsDataType, + fitRetention = fitRetention, fineMappingResult = fineMappingResult, methodArgs = methodArgs, panelFilterParam = panelFilterParam @@ -2515,9 +2570,10 @@ setMethod( contextCol, traitCol, data, - ldSketch, + ldReference, twasWeights, weightsDataType, + fitRetention, fineMappingResult, methodArgs, panelFilterParam @@ -2536,7 +2592,7 @@ setMethod( st, ctx, tr, - ldSketch, + ldReference, cutoffs = .panelCutoffs(panelFilterParam) ) fitted <- compact(map( @@ -2547,6 +2603,7 @@ setMethod( tr = tr, fitCtx = fitCtx, methodArgs = methodArgs, + fitRetention = fitRetention, fineMappingResult = fineMappingResult, weightsDataType = weightsDataType )) @@ -2613,7 +2670,7 @@ setMethod( st, ctx, tr, - ldSketch, + ldReference, cutoffs = NULL ) { allDf <- as.data.frame( @@ -2632,7 +2689,7 @@ setMethod( "context='{ctx}', trait='{tr}'" ) df <- allDf[ - .panelKeepMask(allDf$variant_id, ldSketch, cutoffs, label), + .panelKeepMask(allDf$variant_id, ldReference, cutoffs, label), , drop = FALSE ] @@ -2644,19 +2701,19 @@ setMethod( varY = varY, variantNames = variantIds ) + # The entry's block of the reference, read once and shared by every + # method fitted to it. list( variantIds = variantIds, stat = stat, - ldMat = .ldFromSketch( - ldSketch, + ldReference = .ldRefInMemory( + ldReference, variantIds, label = "twasWeightsPipeline" ) ) } -# Fit one univariate method for one entry -> a row record, or NULL on skip. -# @noRd # The weight function's arguments for one tuple: the user's args and, when the # token is a fine-mapping method, the precomputed fit threaded into its # dedicated *Fit argument. NULL when such a token has no fit to thread. @@ -2688,6 +2745,8 @@ setMethod( list_assign(baseArgs, !!!set_names(list(fit), spec$adapter$rssFitArg)) } +# Fit one univariate method for one entry -> a row record, or NULL on skip. +# @noRd .twasQssUnivariateFitOne <- function( tk, st, @@ -2695,6 +2754,7 @@ setMethod( tr, fitCtx, methodArgs, + fitRetention, fineMappingResult, weightsDataType ) { @@ -2716,8 +2776,8 @@ setMethod( weights <- .twasTryWeights( spec$fn, fitCtx$stat, - fitCtx$ldMat, - userArgs, + fitCtx$ldReference, + .twasQssRetainArgs(userArgs, spec$fn, fitRetention), .twasFitErrUniv(tk, st, ctx, tr) ) if (is.null(weights)) { @@ -2783,7 +2843,7 @@ setMethod( contextCol, traitCol, data, - ldSketch, + ldReference, methodArgs, fitRetention, fineMappingResult, @@ -2809,7 +2869,7 @@ setMethod( contextCol = contextCol, traitCol = traitCol, data = data, - ldSketch = ldSketch, + ldReference = ldReference, methodArgs = methodArgs, fitRetention = fitRetention, fineMappingResult = fineMappingResult, @@ -2827,7 +2887,7 @@ setMethod( contextCol, traitCol, data, - ldSketch, + ldReference, methodArgs, fitRetention, fineMappingResult, @@ -2846,11 +2906,12 @@ setMethod( st, tr, ctxNames, - ldSketch = ldSketch, + ldReference = ldReference, cutoffs = .panelCutoffs(panelFilterParam) ) - ldMat <- .ldFromSketch( - ldSketch, + # The group's block of the reference, read once and shared by every method. + blockReference <- .ldRefInMemory( + ldReference, mvStat$variantIds, label = "twasWeightsPipeline" ) @@ -2862,7 +2923,7 @@ setMethod( tr = tr, ctxNames = ctxNames, mvStat = mvStat, - ldMat = ldMat, + blockReference = blockReference, methodArgs = methodArgs, fitRetention = fitRetention, fineMappingResult = fineMappingResult, @@ -2879,7 +2940,7 @@ setMethod( st, tr, ctxNames, - ldSketch = NULL, + ldReference = NULL, cutoffs = NULL ) { allDf <- as.data.frame( @@ -2897,7 +2958,7 @@ setMethod( "twasWeightsPipeline(QtlSumStats, multivariate): study='{st}', ", "trait='{tr}'" ) - keep <- .panelKeepMask(allDf$variant_id, ldSketch, cutoffs, label) + keep <- .panelKeepMask(allDf$variant_id, ldReference, cutoffs, label) firstDf <- allDf[keep, , drop = FALSE] variantIds <- firstDf$variant_id filled <- .twasQssFillContexts(data, st, tr, ctxNames, variantIds) @@ -2911,11 +2972,6 @@ setMethod( ) } -# Read each context's z / N into the shared matrix. Every context must present -# the same SNPs in the same order -- the multivariate fitters index z by -# position, not by name, so a differing order would silently pair one context's -# variant with another's. -# @noRd # One context's z column and median N, checked against the shared SNP order. # @noRd .twasQssContextStats <- function(ctx, data, st, tr, variantIds) { @@ -2932,9 +2988,15 @@ setMethod( list(z = kept$z, n = stats::median(kept$N, na.rm = TRUE)) } +# Read each context's z / N into the shared matrix. Every context must present +# the same SNPs in the same order -- the multivariate fitters index z by +# position, not by name, so a differing order would silently pair one context's +# variant with another's. +# # Every context shares one SNP order (asserted per context), which is what # lets the columns simply be laid side by side rather than filled into a # preallocated matrix. +# @noRd .twasQssFillContexts <- function(data, st, tr, ctxNames, variantIds) { stats <- map( ctxNames, @@ -2964,7 +3026,7 @@ setMethod( "twasWeightsPipeline(QtlSumStats, multivariate): every ", "entry for (study='{st}', trait='{tr}') must share an ", "identical SNP order after summaryStatsQc(). Use the same ", - "ldSketch on every entry." + "ldReference on every entry." )) } @@ -2982,10 +3044,14 @@ setMethod( fitRetention, fineMappingResult ) { - baseArgs <- .twasMrmashRetainDefaults( - .twasUserArgs(methodArgs, tk), - spec$adapter, - tk, + baseArgs <- .twasQssRetainArgs( + .twasMrmashRetainDefaults( + .twasUserArgs(methodArgs, tk), + spec$adapter, + tk, + fitRetention + ), + spec$fn, fitRetention ) if (is.null(spec$adapter)) { @@ -3003,7 +3069,8 @@ setMethod( } # Fit one multivariate method for a group -> one row record per context (empty -# list on skip). +# list on skip). `userArgs` is NULL when the pre-fit a fine-mapping token needs +# is missing. # @noRd .twasQssMultivariateFitOne <- function( tk, @@ -3011,7 +3078,7 @@ setMethod( tr, ctxNames, mvStat, - ldMat, + blockReference, methodArgs, fitRetention, fineMappingResult, @@ -3033,22 +3100,43 @@ setMethod( fitRetention = fitRetention, fineMappingResult = fineMappingResult ) - # NULL when the pre-fit a fine-mapping token needs is missing. if (is.null(userArgs)) { return(list()) } weights <- .twasTryWeights( spec$fn, mvStat$stat, - ldMat, + blockReference, userArgs, .twasFitErrMv(tk, st, tr) ) + .twasMvRowsFromWeights( + weights, + ctxNames, + mvStat, + st, + tr, + tk, + weightsDataType + ) +} + +# Per-context row records from one multivariate fit's weights (empty list when +# the fit failed and `weights` is NULL). The fit is hung off the weights as an +# attribute; the rows store the two separately. +# @noRd +.twasMvRowsFromWeights <- function( + weights, + ctxNames, + mvStat, + st, + tr, + tk, + weightsDataType +) { if (is.null(weights)) { return(list()) } - # The fit is hung off the weights as an attribute; the rows store the - # two separately. wMatrix <- if (is.matrix(weights)) weights else as.matrix(weights) fitAttr <- attr(wMatrix, "fit") bare <- `attr<-`(wMatrix, "fit", NULL) @@ -3143,9 +3231,9 @@ setMethod( .twasQssAssemble <- function( rows, jointResult, - ldSketch + ldReference ) { - perTupleResult <- .twasRowsToWeights(rows, ldSketch) + perTupleResult <- .twasRowsToWeights(rows, ldReference) if (is.null(jointResult)) { if (is.null(perTupleResult)) { msg <- glue( @@ -3159,7 +3247,7 @@ setMethod( if (is.null(perTupleResult)) { return(jointResult) } - .rbindTwasWeights(perTupleResult, jointResult, ldSketch = ldSketch) + .rbindTwasWeights(perTupleResult, jointResult, ldReference = ldReference) } # ============================================================================= @@ -3174,24 +3262,28 @@ setMethod( # Per-embedded-study TWAS-weights worker for .multiStudyPipelineDriver: recurse # twasWeightsPipeline on one QtlDataset. `cfg` bundles the parent's forwarded # args. +# +# Every setting is named -- not the `...`/dotArgs channel this once spliced, +# which is what made multi-study TWAS inherit the per-study CV default and +# silently drop residualization / fitRetention. A name this entry point does +# not accept is an "unused argument" error; `cfg`'s panelFilterParam belongs +# to the summary-statistics path and is deliberately not forwarded. # @noRd .twasPerStudy <- function(qd, cfg) { - # Checked forwarding, not the `...`/dotArgs channel this used to splice: - # that is what made multi-study TWAS inherit the per-study CV default and - # silently drop residualization / fitRetention. - # Every setting is named -- NOT the `...`/dotArgs channel this once - # spliced, which is what made multi-study TWAS inherit the per-study CV - # default and silently drop residualization / fitRetention. A name this - # entry point does not accept is an "unused argument" error; `cfg`'s - # panelFilterArgs belongs to the summary-statistics path and is - # deliberately not forwarded. + # `cfg` carries the parsed selection for every study; this study gets its + # own share, and a study with none of its contexts selected sits out. + s <- studyName(qd) + contexts <- .selectedContexts(cfg$contexts, s) + if (!is.null(contexts) && length(contexts) == 0L) { + return(NULL) + } twasWeightsPipeline( data = qd, jointSpecification = NULL, - fitRetention = .twasRetentionEnum(cfg), + fitRetention = cfg$fitRetention, methods = cfg$methods, - contexts = cfg$contexts, - traitId = cfg$traitId, + contexts = contexts, + traitId = .studyTraitIdArg(cfg$traitId, s), region = cfg$region, cisWindow = cfg$cisWindow, jointRegions = cfg$jointRegions, @@ -3199,15 +3291,16 @@ setMethod( twasWeights = cfg$twasWeights, naAction = cfg$naAction, verbose = cfg$verbose, - crossValidationArgs = cfg$crossValidationArgs, - ensembleArgs = cfg$ensembleArgs, + crossValidationParam = cfg$crossValidationParam, + ensembleParam = cfg$ensembleParam, seed = cfg$seed, genotypeFilterParam = cfg$genotypeFilterParam, mashPrior = cfg$mashPrior, - fitFullData = cfg$fitFullData, estimatePi = cfg$estimatePi, - weightsDataType = cfg$dataType, - residualizationArgs = cfg$residualizationArgs + usePCA = cfg$usePCA, + nPCs = cfg$nPCs, + weightsDataType = cfg$weightsDataType, + residualizationParam = cfg$residualizationParam ) } @@ -3218,37 +3311,36 @@ setMethod( # from, residualize, cross-validate, stack or fit on full data. `cfg` # carries those for the individual-level sibling and they are not # forwarded here. + # + # The parsed selection is applied here, to the rows, so the recursion runs + # on what it keeps with nothing left to filter -- and rows it leaves out + # are not an error when another component holds the selected tuples. + keepRows <- .sumStatsRowsSelected(ss, cfg$contexts, cfg$traitId) + if (!any(keepRows)) { + return(NULL) + } twasWeightsPipeline( - data = ss, + data = if (all(keepRows)) ss else ss[which(keepRows)], jointSpecification = NULL, - fitRetention = .twasRetentionEnum(cfg), + fitRetention = cfg$fitRetention, methods = cfg$methods, - contexts = cfg$contexts, - traitId = cfg$traitId, + contexts = NULL, + traitId = NULL, fineMappingResult = cfg$fineMappingResult, twasWeights = cfg$twasWeights, verbose = cfg$verbose, panelFilterParam = cfg$panelFilterParam, - weightsDataType = cfg$dataType + weightsDataType = cfg$weightsDataType ) } -# The config carries the engine-facing pair; the per-study recursion re-enters -# the public method, which takes the single enum. One place converts back. +# Few methods distinguish the retention levels (.twasFullDetailTokens()); +# every other weight method keeps its fit whole or not at all, so "full" is +# the same as "slim" for them. Erroring when NO requested method can honour +# it, and warning when only some can, is the alternative to dropping it in +# silence. Which methods can depends on the input the run reads. # @noRd -.twasRetentionEnum <- function(cfg) { - if (!isTRUE(cfg$fitRetention)) { - return("none") - } - cfg$fitRetention %||% "slim" -} - -# Only the mr.mash engines distinguish the retention levels; every other -# weight method keeps its fit whole or not at all, so "full" is the same as -# "slim" for them. Erroring when NO requested method can honour it, and -# warning when only some can, is the alternative to dropping it in silence. -# @noRd -.twasWarnUnretainableDetail <- function(fitRetention, methods) { +.twasWarnUnretainableDetail <- function(fitRetention, methods, inputKind) { if (!identical(fitRetention, "full")) { return(invisible(NULL)) } @@ -3256,12 +3348,14 @@ setMethod( if (length(tokens) == 0L) { return(invisible(NULL)) } - honours <- str_detect(tokens, regex("mrmash", ignore_case = TRUE)) + honouring <- .twasFullDetailTokens(inputKind) + honours <- is_in(tokens, honouring) if (!any(honours)) { abort(glue( - "twasWeightsPipeline: fitRetention = \"full\" is only honoured ", - "by the mr.mash methods; {str_flatten(tokens, ', ')} cannot vary ", - "the retained detail. Use fitRetention = \"slim\"." + "twasWeightsPipeline: fitRetention = \"full\" is honoured on ", + "{inputKind} input only by {str_flatten(honouring, ', ')}; ", + "{str_flatten(tokens, ', ')} cannot vary the retained detail. ", + "Use fitRetention = \"slim\"." )) } if (!all(honours)) { @@ -3274,6 +3368,18 @@ setMethod( invisible(NULL) } +# The methods whose "full" fit keeps more than their "slim" one, on one input +# path: mr.mash's whole fit, and on summary statistics the shrinkage-grid +# methods' candidate coefficients (lassosumRssWeights() and the penalized +# RSS weights). +# @noRd +.twasFullDetailTokens <- function(inputKind) { + if (identical(inputKind, "QtlSumStats")) { + return(c("mrmash", "lasso", "scad", "mcp", "l0learn")) + } + "mrmash" +} + # ---- MultiStudyQtlDataset pipeline worker + phase helpers ------------------ # Method tokens from a `methods` arg: a character vector as-is; a named list -> @@ -3293,8 +3399,6 @@ setMethod( } } -# Drop mrmash (handled by the joint dispatcher) from a `methods` arg. -# @noRd # A methods argument as an ordinary named list, whatever form it arrived in. # A MethodOptions record is a SimpleList, so `is.list()` is FALSE for it and the # helpers below would otherwise fall through to their "leave it alone" branch. @@ -3312,6 +3416,8 @@ setMethod( is(methods, "MethodsSelectionParam") } +# Drop mrmash (handled by the joint dispatcher) from a `methods` arg. +# @noRd .twasMsStripMrmash <- function(methods) { if (.twasMethodsIsParam(methods)) { return(.methodsParamDrop(methods, "mrmash")) @@ -3339,25 +3445,11 @@ setMethod( (is.character(methods) || is.list(methods)) && length(methods) == 0L } -# Resolve the MultiStudyQtlDataset inputs: the region/cisWindow guard, the -# naAction choice and the joint-region spec. Mirrors .fmMsResolveInputs so -# both MultiStudy workers read the same way, rather than one open-coding -# what the other names. +# The MultiStudyQtlDataset method of twasWeightsPipeline(). `jointCfg` is the +# QtlDataset method's own record (.twasJointCfg()) plus the collection and the +# two filter settings the components apply, so each component's joint fits +# run under the settings its own QtlDataset run would use. # @noRd -.twasMsResolveInputs <- function(naAction, region, cisWindow, jointRegions) { - if (!is.null(region) && !is.null(cisWindow)) { - msg <- glue( - "twasWeightsPipeline(MultiStudyQtlDataset): specify either ", - "`region` or `cisWindow`, not both." - ) - abort(msg) - } - list( - naAction = arg_match(naAction, c("drop", "impute")), - xRegions = .makeXRegions(region, jointRegions) - ) -} - .twasPipelineMultiStudy <- function( data, methods = "default", @@ -3372,33 +3464,55 @@ setMethod( fineMappingResult = NULL, twasWeights = NULL, mashPrior = NULL, - fitFullData = TRUE, estimatePi = TRUE, + usePCA = FALSE, + nPCs = 10L, fitRetention = c("slim", "none", "full"), weightsDataType = NULL, naAction = c("drop", "impute"), verbose = 1, - residualizationArgs = ResidualizationParam(), - crossValidationArgs = CrossValidationParam(), - ensembleArgs = EnsembleParam(), + residualizationParam = ResidualizationParam(), + crossValidationParam = CrossValidationParam(), + ensembleParam = EnsembleParam(), seed = NULL ) { fitRetention <- arg_match(fitRetention) - .twasWarnUnretainableDetail(fitRetention, methods) - inputs <- .twasMsResolveInputs(naAction, region, cisWindow, jointRegions) + # Every collection holds individual-level studies, so their rule applies + # here; a summary-statistic study is checked again by its own route. + .twasWarnUnretainableDetail(fitRetention, methods, "QtlDataset") + inputs <- .msResolveInputs( + naAction, + region, + cisWindow, + jointRegions, + "twasWeightsPipeline(MultiStudyQtlDataset)" + ) naAction <- inputs$naAction - # One record of the settings the joint phase and the shared dispatcher - # both need, so each names them once. - jointCfg <- list( - data = data, - contexts = contexts, - traitId = traitId, + cfg <- .twasMsCfg( + methods = methods, + contexts = parseContexts(contexts, data), + traitId = parseTraitIds(traitId, data), + region = region, cisWindow = cisWindow, + jointRegions = jointRegions, + fineMappingResult = fineMappingResult, + twasWeights = twasWeights, + naAction = naAction, verbose = verbose, - xRegions = inputs$xRegions, + crossValidationParam = crossValidationParam, + ensembleParam = ensembleParam, + seed = seed, + genotypeFilterParam = genotypeFilterParam, + panelFilterParam = panelFilterParam, + mashPrior = mashPrior, + estimatePi = estimatePi, + usePCA = usePCA, + nPCs = nPCs, fitRetention = fitRetention, - seed = seed + weightsDataType = weightsDataType, + residualizationParam = residualizationParam ) + jointCfg <- .twasMsJointCfg(cfg, data, inputs$xRegions) joint <- .twasMsResolveTokens( jointSpecification, methods, @@ -3408,30 +3522,37 @@ setMethod( if (joint$done) { return(joint$result) } - .twasMsDriver( + .twasMsDriver(data, joint$result, list_assign(cfg, methods = joint$methods)) +} + +# The MultiStudyQtlDataset joint record, derived from the record the +# per-component recursion receives (`cfg`, .twasMsCfg()): the settings each +# component's own QtlDataset run fits under (.twasJointCfg()), plus the +# collection and the two filters the components apply. Deriving it, rather +# than re-listing the settings, keeps the per-study joint fits on exactly the +# settings of the per-study fits. +# @noRd +.twasMsJointCfg <- function(cfg, data, xRegions) { + list_assign( + .twasJointCfg( + contexts = cfg$contexts, + traitId = cfg$traitId, + cisWindow = cfg$cisWindow, + xRegions = xRegions, + fineMappingResult = cfg$fineMappingResult, + mashPrior = cfg$mashPrior, + crossValidationParam = cfg$crossValidationParam, + ensembleParam = cfg$ensembleParam, + estimatePi = cfg$estimatePi, + fitRetention = cfg$fitRetention, + residualizationParam = cfg$residualizationParam, + weightsDataType = cfg$weightsDataType, + verbose = cfg$verbose, + seed = cfg$seed + ), data = data, - contexts = contexts, - traitId = traitId, - cisWindow = cisWindow, - region = region, - jointRegions = jointRegions, - fineMappingResult = fineMappingResult, - twasWeights = twasWeights, - naAction = naAction, - verbose = verbose, - crossValidationArgs = crossValidationArgs, - ensembleArgs = ensembleArgs, - seed = seed, - genotypeFilterParam = genotypeFilterParam, - panelFilterParam = panelFilterParam, - mashPrior = mashPrior, - fitFullData = fitFullData, - estimatePi = estimatePi, - fitRetention = fitRetention, - weightsDataType = weightsDataType, - residualizationArgs = residualizationArgs, - joint$result, - joint$methods + genotypeFilterParam = cfg$genotypeFilterParam, + panelFilterParam = cfg$panelFilterParam ) } @@ -3443,25 +3564,6 @@ setMethod( .twasPipelineMultiStudy ) -# Run the joint engine for a MultiStudyQtlDataset with the given spec + token -# set. The NULL in the dataType slot is deliberate: the per-component -# recursion resolves each study's own data type. -# @noRd -.twasMsJointDispatch <- function(jointSpec, tokens, cfg) { - .twasDispatchJointSpecsMultiStudy( - jointSpec, - cfg$data, - tokens, - cfg$contexts, - cfg$traitId, - cfg$cisWindow, - NULL, - cfg$verbose, - xRegions = cfg$xRegions, - fitRetention = cfg$fitRetention, - seed = cfg$seed - ) -} # Joint-specification dispatch for mrmash. Returns list(done, result, methods) # where `done` requests an early return with `result` and `methods` is the @@ -3477,9 +3579,10 @@ setMethod( ) return(list(done = FALSE, result = NULL, methods = methods)) } - jointResult <- .twasMsJointDispatch( + jointResult <- .twasDispatchJointSpecsMultiStudy( parsedJointSpec, - intersect(.twasMethodTokensFromArg(methods), "mrmash"), + .twasMethodTokensFromArg(methods), + methods, cfg ) stripped <- .twasMsStripMrmash(methods) @@ -3525,39 +3628,59 @@ setMethod( .twasCheckFineMappingMethods( .twasMethodTokensFromArg(methods), fineMappingResult, - "MultiStudyQtlDataset" + "MultiStudyQtlDataset", + fitFullData = .cvResolve(cfg$crossValidationParam)$fitFullData ) .twasMsJointPhase(parsedJointSpec, methods, cfg) } # Run the per-study / per-component recursion via the shared multi-study driver. +# `cfg` is the `.twasMsCfg()` record of the settings each component re-runs +# with. # @noRd -.twasMsDriver <- function( - data, +.twasMsDriver <- function(data, jointResult, cfg) { + .multiStudyPipelineDriver( + data, + jointResult, + .twasPerStudy, + .twasSumStats, + cfg, + .rbindTwasWeights, + TwasWeights, + "twasWeightsPipeline", + noun = "weights" + ) +} + +# The settings the per-study / per-component recursion re-runs each component +# with, as the record .multiStudyPipelineDriver() hands to .twasPerStudy / +# .twasSumStats. +# @noRd +.twasMsCfg <- function( + methods, contexts, traitId, - cisWindow, region, + cisWindow, jointRegions, fineMappingResult, twasWeights, naAction, verbose, - crossValidationArgs, - ensembleArgs, + crossValidationParam, + ensembleParam, seed, genotypeFilterParam, panelFilterParam, mashPrior, - fitFullData, estimatePi, + usePCA, + nPCs, fitRetention, weightsDataType, - residualizationArgs, - jointResult, - methods + residualizationParam ) { - cfg <- list( + list( methods = methods, contexts = contexts, traitId = traitId, @@ -3568,28 +3691,18 @@ setMethod( twasWeights = twasWeights, naAction = naAction, verbose = verbose, - crossValidationArgs = crossValidationArgs, - ensembleArgs = ensembleArgs, + crossValidationParam = crossValidationParam, + ensembleParam = ensembleParam, seed = seed, genotypeFilterParam = genotypeFilterParam, panelFilterParam = panelFilterParam, mashPrior = mashPrior, - fitFullData = fitFullData, estimatePi = estimatePi, + usePCA = usePCA, + nPCs = nPCs, fitRetention = fitRetention, - dataType = weightsDataType, - residualizationArgs = residualizationArgs - ) - .multiStudyPipelineDriver( - data, - jointResult, - .twasPerStudy, - .twasSumStats, - cfg, - .rbindTwasWeights, - TwasWeights, - "twasWeightsPipeline", - noun = "weights" + weightsDataType = weightsDataType, + residualizationParam = residualizationParam ) } @@ -3686,26 +3799,21 @@ setMethod( zetaValid / zetaSum } -# Ensemble stacking objective (sum of squared residuals). `...` absorbs the -# gradient's extra optim args (PtP, Pty). +# Ensemble stacking objective: the sum of squared residuals of the stacked +# prediction `Pvalid %*% z`. `problem` is the record .solveEnsembleLbfgsb() +# builds once -- the predictions, the outcome and their cross-products -- and +# hands optim() as its single extra argument, so the objective and its +# gradient read one shared definition, each taking the part it needs. # @noRd -.ensembleObj <- function(Pvalid, yObs) { - # Captured by name, and forced here so the closure holds values rather - # than promises into a frame that has already returned. - force(Pvalid) - force(yObs) - function(z) sum((yObs - Pvalid %*% z)^2) +.ensembleObj <- function(z, problem) { + sum((problem$yObs - problem$Pvalid %*% z)^2) } -# Gradient of the ensemble stacking objective, same construction. Building -# both as closures of exactly what each needs is what lets optim() be called -# with no `...`: previously it forwarded the union of both callbacks' -# arguments to both, and each absorbed the other's half in a `...` tail. +# Gradient of the stacking objective, 2 (P'P z - P'y), from the +# cross-products in `problem`. # @noRd -.ensembleGrad <- function(PtP, Pty) { - force(PtP) - force(Pty) - function(z) as.vector(2 * (PtP %*% z - Pty)) +.ensembleGrad <- function(z, problem) { + as.vector(2 * (problem$PtP %*% z - problem$Pty)) } # Solve ensemble stacking via L-BFGS-B (box-constrained optimization, then @@ -3717,14 +3825,18 @@ setMethod( # @return Normalized coefficient vector of length Kvalid. # @noRd .solveEnsembleLbfgsb <- function(Pvalid, yObs, Kvalid) { - PtP <- crossprod(Pvalid) - Pty <- as.vector(crossprod(Pvalid, yObs)) - + problem <- list( + Pvalid = Pvalid, + yObs = yObs, + PtP = crossprod(Pvalid), + Pty = as.vector(crossprod(Pvalid, yObs)) + ) fit <- try_fetch( optim( par = rep(1 / Kvalid, Kvalid), - fn = .ensembleObj(Pvalid, yObs), - gr = .ensembleGrad(PtP, Pty), + fn = .ensembleObj, + gr = .ensembleGrad, + problem = problem, method = "L-BFGS-B", lower = rep(0, Kvalid) ), @@ -4153,8 +4265,6 @@ ensembleWeights <- function( invisible(NULL) } -# Assemble one dataset's (samples x methods) prediction matrix. -# @noRd # One method's aligned prediction column for dataset `d`. # @noRd .ensemblePredColumn <- function(k, predsD, nm, aln, contextIndex, d) { @@ -4178,6 +4288,8 @@ ensembleWeights <- function( pCol } +# Assemble one dataset's (samples x methods) prediction matrix. +# @noRd .ensembleBuildPd <- function(predsD, nm, aln, contextIndex, d) { cols <- map( seq_along(nm$predNames), @@ -4324,8 +4436,6 @@ ensembleWeights <- function( if (is.matrix(w)) w else matrix(w, ncol = 1) } -# Zeta-weighted sum of the matched weight matrices; univariate -> named vector. -# @noRd # One method's zeta-scaled contribution, or NULL when its weight matrix does # not line up with the first one's shape. # @noRd @@ -4343,6 +4453,8 @@ ensembleWeights <- function( zeta[i] * wMat } +# Zeta-weighted sum of the matched weight matrices; univariate -> named vector. +# @noRd .ensembleAccumulateWeights <- function(wtList, wtKeys, matched, zeta) { firstWt <- .ensembleAsMatrix(wtList[[wtKeys[which(matched)[1]]]]) shape <- dim(firstWt) @@ -4400,33 +4512,6 @@ ensembleWeights <- function( ) } -# The entry in one region's collection matching a (study, context, trait, -# method) key, or NULL when that region lacks it. -# @noRd -.twasEntryMatchingKey <- function(tw, key) { - hit <- which( - as.character(tw$study) == key[[1L]] & - as.character(tw$context) == key[[2L]] & - as.character(tw$trait) == key[[3L]] & - as.character(tw$method) == key[[4L]] - ) - if (length(hit)) .twrRowParts(tw, hit[[1L]]) else NULL -} - -# The merged entry for base row `r`: gather that key's entry from every region -# and concatenate them. -# @noRd -.twasMergedEntryForRow <- function(r, base, twList, regionLabels) { - key <- c( - as.character(base$study[[r]]), - as.character(base$context[[r]]), - as.character(base$trait[[r]]), - as.character(base$method[[r]]) - ) - perRegion <- map(twList, .twasEntryMatchingKey, key = key) - .twasMergeRegionEntries(perRegion, regionLabels) -} - # Canonical method name for a snake_case token (identity when not in the table). # @noRd .twasCanonicalMethod <- function(s, snakeToCanonical) { @@ -4439,39 +4524,57 @@ ensembleWeights <- function( .twasCapabilityViolation(caps[[tk]], tk, inputKind) } -# One region's multivariate-grid joint fit (region `bi` of ctx$xRegions). +# One region block of .twasRunJointSpecGrid(). # @noRd -.twasMvGridRegion <- function(bi, synthSpec, marker, ctx, traits) { +.twasJointSpecRegion <- function( + bi, + spec, + tokens, + contexts, + traits, + marker, + ctx +) { .runJointSpecs( - synthSpec, + spec, ctx$data, dataForm = "individual", pipeline = marker, - jointMethods = ctx$norm$tokens, - contexts = ctx$useCtx, + jointMethods = tokens, + contexts = contexts, traitIds = traits, - args = list( - methodList = ctx$norm$methodList, - fineMappingResult = ctx$fineMappingResult, - dataDrivenPriorMatricesCv = ctx$dataDrivenPriorMatricesCv, - cisWindow = ctx$cisWindow, - region = ctx$xRegions[[bi]], - regionIndex = bi, - nRegions = length(ctx$xRegions), - residualizationArgs = ctx$residualizationArgs, - verbose = ctx$verbose - ) + args = .twasJointArgs(ctx, bi) + ) +} + +# The engine `args` of an individual-level TWAS joint run over region block +# `bi`. Residualization rides here: the group enumerators read it while +# extracting X and Y. +# @noRd +.twasJointArgs <- function(ctx, bi) { + list( + methodList = ctx$norm$methodList, + fineMappingResult = ctx$fineMappingResult, + dataDrivenPriorMatricesCv = ctx$dataDrivenPriorMatricesCv, + cisWindow = ctx$cisWindow, + region = ctx$xRegions[[bi]], + regionIndex = bi, + nRegions = length(ctx$xRegions), + residualizationParam = ctx$residualizationParam, + verbose = ctx$verbose ) } -# The traits of one context: traitId when supplied, else region overlap, else -# every trait in the context. +# The traits of one context: those traitId selects there, else region +# overlap, else every trait in the context. A traitId that leaves this +# context out keeps all of its traits -- region picks traits only when no +# traitId is given at all. # @noRd .twasQdsCtxTraits <- function(ctx, data, traitId, region) { se <- molecularTraits(data, contexts = ctx) ids <- rownames(se) if (!is.null(traitId)) { - intersect(ids, traitId) + intersect(ids, .selectedTraits(traitId, studyName(data), ctx) %||% ids) } else if (!is.null(region)) { rr <- SummarizedExperiment::rowRanges(se) ids[IRanges::overlapsAny(rr, region)] @@ -4495,7 +4598,7 @@ ensembleWeights <- function( dataDrivenPriorMatricesCv, cisWindow, naAction, - residualizationArgs, + residualizationParam, nPCs, verbose ) { @@ -4510,7 +4613,7 @@ ensembleWeights <- function( dataDrivenPriorMatricesCv = dataDrivenPriorMatricesCv, cisWindow = cisWindow, naAction = naAction, - residualizationArgs = residualizationArgs, + residualizationParam = residualizationParam, nPCs = nPCs, verbose = verbose ) @@ -4745,26 +4848,26 @@ EnsembleParam <- function( # predictions, so without folds there is nothing to stack -- and the old # behaviour was to return a result silently missing its ensemble row. # @noRd -.ensembleAssertCv <- function(ensembleArgs, crossValidationArgs) { - if (!isTRUE(ensembleArgs$enabled) || .cvEnabled(crossValidationArgs)) { +.ensembleAssertCv <- function(ensembleParam, crossValidationParam) { + if (!isTRUE(ensembleParam$enabled) || .cvEnabled(crossValidationParam)) { return(invisible(NULL)) } abort(glue( "twasWeightsPipeline: EnsembleParam(enabled = TRUE) needs ", "out-of-fold predictions to stack, so it requires ", "CrossValidationParam(folds >= 2); got folds = ", - "{crossValidationArgs$folds %||% 0}." + "{crossValidationParam$folds %||% 0}." )) } # The ensemble settings as a plain list, so a cfg record can carry the group # as one named field instead of four loose ones. # @noRd -.ensembleResolve <- function(ensembleArgs) { +.ensembleResolve <- function(ensembleParam) { list( - enabled = isTRUE(ensembleArgs$enabled), - r2Threshold = ensembleArgs$r2Threshold %||% 0.01, - solver = ensembleArgs$solver %||% "quadprog", - alpha = ensembleArgs$alpha %||% 1 + enabled = isTRUE(ensembleParam$enabled), + r2Threshold = ensembleParam$r2Threshold %||% 0.01, + solver = ensembleParam$solver %||% "quadprog", + alpha = ensembleParam$alpha %||% 1 ) } diff --git a/R/variantId.R b/R/variantId.R index b162df998..42970a797 100644 --- a/R/variantId.R +++ b/R/variantId.R @@ -20,8 +20,10 @@ stripChrPrefix <- function(x) str_remove(x, "^chr") #' Canonicalize chromosome identifiers to a normalized string. #' -#' Strips a leading "chr"/"ch" prefix (case-insensitive), uppercases, and maps -#' common synonyms to a single form (23 -> X, 24 -> Y, M -> MT). Returns a +#' Strips a leading "chr"/"ch" prefix (case-insensitive), uppercases, drops +#' the leading zeros of a numeric label (01 -> 1, as UK Biobank's BGEN files +#' write chromosomes) and maps common synonyms to a single form (23 -> X, +#' 24 -> Y, M -> MT). Returns a #' character vector and never coerces to integer, so non-autosomal chromosomes #' (X, Y, MT) survive instead of collapsing to NA. This is the single chromosome #' normalizer used for variant matching and identity throughout the package; it @@ -34,7 +36,8 @@ canonChrom <- function(x) { bare <- as.character(x) |> str_remove(regex("^chr", ignore_case = TRUE)) |> str_remove(regex("^ch", ignore_case = TRUE)) |> - str_to_upper() + str_to_upper() |> + str_remove("^0+(?=[0-9]+$)") canonChromLabel(bare) } @@ -111,7 +114,7 @@ isSnpAlleles <- function(a1, a2) { #' belongs -- \code{chr21:13988152:INS:T} whose real alleles are #' \code{A}/\code{AT} -- so the id string stops encoding its alleles even #' though the panel's own A1/A2 columns are correct. The id-string matchers -#' (\code{.ldFromSketchMatch}, \code{.subsetSketchToIds}) key on the id and +#' (\code{.ldFromRefMatch}, \code{.subsetLdRefToIds}) key on the id and #' cannot interpret such a record. The allele COLUMNS are authoritative, so the #' id is rebuilt from them; the variant is never dropped for how its id happens #' to spell an allele. @@ -471,16 +474,15 @@ normalizeVariantId <- function(ids, chrPrefix = TRUE, convention = NULL) { #' is `FALSE`. #' @param removeUnmatched Whether to remove unmatched variants. Default is #' `TRUE`. -#' @return An \code{AlleleQcResult} S4 object. Use \code{$harmonizedData} to -#' recover the post-QC variant data.frame and \code{$qcSummary} to inspect the -#' per-variant merge/flip/strand diagnostics. +#' @return A list with \code{harmonizedData}, the post-QC variant +#' data.frame, and \code{qcSummary}, the per-variant merge/flip/strand +#' diagnostics. #' @importFrom dplyr mutate inner_join filter pull select everything row_number #' @importFrom dplyr if_else any_of all_of rename across #' @importFrom purrr partial #' @importFrom vctrs vec_duplicate_detect #' @importFrom tidyr separate #' @keywords internal -#' @noRd #' @details Pure panel-vs-sumstats allele harmonization: match by (chrom, pos), #' detect A1/A2 swap, sign-flip \code{colToFlip} columns and complement #' \code{colToComplement} columns on swap. Variant-allele filters (indels, @@ -488,6 +490,7 @@ normalizeVariantId <- function(ids, chrPrefix = TRUE, convention = NULL) { #' corresponding \code{removeIndels} / \code{removeStrandAmbiguous} / #' \code{removeDups} flags are set; MAF / INFO / N column-numeric filters run #' in \code{.applyContentFilters()} before this function. +#' @noRd harmonizeAlleles <- function( targetData, refVariants, diff --git a/README.md b/README.md index f8b3482e6..d1558c873 100644 --- a/README.md +++ b/README.md @@ -50,8 +50,9 @@ Now you should be able to build `pecotmr` from source. ## Developer's notes + When any changes are made to `roxygen2` markup or the C++ code in -the src directory, run `devtools::document()` to update the -[RcppExports.cpp](src/RcppExports.cpp), the package namespaces (see +the src directory, run `devtools::document()` to update the cpp11 +registration code ([src/cpp11.cpp](src/cpp11.cpp) and +[R/cpp11.R](R/cpp11.R)), the package namespaces (see [NAMESPACE](NAMESPACE)), and the package documentation files (in the "man" subdirectory), diff --git a/_pkgdown.yml b/_pkgdown.yml index 2957dc5d8..f8a5f892f 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -124,8 +124,9 @@ reference: - GwasFineMappingResult-class - GwasSumStats-class - H2Estimate-class - - LdData-class + - GenotypeMixture-class - LdEigen-class + - LdMatrix-class - LdScore-class - LdStatistic-class - MashPrior-class @@ -155,8 +156,9 @@ reference: - fineMappingRow - GwasFineMappingResult - GwasSumStats - - LdData + - GenotypeMixture-constructor - LdEigen + - LdMatrix-constructor - LdScore - MashPrior - MultiStudyQtlDataset @@ -301,7 +303,7 @@ reference: - credibleSetSummary - credibleSets - lbf - - ldSketch + - ldReference - marginalEffects - methodNames - genomicRegion @@ -346,14 +348,14 @@ reference: - colocViews - colocBoostOutcomes - computingTime - - ldSketch + - ldReference - regionVcp - subtitle: "SumStatsBase" contents: - af - coef - - ldSketch + - ldReference - maf - nSamples - variantColumnReplace @@ -393,7 +395,7 @@ reference: - cvResult - weightsDataType - methodFits - - ldSketch + - ldReference - methodNames - genomicRegion - weightStandardized @@ -447,18 +449,13 @@ reference: - annotationJackknifeCoefs - traitNames - - subtitle: "LdData" + - subtitle: "LdMatrix / GenotypeMixture" contents: - - blockMetadata - ldMatrix - - genotypes - mixtureWeights - ldPanelNSamples - - refPanel - - snpIdx - variantIds - - variantInfo - - hasGenotypes + - genotypes - subtitle: "LdEigen" contents: @@ -561,10 +558,9 @@ reference: - title: "LD infrastructure" desc: > - Computing, loading, and manipulating LD matrices, plus - design-matrix conditioning utilities. + Computing and checking LD matrices, plus design-matrix conditioning + utilities. contents: - - loadLdMatrix - computeLd - checkLd - enforceDesignFullRank @@ -647,7 +643,6 @@ reference: - glmnetWeights - lassoWeights - enetWeights - - lassosumRss - lassosumRssWeights - mcpWeights - mcpRssWeights @@ -655,7 +650,6 @@ reference: - scadRssWeights - l0learnWeights - l0learnRssWeights - - penalizedRss - subtitle: "Bayesian alphabet" contents: @@ -667,9 +661,7 @@ reference: - bayesNWeights - bayesRWeights - bLassoWeights - - prsCs - prsCsWeights - - sdpr - sdprWeights - dprWeights diff --git a/data/colocboostResultExample.rda b/data/colocboostResultExample.rda index c08713999c82b97f5ba925154601714d7a48c791..4b8e837390159ba1a93d486892d515be547324d6 100644 GIT binary patch delta 2905 zcmV-f3#Rmx7nm228Uw`(S&X924Q1Y$ zacgaJvgUouN;e2uCz+PUrO;1@gr(Bw(#KlafmJq(VBo6*$GOz{ouN0on2LV%gh@68P0K7{T;4MKNP0{v)lQq1F{x6y7dH*Eg-^#SQoTxz(o z6_Gk2rWWh>B^Y_wo!3zj^)9p~hvZq2few=>cdM~8N!19>Knd*^9R_mf>Ky0xPwuet zLHUwMY|qz@7}Zjh6rN5%-Bc`)ox1*?EsUG2dW%}%uok)kqBPlme_e|v3~%*|OBDYc3Z)8#++`w5;cohuCieYZOrC{|e~VwfjwFslz`Tyu2C0(&yG zf8W!29O^$m8ktYGmP7#p(uF97A2JGc9sm9iSHP!^HnS~%|9|seD3@_xe?QR6e)B_? zD3eoX{JfoF+dQwEj=}>xjIiu-{KJv3Uj7H=Iw%%20F}YnEVhjTODaX+;dMAI!AFpY zQcZS1cM{Q|`$86DYC#e?xLp50vOHf&D8If%|a(65C=`7trAhaa|e; zwrXPH9Ry{r5V`UDjG-+KPz0XR_`2X-o$ACet_j_e#j|DSykLfHt001qJqinyH>!4r zEdHdi?%9BChq<+@ed$+M4PsaSR+dzUR4X00@T|-~E)-20Q)-NPgRlycUrIB0e--b3 zIOZ7UMn@%qu5l2?_{J$rAnpv7-Rv})81>3#6tKS5ABtzGp5bkq->RMLfGl+gzME^6 zRzhHH1u*PZuXl}Y&w4cKjbT~QAal}JTYJSQ-P>*$AYjxfxtj@gEI4c#7cnCzSCT{p8jD|+69 zu))nxMBQ9^qvzPnb*P?BVj}zbw*DErA9{5@Y{twK*z%4p-@+2$F-{e>Sm?=?OQ6x@ z0iqoSzW~9BgnI6g+7H)L`)ewiKYzyNYv55oDuZ3xFitjN*jDwBGeUA-O-4|5erss=%YZZ{ z9VL+-+MN(-=MO9%U~v9|f4Sam#ZQbe$mciC%9tqbFr<&&`lyX>fM-Az#ojhoD{N2X z6Nxz7QF7IB2i0|bVh(F(X6 zNCl9L#~fh%bvlIPAL9=*8T(0&+@po+s*5>#ZWv*`dEVBdvtbD@>!g;fSPt|QQ7o%2 zaFV621!GN^_l=cGHIoU`WV?o=XJ&BXTE;EtMa>fMY6i(eNbB%xzw6aBh2H{lvNmDS z5)r^B#wjU{1D+(Lkey_RAVIb)a9cN^1MfGY~c<+9oycak5N_{NG3L5rv-L>#{=UK z^cE?0gDP zO=$z&vM*mds~NFuAeWQ=TC}`pvj_4=aN{N^BO2& zHsRk!cfxu(rg*;KP7NA=aV@@c4n4M+PUZaWPL7oF!K$pru6DvHz?kB>n=0O7^l z-b`qUnHyzFf2M+s`0h#zKvizHL=Sp)9U8%}n-$=++W~AOImI98!19`4Tn)hf^k_2B zcHM++t3NW(h^+I(e{p#xKUVrs5ln>AvQ4T zwXF--3popx0f`K}P^^+r`GPf>vRAA!m*;RX^QAWVzomTyR}KeP0s-&r0&0T z19y@{0K^1J^%^eS%j=a1D4>FIw(cVRq-3cv`E}WMu_F})aNN2PyeFC>H@%fD2HW0! zoJg9Ue{XPXz;A~nQRWIh1D@i5`+Lp;tL=8s+xUd93Np@6>R$~kQD=o?$fOIn`15f? zT@znITv_(V&f(vD%25jelX?@Txw0ej#_SoiFihq*Bbj%#fQ*7W|pJsWo0 z50F``7Ccd+p%Z6pq({P(Gc0wX$~0anEf~1&OJYX~X0bctvC&~mP8=^MmhI%{S4XuW`xnFdDeHM7CgOWL*00000-k^1k00Hq9#)|;}xd>)eJ}?c70ssI200CKA D0`rP$ delta 2901 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 diff --git a/data/ctwasEstExample.rda b/data/ctwasEstExample.rda index 2ec972e8340c3796e7703f99fe59170094ca73fa..18d676b9984a5167c5c06bcee576781f566498b8 100644 GIT binary patch delta 247311 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

wDXzh>hOGfZ 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%0AJznI**j14{=5 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 U1; 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 z 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

e!p5B| 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 delta 247517 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

)dLD#af83%8g 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
    8z~Tw^k5E3Czn2F}Flkfc4?JjhC^ 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⁣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 diff --git a/data/ctwasFinemapExample.rda b/data/ctwasFinemapExample.rda index dfe1d581e57d8b1457fbf3bb3df73784b9010775..a9e01ef31c976a863a72c481045eded4e1b9233e 100644 GIT binary patch literal 250524 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
    d{kc+OE8X2vM&abUwE{8Lw^?^1*E8*N4Vup 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

    1*l`2s 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 z zVsb}PH`E`4mTu0)psYfWhK0}x#}`y@i{l<#__e(!95||rc0EHQ=YcTsNY%N8FQ(8kGJ2?kF+{S zdYbhlLwx}32l&JNOph`U7V5a&Mem{Kugs+i03rA02HS?Mt(v3HAIQUn(jqDleq9{^ zfa4wIi_I=*$|L&_HAr(=iaN(4y2c3KR@`XVHdLwTRJrM5R?lG36T9^eNB`SLAnD3v zlQ_6&VER#Mbaug=loqZw)#22ovqoQ0KktbMg(BDWLtVprwRRkD#$g%z0gBl4X~_j zIventCcPw4gjcixxE|*;BMGYkhC4L0E{cm(m*Cz=3++b-hH;tEYy@msrV@LS;urbv z+Zs^z311u{@qV!@##^}qNhWfDq4!`S5vL)i2Y`a`qwxwIJ*%*nYNevRj3_m8+7%MNoU2q5ElX1BD` z$1fP`L`H+I5|q%93XUT5=eWlyN5;-N@Hut^kwy-^g}V0BFjgSq66kVa)kXoj%Ezga zk4VWD1$KtQ$+V$I8_u$eTyx8bgF7)uz&VQW7Tf~!!u_0^L~P_a2Wa^CNUjS5iDVZ) z=cM&X*XTC&g3M=E!_dslBdDpi=?iN08mAvj)~JF=WLK@KDX|RYN!yi;{UZ#;Gi>5?MONqiH8l;!;M@&yuNT1YY!^LEh{+^{ z7M*l4SJ)wL0t6KM?!;?Js}PLYuxNIy^1Z@aJ%V<`30%X%8QlY<%9 z>Jk*g+y_j0tcm02rrT5bCJLj*Y4sqL{jhn+Cb)pU+?aWydys)^!2F`wF&0n6HzT=G zhZu?X`GB;|9$=v?EXzEij=|b3PEmmotx%UP>KhO|U9@}Wh36X!r(8zkcln`o_2ECk zC`^{f6BZ&50pli#Z;GLslB0dD6JZ_#XX7R5&8*ztF^Ro?6Kr<5K!f8QXUo5K z$7Ss-(nPgUu6B{BO-T>tPi|gR(x4?fj*pkbM^-0fHL>B2q5+&ZJiIZHT{Kh__2=0) zYml8R(B4CWe0i3gqAV8xo+(gI;8PI+#YT9E`C@xsduUmR@?y6TN!l3Hsh>53PeI)P z*a&Ns^%6Id5;%1LWUx`R*Yk0Pv=;eemTuEvmDs{LO=)1vh_Xm}R0Dlyrr4KEjF>6_ zYxUeG_fMw(B+)pyZbJyEu}F&6a6~zYm3sW&gE~a%fsN3WToiIX1?g0o4mJ_lfGu5W zh$~W@?;BusRl*T8+3(zNP*3~%bV8>sQ{Xf7YH9-GnNY*Z4y5WB7wqPE-TTeCCmQQv`P-=uc1A_!vR z#aK}ZQHZI|-3(R*8Er>Cx?SaMk*76Ydl~mg0p=lp<>+)eJs}?x%yB`OBem2i)tD%D zRT63^A&=rPr%%~IMpSbZNL*I!NU;rm`L9TIVAN>d+;H|##IUSo({l!br zhujY;SY|R^U($`)|Dl@RE}X?<*}hw|HKM$+alAg>7}X<>-31HLpl>9=#Y*g>XtGr2 z$5aWq5PRfcEO#A*q-^j**44TM@5b;adT|P_q~HFV9z@{IGl^)>;B~DhAZvI?^CV;^ ziNByU%mWE(Sl2Dvhcl@q<&W3`KS&c!xy1f)L=ExDPyFDTv+h zQi`j2K<9k2t=ReAM$*D#S_`Zu zl|E;(x?6}5+E9Q!&Yp)%JYR@hSF3i0^7E$Oi{?3Tx}qc7SjwI|iY;Gj!2609_pPSz zr>gQ0*9W1YzXK{^?dCT9OKU zD+BRo?K*R%FG_Nrr?`YybO5kV?+ zE`+&#D8()T0RFJwiN67z#mXq35lE3gk|)a%JZ#e(99n6{4b-d3tdUxCy7_Y>zL@&# zJU=7eongXY3v7y8Tw8opvCM?aE5B|kxpx^RGdA=rCIZQWOo>`Va5~ejcfRht!OXO( z`wi89C~WB(C7QxY;D_K@F=GLZwVd(s)^Eq zML7!!W+<6PVeqCN;Z3}Kf6zpRhYRV&@#i!b=-0Hh^3-$orVQwh49IywulO;pLjL6Q zs)I~$F_0#{0IqSyyk}t9%Ao&K+Kg0yp5LCzR4i07FX|L^3?ds6Evexk&N2QP`argl zK0Nz{p=o^2MO+_Wq|;Yn^qg{h`Go4fVnRlza6eh11I2)TZiiHc z*aE*G^pv`OQ`5#5lNRcV(@d?@_z(SB6^>*-CWppZO%}!v-F=owM)Xxx9QRCL9!?bU zc+Q>}`^vvioOKg29yWWTjmJ6fF%>C`Sd( z5DwdE3~kS#Gteqdih1I^Fa(&uzv2YP6^czX=_lRlsNyCZdF2q%t`z6yR{$gfaDzPU z4pW5aiKmOXqag-|hoc6=>jiF4y@5BqDhoGn_~5p#8|b=KSpy*bG*JdUH-^Qw-uM#y zbapNWT?*06HBRMhwm5KY%DQ|lIP7m?6I4o9Ky+_SHr+@8ksQv2-?*ssJG7Txb&T*X zU4y!_05ntkKG)9utWzEfx zLK$=CXp22?J^%t+m3+E)DV6Vq6>D^+T?rCAw^XmatJL0X7#&9{9OE&1-A$ywd1N@M zXlN~l7u3++W|6LPmQ`o)mcZi3UBI5nEZa!wRDeIj`GY>y7 z4=&Z56et}#)pjp-4<=x9x-Eao0W`GmJ?{i{P6_Q#t0Dw3odF$W&~L=TgeG4!LtD2w zIE&J96bwz(f8K7ee8m{tbI{yT3MBc46X+X$16!`mdYRW}EH!vt&)FT^z^6+gPiQ(E zC~#%rw9zW|(itFh(L(+bu+q=>^Gtr4c4k?LDmes0a3HzJ?gmie|HU*2YwJOx{|WbA zTjdt_Dstg1vc&5_8t;@ag`8UzfUPm+(Vwmp!8n7i?N{jzC?fi$01Y?HIDAnS^99q? zNV3rul`g)cyhnJH1|kPR#nw=&2x(3XHB%xWQ$HHDHSzHQm5?*Uj9I_$;)jc!Qia*} zVC79GGInpRdSQyuTbTrMk4i)>05KqZGgK5JcvoLrOahBFJ4J2FvDlq1VT~@0F`{{a zymC~ovDrerRXlR;xBFW2F7+4OL@P~nTy-qpYYz0Wz#vbY=yhjzIn^2FICIbV2hDM= zXcIDH*pG_na58Tp&8>-L)u#Jk8o{E)iC=&K!d-M5|09u(@(FPKM+R}#w4)XKA)Y1- zE&|w+bEi}BsrOen%sRJOnGMy3MTvQ* zySgyyh0~?c_vguL=ptk%Hev|X@*0oq=t6S_%H!_g);KDP<3YVOLV62-Ky+FFXoH@h zrw{SvyaEQZK>D*{TA!Y}@#z=Zna50s0e}z?G2PKf185nQR$^NxXNj!U_k`{SILoGj zA&>7TrNWzN!Y%!@Cp-LPC95~jg^qExAkQes@?8U@h{XZhiZzIzpMRfBl@|XI%f`A_ z2RkU=zt5!_`FNIzz$a8hbRrvbUuyN!w;wMeks#+Q&3;lx}z(outHokpAZ4Pa3PE& zgvM*6!R?V_1ni`Cer=yFmwN5&=`0Wu^2C5relo+0H|X%z>tt$RMy14IIU;lc3q>`{ zH2+`5n_qXmp*6ZBF;&42YFy9E zYD{O#jf1g7w;>jm-h;y3pD>+bH$r9-!}lbdCgmGlzav^=NhI*#IGi6V;IX9=V_(Up z)7X6wIgById}!p6%&Elkl+@y*Vc1v+`#Rv&cXDp0P5_*kPLrXjm^b*$m2Y7U^oRzM(wW|-!2nwz?L>46poMNL5UB(xD-9QNAL^2qLbV$ zmC+@@Y;U7$@~Ss#jIinRlj&y8xZF$p^aSR2_tEQf@_(6YDbrCTO8N*0UVHwK6vI}y zye^@pRWO1*2_|vY9NJF|{gqCVj%fPLMoUC1@#2{>iDdufP@X$5yClc&6!!PRdD2GD zXb?C67l|OW2MP*wtcipj1$bvlEx?)juiFVg#JqXm=`I4Cf8ZAACPWi>NZ&28U+qu! zgN6~uV)L?JD}IUUdd=aKALZ)&W+@#2G+n~HwTLQvm^r=p+E#zM_F`ezJ{OA|f%9RJJt9A2G5_KOkkGA-@-k!6vaj-1aW}MJD zIKp2P*i?6WYfVyoGV{7ISCJur;g)!`RM(Z5GD2>Qi*KIoD;5K)1Ty#SO~~Jk#KmBK z5T2RI=3{9H3h6EBH^E+(eUdk^f?xsf2vs!${I)eALG(e)<);~k>HPRHMq*fxPlyt4S0j~mMPR?G(B-SnrA%9Sq)F*C-;o|3 zS8eyS{Dy)_0~Ea{VKh37hDSPDmD`H=|C7|lvZWUYI;@&xz0QH+O(Kpn~Ya+-XT&VG@O>xvp1@vL$`oB#(O9eWhaN1Fps`~(5-Bd7*7!40N)4C5wTfp z#`-qh(^lBU?Wrf3oZ^R0%!%rAxTDkYu8NMKFmLckcs_`4C=_AI-dw|wB(Bnu`w#j( z*y%6>ZFFN+OF%i$5Kwci+VgP+gR2=4>+pyO@Eb1knZPA}L^H|1{{l@vM25S92F z)glDdYwP`(U1Q{q!pxf@77^QyR12U-O?1!;P+ie*h4s(sXc4ge`kp5Nz7fqGSYSnF zeh(-#Ks9Q~umAUws_=u`6vP>4Fut`tl`!>w4T#TdtKwWxIjIXnTbhshAa1)hi3}Bt z1mo2G<>KVK1yO6qabW<+lOb`-Zl6l|c31XVIpKd{iFG}hW;7}X zR)bIZ8|~2$>SMw^vr83DJNpEDzZiP5%xHlMVhn+o4J@ZCc2s>pV>q%#l7L&j2a>}G zno0hzc0~LQJt##GC2yXfDcDdHQNi2%>)OfBqfC;l;;fg!$HZy-+xUqy3vS$HK0O== zvNoGks{Ov|dihCm>HoCG9;fcKep~8P0a26aKigCaZ^}?uD#=}^3m|d|c`^WQJfzd1 z!>#N&o|{VV;3~C2rjihB!eU~=YmL7(4F!%+l%}UQp(S!TrqlG+7%7R# zJF;>saUIs74XuW@6HttpEy|O~;Dk4ivd+{+r@SyL zw?V4DnoA>Ck8ZW?tlXacFd4pe^CMt?CYmTcdBBo^i14i~s8Fog zTClLT?2~}mGs-s@4Ov)!nl%-p3Qa#9>;BVK9*6@p4euQyGc2dENPQC*JeeS(vHj3G zq&z(K%CcsCPdloWP~C(INcjdjJN{B9jD!8-T;zh;O7x#n0H*W_CB+$pQv z5{N*w$Br@3OlDkSO73%M4^#pLf9m96VFBr5|8d0L7*uP+2W&91B^i3EmNt`jjhYo{ zEpQX-yuU5_n?%S+)C6ZC_`54Q%w#=|7=QewkS2&fW+(e;S;2+b%FA*nyoin;7U)iGi2YSLWDtO_B@tVfFn@lnI z^|O#x!q&lUqBXTwso!;ANz3C1EeXR45O&2=12B1&YkTDz-+A}^c8dN{5FKCEl8- zuMWO$epSt^K*gGg0t35Ls}?q926%a*JzL}m&nP1pwMf5wP%LZUD#KJj9H@Vp9}3Hv zSpuhTH#K-1M2=jwh~Gj4s&H+bElIxkMCn1Z`SA1hBRYyNRh1~nRqGxNzbu{Q(B8BS zs>sQ=WTAq2FHJILglUNp>No(L#l7ZABrc2|F)4xq;3lS*izG)*Zw%0ncnw>?Ni|hD zW@)3o_#M`dO7Sk}`bQ{RQrR5sO`u6K=Dd*O-B&T^ySCXQ* zZ?B8t8N%6jr^OmG!H5mHz_Zh>ii%L~5AhyvL$~H|ueKC~)s_<0Sj7eK)jJvwy!L)u6>*`&@ct&(3a9GI1j z2!6I2xe53m7-fgW-p~k5l3D)Lueuw_vBS2B3%vix1y6A~MC0j1{B}n7Tp*%+?xzjg zi<4UadThrqq^RGcvuef8w%a`GY^`2q8c;baJ_RZwS0)JUW5u@A>CEm*(O=gl5U61f z%Zm%C**T=9{!6F0nF|N6<12^o)dM|L0c5jBj^^UqjadBLsBR z=~3gN-o>F*BXHCigr3oXhP$H4Kw>rGb%a46#bZtk#ty!LCqz0+JIfTi53-<0(BPcG z?8T%48GZ(EIx-4%=yLei8Op2)@+8t53YL+HD6d8$EgNfHqQaMvDg@p9#jaxxB@+-j zZa8d+#90Cg9>HdX3^I)xTt+)R5kfn+P8EUb$?~`5*mbHDyOB$#&){tY8kgqh!h||t znU`!EtXf;&lvi-}7)Bj-yl%r=+L06fvD!LO%Sj~t>U1+c%ZyZD~n?6Uh=XZ9$> z!zFadybD$qOEmiRh-q{?>EBvo8V>~sQId9LT`FP@Mi-(mE=#3AbL9kw&^8aK%|-ys zIi!a-;ZRLZI8T)u8bQ_hv1+4^LJa921?{t614>}JjfmjzlWv$>lX~~16kU5QX9&6@ zFNoS`HJIkiloO98XY1p}z5ZGa=>4%JMNFyE+iqY{Tu+KUwZ~PKm4`iF6gz z)A4RZeHla2A;L5lZ6HyftWTWB?n<)=ogSxBOZQjH`~3ihJM4j3<{8%nt}XmrXsUn% zS~xwYH+?&fUTZEH3vygFDuKP`B_a;KS8>nlfIY!;OGHV~8vqd^BMy8eH~Q{+3`SpT zWuhiw{8VpZ>snt_pu0>1Wy6TnLi44A#Z4GW0y$w1W7KhLR28;0Gl`F_ZU!>$s5+n; zEwt>g=<4NL?WjnJ;2T|?LO=W2(w-f|e8jO$#!DpQY>=Bd;OxzsU)Om$GQ#5L5W`b_ zYM?i+=4*Ot)oE?hBrQY)@n+~ItXz#-Vq%DiB_z(gOtCSvPq3JjY9B-`HWfj&6FFaHe&xzHK{(yY$u!B=bVdg1Lnc zJyZ4%XXez~pOhmWhK%`BHoE2z}4 zS1Mj=L^Il9aEH*izyxNWoQe}Xx*=xZ^QL~#%Md(~Kh&~$Ab{Du(WZ%KwAC|M{?Js0Gb9@pT46OzGcVB1dfA{Rs@DvH`3hjGSU-ESG_=@AX zf3#+_XeJCc&Qe-vsV#^X6{2Rvz%RJ(Rfr{uRT=gnsW0GBUtaUdFjLpl=@csP)QH){ zVHKv)z)FyT`oV7m5{WY%zOCJh&){$gfug62Oo5W-F}`5^&}DElR59SCC>hHhSg*c< z8Tw(g?Aom5Ef3W}AaLG)a+ANW)=`P-YJl!&rBJLhQkofpxxQ*jPccF9dhk{}+teh( zmVAt2EGlF--Ddr)KPTinZ;um=J6uatvA#|RjMFPqGxK!o?^ zh68@NFpQt;S8pZ-=Srhe%OmiejEr9Sbj8)vD08_`_2)!oODE5nE2f`o!bF+I)PlvQ z$PH<>PA;Hr^|@E8ibDlN61hR4e6mXxaD@M?!U6}Ef_tBVoKBb-zbCD%)SHJMQrJj5 zUFsl~T@&k7++zwBE%s*cfat^KV5{oUUxbzIEo8~EF*z61YV3WxbjUg^-KV?rK9gGC z0J2J4$Z3{s9<645cp!;m7E#&-V3=Y&A#S2O3BU7_0wLG@z|w#e!*LzN#(FX(wFZ=f zX8c7`)VSudL@y2SxTKrBuJ9_DoK;nq_@y3EMn&_CHJ%-8@7#9$M*}EX+sE|BA-X)& z#SUn!G_QX#YH54@CS_w@$f+l^PqXnMPRHNv1@t<;*I&g-LjGRxBbFjE_eZgwz*Kam zg81%p1a*h1eB?(DPcDgD*A8r*!fjn4^@p9>Rnnl^rvWg-BG4RK;4!t)cM-b0D`c=Z zd6{aSm!Ku0$u6|eslH2)89J{=#BK;#kI(gkL~erNozCjOxm~Hm!CtOYvCd?%#ra95 zeaH*Dj2lDoSMx#5LJ9C$*VOThNSw!i-1#^ehb2?#3p3xTk-_un9Tm5)b+*IwVdS)y zOB_qbO`MeWIsVtfvB9`8@Rb;C9HdC(?$rerD@btn_jTn}tsD=90^P>6Vss_8lo_AO z%MG8!X_DTFj&7i#Xz4{*u^L1l5kvdD*=l8jDQRlR$IWPc8=d#tG{o=h^a=(f-8dP`@&=D~e|wqI$jL*LC6pBVlA^7lXrM$glO?K<{Oz)9ek>6*QY6w0GVt@v#!Nv3R; z{N30hi=PLioX~xGyI*fvtDEixb?+fF6G_g2_k1ioj6IMDm8m6%H@{L6Q4upi{gB5J z!g8$EZn9r&W+z{gDUbp4$wTORyI43eU3PO3^6&!u-V;@=)gTrtnp>hs;E@3Q2qg(J z`xs#@^dAV3eGyVK^Uiu!*Y6qZ9cX=_!V@L(k`*tie;Gl6^b=JZA>w{173B7exj>oC{Zl=<9aezWOX3#7^s zy=-)3MD}5(aIkVpWAIh0!H7!QU5A#~f;ktwZt>Aa^po*uSMR>VNi9tkeB!m!(8C1E zI)Yw`4|^p&R4B%e(Tz)7>S8)U9Pz(DGiyNY4@2H;!m0W3g8ZUdMQP!48XdVT*dY0K z^JqZqUTWj6(>Oz5VgkqjCiCrWC~z%d-t1aODkJ);89$7|2-@5S@x32S?6JUNbt0qfj%We_Da@QT03;oDmYf)AE3{kh1E>`;fHpt^P1 zw-p@ATYeQHqiKEd+lHc{c*om6TV$?$b5Bs4!r#Q}K3T=QKcY6(SHc}Cbx7-;+ ztsRix6+H!?KIDZm0Y#vR9WVrj@!!DpxQ3mTW(;IKzOZ;ZRNt-M?{2|;rOTx84KUMPBWtLb-V}`mhBvL@L?fY07 zt|pfej3M$5=1Rcv_PkFU5a_9`!oQo!iqURe5x+ks-z*`x*qMkEl}R>nxR&5E&!*IF zHnYuNU6=OLYDWNMn7a7Vnqu9!`rD$5gZJUauRe{J&rV!Mbz@UcQK76{%>W)487d>3 zW^*I?m;+j`;Adh@mSG0u9`+?mr6b)yktA@#rK$>vzvwzDqVrT={IfF}zBoRU7o{e8 zAmlYZnnHjZllnY7e+I`VEI9c~Ucd`ho-|ke$vn%AM7|`A@=`#%8aMjU<`fQ$r+9Bm zoxcOsKHVvs4GvH~JRGIXQe}}r!sHNzpB*=Fq~mU)zo3A)#>0g+syjJeaibX~#6Ep5 zfK=*xP_M98LB*?Hw;HAqZ&)Mk*A_Dh3qh7}BGaCY1ibQK@xIZ=C2r7c31kgi@`Z$9 zk?*mr6^@}+*rDGue5@seAz>+X9woG3B8s%1Lt#w#^>w-aFtunrSzM7DCMyawSuyaC zqE-m^Df=vQ__pc_y!l-bR3M~+xF?n5_@JC^h1`GFvyx7I4G9?34#U#4{-eK}sF+C2 zNxAYR{IvE{#F;$a@5kF+fB$yO-^{FOv76->B{?Hjyt5pIi>Dk}h+4Mm>xq7CGyp`h+pvF|ifU_3jc1 zHkPsADs$oGL?x2M4pVW4Z9Dct&=8d$9 zEUe8K&`Bt)$ax7A&oGia7f(`FdlU@hshOjG@J#>O%J0lR3F3DQ@a-pD0Mj+?TrQlP zxR@(@Uy+cA-txwimqhoJDvWC~@nGB?ZaKSCPRB8OKiX9qe2i#Hlu(#c6c6czrUziU zy@U+MKQ;Mi#6NU;HH^oQDgJw~kawuW8`hxB&X1dK5Sh4n5QL%^gI0@1zf#@ z2MF8?F9Maoc3 zn_ds^aHX_IMscYd?a4Pr4cb<3EU?sYy}D^$Q5lPOT|Uh2LVmlE>bX5I*lkyg9632q za71iEF&;5Iz&^7woy+k5Ts-r`PXJi5r$=WOHZ#HiM@T~QqXW*qJeHIcnle0s2kqvR zL!2b-q2l0M;lpRm=s@J2h6vV+9_+8CSQHfwx5sGp1BZfi&3751^B~`Kugg(hWGtZ0 z>{gR#%Yb9?{T0i{<>cuRhXOVK?k9AZ$lwT_o4w$s3Nq1&t}650!jeSo6u^!>7lX6k zhh2jL99G9xWY=9>Ze~B5%jT{GEAxeGrb=~rVjMlO!Ipm{paT_28>@QW3FJt|ECU|=ujE_(+#1XglF|W}LC~>gDoDL2*G;ZxD;!Qp4 zIA@DWbD_Dd9RbpMd3Iv}M`1lLcw}-YfFIQ*>jaI5fJ}Bm{49$f!*M;@a^MiJ5j*;E zL8@f{C+DWT5>ELN@B?}Fy3HN(FFS-*(A(?e5Z1O;TBQ4tMu4Y;j6U5c%yODJC$}#( zJ1bjzmvQ@>`{1Z)^VZ+EA4mmH9fW9pFu(gL`hgll?sD<3R$ngpF8$kD z5c(D5i=ha%*mHric5-Px1YDUwUe)zJM_4r(H_dGiF>dF<|b>>w@)H6HcI!_quYBsz?NtBw6jksK%S@52c(#JV5`-?Ke5Fp(eaW3gv zO%l6{4Qo}SIN;msry6|*S&vxy=rX=KcK!n3KHr7w8Xd?(WgN9;F! z&jPupU$tp140Tlem%ym0Cj_cjEPmiqKF%{>yEU-`J0zygQ>Y8E82ZSTw^4_>j0LEH zhzNos>XnBm1vE;JDV>&kxTNw_sd{w2>*Wk&mLnSp}Q`@s{~K=Gx^ih z)bMS`s1O6n4zToa-6d@=W%znMz#p{YtgMit*fJFAHYdGMIcu6iwVnn?(eJvqO(R=% zOEtU^^jGCPjd2TDnA-32?#C{E)Fm9idc{W|T^3&{pgVP{mmrUpHF zn^jOHsmC(B8TMJfegefK1tTJZ*f9ipTLpmvDIxfdB@}P}Fl5D)&GWos%5f^D?IDpO zh+qg}^@Yd7p$SG=kszF!>1SUn8l$+qsv5~+vf2<0z@vT2sM zRN6T78qi9KqK8(i6sYqg)LHa)1Qr zf@RD+;>W+4iaT0Nljw$7!`N-2^?hgT;$3uSD&svt3%IAxDCLVMO!(^4Gn!Sz{3+@K zRO~o_6VTx>ySNv*uIDr$H%O5_)*&V3W}x!TAoN$oS7^a?R3p~50wPaH(&jzMyg+N$ zg+PglM;@D5VL>QO-~#8UnbrX(>fY4%gxOhEw00eqA0n?_X<+#J7eL>r=n43ayM#$_ zM9sX;b2qb&ip?=;qxEVy6q-M^sNgA#jDs_R!q6jshG_~0trWd zA{N>lEul4a}(i|&hV0ov>5$Uim}oraQNPgSyhHv?HLZPg5s(_ z!TuHniF8jJER$T4^*E?q*lx`cMVPiDt_n@JVz#*iPN2wI=_m_k#!_p_ z%x@<%k&78JO;6m)&RZE*m&c5Ct;L{KBchP8QTQ|`645;tqbdQA_xi9MvIEzQQm{gx$b@V50Lc-cbpHzwY^}U*e!&X^gvo zrpd$xT(gDewBT9HlWE|f)9?44rpgfm4rFSVAOi&XrQJ%OPbe*c7y8ldE+Pii3P@{v z8OO>)agm3~EbvtFQaNS%3(uU=OEJ~P)AYZ@H;=+;cNm&nCoJtEWYMcb@~|TFy%}GY ze?KkXO{{_kZBIf4|4CtfTxQ&LsZ5cgIZT}AP2iEc^q@J}^7LjTnFr8qamLny2$Dm!ZESI;%i=pf-78@KG)~pEkl67eI8{? z;1u>f+TpPvPsM#mm{&aEn=6N0{@iAM!Jk2%yfA#7(u9JofWzdITqpRAMD<6SU^0GQnCLFoYB@Z-AvqB!eCGq(Od!a_W(KUI&K*Wd_O2 z>}L@D_V3J37d}KZ!dA6u8q&ob&vBk7C5(>W=(-G4(p5)B@7QMA9oci%1&=^T{lkMy zEr0MD98kO)kprM{cezS9ux!tO!}^a;jBAp3B}83toU_;c7;7qTr27sK5AS?=@_SC& zR?+n5Bkx*V%)7LB3QZB3SKDXF5=Rll!e@beSLcB2sTe@jyL&%SF?MfzEB5@cgqJWG z3D7x7lUT)3laX%(uKz=w7c3VJ{Wf10k?uKEro?beE*t7_KVUm5oFL?hs_IcVkjXWO zwgD_ji;p3Bk$BdxAm@1giJD%+8vWg3 zZ8Sk{Etn_lQ`$!lO}&LeCR&0r{6m`#k8Jl<3ljZuYI!%Ww78rljmYc!>$@gzMU*{t z{Pu$Jhciu?&(a`o_`6LtUCJ!0uwjUl63NnR`NA)O0EluI8rlDN$a^#+{p@7<4UDWi z!GI9cEM+JbVbh&oD-+kL*e2NF_3dP1zL;N#b5sA8B%~PA5jGtZHRbMKi}A)eVD1Q(bkW7YGa^sg9}z>ImCzqhc@4e-9*0Mi3Hd-A;!O(aw*?i z%E*t5L3^U!G}krey!%`DFFM-g5a{{?MOdIuP35IL1cS73X1OxW!;E*8V^w_z1ok`X zlNix96vx5*)z%VgbgmYM6}NEL0lMsVX)$?Ar zBjaPO8BgItLgek?$!qkUQrR++3 zOdQwf7Bt4FByrx7Z>t$tpMs7u^%3!Szc+WrSzutUmvSQY9fONNag7C)BAa1Z6!D{; ztyhILt47Ljho6+B@*{zDvjmYD;vQFaJ0%LaPx0IMrtxolU9?6L@c5?yfmvsE-P{@{ zLECz$rAgLiYop2f&t@azw`UT=R|6?WzSro4AM*YUUScTXPC#EqIx#_}h04mLD4hod z7X+@L9#qBxjN*?yz%F}d{>k*x@(U71KcX8}Ikqn zGF}wQ(ba_)NiYS78@==4K0e zz5C)eA#htVg>=3*$UwUdHy^#bfOzmD(4q^%2V1;gD`aAUC&;Xsv`$ECcqbD7oARWV@|lr)%RSU`=m_F1aIk;sz{(S=x|2akWP z8_{j??C2ve!-E?z5$f!8`!t_k^mAwxxnJ=?-F07)vMHwjX^2&FAiI|;4QMkiD#Crc z-uj?tiXd#3YmRXh*^=u6&$NQT!F80PBIv>A=!i-8$p<^MU3C7Cyz*#TVU_rO&~Q`H zkVv4uLpZvDuPLHQKijj-=5b{Q0;+sd18Hs;0pGp;uD1Jp8SP{DP^<_n7W=qLDyOth z`*6vZk$VKS2$SRf3HII^_gXYK`|R-w=vH7xOI_)V#r~GPDzLrF@X2BF?#O+YFY+52 zu*7CkWgmkfjvPpp%;*U>UnDXc4MQU<^puu3WHuu3fE&_P)P$Z8%nGQouD><`Tr+2X zBo$Ho&>G8^KX;&8{pBCdkMiJU63kgt|4|c_tB~Ar-3AV-!=|3gueDf*FJLpD1TC?e z`S0k4O%n_9mypVKuwk31l*J3hb#wK#*&^rW9&x5i1rSd!``VYS*a7FuGpn7&c%n8k z-wU9{mY7DF;PF(2g~Q!mYmTm8S}gW|RT|f~pT+_ghMmB(pLx@B31=Q{P5W4jSKn$} z?i$I7%`*8t>QDjIy&sv6fCuX&fe5lf4tnJc&wn@5$4NI7yY#W2Ra}Amujvm zT_c99<)2b+kS5;N_nJY0z9IC0^)6LXn=)chZatko6%lonR3UehqTTRpM?U^X-D;?- zmXlgiO5htrzhvDZC{VU^4U6vgK|N_?|IF0!w5gHDGj%4zaULWwEC52Y{Wl-9t4I($ z2+f>Gt6iWu9_a;nXqQrhwP3uqEPtp945vd}13V)s`PgTOkNMK%auSOWuy?cCWDXfF zn(XHgd}+T9k@|(zx=ww!t`~+aXB4q?&BnMsub@mV2TG%D|Hl*VrQEA3mDdppJhCIBP#5X|yYPvH<4WU3#P z%$4UL@zUDv4bTUoHS`P+)+^#vYO_vURNas~gUyhY#)aB1NN|X^J5Stw88E-Bq z_7DF~15vOSU-VXa@t%BVb0-~X%U79y$#5M6itEa$r4exwLN)Y_7iKmTkL!_1^jsA9 zw|)ez4<*Y{$T*Jt=Ksa`_+*4PaM6?p(=R_ocNTZ~+PP(a|x)`vMD7J1?5V9Vm8@(-i~H`p`Wk{m?$>fKC3~%OJDRZcZ#;@O{@31rZ%R0YZFGk zojJ)y?AX_X7u}wKD=_gWb`Czt=AP(b@*|2G^h>j4k}gC(&OO*SXUFIMx&%gvgLN;W z1DP}WY{0};mQ;Pg8^=Fj3Z~-a2(;!r2u#H9u+f+^zN^CgG_A28t|a4P6*+{mAk{J! z??q>c9ps3nS1~VMQtB;9L3*AE$j3&qR5a4yEA)*>(4u+>B8m;ci(Y1U&fov6?_2)# zyv|iarkj0ChU50TTLEw?X`I%@MlUVPHF*{G*U|R$35a;C)nlc_qg$D|mCS||OCl7N zS3qDaF7|wX&KR{k`X6G4gIH{E4Knq?E%;7#|76-Ih`IaFM&pCZ`{Xwr(`$eFrUYb3 zi>tB9*tc*g_YIBq7`7{U4&Nm&nD^||5Y5I&sLIfym>;pJkSwtvYb zcPoVGVh2+F-jObkCx@~=>r@4U80hgNBu@U1%w9*ByVm^03alOW)*oaNkL6C37Ca`;iR?3 zd;6i|=q}040gyqJAUnUF;xyG4&zsJgK$yutI#nd#5;rlyUf9{!JXs|WLCm<9mSmK$ zTiQ(WEWJRI!Km_jo%w$(E9SL~td(1swn#I`x@0LJ&Z3p zroX(u)hl<3i1-dJ=Jsieyqvm>FBZp>;~mX5VM98Ku?5CXYqnD8@D`Y-2(nSFo!vnU zLSM;*p^{Z?#AvXhH00zfXuNU5t4?6*oewYC?HS`Tq*06(<&eF|5~Uq{7)oA@`Ugl#XOU);&UJ z-3Cr>{L%mgfl^_JFn6qsL(t22k!^lBtp=!i4hH%$<*tfW!~rx|L%qNNAzh~~;HT3x z33arZBmKbjOCZ^KNNz?ZATS&V{Us4ZlK3vujlkx)0YYP}uCx$5wZgRJEMY zIPE!rkd|3(g1KfduS64zmcq2|cWv0&rhjt_AISFQY)l1b3eeonbSfL`--a7ab94YR zFDI$N{=tTrKw9U6_dx*GhuZ|`qk{6oN|$PniVk(t+#!%++{da)Y4FoU>alV!z~H6W zOx`{vf)2kPERbff(B`2beYlLFH#(3UvvMdE}oR-@fP#FZ;n%9#u2OE+}=f6qyZ-cZ)RSe6$P37S0q z{^f1Wc;m7a6Wc|U<+xYvR*35h{j8u0KdHoBJ#~`;^`MIRvgynn#MT^x(e2Hz*Ou|2 z6j>r9>wnkk4dh$iV=n|?#|>OFD29mA-!nB= zLozo*|4!Dlv<^X>+w4N6bwbu^9&_{I0F=V`577_t`rcdfkG%jyhAD?w?ybYtg+lyf z>36W-V41et!QA!@U!+;M;;T@o|MSa6F$TIe`CgSSv0O=jW^r;UVe8^l2O-%;DyE`y z?ba`ism{EuAXAy29l8MMHB`s`}$<-TOtaTewN8fx^j3A_oXy;VZ>Dk7FGXCl0 zCNN!T5lt5fLE=ae4WtteAqiU8l)!mPzHGIzFP=}I;bi%9s=(Rn3l{P^G&v>wEwUbnFI2&V=$aRHdvjVz^= zRdd5$Rf+Z1^?j_K293>WFd+tyk{(seMdVrDlrPhgpS2B1%(pyOiFs$$s+OooO#!tJ zJq#{8wP+;eD{&Ll{*(I0u&tPubt$e0Vna4P^(0J)$4Z^fqj+BjaG?8 z8p@9#Zs*)9pc){9A|JxK{+F`Z*0yRmTllRoWGk=bM;g1frkN&yE1M$!gpQzelWc|(2 zRrP=eDHPA8B?6j!#W%6r!NDU#-bne1&N4Yp%sZ|H$3M7fY_U^LbIBAU0*~Zt!IVuC z;c?x^0=^aaL`(}#61aOevLSZokQ93DL%H&6%E(m}i~=+G>yFLx5{h`_mz>JUhF{mR z!z4)gQFzd`#Y?ufF|(|gLAP2P4>-?E&FWLSW0%}rxt}%!v55k_K?pv6Zyhpx#H`6I zNs|6)(;g4y`6v@kw&|X6y6SjbD+3%g%lE|0nV;mhvHLTJM{J~B)-MVydKjREE+g}W zbXKLI85Y>ZE9IZpukTsBpD->yj-#kU{{oTjGT=N4Ter=(BU=^5!&7;`T}1`1Ivb)* zXIDADEoQEwp4MWAe4nX5R0d%=t8Qp+H5MZLCo=1~;*A)8iH;BbN=O2o_C^t~H+pHN z_1rrRGj%j|3+cAfS0JRAU1>o-8F8D_Dn4D=V>WAv;pu!A2B*u(l%Cnds@pMgcLdsF z_WUyj5M%Awusq%tV?+ux+pWP*@SXk2>nyq~+yJXb1dUfp%2Aif-8zv;@9{6%o!_?a zgR%Mf!kP0*4RXUa&P(lFz{0=dHx9frjnN5uTp|sw{@9Ejsa&$F$MKXCxvZQa%v-gS zU<}R5CagJReaVEx0N2z$&pA5HqNh$Zg|W$mxYIi%<@80~F{0E2~NUsSaPQW^%_{_HI*WhtE==T z#I*+P^pe?->|cN+PS%gGg4&#nQ=`4YnW2Mf`29LT@fxoqIAXp9?)W7>m@s=#*2&i3 zV_)wZlEhgfc8u$_W^O{;K+zd1ou=+egG3A&$W@EXQN9o~krDoSoR2GmcJ~q;<2Qbo zuANUBd-{R>hL!WJe+Z?*ZyOp-3I%z&cS;WNdNZs0 zX3MN4-Z-9swC@3-`xm*10#Brjy#x%4?^Owi=YFa>qi70yj3RdSx{PLq$B<(H2MoO& z*TK@C%&rNSRRAw7yDO*Hv4a_DfeaLGPF*QFA1r=64?zhEaoP%ejoX!4%qomcg)_!v z{dLQ+l_X#duEQD309aP{Nn6>n^l(gsN$!0DhqjJ?wltdKJjqYr!agkIkLRq zX7*`narp9DKMw8b510$3r2=N{%UP?_A<__-Vl}^uob~4L(YuG9xA%8Vx0B^*=cTI| zn{`sFj1}Xej{pxDLjVHwXV@Fdf?hPRXkkjBF@b;{0SB0{-q=k6gOqNUA!pEtHtsTh z6DdY?r{Lv`$jvL{R~%(cJ6Q!VSK6A(je<)TKXDJy^c`?R5p+$LVW1NGS76wwM5o+8 z^*VSr8|b_k%K%E|Z>8`2*W4T%;8O?KGzVwid<+H5aG6xc%8}CzVP-KCWp+t_oCJ}zIV|%V0Ss6p)k+f z5FZU&jK}LANtRNPaNuf@jk~ z$KjLg+#2kBuk#mbsmYqyaT4uON8ldkT#b9moZRhs@bi0-o(d=P)?BOk4by>Lhw0`7 zI9cRvwB1zI9Z+qr&3NS?w!TRVlA7DtMm#=?fWz<<#w(FQ@6(fX@1=pSW}BXt$3C3V z7;nmAr<5OqtjRqGCK`;d+jyP!PHeqbrEY+rDg5 zYkxE`xBmt5{e4)~5)7-%fAswa;Y&Af(&(D(`<*rkibAf2>VBTs#{_Wy{)0Lf13pL| z`0B$C`nk)z?NR~!>t2b#_)-@9?LUZ$={YreID*UvA=OaM3iwjS6JjK8%WH}_F*+G$ z7wzPZ*0`6XoD5x%yRf?tAHhvCiiYk+qkvP4 zZ`RlC&U;h{A|+E2L#SQmzkV|eVdvW2O7~n1zEJ8N_E(6e^K=SH#fJtCC0$Mn4BPy$wE0zp zCN;UuwpNK+VTGP>be|@k3)mu?@Z@GJOagU%|gwp^($bi_Ygk)fIoGW%mUo4*w@gFqwwIiA?rn`rL51F zgu$vq>p~T}$i$J0(NR8a1ZDP^sE~!?tL|+9JTk(As%RQaUub30xay8`rFqJ!&D?Q4 zX4g-#>M5r=CHiJcZK(g^#$Ls2uoT|T2xdIwnRk2#oYRx$nIY$`%q0 z^%LPJYAR}gA|?TT%fXu1{80Qt?4e*#_k<_<|LTi4-FQQp5bW4_@%AeyLI=>HcG7(} z^?>4BwIP)YO7vCz*+C30iHQP@`IB8F-P%H3I1%v9arP<7C{Djk=F4dT8vEn%%?P=9 zv-2g8dn#?qaU98hW?X62Xf6s-M?X2SQ+}lu4(NZv4@q5GMcHH2-B{q}@`h-)X|iT} zgU1I9R`vmUZNO-ZXB*gt(@}eEh}+NS?kw3&xXnnKLG+(|3b;)DhzfnS1{68*Z@kfEhGj$raO!FrRxjv+^ZRFyw^@`pY~H1g0PllHJ0W{@bPkfD zMOxKv3d6rm_G&%r>TX$Dzz1;gE!=ay6J=Ye>0djo)X4{wBoSXCweSt`Yo}OnwLssW zG{$u^Q<{|%23rIFe{n_jvLYC8vvXcR?ZTv-m4uu38|Tm%;IJ}$$biMl(EHsNs&G zfl4~F$UQFmN3Co|#N8p;V*C!67WNaK`nil!c3kQ6FlTR80@U>CH`)IRja#1C)9&Se zP&o-CwW|>-!+0s|>C~kU=WxCz8t3+VN?S3yWb^<9vjHeAwAif(vE>s zrD2W2?NfTEAP?bOJA6QD{eBJE9m}o+hz_X@D8qi9gsLXlPnQ|G=lMi|)#&9it)vi? z@~2Vp6DR^GS}pd0QJHAQbRxiXn0xp;q02Xlo->f~vRsue1xy#d9G0*oXv=zXH=xC4 zvmZS%XrHVl5hAEdiG?!{Pqr+GjR}+ZYfM%`@_s9S6MlFDxQ;XXNlOM6u$L{dRx!Xu zwZRC}qP9ZF!5F*Efhf#)inyIn;I86plE*vLD%_?O=LpfWXHDx|P{4|MZpaZdReCo_5ZwwGw(<&zPorurx zwwXFw{(o>Q9LCpJ?F9_eoCdx-;cq+B>FNb>1tS8dhgxIw8Ixq1&%u1cEu=kzn?; z3`N^IR}m`(n~r;VlViS-(*{+E^taBb8VHRru~@S=#GNzmPk~71ZQdilYS?J-;$2CTRpi>yVr(HZaL%3f4fQqW=vLi6o zAhx+D^;AvEZNk<3S(P6Py=U=%Iwf{ILxYD6vKYlggV&?+c)rkw_}GIS2n3I(!xjUS zZQ&^);>iZvHa~8<`VK~PO57Ksnl_uftirJqLv3C^BKJ@FMhyYaYWb^$bRfY)DzEY#qLM!$-Po0P3K(ynaIMGni0!pidcqyWZM6%zFX4vrtz_NPVy%M z7d+EhrPvr{D$)bQrIWlrFr4I(Wjaytj+jx00`>p3rcPCfikv%rK~zQ4mSq3Zq{F9^ zdX@1@PhAo3#j72EB{oUwn|!cJ+4X2M=K9+uMvzzXzANkZ5&=qSQhTto$Yye~L2-pl4OD%OzTaiL4ei8?2+uOHV3I`^ zaK*PgP8R@?fk}g#O-igMN&Srt{ry?D%=n1-v7%bBo2_R+%xhj{akS#l=a*p{#G`M_ z?l4R1^FcxQabchEtu$t9uv_zEM{+=3KJHaBNG@TFCtUgJs>O=@1&T96eD z4-XciGJ9FOqO80U(GM-P@J5b9mbBy@$KIMoA*%V_js)%l`b}y|_zH^d7iajJd8hM% z{I6|y`2wI&M_q=gS3V}DzmuNSl-{&-v!2ax*SC(27dL+m@&5%W(m8n9KJJ(#ioB}N zH5@(5BH@|l-p(9%X(9cEq$qsNRV+puL3uZlb-pT(yw5I0-CDUDY6C3YaY@ixCRW_| zH)|@S6_s_s-m+kPook8Lx<&7T7wrYBmjx0^dlbW$Au@lx5@{1kH8qjf>ivz9+pKdR zgv4QS5CbvMSATB-U{~o1$B8Xe+v4wd2DzZnTwPSwuqN#VmK494bM?%fvsULl5M*LE zzS}qbSMlRKy^>t{F_IAnfKt~!C&EvR<+(dwBu60uc(?~mUj4Xyx-+a4uZm~EG@2p5 z7}_*%bd_w45u3?5!2lF|Z-9dSDTrNc))s2*q|?)V z=&Uj>^zfbw0fzZhGQFc4Xa>=EFt@GtCp5z6$1&>_YR zu}x-#RFX7uUX1&hrMMM31PoQ?9%VOJ)18uSi3mj0 zQF}bs4A|h)>K-3&LmPiKV&w7txPaDi z1Z3UJtJLv39#P}`g3^`Y0$__Tjg(GJblu*gS;lhSQNgLEuV0aW7XOd5A3LPss`-<0*!( zUj1ZB5{5X?s7*@F!lb7wm=K@i5Mp2-0G$om)$OlH%+3Ql`-` zx~-~AXUcBMl~ctJMUHKPnfMnAmlTxG-GATWzQO^Tz;)^>lD)8X843|D+i*AkbX#}8 z#RAd>Z=D}{3~Gi6Lqyr}+`sGEDMj+f>7#m7)B}=jW>aDiz{Xz{z>+#TgXwEiCN>{{ z>3OLa%GS#R-=OS^Pdsl+OGTbKksiIV9S|{DmL3%8QCPS^lC$dZEq@bk{F`4jJj>t- zX9nM+m7Y3z_! zYoI6S+Mkvx)1Ly68kmt}bXo;^yIAYzJE^sToK+voO2BP&=vYtH*5RY4kDKI+2F|~; zR$dbq^mh)ypY5-|qw`l8^lJw5FZr8ixt(M}$}Mu*WvEVW6GCA7mRx@6o7UpsA3x0u zVxbAYnPaG(rtwPmtl9y0E zMagvyd4nFM(V2}dlW!SjDf`wjfbcutrf!LcT(RytKad+{DUoOoorKV~@v6O8xC1Ha zyJ!Rbx&Ba4<%@A?K@!e?&h|uTFGF{2RkJmGWO~VS0!tyafJzab!CxT56DUB2Zxn{J zxaBP`5Jno{$^lhgnG_akfi8L$oMpb(=)B-}SWs8&R$)xVSw6BLn`YyPQS%-z@DS4+ zN^Mg$FJP++k+u|uweB9VRGwV^%6r8*8)a_>pW`xsryS)@&v45P)O60^emY0m@$0S2 zcVUvtTg}KnvEL1HCj{TICJ)FQGTZ+`E9TY;LLnoZ{shZP;8e)rI{2WZ5$S-pZ%Ir?l?4E40>j#`N5@! zT%(0|)k<-T=V*=e-h`4oQ0Wv)ICLThehM%lgdhk}X+TJ;8H{44Ar;OJcC!LlEA&>= z3R3bJ4a)0WkO7u*`JMH8g)8IUcs}ZacwHobH&+3`#0Bkz+TERaOrXh*v$@o!3^YS8h+GDqK>!!c43=q=Q+0)1=F8u9lCU>;15sK26$L}l#|LfPJBZ_aBOB{B1oerQH9G!VIBbGW z%PqzoopxE7P5!txgEcpCE2J6B&O>$x!Dq{8BJJwN45Ab(ckB?8B+HORV?`-2h6>Q_t5KyY`nzB#b|`#% zRw6Jf@~I~qV441rjhfNA_r*k}Ml*(rva@uFiINh`_kFV_&I zx>>0=jjPg5WW65l!`h|Bt$KY~84$bq^5=&_wz2uIo(Ef#?H6JFGhu0KNJU=w@{W7b z>tIxJ(H6c3Iln1Atltz!ob;L*uk%NpIzc$9;EaHTk6}RqIM`b%qOs;9bon-t=+ti6 zL%w7I7HP7Je~c^vXwk=WY}#>xsBX29W@+Cq;oPj3@2xf-^%jYNO8_+1R(WQT=5JVv z{FdN)>$T=j_0?C`uNi@sdP@4CwfU0{Y~EH~mb%?@g4>*i(f2u#MsZAk1Wes@wd6tf zcc6k(3(t1N6Wc3Jo_U>F^Pi-F>6Aap+|uweNG)l{LXSpo@$YD7>j;fJ^tEvd$froBXD zy3x5wgv#GhK2m_#kC^)(sYSfM&-LfQv-C7Bu)`nT@SdNjRv$BbXO|wU)0HcW{NM0j za$4IvwE)tsO#6+L!)?{|BDu@~*9^;8S(LTkTO$pN6oanX)!vBD$jL7=@6rht#pUSu z>w}Q6nfsQ1m5(}70D-{|dOY~|pW86}PaCzq-V zSJiDJ$Yah%$t~@q>SAF+(+*z%IeV*wn5B4aS?ILy?FLe5V#D&l<}x@fbgBgI z%tZi4K)Aoq&cpRX`F2HBk6rL|mMS&}z?&%QA90>8DfBk$2AJ6(ZLEr0*~V!rD|@7$ znrn^?Zx)OH4$;p-(`d_MVee@(Bze>!#(8w^d?QyXJ8HdQ1)ggLB#JRNiHYuaxr@S- zDLuJHD-h(F;wCc%Av~oH8uqOTi3IxVW@^_@O-l&e$=aA7JiUail|YZMqSNKn0JvNc zb%`Tr``Y3GhBTVaDMof|69gjU6SHsex z1Xz_}ZdBGs6~VBh#%{aHf^R;}*?Y%aXnTN*BCZAB(VM9ycAgqsi>@?2y^mv-S{pi6(Z*S&FEG5cPTjUTYQm&bGsRNm4zyWPY*kNSJ3 z-`&AbcHV#Sg`JR+(xG5U`s>9y2?#h)iDUV{IqHt4qeW5`Kbtse)I#${9v_j@+bfYV zjuJ>sWYtsBsPDlZ;)pDWGITrrJ5pFXQKNx9{}%R5uO<|updD9}M#@YB9r&%{XHGI@ zh83Fxd`!k3|EM9lMwFA>#Qx?vo#gUD@e5mo*2as84cuZ#Wpl^2@4i|Wn# zaWunKIOanD=p}{PR{=vmR1=uv%zM+SA)iV=$e+hK7U0Y7uK&7dYWsc~BZ=c{E!kj> z>E}0rcttOVts(*oEj$~_H$V6-5Le`g0Ppo0ivT?Uo}bdRO8UjkBL}8D5=d9KQhT@G z6={^S@0i+Er6w2c{0g-v7KbShMhts*?S&GyzVO4;MS_eeUSSC@ZMS7c9%e6br9?0Cg9uyN?Ts;L%SDhZ4!qKTz`}Y>> z`-q`TdPJ?lnLv-c;ALjaAPK@aYzh1Jl zKM0bKu-pPYI1ps^>*y`cZ`nr+TF1F8xwDy9hC9e0sW^+;kIfK=2Xa)1AnXaWR{n+C z-wWyOLQ0#JdyN*ucO2)t@n%eeqAS_z23#%A6G16{kz>*fvUQ%(SoA8;WkJS~F!Gyc zgwmu<{)8wNPsfT57>& z%m=+LAZ6On5*8^_X3>&WPWx-J#!5_4Yr!B!KeRXShXh|;c=epDMsy9^7Fh! zFAp26`iFM3`vGns9*4S81dYjc>cRzfundG*Mf=- z2YN`0yYK1kp!=6~+v95^+u{=c{js936Zx%^YYwu^VtrZeI`=6mFI#%hks)@Y_(5Y> zBY0z;!5wnD#i*m|9T--k+qd<@z_nlx*=XY_%+Zra)%|=^JJne(Oe*eN=JRH) zsZmZh^C5awp{AC2Yl<4OD&$9BY4{iApfO(bLw(ql-elB6qIk{lYl76^33Ci{S%FPLNYrO_QA zFjh9wXj#(1V~QG}C@q80`cQ*UgQby-{>wGk$tGC**+=Y15FdBQQ z4kMx!IbwC@9N@A&Ca{oKeTDe$ypcsGZIqp2E~DvJPp1-c^a_OK7Jo+e9P#T9IJ9K}L5Uu2cw|J%3Hg0?oZd(K^J5y_irN)Y+i0ly+O8XjCFT zA_0N+K2&Ll{^s#Y$0Ny578y8N0iCrmJ_Zx1l%E~cwvjNustv`SE-xB*DK2pmH^0h< zwUOxg?M_b9E#g6o)+Z`d6H(gN$d6F22PU2@A}$oAJ?fc#+$DDPt&8Xsp&q9@LjdB} z8Jj(o&C>s_Wn((Wo$NUt!G+Rirs7<@zsO;}v!C?$AK1|-M$|j#Q&2Ur5! zinw#}9wU;M&W~Y?K+~$y-qcD^u^q4@ts`VOzsk>8%G zJLdqYl%;i>>e{3kK^?#FnaIL{1C;~z!qDfP`qmvU*WWCTpfkJ+7+>An;$rSXe6opp zEcl(pvRj|77erJ$i1*%6t2gA9^&0aHpU1gi=gd1hKqqAXY<_G5|BIsaOaT$NdI=4S23Dov zjwTJF=BTm|W6?oM3vIS+nL$i-a)gphs44FzK?YhO@hEntiqzZ73<=)^HNNh+5J;|y zMw25(^HzOD-aJ__!llw$pMw^!;4AJN-A9A0VDEioLUiqTWB9Bti$&Q>9fnT#=Hqx@ z!070xJr8Ui+u;%fOen#k>2;WZab#|{bU|WNM7}ljZ_6HY#hPn1YT{n+cs2Wb8wmM( zpW9(g*C`GYE-{vG_!Z7!pD5|GaUg42)htMP|6b}I-2F3^P6-4QkyVCh=Uo-e(aMH-`m0-rL>H0+->pZK z%Oj80J}>1?O@cGDNN)_W52@xI!7Q~221&>ohNq-0>%0TuxRZ9>ufNIX@z2|W{;fsD zq5&^NyV#{aBY|{k67+IAKa5+m6xTFq`(ZdLUjYbBqWT&;5^2DjE8e5f6zU7Lb4Dw! zF?mX&)SU|;J`##FEf?wtQb!@P$w@oRmF{rge8|D?1rzwMHIBNcd=G7NLow$?SWn8B zPIU>9%`d$V2vgImQEK(azgOKaFZjP<9H{z^<1phV)uYKGK5>ThtlM2tVPbN@Y=PdD zZdNJuOgxsQv8Os-&jo;AM%C{iG67{hov$dvRSV!%2C-^_gnPu`oYH!ZSeE&yM`i>r zI@^6q^)rmLeDN9Pu`}VcNpN>Iv}s>tA`h?MNot9J6l#9X6r9qlF`glZHhG~bmX^!Y z=H|m)y>H49>y?=N=7qied_pZ%MZ@00?YQKlgReIiyTVUCMzxl;Ns5Yw#)}RW z#slv|CM3t@T1eUK`lJW~!?_DKm76wbk)*9MLw}kbt+xn!RQNt%M7|{q?((m9K_Y-h zJ3@RUJn$w-crq+dmzZ&413KE&I*1&Re&<4ZNZYP8E6D=9NPyF$xY}YP&+|HpuKrkd2d(JJ9ku-E%V`6;CQG_ zfhZRVUbimj9^8txc{_DYkQ@QN%$RNLU&Id1-mWN6@F`G4wMP(dJAxtlJSH{}VkV5d zA>BO%E;hj82+j_!F-ctLc)djbC}mGl+G$rY!BOS^?IAj%6x_Ag&_RBhszy${UD&;A z>BruOS)>T^1>A=Es_|7DJ1DX8jy<)Pw;m|~f&23B{s6lFw57<1+Fjm<9<9LQM;|>>%Ci-1;M?KiE@t_}*?i&D>Vuewi|g z{>K>F_iqzlP4p9|pC;$9pnOe5_pB6CwJt{_iC(Y1RG29-tJEdOHA|kqjIN;!4b*L`L4OY7Ww2MR$EP=M;6>lDAI;)WqnIY0N$a_=$0rlhPWaDm ze_3RYo4}9>zK2vm$;FUeS^;k%&JI(JKRN20bi2x->4+g=)s=Q=_UCIz>sBX1f~+v zrh=63Z!y3W9TN#LNG)Q>TZ4ohRW^<`G@f1ib-DhE^s?8wYz8Xqsax7Nl`F7B>NLHC zQ9mh*Qzk$a0gDAD9OCG(%M>u5zYMp6{Waxr%WH;R6<>n0yn|N^5D;)uS+>yLpk(7aNV*sH zP!#t7o?^+=fRy-JY<-VU5R5tOYBJ%#`lb?bRZ+Ef$XUVe_b*$Wdys0)xvJ!_^ z(UzsN`aMYv|6Sws57mSw!@D~`zhvosngA%t#8G*mSDrNrQ#MNZ4E4znG@2{CNiYbJ z7+o-nfTFTN_8xZpplrxso+Y(f4&7m9Cd_xiVR})7P zNry}dkT2M#llXq_=;)5SIiJ&?MIyK1PZC&*T#D)yOuX~MdkxSq<0J;gX%7#+DLYRSti zM=4cuqR8s-5^W)saDiOB2cwK(M=hER>D#v&X_*tJ3KMk;vQos^K+IkHA}&TIbDFb3 z!Tf9oY%SQ}_7*>^6j^l1+9kAL;Y0}%l1IRj>F38fSLk~cFn|I@d#kbR-i)No4~b>PRbc&E%PzEf!%Bj`&X{)6QD!q=!_mEVR6X#)ySG_JeF9qo2p zU)E4mZvVXEgtcn-F6V*Nw($Wti)du2_=FPD6&rYUqHzzq+}m5DWQx(eHBt>R^#;YQ%Y0JpVy*odcRFRHsc(v%>O8L-nPk7C8$6R4?K&YVBLgwDF z+skI0yMun1c(AKN&-6(NiOMuH(V!rNpy^4#Uf!z|W)mU((m750&Sk2^vYNS;Xp|R^ z5ujaDP$%N_tSK1iS~pUVrV4PfqEW1IFK(QTJk1ImZ9d|<&XVK#=;C;Wo{tq>PUE^RfBB{QGucn7`Vo^p&WER2d3$oyv!ovcOB_UnA8rP%Xm z?TT`oIqQ3SvhzIH)kE7zM=c0J3REd`TJMIc5DYQ|*Z*$K1X7F)`ZXo6%lv3kEWk1_ zdX#~D=qv)_oB%uK7re%7)i~T1Tu)q#>M`iB*JU*gaI^}|J!}fL2`Rh?F1Xd&u87NG zlwR3$hOx~|pa)4-qe!DS!W*2R75A1{M~&7~RKLYFV#xjq5YkCHXdb`Y@AVWc8UEcl z`0_1H@^)X@@0+;yDe0p029J~t{}n~9BU!NWF=x!Z2izIcz1B^+QF4MktEfv zw(EemV&8K3+43b{NoDB;ugx|4J^Q{G_!s(;xk(|V@GfsCI9Ad2pe5FAB|b-STmPhN z{gRGU`n3GR|3;pKLCT7WJa18-i!k4egmxWte$n))P?e46Aw zmZ%-6C<1``#v>-ivDd>9EyQcN6OlfryhJ4uC*g?Sx6iQi15X&?`|`0}V{Z4kTp;Z? zVr-DR(9x7}bKTEcK8vv)$w>v4VT`EXTp*%gALT7^J17~_t#VQWmb||&>Uqixq&FvJ zxHMj|EA+st4Ja08&@$M|GFe^UJL5Gr?JF5kAUuOv@?b+_XiIxy=>pcPs-!IGMQ%F@ zjY;LqmnUso)2kDt)Cmel2_feqq}?TdL8qAR)K9<}to0vS1&N99SN4GH){r`zB~uv& z!GqQDlq2LREp2apEnbLlK?DKQ4X2nVCQMSH{ z52)0#u@f(_^yh`mPraD(G{?ch;)Z5V4fk@en-TF#U;I+fVvEI2Y8ls6OU&lp^urHt z53PnC)3!VoUa^HpiXIHHYb}{&sA?B89(7`wvq@t6A+|yAGF;dKuEa6-N@wc~?FYUG z|0(6IUY^T@P0-sqOmR&HRmdm;Td&M-#w`C~mV-v94Bp#G72>Dlk@Fw=xNeYz&LnEi zL!0cB5|~M@7yoxv!zOO^O64VXO1*ksIV5-xydjUakB_&-b1Ol#myX4unEpbxbcLZ# zW1zRU?zQ{$K3qvJFKA+<8B2zVznNUSKx8%kr$8zv#jOU1>Ji{6+}A$kib;9>m;o>N zAcRH4EfyQzN;D7*3&U}d|Mishft8I!d=wZ_2X-{&W9>=sw-ykH-9dvi{UR$p9(~qa zVs&U!E#8VH`Pf-IC-WSB`jHlFCA=)peZJFwpL6_5w{?v~~#92QNDDscULilw)4<_0Z!^MZ<56=URPE6E??Lw|6F7)*41mA7nwM@;L_NqGRPo7ASP|`1F~uDzaLG)Idn!2Db>ANiY+GW$lUQGNDn5O~N>`@D zse-sUd=*#+M7TgIh9B1EZ*VL zzKj9h`=X6vSSpQx-w(Ev$`v9zj88cCw_inD*j`UnJpFN(gg@Z`;Sw#4*~Mhtue)M$ zbb3op-Ml|+B?|Zstnw=?{IVC2vxG&w47O4dMiJJDKRpF`Z`L79`FR9yE0?~z791^daTITtxpR7a|(iShljS~K{fTe>g z1YVzdb^(;(REUQUN>t|DY;dmi1+9?*TUHOvDeV7xUGWFs2z}^Ip9@Jh8;y6P^*%gWPs1vWU}vKpE2P&$g00R=6H&5bR7qL-NWpD%5$Kj5JuAca^rBB;#!otNgv^4Fuy}N84ju~Oc}!Cu_!~wTc`QvaF5y;J^Do$ z>=Y*Qnbtcx!#m5ue>N*o6GS-qJKS&VANk25Nb7sw5gHM0^GlLn$D*tdwwFtbGAOsA z)l*1l{KAw5Sq;3(>NITib2r}h2} zeT4L>r!Yq19XI$sIuSeoBTs5AQHmG>BZQ_*2|5HW_po;)WVM3dkmWSp@tjj6!)r`I zsFx=O2%&vnf=gU^J9=sc*%g%ChTQbGq`|_fmiawvMxPE6W1v}VTB(u15_=U_Id*4R z#=Fvx8mGb0P(}$G`C--nqdGRYBgRtuiC%ttg9UEc3T(Z`N48uF)hOD^MQssM=yo-! zMLZowCp!h-5@HN&@N=|qfbjug0jKA?nCil}#d#;@*SeXBULZSukF2QdC7@rS1q`7Z z@t@PpXw44LBw%GcO~M3ljN3}d*N211{?ZYjvfEZO1S@uZ)u9r$qvg; z^^%SWh}vvRk>A@}4bE)5s?ScftMjE70eNbRYSwQZ^6j+><&a4J z6;svoT7e~O!oPJSS&?nez}%rnlfII|uE0E64q^voFyrS}$SK}!nD0tW#OM4FHANMS zS_q30*Yx|DkVBA>Gj(|XqnY6Fy>5vb%xPqqdA!Lh9E3NF$#xhpacf~j;Y|rTj01Km zzbCL^VVqWJLmb>5k185>%DBWWV)sW(DHJ0$0Y;GF7&eJ1nYLIDA>#HB&2lZPEx*@ zGNz*VuH{WBnoC0+W`%~AZ^A0XFfVFl<0VyLy68;7>(zPH}+|`8+fCArSJlNN_{oc69Tv_P5sNMNE+$y1vIN z5sStcS=m+mX8stX@$o|PVb-!t!_~emeC60*H)FS%nHYIqRf3zXrI^{8v3NQM2t? zkPyh+W9`YVicyupV?YU#qu)W98(`A0&P-@OkM*+p*l$|2`VEX)k5RU zZeu)&FOzR)YY4t4*s(ReIL*oeZZJZ$}Zkv#Vb4g&&myP_6)C|!RN7H5a5 zzc98GnX%TKvM(@7yd>g+Z(#7bwVR&{S^Xegrqn*rC?|_W6xSL(`(>B?NB$*u1r zIg1fg=)74EDXO6i)f+b##V$E4BLMp9LU33d#0AM33jtPnt_QR|MPrw>%|xSNF){VH zh*a7xedKRKbNU0H`2lURCy0-`3IE6qPOk4olO$iCW-jlf+&E$qmy@obGtb_{jYltZF( z-m$_Ti_g|EG`STgblmZ&tw8z{k>fl1?aa##FM%DM0%x4R;#vcJHZur%uB-jTxy;Oj z$-pJ+PyCDlMXzm%&>Ebr_0T)V)4GG)TlhRTV@F@k$uHwT9Qf#-nA@q;e_vO@&Vk;> zJ3J|v; z+Bj!IdnoI8xI8vJA6hSdMXk^%^Du+Q8qUz-bc2)$9B0SuF~WU1UAt}7*h!{YQ)$Nk zHwHx7E?s1>(t97yKO@bVYkDmFZez3*<_ChtLxHbl6CwMlBp}on*+vLX%ZjP0YRVd5cU#-meOK^5K)bpaq|u3!&9%+cGs!&>Ns`gMe2=-Yx`hidtc1%ck{!A zunb$dUUa3!kFBU!tx~gl&&0~?_nBvDQMWey=sT+iG)^;cD8>6LTQ}@)z%AsEM08zIc*d^d zCG`#|Ok=by>m}=`vLn#08M`Dg7Q##(1%Ggi>%~3Z5B>84dd{dwN~p6GaO?nUJeLO) zry5G-lu~T~DGPls&6uYS3!l}62k#$1hz>B>jQ7x4_{CL&le$OGz#?LwC`yrw^`Ru@ zKK@nP!xLt8KyHl+?qIEOD+CasDYOiR;Rzk;Gw^s+)8tjHB&0bQbi!RYyViqO7PeNZ z)$q_6e<2^c)?V@BYgJ~*Lcej*j3ST8d$C`6;s!eV)M19CGbmf!7b69(BMz1APAy7} z%jOfX9mNqJo8kQmKt8BWY(Mh)?Mmb&>W}?WAPxiW?7tSb#IL>k0B7)&sUJ`} z@C2gupD{`)D;_}Y=7CVMam!GK4^aIR1dcuDR`^!HlU z$%;Pal zcOq=Ew}rc>>OnR=RTB_B0+r(o-sx>H65^;9yIPba5z1C?@};wih5H=_8-z5Ycf?dD*1Xoq(R&e`UyPe{HgdrV z$_1@*u&9F=;nWy(Ff0;9UIfp6h0NLGyI^-|kUF+RCWabxxy-{$V5{6e42Rt7kh|_O z3JB7PhMAinhGp5F7l@Ca=OdPcqbGJ2SWB@O~tn3qSzPqGo} z90_?Y$%$2d6&&k4)V|R9hb0nN;CAEXAEUbEg?H(Y9niX_1&yV|n23bb_FDF%5HlwR zY;JeDiz_2DuL4Pmyb*p0d!fK8xd*iRkCG1%{{}f4%PXL7Eabz0m-Y)DQB_!%BrkX( z@JICD?K!lpE8t=;3x*0vL(ZN$PoJid#Fjl~YP#Dszf8FuH)^ac8?I=bnhtCT6X)M) z7=5Q)k(EDO_xz^FCxLgS#zD%gg>QJMR{M>ix~Hpw`)AnWFsy_QL`th0(T@qC7@iIL z^s%Z1AU6~S2iQfpK~?bxp2)T&Fai|oAF5BuUL|P=#Gta5i~8#T9Srr+OgSqB8ZAvP z-KN@a^*qI!B*0I5e0#2&TLA+c>G1CPk3r!{s>{&(M8eUEelY$J)cIehFFBWEt5s&J zv~9H(eNT9#pm03++VV_(R1%GaJ?VkL3| zZo>|C_E;|zEh?6wxX1LIV_!4 z|Fy8bMc82TcPhO(xN|4A*nc6GYQph;kIzPE)bud?zCjaV;OE^JQSAH_7*4k9< zz1^5$@zhQyN&7E#)`eyiuRJCkBha9ej#FU;c~$)SzT$=&$vPkg-wFcdrq>k8{tWvG z(|y2+RD|dHP!Xy&)3)h*84zWxyTcB7kO2FE=;;3>Sq@jo2Y!<(QkCKsg5z51dp02Wss^pw=LacQz$Rx2SSToioY;$A zDEOK{z1E$K+b0Fvt!ihfpc({74&HCL=1Cy+&?y_uMpA+eOGUZfsBqX^o_i)fI?8uqgcrEm0#&Od)ce-l6#6`+-+|?~l+^RcfcG zYYe$ol&cn>vDV2P(NhNP4o%HuLx-7d)zRcKLV&X&*g6LjVG9kTn!ATcyNnN-JCi;$ z(a2w?W+Ol}x8ZUAWA~TZ7|3}heV@T>Bjx22Rdq73(G#y;4Gao)P;0N6!t^~6)$-% z92nACqC;sTb?DQMC9j9?J=x$G9%H(Wz(H3w%c}Onw(p)q$je~W?cKIE{I2g4b;&HC z*q#RU=>Ea33CM;G-5p*KjGh0!c{&eUDY=OMPQua?6105MZ2{9F=T}G~-pHyLnNlyz zGDI^sg(UXqFE6TX7;{ztauDaqBz{kw`?RdJb=sV%Ao2=)4Znc1Qhp6do(_h%JJ}&$ z*_+kPq4NKGsNLuKJS@T|`-uy)b}$cyVfZU=E80x3_4NO^HHutf0Mm+ z$9C3JS0gQT`q^k5ZomiQH(U|^t2CJKS8X}#$9fs7%b}HaIl<0a*4)W4+&UcE#V1!h z_F3m$jE9(hBI-)^F}~x-_L=kpKjK(+6N8*rplMO_@f06Xd2}zZHYo{M#EsE&GRcGa zZrfI+@@#jj^#it(G}z*bGmF}&agJRnGx`&1`Dzr4SvF^TL-Yy3i=zDxtn3kQ$)&07 zc{SXlh-J7L2({+-{)Pa~lt)fL?7nO}o>z)eg=2C682fR`>=U8|DMU;OW%>af6tO|# zj-lJH3$QIU=4N=Iv*E*$g6P~$wks9^_l6-ffBpwP3}-|q@V7e=)U~P%eLzm6KQT2j zz$T__OA;V8)#OUV2lbmyjS)smo zvSamX?g`RWQvvUeM3Qy-EN9UV13v_XCYKpeF_od`8FmhnkJt$K3n#j$eORL>KAWA9D@jEPxA19FP~| zZhP>x_(!MRJX05#ypT6ACE)*AMe~N`XZl#aSjq)9tskeamFWX!!~Bt`3_byXccpYT zqN2Xe(1E*R^!D{y1+c_%THDm=yMdN%%UQl1$G~nCl--w}O+<1NMmu@Q9&z zrtABNdCVOmXLe-aVGh)Di&3|J^HK#8rY(e8xG&duzF9Dz^B}3M@*5As?{@1)ldk?1 zA*hLN8)Q`)JYTYc&#}T2bJv=#fJk~;Y1eYVRfat8mc+Il^u||(<#>#v|NJvdx+l$3 zo%`pPj#T1`uS>K=i5-3l7jl<9l1uGz)lts$e0YddiWiFKTyuc`RN@7Ugt`6tnz%eb#V7pXwMtns*#N)go7&6@~s@_3}qeZ&P%5b^rn~Xv@^;a&NEzmhnWj~CPgbef!D@Il<#}1bLL1#nQ z@vK2l4r1&t6B{?T9_A}MF;ZYEFNjmm3il~hg2gc9%|rY8;e-LoBjWiR^Cg<>@46IY z4hH{KZjttWpncs0d$zV*m)%?Nvhk1nG)8b7Q5@}p>9bQ?u zaSdnPV){Gx5}$oSP1gr;iT?6~yKmY&hyCs=*kEA+fF>5MW=e)J?nHrCbLy38ifj^E z1M?A5hRLWT=Q~0 zg2(|2m;I!iG`!MVKOc`Y&)m*O5zzZ*3(wdb$S;ZtI_{jXeXi~_bPXkf_Z~H@5l}lv zC|HLGuyZauP4OQhO{O9d%w>QdtgYLkrf-ufntXG9&bm7Zzs+Jem`fXKUrZ{S&55g? zaxVY_ZPX1`KUbar0FavfH}Rk)Xe<^---#4yiKcyM5ZW&H6w<#{=O-ag=Y8BmmCICo zUIkGJP(Z-m6|1Wr0KuZy_n?nv!he93_krNK(ARdfZzK+dZc z@ILDOVVCCo`P(Panlkyr&Q<6-(KZ*-sy+SCpu#Ul{p*PKgEj*CkkPn}hmkr+pL7G% z1EoQ!e~SOP3pe(3l5?iQF;Wy7DzqN{ILA4e`7=la$?gQ8Seo9@1?rw%L^CGC=P zhFjUj92C2X`0NR2f2=)E?v*?2qMgQl*x(aD@I!IZXlqQY{)mpy?AI#=9p*pM{zx-G z)JxBT1a}6>`U{)?9I?bG#-0XKZ%Nf?zDHeZ+{BB13QXS*BzG}Mqgwa7`oAHV_`4x` zNGvTCzb#PgUh)1eko9!9R=oz*RjsWPVA-v*0n(>ePoBNq7Bti|ZU=dnJSc$KQ7+%? zEpqmWZpV7BN~62$$EC{L2O|cmoN}nk3jv+PShxFl3Hfu~9Oodkd*c^Z+=B==XFB|L zng9xX7&{NF96S-m$nRU?F}0iADT4Wv6y-L&ADAom2}dA_K7bbsBf{1xrX}3;^%&v& zTLe#5q(B0*S)%>vrtnx{uFT~E36B2DaoXiL#)pdgqamue98cG=1^DqO*f>8t!a--) zsmtWW+@11|zq+^!HL+Lvls>t?cbgjBoN)hzs|F=`Hz< zxvFH}1$;tHLS8>VaEYs&dq{!0L_2%CiY$*gRzXENl62uLu8W^V+#R%}140>zeUoWk zNC5;Pp&5B`4_P{!Lee1%TA#`p=md}ra;xS-)()k}=0Z`Z27qN8QfC^FOCv>16RzivG- zcoTrVV8XadO~qt7u2_dTJCwg% zymzRA5M2Pxo{GcBVAbcemgM;hVT(NOIn}gfcP8X_#lB}+ozT>C?_GVE%Z~8-UyI{6 z`ggbeh=@5-5yNZGN-=;T%irX5q)EcfN6V76Qs>PJQVl2ae8#yLrnZ*`14Gwv33XhL z=2OrVQ@OPKFXpyEGJRt{lFDom0Q%bHuTDd3pWXyW^R%nPggi$j`NCi_s5iPY%r`V3 zoESzJ&Z=4)nMwfK$*fOOa^@oI6YDo2?lPk8Lpm00?)_+0i*DkZcTkG?!T|;<2K+2< zT)Qn<mNHtTE0tYu=dz z9)%JJT>#amW!e|I7pDkjU+z}wujj>E4Agw$%TzA{MDkP`q3 z;5gkm!EIGEzPlIOI8fH3x0qt!a3u`h0e!V_B#RSz8@1-beIXwv8QDPvz-K~@$?o2p zFaWuPGC7i*lwq6x+ZAi-qs}e39*kvb%+9M2pIF9s@Pe@jhC`2pS*%={u*wcQ2aW7b zr^CZ`rc=G9V$HpFF}p;?Fe;!^bXR_D<{i1oM)LqWK*Yb5Rh7wk#kpx@q3k9a);5QC z!8n;qMFTC_jO_VCiHp?x;C^c?K`^#du9B>O4MKSDn&|Fpu{%rHLb*}!4|8G8$|q1D zCN43p1;z*HwcOw?QDIE><lA--1m?6tx*&rR)N)u=q(-6xv)}TB7f8ETlJ$O9M1>>tKVZGeAFhTDLO_URaye|4%C=H^0aA%(S%StC`VJS0Qhco}h zepn&DP)z6hWq!UUp46fJpXi@_H%P>W)1KzV6TaUs>>|MrwkA_Hb$R*IkGnjONhBBT9jSHat+a-alIu(x8wIZ9QsS@xIQLcAV{@Vdit^hS#aNzzB@x) zHFxNBF<*3-u6%OEa~=H>8p&tD*b412=-fxau9p2;3Bc`+iZn&t%c=Upt`nIuCcMKA z6Y4;b87x4L)F8+MuQGzdg`3jW*HlXUe|j-qi|qww)KcAcAIe*_k|+B`0Ub7*Xwm+- z6kSANasl>N9)DPo1``LkK9zEoA>*E=L!c@=O5-KK;oBNyivPW!6FMW>a5{onE7vvK zS8FPLfWS>Z30Y;(pX@o+aZs6bx|10(Q+U{4F^*QIOh*vtLfH1%H zW6bpg3EueL|JN>WXr2K_Zo1!bnzhw^XG0EOcZr!|I6ih(jEPgLSp{_MDoD&v|6 z%z~~22EhmQm1i!>6{j|zX`xDY?1c%Xh>V)|RWCXg$|T3#vFnta)X1}tDCseV9)=ts zfeC%}{Tj&uGIIQ~V3RReO}=dnB%yAaD%T=S|5y@8fxA!5QB1JOHXx~Kt3~1`-@BKz z@fP5LmCVr1VCrczr zu!a%k(@f+{=K8a6yStfGlKY$&YXX%ht|Hiq7-IP7j`!%QzwbS-a|nTSzAlIB9qhpX z8APZy%_D|QrC+Ys(aZml;3ub(+Zlw`zR@@_z*r%PD7crR-VJoGc|>ed-O@+Z`;h~Lr;s2y?Xb( zd7#j@>;;m=bv@)%K|Ih$${3{AaU6!fyYRVlp!{zuq|>udWLgD~a~0s?m$QDN$xM*) zEJs0(=rp+FlJ)Af4KTF{73W#2?bvdWNMkUOxq1rXqbPew;BpvZFp`=QSyx|X^wK(o zQmHSiwC^cW&v_LWXZ*8(E9do)1m6OmvvBq)1;({euoad
    fGektMhuJey5ESWrh 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 fYJ)#Bw_uDPXnZ0OM_-fN@lAR$OE05?+k^UA#Q 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 f!B0Z% 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ɿFzGXBLlDHD(kO-M+NoAs(=9VbI= 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

    6EHizF~hy#LFAyLEv4KADm^ss!H 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 diff --git a/data/ctwasWeightsExample.rda b/data/ctwasWeightsExample.rda index 3af3a3190f120136bb0e4aacbe8df2cd61e894dd..a1fe326a073d59798ea4e2ffafe294a804cb007e 100644 GIT binary patch delta 6497 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 W-UR?Ql`d>PFb#_W000000a;pmG-H|o diff --git a/data/fsusieFineMappingExample.rda b/data/fsusieFineMappingExample.rda index d8bdb7e4a11c9ab81a3bc8def7fa760ccf2a549e..ed4d2e13c520ce082842493113d61c5e24683c1e 100644 GIT binary patch literal 22180 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 literal 22176 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¬b<^mX;h`c9 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 diff --git a/data/gwasFineMappingExample.rda b/data/gwasFineMappingExample.rda index 98de86bc8a7ecefbef3485c7362a5e5e010b05a7..6eb1977f6987a1c53e8ec5f6eb25e1353d153a84 100644 GIT binary patch literal 651664 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 z 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

    u6C!=eH;pQ( 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

    ooiXB7Zol| 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ɤX} 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 z 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 literal 650796 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

    rpTyt_kjr! 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 z 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ΝRcXH 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

  1. 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 z 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%0D6g`S?NVFBtK9hVMukgRdElUwY}%24u_M4t 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
    1. 0EDBKXS;Qbl#eE? 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 literal 41348 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 diff --git a/data/gwasSumStatsS4Example.rda b/data/gwasSumStatsS4Example.rda index 447dca842bf4716ddd4d9b836416ce58aaa52383..8a24d96346db558fa53a0a2bc397ae1b3922e7cd 100644 GIT binary patch delta 7320 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 delta 7424 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 diff --git a/data/ldEigenExample.rda b/data/ldEigenExample.rda index 50fc211b26ab16f7fb70529a2643e267b2f11fc1..3701f16ad7254929b39f7256dbafcf62c1226a9e 100644 GIT binary patch literal 973656 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 SEK;dFzw|Yx)b$>^VVj?EoipW7P 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

      B@VgA3(n9xHX&qWnSBP+8ic#B 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

  2. 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%0DJ5OI3YR`8 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