통계에서는 다음을 적용해야 하는 경우가 많습니다. 관찰된 데이터에서 얻은 경험적 분포를 데이터를 가장 잘 설명하는 이론적 분포로 변환합니다. 이를 통해 확률 계산 및 기타 통계적 추론이 가능합니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!