equivalente numpy / scipy de la función R ecdf (x) (x)?

¿Cuál es el equivalente de la función ecdf(x)(x) de R en Python, ya sea en números o en scipy? Es ecdf(x)(x) básicamente lo mismo que:

 import numpy as np def ecdf(x): # normalize X to sum to 1 x = x / np.sum(x) return np.cumsum(x) 

o es algo mas requerido?

EDITAR ¿cómo se puede controlar el número de contenedores utilizados por ecdf ?

Prueba estos enlaces:

statsmodels.ECDF

ECDF en python sin función de paso?

Código de ejemplo

 import numpy as np from statsmodels.distributions.empirical_distribution import ECDF import matplotlib.pyplot as plt data = np.random.normal(0,5, size=2000) ecdf = ECDF(data) plt.plot(ecdf.x,ecdf.y) 

La implementación de OP para ecdf es incorrecta, se supone que no debe cumsum() los valores. Entonces no ys = np.cumsum(x)/np.sum(x) sino ys = np.cumsum(1 for _ in x)/float(len(x)) o mejor ys = np.arange(1, len(x)+1)/float(len(x))

Puede statmodels de ECDF si está de acuerdo con esa dependencia adicional o proporcionar su propia implementación. Vea abajo:

 import numpy as np import matplotlib.pyplot as plt from statsmodels.distributions.empirical_distribution import ECDF %matplotlib inline grades = (93.5,93,60.8,94.5,82,87.5,91.5,99.5,86,93.5,92.5,78,76,69,94.5, 89.5,92.8,78,65.5,98,98.5,92.3,95.5,76,91,95,61) def ecdf_wrong(x): xs = np.sort(x) # need to be sorted ys = np.cumsum(xs)/np.sum(xs) # normalize so sum == 1 return (xs,ys) def ecdf(x): xs = np.sort(x) ys = np.arange(1, len(xs)+1)/float(len(xs)) return xs, ys xs, ys = ecdf_wrong(grades) plt.plot(xs, ys, label="wrong cumsum") xs, ys = ecdf(grades) plt.plot(xs, ys, label="handwritten", marker=">", markerfacecolor='none') cdf = ECDF(grades) plt.plot(cdf.x, cdf.y, label="statmodels", marker="<", markerfacecolor='none') plt.legend() plt.show() 

Comparacion de ECDF

Este autor tiene un muy buen ejemplo de una función ECDF escrita por el usuario: las conferencias Python de John Stachurski . Su serie de conferencias está dirigida a estudiantes de posgrado en economía computacional; sin embargo, son mi recurso de referencia para cualquier persona que aprenda informática científica general en Python.

Edición : Este es un año de edad ahora, pero pensé que todavía respondería la parte “Editar” de su pregunta, en caso de que usted (u otros) todavía lo encuentre útil.

Realmente no hay “bandejas” con ECDF como con los histogtwigs. Si G es su función de distribución empírica formada usando el vector de datos Z, G (x) es literalmente el número de ocurrencias de Z <= x, dividido por len (Z). Esto no requiere "binning" para determinar. Por lo tanto, hay un sentido en el que el ECDF retiene toda la información posible sobre un conjunto de datos (ya que debe retener el conjunto de datos completo para los cálculos), mientras que un histograma realmente pierde cierta información sobre el conjunto de datos al agruparlo. Prefiero trabajar con ecdfs vs histogramas cuando sea posible, por esta razón.

Bono de diversión: si necesita crear un objeto similar a ECDF de huella pequeña a partir de datos de transmisión muy grandes, debe buscar en este documento ” Esqueletos de datos ” de McDermott et al.