The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

Reference Based Chimera Detection

Overview

The rchime() function allows you to detect and remove chimeras from your dataset using a referenced based approach. rchime() can be used with strollur objects or data.frames as inputs. Let’s look at examples of both data types using sequence data from mothur’s MiSeq_SOP example analysis, and the silva_gold() reference sequences. rchime is designed to be flexible and you can use any reference you choose.

Creating strollur objects

Let’s create a strollur object containing the MiSeq_SOP sequences.

fasta_data <- readRDS(rchime_example("miseq_fasta.rds"))
abundance_data <- readRDS(rchime_example("miseq_abundance.rds"))

strollur <- strollur::new_dataset("rchime reference example")

strollur::add(strollur, table = fasta_data, type = "sequence")
#> Added 6084 sequences.
strollur::assign(strollur, table = abundance_data, type = "sequence_abundance")
#> Assigned 6084 sequence abundances.

strollur
#> rchime reference example:
#> 
#>             starts ends nbases ambigs polymers numns   numseqs
#> Minimum:         1  249    249      0        3     0      1.00
#> 2.5%-tile:       1  252    252      0        4     0   3216.38
#> 25%-tile:        1  252    252      0        4     0  32163.75
#> Median:          1  253    253      0        4     0  64327.50
#> 75%-tile:        1  253    253      0        5     0  96491.25
#> 97.5%-tile:      1  254    254      0        6     0 125438.62
#> Maximum:         1  256    256      0        8     0 128655.00
#> Mean:            1  252    252      0        4     0  64327.64
#> 
#> Number of unique seqs: 6084 
#> Total number of seqs: 128655 
#> 
#> Total number of samples: 20

Loading data.frames

data_df <- readRDS(rchime_example("miseq_data_frame.rds"))

str(data_df)
#> 'data.frame':    6084 obs. of  3 variables:
#>  $ sequence_name: chr  "M00967_43_000000000-A3JHG_1_1101_10133_8460" "M00967_43_000000000-A3JHG_1_1101_10134_24617" "M00967_43_000000000-A3JHG_1_1101_10331_23332" "M00967_43_000000000-A3JHG_1_1101_10340_12294" ...
#>  $ sequence     : chr  "TACGTAGGGGGCAAGCGTTATCCGGATTTACTGGGTGTAAAGGGAGCGTAGGCGGCCATGCAAGTCAGAAGTGAAAACCCGGGGCTCAACCCTGGGAGTGCTTTTGAAACT"| __truncated__ "TACGTAGGGGGCAAGCGTTATCCGGATTTACTGGGTGTAAAGGGAGCGTAGGCGGCCATGCAAGTCAGAAGTGAAAACCCGGGGCTCAACCCTGGGAGTGCTTTTGAAACT"| __truncated__ "TACGGAGGATGCGAGCGTTATCCGGATTTATTGGGTTTAAAGGGAGCGCAGGCGGCATGGCAAGTCAGATGTGAAAGCCCGGGGCTCAACCCCGGGACTGCATTTGAAACT"| __truncated__ "TACGGAGGATGCGAGCGTTATCCGGATTTATTGGGTTTAAAGGGTGCGTAGGCGGGCTGTTAAGTCAGCGGTCAAATGTCGGGGCTCAACGCCGTCGAGCCGTTGAAACTG"| __truncated__ ...
#>  $ abundance    : int  620 4 1 1 1 1 1 3 1 2 ...

Removing chimeras

When removing chimeras using a reference, the potential parents are chosen from the set of reference sequences. Let’s use the reference to remove the chimeras.

reference <- silva_gold()
str(reference)
#> 'data.frame':    5181 obs. of  2 variables:
#>  $ sequence_name: chr  "7000004128189528" "7000004128189537" "7000004128189547" "7000004128189554" ...
#>  $ sequence     : chr  "GACGAACGCTGGCGGCGTGCTTAACACATGCAAGTCGAGCGGAAAGGCCCTTCGGGGTACTCGAGCGGCGAACGGGTGAGTAACACGTGGGCAACCTACCCCCAGCACCGG"| __truncated__ "GATGAACGCTGGCGGTATGCTTAACACATGCAAGTCGAACGGAATCTTCGGATTTAGTGGCGGACGGGTGAGTAACGCGTGAGAATCTAGCTCTAGGTCGGGGACAACCAC"| __truncated__ "ATTGAACGCTGGCGGCATGCCTTACACATGCAAGTCGAACGGTAACAGGTCTTCGGATGCTGACGAGTGGCGAACGGGTGAGTAATACATCGGAACGTGCCCGATCGTGGG"| __truncated__ "GATGAACGCTGGCGGCGTGCCTAATACATGCAAGTCGAACGAAGCATCTTCGGATGCTTAGTGGCGAACGGGTGAGTAACACGTAGATAACCTACCTTTAACTCGAGGATA"| __truncated__ ...

