试着解决一个家庭作业问题:
我有两个函数可以从指数分布的1000个观测值中获得几何平均值,其速率为.01。下面的代码总是返回Inf。
gmean <- function(n)
{
prod(n)^(1/length(n))
}
x<-rexp(1000,1/100)
gmean(x)但这不是
gmean1 <- function(n)
{
exp(mean(log(n)))
}
x<-rexp(1000,1/100)
gmean1(x)为什么会这样呢?我认为这与prod函数有关,但我不确定。
发布于 2020-11-04 02:17:56
问题是,当你在你的函数中执行prod(n)时,它会在(1/length(n))的幂之前计算这个调用的结果。由于x的平均值约为100,因此可以预期此调用将返回一个数量级类似于100^1000的值,该值远远高于R将返回的最大值(R将调用10^308 Inf附近的任何值)。
您尝试在Inf上进行的任何数学操作也将返回Inf,因此如果x大于大约154,那么您的原始实现将不起作用:
100^154
#> [1] 1e+308
100^155
#> [1] Inf实际上,因为样本中的大多数数字都小于100,所以在开始生成Inf之前,x长度可能会达到180左右
在任何情况下,坚持使用
gmean <- function(n) exp(sum(log(n))/length(n))https://stackoverflow.com/questions/64668103
复制相似问题