如何解决返回Inf的几何均值函数
尝试解决家庭作业问题:
我有两个函数从指数分布中以0.01的比率从1000个观测值中获得几何平均值。以下内容不断返回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函数有关,但我不确定。
解决方法
问题在于,当您在函数中执行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
之前,您可能会达到180的x长度
无论如何,坚持下去会更安全
gmean <- function(n) exp(sum(log(n))/length(n))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。