Tengo una matriz de 336x256 números de coma flotante (336 genomas bacterianos (columnas) x 256 frecuencias de tetranucleótidos normalizadas (filas), por ejemplo, cada columna suma 1).
Obtengo buenos resultados cuando ejecuto mi análisis utilizando el análisis de componentes principales. Primero calculo los grupos de kmeans en los datos, luego ejecuto un PCA y coloreo los puntos de datos basados en el grupo de kmeans inicial en 2D y 3D:
library(tsne)
library(rgl)
library(FactoMineR)
library(vegan)
# read input data
mydata <-t(read.csv("freq.out", header = T, stringsAsFactors = F, sep = "\t", row.names = 1))
# Kmeans Cluster with 5 centers and iterations =10000
km <- kmeans(mydata,5,10000)
# run principle component analysis
pc<-prcomp(mydata)
# plot dots
plot(pc$x[,1], pc$x[,2],col=km$cluster,pch=16)
# plot spiderweb and connect outliners with dotted line
pc<-cbind(pc$x[,1], pc$x[,2])
ordispider(pc, factor(km$cluster), label = TRUE)
ordihull(pc, factor(km$cluster), lty = "dotted")
# plot the third dimension
pc3d<-cbind(pc$x[,1], pc$x[,2], pc$x[,3])
plot3d(pc3d, col = km$cluster,type="s",size=1,scale=0.2)
Pero cuando trato de cambiar la PCA con el método t-SNE, los resultados se ven muy inesperados:
tsne_data <- tsne(mydata, k=3, max_iter=500, epoch=500)
plot(tsne_data[,1], tsne_data[,2], col=km$cluster, pch=16)
ordispider(tsne_data, factor(km$cluster), label = TRUE)
ordihull(tsne_data, factor(km$cluster), lty = "dotted")
plot3d(tsne_data, main="T-SNE", col = km$cluster,type="s",size=1,scale=0.2)
Mi pregunta aquí es por qué la agrupación de kmeans es tan diferente de lo que calcula t-SNE. Hubiera esperado una separación aún mejor entre los clústeres que la PCA, pero me parece casi aleatoria. ¿Sabes por qué es esto? ¿Me estoy perdiendo un paso de escala o algún tipo de normalización?