2010-04-01 17 views
15

Czy są jakieś pakiety R do obliczania tau-b i tau-c Kendalla i związanych z nimi błędów standardowych? Moje wyszukiwania w Google i Rseek nie wykazały niczego, ale na pewno ktoś je zaimplementował w R.Miary skojarzeń w R-Kendall's tau-b i tau-c

+7

Po obliczeniu tego ręką i porównywania, stwierdziliśmy 'KR (x, y, sposób = "Kendall")' (który znajduje się w zainstalowanym 'pakietu stats') stanowi Kendall tau-b * nie * Tau-a Kendalla. (Przynajmniej od wersji R 3.0.2.) – Firefeather

Odpowiedz

39

Istnieje trzyKendal statystyki tau (tau-A, tau-b i tau-C).

Są one nie wymienne, a żadna z odpowiedzi opublikowanych do tej pory nie dotyczy dwóch ostatnich, co jest przedmiotem pytania OP.

nie był w stanie znaleźć funkcje w celu obliczenia tau-tau-B lub C, albo w R Biblioteka standardowa ( stat i wsp.) Lub w każdym z pakietów dostępnych w CRAN lub innych testing. Użyłem doskonałego pakietu R sos do wyszukiwania, więc uważam, że wyniki zwrócone były dość dokładne.

Oto krótka odpowiedź na pytanie OP: brak funkcji wbudowanej lub pakietowej dla tau-b lub tau-c.

Ale łatwo jest przetaczać własne.

funkcje Pisanie R dla statystyk Kendall jest tylko kwestią tłumaczenia te równania do kodu:

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: równa zgodnych minus niezgodnych parach, podzielona przez czynnik do uwzględnienia całkowita liczba par (wielkość próby).

tau-b: jawne rozliczanie więzi --ie, obaj członkowie pary danych mają taką samą wartość; ta wartość jest równa zgodnej minus pary niezgodne podzielona przez termin reprezentujący średnią geometryczną między liczbą par niezwiązanych na x (X0) i liczbą nie związaną na y (Y0).

tau-C:większej tabeli wariant również optymalizowane dla tabel niekwadratowych; równa się zgodnym minusom niezgodnym parom pomnożonym przez współczynnik dostosowujący się do rozmiaru tabeli).

# 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)) 

Więc te cztery parametry są potrzebne do obliczenia tau-a, tau-b i tau-c:

  • P

  • Q

  • m

  • n

(oraz XO & Y0 do tau-b)


Na przykład, kod tau-c jest:

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)) 
} 

Więc jak to statystyka tau Kendalla związane innych badań statystycznych wykorzystywanych w kategorycznej analizy danych?

Wszystkie trzy statystyki tau Kendalla, wraz z Goodmana i Kruskala za gamma są dla korelacji porządkowych i binarnych danych. (Statystyki Kendall tau są bardziej wyrafinowanymi alternatywami dla statystyki gamma (tylko P-Q).)

I tak Kendalls za tau i gamma są odpowiednikami do prostego chi-kwadrat i dokładnych testów Fishera, z których oba są (o ile wiem) nadaje się tylko do danych nominalnej.

przykład:

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 
# (prediate 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 
2

Czy próbowałeś już funkcji cor? Istnieje metoda, którą można ustawić na "kendall" (w razie potrzeby dostępne są również opcje dla "pearson" i "spearman"), nie wiem, czy obejmuje ona wszystkie standardowe błędy, których szukasz, ale powinna zacząć.

+4

-1: To nie mówi nic o Tau-b Kendalla ani Tau-c, więc nie odpowiada na pytanie. – Firefeather

5

Po to, by rozwinąć odpowiedź Stedy'ego ... cor(x,y,method="kendall") da ci korelację, cor.test(x,y,method="kendall") da ci wartość p i CI.

Zobacz także pakiet Kendall, który zapewnia funkcję, która zapewnia lepszą aproksymację.

> library(Kendall) 
> Kendall(x,y) 

Istnieje również funkcja cor.matrix w pakiecie Deducer o ładnym druku:

> 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

-1: To nie czyni żadnej wzmianki o Tau-b Kendalla lub Tau-c, więc nie odpowiada na pytanie. – Firefeather

0

Jest rutynową dla współczynnika Kendalla w psych pakiecie z corr.test(x, method = "kendall"). Ta funkcja może być zastosowana w data.frame, a także wyświetla wartości p-wartości dla każdej pary zmiennych. Domyślam się, że wyświetla on współczynnik tau-a. Jedynym minusem jest to, że w rzeczywistości jest to wrapper dla funkcji cor().

Wikipedia ma good reference na współczynniku Kendalla i sprawdź this link obecnie. Wypróbuj pakiet sos i funkcję findFn(). Mam masę rzeczy podczas sprawdzania "tau a" i tau b, ale oba zakończyły się bez powodzenia. Wyniki wyszukiwania wydają się łączyć z pakietem Kendall, sugerowanym jako @Ian.

+0

@ Komentarze Firefeather na tej stronie wskazują, że 'cor' oblicza * tau-b *. –

2

Natknęliśmy tej stronie dzisiaj, jak szukałem implementacji tau-b Kendalla w R
dla nikogo szuka samo:
tau b jest w rzeczywistości częścią pakietu statystyk.

Zobacz ten link aby uzyskać więcej informacji: https://stat.ethz.ch/pipermail/r-help//2012-August/333656.html

