https://github.com/AJResearchGroup/plinkr
Work with PLINK from R
https://github.com/AJResearchGroup/plinkr
gwas plink plink2 r r-package
Last synced: 4 months ago
JSON representation
Work with PLINK from R
- Host: GitHub
- URL: https://github.com/AJResearchGroup/plinkr
- Owner: AJResearchGroup
- License: gpl-3.0
- Created: 2021-04-16T10:16:54.000Z (almost 4 years ago)
- Default Branch: master
- Last Pushed: 2022-06-14T14:55:40.000Z (almost 3 years ago)
- Last Synced: 2024-08-13T07:13:26.215Z (8 months ago)
- Topics: gwas, plink, plink2, r, r-package
- Language: R
- Homepage:
- Size: 6.46 MB
- Stars: 7
- Watchers: 1
- Forks: 2
- Open Issues: 19
-
Metadata Files:
- Readme: README.Rmd
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
- jimsghstars - AJResearchGroup/plinkr - Work with PLINK from R (R)
README
---
output: github_document
---```{r, echo = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.path = "README-"
)
```# plinkr
Branch |[](https://github.com/richelbilderbeek/plinkr/actions)|[](https://www.codecov.io)
---------|-----------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------
`master` | |[](https://codecov.io/github/richelbilderbeek/plinkr/branch/master)
`develop`| |[](https://codecov.io/github/richelbilderbeek/plinkr/branch/develop)Work with PLINK and PLINK2 from R.
* Doing the first PLINK example: [YouTube](https://youtu.be/LsfKQw2oIUg) [download (.ogv)](http://richelbilderbeek.nl/plinkr_basic_usage.ogv)
* Detect an association with one or more quantitative traits: [YouTube](https://youtu.be/IicNdc8sDfI) [download (.ogv)](http://richelbilderbeek.nl/plinkr_assoc_qt.ogv)
* Detect an association with ideal quantitative traits: [YouTube](https://youtu.be/oXGy83WiHm4) [download (.ogv)](http://richelbilderbeek.nl/plinkr_demo_qt_assoc.ogv)
* Simulate quantitative traits: [YouTube](https://youtu.be/H0XlLVsFry4) [download (.ogv)](http://richelbilderbeek.nl/plinkr_create_demo_assoc_qt_params.ogv)
* Simulate custom traits: [YouTube](https://youtu.be/5X1kLkiQbtw) [download (.ogv)](http://richelbilderbeek.nl/plinkr_create_custom_trait.ogv)
* Detect an association with a binary trait/case-control phenotype: [YouTube](https://youtu.be/LhXQcDQvZS0) [download (.ogv)](http://richelbilderbeek.nl/plinkr_assoc.ogv)## Installation
See [doc/install.md](doc/install.md)
## Examples
### Running PLINK
`plinkr` can seamlessly run any `PLINK` or `PLINK2` versions.
Run PLINK:
```{r run_plink_help, results=FALSE}
library(plinkr)
run_plink("--help")
```To call a specific version of PLINK:
```{r run_plink_helps, results=FALSE}
run_plink(c("--help", "--noweb"), create_plink_v1_7_options())
run_plink("--help", create_plink_v1_9_options())
run_plink("--help", create_plink_v2_0_options())
```Of course, you can also call PLINK to detect genetic associations :-) :
```{r run_plink_on_case_control_example_data, results=FALSE}
# Use the PLINK v1.9 example files
plink_v1_9 <- create_plink_v1_9_options()
ped_filename <- get_plink_example_filename("toy.ped", plink_v1_9)
map_filename <- get_plink_example_filename("toy.map", plink_v1_9)# Do a case-control association
plinkr::run_plink(
args = c(
"--ped", ped_filename,
"--map", map_filename
)
)
```* See the vignette `basic_usage` for basic usage of PLINK,
as taken from the PLINK website, which shows a
quantitative trait analysis
* See the vignette `test_assoc_qt` for the same basic usage of PLINK,
using the `plinkr` interface
* See the vignette `demo_assoc_qt` for doing a quantitative trait
analysis using simulated data and the `plinkr` interface### Run a quantitative trait analysis on existing files
#### Read from PLINK text files
```{r run_assoc_plink_text_files, results=FALSE}
assoc_qt_data <- create_assoc_qt_data(
data = create_plink_text_filenames(
map_filename = get_plinkr_filename("demo_assoc_qt.map"),
ped_filename = get_plinkr_filename("demo_assoc_qt.ped")
),
phenotype_data = create_phenotype_data_filename(
phe_filename = get_plinkr_filename("demo_assoc_qt.phe")
)
)
assoc_qt_filenames <- assoc_qt(assoc_qt_data = assoc_qt_data)
read_plink_qassoc_file(assoc_qt_filenames$qassoc_filenames[1])
```#### Read from PLINK binary files
```{r run_assoc_plink_bin_files, results=FALSE}
assoc_qt_data <- create_assoc_qt_data(
data = create_plink_bin_filenames(
bed_filename = get_plinkr_filename("demo_assoc_qt.bed"),
bim_filename = get_plinkr_filename("demo_assoc_qt.bim"),
fam_filename = get_plinkr_filename("demo_assoc_qt.fam")
),
phenotype_data = create_phenotype_data_filename(
phe_filename = get_plinkr_filename("demo_assoc_qt.phe")
)
)
assoc_qt_filenames <- assoc_qt(assoc_qt_data = assoc_qt_data)
read_plink_qassoc_file(assoc_qt_filenames$qassoc_filenames[1])
```### Demonstrate a quantitative trait analysis
`plinkr` can seamlessly use `PLINK`/`PLINK2` in-memory-data or files.
```{r run_assoc_qt_plink_text_data, results=FALSE}
assoc_qt_data <- create_demo_assoc_qt_data()# Prove that this is PLINK text data
check_plink_text_data(assoc_qt_data$data)assoc_qt_params <- create_test_assoc_qt_params()
assoc_qt(
assoc_qt_data = assoc_qt_data,
assoc_qt_params = assoc_qt_params
)
```To convert the in-memory data to PLINK binary format and do the same
quantitative trait analysis:```{r run_assoc_qt_plink_bin_data, results=FALSE}
assoc_qt_data$data <- convert_plink_text_data_to_plink_bin_data(
assoc_qt_data$data
)# Prove that this is PLINK binary data
check_plink_bin_data(assoc_qt_data$data)assoc_qt(
assoc_qt_data = assoc_qt_data,
assoc_qt_params = assoc_qt_params
)
```* See the vignette `demo_assoc_qt` for a walk-through of
the data that is simulated by default
* See the vignette `create_demo_assoc_qt_params` for many
examples how data can be simulated### File I/O
`plinkr` can read and save many types of PLINK files.
Below is an overview.
List from [the PLINK file format reference](https://www.cog-genomics.org/plink2/formats).File extension |`plink` read function
--------------------|--------------------------
`.adjusted` |`read_plink_adjusted_file`
`.allele.no.snp` |:construction:
`.assoc` |`read_plink_assoc_file`
`.assoc.adjusted` |`read_plink_assoc_adjusted_file`
`.assoc.dosage` |:construction:
`.assoc.fisher` |:construction:
`.assoc.linear` |:construction:
`.assoc.logistic` |:construction:
`.auto.R` |:construction:
`.bcf` |:construction:
`.beagle.dat` |:construction:
`.bed` |`read_plink_bed_file`
`.bim` |`read_plink_bin_file`
PLINK binary data |`read_plink_bin_data`
PLINK2 binary data |`read_plink2_bin_data`
`.blocks*` |:construction:
`.chr-*.dat` |:construction:
`.chr-*.map` |:construction:
`.clst` |:construction:
`.clumped*` |:construction:
`.cluster*` |:construction:
`.cmh` |:construction:
`.cmh2` |:construction:
`.cnv` |:construction:
`.cnv.indiv` |:construction:
`.cnv.overlap` |:construction:
`.cnv.summary` |:construction:
`.cov` |`read_plink_cov_file`
`.dfam` |:construction:
`.diff` |:construction:
`.dist` |:construction:
`.dupvar` |:construction:
`.eigenval` |`read_plink_eigenval_file`
`.eigenvec` |`read_plink_eigenvec_file`
`.eigenvec*` |:construction:
`.epi.*` |:construction:
`.fam` |`read_plink_fam_file`
`.flipscan` |:construction:
`.frq` |`read_plink_frq_file`
`.frq.cc` |:construction:
`.frq.count` |:construction:
`.frq.strat` |`read_plink_frq_strat_file`
`.frqx` |:construction:
`.fst` |:construction:
`.gen` |:construction:
`.genome` |:construction:
`.grm` |:construction:
`.grm.N.bin` |:construction:
`.grm.bin` |:construction:
`.gvar` |:construction:
`.het` |:construction:
`.hh` |:construction:
`.hom` |:construction:
`.hom.indiv` |:construction:
`.hom.overlap*` |:construction:
`.hom.summary` |:construction:
`.homog` |:construction:
`.hwe` |:construction:
`.ibc` |:construction:
`.imiss` |`read_plink_imiss_file`
`.info` |:construction:
`.lasso` |:construction:
`.ld` |`read_plink_ld_file`
`.ldset` |:construction:
`.lgen` |:construction:
`.list` |:construction:
`.lmiss` |`read_plink_lmiss_file`
`.log` |`read_plink_log_file`
`.map` |`read_plink_map_file`
`.mdist` |:construction:
`.mdist.missing` |:construction:
`.mds` |:construction:
`.*mendel` |:construction:
`.meta` |:construction:
`.mibs` |:construction:
`.missing` |:construction:
`.missing.hap` |:construction:
`.model` |:construction:
`.mperm` |:construction:
`.nearest` |:construction:
`.occur.dosage` |:construction:
`.out.dosage` |:construction:
`.ped` |`read_plink_ped_file`
`.perm` |:construction:
`.phe` |`read_plink_phe_file`
`.pphe` |:construction:
`.prob` |:construction:
`.profile` |:construction:
`.qassoc` |`read_plink_qassoc_file`
`.qassoc.gxe` |:construction:
`.qassoc.means` |:construction:
`.qfam.*` |:construction:
`.range.report` |:construction:
`.raw` |:construction:
`.recode.*.txt` |:construction:
`.recode.phase.inp` |:construction:
`.recode.strct_in` |:construction:
`.ref` |:construction:
`.rel` |:construction:
`.rlist` |:construction:
`.sample` |:construction:
`.set` |:construction:
`.set.{perm,mperm}` |:construction:
`.set.table` |:construction:
`.sexcheck` |:construction:
`.simfreq` |`read_plink_simfreq_file`
`.tags.list` |:construction:
`.tdt` |:construction:
`.tdt.poo` |:construction:
PLINK text data |`read_plink_text_data`
`.tfam` |:construction:
`.tped` |:construction:
`.traw` |:construction:
`.twolocus` |:construction:
`.var.ranges` |:construction:
`.vcf` |:construction:### Associations
Association type|Data type |General function |Specialized function
----------------|-----------------|--------------------------|------------------------------------------
Case-control |PLINK1 text data |`assoc` |`assoc_on_plink_text_data`
Case-control |PLINK1 bin data |`assoc` |`assoc_on_plink_bin_data`
Case-control |PLINK2 bin data |`assoc` |`assoc_on_plink2_bin_data`
Case-control |PLINK1 text files|`assoc` :construction: |`assoc_on_plink_text_files` :construction:
Case-control |PLINK1 bin files |`assoc` :construction: |`assoc_on_plink_bin_files` :construction:
Case-control |PLINK2 bin files |`assoc` :construction: |`assoc_on_plink2_bin_files` :construction:
Quantitative |PLINK1 text data |`assoc_qt` |`assoc_qt_on_plink_text_data`
Quantitative |PLINK1 bin data |`assoc_qt` |`assoc_qt_on_plink_bin_data`
Quantitative |PLINK2 bin data |`assoc_qt` |`assoc_qt_on_plink2_bin_data`
Quantitative |PLINK1 text files|`assoc_qt` :construction: |`assoc_qt_on_plink_text_files` :construction:
Quantitative |PLINK1 bin files |`assoc_qt` :construction: |`assoc_qt_on_plink_bin_files` :construction:
Quantitative |PLINK2 bin files |`assoc_qt` :construction: |`assoc_qt_on_plink2_bin_files` :construction:### PLINK and PLINK2 files conversions
`plinkr` allows to convert between any PLINK and PLINK2 files.
From |To |Function name
-------------------|-------------------|----------------------------------------------
PLINK1 text files |PLINK1 binary files|`convert_plink_text_files_to_plink_bin_files`
PLINK1 text files |PLINK2 binary files|`convert_plink_text_files_to_plink2_bin_files`
PLINK1 binary files|PLINK text files |`convert_plink_bin_files_to_plink_text_files`
PLINK1 binary files|PLINK2 binary files|`convert_plink_bin_files_to_plink2_bin_files`
PLINK2 binary files|PLINK text files |`convert_plink2_bin_files_to_plink_text_files` :construction:
PLINK2 binary files|PLINK binary files |`convert_plink2_bin_files_to_plink_bin_files`
:construction: |:construction: |:construction:
any type of files |PLINK text files |`convert_files_to_plink_text_files` :construction:
any type of files |PLINK1 binary files|`convert_files_to_plink_bin_files` :construction:
any type of files |PLINK2 binary files|`convert_files_to_plink2_bin_files` :construction:
PLINK1 binary files|SAIGE files |`create_bgen_files_for_saige` :construction:
PLINK1 binary files|PLINK2 VCF files |`convert_plink_bin_files_to_plink_vcf_files` :construction:### PLINK and PLINK2 data conversions
`plinkr` allows to convert between any PLINK and PLINK2 data.
From |To |Function name
------------------|------------------|--------------------------------------------
PLINK1 text data |PLINK1 binary data|`convert_plink_text_data_to_plink_bin_data`
PLINK1 text data |PLINK2 binary data|`convert_plink_text_data_to_plink2_bin_data`
PLINK1 binary data|PLINK text data |`convert_plink_bin_data_to_plink_text_data` :construction:
PLINK1 binary data|PLINK2 binary data|`convert_plink_bin_data_to_plink2_bin_data`
PLINK2 binary data|PLINK text data |`convert_plink2_bin_data_to_plink_text_data` :construction:
PLINK2 binary data|PLINK binary data |`convert_plink2_bin_data_to_plink_bin_data`## Singularity container
* [Find the latest 'plinkr' Singularity container](https://cloud.sylabs.io/library/search;query=plinkr)
## FAQ
See [doc/faq.md](doc/faq.md)