Как найти квантили эмпирической функции кумулятивной плотности (ECDF)

я используюecdf() функция для расчета эмпирической функции кумулятивной плотности (ECDF) из некоторых случайных выборок:

set.seed(0)
X = rnorm(100)
P = ecdf(X)

СейчасP дает ECDF, и мы могли бы построить это:

plot(P)
abline(h = 0.6, lty = 3)

Мой вопрос: как я могу найти значение образцаxтакой, чтоP(x) = 0.6то есть 0,6-квантиль ECDF, или X-координата точки пересечения ECDF иh = 0.6?

 Yang Yang23 июл. 2016 г., 03:34
Не могли бы вы привести пример? Большое спасибо.
 42-23 июл. 2016 г., 03:38
StackOverflow здесь не для того, чтобы проводить статистические занятия. Если вы не уверены в своей статистике HW, вы должны опубликовать на CrossValidated.com и использовать тег самообучения.

Ответы на вопрос(1)

Решение Вопроса

ecdf(), так как легко получить эмпирическую функцию кумулятивной плотности (ECDF) самостоятельно.

Сначала мы сортируем образцыX в порядке возрастания:

X <- sort(X)

ECDF в этих выборках принимает значения функций:

e_cdf <- 1:length(X) / length(X)

Затем мы могли бы набросать ECDF:

plot(X, e_cdf, type = "s")
abline(h = 0.6, lty = 3)

Теперь мы ищем первое значениеXтакой, чтоP(X) >= 0.6, Это просто:

X[which(e_cdf >= 0.6)[1]]
# [1] 0.2290196

Поскольку наши данные взяты из стандартного нормального распределения, теоретический квантиль

qnorm(0.6)
# [1] 0.2533471

Так что наш результат довольно близок.

расширение

посколькуобратное CDF является квантильной функцией (например, обратноеpnorm() являетсяqnorm()), можно угадать обратное ECDF в качестве выборочного квантиля, т.е. обратноеecdf() являетсяquantile(), Это неправда!

ECDF - это лестничная / ступенчатая функция, которая не имеет обратной, Если мы вращаем ECDF вокругy = xПолученная кривая не является математической функцией.Таким образом, образец квантиля не имеет ничего общего с ECDF.

Заn отсортированные образцы,квантильная функция выборки фактически является линейной интерполяционной функцией из(x, y), с:

X-значения, являющиесяseq(0, 1, length = n);Y-значения отсортированных образцов.

Мы можем определить нашу собственную версию примера функции квантиля от:

my_quantile <- function(x, prob) {
  if (is.unsorted(x)) x <- sort(x)
  n <- length(x)
  approx(seq(0, 1, length = n), x, prob)$y
  }

Давайте проведем тест:

my_quantile(x, 0.6)
# [1] 0.2343171

quantile(x, prob = 0.6, names = FALSE)
# [1] 0.2343171

Обратите внимание, что результат отличается от того, что мы получаем отX[which(e_cdf >= 0.6)[1]].

Именно по этой причине я отказываюсь использоватьquantile() в моем ответе.

Ваш ответ на вопрос