Mi piace la tua domanda, ma purtroppo la mia risposta è NO, non dimostra H0 . La ragione è molto semplice. Come fai a sapere che la distribuzione dei valori di p è uniforme? Probabilmente dovresti eseguire un test di uniformità che ti restituirà il suo valore p e finirai con lo stesso tipo di domanda di inferenza che stavi cercando di evitare, solo un passo più avanti. Invece di guardare il valore p H0 originale , ora guardi un valore p di un altro H'0 sull'uniformità di distribuzione dei valori p originali.
AGGIORNARE
Ecco la dimostrazione. Genero 100 campioni di 100 osservazioni dalla distribuzione gaussiana e di Poisson, quindi ottengo 100 valori p per il test di normalità di ciascun campione. Quindi, la premessa della domanda è che se i valori di p provengono da una distribuzione uniforme, allora dimostra che l'ipotesi nulla è corretta, il che è un'affermazione più forte di un normale "non riesce a rifiutare" nell'inferenza statistica. Il problema è che "i valori di p provengono dall'uniforme" è un'ipotesi stessa, che devi testare in qualche modo.
Nell'immagine (prima riga) di seguito sto mostrando gli istogrammi dei valori p di un test di normalità per il campione di Guassian e Poisson, e puoi vedere che è difficile dire se uno sia più uniforme dell'altro. Questo era il mio punto principale.
La seconda riga mostra uno dei campioni di ciascuna distribuzione. I campioni sono relativamente piccoli, quindi non puoi avere troppi contenitori. In realtà, questo particolare campione gaussiano non sembra affatto molto gaussiano sull'istogramma.
Nella terza riga, sto mostrando i campioni combinati di 10.000 osservazioni per ciascuna distribuzione su un istogramma. Qui puoi avere più contenitori e le forme sono più evidenti.
Infine, eseguo lo stesso test di normalità e ottengo valori p per i campioni combinati e rifiuta la normalità per Poisson, mentre non riesco a rifiutare per Gaussian. I valori p sono: [0.45348631] [0.]
Questa non è una prova, ovviamente, ma la dimostrazione dell'idea che è meglio eseguire lo stesso test sul campione combinato, invece di provare ad analizzare la distribuzione di valori p da sottocampioni.
Ecco il codice 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()