How to use this document. Run the code along with me. Comments start with #. Each section mirrors the live lab; code chunks show the command and its output together.

Today’s plan

  1. Clean environment + setup
  2. Import & understand College data
  3. Prepare variables (coercion)
  4. CI + one-sample t-test for UGradPerThou (\(\mu = 55\))
  5. CI + one-sample t-test for Undergrads
  6. Quick practice
  7. Wrap-up

1 Clean Environment + Setup

rm(list = ls())   # clean environment

# Load the packages
library(dplyr)
library(ggplot2)
library(stats)

In the live session we set the working directory with setwd(...). In this document the data file Collegedata.csv sits next to the .Rmd, so no setwd() is needed.

2 Import & Understand College Data

college <- read.csv("Collegedata.csv")

# In RStudio you would run View(college); here we preview the first rows.
knitr::kable(head(college), caption = "First rows of the College data")
First rows of the College data
State Undergrads Population UGradPerThou
New Jersey 326358 8640218 37.77196
Nevada 100760 2484196 40.56041
Alaska 27463 676301 40.60766
Georgia 378947 9318715 40.66516
Connecticut 142926 3487896 40.97771
Tennessee 250974 6068306 41.35816

3 Prepare Variables (Coercion)

Variable types in R

  1. Numeric (num): numbers with decimals
  2. Integer (int): whole numbers (add L to force integer)
  3. Character (chr): text / string values
  4. Factor: categorical variables (stored as integers with labels)
name <- "Subin"
class(name)     # "character"
#> [1] "character"
gender <- factor(c("Male", "Female", "Male"))
class(gender)   # "factor"
#> [1] "factor"
levels(gender)  # "Female" "Male"
#> [1] "Female" "Male"
# Make sure numeric (coercion turns non-numeric values into NA)
college$UGradPerThou <- as.numeric(college$UGradPerThou)
college$Undergrads   <- as.numeric(college$Undergrads)

# Quick check
summary(college$UGradPerThou)
#>    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
#>   37.77   45.73   49.43   51.45   54.46   77.13
summary(college$Undergrads)
#>    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
#>   27463   90659  203641  302136  333223 2172354

4 CI & t-test for UGradPerThou (\(\mu = 55\))

Step 1 — Point estimate (sample mean).

mean(college$UGradPerThou, na.rm = TRUE)
#> [1] 51.45116

Step 2 — One-sample t-test (test whether the mean equals 55).

t.test(college$UGradPerThou, mu = 55)
#> 
#>  One Sample t-test
#> 
#> data:  college$UGradPerThou
#> t = -2.856, df = 49, p-value = 0.006276
#> alternative hypothesis: true mean is not equal to 55
#> 95 percent confidence interval:
#>  48.95411 53.94821
#> sample estimates:
#> mean of x 
#>  51.45116

Step 3 — Extract the 95% CI bounds (for plotting).

ci_ugpt <- t.test(college$UGradPerThou, conf.level = 0.95)$conf.int
ci_ugpt   # lower and upper bounds
#> [1] 48.95411 53.94821
#> attr(,"conf.level")
#> [1] 0.95

Step 4 — Visualize the distribution with CI lines.

ggplot(college, aes(x = UGradPerThou)) +
  geom_histogram(binwidth = 5, fill = "gray", color = "black") +
  geom_vline(xintercept = ci_ugpt, linetype = "dashed", color = "red") +
  labs(
    title = "Undergrads Per Thousand (95% CI)",
    x = "Undergrads Per Thousand",
    y = "Count"
  )

5 CI & t-test for Undergrads

Step 1 — Point estimate.

mean(college$Undergrads, na.rm = TRUE)
#> [1] 302135.9

Step 2 — One-sample t-test (\(H_0\): true mean \(= 300{,}000\)).

