正如whuber 所评论的:Kolmogorov-Smirnov 检验仅在与完全指定的分布进行比较时才有效。您不能使用它来比较观察到的分布与根据您观察到的样本估计参数的分布。如果这样做,您的 p 值将不会在原假设下均匀分布,但会显示您观察到的确切模式。
不幸的是,这是一个非常常见的错误,您可以在在线教程中经常找到它。
作为一个小例子,让我们模拟一下x1,…,x20∼N(0,1),然后首先针对完全指定的对象运行 KS 测试 N(0,1)分布,然后根据估计 N(μ^,σ^2)分布,其中μ^和σ^2估计基于x1,…,x20. 记录p价值。这样做 10,000 次。下面是直方图p价值观:

如您所见,p针对完全指定分布的测试值是均匀分布的,因为它们应该是均匀分布的,但来自拟合分布的值却不是。
n_sims <- 1e4
nn <- 20
pp_estimated <- pp_specified <- rep(NA,n_sims)
pb <- winProgressBar(max=n_sims)
for ( ii in 1:n_sims ) {
setWinProgressBar(pb,ii,paste(ii,"of",n_sims))
set.seed(ii)
sim <- rnorm(nn)
pp_specified[ii] <- ks.test(sim,y="pnorm",mean=0,sd=1)$p
pp_estimated[ii] <- ks.test(sim,y="pnorm",mean=mean(sim),sd=sd(sim))$p
}
close(pb)
opar <- par(mfrow=c(1,2))
hist(pp_specified,main="Parameters specified",xlab="",col="lightgray")
hist(pp_estimated,main="Parameters estimated",xlab="",col="lightgray")
par(opar)
如果您假设的参考分布是正态的,但您需要估计均值和方差,则 Lilliefors 检验将是合适的。其他方法可能适用于其他分布类型。您可能想针对您感兴趣的分发类型提出特定问题。
我不知道一般框架拟合优度拟合分布的检验。(作为一个极端的例子,你总是可以使用你观察到的数据的经验分布。当然,拟合会很完美。但这也可能不会提供很多信息。)
编辑-我只是在这里问了一般性问题:拟合分布的拟合优度。