Próbowałem ją i działa: Library (statystyk)

x <- c(1,1,2) 
y<-c(1,2,3) 
cor.test(x, y, method = "kendall", alternative = "greater") 

to wyjście:

data: x and y 
z = 1.2247, p-value = 0.1103 
alternative hypothesis: true tau is greater than 0 
sample estimates: 
     tau 
0.8164966 

Warning message: 
In cor.test.default(x, y, method = "kendall", alternative = "greater") : 
    Cannot compute exact p-value with ties 

Zignoruj komunikat ostrzegawczy. Tau jest w rzeczywistości tau b !!!

+1

Rzeczywiście, zarówno 'cor.test (x, y, method =" kendall ")' i 'cor (x, y, method =" kendall ")' obliczyć Tau-b Kendalla. – Firefeather

4

Dość długo, ale 3 funkcje są zaimplementowane w DescTools.

library(DescTools) 
# example in: 
# http://support.sas.com/documentation/cdl/en/statugfreq/63124/PDF/default/statugfreq.pdf 
# pp. S. 1821 
tab <- as.table(rbind(c(26,26,23,18,9),c(6,7,9,14,23))) 

# tau-a 
KendallTauA(tab, conf.level=0.95) 
tau_a lwr.ci ups.ci 
0.2068323 0.1771300 0.2365346 

# tau-b 
KendallTauB(tab, conf.level=0.95) 
    tau_b lwr.ci ups.ci 
0.3372567 0.2114009 0.4631126 

# tau-c 
> StuartTauC(tab, conf.level=0.95) 
    tauc lwr.ci ups.ci 
0.4110953 0.2546754 0.5675151 

# alternative for tau-b: 
d.frm <- Untable(tab, dimnames = list(1:2, 1:5)) 
cor(as.numeric(d.frm$Var1), as.numeric(d.frm$Var2),method="kendall") 
[1] 0.3372567 

# but no confidence intervalls for tau-b! Check: 
unclass(cor.test(as.numeric(d.frm$Var1), as.numeric(d.frm$Var2), method="kendall")) 
3

Odpowiedź Douga jest niepoprawna. Pakiet Kendall może być użyty do obliczenia Tau b.

Funkcja pakietu Kendall Kendall (a także wydaje się, że jest to cor (x, y, method = "kendall")) obliczania więzi za pomocą wzoru na Tau-b. Jednak w przypadku wektorów z wiązaniami pakiet Kendalla ma bardziej poprawną wartość p. Patrz strona 4 dokumentacji Kendall z https://cran.r-project.org/web/packages/Kendall/Kendall.pdf stronie 4 i D przedstawieniu mianownik obliczeń Kendall:

i D = N (N - 1)/2. S nazywa się partyturą, a D, mianownikiem, jest maksymalną możliwą wartością S. Kiedy są więzy, formuła dla D jest bardziej skomplikowana (Kendall, 1974, rozdział 3) i to ogólne forum dla więzi w obu rewanżach jest zaimplementowane w naszej funkcji. Wartość p tau w ramach hipotezy zerowej o braku asocjacji jest obliczana w przypadku braku powiązań przy użyciu dokładnego algorytmu podanego przez Best i Gipps (1974). Gdy obecne są wiązania, normalne przybliżenie z korektą ciągłości jest stosowane przez przyjęcie S jako normalnie rozłożonego ze średnim zerem i wariancją var (S), gdzie var (S) jest podany przez Kendall (1976, eqn 4.4, p.55). O ile więzi są bardzo rozległe i/lub dane są bardzo krótkie, to przybliżenie jest wystarczające. Jeśli obecne są rozległe więzy, to bootstrap dostarcza dogodnego rozwiązania (Davis i Hinkley, 1997). Alternatywnie dostępna jest również dokładna metoda oparta na wyczerpującym wyliczaniu (Valz i Thompson, 1994), ale nie jest to zaimplementowane w tym pakiecie.

Pierwotnie dokonałem edycji odpowiedzi Douga na ten temat, ale zostało odrzucone z powodu "skierowania do autora i bardziej odpowiednie jako odpowiedź lub komentarz".Pozostawiłbym to jako komentarz do odpowiedzi, ale moja reputacja nie jest jeszcze na tyle wysoka, aby móc wypowiedzieć się.

0

robiłem badanie trochę na tau Kendalla. Bezpośrednie użycie cor (x, y, method = "kendall") da ci tau-b Kendalla, który trochę różni się od pierwotnej definicji, tj. Tau-a Kendalla. Tau-b Kendalla jest częściej używany, ponieważ bierze pod uwagę więzi, stąd większość dostępnych pakietów oprogramowania (na przykład cor(), Kendall()) wszystkie obliczają tau-b Kendalla.

Różnica pomiędzy Kendall tau-tau-A i B jest zasadniczo mianownik. Mianowicie, tau-A Kendall mianownik D = n * (n-1)/2, które są stałe, podczas gdy Kendall tau-b mianownik D = sqrt (no. Par Var1 bez wiązanej pary) * sqrt (Nie, pary Var2 z wyłączeniem wiązanych par). Wartość tua-b jest zwykle większa niż tau-a.

Jako prosty przykład, że X = (1,2,3,4,4), Y = (2,3,4,4,4). Tau-b Kendalla = 0,88, a tau-a = 0,7.

Dla Kendalla tau-c, nie widzę zbyt wiele na ten temat, więc nie ma żadnych komentarzy.

Powiązane problemy