我正在尝试用R来计算田岛的D.我有一个DNA.bin对象,包含来自不同人群的序列。由于其中的SNP和插入缺失,序列具有不同的长度。运行tajima.test函数时出现以下错误:
as.matrix.DNAbin(x)出错: 列表中的DNA序列长度不一样。
如何计算不同长度序列的田岛D?
这是我到目前为止所做的:
x <- structure(c("55548", "43297", "35309", "34468", "AATTCAATGCTCGGGAAGCAAGGAAAGCTGGGGACCAACTTCTCTTGGAGACATGAGCTTAGTGCAGTTAGATCGGAAGAGCA", "AATTCCTAAAACACCAATCAAGTTGGTGTTGCTAATTTCAACACCAACTTGTTGATCTTCACGTTCACAACCGTCTTCACGTT", "AATTCACCACCACCACTAGCATACCATCCACCTCCATCACCACCACCGGTTAAGATCGGAAGAGCACACTCTGAACTGTAAACCCAGTC", "AATTCTATTGGTCATCACAATGGTGGTCCGTGGCTCACGTGCGTTCCTTGTGCAGGTCAACAGGTCAAGTTAAGATCGGAAGA"), .Dim = c(4L, 2L))
y <- t(sapply(strsplit(x[,2],""), tolower))
my.dnabin <- as.DNAbin(y)
tajima.test(my.dnabin)
答案 0 :(得分:0)
Tajima的D使用核苷酸的成对比较,因此在运行之前需要你DNA is properly aligned。你的目前不在,所以你得到一个错误。大多数DNA.bin方法都假设您的DNA是对齐的 - 这应该是您的第一步。
要对齐你的DNA,尝试从猿的clustal
命令 - 你需要安装clustal。我使用clustal omega因为我不认为R是进行DNA比对的最佳方法。
您将获得一个对齐的DNA序列,现在适用于Tajima的D(注意间隙,用于比对序列):
x <- structure(c("55548", "43297", "35309", "34468",
"AATTCAATGCTCGGGAAGCAAGGAAAGCT---GGGGACCAACTTCTCTTGGAGACATGAGCTTAGTGCAGTTAGATCGGAAGAGCA-----------------------",
"AATTCCTAAAACACCAATCAAGT----TG---------GTGTTGCTAATTTCAACACCAACTTGTTGAT------------CTTCACGTTCACAACCGTCTTCACGTT-",
"-----AATTCACCA-------------CCACCACTAGCATACCATCCACCT--CCATCACCACCACCGGTTAAGATCGGAAGAGCACACTCTGAACTGTAAACCCAGTC",
"AATTCTATTGGTCATCACAATGGTGGTCCGTGGCTCACGTGCGTTCCTTGTGCAGGTCAACAGGTCAAGTTAAGATCGGAAGA--------------------------"), .Dim = c(4L, 2L))
现在你的测试将会运行:
y <- t(sapply(strsplit(x[,2],""), tolower))
my.dnabin <- as.DNAbin(y)
tajima.test(my.dnabin)
$D
[1] -5.624054
$Pval.normal
[1] 1.865271e-08
$Pval.beta
[1] 0