使用scipy.stats计算条件期望

tor*_*gos 3 statistics scipy

假设x〜Poisson(2.5); 我想计算类似E(x | x> 2)的值。

我假设可以使用.dist.expect运算符完成此操作,即:

D = stats.poisson(2.5)
cond_expect = D.dist.expect(lambda x: x, D.args,lb=2)
Run Code Online (Sandbox Code Playgroud)

计算结果为cond_expect = 2.29478750344

但是,如果我只是根据该分布计算随机样本的平均值

D = stats.poisson(2.5)
test = D.rvs(size = 100000)
empirical_expectation = np.mean(test[test>=2])
Run Code Online (Sandbox Code Playgroud)

empirical_expectation的计算结果为3.20875563063。

如果有人可以澄清我对API的误解,将不胜感激。

小智 5

该方法expect采用布尔参数conditional,默认情况下为False。将其设置为True:

cond_expect = D.dist.expect(lambda x: x, D.args, lb=2, conditional=True) 
Run Code Online (Sandbox Code Playgroud)

与经验结果一致返回3.219839256818051。

这是做什么的:

有条件的:布尔,可选

如果为true,则通过求和间隔的条件概率来校正期望。返回值是函数func的期望值,条件是处于给定间隔(k使得ul <= k <= ub)。默认值为False。

因此,如果为False,则得到的E(X if X >= 2 else 0)不是条件期望值,而是通过除以P(X> = 2)来调整的:E(X | X >= 2) = E(X if X >= 2 else 0) / P(X >= 2)

我不知道为什么在提供上限或下限时会希望conditional = False,但这是默认设置。