Dealing With Statistical Uncertainty – Practical
Richard Mott
This exercise explores properties of the Normal and T distributions. You will learn how to use
some of the basic R functions associated with these distributions. You will also write a small R
program to perform a permutation test and a bootstrap confidence interval. Remember that R
will provide help on any function func() by typing the command ?func. You can get help on all
the functions associated with the Normal and T distributions by typing ?Normal and ?TDist
a. Graph the density functions of the standard Normal distribution N(0,1) and the T
distributions on 1, 2, 3, 4, 5, and 10 degrees of freedom (df), between the limits x=-3
and x=+3, on the same plot. At what df does the T distribution become similar to the
Hint: To do this, first generate a dense sequence of x values with the command
x <- seq( -3, 3, 0.01)
Then use this as input to the functions dnorm() and dt()
eg to get the density for T10 use the command
t10 <- dt(x,10)
To plot more than one graph on the same plot, use plot() for the first plot and lines() for
the rest. You can specify different colours use the col=”colour” parameter in lines()].
b. For the Normal distribution with mean 2 and variance 4, (i) what value of x satisfies
Prob(X>x) = 0.05 (hint: use the function qnorm() ) (ii) what is Prob( X< -1) ?
c. Generate a random sample of 10 observations from the above Normal N(2,2)
distribution. (i) Calculate the sample mean and variance. (ii) Using the T distribution,
calculate the 95% confidence interval for the sample mean (what df do you use?). (iii)
Using a one-sample T test, test the null hypothesis Ho: =2.5. (iv) Now generate random
samples of 100 and 10000 observations (save these samples into variables with different
names eg samp10, samp100, samp10000, as you will re-use them later), and compute
the 95% CIs again. What do you notice about the change in width? Repeat your tests of
Ho: =2.5.
d. Generate two samples of 20 observations, one from N(0,1) and the other from N(0.5,1).
(i) Test if their means are different using the two-sample T-test and the Wilcoxon rank
sum test. (ii) Add an outlier, by picking a data point at random and setting it to an
untypical value, such as 5 or- 10. Now repeat your T and Wilcoxon tests.
e. Download the Biochemistry.txt data set and read it into a data frame using
read.table().This data set contains biomarker measurements on about 2000 mice. Check
you have read in the file correctly by printing the column names (with names()) and the
first few lines of the table (with head()). Test if there are GENDER effects present for
Biochem.HDL using the formula interface to t.test(). The formula you will need is
Biochem.HDL ~ GENDER.
f. Perform power calculations using the function power.t.test(). (i) What sample size is
required for a two-sample T test (equal variance=1, and equal numbers of observations
in each group) to detect a difference between Ho: =2.5 and H1: =4.5 at =0.01 and
=0.9. (ii) Using this number of observations, what is the power if H1: =4.0?
g. Perform a permutation test on the two-sample data set in (d) above. You will need to
write an R program to do this. Hint: First convert the data into a form suitable for
permutation. The simplest way is to concatenate the two samples into a single vector,
and create a second vector of the same length with 1’s and 2’s in it corresponding to the
two groups. Then write a function that will accept these vectors as arguments and
compute the difference between the means of the two groups. Now write a loop which
will permute either vector (using the sample(replace=FALSE) function) 1000 times and
call the function you wrote to compute the difference between the permuted groups,
and increment a counter if the difference exceeds the real difference in the unpermuted
data. Finally print out the permutation p-value. Compare it to that from the T test.
h. Now modify your code to compute the bootstrap 95% confidence interval of the
difference in means between the two groups. To make a bootstrap sample, use
sample(replace-TRUE). Note that you must not permute the data. You will need to
record the difference in means of the two groups at each bootstrap iteration in a vector.
Then, at the end, sort the vector to find the 95% CI (this corresponds to finding the
bottom 2.5% and top 2.5%)
i. This exercise teaches you about simulation, in the context of a contingency table
analysis. You will simulate data from a simple one-dimensional contingency table under
the null hypothesis, compute the log-likelihood ratio and compare it to the asymptotic
chi-squared distribution. (If you get stuck look at the function contingency.table() in
i. Simulate N=200 observations from a multinomial distribution with K=10 classes
under the null hypothesis that all class are equally likely. Hint: type
?Multinomial to find out how to do this.
ii. Compute the log-likelihood ratio L = 2  O log(O/E)
iii. Repeat this say 10000 times.
iv. Compare the distribution of L to the chi-square on K-1 df, eq with a qqplot
v. Also, compare the distribution of the chi-square statistic  (O-E)2 /E
vi. What happens to the aymptotics when the sample size N is smaller (you will
have to make your code handle zero counts)?