我想比较 Kolmogorov-Smirnov (KS) 和 Anderson-Darling (AD) 测试的样本对。我分别用scipy.stats.ks_2samp和实现了这个scipy.stats.anderson_ksamp。我希望类似样本的统计数据较低(相同样本为 0),而更多不同样本的统计数据较高。
在相同样本和非常不同的样本(没有重叠)的情况下,ks_2samp提供预期的结果,同时anderson_ksamp为相同的样本提供负值,更重要的是,对于非常不同的样本抛出错误(可能是由于样本大小:200在下面的例子中)。
以下是说明这些发现的代码:
import scipy.stats as stats
import numpy as np
normal1 = np.random.normal(loc=0.0, scale=1.0, size=200)
normal2 = np.random.normal(loc=100, scale=1.0, size=200)
Run Code Online (Sandbox Code Playgroud)
在相同样本上使用 KS 和 AD:
sstats.ks_2samp(normal1, normal1)
sstats.anderson_ksamp([normal1, normal1])
Run Code Online (Sandbox Code Playgroud)
分别返回:
# Expected
Ks_2sampResult(statistic=0.0, pvalue=1.0)
# Not expected
Anderson_ksampResult(statistic=-1.3196852620954158, critical_values=array([ 0.325, 1.226, 1.961, 2.718, 3.752]), significance_level=1.4357209285296726)
Run Code Online (Sandbox Code Playgroud)
在不同的样本上:
sstats.ks_2samp(normal1, normal2)
sstats.anderson_ksamp([normal1, normal2])
Run Code Online (Sandbox Code Playgroud)
分别返回:
# Expected
Ks_2sampResult(statistic=1.0, pvalue=1.4175052453413253e-89)
# Not expected
---------------------------------------------------------------------------
OverflowError Traceback (most recent call last) …Run Code Online (Sandbox Code Playgroud) 除了以下例程之外,我或多或少地理解了整个代码:
private static void transient_results(double T)
{
for (int a = 1; a <= transient; a++)
{
array_to_list();
for (int b = 1; b <= L * L; b++)
{
choose = choose_random_site("i", 0);
posx = choose_random_site("x", choose);
posy = choose_random_site("y", choose);
if (test_flip(posx,posy,T))
{
flip(posx,posy);
}
list.RemoveAt(choose);
}
}
}
Run Code Online (Sandbox Code Playgroud)
transient_results()将温度T作为实际值。
transient是直接从控制台读取的整数。这代表瞬态站点的数量。
array_to_list()正在清空字符串列表并使用模式的新字符串对其进行初始化"i , j"。这用作站点定位器。即跟踪已处理/未处理站点的位置。
这个街区
choose = choose_random_site("i", 0);
posx = choose_random_site("x", …Run Code Online (Sandbox Code Playgroud)