Rationale

Basic priming theory depicts memory as a network of nodes connected by associative pathways. Certain concepts are stored at these nodes, and activation of one concept can trigger related ideas. In media research, priming suggests that exposure to specific content can temporarily influence later, unrelated attitudes or behaviors.

According to priming theory, exposure to violent media content can activate aggressive thoughts and increase the likelihood of aggressive behavior—at least for a short time before the effect fades. In this study, one group of children was exposed to a violent video game, while others played less-violent games. Their behavior during recess was then observed to determine whether exposure to violent media increased aggression.

Hypothesis

Average aggression will differ for at least two of the groups of children.

Variables & method

A total of 135 elementary-school-age children were randomly assigned to three groups, with 45 children in each. One group played The Sims (non-violent), a cooking game (frustration-based but non-violent), and Minecraft (violent).

After gameplay, the children were observed during a 30-minute recess. The researcher recorded the number of minutes each child spent engaged in physical or verbal aggression. In the dataset, the dependent variable (Value) represented the number of minutes of aggression/violence for each kid. The independent variable (Group) recorded which video game group each kid was in.

Results & Discussion

A one-way ANOVA was conducted to examine whether average aggression differed among children who played three different types of video games. The box plot shows that children exposed to Minecraft (violent) displayed more acts of aggression compared to those who played The Sims (non-violent), who showed the least aggression.

The Descriptive Statistics by Group table supports this, showing that children who played Minecraft had the highest mean aggression score (M = 19.62), followed by those who played the cooking game (M = 7.98) and The Sims (M = 5.03). The one-way ANOVA confirmed that these differences were statistically significant, p < .001, indicating that at least one group’s mean aggression differed significantly from the others.

The Post-hoc Tukey test revealed that each comparison was significant (p < .001), confirming that aggression levels were highest after playing Minecraft and lowest after playing The Sims. These findings were consistent with the Kruskal–Wallis and Dunn’s post-hoc tests, which also showed significant group differences (p < .001).

Overall, these results support the hypothesis that aggression levels differ based on game type, with exposure to violent games leading to the highest aggression—consistent with priming theory, which can suggest violent media can activate aggressive thoughts and behaviors.

Descriptive Statistics by Group
IV count mean sd min max
Cooking game 45 7.98 1.86 5.0 11.9
Minecraft 45 19.62 2.48 15.4 24.8
Sims 45 5.03 1.85 2.1 9.3
Shapiro-Wilk Normality Test by Group
IV W_statistic p_value
Cooking game 0.95 0.062
Minecraft 0.96 0.136
Sims 0.97 0.294
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
516.05 2 86.69692 < .001
Tukey HSD Post-hoc Results
Comparison diff lwr upr p adj
Minecraft-Cooking game 11.64 10.60 12.68 < .001
Sims-Cooking game -2.95 -3.99 -1.91 < .001
Sims-Minecraft -14.59 -15.63 -13.55 < .001
Kruskal-Wallis Test Results
Statistic df p_value
104.92 2 < .001
Post-hoc Dunn’s Test Results
Comparison Z P.unadj P.adj
Cooking game - Minecraft -6.21 < .001 < .001
Cooking game - Sims 3.95 < .001 < .001
Minecraft - Sims 10.16 < .001 < .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