1. READING DATA
Read the Data
sequels.df <- read.csv(paste("SequelsStudy.csv"))
attach(sequels.df)
colnames(sequels.df)
[1] "Condition" "QualityPerception" "Likelihood" "WOM"
Show a random sample
dplyr::sample_n(sequels.df, 10)
Show the levels
levels(Condition)
[1] "Non-Sequel" "Sequel"
Reorder levels (if they are not ordered automatically)
sequels.df$Condition <- ordered(sequels.df$Condition,
levels = c("Non-Sequel", "Sequel"))
Compute summary statistics by Condition
library(dplyr)
group_by(sequels.df, Condition) %>%
summarise(
count = n(),
mean = mean(QualityPerception, na.rm = TRUE),
sd = sd(QualityPerception, na.rm = TRUE)
)
2. VISUALIZING DATA
Box plots
# Box-plot
boxplot(QualityPerception ~ Condition, data = sequels.df,
xlab = "Condition", ylab = "QualityPerception",
frame = FALSE, col = c("#00AFBB", "#E7B800"))

Mean plots
# plotmeans
library("gplots")
plotmeans(QualityPerception ~ Condition, data = sequels.df, frame = FALSE,
xlab = "Condition", ylab = "QualityPerception",
main="Mean Plot with 95% CI")

ALTERNATE
Mean plots using ‘ggpubr’
# Plot QualityPerception by Condition
library("ggpubr")
ggline(sequels.df, x = "Condition", y = "QualityPerception",
add = c("mean_se", "jitter"),
order = c("Non-Sequel", "Sequel"),
ylab = "QualityPerception", xlab = "Condition")

3. ANALYSIS OF VARIANCE
Compute one-way ANOVA test
# Compute the analysis of variance
res.aov <- aov(QualityPerception ~ Condition, data = sequels.df)
# Summary of the analysis
summary(res.aov)
Df Sum Sq Mean Sq F value Pr(>F)
Condition 1 414.1 414.1 197.9 <2e-16 ***
Residuals 402 840.9 2.1
---
Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1
Interpret the result of one-way ANOVA tests
As the p-value is less than the significance level 0.05, we can conclude that there are significant differences between the groups highlighted with “*" in the model summary.
Multiple pairwise-comparison between the means of groups
- In one-way ANOVA test, a significant p-value indicates that some of the group means are different, but we don’t know which pairs of groups are different.
- It’s possible to perform multiple pairwise-comparison, to determine if the mean difference between specific pairs of group are statistically significant.
Tukey multiple pairwise-comparisons
TukeyHSD(res.aov)
Tukey multiple comparisons of means
95% family-wise confidence level
Fit: aov(formula = QualityPerception ~ Condition, data = sequels.df)
$Condition
diff lwr upr p adj
Sequel-Non-Sequel 2.024752 1.741835 2.30767 0
- diff: difference between means of the two groups
- lwr, upr: the lower and the upper end point of the confidence interval at 95% (default)
- p adj: p-value after adjustment for the multiple comparisons.
Pairewise t-test
The function pairewise.t.test() can be also used to calculate pairwise comparisons between group levels with corrections for multiple testing.
pairwise.t.test(sequels.df$QualityPerception, sequels.df$Condition,
p.adjust.method = "BH")
Pairwise comparisons using t tests with pooled SD
data: sequels.df$QualityPerception and sequels.df$Condition
Non-Sequel
Sequel <2e-16
P value adjustment method: BH
4. CHECK ASSUMPTIONS
Check ANOVA assumptions: test validity?
The ANOVA test assumes that, the data are normally distributed and the variance across groups are homogeneous. We can check that with some diagnostic plots.
Check the homogeneity of variance assumption
The residuals versus fits plot can be used to check the homogeneity of variances.
plot(res.aov, 1)

