Respuestas:
La ecdffunción aplicada a una muestra de datos devuelve una función que representa la función empírica de distribución acumulativa. Por ejemplo:
> 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)

Si desea que un objeto que representa el CDF empírico sea evaluado a valores específicos (en lugar de como un objeto de función), puede hacerlo
> 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
Tenga en cuenta que pcontiene como máximo la misma cantidad de información que P(y posiblemente contiene menos) que a su vez contiene la misma cantidad de información que X.
xsimplemente escribe P(x). Tenga en cuenta que xpuede ser un vector (vea las últimas oraciones de mi respuesta).
Lo que parece necesitar es obtener la distribución acumulada (probabilidad de obtener un valor <= que x en una muestra), ecdf le devuelve una función, pero parece estar hecha para trazar, y así, el argumento de esa función , si se tratara de una escalera, sería el índice de la banda de rodadura.
Puedes usar esto:
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.
Lamentablemente, el uso de esta función no es muy rápido. No sé si R tiene una función que hace que esto te devuelva una función, eso sería más eficiente.
Rcalcula, de hecho, el ECDF: su argumento es un valor potencial de la variable aleatoria y devuelve valores en el intervalo. Esto se verifica fácilmente. Por ejemplo, ecdf(c(-1,0,3,9))(8)vuelve 0.75. Un inverso generalizado del ECDF es la función cuantil, implementada por quantilein R.
Siempre me pareció ecdf()un poco confuso. Además, creo que solo funciona en el caso univariante. Terminé rodando mi propia función para esto en su lugar.
Primero instale data.table . Luego instale mi paquete, mltools (o simplemente copie el método empirical_cdf () en su entorno R).
Entonces es tan fácil como
# 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
amigo, puedes leer el código en este blog.
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
Se pueden encontrar más detalles en el siguiente enlace: