2011-10-25 20 views
5

Tôi đang vẽ một số mẫu từ một exponential distribution. Trong thử nghiệm đầu tiên của tôi, tôi đang vẽ 1000 mẫu và thứ hai, tôi vẽ 10.000 mẫu từ bản phân phối này. (với numpy.random.exponential)Làm cách nào tôi có thể vẽ ước lượng khả năng tối đa bằng Python

Tôi muốn so sánh trực quan sự khác biệt về ước tính khả năng tối đa của hai thử nghiệm của tôi. (vì đây là phân phối theo cấp số mũ, MLE sẽ chỉ là mẫu trung bình, vì vậy với thử nghiệm thứ hai của tôi, MLE phải gần với mật độ thực).

Tôi làm cách nào để so sánh bằng Python? Tôi biết làm thế nào để vẽ đồ họa trong matplotlib, nhưng ở đây tôi không biết loại đồ họa tôi nên sử dụng.

+3

Tôi không nghĩ là mình hiểu. Bạn có hai MLE. Đó là hai con số. Không có nhiều thông tin bạn có thể nhận được với biểu đồ thay vì chỉ nhìn vào các con số. Ngoài ra, bạn có thể tính toán MLE cho một loạt các kích thước mẫu và kích thước lô so với MLE. Sau đó so sánh nó với giá trị thực tế. * Điều này * có thể tốt hơn. – Avaris

+0

Xin lỗi vì sự nhầm lẫn. Tôi muốn vẽ một cái gì đó như thế này: http://nipy.sourceforge.net/nitime/_images/ar_est_2vars_01.png. Tôi muốn thể hiện mật độ thực sự và các phiên bản ước tính của mình. –

+0

Vẫn còn sự nhầm lẫn, nhưng tôi nghĩ đó là về toán học. MLE được cho là cung cấp cho bạn ước tính cho một biến * duy nhất *, không phải là mật độ. Nhưng đối với phân phối mũ, bạn có thể sử dụng ước tính cho giá trị trung bình để nhận được * mật độ ước tính *, vì có mối quan hệ đơn giản giữa tham số trung bình và mật độ. Đây là những gì bạn đã sau? – Avaris

Trả lời

4

Với những nhận xét trong các ý kiến, tôi đoán cái gì đó như sau đây là những gì bạn đang tìm kiếm:

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

tôi đã sử dụng 100 và 10.000 mẫu, vì với 1.000 mẫu dự toán đã khá tốt. Nhưng vẫn chỉ với 100 mẫu, tôi hơi ngạc nhiên khi ước tính giá trị trung bình và mật độ như thế nào. Chỉ cho biểu đồ mà không biết rằng các mẫu được lấy từ phân phối mũ, tôi không chắc mình có nhận ra phân phối theo cấp số nhân không ...

Các vấn đề liên quan