您如何计算四舍五入为整数的随机值的预期平均值?

How do you calculate the expected average of random values rounded to integers?

例如,考虑以下伪代码:

round(random(0.3, 1.9))

四舍五入到最接近的整数并随机生成一个介于 0.3 和 1.9 之间的统一浮点数,一百万个样本的平均值约为 1.125,而不是 1.1 的朴素平均值.

如何在不实际生成几千个数字的情况下通过算法得出该数字?

希望这不是一个太微不足道的问题,但我似乎无法找到一个简单的解决方案。

[0.3,0.5) 上获得值 0,在 [0.5,1.5) 上获得值 1,在 [1.5,1.9) 上获得值 2。由于随机数是均匀的,其概率与区间长度成正比,全长为1.9-0.3=1.6。因此理论平均值是

0.2/1.6*0 + 1.0/1.6*1 + 0.4/1.6 * 2 = 1.8/1.6 = 1.125.

这是一个相当通用的解决方案:

首先请注意,问题可以简化为计算 (a,b) 范围内随机数的下限期望值,因为 round(X) 的分布与floor(Y) 的分布,其中 Y = X + 0.5(如果 XU(a,b),则 YU(a+0.5,b+0.5))。减少到下限的好处是我们不需要根据 ab 每次向上或向下舍入分成案例。

设:

A = floor(a)
B = floor(b)
pA = (A + 1 - a)/(b-a)
pB = (b-B)/(b-a)

pAA的概率,pBB的概率。如果 AB 以外的整数是可能的,则它们均匀分布在区间 [A+1,B-1] 中。 floor(X) 既不是 A 也不是 B 的期望值因此是 (A+B)/2。这种有条件的期望需要通过这种值发生的概率来加权。将所有这些放在一起我们有:

E(floor(X)) = pA*A + pB*B + (1-pA-pB)*(A+B)/2

有一些微妙之处。上述论点隐含地假设 (a,b) 包含至少 1 个整数。如果不是,则 pApB 的计算不正确,但在那种情况下 A = B = (A+B)/2 和上面的公式仍然正确 returns 这是预期的价值。

以下是R实现。第一个函数实现上述公式,第二个函数显示如何将舍入问题减少到它。如果你不知道 R,<- 是赋值运算符,函数定义中的最后一个表达式是返回值。

efloor <- function(a,b){
  A <- floor(a)
  B <- floor(b)
  pA <- (A+1-a)/(b-a)
  pB <- (b-B)/(b-a)
  pA*A + pB*B + (1-pA-pB)*(A+B)/2
}

eround <- function(a,b){
  efloor(a+0.5,b+0.5)
}

例如,

> eround(0.3,1.9)
[1] 1.125