This page contains extra R content not covered in the demonstrations and could be considered supplementary to the module. This content is useful for completing the advanced exercises from Week 5 and focuses on conducting non-parametric tests in R. As covered in the lecture series, non-parametric tests are distribution-free tests. They are useful if your data does not meet the assumptions of the parametric test.

Mann-Whitney U Test

The Mann-Whitney U Test is a non-parametric test for when you have a categorical IV (with two levels) and a continuous DV. The equivalent parametric test is an independent-samples t-test. The function that runs a Mann-Whitney U Test is the wilcox.test() function. It’s a bit confusing that the Mann-Whitney U Test uses a function with a different name, but the reason for this is because the Mann-Whitney U Test is also called the Wilcoxon Rank Sum Test (though I avoid using this name as it is easily confused with the Wilcoxon Signed Rank Test).

If we wanted to assess whether cat-people are more introverted than dog-people in the class dataset using a Mann-Whitney U Test, the code would look like this:

1. Prepare the data.

This code is identical to that when we prepared the data for an independent-samples t-test.

data1.clean <- data %>%
  filter(cat.dog != "both") %>%
  filter(cat.dog != "neither") %>%
  filter(cat.dog != "") %>%
  mutate( introvert = introversion2 + introversion5 + introversion7 + introversion8 + introversion10) %>%
  select(cat.dog,introvert)

2. Run the statistical test.

To conduct a Mann-Whitney U Test, you need to specify the two things needed for all analysis functions: the formula, and the data.frame.

wilcox.test(introvert~cat.dog,data = data1.clean)
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  introvert by cat.dog
## W = 1188.5, p-value = 0.8054
## alternative hypothesis: true location shift is not equal to 0

3. Visualise the data.

A boxplot is the perfect visualisation for non-parametric tests, as it visualises the median and the interquartile range. We can combine the boxplot geom and with the violin geom to also give a visualisation of the distribution of the data.

ggplot(data1.clean,aes(x = cat.dog,y = introvert,fill = cat.dog)) +
  geom_violin() +
  geom_boxplot(width = .2) +
  theme_classic() +
  theme(legend.position = "none")

4. Write-up analysis.

To report a Mann-Whitney U test, you will need to include the following information:

  • The U-statistic from the Mann-Whitney U test.
  • The p-value from the statistical test.
  • The medians on the DV for both groups.

The U-statistic is the ‘W’ from the output of the wilcox.test() function. This function also gives you the p-value. To get the medians, you can use the summarise() and median() functions:

data1.summary <- data1.clean %>%
  group_by(cat.dog) %>%
  summarise(introvert_median = median(introvert,na.rm = TRUE))

data1.summary
## # A tibble: 2 × 2
##   cat.dog introvert_median
##   <chr>              <dbl>
## 1 cat                   15
## 2 dog                   16

Therefore, the write-up becomes:

A Mann-Whitney U test indicated that there was a non-significant differences in introversion between cat-people (Mdn = 15) and dog-people (Mdn = 16), U = 1188.5, p = 0.805.

Wilcoxon Signed Rank Test

The Wilcoxon Signed Rank Test is a non-parametric test for when you have a within-subjects categorical IV (with two levels) and a continuous DV. The equivalent parametric test is an paired-samples t-test.

Let’s re-evaluate the analysis investigating participant’s mood before and after watching a cute cat video in the class dataset, but this time use the non-parametric test.

1. Prepare the data for analysis.

Again, this code is identical for when we prepared the data for the paired-samples t-test.

data2.clean <- data %>%
  filter(!is.na(pre.mood)) %>%
  filter(!is.na(post.mood)) %>%
  select(student.no,pre.mood,post.mood) %>%
  gather(key = "condition",value = "mood",pre.mood,post.mood) %>%
  mutate(condition = factor(condition,levels = c("pre.mood","post.mood")))

2. Run the statistical test.

Similar to how an independent-samples t-test and a paired-samples t-test use the same function, the Mann-Whitney U Test and the Wilcoxon Signed Rank Test also use the same function: wilcox.test(). The difference here is the paired argument must be set to TRUE - the same as if you were conducting a paired-samples t-test with the t.test() function.

