Skip to content

Instantly share code, notes, and snippets.

@diamonaj
Created December 3, 2016 15:54
Show Gist options
  • Select an option

  • Save diamonaj/4598b8bc85fae957316790bb7a32cf16 to your computer and use it in GitHub Desktop.

Select an option

Save diamonaj/4598b8bc85fae957316790bb7a32cf16 to your computer and use it in GitHub Desktop.
# NOTE TO INSTRUCTOR: READ ENTIRE FILE BEFORE CLASS
# RUN CODE FROM LINE 49 TO END BEFORE CLASS
# CONSIDER THE FOLLOWING GAME...
# IMAGINE YOU WANT TO ESTIMATE THE UNDERLYING PARAMETER VALUE
# OF A BERNOULLI DISTRIBUTION (i.e., THE PROBABILITY OF A "1"
# INSTEAD OF A "0"...)
# YOU CAN PULL THE "CORR" LEVER AND OBTAIN 50 CORRELATED DATA
# POINTS FROM THE BERNOULLI DISTRIBUTION
# OR YOU CAN PULL THE "UNCORR" LEVER AND OBTAIN 50 UNCORRELATED DATA
# POINTS FROM THE BERNOULLI DISTRIBUTION.
# NOTICE THAT BOTH LEVERS PRODUCE RESULTS THAT HAVE THE SAME
# EXPECTED VALUE AND THEREFORE THE SAME VARIANCE & STD DEVIATION
# BECAUSE IN A BERNOULLI DISTRIBUTION, THE MEAN DETERMINES THE VARIANCE
# WHICH IS A BETTER CHOICE (TO LEARN ABOUT THE TRUE PARAMETER VALUE)?
corr.lever()
uncorr.lever()
sd(corr.lever())
sd(uncorr.lever())
plot(density(corr.lever()))
plot(density(uncorr.lever()))
# There are only 6 different outcomes you can get.
yy <- c()
for(i in 1:10000) {yy[i] <- mean(corr.lever())}
hist(yy)
# run 1000 experiments (simulated trials)
for(i in 1:1000)
{
storage.corr[i] <- mean(corr.lever())
}
for(i in 1:1000)
{
storage.uncorr[i] <- mean(uncorr.lever())
}
# Was the standard deviation of the means derived from uncorrelated data
# LOWER than the standard deviation of the means derived from correlated data?
# Across all the simulated trials (for the whole shebang)?
sd(storage.uncorr) < sd(storage.corr)
# classic standard error formula: sqrt( p*(1-p) ) / sqrt(n)
cat("uncorrelated data standard deviation:", sd(storage.uncorr))
# classic standard error formula does not work for correlated data
cat("correlated data standard deviation:", sd(storage.corr)) # standard error
# CODE BELOW:
# RUN BEFORE CLASS TO LOAD FUNCTIONS IN MEMORY.
# SHOW STUDENTS AFTER GAME ENDS.
corr.lever <- function()
{
return(c(
rep(rbinom(n = 1, size = 1, prob = 0.5), 10),
rep(rbinom(n = 1, size = 1, prob = 0.5), 10),
rep(rbinom(n = 1, size = 1, prob = 0.5), 10),
rep(rbinom(n = 1, size = 1, prob = 0.5), 10),
rep(rbinom(n = 1, size = 1, prob = 0.5), 10)))
}
# "PULL THE *UNCORR* LEVER"
# uncorrelated data
uncorr.lever <- function()
{
return(rbinom(n = 50, size = 1, prob = 0.5))
}
# WHICH LEVER GIVES YOU BETTER INFORMATION?
# WHY?
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment