我正在谈论使用python公式检索此表媒体的值
https://www.soest.hawaii.edu/GG/FACULTY/ITO/GG413/K_S_Table_one_Sample.pdf
我已经寻找了一段时间,但是scipy函数不会寻找该值,所以我在这里变得很困惑。
我一直在寻找内置于公式中的scipy,但没有成功。例如,在上述表中,D [0.1,10] == 0.36866。但是,无论我使用多少数据,scipy.stats.kstest都不会返回相同的值。
答案 0 :(得分:1)
这可以通过scipy
,使用ksone
分发及其ppf
(percent point function)方法而不是kstest
来完成:
from scipy.stats import ksone
def ks_critical_value(n_trials, alpha):
return ksone.ppf(1-alpha/2, n_trials)
打印临界值表:
from __future__ import print_function # For Python 2
trials = range(1, 41)
alphas = [0.1, 0.05, 0.02, 0.01]
# Print table headers
print('{:<6}|{:<6} Level of significance, alpha'.format(' ', ' '))
print('{:<6}|{:>8} {:>8} {:>8} {:>8}'.format(*['Trials'] + alphas))
print('-' * 42)
# Print critical values for each n_trials x alpha combination
for t in trials:
print('{:6d}|{:>8.5f} {:>8.5f} {:>8.5f} {:>8.5f}'
.format(*[t] + [ks_critical_value(t, a) for a in alphas]))
if t % 10 == 0:
print()
部分输出:
| Level of significance, alpha
Trials| 0.1 0.05 0.02 0.01
------------------------------------------
1| nan nan nan nan
2| 0.77639 0.84189 nan nan
3| 0.63604 0.70760 0.78456 0.82900
4| 0.56522 0.62394 0.68887 0.73424
5| 0.50945 0.56328 0.62718 0.66853
6| 0.46799 0.51926 0.57741 0.61661
7| 0.43607 0.48342 0.53844 0.57581
8| 0.40962 0.45427 0.50654 0.54179
9| 0.38746 0.43001 0.47960 0.51332
10| 0.36866 0.40925 0.45662 0.48893
11| 0.35242 0.39122 0.43670 0.46770
12| 0.33815 0.37543 0.41918 0.44905
13| 0.32549 0.36143 0.40362 0.43247
14| 0.31417 0.34890 0.38970 0.41762
15| 0.30397 0.33760 0.37713 0.40420
16| 0.29472 0.32733 0.36571 0.39201
17| 0.28627 0.31796 0.35528 0.38086
18| 0.27851 0.30936 0.34569 0.37062
19| 0.27136 0.30143 0.33685 0.36117
20| 0.26473 0.29408 0.32866 0.35241
我们需要统计学家的其他反馈,涉及(a)为什么我们获得前两行的np.nan
值(我认为是因为n_trials
和{{1}的这些组合的临界值}纯粹是理论上的,在实践中是无法实现的;(b)为什么alpha
方法需要将ksone.ppf
除以2?我将编辑此答案以包含该信息。
不过,您可以看到,除了初始缺失值之外,该表还生成与the table in your question和this paper第16页上的表相同的结果。