Знаковый ранговый тест Вилкоксона в программировании на R

Опубликовано: 19 Июля, 2021

Знаковый ранговый тест Уилкоксона - это непараметрический тест статистической гипотезы, используемый для сравнения двух связанных выборок, совпадающих выборок или повторных измерений на одной выборке, чтобы оценить, различаются ли их средние ранги совокупности, например, это тест парных различий. Его можно применять в качестве альтернативы парному t-критерию Стьюдента, также известному как «t-критерий для согласованных пар» или «t-критерий для зависимых выборок», когда нельзя предположить, что распределение разницы между средними значениями двух выборок быть нормально распределенным. Знаковый ранговый критерий Уилкоксона - это непараметрический тест, который можно использовать для определения того, были ли выбраны две зависимые выборки из популяций с одинаковым распределением. Этот тест можно разделить на две части:

  • Одновыборочный подписанный ранговый тест Вилкоксона
  • Парные образцы Тест Вилкоксона

Одновыборочный подписанный ранговый тест Вилкоксона

Одновыборочный знаковый ранговый критерий Вилкоксона является непараметрической альтернативой однократному t-критерию, когда нельзя предположить, что данные имеют нормальное распределение. Он используется для определения того, равна ли медиана выборки известному стандартному значению, то есть теоретическому значению. На языке R выполнить этот тест очень легко.

Реализация в R

Для выполнения одновыборочного теста Вилкоксона R предоставляет функцию wilcox.test() которую можно использовать следующим образом:

Syntax:
wilcox.test(x, mu = 0, alternative = “two.sided”)

Parameters:
x: a numeric vector containing your data values
mu: the theoretical mean/median value. Default is 0 but you can change it.
alternative: the alternative hypothesis. Allowed value is one of “two.sided” (default), “greater” or “less”.



Пример:
Здесь давайте воспользуемся примером набора данных, содержащего массу 10 кроликов. Как узнать, отличается ли средний вес кролика от 25 г?




# R program to illustrate
# one-sample Wilcoxon signed-rank test
# The data set
set .seed( 1234 )
myData = data.frame(
name = paste0(rep( "R_" , 10 ), 1 : 10 ),
weight = round (rnorm( 10 , 30 , 2 ), 1 )
)
# Print the data
print (myData)
# One-sample wilcoxon test
result = wilcox.test(myData$weight, mu = 25 )
# Printing the results
print (result)

Выход:

    вес имени
1 R_1 27,6
2 Р_2 30,6
3 R_3 32,2
4 R_4 25,3
5 R_5 30,9
6 R_6 31,0
7 R_7 28,9
8 R_8 28,9
9 R_9 28.9
10 R_10 28,2

    Знаковый ранговый тест Вилкоксона с поправкой на непрерывность

данные: myData $ вес
V = 55, значение p = 0,005793
Альтернативная гипотеза: истинное местоположение не равно 25

В приведенных выше выходных данных p-значение теста составляет 0,005793, что меньше уровня значимости альфа = 0,05. Таким образом, мы можем отвергнуть нулевую гипотезу и сделать вывод, что средний вес кролика значительно отличается от 25 г с p-значением = 0,005793.

Если кто-то хочет проверить, составляет ли средний вес кролика менее 25 г (односторонний тест), то код будет следующим:




# R program to illustrate
# one-sample Wilcoxon signed-rank test
# The data set
set .seed( 1234 )
myData = data.frame(
name = paste0(rep( "R_" , 10 ), 1 : 10 ),
weight = round (rnorm( 10 , 30 , 2 ), 1 )
)
# One-sample wilcoxon test
wilcox.test(myData$weight, mu = 25 ,
alternative = "less" )
# Printing the results
print (result)

Выход:

Знаковый ранговый тест Вилкоксона с поправкой на непрерывность

данные: myData $ вес
V = 55, значение p = 0,9979
Альтернативная гипотеза: истинное местоположение меньше 25

Или, если кто-то хочет проверить, превышает ли средний вес кролика 25 г (односторонний тест), то код будет следующим:




# R program to illustrate
# one-sample Wilcoxon sign-rank test
# The data set
set .seed( 1234 )
myData = data.frame(
name = paste0(rep( "R_" , 10 ), 1 : 10 ),
weight = round (rnorm( 10 , 30 , 2 ), 1 )
)
# One-sample wilcoxon test
wilcox.test(myData$weight, mu = 25 ,
alternative = "greater" )
# Printing the results
print (result)

Выход:

Знаковый ранговый тест Вилкоксона с поправкой на непрерывность

данные: myData $ вес
V = 55, значение p = 0,002897
Альтернативная гипотеза: истинное местоположение больше 25

