2011-10-25 12 views
5

Estoy dibujando algunas muestras de exponential distribution. En mi primer experimento, estoy dibujando 1000 muestras y para el segundo, estoy dibujando 10,000 muestras de esta distribución. (con numpy.random.exponential)¿Cómo puedo trazar la estimación de máxima probabilidad en Python?

Me gustaría comparar visualmente la diferencia de la estimación de máxima verosimilitud de mis dos experimentos. (Dado que esta es una distribución exponencial, el MLE será solo una muestra de media, por lo que con mi segundo experimento, el MLE debería estar más cerca de la densidad real).

¿Cómo puedo hacer una comparación de este tipo en Python? Sé cómo trazar gráficos en matplotlib, pero aquí no sé qué tipo de gráfico debería usar.

+3

No creo entender. Tienes dos MLE. Eso es dos números. No hay mucha información que pueda obtener con un gráfico en lugar de solo mirar los números en sí. Alternativamente, puede calcular los MLE para un conjunto de tamaños de muestra y tamaño de diagrama frente a MLE. Luego, compáralo con el valor real. * Esto * podría ser mejor. – Avaris

+0

Perdón por la confusión. Quiero trazar algo como esto: http://nipy.sourceforge.net/nitime/_images/ar_est_2vars_01.png. Quiero mostrar la densidad verdadera y mis versiones estimadas. –

+0

Todavía hay confusión, pero creo que se trata de las matemáticas. Se supone que MLE te da una estimación para una * variable individual *, no una densidad. Pero para una distribución exponencial, puede usar la estimación de la media para obtener una * densidad estimada *, ya que existe una relación directa entre la media y el parámetro de densidad. ¿Es esto lo que estabas buscando? – Avaris

Respuesta

4

Teniendo en cuenta las observaciones de los comentarios, supongo que algo como lo siguiente es lo que está buscando:

import numpy as np 
import matplotlib.pyplot as plt 

def plot_exponential_density(mu, xmax, fmt, label): 
     x = np.arange(0, xmax, 0.1) 
     y = 1/mu * np.exp(-x/mu) 
     plt.plot(x, y, fmt, label=label) 

def sample_and_plot(N, color): 
     # first sample N valus 
     samples = np.zeros((N,1)) 
     for i in range(0,N): 
       samples[i] = np.random.exponential() 

     # determine the mean 
     mu = np.mean(samples) 
     print("N = %d ==> mu = %f" % (N, mu)) 

     # plot a histogram of the samples 
     (n, bins) = np.histogram(samples, bins=int(np.sqrt(N)), density=True) 
     plt.step(bins[:-1], n, color=color, label="samples N = %d" % N) 

     xmax = max(bins) 

     # plot the density according to the estimated mean 
     plot_exponential_density(mu, xmax, color + "--", label="estimated density N = %d" % N) 

     return xmax 


# sample 100 values, draw a histogram, and the density according to 
# the estimated mean 
xmax1 = sample_and_plot(100, 'r') 
# do the same for 1000 samples 
xmax2 = sample_and_plot(10000, 'b') 

# finally plot the true density 
plot_exponential_density(1, max(xmax1, xmax2), 'k', "true density") 

# add a legend 
plt.legend() 

# and show the plot 
plt.show() 

enter image description here

Solía ​​100 y 10.000 muestras, ya que con 1.000 muestras de la estimación ya es bastante bueno Pero aún con solo 100 muestras, estoy algo sorprendido de cuán buena es la estimación de la media y, por lo tanto, de la densidad. Dado solo el histograma sin el conocimiento de que las muestras se extraen de una distribución exponencial, no estoy seguro de reconocer una distribución exponencial aquí ...

Cuestiones relacionadas