问题标签 [kolmogorov-smirnov]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 获得 kolmogorov-smirnov 检验所需的临界值
我说的是检索这个表的值媒体一个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 不会返回相同的值,无论我使用多少数据。
python - SPSS 与 python 和 R 中 kolmogorov-smirnov 均匀分布的结果冲突
我尝试用不同的包在同一个数据文件上重现相同的结果。
为什么spss给出不同的结果?
Python 代码:scipy.stats.kstest(x, 'norm')
.
R 代码:ks.test(x,"pnorm")
.
SPSS 代码:NPAR TESTS /K-S(NORMAL)=x.
可以复制相同的结果,选择:Analyze->Nonparametric Tests->Legacy Dialogs->1-Sample KS
python - 离散 Kolmogorov-Smirnov 测试:与纯 R 相比,使用 rpy2 时得到错误值
我正在尝试使用dgof
来自 R 的模块,在 Python 3 中通过rpy2
.
我在 python 中使用它:
很有魅力(即我可以导入它,这本身就是一个巨大的胜利)。现在作为测试,我想从 API 文档中重现示例结果。
为了清楚起见,在纯 R 中,示例是(并且要清楚,这个函数不是stats::ks.test(rep(1, 3), ecdf(1:3))
native dgof
):
这导致 p 值0.07407
(要验证这一点,请单击此链接中的绿色“运行此代码”按钮)。注意:
在 Python 中,复制的示例是:
但在示例中,我找到的 p 值为0.517551
. KS 统计量本身已正确计算。但是为什么模拟的 p 值不同呢?再次查看dgof
链接中示例的输出,按一下Run this example
,您将看到我所指的数字(上面转载)。
python - 使用 rpy2 将 R 包安装/导入到 python 中,导入/忽略有问题的数据包
这是我正在尝试做的事情:
- 我想使用离散的 Kolmogorov-Smirov Goodness-of-fit test,目前仅在 R 中可用。此外,R 也有正常的 KS 测试——我不想使用这个测试。
- 我是 python 用户,所以需要将离散 KS 测试移植到 python,为此我正在尝试使用
rpy2
.
我面临的问题,正如此处更详细的统计信息所详述的那样,rpy2
似乎用标准版本替换了导入的离散测试。我知道这一点,因为它在测试时不会产生正确的答案。
迄今为止的尝试
结果是
好的,到目前为止一切顺利,应该已经安装了它。所以让我们导入它:
真的进口了吗?让我们来看看:
返回
好吧,这很奇怪,但也许它仍然有效,让我们看看(这与 R 端使用的示例完全相同,应该返回D = 0.66667, p-value = 0.07407
):
返回
如果这对你没有任何意义,那很好,你需要知道的是它是错误的。这似乎是错误的,因为不知何故,ks_test
正在加载标准以代替离散的标准(我们在上面列表中的第 2 项中讨论的标准)。让我们通过加载标准库和 KS 测试来验证:
返回
所以这很酷 - 有谁知道为什么会发生这种情况?
注意: 这个问题与我的另一个问题有关,但在 python 方面有更多细节。
goodness-of-fit - 如何对 R 中的广义双曲分布进行 Kolmogorov Smirnov 检验?
我想对广义双曲线分布进行 Kolmogor Smirnov 检验。我使用有关股票和“gyp”包的数据。我正在使用的代码是
Theta3 <- ghyp(lambda=-0.68, alpha.bar=0.36, mu=0.00003, sigma=-0.0084,gamma=0.02) ks.test(data1$MSFT, "pghyp", Theta3)
但我收到以下消息: ghypCheckPars(param) 中的错误:(列表)对象不能被强制输入“双”
请你帮助我好吗?
r - R包中的Kolmogorv-Smirnov测试(dgof)-离散案例
我有以下数据,
我想使用该dgof
包在 R 中执行 KS 测试,但不知道如何使用它。我还用二项式和泊松分布拟合了上述数据。
现在,我想使用 KS 检验来确定哪个模型(二项式或泊松)代表数据。
谢谢你。
python - 如何在 Python 中实现 KS-Test
scipy.stats.kstest(rvs, cdf, N)
可以对数据集执行 KS-Test rvs
。它测试数据集是否遵循概率分布,该分布cdf
在此方法的参数中指定。
现在考虑一个N=4800
样本数据集。我已经对这些数据执行了 KDE,因此有一个估计的 PDF。这个 PDF 看起来非常像双峰分布。在绘制估计的 PDF 和曲线拟合双峰分布时,这两个图几乎相同。拟合双峰分布的参数为(scale1, mean1, stdv1, scale2, mean2, stdv2):
[0.6 0.036 0.52, 0.23 1.25 0.4]
我如何申请scipy.stats.kstest
测试我的估计 PDF 是否为双峰分布?作为我的零假设,我声明估计的 PDF 等于以下 PDF:
x_grid
只是一个向量,其中包含我评估估计 PDF 的 x 值。所以 的每个条目pdf
都有一个对应的值x_grid
。可能是我的计算hypoCdf
不正确。也许len(x_grid)
我应该除以而不是除以np.sum(hypoDist)
?
挑战:cdf
参数 ofkstest
不能指定为双峰。我也不能将其指定为hypoDist
.
如果我想测试我的数据集是否是高斯分布的,我会写:
measurementError
是我在其上执行 KDE 的数据集。这返回:
statistic=0.459, pvalue=0.0
对我来说,pvalue 为 0.0 有点烦人
r - 如何按组在 R 中的数据框中执行 KS.test
我想在 R 中为下面的示例数据帧“数据”执行两个样本 Kolmogorov-Smirnov (KS) 测试:
要在 2 个单独的列之间执行 KS 测试,代码如下:
但是,我想按列和按组执行此操作。例如,为 t.test 或 wilcox.test 执行此操作很容易,因为您可以编码为 t.test(y1,y2) 或 t.test(y~x) # 其中 y 是数字,x 是二进制因素 但是,当涉及到二进制因素时,没有 ks.test 的代码。有人能帮忙吗?
最终,我想为所有蛋白质的整个数据框执行此操作,因为我可以成功地进行 t 检验,但想为 ks.test 执行如下操作:
任何帮助表示赞赏。提前谢谢你。
python - kstest 给出奇怪的 p 值
我想检查概率是否来自经验 CDF 指定的分布。kstest
给出我认为错误的 p 值;怎么了?
我编写了一个测试函数来验证 p 值。我正在比较来自两个相同分布的样本数组,并检查从kstest
和ks_2samp
函数获得的 p 值。由于原假设为真(分布相同),p 值必须均匀分布在 [0,1] 上,换句话说,我必须看到错误发现率等于使用的 p 值阈值。但是,这仅适用于ks_2samp
函数给出的 p 值。
输出是
FDR for p-value threshold 0.05 : kstest: 0.287, ks_2samp: 0.051
我希望两个 fdr 值都接近 0.05,但是 给出的值kstest
很奇怪(太高 - 换句话说,kstest
经常坚持认为数据来自不同的分布)。
我错过了什么吗?
更新
正如下面所回答的,原因是kstest
它不能很好地处理由小样本生成的 ecdf……唉,我必须通过也不是很大的样本来生成经验 CDF。现在,作为一种快速解决方法,我使用一些“混合”方法:
因此,它可以将用于生成 ECDF 的样本数量作为参数。也许这并不完全是严格的,到目前为止,这是我能想到的最好的。在大小均为 100 的 data1 和 data2 上进行测试时,它给出
FDR for p-value threshold 0.05 : kstest: 0.268, ks_2samp: 0.049, my_ks_test: 0.037
python - Kolmogorov-Smirnov (ks_2samp) p 值与预期不符 - 测试或理解错误?
语境
我正在使用scipy's
ks_samp来应用 Kolmogorov-Smirnov-test。
我使用的数据是双重的:
- 我有一个数据集
d1
,它是应用于机器学习模型预测的评估指标m1
(即MASE - Mean Average Scaled Error)。这些大约是 6.000 个数据点,这意味着使用 6.000 个预测的 MASE 结果m1
。 - 我的第二个数据集与我使用的第二个模型的差异
d2
类似,与.d1
m2
m1
两个数据集的分布如下:
可以看出,分布看起来非常相似。我想通过 Kolmogorov-Smirnov 检验来强调这一事实。但是,我应用的结果k2_samp
表明相反:
据我了解,这样的 pvalue 表明分布不同(拒绝 H0)。但从图像上可以看出,它绝对应该。
问题
- 我是否误解了 Kolmogorov-Smirnov 的用法,并且此测试不适用于用例/分发类型?
- 如果第一个可以回答是,我还有什么选择?
编辑
下面是叠加图。从交叉验证的答案和评论中得出结论,我认为“中间”的分歧可能是原因,因为 KS 在那里很敏感。