Priming theory anticipates that exposure to / consumption of violent media content will trigger subsequent aggressive behavior, at least for a short period of time, after which the aggressive behavior will become less apparent. So, if we expose some kids to violent video games and other to less violent video games, then observe their interactions during recess, we would expect to see more aggressive behavior among the kids exposed to the violent video games than among kids exposed to comparably less violent video games.
Average aggression will differ for at least two of the groups of children.
135 elementary-school-age children were divided into three randomly assigned groups. One group played the Sims video game. A second played a cooking game in which the player has to assemble food orders under time pressure, but no violence is involved. A third group played Minecraft, which can involve weapons and explosions. After, kids were sent out for recess, and the researcher recorded the number of minutes each kid spent engaged in physical or verbal violence during the 30-minute recess period. In the dataset, the DV (Value) recorded the number of minutes of violence for each kid. The IV (Group) recorded which video game group each kid was in.
The box plot graph shows the averages and distributions across the independent variables. It shows that, out of the cooking, Sims and Minecraft games, Minecraft has the most amounts of verbal or physical violence.
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 |
The Descriptive analysis table shows that the group averages increase by game intensity/violence.
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. |
The Shapiro-Wilk Normality table show each group has a p-value more than 0.05 so, there are no non-normalities.
ANOVA Test Results | |||
Statistic | df | df_resid | p_value |
---|---|---|---|
516.05 | 2 | 86.69692 | < .001 |
The Anova Test results table shows a value less than 0.05, meaning at least two of the group values differ significantly.
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 |
The Tukey results table shows all three values are less than 0.05 meaning that all three groups differ significantly.
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 |
At this point, further analysis of the Kruskal and Dunn tables is unnecessary. These values show the same thing as the ones above. All the test show that the difference of the groups is statistically significant. These results support the hypothesis.
# ============================================================
# 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