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