H0H0H′0
CẬP NHẬT
Đây là cuộc biểu tình. Tôi tạo ra 100 mẫu của 100 quan sát từ phân phối Gaussian và Poisson, sau đó thu được 100 giá trị p để kiểm tra tính chuẩn của từng mẫu. Vì vậy, tiền đề của câu hỏi là nếu các giá trị p là từ phân phối đồng đều, thì nó chứng minh rằng giả thuyết null là chính xác, đó là một tuyên bố mạnh mẽ hơn so với "không từ chối" thông thường trong suy luận thống kê. Vấn đề là "các giá trị p là từ đồng phục" là một giả thuyết mà bạn phải kiểm tra bằng cách nào đó.
Trong ảnh (hàng đầu tiên) bên dưới tôi đang hiển thị biểu đồ của các giá trị p từ một phép thử tính quy tắc cho mẫu Guassian và Poisson, và bạn có thể thấy rằng thật khó để nói liệu cái này có đồng nhất hơn cái kia không. Đó là điểm chính của tôi.
Hàng thứ hai hiển thị một trong các mẫu từ mỗi phân phối. Các mẫu tương đối nhỏ, vì vậy bạn thực sự không thể có quá nhiều thùng. Trên thực tế, mẫu Gaussian đặc biệt này hoàn toàn không giống với Gaussian trên biểu đồ.
Ở hàng thứ ba, tôi đang hiển thị các mẫu kết hợp gồm 10.000 quan sát cho mỗi phân phối trên biểu đồ. Ở đây, bạn có thể có nhiều thùng hơn, và hình dạng rõ ràng hơn.
Cuối cùng, tôi chạy thử nghiệm tính quy tắc tương tự và nhận giá trị p cho các mẫu kết hợp và nó từ chối tính quy tắc cho Poisson, trong khi không từ chối đối với Gaussian. Các giá trị p là: [0.45348631] [0.]
Tất nhiên, đây không phải là một bằng chứng, nhưng việc chứng minh ý tưởng rằng bạn nên chạy thử nghiệm tương tự trên mẫu kết hợp, thay vì cố gắng phân tích phân phối giá trị p từ các mẫu con.
Đây là mã Python:
import numpy as np
from scipy import stats
from matplotlib import pyplot as plt
def pvs(x):
pn = x.shape[1]
pvals = np.zeros(pn)
for i in range(pn):
pvals[i] = stats.jarque_bera(x[:,i])[1]
return pvals
n = 100
pn = 100
mu, sigma = 1, 2
np.random.seed(0)
x = np.random.normal(mu, sigma, size=(n,pn))
x2 = np.random.poisson(15, size=(n,pn))
print(x[1,1])
pvals = pvs(x)
pvals2 = pvs(x2)
x_f = x.reshape((n*pn,1))
pvals_f = pvs(x_f)
x2_f = x2.reshape((n*pn,1))
pvals2_f = pvs(x2_f)
print(pvals_f,pvals2_f)
print(x_f.shape,x_f[:,0])
#print(pvals)
plt.figure(figsize=(9,9))
plt.subplot(3,2,1)
plt.hist(pvals)
plt.gca().set_title('True Normal')
plt.gca().set_ylabel('p-value')
plt.subplot(3,2,2)
plt.hist(pvals2)
plt.gca().set_title('Poisson')
plt.gca().set_ylabel('p-value')
plt.subplot(3,2,3)
plt.hist(x[:,0])
plt.gca().set_title('a small sample')
plt.gca().set_ylabel('x')
plt.subplot(3,2,4)
plt.hist(x2[:,0])
plt.gca().set_title('a small Sample')
plt.gca().set_ylabel('x')
plt.subplot(3,2,5)
plt.hist(x_f[:,0],100)
plt.gca().set_title('Full Sample')
plt.gca().set_ylabel('x')
plt.subplot(3,2,6)
plt.hist(x2_f[:,0],100)
plt.gca().set_title('Full Sample')
plt.gca().set_ylabel('x')
plt.show()