2026a

# kstest


单样本 Kolmogorov-Smirnov 检验

函数库: TyStatistics

# 语法

h, p, ksstat, cv = kstest(x; CDF=[], alpha=0.05, tail="unequal")

# 说明

h, p, ksstat, cv = kstest(x; CDF=[], alpha=0.05, tail="unequal") 使用单样本 Kolmogorov-Smirnov 检验针对原假设返回检验决策,即向量 x 中的数据来自标准正态分布,而不是它不来自此类分布的备选方案。 如果检验在 5% 的显着性水平拒绝原假设,则结果 h 为 1,否则为 0。还返回假设检验的p值、检验统计量的值和检验ksstat的近似临界值cv,其中附加选项由一个或多个关键字参数指定。例如,您可以检验标准正态分布以外的分布、更改显着性水平或进行单侧检验。示例

# 示例

标准正态分布检验
使用 kstest 执行单样本 Kolmogorov-Smirnov 测试。 通过直观地将经验累积分布函数 (cdf) 与标准正态 cdf 进行比较来确认测试决策。

加载数据。

using TyPlot
using TyStatistics
pkg_dir = pkgdir(TyStatistics)
source_path = pkg_dir * "/examples/HypothesisTests/DistributionTests/kstest_tests/kstest_data_1.jl"
include(source_path)

创建一个包含考试成绩数据第一列的向量。

test1 = grades[:,1]

检验数据来自均值为 75 且标准差为 10 的正态分布的原假设。使用这些参数来居中和缩放数据向量的每个元素,因为 kstest 默认测试标准正态分布。

x =@. (test1-75)/10
h, = kstest(x)
h = 0.0

h = 0.0 的返回值表示 kstest 在默认的 5% 显着性水平下未能拒绝原假设。

绘制经验 cdf 和标准正态 cdf 以进行视觉比较。

cdfplot(x)
hold("on")
x_values = LinRange(minimum(x),maximum(x),100)
plot(x_values,normcdf.(x_values,0,1),"r-")
legend(["Empirical CDF","Standard Normal CDF"],loc="best")

该图显示了中心和缩放数据向量的经验 cdf 与标准正态分布的 cdf 之间的相似性。

使用两列矩阵指定假设分布
加载示例数据。
using TyStatistics
pkg_dir = pkgdir(TyStatistics)
source_path = pkg_dir * "/examples/HypothesisTests/DistributionTests/kstest_tests/kstest_data_1.jl"
include(source_path)

创建一个包含学生考试成绩数据第一列的向量。

x = grades[:,1]

将假设分布指定为两列矩阵。 第 1 列包含数据向量 x。 第 2 列包含针对位置参数为 75、尺度参数为 10 和一个自由度的假设学生 t 分布在 x 中的每个值处评估的 cdf 值。

加载数据 test_cdf

import TyStatistics
pkg_dir = pkgdir(TyStatistics)
source_path = pkg_dir * "/examples/HypothesisTests/DistributionTests/kstest_tests/kstest_data_2.jl"
include(source_path)

测试数据是否来自假设分布。

h, = kstest(x,CDF=test_cdf)
h = 1.0

h = 1.0 的返回值表示 kstest 在默认的 5% 显着性水平下拒绝原假设。

进行单边假设检验
加载示例数据。
using TyPlot
using TyStatistics
pkg_dir = pkgdir(TyStatistics)
source_path = pkg_dir * "/examples/HypothesisTests/DistributionTests/kstest_tests/kstest_data_3.jl"
include(source_path)

创建一个包含股票收益数据矩阵第三列的向量。

x = stocks[:,3]

针对数据的总体 cdf 大于标准正态 cdf 的备择假设,检验数据来自标准正态分布的原假设。

h,p,k,c = kstest(x;tail="larger")
h = 1

p = 5.085438806199482e-5

k = 0.2197016793451303

c = 0.120673952773291

h = 1 的返回值表示 kstest 在默认的 5% 显着性水平下拒绝原假设而支持备择假设。

绘制经验 cdf 和标准正态 cdf 以进行视觉比较。

f,x_values = ecdf(x)
J = plot(x_values,f,linewidth=2)
hold("on")
K = plot(x_values,normcdf.(x_values),"r--",linewidth=2)
legend(["Empirical CDF","Standard Normal CDF"],loc="southeast")

该图显示了数据向量 x 的经验 cdf 与标准正态分布的 cdf 之间的差异。

# 输入参数

x —— 样本数据
向量
样本数据,指定为向量

