Ответы:
ecdfФункция применяется для выборки данных возвращает функцию , представляющую эмпирическую интегральную функцию распределения. Например:
> X = rnorm(100) # X is a sample of 100 normally distributed random variables
> P = ecdf(X) # P is a function giving the empirical CDF of X
> P(0.0) # This returns the empirical CDF at zero (should be close to 0.5)
[1] 0.52
> plot(P) # Draws a plot of the empirical CDF (see below)

Если вы хотите, чтобы объект, представляющий эмпирический CDF, оценивался по определенным значениям (а не как функциональный объект), тогда вы можете сделать
> z = seq(-3, 3, by=0.01) # The values at which we want to evaluate the empirical CDF
> p = P(z) # p now stores the empirical CDF evaluated at the values in z
Обратите внимание, что pсодержит самое большее количество информации P(и, возможно, меньше), которое, в свою очередь, содержит столько же информации, сколько X.
xтебя просто пиши P(x). Обратите внимание, что это xможет быть вектором (см. Последние пару предложений моего ответа.)
Похоже, что вам нужно, чтобы получить накопленное распределение (вероятность получить значение <=, чем x в образце), ecdf возвращает вам функцию, но, похоже, она создана для построения графика, и поэтому аргумент этой функции если бы это была лестница, был бы указатель протектора.
Вы можете использовать это:
acumulated.distrib= function(sample,x){
minors= 0
for(n in sample){
if(n<=x){
minors= minors+1
}
}
return (minors/length(sample))
}
mysample = rnorm(100)
acumulated.distrib(mysample,1.21) #1.21 or any other value you want.
К сожалению, использование этой функции не очень быстро. Я не знаю, есть ли у R функция, которая делает это, возвращая вам функцию, которая была бы более эффективной.
Rдействительно, вычисляет ECDF: его аргумент является потенциальным значением случайной величины и возвращает значения в интервале . Это легко проверить. Например, возвращает . Обобщенной инверсией ECDF является квантильная функция, реализованная в . ecdf(c(-1,0,3,9))(8)0.75quantileR
Я всегда находил ecdf()немного запутанным. Плюс я думаю, что это работает только в одномерном случае. Заканчивал свою собственную функцию вместо этого.
Сначала установите data.table . Затем установите мой пакет mltools (или просто скопируйте метод empirical_cdf () в вашу среду R.)
Тогда это так же просто, как
# load packages
library(data.table)
library(mltools)
# Make some data
dt <- data.table(x=c(0.3, 1.3, 1.4, 3.6), y=c(1.2, 1.2, 3.8, 3.9))
dt
x y
1: 0.3 1.2
2: 1.3 1.2
3: 1.4 3.8
4: 3.6 3.9
empirical_cdf(dt$x, ubounds=seq(1, 4, by=1.0))
UpperBound N.cum CDF
1: 1 1 0.25
2: 2 3 0.75
3: 3 3 0.75
4: 4 4 1.00
empirical_cdf(dt, ubounds=list(x=seq(1, 4, by=1.0)))
x N.cum CDF
1: 1 1 0.25
2: 2 3 0.75
3: 3 3 0.75
4: 4 4 1.00
empirical_cdf(dt, ubounds=list(x=seq(1, 4, by=1.0), y=seq(1, 4, by=1.0)))
x y N.cum CDF
1: 1 1 0 0.00
2: 1 2 1 0.25
3: 1 3 1 0.25
4: 1 4 1 0.25
5: 2 1 0 0.00
6: 2 2 2 0.50
7: 2 3 2 0.50
8: 2 4 3 0.75
9: 3 1 0 0.00
10: 3 2 2 0.50
11: 3 3 2 0.50
12: 3 4 3 0.75
13: 4 1 0 0.00
14: 4 2 2 0.50
15: 4 3 2 0.50
16: 4 4 4 1.00
друг, вы можете прочитать код в этом блоге.
sample.data = read.table ('data.txt', header = TRUE, sep = "\t")
cdf <- ggplot (data=sample.data, aes(x=Delay, group =Type, color = Type)) + stat_ecdf()
cdf
более подробную информацию можно найти по следующей ссылке: