library(Hmisc)
library(minpack.lm)
library(stats4)
#spp: 物种或分类群的丰度表,行是分类群,列是样本
spp<-read.csv('otu_abundant.csv',head=T, row.names=1)
spp<-t(spp)#转置
#将根据它们在元群落中的丰度返回每个分类群的预测出现频率#用非线性最小二乘法(Non-linear least squares,NLS)拟合模型参数
N <- mean(apply(spp, 1, sum))#计算总相对丰度的平均值
N
p.m <- apply(spp, 2, mean)#计算每个物种的平均相对丰度
p.m <- p.m[p.m != 0] #去除平均值为0的物种
p <- p.m/N ##计算每个物种的相对丰度
spp.bi <- 1*(spp>0)#将原始数据二值化,表示物种的存在与否
freq <- apply(spp.bi, 2, mean) #计算每个物种的出现频率
freq <- freq[freq != 0]##去除频率为0的物种
C <- merge(p, freq, by=0) #合并相对丰度和频率数据
C <- C[order(C[,2]),]##按照频率排序
C <- as.data.frame(C) ##将结果转化为数据框
C.0 <- C[!(apply(C, 1, function(y) any(y == 0))),] ##去除包含0的行
p <- C.0[,2] ##提取相对丰度和频率的数据
freq <- C.0[,3]
names(p) <- C.0[,1] ##为数据命名
names(freq) <- C.0[,1]
d = 1/N
##使用非线性最小二乘法NLS拟合模型参数m(或Nm)
m.fit <- nlsLM(freq ~ pbeta(d, N*m*p, N*m*(1 -p), lower.tail=FALSE),start=list(m=0.1))##产生了NaNs????
m.fit #获取 m 值0.08708
###Warning messages:
####1: In pbeta(d, N * m * p, N * m * (1 - p), lower.tail = FALSE) :产生了NaNs
#####2: In pbeta(d, N * m * p, N * m * (1 - p), lower.tail = FALSE) :产生了NaNs
###计算m的置信区间
m.ci <- confint(m.fit, 'm', level=0.95)
####Error in numericDeriv(form[[3L]], names(ind), env) : 在计算模型的时候产生了缺省值或无限值
In addition: Warning message:In pbeta(d, N * m * p, N * m * (1 - p), lower.tail = FALSE) : 产生了NaNs运行不下去了???
请问大佬们,怎么解决呢?
感谢伸出援助之手!
library(minpack.lm)
library(stats4)
#spp: 物种或分类群的丰度表,行是分类群,列是样本
spp<-read.csv('otu_abundant.csv',head=T, row.names=1)
spp<-t(spp)#转置
#将根据它们在元群落中的丰度返回每个分类群的预测出现频率#用非线性最小二乘法(Non-linear least squares,NLS)拟合模型参数
N <- mean(apply(spp, 1, sum))#计算总相对丰度的平均值
N
p.m <- apply(spp, 2, mean)#计算每个物种的平均相对丰度
p.m <- p.m[p.m != 0] #去除平均值为0的物种
p <- p.m/N ##计算每个物种的相对丰度
spp.bi <- 1*(spp>0)#将原始数据二值化,表示物种的存在与否
freq <- apply(spp.bi, 2, mean) #计算每个物种的出现频率
freq <- freq[freq != 0]##去除频率为0的物种
C <- merge(p, freq, by=0) #合并相对丰度和频率数据
C <- C[order(C[,2]),]##按照频率排序
C <- as.data.frame(C) ##将结果转化为数据框
C.0 <- C[!(apply(C, 1, function(y) any(y == 0))),] ##去除包含0的行
p <- C.0[,2] ##提取相对丰度和频率的数据
freq <- C.0[,3]
names(p) <- C.0[,1] ##为数据命名
names(freq) <- C.0[,1]
d = 1/N
##使用非线性最小二乘法NLS拟合模型参数m(或Nm)
m.fit <- nlsLM(freq ~ pbeta(d, N*m*p, N*m*(1 -p), lower.tail=FALSE),start=list(m=0.1))##产生了NaNs????
m.fit #获取 m 值0.08708
###Warning messages:
####1: In pbeta(d, N * m * p, N * m * (1 - p), lower.tail = FALSE) :产生了NaNs
#####2: In pbeta(d, N * m * p, N * m * (1 - p), lower.tail = FALSE) :产生了NaNs
###计算m的置信区间
m.ci <- confint(m.fit, 'm', level=0.95)
####Error in numericDeriv(form[[3L]], names(ind), env) : 在计算模型的时候产生了缺省值或无限值
In addition: Warning message:In pbeta(d, N * m * p, N * m * (1 - p), lower.tail = FALSE) : 产生了NaNs运行不下去了???
请问大佬们,怎么解决呢?
感谢伸出援助之手!