跳转到主内容
跳转到主内容

kolmogorovSmirnovTest

kolmogorovSmirnovTest

自 v23.4 引入

对来自两个总体的样本应用 Kolmogorov-Smirnov 检验。

两个样本的取值都在 sample_data 列中。若 sample_index 等于 0,则该行的值属于第一个总体的样本;否则,该值属于第二个总体的样本。 样本必须服从连续的一维概率分布。

语法

kolmogorovSmirnovTest([alternative, computation_method])(sample_data, sample_index)

参数

  • alternative — 备择假设。(可选,默认值:'two-sided'。)令 F(x) and G(x) 分别为第一和第二个分布的 CDF(累积分布函数)。'two-sided':原假设是样本来自同一分布,例如对所有 x 都有 F(x) = G(x),备择假设则为分布不相同。'greater':原假设是第一组样本的取值在随机意义上小于第二组样本,例如第一个分布的 CDF 位于第二个分布之上,因此也在其左侧。这实际意味着对所有 x 都有 F(x) >= G(x)。在这种情况下,备择假设是至少存在一个 x 使得 F(x) < G(x)。'less':原假设是第一组样本的取值在随机意义上大于第二组样本,例如第一个分布的 CDF 位于第二个分布之下,因此也在其右侧。这实际意味着对所有 x 都有 F(x) <= G(x)。在这种情况下,备择假设是至少存在一个 x 使得 F(x) > G(x)String
  • computation_method — 用于计算 p-value 的方法。(可选,默认值:'auto'。)'exact':使用检验统计量的精确概率分布进行计算。除小样本外,计算开销大且低效。'asymp'('asymptotic'):使用近似方法进行计算。对于大样本量,精确和渐近 p-value 非常接近。'auto':当样本数量的最大值小于 10'000 时使用 'exact' 方法。String

参数列表

返回值

返回一个包含两个元素的元组:计算得到的统计量和计算得到的 p-value。Tuple(Float64, Float64)

示例

同一分布检验

SELECT kolmogorovSmirnovTest('less', 'exact')(value, num)
FROM
(
    SELECT
        randNormal(0, 10) AS value,
        0 AS num
    FROM numbers(10000)
    UNION ALL
    SELECT
        randNormal(0, 10) AS value,
        1 AS num
    FROM numbers(10000)
)
┌─kolmogorovSmirnovTest('less', 'exact')(value, num)─┐
│ (0.009899999999999996,0.37528595205132287)         │
└────────────────────────────────────────────────────┘

不同分布的检验

SELECT kolmogorovSmirnovTest('two-sided', 'exact')(value, num)
FROM
(
    SELECT
        randStudentT(10) AS value,
        0 AS num
    FROM numbers(100)
    UNION ALL
    SELECT
        randNormal(0, 10) AS value,
        1 AS num
    FROM numbers(100)
)
┌─kolmogorovSmirnovTest('two-sided', 'exact')(value, num)─┐
│ (0.4100000000000002,6.61735760482795e-8)                │
└─────────────────────────────────────────────────────────┘

另请参阅