在统计中,通常需要拟合从观测数据获得的经验分布到最能描述数据的理论分布。这允许计算概率和其他统计推断。
Scipy 提供了许多可以拟合数据的分布函数。为了找到最合适的分布,通常使用最小二乘法来最小化数据直方图与拟合分布直方图之间的平方误差之和(SSE)。
import numpy as np import scipy.stats as st # Data points data = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # Candidate theoretical distributions distributions = ['norm', 'beta', 'gamma'] # Iterate over distributions and find best fit best_dist = None lowest_sse = float('inf') for dist_name in distributions: dist = getattr(st, dist_name) # Fit distribution to data params = dist.fit(data) # Evaluate SSE sse = np.sum((np.histogram(data, bins=10, density=True)[0] - dist.pdf(np.linspace(0, 10, 100), *params))**2) # Update best distribution if lower SSE found if sse < lowest_sse: lowest_sse = sse best_dist = dist # Calculate p-value for a given value value = 5 p_value = best_dist.cdf(value)
< h2>示例
在上面的示例中,数据的经验分布适合三种不同的理论分布(正常、β 和伽马)。发现伽马分布具有最低的 SSE,因此是最佳拟合。然后将值 5 的 p 值计算为在 5 处评估的伽马分布的累积分布函数。
以上是如何使用 Python 中的 SciPy 将经验分布拟合到理论分布?的详细内容。更多信息请关注PHP中文网其他相关文章!