It’s also possible to use Bartlett’s test or Levene’s test to check the homogeneity of variances.
library(car)
leveneTest(QualityPerception ~ Condition, data = sequels.df)
Levene's Test for Homogeneity of Variance (center = median)
Df F value Pr(>F)
group 1 2.2134 0.1376
402
From the output above we can see that the p-value is not less than the significance level of 0.05. This means that there is no evidence to suggest that the variance across groups is statistically significantly different. Therefore, we can assume the homogeneity of variances in the different treatment groups.
Relaxing the homogeneity of variance assumption
The classical one-way ANOVA test requires an assumption of equal variances for all groups. In our example, the homogeneity of variance assumption turned out to be fine: the Levene test is not significant.
ANOVA test with no assumption of equal variances
An alternative procedure (i.e.: Welch one-way test), that does not require that assumption have been implemented in the function oneway.test().
oneway.test(QualityPerception ~ Condition, data = sequels.df)
One-way analysis of means (not assuming equal variances)
data: QualityPerception and Condition
F = 197.94, num df = 1.00, denom df = 397.75, p-value < 2.2e-16
Pairwise t-tests with no assumption of equal variances
oneway.test(QualityPerception ~ Condition, data = sequels.df)
One-way analysis of means (not assuming equal variances)
data: QualityPerception and Condition
F = 197.94, num df = 1.00, denom df = 397.75, p-value < 2.2e-16
Check the normality assumption
Normality plot of residuals
# Normality
plot(res.aov, 2)

