R—计算系统发育多样性PD (Calculate Faith’s Phylogenetic Diversity)

R计算 PD Calculate Faith’s Phylogenetic Diversity

网址: https://cran.r-project.org/web/packages/picante/index.html

Description: Calculate the sum of the total phylogenetic branch length for one or multiple samples.

Usage: pd(samp, tree, include.root=TRUE)

Arguments

samp: Community data matrix

tree:A phylo tree object

include.root: Should the root node be included in all PD calculations (default = TRUE)

#加载包
library(picante)

library(ape)

#测试数据
data(phylocom)

pd(phylocom s a m p l e , p h y l o c o m sample, phylocom sample,phylocomphylo)

  1. 读取树文件:
    tree= read.tree(“D:/timberproject2021/sp_tree20210707.tre”)

  2. 读取samp数据矩阵
    b = read.csv(“D:/timberproject2021/GridsID-species2.csv”, header = T, row.names=1)

  3. 计算pd
    c = pd(b, tree, include.root=TRUE)

  4. 导出计算结果
    write.csv(c,file = “D:/aaa.csv”)

报错:修改树:
If youwant the root ofyour tree to correspond to the most recent ancestor of the taxaactually present in your sample, you should prune the tree before running pd:

prunedTree<-prune.sample(b,tree)

参考资料:

https://daijiang.name/en/2014/05/04/notes-func-phylo-book-1/

原文网址:https://www.jianshu.com/p/789a93c2f62a

计算算法种群多样性可以采用多种方法,以下是一种基于 Matlab 的实现: 首先,需要定义一些变量和参数: - `pop`:算法种群,一个 N-by-M 的矩阵,其中 N 表示个体数量,M 表示个体特征数量。 - `dist`:距离矩阵,一个 N-by-N 的矩阵,表示个体之间的距离。 - `diversity`:多样性指标,一个实数,表示算法种群的多样性程度。 - `p`:惩罚因子,一个实数,用于惩罚距离较近的个体之间的相似度。 接着,可以按照以下步骤计算算法种群的多样性: 1. 首先,计算距离矩阵 `dist`。可以使用 `pdist` 函数计算个体之间的欧几里得距离,然后将距离矩阵进行对称化处理。 ```matlab dist = squareform(pdist(pop)); dist = dist + dist'; ``` 2. 计算个体之间的相似度,可以采用以下公式: $$ sim(i,j) = e^{-\frac{dist(i,j)^2}{2\sigma^2}} $$ 其中,$\sigma$ 是一个常数,用于控制相似度的衰减速度。可以根据实际情况进行调整。 ```matlab sigma = median(dist(:)) / sqrt(log(size(pop,1))); sim = exp(-dist.^2 ./ (2*sigma^2)); ``` 3. 计算个体之间的平均相似度和多样性指标。可以采用以下公式: $$ diversity = \frac{1}{N(N-1)}\sum_{i=1}^{N}\sum_{j=i+1}^{N}(1 - sim(i,j))^p $$ 其中,$p$ 是惩罚因子。当 $p=0$ 时,相似度为 1 的个体对多样性没有贡献;当 $p>0$ 时,距离较近的个体之间的相似度会受到惩罚,从而增加种群的多样性。 ```matlab diversity = mean(mean((1 - sim).^p)); ``` 综上所述,可以将以上代码封装成一个函数,如下所示: ```matlab function diversity = calculate_diversity(pop, p) dist = squareform(pdist(pop)); dist = dist + dist'; sigma = median(dist(:)) / sqrt(log(size(pop,1))); sim = exp(-dist.^2 ./ (2*sigma^2)); diversity = mean(mean((1 - sim).^p)); end ``` 调用该函数时,传入种群矩阵和惩罚因子即可计算种群的多样性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雨林课堂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值