## ----include = FALSE---------------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ## ----eval = FALSE------------------------------------------------------------- # library(CMGFM) ## ----eval = FALSE------------------------------------------------------------- # pveclist <- list('gaussian'=c(50, 150),'poisson'=c(50, 150), # 'binomial'=c(100,60)) # q <- 6 # sigmavec <- rep(1,3) # pvec <- unlist(pveclist) # methodNames <- c("CMGFM", "GFM", "MRRR", "LFR" , "GPCA", "COAP") # # datlist <- gendata_cmgfm(pveclist = pveclist, seed = 1, n = 300,d = 3, # q = q, rho = rep(1,length(pveclist)), rho_z=0.2, # sigmavec=sigmavec, sigma_eps=1) # str(datlist) # XList <- datlist$XList # Z <- datlist$Z # numvarmat <- datlist$numvarmat # Uplist <- list() # k <- 1 # for(id in 1:length(datlist$Uplist)){ # for(im in 1:length(datlist$Uplist[[id]])){ # Uplist[[k]] <- datlist$Uplist[[id]][[im]] # k <- k + 1 # } # } # types <- datlist$types ## ----eval = FALSE------------------------------------------------------------- # system.time({ # tic <- proc.time() # rlist <- CMGFM(XList, Z, types=types, q=q, numvarmat=numvarmat) # toc <- proc.time() # time_smgfm <- toc[3] - tic[3] # }) ## ----eval = FALSE------------------------------------------------------------- # library(ggplot2) # dat_iter <- data.frame(iter=1:length(rlist$ELBO_seq), ELBO=rlist$ELBO_seq) # ggplot(data=dat_iter, aes(x=iter, y=ELBO)) + geom_line() + geom_point() + theme_bw(base_size = 20) # ## ----eval = FALSE------------------------------------------------------------- # library(GFM) # hUplist <- lapply(seq_along(rlist$Bf), function(m) cbind(rlist$muf[[m]], rlist$Bf[[m]])) # metricList <- list() # metricList$CMGFM <- list() # meanTr <- function(hBlist, Blist, type='trace_statistic'){ # ###It is noted that the trace statistics is not symmetric, the true value must be in last # trvec <- sapply(1:length(Blist), function(j) measurefun(hBlist[[j]], Blist[[j]], type = type)) # return(mean(trvec)) # } # normvec <- function(x) sqrt(sum(x^2/ length(x))) # metricList$CMGFM$Tr_F <- measurefun(rlist$M, datlist$F0) # metricList$CMGFM$Tr_Upsilon <- meanTr(hUplist, Uplist) # metricList$CMGFM$Tr_U <- measurefun(Reduce(cbind,rlist$Xif), Reduce(cbind, datlist$U0)) # metricList$CMGFM$beta_norm <- normvec(as.vector(Reduce(cbind,rlist$betaf)- Reduce(cbind,datlist$beta0List))) # metricList$CMGFM$Time <- rlist$time_use ## ----eval = FALSE------------------------------------------------------------- # metricList$GFM <- list() # tic <- proc.time() # res_gfm <- gfm(XList, types=types, q=q) # toc <- proc.time() # time_gfm <- toc[3] - tic[3] # mat2list <- function(B, pvec, by_row=TRUE){ # Blist <- list() # pcum = c(0, cumsum(pvec)) # for(i in 1:length(pvec)){ # if(by_row){ # Blist[[i]] <- B[(pcum[i]+1):pcum[i+1],] # }else{ # Blist[[i]] <- B[, (pcum[i]+1):pcum[i+1]] # } # } # return(Blist) # } # metricList$GFM$Tr_F <- measurefun(res_gfm$hH, datlist$F0) # metricList$GFM$Tr_Upsilon <- meanTr(mat2list(cbind(res_gfm$hmu,res_gfm$hB), pvec), Uplist) # metricList$GFM$Tr_U <- NA # metricList$GFM$beta_norm <- NA # metricList$GFM$Time <- time_gfm ## ----eval = FALSE------------------------------------------------------------- # mrrr_run <- function(Y, Z, numvarmat, rank0,family=list(poisson()), # familygroup, epsilon = 1e-4, sv.tol = 1e-2, # lambdaSVD=0.1, maxIter = 2000, trace=TRUE, trunc=500){ # # epsilon = 1e-4; sv.tol = 1e-2; maxIter = 30; trace=TRUE,lambdaSVD=0.1 # Diag <- function(vec){ # q <- length(vec) # if(q > 1){ # y <- diag(vec) # }else{ # y <- matrix(vec, 1,1) # } # return(y) # } # require(rrpack) # q <- rank0 # n <- nrow(Y); p <- ncol(Y) # X <- cbind(cbind(1, Z), diag(n)) # d <- ncol(Z) # ## Trunction # Y[Y>trunc] <- trunc # Y[Y< -trunc] <- -trunc # # tic <- proc.time() # pvec <- as.vector(t(numvarmat)) # pvec <- pvec[pvec>0] # pcums <- cumsum(pvec) # idxlist <- list() # idxlist[[1]] <- 1:pcums[1] # if(length(pvec)>1){ # for(i in 2:length(pvec)){ # idxlist[[i]] <- (pcums[i-1]+1):pcums[i] # } # } # # svdX0d1 <- svd(X)$d[1] # init1 = list(kappaC0 = svdX0d1 * 5) # offset = NULL # control = list(epsilon = epsilon, sv.tol = sv.tol, maxit = maxIter, # trace = trace, gammaC0 = 1.1, plot.cv = TRUE, # conv.obj = TRUE) # res_mrrr <- mrrr(Y=Y, X=X[,-1], family = family, familygroup = familygroup, # penstr = list(penaltySVD = "rankCon", lambdaSVD = lambdaSVD), # control = control, init = init1, maxrank = rank0+d) # # # hmu <- res_mrrr$coef[1,] # hbeta <- t(res_mrrr$coef[2:(d+1),]) # hTheta <- res_mrrr$coef[-c(1:(d+1)),] # # hbeta_rf <- NULL # for(i in seq_along(pvec)){ # hbeta_rf <- cbind(hbeta_rf, colMeans(hbeta[idxlist[[i]],])) # } # # # Matrix::rankMatrix(hTheta) # svd_Theta <- svd(hTheta, nu=q, nv=q) # hH <- svd_Theta$u # hB <- svd_Theta$v %*% Diag(svd_Theta$d[1:q]) # toc <- proc.time() # time_mrrr <- toc[3] - tic[3] # # return(list(hH=hH, hB=hB, hmu= hmu, beta=hbeta_rf, time_use=time_mrrr)) # } # # family_use <- list(gaussian(), poisson(), binomial()) # familygroup <- sapply(seq_along(datlist$XList), function(j) rep(j, ncol(datlist$XList[[j]]))) # res_mrrr <- mrrr_run(Reduce(cbind, datlist$XList), Z = Z, numvarmat, rank0=q, family=family_use, # familygroup = unlist(familygroup), maxIter=100) # # # # # ## ----eval = FALSE------------------------------------------------------------- # metricList$MRRR <- list() # metricList$MRRR$Tr_F <- measurefun(res_mrrr$hH, datlist$F0) # metricList$MRRR$Tr_Upsilon <-meanTr(mat2list(cbind(res_mrrr$hmu,res_mrrr$hB), pvec), Uplist) # metricList$MRRR$Tr_U <-NA # metricList$MRRR$beta_norm <- normvec(as.vector(res_mrrr$beta- Reduce(cbind,datlist$beta0List))) # metricList$MRRR$Time <- res_mrrr$time_use ## ----eval = FALSE------------------------------------------------------------- # list2vec <- function(xlist){ # nn <- length(xlist) # me <- rep(NA, nn) # idx_noNA <- which(sapply(xlist, function(x) !is.null(x))) # for(r in idx_noNA) me[r] <- xlist[[r]] # return(me) # } # # dat_metric <- data.frame(Tr_F = sapply(metricList, function(x) x$Tr_F), # Tr_Upsilon = sapply(metricList, function(x) x$Tr_Upsilon), # Tr_U = sapply(metricList, function(x) x$Tr_U), # beta_norm =sapply(metricList, function(x) x$beta_norm), # Time = sapply(metricList, function(x) x$Time), # Method = names(metricList)) # dat_metric ## ----eval = FALSE, fig.width=9, fig.height=6---------------------------------- # library(cowplot) # p1 <- ggplot(data=subset(dat_metric, !is.na(Tr_F)), aes(x= Method, y=Tr_F, fill=Method)) + geom_bar(stat="identity") + xlab(NULL) + scale_x_discrete(breaks=NULL) + theme_bw(base_size = 16) # p2 <- ggplot(data=subset(dat_metric, !is.na(Tr_Upsilon)), aes(x= Method, y=Tr_Upsilon, fill=Method)) + geom_bar(stat="identity") + xlab(NULL) + scale_x_discrete(breaks=NULL)+ theme_bw(base_size = 16) # p3 <- ggplot(data=subset(dat_metric, !is.na(beta_norm)), aes(x= Method, y=beta_norm, fill=Method)) + geom_bar(stat="identity") + xlab(NULL) + scale_x_discrete(breaks=NULL)+ theme_bw(base_size = 16) # p4 <- ggplot(data=subset(dat_metric, !is.na(Time)), aes(x= Method, y=Time, fill=Method)) + geom_bar(stat="identity") + xlab(NULL) + scale_x_discrete(breaks=NULL)+ theme_bw(base_size = 16) # plot_grid(p1,p2,p3, p4, nrow=2, ncol=2) ## ----eval = FALSE------------------------------------------------------------- # # hq <- MSVR(XList, Z, types=types, numvarmat, q_max=20) # # print(c(q_true=q, q_est=hq)) # ## ----------------------------------------------------------------------------- sessionInfo()