数据类型: Float32 | Float64 | Int8 | Int16 | Int32 | Int64 | Int128 | UInt8 | UInt16 | UInt32 | UInt64 | UInt128

CDF — 假设连续分布的 cdf
矩阵 | 概率分布对象
假设连续分布的 cdf,由“CDF”和两列矩阵或连续概率分布对象组成。当 CDF 为矩阵时,第 1 列包含一组可能的 x 值,第 2 列包含相应的假设累积分布函数值 G(x)。如果指定 CDF 使得第 1 列包含数据向量 x 中的值,则计算最有效。如果在 CDF 的第 1 列中找不到 x 中的值,则 kstest 通过插值来近似 G(x)。 x 中的所有值都必须位于 CDF 第一列中最小值和最大值之间的区间内。默认情况下,kstest 测试标准正态分布。

单样本 Kolmogorov-Smirnov 检验仅对连续累积分布函数有效,需要预先确定 CDF。如果根据数据估计 CDF,则结果不准确。要在不指定分布参数的情况下根据正态分布、对数正态分布、极值分布、Weibull 分布或指数分布检验 x,请改用 lillietest

数据类型: Float32 | Float64 | Int8 | Int16 | Int32 | Int64 | Int128 | UInt8 | UInt16 | UInt32 | UInt64 | UInt128

alpha - 显着性水平
0.05(默认) | 范围 (0,1) 中的标量值
假设检验的显着性水平,包含"alpha"和范围 (0,1) 中的标量值。

示例: alpha=0.01

数据类型: Float32 | Float64 | Int8 | Int16 | Int32 | Int64 | Int128 | UInt8 | UInt16 | UInt32 | UInt64 | UInt128

tail - 替代假设的类型
"unequal" (默认) | "larger" | "smaller"
要评估的替代假设的类型,包含 "tail" 和以下项之一。
"unequal" 检验替代假设,即从中提取 x 的总体的 cdf 不等于假设分布的 cdf。
"larger" 检验替代假设,即从中抽取 x 的总体的 cdf 大于假设分布的 cdf。
"smaller" 检验替代假设,即从中提取 x 的总体的 cdf 小于假设分布的 cdf。

如果数据向量 x 中的值往往大于假设分布的预期值,则 x 的经验分布函数往往较小,反之亦然。

示例: tail="larger"

# 输出参数

h - 假设检验结果
1 | 0
假设检验结果,以 0 / 1 值形式返回。
  • 如果 h = 1,这表示在 alpha 显着性水平拒绝零假设。

  • 如果 h = 0,则表示未能在 alpha 显着性水平拒绝原假设。

p — p 值
[0,1] 范围内的标量值
测试的 p 值,以 [0,1] 范围内的标量值形式返回。 p 是在原假设下观察到的检验统计量与观察值一样极端或更极端的概率。 p 值小会使原假设的有效性产生疑问。
ksstat - 测试统计
非负标量值
假设检验的检验统计量,以非负标量值形式返回。
cv - 临界值
非负标量值
临界值,以非负标量值形式返回。

# 详细信息

单样本 Kolmogorov-Smirnov 检验
单样本 Kolmogorov-Smirnov 检验是零假设的非参数检验,即数据的总体 cdf 等于假设的 cdf。

"unequal"累积分布函数的双侧检验针对备选方案(即数据的总体 cdf 不等于假设的 cdf)检验原假设。 检验统计量是根据 x 计算的经验 cdf 与假设 cdf 之间的最大绝对差值:

其中 是经验 cdf, 是假设分布的 cdf。

"larger" 累积分布函数的单侧检验针对数据的总体 cdf 大于假设 cdf 的备选方案检验原假设。 检验统计量是根据 x 计算的经验 cdf 超过假设 cdf 的最大量:

"smaller" 累积分布函数的单侧检验针对数据的总体 cdf 小于假设 cdf 的备选方案检验原假设。 检验统计量是假设的 cdf 超过从 x 计算的经验 cdf 的最大量:

kstest 使用近似公式或通过在表中插值来计算临界值 cv。 公式和表格涵盖范围 0.01 ≤ alpha ≤ 0.2(双侧测试)和 0.005 ≤ alpha ≤ 0.1(单侧测试)。 如果 alpha 超出此范围,则 cv 返回为 NaN。

# 算法

kstest 决定通过将 p 值 p 与显着性水平 alpha 进行比较来拒绝零假设,而不是通过将检验统计量 ksstat 与临界值 cv 进行比较。 由于 cv 是近似值,将 ksstat 与 cv 进行比较有时会得出与将 p 与 alpha 进行比较不同的结论。

# 另请参阅

lillietest