用于计算 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 集成的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Johnson-SU 分布在 scipy.stats 中没有给出正偏度?
使用 scipy.stats 将 Weibull 分布拟合到数据是不是表现不佳?
DataScience之boxcox:scipy.stats.boxcox函数的简介案例应用(将非正态分布数据转换为正态分布数据)之详细攻略