R/scratchpad_ggdist.R

Defines functions scratchpad

scratchpad <- function() {
  
  # Libraries
  library(ggplot2)
  library(ggdist)
  library(distributional)
  
  
  # Population params for desired data
  population <- data.frame(
    condition = c("Group1", "Group2"),
    mu = c(100, 115),
    sigma = c(15, 15),
    n = c(50, 45)
  )
  
  
  # Simulate raw data and calculate summary data
  raw_data <- NULL
  summary_data <- NULL
  
  for (i in 1:nrow(population)) {
    this_condition <- data.frame(
      condition = rep(population[i, "condition"], times = population[i, "n"]),
      outcome = rnorm(
        n = population[i, "n"], 
        mean = population[i, "mu"],
        sd = population[i, "sigma"]
      )
    )
  
    summary_data <- rbind(
      summary_data,
      data.frame(
        condition = c(population[i, "condition"]),
        mean = mean(this_condition$outcome),
        sd = sd(this_condition$outcome),
        se = sd(this_condition$outcome) / sqrt(nrow(this_condition)),
        n = nrow(this_condition),
        df = nrow(this_condition) - 1
      )
    )
  
    raw_data <- rbind(
      raw_data,
      this_condition
    )
  }
  
  
  # Difference between groups
  diff_m <- summary_data[1, "mean"] - summary_data[2, "mean"]
  diff_df <- sum(summary_data$df)
  diff_se <- sqrt(sum(summary_data$sd^2 / summary_data$n))
  
  summary_data[3, c("mean", "se", "df")] <- c(
    diff_m,
    diff_se,
    diff_df
  )
  summary_data[3, "condition"] <- "Difference"
  
  summary_data$nudge <- c(0.3, 0.3, 0)
  
  
  
  # Fix condition factor to ensure difference is plotted last
  summary_data$condition <- factor(
    summary_data$condition, 
    levels = summary_data$condition
  )
  raw_data$condition <- factor(
    raw_data$condition,
    levels = summary_data$condition
  )
  
  
  # Now the plot
  myplot <- ggplot2::ggplot(data = summary_data)
  
  
  myplot <- myplot + ggdist::stat_dist_halfeye(
    data = summary_data,
    ggplot2::aes(
      x = condition, 
      y = mean,
      dist = distributional::dist_student_t(
        df = df, 
        mu = mean, 
        sigma = se
      )
    ),
    scale = 0.33,
    position = "dodge"
  )
  
  
  myplot <- myplot + ggdist::stat_dots(
    data = raw_data,
    layout = "weave",
    scale = 0.3,
    justification = 1,
    side = "both",
    orientation = "vertical",
    position = position_nudge(x = -0.1),
    ggplot2::aes(
      x = condition,
      y = outcome
    )
    
  )
  
  
  myplot

}
rcalinjageman/esci2 documentation built on Dec. 22, 2021, 1:02 p.m.