# Download Files Post/Source
Goodman and Kruskal Gamma in R
Jae-seong Yoo
2014. 6. 5. 03:39
### gammaGK function gammaGK <- function(x,y=NULL){ concordant <- function(x){ ## get sum(matrix values > r AND > c) ## for each matrix[r, c] mat.lr <- function(r,c){ lr <- x[(r.x > r) & (c.x > c)] sum(lr) } ## get row and column index for each ## matrix element r.x <- row(x) c.x <- col(x) ## return the sum of each matrix[r, c] * sums ## using mapply to sequence thru each matrix[r, c] sum(x * mapply(mat.lr, r = r.x, c = c.x)) } discordant <- function(x){ ## get sum(matrix values > r AND < c) ## for each matrix[r, c] mat.ll <- function(r,c){ ll <- x[(r.x > r) & (c.x < c)] sum(ll) } ## get row and column index for each ## matrix element r.x <- row(x) c.x <- col(x) ## return the sum of each matrix[r, c] * sums ## using mapply to sequence thru each matrix[r, c] sum(x * mapply(mat.ll, r = r.x, c = c.x)) } if(is.table(x) | is.matrix(x)){ c <- concordant(x) d <- discordant(x) n <- sum(x) } else{ tab <- table(x,y) c <- concordant(tab) d <- discordant(tab) n <- sum(tab) } gamma <- (c - d) / (c + d) arg <- (c+d)/(n*(1-(gamma^2))) stdError <- 1/sqrt(arg) z <- gamma/stdError return(gamma) }