R

為什麼 ecdf 使用階躍函數而不是線性插值?

  • August 18, 2016

經驗 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 將收斂到(一個分段線性函數連接和.

引用自:https://stats.stackexchange.com/questions/230458

comments powered by Disqus