Rationale

Priming Theory reports media content can influence a person’s attitudes or behaviors, but this influence is short-lived. There are three areas of media priming research. Priming and media violence, media priming and political news coverage, and media priming and stereotyping.

Based on this theory, depending on what the fifth-grade student was exposed to, whether it be a violent game, a non-violent game, or an art project, it could determine how aggressive each student was on the playground.

Hypothesis

The average time fifth graders spent engaging in aggressive acts will differ for at least two of the groups of students. It will show to be statistically significant.

Variables & Method

135 fifth-graders were randomly divided into three groups of 45 students each. 30 minutes before recess, teachers assigned one group to complete a math lesson that involved a computer game called “Exponent Fighter.” The game allowed the player’s on-screen character to punch on a computer-controlled opponent. Each time the player gave an incorrect answer, however, the opposite happened. During the same 30 minutes, a second group of 45 students played a similar game called “Exponent Builder.” In this game, each time the player gave the correct answer to an exponent problem, the player’s on-screen character got a chance to add a block to a structure that would allow the character to reach an otherwise-unreachable platform.

Also during the same 30 minutes, a third group of 45 students completed an art lesson that involved using a color wheel to select a color scheme for an abstract design produced using paint and pre-cut stencils. At the end of the 30 minutes, students were dismissed to the school playground for a 30-minute recess. A team of trained researchers watched the students play for 30 minutes and recorded the amount of time, in minutes, each student spent engaged in any kind of aggressive act.


The dependent variable in the analysis was a continuous measure of the total time, in minutes, each student had spent engaging in aggressive acts, labeled as “value”. The independent variable was a categorical measure, tracking which type of lesson the student had completed during the 30 minutes before recess, labeled as “group”. Possible values included “Violent game” if the student had played “Equation Fighter,” “Nonviolent game” if the student had played “Equation Builder,” and “Art project” if the student had completed the art project.

An ANOVA test was used to determine if the violence before recess had an influence on how the fifth graders behaved on the playground.

Results & discussion

The graphs below summarizes the association between the dependent and independent variables. The results supported the hypothesis. All three groups are significantly different. The biggest difference is between the Violent Game-Art Project, with students who played the violent game showing higher levels of aggression. The results supported the hypothesis.

Descriptive Statistics by Group
IV count mean sd min max
Art project 45 4.96 1.04 2.3 7.3
Nonviolent game 45 5.86 1.06 3.6 8.4
Violent game 45 10.75 1.00 8.5 12.8
Shapiro-Wilk Normality Test by Group
IV W_statistic p_value
Art project 0.99 0.923
Nonviolent game 0.98 0.594
Violent game 0.98 0.699
Note. If any p-value figures are 0.05 or less, if one or more group distributions appear non-normal, and any group sizes are less than 40, consider using the Kruskal-Wallis and Post-hoc Dunn’s Test results instead of the ANOVA and Tukey HSD Post-hoc results.
ANOVA Test Results
Statistic df df_resid p_value
420.86 2 87.94717 < .001
Tukey HSD Post-hoc Results
Comparison diff lwr upr p adj
Nonviolent game-Art project 0.90 0.38 1.42 < .001
Violent game-Art project 5.79 5.27 6.30 < .001
Violent game-Nonviolent game 4.89 4.37 5.40 < .001

Code:

# ============================================================
#  Setup: Install and Load Required Packages
# ============================================================
if (!require("tidyverse")) install.packages("tidyverse")
if (!require("gt")) install.packages("gt")
if (!require("gtExtras")) install.packages("gtExtras")
if (!require("FSA")) install.packages("FSA")
if (!require("plotly")) install.packages("plotly")

library(tidyverse)
library(gt)
library(gtExtras)
library(FSA)
library(plotly)

options(scipen = 999) # suppress scientific notation

# ============================================================
#  Step 1: Load Data
# ============================================================
mydata <- read.csv("Priming.csv") # <-- Edit YOURFILENAME.csv

# Specify DV and IV (edit column names here)
mydata$DV <- mydata$Value
mydata$IV <- mydata$Group

# ============================================================
#  Step 2: Visualize Group Distributions (Interactive)
# ============================================================
# Compute group means
group_means <- mydata %>%
  group_by(IV) %>%
  summarise(mean_value = mean(DV), .groups = "drop")

