楼主: zhangcuixia_20
1595 4

[问答] R软件使用过程中,中性模型使用过程产生了NaNs,怎么解决呢? [推广有奖]

  • 0关注
  • 0粉丝

学前班

70%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0.0137
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
23 点
帖子
2
精华
0
在线时间
5 小时
注册时间
2016-5-27
最后登录
2024-12-11

楼主
zhangcuixia_20 发表于 2024-6-24 10:50:27 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
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运行不下去了???
请问大佬们,怎么解决呢?
感谢伸出援助之手!!!!

二维码

扫码加我 拉你入群

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

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

关键词:软件使用 ans r软件 Library BRARY

沙发
zhangcuixia_20 发表于 2024-6-24 13:53:31
已解决

藤椅
XAo2023 发表于 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学术大模型生成,添加下方二维码,优先体验功能试用



报纸
han111111111111 发表于 2024-8-29 17:29:31
我也遇到一样的问题,请问怎么解决的呢?

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-2-1 12:42