Skip to content

Doing Factorial ANOVAs :Designing, Running, and Analyzing Experiments(Interaction Design Specialization) Answers 2026

Q1. Identify experimental design

Check:

table(data$Height, data$Avatar)

Decision logic:

  • Each participant appears once only โ†’ between-subjects

  • Appears multiple times โ†’ within / mixed


Q2. Number of subjects

length(unique(data$Subject))

Q3. Most positive Height ร— Avatar mean

aggregate(Positives ~ Height + Avatar, data, mean)

๐Ÿ‘‰ Take largest mean, round to 2 decimals


Q4โ€“Q5. Interaction plots

interaction.plot(data$Height, data$Avatar, data$Positives)
interaction.plot(data$Avatar, data$Height, data$Positives)

Rule:

  • Lines cross โ†’ Yes

  • Lines do not cross โ†’ No


Q6. Factorial ANOVA

anova_res <- ezANOVA(
data = data,
dv = Positives,
wid = Subject,
between = c(Height, Avatar),
detailed = TRUE
)
anova_res

๐Ÿ‘‰ Take largest F value, round to 2 decimals


Q7. Significant effects

From ANOVA table:

  • p < 0.05 โ†’ significant

  • p โ‰ฅ 0.05 โ†’ not significant


Q8. Planned comparisons (independent t-tests + Holm)

p1 <- t.test(
data[data$Height=="Short" & data$Avatar=="Tall",]$Positives,
data[data$Height=="Short" & data$Avatar=="Short",]$Positives,
var.equal=TRUE
)$p.value

p2 <- t.test(
data[data$Height=="Tall" & data$Avatar=="Tall",]$Positives,
data[data$Height=="Tall" & data$Avatar=="Short",]$Positives,
var.equal=TRUE
)$p.value

p.adjust(c(p1,p2), method="holm")

๐Ÿ‘‰ Take smallest corrected p, round to 4 decimals


Q9. Interpret planned comparisons

  • Look at means

  • Look at corrected p-values

  • Tick conclusions where p < 0.05



๐ŸŸฆ PART B โ€” notes.csv (Q10โ€“Q19)

Load data

library(reshape2)
notes <- read.csv("notes.csv")

Q10. Identify design

Check:

table(notes$Subject, notes$Notes)

Logic:

  • Phone = between

  • Notes = within
    โ†’ Mixed factorial (if each subject uses both notes apps)


Q11. Number of subjects

length(unique(notes$Subject))

Q12. Highest mean words

aggregate(Words ~ Phone + Notes, notes, mean)

๐Ÿ‘‰ Take largest mean, round to whole number


Q13โ€“Q14. Interaction plots

interaction.plot(notes$Phone, notes$Notes, notes$Words)
interaction.plot(notes$Notes, notes$Phone, notes$Words)

Q15. Order effect (RM-ANOVA)

ezANOVA(
data = notes,
dv = Words,
wid = Subject,
within = Order,
between = Phone,
detailed = TRUE
)

๐Ÿ‘‰ Enter p-value for Order, round to 4 decimals


Q16. Sphericity question

Rule:

  • Within-subjects factor with 2 levels โ†’ no sphericity issue


Q17. Main factorial ANOVA

ezANOVA(
data = notes,
dv = Words,
wid = Subject,
within = Notes,
between = Phone,
detailed = TRUE
)

๐Ÿ‘‰ Take largest F, round to 2 decimals


Q18. Planned paired t-tests + Holm

wide <- dcast(notes, Subject + Phone ~ Notes, value.var="Words")

pvals <- c(
t.test(wide[wide$Phone=="iPhone","Built-in"],
wide[wide$Phone=="iPhone","Add-on"], paired=TRUE)$p.value,
t.test(wide[wide$Phone=="Android","Built-in"],
wide[wide$Phone=="Android","Add-on"], paired=TRUE)$p.value
)

p.adjust(pvals, method="holm")

๐Ÿ‘‰ Take lowest p, round to 4 decimals


Q19. Interpret conclusions

Use:

  • Means

  • Corrected p-values (<0.05)



๐ŸŸฆ PART C โ€” socialvalue.csv (Q20โ€“Q32)

Load data

library(ARTool)
social <- read.csv("socialvalue.csv")

Q20. Identify design

Check:

table(social$Subject, social$Social)

โ†’ Clip & Social both within โ†’ within-subjects factorial


Q21. Number of subjects

length(unique(social$Subject))

Q22. Highest mean

aggregate(Valued ~ Clip + Social, social, mean)

๐Ÿ‘‰ Take largest, round 2 decimals


Q23โ€“Q24. Interaction plots

interaction.plot(social$Social, social$Clip, social$Valued)
interaction.plot(social$Clip, social$Social, social$Valued)

Q25. Order effects

ezANOVA(
data = social,
dv = Valued,
wid = Subject,
within = c(ClipOrder, SocialOrder),
detailed = TRUE
)

๐Ÿ‘‰ Take ClipOrder p-value, round 4 decimals


Q26. Main RM-ANOVA

ezANOVA(
data = social,
dv = Valued,
wid = Subject,
within = c(Clip, Social),
detailed = TRUE
)

๐Ÿ‘‰ Take largest F, round 2 decimals


Q27. Planned paired t-tests + Holm

wide <- dcast(social, Subject ~ Social + Clip, value.var="Valued")

pvals <- c(
t.test(wide$Facebook_Positive, wide$Facebook_Negative, paired=TRUE)$p.value,
t.test(wide$Twitter_Positive, wide$Twitter_Negative, paired=TRUE)$p.value
)

p.adjust(pvals, method="holm")

๐Ÿ‘‰ Take lowest p, round 4 decimals


Q28. Interpret conclusions

Use:

  • Means

  • Corrected p-values


Q29. ART analysis

m <- art(Valued ~ Clip * Social + (1|Subject), data=social)
anova(m)

๐Ÿ‘‰ Take largest F, round 2 decimals


Q30. Closer difference

Look at interaction plot:

  • Smaller gap โ†’ answer


Q31โ€“Q32. ART contrasts

art.con(m, ~ Clip*Social, adjust="holm")

๐Ÿ‘‰ Extract Facebook contrast (Q31)
๐Ÿ‘‰ Extract Twitter contrast (Q32)
๐Ÿ‘‰ Round 4 decimals


๐Ÿงพ FINAL SUMMARY TABLE (Fill After Running R)

Q Value to Enter
1 Design type
2 Subject count
3 Max mean
4โ€“5 Yes / No
6 Largest F
7 Significant effects
8 Lowest Holm p
9 Supported conclusions
10 Design type
11 Subject count
12 Max mean
13โ€“14 Yes / No
15 Order p
16 True
17 Largest F
18 Lowest Holm p
19 Supported conclusions
20 Design type
21 Subject count
22 Max mean
23โ€“24 Yes / No
25 ClipOrder p
26 Largest F
27 Lowest Holm p
28 Supported conclusions
29 ART F
30 Facebook / Twitter
31 Facebook p
32 Twitter p