Example R programs and commands
22. Binomial and hypergeometric distributions
# All lines preceded by the "#" character are my comments.
# All other left-justified lines are my input.
# All other indented lines are the R program output.
# BINOMIAL probability density
#
# Example: probability of x=5 Heads in N=7 tosses of a fair coin.
x<-5 # event: number of Heads
N<-7 # action: number of tosses
prob<-0.5 # situation: probability of "Head" in one toss for a fair coin
dbinom(x, N, prob) # probability of exactly x Heads in N tosses
# Complete list of probabilities for x=0,1,2,...,N:
dbinom(0:N, N, prob) # probabilities of x Heads, all x=0,1,...,N
# Cumulative binomial density function:
pbinom(x, N, prob) # probability of x or fewer Heads in N tosses
pbinom(x, N, prob, lower.tail=FALSE) # probability of more than x Heads
1-pbinom(x, N, prob) # ...same result as the previous line.
# CHI-SQUARED test for binomial density given observed frequencies.
#
# CASE 1: test with a known "prob"
#
N <- 4 # number of trials, == max number of successes
fobs <- c(30,51,33,10,2) # observed frequencies at x=0,1,...,N
prob <- 0.30 # H0 expected success probability
phat <- dbinom(0:N, N, prob) # H0 expected probabilities (NOT frequencies)
chisq.test(fobs,p=phat) # uses DF=N, appropriate for known prob.
phat <- dbinom(0:N, N, 0.40) # H0 expected probabilities for "wrong" prob
chisq.test(fobs,p=phat) # uses DF=N, appropriate for known prob.
#
# CASE 2: test with unknown "prob"
#
N <- 4 # number of trials, == max number of successes
fobs <- c(30,51,31,11,2) # observed frequencies at x=0,1,...,N
tot <- sum(fobs); # total number of observations
pbar <- sum( (0:N)*fobs )/tot # average number of successes per trial
prob <- pbar/N; prob # compute and show the H0 estimated Prob(success)
phat <- dbinom(0:N, N, prob) # H0 expected probabilities (NOT frequencies)
chi2<-chisq.test(fobs,p=phat)$statistic # extract the Chi-squared value
pchisq(chi2,N-1,lower.tail=FALSE) # p-value with DF=N-1 for computed "prob"
# Repeat with a perfect uniform frequency table, not binomial:
N <- 4 # number of trials, == max number of successes
fobs <- rep(12,N+1) # observed frequencies at x=0,1,...,N
tot <- sum(fobs); # total number of observations
pbar <- sum( (0:N)*fobs )/tot # average number of successes per trial
prob <- pbar/N; prob # compute and show the H0 estimated Prob(success)
phat <- dbinom(0:N, N, prob) # H0 expected probabilities (NOT frequencies)
chi2<-chisq.test(fobs,p=phat)$statistic # extract the Chi-squared value
pchisq(chi2,N-1,lower.tail=FALSE) # p-value with DF=N-1 for computed "prob"
# HYPERGEOMETRIC probability density
#
# Example: probability of drawing x=5 white balls when k=7 balls are drawn
# from an urn containing m=10 white and n=15 black balls.
x<-5 # event: get x white balls
k<-7 # action: draw k balls without replacement
m<-10 # situation: m white balls in the urn
n<-15 # situation: n black balls in the urn
dhyper(x, m,n, k) # probability of exactly x white balls among the k drawn
# Complete list of probabilities for x=0,1,2,...,k:
dhyper(0:k, m,n, k) # probabilities of x white, all x=0,1,...,k
# Cumulative hypergeometric density function:
phyper(x, m,n, k) # probability of x or fewer white balls among the k drawn
phyper(x, m,n, k, lower.tail=FALSE) # probability of more than x white balls
1-phyper(x, m,n, k) # ...same result as the previous line.