全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
1597 4
2024-06-24
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运行不下去了???
请问大佬们,怎么解决呢?
感谢伸出援助之手!!!!

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2024-6-24 13:53:31
已解决
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2024-7-1 16:54:49
大佬你好,我也出现了同样的问题,我想问下你是怎么解决的呀
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2024-7-14 12:15:38
在R中遇到`NaN`s(不是数字)通常是因为数据处理或者模型拟合中的某个步骤出现了问题。特别是在使用统计包进行模型拟合时,如你提到的`minpack.lm`和`stats4`,产生`NaN`s可能是由以下原因造成的:

1. **数据中有NA或非数值**:首先确保你的丰度表(spp)中没有缺失值或者非法字符。可以使用`is.na(spp)`检查是否存在NA,并用`sum(is.na(spp))`统计NA的数量。

2. **模型初始化不当**:在拟合模型时,如果初始参数设置不合理或数据不适合模型,可能会导致计算中出现`NaN`s。

3. **数学操作的非法运算**:例如除以零、对负数取平方根等。检查你的代码中是否有这样的操作。

4. **优化过程中的问题**:在使用某些函数进行优化时(如最小二乘拟合),如果梯度或Hessian矩阵计算出错,也可能产生`NaN`s。

解决步骤可以包括:

- 预处理数据:确保数据没有NA值、无穷大和非法字符。使用`na.omit()`或者`complete.cases()`删除含有缺失值的行/列。
  
- 检查并调整模型初始化参数:如果可能,尝试不同的初始参数或设置更合理的界限。

- 审核数学操作:确认所有计算都是合法的,特别是在对数据进行转换(如log)前确保没有负数或零值。

- 调整优化过程:检查是否可以使用不同的优化算法,或者调整控制参数以提高数值稳定性。

例如:
```r
# 假设spp中有NA值
spp_clean <- na.omit(spp)  # 删除含有缺失值的行

# 检查模型参数初始化,如果适用
start_params <- c(1,2,3)   # 示例初始参数
model_fit <- nlsLM(y ~ model_function(x, params), data = spp_clean, start = list(params=start_params))
```

具体调整可能需要根据你的数据和模型细节进行。希望这能帮助你解决遇到的`NaN`s问题!

此文本由CAIE学术大模型生成,添加下方二维码,优先体验功能试用



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2024-8-29 17:29:31
我也遇到一样的问题,请问怎么解决的呢?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群