# creating a long format data frame
df <- tibble(before = c(1.2, 2.0, 0.8, 0.6, 1.3, 3.2, 0.9), # original values
             after = c(1.6, 2.8, 0.7, 0.6, 1.5, 2.7, 1.1)) %>% 
  pivot_longer(cols = before:after, # making this long format
               names_to = "sample", # creating a column called "sample" that has before and after
               values_to = "value") %>% # creating a column called value that has the values
  mutate(sample = fct_relevel(sample, "before", "after")) %>% # making sure that before appears in the data frame first
  arrange(sample) # arranging the data frame so that before and after are all sitting 1. Description
In this practice problem, you’ll do a Wilcoxon signed rank test comparing paired samples to each other by hand, then double check your work with R. This is the non-parametric version of the paired t-test.
2. Steps
a. Values
Start with these values:
| Before | After | 
|---|---|
| 1.2 | 1.6 | 
| 2.0 | 2.8 | 
| 0.8 | 0.7 | 
| 0.6 | 0.6 | 
| 1.3 | 1.5 | 
| 3.2 | 2.7 | 
| 0.9 | 1.1 | 
b. Calculate the differences between samples
Then, calculate the differences between those values. You should get something that looks like this:
| Differences | 
|---|
| -0.4 | 
| -0.8 | 
| 0.1 | 
| 0.0 | 
| -0.2 | 
| 0.5 | 
| -0.2 | 
c. Take out 0, arrange by magnitude
Then, omit all observations of 0 and arrange your numbers by magnitude. You should get something that looks like this:
| Ordered magnitude | 
|---|
| 0.1 | 
| -0.2 | 
| -0.2 | 
| -0.4 | 
| 0.5 | 
| -0.8 | 
d. Give each value a “sign” and a “rank”
This is the “signed rank” part of the test: assign each value a sign (+ or -), then rank (1, 2, 3, 4, etc.) You should get something that looks like this:
| Ordered magnitude | Signed rank | 
|---|---|
| 0.1 | + 1 | 
| -0.2 | - 2 | 
| -0.2 | - 2 | 
| -0.4 | - 4 | 
| 0.5 | + 5 | 
| -0.8 | - 6 | 
e. Sum the magnitudes of the + and - values
Sum the magnitudes of the + and - values. This will be the -W and +W statistic. You then choose the lower statistic.
In this case, you should get:
+W = 1 + 5 = 6
-W = 2 + 2 + 4 + 6 = 14
Pick the lowest one: +W = 6.
e. Run the test in R to check your work.
Start with this data frame:
Then run a Wilcoxon signed rank test (note the paired = TRUE argument).
wilcox.test(value ~ sample, # formula
            data = df, # data
            paired = TRUE) # argument for a paired testWarning in wilcox.test.default(x = DATA[[1L]], y = DATA[[2L]], ...): cannot
compute exact p-value with zeroes
    Wilcoxon signed rank test with continuity correction
data:  value by sample
V = 6, p-value = 0.4017
alternative hypothesis: true location shift is not equal to 0f. Try a one-sample test.
Compare the following values to \(\mu = 7\):
| Sample | 
|---|
| 2.8 | 
| 8.3 | 
| 4.5 | 
| 6.7 | 
| 8.1 | 
| 7.2 | 
| 7.8 | 
First, calculate the difference between each observation and the \(\mu\), which is 7:
| Sample | Difference | 
|---|---|
| 2.8 | -4.2 | 
| 8.3 | 1.3 | 
| 4.5 | -2.5 | 
| 6.7 | -0.3 | 
| 8.1 | 1.1 | 
| 7.2 | 0.2 | 
| 7.8 | 0.8 | 
Then order each difference and assign a sign and rank:
| Ordered magnitude | Signed rank | 
|---|---|
| 0.2 | + 1 | 
| -0.3 | - 2 | 
| 0.8 | + 3 | 
| 1.1 | + 4 | 
| 1.3 | + 5 | 
| -2.5 | - 6 | 
| -4.2 | - 7 | 
Then sum the magnitudes:
+W = 1 + 3 + 4 + 5 = 13
-W = 2 + 6 + 7 = 15
For this example, W = 13.
Then, double check your work in R:
wilcox.test(c(2.8, 8.3, 4.5, 6.7, 8.1, 7.2, 7.8),
            mu = 7)
    Wilcoxon signed rank exact test
data:  c(2.8, 8.3, 4.5, 6.7, 8.1, 7.2, 7.8)
V = 13, p-value = 0.9375
alternative hypothesis: true location is not equal to 7