The following code snippet allows you to substitute values and obtain a confidence interval based on the central limit theorem.

# Code snippet to construct a confidence interval
  xbar = 100  # Sample Mean
  sd   = 10   # Population Standard Deviation
  n    = 25   # Sample size
  CL   = .95  # Required Confidence Level
  
  zstar <- qnorm(CL+.5*(1-CL)) # Obtain Z-score for this confidence level
  sd.xbar <- sd/sqrt(n)        # Compute standard of sample mean 
  ME <- zstar * sd.xbar        # Compute margin of error
  
  lb <- xbar - ME              # Compute lower bound of CI
  ub <- xbar + ME              # Compute upper bound of CI
  
  CI <- c(CL,lb,xbar,ub,ME)    # Put our results in a vector

  names(CI) <- c("Confidence Level","Lower Bound","Xbar","Upper Bound",
                 "Margin of Error") # Name the vector elements
  CI                           # Display the vector
## Confidence Level      Lower Bound             Xbar      Upper Bound 
##         0.950000        96.080072       100.000000       103.919928 
##  Margin of Error 
##         3.919928

For example, suppose we had a sample mean of 123 based on a sample of size 50 and we knew that the sample was drawn from a population with a standard deviation of 15. What is a 95% confidence interval for the population mean.

# Code snippet to construct a confidence interval
  xbar = 100  # Sample Mean
  sd   = 10   # Population Standard Deviation
  n    = 25   # Sample size
  CL   = .95  # Required Confidence Level
  
  zstar <- qnorm(CL+.5*(1-CL)) # Obtain Z-score for this confidence level
  sd.xbar <- sd/sqrt(n)        # Compute standard of sample mean 
  ME <- zstar * sd.xbar        # Compute margin of error
  
  lb <- xbar - ME              # Compute lower bound of CI
  ub <- xbar + ME              # Compute upper bound of CI
  
  CI <- c(CL,lb,xbar,ub,ME)    # Put our results in a vector

  names(CI) <- c("Confidence Level","Lower Bound","Xbar","Upper Bound",
                 "Margin of Error") # Name the vector elements
  CI                           # Display the vector
## Confidence Level      Lower Bound             Xbar      Upper Bound 
##         0.950000        96.080072       100.000000       103.919928 
##  Margin of Error 
##         3.919928

We can do the same kind of thing for confidence intervals for proportions.

The Sampling Distribution of the Proportion

We have the basic theoretical results.

The estimates of a proportion \(\hat{p}\) based on a sample of size n is approsimately normal and has the following mean and standard deviation provided that \(n\hat{p} > 10\) and \(n(1-\hat{p}) > 10\).

\[\mu_{\hat{p}} = p\] and \[\sigma_{\hat{p}} = \sqrt{\frac{p(1-p)}{n}}\]

Here is a code snippet. You can replace the values in the first few lines and run the entire snippet.

# Code snippet to compute a confidence interval for a proportion

phat <- .7   # Estimated proportion
CL <- .95    # Required confidence level
n <- 100     # Sample size

zstar <- qnorm(CL+.5*(1-CL))
se.phat <-sqrt(phat*(1-phat)/n)

lb <- phat - zstar * se.phat
ub <- phat + zstar * se.phat

CI <- c(CL,lb,phat,ub)
names(CI) <- c("Confidence Level", "lower Bound","phat","Upper Bound")

CI
## Confidence Level      lower Bound             phat      Upper Bound 
##        0.9500000        0.6101832        0.7000000        0.7898168

For example, suppose we had a sample proportion of .2, a sample size of 1,000 and we wanted an 80% confidence interval for the population proportion.

# Code snippet to compute a confidence interval for a proportion

phat <- .2    # Estimated proportion
CL <- .8      # Required confidence level
n <- 1000     # Sample size

zstar <- qnorm(CL+.5*(1-CL))
se.phat <-sqrt(phat*(1-phat)/n)

lb <- phat - zstar * se.phat
ub <- phat + zstar * se.phat

CI <- c(CL,lb,phat,ub)
names(CI) <- c("Confidence Level", "lower Bound","phat","Upper Bound")

CI
## Confidence Level      lower Bound             phat      Upper Bound 
##        0.8000000        0.1837895        0.2000000        0.2162105