Есть три Кендалла Тау статистика ( Тау-а , Тау-б и Тау-с ).
Они не взаимозаменяемы, и ни один из опубликованных до сих пор ответов не касается последних двух, что является предметом вопроса ОП.
Мне не удалось найти функции для вычисления тау-б или тау-с, ни в R Стандартной библиотеке ( stat et al .), Ни в любом из доступных пакетов. на CRAN или других репозиториях. Я использовал отличный пакет R sos для поиска, поэтому я считаю, что возвращенные результаты были достаточно тщательными.
Итак, вот краткий ответ на вопрос ОП: нет встроенной функции или функции Package для 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-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))
Итак, эти четыре параметра - все, что вам нужно для вычисления тау-а , тау-б и тау-с :
(плюс XO & Y0 для tau-b )
Например, код для tau-c :
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))
}
Так как же статистика тау Кендалла связана с другими статистическими тестами, используемыми при анализе категориальных данных?
Все три статистики Тау Кендалла, наряду с гамма Гудмана и Крускала для корреляции порядковых и двоичных данных . (Статистика Тау Кендалла является более сложной альтернативой гамма-статистике (только P-Q).)
И, таким образом, тау Кендалла и гамма являются аналогами простых хи-квадратов и точных тестов Фишера , оба из которых насколько я знаю, подходят только для номинальных данных .
пример:
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.