Rev 88624 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
% File src/library/stats/man/ks.test.Rd% Part of the R package, https://www.R-project.org% Copyright 1995-2025 R Core Team% Distributed under GPL 2 or later\name{ks.test}\alias{ks.test}\alias{ks.test.default}\alias{ks.test.formula}\title{Kolmogorov-Smirnov Tests}\description{Perform a one- or two-sample Kolmogorov-Smirnov test.}\usage{ks.test(x, \dots)\method{ks.test}{default}(x, y, \dots,alternative = c("two.sided", "less", "greater"),exact = NULL, simulate.p.value = FALSE, B = 2000)\method{ks.test}{formula}(formula, data, subset, na.action, \dots)}\arguments{\item{x}{a numeric vector of data values.}\item{y}{either a numeric vector of data values, or a character stringnaming a cumulative distribution function or an actual cumulativedistribution function such as \code{pnorm}. Only continuous CDFsare valid.}\item{\dots}{for the default method, parameters of the distributionspecified (as a character string) by \code{y}. Otherwise, furtherarguments to be passed to or from methods.}\item{alternative}{indicates the alternative hypothesis and must beone of \code{"two.sided"} (default), \code{"less"}, or\code{"greater"}. You can specify just the initial letter of thevalue, but the argument name must be given in full.See \sQuote{Details} for the meanings of the possible values.}\item{exact}{\code{NULL} or a logical indicating whether an exactp-value should be computed. See \sQuote{Details} for the meaning of\code{NULL}.}\item{simulate.p.value}{a logical indicating whether to computep-values by Monte Carlo simulation. (Ignored for the one-sampletest.)}\item{B}{an integer specifying the number of replicates used in theMonte Carlo test.}\item{formula}{a formula of the form \code{lhs ~ rhs} where \code{lhs}is a numeric variable giving the data values and \code{rhs} either\code{1} for a one-sample test or a factor with two levels givingthe corresponding groups for a two-sample test.}\item{data}{an optional matrix or data frame (or similar: see\code{\link{model.frame}}) containing the variables in theformula \code{formula}. By default the variables are taken from\code{environment(formula)}.}\item{subset}{an optional vector specifying a subset of observationsto be used.}\item{na.action}{a function which indicates what should happen whenthe data contain \code{NA}s. Defaults to\code{getOption("na.action")}.}}\details{If \code{y} is numeric, a two-sample (Smirnov) test of the nullhypothesis that \code{x} and \code{y} were drawn from the samedistribution is performed.Alternatively, \code{y} can be a character string naming a continuous(cumulative) distribution function, or such a function. In this case,a one-sample (Kolmogorov) test is carried out of the null that thedistribution function which generated \code{x} is distribution\code{y} with parameters specified by \code{\dots}.The presence of ties always generates a warning in the one-sample case, as continuousdistributions do not generate them. If the ties arose from roundingthe tests may be approximately valid, but even modest amounts ofrounding can have a significant effect on the calculated statistic.Missing values are silently omitted from \code{x} and (in thetwo-sample case) \code{y}.The possible values \code{"two.sided"}, \code{"less"} and\code{"greater"} of \code{alternative} specify the null hypothesisthat the true cumulative distribution function (CDF) of \code{x} is equalto, not less than or not greater than the hypothesized CDF (one-samplecase) or the CDF of \code{y} (two-sample case), respectively. The testcompares the CDFs taking their maximal difference as test statistic,with the statistic in the \code{"greater"} alternative being\eqn{D^+ = \max_u [ F_x(u) - F_y(u) ]}{D^+ = max[F_x(u) - F_y(u)]}.Thus in the two-sample case \code{alternative = "greater"} includesdistributions for which \code{x} is stochastically \emph{smaller} than\code{y} (the CDF of \code{x} lies above and hence to the left of thatfor \code{y}), in contrast to \code{\link{t.test}} or\code{\link{wilcox.test}}.Exact p-values are not available for the one-sample case in thepresence of ties.If \code{exact = NULL} (the default), anexact p-value is computed if the sample size is less than 100 in theone-sample case \emph{and there are no ties}, and if the product ofthe sample sizes is less than 10000 in the two-sample case, with orwithout ties (using the algorithm described in\bibcitet{R:Schroeer+Trenkler:1995}).Otherwise, the p-value is computed via Monte Carlo simulation in thetwo-sample case if \code{simulate.p.value} is \code{TRUE}, or elseasymptotic distributions are used whose approximations maybe inaccurate in small samples. In the one-sample two-sided case,exact p-values are obtained as described in\bibcitet{R:Marsaglia+Tsang+Wang:2003}(but not using the optional approximation in the right tail, sothis can be slow for small p-values). The formula of\bibcitet{R:Birnbaum+Tingey:1951} is used for the one-sampleone-sided case.If a one-sample test is used, the parameters specified in\code{\dots} must be pre-specified and not estimated from the data.There is some more refined distribution theory for the KS test withestimated parameters \bibcitep{see|R:Durbin:1973|}, but that is notimplemented in \code{ks.test}.}\value{A list inheriting from classes \code{"ks.test"} and \code{"htest"}containing the following components:\item{statistic}{the value of the test statistic.}\item{p.value}{the p-value of the test.}\item{alternative}{a character string describing the alternativehypothesis.}\item{method}{a character string indicating what type of test wasperformed.}\item{data.name}{a character string giving the name(s) of the data.}}\source{The two-sided one-sample distribution comes \emph{via}\bibcitet{R:Marsaglia+Tsang+Wang:2003}.Exact distributions for the two-sample (Smirnov) test are computedby the algorithm proposed by \bibcitet{R:Schroeer:1991} and\bibcitet{R:Schroeer+Trenkler:1995} using numerical improvements alongthe lines of \bibcitet{R:Viehmann:2021}.}\references{\bibinfo{R:Conover:1971}{footer}{Pages 295--301 (one-sample Kolmogorov test),309--314 (two-sample Smirnov test).}\bibshow{*,R:Conover:1971,R:Feller:1948}}\seealso{\code{\link{psmirnov}}.\code{\link{shapiro.test}} which performs the \I{Shapiro}-\I{Wilk} test fornormality.}\examples{require("graphics")x <- rnorm(50)y <- runif(30)# Do x and y come from the same distribution?ks.test(x, y)# Does x come from a shifted gamma distribution with shape 3 and rate 2?ks.test(x+2, "pgamma", 3, 2) # two-sided, exactks.test(x+2, "pgamma", 3, 2, exact = FALSE)ks.test(x+2, "pgamma", 3, 2, alternative = "gr")# test if x is stochastically larger than x2x2 <- rnorm(50, -1)plot(ecdf(x), xlim = range(c(x, x2)))plot(ecdf(x2), add = TRUE, lty = "dashed")t.test(x, x2, alternative = "g")wilcox.test(x, x2, alternative = "g")ks.test(x, x2, alternative = "l")# with ties, example from Schröer and Trenkler (1995)# D = 3/7, p = 8/33 = 0.242424..ks.test(c(1, 2, 2, 3, 3),c(1, 2, 3, 3, 4, 5, 6))# -> exact# formula interface, see ?wilcox.testks.test(Ozone ~ Month, data = airquality,subset = Month \%in\% c(5, 8))}\keyword{htest}