Nothing
#' Central Limit Theorem simulation
#'
#' @details See \url{https://radiant-rstats.github.io/docs/basics/clt.html} for an example in Radiant
#'
#' @param dist Distribution to simulate
#' @param n Sample size
#' @param m Number of samples
#' @param norm_mean Mean for the normal distribution
#' @param norm_sd Standard deviation for the normal distribution
#' @param binom_size Size for the binomial distribution
#' @param binom_prob Probability for the binomial distribution
#' @param unif_min Minimum for the uniform distribution
#' @param unif_max Maximum for the uniform distribution
#' @param expo_rate Rate for the exponential distribution
#'
#' @importFrom stats rexp rnorm runif rbinom
#'
#' @return A list with the name of the Distribution and a matrix of simulated data
#'
#' @examples
#' clt("Uniform", 10, 10, unif_min = 10, unif_max = 20)
#'
#' @export
clt <- function(dist, n = 100, m = 100,
norm_mean = 0, norm_sd = 1,
binom_size = 10, binom_prob = 0.2,
unif_min = 0, unif_max = 1,
expo_rate = 1) {
if (dist == "Uniform") {
sim <- matrix(runif(n * m, min = unif_min, max = unif_max), n, m)
} else if (dist == "Normal") {
sim <- matrix(rnorm(n * m, mean = norm_mean, sd = norm_sd), n, m)
} else if (dist == "Exponential") {
sim <- matrix(rexp(n * m, rate = expo_rate), n, m)
} else if (dist == "Binomial") {
sim <- matrix(rbinom(n * m, size = binom_size, prob = binom_prob), n, m)
}
add_class(list(dist = dist, sim = sim), "clt")
}
#' Plot method for the Central Limit Theorem simulation
#'
#' @details See \url{https://radiant-rstats.github.io/docs/basics/clt.html} for an example in Radiant
#'
#' @param x Return value from \code{\link{clt}}
#' @param stat Statistic to use (sum or mean)
#' @param bins Number of bins to use
#' @param ... further arguments passed to or from other methods
#'
#' @examples
#' clt("Uniform", 100, 100, unif_min = 10, unif_max = 20) %>% plot()
#'
#' @export
plot.clt <- function(x, stat = "sum", bins = 15, ...) {
if (stat == "sum") {
sstat <- data.frame(stat = colSums(x$sim), stringsAsFactors = FALSE)
} else {
sstat <- data.frame(stat = colMeans(x$sim), stringsAsFactors = FALSE)
}
m <- dim(x$sim)[2]
data1 <- data.frame(sample_1 = x$sim[, 1], stringsAsFactors = FALSE)
datam <- data.frame(sample_m = x$sim[, m], stringsAsFactors = FALSE)
plot_list <- list()
plot_list[[1]] <- visualize(data1, xvar = "sample_1", bins = bins, custom = TRUE) +
labs(x = "Histogram of sample #1")
plot_list[[2]] <- visualize(datam, xvar = "sample_m", bins = bins, custom = TRUE) +
labs(x = paste0("Histogram of sample #", m))
plot_list[[3]] <- visualize(sstat, xvar = "stat", bins = bins, custom = TRUE) +
labs(x = ifelse(stat == "sum", "Histogram of sample sums", "Histogram of sample means"))
plot_list[[4]] <- visualize(sstat, xvar = "stat", type = "density", custom = TRUE) +
stat_function(fun = dnorm, args = list(
mean = mean(sstat[[1]]),
sd = sd(sstat[[1]])
), color = "black", size = 1) +
labs(x = ifelse(stat == "sum", "Density of sample sums", "Density of sample means"))
patchwork::wrap_plots(plot_list, ncol = 2) + patchwork::plot_annotation(title = glue("CLT: {x$dist} distribution"))
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.