首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >返回Inf的几何平均函数

返回Inf的几何平均函数
EN

Stack Overflow用户
提问于 2020-11-04 02:00:47
回答 1查看 108关注 0票数 3

试着解决一个家庭作业问题:

我有两个函数可以从指数分布的1000个观测值中获得几何平均值,其速率为.01。下面的代码总是返回Inf。

代码语言:javascript
复制
gmean <- function(n)
{
    
  prod(n)^(1/length(n))
  
}

x<-rexp(1000,1/100)
    
    
    gmean(x)

但这不是

代码语言:javascript
复制
gmean1 <- function(n)
{
  
 exp(mean(log(n)))
  
}

x<-rexp(1000,1/100)
gmean1(x)

为什么会这样呢?我认为这与prod函数有关,但我不确定。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-04 02:17:56

问题是,当你在你的函数中执行prod(n)时,它会在(1/length(n))的幂之前计算这个调用的结果。由于x的平均值约为100,因此可以预期此调用将返回一个数量级类似于100^1000的值,该值远远高于R将返回的最大值(R将调用10^308 Inf附近的任何值)。

您尝试在Inf上进行的任何数学操作也将返回Inf,因此如果x大于大约154,那么您的原始实现将不起作用:

代码语言:javascript
复制
100^154
#> [1] 1e+308

100^155
#> [1] Inf

实际上,因为样本中的大多数数字都小于100,所以在开始生成Inf之前,x长度可能会达到180左右

在任何情况下,坚持使用

代码语言:javascript
复制
gmean <- function(n) exp(sum(log(n))/length(n))
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64668103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档