Парные образцы Тест Вилкоксона в R

Тест Вилкоксона для парных выборок является непараметрической альтернативой парному t-критерию, используемому для сравнения парных данных. Он используется, когда данные не распределяются нормально.

Реализация в R

Для выполнения теста Вилкоксона для парных выборок R предоставляет функцию wilcox.test() которую можно использовать следующим образом:

Syntax:
wilcox.test(x, y, paired = TRUE, alternative = “two.sided”)

Parameters:
x, y: numeric vectors
paired: a logical value specifying that we want to compute a paired Wilcoxon test
alternative: the alternative hypothesis. Allowed value is one of “two.sided” (default), “greater” or “less”.

Пример:
Здесь давайте воспользуемся примером набора данных, который содержит массу 10 кроликов до и после лечения. Мы хотим знать, есть ли какая-либо значительная разница в среднем весе до и после лечения?




# R program to illustrate
# Paired Samples Wilcoxon Test
# The data set
# Weight of the rabbit before treatment
before < - c( 190.1 , 190.9 , 172.7 , 213 , 231.4 ,
196.9 , 172.2 , 285.5 , 225.2 , 113.7 )
# Weight of the rabbit after treatment
after < - c( 392.9 , 313.2 , 345.1 , 393 , 434 ,
227.9 , 422 , 383.9 , 392.3 , 352.2 )
# Create a data frame
myData < - data.frame(
group = rep(c( "before" , "after" ), each = 10 ),
weight = c(before, after)
)
# Print all data
print (myData)
# Paired Samples Wilcoxon Test
result = wilcox.test(before, after, paired = TRUE)
# Printing the results
print (result)

Выход:

   вес группы
1 до 190,1
2 до 190,9
3 до 172,7
4 до 213,0
5 до 231,4
6 до 196,9
7 до 172,2
8 до 285,5
9 до 225,2
10 до 113,7
11 после 392,9
12 после 313,2
13 после 345,1
14 после 393,0
15 после 434,0
16 после 227,9
17 после 422,0
18 после 383,9
19 после 392,3
20 после 352,2

    Знаковый ранговый тест Вилкоксона

данные: до и после
V = 0, p-значение = 0,001953
альтернативная гипотеза: истинное смещение местоположения не равно 0

В приведенных выше выходных данных p-значение теста составляет 0,001953, что меньше уровня значимости альфа = 0,05. Мы можем заключить, что средний вес мышей до лечения значительно отличается от среднего веса после лечения с p-значением = 0,001953.

Если кто-то хочет проверить, меньше ли средний вес до лечения, чем средний вес после лечения, то код будет следующим:




# R program to illustrate
# Paired Samples Wilcoxon Test
# The data set
# Weight of the rabbit before treatment
before < - c( 190.1 , 190.9 , 172.7 , 213 , 231.4 ,
196.9 , 172.2 , 285.5 , 225.2 , 113.7 )
# Weight of the rabbit after treatment
after < - c( 392.9 , 313.2 , 345.1 , 393 , 434 ,
227.9 , 422 , 383.9 , 392.3 , 352.2 )
# Create a data frame
myData < - data.frame(
group = rep(c( "before" , "after" ), each = 10 ),
weight = c(before, after)
)
# Paired Samples Wilcoxon Test
result = wilcox.test(weight ~ group,
data = myData,
paired = TRUE,
alternative = "less" )
# Printing the results
print (result)

Выход:

Знаковый ранговый тест Вилкоксона

данные: вес по группам
V = 55, p-значение = 1
альтернативная гипотеза: истинное смещение местоположения меньше 0

Или, если кто-то хочет проверить, больше ли средний вес до лечения, чем средний вес после лечения, тогда код будет:




# R program to illustrate
# Paired Samples Wilcoxon Test
# The data set
# Weight of the rabbit before treatment
before < - c( 190.1 , 190.9 , 172.7 , 213 , 231.4 ,
196.9 , 172.2 , 285.5 , 225.2 , 113.7 )
# Weight of the rabbit after treatment
after < - c( 392.9 , 313.2 , 345.1 , 393 , 434 ,
227.9 , 422 , 383.9 , 392.3 , 352.2 )
# Create a data frame
myData < - data.frame(
group = rep(c( "before" , "after" ), each = 10 ),
weight = c(before, after)
)
# Paired Samples Wilcoxon Test
result = wilcox.test(weight ~ group,
data = myData,
paired = TRUE,
alternative = "greater" )
# Printing the results
print (result)

Выход:

Знаковый ранговый тест Вилкоксона

данные: вес по группам
V = 55, значение p = 0,0009766
альтернативная гипотеза: истинное смещение местоположения больше 0