Rationale
Priming theory suggests that exposure to certain subjects can
influence how they are perceived and later respond. In our case, we
expose children to violent and non-violent video games in order to
determine their aggression during recess. We should expect the children
to be more aggressive after playing violent video games like Minecraft,
and slightly aggressive after playing a cooking simulator. They should
be barely aggressive after playing The Sims, a non-violent game.
Hypothesis
Average aggression within the children will differ for at least two
of the groups playing violent and non-violent video games.
Variables & method
Our independent variable is the type of video games played, ranking
from more violent ot less violent. Minecraft is the most violent, while
the Cooking Game is less, and The Sims is the least. Our dependent
variable is the level of kids’ aggression on the playground after
playing the video games offered before recess. We chose the ANOVA test
method because he DV is continuous, the IV is categorical, and the IV
has three or more categories. This is the best way to test priming
theory.
Results & discussion
The results support the hypothesis. Specifically, all three groups
have significantly different average levels of aggression, with
aggression increasing after more violent video games. A one-way ANOVA
test was conducted to examine whether the type of video game played
(Minecraft, Sims, or Cooking Game) affected children’s levels of
playground aggression. The analysis revealed a significant main effect
of game type on aggression (< .001).
Post-hoc comparisons using the Tukey HSD test indicated that children
who played Minecraft (M = higher aggression) showed significantly more
aggressive behaviors than those who played either the Sims (mean
difference = 14.59, p < .001) or the Cooking Game (mean difference =
11.64, p < .001). Additionally, children who played the Sims also
exhibited slightly more aggression than those who played the Cooking
Game (mean difference = 2.95, p < .001).
| 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