Réponses:
La ecdf
fonction appliquée à un échantillon de données renvoie une fonction représentant la fonction de distribution cumulative empirique. Par exemple:
> 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 vous voulez avoir un objet représentant le CDF empirique évalué à des valeurs spécifiques (plutôt qu'en tant qu'objet fonction), vous pouvez le faire
> 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
Notez que p
contient au plus la même quantité d'informations que P
(et peut-être qu'il en contient moins) qui à son tour contient la même quantité d'informations que X
.
x
écrivez simplement P(x)
. Notez que cela x
peut être un vecteur (voir les dernières phrases de ma réponse.)
Ce dont vous semblez avoir besoin, c'est d'obtenir la distribution cumulée (probabilité d'obtenir une valeur <= que x sur un échantillon), ecdf vous renvoie une fonction, mais elle semble être faite pour le traçage, et donc, l'argument de cette fonction , s'il s'agissait d'un escalier, serait l'indice de la marche.
Vous pouvez utiliser ceci:
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.
Malheureusement, l'utilisation de cette fonction n'est pas très rapide. Je ne sais pas si R a une fonction qui fait cela, vous renvoyant une fonction, ce serait plus efficace.
J'ai toujours trouvé ecdf()
un peu déroutant. De plus, je pense que cela ne fonctionne que dans le cas univarié. A fini par rouler ma propre fonction pour cela à la place.
Installez d'abord data.table . Installez ensuite mon package, mltools (ou copiez simplement la méthode empirical_cdf () dans votre environnement R.)
C'est aussi simple que
# 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
ami, vous pouvez lire le code sur ce 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
plus de détails peuvent être trouvés sur le lien suivant: