> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

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

# kolmogorovSmirnovTest

<div id="kolmogorovSmirnovTest">
  ## kolmogorovSmirnovTest
</div>

Introduced in：v23.4.0

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

两个样本的值都位于 `sample_data` 列中。如果 `sample_index` 等于 0，则该行中的值属于第一个总体的样本；否则，属于第二个总体的样本。
样本必须来自连续的一维概率分布。

**Syntax**

```sql theme={null}
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 位于第二个分布的 CDF 上方，因此也在其左侧。这实际上意味着对所有 x，都有 `F(x) >= G(x)`；此时备择假设是至少存在一个 x 使得 `F(x) < G(x)`。'less'：原假设是第一个样本中的值在随机意义上大于第二个样本中的值，例如第一个分布的 CDF 位于第二个分布的 CDF 下方，因此也在其右侧。这实际上意味着对所有 x，都有 `F(x) <= G(x)`；此时备择假设是至少存在一个 x 使得 `F(x) > G(x)`。[`String`](/docs/zh/reference/data-types/string)
* `computation_method` — 用于计算 p 值的方法。 (可选，默认值：'auto'。) 'exact'：使用检验统计量的精确概率分布进行计算。计算开销较大，除小样本外通常没有必要。'asymp' ('asymptotic') ：使用近似方法进行计算。对于大样本，精确 p 值和渐近 p 值非常接近。'auto'：当样本数量的最大值小于 10'000 时，使用 'exact' 方法。[`String`](/docs/zh/reference/data-types/string)

**参数**

* `sample_data` — 样本数据。[`(U)Int*`](/docs/zh/reference/data-types/int-uint) or [`Float*`](/docs/zh/reference/data-types/float) or [`Decimal`](/docs/zh/reference/data-types/decimal)
* `sample_index` — 样本索引。[`(U)Int*`](/docs/zh/reference/data-types/int-uint)

**返回值**

返回一个包含两个元素的元组：计算得到的统计量和 p 值。[`Tuple(Float64, Float64)`](/docs/zh/reference/data-types/tuple)

**示例**

**同分布检验**

```sql title=Query theme={null}
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)
)
```

```response title=Response theme={null}
┌─kolmogorovSmirnovTest('less', 'exact')(value, num)─┐
│ (0.009899999999999996,0.37528595205132287)         │
└────────────────────────────────────────────────────┘
```

**不同分布的检验**

```sql title=Query theme={null}
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)
)
```

```response title=Response theme={null}
┌─kolmogorovSmirnovTest('two-sided', 'exact')(value, num)─┐
│ (0.4100000000000002,6.61735760482795e-8)                │
└─────────────────────────────────────────────────────────┘
```

**另请参见**

* [柯尔莫哥洛夫-斯米尔诺夫检验](https://en.wikipedia.org/wiki/Kolmogorov%E2%80%93Smirnov_test)
