R
為什麼 ecdf 使用階躍函數而不是線性插值?
經驗 CDF 函數通常由階躍函數估計。是否有理由以這種方式而不是通過使用線性插值來完成?階躍函數是否有任何有趣的理論特性讓我們更喜歡它?
以下是兩者的示例:
ecdf2 <- function (x) { x <- sort(x) n <- length(x) if (n < 1) stop("'x' must have 1 or more non-missing values") vals <- unique(x) rval <- approxfun(vals, cumsum(tabulate(match(x, vals)))/n, method = "linear", yleft = 0, yright = 1, f = 0, ties = "ordered") class(rval) <- c("ecdf", class(rval)) assign("nobs", n, envir = environment(rval)) attr(rval, "call") <- sys.call() rval } set.seed(2016-08-18) a <- rnorm(10) a2 <- ecdf(a) a3 <- ecdf2(a) par(mfrow = c(1,2)) curve(a2, -2,2, main = "step function ecdf") curve(a3, -2,2, main = "linear interpolation function ecdf")
這是根據定義。
一組觀測值的經驗分佈函數定義為
在哪裡是集合基數。這本質上是一個階躍函數。它幾乎肯定會收斂到實際的 CDF 。
另請注意,對於任何具有至少兩個(尤其是非退化離散分佈),您的 ECDF 變體不會收斂到實際的 CDF。例如,考慮帶有 CDF 的伯努利分佈
這是一個階躍函數,而 ecdf2 將收斂到(一個分段線性函數連接和.