# Wilcoxon Signed Rank Test in R

Wilcoxon Signed Rank Test is based on the direction of differences and magnitudes. This test is more sensitive and powerful than an ordinary sign test.

The ordinary sign test was based only on the direction of differences ignoring their magnitudes.

How can one apply Wilcoxon signed-rank test for matched paired samples?

Under matched paired samples, the differences d within n paired values (x_{i},y_{i}) for i= 1,2,3….n are assumed to have come from continuous and symmetric population differences.

If M_{d} is the median of the population of differences and expected to possess a known value M_{d}^{0}, we test

H_{0}: Md= M_{d}^{0}vs H_{1}: Md≠M_{d}^{0}

LSTM Network in R » Recurrent Neural network »

This test comes under the nonparametric test used to compare related samples, matched samples, or repeated measurements on a single sample to assess whether their population means ranks differ.

Majorly used when your data are non-normally distributed.

The paired samples Wilcoxon test (also known as Wilcoxon signed-rank test) is a non-parametric alternative to paired t-test used to compare paired data.

The R function wilcox.test() can be used as follow:

How to clean the datasets in R? » janitor Data Cleansing »

wilcox.exact(x, y, paired = TRUE, alternative = "two.sided")

We want to example the efficacy of the product after treatment applied.

Pre <-c(19,20,13,14,15,16,17,18,19,20) Post <-c(20,22,15,16,15,19,22,23,19,18)

Now create a data frame

data <- data.frame(Pre,Post)

The ultimate aim is to identify the any significant difference in the median values of Pre and Post treatment?

Market Basket Analysis in R » What Goes With What »

## Visualization

Before testing the significance, let’s visualize the data.

library("ggpubr") library(reshape) data1<-melt(data)

ggboxplot(data1, x = "variable", y = "value", color = "variable", palette = c("#00AFBB", "#E7B800"), fill = "variable", order = c("Pre", "Post"), ylab = "Value", xlab = "Groups")

## Summary

Let’s calculate the summary statistics.

library(psych)

describeBy(data1,data1$variable)

Descriptive statistics by group group: Pre vars n mean sd median trimmed mad min max range skew kurtosis se variable* 1 10 1.0 0.00 1.0 1.00 0.00 1 1 0 NaN NaN 0.0 value 2 10 17.1 2.51 17.5 17.25 2.97 13 20 7 -0.29 -1.59 0.8 group: Post vars n mean sd median trimmed mad min max range skew kurtosis se variable* 1 10 2.0 0.00 2 2.00 0.00 2 2 0 NaN NaN 0.00 value 2 10 18.9 2.92 19 18.88 4.45 15 23 8 -0.06 -1.63 0.92

Post median value is higher than the Pre value.

Let’s calculate the p-value based on exactRankTests package.

library(exactRankTests) res <- wilcox.exact(Pre,Post, paired = TRUE) res

Exact Wilcoxon signed rank test

Timeseries analysis in R » Decomposition, & Forecasting »

data: Pre and Post V = 3.5, p-value = 0.04688 alternative hypothesis: true mu is not equal to 0

print only the p-value

res$p.value 0.04688

If you want to test whether the median value before treatment is less than the median value post-treatment, type this:

wilcox.exact(Pre, Post, data = data, paired = TRUE, alternative = "less")

Result

data: Pre and Post V = 3.5, p-value = 0.02344 alternative hypothesis: true mu is less than 0

If you want to test whether the median value before treatment is greater than the median value post-treatment, type this:

Principal component analysis (PCA) in R »

wilcox.exact(Pre, Post, data = data, paired = TRUE, alternative = "greater")

The exact Wilcoxon signed-rank test

data: Pre and Post V = 3.5, p-value = 0.9922 alternative hypothesis: true mu is greater than 0

## Conclusion

Based on the test, significant improvement was observed in the tested sample performance over the pre-value.

Animated Graph GIF with gganimate & ggplot »