我正在运行一个计算逻辑可能性的函数。在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>
答案 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
),这似乎与您的方法一致。