使用ECDF手动计算两个样本的kolmogorov-smirnov

时间:2019-04-12 15:07:36

标签: r cdf

我正在尝试手动计算两个随机样本的KS统计量。据我了解,KS统计量D是两个CDF之间的最大垂直偏差。但是,手动计算两个CDF之间的差异并从基数R运行ks.test会得出不同的结果。我想知道错误在哪里。

set.seed(123)
a <- rnorm(10000)
b <- rnorm(10000)

### Manual calculation 
# function for calculating manually the ecdf
decdf <- function(x, baseline, treatment)  ecdf(baseline)(x) - ecdf(treatment)(x)
#Difference between the two CDFs 
d <- curve(decdf(x,a,b), from=min(a,b), to=max(a,b))
# getting D 
ks <- max(abs(d$y))

#### R-Base calculation 

ks.test(a,b)

R-Base D = 0.0109,而手动计算为0.0088。任何帮助解释差异的帮助表示赞赏。

我附上了R-Base源代码(有点整理)


n <- length(a)                                                                          
n.x <- as.double(n)
n.y <- length(b)
n <- n.x * n.y/(n.x + n.y)
w <- c(a, b)
z <- cumsum(ifelse(order(w) <= n.x, 1/n.x, -1/n.y))
STATISTIC <- max(abs(z))


1 个答案:

答案 0 :(得分:2)

默认情况下,$filesperfolder = 500 $sourcePath = "C:\Cases\Chiles v Karuna Murray\Documents\C - Barnes-Jewish Hospital" $destPath = "C:\Cases\Chiles v Karuna Murray\Documents" $i = 0; $folderNum = 1; Get-ChildItem "$sourcePath\*.tiff" | % { New-Item -Path ($destPath + "\" + $folderNum) -Type Directory -Force Move-Item $_ ($destPath + "\" + $folderNum); $i++; if ($i -eq $filesperfolder){ $folderNum++; $i = 0 ; } } curvefrom之间的100点细分中评估函数。通过限制为这100个点,可能会错过达到最大差异的值。

相反,请评估ecdf跳跃的所有点的差异,您一定会捕捉到达到最大差异的值。

to