在統計學中,通常需要擬合從觀測資料中獲得的經驗分佈到最能描述數據的理論分佈。這允許計算機率和其他統計推論。
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)
範例
在上面的範例中,資料的經驗分佈適合三種不同的理論分佈(正常、β 和伽瑪)。發現伽瑪分佈具有最低的 SSE,因此是最佳擬合。然後將值 5 的 p 值計算為在 5 處評估的伽瑪分佈的累積分佈函數。
以上是如何使用 Python 中的 SciPy 將經驗分佈擬合到理論分佈?的詳細內容。更多資訊請關注PHP中文網其他相關文章!