Respostas:
A ecdf
função aplicada a uma amostra de dados retorna uma função que representa a função de distribuição cumulativa empírica. Por exemplo:
> 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)
Se você deseja que um objeto representando o CDF empírico seja avaliado em valores específicos (e não como um objeto de função), poderá fazer
> 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
Observe que p
contém no máximo a mesma quantidade de informações que P
(e possivelmente contém menos) que, por sua vez, contém a mesma quantidade de informações que X
.
x
basta escrever P(x)
. Note-se que x
pode ser um vetor (ver o último par de frases de minha resposta.)
O que você parece precisar é disso para obter a distribuição acumulada (probabilidade de obter um valor <= x em uma amostra), ecdf retorna uma função, mas parece ter sido criada para plotagem e, portanto, o argumento dessa função , se fosse uma escada, seria o índice da banda de rodagem.
Você pode usar isto:
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.
Infelizmente, o uso desta função não é muito rápido. Eu não sei se R tem uma função que faz isso retornando uma função, que seria mais eficiente.
Eu sempre achei ecdf()
um pouco confuso. Além disso, acho que só funciona no caso univariado. Acabei rolando minha própria função para isso.
Primeiro instale o data.table . Em seguida, instale meu pacote, mltools (ou apenas copie o método empirical_cdf () no seu ambiente R.)
Então é tão fácil quanto
# 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, você pode ler o código deste 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
mais detalhes podem ser encontrados no seguinte link: