Kolmogorov-Smirnov(KS)检验

KS检验是一种非参数统计方法,用于比较两个样本的累积分布函数是否存在显著差异,尤其适用于小样本非正态分布数据。检验通过计算两分布曲线的最大垂直差(D值)来评估差异,D值越大表示差异越显著。在数据集的累积分布图中,D值的大小不会因数据转换而改变。
摘要由CSDN通过智能技术生成

概述

在统计学中,Kolmogorov-Smirnov检验(通常称为K-S检验)是基于累积分布函数的,通常用于确定两个观测数据的潜在概率分布是否存在显著的差异,或者观测数据的潜在概率分布是否与假设分布(比如正态分布)存在显著的差异(上述两种情况均基于有限样本)。
在单样本情况下,KS检验将观测数据的累积分布函数与零假设所指定的累积分布函数进行比较。在两样本情况下,KS检验将两个观测数据的累积分布函数进行比较。其中,两个样本的KS检验是比较两个样本的最有用且最通用的非参数方法之一,因为它对两个样本的累积分布函数的位置和形状的差异都敏感。
KS检验作为一种非参数检验,与参数检验(如t-检验)方法不同是KS检验不需要知道数据的概率分布情况。换句话说,当未知数据的概率分布情况时,KS检验等非参数检验要优于参数检验(如t-检验)。但是,当观测数据的概率分布符合已知概率分布时,KS检验的灵敏度将低于参数检验。
然而,当样本量比较小的时候,KS检验(非参数检验)是分析两组数据之间是否存在显著差异时的最佳选择。对于不满足正态分布的大样本数据而言t-检验还是相当精确有效的统计方法。

KS检验的直观理解

接下来,我们以一种比较直观的方式来理解KS检验的步骤。

准备数据集

> controlB = c(1.26, 0.34, 0.70, 1.75, 50.57, 1.55, 0.08, 0.42, 0.50, 3.20, 0.15, 0.49, 0.95, 0.24, 1.37, 0.17, 6.98, 0.10, 0.94, 0.38)
> treatmentB= c(2.37, 2.16, 14.82, 1.73, 41.04, 0.23, 1.32, 2.91, 39.41, 0.11, 27.44, 4.51, 0.51, 4.50, 0.18, 14.68, 4.66, 1.30, 2.06, 1.19)
> summary(controlB)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  0.080   0.315   0.600   3.607   1.415  50.570 
> summary(treatmentB)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  0.110   1.272   2.265   8.357   7.165  41.040 
> layout(matrix(1:2, nrow = 2, ncol = 1))
# qqplot和显著性检测正态性
> qqnorm(controlB);qqline(controlB, col = 2);shapiro.test(controlB)

	Shapiro-Wilk normality test

data:  controlB
W = 0.32469, p-value = 1.163e-08

> qqnorm(treatmentB);qqline(treatmentB, col = 2);shapiro.test(treatmentB)

	Shapiro-Wilk normality test

data:  treatmentB
W = 0.65484, p-value = 1.152e-05

Q-Q图
通过Q-Q图及正态性检验,发现两个数据集是非正态性数据集。因此,当采用t-检验(存在正态性假设)时,结果的可靠性存在质疑。

观察数据集的累积分布函数

在这里,累积分布值就是所有比x小的数在数据集中所占的比例。下面对controlB数据集进行统计及绘图

# cumlative fraction plot
cdf <- function(x){
  df <- as.data.frame(table(x))
  total.num <- sum(df$Freq)
  cdf.freq <- 0
  idx <- 1
  tmp <- rep(0, nrow(df))
  for (n in df$Freq){
    cdf.freq <- cdf.freq + n
    tmp[idx] <- cdf.freq
    idx <- idx +1
  }
  df$x <- as.numeric(as.character(df$x))
  df$CDF <- tmp
  df$CDF.freq <- tmp / sum(df$Freq)
  return(df)
}
cdf.ctl <- cdf(controlB)
plot(x = cdf.ctl$x, y = cdf.ctl$CDF.freq,
     type = 'S',
     main = "Cumlative Fraction PLot",
     xlab = "X",
     ylab = "Cumlative Frequency")

CDF-01
基于累积分布图,我们发现大多数数据集中在左侧(数据值比较小),展示了非正态分布现象。为了更好的观测数据在x轴上的分布,可以对x轴的坐标进行非等分的划分。在数据都为正的时候有一个很好的方法就是对x轴进行log转换。对其进行log转换,其结果如下。
CDF-02
将treatmentB的数据也做相同的累积分布图(如下),可以发现treatmentB和controlB的数据分布范围大致相同。但是对于大部分x值,在controlB数据集中比x小的数据所占的比例比在treatmentB中要高,也就是说达到相同累计比例的值在treatment组中比control中要高。KS检验是以两条累计分布曲线之间的最大垂直差(D值)作为检验统计量,来描述两组数据之间的差异 。在此图中这个D值出现在x=1附近,而D值为0.45(0.65-0.25)。
CDF-03
注意 : 虽然累计分布曲线的形状会随着数据转换处理而改变(如log转换),但是D值的大小是不会改变。

KS检验的数学推导

  • 检验统计量为: D n = m a x { F n ( x ) − F ( x ) } D_n = max\{F_n(x) - F(x)\} Dn=max{ Fn(x)F(
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kolmogorov-Smirnov检验可以用于检验一个样本是否符合正态分布。在进行Kolmogorov-Smirnov检验时,我们将样本的累计分布函数与正态分布的累计分布函数进行比较,通过计算两者之间的最大差值来判断是否存在显著性差异。如果最大差值小于临界值,则接受原假设,即样本符合正态分布;如果最大差值大于临界值,则拒绝原假设,即样本不符合正态分布。\[3\] 需要注意的是,Kolmogorov-Smirnov检验是一种非参数检验方法,不需要事先知道数据的分布情况。因此,在样本量较小的情况下,Kolmogorov-Smirnov检验是一种常用的方法来分析样本是否符合正态分布。\[3\] #### 引用[.reference_title] - *1* *3* [KS-检验Kolmogorov-Smirnov test) -- 检验数据是否符合某种分布](https://blog.csdn.net/weixin_33849215/article/details/85816750)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [KolmogorovSmirnov test](https://blog.csdn.net/fireblue1990/article/details/51136277)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值