rchime(strollur, reference = reference)
#> → rchime removed `1037` chimeras from your dataset.
#> → It took `2.45429587364197` seconds to detect and remove the chimeras.
strollur
#> rchime reference example:
#> 
#>             starts ends nbases ambigs polymers numns   numseqs
#> Minimum:         1  249    249      0        3     0      1.00
#> 2.5%-tile:       1  252    252      0        4     0   3190.45
#> 25%-tile:        1  252    252      0        4     0  31904.50
#> Median:          1  253    253      0        4     0  63809.00
#> 75%-tile:        1  253    253      0        5     0  95713.50
#> 97.5%-tile:      1  254    254      0        6     0 124427.55
#> Maximum:         1  256    256      0        8     0 127618.00
#> Mean:            1  252    252      0        4     0  63809.14
#> 
#> scrap_summary:
#>       type      trash_code unique total
#> 1 sequence rchime_chimeras    787  1037
#> 
#> Number of unique seqs: 5297 
#> Total number of seqs: 127618 
#> 
#> Total number of samples: 20 
#> Total number of custom reports: 1

data <- rchime(data_df, reference = reference)
#> → rchime removed `1037` chimeras from your dataset.
#> → It took `2.46177792549133` seconds to detect and remove the chimeras.
data
#>             starts ends nbases ambigs polymers numns   numseqs
#> Minimum:         1  249    249      0        3     0      1.00
#> 2.5%-tile:       1  252    252      0        4     0   3190.45
#> 25%-tile:        1  252    252      0        4     0  31904.50
#> Median:          1  253    253      0        4     0  63809.00
#> 75%-tile:        1  253    253      0        5     0  95713.50
#> 97.5%-tile:      1  254    254      0        6     0 124427.55
#> Maximum:         1  256    256      0        8     0 127618.00
#> Mean:            1  252    252      0        4     0  63809.14
#> 
#> scrap_summary:
#>       type      trash_code unique total
#> 1 sequence rchime_chimeras    787  1037
#> 
#> Number of unique seqs: 5297 
#> Total number of seqs: 127618 
#> 
#> Total number of custom reports: 1

Results

The rchime() function returns a strollur object. Let’s take a closer look at the chimera_report generated by rchime(). The chimera_report is a data.frame with a row for each sequence in your dataset. Let’s take a look at the first 5 chimeric sequences in the report:

chimera_report <- strollur::report(data, type = "chimera_report")

chimera_report[chimera_report$Chimeric_Status == "Y", ] |> head(n = 5)
#>        Score                                        Query          ParentA
#> 6  0.6724684  M00967_43_000000000-A3JHG_1_1101_10574_3283 7000004130085859
#> 9  0.4391696 M00967_43_000000000-A3JHG_1_1101_10956_16121       S000008023
#> 12 0.5777207 M00967_43_000000000-A3JHG_1_1101_11038_24430       S000008023
#> 20 1.0522959 M00967_43_000000000-A3JHG_1_1101_11538_27185       S000429249
#> 34 0.4824794 M00967_43_000000000-A3JHG_1_1101_13010_15146       S000149329
#>             ParentB       Top_Parent        QM       QA       QB      QAB
#> 6  7000004128190422 7000004130085859  93.22709 87.64940 81.67331 77.29084
#> 9  7000004131498097       S000008023  96.01594 93.22709 87.25100 83.66534
#> 12 7000004131498332       S000008023  96.41434 94.82072 80.87649 81.27490
#> 20 7000004131252252 7000004131252252 100.00000 82.47012 98.80478 81.27490
#> 34 7000004131498097       S000149329  91.23506 86.05578 78.08765 75.69721
#>          QT LY LN LA RY RN RA      Div Chimeric_Status
#> 6  87.64940 34  5 12 14  0  0 5.577689               Y
#> 9  93.22709 22  0  0 11  4  6 2.788845               Y
#> 12 94.82072 39  0  1  6  2  6 1.593625               Y
#> 20 98.80478  3  0  0 44  0  0 1.195219               Y
#> 34 86.05578 34  1 10 15  2  9 5.179283               Y

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.