用于计算 scipy stats 中可用分布的 E(X) 的 Scipy 集成

Posted

技术标签:

【中文标题】用于计算 scipy stats 中可用分布的 E(X) 的 Scipy 集成【英文标题】:Scipy Integration to calculate E(X) of distributions available in scipy stats 【发布时间】:2021-09-12 19:50:48 【问题描述】:

您好,谁能帮我修复此代码,在此先感谢

from scipy.integrate import quad
import math
import numpy as np
from scipy import stats

lognorm_mu = 17.79
lognorm_sigma = 0.81

def integrand(x):
    return stats.lognorm.pdf(x, s= lognorm_sigma, scale=math.exp(lognorm_mu)) * x

我期待的结果是:

print(math.exp(lognorm_mu + lognorm_sigma ** 2 / 2)) ==> 73887187.89137973

但是我得到了这个输出:

print(quad(integrand2,-np.inf,np.inf)[0]) =-> 8.373817736767941e-43

如何编辑我的被积函数来进行积分(xf(x)dx,-inf,+inf)?如果我要做积分(x^2f(x)dx,-inf,+inf)呢?

【问题讨论】:

【参考方案1】:

您可能正在寻找.expect 方法:norm.expect(lambda x : x**2)

【讨论】:

如果我做 stats.lognorm.expect(args=(0.81,), scale=math.exp(17.79), lb=-np.inf, ub=np.inf),我还在没有得到我的预期输出,我仍然得到 8.373817736767941e-43 .... 我试图理解这三行之间的区别:stats.lognorm.stats(s=0.81, scale=math.exp(17.79), moment='m') array( 73887187.89137967) stats.lognorm.expect(args=(0.81,),scale=math.exp(17.79)) 8.373817736767941e-43 stats.lognorm.mean(s=0.81, scale=math.exp(17.79)) 73887187.89137967跨度>

以上是关于用于计算 scipy stats 中可用分布的 E(X) 的 Scipy 集成的主要内容,如果未能解决你的问题,请参考以下文章

连续分布的 scipy.stats 属性“熵”不能手动工作

更新标题:Scipy.stats pdf 错误?

scipy.stats.anderson 测试临界值

为啥 Johnson-SU 分布在 scipy.stats 中没有给出正偏度?

使用 scipy.stats 将 Weibull 分布拟合到数据是不是表现不佳?

DataScience之boxcox:scipy.stats.boxcox函数的简介案例应用(将非正态分布数据转换为正态分布数据)之详细攻略