Therefore, the code becomes:

wilcox.test(mood ~ condition,data2.clean,paired = TRUE)
## 
##  Wilcoxon signed rank test with continuity correction
## 
## data:  mood by condition
## V = 3574.5, p-value = 0.8646
## alternative hypothesis: true location shift is not equal to 0

3. Visualise the Data

Again, we can use a boxplot and violin plot to visualise the difference before and after exposure:

ggplot(data2.clean,aes(x = condition,y = mood,fill = condition)) +
  geom_violin() +
  geom_boxplot(width = .2) +
  theme_classic() +
  theme(legend.position = "none")

4. Write-up the analysis.

Similar to the Mann-Whitney U test, we require information of the median for each condition. This code is exactly the same as above:

data2.summary <- data2.clean %>%
  group_by(condition) %>%
  summarise(introvert_median = median(mood,na.rm = TRUE))

data2.summary
## # A tibble: 2 × 2
##   condition introvert_median
##   <fct>                <dbl>
## 1 pre.mood              56.5
## 2 post.mood             54

We also need the test statistic (W) and the associated p-value. Once we have all this information, the final write-up looks like this:

A Wilcoxon signed rank test indicated that there was a non-significant difference on mood before (Mdn = NA) and after (Mdn = NA) watching a short cat video, W = 3574.5, p = 0.865.

Kruskal-Wallis Test

The Kruskal-Wallis test is a non-parametric alternative to the one-way ANOVA, meaning it is used when you have a categorical IV with more than 2 groups, and a continuous DV.

1. Prepare the data.

As before, we will demonstrate the Kruskal-Wallis test using the class dataset by revisiting the question of whether cat-people, dog-people, those who like both, and those who like neither differ on introversion. First, we must prepare the data - this code is identical to that for the one-way ANOVA.

data3.clean <- data %>%
#  filter(cat.dog != "both") %>%
#  filter(cat.dog != "neither") %>%
   filter(cat.dog != "") %>%
  mutate(introvert = introversion2 + introversion5 + introversion7 + introversion8 + introversion10) %>%
  select(cat.dog,introvert)

2. Conduct the statistical test.

The function to conduct the Kruskal-Wallis test is kruskal.test(). Again, with all statistical test functions, you need to supply the formula and the data.frame you wish to analyse.

kruskal.test(introvert ~ cat.dog,data = data3.clean)

3. Visualise the data.

Here we can visualise the data using a boxplot and violin plot.

ggplot(data3.clean,aes(x = cat.dog,y = introvert,fill = cat.dog)) +
  geom_violin() +
  geom_boxplot(width = .2) +
  theme_classic() +
  theme(legend.position = "none")

4. Write-up the analysis.

To report a Kruskal-Wallis test, you need the following bits of information:

  • The test-statistic (chi-square). Note: you should use the chi-square symbol.
  • The associated degrees of freedom and p-value.
  • The medians for each of the groups.

The first two points are included in the output of the kruskal.test() function, and we can use the summarise() and median() functions to get the third point:

data3.summary <- data3.clean %>%
  group_by(cat.dog) %>%
  summarise(introvert_median = median(introvert,na.rm = TRUE))

data3.summary
## # A tibble: 4 × 2
##   cat.dog introvert_median
##   <chr>              <dbl>
## 1 both                  16
## 2 cat                   15
## 3 dog                   16
## 4 neither               14

With this information, you can write-up your results. Remember, much like with the one-way ANOVA, this Kruskal-Wallis test will tell you whether the groups are significantly different, but it does not tell you where those differences are. In order to determine this, you will need to conduct post-hoc comparisons.

A Kruskal-Wallis test indicated that there was a non-significant differences in introversion between cat-people (Mdn = 15), dog-people (Mdn = 16), those who like both (Mdn = 13.5), and those who like neither (Mdn =13.5), Chi-square(3) = 2.63, p = 0.452.

Advanced Exercises

If you would like to practice the skills on this page, weekly exercise questions on this content are available in the advanced exercises for Week 5. You can download the interactive exercises by clicking the link below.

Click here to download this week’s exercises.