sim.binary <- function (df, method = NULL, diag=FALSE, upper=FALSE){ df <- as.matrix(df) a <- df %*% t(df) b <- df %*% (1 - t(df)) c <- (1 - df) %*% t(df) d <- ncol(df) - a - b - c #1=Jaccard, 2=Baroni-Urbani & Buser, 3=Kulczynski, 4=Ochiai, 5=Sorensen if (method == 1) { sim <- a/(a + b + c) } else if (method == 2) { sim <- (a + sqrt(a*d))/(a + b + c + sqrt(a*d)) } else if (method == 3) { sim <- 0.5* (a/(a + b) + a/(a + c)) } else if (method == 4) { sim <- a/sqrt((a + b) * (a + c)) } else if (method == 5) { sim <- 2 * a/(2 * a + b + c) } sim2 <- sim[row(sim) > col(sim)] class(sim2) <- "dist" attr(sim2, "Labels") <- dimnames(df)[[1]] attr(sim2, "Diag") <- diag attr(sim2, "Upper") <- upper attr(sim2, "Size") <- nrow(df) attr(sim2, "call") <- match.call() return(sim2) }