Спирменская корреляция и связи
Я вычисляю Спирмена на небольших наборах парных рейтингов. Спирмен хорошо известен тем, что не справляется со связями должным образом. Например, принимая 2 набора из 8 ранжирований, даже если 6 являются связями в одном из двух наборов, корреляция все еще очень высока:
> cor.test(c(1,2,3,4,5,6,7,8), c(0,0,0,0,0,0,7,8), method="spearman")
Spearman rank correlation rho
S = 19.8439, p-value = 0.0274
sample estimates:
rho
0.7637626
Warning message:
Cannot compute exact p-values with ties
Значение р <0,05 кажется довольно высокой статистической значимостью для этих данных. Существует ли версия Spearman с исправленными связями в R? Какая формула является наилучшей на сегодняшний день, чтобы вычислить ее с большим количеством связей?
Ответы
Ответ 1
Ну, Корреляция рангов Kendall tau также является непараметрическим тестом для статистической зависимости между двумя порядковыми (или преобразованными рангами) переменными - такими как Spearman's, но в отличие от Spearman's, может обрабатывать связи.
В частности, существует три статистики Kendall tau - tau-a, tau-b и tau-c. tau-b специально приспособлен для обработки связей.
Статистика tau-b обрабатывает связи (т.е. оба члена пары имеют одинаковое порядковое значение) с помощью делителя, который представляет среднее геометрическое между числом пар, не связанным с x, и числом, не связанным с y.
Кендалл тау не Спирмен - они не то же самое, но они также очень похожи. Вы должны будете решить, основываясь на контексте, являются ли эти два достаточно похожими, и их можно заменить на другое.
Например, tau-b:
Kendall_tau_b = (P - Q) / ( (P + Q + Y0)*(P + Q + X0) )^0.5
P: количество согласованных пар ( "согласный" означает, что ранги каждого члена пары точек данных согласуются)
Q: количество несогласных пар
X0: количество пар, не привязанных к x
Y0: количество пар, не привязанных к y
На самом деле существует вариант Spearman rho, который явно объясняет связи. В ситуациях, когда мне нужна непараметрическая ранговая корреляционная статистика, я всегда выбирал tau над rho. Причина в том, что rho суммирует ошибки squared, тогда как tau суммирует абсолютное
расхождения. Учитывая, что как tau, так и rho являются грамотной статистикой, и нам остается выбирать, линейный штраф за несоответствия (tau) всегда казался мне более естественным способом выражения ранговой корреляции. Это не рекомендация, ваш контекст может быть совершенно иным и диктовать иначе.
Ответ 2
Я думаю, что exact=FALSE
делает трюк.
cor.test(c(1,2,3,4,5,6,7,8), c(0,0,0,0,0,0,7,8), method="spearman", exact=FALSE)
Spearman rank correlation rho
data: c(1, 2, 3, 4, 5, 6, 7, 8) and c(0, 0, 0, 0, 0, 0, 7, 8)
S = 19.8439, p-value = 0.0274
alternative hypothesis: true rho is not equal to 0
sample estimates:
rho
0.7637626
Ответ 3
cor.test с методом = "spearman" фактически вычисляет коэффициент Спирмена, скорректированный для связей.
Я проверил его "вручную", вычисляя скорректированные по законам коэффициенты Спирмена с привязкой к веревке и связь между ними в уравнениях в Zar 1984, Biostatistical Analysis. Здесь код - просто замените свои собственные имена переменных, чтобы убедиться сами:
ym <- data.frame(lousy, dors) ## my data
## ranking variables
ym$l <- rank(ym$lousy)
ym$d <- rank(ym$dors)
## calculating squared differences between ranks
ym$d2d <- (ym$l-ym$d)^2
## calculating variables for equations 19.35 and 19.37 in Zar 1984
lice <- as.data.frame(table(ym$lousy))
lice$t <- lice$Freq^3-lice$Freq
dorsal <- as.data.frame(table(ym$dors))
dorsal$t <- dorsal$Freq^3-dorsal$Freq
n <- nrow(ym)
sum.d2 <- sum(ym$d2d)
Tx <- sum(lice$t)/12
Ty <-sum(dorsal$t)/12
## calculating the coefficients
rs1 <- 1 - (6*sum.d2/(n^3-n)) ## "standard" Spearman cor. coeff. (uncorrected for ties) - eq. 19.35
rs2 <- ((n^3-n)/6 - sum.d2 - Tx - Ty)/sqrt(((n^3-n)/6 - 2*Tx)*((n^3-n)/6 - 2*Ty)) ## Spearman cor.coeff. corrected for ties - eq.19.37
##comparing with cor.test function
cor.test(ym$lousy,ym$dors, method="spearman") ## cor.test gives tie-corrected coefficient!
Ответ 4
-
Скорпион, скорректированный с точки зрения
Используя method="spearman"
, вы получите исправленный связью Spearman. Spearman rho, согласно определению, представляет собой просто коэффициент корреляции образца Пирсона, рассчитанный для рангов данных образца. Таким образом, он работает как в присутствии, так и в отсутствии связей.
Вы можете видеть, что после замены исходных данных их рядами (средние значки для связей) и использования method="pearson"
, вы получите тот же результат:
> cor.test(rank(c(1,2,3,4,5,6,7,8)), rank(c(0,0,0,0,0,0,7,8)), method="pearson")
Pearson product-moment correlation
data: rank(c(1, 2, 3, 4, 5, 6, 7, 8)) and rank(c(0, 0, 0, 0, 0, 0, 7, 8))
t = 2.8983, df = 6, p-value = 0.0274
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.1279559 0.9546436
sample estimates:
cor
0.7637626
Обратите внимание: существует упрощенная версия версии Spearman, которая фактически используется в реализации cor.test()
при отсутствии связей, но она эквивалентна вышеприведенному определению.
-
Р-значение
В случае связей в данных, точные значения p не вычисляются ни для Spearman, ни для мер Кендалла (в рамках реализации cor.test()
), поэтому предупреждение. Как упоминалось в сообщении Eduardo, чтобы не получать предупреждение, вы должны установить exact=FALSE
,
Ответ 5
Работа "Новый ранг коэффициент корреляции с приложением к проблеме консенсусного ранжирования" направлена на решение проблемы ранжирования с помощью связи. В нем также упоминается, что Tau-b не следует использовать в качестве меры корреляции ранжирования для измерения согласия между слабыми порядками.
Emond, EJ and Mason, DW (2002), Новый коэффициент ранговой корреляции с применением к проблеме консенсусного ранжирования. J. Multi-Crit. Децис. Анал., 11:17-28. DOI: 10.1002/mcda.313
Ответ 6
У меня была аналогичная проблема, и, читая ответы здесь, и файл справки на R, я увидел, что, когда у вас есть связи, вы должны добавить параметр exact = FALSE
) в функцию cor.test()
. Добавив это, он не пытается вычислить точное значение P, но вместо этого "тестовая статистика - это оценка, масштабированная до нулевой средней и единичной дисперсии и приблизительно нормально распределенная".
Результат, в моем случае, был точно таким же, но без предупреждения о связях.
cor.test(x, y, method = "spearm", exact = FALSE)
Ответ 7
Пакет R ConsRank содержит реализацию Edmon и Mason Tau_X. Похоже, что это (математически) лучший известный в настоящее время метод обработки связей.
Смотрите документы, которые дают использование как
Tau_X(X, Y=NULL)
где X
может быть матрицей.
Как указывает @wibeasley, Emond and Mason (2002) предложили Tau_X, новый коэффициент корреляции ранга, который, по-видимому, превосходит Kendal Tau-b. НельсонГон был обеспокоен тем, что статья написана в 2002 году, предшествует вопросу на несколько лет, но, похоже, упустил из виду, что корреляция Спирмена датируется 1904 годом, а Кендалла Тау - 1938 годом.