Class Activity 2/22/13
Last class, we used this cryptic function to test our random number generators:
def test(x): ''' Input: x - an array of purported independent uniform(0, 1) deviates Returns: a mysterious p-value. ''' ntable = 100 counts, _, _ = np.histogram2d(x[:-1], x[1:], bins=ntable, range=[(0, 1), (0, 1)], ) chisq, p_val = scipy.stats.chisquare(counts.flatten()) return p_val
It turns out we were computing the p-value of a certain summary statistic of our random draws. Now that we know what p-values are, we are going to explore this further.
On the IPython server, 'import our_random' will give you access to this test function as well as 3 different functions (random_1, random_2, and random_3) that take an argument n and claim to return an array of n independent uniform(0, 1) deviates.
1. For each of the random_* functions, use our_random.test to compute p-values for 500 different sets of 2000 draws from the function. Plot histograms of the computed p-values. If each function does what it claims to do, what do you expect to see?
- Bonus: Do the same thing for sets of 100 draws and explain the results that you see.
2. For each of the random_* functions, for a range of value of n, plot the median of the p-values for 5 different sets of n draws from the function.
- Explore different ranges of n to try to find interesting behavior.
- If you store your p-values in an appropriately structured numpy array, np.median can be used to conveniently find the median values.
random_1 is an xkcd generator.
random_2 is the 'mod pi' idea from Wednesday.
random_3 is np.random.uniform.