# False-positive rate with no true effect: 3 mice/group, 20 cells/mouse, mouse SD = cell SD = 1. 10,000 runs.
import numpy as np
from scipy import stats
rng = np.random.default_rng(1)
runs, hits_cell, hits_mouse = 10_000, 0, 0
for _ in range(runs):
    mu = rng.normal(0, 1, (2, 3))
    cells = mu[..., None] + rng.normal(0, 1, (2, 3, 20))
    hits_cell += stats.ttest_ind(cells[1].ravel(), cells[0].ravel(), equal_var=False).pvalue < 0.05
    hits_mouse += stats.ttest_ind(cells[1].mean(1), cells[0].mean(1), equal_var=False).pvalue < 0.05
print(f"runs = {runs}; false positives: cells as n {hits_cell / runs:.1%}, mouse means {hits_mouse / runs:.1%}")
