Меры ассоциации в R — tau-b и tau-c Kendall

Есть ли какие-либо пакеты R для вычисления tau-b и tau-c Kendall и их связанных стандартных погрешностей? Мои поиски на Google и Rseek ничего не подняли, но конечно кто-то реализовал их в R.

16
задан smci 14 July 2015 в 09:10
поделиться

4 ответа

Есть три статистики тау Кендалла ( тау-а , тау-б и тау-с ).

Они не взаимозаменяемы, и ни один из ответов, опубликованных на данный момент, не касается последних двух, которые являются предметом вопроса ОП.

Мне не удалось найти функции для вычисления 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.
41
ответ дан 30 November 2019 в 15:15
поделиться

Вы пробовали использовать функцию cor? Там есть метод, который можно установить на "kendall" (также есть опции для "pearson" и "spearman", если нужно), не уверен, что это покрывает все стандартные ошибки, которые вы ищете, но это должно помочь вам начать.

2
ответ дан 30 November 2019 в 15:15
поделиться

В пакете Psy есть подпрограмма для коэффициента Кендалла с corr.test (x, method = "kendall") . Эта функция может быть применена к data.frame, а также отображает p-значений для каждой пары переменных. Я думаю, он отображает коэффициент тау-а . Единственным недостатком является то, что на самом деле это оболочка для функции cor () .

В Википедии есть хорошая ссылка на коэффициент Кендалла, и проверьте эту ссылку . Попробуйте пакет sos и функцию findFn () . При запросе "tau a" и tau b у меня было много чего, но оба закончились безуспешно. И результаты поиска, похоже, объединяются в пакет Kendall , как предложил @Ian .

0
ответ дан 30 November 2019 в 15:15
поделиться

Просто чтобы расширить ответ Стеди ... 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 
4
ответ дан 30 November 2019 в 15:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: