Тест знаковых рангов Вилкоксона – это статистический тест, который часто используется данными учеными для оценки, являются ли сопоставленные измерения набора сущностей значимо различными друг от друга. В этой статье мы рассмотрим концепцию теста знаковых рангов Вилкоксона и способы его реализации с использованием T-SQL в SQL Server.
Обзор теста знаковых рангов Вилкоксона
Тест знаковых рангов Вилкоксона является одним из двух широко рекомендуемых статистических тестов для оценки, являются ли два повторных измерения на выборке сущностей статистически различными. Другой широко рекомендуемый тест – это t-тест для сопоставленных измерений. Основное отличие между этими двумя тестами заключается в том, что t-тест предполагает, что различия происходят из популяции нормально распределенных различий, в то время как тест знаковых рангов Вилкоксона не требует этого предположения.
Тест знаковых рангов Вилкоксона работает с набором сопоставленных измерений. Он требует, чтобы для каждой сущности выборки было выполнено два измерения из одной и той же популяции. Измерения должны быть для непрерывной переменной, даже если они отчетливо отражены только до ближайшего целого числа. Разница между измерениями для каждой пары должна иметь свойства порядковой шкалы, что означает, что имеет смысл говорить о различиях в измерениях как о больших, равных или меньших друг относительно друга. Кроме того, разница между измерениями для каждой пары не должна быть равна 0, так как разница 0 не дает информации о том, какое измерение больше – первое или второе.
Тест знаковых рангов Вилкоксона присваивает ранговые значения различиям сопоставленных измерений на основе их величины и знака. Сумма знаковых рангов может быть интерпретирована как значение в нормальном распределении, что позволяет оценить статистическую значимость.
Реализация теста знаковых рангов Вилкоксона в T-SQL
Для реализации теста знаковых рангов Вилкоксона в T-SQL можно использовать следующие шаги:
- Создайте таблицу для хранения сопоставленных измерений.
- Заполните таблицу данными для сопоставленных измерений.
- Вычислите абсолютные различия для каждой пары измерений.
- Вычислите знаковые ранговые значения на основе абсолютных различий.
- Вычислите сумму знаковых рангов и стандартное отклонение.
- Вычислите значение z для суммы знаковых рангов.
- Сравните вычисленное значение z с критическими значениями z для разных уровней значимости, чтобы оценить статистическую значимость.
Вот пример кода T-SQL, демонстрирующий реализацию теста знаковых рангов Вилкоксона:
use DataScience
-- создание и заполнение новой таблицы data_for_Wilcoxon_test
drop table if exists data_for_Wilcoxon_test
create table data_for_Wilcoxon_test (
comp_id varchar(10) not null,
apply1_result real not null,
apply2_result real not null
)
-- заполнение таблицы data_for_Wilcoxon_test данными для теста
insert into data_for_Wilcoxon_test values
('comp_1', 78, 78),
('comp_2', 24, 24),
('comp_3', 64, 62),
('comp_4', 45, 48),
('comp_5', 64, 68),
('comp_6', 52, 56),
('comp_7', 30, 25),
('comp_8', 50, 44),
('comp_9', 64, 56),
('comp_10', 50, 40),
('comp_11', 78, 68),
('comp_12', 22, 36),
('comp_13', 84, 68),
('comp_14', 40, 20),
('comp_15', 90, 58),
('comp_16', 72, 32)
-- вычисление абсолютных различий для каждой пары измерений
select
comp_id,
apply1_result,
apply2_result,
(apply1_result - apply2_result) as difference,
sign(apply1_result - apply2_result) as sign_for_difference,
abs(apply1_result - apply2_result) as abs_difference
from data_for_Wilcoxon_test
-- вычисление знаковых ранговых значений на основе абсолютных различий
select
Wilcoxon_differences.*,
unsigned_rank.unsigned_rank,
(Wilcoxon_differences.sign_for_difference * unsigned_rank.unsigned_rank) as signed_rank
from (
select
comp_id,
apply1_result,
apply2_result,
(apply1_result - apply2_result) as difference,
sign(apply1_result - apply2_result) as sign_for_difference,
abs(apply1_result - apply2_result) as abs_difference
from data_for_Wilcoxon_test
) Wilcoxon_differences
join (
select
abs_difference,
avg(rownumber) as unsigned_rank
from (
select
abs_difference,
rownumber
from (
select
abs(apply1_result - apply2_result) as abs_difference,
cast(row_number() over (order by abs(apply1_result - apply2_result)) as float) as rownumber
from data_for_Wilcoxon_test
) for_avg_rownumber
group by abs_difference, rownumber
) for_avg_rownumber
group by abs_difference
) unsigned_rank
on Wilcoxon_differences.abs_difference = unsigned_rank.abs_difference
-- вычисление суммы знаковых рангов, стандартного отклонения и значения z
declare @n int, @sum int
select @n = count(signed_rank), @sum = sum(signed_rank)
from (
select
Wilcoxon_differences.*,
unsigned_rank.unsigned_rank,
(Wilcoxon_differences.sign_for_difference * unsigned_rank.unsigned_rank) as signed_rank
from (
select
comp_id,
apply1_result,
apply2_result,
(apply1_result - apply2_result) as difference,
sign(apply1_result - apply2_result) as sign_for_difference,
abs(apply1_result - apply2_result) as abs_difference
from data_for_Wilcoxon_test
) Wilcoxon_differences
join (
select
abs_difference,
avg(rownumber) as unsigned_rank
from (
select
abs_difference,
rownumber
from (
select
abs(apply1_result - apply2_result) as abs_difference,
cast(row_number() over (order by abs(apply1_result - apply2_result)) as float) as rownumber
from data_for_Wilcoxon_test
) for_avg_rownumber
group by abs_difference, rownumber
) for_avg_rownumber
group by abs_difference
) unsigned_rank
on Wilcoxon_differences.abs_difference = unsigned_rank.abs_difference
) for_@n_and_@sum
-- вычисление значения z для суммы знаковых рангов
select
@sum as W,
@n as N,
sqrt((@n * (@n + 1) * (2 * @n + 1)) / 6) as [стандартное отклонение знаковых рангов],
case
when @sum > 0 then (@sum - 0.5) / sqrt((@n * (@n + 1) * (2 * @n + 1)) / 6)
else (@sum + 0.5) / sqrt((@n * (@n + 1) * (2 * @n + 1)) / 6)
end as [z для суммы знаковых рангов]
Следуя этим шагам и выполняя код T-SQL, вы можете вычислить статистику теста знаковых рангов Вилкоксона и оценить ее статистическую значимость для ваших сопоставленных измерений.
Заключение
Тест знаковых рангов Вилкоксона является ценным статистическим тестом для оценки, являются ли сопоставленные измерения набора сущностей значимо различными друг от друга. Реализуя тест знаковых рангов Вилкоксона в T-SQL, вы можете анализировать ваши сопоставленные измерения и определить их статистическую значимость. Понимание теста знаковых рангов Вилкоксона и его реализация в SQL Server могут расширить ваши возможности анализа данных и предоставить ценные идеи о ваших данных.