From 1789149f5b6ba2c0dc5d39d3641a558ab8c52ab1 Mon Sep 17 00:00:00 2001 From: Melissa Gymrek Date: Sun, 3 Nov 2024 17:51:36 -0800 Subject: [PATCH 1/7] add outline for tr gwas tutorial --- doc/VIGNETTE-GWAS-TUTORIAL.rst | 48 +++++++++++++++++++++++++++ doc/VIGNETTES.rst | 3 +- doc/source/images/tr-vs-snp-gwas.png | Bin 0 -> 64429 bytes 3 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 doc/VIGNETTE-GWAS-TUTORIAL.rst create mode 100644 doc/source/images/tr-vs-snp-gwas.png diff --git a/doc/VIGNETTE-GWAS-TUTORIAL.rst b/doc/VIGNETTE-GWAS-TUTORIAL.rst new file mode 100644 index 00000000..ca5122e9 --- /dev/null +++ b/doc/VIGNETTE-GWAS-TUTORIAL.rst @@ -0,0 +1,48 @@ +Performing a TR-based GWAS using imputed genotypes +================================================== + +Overview +-------- + +TRTools tools used: annotaTR + +Other tools used: Beagle, bcftools, plink2 + +The tutorial walks through the following steps: + +* :ref:`Step 1: Imputing TRs from genotype data ` +* :ref:`Step 2: Computing dosages with annotaTR ` +* :ref:`Step 3: Running GWAS with TR genotypes ` + +Background +---------- + +To run a GWAS, you will need to have genotypes and phenotype data for your phenotype of interest available for a large cohort. Whereas SNP-based GWAS typically tests each variant for linear association between the number of alternate alleles an individual has vs. the phenotype value, the TR-based GWAS below tests for linear association between "TR dosages" and the phenotype at each TR. There are multiple ways to define TR dosage defined below, but all are related to the mean number of copies of the repeat each person has across their two alleles at a particular TR. This overall framework is similar to that described in `Margoliash et al. 2023 `_. + +.. image:: source/images/tr-vs-snp-gwas.png + :width: 600 + +This tutorial shows how to perform a GWAS using TR genotypes obtained from imputation. Alternatively, genotypes can be obtained directly from WGS data using one of the supported callers_. If you already have quality filtered TR calls available and do not need to perform imputation, you can jump directly to step 2 below. + +.. _step1: + +Step 1: Imputing TRs from genotype data +--------------------------------------- + +TODO + +.. _step2: + +Step 2: Computing dosages with annotaTR +--------------------------------------- + +TODO + +.. _step3: + +Step 3: Running GWAS with TR genotypes +-------------------------------------- + +TODO + +.. _callers: https://trtools.readthedocs.io/en/stable/CALLERS.html \ No newline at end of file diff --git a/doc/VIGNETTES.rst b/doc/VIGNETTES.rst index 1cba886f..adb87c95 100644 --- a/doc/VIGNETTES.rst +++ b/doc/VIGNETTES.rst @@ -3,7 +3,7 @@ TRTools Vignettes ================== -The following vignettes show example usecases of TRTools. +The following vignettes show example use cases of TRTools and related tools. .. toctree:: :maxdepth: 1 @@ -13,3 +13,4 @@ The following vignettes show example usecases of TRTools. VIGNETTE-COMPARE.rst VIGNETTE-COMPARE-CALLERS.rst VIGNETTE-FILTER-QC.rst + VIGNETTE-GWAS-TUTORIAL.rst diff --git a/doc/source/images/tr-vs-snp-gwas.png b/doc/source/images/tr-vs-snp-gwas.png new file mode 100644 index 0000000000000000000000000000000000000000..a6ad134dfd3ee05423d614959b05b4424f224084 GIT binary patch literal 64429 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 E4-w+S!2kdN literal 0 HcmV?d00001 From 669d519f38a21c8dbe367fc1822aae4bd6e7539d Mon Sep 17 00:00:00 2001 From: Melissa Gymrek Date: Mon, 4 Nov 2024 09:43:29 -0800 Subject: [PATCH 2/7] imputation step 1.1 --- doc/VIGNETTE-GWAS-TUTORIAL.rst | 105 ++++++++++++++++++++++++++++++++- 1 file changed, 102 insertions(+), 3 deletions(-) diff --git a/doc/VIGNETTE-GWAS-TUTORIAL.rst b/doc/VIGNETTE-GWAS-TUTORIAL.rst index ca5122e9..5c7f498a 100644 --- a/doc/VIGNETTE-GWAS-TUTORIAL.rst +++ b/doc/VIGNETTE-GWAS-TUTORIAL.rst @@ -4,13 +4,18 @@ Performing a TR-based GWAS using imputed genotypes Overview -------- -TRTools tools used: annotaTR - -Other tools used: Beagle, bcftools, plink2 +* TRTools tools used: annotaTR +* Other tools used: Beagle, bcftools, plink2 The tutorial walks through the following steps: * :ref:`Step 1: Imputing TRs from genotype data ` + + * :ref:`Step 1.1: Genotype preprocessing ` + * :ref:`Step 1.2: Imputing TRs in each batch ` + * :ref:`Step 1.3: Extracting TRs from each batch ` + * :ref:`Step 1.4: Merging results from each batch ` + * :ref:`Step 2: Computing dosages with annotaTR ` * :ref:`Step 3: Running GWAS with TR genotypes ` @@ -24,13 +29,107 @@ To run a GWAS, you will need to have genotypes and phenotype data for your pheno This tutorial shows how to perform a GWAS using TR genotypes obtained from imputation. Alternatively, genotypes can be obtained directly from WGS data using one of the supported callers_. If you already have quality filtered TR calls available and do not need to perform imputation, you can jump directly to step 2 below. +A WDL workflow performing steps 1 and 2 is available on our `CAST workflows `_ page. + .. _step1: Step 1: Imputing TRs from genotype data --------------------------------------- +Imputation overview +~~~~~~~~~~~~~~~~~~~ + +The steps below assume you will be imputing, rather than directly genotyping, TRs for your cohort. There are multiple scenarios when imputing TRs might be preferred over direct genotyping: + +* If you only have genotype data (typically SNPs and indels) available for your GWAS cohort and therefore cannot directly genotype TRs +* Even when WGS data is available, it can be expensive and time-consuming to perform genome-wide TR genotyping. For example, the pipeline below is based on what our group has applied to the `All of Us dataset `_ which at the time of writing has WGS for around 246,000 individuals. Running HipSTR on a single sample takes around 16 hours/sample, and would cost tens to hundreds of thousands of dollars at this scale. Instead, we can rely on imputation, which can give accurate genotypes at the majority of TRs and is much faster. + +The steps below guide you through performing TR imputation on cohorts of up to hundreds of thousands of samples. + +Prerequisites +~~~~~~~~~~~~~ + +You will need the following files and tools to run the imputation step: + +* **Individual-level SNP/indel genotypes (VCF format)**. You will need SNP/indel genotypes for your GWAS cohort. Either phased or unphased genotypes is fine. Imputation with Beagle will require these to be in VCF format. More on preprocessing genotypes below. + +* **SNP-TR reference panel (VCF or BREF3 format)**. You will need a precomputed referene panel that contains phased SNP and TR genotypes from an orthogonal cohort. The panel needs to be in either VCF or BREF3 format to be compatible with Beagle. We have generated two such panels: + + * `Saini et al. `_ This panel is in the GRCh37 reference build and contains 445,725 STRs and 27M SNPs/indels for 2,504 samples from the 1000 Genomes Project. Genotypes had been imputed into 1000 Genomes samples based on calls in the Simons Simplex Collection, which is predominantly European. It is also restricted to STRs called by HipSTR with repeat unit lengths <= 6bp. This panel is available in VCF format with one file/chromosome. + * `Ziaei-Jam et al. `_ This panel is in the GRCh38 reference build and contains 1,070,698 TRs and 70M Snps/indels from 3,202 samples from the 1000 Genomes Project. TR genotypes are based on `EnsembleTR _` and contain both STRs (repeat unit 1-6bp) and VNTRs (repeat unit 7+bp). The steps below were specifically tested with this panel but should also be mostly relevant to imputation with the Saini reference panel. This panel is available in VCF and BREF3 formats with one file/chromosome. + +* **Genetic map (optional)**. You can optionally provide a genetic map to Beagle with cM coordinates, which are more accurate for modeling recombination than bp coordinates. We used the `GRCh38 map files available from Beagle `_. + +* **Tools** + + * `Beagle `_: Beagle is used for imputing TRs from SNPs/indels. The steps below were tested with :code:`beagle.27May24.118.jar` which the link points to. + * `bcftools `_: Bcftools is used for multiple steps including merging files and extracting TRs from the Beagle output. + * `tabix `_: Used for indexing VCF files + + +Imputation steps +~~~~~~~~~~~~~~~~ + +.. _step1_1: + + +Step 1.1: Genotype preprocessing +________________________________ + + +The inputs to Step 1.2 below are one VCF file per chromosome per batch of samples. + +Beagle requires genotypes of the target samples to be input in VCF format. If your files are in another format (e.g. PGEN or Plink BED) you will need to first convert them to VCF. Further, the SNP-TR reference panel files and map files are split by chromosome, so you will similarly want your input genotype files to be split by chromosome. + +Finally, if you have a very large cohort (more than several thousand samples) imputation with Beagle can be very memory intensive. To avoid memory errors, we recommend splitting your genotypes into batches of 1,000 samples each. We have found the :code:`bcftools plugin split` command helpful for creating all the batches at once. An example command is below:: + + bcftools plugin split full_vcf_chr1.vcf.gz -G sample_groups.txt -Oz -o . + + for f in *.vcf.gz; do tabix -p vcf $f; done + +In this command: + +* :code:`full_vcf_chr21.vcf.gz` is the VCF file with genotypes for the whole cohort on chr21. +* :code:`sample_groups.txt` is a file defining how the samples should be split into batches. An example is below:: + + sample1 - batch1_chr21 + sample2 - batch1_chr21 + sample3 - batch1_chr21 + sample4 - batch2_chr21 + sample5 - batch2_chr21 + sample6 - batch2_chr21 + +The :code:`split` command above will result in files :code:`batch1_chr21.vcf.gz` and :code:`batch2_chr21.vcf.gz`. + +An full workflow for generating these VCF subsets in All of Us is available from our `CAST workflows `_ page. (Note in that workflow given the cohort size, we further broke up the split step by genomic region and then concatenate the results for all the regions from each chromosome in a final step). + +.. _step1_2: + + +Step 1.2: Imputing TRs in each batch +____________________________________ + +TODO + +.. _step1_3: + + +Step 1.3: Extracting TRs from each batch +________________________________________ + +TODO + + +.. _step1_4: + + +Step 1.4: Merging results from each batch +_________________________________________ + TODO + + .. _step2: Step 2: Computing dosages with annotaTR From 1237869b77d026b03d15b4eeb667a06e75de1b30 Mon Sep 17 00:00:00 2001 From: Melissa Gymrek Date: Mon, 4 Nov 2024 09:57:24 -0800 Subject: [PATCH 3/7] imputation steps 1.2 and 1.3 --- doc/VIGNETTE-GWAS-TUTORIAL.rst | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/doc/VIGNETTE-GWAS-TUTORIAL.rst b/doc/VIGNETTE-GWAS-TUTORIAL.rst index 5c7f498a..4f6ccd72 100644 --- a/doc/VIGNETTE-GWAS-TUTORIAL.rst +++ b/doc/VIGNETTE-GWAS-TUTORIAL.rst @@ -51,7 +51,7 @@ Prerequisites You will need the following files and tools to run the imputation step: -* **Individual-level SNP/indel genotypes (VCF format)**. You will need SNP/indel genotypes for your GWAS cohort. Either phased or unphased genotypes is fine. Imputation with Beagle will require these to be in VCF format. More on preprocessing genotypes below. +* **Individual-level SNP/indel genotypes (VCF format)**. You will need SNP/indel genotypes for your GWAS cohort. These can optionally be phased but that is not required, and if unphased Beagle will phase prior to imputation. Imputation with Beagle will require these to be in VCF format. More on preprocessing genotypes below. * **SNP-TR reference panel (VCF or BREF3 format)**. You will need a precomputed referene panel that contains phased SNP and TR genotypes from an orthogonal cohort. The panel needs to be in either VCF or BREF3 format to be compatible with Beagle. We have generated two such panels: @@ -109,7 +109,25 @@ An full workflow for generating these VCF subsets in All of Us is available from Step 1.2: Imputing TRs in each batch ____________________________________ -TODO + +The following example command runs TR imputation on a single batch of samples for a single chromosome:: + + java -Xmx25g -jar beagle.jar \ + gt=batch${batch}_chr${chrom} \ + ref=ensembletr_refpanel_v3_chr${chrom}.bref3 \ + ap=true \ + out=batch${batch}_chr${chrom}_imputed \ + map=beagle_chr${chrom}_b38.map + tabix -p vcf batch${batch}_chr${chrom}_imputed.vcf.gz + + +Some important note about the above Beagle command: + +* We have had success running Beagle on batches of 1000 samples using 25GB of memory. For larger batch sizes you may need to increase the memory. +* For the reference panel (:code:`ref` argument): you can provide either a VCF or BREF3 file. The VCF/BREF3 files for the EnsembleTR panel have equivalent information. In accordance with the Beagle recommendations, we have found the BREF3 files result in improved run times (about 10%). +* The :code:`ap` argument is optional, but is important to include if you want to take imputation uncertainty into account when performing GWAS. This argument tells Beagle to output allele probabilities for each imputed call. Including it does increase the size of the output VCF files. + +To run imputation on the full cohort, you will need to run the above command on each of the VCF files generated in step 1.1 (one file per chrom per batch of samples). .. _step1_3: @@ -117,7 +135,16 @@ TODO Step 1.3: Extracting TRs from each batch ________________________________________ -TODO +The Beagle output files contain both the original SNP/indel genotypes (which will now be phased) in addition to the phased imputed TR genotypes. In many cases for downstream steps we are just interested in the TR genotypes (e.g. if you already ran GWAS on the SNPs/indels separately). Before the next step you can optionally filter the Beagle VCF files to include just the TRs, which will also make the files way smaller and easier to work with:: + + bcftools view -i 'ID~"EnsTR"' batch${batch}_chr${chrom}_imputed.vcf.gz \ + -Oz -o batch${batch}_chr${chrom}_imputed_TRs.vcf.gz + tabix -p vcf batch${batch}_chr${chrom}_imputed_TRs.vcf.gz + + +This command assumes you are using the EnsembleTR reference panel, which has TR IDs of the form :code:`EnsTR:CHROM:POS`. If you are using a reference panel with different IDs for the TRs you'll need to modify the command above. + +On the other hand, if you want to process SNPs+TRs together in the GWAS you can skip this step. .. _step1_4: From a81d9e5fb8d55def6e3c40a558790aee35c87fdc Mon Sep 17 00:00:00 2001 From: Melissa Gymrek Date: Tue, 5 Nov 2024 17:24:55 -0800 Subject: [PATCH 4/7] adding steps 2 and 3 of gwas tutorial --- doc/VIGNETTE-GWAS-TUTORIAL.rst | 61 +++++++++++++++++++++++++++++++--- 1 file changed, 56 insertions(+), 5 deletions(-) diff --git a/doc/VIGNETTE-GWAS-TUTORIAL.rst b/doc/VIGNETTE-GWAS-TUTORIAL.rst index 4f6ccd72..38b886eb 100644 --- a/doc/VIGNETTE-GWAS-TUTORIAL.rst +++ b/doc/VIGNETTE-GWAS-TUTORIAL.rst @@ -29,7 +29,10 @@ To run a GWAS, you will need to have genotypes and phenotype data for your pheno This tutorial shows how to perform a GWAS using TR genotypes obtained from imputation. Alternatively, genotypes can be obtained directly from WGS data using one of the supported callers_. If you already have quality filtered TR calls available and do not need to perform imputation, you can jump directly to step 2 below. -A WDL workflow performing steps 1 and 2 is available on our `CAST workflows `_ page. +A WDL workflow performing steps 1 and 2 is available on our `CAST TR imputation workflow `_ page. + + +Another note: this is just one way to do a TR-based GWAS! In particular, we rely on finding linear associations between TR length and a trait of interest. Other options include: (1) looking for non-linear associations (e.g. quadratic or threshold effects) or (2) incorporating information about repeat sequence variation, in addition to length, into the association test. These are not covered here since our work on those is still exploratory, but we hope to incorporate those into workflows (and corresponding tutorials) soon. .. _step1: @@ -101,7 +104,7 @@ In this command: The :code:`split` command above will result in files :code:`batch1_chr21.vcf.gz` and :code:`batch2_chr21.vcf.gz`. -An full workflow for generating these VCF subsets in All of Us is available from our `CAST workflows `_ page. (Note in that workflow given the cohort size, we further broke up the split step by genomic region and then concatenate the results for all the regions from each chromosome in a final step). +An full workflow for generating these VCF subsets in All of Us is available from our `CAST subset VCF workflow `_ page. (Note in that workflow given the cohort size, we further broke up the split step by genomic region and then concatenate the results for all the regions from each chromosome in a final step). .. _step1_2: @@ -153,8 +156,11 @@ On the other hand, if you want to process SNPs+TRs together in the GWAS you can Step 1.4: Merging results from each batch _________________________________________ -TODO +Before downstream steps we would like to merge the VCFs across all batches to have a single VCF file per chromosome. While TRTools does include the :code:`mergeSTR` tool which can be used for this, we recommend using :code:`bcftools merge` for large cohorts when using imputed TRs. This is because: (1) after imputation with Beagle the set of REF/ALT alleles should be identical across each batch and match the reference panel, so there is not a need to use mergeSTR which specifically deals with managing differences in alleles represented across files and (2) bcftools is much faster. To merge batches:: + + bcftools merge batch1_chr${chrom}_imputed_TRs.vcf.gz batch2_chr${chrom}_imputed_TRs.vcf.gz ... -Oz -o merged_${chrom}_TRs.vcf.gz + tabix -p vcf merged_${chrom}_TRs.vcf.gz .. _step2: @@ -162,13 +168,58 @@ TODO Step 2: Computing dosages with annotaTR --------------------------------------- -TODO +We will perform one more post-processing step on the imputation results to prepare for running GWAS. We will use the :code:`annotaTR` tool included in TRTools to perform the following: + +* Add back TR metadata to the VCFs resulting from imputation. Certain required fields (e.g. START, END, PERIOD) that are present in the TR+SNP reference panel get stripped by Beagle and we need to add those back to make the resulting VCF file compatible with other TRTools utilities. +* Compute TR dosages and store them in a PGEN file which can be used directly as input to plink for GWAS in Step 3. + +To run :code:`annotaTR` on each VCF:: + + annotaTR --vcf merged_${chrom}_TRs.vcf.gz \ + --ref-panel ensembletr_refpanel_v3_chr${chrom}.vcf.gz \ + --update-ref-alt \ + --vcftype hipstr \ + --dosages beagleap_norm + --out merged_${chrom}_TRs_annotated \ + --outtype pgen vcf \ + --vcf-outtype z + +Below we describe what each of these options does: + +* :code:`--vcf` provides annotaTR with the unannotated VCF resulting from imputation +* :code:`--ref-panel` provides annotaTR with the reference panel VCF, which is used to add back the required metadata fields +* :code:`--update-ref-alt` tells annotaTR to add back the exact allele sequences from the REF and ALT fields from the reference panel. This is because bcftools merge in some cases trims extra bases from REF and ALT sequences, which can cause problems for downstream processing with TRTools. +* :code:`--vcftype hipstr` tells TRTools this is a hipSTR-style VCF file +* :code:`--dosages beagleap_norm` tells annotaTR to compute dosages that take into account imputation uncertainty based on the Beagle AP field, and normalize dosages to between 0 and 2. Note this option requires that you had set :code:`ap=true` during the Beagle step above. +* :code:`--out` is a prefix to name the output files +* :code:`--outtype pgen vcf` tells annotaTR to output both PGEN and VCF files with the dosage information. +* :code:`--vcf-outtype z` tells it to output the VCF in bgzipped format. + +This command will output the following files:: + + merged_${chrom}_TRs_annotated.vcf + merged_${chrom}_TRs_annotated.psam + merged_${chrom}_TRs_annotated.pgen + merged_${chrom}_TRs_annotated.pvar + +See the `annotaTR documentation page `_ for full details for each option. .. _step3: Step 3: Running GWAS with TR genotypes -------------------------------------- -TODO +Now that we have imputed TRs, we are finally ready to perform GWAS! There are two ways to do this. You can use the VCF file as input to `associaTR `_ which is part of TRTools. Alternatively, you can use the PGEN files directly as input to `plink2 `_. For linear association testing, these tools should give identical results. The advantages of using plink2 over associated are that: (1) plink2 is faster, (2) you have access to a rich set of plink options, including logistic regression, filtering samples, calculating LD, etc. that are not all available in associaTR currently, and (3) you can process SNPs and TRs all in one place. Therefore, our example below performs GWAS using plink2 on the PGEN files:: + + plink2 --pfile merged_${chrom}_TRs_annotated \ + --pheno phenotypes.txt \ + --glm hide-covar \ + --covar covars.txt \ + --covar-variance-standardize \ + --out merged_${chrom}_TRs_gwas + +Where the options to :code:`--pheno` and :code:`--covar` should be formatted according to the plink documentation. + +This should output a file with GWAS summary statistics for each TR tested that can be used for downstream analysis. .. _callers: https://trtools.readthedocs.io/en/stable/CALLERS.html \ No newline at end of file From 1ec2cc07771298eebf32631c02bf6a66c4de20a7 Mon Sep 17 00:00:00 2001 From: Melissa Gymrek Date: Tue, 5 Nov 2024 17:31:44 -0800 Subject: [PATCH 5/7] add instructions for WGS genotypes --- doc/VIGNETTE-GWAS-TUTORIAL.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/VIGNETTE-GWAS-TUTORIAL.rst b/doc/VIGNETTE-GWAS-TUTORIAL.rst index 38b886eb..596c231d 100644 --- a/doc/VIGNETTE-GWAS-TUTORIAL.rst +++ b/doc/VIGNETTE-GWAS-TUTORIAL.rst @@ -202,6 +202,8 @@ This command will output the following files:: merged_${chrom}_TRs_annotated.pgen merged_${chrom}_TRs_annotated.pvar +Note: if your TR genotypes are obtained directly from WGS and wihtout imputation, you can leave out the options :code:`--update-ref-alt` and :code:`--ref-panel` and should use :code:`--dosages bestguess_norm` since you will not have the Beagle AP field. + See the `annotaTR documentation page `_ for full details for each option. .. _step3: From 65f4311b8fc74c7bdcdd7d46076d5ff861e53e36 Mon Sep 17 00:00:00 2001 From: yli091230 Date: Mon, 2 Dec 2024 14:35:35 -0800 Subject: [PATCH 6/7] Update VIGNETTE-GWAS-TUTORIAL.rst The plugin split function may not available for some version of bcftools. I add some notes on how to split samples without the plugin split function. --- doc/VIGNETTE-GWAS-TUTORIAL.rst | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/doc/VIGNETTE-GWAS-TUTORIAL.rst b/doc/VIGNETTE-GWAS-TUTORIAL.rst index 596c231d..02dcc862 100644 --- a/doc/VIGNETTE-GWAS-TUTORIAL.rst +++ b/doc/VIGNETTE-GWAS-TUTORIAL.rst @@ -104,6 +104,21 @@ In this command: The :code:`split` command above will result in files :code:`batch1_chr21.vcf.gz` and :code:`batch2_chr21.vcf.gz`. +Note, the :code:`bcftools plugin split` function may not be available for some version of bcftools. If that is the case, can use following example command to split the files to batch:: + + # split samples by ${batch_size} + bcftools query -l full_vcf_chr${chrom}.vcf.gz | awk -v chrom=chr${chrom} -v group_size=${batch_size} 'BEGIN {FS=OFS="\t"} {print $1,"batch"int(NR / group_size)+1"_"chrom}' > ${output_dir}/chr${chrom}/batch_files/ + mkdir -p ${output_dir}/chr${chrom}/batch_files/ + # creat batched sample_list files + awk -v outdir="${output_dir}/chr${chrom}/batch_files/" 'BEGIN {FS=OFS="\t"} {print $1 > outdir$2".txt"}' ${output_dir}/chr${chrom}/chr${chrom}_sample_list.txt + mkdir -p ${output_dir}/chr${chrom}/split_by_samples + # split vcf by sample batches + for batch in ${output_dir}/chr${chrom}/batch_files/*.txt; do + batch_name=$(basename ${batch} | cut -d "." -f 1) + bcftools view -S ${batch} ${output_dir}/chr${chrom}/chr${chrom}_with_af_filtered_hg38.vcf.gz -Oz -o ${output_dir}/chr${chrom}/split_by_samples/${batch_name}.vcf.gz + done + + An full workflow for generating these VCF subsets in All of Us is available from our `CAST subset VCF workflow `_ page. (Note in that workflow given the cohort size, we further broke up the split step by genomic region and then concatenate the results for all the regions from each chromosome in a final step). .. _step1_2: @@ -224,4 +239,4 @@ Where the options to :code:`--pheno` and :code:`--covar` should be formatted acc This should output a file with GWAS summary statistics for each TR tested that can be used for downstream analysis. -.. _callers: https://trtools.readthedocs.io/en/stable/CALLERS.html \ No newline at end of file +.. _callers: https://trtools.readthedocs.io/en/stable/CALLERS.html From 5e735d2c11817a686b43c68e7b1d6133a2478f77 Mon Sep 17 00:00:00 2001 From: yli091230 Date: Mon, 2 Dec 2024 14:52:12 -0800 Subject: [PATCH 7/7] Update VIGNETTE-GWAS-TUTORIAL.rst I was mean to make a suggestion but accidentally committed the changes. I removed the changes and make it in suggestions format. Sorry for the confusion. --- doc/VIGNETTE-GWAS-TUTORIAL.rst | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/doc/VIGNETTE-GWAS-TUTORIAL.rst b/doc/VIGNETTE-GWAS-TUTORIAL.rst index 02dcc862..454dbae3 100644 --- a/doc/VIGNETTE-GWAS-TUTORIAL.rst +++ b/doc/VIGNETTE-GWAS-TUTORIAL.rst @@ -104,21 +104,6 @@ In this command: The :code:`split` command above will result in files :code:`batch1_chr21.vcf.gz` and :code:`batch2_chr21.vcf.gz`. -Note, the :code:`bcftools plugin split` function may not be available for some version of bcftools. If that is the case, can use following example command to split the files to batch:: - - # split samples by ${batch_size} - bcftools query -l full_vcf_chr${chrom}.vcf.gz | awk -v chrom=chr${chrom} -v group_size=${batch_size} 'BEGIN {FS=OFS="\t"} {print $1,"batch"int(NR / group_size)+1"_"chrom}' > ${output_dir}/chr${chrom}/batch_files/ - mkdir -p ${output_dir}/chr${chrom}/batch_files/ - # creat batched sample_list files - awk -v outdir="${output_dir}/chr${chrom}/batch_files/" 'BEGIN {FS=OFS="\t"} {print $1 > outdir$2".txt"}' ${output_dir}/chr${chrom}/chr${chrom}_sample_list.txt - mkdir -p ${output_dir}/chr${chrom}/split_by_samples - # split vcf by sample batches - for batch in ${output_dir}/chr${chrom}/batch_files/*.txt; do - batch_name=$(basename ${batch} | cut -d "." -f 1) - bcftools view -S ${batch} ${output_dir}/chr${chrom}/chr${chrom}_with_af_filtered_hg38.vcf.gz -Oz -o ${output_dir}/chr${chrom}/split_by_samples/${batch_name}.vcf.gz - done - - An full workflow for generating these VCF subsets in All of Us is available from our `CAST subset VCF workflow `_ page. (Note in that workflow given the cohort size, we further broke up the split step by genomic region and then concatenate the results for all the regions from each chromosome in a final step). .. _step1_2: