2

데이터 세트가 있고 해당하는 막대 그래프를 로그 정규 분포에 맞 춥니 다. 먼저 lognormal 함수에 대한 최적의 매개 변수를 계산 한 다음 히스토그램과 로그 정규 함수를 플롯합니다. 이것은 꽤 좋은 결과를 얻을 수 있습니다 : 피팅 함수에 비해 데이터의 콜 모고 로프 - 스 미르 노프 테스트를 수행 할 때Python에서 p 값이 매우 낮습니다. Kolmogorov-Smirnov 적합 테스트의 적합성

Histogram in blue, fitting function in red.

import scipy as sp 
import numpy as np 
import matplotlib.pyplot as plt 

num_data = len(data) 

x_axis = np.linspace(min(data), 
       max(data),num_data) 

number_of_bins = 240 
histo, bin_edges = np.histogram(data, number_of_bins, normed=False) 

shape, location, scale = sp.stats.lognorm.fit(data) 

plt.hist(data, number_of_bins, normed=False); 


# the scaling factor scales the normalized lognormal function up to the size 
# of the histogram: 
scaling_factor = len(data)*(max(data)-min(data))/number_of_bins 

plt.plot(x_axis,scaling_factor*sp.stats.lognorm.pdf(x_axis, shape, 
       location, scale),'r-') 

# adjust the axes dimensions: 
plt.axis([bin_edges[0]-10,bin_edges[len(bin_edges)-1]+10,0, histo.max()*1.1]) 

그러나, 나는 전자의 정도 (너무 낮은 P-값을 가져 32) :

lognormal_ks_statistic, lognormal_ks_pvalue = 
     sp.stats.kstest(
     data, 
     lambda k: sp.stats.lognorm.cdf(k, shape, location, scale), 
     args=(), 
     N=len(data), 
     alternative='two-sided', 
     mode='approx') 

print(lognormal_ks_statistic) 
print(lognormal_ks_pvalue) 

이것은 우리가 피팅이 매우 정확 플롯에서 볼 수 있기 때문에 내가 실수를 한 곳 ... 아무도 알고 있지, 정상 아닌가요?

감사합니다. Charles

답변

1

이것은 단순히 데이터가 정확하게 로그 정상적이지 않다는 것을 의미합니다. 히스토그램을 기반으로하면 K-S 테스트에 사용할 많은 데이터 포인트가 있습니다. 즉, 데이터가 이러한 매개 변수를 사용하는 로그 정규 분포를 기반으로 예상 한 것보다 약간 고르게 다를 경우 K-S 테스트는 데이터가 로그 정상으로부터 추출되지 않았 음을 나타냅니다.

데이터의 출처는 어디입니까? 그것이 유기적 인 출처, 또는 대수 정규 분포에서 특별히 난수를 끌어내는 것 이외의 출처라면, 맞는 것이 멋지더라도 매우 작은 p 값을 기대할 것입니다. 이것은 적합성이 당신의 목적에 충분히 좋다면 문제가되지 않습니다.

관련 문제