python - Python Scipy stats pdf概率分布函数总和不为1
问题描述
在那里,我在这里阅读了一些主题,但我仍然感到困惑。
我认为 scipy stats(连续随机变量)函数 stats.rv_name.pdf(x, loc, scale, *params) 的总和应该为 1。
我基本上使用下面的代码拟合了散点图数据。我确实得到了 1.0 的累积值(最终)。但我的 pdf_fitted 不等于一。
我仍然不明白为什么会这样,以及如何在 pdf 输出中获取参数,使其总和为 1。
这里有一个相关的线程:为什么 scipy.norm.pdf 有时会给出 PDF > 1?如何纠正它?
def py_DistEstimate(arr1, disType, reSults='params', bins = 20):
dist_names = ['gamma', 'beta', 'rayleigh', 'norm', 'pareto']
dist = getattr(stats, disType)
param = dist.fit(arr1)
x = linspace(min(arr1), max(arr1), bins)
pdf_fitted = dist.pdf(x, loc=param[-2], scale=param[-1], *param[:-2])
cdf_fitted = dist.cdf(x, loc=param[-2], scale=param[-1], *param[:-2])
if reSults == 'pdf':
digitizeV = np.digitize(arr1, x, right = True)
bin_counV = np.bincount(digitizeV, weights = None)
bin_probV = bin_counV/len(arr1)
return pd.DataFrame({'x-axis':x, 'pdf':pdf_fitted, 'original':bin_probV, 'cdf':cdf_fitted})
elif reSults == 'params':
parameter_names = [p for p in inspect.signature(dist._pdf).parameters if not p=='x'] + ["loc","scale"]
return pd.DataFrame({'names':parameter_names, 'values':param})
elif reSults == 'listparams':
dist_continu = [d for d in dir(stats) if isinstance(getattr(stats, d), stats.rv_continuous)]
return dist_continu
解决方案
推荐阅读
- excel - 有没有办法创建一个基于 Excel 表中的行生成问题的动态表单?
- ionic-framework - Adonis.js、Ionic 和 Cors
- makefile - 如何在隐藏文件夹中自动创建 Makefile 依赖文件?
- glibc - 编写自定义 nss 主机模块
- excel - 如何从最后一行取消隐藏 VBA 中的所有行?
- sql-server - 从 .ss 文件恢复 SQL Server 数据库
- ldap - LDAP 更改 uID 和 gID 的基数
- docker - HAProxy/Docker: 运行 Flask/React 应用程序的 Docker 容器时出现 502 Bad Gateway
- go - 使用 GORM 同时保存到事务
- java - 检索firebase实时数据库中节点下的所有数据