Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用天文柯伊伯检验_Python_Normal Distribution_Astropy_Cdf - Fatal编程技术网

Python 如何使用天文柯伊伯检验

Python 如何使用天文柯伊伯检验,python,normal-distribution,astropy,cdf,Python,Normal Distribution,Astropy,Cdf,我想测试一个数据集的分布与均值=0,方差=1的高斯分布有多接近 来自astropy.stats的测试有一个cdf参数,来自文档:“一个可调用函数,用于评估被测试分布的cdf。将使用所有值的向量一次调用。默认值是均匀分布”,但我不知道如何使用它来测试正态分布。如果我想要一个均值为0.2、方差为2的正态分布,该怎么办 所以我使用了astropy,创建了一个随机正态分布。见下面的例子 我看到的问题是,它取决于我生成的要比较的数据点的数量。如果我使用100而不是10000个数据点,概率(fpp)将提高到

我想测试一个数据集的分布与均值=0,方差=1的高斯分布有多接近

来自
astropy.stats
的测试有一个
cdf
参数,来自文档:“一个可调用函数,用于评估被测试分布的cdf。将使用所有值的向量一次调用。默认值是均匀分布”,但我不知道如何使用它来测试正态分布。如果我想要一个均值为0.2、方差为2的正态分布,该怎么办

所以我使用了astropy,创建了一个随机正态分布。见下面的例子

我看到的问题是,它取决于我生成的要比较的数据点的数量。如果我使用100而不是10000个数据点,概率(fpp)将提高到43%

我想问题是,我如何正确地做到这一点?还有,我如何解释D数字

# create data and its cdf
np.random.seed(0)
data = np.random.normal(loc=0.02, scale=1.15, size=50)
data_sort = np.sort(data)
data_cdf = [x/len(data) for x in range(0, len(data))]

# create the normal data with mean 0 and variance 1
xx = np.random.normal(loc=0, scale=1, size=10000)
xx_sort = np.sort(xx)
xx_cdf = [x/len(xx) for x in range(0, len(xx))]
# compute the pdf for a plot
x = np.linspace(-4, 4, 50)
x_pdf = stats.norm.pdf(x, 0, 1)

# we can see it all in a plot
fig, ax = plt.subplots(figsize=(8, 6))
plt.hist(xx, bins=20, density=True, stacked=True, histtype='stepfilled', alpha=0.6)
plt.hist(data, density=True, stacked=True, histtype='step', lw=3)
plt.plot(x, x_pdf, lw=3, label='G($\mu=0$, $\sigma^2=1$)')
ax2 = ax.twinx()
ax2.plot(xx_sort, xx_cdf, marker='o', ms=8, mec='green', mfc='green', ls='None')
ax2.plot(data_sort, data_cdf, marker='^', ms=8, mec='orange', mfc='orange', ls='None')

# Kuiper test
D, fpp = kuiper_two(data_sort, xx_sort)
print('#   D number =', round(D, 5))
print('#   fpp =', round(fpp, 5))
# Which resulted in:
#   D number = 0.211
#   fpp = 0.14802

astropy.stats.kuiper
要求第一个参数是要测试的分布的样本,第二个参数是要测试的分布的CDF

此变量是一个可调用的
,它希望自己是一个样本,在累积分布函数下返回该样本的值。您可以使用
scipy.stat
的CDF来实现这一点。通过使用
functools.partial
我们可以设置任何参数

来自scipy导入统计信息
从scipy.stats导入norm
从astropy.stats导入柯伊伯
从functools导入部分
从随机导入洗牌
np.random.seed(0)
数据=np.随机.正常(loc=0.02,刻度=1.15,尺寸=50)
打印(柯伊伯(数据,部分(norm.cdf,loc=0.2,scale=2.0)))
#输出:(0.225218027033838,0.08776036566607946)
#如果您想知道,不必对数据进行排序:
洗牌(数据)
打印(柯伊伯(数据,部分(norm.cdf,loc=0.2,scale=2.0)))
#输出:(0.225218027033838,0.08776036566607946)
在这张图中,您可以了解柯伊伯统计V衡量的是什么:

[]

如果共享比较分布的参数,则距离较低,且各基础CDF相同的估计概率增加:

print(柯伊伯(数据,部分(norm.cdf,loc=0.02,scale=1.15)))
#输出:(0.14926352419821276,0.68365004302431)
相反,函数astropy.stats.kuiper_two期望两个经验数据样本相互比较。因此,如果要与具有可处理CDF的分布进行比较,最好直接使用CDF(使用
kuiper
),而不是从比较分布(使用
kuiper\u two
)进行采样

还有一点挑剔。除了在非CDF的变量名中使用CDF外,此公式的可读性远高于上述公式:

data\u cdf=np.linspace(0.0,1.0,len(数据),endpoint=False)
xx_cdf=np.linspace(0.0,1.0,len(xx),endpoint=False)

astropy.stats.kuiper
要求第一个参数是要测试的发行版的样本,第二个参数是要测试的发行版的CDF

此变量是一个可调用的
,它希望自己是一个样本,在累积分布函数下返回该样本的值。您可以使用
scipy.stat
的CDF来实现这一点。通过使用
functools.partial
我们可以设置任何参数

来自scipy导入统计信息
从scipy.stats导入norm
从astropy.stats导入柯伊伯
从functools导入部分
从随机导入洗牌
np.random.seed(0)
数据=np.随机.正常(loc=0.02,刻度=1.15,尺寸=50)
打印(柯伊伯(数据,部分(norm.cdf,loc=0.2,scale=2.0)))
#输出:(0.225218027033838,0.08776036566607946)
#如果您想知道,不必对数据进行排序:
洗牌(数据)
打印(柯伊伯(数据,部分(norm.cdf,loc=0.2,scale=2.0)))
#输出:(0.225218027033838,0.08776036566607946)
在这张图中,您可以了解柯伊伯统计V衡量的是什么:

[]

如果共享比较分布的参数,则距离较低,且各基础CDF相同的估计概率增加:

print(柯伊伯(数据,部分(norm.cdf,loc=0.02,scale=1.15)))
#输出:(0.14926352419821276,0.68365004302431)
相反,函数astropy.stats.kuiper_two期望两个经验数据样本相互比较。因此,如果要与具有可处理CDF的分布进行比较,最好直接使用CDF(使用
kuiper
),而不是从比较分布(使用
kuiper\u two
)进行采样

还有一点挑剔。除了在非CDF的变量名中使用CDF外,此公式的可读性远高于上述公式:

data\u cdf=np.linspace(0.0,1.0,len(数据),endpoint=False)
xx_cdf=np.linspace(0.0,1.0,len(xx),endpoint=False)