- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个具有频率的独特系列,想知道它们是否来自正态分布,所以我使用 scipy.stats.kstest 进行了 Kolmogorov–Smirnov 测试。因为,据我所知,该函数只接受一个列表,所以我在将频率放入函数之前将频率转换为一个列表。然而,结果很奇怪,因为 pvalue=0.0
原始数据的直方图和我的代码如下: Histogram of my dataset
[In]: frequencies = mp[['c','v']]
[In]: print frequencies
c v
31 3475.8 18.0
30 3475.6 12.0
29 3475.4 13.0
28 3475.2 8.0
20 3475.0 49.0
14 3474.8 69.0
13 3474.6 79.0
12 3474.4 78.0
11 3474.2 78.0
7 3474.0 151.0
6 3473.8 157.0
5 3473.6 129.0
2 3473.4 149.0
1 3473.2 162.0
0 3473.0 179.0
3 3472.8 145.0
4 3472.6 139.0
8 3472.4 95.0
9 3472.2 103.0
10 3472.0 125.0
15 3471.8 56.0
16 3471.6 75.0
17 3471.4 70.0
18 3471.2 70.0
19 3471.0 57.0
21 3470.8 36.0
22 3470.6 22.0
23 3470.4 20.0
24 3470.2 12.0
25 3470.0 23.0
26 3469.8 13.0
27 3469.6 17.0
32 3469.4 6.0
[In]: testData = map(lambda x: np.repeat(x[0], int(x[1])), frequencies.values)
[In]: testData = list(itertools.chain.from_iterable(testData))
[In]: print len(testData)
2415
[In]: print np.unique(testData)
[ 3469.4 3469.6 3469.8 3470. 3470.2 3470.4 3470.6 3470.8 3471.
3471.2 3471.4 3471.6 3471.8 3472. 3472.2 3472.4 3472.6 3472.8
3473. 3473.2 3473.4 3473.6 3473.8 3474. 3474.2 3474.4 3474.6
3474.8 3475. 3475.2 3475.4 3475.6 3475.8]
[In]: scs.kstest(testData, 'norm')
KstestResult(statistic=1.0, pvalue=0.0)
先谢谢大家
最佳答案
使用 'norm'
作为您的输入将检查您的数据分布是否与具有默认参数的 scipy.stats.norm.cdf
相同:位置=0,比例=1
。
相反,您需要使数据符合正态分布,然后使用 Kolmogorov–Smirnov 检验检查数据和分布是否相同。
import numpy as np
from scipy.stats import norm, kstest
import matplotlib.pyplot as plt
freqs = [[3475.8, 18.0], [3475.6, 12.0], [3475.4, 13.0], [3475.2, 8.0], [3475.0, 49.0],
[3474.8, 69.0], [3474.6, 79.0], [3474.4, 78.0], [3474.2, 78.0], [3474.0, 151.0],
[3473.8, 157.0], [3473.6, 129.0], [3473.4, 149.0], [3473.2, 162.0], [3473.0, 179.0],
[3472.8, 145.0], [3472.6, 139.0], [3472.4, 95.0], [3472.2, 103.0], [3472.0, 125.0],
[3471.8, 56.0], [3471.6, 75.0], [3471.4, 70.0], [3471.2, 70.0], [3471.0, 57.0],
[3470.8, 36.0], [3470.6, 22.0], [3470.4, 20.0], [3470.2, 12.0], [3470.0, 23.0],
[3469.8, 13.0], [3469.6, 17.0], [3469.4, 6.0]]
data = np.hstack([np.repeat(x,int(f)) for x,f in freqs])
loc, scale = norm.fit(data)
# create a normal distribution with loc and scale
n = norm(loc=loc, scale=scale)
绘制标准与数据的拟合:
plt.hist(data, bins=np.arange(data.min(), data.max()+0.2, 0.2), rwidth=0.5)
x = np.arange(data.min(), data.max()+0.2, 0.2)
plt.plot(x, 350*n.pdf(x))
plt.show()
这不太合适,主要是因为左边的长尾部。但是,您现在可以使用拟合正态分布的 cdf
运行正确的 Kolmogorov–Smirnov 检验
kstest(data, n.cdf)
# returns:
KstestResult(statistic=0.071276854859734784, pvalue=4.0967451653273201e-11)
因此,我们仍然拒绝产生数据的分布与拟合分布相同的原假设。
关于python - 当我对大型数据集使用 scipy.stats.kstest() 时,p_value 为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46678239/
好的,所以我尝试使用 kstest 的 scipys 实现作为评估哪种分布最适合数据的方法。我对 kstest 工作原理的理解是,统计数据代表零假设的概率(即返回的概率是所讨论的模型对数据错误的概率)
我在 scipy (scipy.stats.kstest) 中使用 Kolmogorov-Smirnov 测试时遇到问题。在线文档(http://docs.scipy.org/doc/scipy/re
在Python 3.6.5和scipy 1.1.0中,当我运行Kolmogorov-Smirnov测试来检查均匀分布时,如果我向kstest函数提供一行,我会得到两个相反的结果(从p值的角度来看)或列
帮助链接是http://docs.scipy.org/doc/scipy-0.7.x/reference/generated/scipy.stats.kstest.html我现在可以计算 ks-tes
我正在尝试执行 Kolmogorov-Smirnov 检验来比较经验分布和 F 分布(我知道这些不能直接比较,但我会使用 Bootstrap )。我在使用 scipy KS 测试时遇到问题: read
这个问题我已经困惑了一段时间,希望得到一些帮助。 我正在尝试使用scipy.stats.kstest来针对另一个简单的x=y分布来测试我的分布,以便我可以获得p值。在在线示例中,它给出了类似的内容:
我已经通读了有关此模块(和 Scipy 文档)的现有帖子,但我仍然不清楚如何使用 Scipy 的 kstest 模块在您拥有数据集和可调用函数。 我要测试我的数据的 PDF 不是标准的 scipy.s
这个问题已经有答案了: Two-sample Kolmogorov-Smirnov Test in Python Scipy (3 个回答) 已关闭 7 年前。 我想使用 scipy.stats.ks
我有一个具有频率的独特系列,想知道它们是否来自正态分布,所以我使用 scipy.stats.kstest 进行了 Kolmogorov–Smirnov 测试。因为,据我所知,该函数只接受一个列表,所以
我正在尝试评估/测试我的数据对特定分布的拟合程度。 关于它有几个问题,有人告诉我使用 scipy.stats.kstest 或 scipy.stats.ks_2samp。看起来很简单,给它:(A)数据
我有兴趣检查样本 A (n=25) 是否均匀分布。这是我在 Python 中检查它的方法: import scipy.stats as ss A=[9,9,9,4,9,6,7,8,9,4,5,2,4,
我是一名优秀的程序员,十分优秀!