R/dist_train_test.R

#' Cálculo de distancias entre compras de train y test sets
#'
#' Esta función se sirve de un MCA clásico (distancias euclídeas sobre variables categóricas transformadas a matriz indicator)
#' para calcular una matriz de distancias entre las observaciones del train y el test set.
#' Devuelve una matriz de distancias resultado de la función dist2 del package flexclust y los resultados del MCA del package FcatoMiner
#' en el cual el train son los individuos principales y el test forma los individuos suplementarios.
#' @param train, test Dataframes con la misma estructura y el mismo orden en las columnas. Todas las variables deben ser factores.
#' @param col_sobrantes Variables que no se deben incluir en el cáclulo.
#' @param col_id_train, col_id_test Columnas en las cuales se encuentra el id/label para los nobres de filas y columnas de la matriz de distancias.
#' @keywords 
#' @export
#' @examples
#' res_dist_train_test <- dist_train_test(train=train,test=test,col_sobrantes=c('Referencia'),
#'                                        col_id_train=c('idCompraAuto'),
#'                                        col_id_test=c('idCompraAuto'), ncp=40)
#' dd <- res_dist_train_test$dist_train_test
#' plot(res_dist_train_test$mca, choix= 'ind', label='none', col.ind.sup='green')                                        
#' plot(res_dist_train_test$mca, choix= 'var')    
#'                                     

dist_train_test <- function(train=train,test=test,
                            col_sobrantes=c('Referencia'),
                            col_id_train=c('idCompraAuto'),col_id_test=c('idCompraAuto'),
                            ncp=40){
require(flexclust)
require(data.table)
require(FactoMineR)
junt <- setDT(rbind(train,test))
mca_junt <- MCA(junt[,!(colnames(junt) %in% c(col_sobrantes, col_id_train, col_id_test))],ncp=ncp, graph = FALSE,
                ind.sup = c((nrow(train)+1):nrow(junt))
)



dd <- dist2(mca_junt$ind.sup$coord,mca_junt$ind$coord)
dim(dd)
colnames(dd) <- train[,c(col_id_train)]
rownames(dd) <- test[,c(col_id_test)]

return(list(dist_train_test = dd,
            mca = mca_junt))
}
danielmedbar/KWSTCReclassifRef documentation built on May 14, 2019, 4:07 p.m.