t.test(college$Undergrads, mu = 300000)
#> 
#>  One Sample t-test
#> 
#> data:  college$Undergrads
#> t = 0.042133, df = 49, p-value = 0.9666
#> alternative hypothesis: true mean is not equal to 3e+05
#> 95 percent confidence interval:
#>  200262.8 404008.9
#> sample estimates:
#> mean of x 
#>  302135.9

Step 3 — Extract 95% CI bounds.

ci_ug <- t.test(college$Undergrads, conf.level = 0.95)$conf.int
ci_ug
#> [1] 200262.8 404008.9
#> attr(,"conf.level")
#> [1] 0.95

Step 4 — Visualize.

ggplot(college, aes(x = Undergrads)) +
  geom_histogram(binwidth = 100000, fill = "lightblue", color = "black") +
  geom_vline(xintercept = ci_ug, linetype = "dashed", color = "red") +
  labs(
    title = "Undergrads (95% Confidence Interval)",
    x = "Undergrads",
    y = "Count"
  )

6 Quick Practice

P1) Change the confidence level to 90% and 99% for UGradPerThou. Compare how the interval widths change. Which one is the widest? Why?

ci_90 <- t.test(college$UGradPerThou, conf.level = 0.90)$conf.int
ci_99 <- t.test(college$UGradPerThou, conf.level = 0.99)$conf.int
ci_90
#> [1] 49.36792 53.53440
#> attr(,"conf.level")
#> [1] 0.9
ci_99
#> [1] 48.12111 54.78120
#> attr(,"conf.level")
#> [1] 0.99

P2) Run a 95% CI for Population and plot the histogram with dashed red lines for the lower and upper CI bounds.

ci_pop <- t.test(college$Population, conf.level = 0.95)$conf.int

ggplot(college, aes(x = Population)) +
  geom_histogram(binwidth = 1500000, fill = "lightblue", color = "black") +
  geom_vline(xintercept = ci_pop, linetype = "dashed", color = "red") +
  labs(
    title = "Population (95% CI)",
    x = "Population",
    y = "Count"
  )

P3) Compare one-sample t-tests for UGradPerThou using different null values (50 vs. 60). Report the test statistic, p-value, and conclusion for each. Which null hypothesis is more likely to be rejected?

t.test(college$UGradPerThou, mu = 60)
#> 
#>  One Sample t-test
#> 
#> data:  college$UGradPerThou
#> t = -6.8799, df = 49, p-value = 1.018e-08
#> alternative hypothesis: true mean is not equal to 60
#> 95 percent confidence interval:
#>  48.95411 53.94821
#> sample estimates:
#> mean of x 
#>  51.45116
t.test(college$UGradPerThou, mu = 50)
#> 
#>  One Sample t-test
#> 
#> data:  college$UGradPerThou
#> t = 1.1679, df = 49, p-value = 0.2485
#> alternative hypothesis: true mean is not equal to 50
#> 95 percent confidence interval:
#>  48.95411 53.94821
#> sample estimates:
#> mean of x 
#>  51.45116

7 Wrap-up

Key takeaways

  • Use t.test(x, conf.level = ...) for a CI; t.test(x, mu = ...) for a one-sample test.
  • Extract the CI with $conf.int, then draw vertical lines on histograms.
  • Always check coercion to numeric and NA counts before inference.
  • Wider CIs correspond to higher confidence levels.
  • Smaller p-values give stronger evidence against \(H_0\).
  • Store intermediate results before using them in plots.
