Me gustaría hacer un mapa de calor con agrupamiento de filas basado en distancias de coseno. Estoy usando R y heatmap.2()
para hacer la figura. Puedo ver que hay un dist
parámetro heatmap.2
pero no puedo encontrar una función para generar la matriz de disimilitud del coseno. La dist
función incorporada no admite distancias de coseno, también encontré un paquete llamado arules
con una dissimilarity()
función pero solo funciona en datos binarios.
r
clustering
similarities
Greg Slodkowicz
fuente
fuente
Respuestas:
Como @Max indicó en los comentarios (+1), sería más sencillo "escribir el suyo" que pasar tiempo buscándolo en otro lugar. Como sabemos, la similitud del coseno entre dos vectores de longitud n esA , B norte
que es fácil de generar
R
. SeaX
la matriz donde las filas son los valores entre los que queremos calcular la similitud. Luego podemos calcular la matriz de similitud con el siguienteR
código:Entonces la matriz
C
es la matriz de similitud de coseno y puede pasarla a la función de mapa de calor que desee (la única con la que estoy familiarizado esimage()
).fuente
Puede usar la
cosine
función del paquete lsa:http://cran.r-project.org/web/packages/lsa
fuente
La siguiente función puede ser útil cuando se trabaja con matrices, en lugar de vectores 1-d:
fuente
Algunas respuestas anteriores son computacionalmente ineficientes, intente esto;
Para la matriz de similitud de coseno
Convierta a matriz de disimilaridad de coseno (matriz de distancia).
fuente
Acelerando parte del código anterior (de @Macro) sobre este tema, podemos envolverlo en una versión más limpia de la siguiente manera:
¡Espero que esto ayude!
fuente