假设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,但这是默认设置。