# Interactive plot (boxplot + group means)
box_plot <- plot_ly() %>%
  # Boxplot trace
  add_trace(
    data = mydata,
    x = ~IV, y = ~DV,
    type = "box",
    boxpoints = "outliers",   # only applies here
    marker = list(color = "red", size = 4),  # outlier style
    line = list(color = "black"),
    fillcolor = "royalblue",
    name = ""
  ) %>%
  # Group means (diamonds)
  add_trace(
    data = group_means,
    x = ~IV, y = ~mean_value,
    type = "scatter", mode = "markers",
    marker = list(
      symbol = "diamond", size = 9,
      color = "black", line = list(color = "white", width = 1)
    ),
    text = ~paste0("Mean = ", round(mean_value, 2)),
    hoverinfo = "text",
    name = "Group Mean"
  ) %>%
  layout(
    title = "Interactive Group Distributions with Means",
    xaxis = list(title = "Independent Variable (IV)"),
    yaxis = list(title = "Dependent Variable (DV)"),
    showlegend = FALSE
  )

# ============================================================
#  Step 3: Descriptive Statistics by Group
# ============================================================
desc_stats <- mydata %>%
  group_by(IV) %>%
  summarise(
    count = n(),
    mean = mean(DV, na.rm = TRUE),
    sd   = sd(DV, na.rm = TRUE),
    min  = min(DV, na.rm = TRUE),
    max  = max(DV, na.rm = TRUE)
  )

desc_table <- desc_stats %>%
  mutate(across(where(is.numeric), ~round(.x, 2))) %>%
  gt() %>%
  gt_theme_538() %>%
  tab_header(title = "Descriptive Statistics by Group")

# ============================================================
#  Step 4: Test Normality (Shapiro-Wilk)
# ============================================================
shapiro_results <- mydata %>%
  group_by(IV) %>%
  summarise(
    W_statistic = shapiro.test(DV)$statistic,
    p_value = shapiro.test(DV)$p.value
  )

shapiro_table <- shapiro_results %>%
  mutate(
    W_statistic = round(W_statistic, 2),
    p_value = ifelse(p_value < .001, "< .001", sprintf("%.3f", p_value))
  ) %>%
  gt() %>%
  gt_theme_538() %>%
  tab_header(title = "Shapiro-Wilk Normality Test by Group") %>%
  tab_source_note(
    source_note = "Note. If any p-value figures are 0.05 or less, if one or more group distributions appear non-normal, and any group sizes are less than 40, consider using the Kruskal-Wallis and Post-hoc Dunn’s Test results instead of the ANOVA and Tukey HSD Post-hoc results."
  )

# ============================================================
#  Step 5a: Non-Parametric Test (Kruskal-Wallis + Dunn)
# ============================================================
kruskal_res <- kruskal.test(DV ~ IV, data = mydata)

kruskal_table <- data.frame(
  Statistic = round(kruskal_res$statistic, 2),
  df = kruskal_res$parameter,
  p_value = ifelse(kruskal_res$p.value < .001, "< .001",
                   sprintf("%.3f", kruskal_res$p.value))
) %>%
  gt() %>%
  gt_theme_538() %>%
  tab_header(title = "Kruskal-Wallis Test Results")

dunn_res <- dunnTest(DV ~ IV, data = mydata, method = "bonferroni")$res

dunn_table <- dunn_res %>%
  mutate(
    Z = round(Z, 2),
    P.unadj = ifelse(P.unadj < .001, "< .001", sprintf("%.3f", P.unadj)),
    P.adj   = ifelse(P.adj < .001, "< .001", sprintf("%.3f", P.adj))
  ) %>%
  gt() %>%
  gt_theme_538() %>%
  tab_header(title = "Post-hoc Dunn’s Test Results")

# ============================================================
#  Step 5b: Parametric Test (ANOVA + Tukey)
# ============================================================
anova_res <- oneway.test(DV ~ IV, data = mydata, var.equal = FALSE)

anova_table <- data.frame(
  Statistic = round(anova_res$statistic, 2),
  df = anova_res$parameter[1],
  df_resid = anova_res$parameter[2],
  p_value = ifelse(anova_res$p.value < .001, "< .001",
                   sprintf("%.3f", anova_res$p.value))
) %>%
  gt() %>%
  gt_theme_538() %>%
  tab_header(title = "ANOVA Test Results")

anova_model <- aov(DV ~ IV, data = mydata)
tukey_res <- TukeyHSD(anova_model)$IV %>% as.data.frame()

tukey_table <- tukey_res %>%
  rownames_to_column("Comparison") %>%
  mutate(
    diff = round(diff, 2),
    lwr = round(lwr, 2),
    upr = round(upr, 2),
    `p adj` = ifelse(`p adj` < .001, "< .001", sprintf("%.3f", `p adj`))
  ) %>%
  gt() %>%
  gt_theme_538() %>%
  tab_header(title = "Tukey HSD Post-hoc Results")

# ============================================================
#  Step 6: Display Key Results
# ============================================================
# Interactive box plot
box_plot

# Tables
desc_table
shapiro_table
anova_table
tukey_table
kruskal_table
dunn_table