美文网首页基因组学生信学习基因组组装
基因组分析 K-mer 第3回 估计1000bp的全基因长度

基因组分析 K-mer 第3回 估计1000bp的全基因长度

作者: Jason数据分析生信教室 | 来源:发表于2021-06-08 10:03 被阅读0次

    0608 Cloudy
    在第二回的文章里我们用k-mer法预测了比较短的序列长度。因为序列本身较短,再加上是预测上的误差导致结果差强人意,在这一回里我会尝试用一毛一样的方法来预测1000bp的序列。废话不多说,直接来操作吧。

    3.1 生成1000bp的长序列

    代码有不懂的地方请参照前两回的讲解。主要做了以下两件事

    • 生成一段1000bp的长序列
    • 根据长序列(以长序列为参照序列)生成200段20bp的短序列
    out_f1 <- "sample33_ref.fasta"        
    out_f2 <- "sample33_ngs.fasta"         
    param_len_ref <- 1000               
    narabi <- c("A","C","G","T")           
    param_composition <- c(22, 28, 28, 22)
    param_len_ngs <- 20                    
    param_num_ngs <- 200                  
    param_desc <- "contig"                    
    library(Biostrings)                    
    set.seed(1010)                         
    ACGTset <- rep(narabi, param_composition
    reference <- paste(sample(ACGTset, param_len_ref, replace=T), collapse="")
    reference <- DNAStringSet(reference)  
    names(reference) <- param_desc     
    reference                    
    
    • 长序列确认:


    s_posi <- sample(1:(param_len_ref-param_len_ngs), param_num_ngs, replace=T)
    hoge <- NULL                          
    for(i in 1:length(s_posi)){            
      hoge <- append(hoge, subseq(reference, start=s_posi[i], width=param_len_ngs))
    }
    fasta <- hoge                          
    description <- paste(param_desc, s_posi, (s_posi+param_len_ngs-1), sep="_")
    names(fasta) <- description            
    fasta                                  
    
    • 短序列确认:


    • 保存一下,当然不保存直接用也行

    writeXStringSet(reference, file=out_f1, format="fasta", width=50)
    writeXStringSet(fasta, file=out_f2, format="fasta", width=50)
    

    3.2 用短序列来预测原长序列的长度

    方法和第二回的内容非常相似。首先用K=3来尝试一下。

    3.2.1 k=3的k-mer

    in_f <- "sample33_ngs.fasta"           
    out_f <- "hoge10.txt"                  
    param_kmer <- 3                        
    
    library(Biostrings)                   
    
    fasta <- readDNAStringSet(in_f, format="fasta")
    hoge <- oligonucleotideFrequency(fasta, width=param_kmer)
    out <- colSums(hoge)               
    
    write.table(out, out_f, sep="\t", append=F, quote=F, row.names=T, col.names=F)
    

    打开out你可以看到各k-mer出现的频度,如下图



    如同第二回所述,出现0次以上的k-mer的种类数就是原参照序列也就是长序列的长度。在此,所有的k-mer都在0次以上,一共有64个k-mer,所以原长度是64?
    No, No, No,这个问题在第二回的讲解里也出现过,K=3的话撑死了也就64个k-mer, 远远不能满足1000bp长度的基因,所以,需要选择更大的k值。

    3.2.2 k=10, start again

    把k设置成10,再来试一次

    in_f <- "sample33_ngs.fasta"          
    out_f <- "hoge11.txt"                  
    param_kmer <- 10                      
    
    library(Biostrings)                    
    
    fasta <- readDNAStringSet(in_f, format="fasta")
    hoge <- oligonucleotideFrequency(fasta, width=param_kmer)
    out <- colSums(hoge)                   
    
    write.table(out, out_f, sep="\t", append=F, quote=F, row.names=T, col.names=F)
    

    通过产看k-mer的理论上的种类可以看出就是4的10次方。

    length(out)        
    [1] 1048576
    

    其中大于0的k-mer是842,也就是推算出原基因长度就是842,怎么样,是不是已经很接近真实答案1000了。

    sum(out > 0)   
     [1] 842                        
    

    相关文章

      网友评论

        本文标题:基因组分析 K-mer 第3回 估计1000bp的全基因长度

        本文链接:https://www.haomeiwen.com/subject/ttsdeltx.html