LS0tCnRpdGxlOiAiTGFiIDcg4oCUIENvbmZpZGVuY2UgSW50ZXJ2YWxzICYgT25lLVNhbXBsZSB0LXRlc3QiCnN1YnRpdGxlOiAiUXVhbnRpdGF0aXZlIFJlYXNvbmluZyDCtyBMQUIgNDEzIgphdXRob3I6ICJJbnN0cnVjdG9yOiBTdWJpbiBOYSIKZGF0ZTogIk9jdG9iZXIgMjIsIDIwMjUiCm91dHB1dDoKICBodG1sX2RvY3VtZW50OgogICAgdGhlbWU6IGZsYXRseQogICAgaGlnaGxpZ2h0OiB0YW5nbwogICAgdG9jOiB0cnVlCiAgICB0b2NfZmxvYXQ6IHRydWUKICAgIHRvY19kZXB0aDogMgogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlCiAgICBkZl9wcmludDogcGFnZWQKICAgIGNvZGVfZG93bmxvYWQ6IHRydWUKLS0tCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KAogIGVjaG8gPSBUUlVFLCBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRSwKICBmaWcuYWxpZ24gPSAiY2VudGVyIiwgZmlnLndpZHRoID0gNywgZmlnLmhlaWdodCA9IDQuMiwKICBjb21tZW50ID0gIiM+IgopCmBgYAoKPiAqKkhvdyB0byB1c2UgdGhpcyBkb2N1bWVudC4qKiBSdW4gdGhlIGNvZGUgYWxvbmcgd2l0aCBtZS4gQ29tbWVudHMgc3RhcnQgd2l0aCBgI2AuCj4gRWFjaCBzZWN0aW9uIG1pcnJvcnMgdGhlIGxpdmUgbGFiOyBjb2RlIGNodW5rcyBzaG93IHRoZSBjb21tYW5kIGFuZCBpdHMgb3V0cHV0IHRvZ2V0aGVyLgoKKipUb2RheSdzIHBsYW4qKgoKMS4gQ2xlYW4gZW52aXJvbm1lbnQgKyBzZXR1cAoyLiBJbXBvcnQgJiB1bmRlcnN0YW5kIENvbGxlZ2UgZGF0YQozLiBQcmVwYXJlIHZhcmlhYmxlcyAoY29lcmNpb24pCjQuIENJICsgb25lLXNhbXBsZSAqdCotdGVzdCBmb3IgYFVHcmFkUGVyVGhvdWAgKCRcbXUgPSA1NSQpCjUuIENJICsgb25lLXNhbXBsZSAqdCotdGVzdCBmb3IgYFVuZGVyZ3JhZHNgCjYuIFF1aWNrIHByYWN0aWNlCjcuIFdyYXAtdXAKCi0tLQoKIyBDbGVhbiBFbnZpcm9ubWVudCArIFNldHVwCgpgYGB7ciBjbGVhbi1zZXR1cH0Kcm0obGlzdCA9IGxzKCkpICAgIyBjbGVhbiBlbnZpcm9ubWVudAoKIyBMb2FkIHRoZSBwYWNrYWdlcwpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoc3RhdHMpCmBgYAoKPiBJbiB0aGUgbGl2ZSBzZXNzaW9uIHdlIHNldCB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2l0aCBgc2V0d2QoLi4uKWAuIEluIHRoaXMKPiBkb2N1bWVudCB0aGUgZGF0YSBmaWxlIGBDb2xsZWdlZGF0YS5jc3ZgIHNpdHMgbmV4dCB0byB0aGUgYC5SbWRgLCBzbyBubwo+IGBzZXR3ZCgpYCBpcyBuZWVkZWQuCgojIEltcG9ydCAmIFVuZGVyc3RhbmQgQ29sbGVnZSBEYXRhCgpgYGB7ciBpbXBvcnR9CmNvbGxlZ2UgPC0gcmVhZC5jc3YoIkNvbGxlZ2VkYXRhLmNzdiIpCgojIEluIFJTdHVkaW8geW91IHdvdWxkIHJ1biBWaWV3KGNvbGxlZ2UpOyBoZXJlIHdlIHByZXZpZXcgdGhlIGZpcnN0IHJvd3MuCmtuaXRyOjprYWJsZShoZWFkKGNvbGxlZ2UpLCBjYXB0aW9uID0gIkZpcnN0IHJvd3Mgb2YgdGhlIENvbGxlZ2UgZGF0YSIpCmBgYAoKIyBQcmVwYXJlIFZhcmlhYmxlcyAoQ29lcmNpb24pCgoqKlZhcmlhYmxlIHR5cGVzIGluIFIqKgoKMS4gKipOdW1lcmljKiogKGBudW1gKTogbnVtYmVycyB3aXRoIGRlY2ltYWxzCjIuICoqSW50ZWdlcioqIChgaW50YCk6IHdob2xlIG51bWJlcnMgKGFkZCBgTGAgdG8gZm9yY2UgaW50ZWdlcikKMy4gKipDaGFyYWN0ZXIqKiAoYGNocmApOiB0ZXh0IC8gc3RyaW5nIHZhbHVlcwo0LiAqKkZhY3RvcioqOiBjYXRlZ29yaWNhbCB2YXJpYWJsZXMgKHN0b3JlZCBhcyBpbnRlZ2VycyB3aXRoIGxhYmVscykKCmBgYHtyIHR5cGVzfQpuYW1lIDwtICJTdWJpbiIKY2xhc3MobmFtZSkgICAgICMgImNoYXJhY3RlciIKCmdlbmRlciA8LSBmYWN0b3IoYygiTWFsZSIsICJGZW1hbGUiLCAiTWFsZSIpKQpjbGFzcyhnZW5kZXIpICAgIyAiZmFjdG9yIgpsZXZlbHMoZ2VuZGVyKSAgIyAiRmVtYWxlIiAiTWFsZSIKYGBgCgpgYGB7ciBjb2VyY2V9CiMgTWFrZSBzdXJlIG51bWVyaWMgKGNvZXJjaW9uIHR1cm5zIG5vbi1udW1lcmljIHZhbHVlcyBpbnRvIE5BKQpjb2xsZWdlJFVHcmFkUGVyVGhvdSA8LSBhcy5udW1lcmljKGNvbGxlZ2UkVUdyYWRQZXJUaG91KQpjb2xsZWdlJFVuZGVyZ3JhZHMgICA8LSBhcy5udW1lcmljKGNvbGxlZ2UkVW5kZXJncmFkcykKCiMgUXVpY2sgY2hlY2sKc3VtbWFyeShjb2xsZWdlJFVHcmFkUGVyVGhvdSkKc3VtbWFyeShjb2xsZWdlJFVuZGVyZ3JhZHMpCmBgYAoKIyBDSSAmIHQtdGVzdCBmb3IgYFVHcmFkUGVyVGhvdWAgKCRcbXUgPSA1NSQpCgoqKlN0ZXAgMSDigJQgUG9pbnQgZXN0aW1hdGUgKHNhbXBsZSBtZWFuKS4qKgoKYGBge3IgdWdwdC1tZWFufQptZWFuKGNvbGxlZ2UkVUdyYWRQZXJUaG91LCBuYS5ybSA9IFRSVUUpCmBgYAoKKipTdGVwIDIg4oCUIE9uZS1zYW1wbGUgKnQqLXRlc3QqKiAodGVzdCB3aGV0aGVyIHRoZSBtZWFuIGVxdWFscyA1NSkuCgpgYGB7ciB1Z3B0LXR0ZXN0fQp0LnRlc3QoY29sbGVnZSRVR3JhZFBlclRob3UsIG11ID0gNTUpCmBgYAoKKipTdGVwIDMg4oCUIEV4dHJhY3QgdGhlIDk1JSBDSSBib3VuZHMqKiAoZm9yIHBsb3R0aW5nKS4KCmBgYHtyIHVncHQtY2l9CmNpX3VncHQgPC0gdC50ZXN0KGNvbGxlZ2UkVUdyYWRQZXJUaG91LCBjb25mLmxldmVsID0gMC45NSkkY29uZi5pbnQKY2lfdWdwdCAgICMgbG93ZXIgYW5kIHVwcGVyIGJvdW5kcwpgYGAKCioqU3RlcCA0IOKAlCBWaXN1YWxpemUgdGhlIGRpc3RyaWJ1dGlvbiB3aXRoIENJIGxpbmVzLioqCgpgYGB7ciB1Z3B0LXBsb3R9CmdncGxvdChjb2xsZWdlLCBhZXMoeCA9IFVHcmFkUGVyVGhvdSkpICsKICBnZW9tX2hpc3RvZ3JhbShiaW53aWR0aCA9IDUsIGZpbGwgPSAiZ3JheSIsIGNvbG9yID0gImJsYWNrIikgKwogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IGNpX3VncHQsIGxpbmV0eXBlID0gImRhc2hlZCIsIGNvbG9yID0gInJlZCIpICsKICBsYWJzKAogICAgdGl0bGUgPSAiVW5kZXJncmFkcyBQZXIgVGhvdXNhbmQgKDk1JSBDSSkiLAogICAgeCA9ICJVbmRlcmdyYWRzIFBlciBUaG91c2FuZCIsCiAgICB5ID0gIkNvdW50IgogICkKYGBgCgojIENJICYgdC10ZXN0IGZvciBgVW5kZXJncmFkc2AKCioqU3RlcCAxIOKAlCBQb2ludCBlc3RpbWF0ZS4qKgoKYGBge3IgdWctbWVhbn0KbWVhbihjb2xsZWdlJFVuZGVyZ3JhZHMsIG5hLnJtID0gVFJVRSkKYGBgCgoqKlN0ZXAgMiDigJQgT25lLXNhbXBsZSAqdCotdGVzdCoqICgkSF8wJDogdHJ1ZSBtZWFuICQ9IDMwMHssfTAwMCQpLgoKYGBge3IgdWctdHRlc3R9CnQudGVzdChjb2xsZWdlJFVuZGVyZ3JhZHMsIG11ID0gMzAwMDAwKQpgYGAKCioqU3RlcCAzIOKAlCBFeHRyYWN0IDk1JSBDSSBib3VuZHMuKioKCmBgYHtyIHVnLWNpfQpjaV91ZyA8LSB0LnRlc3QoY29sbGVnZSRVbmRlcmdyYWRzLCBjb25mLmxldmVsID0gMC45NSkkY29uZi5pbnQKY2lfdWcKYGBgCgoqKlN0ZXAgNCDigJQgVmlzdWFsaXplLioqCgpgYGB7ciB1Zy1wbG90fQpnZ3Bsb3QoY29sbGVnZSwgYWVzKHggPSBVbmRlcmdyYWRzKSkgKwogIGdlb21faGlzdG9ncmFtKGJpbndpZHRoID0gMTAwMDAwLCBmaWxsID0gImxpZ2h0Ymx1ZSIsIGNvbG9yID0gImJsYWNrIikgKwogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IGNpX3VnLCBsaW5ldHlwZSA9ICJkYXNoZWQiLCBjb2xvciA9ICJyZWQiKSArCiAgbGFicygKICAgIHRpdGxlID0gIlVuZGVyZ3JhZHMgKDk1JSBDb25maWRlbmNlIEludGVydmFsKSIsCiAgICB4ID0gIlVuZGVyZ3JhZHMiLAogICAgeSA9ICJDb3VudCIKICApCmBgYAoKIyBRdWljayBQcmFjdGljZQoKKipQMSkgQ2hhbmdlIHRoZSBjb25maWRlbmNlIGxldmVsIHRvIDkwJSBhbmQgOTklIGZvciBgVUdyYWRQZXJUaG91YC4qKgpDb21wYXJlIGhvdyB0aGUgaW50ZXJ2YWwgd2lkdGhzIGNoYW5nZS4gV2hpY2ggb25lIGlzIHRoZSB3aWRlc3Q/IFdoeT8KCmBgYHtyIHAxfQpjaV85MCA8LSB0LnRlc3QoY29sbGVnZSRVR3JhZFBlclRob3UsIGNvbmYubGV2ZWwgPSAwLjkwKSRjb25mLmludApjaV85OSA8LSB0LnRlc3QoY29sbGVnZSRVR3JhZFBlclRob3UsIGNvbmYubGV2ZWwgPSAwLjk5KSRjb25mLmludApjaV85MApjaV85OQpgYGAKCioqUDIpIFJ1biBhIDk1JSBDSSBmb3IgYFBvcHVsYXRpb25gIGFuZCBwbG90IHRoZSBoaXN0b2dyYW0qKiB3aXRoIGRhc2hlZCByZWQgbGluZXMKZm9yIHRoZSBsb3dlciBhbmQgdXBwZXIgQ0kgYm91bmRzLgoKYGBge3IgcDJ9CmNpX3BvcCA8LSB0LnRlc3QoY29sbGVnZSRQb3B1bGF0aW9uLCBjb25mLmxldmVsID0gMC45NSkkY29uZi5pbnQKCmdncGxvdChjb2xsZWdlLCBhZXMoeCA9IFBvcHVsYXRpb24pKSArCiAgZ2VvbV9oaXN0b2dyYW0oYmlud2lkdGggPSAxNTAwMDAwLCBmaWxsID0gImxpZ2h0Ymx1ZSIsIGNvbG9yID0gImJsYWNrIikgKwogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IGNpX3BvcCwgbGluZXR5cGUgPSAiZGFzaGVkIiwgY29sb3IgPSAicmVkIikgKwogIGxhYnMoCiAgICB0aXRsZSA9ICJQb3B1bGF0aW9uICg5NSUgQ0kpIiwKICAgIHggPSAiUG9wdWxhdGlvbiIsCiAgICB5ID0gIkNvdW50IgogICkKYGBgCgoqKlAzKSBDb21wYXJlIG9uZS1zYW1wbGUgKnQqLXRlc3RzIGZvciBgVUdyYWRQZXJUaG91YCB1c2luZyBkaWZmZXJlbnQgbnVsbCB2YWx1ZXMqKgooNTAgdnMuIDYwKS4gUmVwb3J0IHRoZSB0ZXN0IHN0YXRpc3RpYywgKnAqLXZhbHVlLCBhbmQgY29uY2x1c2lvbiBmb3IgZWFjaC4KV2hpY2ggbnVsbCBoeXBvdGhlc2lzIGlzIG1vcmUgbGlrZWx5IHRvIGJlIHJlamVjdGVkPwoKYGBge3IgcDN9CnQudGVzdChjb2xsZWdlJFVHcmFkUGVyVGhvdSwgbXUgPSA2MCkKdC50ZXN0KGNvbGxlZ2UkVUdyYWRQZXJUaG91LCBtdSA9IDUwKQpgYGAKCiMgV3JhcC11cAoKKipLZXkgdGFrZWF3YXlzKioKCi0gVXNlIGB0LnRlc3QoeCwgY29uZi5sZXZlbCA9IC4uLilgIGZvciBhIENJOyBgdC50ZXN0KHgsIG11ID0gLi4uKWAgZm9yIGEgb25lLXNhbXBsZSB0ZXN0LgotIEV4dHJhY3QgdGhlIENJIHdpdGggYCRjb25mLmludGAsIHRoZW4gZHJhdyB2ZXJ0aWNhbCBsaW5lcyBvbiBoaXN0b2dyYW1zLgotIEFsd2F5cyBjaGVjayBjb2VyY2lvbiB0byBudW1lcmljIGFuZCBOQSBjb3VudHMgKipiZWZvcmUqKiBpbmZlcmVuY2UuCi0gV2lkZXIgQ0lzIGNvcnJlc3BvbmQgdG8gaGlnaGVyIGNvbmZpZGVuY2UgbGV2ZWxzLgotIFNtYWxsZXIgKnAqLXZhbHVlcyBnaXZlIHN0cm9uZ2VyIGV2aWRlbmNlIGFnYWluc3QgJEhfMCQuCi0gU3RvcmUgaW50ZXJtZWRpYXRlIHJlc3VsdHMgYmVmb3JlIHVzaW5nIHRoZW0gaW4gcGxvdHMuCg==