Есть ли какие-либо пакеты R для вычисления tau-b и tau-c Kendall и их связанных стандартных погрешностей? Мои поиски на Google и Rseek ничего не подняли, но конечно кто-то реализовал их в R.
Есть три статистики тау Кендалла ( тау-а , тау-б и тау-с ).
Они не взаимозаменяемы, и ни один из ответов, опубликованных на данный момент, не касается последних двух, которые являются предметом вопроса ОП.
Мне не удалось найти функции для вычисления tau-b или tau-c ни в стандартной библиотеке R ( stat et al .), Ни в любом из доступных пакетов в CRAN или других репозиториях. Я использовал отличный пакет R sos для поиска, поэтому считаю, что полученные результаты были достаточно подробными.
Итак, это краткий ответ на вопрос OP: нет встроенной или пакетной функции для tau-b или tau-c .
Но и самому легко свернуть.
Написание функций R для статистики Кендалла - это просто вопрос перевода этих уравнений в код:
Kendall_tau_a = (P - Q) / (n * (n - 1) / 2)
Kendall_tau_b = (P - Q) / ( (P + Q + Y0) * (P + Q + X0) ) ^ 0.5
Kendall_tau_c = (P - Q) * ((2 * m) / n ^ 2 * (m - 1) )
tau-a: равный конкордантным минус дискордантным парам, разделенным на коэффициент для учета общее количество пар (размер выборки).
tau-b: явный учет связей - т.е., оба члена пары данных имеют одинаковое значение; это значение равно согласованным минус несогласованным парам, разделенным на член , представляющий среднее геометрическое между количеством пар, не связанных на x (X0), и числом, не связанным на y (Y0).
tau-c: вариант с большей таблицей , также оптимизированный для неквадратных таблиц; равно согласованным минус несогласованным парам, умноженным на коэффициент, который корректируется для размера таблицы).
# Number of concordant pairs.
P = function(t) {
r_ndx = row(t)
c_ndx = col(t)
sum(t * mapply(function(r, c){sum(t[(r_ndx > r) & (c_ndx > c)])},
r = r_ndx, c = c_ndx))
}
# Number of discordant pairs.
Q = function(t) {
r_ndx = row(t)
c_ndx = col(t)
sum(t * mapply( function(r, c){
sum(t[(r_ndx > r) & (c_ndx < c)])
},
r = r_ndx, c = c_ndx) )
}
# Sample size (total number of pairs).
n = n = sum(t)
# The lesser of number of rows or columns.
m = min(dim(t))
Итак, эти четыре параметра - все, что вам нужно для расчета тау-а , тау-б и тау-с :
P
] Q
m
n
(плюс XO и Y0 для tau-b )
Например, код для tau-c is:
kendall_tau_c = function(t){
t = as.matrix(t)
m = min(dim(t))
n = sum(t)
ks_tauc = (m * 2 * (P(t) - Q(t))) / ((n ^ 2) * (m - 1))
}
Итак, как статистика тау Кендалла связана с другими статистическими тестами, используемыми в категориальном анализе данных?
Все три статистики тау Кендалла вместе со статистикой Гудмана. и гамма Краскала предназначены для корреляции порядковых и двоичных данных . (Статистика тау Кендалла является более сложной альтернативой статистике гамма (просто PQ).)
Таким образом, тау Кендаллса тау и гамма являются аналогами простой хи -квадрат и точные тесты Фишера , оба из которых (насколько мне известно) подходят только для номинальных данных .
пример:
cpa_group = c(4, 2, 4, 3, 2, 2, 3, 2, 1, 5, 5, 1)
revenue_per_customer_group = c(3, 3, 1, 3, 4, 4, 4, 3, 5, 3, 2, 2)
weight = c(1, 3, 3, 2, 2, 4, 0, 4, 3, 0, 1, 1)
dfx = data.frame(CPA=cpa_group, LCV=revenue_per_customer_group, freq=weight)
# Reshape data frame so 1 row for each event
# (predicate step to create contingency table).
dfx2 = data.frame(lapply(dfx, function(x) { rep(x, dfx$freq)}))
t = xtabs(~ revenue + cpa, dfx)
kc = kendall_tau_c(t)
# Returns -.35.
Вы пробовали использовать функцию cor
? Там есть метод, который можно установить на "kendall"
(также есть опции для "pearson"
и "spearman"
, если нужно), не уверен, что это покрывает все стандартные ошибки, которые вы ищете, но это должно помочь вам начать.
В пакете Psy
есть подпрограмма для коэффициента Кендалла с corr.test (x, method = "kendall")
. Эта функция может быть применена к data.frame, а также отображает p-значений для каждой пары переменных. Я думаю, он отображает коэффициент тау-а . Единственным недостатком является то, что на самом деле это оболочка для функции cor ()
.
В Википедии есть хорошая ссылка на коэффициент Кендалла, и проверьте эту ссылку . Попробуйте пакет sos
и функцию findFn ()
. При запросе "tau a"
и tau b
у меня было много чего, но оба закончились безуспешно. И результаты поиска, похоже, объединяются в пакет Kendall
, как предложил @Ian .
Просто чтобы расширить ответ Стеди ... cor (x, y, method = "kendall")
даст вам корреляцию, cor .test (x, y, method = "kendall")
даст вам p-значение и CI.
Также обратите внимание на пакет Kendall, который предоставляет функцию, которая требует лучшего приближения.
> library(Kendall)
> Kendall(x,y)
В пакете Deducer также есть функция cor.matrix для хорошей печати:
> library(Deducer)
> cor.matrix(variables=d(mpg,hp,wt),,
+ data=mtcars,
+ test=cor.test,
+ method='kendall',
+ alternative="two.sided",exact=F)
Kendall's rank correlation tau
mpg hp wt
mpg cor 1 -0.7428 -0.7278
N 32 32 32
stat** -5.871 -5.798
p-value 0.0000 0.0000
----------
hp cor -0.7428 1 0.6113
N 32 32 32
stat** -5.871 4.845
p-value 0.0000 0.0000
----------
wt cor -0.7278 0.6113 1
N 32 32 32
stat** -5.798 4.845
p-value 0.0000 0.0000
----------
** z
HA: two.sided