Shapiro-Wilk normality test
# Extract the residuals
aov_residuals <- residuals(object = res.aov )
# Run Shapiro-Wilk test
shapiro.test(x = aov_residuals )
Shapiro-Wilk normality test
data: aov_residuals
W = 0.93792, p-value = 6.066e-12
The Shapiro-Wilk test on the ANOVA residuals (W = 0.93792, p = 6.066e-12) which finds that normality condition is violated.
5. NON-PARAMETRIC TEST
Non-parametric alternative to one-way ANOVA test
Note that, a non-parametric alternative to one-way ANOVA is Kruskal-Wallis rank sum test, which can be used when ANNOVA assumptions are not met.
kruskal.test(QualityPerception ~ Condition, data = sequels.df)
Kruskal-Wallis rank sum test
data: QualityPerception by Condition
Kruskal-Wallis chi-squared = 131.79, df = 1, p-value < 2.2e-16
LS0tDQp0aXRsZTogIlNlcXVlbHMgQW5hbHlzaXMiDQphdXRob3I6ICJTYW1lZXIgTWF0aHVyIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KIyAxLiBSRUFESU5HIERBVEENCg0KIyMgUmVhZCB0aGUgRGF0YQ0KYGBge3IgcmVhZCwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCnNlcXVlbHMuZGYgPC0gcmVhZC5jc3YocGFzdGUoIlNlcXVlbHNTdHVkeS5jc3YiKSkNCmF0dGFjaChzZXF1ZWxzLmRmKQ0KY29sbmFtZXMoc2VxdWVscy5kZikNCmBgYA0KDQoNCiMjIFNob3cgYSByYW5kb20gc2FtcGxlDQpgYGB7ciwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCmRwbHlyOjpzYW1wbGVfbihzZXF1ZWxzLmRmLCAxMCkNCmBgYA0KDQoNCiMjIFNob3cgdGhlIGxldmVscw0KYGBge3IsIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0V9DQpsZXZlbHMoQ29uZGl0aW9uKQ0KYGBgDQoNCg0KIyMgUmVvcmRlciBsZXZlbHMgKGlmIHRoZXkgYXJlIG5vdCBvcmRlcmVkIGF1dG9tYXRpY2FsbHkpDQpgYGB7ciwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCnNlcXVlbHMuZGYkQ29uZGl0aW9uIDwtIG9yZGVyZWQoc2VxdWVscy5kZiRDb25kaXRpb24sDQogICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiTm9uLVNlcXVlbCIsICJTZXF1ZWwiKSkNCmBgYA0KDQoNCiMjIENvbXB1dGUgc3VtbWFyeSBzdGF0aXN0aWNzIGJ5IENvbmRpdGlvbg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KGRwbHlyKQ0KZ3JvdXBfYnkoc2VxdWVscy5kZiwgQ29uZGl0aW9uKSAlPiUNCiAgc3VtbWFyaXNlKA0KICAgIGNvdW50ID0gbigpLA0KICAgIG1lYW4gPSBtZWFuKFF1YWxpdHlQZXJjZXB0aW9uLCBuYS5ybSA9IFRSVUUpLA0KICAgIHNkID0gc2QoUXVhbGl0eVBlcmNlcHRpb24sIG5hLnJtID0gVFJVRSkNCiAgKQ0KYGBgDQoNCiMgMi4gVklTVUFMSVpJTkcgREFUQQ0KDQojIyBCb3ggcGxvdHMNCmBgYHtyLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQ0KIyBCb3gtcGxvdA0KYm94cGxvdChRdWFsaXR5UGVyY2VwdGlvbiB+IENvbmRpdGlvbiwgZGF0YSA9IHNlcXVlbHMuZGYsDQogICAgICAgIHhsYWIgPSAiQ29uZGl0aW9uIiwgeWxhYiA9ICJRdWFsaXR5UGVyY2VwdGlvbiIsDQogICAgICAgIGZyYW1lID0gRkFMU0UsIGNvbCA9IGMoIiMwMEFGQkIiLCAiI0U3QjgwMCIpKQ0KYGBgDQoNCg0KIyMgTWVhbiBwbG90cw0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojIHBsb3RtZWFucw0KbGlicmFyeSgiZ3Bsb3RzIikNCnBsb3RtZWFucyhRdWFsaXR5UGVyY2VwdGlvbiB+IENvbmRpdGlvbiwgZGF0YSA9IHNlcXVlbHMuZGYsIGZyYW1lID0gRkFMU0UsDQogICAgICAgICAgeGxhYiA9ICJDb25kaXRpb24iLCB5bGFiID0gIlF1YWxpdHlQZXJjZXB0aW9uIiwNCiAgICAgICAgICBtYWluPSJNZWFuIFBsb3Qgd2l0aCA5NSUgQ0kiKSANCmBgYA0KDQoNCiMjIEFMVEVSTkFURQ0KIyMgTWVhbiBwbG90cyB1c2luZyAnZ2dwdWJyJw0KYGBge3IsIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0V9DQojIFBsb3QgUXVhbGl0eVBlcmNlcHRpb24gYnkgQ29uZGl0aW9uDQpsaWJyYXJ5KCJnZ3B1YnIiKQ0KZ2dsaW5lKHNlcXVlbHMuZGYsIHggPSAiQ29uZGl0aW9uIiwgeSA9ICJRdWFsaXR5UGVyY2VwdGlvbiIsIA0KICAgICAgIGFkZCA9IGMoIm1lYW5fc2UiLCAiaml0dGVyIiksIA0KICAgICAgIG9yZGVyID0gYygiTm9uLVNlcXVlbCIsICJTZXF1ZWwiKSwNCiAgICAgICB5bGFiID0gIlF1YWxpdHlQZXJjZXB0aW9uIiwgeGxhYiA9ICJDb25kaXRpb24iKQ0KYGBgDQoNCiMgMy4gQU5BTFlTSVMgT0YgVkFSSUFOQ0UNCg0KIyMgQ29tcHV0ZSBvbmUtd2F5IEFOT1ZBIHRlc3QNCmBgYHtyLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQ0KIyBDb21wdXRlIHRoZSBhbmFseXNpcyBvZiB2YXJpYW5jZQ0KcmVzLmFvdiA8LSBhb3YoUXVhbGl0eVBlcmNlcHRpb24gfiBDb25kaXRpb24sIGRhdGEgPSBzZXF1ZWxzLmRmKQ0KIyBTdW1tYXJ5IG9mIHRoZSBhbmFseXNpcw0Kc3VtbWFyeShyZXMuYW92KQ0KYGBgDQoNCg0KIyMgSW50ZXJwcmV0IHRoZSByZXN1bHQgb2Ygb25lLXdheSBBTk9WQSB0ZXN0cw0KQXMgdGhlIHAtdmFsdWUgaXMgbGVzcyB0aGFuIHRoZSBzaWduaWZpY2FuY2UgbGV2ZWwgMC4wNSwgd2UgY2FuIGNvbmNsdWRlIHRoYXQgdGhlcmUgYXJlIHNpZ25pZmljYW50IGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIGdyb3VwcyBoaWdobGlnaHRlZCB3aXRoICIqIiBpbiB0aGUgbW9kZWwgc3VtbWFyeS4NCg0KDQojIE11bHRpcGxlIHBhaXJ3aXNlLWNvbXBhcmlzb24gYmV0d2VlbiB0aGUgbWVhbnMgb2YgZ3JvdXBzDQoxLiBJbiBvbmUtd2F5IEFOT1ZBIHRlc3QsIGEgc2lnbmlmaWNhbnQgcC12YWx1ZSBpbmRpY2F0ZXMgdGhhdCBzb21lIG9mIHRoZSBncm91cCBtZWFucyBhcmUgZGlmZmVyZW50LCBidXQgd2UgZG9uJ3Qga25vdyB3aGljaCBwYWlycyBvZiBncm91cHMgYXJlIGRpZmZlcmVudC4NCjIuIEl0J3MgcG9zc2libGUgdG8gcGVyZm9ybSBtdWx0aXBsZSBwYWlyd2lzZS1jb21wYXJpc29uLCB0byBkZXRlcm1pbmUgaWYgdGhlIG1lYW4gZGlmZmVyZW5jZSBiZXR3ZWVuIHNwZWNpZmljIHBhaXJzIG9mIGdyb3VwIGFyZSBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50Lg0KDQoNCiMjIFR1a2V5IG11bHRpcGxlIHBhaXJ3aXNlLWNvbXBhcmlzb25zDQpgYGB7ciwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NClR1a2V5SFNEKHJlcy5hb3YpDQpgYGANCg0KKiAqKmRpZmYqKjogZGlmZmVyZW5jZSBiZXR3ZWVuIG1lYW5zIG9mIHRoZSB0d28gZ3JvdXBzDQoqICoqbHdyKiosICoqdXByKio6IHRoZSBsb3dlciBhbmQgdGhlIHVwcGVyIGVuZCBwb2ludCBvZiB0aGUgY29uZmlkZW5jZSBpbnRlcnZhbCBhdCA5NSUgKGRlZmF1bHQpDQoqICoqcCBhZGoqKjogcC12YWx1ZSBhZnRlciBhZGp1c3RtZW50IGZvciB0aGUgbXVsdGlwbGUgY29tcGFyaXNvbnMuDQoNCg0KIyMgUGFpcmV3aXNlIHQtdGVzdA0KVGhlIGZ1bmN0aW9uIHBhaXJld2lzZS50LnRlc3QoKSBjYW4gYmUgYWxzbyB1c2VkIHRvIGNhbGN1bGF0ZSBwYWlyd2lzZSBjb21wYXJpc29ucyBiZXR3ZWVuIGdyb3VwIGxldmVscyB3aXRoIGNvcnJlY3Rpb25zIGZvciBtdWx0aXBsZSB0ZXN0aW5nLg0KDQpgYGB7ciwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCnBhaXJ3aXNlLnQudGVzdChzZXF1ZWxzLmRmJFF1YWxpdHlQZXJjZXB0aW9uLCBzZXF1ZWxzLmRmJENvbmRpdGlvbiwNCiAgICAgICAgICAgICAgICAgcC5hZGp1c3QubWV0aG9kID0gIkJIIikNCmBgYA0KDQojIDQuIENIRUNLIEFTU1VNUFRJT05TDQoNCiMjIENoZWNrIEFOT1ZBIGFzc3VtcHRpb25zOiB0ZXN0IHZhbGlkaXR5Pw0KVGhlIEFOT1ZBIHRlc3QgYXNzdW1lcyB0aGF0LCB0aGUgZGF0YSBhcmUgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgYW5kIHRoZSB2YXJpYW5jZSBhY3Jvc3MgZ3JvdXBzIGFyZSBob21vZ2VuZW91cy4gV2UgY2FuIGNoZWNrIHRoYXQgd2l0aCBzb21lIGRpYWdub3N0aWMgcGxvdHMuDQoNCg0KIyMgQ2hlY2sgdGhlIGhvbW9nZW5laXR5IG9mIHZhcmlhbmNlIGFzc3VtcHRpb24NClRoZSByZXNpZHVhbHMgdmVyc3VzIGZpdHMgcGxvdCBjYW4gYmUgdXNlZCB0byBjaGVjayB0aGUgaG9tb2dlbmVpdHkgb2YgdmFyaWFuY2VzLg0KYGBge3IsIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0V9DQpwbG90KHJlcy5hb3YsIDEpDQpgYGANCg0KSXQncyBhbHNvIHBvc3NpYmxlIHRvIHVzZSBCYXJ0bGV0dCdzIHRlc3Qgb3IgTGV2ZW5lJ3MgdGVzdCB0byBjaGVjayB0aGUgaG9tb2dlbmVpdHkgb2YgdmFyaWFuY2VzLg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmxpYnJhcnkoY2FyKQ0KbGV2ZW5lVGVzdChRdWFsaXR5UGVyY2VwdGlvbiB+IENvbmRpdGlvbiwgZGF0YSA9IHNlcXVlbHMuZGYpDQpgYGANCg0KX0Zyb20gdGhlIG91dHB1dCBhYm92ZSB3ZSBjYW4gc2VlIHRoYXQgdGhlIHAtdmFsdWUgaXMgbm90IGxlc3MgdGhhbiB0aGUgc2lnbmlmaWNhbmNlIGxldmVsIG9mIDAuMDUuIFRoaXMgbWVhbnMgdGhhdCB0aGVyZSBpcyBubyBldmlkZW5jZSB0byBzdWdnZXN0IHRoYXQgdGhlIHZhcmlhbmNlIGFjcm9zcyBncm91cHMgaXMgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudGx5IGRpZmZlcmVudC4gVGhlcmVmb3JlLCB3ZSBjYW4gYXNzdW1lIHRoZSBob21vZ2VuZWl0eSBvZiB2YXJpYW5jZXMgaW4gdGhlIGRpZmZlcmVudCB0cmVhdG1lbnQgZ3JvdXBzLl8NCg0KDQojIyBSZWxheGluZyB0aGUgaG9tb2dlbmVpdHkgb2YgdmFyaWFuY2UgYXNzdW1wdGlvbg0KVGhlIGNsYXNzaWNhbCBvbmUtd2F5IEFOT1ZBIHRlc3QgcmVxdWlyZXMgYW4gYXNzdW1wdGlvbiBvZiBlcXVhbCB2YXJpYW5jZXMgZm9yIGFsbCBncm91cHMuIEluIG91ciBleGFtcGxlLCB0aGUgaG9tb2dlbmVpdHkgb2YgdmFyaWFuY2UgYXNzdW1wdGlvbiB0dXJuZWQgb3V0IHRvIGJlIGZpbmU6IHRoZSBMZXZlbmUgdGVzdCBpcyBub3Qgc2lnbmlmaWNhbnQuDQoNCg0KIyMgQU5PVkEgdGVzdCB3aXRoIG5vIGFzc3VtcHRpb24gb2YgZXF1YWwgdmFyaWFuY2VzDQpBbiBhbHRlcm5hdGl2ZSBwcm9jZWR1cmUgKGkuZS46IFdlbGNoIG9uZS13YXkgdGVzdCksIHRoYXQgZG9lcyBub3QgcmVxdWlyZSB0aGF0IGFzc3VtcHRpb24gaGF2ZSBiZWVuIGltcGxlbWVudGVkIGluIHRoZSBmdW5jdGlvbiBgb25ld2F5LnRlc3QoKWAuDQpgYGB7ciwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCm9uZXdheS50ZXN0KFF1YWxpdHlQZXJjZXB0aW9uIH4gQ29uZGl0aW9uLCBkYXRhID0gc2VxdWVscy5kZikNCmBgYA0KDQojIyBQYWlyd2lzZSB0LXRlc3RzIHdpdGggbm8gYXNzdW1wdGlvbiBvZiBlcXVhbCB2YXJpYW5jZXMNCmBgYHtyLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQ0Kb25ld2F5LnRlc3QoUXVhbGl0eVBlcmNlcHRpb24gfiBDb25kaXRpb24sIGRhdGEgPSBzZXF1ZWxzLmRmKQ0KYGBgDQoNCiMjIENoZWNrIHRoZSBub3JtYWxpdHkgYXNzdW1wdGlvbg0KDQojIyMgTm9ybWFsaXR5IHBsb3Qgb2YgcmVzaWR1YWxzDQpgYGB7ciwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCiMgTm9ybWFsaXR5DQpwbG90KHJlcy5hb3YsIDIpDQpgYGANCg0KIyMjIFNoYXBpcm8tV2lsayBub3JtYWxpdHkgdGVzdA0KYGBge3IsIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0V9DQojIEV4dHJhY3QgdGhlIHJlc2lkdWFscw0KYW92X3Jlc2lkdWFscyA8LSByZXNpZHVhbHMob2JqZWN0ID0gcmVzLmFvdiApDQojIFJ1biBTaGFwaXJvLVdpbGsgdGVzdA0Kc2hhcGlyby50ZXN0KHggPSBhb3ZfcmVzaWR1YWxzICkNCmBgYA0KDQpUaGUgU2hhcGlyby1XaWxrIHRlc3Qgb24gdGhlIEFOT1ZBIHJlc2lkdWFscyAoVyA9IDAuOTM3OTIsIHAgPSA2LjA2NmUtMTIpIHdoaWNoIGZpbmRzIHRoYXQgbm9ybWFsaXR5IGNvbmRpdGlvbiBpcyB2aW9sYXRlZC4NCg0KIyA1LiBOT04tUEFSQU1FVFJJQyBURVNUDQoNCiMjIE5vbi1wYXJhbWV0cmljIGFsdGVybmF0aXZlIHRvIG9uZS13YXkgQU5PVkEgdGVzdA0KDQpOb3RlIHRoYXQsIGEgbm9uLXBhcmFtZXRyaWMgYWx0ZXJuYXRpdmUgdG8gb25lLXdheSBBTk9WQSBpcyBLcnVza2FsLVdhbGxpcyByYW5rIHN1bSB0ZXN0LCB3aGljaCBjYW4gYmUgdXNlZCB3aGVuIEFOTk9WQSBhc3N1bXB0aW9ucyBhcmUgbm90IG1ldC4NCg0KYGBge3IsIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0V9DQprcnVza2FsLnRlc3QoUXVhbGl0eVBlcmNlcHRpb24gfiBDb25kaXRpb24sIGRhdGEgPSBzZXF1ZWxzLmRmKQ0KYGBgDQoNCg0KDQoNCg0KDQoNCg0KDQo=