shinyhrq的个人博客分享 http://blog.sciencenet.cn/u/shinyhrq

博文

生态位宽度计算方法,以及泛化种和特化种划分---

已有 1250 次阅读 2024-10-3 14:10 |个人分类:R语言学习代码|系统分类:科研笔记

  生态位宽度(niche breadth)是指一个种群(或其它生物单位)在一个群落中所利用的各种不同资源的总和。在可利用资源量较少的情况下,生态位宽度一般增加,以使种群得到足够的资源。在可利用资源量丰富的环境中,可导致选择性利用资源,使得生态位宽度变窄。一个种的生态位越宽,该物种的特化程度就越小,也就是说它更倾向于是一个泛化种(generalist species,泛化种的生态位宽,具有较强的竞争能力;一个种的生态位越窄,该种的特化程度就越强,即它更倾向于是一个特化种(specialists species,特化种生态位窄,在资源竞争中处于劣势(张金屯,2004)。

1.示例数据和R语言代码

image.png

library(vegan) generalists_specialists_partion <- function(tab, perm.n = 1000){   tab <- tab[, colSums(tab) > 0]   niche_caculate <- function(mat){     niche_value <- c()     for(i in 1:ncol(mat)){       P <- mat[,i] / sum(mat[,i])       niche_value[i] <- 1/sum(P^2)     }     names(niche_value) <- colnames(mat)     mat <- na.omit(mat)     return((niche_value))   }   obs_niche <- niche_caculate(tab)      occurence <- apply(ceiling(tab/max(rowSums(tab))), 2, sum)/dim(tab)[2]      mean_rela_abund <- apply(tab/max(rowSums(tab)), 2, mean)      all_simulate_mat <- matrix(ncol=dim(tab)[2],nrow=perm.n)      for(i in 1:perm.n){     sim_tab <- permatswap(tab, times = 1)$perm[[1]]     all_simulate_mat[i, ] <- niche_caculate(sim_tab)     cat(i/perm.n*100, "\r")   }   colnames(all_simulate_mat)<-colnames(tab)   all_simulate_mat <- as.data.frame(all_simulate_mat)   mean_niche <- apply(all_simulate_mat, 2, mean)   confidence_interval <-apply(all_simulate_mat,2,                               function(x){quantile(x, na.rm = T, probs=c(0.025, 0.975))})   Sign <- ifelse(obs_niche > confidence_interval[2, ], 'Generalist',                   ifelse(obs_niche < confidence_interval[1, ], 'Specialist',                          'Others'))      stats <- data.frame(niche_value = obs_niche,                        mean_niche = mean_niche,                       lowCI=confidence_interval[1,],                       uppCI=confidence_interval[2,],                       Sign = Sign,                       occurence = occurence,                       mean_rela_abund)   return((stats)) } library(ggplot2) dt <- read.csv("filename.csv", comment.char = "", sep = ",", row.names = 1, header = T)dt <- t(dt) res.stats <- generalists_specialists_partion(dt, perm.n = 1000) #write.table(res.stats, file = 'filename.csv', row.names = T, sep = ',', quote = T) res.stats <- read.csv("filename.csv",row.names = 1) p1<- ggplot(res.stats, aes(log(mean_rela_abund), niche_value)) + geom_point(aes(color = Sign))+   scale_color_manual(values = c("#FF7F00","#4387B5","#00A087B2"))+labs(title = "xxx") p1

image.png

2.结果数据

image.png

  • niche_value: 生态位宽度的度量。

  • mean_niche: 生态位宽度的平均值。

  • lowCI: 生态位宽度的置信区间下限。

  • uppCI: 生态位宽度的置信区间上限。

  • Sign: 表示统计学上的显著性或分类。

  • occurence: OTU的出现频率或丰度。

  • mean_rela_abund: OTU的平均相对丰度。

一个宽的生态位宽度可能表明该OTU能够在多种环境条件下生存,而窄的生态位宽度则可能表明它对环境条件更为挑剔。

 ——————来源未知,很久以前的代码了,侵权请联系我删除



https://blog.sciencenet.cn/blog-3617005-1453663.html


下一篇:R语言dplyr包数据筛选(1)
收藏 IP: 220.171.157.*| 热度|

3 韩润强 杨正瓴 宁利中

该博文允许注册用户评论 请点击登录 评论 (3 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-11-23 20:50

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部