物流模型中生成的NaN

时间:2019-03-25 01:54:33

标签: r

我正在运行一个计算逻辑可能性的函数。在Matlab中它可以正常工作,但在R中它会由于内部计算中NaN返回0*-Inf而生成NaN值。

代码是

g <- 10

ff <- 4
y <- 1

probs = 1/(1 + exp(-g*ff)) 
llh   = sum(y*log(probs) + (1-y)*log(1-probs))

exp(-g*ff)中的值太小时,probs将非常接近1,而log(1-probs)将接近-Inf,并且将产生NaN。 / p>

1 个答案:

答案 0 :(得分:0)

plogis()是R中用于逻辑函数的内置函数(它是逻辑 distribution 的CDF)。使用plogis(g*ff, log.p=TRUE)获得对数概率,并使用plogis(g*ff, log.p=TRUE, lower.tail=FALSE)获得互补的对数概率应该可以工作:

llh <- sum(y*plogis(g*ff,log.p=TRUE) +
           (1-y)*plogis(g*ff, log.p=TRUE, lower.tail=FALSE))

对于不太极端的值(例如g <- 1),这似乎与您的方法一致。