% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/csi.R
\name{csi}
\alias{csi}
\title{Cosine Similarity Index}
\usage{
csi(x, y = NULL, angular = TRUE)
}
\arguments{
\item{x}{A vector or matrix object}

\item{y}{If x is a vector, then a vector object}

\item{angular}{Booliean (TRUE/FALSE) return angular similarity}
}
\value{
If x is a matrix, a list object with: similarity and angular.similarity matrices or,  
if x and y are vectors, a vector of similarity and angular.similarity
}
\description{
Calculates the cosine similarity and angular similarity on  
             two vectors or a matrix
}
\details{
The cosine similarity index is a measure of similarity between two 
vectors of an inner product space. This index is bested suited for high-dimensional 
positive variable space. One useful application of the index is to measure separability 
of clusters derived from algorithmic approaches (e.g., k-means). It is a good common 
practice to center the data before calculating the index. It should be noted that the 
cosine similarity index is mathematically, and often numerically, equivalent to the 
Pearson's correlation coefficient   

The cosine similarity index is derived: 
s(xy) = x * y / ||x|| * ||y||, where the expected is 1.0 (perfect similarity)  
to -1.0 (perfect dissimilarity). A normalized angle between the vectors can 
be used as a bounded similarity function within [0,1] 
angular similarity  = 1 - (cos(s)^-1/pi)
}
\examples{
# Compare two vectors (centered using scale)
x=runif(100)
y=runif(100)^2
csi(as.vector(scale(x)),as.vector(scale(y)))
  
# Compare columns (vectors) in a matrix (centered using scale)
x <- matrix(round(runif(100),0),nrow=20,ncol=5)
( s <- csi(scale(x)) )
    
# Compare vector (x) to each column in a matrix (y)
y <- matrix(round(runif(500),3),nrow=100,ncol=5)
x=runif(100) 
csi(as.vector(scale(x)),scale(y))

}
\author{
Jeffrey S. Evans  <jeffrey_evans@tnc.org>
}
