R语言计算Roger遗传距离

遗传距离是什么,怎样衡量

遗传距离指个体、群体或种之间用DNA序列或等位基因频率来估计的遗传差异大小。衡量遗传距离的指标包括用于数量性状分析的欧式距离(D),可用于质量性状和数量性状的Gower距离(DG)Roger距离(RD),用于二元数据的改良Roger距离(GDMR)Nei&Li距离(GDNL)Jaccard距离(GDJ)和简单匹配距离(GDSM)等。
参考链接

遗传距离的计算

Roger遗传距离

先贴出计算代码:

library("poppr")
library("ape") # To visualize the tree using the "nj" function
library("magrittr")
library("adegenet")
library("pegas")
library("seqinr")
# data(microbov)
#    caluclate Roger distance 短短三行代码
out<-read.vcfR("out.vcf")
dat <- vcfR2genind(out)
dfdist <- rogers.dist(dat)

我手上有hapmap文件,先转化成vcf文件,再进行计算,最后用as.matrix,write.csv读写出来,就得到了Roger遗传距离的矩阵。

解决过程

从未计算过遗传距离的我在网上找了很久,终于在一个问题下面找到了答案:
如何计算Roger遗传距离?使用poppr包来计算。
在这里插入图片描述
于是我继续搜索??poppr,得到了一系列接近答案的内容,在点进这个网站:http://grunwaldlab.github.io/Population_Genetics_in_R/Pop_Structure.html
我发现真的可以计算。
在这里插入图片描述
此外,还有不同计算遗传距离的方法:Bruvo’s distance、Edwards’ distance、Nei’s distance(也可以在MEGA里算)、Provesti’s distance、Reynolds’ distance、Provesti’s distance。打出来便于大家搜索。

参考链接:https://www.meiwen.com.cn/subject/nlsmwctx.html

关于一些弯路

一开始使用了data(microbov),发现是S4类型,但是用as.data.frame打开仅仅是基因型。所以一直想要把基因型直接转化为S4类型。于是刷到了这样一个帖子:
https://www.rdocumentation.org/packages/adegenet/versions/2.0.1/topics/df2genind
http://grunwaldlab.github.io/Population_Genetics_in_R/Pop_Structure.html
在这里插入图片描述
代码如下:

> temp <- lapply(1:30, function(i) sample(1:9, 4, replace=TRUE))
> temp <- sapply(temp, paste, collapse="")
> temp <- matrix(temp, nrow=10, dimnames=list(paste("ind",1:10), paste("loc",1:3)))
> temp
       loc 1  loc 2  loc 3 
ind 1  "1816" "9937" "5992"
ind 2  "7848" "1124" "2787"
ind 3  "3733" "8911" "5455"
ind 4  "6938" "1113" "3634"
ind 5  "5149" "4993" "1333"
ind 6  "8934" "5968" "9684"
ind 7  "5482" "3713" "2729"
ind 8  "1895" "7549" "4415"
ind 9  "4923" "5735" "3232"
ind 10 "6163" "2788" "6888"
> obj <- df2genind(temp, ploidy=4, sep="")
> obj
/// GENIND OBJECT /

 // 10 individuals; 3 loci; 27 alleles; size: 10.2 Kb

 // Basic content
   @tab:  10 x 27 matrix of allele counts
   @loc.n.all: number of alleles per locus (range: 9-9)
   @loc.fac: locus factor for the 27 columns of @tab
   @all.names: list of allele names for each locus
   @ploidy: ploidy of each individual  (range: 4-4)
   @type:  codom
   @call: df2genind(X = temp, sep = "", ploidy = 4)

 // Optional content
   - empty -
## simple example
df <- data.frame(locusA=c("11","11","12","32"),
locusB=c(NA,"34","55","15"),locusC=c("22","22","21","22"))
row.names(df) <- .genlab("genotype",4)
df

obj <- df2genind(df, ploidy=2, ncode=1)
obj
tab(obj)


## converting a genind as data.frame
genind2df(obj)
genind2df(obj, sep="/")

可以试试看。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值