diff --git a/README.md b/README.md index 783df69..a08a24a 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,89 @@ # stability-analyses -code for simulation studies and experimental microbiome data applications in Stability manuscript +This set of codes are used for reproducing all the simulation studies and experimental microbiome data applications in Stability manuscript. + +I. General code: + +code_method folder: contain codes to reproduce simulation results for continuous outcomes + + getStability.R: function to calculate Stability Index + + cv_method.R: code for 4 selected feature selection methods with user-defined parameter grids and cross-validations for parameter tuning when applied to continuous outcomes + + cv_method_binary_update.R: code for 4 selected feature selection methods with user-defined parameter grids and cross-validations for parameter tuning when applied to binary outcomes + + stab_data_applications.R: function to perform hypothesis testing using bootstrap for continuous outcomes + + stab_data_applications_binary.R: function to perform hypothesis testing using bootstrap for binary outcomes + + bootstrap_test_compLasso_rf.R: general functions for comparing feature selection methods using hypothesis testing based on bootstrap when applied to continuous outcomes + + bootstrap_test_compLasso_rf_binary.R: general functions for comparing feature selection methods using hypothesis testing based on bootstrap when applied to binary outcomes + + source code for compositional lasso (continuous outcome) is available at: https://www.math.pku.edu.cn/teachers/linw/software.html + source code for compositional lasso (binary outcome) is available at: https://github.com/UVic-omics/Microbiome-Variable-Selection + + +II. Simulation part (within simulations folder): + +sim_data_generation folder: contain codes to generate simulated data + + sim_dat_ind_toeplitz: code to generate simulated data with Independent and Toeplitz correlation designs + sim_dat_block.R: code to generate simulated data with Block correlation design + run_sim_data.sh: bash commands for running simulation data generation code on HPC + +code_sim_cts folder: contain codes to reproduce simulation results for continuous outcomes + + cv_sim_apply.R: general functions for applying selected feature selection methods to simulated data when applied to continuous outcomes + + 1. compute Stability and MSE for different simulation scenarios + ind_results.R: code for comparing 3 methods (lasso, elastic net, random forests) in simulated data with Independent design and continuous outcomes + toe_results.R: code for comparing 3 methods (lasso, elastic net, random forests) in simulated data with Toeplitz design and continuous outcomes + block_results.R: code for comparing 3 methods (lasso, elastic net, random forests) in simulated data with Block design and continuous outcomes + CL_sim_apply.R: code for obtaining results for compositional lasso in all simulation correlation designs with continuous outcomes + + 2. hypothesis testing with bootstrap for selected simulation scenarios + boot_CL_testing.R: code for calculating bootstrapped confidence interval for compositional lasso method in simulated data with continous outcomes + boot_RF_testing.R: code for calculating bootstrapped confidence interval for random forests method in simulated data with continous outcomes + + 3. bash commands + run_sim_cts.sh: bash commands for running simulation code for continous outcomes on HPC + + +code_sim_bin folder: contain codes to reproduce simulation results for binary outcomes + + cv_sim_apply_binary_update.R: general functions for applying selected feature selection methods to simulated data when applied to binary outcomes + + 1. compute Stability and AUC for different simulation scenarios + ind_results_binary_update.R: code for comparing all 4 methods in simulated data with Independent design and binary outcomes + toe_results_binary_update.R: code for comparing all 4 methods in simulated data with Toeplitz design and binary outcomes + block_results_binary_update.R: code for comparing all 4 methods in simulated data with Block design and binary outcomes + + 2. hypothesis testing with bootstrap for selected simulation scenarios + boot_sim_binary.R: code for calculating bootstrapped confidence interval for compositional lasso and random forests methods in simulated data with binary outcomes + + 3. bash commands + run_sim_bin.sh: bash commands for running simulation code for binary outcomes on HPC + +notebooks_sim_cts folder: contain notebooks (R) to summarize simulation results for continuous outcome + +notebooks_sim_bin folder: contain notebooks (R) to summarize simulation results for binary outcome + +results_summary_cts folder: contain outputs of tables from notebooks in notebooks_sim_cts folder + +results_summary_bin folder: contain outputs of tables from notebooks in notebooks_sim_bin folder + +figures_combined folder: contain figures generated for both continous and binary outcomes based on notebook 6_make_figures_combined in notebooks_sim_bin folder + + +III. application part (within data_application folder): + + code_cts folder: contain code for real data applications to BMI & soil datasets for continuous outcomes + + code_bin folder: contain code for real data applications to BMI & soil datasets for binary outcomes + + notebooks_applications folder: contain notebooks (R) to summarize microbiome application results for continuous and binary outcomes + + 88soils folder: contain data and application results for soil datast + + BMI folder: contain data and application results for BMI datast + diff --git a/code_method/.DS_Store b/code_method/.DS_Store deleted file mode 100755 index 495cac6..0000000 Binary files a/code_method/.DS_Store and /dev/null differ diff --git a/code_method/bootstrap_test_compLasso_rf.R b/code_method/bootstrap_test_compLasso_rf.R new file mode 100755 index 0000000..2ae9005 --- /dev/null +++ b/code_method/bootstrap_test_compLasso_rf.R @@ -0,0 +1,126 @@ +########################################################## +### hypothesis testing with bootstraps ################### +########################################################## + +source('cv_method.R') +source('getStability.R') + +## set up parallel computing +library(foreach) +library(doParallel) +numCores <- detectCores() - 2 +registerDoParallel(numCores) # use multicore, set to the number of our cores + +boot_stab_sim = function(num_boot=100, sim_file, method, seednum=31, ratio.training=0.8, fold.cv=10, + family='gaussian', lambda.grid=exp(seq(-4, -2, 0.2)), alpha.grid=seq(0.1, 0.9, 0.1), + mtry.grid=seq(5, 25, 5), num_trees = 500, pval_thr = 0.05){ + + # load simulated data + load(sim_file, dat <- new.env()) + + idx.start = 1; idx.stop = 100 # 100 repetitions for each simulated scenario + rou = dat$sim_array[[1]]$rou # rou, n, p are same across all repetitions + n = dat$sim_array[[1]]$n + p = dat$sim_array[[1]]$p + + ## get a vector of stability index from bootstrapped data + stab_index = rep(0, num_boot) + b = 0 + for (i in idx.start:idx.stop){ + b = b + 1 + print(paste('index', i, sep=':')) + sub = dat$sim_array[[i]] + + # bootsrap with parallelization + selections = foreach (i=1:num_boot) %dopar% { + N = length(sub$Y) # number of samples + boot_ids = sample(N, size=N, replace=TRUE) + boot_Z = sub$Z[boot_ids, ] + boot_Y = sub$Y[boot_ids, ] + + ## select features from lasso/elnet + if (method == 'compLasso'){ + result.lin = cons_lasso_cv(y=boot_Y, datx=boot_Z, seednum=i, ratio.training=ratio.training) + select.lin = result.lin$coef.chosen # since 1 represents intercept + + } else if (method == 'RF'){ + result.rf = randomForest_cv(y=boot_Y, datx=boot_Z, seednum=i, fold.cv=fold.cv, + num_trees=num_trees, mtry.grid = mtry.grid, pval_thr=pval_thr) + select.rf = result.rf$coef.chosen + } + } + + # calculate stability index from bootstrapped data + stability_table = matrix(rep(0, num_boot * p), ncol=p) + for (j in 1:num_boot){ + stability_table[j, selections[[j]]] = 1 + } + + stab_index[b] = round(getStability(stability_table)$stability, 2) + } + + results=list(rou=rou, n=n, p=p, num_boot=num_boot, method=method, stab_index=stab_index) + +} + + +######################################################## +## double bootstrap applied to real data application ### +######################################################## +boot_stab_data = function(num_boot=100, data_file, method, seednum=31, ratio.training=0.8, fold.cv=10, + family='gaussian', lambda.grid=exp(seq(-4, -2, 0.2)), alpha.grid=seq(0.1, 0.9, 0.1), + mtry.grid=seq(5, 25, 5), num_trees = 500, pval_thr = 0.05){ + + # load simulated data + set.seed(seednum) + load(data_file) + p = dim(taxa)[2] + + stab_index = rep(0, num_boot) + MSE_list = list() + # first loop of bootstrap to generate num_boot bootstrapped datasets + for (k in 1:num_boot){ + print(paste('num_boot', k, sep=':')) + N = length(y) # number of samples + sample_ids = seq(1, N, 1) + + # bootstrapped samples + boot_ids = sample(sample_ids, size=N, replace=TRUE) + boot_taxa = taxa[boot_ids, ] + boot_mf = y[boot_ids] + + ## second loop of bootstrap to perform variable selection + results = foreach (i=1:num_boot) %dopar% { + boot_ids_second = sample(N, size=N, replace=TRUE) + boot_Z = boot_taxa[boot_ids_second, ] + boot_Y = boot_mf[boot_ids_second] + + ## select features from lasso/elnet + if (method == 'compLasso'){ + result.lin = cons_lasso_cv(y=boot_Y, datx=boot_Z, seednum=i, ratio.training=ratio.training) + output.lin = c(result.lin$MSE, result.lin$coef.chosen) + + } else if (method == 'RF'){ + result.rf = randomForest_cv(y=boot_Y, datx=boot_Z, seednum=i, fold.cv=fold.cv, + num_trees=num_trees, mtry.grid = mtry.grid, pval_thr=pval_thr) + output.rf = c(result.rf$MSE, result.rf$coef.chosen) + } + } + + # reformat results (stability & MSE) + stability_table = matrix(rep(0, num_boot * p), ncol=p) + results_mse = results_chosen = list() + for (b in 1:num_boot){ + results_mse[b] = results[[b]][1] + results_chosen[[b]] = results[[b]][-1] + stability_table[b, results_chosen[[b]]] = 1 + } + + stab_index[k] = round(getStability(stability_table)$stability, 2) + MSE_list[[k]] = results_mse + } + + + results=list(num_boot=num_boot, method=method, stab_index=stab_index, MSE_list=MSE_list) + +} diff --git a/code_method/bootstrap_test_compLasso_rf_binary.R b/code_method/bootstrap_test_compLasso_rf_binary.R new file mode 100644 index 0000000..91d3664 --- /dev/null +++ b/code_method/bootstrap_test_compLasso_rf_binary.R @@ -0,0 +1,137 @@ +########################################################## +### estimate correlation between stability index ######### +########################################################## + +source('cv_method_binary_update.R') +source('getStability.R') + +## set up parallel computing +library(foreach) +library(doParallel) +numCores <- detectCores() - 2 # 6 cores +registerDoParallel(numCores) # use multicore, set to the number of our cores + +######################################################## +## double bootstrap applied to simulations ### +######################################################## +boot_stab_sim = function(num_boot=100, sim_file, method, seednum=31, + ratio.training=0.8, fold.cv=10, + family='binomial', lambda.grid=exp(seq(-4, -2, 0.2)), + alpha.grid=seq(0.1, 0.9, 0.1), + mtry.grid=seq(5, 25, 5), num_trees = 500, pval_thr = 0.05, + lambda.coda=seq(0.1, 0.2, 0.01), data.split=FALSE){ + + # load simulated data + load(sim_file, dat <- new.env()) + + idx.start = 1; idx.stop = 100 # 100 repetitions for each simulated scenario + rou = dat$sim_array[[1]]$rou # rou, n, p are same across all repetitions + n = dat$sim_array[[1]]$n + p = dat$sim_array[[1]]$p + + ## get a vector of stability index from bootstrapped data + stab_index = rep(0, num_boot) + b = 0 + for (i in idx.start:idx.stop){ + b = b + 1 + print(paste('index', i, sep=':')) + sub = dat$sim_array[[i]] + y_binary = as.factor(ifelse(sub$Y >= median(sub$Y), 1, 0)) + + # bootsrap with parallelization + selections = foreach (i=1:num_boot) %dopar% { + N = length(y_binary) # number of samples + boot_ids = sample(N, size=N, replace=TRUE) + boot_Z = sub$Z[boot_ids, ] + boot_Y = y_binary[boot_ids] + boot_X = sub$X[boot_ids, ] # for generalized compositional lasso + + ## select features + if (method == 'GenCompLasso'){# generalized compositional lasso use X instead of Z + result.lin = gen_cons_lasso_cv(y=boot_Y, datx=boot_X, seednum=i, ratio.training=ratio.training, + lambda.coda=lambda.coda, data.split=data.split) + select.lin = result.lin$coef.chosen + + } else if (method == 'RF'){ + result.rf = randomForest_cv(y=boot_Y, datx=boot_Z, seednum=i, fold.cv=fold.cv, + num_trees=num_trees, mtry.grid = mtry.grid, pval_thr=pval_thr) + select.rf = result.rf$coef.chosen + } + } + + # calculate stability index from bootstrapped data + stability_table = matrix(rep(0, num_boot * p), ncol=p) + for (j in 1:num_boot){ + stability_table[j, selections[[j]]] = 1 + } + + stab_index[b] = round(getStability(stability_table)$stability, 2) + } + + results=list(rou=rou, n=n, p=p, num_boot=num_boot, method=method, stab_index=stab_index) + +} + + +######################################################## +## double bootstrap applied to real data application ### +######################################################## +boot_stab_data = function(num_boot=100, data_file, method, seednum=31, + ratio.training=0.8, fold.cv=10, + family='binomial', lambda.grid=exp(seq(-4, -2, 0.2)), + alpha.grid=seq(0.1, 0.9, 0.1), + mtry.grid=seq(5, 25, 5), num_trees = 500, pval_thr = 0.05, + lambda.coda=seq(0.1, 0.2, 0.01), data.split=FALSE){ + + # load simulated data + set.seed(seednum) + load(data_file) + p = dim(taxa)[2] + + stab_index = rep(0, num_boot) + ROC_list = list() + # first loop of bootstrap to generate num_boot bootstrapped datasets + for (k in 1:num_boot){ + print(paste('num_boot', k, sep=':')) + N = length(y) # number of samples + sample_ids = seq(1, N, 1) + + # bootstrapped samples + boot_ids = sample(sample_ids, size=N, replace=TRUE) + boot_taxa = taxa[boot_ids, ] + boot_mf = y[boot_ids] + + ## second loop of bootstrap to perform variable selection + results = foreach (i=1:num_boot) %dopar% { + boot_ids_second = sample(N, size=N, replace=TRUE) + boot_Z = boot_taxa[boot_ids_second, ] + boot_Y = boot_mf[boot_ids_second] + + ## select features from lasso/elnet + if (method == 'GenCompLasso'){ # use X instead of Z (log-transformed) + result.lin = gen_cons_lasso_cv(y=boot_Y, datx=exp(boot_Z), seednum=i, ratio.training=ratio.training) + output.lin = c(result.lin$ROC, result.lin$coef.chosen) + } else if (method == 'RF'){ + result.rf = randomForest_cv(y=boot_Y, datx=boot_Z, seednum=i, fold.cv=fold.cv, + num_trees=num_trees, mtry.grid = mtry.grid, pval_thr=pval_thr) + output.rf = c(result.rf$ROC, result.rf$coef.chosen) + } + } + + # reformat results (stability & ROC) + stability_table = matrix(rep(0, num_boot * p), ncol=p) + results_mse = results_chosen = list() + for (b in 1:num_boot){ + results_mse[b] = results[[b]][1] + results_chosen[[b]] = results[[b]][-1] + stability_table[b, results_chosen[[b]]] = 1 + } + + stab_index[k] = round(getStability(stability_table)$stability, 2) + ROC_list[[k]] = results_mse + } + + + results=list(num_boot=num_boot, method=method, stab_index=stab_index, ROC_list=ROC_list) + +} diff --git a/code_method/code_method/.DS_Store b/code_method/code_method/.DS_Store deleted file mode 100755 index aff38d1..0000000 Binary files a/code_method/code_method/.DS_Store and /dev/null differ diff --git a/code_method/cv_method.R b/code_method/cv_method.R new file mode 100755 index 0000000..820c707 --- /dev/null +++ b/code_method/cv_method.R @@ -0,0 +1,364 @@ +########################################### +#### methods for comparisions ############# +########################################### +library(glmnet) +library(caret) +library(ranger) # faster random forest + +# general reference with caret on glmnet & random forest +## http://rstudio-pubs-static.s3.amazonaws.com/251240_12a8ecea8e144fada41120ddcf52b116.html + +# important note +## when training model on training set, as tuning parameters are set in final model, coefficient are chosen already +## use test set to predict the MSE +## as unclear how carret handle fitting and prediction, use carret only for parameter tuning in elastic net + +########################################### +#### Lasso (tune lambda) ################## +########################################### +#' @title lasso_cv +#' @description Does a K-fold cross-validation for Lasso. +#' @param datx The input data matrix. +#' @param y The response variable. +#' @param seednum The seed number (default=31). +#' @param family The family of linear regression models (default="gaussian"). +#' @param ratio.training The ratio of the whole data assigned for model training (default=0.8). +#' @param fold.cv The number of folds for cross-validation.(default=10) +#' @param lambda.grid The tuning range for the regularization parameter "lambda" of "lasso". +#' @return A list of Lasso model output including MSE, and selected features. + +lasso_cv = function(datx, y, seednum=31, family=family, ratio.training=0.8, fold.cv=10, + lambda.grid, lambda.choice='lambda.1se'){ + # seednum: the seed number + # ratio.training: the ratio of training set (parento principle training:test=8:2) + # lambda.grid: possible candidate values for tuning parameter Lambda + # fold.cv: n-fold cross validation + # lambda.choice: 'lambda.min' or 'lambda.1se' + + set.seed(seednum) + + # # split data into training and tests sets + nn <- length(y) + trn <- sample(1:nn, ratio.training*nn) + x.train <- datx[trn, ] + x.test <- datx[-trn, ] + y.train <- y[trn] + y.test <- y[-trn] + + # use cross-validation on training data & fit on test data + cv.fit <- cv.glmnet(x.train, y.train, family=family, alpha=1, lambda=lambda.grid, nfolds=fold.cv) + pred.fit <- predict(cv.fit, s=lambda.choice, newx=x.test, type='response') + + # covariates chosen + coef.fit <- predict(cv.fit, s=lambda.choice, newx=x.test, type='coefficients') + coef.chosen = which(coef.fit != 0) + coef.chosen = coef.chosen - 1 # index for 1 representing intercept + + # evaluate results + MSE <- mean((y.test - pred.fit)^2) + + + result = list(MSE=MSE, coef.chosen=coef.chosen) + return(result) +} + +########################################### +#### Elastic Net (tune lambda and alpha) ## +########################################### +# reference 1 (tune both parameters with caret) +## https://stats.stackexchange.com/questions/268885/tune-alpha-and-lambda-parameters-of-elastic-nets-in-an-optimal-way +# reference 2 (extract final model and prediction with caret) +## https://topepo.github.io/caret/model-training-and-tuning.html + +#' @title elnet_cv +#' @description Does a K-fold cross-validation for elastic-net. +#' @param datx The input data matrix. +#' @param y The response variable. +#' @param seednum The seed number (default=31). +#' @param family The family of linear regression models (default="gaussian"). +#' @param ratio.training The ratio of the whole data assigned for model training (default=0.8). +#' @param fold.cv The number of folds for cross-validation.(default=10) +#' @param lambda.grid The tuning range for the regularization parameter "lambda" of "lasso". +#' @param alpha.grid The tuning range for the elastic-net mixing parameter "alpha". +#' @return A list of elnet model output including MSE, and selected features. + +elnet_cv = function(datx, y, seednum=31, alpha.grid, lambda.grid, family=family, + ratio.training=0.8, fold.cv=10){ + # seednum: the seed number + # ratio.training: the ratio of training set (parento principle training:test=8:2) + # alpha.grid: possible candidate values for tuning parameter alpha + # lambda.grid: possible candidate values for tuning parameter Lambda + # fold.cv: n-fold cross validation + + set.seed(seednum) + + # # split data into training and tests sets + nn <- length(y) + trn <- sample(1:nn, ratio.training*nn) + x.train <- datx[trn, ] + x.test <- datx[-trn, ] + y.train <- y[trn] + y.test <- y[-trn] + + data.train = as.data.frame(cbind(y.train, x.train)) + colnames(data.train) = c('y', paste('V', seq(1, dim(datx)[2]), sep='')) + + # tune parameters with CV on training data with caret + trnCtrl <- trainControl(method = "cv", number = fold.cv) + srchGrid <- expand.grid(.alpha = alpha.grid, .lambda = lambda.grid) + + my_train <- train(y ~., data.train, + method = "glmnet", + tuneGrid = srchGrid, + trControl = trnCtrl) + + # fit the model with best tuning parameters on test data with glmnet + fit = glmnet(x.train, y.train, alpha=my_train$bestTune$alpha, lambda=my_train$bestTune$lambda) + pred.fit <- predict(fit, x.test, type='response') + + # covariates chosen + coef.fit <- predict(fit, x.test, type='coefficients') + coef.chosen = which(coef.fit != 0) + coef.chosen = coef.chosen - 1 # index for 1 representing intercept + + # evaluate results + MSE <- mean((y.test - pred.fit)^2) + + + result = list(MSE=MSE, coef.chosen=coef.chosen) + return(result) +} + + +############################################################### +#### Random Forests (tune # variables at each random split #### +############################################################### +# reference on regression random forst +## https://uc-r.github.io/random_forests +# OOB error is different from test error (see above website) + +#' @title randomForest_cv +#' @description Does a K-fold cross-validation for random forests. +#' @param datx The input data matrix. +#' @param y The response variable. +#' @param sim_file The path of a .RData file includes the simulation data pre-generated. +#' @param seednum The seed number (default=31). +#' @param fold.cv The number of folds for cross-validation.(default=10) +#' @param ratio.training The ratio of the whole data assigned for model training (default=0.8). +#' @param mtry.grid The tuning range for the hyperparameter "mtry", that is, number of variables to possibly split at in each node. +#' @param num_trees The number of trees grow in random forests. +#' @param pval_thr The threshold for the estimated p value of RF importance scores. +#' @param method.perm The permutation method for estimating the p value of RF importance scores. +#' @return A list of RF model output including the "mtry" grid, selected features, MSE, OOB, and p-values of selected features. + +randomForest_cv = function(datx, y, seednum=31, fold.cv=5, ratio.training=0.8, mtry.grid=10, num_trees=500, + pval_thr=0.05, method.perm='altmann'){ + # mtry: number of variables to randomly sample at each split + # num_trees: number of trees to grow in random forests + # pval_thr: threshold for permutation test + # note that permutation p-value can use "altmann method" for all types of data; 'Janita' for high-dimensitional data only + # ref on permutation methods: http://finzi.psych.upenn.edu/library/ranger/html/importance_pvalues.html + + set.seed(seednum) + + # split data into training and tests sets + data = as.data.frame(cbind(y, datx)) + colnames(data) = c('y', paste('V', seq(1, dim(datx)[2]), sep='')) + inTraining = createDataPartition(data$y, p = ratio.training, list=FALSE) + train <- data[inTraining, ] + test <- data[-inTraining, ] + + # tune parameter with cross validation + hyper.grid <- expand.grid(mtry = mtry.grid, OOB_RMSE = 0) + for (i in 1:nrow(hyper.grid)){ + model = ranger::ranger(y ~., data = train, + num.trees=500, mtry=hyper.grid$mtry[i], + seed=seednum, importance = 'permutation') + hyper.grid$OOB_RMSE[i] = sqrt(model$prediction.error) + } + OOB = min(hyper.grid$OOB_RMSE) # out of bag error + position = which.min(hyper.grid$OOB_RMSE) + + # permutation test on tuned random forst model to obtain chosen features + if (method.perm == 'altmann'){ # for all data types + rf.model <- ranger::ranger(y ~., data=test, num.trees = num_trees, + mtry = hyper.grid$mtry[position], importance = 'permutation') + table = as.data.frame(importance_pvalues(rf.model, method = "altmann", + formula = y ~ ., data = test)) + } else if (method.perm == 'janitza'){ # for high dimensional data only + rf.model <- ranger::ranger(y ~., data=test, num.trees = num_trees, + mtry = hyper.grid$mtry[position], importance = 'impurity_corrected') + table = as.data.frame(importance_pvalues(rf.model, method = "janitza", + formula = y ~ ., data = test)) + } + + coef.chosen = which(table$pvalue < pval_thr) + + # if nothing been selected + if (identical(coef.chosen, integer(0))){ + coef.chosen = 0 + } + + # obtain additional prediction error to make comparable to other methods + pred_rf = predict(rf.model, test) + MSE <- mean((test$y - pred_rf$predictions)^2) + + result = list(mtry=mtry.grid[position], coef.chosen=coef.chosen, MSE=MSE, OOB=OOB, p.value=table$pvalue) + return(result) + +} + + +############################################################### +#### Compositional Lasso by Lin et al 2014 #################### +############################################################### +dyn.load("../../code_Lin/cvs/cdmm.dll") +source("../../code_Lin/cvs/cdmm.R") + +#' @title cons_lasso_cv +#' @description Does a K-fold cross-validation for elastic-net. +#' @param datx The input data matrix. +#' @param y The response variable. +#' @param seednum The seed number (default=31). +#' @param ratio.training The ratio of the whole data assigned for model training (default=0.8). +#' @return A list of compLasso model output including MSE, and selected features. + +cons_lasso_cv = function(datx, y, seednum, ratio.training=0.8){ + set.seed(seednum) + z = datx + n = length(y) + + itrn = sample(n, ratio.training*n) + itst = setdiff(1:n, itrn) + ans <- cv.cdmm(y[itrn], z[itrn, ], refit=TRUE) # proposed method (default: 10 fold CV) + bet <- ans$bet; int <- ans$int + pe <- mean((y[itst] - int - z[itst, ] %*% bet)^2) + + coef.chosen = which(bet != 0) # the first beta refer to 1st feature + MSE = pe + + result = list(MSE=MSE, coef.chosen=coef.chosen) + return(result) +} + +########################################################### +#### Lasso (double cv -- no validation set) ############### +########################################################### +lasso_double_cv = function(datx, y, seednum=31, family=family, fold.cv=10, lambda.grid){ + set.seed(seednum) + + ## double loop for cross-vlidation + flds <- caret::createFolds(y, k = fold.cv, list = TRUE, returnTrain = FALSE) + + ## outer loop for estimating MSE + MSE = STAB = matrix(rep(0, fold.cv * length(lambda.grid)), nrow=fold.cv) + rownames(MSE) = rownames(STAB) = paste('fold', seq(1:fold.cv), sep='') + colnames(MSE) = colnames(STAB) = paste('lambda', seq(1:length(lambda.grid)), sep='') + for (b in 1:fold.cv){ + idx.test = flds[[b]] + x.train = datx[-idx.test, ] + y.train = y[-idx.test] + x.test = datx[idx.test, ] + y.test = y[idx.test] + + fit = glmnet(x.train, y.train, family=family, alpha=1, lambda=lambda.grid) + pred.fit <- predict(fit, newx=x.test, s=lambda.grid, type='response') + MSE[b, ] <- colMeans((y.test - pred.fit)^2) + + ## inner loup for estimating stability + flds.inn <- createFolds(y.train, k = fold.cv, list = TRUE, returnTrain = FALSE) + stab.table.inn = list() + for (bb in 1:fold.cv){ + idx.test.inn = flds.inn[[bb]] + stab.x.train = x.train[-idx.test.inn, ] + stab.y.train = y.train[-idx.test.inn] + stab.x.test = x.train[idx.test.inn, ] + stab.y.test = y.train[idx.test.inn] + + fit.inn = glmnet(stab.x.train, stab.y.train, family=family, alpha=1, lambda=lambda.grid) + coef.fit.inn <- predict(fit.inn, newx=stab.x.test, s=lambda.grid, type='coefficients') + coef.chosen.table = as.matrix(coef.fit.inn) + coef.chosen.table = coef.chosen.table[-1, ] # no need of intercept + coef.chosen.table[coef.chosen.table != 0] = 1 # convert to binary table + coef.chosen.table[coef.chosen.table == 0] = 0 + colnames(coef.chosen.table) = paste('lambda', seq(1:length(lambda.grid)), sep='') + stab.table.inn[[bb]] = coef.chosen.table + } + + # calculate stability + table.tmp = matrix(rep(0, dim(datx)[2] * fold.cv), nrow=fold.cv) + for (i in 1:length(lambda.grid)){ + for (bb in 1:fold.cv){ + table.tmp[bb, ] = stab.table.inn[[bb]][, i] + } + STAB[b, i] = round(getStability(table.tmp)$stability, 2) + } + } + + result = list(lambda.grid=lambda.grid, MSE.list=MSE, STAB.list=STAB, MSE.value=colMeans(MSE), STAB.value=colMeans(STAB)) + return(result) +} + + +########################################################### +#### RF (double cv -- no validation set) ############### +########################################################### +randomForest_double_cv = function(datx, y, seednum=31, fold.cv=5, mtry.grid=10, num_trees=500, pval_thr=0.05){ + set.seed(seednum) + + ## double loop for cross-vlidation + data = as.data.frame(cbind(y, datx)) + colnames(data) = c('y', paste('V', seq(1, dim(datx)[2]), sep='')) + flds <- createFolds(data$y, k = fold.cv, list = TRUE, returnTrain = FALSE) + + ## outer loop for estimating MSE + MSE = STAB = matrix(rep(0, fold.cv * length(mtry.grid)), nrow=fold.cv) + rownames(MSE) = rownames(STAB) = paste('fold', seq(1:fold.cv), sep='') + colnames(MSE) = colnames(STAB) = paste('mtry', seq(1:length(mtry.grid)), sep='') + for (b in 1:fold.cv){ + idx.test = flds[[b]] + train <- data[-idx.test, ] + test <- data[idx.test, ] + + for (mtry in mtry.grid){ + fit = ranger(y ~., data = train, num.trees=500, mtry=mtry, seed=seednum, importance = 'permutation') + pred.fit <- predict(fit, test) + MSE[b, ] <- mean((test$y - pred.fit$predictions)^2) + } + + ## inner loup for estimating stability + flds.inn <- createFolds(train$y, k = fold.cv, list = TRUE, returnTrain = FALSE) + stab.table.inn = list() + for (bb in 1:fold.cv){ + idx.test.inn = flds.inn[[bb]] + stab.train <- train[-idx.test.inn, ] + stab.test <- train[idx.test.inn, ] + + coef.chosen.table = matrix(rep(0, dim(datx)[2] * length(mtry.grid)), ncol=length(mtry.grid)) + colnames(coef.chosen.table) = paste('mtry', seq(1:length(mtry.grid)), sep='') + idx = 0 + for (mtry in mtry.grid){ + idx = idx + 1 + fit.inn = ranger(y ~., data = stab.train, num.trees=500, mtry=mtry, seed=seednum, importance = 'permutation') + table = as.data.frame(importance_pvalues(fit.inn, method = "altmann", formula = y ~ ., data = stab.train)) + coef.chosen = which(table$pvalue < pval_thr) + coef.chosen.table[coef.chosen, idx] = 1 + stab.table.inn[[bb]] = coef.chosen.table + } + + } + + # calculate stability + table.tmp = matrix(rep(0, dim(datx)[2] * fold.cv), nrow=fold.cv) + for (i in 1:length(mtry.grid)){ + for (bb in 1:fold.cv){ + table.tmp[bb, ] = stab.table.inn[[bb]][, i] + } + STAB[b, i] = round(getStability(table.tmp)$stability, 2) + } + } + + result = list(mtry.grid=mtry.grid, MSE.list=MSE, STAB.list=STAB, MSE.value=colMeans(MSE), STAB.value=colMeans(STAB)) + return(result) + +} diff --git a/code_method/cv_method_binary_update.R b/code_method/cv_method_binary_update.R new file mode 100644 index 0000000..8da826f --- /dev/null +++ b/code_method/cv_method_binary_update.R @@ -0,0 +1,247 @@ +########################################### +#### methods for binary outcome ############# +########################################### +library(glmnet) +library(caret) +library(ranger) # faster random forest +library(pROC) # calculate ROC (need to load this library to avoid error) + +# general reference with caret on glmnet & random forest +## http://rstudio-pubs-static.s3.amazonaws.com/251240_12a8ecea8e144fada41120ddcf52b116.html + +# important note +## when training model on training set, as tuning parameters are set in final model, coefficient are chosen already +## use test set to predict the MSE +## as unclear how carret handle fitting and prediction, use carret only for parameter tuning in elastic net + +########################################### +#### Lasso (tune lambda) ################## +########################################### +lasso_cv = function(datx, y, seednum=31, family=family, ratio.training=0.8, fold.cv=10, + lambda.grid, lambda.choice='lambda.1se'){ + # seednum: the seed number + # ratio.training: the ratio of training set (parento principle training:test=8:2) + # lambda.grid: possible candidate values for tuning parameter Lambda + # fold.cv: n-fold cross validation + # lambda.choice: 'lambda.min' or 'lambda.1se' + + set.seed(seednum) + + # # split data into training and tests sets + nn <- length(y) + trn <- sample(1:nn, ratio.training*nn) + x.train <- datx[trn, ] + x.test <- datx[-trn, ] + y.train <- y[trn] + y.test <- y[-trn] + + # use cross-validation on training data & fit on test data + cv.fit <- cv.glmnet(x.train, y.train, family=family, alpha=1, lambda=lambda.grid, nfolds=fold.cv) + pred.fit <- predict(cv.fit, s=lambda.choice, newx=x.test, type='class') # predict class for binomial + + # covariates chosen + coef.fit <- predict(cv.fit, s=lambda.choice, newx=x.test, type='coefficients') + coef.chosen = which(coef.fit != 0) + coef.chosen = coef.chosen - 1 # index for 1 representing intercept + + pred.class <- as.numeric(pred.fit) + ROC <- pROC::roc(y.test, pred.class)$auc # in fact should be called "AUC" value instead of ROC + + + result = list(ROC=ROC, coef.chosen=coef.chosen) + return(result) +} + +########################################### +#### Elastic Net (tune lambda and alpha) ## +########################################### +# reference 1 (tune both parameters with caret) +## https://stats.stackexchange.com/questions/268885/tune-alpha-and-lambda-parameters-of-elastic-nets-in-an-optimal-way +# reference 2 (extract final model and prediction with caret) +## https://topepo.github.io/caret/model-training-and-tuning.html + + +elnet_cv = function(datx, y, seednum=31, alpha.grid, lambda.grid, family=family, + ratio.training=0.8, fold.cv=10){ + # seednum: the seed number + # ratio.training: the ratio of training set (parento principle training:test=8:2) + # alpha.grid: possible candidate values for tuning parameter alpha + # lambda.grid: possible candidate values for tuning parameter Lambda + # fold.cv: n-fold cross validation + + set.seed(seednum) + + # # split data into training and tests sets + nn <- length(y) + trn <- sample(1:nn, ratio.training*nn) + x.train <- datx[trn, ] + x.test <- datx[-trn, ] + y.train <- y[trn] + y.test <- y[-trn] + + #data.train = as.data.frame(cbind(y.train, x.train)) + data.train = data.frame(y.train, x.train) # avoid conversion of data types with binary response + colnames(data.train) = c('y', paste('V', seq(1, dim(datx)[2]), sep='')) + + # tune parameters with CV on training data with caret + trnCtrl <- trainControl(method = "cv", number = fold.cv) + srchGrid <- expand.grid(.alpha = alpha.grid, .lambda = lambda.grid) + + data.train$y = as.factor(data.train$y) + my_train <- train(y ~., data.train, + method = "glmnet", + tuneGrid = srchGrid, + trControl = trnCtrl) + + # fit the model with best tuning parameters on test data with glmnet + fit = glmnet(x.train, y.train, alpha=my_train$bestTune$alpha, + lambda=my_train$bestTune$lambda, family=family) + pred.fit <- predict(fit, x.test, type='class') # predict class for binomial + + # covariates chosen + coef.fit <- predict(fit, x.test, type='coefficients') + coef.chosen = which(coef.fit != 0) + coef.chosen = coef.chosen - 1 # index for 1 representing intercept + + # evaluate results + pred.class <- as.numeric(unlist(pred.fit)) + ROC <- pROC::roc(y.test, pred.class)$auc + + result = list(ROC=ROC, coef.chosen=coef.chosen) + #result = list(pred.fit=pred.fit, y.test=y.test) + return(result) +} + + +############################################################### +#### Random Forests (tune # variables at each random split #### +############################################################### +# reference on regression random forst +## https://uc-r.github.io/random_forests +# OOB error is different from test error (see above website) + + +randomForest_cv = function(datx, y, seednum=31, fold.cv=5, ratio.training=0.8, mtry.grid=10, num_trees=500, + pval_thr=0.05, method.perm='altmann'){ + # mtry: number of variables to randomly sample at each split + # num_trees: number of trees to grow in random forests + # pval_thr: threshold for permutation test + # note that permutation p-value can use "altmann method" for all types of data; 'Janita' for high-dimensitional data only + # ref on permutation methods: http://finzi.psych.upenn.edu/library/ranger/html/importance_pvalues.html + + set.seed(seednum) + + # split data into training and tests sets + #data = as.data.frame(cbind(y, datx)) + data = data.frame(y, datx) # avoid conversion of data types with binary response + colnames(data) = c('y', paste('V', seq(1, dim(datx)[2]), sep='')) + inTraining = createDataPartition(data$y, p = ratio.training, list=FALSE) + train <- data[inTraining, ] + test <- data[-inTraining, ] + + # tune parameter with cross validation + hyper.grid <- expand.grid(mtry = mtry.grid, OOB_RMSE = 0) + for (i in 1:nrow(hyper.grid)){ + model = ranger(y ~., data = train, + num.trees=500, mtry=hyper.grid$mtry[i], + seed=seednum, importance = 'permutation') + hyper.grid$OOB_RMSE[i] = sqrt(model$prediction.error) + } + OOB = min(hyper.grid$OOB_RMSE) # out of bag error + position = which.min(hyper.grid$OOB_RMSE) + + # permutation test on tuned random forst model to obtain chosen features + if (method.perm == 'altmann'){ # for all data types + rf.model <- ranger(y ~., data=test, num.trees = num_trees, + mtry = hyper.grid$mtry[position], importance = 'permutation') + table = as.data.frame(importance_pvalues(rf.model, method = "altmann", + formula = y ~ ., data = test)) + } else if (method.perm == 'janitza'){ # for high dimensional data only + rf.model <- ranger(y ~., data=test, num.trees = num_trees, + mtry = hyper.grid$mtry[position], importance = 'impurity_corrected') + table = as.data.frame(importance_pvalues(rf.model, method = "janitza", + formula = y ~ ., data = test)) + } + + coef.chosen = which(table$pvalue < pval_thr) + + # if nothing been selected + if (identical(coef.chosen, integer(0))){ + coef.chosen = 0 + } + + # predicted class: https://www.rdocumentation.org/packages/ranger/versions/0.12.1/topics/predict.ranger + pred_rf = predict(rf.model, test) + pred.class <- as.numeric(pred_rf$predictions) + ROC <- pROC::roc(test$y, pred.class)$auc + + + result = list(mtry=mtry.grid[position], coef.chosen=coef.chosen, ROC=ROC, OOB=OOB, p.value=table$pvalue) + return(result) + +} + + +# # ############################################################### +# # #### Generalized Compositional Lasso by Lu et al 2019 ######### +# # ############################################################### +dir_coda = '../code_coda/Microbiome-Variable-Selection-master/Microbiome_variable_selection_tutorial/' + +source(file = paste0(dir_coda, 'CoDA-Penalized-Regression/R/functions_coda_penalized_regression.R')) + +source(file = paste0(dir_coda, 'functions.R')) + +gen_cons_lasso_cv = function(datx, y, seednum=31, data.split=FALSE, + ratio.training=0.8, lambda.coda=seq(0.1, 0.2, 0.01)){ + # note that generalized compositional lasso do the X transformation within + # thus use sub$X instead of sub$Z for generalized compositonal lasso method + + set.seed(seednum) + colnames(datx) = paste('V', seq(1, dim(datx)[2]), sep='') + + if (data.split == TRUE){ + # # split data into training and tests sets + nn <- length(y) + trn <- sample(1:nn, ratio.training*nn) + x.train <- datx[trn, ] + x.test <- datx[-trn, ] + y.train <- y[trn] + y.test <- y[-trn] + + lambda_table <- lambdaRange_codalasso(X = x.train, y = y.train, + lambdaSeq = lambda.coda) + lambda_optimal <- lambda_table[which.max(lambda_table$prop.explained.dev), + 'lambda'] + codalasso_sim <- coda_logistic_lasso(X = x.test, y = y.test, + lambda = lambda_optimal) + ROC <- pROC::roc(y.test, codalasso_sim$`predicted class`)$auc + sim.results_codalasso <- coda_lasso_wrapper(result = codalasso_sim, + X = x.test) + coef.chosen = tidyr::extract_numeric(sim.results_codalasso$varSelect) + }else{ + lambda_table <- lambdaRange_codalasso(X = datx, y = y, + lambdaSeq = lambda.coda) + + # choose lambda explained most deviance (if several, choose smaller lambda) + lambda_optimal <- lambda_table[which.max(lambda_table$prop.explained.dev), + 'lambda'] + codalasso_sim <- coda_logistic_lasso(X = datx, y = y, + lambda = lambda_optimal) + ROC <- pROC::roc(y, codalasso_sim$`predicted class`)$auc + sim.results_codalasso <- coda_lasso_wrapper(result = codalasso_sim, + X = datx) + coef.chosen = tidyr::extract_numeric(sim.results_codalasso$varSelect) + } + + result = list(ROC=ROC, coef.chosen=coef.chosen) + return(result) +} + + + + + + + + + diff --git a/code_method/getStability.R b/code_method/getStability.R new file mode 100755 index 0000000..913a417 --- /dev/null +++ b/code_method/getStability.R @@ -0,0 +1,95 @@ +#' ## source code: https://github.com/nogueirs/JMLR2018/blob/master/R/getStability.R +#' @title getStability +#' @description Nogueira's stability measure from a binary matrix representing +#' feature selection results in M bootstrapped datasets using a machine-learning method. +#' @param X A binary matrix X of size M * p, where a row represents a feature set +#' (for one of M data sets) and a column represents the selection of a given +#' feature over all the M data sets. +#' @param alpha The level of significance (e.g. if alpha=0.05, we will get 95% +#' confidence intervals). It's an optional argument and is set to 5% by default. +#' @details +#' @return A list of stability measures is returned. The list inlcude stability, +#' the variance of statbility, the upper/lower bound of the (1-alpha) +#' confidence interval. +#' @examples +#' ## extreme cases example +#' d = 2 # number of features +#' M = 10 # number of bootstrap replicates +#' +#' ## case 1: when stability index undefined -- Z all zeros or all ones (Nogueria2018 p.13) +#' Z_all_missed = matrix(rep(0, M*d), nrow=M) # since K_bar = 0, thus SI undefined +#' getStability(Z_all_missed)$stability +#' +#' Z_all_selected = matrix(rep(1, M*d), nrow=M) # since K_bar = d = 3, thus SI underfined +#' getStability(Z_all_selected)$stability +#' +#' ## case 2: when stability index reaches maximum 1 -- each column of Z either all ones or all zeros (but not only zeros or only ones)(Nogueria2018 p.13) +#' # this was the case when we got the wrong SI almost 1 for soil datasets: since sampled dataset the same across all +#' d = 10 +#' for (i in 1: (d-1)){ +#' d_ones = sample(seq(1, d, 1), i) +#' Z_tmp = matrix(rep(0, M*d), nrow=M) +#' Z_tmp[, d_ones] = 1 # since Sf = 0 for all features, thus SI = 1 +#' SI = getStability(Z_tmp)$stability +#' print(i) +#' print(paste('SI:', SI, sep='')) +#' } +#' +#' ## case 3: when stability index near minimum 0 (appedix D: - 1/(M-1), but as M goes to infinity, minimum asymptotically 0) +#' ## when for each column of feature, it receives same numbers of 0 and 1 +#' d_alt = rep(c(0, 1), M/2) +#' Z_alt = matrix(rep(d_alt, d), ncol=d) +#' getStability(Z_alt)$stability # -0.1111111, which is - 1/(M-1) +# +#' d_alt_2 = c(rep(0, M/2), rep(1, M/2)) +#' Z_alt_2 = matrix(rep(d_alt_2, d), ncol=d) +#' getStability(Z_alt_2)$stability # -0.1111111, which is - 1/(M-1) +# +#' # when M goes to infinity +#' M = 10000 +#' d_alt = rep(c(0, 1), M/2) +#' Z_alt = matrix(rep(d_alt, d), ncol=d) +#' getStability(Z_alt)$stability # -0.00010001, very close to 0 +#' @export +getStability <- function(X, alpha=0.05) { +## the input X is a binary matrix of size M*d where: +## M is the number of bootstrap replicates +## d is the total number of features +## alpha is the level of significance (e.g. if alpha=0.05, we will get 95% confidence intervals) +## it's an optional argument and is set to 5% by default +### first we compute the stability + +M<-nrow(X) +d<-ncol(X) +hatPF<-colMeans(X) # selection probability of each feature +kbar<-sum(hatPF) +v_rand=(kbar/d)*(1-kbar/d) # kbar is the sum of selection probability on all features; v_rand is like the variance of bernoulli dist +stability<-1-(M/(M-1))*mean(hatPF*(1-hatPF))/v_rand ## this is the stability estimate + +## then we compute the variance of the estimate +ki<-rowSums(X) +phi_i<-rep(0,M) +for(i in 1:M){ + phi_i[i]<-(1/v_rand)*((1/d)*sum(X[i,]*hatPF)-(ki[i]*kbar)/d^2-(stability/2)*((2*kbar*ki[i])/d^2-ki[i]/d-kbar/d+1)) +} +phi_bar=mean(phi_i) +var_stab=(4/M^2)*sum((phi_i-phi_bar)^2) ## this is the variance of the stability estimate + +## then we calculate lower and upper limits of the confidence intervals +z<-qnorm(1-alpha/2) # this is the standard normal cumulative inverse at a level 1-alpha/2 +upper<-stability+z*sqrt(var_stab) ## the upper bound of the (1-alpha) confidence interval +lower<-stability-z*sqrt(var_stab) ## the lower bound of the (1-alpha) confidence interval + +return(list("stability"=stability,"variance"=var_stab,"lower"=lower,"upper"=upper)) + +} + + + + + + + + + + diff --git a/code_method/stab_data_applications.R b/code_method/stab_data_applications.R new file mode 100755 index 0000000..403a3d8 --- /dev/null +++ b/code_method/stab_data_applications.R @@ -0,0 +1,73 @@ +########################################################## +### estimate correlation between stability index ######### +########################################################## + +#source('cv_method.R') +#source('getStability.R') + +## set up parallel computing +library(foreach) +library(doParallel) +#numCores <- detectCores() - 2 # 6 cores +numCores <- detectCores() - 4 # for old computer +registerDoParallel(numCores) # use multicore, set to the number of our cores + +boot_stab = function(num_boot=100, dat_file, method, ratio.training=0.8, fold.cv=10, + family='gaussian', lambda.grid=exp(seq(-4, -2, 0.2)), alpha.grid=seq(0.1, 0.9, 0.1), + mtry.grid=seq(5, 25, 5), num_trees = 500, pval_thr = 0.05, method.perm='altmann'){ + + # load data + load(dat_file) + + # bootsrap with parallelization + results = foreach (i=1:num_boot) %dopar% { + print(paste('bootnum', i, sep=":")) + set.seed(i) # ensure each bootstrapped data is the same across methods + N = length(y) # number of samples + sample_ids = seq(1, N, 1) + + # bootstrapped samples + boot_ids = sample(sample_ids, size=N, replace=TRUE) + boot_taxa = taxa[boot_ids, ] + boot_mf = y[boot_ids] + + ## select features from lasso/elnet + if (method == 'compLasso'){ + result.lin = cons_lasso_cv(y=boot_mf, datx=boot_taxa, seednum=i, ratio.training=ratio.training) + output.lin = c(result.lin$MSE, result.lin$coef.chosen) + + } else if (method == 'RF'){ + result.rf = randomForest_cv(y=boot_mf, datx=boot_taxa, seednum=i, fold.cv=fold.cv, + num_trees=num_trees, mtry.grid = mtry.grid, pval_thr=pval_thr, method.perm=method.perm) + output.rf = c(result.rf$MSE, result.rf$coef.chosen) + + } else if (method == 'lasso'){ + result.lasso = lasso_cv(y=boot_mf, datx=boot_taxa, seednum=i,family=family, lambda.choice='lambda.1se', + ratio.training=ratio.training, fold.cv=fold.cv, lambda.grid=lambda.grid) + output.lasso = c(result.lasso$MSE, result.lasso$coef.chosen) + + } else if (method == 'elnet'){ + result.elnet = elnet_cv(y=boot_mf, datx=boot_taxa, seednum=i,family=family, alpha.grid=alpha.grid, + ratio.training=ratio.training, fold.cv=fold.cv, lambda.grid=lambda.grid) + output.elnet = c(result.elnet$MSE, result.elnet$coef.chosen) + } + } + + # reformat results + p = dim(taxa)[2] + stability_table = matrix(rep(0, num_boot * p), ncol=p) + results_mse = results_chosen = list() + for (b in 1:num_boot){ + results_mse[b] = results[[b]][1] + results_chosen[[b]] = results[[b]][-1] + stability_table[b, results_chosen[[b]]] = 1 + } + + stab_index = round(getStability(stability_table)$stability, 2) + MSE_mean = round(mean(unlist(results_mse), na.rm=T),2) + MSE_se = round(FSA::se(unlist(results_mse), na.rm=T),2) + + results_list=list(num_boot=num_boot, method=method, stab_index=stab_index, stab_table=stability_table, + results_chosen=results_chosen, lists_mse=results_mse, MSE_mean=MSE_mean, MSE_se=MSE_se) + +} diff --git a/code_method/stab_data_applications_binary.R b/code_method/stab_data_applications_binary.R new file mode 100644 index 0000000..cc5f907 --- /dev/null +++ b/code_method/stab_data_applications_binary.R @@ -0,0 +1,74 @@ +########################################################## +### estimate correlation between stability index ######### +########################################################## + +#source('cv_method_binary_update.R') +#source('getStability.R') + +## set up parallel computing +library(foreach) +library(doParallel) +#numCores <- detectCores() - 2 # 6 cores +numCores <- detectCores() - 4 # for old computer +registerDoParallel(numCores) # use multicore, set to the number of our cores + +boot_stab = function(num_boot=100, dat_file, method, ratio.training=0.8, fold.cv=10, + family='binomial', lambda.grid=exp(seq(-4, -2, 0.2)), alpha.grid=seq(0.1, 0.9, 0.1), + mtry.grid=seq(5, 25, 5), num_trees = 500, pval_thr = 0.05, method.perm='altmann', + lambda.coda=seq(0.1, 0.2, 0.01), data.split=FALSE){ + + # load data + load(dat_file) + + # bootsrap with parallelization + results = foreach (i=1:num_boot) %dopar% { + print(paste('bootnum', i, sep=":")) + set.seed(i) # ensure each bootstrapped data is the same across methods + N = length(y) # number of samples + sample_ids = seq(1, N, 1) + + # bootstrapped samples + boot_ids = sample(sample_ids, size=N, replace=TRUE) + boot_taxa = taxa[boot_ids, ] # log-transformed taxa relative abundance + boot_mf = y[boot_ids] + + ## select features from lasso/elnet + if (method == 'GenCompLasso'){ # use X instead of Z (log-transformed) + result.lin = gen_cons_lasso_cv(y=boot_mf, datx=exp(boot_taxa), seednum=i, ratio.training=ratio.training) + output.lin = c(result.lin$ROC, result.lin$coef.chosen) + + } else if (method == 'RF'){ + result.rf = randomForest_cv(y=boot_mf, datx=boot_taxa, seednum=i, fold.cv=fold.cv, + num_trees=num_trees, mtry.grid = mtry.grid, pval_thr=pval_thr, method.perm=method.perm) + output.rf = c(result.rf$ROC, result.rf$coef.chosen) + + } else if (method == 'lasso'){ + result.lasso = lasso_cv(y=boot_mf, datx=boot_taxa, seednum=i,family=family, lambda.choice='lambda.1se', + ratio.training=ratio.training, fold.cv=fold.cv, lambda.grid=lambda.grid) + output.lasso = c(result.lasso$ROC, result.lasso$coef.chosen) + + } else if (method == 'elnet'){ + result.elnet = elnet_cv(y=boot_mf, datx=boot_taxa, seednum=i,family=family, alpha.grid=alpha.grid, + ratio.training=ratio.training, fold.cv=fold.cv, lambda.grid=lambda.grid) + output.elnet = c(result.elnet$ROC, result.elnet$coef.chosen) + } + } + + # reformat results + p = dim(taxa)[2] + stability_table = matrix(rep(0, num_boot * p), ncol=p) + results_ROC = results_chosen = list() + for (b in 1:num_boot){ + results_ROC[b] = results[[b]][1] + results_chosen[[b]] = results[[b]][-1] + stability_table[b, results_chosen[[b]]] = 1 + } + + stab_index = round(getStability(stability_table)$stability, 2) + ROC_mean = round(mean(unlist(results_ROC), na.rm=T),2) + ROC_se = round(FSA::se(unlist(results_ROC), na.rm=T),2) + + results_list=list(num_boot=num_boot, method=method, stab_index=stab_index, stab_table=stability_table, + results_chosen=results_chosen, lists_ROC=results_ROC, ROC_mean=ROC_mean, ROC_se=ROC_se) + +} diff --git a/data_application/.DS_Store b/data_application/.DS_Store deleted file mode 100755 index 2461f94..0000000 Binary files a/data_application/.DS_Store and /dev/null differ diff --git a/data_application/88soils/.DS_Store b/data_application/88soils/.DS_Store deleted file mode 100755 index 7a35105..0000000 Binary files a/data_application/88soils/.DS_Store and /dev/null differ diff --git a/data_application/88soils/results_bin/soils_binary_ph_GenCompLasso.RData b/data_application/88soils/results_bin/soils_binary_ph_GenCompLasso.RData new file mode 100644 index 0000000..1e40325 Binary files /dev/null and b/data_application/88soils/results_bin/soils_binary_ph_GenCompLasso.RData differ diff --git a/data_application/88soils/results_bin/soils_binary_ph_boot_compLasso.RData b/data_application/88soils/results_bin/soils_binary_ph_boot_compLasso.RData new file mode 100644 index 0000000..f8c44cc Binary files /dev/null and b/data_application/88soils/results_bin/soils_binary_ph_boot_compLasso.RData differ diff --git a/data_application/88soils/results_bin/soils_binary_ph_boot_rf.RData b/data_application/88soils/results_bin/soils_binary_ph_boot_rf.RData new file mode 100644 index 0000000..810a02b Binary files /dev/null and b/data_application/88soils/results_bin/soils_binary_ph_boot_rf.RData differ diff --git a/data_application/88soils/results_bin/soils_binary_ph_elnet.RData b/data_application/88soils/results_bin/soils_binary_ph_elnet.RData new file mode 100644 index 0000000..4b94de5 Binary files /dev/null and b/data_application/88soils/results_bin/soils_binary_ph_elnet.RData differ diff --git a/data_application/88soils/results_bin/soils_binary_ph_lasso.RData b/data_application/88soils/results_bin/soils_binary_ph_lasso.RData new file mode 100644 index 0000000..351b7fe Binary files /dev/null and b/data_application/88soils/results_bin/soils_binary_ph_lasso.RData differ diff --git a/data_application/88soils/results_bin/soils_binary_ph_rf.RData b/data_application/88soils/results_bin/soils_binary_ph_rf.RData new file mode 100644 index 0000000..f205d56 Binary files /dev/null and b/data_application/88soils/results_bin/soils_binary_ph_rf.RData differ diff --git a/data_application/88soils/results_cts/soils_ph.RData b/data_application/88soils/results_cts/soils_ph.RData new file mode 100755 index 0000000..b7933e1 Binary files /dev/null and b/data_application/88soils/results_cts/soils_ph.RData differ diff --git a/data_application/88soils/results_cts/soils_ph_boot_compLasso.RData b/data_application/88soils/results_cts/soils_ph_boot_compLasso.RData new file mode 100755 index 0000000..340c5a2 Binary files /dev/null and b/data_application/88soils/results_cts/soils_ph_boot_compLasso.RData differ diff --git a/data_application/88soils/results_cts/soils_ph_boot_rf.RData b/data_application/88soils/results_cts/soils_ph_boot_rf.RData new file mode 100755 index 0000000..d43024a Binary files /dev/null and b/data_application/88soils/results_cts/soils_ph_boot_rf.RData differ diff --git a/data_application/88soils/results_cts/soils_ph_compLasso.RData b/data_application/88soils/results_cts/soils_ph_compLasso.RData new file mode 100755 index 0000000..e591d05 Binary files /dev/null and b/data_application/88soils/results_cts/soils_ph_compLasso.RData differ diff --git a/data_application/88soils/results_cts/soils_ph_elnet.RData b/data_application/88soils/results_cts/soils_ph_elnet.RData new file mode 100755 index 0000000..4aaca38 Binary files /dev/null and b/data_application/88soils/results_cts/soils_ph_elnet.RData differ diff --git a/data_application/88soils/results_cts/soils_ph_lasso.RData b/data_application/88soils/results_cts/soils_ph_lasso.RData new file mode 100755 index 0000000..370aa5f Binary files /dev/null and b/data_application/88soils/results_cts/soils_ph_lasso.RData differ diff --git a/data_application/88soils/results_cts/soils_ph_rf.RData b/data_application/88soils/results_cts/soils_ph_rf.RData new file mode 100755 index 0000000..5730257 Binary files /dev/null and b/data_application/88soils/results_cts/soils_ph_rf.RData differ diff --git a/data_application/BMI/.DS_Store b/data_application/BMI/.DS_Store deleted file mode 100755 index 3541a03..0000000 Binary files a/data_application/BMI/.DS_Store and /dev/null differ diff --git a/data_application/BMI/filter_onepercent/.DS_Store b/data_application/BMI/filter_onepercent/.DS_Store deleted file mode 100755 index 5008ddf..0000000 Binary files a/data_application/BMI/filter_onepercent/.DS_Store and /dev/null differ diff --git a/data_application/BMI/results_bin/BMI_binary_GenCompLasso.RData b/data_application/BMI/results_bin/BMI_binary_GenCompLasso.RData new file mode 100644 index 0000000..77b9b13 Binary files /dev/null and b/data_application/BMI/results_bin/BMI_binary_GenCompLasso.RData differ diff --git a/data_application/BMI/results_bin/BMI_binary_boot_compLasso.RData b/data_application/BMI/results_bin/BMI_binary_boot_compLasso.RData new file mode 100644 index 0000000..e033e7b Binary files /dev/null and b/data_application/BMI/results_bin/BMI_binary_boot_compLasso.RData differ diff --git a/data_application/BMI/results_bin/BMI_binary_boot_rf.RData b/data_application/BMI/results_bin/BMI_binary_boot_rf.RData new file mode 100644 index 0000000..dd7de59 Binary files /dev/null and b/data_application/BMI/results_bin/BMI_binary_boot_rf.RData differ diff --git a/data_application/BMI/results_bin/BMI_binary_elnet.RData b/data_application/BMI/results_bin/BMI_binary_elnet.RData new file mode 100644 index 0000000..bc5face Binary files /dev/null and b/data_application/BMI/results_bin/BMI_binary_elnet.RData differ diff --git a/data_application/BMI/results_bin/BMI_binary_lasso.RData b/data_application/BMI/results_bin/BMI_binary_lasso.RData new file mode 100644 index 0000000..dce955d Binary files /dev/null and b/data_application/BMI/results_bin/BMI_binary_lasso.RData differ diff --git a/data_application/BMI/results_bin/BMI_binary_rf.RData b/data_application/BMI/results_bin/BMI_binary_rf.RData new file mode 100644 index 0000000..d85608c Binary files /dev/null and b/data_application/BMI/results_bin/BMI_binary_rf.RData differ diff --git a/data_application/BMI/results_cts/BMI_boot_compLasso.RData b/data_application/BMI/results_cts/BMI_boot_compLasso.RData new file mode 100755 index 0000000..af312d4 Binary files /dev/null and b/data_application/BMI/results_cts/BMI_boot_compLasso.RData differ diff --git a/data_application/BMI/results_cts/BMI_boot_rf.RData b/data_application/BMI/results_cts/BMI_boot_rf.RData new file mode 100755 index 0000000..354dd1f Binary files /dev/null and b/data_application/BMI/results_cts/BMI_boot_rf.RData differ diff --git a/data_application/BMI/results_cts/BMI_compLasso.RData b/data_application/BMI/results_cts/BMI_compLasso.RData new file mode 100755 index 0000000..881a1d8 Binary files /dev/null and b/data_application/BMI/results_cts/BMI_compLasso.RData differ diff --git a/data_application/BMI/results_cts/BMI_elnet.RData b/data_application/BMI/results_cts/BMI_elnet.RData new file mode 100755 index 0000000..c22cb89 Binary files /dev/null and b/data_application/BMI/results_cts/BMI_elnet.RData differ diff --git a/data_application/BMI/results_cts/BMI_lasso.RData b/data_application/BMI/results_cts/BMI_lasso.RData new file mode 100755 index 0000000..8cc6e87 Binary files /dev/null and b/data_application/BMI/results_cts/BMI_lasso.RData differ diff --git a/data_application/BMI/results_cts/BMI_rf.RData b/data_application/BMI/results_cts/BMI_rf.RData new file mode 100755 index 0000000..8e57fa9 Binary files /dev/null and b/data_application/BMI/results_cts/BMI_rf.RData differ diff --git a/data_application/code_applications/.DS_Store b/data_application/code_applications/.DS_Store deleted file mode 100755 index 5008ddf..0000000 Binary files a/data_application/code_applications/.DS_Store and /dev/null differ diff --git a/data_application/code_applications/code_bin/88soils_stab_application_binary.R b/data_application/code_applications/code_bin/88soils_stab_application_binary.R new file mode 100644 index 0000000..db0659c --- /dev/null +++ b/data_application/code_applications/code_bin/88soils_stab_application_binary.R @@ -0,0 +1,111 @@ +######################################################################################################### +### This is to estimate stablity & MSE using bootstrap on BMI_Lin_2014 dataset ################# +######################################################################################################### + +args = commandArgs(trailingOnly=TRUE) +print(args) +dir = args[1] + +source('../../../code_method/cv_method_binary_update.R') +source('../../../code_method/getStability.R') +source('../../../code_method/stab_data_applications_binary.R') # boot_stab() +source('../../../code_method/bootstrap_test_compLasso_rf_binary.R') # boot_stab_data() + +##################################### +##### data preparation ############## +##################################### +load('../../88soils/88soils_genus_table.RData') # if any error, re-process the data in HPC +count = soil_otu + +## filter 1% + add pesudo count +x <- count[, colMeans(count > 0) >= 0.01] +x[x == 0] <- 0.5 +x <- x/rowSums(x) # relative abundance +taxa <- log(x) +print(paste('number of features:', dim(taxa)[2], sep=':')) + +# # metadata +mf <- read.csv("../../88soils/88soils_modified_metadata.txt", sep='\t', row.names=1) +y <- mf$ph[match(rownames(count), rownames(mf))] +y <- as.factor(ifelse(y >= median(y), 1, 0)) # transform to be binary +print(paste('number of samples:', length(y), sep=':')) + +# save processed data +save(y, taxa, file='../../88soils/soils_ph_binary.RData') + + +# #------------------------ +# # compare methods +# #------------------------ +i <- as.numeric(Sys.getenv("PBS_ARRAYID")) + +if (i == 1){ + #################################### + ## Generalized compositional lasso ############# + # #################################### + print('GenCompLasso') + out_GenCompLasso = boot_stab(num_boot = 100, method = 'GenCompLasso', lambda.grid = NULL, + dat_file = '../../88soils/soils_ph_binary.RData') + + save(out_GenCompLasso, file=paste0(dir, '/soils_binary_ph_GenCompLasso.RData', sep='')) +}else if (i == 2){ + ############################################################# + # Lasso with glmnet default lambda sequence ############# + ############################################################# + print('Lasso') + out_lasso = boot_stab(num_boot = 100, method = 'lasso', lambda.grid = NULL, + dat_file = '../../88soils/soils_ph_binary.RData') + + save(out_lasso, file=paste0(dir, '/soils_binary_ph_lasso.RData', sep='')) +}else if (i == 3){ + # ############################################################## + # ## Elastic Net with self defined lambda (NULL not allowed) ############# + # ############################################################## + print('Elnet') + out_elnet = boot_stab(num_boot = 100, method = 'elnet', + dat_file = '../../88soils/soils_ph_binary.RData') + + save(out_elnet, file=paste0(dir, '/soils_binary_ph_elnet.RData', sep='')) +}else if (i == 4){ + ############################################################## + ## Random Forest with Altman feature selection ############# + ############################################################## + print('RF') + out_rf = boot_stab(num_boot = 100, method = 'RF', method.perm='altmann', mtry.grid=seq(30, 60, 5), + dat_file = '../../88soils/soils_ph_binary.RData') + + save(out_rf, file=paste0(dir, '/soils_binary_ph_rf.RData', sep='')) +}else if (i == 5){ + ######################################################################## + ############### double bootstrap: random forest ################## + # ###################################################################### + print('double boot RF') + boot_rf = boot_stab_data(num_boot=100, method = 'RF', + data_file='../../88soils/soils_ph_binary.RData') + save(boot_rf, file=paste0(dir, '/soils_binary_ph_boot_rf.RData')) +}else if (i == 6){ + ######################################################################## + ############### double bootstrap: generalized compositional lasso ###### + # ###################################################################### + print('double boot compLasso') + boot_compLasso = boot_stab_data(num_boot=100, method = 'GenCompLasso', + data_file='../../88soils/soils_ph_binary.RData') + save(boot_compLasso, file=paste0(dir, '/soils_binary_ph_boot_compLasso.RData')) +} + + + + + + + + + + + + + + + + + diff --git a/data_application/code_applications/code_bin/BMI_stab_application_binary.R b/data_application/code_applications/code_bin/BMI_stab_application_binary.R new file mode 100644 index 0000000..7f2560c --- /dev/null +++ b/data_application/code_applications/code_bin/BMI_stab_application_binary.R @@ -0,0 +1,99 @@ +######################################################################################################### +### This is to estimate stablity & MSE using bootstrap on BMI_Lin_2014 dataset ################# +######################################################################################################### + +args = commandArgs(trailingOnly=TRUE) +print(args) +dir = args[1] + +source('../../../code_method/cv_method_binary_update.R') +source('../../../code_method/getStability.R') +source('../../../code_method/stab_data_applications_binary.R') # boot_stab() +source('../../../code_method/bootstrap_test_compLasso_rf_binary.R') # boot_stab_data() + +##################################### +##### data preparation ############## +##################################### +count <- as.matrix(read.table("../../code_Lin/cvs/data/combo_count_tab.txt")) + +# filter 1% + add pesudo count +depth <- sapply(strsplit(colnames(count), "\\."), length) +x <- count[, depth == 6 & colMeans(count > 0) >= 0.01] +x[x == 0] <- 0.5 +x <- x/rowSums(x) # relative abundance +taxa <- log(x) +print(paste('number of features:', dim(taxa)[2], sep=':')) + +# metadata +demo <- read.delim("../../code_Lin/cvs/data/demographic.txt") +y <- demo$bmi[match(rownames(count), demo$pid)] +y <- as.factor(ifelse(y >= median(y), 1, 0)) # transform to be binary +print(paste('number of samples:', length(y), sep=':')) + +# save processed data +save(y, taxa, file='../../BMI/BMI_Lin_2014_binary.RData') + +#------------------------ +# compare methods +#------------------------ +i <- as.numeric(Sys.getenv("PBS_ARRAYID")) + +if (i == 1){ + # #################################### + # ## Generalized compositional lasso ############# + # #################################### + print('GencompLasso') + out_GenCompLasso = boot_stab(num_boot = 100, method = 'GenCompLasso', + dat_file = '../../BMI/BMI_Lin_2014_binary.RData') + + save(out_GenCompLasso, file=paste0(dir, '/BMI_binary_GenCompLasso.RData')) +}else if (i == 2){ + + ############################################################## + ## Lasso with glmnet default lambda sequence ############# + ############################################################## + print('Lasso') + out_lasso = boot_stab(num_boot = 100, method = 'lasso', lambda.grid = NULL, + dat_file = '../../BMI/BMI_Lin_2014_binary.RData') + + save(out_lasso, file=paste0(dir, '/BMI_binary_lasso.RData', sep='')) +}else if (i == 3){ + # ############################################################## + # ## Elastic Net with self defined lambda (NULL not allowed) ############# + # ############################################################## + print('Elnet') + out_elnet = boot_stab(num_boot = 100, method = 'elnet', + dat_file = '../../BMI/BMI_Lin_2014_binary.RData') + + save(out_elnet, file=paste0(dir, '/BMI_binary_elnet.RData', sep='')) +}else if (i == 4){ + # ############################################################## + # ## Random Forest with Altman feature selection ############# + # ############################################################## + print('RF') + out_rf = boot_stab(num_boot = 100, method = 'RF', method.perm='altmann', + dat_file = '../../BMI/BMI_Lin_2014_binary.RData') + + save(out_rf, file=paste0(dir, '/BMI_binary_rf.RData', sep='')) +}else if (i == 5){ + ######################################################################## + ############### double bootstrap: random forest ################## + # ###################################################################### + print('double boot RF') + boot_rf = boot_stab_data(num_boot=100, method = 'RF', + data_file='../../BMI/BMI_Lin_2014_binary.RData') + save(boot_rf, file=paste0(dir, '/BMI_binary_boot_rf.RData')) +}else if (i == 6){ + ######################################################################## + ############### double bootstrap: generalized compositional lasso ###### + # ###################################################################### + print('double boot compLasso') + boot_compLasso = boot_stab_data(num_boot=100, method = 'GenCompLasso', + data_file='../../BMI/BMI_Lin_2014_binary.RData') + save(boot_compLasso, file=paste0(dir, '/BMI_binary_boot_compLasso.RData')) +} + + + + + diff --git a/data_application/code_applications/code_cts/88soils_stab_application.R b/data_application/code_applications/code_cts/88soils_stab_application.R new file mode 100755 index 0000000..d1379bb --- /dev/null +++ b/data_application/code_applications/code_cts/88soils_stab_application.R @@ -0,0 +1,102 @@ +######################################################################################################### +### This is to estimate stablity & MSE using bootstrap on BMI_Lin_2014 dataset ################# +######################################################################################################### + +args = commandArgs(trailingOnly=TRUE) +print(args) +dir = args[1] + +source('../../../code_method/cv_method.R') +source('../../../code_method/getStability.R') +source('../../../code_method/stab_data_applications.R') +source('../../../code_method/bootstrap_test_compLasso_rf.R') + +##################################### +##### data preparation ############## +##################################### +soil_otu = as.matrix(read.csv("../../88soils/88soils_genus_table.txt", sep='\t', row.names=1)) +save(soil_otu, file='../../88soils/88soils_genus_table.RData') + +load('../../88soils/88soils_genus_table.RData') +count = soil_otu + +## filter 1% + add pesudo count +x <- count[, colMeans(count > 0) >= 0.01] +x[x == 0] <- 0.5 +x <- x/rowSums(x) # relative abundance +taxa <- log(x) +print(paste('number of features:', dim(taxa)[2], sep=':')) + +# # metadata +mf <- read.csv("../../88soils/88soils_modified_metadata.txt", sep='\t', row.names=1) +y <- mf$ph[match(rownames(count), rownames(mf))] +print(paste('number of samples:', length(y), sep=':')) + +# save processed data +save(y, taxa, file='../../88soils/soil_ph.RData') + + + +#################################### +## compositional lasso ############# +# #################################### +print('compLasso') +out_compLasso = boot_stab(num_boot = 100, method = 'compLasso', + dat_file = '../data_application/88soils/soils_ph.RData') + +save(out_compLasso, file=paste0(dir, '/soils_ph_compLasso.RData')) + +############################################################# +# Lasso with glmnet default lambda sequence ############# +############################################################# +print('Lasso') +out_lasso = boot_stab(num_boot = 100, method = 'lasso', lambda.grid = NULL, + dat_file = '../data_application/88soils/soils_ph.RData') + +save(out_lasso, file=paste0(dir, '/soils_ph_lasso.RData', sep='')) + + +# ############################################################## +# ## Elastic Net with self defined lambda (NULL not allowed) ############# +# ############################################################## +print('Elnet') +out_elnet = boot_stab(num_boot = 100, method = 'elnet', + dat_file = '../../88soils/soils_ph.RData') + +save(out_elnet, file=paste0(dir, '/soils_ph_elnet.RData', sep='')) + + +############################################################## +## Random Forest with Altman feature selection ############# +############################################################## +print('RF') +out_rf = boot_stab(num_boot = 100, method = 'RF', method.perm='altmann', mtry.grid=seq(30, 60, 5), + dat_file = '../../88soils/soils_ph.RData') + +save(out_rf, file=paste0(dir, '/soils_ph_rf.RData', sep='')) + +######################################################################## +############### double bootstrap: random forest ################## +# ###################################################################### +print('double boot RF') +boot_rf = boot_stab_data(num_boot=100, method = 'RF', + data_file='../../88soils/soils_ph.RData') +save(boot_rf, file=paste0(dir, '/soils_ph_boot_rf.RData')) + +######################################################################## +############### double bootstrap: compositional lasso ################## +# ###################################################################### +print('double boot compLasso') +boot_compLasso = boot_stab_data(num_boot=100, method = 'compLasso', + data_file='../../88soils/soils_ph.RData') +save(boot_compLasso, file=paste0(dir, '/soils_ph_boot_compLasso.RData')) + + + + + + + + + + diff --git a/data_application/code_applications/code_cts/BMI_stab_application.R b/data_application/code_applications/code_cts/BMI_stab_application.R new file mode 100755 index 0000000..5514c31 --- /dev/null +++ b/data_application/code_applications/code_cts/BMI_stab_application.R @@ -0,0 +1,105 @@ +######################################################################################################### +### This is to estimate stablity & MSE using bootstrap on BMI_Lin_2014 dataset ################# +######################################################################################################### + +args = commandArgs(trailingOnly=TRUE) +print(args) +dir = args[1] + +source('../../../code_method/cv_method.R') +source('../../../code_method/getStability.R') +source('../../../code_method/stab_data_applications.R') +source('../../../code_method/bootstrap_test_compLasso_rf.R') + +##################################### +##### data preparation ############## +##################################### +count <- as.matrix(read.table("../../code_Lin/cvs/data/combo_count_tab.txt")) + +# filter 1% + add pesudo count +depth <- sapply(strsplit(colnames(count), "\\."), length) +x <- count[, depth == 6 & colMeans(count > 0) >= 0.01] +x[x == 0] <- 0.5 +x <- x/rowSums(x) # relative abundance +taxa <- log(x) +print(paste('number of features:', dim(taxa)[2], sep=':')) + +# metadata +demo <- read.delim("../../code_Lin/cvs/data/demographic.txt") +y <- demo$bmi[match(rownames(count), demo$pid)] +print(paste('number of samples:', length(y), sep=':')) + +# save processed data +save(y, taxa, file='../../BMI/BMI_Lin_2014.RData') + +# #################################### +# ## compositional lasso ############# +# #################################### +print('compLasso') +out_compLasso = boot_stab(num_boot = 100, method = 'compLasso', + dat_file = '../../BMI/BMI_Lin_2014.RData') + +save(out_compLasso, file=paste0(dir, '/BMI_compLasso.RData')) + +############################################################## +## Lasso with glmnet default lambda sequence ############# +############################################################## +print('Lasso') +out_lasso = boot_stab(num_boot = 100, method = 'lasso', lambda.grid = NULL, + dat_file = '../../BMI/BMI_Lin_2014.RData') + +save(out_lasso, file=paste0(dir, '/BMI_lasso.RData', sep='')) + + +# ############################################################## +# ## Elastic Net with self defined lambda (NULL not allowed) ############# +# ############################################################## +print('Elnet') +out_elnet = boot_stab(num_boot = 100, method = 'elnet', + dat_file = '../../BMI/BMI_Lin_2014.RData') + +save(out_elnet, file=paste0(dir, '/BMI_elnet.RData', sep='')) + + +# ############################################################## +# ## Random Forest with Altman feature selection ############# +# ############################################################## +print('RF') +out_rf = boot_stab(num_boot = 100, method = 'RF', method.perm='altmann', + dat_file = '../../BMI/BMI_Lin_2014.RData') + +save(out_rf, file=paste0(dir, '/BMI_rf.RData', sep='')) + + +############################################################# +# Random Forest with Janitza feature selection ############# +############################################################# +print("RF_JNT") +dir = '../data_application' +out_rf_jnt= boot_stab(num_boot = 100, method = 'RF', method.perm='janitza', + dat_file = '../data_application/BMI_Lin_2014.RData') + +save(out_rf_jnt, file=paste0(dir, '/BMI_rf_jnt.RData', sep='')) + + +######################################################################## +############### double bootstrap: random forest ################## +# ###################################################################### +print('double boot RF') +boot_rf = boot_stab_data(num_boot=100, method = 'RF', + data_file='../data_application/BMI_Lin_2014.RData') +save(boot_rf, file=paste0(dir, '/BMI_boot_rf.RData')) + +######################################################################## +############### double bootstrap: compositional lasso ################## +# ###################################################################### +print('double boot compLasso') +boot_compLasso = boot_stab_data(num_boot=100, method = 'compLasso', + data_file='../data_application/BMI_Lin_2014.RData') +save(boot_compLasso, file=paste0(dir, '/BMI_boot_compLasso.RData')) + + + + + + diff --git a/data_application/code_applications/code_cts/run_data_applications.sh b/data_application/code_applications/code_cts/run_data_applications.sh new file mode 100755 index 0000000..e578605 --- /dev/null +++ b/data_application/code_applications/code_cts/run_data_applications.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +#PBS -N data_applications +#PBS -l walltime=50:00:00 +#PBS -l nodes=1:ppn=8 +#PBS -l mem=10gb +#PBS -V +#PBS -j oe +#PBS -d . + +set -e +cpus=$PBS_NUM_PPN + +export TMPDIR=/panfs/panfs1.ucsd.edu/panscratch/$USER/Stability_2020 +[ ! -d $TMPDIR ] && mkdir $TMPDIR +export TMPDIR=$TMPDIR/data_applications +[ ! -d $TMPDIR ] && mkdir $TMPDIR +#tmp=$(mktemp -d --tmpdir) +#export TMPDIR=$tmp +#trap "rm -r $tmp; unset TMPDIR" EXIT + +# do something +source activate r-c-env +Rscript BMI_stab_application.R $TMPDIR +Rscript 88soils_stab_application.R $TMPDIR +source deactivate r-c-env + +#mv $tmp/outdir ./outdir diff --git a/data_application/notebooks_application/.DS_Store b/data_application/notebooks_application/.DS_Store deleted file mode 100755 index 5008ddf..0000000 Binary files a/data_application/notebooks_application/.DS_Store and /dev/null differ diff --git a/data_application/notebooks_application/.ipynb_checkpoints/1.1. BMI_DataPreparation-checkpoint.ipynb b/data_application/notebooks_application/.ipynb_checkpoints/1.1. BMI_DataPreparation-checkpoint.ipynb new file mode 100755 index 0000000..2a6fe2d --- /dev/null +++ b/data_application/notebooks_application/.ipynb_checkpoints/1.1. BMI_DataPreparation-checkpoint.ipynb @@ -0,0 +1,875 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### BMI dataset in Lin et al, 2014 \n", + "##### use unrarifed count table and retain microbes only at genus level (+ present at least one sample)\n", + "#### add 0.5 as pseudo count to zero counts" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 98
  2. \n", + "\t
  3. 263
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 98\n", + "\\item 263\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 98\n", + "2. 263\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 98 263" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
Bacteria.ActinobacteriaBacteria.BacteroidetesBacteria.CyanobacteriaBacteria.FirmicutesBacteria.FusobacteriaBacteria.LentisphaeraeBacteria.OD1Bacteria.ProteobacteriaBacteria.SpirochaetesBacteria.Synergistetes...Bacteria.Proteobacteria.Gammaproteobacteria.Pseudomonadales.Moraxellaceae.EnhydrobacterBacteria.Proteobacteria.Gammaproteobacteria.Pseudomonadales.Pseudomonadaceae.PseudomonasBacteria.Proteobacteria.Gammaproteobacteria.Vibrionales.Vibrionaceae.VibrioBacteria.Proteobacteria.Gammaproteobacteria.Xanthomonadales.Xanthomonadaceae.LysobacterBacteria.Proteobacteria.Gammaproteobacteria.Xanthomonadales.Xanthomonadaceae.StenotrophomonasBacteria.Spirochaetes.Spirochaetes.Spirochaetales.Brachyspiraceae.BrachyspiraBacteria.Spirochaetes.Spirochaetes.Spirochaetales.Spirochaetaceae.TreponemaBacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.CloacibacillusBacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.PyramidobacterBacteria.Verrucomicrobia.Verrucomicrobiae.Verrucomicrobiales.Verrucomicrobiaceae.Akkermansia
30011 50670 41530 0 0 534 0 0 ... 0 0 0 0 0 0 0 0 0 0
30030 46590 21770 0 0 105 0 0 ... 0 0 0 0 0 0 0 0 0 0
30040 43420 30080 2 0 134 0 0 ... 0 0 0 0 0 0 0 0 0 0
30068 29100 41470 0 0 459 0 0 ... 0 0 0 0 0 0 0 0 0 0
30075 56300 47050 0 0 214 0 0 ... 0 0 0 0 0 0 0 0 0 0
30085 18680 16190 0 0 17 0 0 ... 0 0 0 0 0 0 0 0 0 0
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll}\n", + " & Bacteria.Actinobacteria & Bacteria.Bacteroidetes & Bacteria.Cyanobacteria & Bacteria.Firmicutes & Bacteria.Fusobacteria & Bacteria.Lentisphaerae & Bacteria.OD1 & Bacteria.Proteobacteria & Bacteria.Spirochaetes & Bacteria.Synergistetes & ... & Bacteria.Proteobacteria.Gammaproteobacteria.Pseudomonadales.Moraxellaceae.Enhydrobacter & Bacteria.Proteobacteria.Gammaproteobacteria.Pseudomonadales.Pseudomonadaceae.Pseudomonas & Bacteria.Proteobacteria.Gammaproteobacteria.Vibrionales.Vibrionaceae.Vibrio & Bacteria.Proteobacteria.Gammaproteobacteria.Xanthomonadales.Xanthomonadaceae.Lysobacter & Bacteria.Proteobacteria.Gammaproteobacteria.Xanthomonadales.Xanthomonadaceae.Stenotrophomonas & Bacteria.Spirochaetes.Spirochaetes.Spirochaetales.Brachyspiraceae.Brachyspira & Bacteria.Spirochaetes.Spirochaetes.Spirochaetales.Spirochaetaceae.Treponema & Bacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.Cloacibacillus & Bacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.Pyramidobacter & Bacteria.Verrucomicrobia.Verrucomicrobiae.Verrucomicrobiales.Verrucomicrobiaceae.Akkermansia\\\\\n", + "\\hline\n", + "\t3001 & 1 & 5067 & 0 & 4153 & 0 & 0 & 0 & 534 & 0 & 0 & ... & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\\\\n", + "\t3003 & 0 & 4659 & 0 & 2177 & 0 & 0 & 0 & 105 & 0 & 0 & ... & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\\\\n", + "\t3004 & 0 & 4342 & 0 & 3008 & 0 & 2 & 0 & 134 & 0 & 0 & ... & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\\\\n", + "\t3006 & 8 & 2910 & 0 & 4147 & 0 & 0 & 0 & 459 & 0 & 0 & ... & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\\\\n", + "\t3007 & 5 & 5630 & 0 & 4705 & 0 & 0 & 0 & 214 & 0 & 0 & ... & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\\\\n", + "\t3008 & 5 & 1868 & 0 & 1619 & 0 & 0 & 0 & 17 & 0 & 0 & ... & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | Bacteria.Actinobacteria | Bacteria.Bacteroidetes | Bacteria.Cyanobacteria | Bacteria.Firmicutes | Bacteria.Fusobacteria | Bacteria.Lentisphaerae | Bacteria.OD1 | Bacteria.Proteobacteria | Bacteria.Spirochaetes | Bacteria.Synergistetes | ... | Bacteria.Proteobacteria.Gammaproteobacteria.Pseudomonadales.Moraxellaceae.Enhydrobacter | Bacteria.Proteobacteria.Gammaproteobacteria.Pseudomonadales.Pseudomonadaceae.Pseudomonas | Bacteria.Proteobacteria.Gammaproteobacteria.Vibrionales.Vibrionaceae.Vibrio | Bacteria.Proteobacteria.Gammaproteobacteria.Xanthomonadales.Xanthomonadaceae.Lysobacter | Bacteria.Proteobacteria.Gammaproteobacteria.Xanthomonadales.Xanthomonadaceae.Stenotrophomonas | Bacteria.Spirochaetes.Spirochaetes.Spirochaetales.Brachyspiraceae.Brachyspira | Bacteria.Spirochaetes.Spirochaetes.Spirochaetales.Spirochaetaceae.Treponema | Bacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.Cloacibacillus | Bacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.Pyramidobacter | Bacteria.Verrucomicrobia.Verrucomicrobiae.Verrucomicrobiales.Verrucomicrobiaceae.Akkermansia |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 3001 | 1 | 5067 | 0 | 4153 | 0 | 0 | 0 | 534 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "| 3003 | 0 | 4659 | 0 | 2177 | 0 | 0 | 0 | 105 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "| 3004 | 0 | 4342 | 0 | 3008 | 0 | 2 | 0 | 134 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "| 3006 | 8 | 2910 | 0 | 4147 | 0 | 0 | 0 | 459 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "| 3007 | 5 | 5630 | 0 | 4705 | 0 | 0 | 0 | 214 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "| 3008 | 5 | 1868 | 0 | 1619 | 0 | 0 | 0 | 17 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "\n" + ], + "text/plain": [ + " Bacteria.Actinobacteria Bacteria.Bacteroidetes Bacteria.Cyanobacteria\n", + "3001 1 5067 0 \n", + "3003 0 4659 0 \n", + "3004 0 4342 0 \n", + "3006 8 2910 0 \n", + "3007 5 5630 0 \n", + "3008 5 1868 0 \n", + " Bacteria.Firmicutes Bacteria.Fusobacteria Bacteria.Lentisphaerae\n", + "3001 4153 0 0 \n", + "3003 2177 0 0 \n", + "3004 3008 0 2 \n", + "3006 4147 0 0 \n", + "3007 4705 0 0 \n", + "3008 1619 0 0 \n", + " Bacteria.OD1 Bacteria.Proteobacteria Bacteria.Spirochaetes\n", + "3001 0 534 0 \n", + "3003 0 105 0 \n", + "3004 0 134 0 \n", + "3006 0 459 0 \n", + "3007 0 214 0 \n", + "3008 0 17 0 \n", + " Bacteria.Synergistetes ...\n", + "3001 0 ...\n", + "3003 0 ...\n", + "3004 0 ...\n", + "3006 0 ...\n", + "3007 0 ...\n", + "3008 0 ...\n", + " Bacteria.Proteobacteria.Gammaproteobacteria.Pseudomonadales.Moraxellaceae.Enhydrobacter\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Proteobacteria.Gammaproteobacteria.Pseudomonadales.Pseudomonadaceae.Pseudomonas\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Proteobacteria.Gammaproteobacteria.Vibrionales.Vibrionaceae.Vibrio\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Proteobacteria.Gammaproteobacteria.Xanthomonadales.Xanthomonadaceae.Lysobacter\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Proteobacteria.Gammaproteobacteria.Xanthomonadales.Xanthomonadaceae.Stenotrophomonas\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Spirochaetes.Spirochaetes.Spirochaetales.Brachyspiraceae.Brachyspira\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Spirochaetes.Spirochaetes.Spirochaetales.Spirochaetaceae.Treponema\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.Cloacibacillus\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.Pyramidobacter\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Verrucomicrobia.Verrucomicrobiae.Verrucomicrobiales.Verrucomicrobiaceae.Akkermansia\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# unrarefied microbe count table\n", + "count <- as.matrix(read.table(\"../../code_Lin/cvs/data/combo_count_tab.txt\")) \n", + "dim(count)\n", + "head(count)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 98
  2. \n", + "\t
  3. 87
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 98\n", + "\\item 87\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 98\n", + "2. 87\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 98 87" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.AsaccharobacterBacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.AtopobiumBacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.CollinsellaBacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.EggerthellaBacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.GordonibacterBacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.OlsenellaBacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.SlackiaBacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Bacteroidaceae.BacteroidesBacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Porphyromonadaceae.BarnesiellaBacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Porphyromonadaceae.Butyricimonas...Bacteria.Proteobacteria.Betaproteobacteria.Burkholderiales.Oxalobacteraceae.OxalobacterBacteria.Proteobacteria.Betaproteobacteria.Neisseriales.Neisseriaceae.NeisseriaBacteria.Proteobacteria.Deltaproteobacteria.Desulfovibrionales.Desulfovibrionaceae.DesulfovibrioBacteria.Proteobacteria.Epsilonproteobacteria.Campylobacterales.Campylobacteraceae.CampylobacterBacteria.Proteobacteria.Gammaproteobacteria.Aeromonadales.Succinivibrionaceae.SuccinivibrioBacteria.Proteobacteria.Gammaproteobacteria.Pseudomonadales.Pseudomonadaceae.PseudomonasBacteria.Proteobacteria.Gammaproteobacteria.Xanthomonadales.Xanthomonadaceae.StenotrophomonasBacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.CloacibacillusBacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.PyramidobacterBacteria.Verrucomicrobia.Verrucomicrobiae.Verrucomicrobiales.Verrucomicrobiaceae.Akkermansia
30010 0 0 0 0 0 0 2878 0 69 ... 0 0 0 0 0 0 0 0 0 0
30030 0 0 0 0 0 0 578180 0 ... 2 0 0 1 0 0 0 0 0 0
30040 0 0 0 0 0 0 3503143 0 ... 0 0 0 0 0 0 0 0 0 0
30060 0 0 0 0 0 0 2162 1 0 ... 3 0 0 0 0 0 0 0 0 0
30070 0 0 2 0 0 0 4453 0 0 ... 9 0 0 1 0 0 0 0 0 0
30080 0 0 1 0 0 0 950237 19 ... 4 0 0 0 0 0 0 0 0 0
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll}\n", + " & Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Asaccharobacter & Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Atopobium & Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Collinsella & Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Eggerthella & Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Gordonibacter & Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Olsenella & Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Slackia & Bacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Bacteroidaceae.Bacteroides & Bacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Porphyromonadaceae.Barnesiella & Bacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Porphyromonadaceae.Butyricimonas & ... & Bacteria.Proteobacteria.Betaproteobacteria.Burkholderiales.Oxalobacteraceae.Oxalobacter & Bacteria.Proteobacteria.Betaproteobacteria.Neisseriales.Neisseriaceae.Neisseria & Bacteria.Proteobacteria.Deltaproteobacteria.Desulfovibrionales.Desulfovibrionaceae.Desulfovibrio & Bacteria.Proteobacteria.Epsilonproteobacteria.Campylobacterales.Campylobacteraceae.Campylobacter & Bacteria.Proteobacteria.Gammaproteobacteria.Aeromonadales.Succinivibrionaceae.Succinivibrio & Bacteria.Proteobacteria.Gammaproteobacteria.Pseudomonadales.Pseudomonadaceae.Pseudomonas & Bacteria.Proteobacteria.Gammaproteobacteria.Xanthomonadales.Xanthomonadaceae.Stenotrophomonas & Bacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.Cloacibacillus & Bacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.Pyramidobacter & Bacteria.Verrucomicrobia.Verrucomicrobiae.Verrucomicrobiales.Verrucomicrobiaceae.Akkermansia\\\\\n", + "\\hline\n", + "\t3001 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 2878 & 0 & 69 & ... & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\\\\n", + "\t3003 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 578 & 180 & 0 & ... & 2 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\\\\n", + "\t3004 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 3503 & 143 & 0 & ... & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\\\\n", + "\t3006 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 2162 & 1 & 0 & ... & 3 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\\\\n", + "\t3007 & 0 & 0 & 0 & 2 & 0 & 0 & 0 & 4453 & 0 & 0 & ... & 9 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\\\\n", + "\t3008 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 950 & 237 & 19 & ... & 4 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Asaccharobacter | Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Atopobium | Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Collinsella | Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Eggerthella | Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Gordonibacter | Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Olsenella | Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Slackia | Bacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Bacteroidaceae.Bacteroides | Bacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Porphyromonadaceae.Barnesiella | Bacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Porphyromonadaceae.Butyricimonas | ... | Bacteria.Proteobacteria.Betaproteobacteria.Burkholderiales.Oxalobacteraceae.Oxalobacter | Bacteria.Proteobacteria.Betaproteobacteria.Neisseriales.Neisseriaceae.Neisseria | Bacteria.Proteobacteria.Deltaproteobacteria.Desulfovibrionales.Desulfovibrionaceae.Desulfovibrio | Bacteria.Proteobacteria.Epsilonproteobacteria.Campylobacterales.Campylobacteraceae.Campylobacter | Bacteria.Proteobacteria.Gammaproteobacteria.Aeromonadales.Succinivibrionaceae.Succinivibrio | Bacteria.Proteobacteria.Gammaproteobacteria.Pseudomonadales.Pseudomonadaceae.Pseudomonas | Bacteria.Proteobacteria.Gammaproteobacteria.Xanthomonadales.Xanthomonadaceae.Stenotrophomonas | Bacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.Cloacibacillus | Bacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.Pyramidobacter | Bacteria.Verrucomicrobia.Verrucomicrobiae.Verrucomicrobiales.Verrucomicrobiaceae.Akkermansia |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 3001 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2878 | 0 | 69 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "| 3003 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 578 | 180 | 0 | ... | 2 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "| 3004 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 3503 | 143 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "| 3006 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2162 | 1 | 0 | ... | 3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "| 3007 | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 4453 | 0 | 0 | ... | 9 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "| 3008 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 950 | 237 | 19 | ... | 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "\n" + ], + "text/plain": [ + " Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Asaccharobacter\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Atopobium\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Collinsella\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Eggerthella\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 2 \n", + "3008 1 \n", + " Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Gordonibacter\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Olsenella\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Slackia\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Bacteroidaceae.Bacteroides\n", + "3001 2878 \n", + "3003 578 \n", + "3004 3503 \n", + "3006 2162 \n", + "3007 4453 \n", + "3008 950 \n", + " Bacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Porphyromonadaceae.Barnesiella\n", + "3001 0 \n", + "3003 180 \n", + "3004 143 \n", + "3006 1 \n", + "3007 0 \n", + "3008 237 \n", + " Bacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Porphyromonadaceae.Butyricimonas\n", + "3001 69 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 19 \n", + " ...\n", + "3001 ...\n", + "3003 ...\n", + "3004 ...\n", + "3006 ...\n", + "3007 ...\n", + "3008 ...\n", + " Bacteria.Proteobacteria.Betaproteobacteria.Burkholderiales.Oxalobacteraceae.Oxalobacter\n", + "3001 0 \n", + "3003 2 \n", + "3004 0 \n", + "3006 3 \n", + "3007 9 \n", + "3008 4 \n", + " Bacteria.Proteobacteria.Betaproteobacteria.Neisseriales.Neisseriaceae.Neisseria\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Proteobacteria.Deltaproteobacteria.Desulfovibrionales.Desulfovibrionaceae.Desulfovibrio\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Proteobacteria.Epsilonproteobacteria.Campylobacterales.Campylobacteraceae.Campylobacter\n", + "3001 0 \n", + "3003 1 \n", + "3004 0 \n", + "3006 0 \n", + "3007 1 \n", + "3008 0 \n", + " Bacteria.Proteobacteria.Gammaproteobacteria.Aeromonadales.Succinivibrionaceae.Succinivibrio\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Proteobacteria.Gammaproteobacteria.Pseudomonadales.Pseudomonadaceae.Pseudomonas\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Proteobacteria.Gammaproteobacteria.Xanthomonadales.Xanthomonadaceae.Stenotrophomonas\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.Cloacibacillus\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.Pyramidobacter\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Verrucomicrobia.Verrucomicrobiae.Verrucomicrobiales.Verrucomicrobiaceae.Akkermansia\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# retain only microbes at genus level and exist at least one sample\n", + "depth <- sapply(strsplit(colnames(count), \"\\\\.\"), length)\n", + "x <- count[, depth == 6 & colSums(count != 0) >= 1] # 98 * 87\n", + "dim(x)\n", + "head(x)" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 98
  2. \n", + "\t
  3. 87
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 98\n", + "\\item 87\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 98\n", + "2. 87\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 98 87" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.AsaccharobacterBacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.AtopobiumBacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.CollinsellaBacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.EggerthellaBacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.GordonibacterBacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.OlsenellaBacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.SlackiaBacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Bacteroidaceae.BacteroidesBacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Porphyromonadaceae.BarnesiellaBacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Porphyromonadaceae.Butyricimonas...Bacteria.Proteobacteria.Betaproteobacteria.Burkholderiales.Oxalobacteraceae.OxalobacterBacteria.Proteobacteria.Betaproteobacteria.Neisseriales.Neisseriaceae.NeisseriaBacteria.Proteobacteria.Deltaproteobacteria.Desulfovibrionales.Desulfovibrionaceae.DesulfovibrioBacteria.Proteobacteria.Epsilonproteobacteria.Campylobacterales.Campylobacteraceae.CampylobacterBacteria.Proteobacteria.Gammaproteobacteria.Aeromonadales.Succinivibrionaceae.SuccinivibrioBacteria.Proteobacteria.Gammaproteobacteria.Pseudomonadales.Pseudomonadaceae.PseudomonasBacteria.Proteobacteria.Gammaproteobacteria.Xanthomonadales.Xanthomonadaceae.StenotrophomonasBacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.CloacibacillusBacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.PyramidobacterBacteria.Verrucomicrobia.Verrucomicrobiae.Verrucomicrobiales.Verrucomicrobiaceae.Akkermansia
3001-9.500918 -9.500918 -9.500918 -9.500918 -9.500918 -9.500918 -9.500918 -0.8429202-9.500918 -4.573665 ... -9.500918 -9.500918 -9.500918 -9.500918 -9.500918 -9.500918 -9.500918 -9.500918 -9.500918 -9.500918
3003-9.278560 -9.278560 -9.278560 -9.278560 -9.278560 -9.278560 -9.278560 -2.2258386-3.392456 -9.278560 ... -7.892265 -9.278560 -9.278560 -8.585412 -9.278560 -9.278560 -9.278560 -9.278560 -9.278560 -9.278560
3004-9.269646 -9.269646 -9.269646 -9.269646 -9.269646 -9.269646 -9.269646 -0.4151243-3.613655 -9.269646 ... -9.269646 -9.269646 -9.269646 -9.269646 -9.269646 -9.269646 -9.269646 -9.269646 -9.269646 -9.269646
3006-9.114600 -9.114600 -9.114600 -9.114600 -9.114600 -9.114600 -9.114600 -0.7426639-8.421453 -9.114600 ... -7.322841 -9.114600 -9.114600 -9.114600 -9.114600 -9.114600 -9.114600 -9.114600 -9.114600 -9.114600
3007-9.643356 -9.643356 -9.643356 -8.257061 -9.643356 -9.643356 -9.643356 -0.5488753-9.643356 -9.643356 ... -6.752984 -9.643356 -9.643356 -8.950209 -9.643356 -9.643356 -9.643356 -9.643356 -9.643356 -9.643356
3008-8.387085 -8.387085 -8.387085 -7.693937 -8.387085 -8.387085 -8.387085 -0.8374753-2.225877 -4.749498 ... -6.307643 -8.387085 -8.387085 -8.387085 -8.387085 -8.387085 -8.387085 -8.387085 -8.387085 -8.387085
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll}\n", + " & Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Asaccharobacter & Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Atopobium & Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Collinsella & Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Eggerthella & Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Gordonibacter & Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Olsenella & Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Slackia & Bacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Bacteroidaceae.Bacteroides & Bacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Porphyromonadaceae.Barnesiella & Bacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Porphyromonadaceae.Butyricimonas & ... & Bacteria.Proteobacteria.Betaproteobacteria.Burkholderiales.Oxalobacteraceae.Oxalobacter & Bacteria.Proteobacteria.Betaproteobacteria.Neisseriales.Neisseriaceae.Neisseria & Bacteria.Proteobacteria.Deltaproteobacteria.Desulfovibrionales.Desulfovibrionaceae.Desulfovibrio & Bacteria.Proteobacteria.Epsilonproteobacteria.Campylobacterales.Campylobacteraceae.Campylobacter & Bacteria.Proteobacteria.Gammaproteobacteria.Aeromonadales.Succinivibrionaceae.Succinivibrio & Bacteria.Proteobacteria.Gammaproteobacteria.Pseudomonadales.Pseudomonadaceae.Pseudomonas & Bacteria.Proteobacteria.Gammaproteobacteria.Xanthomonadales.Xanthomonadaceae.Stenotrophomonas & Bacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.Cloacibacillus & Bacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.Pyramidobacter & Bacteria.Verrucomicrobia.Verrucomicrobiae.Verrucomicrobiales.Verrucomicrobiaceae.Akkermansia\\\\\n", + "\\hline\n", + "\t3001 & -9.500918 & -9.500918 & -9.500918 & -9.500918 & -9.500918 & -9.500918 & -9.500918 & -0.8429202 & -9.500918 & -4.573665 & ... & -9.500918 & -9.500918 & -9.500918 & -9.500918 & -9.500918 & -9.500918 & -9.500918 & -9.500918 & -9.500918 & -9.500918 \\\\\n", + "\t3003 & -9.278560 & -9.278560 & -9.278560 & -9.278560 & -9.278560 & -9.278560 & -9.278560 & -2.2258386 & -3.392456 & -9.278560 & ... & -7.892265 & -9.278560 & -9.278560 & -8.585412 & -9.278560 & -9.278560 & -9.278560 & -9.278560 & -9.278560 & -9.278560 \\\\\n", + "\t3004 & -9.269646 & -9.269646 & -9.269646 & -9.269646 & -9.269646 & -9.269646 & -9.269646 & -0.4151243 & -3.613655 & -9.269646 & ... & -9.269646 & -9.269646 & -9.269646 & -9.269646 & -9.269646 & -9.269646 & -9.269646 & -9.269646 & -9.269646 & -9.269646 \\\\\n", + "\t3006 & -9.114600 & -9.114600 & -9.114600 & -9.114600 & -9.114600 & -9.114600 & -9.114600 & -0.7426639 & -8.421453 & -9.114600 & ... & -7.322841 & -9.114600 & -9.114600 & -9.114600 & -9.114600 & -9.114600 & -9.114600 & -9.114600 & -9.114600 & -9.114600 \\\\\n", + "\t3007 & -9.643356 & -9.643356 & -9.643356 & -8.257061 & -9.643356 & -9.643356 & -9.643356 & -0.5488753 & -9.643356 & -9.643356 & ... & -6.752984 & -9.643356 & -9.643356 & -8.950209 & -9.643356 & -9.643356 & -9.643356 & -9.643356 & -9.643356 & -9.643356 \\\\\n", + "\t3008 & -8.387085 & -8.387085 & -8.387085 & -7.693937 & -8.387085 & -8.387085 & -8.387085 & -0.8374753 & -2.225877 & -4.749498 & ... & -6.307643 & -8.387085 & -8.387085 & -8.387085 & -8.387085 & -8.387085 & -8.387085 & -8.387085 & -8.387085 & -8.387085 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Asaccharobacter | Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Atopobium | Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Collinsella | Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Eggerthella | Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Gordonibacter | Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Olsenella | Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Slackia | Bacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Bacteroidaceae.Bacteroides | Bacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Porphyromonadaceae.Barnesiella | Bacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Porphyromonadaceae.Butyricimonas | ... | Bacteria.Proteobacteria.Betaproteobacteria.Burkholderiales.Oxalobacteraceae.Oxalobacter | Bacteria.Proteobacteria.Betaproteobacteria.Neisseriales.Neisseriaceae.Neisseria | Bacteria.Proteobacteria.Deltaproteobacteria.Desulfovibrionales.Desulfovibrionaceae.Desulfovibrio | Bacteria.Proteobacteria.Epsilonproteobacteria.Campylobacterales.Campylobacteraceae.Campylobacter | Bacteria.Proteobacteria.Gammaproteobacteria.Aeromonadales.Succinivibrionaceae.Succinivibrio | Bacteria.Proteobacteria.Gammaproteobacteria.Pseudomonadales.Pseudomonadaceae.Pseudomonas | Bacteria.Proteobacteria.Gammaproteobacteria.Xanthomonadales.Xanthomonadaceae.Stenotrophomonas | Bacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.Cloacibacillus | Bacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.Pyramidobacter | Bacteria.Verrucomicrobia.Verrucomicrobiae.Verrucomicrobiales.Verrucomicrobiaceae.Akkermansia |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 3001 | -9.500918 | -9.500918 | -9.500918 | -9.500918 | -9.500918 | -9.500918 | -9.500918 | -0.8429202 | -9.500918 | -4.573665 | ... | -9.500918 | -9.500918 | -9.500918 | -9.500918 | -9.500918 | -9.500918 | -9.500918 | -9.500918 | -9.500918 | -9.500918 |\n", + "| 3003 | -9.278560 | -9.278560 | -9.278560 | -9.278560 | -9.278560 | -9.278560 | -9.278560 | -2.2258386 | -3.392456 | -9.278560 | ... | -7.892265 | -9.278560 | -9.278560 | -8.585412 | -9.278560 | -9.278560 | -9.278560 | -9.278560 | -9.278560 | -9.278560 |\n", + "| 3004 | -9.269646 | -9.269646 | -9.269646 | -9.269646 | -9.269646 | -9.269646 | -9.269646 | -0.4151243 | -3.613655 | -9.269646 | ... | -9.269646 | -9.269646 | -9.269646 | -9.269646 | -9.269646 | -9.269646 | -9.269646 | -9.269646 | -9.269646 | -9.269646 |\n", + "| 3006 | -9.114600 | -9.114600 | -9.114600 | -9.114600 | -9.114600 | -9.114600 | -9.114600 | -0.7426639 | -8.421453 | -9.114600 | ... | -7.322841 | -9.114600 | -9.114600 | -9.114600 | -9.114600 | -9.114600 | -9.114600 | -9.114600 | -9.114600 | -9.114600 |\n", + "| 3007 | -9.643356 | -9.643356 | -9.643356 | -8.257061 | -9.643356 | -9.643356 | -9.643356 | -0.5488753 | -9.643356 | -9.643356 | ... | -6.752984 | -9.643356 | -9.643356 | -8.950209 | -9.643356 | -9.643356 | -9.643356 | -9.643356 | -9.643356 | -9.643356 |\n", + "| 3008 | -8.387085 | -8.387085 | -8.387085 | -7.693937 | -8.387085 | -8.387085 | -8.387085 | -0.8374753 | -2.225877 | -4.749498 | ... | -6.307643 | -8.387085 | -8.387085 | -8.387085 | -8.387085 | -8.387085 | -8.387085 | -8.387085 | -8.387085 | -8.387085 |\n", + "\n" + ], + "text/plain": [ + " Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Asaccharobacter\n", + "3001 -9.500918 \n", + "3003 -9.278560 \n", + "3004 -9.269646 \n", + "3006 -9.114600 \n", + "3007 -9.643356 \n", + "3008 -8.387085 \n", + " Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Atopobium\n", + "3001 -9.500918 \n", + "3003 -9.278560 \n", + "3004 -9.269646 \n", + "3006 -9.114600 \n", + "3007 -9.643356 \n", + "3008 -8.387085 \n", + " Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Collinsella\n", + "3001 -9.500918 \n", + "3003 -9.278560 \n", + "3004 -9.269646 \n", + "3006 -9.114600 \n", + "3007 -9.643356 \n", + "3008 -8.387085 \n", + " Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Eggerthella\n", + "3001 -9.500918 \n", + "3003 -9.278560 \n", + "3004 -9.269646 \n", + "3006 -9.114600 \n", + "3007 -8.257061 \n", + "3008 -7.693937 \n", + " Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Gordonibacter\n", + "3001 -9.500918 \n", + "3003 -9.278560 \n", + "3004 -9.269646 \n", + "3006 -9.114600 \n", + "3007 -9.643356 \n", + "3008 -8.387085 \n", + " Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Olsenella\n", + "3001 -9.500918 \n", + "3003 -9.278560 \n", + "3004 -9.269646 \n", + "3006 -9.114600 \n", + "3007 -9.643356 \n", + "3008 -8.387085 \n", + " Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Slackia\n", + "3001 -9.500918 \n", + "3003 -9.278560 \n", + "3004 -9.269646 \n", + "3006 -9.114600 \n", + "3007 -9.643356 \n", + "3008 -8.387085 \n", + " Bacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Bacteroidaceae.Bacteroides\n", + "3001 -0.8429202 \n", + "3003 -2.2258386 \n", + "3004 -0.4151243 \n", + "3006 -0.7426639 \n", + "3007 -0.5488753 \n", + "3008 -0.8374753 \n", + " Bacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Porphyromonadaceae.Barnesiella\n", + "3001 -9.500918 \n", + "3003 -3.392456 \n", + "3004 -3.613655 \n", + "3006 -8.421453 \n", + "3007 -9.643356 \n", + "3008 -2.225877 \n", + " Bacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Porphyromonadaceae.Butyricimonas\n", + "3001 -4.573665 \n", + "3003 -9.278560 \n", + "3004 -9.269646 \n", + "3006 -9.114600 \n", + "3007 -9.643356 \n", + "3008 -4.749498 \n", + " ...\n", + "3001 ...\n", + "3003 ...\n", + "3004 ...\n", + "3006 ...\n", + "3007 ...\n", + "3008 ...\n", + " Bacteria.Proteobacteria.Betaproteobacteria.Burkholderiales.Oxalobacteraceae.Oxalobacter\n", + "3001 -9.500918 \n", + "3003 -7.892265 \n", + "3004 -9.269646 \n", + "3006 -7.322841 \n", + "3007 -6.752984 \n", + "3008 -6.307643 \n", + " Bacteria.Proteobacteria.Betaproteobacteria.Neisseriales.Neisseriaceae.Neisseria\n", + "3001 -9.500918 \n", + "3003 -9.278560 \n", + "3004 -9.269646 \n", + "3006 -9.114600 \n", + "3007 -9.643356 \n", + "3008 -8.387085 \n", + " Bacteria.Proteobacteria.Deltaproteobacteria.Desulfovibrionales.Desulfovibrionaceae.Desulfovibrio\n", + "3001 -9.500918 \n", + "3003 -9.278560 \n", + "3004 -9.269646 \n", + "3006 -9.114600 \n", + "3007 -9.643356 \n", + "3008 -8.387085 \n", + " Bacteria.Proteobacteria.Epsilonproteobacteria.Campylobacterales.Campylobacteraceae.Campylobacter\n", + "3001 -9.500918 \n", + "3003 -8.585412 \n", + "3004 -9.269646 \n", + "3006 -9.114600 \n", + "3007 -8.950209 \n", + "3008 -8.387085 \n", + " Bacteria.Proteobacteria.Gammaproteobacteria.Aeromonadales.Succinivibrionaceae.Succinivibrio\n", + "3001 -9.500918 \n", + "3003 -9.278560 \n", + "3004 -9.269646 \n", + "3006 -9.114600 \n", + "3007 -9.643356 \n", + "3008 -8.387085 \n", + " Bacteria.Proteobacteria.Gammaproteobacteria.Pseudomonadales.Pseudomonadaceae.Pseudomonas\n", + "3001 -9.500918 \n", + "3003 -9.278560 \n", + "3004 -9.269646 \n", + "3006 -9.114600 \n", + "3007 -9.643356 \n", + "3008 -8.387085 \n", + " Bacteria.Proteobacteria.Gammaproteobacteria.Xanthomonadales.Xanthomonadaceae.Stenotrophomonas\n", + "3001 -9.500918 \n", + "3003 -9.278560 \n", + "3004 -9.269646 \n", + "3006 -9.114600 \n", + "3007 -9.643356 \n", + "3008 -8.387085 \n", + " Bacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.Cloacibacillus\n", + "3001 -9.500918 \n", + "3003 -9.278560 \n", + "3004 -9.269646 \n", + "3006 -9.114600 \n", + "3007 -9.643356 \n", + "3008 -8.387085 \n", + " Bacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.Pyramidobacter\n", + "3001 -9.500918 \n", + "3003 -9.278560 \n", + "3004 -9.269646 \n", + "3006 -9.114600 \n", + "3007 -9.643356 \n", + "3008 -8.387085 \n", + " Bacteria.Verrucomicrobia.Verrucomicrobiae.Verrucomicrobiales.Verrucomicrobiaceae.Akkermansia\n", + "3001 -9.500918 \n", + "3003 -9.278560 \n", + "3004 -9.269646 \n", + "3006 -9.114600 \n", + "3007 -9.643356 \n", + "3008 -8.387085 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# add pesudo count 0.5\n", + "x[x == 0] <- 0.5\n", + "x <- x/rowSums(x) # relative abundance\n", + "taxa <- log(x)\n", + "dim(taxa)\n", + "head(taxa)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
pidvisitdatebirthdatesex1m2fheightcmweightkgvdatebdateageheightmbmizbmiuszbmicatusbmicat1norm2ow3ob
3029 12-Apr-101-May-86 1 172.43 83.0 18364 9617 23.94798 1.7243 27.91595 NA 2
3030 12-Apr-1022-May-871 178.87 70.3 18364 10003 22.89117 1.7887 21.97254 NA 1
3031 20-Apr-101-Dec-82 2 157.60 52.0 18372 8370 27.38398 1.5760 20.93586 NA 1
3032 22-Apr-109-Feb-86 1 188.10 89.6 18374 9536 24.19712 1.8810 25.32389 NA 2
3033 22-Apr-109-Apr-86 2 170.03 65.2 18374 9595 24.03559 1.7003 22.55259 NA 1
3034 28-Apr-106-Feb-86 2 162.16 59.9 18380 9533 24.22177 1.6216 22.77925 NA 1
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|llllllllllllll}\n", + " pid & visitdate & birthdate & sex1m2f & heightcm & weightkg & vdate & bdate & age & heightm & bmi & zbmius & zbmicatus & bmicat1norm2ow3ob\\\\\n", + "\\hline\n", + "\t 3029 & 12-Apr-10 & 1-May-86 & 1 & 172.43 & 83.0 & 18364 & 9617 & 23.94798 & 1.7243 & 27.91595 & NA & & 2 \\\\\n", + "\t 3030 & 12-Apr-10 & 22-May-87 & 1 & 178.87 & 70.3 & 18364 & 10003 & 22.89117 & 1.7887 & 21.97254 & NA & & 1 \\\\\n", + "\t 3031 & 20-Apr-10 & 1-Dec-82 & 2 & 157.60 & 52.0 & 18372 & 8370 & 27.38398 & 1.5760 & 20.93586 & NA & & 1 \\\\\n", + "\t 3032 & 22-Apr-10 & 9-Feb-86 & 1 & 188.10 & 89.6 & 18374 & 9536 & 24.19712 & 1.8810 & 25.32389 & NA & & 2 \\\\\n", + "\t 3033 & 22-Apr-10 & 9-Apr-86 & 2 & 170.03 & 65.2 & 18374 & 9595 & 24.03559 & 1.7003 & 22.55259 & NA & & 1 \\\\\n", + "\t 3034 & 28-Apr-10 & 6-Feb-86 & 2 & 162.16 & 59.9 & 18380 & 9533 & 24.22177 & 1.6216 & 22.77925 & NA & & 1 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| pid | visitdate | birthdate | sex1m2f | heightcm | weightkg | vdate | bdate | age | heightm | bmi | zbmius | zbmicatus | bmicat1norm2ow3ob |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 3029 | 12-Apr-10 | 1-May-86 | 1 | 172.43 | 83.0 | 18364 | 9617 | 23.94798 | 1.7243 | 27.91595 | NA | | 2 |\n", + "| 3030 | 12-Apr-10 | 22-May-87 | 1 | 178.87 | 70.3 | 18364 | 10003 | 22.89117 | 1.7887 | 21.97254 | NA | | 1 |\n", + "| 3031 | 20-Apr-10 | 1-Dec-82 | 2 | 157.60 | 52.0 | 18372 | 8370 | 27.38398 | 1.5760 | 20.93586 | NA | | 1 |\n", + "| 3032 | 22-Apr-10 | 9-Feb-86 | 1 | 188.10 | 89.6 | 18374 | 9536 | 24.19712 | 1.8810 | 25.32389 | NA | | 2 |\n", + "| 3033 | 22-Apr-10 | 9-Apr-86 | 2 | 170.03 | 65.2 | 18374 | 9595 | 24.03559 | 1.7003 | 22.55259 | NA | | 1 |\n", + "| 3034 | 28-Apr-10 | 6-Feb-86 | 2 | 162.16 | 59.9 | 18380 | 9533 | 24.22177 | 1.6216 | 22.77925 | NA | | 1 |\n", + "\n" + ], + "text/plain": [ + " pid visitdate birthdate sex1m2f heightcm weightkg vdate bdate age \n", + "1 3029 12-Apr-10 1-May-86 1 172.43 83.0 18364 9617 23.94798\n", + "2 3030 12-Apr-10 22-May-87 1 178.87 70.3 18364 10003 22.89117\n", + "3 3031 20-Apr-10 1-Dec-82 2 157.60 52.0 18372 8370 27.38398\n", + "4 3032 22-Apr-10 9-Feb-86 1 188.10 89.6 18374 9536 24.19712\n", + "5 3033 22-Apr-10 9-Apr-86 2 170.03 65.2 18374 9595 24.03559\n", + "6 3034 28-Apr-10 6-Feb-86 2 162.16 59.9 18380 9533 24.22177\n", + " heightm bmi zbmius zbmicatus bmicat1norm2ow3ob\n", + "1 1.7243 27.91595 NA 2 \n", + "2 1.7887 21.97254 NA 1 \n", + "3 1.5760 20.93586 NA 1 \n", + "4 1.8810 25.32389 NA 2 \n", + "5 1.7003 22.55259 NA 1 \n", + "6 1.6216 22.77925 NA 1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "98" + ], + "text/latex": [ + "98" + ], + "text/markdown": [ + "98" + ], + "text/plain": [ + "[1] 98" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 21.6186
  2. \n", + "\t
  3. 21.82244
  4. \n", + "\t
  5. 20.03762
  6. \n", + "\t
  7. 20.82412
  8. \n", + "\t
  9. 22.66875
  10. \n", + "\t
  11. 24.97552
  12. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 21.6186\n", + "\\item 21.82244\n", + "\\item 20.03762\n", + "\\item 20.82412\n", + "\\item 22.66875\n", + "\\item 24.97552\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 21.6186\n", + "2. 21.82244\n", + "3. 20.03762\n", + "4. 20.82412\n", + "5. 22.66875\n", + "6. 24.97552\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 21.61860 21.82244 20.03762 20.82412 22.66875 24.97552" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# metadata\n", + "demo <- read.delim(\"../../code_Lin/cvs/data/demographic.txt\")\n", + "head(demo)\n", + "y <- demo$bmi[match(rownames(count), demo$pid)]\n", + "length(y)\n", + "head(y)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "'matrix'" + ], + "text/latex": [ + "'matrix'" + ], + "text/markdown": [ + "'matrix'" + ], + "text/plain": [ + "[1] \"matrix\"" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "'numeric'" + ], + "text/latex": [ + "'numeric'" + ], + "text/markdown": [ + "'numeric'" + ], + "text/plain": [ + "[1] \"numeric\"" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check datatype\n", + "class(taxa); class(y)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "# save processed data\n", + "save(y, taxa, file='../BMI/BMI_Lin_2014.RData')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/data_application/notebooks_application/.ipynb_checkpoints/1.2 BMI_results_cts-checkpoint.ipynb b/data_application/notebooks_application/.ipynb_checkpoints/1.2 BMI_results_cts-checkpoint.ipynb new file mode 100755 index 0000000..3d0c385 --- /dev/null +++ b/data_application/notebooks_application/.ipynb_checkpoints/1.2 BMI_results_cts-checkpoint.ipynb @@ -0,0 +1,402 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### BMI microbiome data application results for continuous outcome" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### method comparisons" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "load('../BMI/results_cts/BMI_compLasso.RData')\n", + "load('../BMI/results_cts/BMI_elnet.RData')\n", + "load('../BMI/results_cts/BMI_lasso.RData')\n", + "load('../BMI/results_cts/BMI_rf.RData')" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 0.22
  2. \n", + "\t
  3. 21.59
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 0.22\n", + "\\item 21.59\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 0.22\n", + "2. 21.59\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 0.22 21.59" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "c(out_compLasso$stab_index, out_compLasso$MSE_mean)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 0.14
  2. \n", + "\t
  3. 24.07
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 0.14\n", + "\\item 24.07\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 0.14\n", + "2. 24.07\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 0.14 24.07" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "c(out_lasso$stab_index, out_lasso$MSE_mean) " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 0.23
  2. \n", + "\t
  3. 25.33
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 0.23\n", + "\\item 25.33\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 0.23\n", + "2. 25.33\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 0.23 25.33" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "c(out_elnet$stab_index, out_elnet$MSE_mean)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 0.02
  2. \n", + "\t
  3. 4.99
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 0.02\n", + "\\item 4.99\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 0.02\n", + "2. 4.99\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 0.02 4.99" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "c(out_rf$stab_index, out_rf$MSE_mean)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
datasetmethodmsestability
bmi_gut lasso 24.07 0.14
bmi_gut elent 25.33 0.23
bmi_gut rf 4.99 0.02
bmi_gut compLasso21.59 0.22
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|llll}\n", + " dataset & method & mse & stability\\\\\n", + "\\hline\n", + "\t bmi\\_gut & lasso & 24.07 & 0.14 \\\\\n", + "\t bmi\\_gut & elent & 25.33 & 0.23 \\\\\n", + "\t bmi\\_gut & rf & 4.99 & 0.02 \\\\\n", + "\t bmi\\_gut & compLasso & 21.59 & 0.22 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| dataset | method | mse | stability |\n", + "|---|---|---|---|\n", + "| bmi_gut | lasso | 24.07 | 0.14 |\n", + "| bmi_gut | elent | 25.33 | 0.23 |\n", + "| bmi_gut | rf | 4.99 | 0.02 |\n", + "| bmi_gut | compLasso | 21.59 | 0.22 |\n", + "\n" + ], + "text/plain": [ + " dataset method mse stability\n", + "1 bmi_gut lasso 24.07 0.14 \n", + "2 bmi_gut elent 25.33 0.23 \n", + "3 bmi_gut rf 4.99 0.02 \n", + "4 bmi_gut compLasso 21.59 0.22 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# combine and export results\n", + "bmi_gut = as.data.frame(matrix(NA, nrow=4, ncol=4))\n", + "colnames(bmi_gut) = c('dataset', 'method', 'mse', 'stability')\n", + "bmi_gut$dataset = 'bmi_gut'\n", + "bmi_gut$method = c('lasso', 'elent', 'rf', 'compLasso')\n", + "bmi_gut$mse = c(out_lasso$MSE_mean, out_elnet$MSE_mean, out_rf$MSE_mean, out_compLasso$MSE_mean)\n", + "bmi_gut$stability = c(out_lasso$stab_index, out_elnet$stab_index, out_rf$stab_index, out_compLasso$stab_index)\n", + "bmi_gut" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### hypothesis testing" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "load('../BMI/results_cts/BMI_boot_compLasso.RData')\n", + "load('../BMI/results_cts/BMI_boot_rf.RData')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "0.2659" + ], + "text/latex": [ + "0.2659" + ], + "text/markdown": [ + "0.2659" + ], + "text/plain": [ + "[1] 0.2659" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\t
2.5%
\n", + "\t\t
0.17475
\n", + "\t
97.5%
\n", + "\t\t
0.34
\n", + "
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[2.5\\textbackslash{}\\%] 0.17475\n", + "\\item[97.5\\textbackslash{}\\%] 0.34\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "2.5%\n", + ": 0.1747597.5%\n", + ": 0.34\n", + "\n" + ], + "text/plain": [ + " 2.5% 97.5% \n", + "0.17475 0.34000 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "diff_stab = (boot_compLasso$stab_index - boot_rf$stab_index)\n", + "mean(diff_stab)\n", + "quantile(diff_stab, probs = c(0.025, 0.975)) \n", + "# CI doesn't contain zero: compLasso is significantly more stable than RF" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "11.8026936858767" + ], + "text/latex": [ + "11.8026936858767" + ], + "text/markdown": [ + "11.8026936858767" + ], + "text/plain": [ + "[1] 11.80269" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\t
2.5%
\n", + "\t\t
-2.09038719853993
\n", + "\t
97.5%
\n", + "\t\t
41.1831613135692
\n", + "
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[2.5\\textbackslash{}\\%] -2.09038719853993\n", + "\\item[97.5\\textbackslash{}\\%] 41.1831613135692\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "2.5%\n", + ": -2.0903871985399397.5%\n", + ": 41.1831613135692\n", + "\n" + ], + "text/plain": [ + " 2.5% 97.5% \n", + "-2.090387 41.183161 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "diff_mse = (unlist(boot_compLasso$MSE_list) - unlist(boot_rf$MSE_list)) # use all 100*100 MSEs\n", + "mean(diff_mse)\n", + "quantile(diff_mse, probs = c(0.025, 0.975)) \n", + "# CI contain zero: compLasso is not significantly different from RF based on MSE" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/data_application/notebooks_application/.ipynb_checkpoints/2.1.Soils_biomTableConversion (Python)-checkpoint.ipynb b/data_application/notebooks_application/.ipynb_checkpoints/2.1.Soils_biomTableConversion (Python)-checkpoint.ipynb new file mode 100755 index 0000000..16a40f2 --- /dev/null +++ b/data_application/notebooks_application/.ipynb_checkpoints/2.1.Soils_biomTableConversion (Python)-checkpoint.ipynb @@ -0,0 +1,1571 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# ref: the soil dataset used in balance tree\n", + "# https://msystems.asm.org/content/2/1/e00162-16" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import sys\n", + "import biom\n", + "from biom.util import biom_open\n", + "import pandas as pd\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "def biom2pandas(file_biom, withTaxonomy=False, astype=int):\n", + " \"\"\" Converts a biom file into a Pandas.DataFrame\n", + " Parameters\n", + " ----------\n", + " file_biom : str\n", + " The path to the biom file.\n", + " withTaxonomy : bool\n", + " If TRUE, returns a second Pandas.Series with lineage information for\n", + " each feature, e.g. OTU or deblur-sequence. Default: FALSE\n", + " astype : type\n", + " datatype into each value of the biom table is casted. Default: int.\n", + " Use e.g. float if biom table contains relative abundances instead of\n", + " raw reads.\n", + " Returns\n", + " -------\n", + " A Pandas.DataFrame holding holding numerical values from the biom file.\n", + " If withTaxonomy is TRUE then a second Pandas.DataFrame is returned, holding\n", + " lineage information about each feature.\n", + " Raises\n", + " ------\n", + " IOError\n", + " If file_biom cannot be read.\n", + " ValueError\n", + " If withTaxonomy=TRUE but biom file does not hold taxonomy information.\n", + " \"\"\"\n", + " try:\n", + " table = biom.load_table(file_biom)\n", + " counts = pd.DataFrame(table.matrix_data.T.todense().astype(astype),\n", + " index=table.ids(axis='sample'),\n", + " columns=table.ids(axis='observation')).T\n", + " if withTaxonomy:\n", + " try:\n", + " md = table.metadata_to_dataframe('observation')\n", + " levels = [col\n", + " for col in md.columns\n", + " if col.startswith('taxonomy_')]\n", + " if levels == []:\n", + " raise ValueError(('No taxonomy information found in '\n", + " 'biom file.'))\n", + " else:\n", + " taxonomy = md.apply(lambda row:\n", + " \";\".join([row[l] for l in levels]),\n", + " axis=1)\n", + " return counts, taxonomy\n", + " except KeyError:\n", + " raise ValueError(('Biom file does not have any '\n", + " 'observation metadata!'))\n", + " else:\n", + " return counts\n", + " except IOError:\n", + " raise IOError('Cannot read file \"%s\"' % file_biom)\n", + "\n", + "\n", + "def pandas2biom(file_biom, table, taxonomy=None, err=sys.stderr):\n", + " \"\"\" Writes a Pandas.DataFrame into a biom file.\n", + " Parameters\n", + " ----------\n", + " file_biom: str\n", + " The filename of the BIOM file to be created.\n", + " table: a Pandas.DataFrame\n", + " The table that should be written as BIOM.\n", + " taxonomy : pandas.Series\n", + " Index is taxons corresponding to table, values are lineage strings like\n", + " 'k__Bacteria; p__Actinobacteria'\n", + " err : StringIO\n", + " Stream onto which errors / warnings should be printed.\n", + " Default is sys.stderr\n", + " Raises\n", + " ------\n", + " IOError\n", + " If file_biom cannot be written.\n", + " TODO\n", + " ----\n", + " 1) also store taxonomy information\n", + " \"\"\"\n", + " try:\n", + " bt = biom.Table(table.values,\n", + " observation_ids=table.index,\n", + " sample_ids=table.columns)\n", + "\n", + " # add taxonomy metadata if provided, i.e. is not None\n", + " if taxonomy is not None:\n", + " if not isinstance(taxonomy, pd.core.series.Series):\n", + " raise AttributeError('taxonomy must be a pandas.Series!')\n", + " idx_missing_intable = set(table.index) - set(taxonomy.index)\n", + " if len(idx_missing_intable) > 0:\n", + " err.write(('Warning: following %i taxa are not in the '\n", + " 'provided taxonomy:\\n%s\\n') % (\n", + " len(idx_missing_intable),\n", + " \", \".join(idx_missing_intable)))\n", + " missing = pd.Series(\n", + " index=idx_missing_intable,\n", + " name='taxonomy',\n", + " data='k__missing_lineage_information')\n", + " taxonomy = taxonomy.append(missing)\n", + " idx_missing_intaxonomy = set(taxonomy.index) - set(table.index)\n", + " if (len(idx_missing_intaxonomy) > 0) and err:\n", + " err.write(('Warning: following %i taxa are not in the '\n", + " 'provided count table, but in taxonomy:\\n%s\\n') % (\n", + " len(idx_missing_intaxonomy),\n", + " \", \".join(idx_missing_intaxonomy)))\n", + "\n", + " t = dict()\n", + " for taxon, linstr in taxonomy.iteritems():\n", + " # fill missing rank annotations with rank__\n", + " orig_lineage = {annot[0].lower(): annot\n", + " for annot\n", + " in (map(str.strip, linstr.split(';')))}\n", + " lineage = []\n", + " for rank in settings.RANKS:\n", + " rank_char = rank[0].lower()\n", + " if rank_char in orig_lineage:\n", + " lineage.append(orig_lineage[rank_char])\n", + " else:\n", + " lineage.append(rank_char+'__')\n", + " t[taxon] = {'taxonomy': \";\".join(lineage)}\n", + " bt.add_metadata(t, axis='observation')\n", + "\n", + " with biom_open(file_biom, 'w') as f:\n", + " bt.to_hdf5(f, \"example\")\n", + " except IOError:\n", + " raise IOError('Cannot write to file \"%s\"' % file_biom)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Balance_88soils" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(7396, 89)" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "soils_biom = biom2pandas('../88soils/238_otu_table.biom')\n", + "soils_biom.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
103.CA2103.CO3103.SR3103.IE2103.BP1103.VC2103.SA2103.GB2103.CO2103.KP1...103.LQ1103.HI1103.RT1103.HI2103.DF1103.CF3103.AR1103.TL1103.HI4103.BB1
11247011514181376322...0000000000
2443360001000000...0000000000
9731240000000001...0000000000
\n", + "

3 rows × 89 columns

\n", + "
" + ], + "text/plain": [ + " 103.CA2 103.CO3 103.SR3 103.IE2 103.BP1 103.VC2 103.SA2 \\\n", + "1124701 15 14 1 8 13 7 6 \n", + "244336 0 0 0 1 0 0 0 \n", + "973124 0 0 0 0 0 0 0 \n", + "\n", + " 103.GB2 103.CO2 103.KP1 ... 103.LQ1 103.HI1 103.RT1 103.HI2 \\\n", + "1124701 3 2 2 ... 0 0 0 0 \n", + "244336 0 0 0 ... 0 0 0 0 \n", + "973124 0 0 1 ... 0 0 0 0 \n", + "\n", + " 103.DF1 103.CF3 103.AR1 103.TL1 103.HI4 103.BB1 \n", + "1124701 0 0 0 0 0 0 \n", + "244336 0 0 0 0 0 0 \n", + "973124 0 0 0 0 0 0 \n", + "\n", + "[3 rows x 89 columns]" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "soils_biom.head(3)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(7396, 1)" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "soils_taxa = pd.read_csv('../88soils/88soils_taxonomy.txt', sep='\\t', index_col='Feature ID')\n", + "soils_taxa.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Taxon
Feature ID
1000512k__Bacteria;p__Actinobacteria;c__Thermoleophil...
1000547k__Bacteria;p__Firmicutes;c__Bacilli;o__Lactob...
1000654k__Bacteria;p__Bacteroidetes;c__Sphingobacteri...
\n", + "
" + ], + "text/plain": [ + " Taxon\n", + "Feature ID \n", + "1000512 k__Bacteria;p__Actinobacteria;c__Thermoleophil...\n", + "1000547 k__Bacteria;p__Firmicutes;c__Bacilli;o__Lactob...\n", + "1000654 k__Bacteria;p__Bacteroidetes;c__Sphingobacteri..." + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "soils_taxa.head(3)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
0123456
Feature ID
1000512k__Bacteriap__Actinobacteriac__Thermoleophiliao__Gaiellalesf__Gaiellaceaeg__s__
1000547k__Bacteriap__Firmicutesc__Bacillio__Lactobacillalesf__Streptococcaceaeg__Streptococcuss__
1000654k__Bacteriap__Bacteroidetesc__Sphingobacteriiao__Sphingobacterialesf__Sphingobacteriaceaeg__s__
1000757k__Bacteriap__Proteobacteriac__Alphaproteobacteriao__Rhizobialesf__Bradyrhizobiaceaeg__s__
1000876k__Bacteriap__Actinobacteriac__Actinobacteriao__Actinomycetalesf__Nocardioidaceaeg__Nocardioidess__
\n", + "
" + ], + "text/plain": [ + " 0 1 2 \\\n", + "Feature ID \n", + "1000512 k__Bacteria p__Actinobacteria c__Thermoleophilia \n", + "1000547 k__Bacteria p__Firmicutes c__Bacilli \n", + "1000654 k__Bacteria p__Bacteroidetes c__Sphingobacteriia \n", + "1000757 k__Bacteria p__Proteobacteria c__Alphaproteobacteria \n", + "1000876 k__Bacteria p__Actinobacteria c__Actinobacteria \n", + "\n", + " 3 4 5 \\\n", + "Feature ID \n", + "1000512 o__Gaiellales f__Gaiellaceae g__ \n", + "1000547 o__Lactobacillales f__Streptococcaceae g__Streptococcus \n", + "1000654 o__Sphingobacteriales f__Sphingobacteriaceae g__ \n", + "1000757 o__Rhizobiales f__Bradyrhizobiaceae g__ \n", + "1000876 o__Actinomycetales f__Nocardioidaceae g__Nocardioides \n", + "\n", + " 6 \n", + "Feature ID \n", + "1000512 s__ \n", + "1000547 s__ \n", + "1000654 s__ \n", + "1000757 s__ \n", + "1000876 s__ " + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "taxa_new = soils_taxa.Taxon.str.split(pat=\";\", expand=True)\n", + "taxa_new.head(5)\n", + "# ref: https://www.geeksforgeeks.org/python-pandas-split-strings-into-two-list-columns-using-str-split/" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
TaxonGenus
Feature ID
1000512k__Bacteria;p__Actinobacteria;c__Thermoleophil...g__
1000547k__Bacteria;p__Firmicutes;c__Bacilli;o__Lactob...g__Streptococcus
1000654k__Bacteria;p__Bacteroidetes;c__Sphingobacteri...g__
1000757k__Bacteria;p__Proteobacteria;c__Alphaproteoba...g__
1000876k__Bacteria;p__Actinobacteria;c__Actinobacteri...g__Nocardioides
\n", + "
" + ], + "text/plain": [ + " Taxon \\\n", + "Feature ID \n", + "1000512 k__Bacteria;p__Actinobacteria;c__Thermoleophil... \n", + "1000547 k__Bacteria;p__Firmicutes;c__Bacilli;o__Lactob... \n", + "1000654 k__Bacteria;p__Bacteroidetes;c__Sphingobacteri... \n", + "1000757 k__Bacteria;p__Proteobacteria;c__Alphaproteoba... \n", + "1000876 k__Bacteria;p__Actinobacteria;c__Actinobacteri... \n", + "\n", + " Genus \n", + "Feature ID \n", + "1000512 g__ \n", + "1000547 g__Streptococcus \n", + "1000654 g__ \n", + "1000757 g__ \n", + "1000876 g__Nocardioides " + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "soils_taxa['Genus'] = taxa_new[5]\n", + "soils_taxa.head(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "g__ 5213\n", + "g__Rhodoplanes 144\n", + "g__Bacillus 110\n", + "g__Candidatus Solibacter 100\n", + "g__Flavobacterium 71\n", + " ... \n", + "g__Rhodocyclus 1\n", + "g__Marinobacter 1\n", + "g__Afipia 1\n", + "g__Candidatus Amoebophilus 1\n", + "g__Desulfotomaculum 1\n", + "Name: Genus, Length: 335, dtype: int64" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "soils_taxa.Genus.value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(2183, 2)" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# only keep those with genus assignment\n", + "soils_taxa_sub = soils_taxa[soils_taxa.Genus != 'g__']\n", + "soils_taxa_sub.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
TaxonGenus
Feature ID
1000547k__Bacteria;p__Firmicutes;c__Bacilli;o__Lactob...g__Streptococcus
1000876k__Bacteria;p__Actinobacteria;c__Actinobacteri...g__Nocardioides
1003206k__Bacteria;p__Proteobacteria;c__Alphaproteoba...g__Sphingomonas
\n", + "
" + ], + "text/plain": [ + " Taxon \\\n", + "Feature ID \n", + "1000547 k__Bacteria;p__Firmicutes;c__Bacilli;o__Lactob... \n", + "1000876 k__Bacteria;p__Actinobacteria;c__Actinobacteri... \n", + "1003206 k__Bacteria;p__Proteobacteria;c__Alphaproteoba... \n", + "\n", + " Genus \n", + "Feature ID \n", + "1000547 g__Streptococcus \n", + "1000876 g__Nocardioides \n", + "1003206 g__Sphingomonas " + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "soils_taxa_sub.head(3)" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(2183, 91)" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# partition biom table \n", + "soils_biom.index = soils_biom.index.astype('int64') \n", + "soils_biom_sub = soils_biom.merge(soils_taxa_sub, how='inner', left_index=True, right_index=True)\n", + "soils_biom_sub.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
103.CA2103.CO3103.SR3103.IE2103.BP1103.VC2103.SA2103.GB2103.CO2103.KP1...103.RT1103.HI2103.DF1103.CF3103.AR1103.TL1103.HI4103.BB1TaxonGenus
2443360001000000...00000000k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacill...g__Paenibacillus
8094890000000100...00000000k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacill...g__Bacillus
5336250000000000...00000000k__Bacteria;p__Proteobacteria;c__Alphaproteoba...g__Novosphingobium
\n", + "

3 rows × 91 columns

\n", + "
" + ], + "text/plain": [ + " 103.CA2 103.CO3 103.SR3 103.IE2 103.BP1 103.VC2 103.SA2 \\\n", + "244336 0 0 0 1 0 0 0 \n", + "809489 0 0 0 0 0 0 0 \n", + "533625 0 0 0 0 0 0 0 \n", + "\n", + " 103.GB2 103.CO2 103.KP1 ... 103.RT1 103.HI2 103.DF1 103.CF3 \\\n", + "244336 0 0 0 ... 0 0 0 0 \n", + "809489 1 0 0 ... 0 0 0 0 \n", + "533625 0 0 0 ... 0 0 0 0 \n", + "\n", + " 103.AR1 103.TL1 103.HI4 103.BB1 \\\n", + "244336 0 0 0 0 \n", + "809489 0 0 0 0 \n", + "533625 0 0 0 0 \n", + "\n", + " Taxon Genus \n", + "244336 k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacill... g__Paenibacillus \n", + "809489 k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacill... g__Bacillus \n", + "533625 k__Bacteria;p__Proteobacteria;c__Alphaproteoba... g__Novosphingobium \n", + "\n", + "[3 rows x 91 columns]" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "soils_biom_sub.head(3)" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [], + "source": [ + "soils_biom_sub.set_index('Taxon', inplace=True)\n", + "soils_biom_sub.drop(['Genus'], axis=1, inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(2183, 89)" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "soils_biom_sub.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
103.CA2103.CO3103.SR3103.IE2103.BP1103.VC2103.SA2103.GB2103.CO2103.KP1...103.LQ1103.HI1103.RT1103.HI2103.DF1103.CF3103.AR1103.TL1103.HI4103.BB1
Taxon
k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacillales;f__Paenibacillaceae;g__Paenibacillus;s__0001000000...0000000000
k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacillales;f__Bacillaceae;g__Bacillus;s__muralis0000000100...0000000000
k__Bacteria;p__Proteobacteria;c__Alphaproteobacteria;o__Sphingomonadales;f__Sphingomonadaceae;g__Novosphingobium;s__0000000000...0000000000
\n", + "

3 rows × 89 columns

\n", + "
" + ], + "text/plain": [ + " 103.CA2 103.CO3 103.SR3 \\\n", + "Taxon \n", + "k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacilla... 0 0 0 \n", + "k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacilla... 0 0 0 \n", + "k__Bacteria;p__Proteobacteria;c__Alphaproteobac... 0 0 0 \n", + "\n", + " 103.IE2 103.BP1 103.VC2 \\\n", + "Taxon \n", + "k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacilla... 1 0 0 \n", + "k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacilla... 0 0 0 \n", + "k__Bacteria;p__Proteobacteria;c__Alphaproteobac... 0 0 0 \n", + "\n", + " 103.SA2 103.GB2 103.CO2 \\\n", + "Taxon \n", + "k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacilla... 0 0 0 \n", + "k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacilla... 0 1 0 \n", + "k__Bacteria;p__Proteobacteria;c__Alphaproteobac... 0 0 0 \n", + "\n", + " 103.KP1 ... 103.LQ1 \\\n", + "Taxon ... \n", + "k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacilla... 0 ... 0 \n", + "k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacilla... 0 ... 0 \n", + "k__Bacteria;p__Proteobacteria;c__Alphaproteobac... 0 ... 0 \n", + "\n", + " 103.HI1 103.RT1 103.HI2 \\\n", + "Taxon \n", + "k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacilla... 0 0 0 \n", + "k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacilla... 0 0 0 \n", + "k__Bacteria;p__Proteobacteria;c__Alphaproteobac... 0 0 0 \n", + "\n", + " 103.DF1 103.CF3 103.AR1 \\\n", + "Taxon \n", + "k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacilla... 0 0 0 \n", + "k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacilla... 0 0 0 \n", + "k__Bacteria;p__Proteobacteria;c__Alphaproteobac... 0 0 0 \n", + "\n", + " 103.TL1 103.HI4 103.BB1 \n", + "Taxon \n", + "k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacilla... 0 0 0 \n", + "k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacilla... 0 0 0 \n", + "k__Bacteria;p__Proteobacteria;c__Alphaproteobac... 0 0 0 \n", + "\n", + "[3 rows x 89 columns]" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "soils_biom_sub.head(3)" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(89, 2183)" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# transpose the dataframe \n", + "soils_biom_sub_t = soils_biom_sub.T\n", + "soils_biom_sub_t.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Taxonk__Bacteria;p__Firmicutes;c__Bacilli;o__Bacillales;f__Paenibacillaceae;g__Paenibacillus;s__k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacillales;f__Bacillaceae;g__Bacillus;s__muralisk__Bacteria;p__Proteobacteria;c__Alphaproteobacteria;o__Sphingomonadales;f__Sphingomonadaceae;g__Novosphingobium;s__k__Bacteria;p__Acidobacteria;c__Solibacteres;o__Solibacterales;f__Solibacteraceae;g__Candidatus Solibacter;s__k__Bacteria;p__Proteobacteria;c__Alphaproteobacteria;o__Rhizobiales;f__Hyphomicrobiaceae;g__Rhodoplanes;s__k__Bacteria;p__Actinobacteria;c__Actinobacteria;o__Actinomycetales;f__Nocardioidaceae;g__Nocardioides;s__k__Bacteria;p__Bacteroidetes;c__Flavobacteriia;o__Flavobacteriales;f__Flavobacteriaceae;g__Flavobacterium;s__k__Bacteria;p__Firmicutes;c__Clostridia;o__Clostridiales;f__Peptococcaceae;g__Desulfotomaculum;s__k__Bacteria;p__Acidobacteria;c__Acidobacteriia;o__Acidobacteriales;f__Koribacteraceae;g__Candidatus Koribacter;s__k__Bacteria;p__Proteobacteria;c__Betaproteobacteria;o__Burkholderiales;f__Comamonadaceae;g__Methylibium;s__...k__Bacteria;p__Proteobacteria;c__Betaproteobacteria;o__Burkholderiales;f__Comamonadaceae;g__Rhodoferax;s__k__Bacteria;p__Proteobacteria;c__Gammaproteobacteria;o__Xanthomonadales;f__Xanthomonadaceae;g__Dokdonella;s__k__Bacteria;p__Firmicutes;c__Bacilli;o__Lactobacillales;f__Streptococcaceae;g__Streptococcus;s__k__Bacteria;p__Proteobacteria;c__Betaproteobacteria;o__Methylophilales;f__Methylophilaceae;g__Methylotenera;s__mobilisk__Bacteria;p__Actinobacteria;c__Actinobacteria;o__Actinomycetales;f__Streptomycetaceae;g__Streptomyces;s__k__Bacteria;p__Proteobacteria;c__Gammaproteobacteria;o__Xanthomonadales;f__Xanthomonadaceae;g__Luteimonas;s__k__Bacteria;p__Proteobacteria;c__Alphaproteobacteria;o__Rhizobiales;f__Hyphomicrobiaceae;g__Rhodoplanes;s__k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacillales;f__Planococcaceae;g__Solibacillus;s__k__Bacteria;p__Proteobacteria;c__Betaproteobacteria;o__Burkholderiales;f__Comamonadaceae;g__Ramlibacter;s__k__Bacteria;p__Actinobacteria;c__Actinobacteria;o__Actinomycetales;f__Mycobacteriaceae;g__Mycobacterium;s__
103.CA20000000000...0000000000
103.CO30000000000...0000000001
103.SR30000000000...0100000011
\n", + "

3 rows × 2183 columns

\n", + "
" + ], + "text/plain": [ + "Taxon k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacillales;f__Paenibacillaceae;g__Paenibacillus;s__ \\\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "\n", + "Taxon k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacillales;f__Bacillaceae;g__Bacillus;s__muralis \\\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "\n", + "Taxon k__Bacteria;p__Proteobacteria;c__Alphaproteobacteria;o__Sphingomonadales;f__Sphingomonadaceae;g__Novosphingobium;s__ \\\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "\n", + "Taxon k__Bacteria;p__Acidobacteria;c__Solibacteres;o__Solibacterales;f__Solibacteraceae;g__Candidatus Solibacter;s__ \\\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "\n", + "Taxon k__Bacteria;p__Proteobacteria;c__Alphaproteobacteria;o__Rhizobiales;f__Hyphomicrobiaceae;g__Rhodoplanes;s__ \\\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "\n", + "Taxon k__Bacteria;p__Actinobacteria;c__Actinobacteria;o__Actinomycetales;f__Nocardioidaceae;g__Nocardioides;s__ \\\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "\n", + "Taxon k__Bacteria;p__Bacteroidetes;c__Flavobacteriia;o__Flavobacteriales;f__Flavobacteriaceae;g__Flavobacterium;s__ \\\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "\n", + "Taxon k__Bacteria;p__Firmicutes;c__Clostridia;o__Clostridiales;f__Peptococcaceae;g__Desulfotomaculum;s__ \\\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "\n", + "Taxon k__Bacteria;p__Acidobacteria;c__Acidobacteriia;o__Acidobacteriales;f__Koribacteraceae;g__Candidatus Koribacter;s__ \\\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "\n", + "Taxon k__Bacteria;p__Proteobacteria;c__Betaproteobacteria;o__Burkholderiales;f__Comamonadaceae;g__Methylibium;s__ \\\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "\n", + "Taxon ... \\\n", + "103.CA2 ... \n", + "103.CO3 ... \n", + "103.SR3 ... \n", + "\n", + "Taxon k__Bacteria;p__Proteobacteria;c__Betaproteobacteria;o__Burkholderiales;f__Comamonadaceae;g__Rhodoferax;s__ \\\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "\n", + "Taxon k__Bacteria;p__Proteobacteria;c__Gammaproteobacteria;o__Xanthomonadales;f__Xanthomonadaceae;g__Dokdonella;s__ \\\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 1 \n", + "\n", + "Taxon k__Bacteria;p__Firmicutes;c__Bacilli;o__Lactobacillales;f__Streptococcaceae;g__Streptococcus;s__ \\\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "\n", + "Taxon k__Bacteria;p__Proteobacteria;c__Betaproteobacteria;o__Methylophilales;f__Methylophilaceae;g__Methylotenera;s__mobilis \\\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "\n", + "Taxon k__Bacteria;p__Actinobacteria;c__Actinobacteria;o__Actinomycetales;f__Streptomycetaceae;g__Streptomyces;s__ \\\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "\n", + "Taxon k__Bacteria;p__Proteobacteria;c__Gammaproteobacteria;o__Xanthomonadales;f__Xanthomonadaceae;g__Luteimonas;s__ \\\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "\n", + "Taxon k__Bacteria;p__Proteobacteria;c__Alphaproteobacteria;o__Rhizobiales;f__Hyphomicrobiaceae;g__Rhodoplanes;s__ \\\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "\n", + "Taxon k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacillales;f__Planococcaceae;g__Solibacillus;s__ \\\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "\n", + "Taxon k__Bacteria;p__Proteobacteria;c__Betaproteobacteria;o__Burkholderiales;f__Comamonadaceae;g__Ramlibacter;s__ \\\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 1 \n", + "\n", + "Taxon k__Bacteria;p__Actinobacteria;c__Actinobacteria;o__Actinomycetales;f__Mycobacteriaceae;g__Mycobacterium;s__ \n", + "103.CA2 0 \n", + "103.CO3 1 \n", + "103.SR3 1 \n", + "\n", + "[3 rows x 2183 columns]" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "soils_biom_sub_t.head(3)" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "count 89.000000\n", + "mean 275.932584\n", + "std 115.508244\n", + "min 1.000000\n", + "25% 213.000000\n", + "50% 254.000000\n", + "75% 319.000000\n", + "max 805.000000\n", + "dtype: float64" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# make sure that each genus exist in at least one sample\n", + "soils_biom_sub_t.sum(axis=1).describe() # column sum" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [], + "source": [ + "# export\n", + "soils_biom_sub_t.to_csv('../88soils/88soils_genus_table.txt', sep='\\t')" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "count 2183.000000\n", + "mean 11.249656\n", + "std 33.869668\n", + "min 1.000000\n", + "25% 1.000000\n", + "50% 3.000000\n", + "75% 8.000000\n", + "max 690.000000\n", + "dtype: float64" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# check that not rarefied\n", + "soils_biom_sub_t.sum(axis=0).describe() # row sum" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.2" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/data_application/notebooks_application/.ipynb_checkpoints/2.2.soils_dataPreparation-checkpoint.ipynb b/data_application/notebooks_application/.ipynb_checkpoints/2.2.soils_dataPreparation-checkpoint.ipynb new file mode 100755 index 0000000..2217a77 --- /dev/null +++ b/data_application/notebooks_application/.ipynb_checkpoints/2.2.soils_dataPreparation-checkpoint.ipynb @@ -0,0 +1,1060 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "load('../88soils/88soils_genus_table.RData')" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 89
  2. \n", + "\t
  3. 2183
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 89\n", + "\\item 2183\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 89\n", + "2. 2183\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 89 2183" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "count = soil_otu\n", + "dim(count)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
k__Bacteria.p__Firmicutes.c__Bacilli.o__Bacillales.f__Paenibacillaceae.g__Paenibacillus.s__k__Bacteria.p__Firmicutes.c__Bacilli.o__Bacillales.f__Bacillaceae.g__Bacillus.s__muralisk__Bacteria.p__Proteobacteria.c__Alphaproteobacteria.o__Sphingomonadales.f__Sphingomonadaceae.g__Novosphingobium.s__k__Bacteria.p__Acidobacteria.c__Solibacteres.o__Solibacterales.f__Solibacteraceae.g__Candidatus.Solibacter.s__k__Bacteria.p__Proteobacteria.c__Alphaproteobacteria.o__Rhizobiales.f__Hyphomicrobiaceae.g__Rhodoplanes.s__k__Bacteria.p__Actinobacteria.c__Actinobacteria.o__Actinomycetales.f__Nocardioidaceae.g__Nocardioides.s__k__Bacteria.p__Bacteroidetes.c__Flavobacteriia.o__Flavobacteriales.f__Flavobacteriaceae.g__Flavobacterium.s__k__Bacteria.p__Firmicutes.c__Clostridia.o__Clostridiales.f__Peptococcaceae.g__Desulfotomaculum.s__k__Bacteria.p__Acidobacteria.c__Acidobacteriia.o__Acidobacteriales.f__Koribacteraceae.g__Candidatus.Koribacter.s__k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Burkholderiales.f__Comamonadaceae.g__Methylibium.s__...k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Burkholderiales.f__Comamonadaceae.g__Rhodoferax.s__.4k__Bacteria.p__Proteobacteria.c__Gammaproteobacteria.o__Xanthomonadales.f__Xanthomonadaceae.g__Dokdonella.s__.9k__Bacteria.p__Firmicutes.c__Bacilli.o__Lactobacillales.f__Streptococcaceae.g__Streptococcus.s__.9k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Methylophilales.f__Methylophilaceae.g__Methylotenera.s__mobilis.2k__Bacteria.p__Actinobacteria.c__Actinobacteria.o__Actinomycetales.f__Streptomycetaceae.g__Streptomyces.s__.44k__Bacteria.p__Proteobacteria.c__Gammaproteobacteria.o__Xanthomonadales.f__Xanthomonadaceae.g__Luteimonas.s__.2k__Bacteria.p__Proteobacteria.c__Alphaproteobacteria.o__Rhizobiales.f__Hyphomicrobiaceae.g__Rhodoplanes.s__.142k__Bacteria.p__Firmicutes.c__Bacilli.o__Bacillales.f__Planococcaceae.g__Solibacillus.s__.3k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Burkholderiales.f__Comamonadaceae.g__Ramlibacter.s__.9k__Bacteria.p__Actinobacteria.c__Actinobacteria.o__Actinomycetales.f__Mycobacteriaceae.g__Mycobacterium.s__.28
103.CA20 0 0 0 0 0 0 0 0 0 ...0 0 0 0 0 0 0 0 0 0
103.CO30 0 0 0 0 0 0 0 0 0 ...0 0 0 0 0 0 0 0 0 1
103.SR30 0 0 0 0 0 0 0 0 0 ...0 1 0 0 0 0 0 0 1 1
103.IE21 0 0 0 0 0 0 0 0 0 ...0 0 0 0 0 0 2 0 0 1
103.BP10 0 0 0 0 0 0 0 0 0 ...0 0 0 0 0 0 0 0 0 1
103.VC20 0 0 0 0 0 0 0 0 2 ...0 0 0 0 0 0 0 0 0 1
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll}\n", + " & k\\_\\_Bacteria.p\\_\\_Firmicutes.c\\_\\_Bacilli.o\\_\\_Bacillales.f\\_\\_Paenibacillaceae.g\\_\\_Paenibacillus.s\\_\\_ & k\\_\\_Bacteria.p\\_\\_Firmicutes.c\\_\\_Bacilli.o\\_\\_Bacillales.f\\_\\_Bacillaceae.g\\_\\_Bacillus.s\\_\\_muralis & k\\_\\_Bacteria.p\\_\\_Proteobacteria.c\\_\\_Alphaproteobacteria.o\\_\\_Sphingomonadales.f\\_\\_Sphingomonadaceae.g\\_\\_Novosphingobium.s\\_\\_ & k\\_\\_Bacteria.p\\_\\_Acidobacteria.c\\_\\_Solibacteres.o\\_\\_Solibacterales.f\\_\\_Solibacteraceae.g\\_\\_Candidatus.Solibacter.s\\_\\_ & k\\_\\_Bacteria.p\\_\\_Proteobacteria.c\\_\\_Alphaproteobacteria.o\\_\\_Rhizobiales.f\\_\\_Hyphomicrobiaceae.g\\_\\_Rhodoplanes.s\\_\\_ & k\\_\\_Bacteria.p\\_\\_Actinobacteria.c\\_\\_Actinobacteria.o\\_\\_Actinomycetales.f\\_\\_Nocardioidaceae.g\\_\\_Nocardioides.s\\_\\_ & k\\_\\_Bacteria.p\\_\\_Bacteroidetes.c\\_\\_Flavobacteriia.o\\_\\_Flavobacteriales.f\\_\\_Flavobacteriaceae.g\\_\\_Flavobacterium.s\\_\\_ & k\\_\\_Bacteria.p\\_\\_Firmicutes.c\\_\\_Clostridia.o\\_\\_Clostridiales.f\\_\\_Peptococcaceae.g\\_\\_Desulfotomaculum.s\\_\\_ & k\\_\\_Bacteria.p\\_\\_Acidobacteria.c\\_\\_Acidobacteriia.o\\_\\_Acidobacteriales.f\\_\\_Koribacteraceae.g\\_\\_Candidatus.Koribacter.s\\_\\_ & k\\_\\_Bacteria.p\\_\\_Proteobacteria.c\\_\\_Betaproteobacteria.o\\_\\_Burkholderiales.f\\_\\_Comamonadaceae.g\\_\\_Methylibium.s\\_\\_ & ... & k\\_\\_Bacteria.p\\_\\_Proteobacteria.c\\_\\_Betaproteobacteria.o\\_\\_Burkholderiales.f\\_\\_Comamonadaceae.g\\_\\_Rhodoferax.s\\_\\_.4 & k\\_\\_Bacteria.p\\_\\_Proteobacteria.c\\_\\_Gammaproteobacteria.o\\_\\_Xanthomonadales.f\\_\\_Xanthomonadaceae.g\\_\\_Dokdonella.s\\_\\_.9 & k\\_\\_Bacteria.p\\_\\_Firmicutes.c\\_\\_Bacilli.o\\_\\_Lactobacillales.f\\_\\_Streptococcaceae.g\\_\\_Streptococcus.s\\_\\_.9 & k\\_\\_Bacteria.p\\_\\_Proteobacteria.c\\_\\_Betaproteobacteria.o\\_\\_Methylophilales.f\\_\\_Methylophilaceae.g\\_\\_Methylotenera.s\\_\\_mobilis.2 & k\\_\\_Bacteria.p\\_\\_Actinobacteria.c\\_\\_Actinobacteria.o\\_\\_Actinomycetales.f\\_\\_Streptomycetaceae.g\\_\\_Streptomyces.s\\_\\_.44 & k\\_\\_Bacteria.p\\_\\_Proteobacteria.c\\_\\_Gammaproteobacteria.o\\_\\_Xanthomonadales.f\\_\\_Xanthomonadaceae.g\\_\\_Luteimonas.s\\_\\_.2 & k\\_\\_Bacteria.p\\_\\_Proteobacteria.c\\_\\_Alphaproteobacteria.o\\_\\_Rhizobiales.f\\_\\_Hyphomicrobiaceae.g\\_\\_Rhodoplanes.s\\_\\_.142 & k\\_\\_Bacteria.p\\_\\_Firmicutes.c\\_\\_Bacilli.o\\_\\_Bacillales.f\\_\\_Planococcaceae.g\\_\\_Solibacillus.s\\_\\_.3 & k\\_\\_Bacteria.p\\_\\_Proteobacteria.c\\_\\_Betaproteobacteria.o\\_\\_Burkholderiales.f\\_\\_Comamonadaceae.g\\_\\_Ramlibacter.s\\_\\_.9 & k\\_\\_Bacteria.p\\_\\_Actinobacteria.c\\_\\_Actinobacteria.o\\_\\_Actinomycetales.f\\_\\_Mycobacteriaceae.g\\_\\_Mycobacterium.s\\_\\_.28\\\\\n", + "\\hline\n", + "\t103.CA2 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & ... & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\\\\n", + "\t103.CO3 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & ... & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \\\\\n", + "\t103.SR3 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & ... & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 1 \\\\\n", + "\t103.IE2 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & ... & 0 & 0 & 0 & 0 & 0 & 0 & 2 & 0 & 0 & 1 \\\\\n", + "\t103.BP1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & ... & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \\\\\n", + "\t103.VC2 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 2 & ... & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | k__Bacteria.p__Firmicutes.c__Bacilli.o__Bacillales.f__Paenibacillaceae.g__Paenibacillus.s__ | k__Bacteria.p__Firmicutes.c__Bacilli.o__Bacillales.f__Bacillaceae.g__Bacillus.s__muralis | k__Bacteria.p__Proteobacteria.c__Alphaproteobacteria.o__Sphingomonadales.f__Sphingomonadaceae.g__Novosphingobium.s__ | k__Bacteria.p__Acidobacteria.c__Solibacteres.o__Solibacterales.f__Solibacteraceae.g__Candidatus.Solibacter.s__ | k__Bacteria.p__Proteobacteria.c__Alphaproteobacteria.o__Rhizobiales.f__Hyphomicrobiaceae.g__Rhodoplanes.s__ | k__Bacteria.p__Actinobacteria.c__Actinobacteria.o__Actinomycetales.f__Nocardioidaceae.g__Nocardioides.s__ | k__Bacteria.p__Bacteroidetes.c__Flavobacteriia.o__Flavobacteriales.f__Flavobacteriaceae.g__Flavobacterium.s__ | k__Bacteria.p__Firmicutes.c__Clostridia.o__Clostridiales.f__Peptococcaceae.g__Desulfotomaculum.s__ | k__Bacteria.p__Acidobacteria.c__Acidobacteriia.o__Acidobacteriales.f__Koribacteraceae.g__Candidatus.Koribacter.s__ | k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Burkholderiales.f__Comamonadaceae.g__Methylibium.s__ | ... | k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Burkholderiales.f__Comamonadaceae.g__Rhodoferax.s__.4 | k__Bacteria.p__Proteobacteria.c__Gammaproteobacteria.o__Xanthomonadales.f__Xanthomonadaceae.g__Dokdonella.s__.9 | k__Bacteria.p__Firmicutes.c__Bacilli.o__Lactobacillales.f__Streptococcaceae.g__Streptococcus.s__.9 | k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Methylophilales.f__Methylophilaceae.g__Methylotenera.s__mobilis.2 | k__Bacteria.p__Actinobacteria.c__Actinobacteria.o__Actinomycetales.f__Streptomycetaceae.g__Streptomyces.s__.44 | k__Bacteria.p__Proteobacteria.c__Gammaproteobacteria.o__Xanthomonadales.f__Xanthomonadaceae.g__Luteimonas.s__.2 | k__Bacteria.p__Proteobacteria.c__Alphaproteobacteria.o__Rhizobiales.f__Hyphomicrobiaceae.g__Rhodoplanes.s__.142 | k__Bacteria.p__Firmicutes.c__Bacilli.o__Bacillales.f__Planococcaceae.g__Solibacillus.s__.3 | k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Burkholderiales.f__Comamonadaceae.g__Ramlibacter.s__.9 | k__Bacteria.p__Actinobacteria.c__Actinobacteria.o__Actinomycetales.f__Mycobacteriaceae.g__Mycobacterium.s__.28 |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 103.CA2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "| 103.CO3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |\n", + "| 103.SR3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |\n", + "| 103.IE2 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 0 | 0 | 1 |\n", + "| 103.BP1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |\n", + "| 103.VC2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |\n", + "\n" + ], + "text/plain": [ + " k__Bacteria.p__Firmicutes.c__Bacilli.o__Bacillales.f__Paenibacillaceae.g__Paenibacillus.s__\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "103.IE2 1 \n", + "103.BP1 0 \n", + "103.VC2 0 \n", + " k__Bacteria.p__Firmicutes.c__Bacilli.o__Bacillales.f__Bacillaceae.g__Bacillus.s__muralis\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "103.IE2 0 \n", + "103.BP1 0 \n", + "103.VC2 0 \n", + " k__Bacteria.p__Proteobacteria.c__Alphaproteobacteria.o__Sphingomonadales.f__Sphingomonadaceae.g__Novosphingobium.s__\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "103.IE2 0 \n", + "103.BP1 0 \n", + "103.VC2 0 \n", + " k__Bacteria.p__Acidobacteria.c__Solibacteres.o__Solibacterales.f__Solibacteraceae.g__Candidatus.Solibacter.s__\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "103.IE2 0 \n", + "103.BP1 0 \n", + "103.VC2 0 \n", + " k__Bacteria.p__Proteobacteria.c__Alphaproteobacteria.o__Rhizobiales.f__Hyphomicrobiaceae.g__Rhodoplanes.s__\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "103.IE2 0 \n", + "103.BP1 0 \n", + "103.VC2 0 \n", + " k__Bacteria.p__Actinobacteria.c__Actinobacteria.o__Actinomycetales.f__Nocardioidaceae.g__Nocardioides.s__\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "103.IE2 0 \n", + "103.BP1 0 \n", + "103.VC2 0 \n", + " k__Bacteria.p__Bacteroidetes.c__Flavobacteriia.o__Flavobacteriales.f__Flavobacteriaceae.g__Flavobacterium.s__\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "103.IE2 0 \n", + "103.BP1 0 \n", + "103.VC2 0 \n", + " k__Bacteria.p__Firmicutes.c__Clostridia.o__Clostridiales.f__Peptococcaceae.g__Desulfotomaculum.s__\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "103.IE2 0 \n", + "103.BP1 0 \n", + "103.VC2 0 \n", + " k__Bacteria.p__Acidobacteria.c__Acidobacteriia.o__Acidobacteriales.f__Koribacteraceae.g__Candidatus.Koribacter.s__\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "103.IE2 0 \n", + "103.BP1 0 \n", + "103.VC2 0 \n", + " k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Burkholderiales.f__Comamonadaceae.g__Methylibium.s__\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "103.IE2 0 \n", + "103.BP1 0 \n", + "103.VC2 2 \n", + " ...\n", + "103.CA2 ...\n", + "103.CO3 ...\n", + "103.SR3 ...\n", + "103.IE2 ...\n", + "103.BP1 ...\n", + "103.VC2 ...\n", + " k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Burkholderiales.f__Comamonadaceae.g__Rhodoferax.s__.4\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "103.IE2 0 \n", + "103.BP1 0 \n", + "103.VC2 0 \n", + " k__Bacteria.p__Proteobacteria.c__Gammaproteobacteria.o__Xanthomonadales.f__Xanthomonadaceae.g__Dokdonella.s__.9\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 1 \n", + "103.IE2 0 \n", + "103.BP1 0 \n", + "103.VC2 0 \n", + " k__Bacteria.p__Firmicutes.c__Bacilli.o__Lactobacillales.f__Streptococcaceae.g__Streptococcus.s__.9\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "103.IE2 0 \n", + "103.BP1 0 \n", + "103.VC2 0 \n", + " k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Methylophilales.f__Methylophilaceae.g__Methylotenera.s__mobilis.2\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "103.IE2 0 \n", + "103.BP1 0 \n", + "103.VC2 0 \n", + " k__Bacteria.p__Actinobacteria.c__Actinobacteria.o__Actinomycetales.f__Streptomycetaceae.g__Streptomyces.s__.44\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "103.IE2 0 \n", + "103.BP1 0 \n", + "103.VC2 0 \n", + " k__Bacteria.p__Proteobacteria.c__Gammaproteobacteria.o__Xanthomonadales.f__Xanthomonadaceae.g__Luteimonas.s__.2\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "103.IE2 0 \n", + "103.BP1 0 \n", + "103.VC2 0 \n", + " k__Bacteria.p__Proteobacteria.c__Alphaproteobacteria.o__Rhizobiales.f__Hyphomicrobiaceae.g__Rhodoplanes.s__.142\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "103.IE2 2 \n", + "103.BP1 0 \n", + "103.VC2 0 \n", + " k__Bacteria.p__Firmicutes.c__Bacilli.o__Bacillales.f__Planococcaceae.g__Solibacillus.s__.3\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "103.IE2 0 \n", + "103.BP1 0 \n", + "103.VC2 0 \n", + " k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Burkholderiales.f__Comamonadaceae.g__Ramlibacter.s__.9\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 1 \n", + "103.IE2 0 \n", + "103.BP1 0 \n", + "103.VC2 0 \n", + " k__Bacteria.p__Actinobacteria.c__Actinobacteria.o__Actinomycetales.f__Mycobacteriaceae.g__Mycobacterium.s__.28\n", + "103.CA2 0 \n", + "103.CO3 1 \n", + "103.SR3 1 \n", + "103.IE2 1 \n", + "103.BP1 1 \n", + "103.VC2 1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(count)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 89
  2. \n", + "\t
  3. 2183
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 89\n", + "\\item 2183\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 89\n", + "2. 2183\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 89 2183" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "dim(count[, colMeans(count > 0) >= 0.5/100]) # 0.5%" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 89
  2. \n", + "\t
  3. 2183
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 89\n", + "\\item 2183\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 89\n", + "2. 2183\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 89 2183" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "dim(count[, colMeans(count > 0) >= 1/100]) # 1%" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 89
  2. \n", + "\t
  3. 1297
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 89\n", + "\\item 1297\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 89\n", + "2. 1297\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 89 1297" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "dim(count[, colMeans(count > 0) >= 2/100]) # 2%" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 89
  2. \n", + "\t
  3. 576
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 89\n", + "\\item 576\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 89\n", + "2. 576\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 89 576" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "dim(count[, colMeans(count > 0) >= 5/100]) # 5%" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 89
  2. \n", + "\t
  3. 2183
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 89\n", + "\\item 2183\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 89\n", + "2. 2183\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 89 2183" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
k__Bacteria.p__Firmicutes.c__Bacilli.o__Bacillales.f__Paenibacillaceae.g__Paenibacillus.s__k__Bacteria.p__Firmicutes.c__Bacilli.o__Bacillales.f__Bacillaceae.g__Bacillus.s__muralisk__Bacteria.p__Proteobacteria.c__Alphaproteobacteria.o__Sphingomonadales.f__Sphingomonadaceae.g__Novosphingobium.s__k__Bacteria.p__Acidobacteria.c__Solibacteres.o__Solibacterales.f__Solibacteraceae.g__Candidatus.Solibacter.s__k__Bacteria.p__Proteobacteria.c__Alphaproteobacteria.o__Rhizobiales.f__Hyphomicrobiaceae.g__Rhodoplanes.s__k__Bacteria.p__Actinobacteria.c__Actinobacteria.o__Actinomycetales.f__Nocardioidaceae.g__Nocardioides.s__k__Bacteria.p__Bacteroidetes.c__Flavobacteriia.o__Flavobacteriales.f__Flavobacteriaceae.g__Flavobacterium.s__k__Bacteria.p__Firmicutes.c__Clostridia.o__Clostridiales.f__Peptococcaceae.g__Desulfotomaculum.s__k__Bacteria.p__Acidobacteria.c__Acidobacteriia.o__Acidobacteriales.f__Koribacteraceae.g__Candidatus.Koribacter.s__k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Burkholderiales.f__Comamonadaceae.g__Methylibium.s__...k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Burkholderiales.f__Comamonadaceae.g__Rhodoferax.s__.4k__Bacteria.p__Proteobacteria.c__Gammaproteobacteria.o__Xanthomonadales.f__Xanthomonadaceae.g__Dokdonella.s__.9k__Bacteria.p__Firmicutes.c__Bacilli.o__Lactobacillales.f__Streptococcaceae.g__Streptococcus.s__.9k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Methylophilales.f__Methylophilaceae.g__Methylotenera.s__mobilis.2k__Bacteria.p__Actinobacteria.c__Actinobacteria.o__Actinomycetales.f__Streptomycetaceae.g__Streptomyces.s__.44k__Bacteria.p__Proteobacteria.c__Gammaproteobacteria.o__Xanthomonadales.f__Xanthomonadaceae.g__Luteimonas.s__.2k__Bacteria.p__Proteobacteria.c__Alphaproteobacteria.o__Rhizobiales.f__Hyphomicrobiaceae.g__Rhodoplanes.s__.142k__Bacteria.p__Firmicutes.c__Bacilli.o__Bacillales.f__Planococcaceae.g__Solibacillus.s__.3k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Burkholderiales.f__Comamonadaceae.g__Ramlibacter.s__.9k__Bacteria.p__Actinobacteria.c__Actinobacteria.o__Actinomycetales.f__Mycobacteriaceae.g__Mycobacterium.s__.28
103.CA2-7.828436-7.828436-7.828436-7.828436-7.828436-7.828436-7.828436-7.828436-7.828436-7.828436... -7.828436-7.828436-7.828436-7.828436-7.828436-7.828436-7.828436-7.828436-7.828436-7.828436
103.CO3-7.892452-7.892452-7.892452-7.892452-7.892452-7.892452-7.892452-7.892452-7.892452-7.892452... -7.892452-7.892452-7.892452-7.892452-7.892452-7.892452-7.892452-7.892452-7.892452-7.199305
103.SR3-7.942718-7.942718-7.942718-7.942718-7.942718-7.942718-7.942718-7.942718-7.942718-7.942718... -7.942718-7.249570-7.942718-7.942718-7.942718-7.942718-7.942718-7.942718-7.249570-7.249570
103.IE2-7.208230-7.901377-7.901377-7.901377-7.901377-7.901377-7.901377-7.901377-7.901377-7.901377... -7.901377-7.901377-7.901377-7.901377-7.901377-7.901377-6.515083-7.901377-7.901377-7.208230
103.BP1-7.781139-7.781139-7.781139-7.781139-7.781139-7.781139-7.781139-7.781139-7.781139-7.781139... -7.781139-7.781139-7.781139-7.781139-7.781139-7.781139-7.781139-7.781139-7.781139-7.087991
103.VC2-7.825645-7.825645-7.825645-7.825645-7.825645-7.825645-7.825645-7.825645-7.825645-6.439350... -7.825645-7.825645-7.825645-7.825645-7.825645-7.825645-7.825645-7.825645-7.825645-7.132498
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll}\n", + " & k\\_\\_Bacteria.p\\_\\_Firmicutes.c\\_\\_Bacilli.o\\_\\_Bacillales.f\\_\\_Paenibacillaceae.g\\_\\_Paenibacillus.s\\_\\_ & k\\_\\_Bacteria.p\\_\\_Firmicutes.c\\_\\_Bacilli.o\\_\\_Bacillales.f\\_\\_Bacillaceae.g\\_\\_Bacillus.s\\_\\_muralis & k\\_\\_Bacteria.p\\_\\_Proteobacteria.c\\_\\_Alphaproteobacteria.o\\_\\_Sphingomonadales.f\\_\\_Sphingomonadaceae.g\\_\\_Novosphingobium.s\\_\\_ & k\\_\\_Bacteria.p\\_\\_Acidobacteria.c\\_\\_Solibacteres.o\\_\\_Solibacterales.f\\_\\_Solibacteraceae.g\\_\\_Candidatus.Solibacter.s\\_\\_ & k\\_\\_Bacteria.p\\_\\_Proteobacteria.c\\_\\_Alphaproteobacteria.o\\_\\_Rhizobiales.f\\_\\_Hyphomicrobiaceae.g\\_\\_Rhodoplanes.s\\_\\_ & k\\_\\_Bacteria.p\\_\\_Actinobacteria.c\\_\\_Actinobacteria.o\\_\\_Actinomycetales.f\\_\\_Nocardioidaceae.g\\_\\_Nocardioides.s\\_\\_ & k\\_\\_Bacteria.p\\_\\_Bacteroidetes.c\\_\\_Flavobacteriia.o\\_\\_Flavobacteriales.f\\_\\_Flavobacteriaceae.g\\_\\_Flavobacterium.s\\_\\_ & k\\_\\_Bacteria.p\\_\\_Firmicutes.c\\_\\_Clostridia.o\\_\\_Clostridiales.f\\_\\_Peptococcaceae.g\\_\\_Desulfotomaculum.s\\_\\_ & k\\_\\_Bacteria.p\\_\\_Acidobacteria.c\\_\\_Acidobacteriia.o\\_\\_Acidobacteriales.f\\_\\_Koribacteraceae.g\\_\\_Candidatus.Koribacter.s\\_\\_ & k\\_\\_Bacteria.p\\_\\_Proteobacteria.c\\_\\_Betaproteobacteria.o\\_\\_Burkholderiales.f\\_\\_Comamonadaceae.g\\_\\_Methylibium.s\\_\\_ & ... & k\\_\\_Bacteria.p\\_\\_Proteobacteria.c\\_\\_Betaproteobacteria.o\\_\\_Burkholderiales.f\\_\\_Comamonadaceae.g\\_\\_Rhodoferax.s\\_\\_.4 & k\\_\\_Bacteria.p\\_\\_Proteobacteria.c\\_\\_Gammaproteobacteria.o\\_\\_Xanthomonadales.f\\_\\_Xanthomonadaceae.g\\_\\_Dokdonella.s\\_\\_.9 & k\\_\\_Bacteria.p\\_\\_Firmicutes.c\\_\\_Bacilli.o\\_\\_Lactobacillales.f\\_\\_Streptococcaceae.g\\_\\_Streptococcus.s\\_\\_.9 & k\\_\\_Bacteria.p\\_\\_Proteobacteria.c\\_\\_Betaproteobacteria.o\\_\\_Methylophilales.f\\_\\_Methylophilaceae.g\\_\\_Methylotenera.s\\_\\_mobilis.2 & k\\_\\_Bacteria.p\\_\\_Actinobacteria.c\\_\\_Actinobacteria.o\\_\\_Actinomycetales.f\\_\\_Streptomycetaceae.g\\_\\_Streptomyces.s\\_\\_.44 & k\\_\\_Bacteria.p\\_\\_Proteobacteria.c\\_\\_Gammaproteobacteria.o\\_\\_Xanthomonadales.f\\_\\_Xanthomonadaceae.g\\_\\_Luteimonas.s\\_\\_.2 & k\\_\\_Bacteria.p\\_\\_Proteobacteria.c\\_\\_Alphaproteobacteria.o\\_\\_Rhizobiales.f\\_\\_Hyphomicrobiaceae.g\\_\\_Rhodoplanes.s\\_\\_.142 & k\\_\\_Bacteria.p\\_\\_Firmicutes.c\\_\\_Bacilli.o\\_\\_Bacillales.f\\_\\_Planococcaceae.g\\_\\_Solibacillus.s\\_\\_.3 & k\\_\\_Bacteria.p\\_\\_Proteobacteria.c\\_\\_Betaproteobacteria.o\\_\\_Burkholderiales.f\\_\\_Comamonadaceae.g\\_\\_Ramlibacter.s\\_\\_.9 & k\\_\\_Bacteria.p\\_\\_Actinobacteria.c\\_\\_Actinobacteria.o\\_\\_Actinomycetales.f\\_\\_Mycobacteriaceae.g\\_\\_Mycobacterium.s\\_\\_.28\\\\\n", + "\\hline\n", + "\t103.CA2 & -7.828436 & -7.828436 & -7.828436 & -7.828436 & -7.828436 & -7.828436 & -7.828436 & -7.828436 & -7.828436 & -7.828436 & ... & -7.828436 & -7.828436 & -7.828436 & -7.828436 & -7.828436 & -7.828436 & -7.828436 & -7.828436 & -7.828436 & -7.828436\\\\\n", + "\t103.CO3 & -7.892452 & -7.892452 & -7.892452 & -7.892452 & -7.892452 & -7.892452 & -7.892452 & -7.892452 & -7.892452 & -7.892452 & ... & -7.892452 & -7.892452 & -7.892452 & -7.892452 & -7.892452 & -7.892452 & -7.892452 & -7.892452 & -7.892452 & -7.199305\\\\\n", + "\t103.SR3 & -7.942718 & -7.942718 & -7.942718 & -7.942718 & -7.942718 & -7.942718 & -7.942718 & -7.942718 & -7.942718 & -7.942718 & ... & -7.942718 & -7.249570 & -7.942718 & -7.942718 & -7.942718 & -7.942718 & -7.942718 & -7.942718 & -7.249570 & -7.249570\\\\\n", + "\t103.IE2 & -7.208230 & -7.901377 & -7.901377 & -7.901377 & -7.901377 & -7.901377 & -7.901377 & -7.901377 & -7.901377 & -7.901377 & ... & -7.901377 & -7.901377 & -7.901377 & -7.901377 & -7.901377 & -7.901377 & -6.515083 & -7.901377 & -7.901377 & -7.208230\\\\\n", + "\t103.BP1 & -7.781139 & -7.781139 & -7.781139 & -7.781139 & -7.781139 & -7.781139 & -7.781139 & -7.781139 & -7.781139 & -7.781139 & ... & -7.781139 & -7.781139 & -7.781139 & -7.781139 & -7.781139 & -7.781139 & -7.781139 & -7.781139 & -7.781139 & -7.087991\\\\\n", + "\t103.VC2 & -7.825645 & -7.825645 & -7.825645 & -7.825645 & -7.825645 & -7.825645 & -7.825645 & -7.825645 & -7.825645 & -6.439350 & ... & -7.825645 & -7.825645 & -7.825645 & -7.825645 & -7.825645 & -7.825645 & -7.825645 & -7.825645 & -7.825645 & -7.132498\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | k__Bacteria.p__Firmicutes.c__Bacilli.o__Bacillales.f__Paenibacillaceae.g__Paenibacillus.s__ | k__Bacteria.p__Firmicutes.c__Bacilli.o__Bacillales.f__Bacillaceae.g__Bacillus.s__muralis | k__Bacteria.p__Proteobacteria.c__Alphaproteobacteria.o__Sphingomonadales.f__Sphingomonadaceae.g__Novosphingobium.s__ | k__Bacteria.p__Acidobacteria.c__Solibacteres.o__Solibacterales.f__Solibacteraceae.g__Candidatus.Solibacter.s__ | k__Bacteria.p__Proteobacteria.c__Alphaproteobacteria.o__Rhizobiales.f__Hyphomicrobiaceae.g__Rhodoplanes.s__ | k__Bacteria.p__Actinobacteria.c__Actinobacteria.o__Actinomycetales.f__Nocardioidaceae.g__Nocardioides.s__ | k__Bacteria.p__Bacteroidetes.c__Flavobacteriia.o__Flavobacteriales.f__Flavobacteriaceae.g__Flavobacterium.s__ | k__Bacteria.p__Firmicutes.c__Clostridia.o__Clostridiales.f__Peptococcaceae.g__Desulfotomaculum.s__ | k__Bacteria.p__Acidobacteria.c__Acidobacteriia.o__Acidobacteriales.f__Koribacteraceae.g__Candidatus.Koribacter.s__ | k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Burkholderiales.f__Comamonadaceae.g__Methylibium.s__ | ... | k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Burkholderiales.f__Comamonadaceae.g__Rhodoferax.s__.4 | k__Bacteria.p__Proteobacteria.c__Gammaproteobacteria.o__Xanthomonadales.f__Xanthomonadaceae.g__Dokdonella.s__.9 | k__Bacteria.p__Firmicutes.c__Bacilli.o__Lactobacillales.f__Streptococcaceae.g__Streptococcus.s__.9 | k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Methylophilales.f__Methylophilaceae.g__Methylotenera.s__mobilis.2 | k__Bacteria.p__Actinobacteria.c__Actinobacteria.o__Actinomycetales.f__Streptomycetaceae.g__Streptomyces.s__.44 | k__Bacteria.p__Proteobacteria.c__Gammaproteobacteria.o__Xanthomonadales.f__Xanthomonadaceae.g__Luteimonas.s__.2 | k__Bacteria.p__Proteobacteria.c__Alphaproteobacteria.o__Rhizobiales.f__Hyphomicrobiaceae.g__Rhodoplanes.s__.142 | k__Bacteria.p__Firmicutes.c__Bacilli.o__Bacillales.f__Planococcaceae.g__Solibacillus.s__.3 | k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Burkholderiales.f__Comamonadaceae.g__Ramlibacter.s__.9 | k__Bacteria.p__Actinobacteria.c__Actinobacteria.o__Actinomycetales.f__Mycobacteriaceae.g__Mycobacterium.s__.28 |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 103.CA2 | -7.828436 | -7.828436 | -7.828436 | -7.828436 | -7.828436 | -7.828436 | -7.828436 | -7.828436 | -7.828436 | -7.828436 | ... | -7.828436 | -7.828436 | -7.828436 | -7.828436 | -7.828436 | -7.828436 | -7.828436 | -7.828436 | -7.828436 | -7.828436 |\n", + "| 103.CO3 | -7.892452 | -7.892452 | -7.892452 | -7.892452 | -7.892452 | -7.892452 | -7.892452 | -7.892452 | -7.892452 | -7.892452 | ... | -7.892452 | -7.892452 | -7.892452 | -7.892452 | -7.892452 | -7.892452 | -7.892452 | -7.892452 | -7.892452 | -7.199305 |\n", + "| 103.SR3 | -7.942718 | -7.942718 | -7.942718 | -7.942718 | -7.942718 | -7.942718 | -7.942718 | -7.942718 | -7.942718 | -7.942718 | ... | -7.942718 | -7.249570 | -7.942718 | -7.942718 | -7.942718 | -7.942718 | -7.942718 | -7.942718 | -7.249570 | -7.249570 |\n", + "| 103.IE2 | -7.208230 | -7.901377 | -7.901377 | -7.901377 | -7.901377 | -7.901377 | -7.901377 | -7.901377 | -7.901377 | -7.901377 | ... | -7.901377 | -7.901377 | -7.901377 | -7.901377 | -7.901377 | -7.901377 | -6.515083 | -7.901377 | -7.901377 | -7.208230 |\n", + "| 103.BP1 | -7.781139 | -7.781139 | -7.781139 | -7.781139 | -7.781139 | -7.781139 | -7.781139 | -7.781139 | -7.781139 | -7.781139 | ... | -7.781139 | -7.781139 | -7.781139 | -7.781139 | -7.781139 | -7.781139 | -7.781139 | -7.781139 | -7.781139 | -7.087991 |\n", + "| 103.VC2 | -7.825645 | -7.825645 | -7.825645 | -7.825645 | -7.825645 | -7.825645 | -7.825645 | -7.825645 | -7.825645 | -6.439350 | ... | -7.825645 | -7.825645 | -7.825645 | -7.825645 | -7.825645 | -7.825645 | -7.825645 | -7.825645 | -7.825645 | -7.132498 |\n", + "\n" + ], + "text/plain": [ + " k__Bacteria.p__Firmicutes.c__Bacilli.o__Bacillales.f__Paenibacillaceae.g__Paenibacillus.s__\n", + "103.CA2 -7.828436 \n", + "103.CO3 -7.892452 \n", + "103.SR3 -7.942718 \n", + "103.IE2 -7.208230 \n", + "103.BP1 -7.781139 \n", + "103.VC2 -7.825645 \n", + " k__Bacteria.p__Firmicutes.c__Bacilli.o__Bacillales.f__Bacillaceae.g__Bacillus.s__muralis\n", + "103.CA2 -7.828436 \n", + "103.CO3 -7.892452 \n", + "103.SR3 -7.942718 \n", + "103.IE2 -7.901377 \n", + "103.BP1 -7.781139 \n", + "103.VC2 -7.825645 \n", + " k__Bacteria.p__Proteobacteria.c__Alphaproteobacteria.o__Sphingomonadales.f__Sphingomonadaceae.g__Novosphingobium.s__\n", + "103.CA2 -7.828436 \n", + "103.CO3 -7.892452 \n", + "103.SR3 -7.942718 \n", + "103.IE2 -7.901377 \n", + "103.BP1 -7.781139 \n", + "103.VC2 -7.825645 \n", + " k__Bacteria.p__Acidobacteria.c__Solibacteres.o__Solibacterales.f__Solibacteraceae.g__Candidatus.Solibacter.s__\n", + "103.CA2 -7.828436 \n", + "103.CO3 -7.892452 \n", + "103.SR3 -7.942718 \n", + "103.IE2 -7.901377 \n", + "103.BP1 -7.781139 \n", + "103.VC2 -7.825645 \n", + " k__Bacteria.p__Proteobacteria.c__Alphaproteobacteria.o__Rhizobiales.f__Hyphomicrobiaceae.g__Rhodoplanes.s__\n", + "103.CA2 -7.828436 \n", + "103.CO3 -7.892452 \n", + "103.SR3 -7.942718 \n", + "103.IE2 -7.901377 \n", + "103.BP1 -7.781139 \n", + "103.VC2 -7.825645 \n", + " k__Bacteria.p__Actinobacteria.c__Actinobacteria.o__Actinomycetales.f__Nocardioidaceae.g__Nocardioides.s__\n", + "103.CA2 -7.828436 \n", + "103.CO3 -7.892452 \n", + "103.SR3 -7.942718 \n", + "103.IE2 -7.901377 \n", + "103.BP1 -7.781139 \n", + "103.VC2 -7.825645 \n", + " k__Bacteria.p__Bacteroidetes.c__Flavobacteriia.o__Flavobacteriales.f__Flavobacteriaceae.g__Flavobacterium.s__\n", + "103.CA2 -7.828436 \n", + "103.CO3 -7.892452 \n", + "103.SR3 -7.942718 \n", + "103.IE2 -7.901377 \n", + "103.BP1 -7.781139 \n", + "103.VC2 -7.825645 \n", + " k__Bacteria.p__Firmicutes.c__Clostridia.o__Clostridiales.f__Peptococcaceae.g__Desulfotomaculum.s__\n", + "103.CA2 -7.828436 \n", + "103.CO3 -7.892452 \n", + "103.SR3 -7.942718 \n", + "103.IE2 -7.901377 \n", + "103.BP1 -7.781139 \n", + "103.VC2 -7.825645 \n", + " k__Bacteria.p__Acidobacteria.c__Acidobacteriia.o__Acidobacteriales.f__Koribacteraceae.g__Candidatus.Koribacter.s__\n", + "103.CA2 -7.828436 \n", + "103.CO3 -7.892452 \n", + "103.SR3 -7.942718 \n", + "103.IE2 -7.901377 \n", + "103.BP1 -7.781139 \n", + "103.VC2 -7.825645 \n", + " k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Burkholderiales.f__Comamonadaceae.g__Methylibium.s__\n", + "103.CA2 -7.828436 \n", + "103.CO3 -7.892452 \n", + "103.SR3 -7.942718 \n", + "103.IE2 -7.901377 \n", + "103.BP1 -7.781139 \n", + "103.VC2 -6.439350 \n", + " ...\n", + "103.CA2 ...\n", + "103.CO3 ...\n", + "103.SR3 ...\n", + "103.IE2 ...\n", + "103.BP1 ...\n", + "103.VC2 ...\n", + " k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Burkholderiales.f__Comamonadaceae.g__Rhodoferax.s__.4\n", + "103.CA2 -7.828436 \n", + "103.CO3 -7.892452 \n", + "103.SR3 -7.942718 \n", + "103.IE2 -7.901377 \n", + "103.BP1 -7.781139 \n", + "103.VC2 -7.825645 \n", + " k__Bacteria.p__Proteobacteria.c__Gammaproteobacteria.o__Xanthomonadales.f__Xanthomonadaceae.g__Dokdonella.s__.9\n", + "103.CA2 -7.828436 \n", + "103.CO3 -7.892452 \n", + "103.SR3 -7.249570 \n", + "103.IE2 -7.901377 \n", + "103.BP1 -7.781139 \n", + "103.VC2 -7.825645 \n", + " k__Bacteria.p__Firmicutes.c__Bacilli.o__Lactobacillales.f__Streptococcaceae.g__Streptococcus.s__.9\n", + "103.CA2 -7.828436 \n", + "103.CO3 -7.892452 \n", + "103.SR3 -7.942718 \n", + "103.IE2 -7.901377 \n", + "103.BP1 -7.781139 \n", + "103.VC2 -7.825645 \n", + " k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Methylophilales.f__Methylophilaceae.g__Methylotenera.s__mobilis.2\n", + "103.CA2 -7.828436 \n", + "103.CO3 -7.892452 \n", + "103.SR3 -7.942718 \n", + "103.IE2 -7.901377 \n", + "103.BP1 -7.781139 \n", + "103.VC2 -7.825645 \n", + " k__Bacteria.p__Actinobacteria.c__Actinobacteria.o__Actinomycetales.f__Streptomycetaceae.g__Streptomyces.s__.44\n", + "103.CA2 -7.828436 \n", + "103.CO3 -7.892452 \n", + "103.SR3 -7.942718 \n", + "103.IE2 -7.901377 \n", + "103.BP1 -7.781139 \n", + "103.VC2 -7.825645 \n", + " k__Bacteria.p__Proteobacteria.c__Gammaproteobacteria.o__Xanthomonadales.f__Xanthomonadaceae.g__Luteimonas.s__.2\n", + "103.CA2 -7.828436 \n", + "103.CO3 -7.892452 \n", + "103.SR3 -7.942718 \n", + "103.IE2 -7.901377 \n", + "103.BP1 -7.781139 \n", + "103.VC2 -7.825645 \n", + " k__Bacteria.p__Proteobacteria.c__Alphaproteobacteria.o__Rhizobiales.f__Hyphomicrobiaceae.g__Rhodoplanes.s__.142\n", + "103.CA2 -7.828436 \n", + "103.CO3 -7.892452 \n", + "103.SR3 -7.942718 \n", + "103.IE2 -6.515083 \n", + "103.BP1 -7.781139 \n", + "103.VC2 -7.825645 \n", + " k__Bacteria.p__Firmicutes.c__Bacilli.o__Bacillales.f__Planococcaceae.g__Solibacillus.s__.3\n", + "103.CA2 -7.828436 \n", + "103.CO3 -7.892452 \n", + "103.SR3 -7.942718 \n", + "103.IE2 -7.901377 \n", + "103.BP1 -7.781139 \n", + "103.VC2 -7.825645 \n", + " k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Burkholderiales.f__Comamonadaceae.g__Ramlibacter.s__.9\n", + "103.CA2 -7.828436 \n", + "103.CO3 -7.892452 \n", + "103.SR3 -7.249570 \n", + "103.IE2 -7.901377 \n", + "103.BP1 -7.781139 \n", + "103.VC2 -7.825645 \n", + " k__Bacteria.p__Actinobacteria.c__Actinobacteria.o__Actinomycetales.f__Mycobacteriaceae.g__Mycobacterium.s__.28\n", + "103.CA2 -7.828436 \n", + "103.CO3 -7.199305 \n", + "103.SR3 -7.249570 \n", + "103.IE2 -7.208230 \n", + "103.BP1 -7.087991 \n", + "103.VC2 -7.132498 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# add pesudo count 0.5\n", + "x = count # preprossed done already\n", + "x[x == 0] <- 0.5\n", + "x <- x/rowSums(x) # relative abundance\n", + "taxa <- log(x)\n", + "dim(taxa)\n", + "head(taxa)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 'BarcodeSequence'
  2. \n", + "\t
  3. 'LinkerPrimerSequence'
  4. \n", + "\t
  5. 'barcode_read_group_tag'
  6. \n", + "\t
  7. 'dna_extracted_prep'
  8. \n", + "\t
  9. 'experiment_alias'
  10. \n", + "\t
  11. 'experiment_center'
  12. \n", + "\t
  13. 'experiment_design_description'
  14. \n", + "\t
  15. 'experiment_title'
  16. \n", + "\t
  17. 'instrument_name'
  18. \n", + "\t
  19. 'key_seq'
  20. \n", + "\t
  21. 'library_construction_protocol'
  22. \n", + "\t
  23. 'linker'
  24. \n", + "\t
  25. 'pcr_primers'
  26. \n", + "\t
  27. 'physical_specimen_remaining_prep'
  28. \n", + "\t
  29. 'platform'
  30. \n", + "\t
  31. 'pool_member_name'
  32. \n", + "\t
  33. 'pool_proportion'
  34. \n", + "\t
  35. 'primer_read_group_tag'
  36. \n", + "\t
  37. 'region'
  38. \n", + "\t
  39. 'run_alias'
  40. \n", + "\t
  41. 'run_center'
  42. \n", + "\t
  43. 'run_date'
  44. \n", + "\t
  45. 'run_prefix'
  46. \n", + "\t
  47. 'samp_size'
  48. \n", + "\t
  49. 'sample_center'
  50. \n", + "\t
  51. 'sample_type_prep'
  52. \n", + "\t
  53. 'sequencing_meth'
  54. \n", + "\t
  55. 'study_center'
  56. \n", + "\t
  57. 'study_ref'
  58. \n", + "\t
  59. 'target_gene'
  60. \n", + "\t
  61. 'target_subfragment'
  62. \n", + "\t
  63. 'altitude'
  64. \n", + "\t
  65. 'annual_season_precpt'
  66. \n", + "\t
  67. 'annual_season_temp'
  68. \n", + "\t
  69. 'anonymized_name'
  70. \n", + "\t
  71. 'assigned_from_geo'
  72. \n", + "\t
  73. 'carb_nitro_ratio'
  74. \n", + "\t
  75. 'cmin_rate'
  76. \n", + "\t
  77. 'collection_date'
  78. \n", + "\t
  79. 'common_name'
  80. \n", + "\t
  81. 'country'
  82. \n", + "\t
  83. 'depth'
  84. \n", + "\t
  85. 'dna_extracted'
  86. \n", + "\t
  87. 'elevation'
  88. \n", + "\t
  89. 'env_biome'
  90. \n", + "\t
  91. 'env_feature'
  92. \n", + "\t
  93. 'env_matter'
  94. \n", + "\t
  95. 'host_subject_id'
  96. \n", + "\t
  97. 'latitude'
  98. \n", + "\t
  99. 'longitude'
  100. \n", + "\t
  101. 'ph'
  102. \n", + "\t
  103. 'physical_specimen_remaining'
  104. \n", + "\t
  105. 'project_name'
  106. \n", + "\t
  107. 'public'
  108. \n", + "\t
  109. 'sample_type'
  110. \n", + "\t
  111. 'silt_clay'
  112. \n", + "\t
  113. 'soil_moisture_deficit'
  114. \n", + "\t
  115. 'soil_type'
  116. \n", + "\t
  117. 'specific_location'
  118. \n", + "\t
  119. 'taxon_id'
  120. \n", + "\t
  121. 'texture'
  122. \n", + "\t
  123. 'title'
  124. \n", + "\t
  125. 'tot_org_carb'
  126. \n", + "\t
  127. 'tot_org_nitro'
  128. \n", + "\t
  129. 'Description'
  130. \n", + "\t
  131. 'ph2'
  132. \n", + "\t
  133. 'ph3'
  134. \n", + "\t
  135. 'ph4'
  136. \n", + "\t
  137. 'ph_rounded'
  138. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 'BarcodeSequence'\n", + "\\item 'LinkerPrimerSequence'\n", + "\\item 'barcode\\_read\\_group\\_tag'\n", + "\\item 'dna\\_extracted\\_prep'\n", + "\\item 'experiment\\_alias'\n", + "\\item 'experiment\\_center'\n", + "\\item 'experiment\\_design\\_description'\n", + "\\item 'experiment\\_title'\n", + "\\item 'instrument\\_name'\n", + "\\item 'key\\_seq'\n", + "\\item 'library\\_construction\\_protocol'\n", + "\\item 'linker'\n", + "\\item 'pcr\\_primers'\n", + "\\item 'physical\\_specimen\\_remaining\\_prep'\n", + "\\item 'platform'\n", + "\\item 'pool\\_member\\_name'\n", + "\\item 'pool\\_proportion'\n", + "\\item 'primer\\_read\\_group\\_tag'\n", + "\\item 'region'\n", + "\\item 'run\\_alias'\n", + "\\item 'run\\_center'\n", + "\\item 'run\\_date'\n", + "\\item 'run\\_prefix'\n", + "\\item 'samp\\_size'\n", + "\\item 'sample\\_center'\n", + "\\item 'sample\\_type\\_prep'\n", + "\\item 'sequencing\\_meth'\n", + "\\item 'study\\_center'\n", + "\\item 'study\\_ref'\n", + "\\item 'target\\_gene'\n", + "\\item 'target\\_subfragment'\n", + "\\item 'altitude'\n", + "\\item 'annual\\_season\\_precpt'\n", + "\\item 'annual\\_season\\_temp'\n", + "\\item 'anonymized\\_name'\n", + "\\item 'assigned\\_from\\_geo'\n", + "\\item 'carb\\_nitro\\_ratio'\n", + "\\item 'cmin\\_rate'\n", + "\\item 'collection\\_date'\n", + "\\item 'common\\_name'\n", + "\\item 'country'\n", + "\\item 'depth'\n", + "\\item 'dna\\_extracted'\n", + "\\item 'elevation'\n", + "\\item 'env\\_biome'\n", + "\\item 'env\\_feature'\n", + "\\item 'env\\_matter'\n", + "\\item 'host\\_subject\\_id'\n", + "\\item 'latitude'\n", + "\\item 'longitude'\n", + "\\item 'ph'\n", + "\\item 'physical\\_specimen\\_remaining'\n", + "\\item 'project\\_name'\n", + "\\item 'public'\n", + "\\item 'sample\\_type'\n", + "\\item 'silt\\_clay'\n", + "\\item 'soil\\_moisture\\_deficit'\n", + "\\item 'soil\\_type'\n", + "\\item 'specific\\_location'\n", + "\\item 'taxon\\_id'\n", + "\\item 'texture'\n", + "\\item 'title'\n", + "\\item 'tot\\_org\\_carb'\n", + "\\item 'tot\\_org\\_nitro'\n", + "\\item 'Description'\n", + "\\item 'ph2'\n", + "\\item 'ph3'\n", + "\\item 'ph4'\n", + "\\item 'ph\\_rounded'\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 'BarcodeSequence'\n", + "2. 'LinkerPrimerSequence'\n", + "3. 'barcode_read_group_tag'\n", + "4. 'dna_extracted_prep'\n", + "5. 'experiment_alias'\n", + "6. 'experiment_center'\n", + "7. 'experiment_design_description'\n", + "8. 'experiment_title'\n", + "9. 'instrument_name'\n", + "10. 'key_seq'\n", + "11. 'library_construction_protocol'\n", + "12. 'linker'\n", + "13. 'pcr_primers'\n", + "14. 'physical_specimen_remaining_prep'\n", + "15. 'platform'\n", + "16. 'pool_member_name'\n", + "17. 'pool_proportion'\n", + "18. 'primer_read_group_tag'\n", + "19. 'region'\n", + "20. 'run_alias'\n", + "21. 'run_center'\n", + "22. 'run_date'\n", + "23. 'run_prefix'\n", + "24. 'samp_size'\n", + "25. 'sample_center'\n", + "26. 'sample_type_prep'\n", + "27. 'sequencing_meth'\n", + "28. 'study_center'\n", + "29. 'study_ref'\n", + "30. 'target_gene'\n", + "31. 'target_subfragment'\n", + "32. 'altitude'\n", + "33. 'annual_season_precpt'\n", + "34. 'annual_season_temp'\n", + "35. 'anonymized_name'\n", + "36. 'assigned_from_geo'\n", + "37. 'carb_nitro_ratio'\n", + "38. 'cmin_rate'\n", + "39. 'collection_date'\n", + "40. 'common_name'\n", + "41. 'country'\n", + "42. 'depth'\n", + "43. 'dna_extracted'\n", + "44. 'elevation'\n", + "45. 'env_biome'\n", + "46. 'env_feature'\n", + "47. 'env_matter'\n", + "48. 'host_subject_id'\n", + "49. 'latitude'\n", + "50. 'longitude'\n", + "51. 'ph'\n", + "52. 'physical_specimen_remaining'\n", + "53. 'project_name'\n", + "54. 'public'\n", + "55. 'sample_type'\n", + "56. 'silt_clay'\n", + "57. 'soil_moisture_deficit'\n", + "58. 'soil_type'\n", + "59. 'specific_location'\n", + "60. 'taxon_id'\n", + "61. 'texture'\n", + "62. 'title'\n", + "63. 'tot_org_carb'\n", + "64. 'tot_org_nitro'\n", + "65. 'Description'\n", + "66. 'ph2'\n", + "67. 'ph3'\n", + "68. 'ph4'\n", + "69. 'ph_rounded'\n", + "\n", + "\n" + ], + "text/plain": [ + " [1] \"BarcodeSequence\" \"LinkerPrimerSequence\" \n", + " [3] \"barcode_read_group_tag\" \"dna_extracted_prep\" \n", + " [5] \"experiment_alias\" \"experiment_center\" \n", + " [7] \"experiment_design_description\" \"experiment_title\" \n", + " [9] \"instrument_name\" \"key_seq\" \n", + "[11] \"library_construction_protocol\" \"linker\" \n", + "[13] \"pcr_primers\" \"physical_specimen_remaining_prep\"\n", + "[15] \"platform\" \"pool_member_name\" \n", + "[17] \"pool_proportion\" \"primer_read_group_tag\" \n", + "[19] \"region\" \"run_alias\" \n", + "[21] \"run_center\" \"run_date\" \n", + "[23] \"run_prefix\" \"samp_size\" \n", + "[25] \"sample_center\" \"sample_type_prep\" \n", + "[27] \"sequencing_meth\" \"study_center\" \n", + "[29] \"study_ref\" \"target_gene\" \n", + "[31] \"target_subfragment\" \"altitude\" \n", + "[33] \"annual_season_precpt\" \"annual_season_temp\" \n", + "[35] \"anonymized_name\" \"assigned_from_geo\" \n", + "[37] \"carb_nitro_ratio\" \"cmin_rate\" \n", + "[39] \"collection_date\" \"common_name\" \n", + "[41] \"country\" \"depth\" \n", + "[43] \"dna_extracted\" \"elevation\" \n", + "[45] \"env_biome\" \"env_feature\" \n", + "[47] \"env_matter\" \"host_subject_id\" \n", + "[49] \"latitude\" \"longitude\" \n", + "[51] \"ph\" \"physical_specimen_remaining\" \n", + "[53] \"project_name\" \"public\" \n", + "[55] \"sample_type\" \"silt_clay\" \n", + "[57] \"soil_moisture_deficit\" \"soil_type\" \n", + "[59] \"specific_location\" \"taxon_id\" \n", + "[61] \"texture\" \"title\" \n", + "[63] \"tot_org_carb\" \"tot_org_nitro\" \n", + "[65] \"Description\" \"ph2\" \n", + "[67] \"ph3\" \"ph4\" \n", + "[69] \"ph_rounded\" " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "colnames(demo)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "89" + ], + "text/latex": [ + "89" + ], + "text/markdown": [ + "89" + ], + "text/plain": [ + "[1] 89" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 8.02
  2. \n", + "\t
  3. 6.02
  4. \n", + "\t
  5. 6.95
  6. \n", + "\t
  7. 5.52
  8. \n", + "\t
  9. 7.53
  10. \n", + "\t
  11. 5.99
  12. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 8.02\n", + "\\item 6.02\n", + "\\item 6.95\n", + "\\item 5.52\n", + "\\item 7.53\n", + "\\item 5.99\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 8.02\n", + "2. 6.02\n", + "3. 6.95\n", + "4. 5.52\n", + "5. 7.53\n", + "6. 5.99\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 8.02 6.02 6.95 5.52 7.53 5.99" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# metadata\n", + "mf <- read.csv(\"../88soils/88soils_modified_metadata.txt\", sep='\\t', row.names=1)\n", + "y <- mf$ph[match(rownames(count), rownames(mf))]\n", + "length(y)\n", + "head(y)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "'matrix'" + ], + "text/latex": [ + "'matrix'" + ], + "text/markdown": [ + "'matrix'" + ], + "text/plain": [ + "[1] \"matrix\"" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "'numeric'" + ], + "text/latex": [ + "'numeric'" + ], + "text/markdown": [ + "'numeric'" + ], + "text/plain": [ + "[1] \"numeric\"" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check datatype\n", + "class(taxa); class(y)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "# save processed data\n", + "save(y, taxa, file='../88soils/soils_ph.RData')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/data_application/notebooks_application/.ipynb_checkpoints/2.3 soils_results_cts-checkpoint.ipynb b/data_application/notebooks_application/.ipynb_checkpoints/2.3 soils_results_cts-checkpoint.ipynb new file mode 100755 index 0000000..34fdcc6 --- /dev/null +++ b/data_application/notebooks_application/.ipynb_checkpoints/2.3 soils_results_cts-checkpoint.ipynb @@ -0,0 +1,402 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Soil microbiome data application results for continuous outcome" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### method comparisons" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "load('../88soils/results_cts/soils_ph_compLasso.RData')\n", + "load('../88soils/results_cts/soils_ph_elnet.RData')\n", + "load('../88soils/results_cts/soils_ph_lasso.RData')\n", + "load('../88soils/results_cts/soils_ph_rf.RData')" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 0.39
  2. \n", + "\t
  3. 0.46
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 0.39\n", + "\\item 0.46\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 0.39\n", + "2. 0.46\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 0.39 0.46" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "c(out_compLasso$stab_index, out_compLasso$MSE_mean)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 0.31
  2. \n", + "\t
  3. 0.34
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 0.31\n", + "\\item 0.34\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 0.31\n", + "2. 0.34\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 0.31 0.34" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "c(out_lasso$stab_index, out_lasso$MSE_mean) " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 0.16
  2. \n", + "\t
  3. 0.23
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 0.16\n", + "\\item 0.23\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 0.16\n", + "2. 0.23\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 0.16 0.23" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "c(out_elnet$stab_index, out_elnet$MSE_mean)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 0.04
  2. \n", + "\t
  3. 0.26
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 0.04\n", + "\\item 0.26\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 0.04\n", + "2. 0.26\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 0.04 0.26" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "c(out_rf$stab_index, out_rf$MSE_mean)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
datasetmethodmsestability
soil_88 lasso 0.34 0.31
soil_88 elent 0.23 0.16
soil_88 rf 0.26 0.04
soil_88 compLasso0.46 0.39
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|llll}\n", + " dataset & method & mse & stability\\\\\n", + "\\hline\n", + "\t soil\\_88 & lasso & 0.34 & 0.31 \\\\\n", + "\t soil\\_88 & elent & 0.23 & 0.16 \\\\\n", + "\t soil\\_88 & rf & 0.26 & 0.04 \\\\\n", + "\t soil\\_88 & compLasso & 0.46 & 0.39 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| dataset | method | mse | stability |\n", + "|---|---|---|---|\n", + "| soil_88 | lasso | 0.34 | 0.31 |\n", + "| soil_88 | elent | 0.23 | 0.16 |\n", + "| soil_88 | rf | 0.26 | 0.04 |\n", + "| soil_88 | compLasso | 0.46 | 0.39 |\n", + "\n" + ], + "text/plain": [ + " dataset method mse stability\n", + "1 soil_88 lasso 0.34 0.31 \n", + "2 soil_88 elent 0.23 0.16 \n", + "3 soil_88 rf 0.26 0.04 \n", + "4 soil_88 compLasso 0.46 0.39 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# combine and export results\n", + "soil_88 = as.data.frame(matrix(NA, nrow=4, ncol=4))\n", + "colnames(soil_88) = c('dataset', 'method', 'mse', 'stability')\n", + "soil_88$dataset = 'soil_88'\n", + "soil_88$method = c('lasso', 'elent', 'rf', 'compLasso')\n", + "soil_88$mse = c(out_lasso$MSE_mean, out_elnet$MSE_mean, out_rf$MSE_mean, out_compLasso$MSE_mean)\n", + "soil_88$stability = c(out_lasso$stab_index, out_elnet$stab_index, out_rf$stab_index, out_compLasso$stab_index)\n", + "soil_88" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### hypothesis testing" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "load('../88soils/results_cts/soils_ph_boot_compLasso.RData')\n", + "load('../88soils/results_cts/soils_ph_boot_rf.RData')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "0.3595" + ], + "text/latex": [ + "0.3595" + ], + "text/markdown": [ + "0.3595" + ], + "text/plain": [ + "[1] 0.3595" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\t
2.5%
\n", + "\t\t
0.28
\n", + "\t
97.5%
\n", + "\t\t
0.44
\n", + "
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[2.5\\textbackslash{}\\%] 0.28\n", + "\\item[97.5\\textbackslash{}\\%] 0.44\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "2.5%\n", + ": 0.2897.5%\n", + ": 0.44\n", + "\n" + ], + "text/plain": [ + " 2.5% 97.5% \n", + " 0.28 0.44 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "diff_stab = (boot_compLasso$stab_index - boot_rf$stab_index)\n", + "mean(diff_stab)\n", + "quantile(diff_stab, probs = c(0.025, 0.975)) \n", + "# CI doesn't contain zero: compLasso is significantly more stable than RF" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "0.0811150164524993" + ], + "text/latex": [ + "0.0811150164524993" + ], + "text/markdown": [ + "0.0811150164524993" + ], + "text/plain": [ + "[1] 0.08111502" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\t
2.5%
\n", + "\t\t
-0.283912044397921
\n", + "\t
97.5%
\n", + "\t\t
0.945808111396662
\n", + "
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[2.5\\textbackslash{}\\%] -0.283912044397921\n", + "\\item[97.5\\textbackslash{}\\%] 0.945808111396662\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "2.5%\n", + ": -0.28391204439792197.5%\n", + ": 0.945808111396662\n", + "\n" + ], + "text/plain": [ + " 2.5% 97.5% \n", + "-0.2839120 0.9458081 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "diff_mse = (unlist(boot_compLasso$MSE_list) - unlist(boot_rf$MSE_list)) # use all 100*100 MSEs\n", + "mean(diff_mse)\n", + "quantile(diff_mse, probs = c(0.025, 0.975)) \n", + "# CI contain zero: compLasso is not significantly different from RF based on MSE" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/data_application/notebooks_application/.ipynb_checkpoints/3_applications_bin_results-checkpoint.ipynb b/data_application/notebooks_application/.ipynb_checkpoints/3_applications_bin_results-checkpoint.ipynb new file mode 100644 index 0000000..fa46c90 --- /dev/null +++ b/data_application/notebooks_application/.ipynb_checkpoints/3_applications_bin_results-checkpoint.ipynb @@ -0,0 +1,505 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Results for real microbiome data applications" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/data_applications/'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### BMI dataset application" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "load(paste0(dir, '/BMI_binary_GenCompLasso.RData'))\n", + "load(paste0(dir, '/BMI_binary_lasso.RData', sep=''))\n", + "load(paste0(dir, '/BMI_binary_elnet.RData', sep=''))\n", + "load(paste0(dir, '/BMI_binary_rf.RData', sep=''))" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 4 × 4
datasetmethodROCstability
<chr><chr><dbl><dbl>
bmi_gutlasso 0.630.14
bmi_gutelent 0.780.19
bmi_gutrf 1.000.01
bmi_gutcompLasso0.850.29
\n" + ], + "text/latex": [ + "A data.frame: 4 × 4\n", + "\\begin{tabular}{llll}\n", + " dataset & method & ROC & stability\\\\\n", + " & & & \\\\\n", + "\\hline\n", + "\t bmi\\_gut & lasso & 0.63 & 0.14\\\\\n", + "\t bmi\\_gut & elent & 0.78 & 0.19\\\\\n", + "\t bmi\\_gut & rf & 1.00 & 0.01\\\\\n", + "\t bmi\\_gut & compLasso & 0.85 & 0.29\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 4 × 4\n", + "\n", + "| dataset <chr> | method <chr> | ROC <dbl> | stability <dbl> |\n", + "|---|---|---|---|\n", + "| bmi_gut | lasso | 0.63 | 0.14 |\n", + "| bmi_gut | elent | 0.78 | 0.19 |\n", + "| bmi_gut | rf | 1.00 | 0.01 |\n", + "| bmi_gut | compLasso | 0.85 | 0.29 |\n", + "\n" + ], + "text/plain": [ + " dataset method ROC stability\n", + "1 bmi_gut lasso 0.63 0.14 \n", + "2 bmi_gut elent 0.78 0.19 \n", + "3 bmi_gut rf 1.00 0.01 \n", + "4 bmi_gut compLasso 0.85 0.29 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "bmi_gut = as.data.frame(matrix(NA, nrow=4, ncol=4))\n", + "colnames(bmi_gut) = c('dataset', 'method', 'ROC', 'stability')\n", + "bmi_gut$dataset = 'bmi_gut'\n", + "bmi_gut$method = c('lasso', 'elent', 'rf', 'compLasso')\n", + "bmi_gut$ROC = c(out_lasso$ROC_mean, out_elnet$ROC_mean, out_rf$ROC_mean, out_GenCompLasso$ROC_mean)\n", + "bmi_gut$stability = c(out_lasso$stab_index, out_elnet$stab_index, out_rf$stab_index, out_GenCompLasso$stab_index)\n", + "bmi_gut" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "# testing\n", + "load(paste0(dir, '/BMI_binary_boot_rf.RData'))\n", + "load(paste0(dir, '/BMI_binary_boot_compLasso.RData'))" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "0.2997" + ], + "text/latex": [ + "0.2997" + ], + "text/markdown": [ + "0.2997" + ], + "text/plain": [ + "[1] 0.2997" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
2.5%
0.11
97.5%
0.41525
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[2.5\\textbackslash{}\\%] 0.11\n", + "\\item[97.5\\textbackslash{}\\%] 0.41525\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "2.5%\n", + ": 0.1197.5%\n", + ": 0.41525\n", + "\n" + ], + "text/plain": [ + " 2.5% 97.5% \n", + "0.11000 0.41525 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "diff_stab = (boot_compLasso$stab_index - boot_rf$stab_index)\n", + "mean(diff_stab)\n", + "quantile(diff_stab, probs = c(0.025, 0.975)) \n", + "# CI doesn't contain zero: compLasso is significantly more stable than RF" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "-0.0942798529453605" + ], + "text/latex": [ + "-0.0942798529453605" + ], + "text/markdown": [ + "-0.0942798529453605" + ], + "text/plain": [ + "[1] -0.09427985" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
2.5%
-0.19020132947925
97.5%
-0.020967051775781
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[2.5\\textbackslash{}\\%] -0.19020132947925\n", + "\\item[97.5\\textbackslash{}\\%] -0.020967051775781\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "2.5%\n", + ": -0.1902013294792597.5%\n", + ": -0.020967051775781\n", + "\n" + ], + "text/plain": [ + " 2.5% 97.5% \n", + "-0.19020133 -0.02096705 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "diff_ROC = (unlist(boot_compLasso$ROC_list) - unlist(boot_rf$ROC_list)) # use all 100*100 ROCs\n", + "mean(diff_ROC)\n", + "quantile(diff_ROC, probs = c(0.025, 0.975)) \n", + "### CI doesn't contain zero: compLasso is significantly different from RF based on ROC\n", + "### although very close to zero (now ROC has similar scale as Stability, Stability still better differentiation)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 88 soils dataset application" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "load(paste0(dir, '/soils_binary_ph_GenCompLasso.RData', sep=''))\n", + "load(paste0(dir, '/soils_binary_ph_lasso.RData', sep=''))\n", + "load(paste0(dir, '/soils_binary_ph_elnet.RData', sep=''))\n", + "load(paste0(dir, '/soils_binary_ph_rf.RData', sep=''))" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 4 × 4
datasetmethodROCstability
<chr><chr><dbl><dbl>
soil_88lasso 0.900.28
soil_88elent 0.940.32
soil_88rf 1.000.03
soil_88compLasso0.960.46
\n" + ], + "text/latex": [ + "A data.frame: 4 × 4\n", + "\\begin{tabular}{llll}\n", + " dataset & method & ROC & stability\\\\\n", + " & & & \\\\\n", + "\\hline\n", + "\t soil\\_88 & lasso & 0.90 & 0.28\\\\\n", + "\t soil\\_88 & elent & 0.94 & 0.32\\\\\n", + "\t soil\\_88 & rf & 1.00 & 0.03\\\\\n", + "\t soil\\_88 & compLasso & 0.96 & 0.46\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 4 × 4\n", + "\n", + "| dataset <chr> | method <chr> | ROC <dbl> | stability <dbl> |\n", + "|---|---|---|---|\n", + "| soil_88 | lasso | 0.90 | 0.28 |\n", + "| soil_88 | elent | 0.94 | 0.32 |\n", + "| soil_88 | rf | 1.00 | 0.03 |\n", + "| soil_88 | compLasso | 0.96 | 0.46 |\n", + "\n" + ], + "text/plain": [ + " dataset method ROC stability\n", + "1 soil_88 lasso 0.90 0.28 \n", + "2 soil_88 elent 0.94 0.32 \n", + "3 soil_88 rf 1.00 0.03 \n", + "4 soil_88 compLasso 0.96 0.46 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "soil_88 = as.data.frame(matrix(NA, nrow=4, ncol=4))\n", + "colnames(soil_88) = c('dataset', 'method', 'ROC', 'stability')\n", + "soil_88$dataset = 'soil_88'\n", + "soil_88$method = c('lasso', 'elent', 'rf', 'compLasso')\n", + "soil_88$ROC = c(out_lasso$ROC_mean, out_elnet$ROC_mean, out_rf$ROC_mean, out_GenCompLasso$ROC_mean)\n", + "soil_88$stability = c(out_lasso$stab_index, out_elnet$stab_index, out_rf$stab_index, out_GenCompLasso$stab_index)\n", + "soil_88" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "# testing\n", + "load(paste0(dir, '/soils_binary_ph_boot_rf.RData'))\n", + "load(paste0(dir, '/soils_binary_ph_boot_compLasso.RData'))" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "0.4323" + ], + "text/latex": [ + "0.4323" + ], + "text/markdown": [ + "0.4323" + ], + "text/plain": [ + "[1] 0.4323" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
2.5%
0.37
97.5%
0.5
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[2.5\\textbackslash{}\\%] 0.37\n", + "\\item[97.5\\textbackslash{}\\%] 0.5\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "2.5%\n", + ": 0.3797.5%\n", + ": 0.5\n", + "\n" + ], + "text/plain": [ + " 2.5% 97.5% \n", + " 0.37 0.50 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "diff_stab = (boot_compLasso$stab_index - boot_rf$stab_index)\n", + "mean(diff_stab)\n", + "quantile(diff_stab, probs = c(0.025, 0.975)) \n", + "# CI doesn't contain zero: compLasso is significantly more stable than RF" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "-0.0247120820917325" + ], + "text/latex": [ + "-0.0247120820917325" + ], + "text/markdown": [ + "-0.0247120820917325" + ], + "text/plain": [ + "[1] -0.02471208" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
2.5%
-0.0838574423480084
97.5%
0
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[2.5\\textbackslash{}\\%] -0.0838574423480084\n", + "\\item[97.5\\textbackslash{}\\%] 0\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "2.5%\n", + ": -0.083857442348008497.5%\n", + ": 0\n", + "\n" + ], + "text/plain": [ + " 2.5% 97.5% \n", + "-0.08385744 0.00000000 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "diff_ROC = (unlist(boot_compLasso$ROC_list) - unlist(boot_rf$ROC_list)) # use all 100*100 ROCs\n", + "mean(diff_ROC)\n", + "quantile(diff_ROC, probs = c(0.025, 0.975)) \n", + "# CI contain zero: compLasso is not significantly different from RF based on ROC" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + " Min. 1st Qu. Median Mean 3rd Qu. Max. \n", + "-0.24949 -0.04206 -0.02250 -0.02471 0.00000 0.03769 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "summary(diff_ROC)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/data_application/notebooks_application/1.1. BMI_DataPreparation.ipynb b/data_application/notebooks_application/1.1. BMI_DataPreparation.ipynb new file mode 100755 index 0000000..2a6fe2d --- /dev/null +++ b/data_application/notebooks_application/1.1. BMI_DataPreparation.ipynb @@ -0,0 +1,875 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### BMI dataset in Lin et al, 2014 \n", + "##### use unrarifed count table and retain microbes only at genus level (+ present at least one sample)\n", + "#### add 0.5 as pseudo count to zero counts" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 98
  2. \n", + "\t
  3. 263
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 98\n", + "\\item 263\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 98\n", + "2. 263\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 98 263" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
Bacteria.ActinobacteriaBacteria.BacteroidetesBacteria.CyanobacteriaBacteria.FirmicutesBacteria.FusobacteriaBacteria.LentisphaeraeBacteria.OD1Bacteria.ProteobacteriaBacteria.SpirochaetesBacteria.Synergistetes...Bacteria.Proteobacteria.Gammaproteobacteria.Pseudomonadales.Moraxellaceae.EnhydrobacterBacteria.Proteobacteria.Gammaproteobacteria.Pseudomonadales.Pseudomonadaceae.PseudomonasBacteria.Proteobacteria.Gammaproteobacteria.Vibrionales.Vibrionaceae.VibrioBacteria.Proteobacteria.Gammaproteobacteria.Xanthomonadales.Xanthomonadaceae.LysobacterBacteria.Proteobacteria.Gammaproteobacteria.Xanthomonadales.Xanthomonadaceae.StenotrophomonasBacteria.Spirochaetes.Spirochaetes.Spirochaetales.Brachyspiraceae.BrachyspiraBacteria.Spirochaetes.Spirochaetes.Spirochaetales.Spirochaetaceae.TreponemaBacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.CloacibacillusBacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.PyramidobacterBacteria.Verrucomicrobia.Verrucomicrobiae.Verrucomicrobiales.Verrucomicrobiaceae.Akkermansia
30011 50670 41530 0 0 534 0 0 ... 0 0 0 0 0 0 0 0 0 0
30030 46590 21770 0 0 105 0 0 ... 0 0 0 0 0 0 0 0 0 0
30040 43420 30080 2 0 134 0 0 ... 0 0 0 0 0 0 0 0 0 0
30068 29100 41470 0 0 459 0 0 ... 0 0 0 0 0 0 0 0 0 0
30075 56300 47050 0 0 214 0 0 ... 0 0 0 0 0 0 0 0 0 0
30085 18680 16190 0 0 17 0 0 ... 0 0 0 0 0 0 0 0 0 0
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll}\n", + " & Bacteria.Actinobacteria & Bacteria.Bacteroidetes & Bacteria.Cyanobacteria & Bacteria.Firmicutes & Bacteria.Fusobacteria & Bacteria.Lentisphaerae & Bacteria.OD1 & Bacteria.Proteobacteria & Bacteria.Spirochaetes & Bacteria.Synergistetes & ... & Bacteria.Proteobacteria.Gammaproteobacteria.Pseudomonadales.Moraxellaceae.Enhydrobacter & Bacteria.Proteobacteria.Gammaproteobacteria.Pseudomonadales.Pseudomonadaceae.Pseudomonas & Bacteria.Proteobacteria.Gammaproteobacteria.Vibrionales.Vibrionaceae.Vibrio & Bacteria.Proteobacteria.Gammaproteobacteria.Xanthomonadales.Xanthomonadaceae.Lysobacter & Bacteria.Proteobacteria.Gammaproteobacteria.Xanthomonadales.Xanthomonadaceae.Stenotrophomonas & Bacteria.Spirochaetes.Spirochaetes.Spirochaetales.Brachyspiraceae.Brachyspira & Bacteria.Spirochaetes.Spirochaetes.Spirochaetales.Spirochaetaceae.Treponema & Bacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.Cloacibacillus & Bacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.Pyramidobacter & Bacteria.Verrucomicrobia.Verrucomicrobiae.Verrucomicrobiales.Verrucomicrobiaceae.Akkermansia\\\\\n", + "\\hline\n", + "\t3001 & 1 & 5067 & 0 & 4153 & 0 & 0 & 0 & 534 & 0 & 0 & ... & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\\\\n", + "\t3003 & 0 & 4659 & 0 & 2177 & 0 & 0 & 0 & 105 & 0 & 0 & ... & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\\\\n", + "\t3004 & 0 & 4342 & 0 & 3008 & 0 & 2 & 0 & 134 & 0 & 0 & ... & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\\\\n", + "\t3006 & 8 & 2910 & 0 & 4147 & 0 & 0 & 0 & 459 & 0 & 0 & ... & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\\\\n", + "\t3007 & 5 & 5630 & 0 & 4705 & 0 & 0 & 0 & 214 & 0 & 0 & ... & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\\\\n", + "\t3008 & 5 & 1868 & 0 & 1619 & 0 & 0 & 0 & 17 & 0 & 0 & ... & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | Bacteria.Actinobacteria | Bacteria.Bacteroidetes | Bacteria.Cyanobacteria | Bacteria.Firmicutes | Bacteria.Fusobacteria | Bacteria.Lentisphaerae | Bacteria.OD1 | Bacteria.Proteobacteria | Bacteria.Spirochaetes | Bacteria.Synergistetes | ... | Bacteria.Proteobacteria.Gammaproteobacteria.Pseudomonadales.Moraxellaceae.Enhydrobacter | Bacteria.Proteobacteria.Gammaproteobacteria.Pseudomonadales.Pseudomonadaceae.Pseudomonas | Bacteria.Proteobacteria.Gammaproteobacteria.Vibrionales.Vibrionaceae.Vibrio | Bacteria.Proteobacteria.Gammaproteobacteria.Xanthomonadales.Xanthomonadaceae.Lysobacter | Bacteria.Proteobacteria.Gammaproteobacteria.Xanthomonadales.Xanthomonadaceae.Stenotrophomonas | Bacteria.Spirochaetes.Spirochaetes.Spirochaetales.Brachyspiraceae.Brachyspira | Bacteria.Spirochaetes.Spirochaetes.Spirochaetales.Spirochaetaceae.Treponema | Bacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.Cloacibacillus | Bacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.Pyramidobacter | Bacteria.Verrucomicrobia.Verrucomicrobiae.Verrucomicrobiales.Verrucomicrobiaceae.Akkermansia |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 3001 | 1 | 5067 | 0 | 4153 | 0 | 0 | 0 | 534 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "| 3003 | 0 | 4659 | 0 | 2177 | 0 | 0 | 0 | 105 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "| 3004 | 0 | 4342 | 0 | 3008 | 0 | 2 | 0 | 134 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "| 3006 | 8 | 2910 | 0 | 4147 | 0 | 0 | 0 | 459 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "| 3007 | 5 | 5630 | 0 | 4705 | 0 | 0 | 0 | 214 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "| 3008 | 5 | 1868 | 0 | 1619 | 0 | 0 | 0 | 17 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "\n" + ], + "text/plain": [ + " Bacteria.Actinobacteria Bacteria.Bacteroidetes Bacteria.Cyanobacteria\n", + "3001 1 5067 0 \n", + "3003 0 4659 0 \n", + "3004 0 4342 0 \n", + "3006 8 2910 0 \n", + "3007 5 5630 0 \n", + "3008 5 1868 0 \n", + " Bacteria.Firmicutes Bacteria.Fusobacteria Bacteria.Lentisphaerae\n", + "3001 4153 0 0 \n", + "3003 2177 0 0 \n", + "3004 3008 0 2 \n", + "3006 4147 0 0 \n", + "3007 4705 0 0 \n", + "3008 1619 0 0 \n", + " Bacteria.OD1 Bacteria.Proteobacteria Bacteria.Spirochaetes\n", + "3001 0 534 0 \n", + "3003 0 105 0 \n", + "3004 0 134 0 \n", + "3006 0 459 0 \n", + "3007 0 214 0 \n", + "3008 0 17 0 \n", + " Bacteria.Synergistetes ...\n", + "3001 0 ...\n", + "3003 0 ...\n", + "3004 0 ...\n", + "3006 0 ...\n", + "3007 0 ...\n", + "3008 0 ...\n", + " Bacteria.Proteobacteria.Gammaproteobacteria.Pseudomonadales.Moraxellaceae.Enhydrobacter\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Proteobacteria.Gammaproteobacteria.Pseudomonadales.Pseudomonadaceae.Pseudomonas\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Proteobacteria.Gammaproteobacteria.Vibrionales.Vibrionaceae.Vibrio\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Proteobacteria.Gammaproteobacteria.Xanthomonadales.Xanthomonadaceae.Lysobacter\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Proteobacteria.Gammaproteobacteria.Xanthomonadales.Xanthomonadaceae.Stenotrophomonas\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Spirochaetes.Spirochaetes.Spirochaetales.Brachyspiraceae.Brachyspira\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Spirochaetes.Spirochaetes.Spirochaetales.Spirochaetaceae.Treponema\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.Cloacibacillus\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.Pyramidobacter\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Verrucomicrobia.Verrucomicrobiae.Verrucomicrobiales.Verrucomicrobiaceae.Akkermansia\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# unrarefied microbe count table\n", + "count <- as.matrix(read.table(\"../../code_Lin/cvs/data/combo_count_tab.txt\")) \n", + "dim(count)\n", + "head(count)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 98
  2. \n", + "\t
  3. 87
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 98\n", + "\\item 87\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 98\n", + "2. 87\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 98 87" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.AsaccharobacterBacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.AtopobiumBacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.CollinsellaBacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.EggerthellaBacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.GordonibacterBacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.OlsenellaBacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.SlackiaBacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Bacteroidaceae.BacteroidesBacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Porphyromonadaceae.BarnesiellaBacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Porphyromonadaceae.Butyricimonas...Bacteria.Proteobacteria.Betaproteobacteria.Burkholderiales.Oxalobacteraceae.OxalobacterBacteria.Proteobacteria.Betaproteobacteria.Neisseriales.Neisseriaceae.NeisseriaBacteria.Proteobacteria.Deltaproteobacteria.Desulfovibrionales.Desulfovibrionaceae.DesulfovibrioBacteria.Proteobacteria.Epsilonproteobacteria.Campylobacterales.Campylobacteraceae.CampylobacterBacteria.Proteobacteria.Gammaproteobacteria.Aeromonadales.Succinivibrionaceae.SuccinivibrioBacteria.Proteobacteria.Gammaproteobacteria.Pseudomonadales.Pseudomonadaceae.PseudomonasBacteria.Proteobacteria.Gammaproteobacteria.Xanthomonadales.Xanthomonadaceae.StenotrophomonasBacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.CloacibacillusBacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.PyramidobacterBacteria.Verrucomicrobia.Verrucomicrobiae.Verrucomicrobiales.Verrucomicrobiaceae.Akkermansia
30010 0 0 0 0 0 0 2878 0 69 ... 0 0 0 0 0 0 0 0 0 0
30030 0 0 0 0 0 0 578180 0 ... 2 0 0 1 0 0 0 0 0 0
30040 0 0 0 0 0 0 3503143 0 ... 0 0 0 0 0 0 0 0 0 0
30060 0 0 0 0 0 0 2162 1 0 ... 3 0 0 0 0 0 0 0 0 0
30070 0 0 2 0 0 0 4453 0 0 ... 9 0 0 1 0 0 0 0 0 0
30080 0 0 1 0 0 0 950237 19 ... 4 0 0 0 0 0 0 0 0 0
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll}\n", + " & Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Asaccharobacter & Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Atopobium & Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Collinsella & Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Eggerthella & Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Gordonibacter & Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Olsenella & Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Slackia & Bacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Bacteroidaceae.Bacteroides & Bacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Porphyromonadaceae.Barnesiella & Bacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Porphyromonadaceae.Butyricimonas & ... & Bacteria.Proteobacteria.Betaproteobacteria.Burkholderiales.Oxalobacteraceae.Oxalobacter & Bacteria.Proteobacteria.Betaproteobacteria.Neisseriales.Neisseriaceae.Neisseria & Bacteria.Proteobacteria.Deltaproteobacteria.Desulfovibrionales.Desulfovibrionaceae.Desulfovibrio & Bacteria.Proteobacteria.Epsilonproteobacteria.Campylobacterales.Campylobacteraceae.Campylobacter & Bacteria.Proteobacteria.Gammaproteobacteria.Aeromonadales.Succinivibrionaceae.Succinivibrio & Bacteria.Proteobacteria.Gammaproteobacteria.Pseudomonadales.Pseudomonadaceae.Pseudomonas & Bacteria.Proteobacteria.Gammaproteobacteria.Xanthomonadales.Xanthomonadaceae.Stenotrophomonas & Bacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.Cloacibacillus & Bacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.Pyramidobacter & Bacteria.Verrucomicrobia.Verrucomicrobiae.Verrucomicrobiales.Verrucomicrobiaceae.Akkermansia\\\\\n", + "\\hline\n", + "\t3001 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 2878 & 0 & 69 & ... & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\\\\n", + "\t3003 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 578 & 180 & 0 & ... & 2 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\\\\n", + "\t3004 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 3503 & 143 & 0 & ... & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\\\\n", + "\t3006 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 2162 & 1 & 0 & ... & 3 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\\\\n", + "\t3007 & 0 & 0 & 0 & 2 & 0 & 0 & 0 & 4453 & 0 & 0 & ... & 9 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\\\\n", + "\t3008 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 950 & 237 & 19 & ... & 4 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Asaccharobacter | Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Atopobium | Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Collinsella | Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Eggerthella | Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Gordonibacter | Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Olsenella | Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Slackia | Bacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Bacteroidaceae.Bacteroides | Bacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Porphyromonadaceae.Barnesiella | Bacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Porphyromonadaceae.Butyricimonas | ... | Bacteria.Proteobacteria.Betaproteobacteria.Burkholderiales.Oxalobacteraceae.Oxalobacter | Bacteria.Proteobacteria.Betaproteobacteria.Neisseriales.Neisseriaceae.Neisseria | Bacteria.Proteobacteria.Deltaproteobacteria.Desulfovibrionales.Desulfovibrionaceae.Desulfovibrio | Bacteria.Proteobacteria.Epsilonproteobacteria.Campylobacterales.Campylobacteraceae.Campylobacter | Bacteria.Proteobacteria.Gammaproteobacteria.Aeromonadales.Succinivibrionaceae.Succinivibrio | Bacteria.Proteobacteria.Gammaproteobacteria.Pseudomonadales.Pseudomonadaceae.Pseudomonas | Bacteria.Proteobacteria.Gammaproteobacteria.Xanthomonadales.Xanthomonadaceae.Stenotrophomonas | Bacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.Cloacibacillus | Bacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.Pyramidobacter | Bacteria.Verrucomicrobia.Verrucomicrobiae.Verrucomicrobiales.Verrucomicrobiaceae.Akkermansia |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 3001 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2878 | 0 | 69 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "| 3003 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 578 | 180 | 0 | ... | 2 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "| 3004 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 3503 | 143 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "| 3006 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2162 | 1 | 0 | ... | 3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "| 3007 | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 4453 | 0 | 0 | ... | 9 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "| 3008 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 950 | 237 | 19 | ... | 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "\n" + ], + "text/plain": [ + " Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Asaccharobacter\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Atopobium\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Collinsella\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Eggerthella\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 2 \n", + "3008 1 \n", + " Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Gordonibacter\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Olsenella\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Slackia\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Bacteroidaceae.Bacteroides\n", + "3001 2878 \n", + "3003 578 \n", + "3004 3503 \n", + "3006 2162 \n", + "3007 4453 \n", + "3008 950 \n", + " Bacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Porphyromonadaceae.Barnesiella\n", + "3001 0 \n", + "3003 180 \n", + "3004 143 \n", + "3006 1 \n", + "3007 0 \n", + "3008 237 \n", + " Bacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Porphyromonadaceae.Butyricimonas\n", + "3001 69 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 19 \n", + " ...\n", + "3001 ...\n", + "3003 ...\n", + "3004 ...\n", + "3006 ...\n", + "3007 ...\n", + "3008 ...\n", + " Bacteria.Proteobacteria.Betaproteobacteria.Burkholderiales.Oxalobacteraceae.Oxalobacter\n", + "3001 0 \n", + "3003 2 \n", + "3004 0 \n", + "3006 3 \n", + "3007 9 \n", + "3008 4 \n", + " Bacteria.Proteobacteria.Betaproteobacteria.Neisseriales.Neisseriaceae.Neisseria\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Proteobacteria.Deltaproteobacteria.Desulfovibrionales.Desulfovibrionaceae.Desulfovibrio\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Proteobacteria.Epsilonproteobacteria.Campylobacterales.Campylobacteraceae.Campylobacter\n", + "3001 0 \n", + "3003 1 \n", + "3004 0 \n", + "3006 0 \n", + "3007 1 \n", + "3008 0 \n", + " Bacteria.Proteobacteria.Gammaproteobacteria.Aeromonadales.Succinivibrionaceae.Succinivibrio\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Proteobacteria.Gammaproteobacteria.Pseudomonadales.Pseudomonadaceae.Pseudomonas\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Proteobacteria.Gammaproteobacteria.Xanthomonadales.Xanthomonadaceae.Stenotrophomonas\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.Cloacibacillus\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.Pyramidobacter\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 \n", + " Bacteria.Verrucomicrobia.Verrucomicrobiae.Verrucomicrobiales.Verrucomicrobiaceae.Akkermansia\n", + "3001 0 \n", + "3003 0 \n", + "3004 0 \n", + "3006 0 \n", + "3007 0 \n", + "3008 0 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# retain only microbes at genus level and exist at least one sample\n", + "depth <- sapply(strsplit(colnames(count), \"\\\\.\"), length)\n", + "x <- count[, depth == 6 & colSums(count != 0) >= 1] # 98 * 87\n", + "dim(x)\n", + "head(x)" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 98
  2. \n", + "\t
  3. 87
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 98\n", + "\\item 87\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 98\n", + "2. 87\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 98 87" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.AsaccharobacterBacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.AtopobiumBacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.CollinsellaBacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.EggerthellaBacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.GordonibacterBacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.OlsenellaBacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.SlackiaBacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Bacteroidaceae.BacteroidesBacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Porphyromonadaceae.BarnesiellaBacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Porphyromonadaceae.Butyricimonas...Bacteria.Proteobacteria.Betaproteobacteria.Burkholderiales.Oxalobacteraceae.OxalobacterBacteria.Proteobacteria.Betaproteobacteria.Neisseriales.Neisseriaceae.NeisseriaBacteria.Proteobacteria.Deltaproteobacteria.Desulfovibrionales.Desulfovibrionaceae.DesulfovibrioBacteria.Proteobacteria.Epsilonproteobacteria.Campylobacterales.Campylobacteraceae.CampylobacterBacteria.Proteobacteria.Gammaproteobacteria.Aeromonadales.Succinivibrionaceae.SuccinivibrioBacteria.Proteobacteria.Gammaproteobacteria.Pseudomonadales.Pseudomonadaceae.PseudomonasBacteria.Proteobacteria.Gammaproteobacteria.Xanthomonadales.Xanthomonadaceae.StenotrophomonasBacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.CloacibacillusBacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.PyramidobacterBacteria.Verrucomicrobia.Verrucomicrobiae.Verrucomicrobiales.Verrucomicrobiaceae.Akkermansia
3001-9.500918 -9.500918 -9.500918 -9.500918 -9.500918 -9.500918 -9.500918 -0.8429202-9.500918 -4.573665 ... -9.500918 -9.500918 -9.500918 -9.500918 -9.500918 -9.500918 -9.500918 -9.500918 -9.500918 -9.500918
3003-9.278560 -9.278560 -9.278560 -9.278560 -9.278560 -9.278560 -9.278560 -2.2258386-3.392456 -9.278560 ... -7.892265 -9.278560 -9.278560 -8.585412 -9.278560 -9.278560 -9.278560 -9.278560 -9.278560 -9.278560
3004-9.269646 -9.269646 -9.269646 -9.269646 -9.269646 -9.269646 -9.269646 -0.4151243-3.613655 -9.269646 ... -9.269646 -9.269646 -9.269646 -9.269646 -9.269646 -9.269646 -9.269646 -9.269646 -9.269646 -9.269646
3006-9.114600 -9.114600 -9.114600 -9.114600 -9.114600 -9.114600 -9.114600 -0.7426639-8.421453 -9.114600 ... -7.322841 -9.114600 -9.114600 -9.114600 -9.114600 -9.114600 -9.114600 -9.114600 -9.114600 -9.114600
3007-9.643356 -9.643356 -9.643356 -8.257061 -9.643356 -9.643356 -9.643356 -0.5488753-9.643356 -9.643356 ... -6.752984 -9.643356 -9.643356 -8.950209 -9.643356 -9.643356 -9.643356 -9.643356 -9.643356 -9.643356
3008-8.387085 -8.387085 -8.387085 -7.693937 -8.387085 -8.387085 -8.387085 -0.8374753-2.225877 -4.749498 ... -6.307643 -8.387085 -8.387085 -8.387085 -8.387085 -8.387085 -8.387085 -8.387085 -8.387085 -8.387085
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll}\n", + " & Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Asaccharobacter & Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Atopobium & Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Collinsella & Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Eggerthella & Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Gordonibacter & Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Olsenella & Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Slackia & Bacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Bacteroidaceae.Bacteroides & Bacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Porphyromonadaceae.Barnesiella & Bacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Porphyromonadaceae.Butyricimonas & ... & Bacteria.Proteobacteria.Betaproteobacteria.Burkholderiales.Oxalobacteraceae.Oxalobacter & Bacteria.Proteobacteria.Betaproteobacteria.Neisseriales.Neisseriaceae.Neisseria & Bacteria.Proteobacteria.Deltaproteobacteria.Desulfovibrionales.Desulfovibrionaceae.Desulfovibrio & Bacteria.Proteobacteria.Epsilonproteobacteria.Campylobacterales.Campylobacteraceae.Campylobacter & Bacteria.Proteobacteria.Gammaproteobacteria.Aeromonadales.Succinivibrionaceae.Succinivibrio & Bacteria.Proteobacteria.Gammaproteobacteria.Pseudomonadales.Pseudomonadaceae.Pseudomonas & Bacteria.Proteobacteria.Gammaproteobacteria.Xanthomonadales.Xanthomonadaceae.Stenotrophomonas & Bacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.Cloacibacillus & Bacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.Pyramidobacter & Bacteria.Verrucomicrobia.Verrucomicrobiae.Verrucomicrobiales.Verrucomicrobiaceae.Akkermansia\\\\\n", + "\\hline\n", + "\t3001 & -9.500918 & -9.500918 & -9.500918 & -9.500918 & -9.500918 & -9.500918 & -9.500918 & -0.8429202 & -9.500918 & -4.573665 & ... & -9.500918 & -9.500918 & -9.500918 & -9.500918 & -9.500918 & -9.500918 & -9.500918 & -9.500918 & -9.500918 & -9.500918 \\\\\n", + "\t3003 & -9.278560 & -9.278560 & -9.278560 & -9.278560 & -9.278560 & -9.278560 & -9.278560 & -2.2258386 & -3.392456 & -9.278560 & ... & -7.892265 & -9.278560 & -9.278560 & -8.585412 & -9.278560 & -9.278560 & -9.278560 & -9.278560 & -9.278560 & -9.278560 \\\\\n", + "\t3004 & -9.269646 & -9.269646 & -9.269646 & -9.269646 & -9.269646 & -9.269646 & -9.269646 & -0.4151243 & -3.613655 & -9.269646 & ... & -9.269646 & -9.269646 & -9.269646 & -9.269646 & -9.269646 & -9.269646 & -9.269646 & -9.269646 & -9.269646 & -9.269646 \\\\\n", + "\t3006 & -9.114600 & -9.114600 & -9.114600 & -9.114600 & -9.114600 & -9.114600 & -9.114600 & -0.7426639 & -8.421453 & -9.114600 & ... & -7.322841 & -9.114600 & -9.114600 & -9.114600 & -9.114600 & -9.114600 & -9.114600 & -9.114600 & -9.114600 & -9.114600 \\\\\n", + "\t3007 & -9.643356 & -9.643356 & -9.643356 & -8.257061 & -9.643356 & -9.643356 & -9.643356 & -0.5488753 & -9.643356 & -9.643356 & ... & -6.752984 & -9.643356 & -9.643356 & -8.950209 & -9.643356 & -9.643356 & -9.643356 & -9.643356 & -9.643356 & -9.643356 \\\\\n", + "\t3008 & -8.387085 & -8.387085 & -8.387085 & -7.693937 & -8.387085 & -8.387085 & -8.387085 & -0.8374753 & -2.225877 & -4.749498 & ... & -6.307643 & -8.387085 & -8.387085 & -8.387085 & -8.387085 & -8.387085 & -8.387085 & -8.387085 & -8.387085 & -8.387085 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Asaccharobacter | Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Atopobium | Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Collinsella | Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Eggerthella | Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Gordonibacter | Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Olsenella | Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Slackia | Bacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Bacteroidaceae.Bacteroides | Bacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Porphyromonadaceae.Barnesiella | Bacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Porphyromonadaceae.Butyricimonas | ... | Bacteria.Proteobacteria.Betaproteobacteria.Burkholderiales.Oxalobacteraceae.Oxalobacter | Bacteria.Proteobacteria.Betaproteobacteria.Neisseriales.Neisseriaceae.Neisseria | Bacteria.Proteobacteria.Deltaproteobacteria.Desulfovibrionales.Desulfovibrionaceae.Desulfovibrio | Bacteria.Proteobacteria.Epsilonproteobacteria.Campylobacterales.Campylobacteraceae.Campylobacter | Bacteria.Proteobacteria.Gammaproteobacteria.Aeromonadales.Succinivibrionaceae.Succinivibrio | Bacteria.Proteobacteria.Gammaproteobacteria.Pseudomonadales.Pseudomonadaceae.Pseudomonas | Bacteria.Proteobacteria.Gammaproteobacteria.Xanthomonadales.Xanthomonadaceae.Stenotrophomonas | Bacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.Cloacibacillus | Bacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.Pyramidobacter | Bacteria.Verrucomicrobia.Verrucomicrobiae.Verrucomicrobiales.Verrucomicrobiaceae.Akkermansia |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 3001 | -9.500918 | -9.500918 | -9.500918 | -9.500918 | -9.500918 | -9.500918 | -9.500918 | -0.8429202 | -9.500918 | -4.573665 | ... | -9.500918 | -9.500918 | -9.500918 | -9.500918 | -9.500918 | -9.500918 | -9.500918 | -9.500918 | -9.500918 | -9.500918 |\n", + "| 3003 | -9.278560 | -9.278560 | -9.278560 | -9.278560 | -9.278560 | -9.278560 | -9.278560 | -2.2258386 | -3.392456 | -9.278560 | ... | -7.892265 | -9.278560 | -9.278560 | -8.585412 | -9.278560 | -9.278560 | -9.278560 | -9.278560 | -9.278560 | -9.278560 |\n", + "| 3004 | -9.269646 | -9.269646 | -9.269646 | -9.269646 | -9.269646 | -9.269646 | -9.269646 | -0.4151243 | -3.613655 | -9.269646 | ... | -9.269646 | -9.269646 | -9.269646 | -9.269646 | -9.269646 | -9.269646 | -9.269646 | -9.269646 | -9.269646 | -9.269646 |\n", + "| 3006 | -9.114600 | -9.114600 | -9.114600 | -9.114600 | -9.114600 | -9.114600 | -9.114600 | -0.7426639 | -8.421453 | -9.114600 | ... | -7.322841 | -9.114600 | -9.114600 | -9.114600 | -9.114600 | -9.114600 | -9.114600 | -9.114600 | -9.114600 | -9.114600 |\n", + "| 3007 | -9.643356 | -9.643356 | -9.643356 | -8.257061 | -9.643356 | -9.643356 | -9.643356 | -0.5488753 | -9.643356 | -9.643356 | ... | -6.752984 | -9.643356 | -9.643356 | -8.950209 | -9.643356 | -9.643356 | -9.643356 | -9.643356 | -9.643356 | -9.643356 |\n", + "| 3008 | -8.387085 | -8.387085 | -8.387085 | -7.693937 | -8.387085 | -8.387085 | -8.387085 | -0.8374753 | -2.225877 | -4.749498 | ... | -6.307643 | -8.387085 | -8.387085 | -8.387085 | -8.387085 | -8.387085 | -8.387085 | -8.387085 | -8.387085 | -8.387085 |\n", + "\n" + ], + "text/plain": [ + " Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Asaccharobacter\n", + "3001 -9.500918 \n", + "3003 -9.278560 \n", + "3004 -9.269646 \n", + "3006 -9.114600 \n", + "3007 -9.643356 \n", + "3008 -8.387085 \n", + " Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Atopobium\n", + "3001 -9.500918 \n", + "3003 -9.278560 \n", + "3004 -9.269646 \n", + "3006 -9.114600 \n", + "3007 -9.643356 \n", + "3008 -8.387085 \n", + " Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Collinsella\n", + "3001 -9.500918 \n", + "3003 -9.278560 \n", + "3004 -9.269646 \n", + "3006 -9.114600 \n", + "3007 -9.643356 \n", + "3008 -8.387085 \n", + " Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Eggerthella\n", + "3001 -9.500918 \n", + "3003 -9.278560 \n", + "3004 -9.269646 \n", + "3006 -9.114600 \n", + "3007 -8.257061 \n", + "3008 -7.693937 \n", + " Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Gordonibacter\n", + "3001 -9.500918 \n", + "3003 -9.278560 \n", + "3004 -9.269646 \n", + "3006 -9.114600 \n", + "3007 -9.643356 \n", + "3008 -8.387085 \n", + " Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Olsenella\n", + "3001 -9.500918 \n", + "3003 -9.278560 \n", + "3004 -9.269646 \n", + "3006 -9.114600 \n", + "3007 -9.643356 \n", + "3008 -8.387085 \n", + " Bacteria.Actinobacteria.Actinobacteria.Coriobacteriales.Coriobacteriaceae.Slackia\n", + "3001 -9.500918 \n", + "3003 -9.278560 \n", + "3004 -9.269646 \n", + "3006 -9.114600 \n", + "3007 -9.643356 \n", + "3008 -8.387085 \n", + " Bacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Bacteroidaceae.Bacteroides\n", + "3001 -0.8429202 \n", + "3003 -2.2258386 \n", + "3004 -0.4151243 \n", + "3006 -0.7426639 \n", + "3007 -0.5488753 \n", + "3008 -0.8374753 \n", + " Bacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Porphyromonadaceae.Barnesiella\n", + "3001 -9.500918 \n", + "3003 -3.392456 \n", + "3004 -3.613655 \n", + "3006 -8.421453 \n", + "3007 -9.643356 \n", + "3008 -2.225877 \n", + " Bacteria.Bacteroidetes.Bacteroidia.Bacteroidales.Porphyromonadaceae.Butyricimonas\n", + "3001 -4.573665 \n", + "3003 -9.278560 \n", + "3004 -9.269646 \n", + "3006 -9.114600 \n", + "3007 -9.643356 \n", + "3008 -4.749498 \n", + " ...\n", + "3001 ...\n", + "3003 ...\n", + "3004 ...\n", + "3006 ...\n", + "3007 ...\n", + "3008 ...\n", + " Bacteria.Proteobacteria.Betaproteobacteria.Burkholderiales.Oxalobacteraceae.Oxalobacter\n", + "3001 -9.500918 \n", + "3003 -7.892265 \n", + "3004 -9.269646 \n", + "3006 -7.322841 \n", + "3007 -6.752984 \n", + "3008 -6.307643 \n", + " Bacteria.Proteobacteria.Betaproteobacteria.Neisseriales.Neisseriaceae.Neisseria\n", + "3001 -9.500918 \n", + "3003 -9.278560 \n", + "3004 -9.269646 \n", + "3006 -9.114600 \n", + "3007 -9.643356 \n", + "3008 -8.387085 \n", + " Bacteria.Proteobacteria.Deltaproteobacteria.Desulfovibrionales.Desulfovibrionaceae.Desulfovibrio\n", + "3001 -9.500918 \n", + "3003 -9.278560 \n", + "3004 -9.269646 \n", + "3006 -9.114600 \n", + "3007 -9.643356 \n", + "3008 -8.387085 \n", + " Bacteria.Proteobacteria.Epsilonproteobacteria.Campylobacterales.Campylobacteraceae.Campylobacter\n", + "3001 -9.500918 \n", + "3003 -8.585412 \n", + "3004 -9.269646 \n", + "3006 -9.114600 \n", + "3007 -8.950209 \n", + "3008 -8.387085 \n", + " Bacteria.Proteobacteria.Gammaproteobacteria.Aeromonadales.Succinivibrionaceae.Succinivibrio\n", + "3001 -9.500918 \n", + "3003 -9.278560 \n", + "3004 -9.269646 \n", + "3006 -9.114600 \n", + "3007 -9.643356 \n", + "3008 -8.387085 \n", + " Bacteria.Proteobacteria.Gammaproteobacteria.Pseudomonadales.Pseudomonadaceae.Pseudomonas\n", + "3001 -9.500918 \n", + "3003 -9.278560 \n", + "3004 -9.269646 \n", + "3006 -9.114600 \n", + "3007 -9.643356 \n", + "3008 -8.387085 \n", + " Bacteria.Proteobacteria.Gammaproteobacteria.Xanthomonadales.Xanthomonadaceae.Stenotrophomonas\n", + "3001 -9.500918 \n", + "3003 -9.278560 \n", + "3004 -9.269646 \n", + "3006 -9.114600 \n", + "3007 -9.643356 \n", + "3008 -8.387085 \n", + " Bacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.Cloacibacillus\n", + "3001 -9.500918 \n", + "3003 -9.278560 \n", + "3004 -9.269646 \n", + "3006 -9.114600 \n", + "3007 -9.643356 \n", + "3008 -8.387085 \n", + " Bacteria.Synergistetes.Synergistia.Synergistales.Synergistaceae.Pyramidobacter\n", + "3001 -9.500918 \n", + "3003 -9.278560 \n", + "3004 -9.269646 \n", + "3006 -9.114600 \n", + "3007 -9.643356 \n", + "3008 -8.387085 \n", + " Bacteria.Verrucomicrobia.Verrucomicrobiae.Verrucomicrobiales.Verrucomicrobiaceae.Akkermansia\n", + "3001 -9.500918 \n", + "3003 -9.278560 \n", + "3004 -9.269646 \n", + "3006 -9.114600 \n", + "3007 -9.643356 \n", + "3008 -8.387085 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# add pesudo count 0.5\n", + "x[x == 0] <- 0.5\n", + "x <- x/rowSums(x) # relative abundance\n", + "taxa <- log(x)\n", + "dim(taxa)\n", + "head(taxa)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
pidvisitdatebirthdatesex1m2fheightcmweightkgvdatebdateageheightmbmizbmiuszbmicatusbmicat1norm2ow3ob
3029 12-Apr-101-May-86 1 172.43 83.0 18364 9617 23.94798 1.7243 27.91595 NA 2
3030 12-Apr-1022-May-871 178.87 70.3 18364 10003 22.89117 1.7887 21.97254 NA 1
3031 20-Apr-101-Dec-82 2 157.60 52.0 18372 8370 27.38398 1.5760 20.93586 NA 1
3032 22-Apr-109-Feb-86 1 188.10 89.6 18374 9536 24.19712 1.8810 25.32389 NA 2
3033 22-Apr-109-Apr-86 2 170.03 65.2 18374 9595 24.03559 1.7003 22.55259 NA 1
3034 28-Apr-106-Feb-86 2 162.16 59.9 18380 9533 24.22177 1.6216 22.77925 NA 1
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|llllllllllllll}\n", + " pid & visitdate & birthdate & sex1m2f & heightcm & weightkg & vdate & bdate & age & heightm & bmi & zbmius & zbmicatus & bmicat1norm2ow3ob\\\\\n", + "\\hline\n", + "\t 3029 & 12-Apr-10 & 1-May-86 & 1 & 172.43 & 83.0 & 18364 & 9617 & 23.94798 & 1.7243 & 27.91595 & NA & & 2 \\\\\n", + "\t 3030 & 12-Apr-10 & 22-May-87 & 1 & 178.87 & 70.3 & 18364 & 10003 & 22.89117 & 1.7887 & 21.97254 & NA & & 1 \\\\\n", + "\t 3031 & 20-Apr-10 & 1-Dec-82 & 2 & 157.60 & 52.0 & 18372 & 8370 & 27.38398 & 1.5760 & 20.93586 & NA & & 1 \\\\\n", + "\t 3032 & 22-Apr-10 & 9-Feb-86 & 1 & 188.10 & 89.6 & 18374 & 9536 & 24.19712 & 1.8810 & 25.32389 & NA & & 2 \\\\\n", + "\t 3033 & 22-Apr-10 & 9-Apr-86 & 2 & 170.03 & 65.2 & 18374 & 9595 & 24.03559 & 1.7003 & 22.55259 & NA & & 1 \\\\\n", + "\t 3034 & 28-Apr-10 & 6-Feb-86 & 2 & 162.16 & 59.9 & 18380 & 9533 & 24.22177 & 1.6216 & 22.77925 & NA & & 1 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| pid | visitdate | birthdate | sex1m2f | heightcm | weightkg | vdate | bdate | age | heightm | bmi | zbmius | zbmicatus | bmicat1norm2ow3ob |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 3029 | 12-Apr-10 | 1-May-86 | 1 | 172.43 | 83.0 | 18364 | 9617 | 23.94798 | 1.7243 | 27.91595 | NA | | 2 |\n", + "| 3030 | 12-Apr-10 | 22-May-87 | 1 | 178.87 | 70.3 | 18364 | 10003 | 22.89117 | 1.7887 | 21.97254 | NA | | 1 |\n", + "| 3031 | 20-Apr-10 | 1-Dec-82 | 2 | 157.60 | 52.0 | 18372 | 8370 | 27.38398 | 1.5760 | 20.93586 | NA | | 1 |\n", + "| 3032 | 22-Apr-10 | 9-Feb-86 | 1 | 188.10 | 89.6 | 18374 | 9536 | 24.19712 | 1.8810 | 25.32389 | NA | | 2 |\n", + "| 3033 | 22-Apr-10 | 9-Apr-86 | 2 | 170.03 | 65.2 | 18374 | 9595 | 24.03559 | 1.7003 | 22.55259 | NA | | 1 |\n", + "| 3034 | 28-Apr-10 | 6-Feb-86 | 2 | 162.16 | 59.9 | 18380 | 9533 | 24.22177 | 1.6216 | 22.77925 | NA | | 1 |\n", + "\n" + ], + "text/plain": [ + " pid visitdate birthdate sex1m2f heightcm weightkg vdate bdate age \n", + "1 3029 12-Apr-10 1-May-86 1 172.43 83.0 18364 9617 23.94798\n", + "2 3030 12-Apr-10 22-May-87 1 178.87 70.3 18364 10003 22.89117\n", + "3 3031 20-Apr-10 1-Dec-82 2 157.60 52.0 18372 8370 27.38398\n", + "4 3032 22-Apr-10 9-Feb-86 1 188.10 89.6 18374 9536 24.19712\n", + "5 3033 22-Apr-10 9-Apr-86 2 170.03 65.2 18374 9595 24.03559\n", + "6 3034 28-Apr-10 6-Feb-86 2 162.16 59.9 18380 9533 24.22177\n", + " heightm bmi zbmius zbmicatus bmicat1norm2ow3ob\n", + "1 1.7243 27.91595 NA 2 \n", + "2 1.7887 21.97254 NA 1 \n", + "3 1.5760 20.93586 NA 1 \n", + "4 1.8810 25.32389 NA 2 \n", + "5 1.7003 22.55259 NA 1 \n", + "6 1.6216 22.77925 NA 1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "98" + ], + "text/latex": [ + "98" + ], + "text/markdown": [ + "98" + ], + "text/plain": [ + "[1] 98" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 21.6186
  2. \n", + "\t
  3. 21.82244
  4. \n", + "\t
  5. 20.03762
  6. \n", + "\t
  7. 20.82412
  8. \n", + "\t
  9. 22.66875
  10. \n", + "\t
  11. 24.97552
  12. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 21.6186\n", + "\\item 21.82244\n", + "\\item 20.03762\n", + "\\item 20.82412\n", + "\\item 22.66875\n", + "\\item 24.97552\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 21.6186\n", + "2. 21.82244\n", + "3. 20.03762\n", + "4. 20.82412\n", + "5. 22.66875\n", + "6. 24.97552\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 21.61860 21.82244 20.03762 20.82412 22.66875 24.97552" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# metadata\n", + "demo <- read.delim(\"../../code_Lin/cvs/data/demographic.txt\")\n", + "head(demo)\n", + "y <- demo$bmi[match(rownames(count), demo$pid)]\n", + "length(y)\n", + "head(y)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "'matrix'" + ], + "text/latex": [ + "'matrix'" + ], + "text/markdown": [ + "'matrix'" + ], + "text/plain": [ + "[1] \"matrix\"" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "'numeric'" + ], + "text/latex": [ + "'numeric'" + ], + "text/markdown": [ + "'numeric'" + ], + "text/plain": [ + "[1] \"numeric\"" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check datatype\n", + "class(taxa); class(y)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "# save processed data\n", + "save(y, taxa, file='../BMI/BMI_Lin_2014.RData')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/data_application/notebooks_application/1.2 BMI_results_cts.ipynb b/data_application/notebooks_application/1.2 BMI_results_cts.ipynb new file mode 100755 index 0000000..3d0c385 --- /dev/null +++ b/data_application/notebooks_application/1.2 BMI_results_cts.ipynb @@ -0,0 +1,402 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### BMI microbiome data application results for continuous outcome" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### method comparisons" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "load('../BMI/results_cts/BMI_compLasso.RData')\n", + "load('../BMI/results_cts/BMI_elnet.RData')\n", + "load('../BMI/results_cts/BMI_lasso.RData')\n", + "load('../BMI/results_cts/BMI_rf.RData')" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 0.22
  2. \n", + "\t
  3. 21.59
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 0.22\n", + "\\item 21.59\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 0.22\n", + "2. 21.59\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 0.22 21.59" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "c(out_compLasso$stab_index, out_compLasso$MSE_mean)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 0.14
  2. \n", + "\t
  3. 24.07
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 0.14\n", + "\\item 24.07\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 0.14\n", + "2. 24.07\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 0.14 24.07" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "c(out_lasso$stab_index, out_lasso$MSE_mean) " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 0.23
  2. \n", + "\t
  3. 25.33
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 0.23\n", + "\\item 25.33\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 0.23\n", + "2. 25.33\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 0.23 25.33" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "c(out_elnet$stab_index, out_elnet$MSE_mean)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 0.02
  2. \n", + "\t
  3. 4.99
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 0.02\n", + "\\item 4.99\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 0.02\n", + "2. 4.99\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 0.02 4.99" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "c(out_rf$stab_index, out_rf$MSE_mean)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
datasetmethodmsestability
bmi_gut lasso 24.07 0.14
bmi_gut elent 25.33 0.23
bmi_gut rf 4.99 0.02
bmi_gut compLasso21.59 0.22
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|llll}\n", + " dataset & method & mse & stability\\\\\n", + "\\hline\n", + "\t bmi\\_gut & lasso & 24.07 & 0.14 \\\\\n", + "\t bmi\\_gut & elent & 25.33 & 0.23 \\\\\n", + "\t bmi\\_gut & rf & 4.99 & 0.02 \\\\\n", + "\t bmi\\_gut & compLasso & 21.59 & 0.22 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| dataset | method | mse | stability |\n", + "|---|---|---|---|\n", + "| bmi_gut | lasso | 24.07 | 0.14 |\n", + "| bmi_gut | elent | 25.33 | 0.23 |\n", + "| bmi_gut | rf | 4.99 | 0.02 |\n", + "| bmi_gut | compLasso | 21.59 | 0.22 |\n", + "\n" + ], + "text/plain": [ + " dataset method mse stability\n", + "1 bmi_gut lasso 24.07 0.14 \n", + "2 bmi_gut elent 25.33 0.23 \n", + "3 bmi_gut rf 4.99 0.02 \n", + "4 bmi_gut compLasso 21.59 0.22 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# combine and export results\n", + "bmi_gut = as.data.frame(matrix(NA, nrow=4, ncol=4))\n", + "colnames(bmi_gut) = c('dataset', 'method', 'mse', 'stability')\n", + "bmi_gut$dataset = 'bmi_gut'\n", + "bmi_gut$method = c('lasso', 'elent', 'rf', 'compLasso')\n", + "bmi_gut$mse = c(out_lasso$MSE_mean, out_elnet$MSE_mean, out_rf$MSE_mean, out_compLasso$MSE_mean)\n", + "bmi_gut$stability = c(out_lasso$stab_index, out_elnet$stab_index, out_rf$stab_index, out_compLasso$stab_index)\n", + "bmi_gut" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### hypothesis testing" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "load('../BMI/results_cts/BMI_boot_compLasso.RData')\n", + "load('../BMI/results_cts/BMI_boot_rf.RData')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "0.2659" + ], + "text/latex": [ + "0.2659" + ], + "text/markdown": [ + "0.2659" + ], + "text/plain": [ + "[1] 0.2659" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\t
2.5%
\n", + "\t\t
0.17475
\n", + "\t
97.5%
\n", + "\t\t
0.34
\n", + "
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[2.5\\textbackslash{}\\%] 0.17475\n", + "\\item[97.5\\textbackslash{}\\%] 0.34\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "2.5%\n", + ": 0.1747597.5%\n", + ": 0.34\n", + "\n" + ], + "text/plain": [ + " 2.5% 97.5% \n", + "0.17475 0.34000 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "diff_stab = (boot_compLasso$stab_index - boot_rf$stab_index)\n", + "mean(diff_stab)\n", + "quantile(diff_stab, probs = c(0.025, 0.975)) \n", + "# CI doesn't contain zero: compLasso is significantly more stable than RF" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "11.8026936858767" + ], + "text/latex": [ + "11.8026936858767" + ], + "text/markdown": [ + "11.8026936858767" + ], + "text/plain": [ + "[1] 11.80269" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\t
2.5%
\n", + "\t\t
-2.09038719853993
\n", + "\t
97.5%
\n", + "\t\t
41.1831613135692
\n", + "
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[2.5\\textbackslash{}\\%] -2.09038719853993\n", + "\\item[97.5\\textbackslash{}\\%] 41.1831613135692\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "2.5%\n", + ": -2.0903871985399397.5%\n", + ": 41.1831613135692\n", + "\n" + ], + "text/plain": [ + " 2.5% 97.5% \n", + "-2.090387 41.183161 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "diff_mse = (unlist(boot_compLasso$MSE_list) - unlist(boot_rf$MSE_list)) # use all 100*100 MSEs\n", + "mean(diff_mse)\n", + "quantile(diff_mse, probs = c(0.025, 0.975)) \n", + "# CI contain zero: compLasso is not significantly different from RF based on MSE" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/data_application/notebooks_application/2.1.Soils_biomTableConversion (Python).ipynb b/data_application/notebooks_application/2.1.Soils_biomTableConversion (Python).ipynb new file mode 100755 index 0000000..16a40f2 --- /dev/null +++ b/data_application/notebooks_application/2.1.Soils_biomTableConversion (Python).ipynb @@ -0,0 +1,1571 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# ref: the soil dataset used in balance tree\n", + "# https://msystems.asm.org/content/2/1/e00162-16" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import sys\n", + "import biom\n", + "from biom.util import biom_open\n", + "import pandas as pd\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "def biom2pandas(file_biom, withTaxonomy=False, astype=int):\n", + " \"\"\" Converts a biom file into a Pandas.DataFrame\n", + " Parameters\n", + " ----------\n", + " file_biom : str\n", + " The path to the biom file.\n", + " withTaxonomy : bool\n", + " If TRUE, returns a second Pandas.Series with lineage information for\n", + " each feature, e.g. OTU or deblur-sequence. Default: FALSE\n", + " astype : type\n", + " datatype into each value of the biom table is casted. Default: int.\n", + " Use e.g. float if biom table contains relative abundances instead of\n", + " raw reads.\n", + " Returns\n", + " -------\n", + " A Pandas.DataFrame holding holding numerical values from the biom file.\n", + " If withTaxonomy is TRUE then a second Pandas.DataFrame is returned, holding\n", + " lineage information about each feature.\n", + " Raises\n", + " ------\n", + " IOError\n", + " If file_biom cannot be read.\n", + " ValueError\n", + " If withTaxonomy=TRUE but biom file does not hold taxonomy information.\n", + " \"\"\"\n", + " try:\n", + " table = biom.load_table(file_biom)\n", + " counts = pd.DataFrame(table.matrix_data.T.todense().astype(astype),\n", + " index=table.ids(axis='sample'),\n", + " columns=table.ids(axis='observation')).T\n", + " if withTaxonomy:\n", + " try:\n", + " md = table.metadata_to_dataframe('observation')\n", + " levels = [col\n", + " for col in md.columns\n", + " if col.startswith('taxonomy_')]\n", + " if levels == []:\n", + " raise ValueError(('No taxonomy information found in '\n", + " 'biom file.'))\n", + " else:\n", + " taxonomy = md.apply(lambda row:\n", + " \";\".join([row[l] for l in levels]),\n", + " axis=1)\n", + " return counts, taxonomy\n", + " except KeyError:\n", + " raise ValueError(('Biom file does not have any '\n", + " 'observation metadata!'))\n", + " else:\n", + " return counts\n", + " except IOError:\n", + " raise IOError('Cannot read file \"%s\"' % file_biom)\n", + "\n", + "\n", + "def pandas2biom(file_biom, table, taxonomy=None, err=sys.stderr):\n", + " \"\"\" Writes a Pandas.DataFrame into a biom file.\n", + " Parameters\n", + " ----------\n", + " file_biom: str\n", + " The filename of the BIOM file to be created.\n", + " table: a Pandas.DataFrame\n", + " The table that should be written as BIOM.\n", + " taxonomy : pandas.Series\n", + " Index is taxons corresponding to table, values are lineage strings like\n", + " 'k__Bacteria; p__Actinobacteria'\n", + " err : StringIO\n", + " Stream onto which errors / warnings should be printed.\n", + " Default is sys.stderr\n", + " Raises\n", + " ------\n", + " IOError\n", + " If file_biom cannot be written.\n", + " TODO\n", + " ----\n", + " 1) also store taxonomy information\n", + " \"\"\"\n", + " try:\n", + " bt = biom.Table(table.values,\n", + " observation_ids=table.index,\n", + " sample_ids=table.columns)\n", + "\n", + " # add taxonomy metadata if provided, i.e. is not None\n", + " if taxonomy is not None:\n", + " if not isinstance(taxonomy, pd.core.series.Series):\n", + " raise AttributeError('taxonomy must be a pandas.Series!')\n", + " idx_missing_intable = set(table.index) - set(taxonomy.index)\n", + " if len(idx_missing_intable) > 0:\n", + " err.write(('Warning: following %i taxa are not in the '\n", + " 'provided taxonomy:\\n%s\\n') % (\n", + " len(idx_missing_intable),\n", + " \", \".join(idx_missing_intable)))\n", + " missing = pd.Series(\n", + " index=idx_missing_intable,\n", + " name='taxonomy',\n", + " data='k__missing_lineage_information')\n", + " taxonomy = taxonomy.append(missing)\n", + " idx_missing_intaxonomy = set(taxonomy.index) - set(table.index)\n", + " if (len(idx_missing_intaxonomy) > 0) and err:\n", + " err.write(('Warning: following %i taxa are not in the '\n", + " 'provided count table, but in taxonomy:\\n%s\\n') % (\n", + " len(idx_missing_intaxonomy),\n", + " \", \".join(idx_missing_intaxonomy)))\n", + "\n", + " t = dict()\n", + " for taxon, linstr in taxonomy.iteritems():\n", + " # fill missing rank annotations with rank__\n", + " orig_lineage = {annot[0].lower(): annot\n", + " for annot\n", + " in (map(str.strip, linstr.split(';')))}\n", + " lineage = []\n", + " for rank in settings.RANKS:\n", + " rank_char = rank[0].lower()\n", + " if rank_char in orig_lineage:\n", + " lineage.append(orig_lineage[rank_char])\n", + " else:\n", + " lineage.append(rank_char+'__')\n", + " t[taxon] = {'taxonomy': \";\".join(lineage)}\n", + " bt.add_metadata(t, axis='observation')\n", + "\n", + " with biom_open(file_biom, 'w') as f:\n", + " bt.to_hdf5(f, \"example\")\n", + " except IOError:\n", + " raise IOError('Cannot write to file \"%s\"' % file_biom)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Balance_88soils" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(7396, 89)" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "soils_biom = biom2pandas('../88soils/238_otu_table.biom')\n", + "soils_biom.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
103.CA2103.CO3103.SR3103.IE2103.BP1103.VC2103.SA2103.GB2103.CO2103.KP1...103.LQ1103.HI1103.RT1103.HI2103.DF1103.CF3103.AR1103.TL1103.HI4103.BB1
11247011514181376322...0000000000
2443360001000000...0000000000
9731240000000001...0000000000
\n", + "

3 rows × 89 columns

\n", + "
" + ], + "text/plain": [ + " 103.CA2 103.CO3 103.SR3 103.IE2 103.BP1 103.VC2 103.SA2 \\\n", + "1124701 15 14 1 8 13 7 6 \n", + "244336 0 0 0 1 0 0 0 \n", + "973124 0 0 0 0 0 0 0 \n", + "\n", + " 103.GB2 103.CO2 103.KP1 ... 103.LQ1 103.HI1 103.RT1 103.HI2 \\\n", + "1124701 3 2 2 ... 0 0 0 0 \n", + "244336 0 0 0 ... 0 0 0 0 \n", + "973124 0 0 1 ... 0 0 0 0 \n", + "\n", + " 103.DF1 103.CF3 103.AR1 103.TL1 103.HI4 103.BB1 \n", + "1124701 0 0 0 0 0 0 \n", + "244336 0 0 0 0 0 0 \n", + "973124 0 0 0 0 0 0 \n", + "\n", + "[3 rows x 89 columns]" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "soils_biom.head(3)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(7396, 1)" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "soils_taxa = pd.read_csv('../88soils/88soils_taxonomy.txt', sep='\\t', index_col='Feature ID')\n", + "soils_taxa.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Taxon
Feature ID
1000512k__Bacteria;p__Actinobacteria;c__Thermoleophil...
1000547k__Bacteria;p__Firmicutes;c__Bacilli;o__Lactob...
1000654k__Bacteria;p__Bacteroidetes;c__Sphingobacteri...
\n", + "
" + ], + "text/plain": [ + " Taxon\n", + "Feature ID \n", + "1000512 k__Bacteria;p__Actinobacteria;c__Thermoleophil...\n", + "1000547 k__Bacteria;p__Firmicutes;c__Bacilli;o__Lactob...\n", + "1000654 k__Bacteria;p__Bacteroidetes;c__Sphingobacteri..." + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "soils_taxa.head(3)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
0123456
Feature ID
1000512k__Bacteriap__Actinobacteriac__Thermoleophiliao__Gaiellalesf__Gaiellaceaeg__s__
1000547k__Bacteriap__Firmicutesc__Bacillio__Lactobacillalesf__Streptococcaceaeg__Streptococcuss__
1000654k__Bacteriap__Bacteroidetesc__Sphingobacteriiao__Sphingobacterialesf__Sphingobacteriaceaeg__s__
1000757k__Bacteriap__Proteobacteriac__Alphaproteobacteriao__Rhizobialesf__Bradyrhizobiaceaeg__s__
1000876k__Bacteriap__Actinobacteriac__Actinobacteriao__Actinomycetalesf__Nocardioidaceaeg__Nocardioidess__
\n", + "
" + ], + "text/plain": [ + " 0 1 2 \\\n", + "Feature ID \n", + "1000512 k__Bacteria p__Actinobacteria c__Thermoleophilia \n", + "1000547 k__Bacteria p__Firmicutes c__Bacilli \n", + "1000654 k__Bacteria p__Bacteroidetes c__Sphingobacteriia \n", + "1000757 k__Bacteria p__Proteobacteria c__Alphaproteobacteria \n", + "1000876 k__Bacteria p__Actinobacteria c__Actinobacteria \n", + "\n", + " 3 4 5 \\\n", + "Feature ID \n", + "1000512 o__Gaiellales f__Gaiellaceae g__ \n", + "1000547 o__Lactobacillales f__Streptococcaceae g__Streptococcus \n", + "1000654 o__Sphingobacteriales f__Sphingobacteriaceae g__ \n", + "1000757 o__Rhizobiales f__Bradyrhizobiaceae g__ \n", + "1000876 o__Actinomycetales f__Nocardioidaceae g__Nocardioides \n", + "\n", + " 6 \n", + "Feature ID \n", + "1000512 s__ \n", + "1000547 s__ \n", + "1000654 s__ \n", + "1000757 s__ \n", + "1000876 s__ " + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "taxa_new = soils_taxa.Taxon.str.split(pat=\";\", expand=True)\n", + "taxa_new.head(5)\n", + "# ref: https://www.geeksforgeeks.org/python-pandas-split-strings-into-two-list-columns-using-str-split/" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
TaxonGenus
Feature ID
1000512k__Bacteria;p__Actinobacteria;c__Thermoleophil...g__
1000547k__Bacteria;p__Firmicutes;c__Bacilli;o__Lactob...g__Streptococcus
1000654k__Bacteria;p__Bacteroidetes;c__Sphingobacteri...g__
1000757k__Bacteria;p__Proteobacteria;c__Alphaproteoba...g__
1000876k__Bacteria;p__Actinobacteria;c__Actinobacteri...g__Nocardioides
\n", + "
" + ], + "text/plain": [ + " Taxon \\\n", + "Feature ID \n", + "1000512 k__Bacteria;p__Actinobacteria;c__Thermoleophil... \n", + "1000547 k__Bacteria;p__Firmicutes;c__Bacilli;o__Lactob... \n", + "1000654 k__Bacteria;p__Bacteroidetes;c__Sphingobacteri... \n", + "1000757 k__Bacteria;p__Proteobacteria;c__Alphaproteoba... \n", + "1000876 k__Bacteria;p__Actinobacteria;c__Actinobacteri... \n", + "\n", + " Genus \n", + "Feature ID \n", + "1000512 g__ \n", + "1000547 g__Streptococcus \n", + "1000654 g__ \n", + "1000757 g__ \n", + "1000876 g__Nocardioides " + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "soils_taxa['Genus'] = taxa_new[5]\n", + "soils_taxa.head(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "g__ 5213\n", + "g__Rhodoplanes 144\n", + "g__Bacillus 110\n", + "g__Candidatus Solibacter 100\n", + "g__Flavobacterium 71\n", + " ... \n", + "g__Rhodocyclus 1\n", + "g__Marinobacter 1\n", + "g__Afipia 1\n", + "g__Candidatus Amoebophilus 1\n", + "g__Desulfotomaculum 1\n", + "Name: Genus, Length: 335, dtype: int64" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "soils_taxa.Genus.value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(2183, 2)" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# only keep those with genus assignment\n", + "soils_taxa_sub = soils_taxa[soils_taxa.Genus != 'g__']\n", + "soils_taxa_sub.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
TaxonGenus
Feature ID
1000547k__Bacteria;p__Firmicutes;c__Bacilli;o__Lactob...g__Streptococcus
1000876k__Bacteria;p__Actinobacteria;c__Actinobacteri...g__Nocardioides
1003206k__Bacteria;p__Proteobacteria;c__Alphaproteoba...g__Sphingomonas
\n", + "
" + ], + "text/plain": [ + " Taxon \\\n", + "Feature ID \n", + "1000547 k__Bacteria;p__Firmicutes;c__Bacilli;o__Lactob... \n", + "1000876 k__Bacteria;p__Actinobacteria;c__Actinobacteri... \n", + "1003206 k__Bacteria;p__Proteobacteria;c__Alphaproteoba... \n", + "\n", + " Genus \n", + "Feature ID \n", + "1000547 g__Streptococcus \n", + "1000876 g__Nocardioides \n", + "1003206 g__Sphingomonas " + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "soils_taxa_sub.head(3)" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(2183, 91)" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# partition biom table \n", + "soils_biom.index = soils_biom.index.astype('int64') \n", + "soils_biom_sub = soils_biom.merge(soils_taxa_sub, how='inner', left_index=True, right_index=True)\n", + "soils_biom_sub.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
103.CA2103.CO3103.SR3103.IE2103.BP1103.VC2103.SA2103.GB2103.CO2103.KP1...103.RT1103.HI2103.DF1103.CF3103.AR1103.TL1103.HI4103.BB1TaxonGenus
2443360001000000...00000000k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacill...g__Paenibacillus
8094890000000100...00000000k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacill...g__Bacillus
5336250000000000...00000000k__Bacteria;p__Proteobacteria;c__Alphaproteoba...g__Novosphingobium
\n", + "

3 rows × 91 columns

\n", + "
" + ], + "text/plain": [ + " 103.CA2 103.CO3 103.SR3 103.IE2 103.BP1 103.VC2 103.SA2 \\\n", + "244336 0 0 0 1 0 0 0 \n", + "809489 0 0 0 0 0 0 0 \n", + "533625 0 0 0 0 0 0 0 \n", + "\n", + " 103.GB2 103.CO2 103.KP1 ... 103.RT1 103.HI2 103.DF1 103.CF3 \\\n", + "244336 0 0 0 ... 0 0 0 0 \n", + "809489 1 0 0 ... 0 0 0 0 \n", + "533625 0 0 0 ... 0 0 0 0 \n", + "\n", + " 103.AR1 103.TL1 103.HI4 103.BB1 \\\n", + "244336 0 0 0 0 \n", + "809489 0 0 0 0 \n", + "533625 0 0 0 0 \n", + "\n", + " Taxon Genus \n", + "244336 k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacill... g__Paenibacillus \n", + "809489 k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacill... g__Bacillus \n", + "533625 k__Bacteria;p__Proteobacteria;c__Alphaproteoba... g__Novosphingobium \n", + "\n", + "[3 rows x 91 columns]" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "soils_biom_sub.head(3)" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [], + "source": [ + "soils_biom_sub.set_index('Taxon', inplace=True)\n", + "soils_biom_sub.drop(['Genus'], axis=1, inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(2183, 89)" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "soils_biom_sub.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
103.CA2103.CO3103.SR3103.IE2103.BP1103.VC2103.SA2103.GB2103.CO2103.KP1...103.LQ1103.HI1103.RT1103.HI2103.DF1103.CF3103.AR1103.TL1103.HI4103.BB1
Taxon
k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacillales;f__Paenibacillaceae;g__Paenibacillus;s__0001000000...0000000000
k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacillales;f__Bacillaceae;g__Bacillus;s__muralis0000000100...0000000000
k__Bacteria;p__Proteobacteria;c__Alphaproteobacteria;o__Sphingomonadales;f__Sphingomonadaceae;g__Novosphingobium;s__0000000000...0000000000
\n", + "

3 rows × 89 columns

\n", + "
" + ], + "text/plain": [ + " 103.CA2 103.CO3 103.SR3 \\\n", + "Taxon \n", + "k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacilla... 0 0 0 \n", + "k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacilla... 0 0 0 \n", + "k__Bacteria;p__Proteobacteria;c__Alphaproteobac... 0 0 0 \n", + "\n", + " 103.IE2 103.BP1 103.VC2 \\\n", + "Taxon \n", + "k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacilla... 1 0 0 \n", + "k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacilla... 0 0 0 \n", + "k__Bacteria;p__Proteobacteria;c__Alphaproteobac... 0 0 0 \n", + "\n", + " 103.SA2 103.GB2 103.CO2 \\\n", + "Taxon \n", + "k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacilla... 0 0 0 \n", + "k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacilla... 0 1 0 \n", + "k__Bacteria;p__Proteobacteria;c__Alphaproteobac... 0 0 0 \n", + "\n", + " 103.KP1 ... 103.LQ1 \\\n", + "Taxon ... \n", + "k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacilla... 0 ... 0 \n", + "k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacilla... 0 ... 0 \n", + "k__Bacteria;p__Proteobacteria;c__Alphaproteobac... 0 ... 0 \n", + "\n", + " 103.HI1 103.RT1 103.HI2 \\\n", + "Taxon \n", + "k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacilla... 0 0 0 \n", + "k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacilla... 0 0 0 \n", + "k__Bacteria;p__Proteobacteria;c__Alphaproteobac... 0 0 0 \n", + "\n", + " 103.DF1 103.CF3 103.AR1 \\\n", + "Taxon \n", + "k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacilla... 0 0 0 \n", + "k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacilla... 0 0 0 \n", + "k__Bacteria;p__Proteobacteria;c__Alphaproteobac... 0 0 0 \n", + "\n", + " 103.TL1 103.HI4 103.BB1 \n", + "Taxon \n", + "k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacilla... 0 0 0 \n", + "k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacilla... 0 0 0 \n", + "k__Bacteria;p__Proteobacteria;c__Alphaproteobac... 0 0 0 \n", + "\n", + "[3 rows x 89 columns]" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "soils_biom_sub.head(3)" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(89, 2183)" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# transpose the dataframe \n", + "soils_biom_sub_t = soils_biom_sub.T\n", + "soils_biom_sub_t.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Taxonk__Bacteria;p__Firmicutes;c__Bacilli;o__Bacillales;f__Paenibacillaceae;g__Paenibacillus;s__k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacillales;f__Bacillaceae;g__Bacillus;s__muralisk__Bacteria;p__Proteobacteria;c__Alphaproteobacteria;o__Sphingomonadales;f__Sphingomonadaceae;g__Novosphingobium;s__k__Bacteria;p__Acidobacteria;c__Solibacteres;o__Solibacterales;f__Solibacteraceae;g__Candidatus Solibacter;s__k__Bacteria;p__Proteobacteria;c__Alphaproteobacteria;o__Rhizobiales;f__Hyphomicrobiaceae;g__Rhodoplanes;s__k__Bacteria;p__Actinobacteria;c__Actinobacteria;o__Actinomycetales;f__Nocardioidaceae;g__Nocardioides;s__k__Bacteria;p__Bacteroidetes;c__Flavobacteriia;o__Flavobacteriales;f__Flavobacteriaceae;g__Flavobacterium;s__k__Bacteria;p__Firmicutes;c__Clostridia;o__Clostridiales;f__Peptococcaceae;g__Desulfotomaculum;s__k__Bacteria;p__Acidobacteria;c__Acidobacteriia;o__Acidobacteriales;f__Koribacteraceae;g__Candidatus Koribacter;s__k__Bacteria;p__Proteobacteria;c__Betaproteobacteria;o__Burkholderiales;f__Comamonadaceae;g__Methylibium;s__...k__Bacteria;p__Proteobacteria;c__Betaproteobacteria;o__Burkholderiales;f__Comamonadaceae;g__Rhodoferax;s__k__Bacteria;p__Proteobacteria;c__Gammaproteobacteria;o__Xanthomonadales;f__Xanthomonadaceae;g__Dokdonella;s__k__Bacteria;p__Firmicutes;c__Bacilli;o__Lactobacillales;f__Streptococcaceae;g__Streptococcus;s__k__Bacteria;p__Proteobacteria;c__Betaproteobacteria;o__Methylophilales;f__Methylophilaceae;g__Methylotenera;s__mobilisk__Bacteria;p__Actinobacteria;c__Actinobacteria;o__Actinomycetales;f__Streptomycetaceae;g__Streptomyces;s__k__Bacteria;p__Proteobacteria;c__Gammaproteobacteria;o__Xanthomonadales;f__Xanthomonadaceae;g__Luteimonas;s__k__Bacteria;p__Proteobacteria;c__Alphaproteobacteria;o__Rhizobiales;f__Hyphomicrobiaceae;g__Rhodoplanes;s__k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacillales;f__Planococcaceae;g__Solibacillus;s__k__Bacteria;p__Proteobacteria;c__Betaproteobacteria;o__Burkholderiales;f__Comamonadaceae;g__Ramlibacter;s__k__Bacteria;p__Actinobacteria;c__Actinobacteria;o__Actinomycetales;f__Mycobacteriaceae;g__Mycobacterium;s__
103.CA20000000000...0000000000
103.CO30000000000...0000000001
103.SR30000000000...0100000011
\n", + "

3 rows × 2183 columns

\n", + "
" + ], + "text/plain": [ + "Taxon k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacillales;f__Paenibacillaceae;g__Paenibacillus;s__ \\\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "\n", + "Taxon k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacillales;f__Bacillaceae;g__Bacillus;s__muralis \\\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "\n", + "Taxon k__Bacteria;p__Proteobacteria;c__Alphaproteobacteria;o__Sphingomonadales;f__Sphingomonadaceae;g__Novosphingobium;s__ \\\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "\n", + "Taxon k__Bacteria;p__Acidobacteria;c__Solibacteres;o__Solibacterales;f__Solibacteraceae;g__Candidatus Solibacter;s__ \\\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "\n", + "Taxon k__Bacteria;p__Proteobacteria;c__Alphaproteobacteria;o__Rhizobiales;f__Hyphomicrobiaceae;g__Rhodoplanes;s__ \\\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "\n", + "Taxon k__Bacteria;p__Actinobacteria;c__Actinobacteria;o__Actinomycetales;f__Nocardioidaceae;g__Nocardioides;s__ \\\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "\n", + "Taxon k__Bacteria;p__Bacteroidetes;c__Flavobacteriia;o__Flavobacteriales;f__Flavobacteriaceae;g__Flavobacterium;s__ \\\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "\n", + "Taxon k__Bacteria;p__Firmicutes;c__Clostridia;o__Clostridiales;f__Peptococcaceae;g__Desulfotomaculum;s__ \\\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "\n", + "Taxon k__Bacteria;p__Acidobacteria;c__Acidobacteriia;o__Acidobacteriales;f__Koribacteraceae;g__Candidatus Koribacter;s__ \\\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "\n", + "Taxon k__Bacteria;p__Proteobacteria;c__Betaproteobacteria;o__Burkholderiales;f__Comamonadaceae;g__Methylibium;s__ \\\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "\n", + "Taxon ... \\\n", + "103.CA2 ... \n", + "103.CO3 ... \n", + "103.SR3 ... \n", + "\n", + "Taxon k__Bacteria;p__Proteobacteria;c__Betaproteobacteria;o__Burkholderiales;f__Comamonadaceae;g__Rhodoferax;s__ \\\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "\n", + "Taxon k__Bacteria;p__Proteobacteria;c__Gammaproteobacteria;o__Xanthomonadales;f__Xanthomonadaceae;g__Dokdonella;s__ \\\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 1 \n", + "\n", + "Taxon k__Bacteria;p__Firmicutes;c__Bacilli;o__Lactobacillales;f__Streptococcaceae;g__Streptococcus;s__ \\\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "\n", + "Taxon k__Bacteria;p__Proteobacteria;c__Betaproteobacteria;o__Methylophilales;f__Methylophilaceae;g__Methylotenera;s__mobilis \\\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "\n", + "Taxon k__Bacteria;p__Actinobacteria;c__Actinobacteria;o__Actinomycetales;f__Streptomycetaceae;g__Streptomyces;s__ \\\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "\n", + "Taxon k__Bacteria;p__Proteobacteria;c__Gammaproteobacteria;o__Xanthomonadales;f__Xanthomonadaceae;g__Luteimonas;s__ \\\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "\n", + "Taxon k__Bacteria;p__Proteobacteria;c__Alphaproteobacteria;o__Rhizobiales;f__Hyphomicrobiaceae;g__Rhodoplanes;s__ \\\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "\n", + "Taxon k__Bacteria;p__Firmicutes;c__Bacilli;o__Bacillales;f__Planococcaceae;g__Solibacillus;s__ \\\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "\n", + "Taxon k__Bacteria;p__Proteobacteria;c__Betaproteobacteria;o__Burkholderiales;f__Comamonadaceae;g__Ramlibacter;s__ \\\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 1 \n", + "\n", + "Taxon k__Bacteria;p__Actinobacteria;c__Actinobacteria;o__Actinomycetales;f__Mycobacteriaceae;g__Mycobacterium;s__ \n", + "103.CA2 0 \n", + "103.CO3 1 \n", + "103.SR3 1 \n", + "\n", + "[3 rows x 2183 columns]" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "soils_biom_sub_t.head(3)" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "count 89.000000\n", + "mean 275.932584\n", + "std 115.508244\n", + "min 1.000000\n", + "25% 213.000000\n", + "50% 254.000000\n", + "75% 319.000000\n", + "max 805.000000\n", + "dtype: float64" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# make sure that each genus exist in at least one sample\n", + "soils_biom_sub_t.sum(axis=1).describe() # column sum" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [], + "source": [ + "# export\n", + "soils_biom_sub_t.to_csv('../88soils/88soils_genus_table.txt', sep='\\t')" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "count 2183.000000\n", + "mean 11.249656\n", + "std 33.869668\n", + "min 1.000000\n", + "25% 1.000000\n", + "50% 3.000000\n", + "75% 8.000000\n", + "max 690.000000\n", + "dtype: float64" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# check that not rarefied\n", + "soils_biom_sub_t.sum(axis=0).describe() # row sum" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.2" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/data_application/notebooks_application/2.2.soils_dataPreparation.ipynb b/data_application/notebooks_application/2.2.soils_dataPreparation.ipynb new file mode 100755 index 0000000..2217a77 --- /dev/null +++ b/data_application/notebooks_application/2.2.soils_dataPreparation.ipynb @@ -0,0 +1,1060 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "load('../88soils/88soils_genus_table.RData')" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 89
  2. \n", + "\t
  3. 2183
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 89\n", + "\\item 2183\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 89\n", + "2. 2183\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 89 2183" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "count = soil_otu\n", + "dim(count)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
k__Bacteria.p__Firmicutes.c__Bacilli.o__Bacillales.f__Paenibacillaceae.g__Paenibacillus.s__k__Bacteria.p__Firmicutes.c__Bacilli.o__Bacillales.f__Bacillaceae.g__Bacillus.s__muralisk__Bacteria.p__Proteobacteria.c__Alphaproteobacteria.o__Sphingomonadales.f__Sphingomonadaceae.g__Novosphingobium.s__k__Bacteria.p__Acidobacteria.c__Solibacteres.o__Solibacterales.f__Solibacteraceae.g__Candidatus.Solibacter.s__k__Bacteria.p__Proteobacteria.c__Alphaproteobacteria.o__Rhizobiales.f__Hyphomicrobiaceae.g__Rhodoplanes.s__k__Bacteria.p__Actinobacteria.c__Actinobacteria.o__Actinomycetales.f__Nocardioidaceae.g__Nocardioides.s__k__Bacteria.p__Bacteroidetes.c__Flavobacteriia.o__Flavobacteriales.f__Flavobacteriaceae.g__Flavobacterium.s__k__Bacteria.p__Firmicutes.c__Clostridia.o__Clostridiales.f__Peptococcaceae.g__Desulfotomaculum.s__k__Bacteria.p__Acidobacteria.c__Acidobacteriia.o__Acidobacteriales.f__Koribacteraceae.g__Candidatus.Koribacter.s__k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Burkholderiales.f__Comamonadaceae.g__Methylibium.s__...k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Burkholderiales.f__Comamonadaceae.g__Rhodoferax.s__.4k__Bacteria.p__Proteobacteria.c__Gammaproteobacteria.o__Xanthomonadales.f__Xanthomonadaceae.g__Dokdonella.s__.9k__Bacteria.p__Firmicutes.c__Bacilli.o__Lactobacillales.f__Streptococcaceae.g__Streptococcus.s__.9k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Methylophilales.f__Methylophilaceae.g__Methylotenera.s__mobilis.2k__Bacteria.p__Actinobacteria.c__Actinobacteria.o__Actinomycetales.f__Streptomycetaceae.g__Streptomyces.s__.44k__Bacteria.p__Proteobacteria.c__Gammaproteobacteria.o__Xanthomonadales.f__Xanthomonadaceae.g__Luteimonas.s__.2k__Bacteria.p__Proteobacteria.c__Alphaproteobacteria.o__Rhizobiales.f__Hyphomicrobiaceae.g__Rhodoplanes.s__.142k__Bacteria.p__Firmicutes.c__Bacilli.o__Bacillales.f__Planococcaceae.g__Solibacillus.s__.3k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Burkholderiales.f__Comamonadaceae.g__Ramlibacter.s__.9k__Bacteria.p__Actinobacteria.c__Actinobacteria.o__Actinomycetales.f__Mycobacteriaceae.g__Mycobacterium.s__.28
103.CA20 0 0 0 0 0 0 0 0 0 ...0 0 0 0 0 0 0 0 0 0
103.CO30 0 0 0 0 0 0 0 0 0 ...0 0 0 0 0 0 0 0 0 1
103.SR30 0 0 0 0 0 0 0 0 0 ...0 1 0 0 0 0 0 0 1 1
103.IE21 0 0 0 0 0 0 0 0 0 ...0 0 0 0 0 0 2 0 0 1
103.BP10 0 0 0 0 0 0 0 0 0 ...0 0 0 0 0 0 0 0 0 1
103.VC20 0 0 0 0 0 0 0 0 2 ...0 0 0 0 0 0 0 0 0 1
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll}\n", + " & k\\_\\_Bacteria.p\\_\\_Firmicutes.c\\_\\_Bacilli.o\\_\\_Bacillales.f\\_\\_Paenibacillaceae.g\\_\\_Paenibacillus.s\\_\\_ & k\\_\\_Bacteria.p\\_\\_Firmicutes.c\\_\\_Bacilli.o\\_\\_Bacillales.f\\_\\_Bacillaceae.g\\_\\_Bacillus.s\\_\\_muralis & k\\_\\_Bacteria.p\\_\\_Proteobacteria.c\\_\\_Alphaproteobacteria.o\\_\\_Sphingomonadales.f\\_\\_Sphingomonadaceae.g\\_\\_Novosphingobium.s\\_\\_ & k\\_\\_Bacteria.p\\_\\_Acidobacteria.c\\_\\_Solibacteres.o\\_\\_Solibacterales.f\\_\\_Solibacteraceae.g\\_\\_Candidatus.Solibacter.s\\_\\_ & k\\_\\_Bacteria.p\\_\\_Proteobacteria.c\\_\\_Alphaproteobacteria.o\\_\\_Rhizobiales.f\\_\\_Hyphomicrobiaceae.g\\_\\_Rhodoplanes.s\\_\\_ & k\\_\\_Bacteria.p\\_\\_Actinobacteria.c\\_\\_Actinobacteria.o\\_\\_Actinomycetales.f\\_\\_Nocardioidaceae.g\\_\\_Nocardioides.s\\_\\_ & k\\_\\_Bacteria.p\\_\\_Bacteroidetes.c\\_\\_Flavobacteriia.o\\_\\_Flavobacteriales.f\\_\\_Flavobacteriaceae.g\\_\\_Flavobacterium.s\\_\\_ & k\\_\\_Bacteria.p\\_\\_Firmicutes.c\\_\\_Clostridia.o\\_\\_Clostridiales.f\\_\\_Peptococcaceae.g\\_\\_Desulfotomaculum.s\\_\\_ & k\\_\\_Bacteria.p\\_\\_Acidobacteria.c\\_\\_Acidobacteriia.o\\_\\_Acidobacteriales.f\\_\\_Koribacteraceae.g\\_\\_Candidatus.Koribacter.s\\_\\_ & k\\_\\_Bacteria.p\\_\\_Proteobacteria.c\\_\\_Betaproteobacteria.o\\_\\_Burkholderiales.f\\_\\_Comamonadaceae.g\\_\\_Methylibium.s\\_\\_ & ... & k\\_\\_Bacteria.p\\_\\_Proteobacteria.c\\_\\_Betaproteobacteria.o\\_\\_Burkholderiales.f\\_\\_Comamonadaceae.g\\_\\_Rhodoferax.s\\_\\_.4 & k\\_\\_Bacteria.p\\_\\_Proteobacteria.c\\_\\_Gammaproteobacteria.o\\_\\_Xanthomonadales.f\\_\\_Xanthomonadaceae.g\\_\\_Dokdonella.s\\_\\_.9 & k\\_\\_Bacteria.p\\_\\_Firmicutes.c\\_\\_Bacilli.o\\_\\_Lactobacillales.f\\_\\_Streptococcaceae.g\\_\\_Streptococcus.s\\_\\_.9 & k\\_\\_Bacteria.p\\_\\_Proteobacteria.c\\_\\_Betaproteobacteria.o\\_\\_Methylophilales.f\\_\\_Methylophilaceae.g\\_\\_Methylotenera.s\\_\\_mobilis.2 & k\\_\\_Bacteria.p\\_\\_Actinobacteria.c\\_\\_Actinobacteria.o\\_\\_Actinomycetales.f\\_\\_Streptomycetaceae.g\\_\\_Streptomyces.s\\_\\_.44 & k\\_\\_Bacteria.p\\_\\_Proteobacteria.c\\_\\_Gammaproteobacteria.o\\_\\_Xanthomonadales.f\\_\\_Xanthomonadaceae.g\\_\\_Luteimonas.s\\_\\_.2 & k\\_\\_Bacteria.p\\_\\_Proteobacteria.c\\_\\_Alphaproteobacteria.o\\_\\_Rhizobiales.f\\_\\_Hyphomicrobiaceae.g\\_\\_Rhodoplanes.s\\_\\_.142 & k\\_\\_Bacteria.p\\_\\_Firmicutes.c\\_\\_Bacilli.o\\_\\_Bacillales.f\\_\\_Planococcaceae.g\\_\\_Solibacillus.s\\_\\_.3 & k\\_\\_Bacteria.p\\_\\_Proteobacteria.c\\_\\_Betaproteobacteria.o\\_\\_Burkholderiales.f\\_\\_Comamonadaceae.g\\_\\_Ramlibacter.s\\_\\_.9 & k\\_\\_Bacteria.p\\_\\_Actinobacteria.c\\_\\_Actinobacteria.o\\_\\_Actinomycetales.f\\_\\_Mycobacteriaceae.g\\_\\_Mycobacterium.s\\_\\_.28\\\\\n", + "\\hline\n", + "\t103.CA2 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & ... & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\\\\n", + "\t103.CO3 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & ... & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \\\\\n", + "\t103.SR3 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & ... & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 1 \\\\\n", + "\t103.IE2 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & ... & 0 & 0 & 0 & 0 & 0 & 0 & 2 & 0 & 0 & 1 \\\\\n", + "\t103.BP1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & ... & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \\\\\n", + "\t103.VC2 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 2 & ... & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | k__Bacteria.p__Firmicutes.c__Bacilli.o__Bacillales.f__Paenibacillaceae.g__Paenibacillus.s__ | k__Bacteria.p__Firmicutes.c__Bacilli.o__Bacillales.f__Bacillaceae.g__Bacillus.s__muralis | k__Bacteria.p__Proteobacteria.c__Alphaproteobacteria.o__Sphingomonadales.f__Sphingomonadaceae.g__Novosphingobium.s__ | k__Bacteria.p__Acidobacteria.c__Solibacteres.o__Solibacterales.f__Solibacteraceae.g__Candidatus.Solibacter.s__ | k__Bacteria.p__Proteobacteria.c__Alphaproteobacteria.o__Rhizobiales.f__Hyphomicrobiaceae.g__Rhodoplanes.s__ | k__Bacteria.p__Actinobacteria.c__Actinobacteria.o__Actinomycetales.f__Nocardioidaceae.g__Nocardioides.s__ | k__Bacteria.p__Bacteroidetes.c__Flavobacteriia.o__Flavobacteriales.f__Flavobacteriaceae.g__Flavobacterium.s__ | k__Bacteria.p__Firmicutes.c__Clostridia.o__Clostridiales.f__Peptococcaceae.g__Desulfotomaculum.s__ | k__Bacteria.p__Acidobacteria.c__Acidobacteriia.o__Acidobacteriales.f__Koribacteraceae.g__Candidatus.Koribacter.s__ | k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Burkholderiales.f__Comamonadaceae.g__Methylibium.s__ | ... | k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Burkholderiales.f__Comamonadaceae.g__Rhodoferax.s__.4 | k__Bacteria.p__Proteobacteria.c__Gammaproteobacteria.o__Xanthomonadales.f__Xanthomonadaceae.g__Dokdonella.s__.9 | k__Bacteria.p__Firmicutes.c__Bacilli.o__Lactobacillales.f__Streptococcaceae.g__Streptococcus.s__.9 | k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Methylophilales.f__Methylophilaceae.g__Methylotenera.s__mobilis.2 | k__Bacteria.p__Actinobacteria.c__Actinobacteria.o__Actinomycetales.f__Streptomycetaceae.g__Streptomyces.s__.44 | k__Bacteria.p__Proteobacteria.c__Gammaproteobacteria.o__Xanthomonadales.f__Xanthomonadaceae.g__Luteimonas.s__.2 | k__Bacteria.p__Proteobacteria.c__Alphaproteobacteria.o__Rhizobiales.f__Hyphomicrobiaceae.g__Rhodoplanes.s__.142 | k__Bacteria.p__Firmicutes.c__Bacilli.o__Bacillales.f__Planococcaceae.g__Solibacillus.s__.3 | k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Burkholderiales.f__Comamonadaceae.g__Ramlibacter.s__.9 | k__Bacteria.p__Actinobacteria.c__Actinobacteria.o__Actinomycetales.f__Mycobacteriaceae.g__Mycobacterium.s__.28 |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 103.CA2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "| 103.CO3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |\n", + "| 103.SR3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |\n", + "| 103.IE2 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 0 | 0 | 1 |\n", + "| 103.BP1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |\n", + "| 103.VC2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |\n", + "\n" + ], + "text/plain": [ + " k__Bacteria.p__Firmicutes.c__Bacilli.o__Bacillales.f__Paenibacillaceae.g__Paenibacillus.s__\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "103.IE2 1 \n", + "103.BP1 0 \n", + "103.VC2 0 \n", + " k__Bacteria.p__Firmicutes.c__Bacilli.o__Bacillales.f__Bacillaceae.g__Bacillus.s__muralis\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "103.IE2 0 \n", + "103.BP1 0 \n", + "103.VC2 0 \n", + " k__Bacteria.p__Proteobacteria.c__Alphaproteobacteria.o__Sphingomonadales.f__Sphingomonadaceae.g__Novosphingobium.s__\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "103.IE2 0 \n", + "103.BP1 0 \n", + "103.VC2 0 \n", + " k__Bacteria.p__Acidobacteria.c__Solibacteres.o__Solibacterales.f__Solibacteraceae.g__Candidatus.Solibacter.s__\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "103.IE2 0 \n", + "103.BP1 0 \n", + "103.VC2 0 \n", + " k__Bacteria.p__Proteobacteria.c__Alphaproteobacteria.o__Rhizobiales.f__Hyphomicrobiaceae.g__Rhodoplanes.s__\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "103.IE2 0 \n", + "103.BP1 0 \n", + "103.VC2 0 \n", + " k__Bacteria.p__Actinobacteria.c__Actinobacteria.o__Actinomycetales.f__Nocardioidaceae.g__Nocardioides.s__\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "103.IE2 0 \n", + "103.BP1 0 \n", + "103.VC2 0 \n", + " k__Bacteria.p__Bacteroidetes.c__Flavobacteriia.o__Flavobacteriales.f__Flavobacteriaceae.g__Flavobacterium.s__\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "103.IE2 0 \n", + "103.BP1 0 \n", + "103.VC2 0 \n", + " k__Bacteria.p__Firmicutes.c__Clostridia.o__Clostridiales.f__Peptococcaceae.g__Desulfotomaculum.s__\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "103.IE2 0 \n", + "103.BP1 0 \n", + "103.VC2 0 \n", + " k__Bacteria.p__Acidobacteria.c__Acidobacteriia.o__Acidobacteriales.f__Koribacteraceae.g__Candidatus.Koribacter.s__\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "103.IE2 0 \n", + "103.BP1 0 \n", + "103.VC2 0 \n", + " k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Burkholderiales.f__Comamonadaceae.g__Methylibium.s__\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "103.IE2 0 \n", + "103.BP1 0 \n", + "103.VC2 2 \n", + " ...\n", + "103.CA2 ...\n", + "103.CO3 ...\n", + "103.SR3 ...\n", + "103.IE2 ...\n", + "103.BP1 ...\n", + "103.VC2 ...\n", + " k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Burkholderiales.f__Comamonadaceae.g__Rhodoferax.s__.4\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "103.IE2 0 \n", + "103.BP1 0 \n", + "103.VC2 0 \n", + " k__Bacteria.p__Proteobacteria.c__Gammaproteobacteria.o__Xanthomonadales.f__Xanthomonadaceae.g__Dokdonella.s__.9\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 1 \n", + "103.IE2 0 \n", + "103.BP1 0 \n", + "103.VC2 0 \n", + " k__Bacteria.p__Firmicutes.c__Bacilli.o__Lactobacillales.f__Streptococcaceae.g__Streptococcus.s__.9\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "103.IE2 0 \n", + "103.BP1 0 \n", + "103.VC2 0 \n", + " k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Methylophilales.f__Methylophilaceae.g__Methylotenera.s__mobilis.2\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "103.IE2 0 \n", + "103.BP1 0 \n", + "103.VC2 0 \n", + " k__Bacteria.p__Actinobacteria.c__Actinobacteria.o__Actinomycetales.f__Streptomycetaceae.g__Streptomyces.s__.44\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "103.IE2 0 \n", + "103.BP1 0 \n", + "103.VC2 0 \n", + " k__Bacteria.p__Proteobacteria.c__Gammaproteobacteria.o__Xanthomonadales.f__Xanthomonadaceae.g__Luteimonas.s__.2\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "103.IE2 0 \n", + "103.BP1 0 \n", + "103.VC2 0 \n", + " k__Bacteria.p__Proteobacteria.c__Alphaproteobacteria.o__Rhizobiales.f__Hyphomicrobiaceae.g__Rhodoplanes.s__.142\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "103.IE2 2 \n", + "103.BP1 0 \n", + "103.VC2 0 \n", + " k__Bacteria.p__Firmicutes.c__Bacilli.o__Bacillales.f__Planococcaceae.g__Solibacillus.s__.3\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 0 \n", + "103.IE2 0 \n", + "103.BP1 0 \n", + "103.VC2 0 \n", + " k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Burkholderiales.f__Comamonadaceae.g__Ramlibacter.s__.9\n", + "103.CA2 0 \n", + "103.CO3 0 \n", + "103.SR3 1 \n", + "103.IE2 0 \n", + "103.BP1 0 \n", + "103.VC2 0 \n", + " k__Bacteria.p__Actinobacteria.c__Actinobacteria.o__Actinomycetales.f__Mycobacteriaceae.g__Mycobacterium.s__.28\n", + "103.CA2 0 \n", + "103.CO3 1 \n", + "103.SR3 1 \n", + "103.IE2 1 \n", + "103.BP1 1 \n", + "103.VC2 1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(count)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 89
  2. \n", + "\t
  3. 2183
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 89\n", + "\\item 2183\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 89\n", + "2. 2183\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 89 2183" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "dim(count[, colMeans(count > 0) >= 0.5/100]) # 0.5%" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 89
  2. \n", + "\t
  3. 2183
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 89\n", + "\\item 2183\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 89\n", + "2. 2183\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 89 2183" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "dim(count[, colMeans(count > 0) >= 1/100]) # 1%" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 89
  2. \n", + "\t
  3. 1297
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 89\n", + "\\item 1297\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 89\n", + "2. 1297\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 89 1297" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "dim(count[, colMeans(count > 0) >= 2/100]) # 2%" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 89
  2. \n", + "\t
  3. 576
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 89\n", + "\\item 576\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 89\n", + "2. 576\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 89 576" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "dim(count[, colMeans(count > 0) >= 5/100]) # 5%" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 89
  2. \n", + "\t
  3. 2183
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 89\n", + "\\item 2183\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 89\n", + "2. 2183\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 89 2183" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
k__Bacteria.p__Firmicutes.c__Bacilli.o__Bacillales.f__Paenibacillaceae.g__Paenibacillus.s__k__Bacteria.p__Firmicutes.c__Bacilli.o__Bacillales.f__Bacillaceae.g__Bacillus.s__muralisk__Bacteria.p__Proteobacteria.c__Alphaproteobacteria.o__Sphingomonadales.f__Sphingomonadaceae.g__Novosphingobium.s__k__Bacteria.p__Acidobacteria.c__Solibacteres.o__Solibacterales.f__Solibacteraceae.g__Candidatus.Solibacter.s__k__Bacteria.p__Proteobacteria.c__Alphaproteobacteria.o__Rhizobiales.f__Hyphomicrobiaceae.g__Rhodoplanes.s__k__Bacteria.p__Actinobacteria.c__Actinobacteria.o__Actinomycetales.f__Nocardioidaceae.g__Nocardioides.s__k__Bacteria.p__Bacteroidetes.c__Flavobacteriia.o__Flavobacteriales.f__Flavobacteriaceae.g__Flavobacterium.s__k__Bacteria.p__Firmicutes.c__Clostridia.o__Clostridiales.f__Peptococcaceae.g__Desulfotomaculum.s__k__Bacteria.p__Acidobacteria.c__Acidobacteriia.o__Acidobacteriales.f__Koribacteraceae.g__Candidatus.Koribacter.s__k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Burkholderiales.f__Comamonadaceae.g__Methylibium.s__...k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Burkholderiales.f__Comamonadaceae.g__Rhodoferax.s__.4k__Bacteria.p__Proteobacteria.c__Gammaproteobacteria.o__Xanthomonadales.f__Xanthomonadaceae.g__Dokdonella.s__.9k__Bacteria.p__Firmicutes.c__Bacilli.o__Lactobacillales.f__Streptococcaceae.g__Streptococcus.s__.9k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Methylophilales.f__Methylophilaceae.g__Methylotenera.s__mobilis.2k__Bacteria.p__Actinobacteria.c__Actinobacteria.o__Actinomycetales.f__Streptomycetaceae.g__Streptomyces.s__.44k__Bacteria.p__Proteobacteria.c__Gammaproteobacteria.o__Xanthomonadales.f__Xanthomonadaceae.g__Luteimonas.s__.2k__Bacteria.p__Proteobacteria.c__Alphaproteobacteria.o__Rhizobiales.f__Hyphomicrobiaceae.g__Rhodoplanes.s__.142k__Bacteria.p__Firmicutes.c__Bacilli.o__Bacillales.f__Planococcaceae.g__Solibacillus.s__.3k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Burkholderiales.f__Comamonadaceae.g__Ramlibacter.s__.9k__Bacteria.p__Actinobacteria.c__Actinobacteria.o__Actinomycetales.f__Mycobacteriaceae.g__Mycobacterium.s__.28
103.CA2-7.828436-7.828436-7.828436-7.828436-7.828436-7.828436-7.828436-7.828436-7.828436-7.828436... -7.828436-7.828436-7.828436-7.828436-7.828436-7.828436-7.828436-7.828436-7.828436-7.828436
103.CO3-7.892452-7.892452-7.892452-7.892452-7.892452-7.892452-7.892452-7.892452-7.892452-7.892452... -7.892452-7.892452-7.892452-7.892452-7.892452-7.892452-7.892452-7.892452-7.892452-7.199305
103.SR3-7.942718-7.942718-7.942718-7.942718-7.942718-7.942718-7.942718-7.942718-7.942718-7.942718... -7.942718-7.249570-7.942718-7.942718-7.942718-7.942718-7.942718-7.942718-7.249570-7.249570
103.IE2-7.208230-7.901377-7.901377-7.901377-7.901377-7.901377-7.901377-7.901377-7.901377-7.901377... -7.901377-7.901377-7.901377-7.901377-7.901377-7.901377-6.515083-7.901377-7.901377-7.208230
103.BP1-7.781139-7.781139-7.781139-7.781139-7.781139-7.781139-7.781139-7.781139-7.781139-7.781139... -7.781139-7.781139-7.781139-7.781139-7.781139-7.781139-7.781139-7.781139-7.781139-7.087991
103.VC2-7.825645-7.825645-7.825645-7.825645-7.825645-7.825645-7.825645-7.825645-7.825645-6.439350... -7.825645-7.825645-7.825645-7.825645-7.825645-7.825645-7.825645-7.825645-7.825645-7.132498
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll}\n", + " & k\\_\\_Bacteria.p\\_\\_Firmicutes.c\\_\\_Bacilli.o\\_\\_Bacillales.f\\_\\_Paenibacillaceae.g\\_\\_Paenibacillus.s\\_\\_ & k\\_\\_Bacteria.p\\_\\_Firmicutes.c\\_\\_Bacilli.o\\_\\_Bacillales.f\\_\\_Bacillaceae.g\\_\\_Bacillus.s\\_\\_muralis & k\\_\\_Bacteria.p\\_\\_Proteobacteria.c\\_\\_Alphaproteobacteria.o\\_\\_Sphingomonadales.f\\_\\_Sphingomonadaceae.g\\_\\_Novosphingobium.s\\_\\_ & k\\_\\_Bacteria.p\\_\\_Acidobacteria.c\\_\\_Solibacteres.o\\_\\_Solibacterales.f\\_\\_Solibacteraceae.g\\_\\_Candidatus.Solibacter.s\\_\\_ & k\\_\\_Bacteria.p\\_\\_Proteobacteria.c\\_\\_Alphaproteobacteria.o\\_\\_Rhizobiales.f\\_\\_Hyphomicrobiaceae.g\\_\\_Rhodoplanes.s\\_\\_ & k\\_\\_Bacteria.p\\_\\_Actinobacteria.c\\_\\_Actinobacteria.o\\_\\_Actinomycetales.f\\_\\_Nocardioidaceae.g\\_\\_Nocardioides.s\\_\\_ & k\\_\\_Bacteria.p\\_\\_Bacteroidetes.c\\_\\_Flavobacteriia.o\\_\\_Flavobacteriales.f\\_\\_Flavobacteriaceae.g\\_\\_Flavobacterium.s\\_\\_ & k\\_\\_Bacteria.p\\_\\_Firmicutes.c\\_\\_Clostridia.o\\_\\_Clostridiales.f\\_\\_Peptococcaceae.g\\_\\_Desulfotomaculum.s\\_\\_ & k\\_\\_Bacteria.p\\_\\_Acidobacteria.c\\_\\_Acidobacteriia.o\\_\\_Acidobacteriales.f\\_\\_Koribacteraceae.g\\_\\_Candidatus.Koribacter.s\\_\\_ & k\\_\\_Bacteria.p\\_\\_Proteobacteria.c\\_\\_Betaproteobacteria.o\\_\\_Burkholderiales.f\\_\\_Comamonadaceae.g\\_\\_Methylibium.s\\_\\_ & ... & k\\_\\_Bacteria.p\\_\\_Proteobacteria.c\\_\\_Betaproteobacteria.o\\_\\_Burkholderiales.f\\_\\_Comamonadaceae.g\\_\\_Rhodoferax.s\\_\\_.4 & k\\_\\_Bacteria.p\\_\\_Proteobacteria.c\\_\\_Gammaproteobacteria.o\\_\\_Xanthomonadales.f\\_\\_Xanthomonadaceae.g\\_\\_Dokdonella.s\\_\\_.9 & k\\_\\_Bacteria.p\\_\\_Firmicutes.c\\_\\_Bacilli.o\\_\\_Lactobacillales.f\\_\\_Streptococcaceae.g\\_\\_Streptococcus.s\\_\\_.9 & k\\_\\_Bacteria.p\\_\\_Proteobacteria.c\\_\\_Betaproteobacteria.o\\_\\_Methylophilales.f\\_\\_Methylophilaceae.g\\_\\_Methylotenera.s\\_\\_mobilis.2 & k\\_\\_Bacteria.p\\_\\_Actinobacteria.c\\_\\_Actinobacteria.o\\_\\_Actinomycetales.f\\_\\_Streptomycetaceae.g\\_\\_Streptomyces.s\\_\\_.44 & k\\_\\_Bacteria.p\\_\\_Proteobacteria.c\\_\\_Gammaproteobacteria.o\\_\\_Xanthomonadales.f\\_\\_Xanthomonadaceae.g\\_\\_Luteimonas.s\\_\\_.2 & k\\_\\_Bacteria.p\\_\\_Proteobacteria.c\\_\\_Alphaproteobacteria.o\\_\\_Rhizobiales.f\\_\\_Hyphomicrobiaceae.g\\_\\_Rhodoplanes.s\\_\\_.142 & k\\_\\_Bacteria.p\\_\\_Firmicutes.c\\_\\_Bacilli.o\\_\\_Bacillales.f\\_\\_Planococcaceae.g\\_\\_Solibacillus.s\\_\\_.3 & k\\_\\_Bacteria.p\\_\\_Proteobacteria.c\\_\\_Betaproteobacteria.o\\_\\_Burkholderiales.f\\_\\_Comamonadaceae.g\\_\\_Ramlibacter.s\\_\\_.9 & k\\_\\_Bacteria.p\\_\\_Actinobacteria.c\\_\\_Actinobacteria.o\\_\\_Actinomycetales.f\\_\\_Mycobacteriaceae.g\\_\\_Mycobacterium.s\\_\\_.28\\\\\n", + "\\hline\n", + "\t103.CA2 & -7.828436 & -7.828436 & -7.828436 & -7.828436 & -7.828436 & -7.828436 & -7.828436 & -7.828436 & -7.828436 & -7.828436 & ... & -7.828436 & -7.828436 & -7.828436 & -7.828436 & -7.828436 & -7.828436 & -7.828436 & -7.828436 & -7.828436 & -7.828436\\\\\n", + "\t103.CO3 & -7.892452 & -7.892452 & -7.892452 & -7.892452 & -7.892452 & -7.892452 & -7.892452 & -7.892452 & -7.892452 & -7.892452 & ... & -7.892452 & -7.892452 & -7.892452 & -7.892452 & -7.892452 & -7.892452 & -7.892452 & -7.892452 & -7.892452 & -7.199305\\\\\n", + "\t103.SR3 & -7.942718 & -7.942718 & -7.942718 & -7.942718 & -7.942718 & -7.942718 & -7.942718 & -7.942718 & -7.942718 & -7.942718 & ... & -7.942718 & -7.249570 & -7.942718 & -7.942718 & -7.942718 & -7.942718 & -7.942718 & -7.942718 & -7.249570 & -7.249570\\\\\n", + "\t103.IE2 & -7.208230 & -7.901377 & -7.901377 & -7.901377 & -7.901377 & -7.901377 & -7.901377 & -7.901377 & -7.901377 & -7.901377 & ... & -7.901377 & -7.901377 & -7.901377 & -7.901377 & -7.901377 & -7.901377 & -6.515083 & -7.901377 & -7.901377 & -7.208230\\\\\n", + "\t103.BP1 & -7.781139 & -7.781139 & -7.781139 & -7.781139 & -7.781139 & -7.781139 & -7.781139 & -7.781139 & -7.781139 & -7.781139 & ... & -7.781139 & -7.781139 & -7.781139 & -7.781139 & -7.781139 & -7.781139 & -7.781139 & -7.781139 & -7.781139 & -7.087991\\\\\n", + "\t103.VC2 & -7.825645 & -7.825645 & -7.825645 & -7.825645 & -7.825645 & -7.825645 & -7.825645 & -7.825645 & -7.825645 & -6.439350 & ... & -7.825645 & -7.825645 & -7.825645 & -7.825645 & -7.825645 & -7.825645 & -7.825645 & -7.825645 & -7.825645 & -7.132498\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | k__Bacteria.p__Firmicutes.c__Bacilli.o__Bacillales.f__Paenibacillaceae.g__Paenibacillus.s__ | k__Bacteria.p__Firmicutes.c__Bacilli.o__Bacillales.f__Bacillaceae.g__Bacillus.s__muralis | k__Bacteria.p__Proteobacteria.c__Alphaproteobacteria.o__Sphingomonadales.f__Sphingomonadaceae.g__Novosphingobium.s__ | k__Bacteria.p__Acidobacteria.c__Solibacteres.o__Solibacterales.f__Solibacteraceae.g__Candidatus.Solibacter.s__ | k__Bacteria.p__Proteobacteria.c__Alphaproteobacteria.o__Rhizobiales.f__Hyphomicrobiaceae.g__Rhodoplanes.s__ | k__Bacteria.p__Actinobacteria.c__Actinobacteria.o__Actinomycetales.f__Nocardioidaceae.g__Nocardioides.s__ | k__Bacteria.p__Bacteroidetes.c__Flavobacteriia.o__Flavobacteriales.f__Flavobacteriaceae.g__Flavobacterium.s__ | k__Bacteria.p__Firmicutes.c__Clostridia.o__Clostridiales.f__Peptococcaceae.g__Desulfotomaculum.s__ | k__Bacteria.p__Acidobacteria.c__Acidobacteriia.o__Acidobacteriales.f__Koribacteraceae.g__Candidatus.Koribacter.s__ | k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Burkholderiales.f__Comamonadaceae.g__Methylibium.s__ | ... | k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Burkholderiales.f__Comamonadaceae.g__Rhodoferax.s__.4 | k__Bacteria.p__Proteobacteria.c__Gammaproteobacteria.o__Xanthomonadales.f__Xanthomonadaceae.g__Dokdonella.s__.9 | k__Bacteria.p__Firmicutes.c__Bacilli.o__Lactobacillales.f__Streptococcaceae.g__Streptococcus.s__.9 | k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Methylophilales.f__Methylophilaceae.g__Methylotenera.s__mobilis.2 | k__Bacteria.p__Actinobacteria.c__Actinobacteria.o__Actinomycetales.f__Streptomycetaceae.g__Streptomyces.s__.44 | k__Bacteria.p__Proteobacteria.c__Gammaproteobacteria.o__Xanthomonadales.f__Xanthomonadaceae.g__Luteimonas.s__.2 | k__Bacteria.p__Proteobacteria.c__Alphaproteobacteria.o__Rhizobiales.f__Hyphomicrobiaceae.g__Rhodoplanes.s__.142 | k__Bacteria.p__Firmicutes.c__Bacilli.o__Bacillales.f__Planococcaceae.g__Solibacillus.s__.3 | k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Burkholderiales.f__Comamonadaceae.g__Ramlibacter.s__.9 | k__Bacteria.p__Actinobacteria.c__Actinobacteria.o__Actinomycetales.f__Mycobacteriaceae.g__Mycobacterium.s__.28 |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 103.CA2 | -7.828436 | -7.828436 | -7.828436 | -7.828436 | -7.828436 | -7.828436 | -7.828436 | -7.828436 | -7.828436 | -7.828436 | ... | -7.828436 | -7.828436 | -7.828436 | -7.828436 | -7.828436 | -7.828436 | -7.828436 | -7.828436 | -7.828436 | -7.828436 |\n", + "| 103.CO3 | -7.892452 | -7.892452 | -7.892452 | -7.892452 | -7.892452 | -7.892452 | -7.892452 | -7.892452 | -7.892452 | -7.892452 | ... | -7.892452 | -7.892452 | -7.892452 | -7.892452 | -7.892452 | -7.892452 | -7.892452 | -7.892452 | -7.892452 | -7.199305 |\n", + "| 103.SR3 | -7.942718 | -7.942718 | -7.942718 | -7.942718 | -7.942718 | -7.942718 | -7.942718 | -7.942718 | -7.942718 | -7.942718 | ... | -7.942718 | -7.249570 | -7.942718 | -7.942718 | -7.942718 | -7.942718 | -7.942718 | -7.942718 | -7.249570 | -7.249570 |\n", + "| 103.IE2 | -7.208230 | -7.901377 | -7.901377 | -7.901377 | -7.901377 | -7.901377 | -7.901377 | -7.901377 | -7.901377 | -7.901377 | ... | -7.901377 | -7.901377 | -7.901377 | -7.901377 | -7.901377 | -7.901377 | -6.515083 | -7.901377 | -7.901377 | -7.208230 |\n", + "| 103.BP1 | -7.781139 | -7.781139 | -7.781139 | -7.781139 | -7.781139 | -7.781139 | -7.781139 | -7.781139 | -7.781139 | -7.781139 | ... | -7.781139 | -7.781139 | -7.781139 | -7.781139 | -7.781139 | -7.781139 | -7.781139 | -7.781139 | -7.781139 | -7.087991 |\n", + "| 103.VC2 | -7.825645 | -7.825645 | -7.825645 | -7.825645 | -7.825645 | -7.825645 | -7.825645 | -7.825645 | -7.825645 | -6.439350 | ... | -7.825645 | -7.825645 | -7.825645 | -7.825645 | -7.825645 | -7.825645 | -7.825645 | -7.825645 | -7.825645 | -7.132498 |\n", + "\n" + ], + "text/plain": [ + " k__Bacteria.p__Firmicutes.c__Bacilli.o__Bacillales.f__Paenibacillaceae.g__Paenibacillus.s__\n", + "103.CA2 -7.828436 \n", + "103.CO3 -7.892452 \n", + "103.SR3 -7.942718 \n", + "103.IE2 -7.208230 \n", + "103.BP1 -7.781139 \n", + "103.VC2 -7.825645 \n", + " k__Bacteria.p__Firmicutes.c__Bacilli.o__Bacillales.f__Bacillaceae.g__Bacillus.s__muralis\n", + "103.CA2 -7.828436 \n", + "103.CO3 -7.892452 \n", + "103.SR3 -7.942718 \n", + "103.IE2 -7.901377 \n", + "103.BP1 -7.781139 \n", + "103.VC2 -7.825645 \n", + " k__Bacteria.p__Proteobacteria.c__Alphaproteobacteria.o__Sphingomonadales.f__Sphingomonadaceae.g__Novosphingobium.s__\n", + "103.CA2 -7.828436 \n", + "103.CO3 -7.892452 \n", + "103.SR3 -7.942718 \n", + "103.IE2 -7.901377 \n", + "103.BP1 -7.781139 \n", + "103.VC2 -7.825645 \n", + " k__Bacteria.p__Acidobacteria.c__Solibacteres.o__Solibacterales.f__Solibacteraceae.g__Candidatus.Solibacter.s__\n", + "103.CA2 -7.828436 \n", + "103.CO3 -7.892452 \n", + "103.SR3 -7.942718 \n", + "103.IE2 -7.901377 \n", + "103.BP1 -7.781139 \n", + "103.VC2 -7.825645 \n", + " k__Bacteria.p__Proteobacteria.c__Alphaproteobacteria.o__Rhizobiales.f__Hyphomicrobiaceae.g__Rhodoplanes.s__\n", + "103.CA2 -7.828436 \n", + "103.CO3 -7.892452 \n", + "103.SR3 -7.942718 \n", + "103.IE2 -7.901377 \n", + "103.BP1 -7.781139 \n", + "103.VC2 -7.825645 \n", + " k__Bacteria.p__Actinobacteria.c__Actinobacteria.o__Actinomycetales.f__Nocardioidaceae.g__Nocardioides.s__\n", + "103.CA2 -7.828436 \n", + "103.CO3 -7.892452 \n", + "103.SR3 -7.942718 \n", + "103.IE2 -7.901377 \n", + "103.BP1 -7.781139 \n", + "103.VC2 -7.825645 \n", + " k__Bacteria.p__Bacteroidetes.c__Flavobacteriia.o__Flavobacteriales.f__Flavobacteriaceae.g__Flavobacterium.s__\n", + "103.CA2 -7.828436 \n", + "103.CO3 -7.892452 \n", + "103.SR3 -7.942718 \n", + "103.IE2 -7.901377 \n", + "103.BP1 -7.781139 \n", + "103.VC2 -7.825645 \n", + " k__Bacteria.p__Firmicutes.c__Clostridia.o__Clostridiales.f__Peptococcaceae.g__Desulfotomaculum.s__\n", + "103.CA2 -7.828436 \n", + "103.CO3 -7.892452 \n", + "103.SR3 -7.942718 \n", + "103.IE2 -7.901377 \n", + "103.BP1 -7.781139 \n", + "103.VC2 -7.825645 \n", + " k__Bacteria.p__Acidobacteria.c__Acidobacteriia.o__Acidobacteriales.f__Koribacteraceae.g__Candidatus.Koribacter.s__\n", + "103.CA2 -7.828436 \n", + "103.CO3 -7.892452 \n", + "103.SR3 -7.942718 \n", + "103.IE2 -7.901377 \n", + "103.BP1 -7.781139 \n", + "103.VC2 -7.825645 \n", + " k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Burkholderiales.f__Comamonadaceae.g__Methylibium.s__\n", + "103.CA2 -7.828436 \n", + "103.CO3 -7.892452 \n", + "103.SR3 -7.942718 \n", + "103.IE2 -7.901377 \n", + "103.BP1 -7.781139 \n", + "103.VC2 -6.439350 \n", + " ...\n", + "103.CA2 ...\n", + "103.CO3 ...\n", + "103.SR3 ...\n", + "103.IE2 ...\n", + "103.BP1 ...\n", + "103.VC2 ...\n", + " k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Burkholderiales.f__Comamonadaceae.g__Rhodoferax.s__.4\n", + "103.CA2 -7.828436 \n", + "103.CO3 -7.892452 \n", + "103.SR3 -7.942718 \n", + "103.IE2 -7.901377 \n", + "103.BP1 -7.781139 \n", + "103.VC2 -7.825645 \n", + " k__Bacteria.p__Proteobacteria.c__Gammaproteobacteria.o__Xanthomonadales.f__Xanthomonadaceae.g__Dokdonella.s__.9\n", + "103.CA2 -7.828436 \n", + "103.CO3 -7.892452 \n", + "103.SR3 -7.249570 \n", + "103.IE2 -7.901377 \n", + "103.BP1 -7.781139 \n", + "103.VC2 -7.825645 \n", + " k__Bacteria.p__Firmicutes.c__Bacilli.o__Lactobacillales.f__Streptococcaceae.g__Streptococcus.s__.9\n", + "103.CA2 -7.828436 \n", + "103.CO3 -7.892452 \n", + "103.SR3 -7.942718 \n", + "103.IE2 -7.901377 \n", + "103.BP1 -7.781139 \n", + "103.VC2 -7.825645 \n", + " k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Methylophilales.f__Methylophilaceae.g__Methylotenera.s__mobilis.2\n", + "103.CA2 -7.828436 \n", + "103.CO3 -7.892452 \n", + "103.SR3 -7.942718 \n", + "103.IE2 -7.901377 \n", + "103.BP1 -7.781139 \n", + "103.VC2 -7.825645 \n", + " k__Bacteria.p__Actinobacteria.c__Actinobacteria.o__Actinomycetales.f__Streptomycetaceae.g__Streptomyces.s__.44\n", + "103.CA2 -7.828436 \n", + "103.CO3 -7.892452 \n", + "103.SR3 -7.942718 \n", + "103.IE2 -7.901377 \n", + "103.BP1 -7.781139 \n", + "103.VC2 -7.825645 \n", + " k__Bacteria.p__Proteobacteria.c__Gammaproteobacteria.o__Xanthomonadales.f__Xanthomonadaceae.g__Luteimonas.s__.2\n", + "103.CA2 -7.828436 \n", + "103.CO3 -7.892452 \n", + "103.SR3 -7.942718 \n", + "103.IE2 -7.901377 \n", + "103.BP1 -7.781139 \n", + "103.VC2 -7.825645 \n", + " k__Bacteria.p__Proteobacteria.c__Alphaproteobacteria.o__Rhizobiales.f__Hyphomicrobiaceae.g__Rhodoplanes.s__.142\n", + "103.CA2 -7.828436 \n", + "103.CO3 -7.892452 \n", + "103.SR3 -7.942718 \n", + "103.IE2 -6.515083 \n", + "103.BP1 -7.781139 \n", + "103.VC2 -7.825645 \n", + " k__Bacteria.p__Firmicutes.c__Bacilli.o__Bacillales.f__Planococcaceae.g__Solibacillus.s__.3\n", + "103.CA2 -7.828436 \n", + "103.CO3 -7.892452 \n", + "103.SR3 -7.942718 \n", + "103.IE2 -7.901377 \n", + "103.BP1 -7.781139 \n", + "103.VC2 -7.825645 \n", + " k__Bacteria.p__Proteobacteria.c__Betaproteobacteria.o__Burkholderiales.f__Comamonadaceae.g__Ramlibacter.s__.9\n", + "103.CA2 -7.828436 \n", + "103.CO3 -7.892452 \n", + "103.SR3 -7.249570 \n", + "103.IE2 -7.901377 \n", + "103.BP1 -7.781139 \n", + "103.VC2 -7.825645 \n", + " k__Bacteria.p__Actinobacteria.c__Actinobacteria.o__Actinomycetales.f__Mycobacteriaceae.g__Mycobacterium.s__.28\n", + "103.CA2 -7.828436 \n", + "103.CO3 -7.199305 \n", + "103.SR3 -7.249570 \n", + "103.IE2 -7.208230 \n", + "103.BP1 -7.087991 \n", + "103.VC2 -7.132498 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# add pesudo count 0.5\n", + "x = count # preprossed done already\n", + "x[x == 0] <- 0.5\n", + "x <- x/rowSums(x) # relative abundance\n", + "taxa <- log(x)\n", + "dim(taxa)\n", + "head(taxa)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 'BarcodeSequence'
  2. \n", + "\t
  3. 'LinkerPrimerSequence'
  4. \n", + "\t
  5. 'barcode_read_group_tag'
  6. \n", + "\t
  7. 'dna_extracted_prep'
  8. \n", + "\t
  9. 'experiment_alias'
  10. \n", + "\t
  11. 'experiment_center'
  12. \n", + "\t
  13. 'experiment_design_description'
  14. \n", + "\t
  15. 'experiment_title'
  16. \n", + "\t
  17. 'instrument_name'
  18. \n", + "\t
  19. 'key_seq'
  20. \n", + "\t
  21. 'library_construction_protocol'
  22. \n", + "\t
  23. 'linker'
  24. \n", + "\t
  25. 'pcr_primers'
  26. \n", + "\t
  27. 'physical_specimen_remaining_prep'
  28. \n", + "\t
  29. 'platform'
  30. \n", + "\t
  31. 'pool_member_name'
  32. \n", + "\t
  33. 'pool_proportion'
  34. \n", + "\t
  35. 'primer_read_group_tag'
  36. \n", + "\t
  37. 'region'
  38. \n", + "\t
  39. 'run_alias'
  40. \n", + "\t
  41. 'run_center'
  42. \n", + "\t
  43. 'run_date'
  44. \n", + "\t
  45. 'run_prefix'
  46. \n", + "\t
  47. 'samp_size'
  48. \n", + "\t
  49. 'sample_center'
  50. \n", + "\t
  51. 'sample_type_prep'
  52. \n", + "\t
  53. 'sequencing_meth'
  54. \n", + "\t
  55. 'study_center'
  56. \n", + "\t
  57. 'study_ref'
  58. \n", + "\t
  59. 'target_gene'
  60. \n", + "\t
  61. 'target_subfragment'
  62. \n", + "\t
  63. 'altitude'
  64. \n", + "\t
  65. 'annual_season_precpt'
  66. \n", + "\t
  67. 'annual_season_temp'
  68. \n", + "\t
  69. 'anonymized_name'
  70. \n", + "\t
  71. 'assigned_from_geo'
  72. \n", + "\t
  73. 'carb_nitro_ratio'
  74. \n", + "\t
  75. 'cmin_rate'
  76. \n", + "\t
  77. 'collection_date'
  78. \n", + "\t
  79. 'common_name'
  80. \n", + "\t
  81. 'country'
  82. \n", + "\t
  83. 'depth'
  84. \n", + "\t
  85. 'dna_extracted'
  86. \n", + "\t
  87. 'elevation'
  88. \n", + "\t
  89. 'env_biome'
  90. \n", + "\t
  91. 'env_feature'
  92. \n", + "\t
  93. 'env_matter'
  94. \n", + "\t
  95. 'host_subject_id'
  96. \n", + "\t
  97. 'latitude'
  98. \n", + "\t
  99. 'longitude'
  100. \n", + "\t
  101. 'ph'
  102. \n", + "\t
  103. 'physical_specimen_remaining'
  104. \n", + "\t
  105. 'project_name'
  106. \n", + "\t
  107. 'public'
  108. \n", + "\t
  109. 'sample_type'
  110. \n", + "\t
  111. 'silt_clay'
  112. \n", + "\t
  113. 'soil_moisture_deficit'
  114. \n", + "\t
  115. 'soil_type'
  116. \n", + "\t
  117. 'specific_location'
  118. \n", + "\t
  119. 'taxon_id'
  120. \n", + "\t
  121. 'texture'
  122. \n", + "\t
  123. 'title'
  124. \n", + "\t
  125. 'tot_org_carb'
  126. \n", + "\t
  127. 'tot_org_nitro'
  128. \n", + "\t
  129. 'Description'
  130. \n", + "\t
  131. 'ph2'
  132. \n", + "\t
  133. 'ph3'
  134. \n", + "\t
  135. 'ph4'
  136. \n", + "\t
  137. 'ph_rounded'
  138. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 'BarcodeSequence'\n", + "\\item 'LinkerPrimerSequence'\n", + "\\item 'barcode\\_read\\_group\\_tag'\n", + "\\item 'dna\\_extracted\\_prep'\n", + "\\item 'experiment\\_alias'\n", + "\\item 'experiment\\_center'\n", + "\\item 'experiment\\_design\\_description'\n", + "\\item 'experiment\\_title'\n", + "\\item 'instrument\\_name'\n", + "\\item 'key\\_seq'\n", + "\\item 'library\\_construction\\_protocol'\n", + "\\item 'linker'\n", + "\\item 'pcr\\_primers'\n", + "\\item 'physical\\_specimen\\_remaining\\_prep'\n", + "\\item 'platform'\n", + "\\item 'pool\\_member\\_name'\n", + "\\item 'pool\\_proportion'\n", + "\\item 'primer\\_read\\_group\\_tag'\n", + "\\item 'region'\n", + "\\item 'run\\_alias'\n", + "\\item 'run\\_center'\n", + "\\item 'run\\_date'\n", + "\\item 'run\\_prefix'\n", + "\\item 'samp\\_size'\n", + "\\item 'sample\\_center'\n", + "\\item 'sample\\_type\\_prep'\n", + "\\item 'sequencing\\_meth'\n", + "\\item 'study\\_center'\n", + "\\item 'study\\_ref'\n", + "\\item 'target\\_gene'\n", + "\\item 'target\\_subfragment'\n", + "\\item 'altitude'\n", + "\\item 'annual\\_season\\_precpt'\n", + "\\item 'annual\\_season\\_temp'\n", + "\\item 'anonymized\\_name'\n", + "\\item 'assigned\\_from\\_geo'\n", + "\\item 'carb\\_nitro\\_ratio'\n", + "\\item 'cmin\\_rate'\n", + "\\item 'collection\\_date'\n", + "\\item 'common\\_name'\n", + "\\item 'country'\n", + "\\item 'depth'\n", + "\\item 'dna\\_extracted'\n", + "\\item 'elevation'\n", + "\\item 'env\\_biome'\n", + "\\item 'env\\_feature'\n", + "\\item 'env\\_matter'\n", + "\\item 'host\\_subject\\_id'\n", + "\\item 'latitude'\n", + "\\item 'longitude'\n", + "\\item 'ph'\n", + "\\item 'physical\\_specimen\\_remaining'\n", + "\\item 'project\\_name'\n", + "\\item 'public'\n", + "\\item 'sample\\_type'\n", + "\\item 'silt\\_clay'\n", + "\\item 'soil\\_moisture\\_deficit'\n", + "\\item 'soil\\_type'\n", + "\\item 'specific\\_location'\n", + "\\item 'taxon\\_id'\n", + "\\item 'texture'\n", + "\\item 'title'\n", + "\\item 'tot\\_org\\_carb'\n", + "\\item 'tot\\_org\\_nitro'\n", + "\\item 'Description'\n", + "\\item 'ph2'\n", + "\\item 'ph3'\n", + "\\item 'ph4'\n", + "\\item 'ph\\_rounded'\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 'BarcodeSequence'\n", + "2. 'LinkerPrimerSequence'\n", + "3. 'barcode_read_group_tag'\n", + "4. 'dna_extracted_prep'\n", + "5. 'experiment_alias'\n", + "6. 'experiment_center'\n", + "7. 'experiment_design_description'\n", + "8. 'experiment_title'\n", + "9. 'instrument_name'\n", + "10. 'key_seq'\n", + "11. 'library_construction_protocol'\n", + "12. 'linker'\n", + "13. 'pcr_primers'\n", + "14. 'physical_specimen_remaining_prep'\n", + "15. 'platform'\n", + "16. 'pool_member_name'\n", + "17. 'pool_proportion'\n", + "18. 'primer_read_group_tag'\n", + "19. 'region'\n", + "20. 'run_alias'\n", + "21. 'run_center'\n", + "22. 'run_date'\n", + "23. 'run_prefix'\n", + "24. 'samp_size'\n", + "25. 'sample_center'\n", + "26. 'sample_type_prep'\n", + "27. 'sequencing_meth'\n", + "28. 'study_center'\n", + "29. 'study_ref'\n", + "30. 'target_gene'\n", + "31. 'target_subfragment'\n", + "32. 'altitude'\n", + "33. 'annual_season_precpt'\n", + "34. 'annual_season_temp'\n", + "35. 'anonymized_name'\n", + "36. 'assigned_from_geo'\n", + "37. 'carb_nitro_ratio'\n", + "38. 'cmin_rate'\n", + "39. 'collection_date'\n", + "40. 'common_name'\n", + "41. 'country'\n", + "42. 'depth'\n", + "43. 'dna_extracted'\n", + "44. 'elevation'\n", + "45. 'env_biome'\n", + "46. 'env_feature'\n", + "47. 'env_matter'\n", + "48. 'host_subject_id'\n", + "49. 'latitude'\n", + "50. 'longitude'\n", + "51. 'ph'\n", + "52. 'physical_specimen_remaining'\n", + "53. 'project_name'\n", + "54. 'public'\n", + "55. 'sample_type'\n", + "56. 'silt_clay'\n", + "57. 'soil_moisture_deficit'\n", + "58. 'soil_type'\n", + "59. 'specific_location'\n", + "60. 'taxon_id'\n", + "61. 'texture'\n", + "62. 'title'\n", + "63. 'tot_org_carb'\n", + "64. 'tot_org_nitro'\n", + "65. 'Description'\n", + "66. 'ph2'\n", + "67. 'ph3'\n", + "68. 'ph4'\n", + "69. 'ph_rounded'\n", + "\n", + "\n" + ], + "text/plain": [ + " [1] \"BarcodeSequence\" \"LinkerPrimerSequence\" \n", + " [3] \"barcode_read_group_tag\" \"dna_extracted_prep\" \n", + " [5] \"experiment_alias\" \"experiment_center\" \n", + " [7] \"experiment_design_description\" \"experiment_title\" \n", + " [9] \"instrument_name\" \"key_seq\" \n", + "[11] \"library_construction_protocol\" \"linker\" \n", + "[13] \"pcr_primers\" \"physical_specimen_remaining_prep\"\n", + "[15] \"platform\" \"pool_member_name\" \n", + "[17] \"pool_proportion\" \"primer_read_group_tag\" \n", + "[19] \"region\" \"run_alias\" \n", + "[21] \"run_center\" \"run_date\" \n", + "[23] \"run_prefix\" \"samp_size\" \n", + "[25] \"sample_center\" \"sample_type_prep\" \n", + "[27] \"sequencing_meth\" \"study_center\" \n", + "[29] \"study_ref\" \"target_gene\" \n", + "[31] \"target_subfragment\" \"altitude\" \n", + "[33] \"annual_season_precpt\" \"annual_season_temp\" \n", + "[35] \"anonymized_name\" \"assigned_from_geo\" \n", + "[37] \"carb_nitro_ratio\" \"cmin_rate\" \n", + "[39] \"collection_date\" \"common_name\" \n", + "[41] \"country\" \"depth\" \n", + "[43] \"dna_extracted\" \"elevation\" \n", + "[45] \"env_biome\" \"env_feature\" \n", + "[47] \"env_matter\" \"host_subject_id\" \n", + "[49] \"latitude\" \"longitude\" \n", + "[51] \"ph\" \"physical_specimen_remaining\" \n", + "[53] \"project_name\" \"public\" \n", + "[55] \"sample_type\" \"silt_clay\" \n", + "[57] \"soil_moisture_deficit\" \"soil_type\" \n", + "[59] \"specific_location\" \"taxon_id\" \n", + "[61] \"texture\" \"title\" \n", + "[63] \"tot_org_carb\" \"tot_org_nitro\" \n", + "[65] \"Description\" \"ph2\" \n", + "[67] \"ph3\" \"ph4\" \n", + "[69] \"ph_rounded\" " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "colnames(demo)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "89" + ], + "text/latex": [ + "89" + ], + "text/markdown": [ + "89" + ], + "text/plain": [ + "[1] 89" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 8.02
  2. \n", + "\t
  3. 6.02
  4. \n", + "\t
  5. 6.95
  6. \n", + "\t
  7. 5.52
  8. \n", + "\t
  9. 7.53
  10. \n", + "\t
  11. 5.99
  12. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 8.02\n", + "\\item 6.02\n", + "\\item 6.95\n", + "\\item 5.52\n", + "\\item 7.53\n", + "\\item 5.99\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 8.02\n", + "2. 6.02\n", + "3. 6.95\n", + "4. 5.52\n", + "5. 7.53\n", + "6. 5.99\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 8.02 6.02 6.95 5.52 7.53 5.99" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# metadata\n", + "mf <- read.csv(\"../88soils/88soils_modified_metadata.txt\", sep='\\t', row.names=1)\n", + "y <- mf$ph[match(rownames(count), rownames(mf))]\n", + "length(y)\n", + "head(y)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "'matrix'" + ], + "text/latex": [ + "'matrix'" + ], + "text/markdown": [ + "'matrix'" + ], + "text/plain": [ + "[1] \"matrix\"" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "'numeric'" + ], + "text/latex": [ + "'numeric'" + ], + "text/markdown": [ + "'numeric'" + ], + "text/plain": [ + "[1] \"numeric\"" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check datatype\n", + "class(taxa); class(y)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "# save processed data\n", + "save(y, taxa, file='../88soils/soils_ph.RData')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/data_application/notebooks_application/2.3 soils_results_cts.ipynb b/data_application/notebooks_application/2.3 soils_results_cts.ipynb new file mode 100755 index 0000000..34fdcc6 --- /dev/null +++ b/data_application/notebooks_application/2.3 soils_results_cts.ipynb @@ -0,0 +1,402 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Soil microbiome data application results for continuous outcome" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### method comparisons" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "load('../88soils/results_cts/soils_ph_compLasso.RData')\n", + "load('../88soils/results_cts/soils_ph_elnet.RData')\n", + "load('../88soils/results_cts/soils_ph_lasso.RData')\n", + "load('../88soils/results_cts/soils_ph_rf.RData')" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 0.39
  2. \n", + "\t
  3. 0.46
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 0.39\n", + "\\item 0.46\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 0.39\n", + "2. 0.46\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 0.39 0.46" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "c(out_compLasso$stab_index, out_compLasso$MSE_mean)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 0.31
  2. \n", + "\t
  3. 0.34
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 0.31\n", + "\\item 0.34\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 0.31\n", + "2. 0.34\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 0.31 0.34" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "c(out_lasso$stab_index, out_lasso$MSE_mean) " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 0.16
  2. \n", + "\t
  3. 0.23
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 0.16\n", + "\\item 0.23\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 0.16\n", + "2. 0.23\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 0.16 0.23" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "c(out_elnet$stab_index, out_elnet$MSE_mean)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 0.04
  2. \n", + "\t
  3. 0.26
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 0.04\n", + "\\item 0.26\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 0.04\n", + "2. 0.26\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 0.04 0.26" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "c(out_rf$stab_index, out_rf$MSE_mean)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
datasetmethodmsestability
soil_88 lasso 0.34 0.31
soil_88 elent 0.23 0.16
soil_88 rf 0.26 0.04
soil_88 compLasso0.46 0.39
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|llll}\n", + " dataset & method & mse & stability\\\\\n", + "\\hline\n", + "\t soil\\_88 & lasso & 0.34 & 0.31 \\\\\n", + "\t soil\\_88 & elent & 0.23 & 0.16 \\\\\n", + "\t soil\\_88 & rf & 0.26 & 0.04 \\\\\n", + "\t soil\\_88 & compLasso & 0.46 & 0.39 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| dataset | method | mse | stability |\n", + "|---|---|---|---|\n", + "| soil_88 | lasso | 0.34 | 0.31 |\n", + "| soil_88 | elent | 0.23 | 0.16 |\n", + "| soil_88 | rf | 0.26 | 0.04 |\n", + "| soil_88 | compLasso | 0.46 | 0.39 |\n", + "\n" + ], + "text/plain": [ + " dataset method mse stability\n", + "1 soil_88 lasso 0.34 0.31 \n", + "2 soil_88 elent 0.23 0.16 \n", + "3 soil_88 rf 0.26 0.04 \n", + "4 soil_88 compLasso 0.46 0.39 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# combine and export results\n", + "soil_88 = as.data.frame(matrix(NA, nrow=4, ncol=4))\n", + "colnames(soil_88) = c('dataset', 'method', 'mse', 'stability')\n", + "soil_88$dataset = 'soil_88'\n", + "soil_88$method = c('lasso', 'elent', 'rf', 'compLasso')\n", + "soil_88$mse = c(out_lasso$MSE_mean, out_elnet$MSE_mean, out_rf$MSE_mean, out_compLasso$MSE_mean)\n", + "soil_88$stability = c(out_lasso$stab_index, out_elnet$stab_index, out_rf$stab_index, out_compLasso$stab_index)\n", + "soil_88" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### hypothesis testing" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "load('../88soils/results_cts/soils_ph_boot_compLasso.RData')\n", + "load('../88soils/results_cts/soils_ph_boot_rf.RData')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "0.3595" + ], + "text/latex": [ + "0.3595" + ], + "text/markdown": [ + "0.3595" + ], + "text/plain": [ + "[1] 0.3595" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\t
2.5%
\n", + "\t\t
0.28
\n", + "\t
97.5%
\n", + "\t\t
0.44
\n", + "
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[2.5\\textbackslash{}\\%] 0.28\n", + "\\item[97.5\\textbackslash{}\\%] 0.44\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "2.5%\n", + ": 0.2897.5%\n", + ": 0.44\n", + "\n" + ], + "text/plain": [ + " 2.5% 97.5% \n", + " 0.28 0.44 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "diff_stab = (boot_compLasso$stab_index - boot_rf$stab_index)\n", + "mean(diff_stab)\n", + "quantile(diff_stab, probs = c(0.025, 0.975)) \n", + "# CI doesn't contain zero: compLasso is significantly more stable than RF" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "0.0811150164524993" + ], + "text/latex": [ + "0.0811150164524993" + ], + "text/markdown": [ + "0.0811150164524993" + ], + "text/plain": [ + "[1] 0.08111502" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\t
2.5%
\n", + "\t\t
-0.283912044397921
\n", + "\t
97.5%
\n", + "\t\t
0.945808111396662
\n", + "
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[2.5\\textbackslash{}\\%] -0.283912044397921\n", + "\\item[97.5\\textbackslash{}\\%] 0.945808111396662\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "2.5%\n", + ": -0.28391204439792197.5%\n", + ": 0.945808111396662\n", + "\n" + ], + "text/plain": [ + " 2.5% 97.5% \n", + "-0.2839120 0.9458081 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "diff_mse = (unlist(boot_compLasso$MSE_list) - unlist(boot_rf$MSE_list)) # use all 100*100 MSEs\n", + "mean(diff_mse)\n", + "quantile(diff_mse, probs = c(0.025, 0.975)) \n", + "# CI contain zero: compLasso is not significantly different from RF based on MSE" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/data_application/notebooks_application/3_applications_bin_results.ipynb b/data_application/notebooks_application/3_applications_bin_results.ipynb new file mode 100644 index 0000000..fa46c90 --- /dev/null +++ b/data_application/notebooks_application/3_applications_bin_results.ipynb @@ -0,0 +1,505 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Results for real microbiome data applications" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/data_applications/'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### BMI dataset application" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "load(paste0(dir, '/BMI_binary_GenCompLasso.RData'))\n", + "load(paste0(dir, '/BMI_binary_lasso.RData', sep=''))\n", + "load(paste0(dir, '/BMI_binary_elnet.RData', sep=''))\n", + "load(paste0(dir, '/BMI_binary_rf.RData', sep=''))" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 4 × 4
datasetmethodROCstability
<chr><chr><dbl><dbl>
bmi_gutlasso 0.630.14
bmi_gutelent 0.780.19
bmi_gutrf 1.000.01
bmi_gutcompLasso0.850.29
\n" + ], + "text/latex": [ + "A data.frame: 4 × 4\n", + "\\begin{tabular}{llll}\n", + " dataset & method & ROC & stability\\\\\n", + " & & & \\\\\n", + "\\hline\n", + "\t bmi\\_gut & lasso & 0.63 & 0.14\\\\\n", + "\t bmi\\_gut & elent & 0.78 & 0.19\\\\\n", + "\t bmi\\_gut & rf & 1.00 & 0.01\\\\\n", + "\t bmi\\_gut & compLasso & 0.85 & 0.29\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 4 × 4\n", + "\n", + "| dataset <chr> | method <chr> | ROC <dbl> | stability <dbl> |\n", + "|---|---|---|---|\n", + "| bmi_gut | lasso | 0.63 | 0.14 |\n", + "| bmi_gut | elent | 0.78 | 0.19 |\n", + "| bmi_gut | rf | 1.00 | 0.01 |\n", + "| bmi_gut | compLasso | 0.85 | 0.29 |\n", + "\n" + ], + "text/plain": [ + " dataset method ROC stability\n", + "1 bmi_gut lasso 0.63 0.14 \n", + "2 bmi_gut elent 0.78 0.19 \n", + "3 bmi_gut rf 1.00 0.01 \n", + "4 bmi_gut compLasso 0.85 0.29 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "bmi_gut = as.data.frame(matrix(NA, nrow=4, ncol=4))\n", + "colnames(bmi_gut) = c('dataset', 'method', 'ROC', 'stability')\n", + "bmi_gut$dataset = 'bmi_gut'\n", + "bmi_gut$method = c('lasso', 'elent', 'rf', 'compLasso')\n", + "bmi_gut$ROC = c(out_lasso$ROC_mean, out_elnet$ROC_mean, out_rf$ROC_mean, out_GenCompLasso$ROC_mean)\n", + "bmi_gut$stability = c(out_lasso$stab_index, out_elnet$stab_index, out_rf$stab_index, out_GenCompLasso$stab_index)\n", + "bmi_gut" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "# testing\n", + "load(paste0(dir, '/BMI_binary_boot_rf.RData'))\n", + "load(paste0(dir, '/BMI_binary_boot_compLasso.RData'))" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "0.2997" + ], + "text/latex": [ + "0.2997" + ], + "text/markdown": [ + "0.2997" + ], + "text/plain": [ + "[1] 0.2997" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
2.5%
0.11
97.5%
0.41525
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[2.5\\textbackslash{}\\%] 0.11\n", + "\\item[97.5\\textbackslash{}\\%] 0.41525\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "2.5%\n", + ": 0.1197.5%\n", + ": 0.41525\n", + "\n" + ], + "text/plain": [ + " 2.5% 97.5% \n", + "0.11000 0.41525 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "diff_stab = (boot_compLasso$stab_index - boot_rf$stab_index)\n", + "mean(diff_stab)\n", + "quantile(diff_stab, probs = c(0.025, 0.975)) \n", + "# CI doesn't contain zero: compLasso is significantly more stable than RF" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "-0.0942798529453605" + ], + "text/latex": [ + "-0.0942798529453605" + ], + "text/markdown": [ + "-0.0942798529453605" + ], + "text/plain": [ + "[1] -0.09427985" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
2.5%
-0.19020132947925
97.5%
-0.020967051775781
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[2.5\\textbackslash{}\\%] -0.19020132947925\n", + "\\item[97.5\\textbackslash{}\\%] -0.020967051775781\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "2.5%\n", + ": -0.1902013294792597.5%\n", + ": -0.020967051775781\n", + "\n" + ], + "text/plain": [ + " 2.5% 97.5% \n", + "-0.19020133 -0.02096705 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "diff_ROC = (unlist(boot_compLasso$ROC_list) - unlist(boot_rf$ROC_list)) # use all 100*100 ROCs\n", + "mean(diff_ROC)\n", + "quantile(diff_ROC, probs = c(0.025, 0.975)) \n", + "### CI doesn't contain zero: compLasso is significantly different from RF based on ROC\n", + "### although very close to zero (now ROC has similar scale as Stability, Stability still better differentiation)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 88 soils dataset application" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "load(paste0(dir, '/soils_binary_ph_GenCompLasso.RData', sep=''))\n", + "load(paste0(dir, '/soils_binary_ph_lasso.RData', sep=''))\n", + "load(paste0(dir, '/soils_binary_ph_elnet.RData', sep=''))\n", + "load(paste0(dir, '/soils_binary_ph_rf.RData', sep=''))" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 4 × 4
datasetmethodROCstability
<chr><chr><dbl><dbl>
soil_88lasso 0.900.28
soil_88elent 0.940.32
soil_88rf 1.000.03
soil_88compLasso0.960.46
\n" + ], + "text/latex": [ + "A data.frame: 4 × 4\n", + "\\begin{tabular}{llll}\n", + " dataset & method & ROC & stability\\\\\n", + " & & & \\\\\n", + "\\hline\n", + "\t soil\\_88 & lasso & 0.90 & 0.28\\\\\n", + "\t soil\\_88 & elent & 0.94 & 0.32\\\\\n", + "\t soil\\_88 & rf & 1.00 & 0.03\\\\\n", + "\t soil\\_88 & compLasso & 0.96 & 0.46\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 4 × 4\n", + "\n", + "| dataset <chr> | method <chr> | ROC <dbl> | stability <dbl> |\n", + "|---|---|---|---|\n", + "| soil_88 | lasso | 0.90 | 0.28 |\n", + "| soil_88 | elent | 0.94 | 0.32 |\n", + "| soil_88 | rf | 1.00 | 0.03 |\n", + "| soil_88 | compLasso | 0.96 | 0.46 |\n", + "\n" + ], + "text/plain": [ + " dataset method ROC stability\n", + "1 soil_88 lasso 0.90 0.28 \n", + "2 soil_88 elent 0.94 0.32 \n", + "3 soil_88 rf 1.00 0.03 \n", + "4 soil_88 compLasso 0.96 0.46 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "soil_88 = as.data.frame(matrix(NA, nrow=4, ncol=4))\n", + "colnames(soil_88) = c('dataset', 'method', 'ROC', 'stability')\n", + "soil_88$dataset = 'soil_88'\n", + "soil_88$method = c('lasso', 'elent', 'rf', 'compLasso')\n", + "soil_88$ROC = c(out_lasso$ROC_mean, out_elnet$ROC_mean, out_rf$ROC_mean, out_GenCompLasso$ROC_mean)\n", + "soil_88$stability = c(out_lasso$stab_index, out_elnet$stab_index, out_rf$stab_index, out_GenCompLasso$stab_index)\n", + "soil_88" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "# testing\n", + "load(paste0(dir, '/soils_binary_ph_boot_rf.RData'))\n", + "load(paste0(dir, '/soils_binary_ph_boot_compLasso.RData'))" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "0.4323" + ], + "text/latex": [ + "0.4323" + ], + "text/markdown": [ + "0.4323" + ], + "text/plain": [ + "[1] 0.4323" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
2.5%
0.37
97.5%
0.5
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[2.5\\textbackslash{}\\%] 0.37\n", + "\\item[97.5\\textbackslash{}\\%] 0.5\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "2.5%\n", + ": 0.3797.5%\n", + ": 0.5\n", + "\n" + ], + "text/plain": [ + " 2.5% 97.5% \n", + " 0.37 0.50 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "diff_stab = (boot_compLasso$stab_index - boot_rf$stab_index)\n", + "mean(diff_stab)\n", + "quantile(diff_stab, probs = c(0.025, 0.975)) \n", + "# CI doesn't contain zero: compLasso is significantly more stable than RF" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "-0.0247120820917325" + ], + "text/latex": [ + "-0.0247120820917325" + ], + "text/markdown": [ + "-0.0247120820917325" + ], + "text/plain": [ + "[1] -0.02471208" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
2.5%
-0.0838574423480084
97.5%
0
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[2.5\\textbackslash{}\\%] -0.0838574423480084\n", + "\\item[97.5\\textbackslash{}\\%] 0\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "2.5%\n", + ": -0.083857442348008497.5%\n", + ": 0\n", + "\n" + ], + "text/plain": [ + " 2.5% 97.5% \n", + "-0.08385744 0.00000000 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "diff_ROC = (unlist(boot_compLasso$ROC_list) - unlist(boot_rf$ROC_list)) # use all 100*100 ROCs\n", + "mean(diff_ROC)\n", + "quantile(diff_ROC, probs = c(0.025, 0.975)) \n", + "# CI contain zero: compLasso is not significantly different from RF based on ROC" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + " Min. 1st Qu. Median Mean 3rd Qu. Max. \n", + "-0.24949 -0.04206 -0.02250 -0.02471 0.00000 0.03769 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "summary(diff_ROC)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/ms_writing_figs/.DS_Store b/ms_writing_figs/.DS_Store deleted file mode 100755 index 5008ddf..0000000 Binary files a/ms_writing_figs/.DS_Store and /dev/null differ diff --git a/simulations/.DS_Store b/simulations/.DS_Store deleted file mode 100755 index 33cb786..0000000 Binary files a/simulations/.DS_Store and /dev/null differ diff --git a/simulations/code_sim_bin/.Rhistory b/simulations/code_sim_bin/.Rhistory new file mode 100644 index 0000000..b24e8d4 --- /dev/null +++ b/simulations/code_sim_bin/.Rhistory @@ -0,0 +1,58 @@ +6000.02/200.89 +512.18+438.53+430.93+403.07+161.12+94.60+72.56+24.66+0.60 +2138.25-1480.6 +85.02+243.51 +10+85.53+55.85+26.47+7.92+107.19+33.69 +110+85.02+250 +2138.25-143.32 +2188.21 +2188.21/201.16 +2188.21/201.1 +2188.21/201.2 +175.21 +175.21/87.6 +2806.70+1245+444.69 +7479.45-1121.20-4496.39 +5000-1625*2 +813.98+1750 +2940*2+2560 +4500+1500+1000 +1440*12 +x <- "hello xxx other stuff" +x +sub(" xxx.*", "", x) +x <- "hello (xxx) other stuff" +x +sub(" (.*", "", x) +sub(" (*", "", x) +x.split(' ') +fake_variable <- ' Country name is (FR)' +modified_fake_variable <- stringr::str_extract(string = fake_variable, +pattern = "(?<=\\().*(?=\\))") +modified_fake_variable +modified_fake_variable <- stringr::str_extract(string = fake_variable, +pattern = "(?>=\\()") +modified_fake_variable +sub("\\|.*", "", x) +x +sub("\\(.*", "", x) +5.5*3+6*2 +174.21/87.11 +174.21/87 +761.62/12 +setwd("~/Documents/Stability/github_code_history/stability-analyses/data_application/code_applications/code_cts") +source('../../code_method/cv_method.R') +source('../../code_method/getStability.R') +source('../../code_method/stab_data_applications.R') +source('../../code_method/bootstrap_test_compLasso_rf.R') +##################################### +##### data preparation ############## +##################################### +load('../../88soils/88soils_genus_table.RData') +source('../../../code_method/cv_method.R') +load('../../88soils/88soils_genus_table.RData') +setwd("~/Documents/Stability/github_code_history/stability-analyses/simulations/code_sim_bin") +source('../../code_method/cv_method_binary_update.R') +source('../../../code_method/cv_method_binary_update.R') +source('../../../code_method/getStability.R') +source('../../code_method/getStability.R') diff --git a/simulations/code_sim_bin/block_results_binary_update.R b/simulations/code_sim_bin/block_results_binary_update.R new file mode 100644 index 0000000..90817d8 --- /dev/null +++ b/simulations/code_sim_bin/block_results_binary_update.R @@ -0,0 +1,102 @@ +##################################################################################### +### run all methods on simulated data with block correlation ################## +##################################################################################### +args = commandArgs(trailingOnly=TRUE) +print(args) +dir = args[1] + +library(FSA) +source('../../code_method/getStability.R') +source('../../code_method/cv_method_binary_update.R') +source('cv_sim_apply_binary_update.R') + +dim.list = list() +size = c(50, 100, 500, 1000) +idx = 0 +for (P in size){ + for (N in size){ + idx = idx + 1 + dim.list[[idx]] = c(P=P, N=N) + } +} + +## correlation strength +rou.list = seq(0.1, 0.9, 0.2) + +files = NULL +for (rou in rou.list){ + for (dim in dim.list){ + p = dim[1] + n = dim[2] + files = cbind(files, paste0(dir, '/sim_block_corr', rou, paste('P', p, 'N', n, sep='_'), '.RData', sep='')) + } +} + +#------------------------ +# compare methods +#------------------------ +i <- as.numeric(Sys.getenv("PBS_ARRAYID")) + +################### +#### Lasso ######## +################### +print('Lasso') +file_name = files[[i]] +results_block_lasso = sim_evaluate_cv(sim_file=file_name, method='lasso', family='binomial') + +# when i = 73, sim_idx = 4, ROC cannot be calculated as y.test has all 0s +# thus change seed number to avoid this extreme example +# results_block_lasso = sim_evaluate_cv(sim_file=file_name, method='lasso', +# family='binomial', seednum=5231) + +save(file=paste0(dir, '/binary_update/block_Lasso_binary_', i, '.RData'), results_block_lasso, file_name) + + +######################### +#### Elastic Net ######## +######################### +print('Elnet') +file_name = files[[i]] +results_block_elnet= sim_evaluate_cv(sim_file=file_name, method='elnet', family='binomial') + +when i = 73, sim_idx = 4, ROC cannot be calculated as y.test has all 0s +thus change seed number to avoid this extreme example +results_block_elnet= sim_evaluate_cv(sim_file=file_name, method='elnet', + family='binomial', seednum=5231) + +save(file=paste0(dir, '/binary_update/block_Elnet_binary_', i, '.RData'), results_block_elnet, file_name) + +############################ +#### Random Forests ######## +############################ +print('Random Forests') +file_name = files[[i]] +results_block_rf = sim_evaluate_cv(sim_file=file_name, method='RF') + +when i = 73, sim_idx = 4, ROC cannot be calculated as y.test has all 0s +thus change seed number to avoid this extreme example +results_block_rf = sim_evaluate_cv(sim_file=file_name, method='RF', seednum=5231) + +save(file=paste0(dir, '/binary_update/block_RF_binary_', i, '.RData'), results_block_rf, file_name) + +# ######################################################### +# #### Generalized compositional Lasso ######## +# ######################################################### +print('Generalized Compositional Lasso') +file_name = files[[i]] +results_block_GenCompLasso = sim_evaluate_cv(sim_file=file_name, + method='GenCompLasso') + +save(file=paste0(dir, '/binary_update/block_GenCompLasso_binary_', i, '.RData'), + results_block_GenCompLasso, file_name) + +results_block_GenCompLasso_dataSplit = sim_evaluate_cv(sim_file=file_name, + method='GenCompLasso', + data.split=TRUE) + +# when i = 73, sim_idx = 4, ROC cannot be calculated as y.test has all 0s +# thus change seed number to avoid this extreme example +# results_block_GenCompLasso_dataSplit = sim_evaluate_cv(sim_file=file_name, +# method='GenCompLasso', +# data.split=TRUE, seednum=5231) + diff --git a/simulations/code_sim_bin/boot_sim_binary.R b/simulations/code_sim_bin/boot_sim_binary.R new file mode 100644 index 0000000..92167e0 --- /dev/null +++ b/simulations/code_sim_bin/boot_sim_binary.R @@ -0,0 +1,46 @@ +#----------------------------------------------------------------------------------------------- +# hypothesis testing based on boostrapped confidence interval in selected simulation scenarios +#----------------------------------------------------------------------------------------------- +args = commandArgs(trailingOnly=TRUE) +print(args) +dir = args[1] + +library(FSA) +source('../../code_method/cv_method_binary_update.R') +source('../../code_method/getStability.R') +source('../../code_method/bootstrap_test_compLasso_rf_binary.R') + +M <- as.numeric(Sys.getenv("PBS_ARRAYID")) + +if (M == 1){ + print('toeplitz: random forests') + toe_rf = boot_stab_sim(num_boot=100, sim_file= paste0(dir, '/sim_toeplitz_corr0.5P_1000_N_100.RData', sep=''), + method= 'RF', seednum=31, ratio.training=0.8, fold.cv=10, + mtry.grid=seq(5, 25, 5), num_trees = 500, pval_thr = 0.05) + save(toe_rf, file=paste0(dir, '/binary_update/boot_toe_RF_binary.RData')) +}else if (M == 2){ + print('toeplitz: generalized compositional lasso') + toe_genCompLasso = boot_stab_sim(num_boot=100, sim_file= paste0(dir, '/sim_toeplitz_corr0.5P_1000_N_100.RData', sep=''), + method= 'GenCompLasso', seednum=31, ratio.training=0.8, fold.cv=10, + lambda.coda=seq(0.1, 0.2, 0.01)) + save(toe_genCompLasso, file=paste0(dir, '/binary_update/boot_toe_genCompLasso_binary.RData')) +}else if (M == 3){ + print('block: random forests') + block_rf = boot_stab_sim(num_boot=100, sim_file= paste0(dir, '/sim_block_corr0.5P_1000_N_100.RData', sep=''), + method= 'RF', seednum=31, ratio.training=0.8, fold.cv=10, + mtry.grid=seq(5, 25, 5), num_trees = 500, pval_thr = 0.05) + + save(block_rf, file=paste0(dir, '/binary_update/boot_block_RF_binary.RData')) +}else if (M == 4){ + print('block: generalized compositional lasso') + block_genCompLasso = boot_stab_sim(num_boot=100, sim_file= paste0(dir, '/sim_block_corr0.5P_1000_N_100.RData', sep=''), + method= 'GenCompLasso', seednum=31, ratio.training=0.8, fold.cv=10, + lambda.coda=seq(0.1, 0.2, 0.01)) + save(block_genCompLasso, file=paste0(dir, '/binary_update/boot_block_genCompLasso_binary.RData')) +} + + + + + + diff --git a/simulations/code_sim_bin/cv_sim_apply_binary_update.R b/simulations/code_sim_bin/cv_sim_apply_binary_update.R new file mode 100644 index 0000000..855c352 --- /dev/null +++ b/simulations/code_sim_bin/cv_sim_apply_binary_update.R @@ -0,0 +1,82 @@ +####################################################################################### +### apply different feature selection methods to simulated data ####################### +####################################################################################### + +# library(FSA) # for se() +# source('cv_method_binary_update.R') +# source('getStability.R') + +sim_evaluate_cv = function(sim_file, method, seednum=31, ratio.training=0.8, + fold.cv=10, family='binomial', + lambda.grid=exp(seq(-4, -2, 0.2)), + alpha.grid=seq(0.1, 0.9, 0.1), + mtry.grid=seq(5, 25, 5), num_trees = 500, pval_thr = 0.05, + method.perm='altmann', + lambda.coda=seq(0.1, 0.2, 0.01), data.split=FALSE){ + # load simulated data + load(sim_file, dat <- new.env()) + + idx.start = 1; idx.stop = 100 # 100 repetitions for each simulated scenario + rou = dat$sim_array[[1]]$rou # rou, n, p are same across all repetitions + n = dat$sim_array[[1]]$n + p = dat$sim_array[[1]]$p + + # evaluating different methods + fp = fn = roc = NULL + stability.table = matrix(rep(0, (idx.stop - idx.start + 1) * p), ncol=p) + colnames(stability.table) = paste('V', seq(1:p), sep='') + + for (i in idx.start:idx.stop){ + print(paste0('simulation idx: ', i)) + sub = dat$sim_array[[i]] + coef = sub$beta + coef.true = which(coef != 0) + y_binary = as.factor(ifelse(sub$Y >= median(sub$Y), 1, 0)) + + if (method == 'lasso'){ + result = lasso_cv(y=y_binary, datx=sub$Z, seednum=seednum,family=family, lambda.choice='lambda.1se', + ratio.training=ratio.training, fold.cv=fold.cv, lambda.grid=lambda.grid) + select.features = result$coef.chosen + } else if (method == 'elnet'){ + result = elnet_cv(y=y_binary, datx=sub$Z, seednum=seednum,family=family, alpha.grid=alpha.grid, + ratio.training=ratio.training, fold.cv=fold.cv, lambda.grid=lambda.grid) + select.features = result$coef.chosen + } else if (method == 'RF'){ + result = randomForest_cv(y=y_binary, datx=sub$Z, seednum=seednum, fold.cv=fold.cv, + num_trees=num_trees, mtry.grid = mtry.grid, pval_thr=pval_thr, method.perm=method.perm) + select.features = result$coef.chosen + } else if (method == 'GenCompLasso'){ + # note that generalized compositonal lasso do X to Z transformation within + result = gen_cons_lasso_cv (y=y_binary, datx=sub$X, seednum=seednum, + data.split=data.split, + ratio.training=ratio.training, + lambda.coda=lambda.coda) + select.features = result$coef.chosen + } + + # false positives: shouldn't be chosen but chosen + fp = c(fp, length(setdiff(select.features, coef.true))) + + # false negatives: # should be chosen yet not + fn = c(fn, length(setdiff(coef.true, select.features))) + + # classification error + roc = c(roc, result$ROC) + + # stability table + stability.table[i, select.features] = 1 + } + + # store results + FP = paste(mean(fp), '(', round(se(fp),2), ')') + FN = paste(mean(fn), '(', round(se(fn),2), ')') + ROC = paste(round(mean(roc, na.rm=T),2), '(', round(se(roc, na.rm=T),2), ')') + Stab = round(getStability(stability.table)$stability, 2) + + results=list(rou=rou, n=n, p=p, FP=FP, FN=FN, ROC=ROC, Stab=Stab, + Stab.table=stability.table, FP.list=fp, FN.list=fn, ROC.list=roc) + +} + + + diff --git a/simulations/code_sim_bin/ind_results_binary_update.R b/simulations/code_sim_bin/ind_results_binary_update.R new file mode 100644 index 0000000..478b295 --- /dev/null +++ b/simulations/code_sim_bin/ind_results_binary_update.R @@ -0,0 +1,72 @@ +##################################################################################### +### run all methods on simulated data with independent correlation ################## +##################################################################################### +args = commandArgs(trailingOnly=TRUE) +print(args) +dir = args[1] +#dir = '../sim_data' + +library(FSA) +source('../../code_method/cv_method_binary_update.R') +source('../../code_method/getStability.R') +source('cv_sim_apply_binary_update.R') + + +dim.list = list() +size = c(50, 100, 500, 1000) +idx = 0 +for (P in size){ + for (N in size){ + idx = idx + 1 + dim.list[[idx]] = c(P=P, N=N) + } +} + +files = NULL +for (dim in dim.list){ + p = dim[1] + n = dim[2] + files = cbind(files, paste0(dir, '/sim_independent_', paste('P', p, 'N', n, sep='_'), '.RData')) +} + +#------------------------ +# compare methods +#------------------------ +i <- as.numeric(Sys.getenv("PBS_ARRAYID")) + +# ################### +# #### Lasso ######## +# ################### +print('Lasso') +file_name = files[[i]] +results_ind_lasso = sim_evaluate_cv(sim_file=file_name, method='lasso', family='binomial') + +save(file=paste0(dir, '/binary_update/ind_Lasso_binary_', i, '.RData'), results_ind_lasso, file_name) + +# # ######################### +# # #### Elastic Net ######## +# # ######################### +print('Elnet') +file_name = files[[i]] +results_ind_elnet = sim_evaluate_cv(sim_file=file_name, method='elnet', family='binomial') + +save(file=paste0(dir, '/binary_update/ind_Elnet_binary_', i, '.RData'), results_ind_elnet, file_name) + +# ############################ +# #### Random Forests ######## +# ############################ +print('Random Forests') +file_name = files[[i]] +results_ind_rf = sim_evaluate_cv(sim_file=file_name, method='RF') +save(file=paste0(dir, '/binary_update/ind_RF_binary_', i, '.RData'), results_ind_rf, file_name) + +# ######################################################### +# #### Generalized compositional Lasso ######## +# ######################################################### +print('Generalized Compositional Lasso') +file_name = files[[i]] +results_ind_GenCompLasso = sim_evaluate_cv (sim_file=file_name, method='GenCompLasso') + +save(file=paste0(dir, '/binary_update/ind_GenCompLasso_binary_', i, '.RData'), + results_ind_GenCompLasso, file_name) + diff --git a/simulations/code_sim_bin/run_sim_bin.sh b/simulations/code_sim_bin/run_sim_bin.sh new file mode 100644 index 0000000..f7327c8 --- /dev/null +++ b/simulations/code_sim_bin/run_sim_bin.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +#PBS -N sim_stab +#PBS -l walltime=500:00:00 +#PBS -l nodes=1:ppn=10 +#PBS -l mem=20gb +#PBS -V +#PBS -j oe +#PBS -d . +#PBS -t 1-4%4 +#PBS -o messages_outputs/ +#PBS -e messages_errors/ + +set -e +cpus=$PBS_NUM_PPN + +export TMPDIR=/panfs/panfs1.ucsd.edu/panscratch/$USER/Stability_2020 +[ ! -d $TMPDIR ] && mkdir $TMPDIR +export TMPDIR=$TMPDIR/sim_data +[ ! -d $TMPDIR ] && mkdir $TMPDIR +#tmp=$(mktemp -d --tmpdir) +#export TMPDIR=$tmp +#trap "rm -r $tmp; unset TMPDIR" EXIT + +# do something +source activate r-env +Rscript ind_results_binary_update.R $TMPDIR # t = 1-16%10 +Rscript toe_results_binary_update.R $TMPDIR # t = 1-80%10 +Rscript block_results_binary_update.R $TMPDIR # t = 1-80%10 +Rscript boot_sim_binary.R $TMPDIR # t = 1-4%4 +source deactivate r-env + +#mv $tmp/outdir ./outdir diff --git a/simulations/code_sim_bin/toe_results_binary_update.R b/simulations/code_sim_bin/toe_results_binary_update.R new file mode 100644 index 0000000..1a4986d --- /dev/null +++ b/simulations/code_sim_bin/toe_results_binary_update.R @@ -0,0 +1,100 @@ +##################################################################################### +### run all methods on simulated data with Toeplitz correlation ################## +##################################################################################### +args = commandArgs(trailingOnly=TRUE) +print(args) +dir = args[1] + +library(FSA) +source('../../code_method/cv_method_binary_update.R') +source('../../code_method/getStability.R') +source('cv_sim_apply_binary_update.R') + + +dim.list = list() +size = c(50, 100, 500, 1000) +idx = 0 +for (P in size){ + for (N in size){ + idx = idx + 1 + dim.list[[idx]] = c(P=P, N=N) + } +} + +## correlation strength +rou.list = seq(0.1, 0.9, 0.2) + +files = NULL +for (rou in rou.list){ + for (dim in dim.list){ + p = dim[1] + n = dim[2] + files = cbind(files, paste0(dir, '/sim_toeplitz_corr', rou, paste('P', p, 'N', n, sep='_'), '.RData', sep='')) + } +} + + +#------------------------ +# compare methods +#------------------------ +i <- as.numeric(Sys.getenv("PBS_ARRAYID")) + +# ################### +# #### Lasso ######## +# ################### +print('Lasso') +file_name = files[[i]] +results_toe_lasso = sim_evaluate_cv(sim_file=file_name, method='lasso', family='binomial') + +when i = 61, sim_idx = 16, ROC cannot be calculated as y.test has all 0s +thus change seed number to avoid this extreme example +results_toe_lasso = sim_evaluate_cv(sim_file=file_name, method='lasso', family='binomial', seednum=5231) + +save(file=paste0(dir, '/binary_update/toe_Lasso_binary_', i, '.RData'), results_toe_lasso, file_name) + +# # ######################### +# # #### Elastic Net ######## +# # ######################### +print('Elnet') +file_name = files[[i]] +results_toe_elnet = sim_evaluate_cv(sim_file=file_name, method='elnet', family='binomial') + +when i = 61, sim_idx = 16, ROC cannot be calculated as y.test has all 0s +thus change seed number to avoid this extreme example +results_toe_elnet = sim_evaluate_cv(sim_file=file_name, method='elnet', family='binomial', seednum=5231) + +save(file=paste0(dir, '/binary_update/toe_Elnet_binary_', i, '.RData'), results_toe_elnet, file_name) + +# ############################ +# #### Random Forests ######## +# ############################ +print('Random Forests') +file_name = files[[i]] +results_toe_rf = sim_evaluate_cv(sim_file=file_name, method='RF') + +when i = 61, sim_idx = 16, ROC cannot be calculated as y.test has all 0s +thus change seed number to avoid this extreme example +results_toe_rf = sim_evaluate_cv(sim_file=file_name, method='RF', seednum=5231) + +save(file=paste0(dir, '/binary_update/toe_RF_binary_', i, '.RData'), results_toe_rf, file_name) + +# ######################################################### +# #### Generalized compositional Lasso ######## +# ######################################################### +print('Generalized Compositional Lasso') +file_name = files[[i]] +results_toe_GenCompLasso = sim_evaluate_cv(sim_file=file_name, method='GenCompLasso') + +save(file=paste0(dir, '/binary_update/toe_GenCompLasso_binary_', i, '.RData'), + results_toe_GenCompLasso, file_name) + +results_toe_GenCompLasso_dataSplit = sim_evaluate_cv(sim_file=file_name, + method='GenCompLasso', + data.split=TRUE) + +# when i = 61, sim_idx = 16, ROC cannot be calculated as y.test has all 0s +# thus change seed number to avoid this extreme example +# results_toe_GenCompLasso_dataSplit = sim_evaluate_cv(sim_file=file_name, +# method='GenCompLasso', +# data.split=TRUE, seednum=5231) + diff --git a/simulations/code_sim_cts/CL_sim_apply.R b/simulations/code_sim_cts/CL_sim_apply.R new file mode 100755 index 0000000..5f909ec --- /dev/null +++ b/simulations/code_sim_cts/CL_sim_apply.R @@ -0,0 +1,87 @@ +##################################################################### +#### Compositional Lasso on simulation results ###################### +##################################################################### +library(FSA) # for se() +source('../../code_method/cv_method.R') +source('../../code_method/getStability.R') +source('cv_sim_apply.R') + +dir = '../sim_data' +dim.list = list() +size = c(50, 100, 500, 1000) +idx = 0 +for (P in size){ + for (N in size){ + idx = idx + 1 + dim.list[[idx]] = c(P=P, N=N) + } +} + +########################################### +#### Independent simulations ############## +########################################### +files = NULL +for (dim in dim.list){ + p = dim[1] + n = dim[2] + files = cbind(files, paste0(dir, '/sim_independent_', paste('P', p, 'N', n, sep='_'), '.RData')) +} + +results_ind_compLasso = NULL +for (i in 1:length(files)){ # parallel computing not working + print(i) + results_ind_compLasso[[i]] = sim_evaluate_cv(sim_file=files[i], method='compLasso') +} +save(file=paste0(dir, '/independent_compLasso.RData'), results_ind_compLasso) + +########################################### +#### Toeplitz simulations ############## +########################################### +## correlation strength +rou.list = seq(0.1, 0.9, 0.2) + +files = NULL +for (rou in rou.list){ + for (dim in dim.list){ + p = dim[1] + n = dim[2] + files = cbind(files, paste0(dir, '/sim_toeplitz_corr', rou, paste('P', p, 'N', n, sep='_'), '.RData', sep='')) + } +} + +results_toe_compLasso = NULL +for (i in 1:length(files)){ # parallel computing not working + print(i) + results_toe_compLasso[[i]] = sim_evaluate_cv(sim_file=files[i], method='compLasso') +} +save(file=paste0(dir, '/toe_compLasso.RData'), results_toe_compLasso) + +########################################### +#### Block simulations #################### +########################################### +rou.list = seq(0.1, 0.9, 0.2) + +files = NULL +for (rou in rou.list){ + for (dim in dim.list){ + p = dim[1] + n = dim[2] + files = cbind(files, paste0(dir, '/sim_block_corr', rou, paste('P', p, 'N', n, sep='_'), '.RData', sep='')) + } +} + +results_block_compLasso = NULL +for (i in 1:length(files)){ # parallel computing not working + print(i) + results_block_compLasso[[i]] = sim_evaluate_cv(sim_file=files[i], method='compLasso') +} +save(file=paste0(dir, '/block_compLasso.RData'), results_block_compLasso) + + + + + + + + + diff --git a/simulations/code_sim_cts/block_results.R b/simulations/code_sim_cts/block_results.R new file mode 100755 index 0000000..22c8818 --- /dev/null +++ b/simulations/code_sim_cts/block_results.R @@ -0,0 +1,75 @@ +##################################################################################### +### run all methods on simulated data with block correlation ################## +##################################################################################### +args = commandArgs(trailingOnly=TRUE) +print(args) +dir = args[1] + +source('../../code_method/cv_method.R') +source('../../code_method/getStability.R') +source('cv_sim_apply.R') + + +library(FSA) +library(foreach) +library(doParallel) +numCores <- detectCores() - 2 +registerDoParallel(numCores) + +dim.list = list() +size = c(50, 100, 500, 1000) +idx = 0 +for (P in size){ + for (N in size){ + idx = idx + 1 + dim.list[[idx]] = c(P=P, N=N) + } +} + +## correlation strength +rou.list = seq(0.1, 0.9, 0.2) + +files = NULL +for (rou in rou.list){ + for (dim in dim.list){ + p = dim[1] + n = dim[2] + files = cbind(files, paste0(dir, '/sim_block_corr', rou, paste('P', p, 'N', n, sep='_'), '.RData', sep='')) + } +} + + +################## +### Lasso ######## +################## +print('Lasso') +results_block_lasso = foreach(i = iter(files)) %dopar%{ + print(i) + sim_evaluate_cv(sim_file=i, method='lasso') +} + +save(file=paste0(dir, '/block_Lasso.RData'), results_block_lasso) + + +######################### +#### Elastic Net ######## +######################### +print('Elnet') +results_block_elnet= foreach(i = iter(files)) %dopar%{ + print(i) + sim_evaluate_cv(sim_file=i, method='elnet') +} + +save(file=paste0(dir, '/block_Elnet.RData'), results_block_elnet) + +############################ +#### Random Forests ######## +############################ +print('Random Forests') +results_block_rf = foreach(i = iter(files)) %dopar%{ + print(i) + sim_evaluate_cv(sim_file=i, method='RF') +} + +save(file=paste0(dir, '/block_RF.RData'), results_block_rf) + diff --git a/simulations/code_sim_cts/boot_CL_testing.R b/simulations/code_sim_cts/boot_CL_testing.R new file mode 100755 index 0000000..494efbf --- /dev/null +++ b/simulations/code_sim_cts/boot_CL_testing.R @@ -0,0 +1,31 @@ +######################################################################################################### +### This is to use bootstrap for testing on compositional lasso ################# +######################################################################################################### + +args = commandArgs(trailingOnly=TRUE) +print(args) +dir = args[1] + +source('../../code_method/cv_method.R') +source('../../code_method/getStability.R') +source('../../code_method/bootstrap_test_compLasso_rf.R') + +dir = '../sim_data' + +toe_lin = boot_stab(num_boot=100, sim_file= paste0(dir, '/sim_toeplitz_corr0.5P_1000_N_100.RData', sep=''), + method= 'compLasso', seednum=31, ratio.training=0.8, fold.cv=10, + mtry.grid=seq(5, 25, 5), num_trees = 500, pval_thr = 0.05) + +save(toe_lin, file=paste0(dir, '/boot_toe_compLasso.RData')) + +block_lin = boot_stab(num_boot=100, sim_file= paste0(dir, '/sim_block_corr0.5P_1000_N_100.RData', sep=''), + method= 'compLasso', seednum=31, ratio.training=0.8, fold.cv=10, + mtry.grid=seq(5, 25, 5), num_trees = 500, pval_thr = 0.05) + +save(block_lin, file=paste0(dir, '/boot_block_compLasso.RData')) + + + + + + diff --git a/simulations/code_sim_cts/boot_RF_testing.R b/simulations/code_sim_cts/boot_RF_testing.R new file mode 100755 index 0000000..c2fc990 --- /dev/null +++ b/simulations/code_sim_cts/boot_RF_testing.R @@ -0,0 +1,32 @@ +######################################################################################################### +### This is to use bootstrap for testing on random forests ################# +######################################################################################################### + +args = commandArgs(trailingOnly=TRUE) +print(args) +dir = args[1] + +source('../../code_method/cv_method.R') +source('../../code_method/getStability.R') +source('../../code_method/bootstrap_test_compLasso_rf.R') + +# the function boot_stab is probably upddated to be boot_stab_sim() now + +toe_rf = boot_stab(num_boot=100, sim_file= paste0(dir, '/sim_toeplitz_corr0.5P_1000_N_100.RData', sep=''), + method= 'RF', seednum=31, ratio.training=0.8, fold.cv=10, + mtry.grid=seq(5, 25, 5), num_trees = 500, pval_thr = 0.05) + +save(toe_rf, file=paste0(dir, '/boot_toe_RF.RData')) + +block_rf = boot_stab(num_boot=100, sim_file= paste0(dir, '/sim_block_corr0.5P_1000_N_100.RData', sep=''), + method= 'RF', seednum=31, ratio.training=0.8, fold.cv=10, + mtry.grid=seq(5, 25, 5), num_trees = 500, pval_thr = 0.05) + +save(block_rf, file=paste0(dir, '/boot_block_RF.RData')) + + + + + + + diff --git a/simulations/code_sim_cts/cv_sim_apply.R b/simulations/code_sim_cts/cv_sim_apply.R new file mode 100755 index 0000000..aa717e8 --- /dev/null +++ b/simulations/code_sim_cts/cv_sim_apply.R @@ -0,0 +1,91 @@ +####################################################################################### +### apply different feature selection methods to simulated data ####################### +####################################################################################### + +#' library(FSA) # for se() +#' source('cv_method.R') +#' source('getStability.R') +#' @title sim_evaluate_cv +#' @description +#' @param sim_file The path of a .RData file includes the simulation data pre-generated. +#' @param method The machine learning algorithms to be used. This should be one of "lasso", "elnet", "RF", and "compLosso". +#' @param seednum The seed number (default=31). +#' @param ratio.training The ratio of the whole data assigned for model training (default=0.8). +#' @param fold.cv The number of folds for cross-validation.(default=10) +#' @param family The family of linear regression models (only related to "lasso" or "elnet"). +#' @param lambda.grid The tuning range for the regularization parameter "lambda" of "lasso" or "elnet". +#' @param alpha.grid The tuning range for the elastic-net mixing parameter "alpha". +#' @param mtry.grid The tuning range for the "RF" hyperparameter "mtry", that is, number of variables to possibly split at in each node. +#' @param num_trees The number of decision trees built in the RF. +#' @param pval_thr The threshold for the estimated p value of RF importance scores. +#' @param method.perm The permutation method for estimating the p value of RF importance scores. +#' @details + +sim_evaluate_cv = function(sim_file, method, seednum=31, ratio.training=0.8, fold.cv=10, family='gaussian', + lambda.grid=exp(seq(-4, -2, 0.2)), alpha.grid=seq(0.1, 0.9, 0.1), + mtry.grid=seq(5, 25, 5), num_trees = 500, pval_thr = 0.05, method.perm='altmann'){ + # load simulated data + load(sim_file, dat <- new.env()) + + idx.start = 1; idx.stop = 100 # 100 repetitions for each simulated scenario + rou = dat$sim_array[[1]]$rou # rou, n, p are same across all repetitions + n = dat$sim_array[[1]]$n + p = dat$sim_array[[1]]$p + + # evaluating different methods + fp = fn = mse = OOB_rf = NULL + stability.table = matrix(rep(0, (idx.stop - idx.start + 1) * p), ncol=p) + colnames(stability.table) = paste('V', seq(1:p), sep='') + + for (i in idx.start:idx.stop){ + sub = dat$sim_array[[i]] + coef = sub$beta + coef.true = which(coef != 0) + + if (method == 'lasso'){ + result = lasso_cv(y=sub$Y, datx=sub$Z, seednum=seednum,family=family, lambda.choice='lambda.1se', + ratio.training=ratio.training, fold.cv=fold.cv, lambda.grid=lambda.grid) + select.features = result$coef.chosen + } else if (method == 'elnet'){ + result = elnet_cv(y=sub$Y, datx=sub$Z, seednum=seednum,family=family, alpha.grid=alpha.grid, + ratio.training=ratio.training, fold.cv=fold.cv, lambda.grid=lambda.grid) + select.features = result$coef.chosen + } else if (method == 'RF'){ + result = randomForest_cv(y=sub$Y, datx=sub$Z, seednum=seednum, fold.cv=fold.cv, + num_trees=num_trees, mtry.grid = mtry.grid, pval_thr=pval_thr, method.perm=method.perm) + select.features = result$coef.chosen + } else if (method == 'compLasso'){ + result = cons_lasso_cv(datx=sub$Z, y=sub$Y, seednum=seednum, ratio.training=ratio.training) + select.features = result$coef.chosen + } + + # false positives: shouldn't be chosen but chosen + fp = c(fp, length(setdiff(select.features, coef.true))) + + # false negatives: # should be chosen yet not + fn = c(fn, length(setdiff(coef.true, select.features))) + + # prediction error + mse = c(mse, result$MSE) + + if (method == 'RF'){ + OOB_rf = c(OOB_rf, result$OOB) + } + + # stability table + stability.table[i, select.features] = 1 + } + + # store results + FP = paste(mean(fp), '(', round(se(fp),2), ')') # FPR? + FN = paste(mean(fn), '(', round(se(fn),2), ')') # FNR? + MSE = paste(round(mean(mse, na.rm=T),2), '(', round(se(mse, na.rm=T),2), ')') + Stab = round(getStability(stability.table)$stability, 2) + + results=list(rou=rou, n=n, p=p, FP=FP, FN=FN, MSE=MSE, Stab=Stab, + Stab.table=stability.table, FP.list=fp, FN.list=fn, MSE.list=mse, OOB.list=OOB_rf) + +} + + + diff --git a/simulations/code_sim_cts/ind_results.R b/simulations/code_sim_cts/ind_results.R new file mode 100755 index 0000000..0544fbd --- /dev/null +++ b/simulations/code_sim_cts/ind_results.R @@ -0,0 +1,68 @@ +##################################################################################### +### run all methods on simulated data with independent correlation ################## +##################################################################################### +args = commandArgs(trailingOnly=TRUE) +print(args) +dir = args[1] + +source('../../code_method/cv_method.R') +source('../../code_method/getStability.R') +source('cv_sim_apply.R') + + +library(FSA) +library(foreach) +library(doParallel) +numCores <- detectCores() - 2 +registerDoParallel(numCores) + +dim.list = list() +size = c(50, 100, 500, 1000) +idx = 0 +for (P in size){ + for (N in size){ + idx = idx + 1 + dim.list[[idx]] = c(P=P, N=N) + } +} + +files = NULL +for (dim in dim.list){ + p = dim[1] + n = dim[2] + files = cbind(files, paste0(dir, '/sim_independent_', paste('P', p, 'N', n, sep='_'), '.RData')) +} + +################## +### Lasso ######## +################## +print('Lasso') +results_ind_lasso = foreach(i = iter(files)) %dopar%{ + sim_evaluate_cv(sim_file=i, method='lasso') +} + +save(file=paste0(dir, '/independent_Lasso.RData'), results_ind_lasso) + + +######################### +#### Elastic Net ######## +######################### +print('Elnet') +results_ind_elnet= foreach(i = iter(files)) %dopar%{ + print(i) + sim_evaluate_cv(sim_file=i, method='elnet') +} + +save(file=paste0(dir, '/independent_Elnet.RData'), results_ind_elnet) + +############################ +#### Random Forests ######## +############################ +print('RF') +results_ind_rf = foreach(i = iter(files)) %dopar%{ + print(i) + sim_evaluate_cv(sim_file=i, method='RF') +} + +save(file=paste0(dir, '/independent_RF.RData'), results_ind_rf) + diff --git a/simulations/code_sim_cts/run_sim_cts.sh b/simulations/code_sim_cts/run_sim_cts.sh new file mode 100755 index 0000000..af06b77 --- /dev/null +++ b/simulations/code_sim_cts/run_sim_cts.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +#PBS -N ind_cv +#PBS -l walltime=500:00:00 +#PBS -l nodes=1:ppn=10 +#PBS -l mem=50gb +#PBS -V +#PBS -j oe +#PBS -d . + +set -e +cpus=$PBS_NUM_PPN + +export TMPDIR=/panfs/panfs1.ucsd.edu/panscratch/$USER/Stability_2020 +[ ! -d $TMPDIR ] && mkdir $TMPDIR +export TMPDIR=$TMPDIR/sim_data +[ ! -d $TMPDIR ] && mkdir $TMPDIR +#tmp=$(mktemp -d --tmpdir) +#export TMPDIR=$tmp +#trap "rm -r $tmp; unset TMPDIR" EXIT + +# do something +source activate r-env +Rscript ind_results.R $TMPDIR +Rscript block_results.R $TMPDIR +Rscript toe_results.R $TMPDIR +Rscript boot_RF_testing.R $TMPDIR +source deactivate r-env + +#mv $tmp/outdir ./outdir diff --git a/simulations/code_sim_cts/toe_results.R b/simulations/code_sim_cts/toe_results.R new file mode 100755 index 0000000..b582db8 --- /dev/null +++ b/simulations/code_sim_cts/toe_results.R @@ -0,0 +1,73 @@ +##################################################################################### +### run all methods on simulated data with Toeplitz correlation ################## +##################################################################################### +args = commandArgs(trailingOnly=TRUE) +print(args) +dir = args[1] + +source('../../code_method/cv_method.R') +source('../../code_method/getStability.R') +source('cv_sim_apply.R') + + +library(FSA) +library(foreach) +library(doParallel) +numCores <- detectCores() - 2 +registerDoParallel(numCores) + +dim.list = list() +size = c(50, 100, 500, 1000) +idx = 0 +for (P in size){ + for (N in size){ + idx = idx + 1 + dim.list[[idx]] = c(P=P, N=N) + } +} + +## correlation strength +rou.list = seq(0.1, 0.9, 0.2) + +files = NULL +for (rou in rou.list){ + for (dim in dim.list){ + p = dim[1] + n = dim[2] + files = cbind(files, paste0(dir, '/sim_toeplitz_corr', rou, paste('P', p, 'N', n, sep='_'), '.RData', sep='')) + } +} + + +################## +### Lasso ######## +################## +print('Lasso') +results_toe_lasso = foreach(i = iter(files)) %dopar%{ + print(i) + sim_evaluate_cv(sim_file=i, method='lasso') +} + +save(file=paste0(dir, '/toe_Lasso.RData'), results_toe_lasso) + + +######################### +#### Elastic Net ######## +######################### +print('Elnet') +results_toe_elnet= foreach(i = iter(files)) %dopar%{ + sim_evaluate_cv(sim_file=i, method='elnet') +} + +save(file=paste0(dir, '/toe_Elnet.RData'), results_toe_elnet) + +############################ +#### Random Forests ######## +############################ +print('Random Forests') +results_toe_rf = foreach(i = iter(files)) %dopar%{ + sim_evaluate_cv(sim_file=i, method='RF') +} + +save(file=paste0(dir, '/toe_RF.RData'), results_toe_rf) + diff --git a/simulations/figures_combined/fig1_combined.png b/simulations/figures_combined/fig1_combined.png new file mode 100644 index 0000000..96ad4ef Binary files /dev/null and b/simulations/figures_combined/fig1_combined.png differ diff --git a/simulations/figures_combined/fig2_combined.png b/simulations/figures_combined/fig2_combined.png new file mode 100644 index 0000000..f03faff Binary files /dev/null and b/simulations/figures_combined/fig2_combined.png differ diff --git a/simulations/figures_combined/fig3_combined.png b/simulations/figures_combined/fig3_combined.png new file mode 100644 index 0000000..d6f9bfb Binary files /dev/null and b/simulations/figures_combined/fig3_combined.png differ diff --git a/simulations/figures_combined/figS1_combined.png b/simulations/figures_combined/figS1_combined.png new file mode 100644 index 0000000..f5faaf6 Binary files /dev/null and b/simulations/figures_combined/figS1_combined.png differ diff --git a/simulations/figures_combined/figS2_combined.png b/simulations/figures_combined/figS2_combined.png new file mode 100644 index 0000000..7a9e36c Binary files /dev/null and b/simulations/figures_combined/figS2_combined.png differ diff --git a/simulations/figures_combined/figS3_combined.png b/simulations/figures_combined/figS3_combined.png new file mode 100644 index 0000000..6050d79 Binary files /dev/null and b/simulations/figures_combined/figS3_combined.png differ diff --git a/simulations/figures_combined/figS4_combined.png b/simulations/figures_combined/figS4_combined.png new file mode 100644 index 0000000..08917eb Binary files /dev/null and b/simulations/figures_combined/figS4_combined.png differ diff --git a/simulations/figures_combined/fig_cts_num_select.png b/simulations/figures_combined/fig_cts_num_select.png new file mode 100644 index 0000000..645e0bc Binary files /dev/null and b/simulations/figures_combined/fig_cts_num_select.png differ diff --git a/simulations/figures_sim/.DS_Store b/simulations/figures_sim/.DS_Store deleted file mode 100755 index 5008ddf..0000000 Binary files a/simulations/figures_sim/.DS_Store and /dev/null differ diff --git a/simulations/notebooks_sim_bin/.ipynb_checkpoints/0.1_sim_ind_lasso_binary_update-checkpoint.ipynb b/simulations/notebooks_sim_bin/.ipynb_checkpoints/0.1_sim_ind_lasso_binary_update-checkpoint.ipynb new file mode 100644 index 0000000..7532ddd --- /dev/null +++ b/simulations/notebooks_sim_bin/.ipynb_checkpoints/0.1_sim_ind_lasso_binary_update-checkpoint.ipynb @@ -0,0 +1,683 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize lasso results on Independent Simulation Scenarios for binary outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "files = NULL\n", + "for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_independent_', paste('P', p, 'N', n, sep='_'), '.RData'))\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "16" + ], + "text/latex": [ + "16" + ], + "text/markdown": [ + "16" + ], + "text/plain": [ + "[1] 16" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "length(files)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1] \"indx: 1\"\n", + "[1] \"indx: 2\"\n", + "[1] \"indx: 3\"\n", + "[1] \"indx: 4\"\n", + "[1] \"indx: 5\"\n", + "[1] \"indx: 6\"\n", + "[1] \"indx: 7\"\n", + "[1] \"indx: 8\"\n", + "[1] \"indx: 9\"\n", + "[1] \"indx: 10\"\n", + "[1] \"indx: 11\"\n", + "[1] \"indx: 12\"\n", + "[1] \"indx: 13\"\n", + "[1] \"indx: 14\"\n", + "[1] \"indx: 15\"\n", + "[1] \"indx: 16\"\n" + ] + } + ], + "source": [ + "avg_FDR = NULL\n", + "table_toe = NULL\n", + "tmp_num_select = rep(0, length(files))\n", + "for (i in 1:length(files)){\n", + " print(paste0('indx: ', i))\n", + " load(paste0(dir, '/binary_update/ind_Lasso_binary_', i, '.RData')) \n", + " \n", + " table_toe = rbind(table_toe, results_ind_lasso[c('n', 'p', 'rou', 'FP', 'FN', 'ROC', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_ind_lasso$Stab.table))\n", + " \n", + " # calculate FDR\n", + " load(file_name, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_ind_lasso$Stab.table\n", + " FDR = NULL # false positive rate\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}\n", + "table_toe = as.data.frame(table_toe)\n", + "table_toe$num_select = tmp_num_select\n", + "table_toe$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
1505003.69 ( 0.25 )2.5 ( 0.12 )0.74 ( 0.01 )0.33 6.190.37
21005007.16 ( 0.37 )0.64 ( 0.08 )0.85 ( 0.01 )0.3511.520.48
35005005.21 ( 0.21 )0 ( 0 )0.93 ( 0 )0.5310.210.39
410005002.25 ( 0.11 )0 ( 0 )0.93 ( 0 )0.8 7.250.15
55010005.13 ( 0.34 )2.93 ( 0.1 )0.73 ( 0.01 )0.25 7.200.50
610010008.22 ( 0.44 )1.03 ( 0.09 )0.83 ( 0.01 )0.3212.190.54
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0 & 3.69 ( 0.25 ) & 2.5 ( 0.12 ) & 0.74 ( 0.01 ) & 0.33 & 6.19 & 0.37\\\\\n", + "\t2 & 100 & 50 & 0 & 7.16 ( 0.37 ) & 0.64 ( 0.08 ) & 0.85 ( 0.01 ) & 0.35 & 11.52 & 0.48\\\\\n", + "\t3 & 500 & 50 & 0 & 5.21 ( 0.21 ) & 0 ( 0 ) & 0.93 ( 0 ) & 0.53 & 10.21 & 0.39\\\\\n", + "\t4 & 1000 & 50 & 0 & 2.25 ( 0.11 ) & 0 ( 0 ) & 0.93 ( 0 ) & 0.8 & 7.25 & 0.15\\\\\n", + "\t5 & 50 & 100 & 0 & 5.13 ( 0.34 ) & 2.93 ( 0.1 ) & 0.73 ( 0.01 ) & 0.25 & 7.20 & 0.50\\\\\n", + "\t6 & 100 & 100 & 0 & 8.22 ( 0.44 ) & 1.03 ( 0.09 ) & 0.83 ( 0.01 ) & 0.32 & 12.19 & 0.54\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0 | 3.69 ( 0.25 ) | 2.5 ( 0.12 ) | 0.74 ( 0.01 ) | 0.33 | 6.19 | 0.37 |\n", + "| 2 | 100 | 50 | 0 | 7.16 ( 0.37 ) | 0.64 ( 0.08 ) | 0.85 ( 0.01 ) | 0.35 | 11.52 | 0.48 |\n", + "| 3 | 500 | 50 | 0 | 5.21 ( 0.21 ) | 0 ( 0 ) | 0.93 ( 0 ) | 0.53 | 10.21 | 0.39 |\n", + "| 4 | 1000 | 50 | 0 | 2.25 ( 0.11 ) | 0 ( 0 ) | 0.93 ( 0 ) | 0.8 | 7.25 | 0.15 |\n", + "| 5 | 50 | 100 | 0 | 5.13 ( 0.34 ) | 2.93 ( 0.1 ) | 0.73 ( 0.01 ) | 0.25 | 7.20 | 0.50 |\n", + "| 6 | 100 | 100 | 0 | 8.22 ( 0.44 ) | 1.03 ( 0.09 ) | 0.83 ( 0.01 ) | 0.32 | 12.19 | 0.54 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select FDR \n", + "1 50 50 0 3.69 ( 0.25 ) 2.5 ( 0.12 ) 0.74 ( 0.01 ) 0.33 6.19 0.37\n", + "2 100 50 0 7.16 ( 0.37 ) 0.64 ( 0.08 ) 0.85 ( 0.01 ) 0.35 11.52 0.48\n", + "3 500 50 0 5.21 ( 0.21 ) 0 ( 0 ) 0.93 ( 0 ) 0.53 10.21 0.39\n", + "4 1000 50 0 2.25 ( 0.11 ) 0 ( 0 ) 0.93 ( 0 ) 0.8 7.25 0.15\n", + "5 50 100 0 5.13 ( 0.34 ) 2.93 ( 0.1 ) 0.73 ( 0.01 ) 0.25 7.20 0.50\n", + "6 100 100 0 8.22 ( 0.44 ) 1.03 ( 0.09 ) 0.83 ( 0.01 ) 0.32 12.19 0.54" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
11500500023.83 ( 0.69 )0 ( 0 )0.92 ( 0 )0.228.830.78
121000500011.38 ( 0.41 )0 ( 0 )0.93 ( 0 )0.3616.380.60
1350100009.77 ( 0.24 )4.03 ( 0.08 )0.67 ( 0.01 )0.0910.740.81
141001000011.91 ( 0.8 )2.32 ( 0.1 )0.78 ( 0.01 )0.214.590.66
155001000030.84 ( 0.92 )0 ( 0 )0.91 ( 0 )0.1635.840.82
1610001000019.96 ( 0.61 )0 ( 0 )0.93 ( 0 )0.2424.960.74
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t11 & 500 & 500 & 0 & 23.83 ( 0.69 ) & 0 ( 0 ) & 0.92 ( 0 ) & 0.2 & 28.83 & 0.78\\\\\n", + "\t12 & 1000 & 500 & 0 & 11.38 ( 0.41 ) & 0 ( 0 ) & 0.93 ( 0 ) & 0.36 & 16.38 & 0.60\\\\\n", + "\t13 & 50 & 1000 & 0 & 9.77 ( 0.24 ) & 4.03 ( 0.08 ) & 0.67 ( 0.01 ) & 0.09 & 10.74 & 0.81\\\\\n", + "\t14 & 100 & 1000 & 0 & 11.91 ( 0.8 ) & 2.32 ( 0.1 ) & 0.78 ( 0.01 ) & 0.2 & 14.59 & 0.66\\\\\n", + "\t15 & 500 & 1000 & 0 & 30.84 ( 0.92 ) & 0 ( 0 ) & 0.91 ( 0 ) & 0.16 & 35.84 & 0.82\\\\\n", + "\t16 & 1000 & 1000 & 0 & 19.96 ( 0.61 ) & 0 ( 0 ) & 0.93 ( 0 ) & 0.24 & 24.96 & 0.74\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 11 | 500 | 500 | 0 | 23.83 ( 0.69 ) | 0 ( 0 ) | 0.92 ( 0 ) | 0.2 | 28.83 | 0.78 |\n", + "| 12 | 1000 | 500 | 0 | 11.38 ( 0.41 ) | 0 ( 0 ) | 0.93 ( 0 ) | 0.36 | 16.38 | 0.60 |\n", + "| 13 | 50 | 1000 | 0 | 9.77 ( 0.24 ) | 4.03 ( 0.08 ) | 0.67 ( 0.01 ) | 0.09 | 10.74 | 0.81 |\n", + "| 14 | 100 | 1000 | 0 | 11.91 ( 0.8 ) | 2.32 ( 0.1 ) | 0.78 ( 0.01 ) | 0.2 | 14.59 | 0.66 |\n", + "| 15 | 500 | 1000 | 0 | 30.84 ( 0.92 ) | 0 ( 0 ) | 0.91 ( 0 ) | 0.16 | 35.84 | 0.82 |\n", + "| 16 | 1000 | 1000 | 0 | 19.96 ( 0.61 ) | 0 ( 0 ) | 0.93 ( 0 ) | 0.24 | 24.96 | 0.74 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select\n", + "11 500 500 0 23.83 ( 0.69 ) 0 ( 0 ) 0.92 ( 0 ) 0.2 28.83 \n", + "12 1000 500 0 11.38 ( 0.41 ) 0 ( 0 ) 0.93 ( 0 ) 0.36 16.38 \n", + "13 50 1000 0 9.77 ( 0.24 ) 4.03 ( 0.08 ) 0.67 ( 0.01 ) 0.09 10.74 \n", + "14 100 1000 0 11.91 ( 0.8 ) 2.32 ( 0.1 ) 0.78 ( 0.01 ) 0.2 14.59 \n", + "15 500 1000 0 30.84 ( 0.92 ) 0 ( 0 ) 0.91 ( 0 ) 0.16 35.84 \n", + "16 1000 1000 0 19.96 ( 0.61 ) 0 ( 0 ) 0.93 ( 0 ) 0.24 24.96 \n", + " FDR \n", + "11 0.78\n", + "12 0.60\n", + "13 0.81\n", + "14 0.66\n", + "15 0.82\n", + "16 0.74" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_toe <- apply(table_toe,2,as.character)\n", + "rownames(result.table_toe) = rownames(table_toe)\n", + "result.table_toe = as.data.frame(result.table_toe)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_toe$n = tidyr::extract_numeric(result.table_toe$n)\n", + "result.table_toe$p = tidyr::extract_numeric(result.table_toe$p)\n", + "result.table_toe$ratio = result.table_toe$p / result.table_toe$n\n", + "\n", + "result.table_toe = result.table_toe[c('n', 'p', 'rou', 'ratio', 'Stab', 'ROC', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_toe)[1:4] = c('N', 'P', 'Corr', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_toe$Stab = as.numeric(as.character(result.table_toe$Stab))\n", + "result.table_toe$num_select = as.numeric(as.character(result.table_toe$num_select))\n", + "\n", + "result.table_toe$ROC_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$ROC))\n", + "result.table_toe$FP_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$FP))\n", + "result.table_toe$FN_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$FN))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "
A data.frame: 0 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
\n" + ], + "text/latex": [ + "A data.frame: 0 × 13\n", + "\\begin{tabular}{lllllllllllll}\n", + " N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 0 × 13\n", + "\n", + "| N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select FDR ROC_mean FP_mean FN_mean" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check whether missing values exists\n", + "result.table_toe[rowSums(is.na(result.table_toe)) > 0,]" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 5001.000.330.74 ( 0.01 )3.69 ( 0.25 )2.5 ( 0.12 ) 6.190.370.743.692.50
2 100 5000.500.350.85 ( 0.01 )7.16 ( 0.37 )0.64 ( 0.08 )11.520.480.857.160.64
3 500 5000.100.530.93 ( 0 ) 5.21 ( 0.21 )0 ( 0 ) 10.210.390.935.210.00
41000 5000.050.800.93 ( 0 ) 2.25 ( 0.11 )0 ( 0 ) 7.250.150.932.250.00
5 5010002.000.250.73 ( 0.01 )5.13 ( 0.34 )2.93 ( 0.1 ) 7.200.5 0.735.132.93
6 10010001.000.320.83 ( 0.01 )8.22 ( 0.44 )1.03 ( 0.09 )12.190.540.838.221.03
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0 & 1.00 & 0.33 & 0.74 ( 0.01 ) & 3.69 ( 0.25 ) & 2.5 ( 0.12 ) & 6.19 & 0.37 & 0.74 & 3.69 & 2.50\\\\\n", + "\t2 & 100 & 50 & 0 & 0.50 & 0.35 & 0.85 ( 0.01 ) & 7.16 ( 0.37 ) & 0.64 ( 0.08 ) & 11.52 & 0.48 & 0.85 & 7.16 & 0.64\\\\\n", + "\t3 & 500 & 50 & 0 & 0.10 & 0.53 & 0.93 ( 0 ) & 5.21 ( 0.21 ) & 0 ( 0 ) & 10.21 & 0.39 & 0.93 & 5.21 & 0.00\\\\\n", + "\t4 & 1000 & 50 & 0 & 0.05 & 0.80 & 0.93 ( 0 ) & 2.25 ( 0.11 ) & 0 ( 0 ) & 7.25 & 0.15 & 0.93 & 2.25 & 0.00\\\\\n", + "\t5 & 50 & 100 & 0 & 2.00 & 0.25 & 0.73 ( 0.01 ) & 5.13 ( 0.34 ) & 2.93 ( 0.1 ) & 7.20 & 0.5 & 0.73 & 5.13 & 2.93\\\\\n", + "\t6 & 100 & 100 & 0 & 1.00 & 0.32 & 0.83 ( 0.01 ) & 8.22 ( 0.44 ) & 1.03 ( 0.09 ) & 12.19 & 0.54 & 0.83 & 8.22 & 1.03\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0 | 1.00 | 0.33 | 0.74 ( 0.01 ) | 3.69 ( 0.25 ) | 2.5 ( 0.12 ) | 6.19 | 0.37 | 0.74 | 3.69 | 2.50 |\n", + "| 2 | 100 | 50 | 0 | 0.50 | 0.35 | 0.85 ( 0.01 ) | 7.16 ( 0.37 ) | 0.64 ( 0.08 ) | 11.52 | 0.48 | 0.85 | 7.16 | 0.64 |\n", + "| 3 | 500 | 50 | 0 | 0.10 | 0.53 | 0.93 ( 0 ) | 5.21 ( 0.21 ) | 0 ( 0 ) | 10.21 | 0.39 | 0.93 | 5.21 | 0.00 |\n", + "| 4 | 1000 | 50 | 0 | 0.05 | 0.80 | 0.93 ( 0 ) | 2.25 ( 0.11 ) | 0 ( 0 ) | 7.25 | 0.15 | 0.93 | 2.25 | 0.00 |\n", + "| 5 | 50 | 100 | 0 | 2.00 | 0.25 | 0.73 ( 0.01 ) | 5.13 ( 0.34 ) | 2.93 ( 0.1 ) | 7.20 | 0.5 | 0.73 | 5.13 | 2.93 |\n", + "| 6 | 100 | 100 | 0 | 1.00 | 0.32 | 0.83 ( 0.01 ) | 8.22 ( 0.44 ) | 1.03 ( 0.09 ) | 12.19 | 0.54 | 0.83 | 8.22 | 1.03 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select\n", + "1 50 50 0 1.00 0.33 0.74 ( 0.01 ) 3.69 ( 0.25 ) 2.5 ( 0.12 ) 6.19 \n", + "2 100 50 0 0.50 0.35 0.85 ( 0.01 ) 7.16 ( 0.37 ) 0.64 ( 0.08 ) 11.52 \n", + "3 500 50 0 0.10 0.53 0.93 ( 0 ) 5.21 ( 0.21 ) 0 ( 0 ) 10.21 \n", + "4 1000 50 0 0.05 0.80 0.93 ( 0 ) 2.25 ( 0.11 ) 0 ( 0 ) 7.25 \n", + "5 50 100 0 2.00 0.25 0.73 ( 0.01 ) 5.13 ( 0.34 ) 2.93 ( 0.1 ) 7.20 \n", + "6 100 100 0 1.00 0.32 0.83 ( 0.01 ) 8.22 ( 0.44 ) 1.03 ( 0.09 ) 12.19 \n", + " FDR ROC_mean FP_mean FN_mean\n", + "1 0.37 0.74 3.69 2.50 \n", + "2 0.48 0.85 7.16 0.64 \n", + "3 0.39 0.93 5.21 0.00 \n", + "4 0.15 0.93 2.25 0.00 \n", + "5 0.5 0.73 5.13 2.93 \n", + "6 0.54 0.83 8.22 1.03 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
11 500 5000 1.00.200.92 ( 0 ) 23.83 ( 0.69 )0 ( 0 ) 28.830.780.9223.830.00
121000 5000 0.50.360.93 ( 0 ) 11.38 ( 0.41 )0 ( 0 ) 16.380.6 0.9311.380.00
13 501000020.00.090.67 ( 0.01 )9.77 ( 0.24 ) 4.03 ( 0.08 )10.740.810.67 9.774.03
14 1001000010.00.200.78 ( 0.01 )11.91 ( 0.8 ) 2.32 ( 0.1 ) 14.590.660.7811.912.32
15 50010000 2.00.160.91 ( 0 ) 30.84 ( 0.92 )0 ( 0 ) 35.840.820.9130.840.00
16100010000 1.00.240.93 ( 0 ) 19.96 ( 0.61 )0 ( 0 ) 24.960.740.9319.960.00
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t11 & 500 & 500 & 0 & 1.0 & 0.20 & 0.92 ( 0 ) & 23.83 ( 0.69 ) & 0 ( 0 ) & 28.83 & 0.78 & 0.92 & 23.83 & 0.00\\\\\n", + "\t12 & 1000 & 500 & 0 & 0.5 & 0.36 & 0.93 ( 0 ) & 11.38 ( 0.41 ) & 0 ( 0 ) & 16.38 & 0.6 & 0.93 & 11.38 & 0.00\\\\\n", + "\t13 & 50 & 1000 & 0 & 20.0 & 0.09 & 0.67 ( 0.01 ) & 9.77 ( 0.24 ) & 4.03 ( 0.08 ) & 10.74 & 0.81 & 0.67 & 9.77 & 4.03\\\\\n", + "\t14 & 100 & 1000 & 0 & 10.0 & 0.20 & 0.78 ( 0.01 ) & 11.91 ( 0.8 ) & 2.32 ( 0.1 ) & 14.59 & 0.66 & 0.78 & 11.91 & 2.32\\\\\n", + "\t15 & 500 & 1000 & 0 & 2.0 & 0.16 & 0.91 ( 0 ) & 30.84 ( 0.92 ) & 0 ( 0 ) & 35.84 & 0.82 & 0.91 & 30.84 & 0.00\\\\\n", + "\t16 & 1000 & 1000 & 0 & 1.0 & 0.24 & 0.93 ( 0 ) & 19.96 ( 0.61 ) & 0 ( 0 ) & 24.96 & 0.74 & 0.93 & 19.96 & 0.00\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 11 | 500 | 500 | 0 | 1.0 | 0.20 | 0.92 ( 0 ) | 23.83 ( 0.69 ) | 0 ( 0 ) | 28.83 | 0.78 | 0.92 | 23.83 | 0.00 |\n", + "| 12 | 1000 | 500 | 0 | 0.5 | 0.36 | 0.93 ( 0 ) | 11.38 ( 0.41 ) | 0 ( 0 ) | 16.38 | 0.6 | 0.93 | 11.38 | 0.00 |\n", + "| 13 | 50 | 1000 | 0 | 20.0 | 0.09 | 0.67 ( 0.01 ) | 9.77 ( 0.24 ) | 4.03 ( 0.08 ) | 10.74 | 0.81 | 0.67 | 9.77 | 4.03 |\n", + "| 14 | 100 | 1000 | 0 | 10.0 | 0.20 | 0.78 ( 0.01 ) | 11.91 ( 0.8 ) | 2.32 ( 0.1 ) | 14.59 | 0.66 | 0.78 | 11.91 | 2.32 |\n", + "| 15 | 500 | 1000 | 0 | 2.0 | 0.16 | 0.91 ( 0 ) | 30.84 ( 0.92 ) | 0 ( 0 ) | 35.84 | 0.82 | 0.91 | 30.84 | 0.00 |\n", + "| 16 | 1000 | 1000 | 0 | 1.0 | 0.24 | 0.93 ( 0 ) | 19.96 ( 0.61 ) | 0 ( 0 ) | 24.96 | 0.74 | 0.93 | 19.96 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "11 500 500 0 1.0 0.20 0.92 ( 0 ) 23.83 ( 0.69 ) 0 ( 0 ) \n", + "12 1000 500 0 0.5 0.36 0.93 ( 0 ) 11.38 ( 0.41 ) 0 ( 0 ) \n", + "13 50 1000 0 20.0 0.09 0.67 ( 0.01 ) 9.77 ( 0.24 ) 4.03 ( 0.08 )\n", + "14 100 1000 0 10.0 0.20 0.78 ( 0.01 ) 11.91 ( 0.8 ) 2.32 ( 0.1 ) \n", + "15 500 1000 0 2.0 0.16 0.91 ( 0 ) 30.84 ( 0.92 ) 0 ( 0 ) \n", + "16 1000 1000 0 1.0 0.24 0.93 ( 0 ) 19.96 ( 0.61 ) 0 ( 0 ) \n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "11 28.83 0.78 0.92 23.83 0.00 \n", + "12 16.38 0.6 0.93 11.38 0.00 \n", + "13 10.74 0.81 0.67 9.77 4.03 \n", + "14 14.59 0.66 0.78 11.91 2.32 \n", + "15 35.84 0.82 0.91 30.84 0.00 \n", + "16 24.96 0.74 0.93 19.96 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 16 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 500 1.000.330.74 ( 0.01 )3.69 ( 0.25 ) 2.5 ( 0.12 ) 6.190.370.74 3.692.50
2 100 500 0.500.350.85 ( 0.01 )7.16 ( 0.37 ) 0.64 ( 0.08 )11.520.480.85 7.160.64
3 500 500 0.100.530.93 ( 0 ) 5.21 ( 0.21 ) 0 ( 0 ) 10.210.390.93 5.210.00
41000 500 0.050.800.93 ( 0 ) 2.25 ( 0.11 ) 0 ( 0 ) 7.250.150.93 2.250.00
5 50 1000 2.000.250.73 ( 0.01 )5.13 ( 0.34 ) 2.93 ( 0.1 ) 7.200.5 0.73 5.132.93
6 100 1000 1.000.320.83 ( 0.01 )8.22 ( 0.44 ) 1.03 ( 0.09 )12.190.540.83 8.221.03
7 500 1000 0.200.400.92 ( 0 ) 8.89 ( 0.29 ) 0 ( 0 ) 13.890.550.92 8.890.00
81000 1000 0.100.690.93 ( 0 ) 3.53 ( 0.16 ) 0 ( 0 ) 8.530.270.93 3.530.00
9 50 500010.000.130.7 ( 0.01 ) 8.05 ( 0.28 ) 3.74 ( 0.09 ) 9.310.740.70 8.053.74
10 100 5000 5.000.240.79 ( 0.01 )11.14 ( 0.64 )1.71 ( 0.1 ) 14.430.630.7911.141.71
11 500 5000 1.000.200.92 ( 0 ) 23.83 ( 0.69 )0 ( 0 ) 28.830.780.9223.830.00
121000 5000 0.500.360.93 ( 0 ) 11.38 ( 0.41 )0 ( 0 ) 16.380.6 0.9311.380.00
13 501000020.000.090.67 ( 0.01 )9.77 ( 0.24 ) 4.03 ( 0.08 )10.740.810.67 9.774.03
14 1001000010.000.200.78 ( 0.01 )11.91 ( 0.8 ) 2.32 ( 0.1 ) 14.590.660.7811.912.32
15 50010000 2.000.160.91 ( 0 ) 30.84 ( 0.92 )0 ( 0 ) 35.840.820.9130.840.00
16100010000 1.000.240.93 ( 0 ) 19.96 ( 0.61 )0 ( 0 ) 24.960.740.9319.960.00
\n" + ], + "text/latex": [ + "A data.frame: 16 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0 & 1.00 & 0.33 & 0.74 ( 0.01 ) & 3.69 ( 0.25 ) & 2.5 ( 0.12 ) & 6.19 & 0.37 & 0.74 & 3.69 & 2.50\\\\\n", + "\t2 & 100 & 50 & 0 & 0.50 & 0.35 & 0.85 ( 0.01 ) & 7.16 ( 0.37 ) & 0.64 ( 0.08 ) & 11.52 & 0.48 & 0.85 & 7.16 & 0.64\\\\\n", + "\t3 & 500 & 50 & 0 & 0.10 & 0.53 & 0.93 ( 0 ) & 5.21 ( 0.21 ) & 0 ( 0 ) & 10.21 & 0.39 & 0.93 & 5.21 & 0.00\\\\\n", + "\t4 & 1000 & 50 & 0 & 0.05 & 0.80 & 0.93 ( 0 ) & 2.25 ( 0.11 ) & 0 ( 0 ) & 7.25 & 0.15 & 0.93 & 2.25 & 0.00\\\\\n", + "\t5 & 50 & 100 & 0 & 2.00 & 0.25 & 0.73 ( 0.01 ) & 5.13 ( 0.34 ) & 2.93 ( 0.1 ) & 7.20 & 0.5 & 0.73 & 5.13 & 2.93\\\\\n", + "\t6 & 100 & 100 & 0 & 1.00 & 0.32 & 0.83 ( 0.01 ) & 8.22 ( 0.44 ) & 1.03 ( 0.09 ) & 12.19 & 0.54 & 0.83 & 8.22 & 1.03\\\\\n", + "\t7 & 500 & 100 & 0 & 0.20 & 0.40 & 0.92 ( 0 ) & 8.89 ( 0.29 ) & 0 ( 0 ) & 13.89 & 0.55 & 0.92 & 8.89 & 0.00\\\\\n", + "\t8 & 1000 & 100 & 0 & 0.10 & 0.69 & 0.93 ( 0 ) & 3.53 ( 0.16 ) & 0 ( 0 ) & 8.53 & 0.27 & 0.93 & 3.53 & 0.00\\\\\n", + "\t9 & 50 & 500 & 0 & 10.00 & 0.13 & 0.7 ( 0.01 ) & 8.05 ( 0.28 ) & 3.74 ( 0.09 ) & 9.31 & 0.74 & 0.70 & 8.05 & 3.74\\\\\n", + "\t10 & 100 & 500 & 0 & 5.00 & 0.24 & 0.79 ( 0.01 ) & 11.14 ( 0.64 ) & 1.71 ( 0.1 ) & 14.43 & 0.63 & 0.79 & 11.14 & 1.71\\\\\n", + "\t11 & 500 & 500 & 0 & 1.00 & 0.20 & 0.92 ( 0 ) & 23.83 ( 0.69 ) & 0 ( 0 ) & 28.83 & 0.78 & 0.92 & 23.83 & 0.00\\\\\n", + "\t12 & 1000 & 500 & 0 & 0.50 & 0.36 & 0.93 ( 0 ) & 11.38 ( 0.41 ) & 0 ( 0 ) & 16.38 & 0.6 & 0.93 & 11.38 & 0.00\\\\\n", + "\t13 & 50 & 1000 & 0 & 20.00 & 0.09 & 0.67 ( 0.01 ) & 9.77 ( 0.24 ) & 4.03 ( 0.08 ) & 10.74 & 0.81 & 0.67 & 9.77 & 4.03\\\\\n", + "\t14 & 100 & 1000 & 0 & 10.00 & 0.20 & 0.78 ( 0.01 ) & 11.91 ( 0.8 ) & 2.32 ( 0.1 ) & 14.59 & 0.66 & 0.78 & 11.91 & 2.32\\\\\n", + "\t15 & 500 & 1000 & 0 & 2.00 & 0.16 & 0.91 ( 0 ) & 30.84 ( 0.92 ) & 0 ( 0 ) & 35.84 & 0.82 & 0.91 & 30.84 & 0.00\\\\\n", + "\t16 & 1000 & 1000 & 0 & 1.00 & 0.24 & 0.93 ( 0 ) & 19.96 ( 0.61 ) & 0 ( 0 ) & 24.96 & 0.74 & 0.93 & 19.96 & 0.00\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 16 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0 | 1.00 | 0.33 | 0.74 ( 0.01 ) | 3.69 ( 0.25 ) | 2.5 ( 0.12 ) | 6.19 | 0.37 | 0.74 | 3.69 | 2.50 |\n", + "| 2 | 100 | 50 | 0 | 0.50 | 0.35 | 0.85 ( 0.01 ) | 7.16 ( 0.37 ) | 0.64 ( 0.08 ) | 11.52 | 0.48 | 0.85 | 7.16 | 0.64 |\n", + "| 3 | 500 | 50 | 0 | 0.10 | 0.53 | 0.93 ( 0 ) | 5.21 ( 0.21 ) | 0 ( 0 ) | 10.21 | 0.39 | 0.93 | 5.21 | 0.00 |\n", + "| 4 | 1000 | 50 | 0 | 0.05 | 0.80 | 0.93 ( 0 ) | 2.25 ( 0.11 ) | 0 ( 0 ) | 7.25 | 0.15 | 0.93 | 2.25 | 0.00 |\n", + "| 5 | 50 | 100 | 0 | 2.00 | 0.25 | 0.73 ( 0.01 ) | 5.13 ( 0.34 ) | 2.93 ( 0.1 ) | 7.20 | 0.5 | 0.73 | 5.13 | 2.93 |\n", + "| 6 | 100 | 100 | 0 | 1.00 | 0.32 | 0.83 ( 0.01 ) | 8.22 ( 0.44 ) | 1.03 ( 0.09 ) | 12.19 | 0.54 | 0.83 | 8.22 | 1.03 |\n", + "| 7 | 500 | 100 | 0 | 0.20 | 0.40 | 0.92 ( 0 ) | 8.89 ( 0.29 ) | 0 ( 0 ) | 13.89 | 0.55 | 0.92 | 8.89 | 0.00 |\n", + "| 8 | 1000 | 100 | 0 | 0.10 | 0.69 | 0.93 ( 0 ) | 3.53 ( 0.16 ) | 0 ( 0 ) | 8.53 | 0.27 | 0.93 | 3.53 | 0.00 |\n", + "| 9 | 50 | 500 | 0 | 10.00 | 0.13 | 0.7 ( 0.01 ) | 8.05 ( 0.28 ) | 3.74 ( 0.09 ) | 9.31 | 0.74 | 0.70 | 8.05 | 3.74 |\n", + "| 10 | 100 | 500 | 0 | 5.00 | 0.24 | 0.79 ( 0.01 ) | 11.14 ( 0.64 ) | 1.71 ( 0.1 ) | 14.43 | 0.63 | 0.79 | 11.14 | 1.71 |\n", + "| 11 | 500 | 500 | 0 | 1.00 | 0.20 | 0.92 ( 0 ) | 23.83 ( 0.69 ) | 0 ( 0 ) | 28.83 | 0.78 | 0.92 | 23.83 | 0.00 |\n", + "| 12 | 1000 | 500 | 0 | 0.50 | 0.36 | 0.93 ( 0 ) | 11.38 ( 0.41 ) | 0 ( 0 ) | 16.38 | 0.6 | 0.93 | 11.38 | 0.00 |\n", + "| 13 | 50 | 1000 | 0 | 20.00 | 0.09 | 0.67 ( 0.01 ) | 9.77 ( 0.24 ) | 4.03 ( 0.08 ) | 10.74 | 0.81 | 0.67 | 9.77 | 4.03 |\n", + "| 14 | 100 | 1000 | 0 | 10.00 | 0.20 | 0.78 ( 0.01 ) | 11.91 ( 0.8 ) | 2.32 ( 0.1 ) | 14.59 | 0.66 | 0.78 | 11.91 | 2.32 |\n", + "| 15 | 500 | 1000 | 0 | 2.00 | 0.16 | 0.91 ( 0 ) | 30.84 ( 0.92 ) | 0 ( 0 ) | 35.84 | 0.82 | 0.91 | 30.84 | 0.00 |\n", + "| 16 | 1000 | 1000 | 0 | 1.00 | 0.24 | 0.93 ( 0 ) | 19.96 ( 0.61 ) | 0 ( 0 ) | 24.96 | 0.74 | 0.93 | 19.96 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "1 50 50 0 1.00 0.33 0.74 ( 0.01 ) 3.69 ( 0.25 ) 2.5 ( 0.12 ) \n", + "2 100 50 0 0.50 0.35 0.85 ( 0.01 ) 7.16 ( 0.37 ) 0.64 ( 0.08 )\n", + "3 500 50 0 0.10 0.53 0.93 ( 0 ) 5.21 ( 0.21 ) 0 ( 0 ) \n", + "4 1000 50 0 0.05 0.80 0.93 ( 0 ) 2.25 ( 0.11 ) 0 ( 0 ) \n", + "5 50 100 0 2.00 0.25 0.73 ( 0.01 ) 5.13 ( 0.34 ) 2.93 ( 0.1 ) \n", + "6 100 100 0 1.00 0.32 0.83 ( 0.01 ) 8.22 ( 0.44 ) 1.03 ( 0.09 )\n", + "7 500 100 0 0.20 0.40 0.92 ( 0 ) 8.89 ( 0.29 ) 0 ( 0 ) \n", + "8 1000 100 0 0.10 0.69 0.93 ( 0 ) 3.53 ( 0.16 ) 0 ( 0 ) \n", + "9 50 500 0 10.00 0.13 0.7 ( 0.01 ) 8.05 ( 0.28 ) 3.74 ( 0.09 )\n", + "10 100 500 0 5.00 0.24 0.79 ( 0.01 ) 11.14 ( 0.64 ) 1.71 ( 0.1 ) \n", + "11 500 500 0 1.00 0.20 0.92 ( 0 ) 23.83 ( 0.69 ) 0 ( 0 ) \n", + "12 1000 500 0 0.50 0.36 0.93 ( 0 ) 11.38 ( 0.41 ) 0 ( 0 ) \n", + "13 50 1000 0 20.00 0.09 0.67 ( 0.01 ) 9.77 ( 0.24 ) 4.03 ( 0.08 )\n", + "14 100 1000 0 10.00 0.20 0.78 ( 0.01 ) 11.91 ( 0.8 ) 2.32 ( 0.1 ) \n", + "15 500 1000 0 2.00 0.16 0.91 ( 0 ) 30.84 ( 0.92 ) 0 ( 0 ) \n", + "16 1000 1000 0 1.00 0.24 0.93 ( 0 ) 19.96 ( 0.61 ) 0 ( 0 ) \n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "1 6.19 0.37 0.74 3.69 2.50 \n", + "2 11.52 0.48 0.85 7.16 0.64 \n", + "3 10.21 0.39 0.93 5.21 0.00 \n", + "4 7.25 0.15 0.93 2.25 0.00 \n", + "5 7.20 0.5 0.73 5.13 2.93 \n", + "6 12.19 0.54 0.83 8.22 1.03 \n", + "7 13.89 0.55 0.92 8.89 0.00 \n", + "8 8.53 0.27 0.93 3.53 0.00 \n", + "9 9.31 0.74 0.70 8.05 3.74 \n", + "10 14.43 0.63 0.79 11.14 1.71 \n", + "11 28.83 0.78 0.92 23.83 0.00 \n", + "12 16.38 0.6 0.93 11.38 0.00 \n", + "13 10.74 0.81 0.67 9.77 4.03 \n", + "14 14.59 0.66 0.78 11.91 2.32 \n", + "15 35.84 0.82 0.91 30.84 0.00 \n", + "16 24.96 0.74 0.93 19.96 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_toe\n", + "\n", + "## export\n", + "write.table(result.table_toe, '../results_summary_bin/sim_ind_lasso_binary.txt', \n", + " sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_bin/.ipynb_checkpoints/0.2_sim_ind_elnet_binary_update-checkpoint.ipynb b/simulations/notebooks_sim_bin/.ipynb_checkpoints/0.2_sim_ind_elnet_binary_update-checkpoint.ipynb new file mode 100644 index 0000000..da8ff21 --- /dev/null +++ b/simulations/notebooks_sim_bin/.ipynb_checkpoints/0.2_sim_ind_elnet_binary_update-checkpoint.ipynb @@ -0,0 +1,680 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize elastic net results on Independent Simulation Scenarios for binary outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "files = NULL\n", + "for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_independent_', paste('P', p, 'N', n, sep='_'), '.RData'))\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "16" + ], + "text/latex": [ + "16" + ], + "text/markdown": [ + "16" + ], + "text/plain": [ + "[1] 16" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "length(files)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1] \"indx: 1\"\n", + "[1] \"indx: 2\"\n", + "[1] \"indx: 3\"\n", + "[1] \"indx: 4\"\n", + "[1] \"indx: 5\"\n", + "[1] \"indx: 6\"\n", + "[1] \"indx: 7\"\n", + "[1] \"indx: 8\"\n", + "[1] \"indx: 9\"\n", + "[1] \"indx: 10\"\n", + "[1] \"indx: 11\"\n", + "[1] \"indx: 12\"\n", + "[1] \"indx: 13\"\n", + "[1] \"indx: 14\"\n", + "[1] \"indx: 15\"\n", + "[1] \"indx: 16\"\n" + ] + } + ], + "source": [ + "avg_FDR = NULL\n", + "table_toe = NULL\n", + "tmp_num_select = rep(0, length(files))\n", + "for (i in 1:length(files)){\n", + " print(paste0('indx: ', i))\n", + " load(paste0(dir, '/binary_update/ind_Elnet_binary_', i, '.RData')) \n", + " \n", + " table_toe = rbind(table_toe, results_ind_elnet[c('n', 'p', 'rou', 'FP', 'FN', 'ROC', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_ind_elnet$Stab.table))\n", + " \n", + " # calculate FDR\n", + " load(file_name, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_ind_elnet$Stab.table\n", + " FDR = NULL # false positive rate\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}\n", + "table_toe = as.data.frame(table_toe)\n", + "table_toe$num_select = tmp_num_select\n", + "table_toe$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
15050012.04 ( 0.89 )1.42 ( 0.11 )0.76 ( 0.01 )0.1515.620.61
210050011.44 ( 0.76 )0.46 ( 0.07 )0.84 ( 0.01 )0.2315.980.56
35005008.74 ( 0.72 )0 ( 0 )0.92 ( 0 )0.3613.740.45
410005007.56 ( 0.72 )0 ( 0 )0.93 ( 0 )0.4112.560.40
550100018.92 ( 1.7 )1.81 ( 0.12 )0.72 ( 0.01 )0.122.110.72
6100100012.48 ( 0.9 )0.96 ( 0.09 )0.82 ( 0.01 )0.2216.520.58
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0 & 12.04 ( 0.89 ) & 1.42 ( 0.11 ) & 0.76 ( 0.01 ) & 0.15 & 15.62 & 0.61\\\\\n", + "\t2 & 100 & 50 & 0 & 11.44 ( 0.76 ) & 0.46 ( 0.07 ) & 0.84 ( 0.01 ) & 0.23 & 15.98 & 0.56\\\\\n", + "\t3 & 500 & 50 & 0 & 8.74 ( 0.72 ) & 0 ( 0 ) & 0.92 ( 0 ) & 0.36 & 13.74 & 0.45\\\\\n", + "\t4 & 1000 & 50 & 0 & 7.56 ( 0.72 ) & 0 ( 0 ) & 0.93 ( 0 ) & 0.41 & 12.56 & 0.40\\\\\n", + "\t5 & 50 & 100 & 0 & 18.92 ( 1.7 ) & 1.81 ( 0.12 ) & 0.72 ( 0.01 ) & 0.1 & 22.11 & 0.72\\\\\n", + "\t6 & 100 & 100 & 0 & 12.48 ( 0.9 ) & 0.96 ( 0.09 ) & 0.82 ( 0.01 ) & 0.22 & 16.52 & 0.58\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0 | 12.04 ( 0.89 ) | 1.42 ( 0.11 ) | 0.76 ( 0.01 ) | 0.15 | 15.62 | 0.61 |\n", + "| 2 | 100 | 50 | 0 | 11.44 ( 0.76 ) | 0.46 ( 0.07 ) | 0.84 ( 0.01 ) | 0.23 | 15.98 | 0.56 |\n", + "| 3 | 500 | 50 | 0 | 8.74 ( 0.72 ) | 0 ( 0 ) | 0.92 ( 0 ) | 0.36 | 13.74 | 0.45 |\n", + "| 4 | 1000 | 50 | 0 | 7.56 ( 0.72 ) | 0 ( 0 ) | 0.93 ( 0 ) | 0.41 | 12.56 | 0.40 |\n", + "| 5 | 50 | 100 | 0 | 18.92 ( 1.7 ) | 1.81 ( 0.12 ) | 0.72 ( 0.01 ) | 0.1 | 22.11 | 0.72 |\n", + "| 6 | 100 | 100 | 0 | 12.48 ( 0.9 ) | 0.96 ( 0.09 ) | 0.82 ( 0.01 ) | 0.22 | 16.52 | 0.58 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select FDR \n", + "1 50 50 0 12.04 ( 0.89 ) 1.42 ( 0.11 ) 0.76 ( 0.01 ) 0.15 15.62 0.61\n", + "2 100 50 0 11.44 ( 0.76 ) 0.46 ( 0.07 ) 0.84 ( 0.01 ) 0.23 15.98 0.56\n", + "3 500 50 0 8.74 ( 0.72 ) 0 ( 0 ) 0.92 ( 0 ) 0.36 13.74 0.45\n", + "4 1000 50 0 7.56 ( 0.72 ) 0 ( 0 ) 0.93 ( 0 ) 0.41 12.56 0.40\n", + "5 50 100 0 18.92 ( 1.7 ) 1.81 ( 0.12 ) 0.72 ( 0.01 ) 0.1 22.11 0.72\n", + "6 100 100 0 12.48 ( 0.9 ) 0.96 ( 0.09 ) 0.82 ( 0.01 ) 0.22 16.52 0.58" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
11500500016.79 ( 1.47 )0 ( 0 )0.92 ( 0 )0.2721.790.61
121000500011.47 ( 1.14 )0 ( 0 )0.93 ( 0 )0.3616.470.48
13501000072.88 ( 8.55 )2.89 ( 0.13 )0.67 ( 0.01 )0.0274.990.91
141001000029.95 ( 4.05 )2 ( 0.1 )0.76 ( 0.01 )0.0932.950.77
155001000019.47 ( 1.76 )0 ( 0 )0.91 ( 0 )0.2424.470.62
1610001000018.47 ( 1.76 )0 ( 0 )0.93 ( 0 )0.2523.470.58
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t11 & 500 & 500 & 0 & 16.79 ( 1.47 ) & 0 ( 0 ) & 0.92 ( 0 ) & 0.27 & 21.79 & 0.61\\\\\n", + "\t12 & 1000 & 500 & 0 & 11.47 ( 1.14 ) & 0 ( 0 ) & 0.93 ( 0 ) & 0.36 & 16.47 & 0.48\\\\\n", + "\t13 & 50 & 1000 & 0 & 72.88 ( 8.55 ) & 2.89 ( 0.13 ) & 0.67 ( 0.01 ) & 0.02 & 74.99 & 0.91\\\\\n", + "\t14 & 100 & 1000 & 0 & 29.95 ( 4.05 ) & 2 ( 0.1 ) & 0.76 ( 0.01 ) & 0.09 & 32.95 & 0.77\\\\\n", + "\t15 & 500 & 1000 & 0 & 19.47 ( 1.76 ) & 0 ( 0 ) & 0.91 ( 0 ) & 0.24 & 24.47 & 0.62\\\\\n", + "\t16 & 1000 & 1000 & 0 & 18.47 ( 1.76 ) & 0 ( 0 ) & 0.93 ( 0 ) & 0.25 & 23.47 & 0.58\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 11 | 500 | 500 | 0 | 16.79 ( 1.47 ) | 0 ( 0 ) | 0.92 ( 0 ) | 0.27 | 21.79 | 0.61 |\n", + "| 12 | 1000 | 500 | 0 | 11.47 ( 1.14 ) | 0 ( 0 ) | 0.93 ( 0 ) | 0.36 | 16.47 | 0.48 |\n", + "| 13 | 50 | 1000 | 0 | 72.88 ( 8.55 ) | 2.89 ( 0.13 ) | 0.67 ( 0.01 ) | 0.02 | 74.99 | 0.91 |\n", + "| 14 | 100 | 1000 | 0 | 29.95 ( 4.05 ) | 2 ( 0.1 ) | 0.76 ( 0.01 ) | 0.09 | 32.95 | 0.77 |\n", + "| 15 | 500 | 1000 | 0 | 19.47 ( 1.76 ) | 0 ( 0 ) | 0.91 ( 0 ) | 0.24 | 24.47 | 0.62 |\n", + "| 16 | 1000 | 1000 | 0 | 18.47 ( 1.76 ) | 0 ( 0 ) | 0.93 ( 0 ) | 0.25 | 23.47 | 0.58 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select\n", + "11 500 500 0 16.79 ( 1.47 ) 0 ( 0 ) 0.92 ( 0 ) 0.27 21.79 \n", + "12 1000 500 0 11.47 ( 1.14 ) 0 ( 0 ) 0.93 ( 0 ) 0.36 16.47 \n", + "13 50 1000 0 72.88 ( 8.55 ) 2.89 ( 0.13 ) 0.67 ( 0.01 ) 0.02 74.99 \n", + "14 100 1000 0 29.95 ( 4.05 ) 2 ( 0.1 ) 0.76 ( 0.01 ) 0.09 32.95 \n", + "15 500 1000 0 19.47 ( 1.76 ) 0 ( 0 ) 0.91 ( 0 ) 0.24 24.47 \n", + "16 1000 1000 0 18.47 ( 1.76 ) 0 ( 0 ) 0.93 ( 0 ) 0.25 23.47 \n", + " FDR \n", + "11 0.61\n", + "12 0.48\n", + "13 0.91\n", + "14 0.77\n", + "15 0.62\n", + "16 0.58" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_toe <- apply(table_toe,2,as.character)\n", + "rownames(result.table_toe) = rownames(table_toe)\n", + "result.table_toe = as.data.frame(result.table_toe)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_toe$n = tidyr::extract_numeric(result.table_toe$n)\n", + "result.table_toe$p = tidyr::extract_numeric(result.table_toe$p)\n", + "result.table_toe$ratio = result.table_toe$p / result.table_toe$n\n", + "\n", + "result.table_toe = result.table_toe[c('n', 'p', 'rou', 'ratio', 'Stab', 'ROC', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_toe)[1:4] = c('N', 'P', 'Corr', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_toe$Stab = as.numeric(as.character(result.table_toe$Stab))\n", + "result.table_toe$num_select = as.numeric(as.character(result.table_toe$num_select))\n", + "\n", + "result.table_toe$ROC_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$ROC))\n", + "result.table_toe$FP_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$FP))\n", + "result.table_toe$FN_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$FN))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "
A data.frame: 0 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
\n" + ], + "text/latex": [ + "A data.frame: 0 × 13\n", + "\\begin{tabular}{lllllllllllll}\n", + " N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 0 × 13\n", + "\n", + "| N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select FDR ROC_mean FP_mean FN_mean" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check whether missing values exists\n", + "result.table_toe[rowSums(is.na(result.table_toe)) > 0,]" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 5001.000.150.76 ( 0.01 )12.04 ( 0.89 )1.42 ( 0.11 )15.620.610.7612.041.42
2 100 5000.500.230.84 ( 0.01 )11.44 ( 0.76 )0.46 ( 0.07 )15.980.560.8411.440.46
3 500 5000.100.360.92 ( 0 ) 8.74 ( 0.72 ) 0 ( 0 ) 13.740.450.92 8.740.00
41000 5000.050.410.93 ( 0 ) 7.56 ( 0.72 ) 0 ( 0 ) 12.560.4 0.93 7.560.00
5 5010002.000.100.72 ( 0.01 )18.92 ( 1.7 ) 1.81 ( 0.12 )22.110.720.7218.921.81
6 10010001.000.220.82 ( 0.01 )12.48 ( 0.9 ) 0.96 ( 0.09 )16.520.580.8212.480.96
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0 & 1.00 & 0.15 & 0.76 ( 0.01 ) & 12.04 ( 0.89 ) & 1.42 ( 0.11 ) & 15.62 & 0.61 & 0.76 & 12.04 & 1.42\\\\\n", + "\t2 & 100 & 50 & 0 & 0.50 & 0.23 & 0.84 ( 0.01 ) & 11.44 ( 0.76 ) & 0.46 ( 0.07 ) & 15.98 & 0.56 & 0.84 & 11.44 & 0.46\\\\\n", + "\t3 & 500 & 50 & 0 & 0.10 & 0.36 & 0.92 ( 0 ) & 8.74 ( 0.72 ) & 0 ( 0 ) & 13.74 & 0.45 & 0.92 & 8.74 & 0.00\\\\\n", + "\t4 & 1000 & 50 & 0 & 0.05 & 0.41 & 0.93 ( 0 ) & 7.56 ( 0.72 ) & 0 ( 0 ) & 12.56 & 0.4 & 0.93 & 7.56 & 0.00\\\\\n", + "\t5 & 50 & 100 & 0 & 2.00 & 0.10 & 0.72 ( 0.01 ) & 18.92 ( 1.7 ) & 1.81 ( 0.12 ) & 22.11 & 0.72 & 0.72 & 18.92 & 1.81\\\\\n", + "\t6 & 100 & 100 & 0 & 1.00 & 0.22 & 0.82 ( 0.01 ) & 12.48 ( 0.9 ) & 0.96 ( 0.09 ) & 16.52 & 0.58 & 0.82 & 12.48 & 0.96\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0 | 1.00 | 0.15 | 0.76 ( 0.01 ) | 12.04 ( 0.89 ) | 1.42 ( 0.11 ) | 15.62 | 0.61 | 0.76 | 12.04 | 1.42 |\n", + "| 2 | 100 | 50 | 0 | 0.50 | 0.23 | 0.84 ( 0.01 ) | 11.44 ( 0.76 ) | 0.46 ( 0.07 ) | 15.98 | 0.56 | 0.84 | 11.44 | 0.46 |\n", + "| 3 | 500 | 50 | 0 | 0.10 | 0.36 | 0.92 ( 0 ) | 8.74 ( 0.72 ) | 0 ( 0 ) | 13.74 | 0.45 | 0.92 | 8.74 | 0.00 |\n", + "| 4 | 1000 | 50 | 0 | 0.05 | 0.41 | 0.93 ( 0 ) | 7.56 ( 0.72 ) | 0 ( 0 ) | 12.56 | 0.4 | 0.93 | 7.56 | 0.00 |\n", + "| 5 | 50 | 100 | 0 | 2.00 | 0.10 | 0.72 ( 0.01 ) | 18.92 ( 1.7 ) | 1.81 ( 0.12 ) | 22.11 | 0.72 | 0.72 | 18.92 | 1.81 |\n", + "| 6 | 100 | 100 | 0 | 1.00 | 0.22 | 0.82 ( 0.01 ) | 12.48 ( 0.9 ) | 0.96 ( 0.09 ) | 16.52 | 0.58 | 0.82 | 12.48 | 0.96 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "1 50 50 0 1.00 0.15 0.76 ( 0.01 ) 12.04 ( 0.89 ) 1.42 ( 0.11 )\n", + "2 100 50 0 0.50 0.23 0.84 ( 0.01 ) 11.44 ( 0.76 ) 0.46 ( 0.07 )\n", + "3 500 50 0 0.10 0.36 0.92 ( 0 ) 8.74 ( 0.72 ) 0 ( 0 ) \n", + "4 1000 50 0 0.05 0.41 0.93 ( 0 ) 7.56 ( 0.72 ) 0 ( 0 ) \n", + "5 50 100 0 2.00 0.10 0.72 ( 0.01 ) 18.92 ( 1.7 ) 1.81 ( 0.12 )\n", + "6 100 100 0 1.00 0.22 0.82 ( 0.01 ) 12.48 ( 0.9 ) 0.96 ( 0.09 )\n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "1 15.62 0.61 0.76 12.04 1.42 \n", + "2 15.98 0.56 0.84 11.44 0.46 \n", + "3 13.74 0.45 0.92 8.74 0.00 \n", + "4 12.56 0.4 0.93 7.56 0.00 \n", + "5 22.11 0.72 0.72 18.92 1.81 \n", + "6 16.52 0.58 0.82 12.48 0.96 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
11 500 5000 1.00.270.92 ( 0 ) 16.79 ( 1.47 )0 ( 0 ) 21.790.610.9216.790.00
121000 5000 0.50.360.93 ( 0 ) 11.47 ( 1.14 )0 ( 0 ) 16.470.480.9311.470.00
13 501000020.00.020.67 ( 0.01 )72.88 ( 8.55 )2.89 ( 0.13 )74.990.910.6772.882.89
14 1001000010.00.090.76 ( 0.01 )29.95 ( 4.05 )2 ( 0.1 ) 32.950.770.7629.952.00
15 50010000 2.00.240.91 ( 0 ) 19.47 ( 1.76 )0 ( 0 ) 24.470.620.9119.470.00
16100010000 1.00.250.93 ( 0 ) 18.47 ( 1.76 )0 ( 0 ) 23.470.580.9318.470.00
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t11 & 500 & 500 & 0 & 1.0 & 0.27 & 0.92 ( 0 ) & 16.79 ( 1.47 ) & 0 ( 0 ) & 21.79 & 0.61 & 0.92 & 16.79 & 0.00\\\\\n", + "\t12 & 1000 & 500 & 0 & 0.5 & 0.36 & 0.93 ( 0 ) & 11.47 ( 1.14 ) & 0 ( 0 ) & 16.47 & 0.48 & 0.93 & 11.47 & 0.00\\\\\n", + "\t13 & 50 & 1000 & 0 & 20.0 & 0.02 & 0.67 ( 0.01 ) & 72.88 ( 8.55 ) & 2.89 ( 0.13 ) & 74.99 & 0.91 & 0.67 & 72.88 & 2.89\\\\\n", + "\t14 & 100 & 1000 & 0 & 10.0 & 0.09 & 0.76 ( 0.01 ) & 29.95 ( 4.05 ) & 2 ( 0.1 ) & 32.95 & 0.77 & 0.76 & 29.95 & 2.00\\\\\n", + "\t15 & 500 & 1000 & 0 & 2.0 & 0.24 & 0.91 ( 0 ) & 19.47 ( 1.76 ) & 0 ( 0 ) & 24.47 & 0.62 & 0.91 & 19.47 & 0.00\\\\\n", + "\t16 & 1000 & 1000 & 0 & 1.0 & 0.25 & 0.93 ( 0 ) & 18.47 ( 1.76 ) & 0 ( 0 ) & 23.47 & 0.58 & 0.93 & 18.47 & 0.00\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 11 | 500 | 500 | 0 | 1.0 | 0.27 | 0.92 ( 0 ) | 16.79 ( 1.47 ) | 0 ( 0 ) | 21.79 | 0.61 | 0.92 | 16.79 | 0.00 |\n", + "| 12 | 1000 | 500 | 0 | 0.5 | 0.36 | 0.93 ( 0 ) | 11.47 ( 1.14 ) | 0 ( 0 ) | 16.47 | 0.48 | 0.93 | 11.47 | 0.00 |\n", + "| 13 | 50 | 1000 | 0 | 20.0 | 0.02 | 0.67 ( 0.01 ) | 72.88 ( 8.55 ) | 2.89 ( 0.13 ) | 74.99 | 0.91 | 0.67 | 72.88 | 2.89 |\n", + "| 14 | 100 | 1000 | 0 | 10.0 | 0.09 | 0.76 ( 0.01 ) | 29.95 ( 4.05 ) | 2 ( 0.1 ) | 32.95 | 0.77 | 0.76 | 29.95 | 2.00 |\n", + "| 15 | 500 | 1000 | 0 | 2.0 | 0.24 | 0.91 ( 0 ) | 19.47 ( 1.76 ) | 0 ( 0 ) | 24.47 | 0.62 | 0.91 | 19.47 | 0.00 |\n", + "| 16 | 1000 | 1000 | 0 | 1.0 | 0.25 | 0.93 ( 0 ) | 18.47 ( 1.76 ) | 0 ( 0 ) | 23.47 | 0.58 | 0.93 | 18.47 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "11 500 500 0 1.0 0.27 0.92 ( 0 ) 16.79 ( 1.47 ) 0 ( 0 ) \n", + "12 1000 500 0 0.5 0.36 0.93 ( 0 ) 11.47 ( 1.14 ) 0 ( 0 ) \n", + "13 50 1000 0 20.0 0.02 0.67 ( 0.01 ) 72.88 ( 8.55 ) 2.89 ( 0.13 )\n", + "14 100 1000 0 10.0 0.09 0.76 ( 0.01 ) 29.95 ( 4.05 ) 2 ( 0.1 ) \n", + "15 500 1000 0 2.0 0.24 0.91 ( 0 ) 19.47 ( 1.76 ) 0 ( 0 ) \n", + "16 1000 1000 0 1.0 0.25 0.93 ( 0 ) 18.47 ( 1.76 ) 0 ( 0 ) \n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "11 21.79 0.61 0.92 16.79 0.00 \n", + "12 16.47 0.48 0.93 11.47 0.00 \n", + "13 74.99 0.91 0.67 72.88 2.89 \n", + "14 32.95 0.77 0.76 29.95 2.00 \n", + "15 24.47 0.62 0.91 19.47 0.00 \n", + "16 23.47 0.58 0.93 18.47 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 16 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 500 1.000.150.76 ( 0.01 )12.04 ( 0.89 )1.42 ( 0.11 )15.620.610.7612.041.42
2 100 500 0.500.230.84 ( 0.01 )11.44 ( 0.76 )0.46 ( 0.07 )15.980.560.8411.440.46
3 500 500 0.100.360.92 ( 0 ) 8.74 ( 0.72 ) 0 ( 0 ) 13.740.450.92 8.740.00
41000 500 0.050.410.93 ( 0 ) 7.56 ( 0.72 ) 0 ( 0 ) 12.560.4 0.93 7.560.00
5 50 1000 2.000.100.72 ( 0.01 )18.92 ( 1.7 ) 1.81 ( 0.12 )22.110.720.7218.921.81
6 100 1000 1.000.220.82 ( 0.01 )12.48 ( 0.9 ) 0.96 ( 0.09 )16.520.580.8212.480.96
7 500 1000 0.200.320.92 ( 0 ) 11.78 ( 0.99 )0 ( 0 ) 16.780.520.9211.780.00
81000 1000 0.100.340.93 ( 0 ) 10.71 ( 1.03 )0 ( 0 ) 15.710.470.9310.710.00
9 50 500010.000.030.68 ( 0.01 )57.17 ( 5.72 )2.27 ( 0.13 )59.900.880.6857.172.27
10 100 5000 5.000.150.77 ( 0.01 )20.84 ( 2.08 )1.49 ( 0.1 ) 24.350.690.7720.841.49
11 500 5000 1.000.270.92 ( 0 ) 16.79 ( 1.47 )0 ( 0 ) 21.790.610.9216.790.00
121000 5000 0.500.360.93 ( 0 ) 11.47 ( 1.14 )0 ( 0 ) 16.470.480.9311.470.00
13 501000020.000.020.67 ( 0.01 )72.88 ( 8.55 )2.89 ( 0.13 )74.990.910.6772.882.89
14 1001000010.000.090.76 ( 0.01 )29.95 ( 4.05 )2 ( 0.1 ) 32.950.770.7629.952.00
15 50010000 2.000.240.91 ( 0 ) 19.47 ( 1.76 )0 ( 0 ) 24.470.620.9119.470.00
16100010000 1.000.250.93 ( 0 ) 18.47 ( 1.76 )0 ( 0 ) 23.470.580.9318.470.00
\n" + ], + "text/latex": [ + "A data.frame: 16 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0 & 1.00 & 0.15 & 0.76 ( 0.01 ) & 12.04 ( 0.89 ) & 1.42 ( 0.11 ) & 15.62 & 0.61 & 0.76 & 12.04 & 1.42\\\\\n", + "\t2 & 100 & 50 & 0 & 0.50 & 0.23 & 0.84 ( 0.01 ) & 11.44 ( 0.76 ) & 0.46 ( 0.07 ) & 15.98 & 0.56 & 0.84 & 11.44 & 0.46\\\\\n", + "\t3 & 500 & 50 & 0 & 0.10 & 0.36 & 0.92 ( 0 ) & 8.74 ( 0.72 ) & 0 ( 0 ) & 13.74 & 0.45 & 0.92 & 8.74 & 0.00\\\\\n", + "\t4 & 1000 & 50 & 0 & 0.05 & 0.41 & 0.93 ( 0 ) & 7.56 ( 0.72 ) & 0 ( 0 ) & 12.56 & 0.4 & 0.93 & 7.56 & 0.00\\\\\n", + "\t5 & 50 & 100 & 0 & 2.00 & 0.10 & 0.72 ( 0.01 ) & 18.92 ( 1.7 ) & 1.81 ( 0.12 ) & 22.11 & 0.72 & 0.72 & 18.92 & 1.81\\\\\n", + "\t6 & 100 & 100 & 0 & 1.00 & 0.22 & 0.82 ( 0.01 ) & 12.48 ( 0.9 ) & 0.96 ( 0.09 ) & 16.52 & 0.58 & 0.82 & 12.48 & 0.96\\\\\n", + "\t7 & 500 & 100 & 0 & 0.20 & 0.32 & 0.92 ( 0 ) & 11.78 ( 0.99 ) & 0 ( 0 ) & 16.78 & 0.52 & 0.92 & 11.78 & 0.00\\\\\n", + "\t8 & 1000 & 100 & 0 & 0.10 & 0.34 & 0.93 ( 0 ) & 10.71 ( 1.03 ) & 0 ( 0 ) & 15.71 & 0.47 & 0.93 & 10.71 & 0.00\\\\\n", + "\t9 & 50 & 500 & 0 & 10.00 & 0.03 & 0.68 ( 0.01 ) & 57.17 ( 5.72 ) & 2.27 ( 0.13 ) & 59.90 & 0.88 & 0.68 & 57.17 & 2.27\\\\\n", + "\t10 & 100 & 500 & 0 & 5.00 & 0.15 & 0.77 ( 0.01 ) & 20.84 ( 2.08 ) & 1.49 ( 0.1 ) & 24.35 & 0.69 & 0.77 & 20.84 & 1.49\\\\\n", + "\t11 & 500 & 500 & 0 & 1.00 & 0.27 & 0.92 ( 0 ) & 16.79 ( 1.47 ) & 0 ( 0 ) & 21.79 & 0.61 & 0.92 & 16.79 & 0.00\\\\\n", + "\t12 & 1000 & 500 & 0 & 0.50 & 0.36 & 0.93 ( 0 ) & 11.47 ( 1.14 ) & 0 ( 0 ) & 16.47 & 0.48 & 0.93 & 11.47 & 0.00\\\\\n", + "\t13 & 50 & 1000 & 0 & 20.00 & 0.02 & 0.67 ( 0.01 ) & 72.88 ( 8.55 ) & 2.89 ( 0.13 ) & 74.99 & 0.91 & 0.67 & 72.88 & 2.89\\\\\n", + "\t14 & 100 & 1000 & 0 & 10.00 & 0.09 & 0.76 ( 0.01 ) & 29.95 ( 4.05 ) & 2 ( 0.1 ) & 32.95 & 0.77 & 0.76 & 29.95 & 2.00\\\\\n", + "\t15 & 500 & 1000 & 0 & 2.00 & 0.24 & 0.91 ( 0 ) & 19.47 ( 1.76 ) & 0 ( 0 ) & 24.47 & 0.62 & 0.91 & 19.47 & 0.00\\\\\n", + "\t16 & 1000 & 1000 & 0 & 1.00 & 0.25 & 0.93 ( 0 ) & 18.47 ( 1.76 ) & 0 ( 0 ) & 23.47 & 0.58 & 0.93 & 18.47 & 0.00\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 16 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0 | 1.00 | 0.15 | 0.76 ( 0.01 ) | 12.04 ( 0.89 ) | 1.42 ( 0.11 ) | 15.62 | 0.61 | 0.76 | 12.04 | 1.42 |\n", + "| 2 | 100 | 50 | 0 | 0.50 | 0.23 | 0.84 ( 0.01 ) | 11.44 ( 0.76 ) | 0.46 ( 0.07 ) | 15.98 | 0.56 | 0.84 | 11.44 | 0.46 |\n", + "| 3 | 500 | 50 | 0 | 0.10 | 0.36 | 0.92 ( 0 ) | 8.74 ( 0.72 ) | 0 ( 0 ) | 13.74 | 0.45 | 0.92 | 8.74 | 0.00 |\n", + "| 4 | 1000 | 50 | 0 | 0.05 | 0.41 | 0.93 ( 0 ) | 7.56 ( 0.72 ) | 0 ( 0 ) | 12.56 | 0.4 | 0.93 | 7.56 | 0.00 |\n", + "| 5 | 50 | 100 | 0 | 2.00 | 0.10 | 0.72 ( 0.01 ) | 18.92 ( 1.7 ) | 1.81 ( 0.12 ) | 22.11 | 0.72 | 0.72 | 18.92 | 1.81 |\n", + "| 6 | 100 | 100 | 0 | 1.00 | 0.22 | 0.82 ( 0.01 ) | 12.48 ( 0.9 ) | 0.96 ( 0.09 ) | 16.52 | 0.58 | 0.82 | 12.48 | 0.96 |\n", + "| 7 | 500 | 100 | 0 | 0.20 | 0.32 | 0.92 ( 0 ) | 11.78 ( 0.99 ) | 0 ( 0 ) | 16.78 | 0.52 | 0.92 | 11.78 | 0.00 |\n", + "| 8 | 1000 | 100 | 0 | 0.10 | 0.34 | 0.93 ( 0 ) | 10.71 ( 1.03 ) | 0 ( 0 ) | 15.71 | 0.47 | 0.93 | 10.71 | 0.00 |\n", + "| 9 | 50 | 500 | 0 | 10.00 | 0.03 | 0.68 ( 0.01 ) | 57.17 ( 5.72 ) | 2.27 ( 0.13 ) | 59.90 | 0.88 | 0.68 | 57.17 | 2.27 |\n", + "| 10 | 100 | 500 | 0 | 5.00 | 0.15 | 0.77 ( 0.01 ) | 20.84 ( 2.08 ) | 1.49 ( 0.1 ) | 24.35 | 0.69 | 0.77 | 20.84 | 1.49 |\n", + "| 11 | 500 | 500 | 0 | 1.00 | 0.27 | 0.92 ( 0 ) | 16.79 ( 1.47 ) | 0 ( 0 ) | 21.79 | 0.61 | 0.92 | 16.79 | 0.00 |\n", + "| 12 | 1000 | 500 | 0 | 0.50 | 0.36 | 0.93 ( 0 ) | 11.47 ( 1.14 ) | 0 ( 0 ) | 16.47 | 0.48 | 0.93 | 11.47 | 0.00 |\n", + "| 13 | 50 | 1000 | 0 | 20.00 | 0.02 | 0.67 ( 0.01 ) | 72.88 ( 8.55 ) | 2.89 ( 0.13 ) | 74.99 | 0.91 | 0.67 | 72.88 | 2.89 |\n", + "| 14 | 100 | 1000 | 0 | 10.00 | 0.09 | 0.76 ( 0.01 ) | 29.95 ( 4.05 ) | 2 ( 0.1 ) | 32.95 | 0.77 | 0.76 | 29.95 | 2.00 |\n", + "| 15 | 500 | 1000 | 0 | 2.00 | 0.24 | 0.91 ( 0 ) | 19.47 ( 1.76 ) | 0 ( 0 ) | 24.47 | 0.62 | 0.91 | 19.47 | 0.00 |\n", + "| 16 | 1000 | 1000 | 0 | 1.00 | 0.25 | 0.93 ( 0 ) | 18.47 ( 1.76 ) | 0 ( 0 ) | 23.47 | 0.58 | 0.93 | 18.47 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "1 50 50 0 1.00 0.15 0.76 ( 0.01 ) 12.04 ( 0.89 ) 1.42 ( 0.11 )\n", + "2 100 50 0 0.50 0.23 0.84 ( 0.01 ) 11.44 ( 0.76 ) 0.46 ( 0.07 )\n", + "3 500 50 0 0.10 0.36 0.92 ( 0 ) 8.74 ( 0.72 ) 0 ( 0 ) \n", + "4 1000 50 0 0.05 0.41 0.93 ( 0 ) 7.56 ( 0.72 ) 0 ( 0 ) \n", + "5 50 100 0 2.00 0.10 0.72 ( 0.01 ) 18.92 ( 1.7 ) 1.81 ( 0.12 )\n", + "6 100 100 0 1.00 0.22 0.82 ( 0.01 ) 12.48 ( 0.9 ) 0.96 ( 0.09 )\n", + "7 500 100 0 0.20 0.32 0.92 ( 0 ) 11.78 ( 0.99 ) 0 ( 0 ) \n", + "8 1000 100 0 0.10 0.34 0.93 ( 0 ) 10.71 ( 1.03 ) 0 ( 0 ) \n", + "9 50 500 0 10.00 0.03 0.68 ( 0.01 ) 57.17 ( 5.72 ) 2.27 ( 0.13 )\n", + "10 100 500 0 5.00 0.15 0.77 ( 0.01 ) 20.84 ( 2.08 ) 1.49 ( 0.1 ) \n", + "11 500 500 0 1.00 0.27 0.92 ( 0 ) 16.79 ( 1.47 ) 0 ( 0 ) \n", + "12 1000 500 0 0.50 0.36 0.93 ( 0 ) 11.47 ( 1.14 ) 0 ( 0 ) \n", + "13 50 1000 0 20.00 0.02 0.67 ( 0.01 ) 72.88 ( 8.55 ) 2.89 ( 0.13 )\n", + "14 100 1000 0 10.00 0.09 0.76 ( 0.01 ) 29.95 ( 4.05 ) 2 ( 0.1 ) \n", + "15 500 1000 0 2.00 0.24 0.91 ( 0 ) 19.47 ( 1.76 ) 0 ( 0 ) \n", + "16 1000 1000 0 1.00 0.25 0.93 ( 0 ) 18.47 ( 1.76 ) 0 ( 0 ) \n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "1 15.62 0.61 0.76 12.04 1.42 \n", + "2 15.98 0.56 0.84 11.44 0.46 \n", + "3 13.74 0.45 0.92 8.74 0.00 \n", + "4 12.56 0.4 0.93 7.56 0.00 \n", + "5 22.11 0.72 0.72 18.92 1.81 \n", + "6 16.52 0.58 0.82 12.48 0.96 \n", + "7 16.78 0.52 0.92 11.78 0.00 \n", + "8 15.71 0.47 0.93 10.71 0.00 \n", + "9 59.90 0.88 0.68 57.17 2.27 \n", + "10 24.35 0.69 0.77 20.84 1.49 \n", + "11 21.79 0.61 0.92 16.79 0.00 \n", + "12 16.47 0.48 0.93 11.47 0.00 \n", + "13 74.99 0.91 0.67 72.88 2.89 \n", + "14 32.95 0.77 0.76 29.95 2.00 \n", + "15 24.47 0.62 0.91 19.47 0.00 \n", + "16 23.47 0.58 0.93 18.47 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_toe\n", + "\n", + "## export\n", + "write.table(result.table_toe, '../results_summary_bin/sim_ind_Elnet_binary.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_bin/.ipynb_checkpoints/0.3_sim_ind_rf_binary_update-checkpoint.ipynb b/simulations/notebooks_sim_bin/.ipynb_checkpoints/0.3_sim_ind_rf_binary_update-checkpoint.ipynb new file mode 100644 index 0000000..6dfa2c6 --- /dev/null +++ b/simulations/notebooks_sim_bin/.ipynb_checkpoints/0.3_sim_ind_rf_binary_update-checkpoint.ipynb @@ -0,0 +1,694 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize random forests results on Independent Simulation Scenarios for binary outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "files = NULL\n", + "for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_independent_', paste('P', p, 'N', n, sep='_'), '.RData'))\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "16" + ], + "text/latex": [ + "16" + ], + "text/markdown": [ + "16" + ], + "text/plain": [ + "[1] 16" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "length(files)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1] \"indx: 1\"\n", + "[1] \"indx: 2\"\n", + "[1] \"indx: 3\"\n", + "[1] \"indx: 4\"\n", + "[1] \"indx: 5\"\n", + "[1] \"indx: 6\"\n", + "[1] \"indx: 7\"\n", + "[1] \"indx: 8\"\n", + "[1] \"indx: 9\"\n", + "[1] \"indx: 10\"\n", + "[1] \"indx: 11\"\n", + "[1] \"indx: 12\"\n", + "[1] \"indx: 13\"\n", + "[1] \"indx: 14\"\n", + "[1] \"indx: 15\"\n", + "[1] \"indx: 16\"\n" + ] + } + ], + "source": [ + "avg_FDR = NULL\n", + "table_toe = NULL\n", + "tmp_num_select = rep(0, length(files))\n", + "for (i in 1:length(files)){\n", + " print(paste0('indx: ', i))\n", + " load(paste0(dir, '/binary_update/ind_RF_binary_', i, '.RData')) \n", + " \n", + " table_toe = rbind(table_toe, results_ind_rf[c('n', 'p', 'rou', 'FP', 'FN', 'ROC', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_ind_rf$Stab.table))\n", + " \n", + " # calculate FDR\n", + " load(file_name, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_ind_rf$Stab.table\n", + " FDR = NULL # false positive rate\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}\n", + "table_toe = as.data.frame(table_toe)\n", + "table_toe$num_select = tmp_num_select\n", + "table_toe$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
1505001 ( 0 )6 ( 0 )1 ( 0 )NaN0.00 NaN
21005001.97 ( 0.13 )4.62 ( 0.08 )1 ( 0 )0.13.340.55
35005001.26 ( 0.12 )2.19 ( 0.08 )1 ( 0 )0.545.070.22
410005000.86 ( 0.09 )1.12 ( 0.08 )1 ( 0 )0.735.740.13
55010001 ( 0 )6 ( 0 )1 ( 0 )NaN0.00 NaN
610010004.29 ( 0.17 )4.79 ( 0.09 )1 ( 0 )0.055.500.77
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0 & 1 ( 0 ) & 6 ( 0 ) & 1 ( 0 ) & NaN & 0.00 & NaN\\\\\n", + "\t2 & 100 & 50 & 0 & 1.97 ( 0.13 ) & 4.62 ( 0.08 ) & 1 ( 0 ) & 0.1 & 3.34 & 0.55\\\\\n", + "\t3 & 500 & 50 & 0 & 1.26 ( 0.12 ) & 2.19 ( 0.08 ) & 1 ( 0 ) & 0.54 & 5.07 & 0.22\\\\\n", + "\t4 & 1000 & 50 & 0 & 0.86 ( 0.09 ) & 1.12 ( 0.08 ) & 1 ( 0 ) & 0.73 & 5.74 & 0.13\\\\\n", + "\t5 & 50 & 100 & 0 & 1 ( 0 ) & 6 ( 0 ) & 1 ( 0 ) & NaN & 0.00 & NaN\\\\\n", + "\t6 & 100 & 100 & 0 & 4.29 ( 0.17 ) & 4.79 ( 0.09 ) & 1 ( 0 ) & 0.05 & 5.50 & 0.77\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0 | 1 ( 0 ) | 6 ( 0 ) | 1 ( 0 ) | NaN | 0.00 | NaN |\n", + "| 2 | 100 | 50 | 0 | 1.97 ( 0.13 ) | 4.62 ( 0.08 ) | 1 ( 0 ) | 0.1 | 3.34 | 0.55 |\n", + "| 3 | 500 | 50 | 0 | 1.26 ( 0.12 ) | 2.19 ( 0.08 ) | 1 ( 0 ) | 0.54 | 5.07 | 0.22 |\n", + "| 4 | 1000 | 50 | 0 | 0.86 ( 0.09 ) | 1.12 ( 0.08 ) | 1 ( 0 ) | 0.73 | 5.74 | 0.13 |\n", + "| 5 | 50 | 100 | 0 | 1 ( 0 ) | 6 ( 0 ) | 1 ( 0 ) | NaN | 0.00 | NaN |\n", + "| 6 | 100 | 100 | 0 | 4.29 ( 0.17 ) | 4.79 ( 0.09 ) | 1 ( 0 ) | 0.05 | 5.50 | 0.77 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select FDR \n", + "1 50 50 0 1 ( 0 ) 6 ( 0 ) 1 ( 0 ) NaN 0.00 NaN\n", + "2 100 50 0 1.97 ( 0.13 ) 4.62 ( 0.08 ) 1 ( 0 ) 0.1 3.34 0.55\n", + "3 500 50 0 1.26 ( 0.12 ) 2.19 ( 0.08 ) 1 ( 0 ) 0.54 5.07 0.22\n", + "4 1000 50 0 0.86 ( 0.09 ) 1.12 ( 0.08 ) 1 ( 0 ) 0.73 5.74 0.13\n", + "5 50 100 0 1 ( 0 ) 6 ( 0 ) 1 ( 0 ) NaN 0.00 NaN\n", + "6 100 100 0 4.29 ( 0.17 ) 4.79 ( 0.09 ) 1 ( 0 ) 0.05 5.50 0.77" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
11500500023.08 ( 0.51 )2.34 ( 0.1 )1 ( 0 )0.0926.740.86
121000500022.72 ( 0.46 )1.34 ( 0.08 )1 ( 0 )0.1427.380.83
1350100001 ( 0 )6 ( 0 )1 ( 0 )NaN 0.00 NaN
141001000046.76 ( 0.67 )4.86 ( 0.09 )1 ( 0 )0.0147.900.98
155001000047.82 ( 0.66 )2.5 ( 0.1 )1 ( 0 )0.0451.320.93
1610001000047.14 ( 0.77 )1.46 ( 0.08 )1 ( 0 )0.0751.680.91
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t11 & 500 & 500 & 0 & 23.08 ( 0.51 ) & 2.34 ( 0.1 ) & 1 ( 0 ) & 0.09 & 26.74 & 0.86\\\\\n", + "\t12 & 1000 & 500 & 0 & 22.72 ( 0.46 ) & 1.34 ( 0.08 ) & 1 ( 0 ) & 0.14 & 27.38 & 0.83\\\\\n", + "\t13 & 50 & 1000 & 0 & 1 ( 0 ) & 6 ( 0 ) & 1 ( 0 ) & NaN & 0.00 & NaN\\\\\n", + "\t14 & 100 & 1000 & 0 & 46.76 ( 0.67 ) & 4.86 ( 0.09 ) & 1 ( 0 ) & 0.01 & 47.90 & 0.98\\\\\n", + "\t15 & 500 & 1000 & 0 & 47.82 ( 0.66 ) & 2.5 ( 0.1 ) & 1 ( 0 ) & 0.04 & 51.32 & 0.93\\\\\n", + "\t16 & 1000 & 1000 & 0 & 47.14 ( 0.77 ) & 1.46 ( 0.08 ) & 1 ( 0 ) & 0.07 & 51.68 & 0.91\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 11 | 500 | 500 | 0 | 23.08 ( 0.51 ) | 2.34 ( 0.1 ) | 1 ( 0 ) | 0.09 | 26.74 | 0.86 |\n", + "| 12 | 1000 | 500 | 0 | 22.72 ( 0.46 ) | 1.34 ( 0.08 ) | 1 ( 0 ) | 0.14 | 27.38 | 0.83 |\n", + "| 13 | 50 | 1000 | 0 | 1 ( 0 ) | 6 ( 0 ) | 1 ( 0 ) | NaN | 0.00 | NaN |\n", + "| 14 | 100 | 1000 | 0 | 46.76 ( 0.67 ) | 4.86 ( 0.09 ) | 1 ( 0 ) | 0.01 | 47.90 | 0.98 |\n", + "| 15 | 500 | 1000 | 0 | 47.82 ( 0.66 ) | 2.5 ( 0.1 ) | 1 ( 0 ) | 0.04 | 51.32 | 0.93 |\n", + "| 16 | 1000 | 1000 | 0 | 47.14 ( 0.77 ) | 1.46 ( 0.08 ) | 1 ( 0 ) | 0.07 | 51.68 | 0.91 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select FDR \n", + "11 500 500 0 23.08 ( 0.51 ) 2.34 ( 0.1 ) 1 ( 0 ) 0.09 26.74 0.86\n", + "12 1000 500 0 22.72 ( 0.46 ) 1.34 ( 0.08 ) 1 ( 0 ) 0.14 27.38 0.83\n", + "13 50 1000 0 1 ( 0 ) 6 ( 0 ) 1 ( 0 ) NaN 0.00 NaN\n", + "14 100 1000 0 46.76 ( 0.67 ) 4.86 ( 0.09 ) 1 ( 0 ) 0.01 47.90 0.98\n", + "15 500 1000 0 47.82 ( 0.66 ) 2.5 ( 0.1 ) 1 ( 0 ) 0.04 51.32 0.93\n", + "16 1000 1000 0 47.14 ( 0.77 ) 1.46 ( 0.08 ) 1 ( 0 ) 0.07 51.68 0.91" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_toe <- apply(table_toe,2,as.character)\n", + "rownames(result.table_toe) = rownames(table_toe)\n", + "result.table_toe = as.data.frame(result.table_toe)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_toe$n = tidyr::extract_numeric(result.table_toe$n)\n", + "result.table_toe$p = tidyr::extract_numeric(result.table_toe$p)\n", + "result.table_toe$ratio = result.table_toe$p / result.table_toe$n\n", + "\n", + "result.table_toe = result.table_toe[c('n', 'p', 'rou', 'ratio', 'Stab', 'ROC', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_toe)[1:4] = c('N', 'P', 'Corr', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_toe$Stab = as.numeric(as.character(result.table_toe$Stab))\n", + "result.table_toe$num_select = as.numeric(as.character(result.table_toe$num_select))\n", + "\n", + "result.table_toe$ROC_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$ROC))\n", + "result.table_toe$FP_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$FP))\n", + "result.table_toe$FN_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$FN))" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 4 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
150 500 1NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
550 1000 2NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
950 500010NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
13501000020NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
\n" + ], + "text/latex": [ + "A data.frame: 4 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0 & 1 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t5 & 50 & 100 & 0 & 2 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t9 & 50 & 500 & 0 & 10 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t13 & 50 & 1000 & 0 & 20 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 4 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0 | 1 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 5 | 50 | 100 | 0 | 2 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 9 | 50 | 500 | 0 | 10 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 13 | 50 | 1000 | 0 | 20 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select FDR ROC_mean\n", + "1 50 50 0 1 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "5 50 100 0 2 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "9 50 500 0 10 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "13 50 1000 0 20 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + " FP_mean FN_mean\n", + "1 1 6 \n", + "5 1 6 \n", + "9 1 6 \n", + "13 1 6 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check whether missing values exists\n", + "result.table_toe[rowSums(is.na(result.table_toe)) > 0,]" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 5001.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 11.006.00
2 100 5000.500.101 ( 0 )1.97 ( 0.13 )4.62 ( 0.08 )3.340.5511.974.62
3 500 5000.100.541 ( 0 )1.26 ( 0.12 )2.19 ( 0.08 )5.070.2211.262.19
41000 5000.050.731 ( 0 )0.86 ( 0.09 )1.12 ( 0.08 )5.740.1310.861.12
5 5010002.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 11.006.00
6 10010001.000.051 ( 0 )4.29 ( 0.17 )4.79 ( 0.09 )5.500.7714.294.79
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0 & 1.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t2 & 100 & 50 & 0 & 0.50 & 0.10 & 1 ( 0 ) & 1.97 ( 0.13 ) & 4.62 ( 0.08 ) & 3.34 & 0.55 & 1 & 1.97 & 4.62\\\\\n", + "\t3 & 500 & 50 & 0 & 0.10 & 0.54 & 1 ( 0 ) & 1.26 ( 0.12 ) & 2.19 ( 0.08 ) & 5.07 & 0.22 & 1 & 1.26 & 2.19\\\\\n", + "\t4 & 1000 & 50 & 0 & 0.05 & 0.73 & 1 ( 0 ) & 0.86 ( 0.09 ) & 1.12 ( 0.08 ) & 5.74 & 0.13 & 1 & 0.86 & 1.12\\\\\n", + "\t5 & 50 & 100 & 0 & 2.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t6 & 100 & 100 & 0 & 1.00 & 0.05 & 1 ( 0 ) & 4.29 ( 0.17 ) & 4.79 ( 0.09 ) & 5.50 & 0.77 & 1 & 4.29 & 4.79\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0 | 1.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 2 | 100 | 50 | 0 | 0.50 | 0.10 | 1 ( 0 ) | 1.97 ( 0.13 ) | 4.62 ( 0.08 ) | 3.34 | 0.55 | 1 | 1.97 | 4.62 |\n", + "| 3 | 500 | 50 | 0 | 0.10 | 0.54 | 1 ( 0 ) | 1.26 ( 0.12 ) | 2.19 ( 0.08 ) | 5.07 | 0.22 | 1 | 1.26 | 2.19 |\n", + "| 4 | 1000 | 50 | 0 | 0.05 | 0.73 | 1 ( 0 ) | 0.86 ( 0.09 ) | 1.12 ( 0.08 ) | 5.74 | 0.13 | 1 | 0.86 | 1.12 |\n", + "| 5 | 50 | 100 | 0 | 2.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 6 | 100 | 100 | 0 | 1.00 | 0.05 | 1 ( 0 ) | 4.29 ( 0.17 ) | 4.79 ( 0.09 ) | 5.50 | 0.77 | 1 | 4.29 | 4.79 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select FDR \n", + "1 50 50 0 1.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 NaN \n", + "2 100 50 0 0.50 0.10 1 ( 0 ) 1.97 ( 0.13 ) 4.62 ( 0.08 ) 3.34 0.55\n", + "3 500 50 0 0.10 0.54 1 ( 0 ) 1.26 ( 0.12 ) 2.19 ( 0.08 ) 5.07 0.22\n", + "4 1000 50 0 0.05 0.73 1 ( 0 ) 0.86 ( 0.09 ) 1.12 ( 0.08 ) 5.74 0.13\n", + "5 50 100 0 2.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 NaN \n", + "6 100 100 0 1.00 0.05 1 ( 0 ) 4.29 ( 0.17 ) 4.79 ( 0.09 ) 5.50 0.77\n", + " ROC_mean FP_mean FN_mean\n", + "1 1 1.00 6.00 \n", + "2 1 1.97 4.62 \n", + "3 1 1.26 2.19 \n", + "4 1 0.86 1.12 \n", + "5 1 1.00 6.00 \n", + "6 1 4.29 4.79 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
11 500 5000 1.00.091 ( 0 )23.08 ( 0.51 )2.34 ( 0.1 ) 26.740.86123.082.34
121000 5000 0.50.141 ( 0 )22.72 ( 0.46 )1.34 ( 0.08 )27.380.83122.721.34
13 501000020.0 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
14 1001000010.00.011 ( 0 )46.76 ( 0.67 )4.86 ( 0.09 )47.900.98146.764.86
15 50010000 2.00.041 ( 0 )47.82 ( 0.66 )2.5 ( 0.1 ) 51.320.93147.822.50
16100010000 1.00.071 ( 0 )47.14 ( 0.77 )1.46 ( 0.08 )51.680.91147.141.46
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t11 & 500 & 500 & 0 & 1.0 & 0.09 & 1 ( 0 ) & 23.08 ( 0.51 ) & 2.34 ( 0.1 ) & 26.74 & 0.86 & 1 & 23.08 & 2.34\\\\\n", + "\t12 & 1000 & 500 & 0 & 0.5 & 0.14 & 1 ( 0 ) & 22.72 ( 0.46 ) & 1.34 ( 0.08 ) & 27.38 & 0.83 & 1 & 22.72 & 1.34\\\\\n", + "\t13 & 50 & 1000 & 0 & 20.0 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t14 & 100 & 1000 & 0 & 10.0 & 0.01 & 1 ( 0 ) & 46.76 ( 0.67 ) & 4.86 ( 0.09 ) & 47.90 & 0.98 & 1 & 46.76 & 4.86\\\\\n", + "\t15 & 500 & 1000 & 0 & 2.0 & 0.04 & 1 ( 0 ) & 47.82 ( 0.66 ) & 2.5 ( 0.1 ) & 51.32 & 0.93 & 1 & 47.82 & 2.50\\\\\n", + "\t16 & 1000 & 1000 & 0 & 1.0 & 0.07 & 1 ( 0 ) & 47.14 ( 0.77 ) & 1.46 ( 0.08 ) & 51.68 & 0.91 & 1 & 47.14 & 1.46\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 11 | 500 | 500 | 0 | 1.0 | 0.09 | 1 ( 0 ) | 23.08 ( 0.51 ) | 2.34 ( 0.1 ) | 26.74 | 0.86 | 1 | 23.08 | 2.34 |\n", + "| 12 | 1000 | 500 | 0 | 0.5 | 0.14 | 1 ( 0 ) | 22.72 ( 0.46 ) | 1.34 ( 0.08 ) | 27.38 | 0.83 | 1 | 22.72 | 1.34 |\n", + "| 13 | 50 | 1000 | 0 | 20.0 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 14 | 100 | 1000 | 0 | 10.0 | 0.01 | 1 ( 0 ) | 46.76 ( 0.67 ) | 4.86 ( 0.09 ) | 47.90 | 0.98 | 1 | 46.76 | 4.86 |\n", + "| 15 | 500 | 1000 | 0 | 2.0 | 0.04 | 1 ( 0 ) | 47.82 ( 0.66 ) | 2.5 ( 0.1 ) | 51.32 | 0.93 | 1 | 47.82 | 2.50 |\n", + "| 16 | 1000 | 1000 | 0 | 1.0 | 0.07 | 1 ( 0 ) | 47.14 ( 0.77 ) | 1.46 ( 0.08 ) | 51.68 | 0.91 | 1 | 47.14 | 1.46 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select\n", + "11 500 500 0 1.0 0.09 1 ( 0 ) 23.08 ( 0.51 ) 2.34 ( 0.1 ) 26.74 \n", + "12 1000 500 0 0.5 0.14 1 ( 0 ) 22.72 ( 0.46 ) 1.34 ( 0.08 ) 27.38 \n", + "13 50 1000 0 20.0 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "14 100 1000 0 10.0 0.01 1 ( 0 ) 46.76 ( 0.67 ) 4.86 ( 0.09 ) 47.90 \n", + "15 500 1000 0 2.0 0.04 1 ( 0 ) 47.82 ( 0.66 ) 2.5 ( 0.1 ) 51.32 \n", + "16 1000 1000 0 1.0 0.07 1 ( 0 ) 47.14 ( 0.77 ) 1.46 ( 0.08 ) 51.68 \n", + " FDR ROC_mean FP_mean FN_mean\n", + "11 0.86 1 23.08 2.34 \n", + "12 0.83 1 22.72 1.34 \n", + "13 NaN 1 1.00 6.00 \n", + "14 0.98 1 46.76 4.86 \n", + "15 0.93 1 47.82 2.50 \n", + "16 0.91 1 47.14 1.46 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 16 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 500 1.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
2 100 500 0.500.101 ( 0 )1.97 ( 0.13 ) 4.62 ( 0.08 ) 3.340.551 1.974.62
3 500 500 0.100.541 ( 0 )1.26 ( 0.12 ) 2.19 ( 0.08 ) 5.070.221 1.262.19
41000 500 0.050.731 ( 0 )0.86 ( 0.09 ) 1.12 ( 0.08 ) 5.740.131 0.861.12
5 50 1000 2.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
6 100 1000 1.000.051 ( 0 )4.29 ( 0.17 ) 4.79 ( 0.09 ) 5.500.771 4.294.79
7 500 1000 0.200.401 ( 0 )3.42 ( 0.16 ) 2.01 ( 0.09 ) 7.410.441 3.422.01
81000 1000 0.100.491 ( 0 )3.39 ( 0.19 ) 1.14 ( 0.07 ) 8.250.381 3.391.14
9 50 500010.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
10 100 5000 5.000.011 ( 0 )24.68 ( 0.48 )4.5 ( 0.09 ) 26.180.94124.684.50
11 500 5000 1.000.091 ( 0 )23.08 ( 0.51 )2.34 ( 0.1 ) 26.740.86123.082.34
121000 5000 0.500.141 ( 0 )22.72 ( 0.46 )1.34 ( 0.08 )27.380.83122.721.34
13 501000020.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
14 1001000010.000.011 ( 0 )46.76 ( 0.67 )4.86 ( 0.09 )47.900.98146.764.86
15 50010000 2.000.041 ( 0 )47.82 ( 0.66 )2.5 ( 0.1 ) 51.320.93147.822.50
16100010000 1.000.071 ( 0 )47.14 ( 0.77 )1.46 ( 0.08 )51.680.91147.141.46
\n" + ], + "text/latex": [ + "A data.frame: 16 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0 & 1.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t2 & 100 & 50 & 0 & 0.50 & 0.10 & 1 ( 0 ) & 1.97 ( 0.13 ) & 4.62 ( 0.08 ) & 3.34 & 0.55 & 1 & 1.97 & 4.62\\\\\n", + "\t3 & 500 & 50 & 0 & 0.10 & 0.54 & 1 ( 0 ) & 1.26 ( 0.12 ) & 2.19 ( 0.08 ) & 5.07 & 0.22 & 1 & 1.26 & 2.19\\\\\n", + "\t4 & 1000 & 50 & 0 & 0.05 & 0.73 & 1 ( 0 ) & 0.86 ( 0.09 ) & 1.12 ( 0.08 ) & 5.74 & 0.13 & 1 & 0.86 & 1.12\\\\\n", + "\t5 & 50 & 100 & 0 & 2.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t6 & 100 & 100 & 0 & 1.00 & 0.05 & 1 ( 0 ) & 4.29 ( 0.17 ) & 4.79 ( 0.09 ) & 5.50 & 0.77 & 1 & 4.29 & 4.79\\\\\n", + "\t7 & 500 & 100 & 0 & 0.20 & 0.40 & 1 ( 0 ) & 3.42 ( 0.16 ) & 2.01 ( 0.09 ) & 7.41 & 0.44 & 1 & 3.42 & 2.01\\\\\n", + "\t8 & 1000 & 100 & 0 & 0.10 & 0.49 & 1 ( 0 ) & 3.39 ( 0.19 ) & 1.14 ( 0.07 ) & 8.25 & 0.38 & 1 & 3.39 & 1.14\\\\\n", + "\t9 & 50 & 500 & 0 & 10.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t10 & 100 & 500 & 0 & 5.00 & 0.01 & 1 ( 0 ) & 24.68 ( 0.48 ) & 4.5 ( 0.09 ) & 26.18 & 0.94 & 1 & 24.68 & 4.50\\\\\n", + "\t11 & 500 & 500 & 0 & 1.00 & 0.09 & 1 ( 0 ) & 23.08 ( 0.51 ) & 2.34 ( 0.1 ) & 26.74 & 0.86 & 1 & 23.08 & 2.34\\\\\n", + "\t12 & 1000 & 500 & 0 & 0.50 & 0.14 & 1 ( 0 ) & 22.72 ( 0.46 ) & 1.34 ( 0.08 ) & 27.38 & 0.83 & 1 & 22.72 & 1.34\\\\\n", + "\t13 & 50 & 1000 & 0 & 20.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t14 & 100 & 1000 & 0 & 10.00 & 0.01 & 1 ( 0 ) & 46.76 ( 0.67 ) & 4.86 ( 0.09 ) & 47.90 & 0.98 & 1 & 46.76 & 4.86\\\\\n", + "\t15 & 500 & 1000 & 0 & 2.00 & 0.04 & 1 ( 0 ) & 47.82 ( 0.66 ) & 2.5 ( 0.1 ) & 51.32 & 0.93 & 1 & 47.82 & 2.50\\\\\n", + "\t16 & 1000 & 1000 & 0 & 1.00 & 0.07 & 1 ( 0 ) & 47.14 ( 0.77 ) & 1.46 ( 0.08 ) & 51.68 & 0.91 & 1 & 47.14 & 1.46\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 16 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0 | 1.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 2 | 100 | 50 | 0 | 0.50 | 0.10 | 1 ( 0 ) | 1.97 ( 0.13 ) | 4.62 ( 0.08 ) | 3.34 | 0.55 | 1 | 1.97 | 4.62 |\n", + "| 3 | 500 | 50 | 0 | 0.10 | 0.54 | 1 ( 0 ) | 1.26 ( 0.12 ) | 2.19 ( 0.08 ) | 5.07 | 0.22 | 1 | 1.26 | 2.19 |\n", + "| 4 | 1000 | 50 | 0 | 0.05 | 0.73 | 1 ( 0 ) | 0.86 ( 0.09 ) | 1.12 ( 0.08 ) | 5.74 | 0.13 | 1 | 0.86 | 1.12 |\n", + "| 5 | 50 | 100 | 0 | 2.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 6 | 100 | 100 | 0 | 1.00 | 0.05 | 1 ( 0 ) | 4.29 ( 0.17 ) | 4.79 ( 0.09 ) | 5.50 | 0.77 | 1 | 4.29 | 4.79 |\n", + "| 7 | 500 | 100 | 0 | 0.20 | 0.40 | 1 ( 0 ) | 3.42 ( 0.16 ) | 2.01 ( 0.09 ) | 7.41 | 0.44 | 1 | 3.42 | 2.01 |\n", + "| 8 | 1000 | 100 | 0 | 0.10 | 0.49 | 1 ( 0 ) | 3.39 ( 0.19 ) | 1.14 ( 0.07 ) | 8.25 | 0.38 | 1 | 3.39 | 1.14 |\n", + "| 9 | 50 | 500 | 0 | 10.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 10 | 100 | 500 | 0 | 5.00 | 0.01 | 1 ( 0 ) | 24.68 ( 0.48 ) | 4.5 ( 0.09 ) | 26.18 | 0.94 | 1 | 24.68 | 4.50 |\n", + "| 11 | 500 | 500 | 0 | 1.00 | 0.09 | 1 ( 0 ) | 23.08 ( 0.51 ) | 2.34 ( 0.1 ) | 26.74 | 0.86 | 1 | 23.08 | 2.34 |\n", + "| 12 | 1000 | 500 | 0 | 0.50 | 0.14 | 1 ( 0 ) | 22.72 ( 0.46 ) | 1.34 ( 0.08 ) | 27.38 | 0.83 | 1 | 22.72 | 1.34 |\n", + "| 13 | 50 | 1000 | 0 | 20.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 14 | 100 | 1000 | 0 | 10.00 | 0.01 | 1 ( 0 ) | 46.76 ( 0.67 ) | 4.86 ( 0.09 ) | 47.90 | 0.98 | 1 | 46.76 | 4.86 |\n", + "| 15 | 500 | 1000 | 0 | 2.00 | 0.04 | 1 ( 0 ) | 47.82 ( 0.66 ) | 2.5 ( 0.1 ) | 51.32 | 0.93 | 1 | 47.82 | 2.50 |\n", + "| 16 | 1000 | 1000 | 0 | 1.00 | 0.07 | 1 ( 0 ) | 47.14 ( 0.77 ) | 1.46 ( 0.08 ) | 51.68 | 0.91 | 1 | 47.14 | 1.46 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select\n", + "1 50 50 0 1.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "2 100 50 0 0.50 0.10 1 ( 0 ) 1.97 ( 0.13 ) 4.62 ( 0.08 ) 3.34 \n", + "3 500 50 0 0.10 0.54 1 ( 0 ) 1.26 ( 0.12 ) 2.19 ( 0.08 ) 5.07 \n", + "4 1000 50 0 0.05 0.73 1 ( 0 ) 0.86 ( 0.09 ) 1.12 ( 0.08 ) 5.74 \n", + "5 50 100 0 2.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "6 100 100 0 1.00 0.05 1 ( 0 ) 4.29 ( 0.17 ) 4.79 ( 0.09 ) 5.50 \n", + "7 500 100 0 0.20 0.40 1 ( 0 ) 3.42 ( 0.16 ) 2.01 ( 0.09 ) 7.41 \n", + "8 1000 100 0 0.10 0.49 1 ( 0 ) 3.39 ( 0.19 ) 1.14 ( 0.07 ) 8.25 \n", + "9 50 500 0 10.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "10 100 500 0 5.00 0.01 1 ( 0 ) 24.68 ( 0.48 ) 4.5 ( 0.09 ) 26.18 \n", + "11 500 500 0 1.00 0.09 1 ( 0 ) 23.08 ( 0.51 ) 2.34 ( 0.1 ) 26.74 \n", + "12 1000 500 0 0.50 0.14 1 ( 0 ) 22.72 ( 0.46 ) 1.34 ( 0.08 ) 27.38 \n", + "13 50 1000 0 20.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "14 100 1000 0 10.00 0.01 1 ( 0 ) 46.76 ( 0.67 ) 4.86 ( 0.09 ) 47.90 \n", + "15 500 1000 0 2.00 0.04 1 ( 0 ) 47.82 ( 0.66 ) 2.5 ( 0.1 ) 51.32 \n", + "16 1000 1000 0 1.00 0.07 1 ( 0 ) 47.14 ( 0.77 ) 1.46 ( 0.08 ) 51.68 \n", + " FDR ROC_mean FP_mean FN_mean\n", + "1 NaN 1 1.00 6.00 \n", + "2 0.55 1 1.97 4.62 \n", + "3 0.22 1 1.26 2.19 \n", + "4 0.13 1 0.86 1.12 \n", + "5 NaN 1 1.00 6.00 \n", + "6 0.77 1 4.29 4.79 \n", + "7 0.44 1 3.42 2.01 \n", + "8 0.38 1 3.39 1.14 \n", + "9 NaN 1 1.00 6.00 \n", + "10 0.94 1 24.68 4.50 \n", + "11 0.86 1 23.08 2.34 \n", + "12 0.83 1 22.72 1.34 \n", + "13 NaN 1 1.00 6.00 \n", + "14 0.98 1 46.76 4.86 \n", + "15 0.93 1 47.82 2.50 \n", + "16 0.91 1 47.14 1.46 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_toe\n", + "\n", + "## export\n", + "write.table(result.table_toe, '../results_summary_bin/sim_ind_RF_binary.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_bin/.ipynb_checkpoints/0.4_sim_ind_compLasso_binary_update-checkpoint.ipynb b/simulations/notebooks_sim_bin/.ipynb_checkpoints/0.4_sim_ind_compLasso_binary_update-checkpoint.ipynb new file mode 100644 index 0000000..e765396 --- /dev/null +++ b/simulations/notebooks_sim_bin/.ipynb_checkpoints/0.4_sim_ind_compLasso_binary_update-checkpoint.ipynb @@ -0,0 +1,677 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize compositional lasso results on Independent Simulation Scenarios for binary outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "files = NULL\n", + "for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_independent_', paste('P', p, 'N', n, sep='_'), '.RData'))\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "16" + ], + "text/latex": [ + "16" + ], + "text/markdown": [ + "16" + ], + "text/plain": [ + "[1] 16" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "length(files)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1] \"indx: 1\"\n", + "[1] \"indx: 2\"\n", + "[1] \"indx: 3\"\n", + "[1] \"indx: 4\"\n", + "[1] \"indx: 5\"\n", + "[1] \"indx: 6\"\n", + "[1] \"indx: 7\"\n", + "[1] \"indx: 8\"\n", + "[1] \"indx: 9\"\n", + "[1] \"indx: 10\"\n", + "[1] \"indx: 11\"\n", + "[1] \"indx: 12\"\n", + "[1] \"indx: 13\"\n", + "[1] \"indx: 14\"\n", + "[1] \"indx: 15\"\n", + "[1] \"indx: 16\"\n" + ] + } + ], + "source": [ + "avg_FDR = NULL\n", + "table_toe = NULL\n", + "tmp_num_select = rep(0, length(files))\n", + "for (i in 1:length(files)){\n", + " print(paste0('indx: ', i))\n", + " load(paste0(dir, '/binary_update/ind_GenCompLasso_binary_', i, '.RData')) \n", + " \n", + " table_toe = rbind(table_toe, results_ind_GenCompLasso[c('n', 'p', 'rou', 'FP', 'FN', 'ROC', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_ind_GenCompLasso$Stab.table))\n", + " \n", + " # calculate FDR\n", + " load(file_name, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_ind_GenCompLasso$Stab.table\n", + " FDR = NULL # false positive rate\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}\n", + "table_toe = as.data.frame(table_toe)\n", + "table_toe$num_select = tmp_num_select\n", + "table_toe$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
15050016.38 ( 0.96 )0.61 ( 0.06 )0.98 ( 0 )0.1321.770.71
21005007.94 ( 0.54 )0.34 ( 0.06 )0.93 ( 0 )0.3213.600.54
35005002.67 ( 0.6 )0.1 ( 0.03 )0.91 ( 0 )0.63 8.570.19
410005001.61 ( 0.48 )0.04 ( 0.02 )0.91 ( 0 )0.75 7.570.09
550100039.18 ( 2.14 )0.63 ( 0.07 )0.99 ( 0 )0.0644.550.85
6100100016.29 ( 1.16 )0.47 ( 0.06 )0.94 ( 0 )0.221.820.70
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0 & 16.38 ( 0.96 ) & 0.61 ( 0.06 ) & 0.98 ( 0 ) & 0.13 & 21.77 & 0.71\\\\\n", + "\t2 & 100 & 50 & 0 & 7.94 ( 0.54 ) & 0.34 ( 0.06 ) & 0.93 ( 0 ) & 0.32 & 13.60 & 0.54\\\\\n", + "\t3 & 500 & 50 & 0 & 2.67 ( 0.6 ) & 0.1 ( 0.03 ) & 0.91 ( 0 ) & 0.63 & 8.57 & 0.19\\\\\n", + "\t4 & 1000 & 50 & 0 & 1.61 ( 0.48 ) & 0.04 ( 0.02 ) & 0.91 ( 0 ) & 0.75 & 7.57 & 0.09\\\\\n", + "\t5 & 50 & 100 & 0 & 39.18 ( 2.14 ) & 0.63 ( 0.07 ) & 0.99 ( 0 ) & 0.06 & 44.55 & 0.85\\\\\n", + "\t6 & 100 & 100 & 0 & 16.29 ( 1.16 ) & 0.47 ( 0.06 ) & 0.94 ( 0 ) & 0.2 & 21.82 & 0.70\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0 | 16.38 ( 0.96 ) | 0.61 ( 0.06 ) | 0.98 ( 0 ) | 0.13 | 21.77 | 0.71 |\n", + "| 2 | 100 | 50 | 0 | 7.94 ( 0.54 ) | 0.34 ( 0.06 ) | 0.93 ( 0 ) | 0.32 | 13.60 | 0.54 |\n", + "| 3 | 500 | 50 | 0 | 2.67 ( 0.6 ) | 0.1 ( 0.03 ) | 0.91 ( 0 ) | 0.63 | 8.57 | 0.19 |\n", + "| 4 | 1000 | 50 | 0 | 1.61 ( 0.48 ) | 0.04 ( 0.02 ) | 0.91 ( 0 ) | 0.75 | 7.57 | 0.09 |\n", + "| 5 | 50 | 100 | 0 | 39.18 ( 2.14 ) | 0.63 ( 0.07 ) | 0.99 ( 0 ) | 0.06 | 44.55 | 0.85 |\n", + "| 6 | 100 | 100 | 0 | 16.29 ( 1.16 ) | 0.47 ( 0.06 ) | 0.94 ( 0 ) | 0.2 | 21.82 | 0.70 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select FDR \n", + "1 50 50 0 16.38 ( 0.96 ) 0.61 ( 0.06 ) 0.98 ( 0 ) 0.13 21.77 0.71\n", + "2 100 50 0 7.94 ( 0.54 ) 0.34 ( 0.06 ) 0.93 ( 0 ) 0.32 13.60 0.54\n", + "3 500 50 0 2.67 ( 0.6 ) 0.1 ( 0.03 ) 0.91 ( 0 ) 0.63 8.57 0.19\n", + "4 1000 50 0 1.61 ( 0.48 ) 0.04 ( 0.02 ) 0.91 ( 0 ) 0.75 7.57 0.09\n", + "5 50 100 0 39.18 ( 2.14 ) 0.63 ( 0.07 ) 0.99 ( 0 ) 0.06 44.55 0.85\n", + "6 100 100 0 16.29 ( 1.16 ) 0.47 ( 0.06 ) 0.94 ( 0 ) 0.2 21.82 0.70" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
1150050008.32 ( 1.15 )0.1 ( 0.03 )0.91 ( 0 )0.43 14.220.41
12100050004.63 ( 1.57 )0 ( 0 )0.91 ( 0 )0.6 10.630.21
135010000406.32 ( 7.33 )0.73 ( 0.07 )1 ( 0 )0.01411.590.99
1410010000283.24 ( 7.31 )0.49 ( 0.06 )1 ( 0 )0.02288.750.98
15500100009.4 ( 1.07 )0.07 ( 0.03 )0.91 ( 0 )0.4 15.330.47
161000100001.91 ( 0.29 )0.01 ( 0.01 )0.91 ( 0 )0.82 7.900.18
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t11 & 500 & 500 & 0 & 8.32 ( 1.15 ) & 0.1 ( 0.03 ) & 0.91 ( 0 ) & 0.43 & 14.22 & 0.41\\\\\n", + "\t12 & 1000 & 500 & 0 & 4.63 ( 1.57 ) & 0 ( 0 ) & 0.91 ( 0 ) & 0.6 & 10.63 & 0.21\\\\\n", + "\t13 & 50 & 1000 & 0 & 406.32 ( 7.33 ) & 0.73 ( 0.07 ) & 1 ( 0 ) & 0.01 & 411.59 & 0.99\\\\\n", + "\t14 & 100 & 1000 & 0 & 283.24 ( 7.31 ) & 0.49 ( 0.06 ) & 1 ( 0 ) & 0.02 & 288.75 & 0.98\\\\\n", + "\t15 & 500 & 1000 & 0 & 9.4 ( 1.07 ) & 0.07 ( 0.03 ) & 0.91 ( 0 ) & 0.4 & 15.33 & 0.47\\\\\n", + "\t16 & 1000 & 1000 & 0 & 1.91 ( 0.29 ) & 0.01 ( 0.01 ) & 0.91 ( 0 ) & 0.82 & 7.90 & 0.18\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 11 | 500 | 500 | 0 | 8.32 ( 1.15 ) | 0.1 ( 0.03 ) | 0.91 ( 0 ) | 0.43 | 14.22 | 0.41 |\n", + "| 12 | 1000 | 500 | 0 | 4.63 ( 1.57 ) | 0 ( 0 ) | 0.91 ( 0 ) | 0.6 | 10.63 | 0.21 |\n", + "| 13 | 50 | 1000 | 0 | 406.32 ( 7.33 ) | 0.73 ( 0.07 ) | 1 ( 0 ) | 0.01 | 411.59 | 0.99 |\n", + "| 14 | 100 | 1000 | 0 | 283.24 ( 7.31 ) | 0.49 ( 0.06 ) | 1 ( 0 ) | 0.02 | 288.75 | 0.98 |\n", + "| 15 | 500 | 1000 | 0 | 9.4 ( 1.07 ) | 0.07 ( 0.03 ) | 0.91 ( 0 ) | 0.4 | 15.33 | 0.47 |\n", + "| 16 | 1000 | 1000 | 0 | 1.91 ( 0.29 ) | 0.01 ( 0.01 ) | 0.91 ( 0 ) | 0.82 | 7.90 | 0.18 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select FDR \n", + "11 500 500 0 8.32 ( 1.15 ) 0.1 ( 0.03 ) 0.91 ( 0 ) 0.43 14.22 0.41\n", + "12 1000 500 0 4.63 ( 1.57 ) 0 ( 0 ) 0.91 ( 0 ) 0.6 10.63 0.21\n", + "13 50 1000 0 406.32 ( 7.33 ) 0.73 ( 0.07 ) 1 ( 0 ) 0.01 411.59 0.99\n", + "14 100 1000 0 283.24 ( 7.31 ) 0.49 ( 0.06 ) 1 ( 0 ) 0.02 288.75 0.98\n", + "15 500 1000 0 9.4 ( 1.07 ) 0.07 ( 0.03 ) 0.91 ( 0 ) 0.4 15.33 0.47\n", + "16 1000 1000 0 1.91 ( 0.29 ) 0.01 ( 0.01 ) 0.91 ( 0 ) 0.82 7.90 0.18" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_toe <- apply(table_toe,2,as.character)\n", + "rownames(result.table_toe) = rownames(table_toe)\n", + "result.table_toe = as.data.frame(result.table_toe)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_toe$n = tidyr::extract_numeric(result.table_toe$n)\n", + "result.table_toe$p = tidyr::extract_numeric(result.table_toe$p)\n", + "result.table_toe$ratio = result.table_toe$p / result.table_toe$n\n", + "\n", + "result.table_toe = result.table_toe[c('n', 'p', 'rou', 'ratio', 'Stab', 'ROC', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_toe)[1:4] = c('N', 'P', 'Corr', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_toe$Stab = as.numeric(as.character(result.table_toe$Stab))\n", + "# result.table_toe$ROC_mean = as.numeric(substr(result.table_toe$ROC, start=1, stop=4))\n", + "# result.table_toe$FP_mean = as.numeric(substr(result.table_toe$FP, start=1, stop=4))\n", + "# result.table_toe$FN_mean = as.numeric(substr(result.table_toe$FN, start=1, stop=4))\n", + "# result.table_toe$FN_mean[is.na(result.table_toe$FN_mean)] = 0\n", + "result.table_toe$num_select = as.numeric(as.character(result.table_toe$num_select))\n", + "\n", + "result.table_toe$ROC_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$ROC))\n", + "result.table_toe$FP_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$FP))\n", + "result.table_toe$FN_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$FN))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "
A data.frame: 0 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
\n" + ], + "text/latex": [ + "A data.frame: 0 × 13\n", + "\\begin{tabular}{lllllllllllll}\n", + " N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 0 × 13\n", + "\n", + "| N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select FDR ROC_mean FP_mean FN_mean" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check whether missing values exists\n", + "result.table_toe[rowSums(is.na(result.table_toe)) > 0,]" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 5001.000.130.98 ( 0 )16.38 ( 0.96 )0.61 ( 0.06 )21.770.710.9816.380.61
2 100 5000.500.320.93 ( 0 )7.94 ( 0.54 ) 0.34 ( 0.06 )13.600.540.93 7.940.34
3 500 5000.100.630.91 ( 0 )2.67 ( 0.6 ) 0.1 ( 0.03 ) 8.570.190.91 2.670.10
41000 5000.050.750.91 ( 0 )1.61 ( 0.48 ) 0.04 ( 0.02 ) 7.570.090.91 1.610.04
5 5010002.000.060.99 ( 0 )39.18 ( 2.14 )0.63 ( 0.07 )44.550.850.9939.180.63
6 10010001.000.200.94 ( 0 )16.29 ( 1.16 )0.47 ( 0.06 )21.820.7 0.9416.290.47
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0 & 1.00 & 0.13 & 0.98 ( 0 ) & 16.38 ( 0.96 ) & 0.61 ( 0.06 ) & 21.77 & 0.71 & 0.98 & 16.38 & 0.61\\\\\n", + "\t2 & 100 & 50 & 0 & 0.50 & 0.32 & 0.93 ( 0 ) & 7.94 ( 0.54 ) & 0.34 ( 0.06 ) & 13.60 & 0.54 & 0.93 & 7.94 & 0.34\\\\\n", + "\t3 & 500 & 50 & 0 & 0.10 & 0.63 & 0.91 ( 0 ) & 2.67 ( 0.6 ) & 0.1 ( 0.03 ) & 8.57 & 0.19 & 0.91 & 2.67 & 0.10\\\\\n", + "\t4 & 1000 & 50 & 0 & 0.05 & 0.75 & 0.91 ( 0 ) & 1.61 ( 0.48 ) & 0.04 ( 0.02 ) & 7.57 & 0.09 & 0.91 & 1.61 & 0.04\\\\\n", + "\t5 & 50 & 100 & 0 & 2.00 & 0.06 & 0.99 ( 0 ) & 39.18 ( 2.14 ) & 0.63 ( 0.07 ) & 44.55 & 0.85 & 0.99 & 39.18 & 0.63\\\\\n", + "\t6 & 100 & 100 & 0 & 1.00 & 0.20 & 0.94 ( 0 ) & 16.29 ( 1.16 ) & 0.47 ( 0.06 ) & 21.82 & 0.7 & 0.94 & 16.29 & 0.47\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0 | 1.00 | 0.13 | 0.98 ( 0 ) | 16.38 ( 0.96 ) | 0.61 ( 0.06 ) | 21.77 | 0.71 | 0.98 | 16.38 | 0.61 |\n", + "| 2 | 100 | 50 | 0 | 0.50 | 0.32 | 0.93 ( 0 ) | 7.94 ( 0.54 ) | 0.34 ( 0.06 ) | 13.60 | 0.54 | 0.93 | 7.94 | 0.34 |\n", + "| 3 | 500 | 50 | 0 | 0.10 | 0.63 | 0.91 ( 0 ) | 2.67 ( 0.6 ) | 0.1 ( 0.03 ) | 8.57 | 0.19 | 0.91 | 2.67 | 0.10 |\n", + "| 4 | 1000 | 50 | 0 | 0.05 | 0.75 | 0.91 ( 0 ) | 1.61 ( 0.48 ) | 0.04 ( 0.02 ) | 7.57 | 0.09 | 0.91 | 1.61 | 0.04 |\n", + "| 5 | 50 | 100 | 0 | 2.00 | 0.06 | 0.99 ( 0 ) | 39.18 ( 2.14 ) | 0.63 ( 0.07 ) | 44.55 | 0.85 | 0.99 | 39.18 | 0.63 |\n", + "| 6 | 100 | 100 | 0 | 1.00 | 0.20 | 0.94 ( 0 ) | 16.29 ( 1.16 ) | 0.47 ( 0.06 ) | 21.82 | 0.7 | 0.94 | 16.29 | 0.47 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select\n", + "1 50 50 0 1.00 0.13 0.98 ( 0 ) 16.38 ( 0.96 ) 0.61 ( 0.06 ) 21.77 \n", + "2 100 50 0 0.50 0.32 0.93 ( 0 ) 7.94 ( 0.54 ) 0.34 ( 0.06 ) 13.60 \n", + "3 500 50 0 0.10 0.63 0.91 ( 0 ) 2.67 ( 0.6 ) 0.1 ( 0.03 ) 8.57 \n", + "4 1000 50 0 0.05 0.75 0.91 ( 0 ) 1.61 ( 0.48 ) 0.04 ( 0.02 ) 7.57 \n", + "5 50 100 0 2.00 0.06 0.99 ( 0 ) 39.18 ( 2.14 ) 0.63 ( 0.07 ) 44.55 \n", + "6 100 100 0 1.00 0.20 0.94 ( 0 ) 16.29 ( 1.16 ) 0.47 ( 0.06 ) 21.82 \n", + " FDR ROC_mean FP_mean FN_mean\n", + "1 0.71 0.98 16.38 0.61 \n", + "2 0.54 0.93 7.94 0.34 \n", + "3 0.19 0.91 2.67 0.10 \n", + "4 0.09 0.91 1.61 0.04 \n", + "5 0.85 0.99 39.18 0.63 \n", + "6 0.7 0.94 16.29 0.47 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
11 500 5000 1.00.430.91 ( 0 )8.32 ( 1.15 ) 0.1 ( 0.03 ) 14.220.410.91 8.320.10
121000 5000 0.50.600.91 ( 0 )4.63 ( 1.57 ) 0 ( 0 ) 10.630.210.91 4.630.00
13 501000020.00.011 ( 0 ) 406.32 ( 7.33 )0.73 ( 0.07 )411.590.991.00406.320.73
14 1001000010.00.021 ( 0 ) 283.24 ( 7.31 )0.49 ( 0.06 )288.750.981.00283.240.49
15 50010000 2.00.400.91 ( 0 )9.4 ( 1.07 ) 0.07 ( 0.03 ) 15.330.470.91 9.400.07
16100010000 1.00.820.91 ( 0 )1.91 ( 0.29 ) 0.01 ( 0.01 ) 7.900.180.91 1.910.01
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t11 & 500 & 500 & 0 & 1.0 & 0.43 & 0.91 ( 0 ) & 8.32 ( 1.15 ) & 0.1 ( 0.03 ) & 14.22 & 0.41 & 0.91 & 8.32 & 0.10\\\\\n", + "\t12 & 1000 & 500 & 0 & 0.5 & 0.60 & 0.91 ( 0 ) & 4.63 ( 1.57 ) & 0 ( 0 ) & 10.63 & 0.21 & 0.91 & 4.63 & 0.00\\\\\n", + "\t13 & 50 & 1000 & 0 & 20.0 & 0.01 & 1 ( 0 ) & 406.32 ( 7.33 ) & 0.73 ( 0.07 ) & 411.59 & 0.99 & 1.00 & 406.32 & 0.73\\\\\n", + "\t14 & 100 & 1000 & 0 & 10.0 & 0.02 & 1 ( 0 ) & 283.24 ( 7.31 ) & 0.49 ( 0.06 ) & 288.75 & 0.98 & 1.00 & 283.24 & 0.49\\\\\n", + "\t15 & 500 & 1000 & 0 & 2.0 & 0.40 & 0.91 ( 0 ) & 9.4 ( 1.07 ) & 0.07 ( 0.03 ) & 15.33 & 0.47 & 0.91 & 9.40 & 0.07\\\\\n", + "\t16 & 1000 & 1000 & 0 & 1.0 & 0.82 & 0.91 ( 0 ) & 1.91 ( 0.29 ) & 0.01 ( 0.01 ) & 7.90 & 0.18 & 0.91 & 1.91 & 0.01\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 11 | 500 | 500 | 0 | 1.0 | 0.43 | 0.91 ( 0 ) | 8.32 ( 1.15 ) | 0.1 ( 0.03 ) | 14.22 | 0.41 | 0.91 | 8.32 | 0.10 |\n", + "| 12 | 1000 | 500 | 0 | 0.5 | 0.60 | 0.91 ( 0 ) | 4.63 ( 1.57 ) | 0 ( 0 ) | 10.63 | 0.21 | 0.91 | 4.63 | 0.00 |\n", + "| 13 | 50 | 1000 | 0 | 20.0 | 0.01 | 1 ( 0 ) | 406.32 ( 7.33 ) | 0.73 ( 0.07 ) | 411.59 | 0.99 | 1.00 | 406.32 | 0.73 |\n", + "| 14 | 100 | 1000 | 0 | 10.0 | 0.02 | 1 ( 0 ) | 283.24 ( 7.31 ) | 0.49 ( 0.06 ) | 288.75 | 0.98 | 1.00 | 283.24 | 0.49 |\n", + "| 15 | 500 | 1000 | 0 | 2.0 | 0.40 | 0.91 ( 0 ) | 9.4 ( 1.07 ) | 0.07 ( 0.03 ) | 15.33 | 0.47 | 0.91 | 9.40 | 0.07 |\n", + "| 16 | 1000 | 1000 | 0 | 1.0 | 0.82 | 0.91 ( 0 ) | 1.91 ( 0.29 ) | 0.01 ( 0.01 ) | 7.90 | 0.18 | 0.91 | 1.91 | 0.01 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "11 500 500 0 1.0 0.43 0.91 ( 0 ) 8.32 ( 1.15 ) 0.1 ( 0.03 ) \n", + "12 1000 500 0 0.5 0.60 0.91 ( 0 ) 4.63 ( 1.57 ) 0 ( 0 ) \n", + "13 50 1000 0 20.0 0.01 1 ( 0 ) 406.32 ( 7.33 ) 0.73 ( 0.07 )\n", + "14 100 1000 0 10.0 0.02 1 ( 0 ) 283.24 ( 7.31 ) 0.49 ( 0.06 )\n", + "15 500 1000 0 2.0 0.40 0.91 ( 0 ) 9.4 ( 1.07 ) 0.07 ( 0.03 )\n", + "16 1000 1000 0 1.0 0.82 0.91 ( 0 ) 1.91 ( 0.29 ) 0.01 ( 0.01 )\n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "11 14.22 0.41 0.91 8.32 0.10 \n", + "12 10.63 0.21 0.91 4.63 0.00 \n", + "13 411.59 0.99 1.00 406.32 0.73 \n", + "14 288.75 0.98 1.00 283.24 0.49 \n", + "15 15.33 0.47 0.91 9.40 0.07 \n", + "16 7.90 0.18 0.91 1.91 0.01 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 16 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 500 1.000.130.98 ( 0 )16.38 ( 0.96 ) 0.61 ( 0.06 ) 21.770.710.98 16.380.61
2 100 500 0.500.320.93 ( 0 )7.94 ( 0.54 ) 0.34 ( 0.06 ) 13.600.540.93 7.940.34
3 500 500 0.100.630.91 ( 0 )2.67 ( 0.6 ) 0.1 ( 0.03 ) 8.570.190.91 2.670.10
41000 500 0.050.750.91 ( 0 )1.61 ( 0.48 ) 0.04 ( 0.02 ) 7.570.090.91 1.610.04
5 50 1000 2.000.060.99 ( 0 )39.18 ( 2.14 ) 0.63 ( 0.07 ) 44.550.850.99 39.180.63
6 100 1000 1.000.200.94 ( 0 )16.29 ( 1.16 ) 0.47 ( 0.06 ) 21.820.7 0.94 16.290.47
7 500 1000 0.200.470.91 ( 0 )5.63 ( 0.84 ) 0.13 ( 0.03 ) 11.500.3 0.91 5.630.13
81000 1000 0.100.430.91 ( 0 )6.87 ( 1.8 ) 0 ( 0 ) 12.870.170.91 6.870.00
9 50 500010.000.011 ( 0 ) 251.02 ( 6.8 ) 0.36 ( 0.06 )256.660.981.00251.020.36
10 100 5000 5.000.031 ( 0 ) 134.32 ( 6.63 )0.33 ( 0.05 )139.990.951.00134.320.33
11 500 5000 1.000.430.91 ( 0 )8.32 ( 1.15 ) 0.1 ( 0.03 ) 14.220.410.91 8.320.10
121000 5000 0.500.600.91 ( 0 )4.63 ( 1.57 ) 0 ( 0 ) 10.630.210.91 4.630.00
13 501000020.000.011 ( 0 ) 406.32 ( 7.33 )0.73 ( 0.07 )411.590.991.00406.320.73
14 1001000010.000.021 ( 0 ) 283.24 ( 7.31 )0.49 ( 0.06 )288.750.981.00283.240.49
15 50010000 2.000.400.91 ( 0 )9.4 ( 1.07 ) 0.07 ( 0.03 ) 15.330.470.91 9.400.07
16100010000 1.000.820.91 ( 0 )1.91 ( 0.29 ) 0.01 ( 0.01 ) 7.900.180.91 1.910.01
\n" + ], + "text/latex": [ + "A data.frame: 16 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0 & 1.00 & 0.13 & 0.98 ( 0 ) & 16.38 ( 0.96 ) & 0.61 ( 0.06 ) & 21.77 & 0.71 & 0.98 & 16.38 & 0.61\\\\\n", + "\t2 & 100 & 50 & 0 & 0.50 & 0.32 & 0.93 ( 0 ) & 7.94 ( 0.54 ) & 0.34 ( 0.06 ) & 13.60 & 0.54 & 0.93 & 7.94 & 0.34\\\\\n", + "\t3 & 500 & 50 & 0 & 0.10 & 0.63 & 0.91 ( 0 ) & 2.67 ( 0.6 ) & 0.1 ( 0.03 ) & 8.57 & 0.19 & 0.91 & 2.67 & 0.10\\\\\n", + "\t4 & 1000 & 50 & 0 & 0.05 & 0.75 & 0.91 ( 0 ) & 1.61 ( 0.48 ) & 0.04 ( 0.02 ) & 7.57 & 0.09 & 0.91 & 1.61 & 0.04\\\\\n", + "\t5 & 50 & 100 & 0 & 2.00 & 0.06 & 0.99 ( 0 ) & 39.18 ( 2.14 ) & 0.63 ( 0.07 ) & 44.55 & 0.85 & 0.99 & 39.18 & 0.63\\\\\n", + "\t6 & 100 & 100 & 0 & 1.00 & 0.20 & 0.94 ( 0 ) & 16.29 ( 1.16 ) & 0.47 ( 0.06 ) & 21.82 & 0.7 & 0.94 & 16.29 & 0.47\\\\\n", + "\t7 & 500 & 100 & 0 & 0.20 & 0.47 & 0.91 ( 0 ) & 5.63 ( 0.84 ) & 0.13 ( 0.03 ) & 11.50 & 0.3 & 0.91 & 5.63 & 0.13\\\\\n", + "\t8 & 1000 & 100 & 0 & 0.10 & 0.43 & 0.91 ( 0 ) & 6.87 ( 1.8 ) & 0 ( 0 ) & 12.87 & 0.17 & 0.91 & 6.87 & 0.00\\\\\n", + "\t9 & 50 & 500 & 0 & 10.00 & 0.01 & 1 ( 0 ) & 251.02 ( 6.8 ) & 0.36 ( 0.06 ) & 256.66 & 0.98 & 1.00 & 251.02 & 0.36\\\\\n", + "\t10 & 100 & 500 & 0 & 5.00 & 0.03 & 1 ( 0 ) & 134.32 ( 6.63 ) & 0.33 ( 0.05 ) & 139.99 & 0.95 & 1.00 & 134.32 & 0.33\\\\\n", + "\t11 & 500 & 500 & 0 & 1.00 & 0.43 & 0.91 ( 0 ) & 8.32 ( 1.15 ) & 0.1 ( 0.03 ) & 14.22 & 0.41 & 0.91 & 8.32 & 0.10\\\\\n", + "\t12 & 1000 & 500 & 0 & 0.50 & 0.60 & 0.91 ( 0 ) & 4.63 ( 1.57 ) & 0 ( 0 ) & 10.63 & 0.21 & 0.91 & 4.63 & 0.00\\\\\n", + "\t13 & 50 & 1000 & 0 & 20.00 & 0.01 & 1 ( 0 ) & 406.32 ( 7.33 ) & 0.73 ( 0.07 ) & 411.59 & 0.99 & 1.00 & 406.32 & 0.73\\\\\n", + "\t14 & 100 & 1000 & 0 & 10.00 & 0.02 & 1 ( 0 ) & 283.24 ( 7.31 ) & 0.49 ( 0.06 ) & 288.75 & 0.98 & 1.00 & 283.24 & 0.49\\\\\n", + "\t15 & 500 & 1000 & 0 & 2.00 & 0.40 & 0.91 ( 0 ) & 9.4 ( 1.07 ) & 0.07 ( 0.03 ) & 15.33 & 0.47 & 0.91 & 9.40 & 0.07\\\\\n", + "\t16 & 1000 & 1000 & 0 & 1.00 & 0.82 & 0.91 ( 0 ) & 1.91 ( 0.29 ) & 0.01 ( 0.01 ) & 7.90 & 0.18 & 0.91 & 1.91 & 0.01\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 16 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0 | 1.00 | 0.13 | 0.98 ( 0 ) | 16.38 ( 0.96 ) | 0.61 ( 0.06 ) | 21.77 | 0.71 | 0.98 | 16.38 | 0.61 |\n", + "| 2 | 100 | 50 | 0 | 0.50 | 0.32 | 0.93 ( 0 ) | 7.94 ( 0.54 ) | 0.34 ( 0.06 ) | 13.60 | 0.54 | 0.93 | 7.94 | 0.34 |\n", + "| 3 | 500 | 50 | 0 | 0.10 | 0.63 | 0.91 ( 0 ) | 2.67 ( 0.6 ) | 0.1 ( 0.03 ) | 8.57 | 0.19 | 0.91 | 2.67 | 0.10 |\n", + "| 4 | 1000 | 50 | 0 | 0.05 | 0.75 | 0.91 ( 0 ) | 1.61 ( 0.48 ) | 0.04 ( 0.02 ) | 7.57 | 0.09 | 0.91 | 1.61 | 0.04 |\n", + "| 5 | 50 | 100 | 0 | 2.00 | 0.06 | 0.99 ( 0 ) | 39.18 ( 2.14 ) | 0.63 ( 0.07 ) | 44.55 | 0.85 | 0.99 | 39.18 | 0.63 |\n", + "| 6 | 100 | 100 | 0 | 1.00 | 0.20 | 0.94 ( 0 ) | 16.29 ( 1.16 ) | 0.47 ( 0.06 ) | 21.82 | 0.7 | 0.94 | 16.29 | 0.47 |\n", + "| 7 | 500 | 100 | 0 | 0.20 | 0.47 | 0.91 ( 0 ) | 5.63 ( 0.84 ) | 0.13 ( 0.03 ) | 11.50 | 0.3 | 0.91 | 5.63 | 0.13 |\n", + "| 8 | 1000 | 100 | 0 | 0.10 | 0.43 | 0.91 ( 0 ) | 6.87 ( 1.8 ) | 0 ( 0 ) | 12.87 | 0.17 | 0.91 | 6.87 | 0.00 |\n", + "| 9 | 50 | 500 | 0 | 10.00 | 0.01 | 1 ( 0 ) | 251.02 ( 6.8 ) | 0.36 ( 0.06 ) | 256.66 | 0.98 | 1.00 | 251.02 | 0.36 |\n", + "| 10 | 100 | 500 | 0 | 5.00 | 0.03 | 1 ( 0 ) | 134.32 ( 6.63 ) | 0.33 ( 0.05 ) | 139.99 | 0.95 | 1.00 | 134.32 | 0.33 |\n", + "| 11 | 500 | 500 | 0 | 1.00 | 0.43 | 0.91 ( 0 ) | 8.32 ( 1.15 ) | 0.1 ( 0.03 ) | 14.22 | 0.41 | 0.91 | 8.32 | 0.10 |\n", + "| 12 | 1000 | 500 | 0 | 0.50 | 0.60 | 0.91 ( 0 ) | 4.63 ( 1.57 ) | 0 ( 0 ) | 10.63 | 0.21 | 0.91 | 4.63 | 0.00 |\n", + "| 13 | 50 | 1000 | 0 | 20.00 | 0.01 | 1 ( 0 ) | 406.32 ( 7.33 ) | 0.73 ( 0.07 ) | 411.59 | 0.99 | 1.00 | 406.32 | 0.73 |\n", + "| 14 | 100 | 1000 | 0 | 10.00 | 0.02 | 1 ( 0 ) | 283.24 ( 7.31 ) | 0.49 ( 0.06 ) | 288.75 | 0.98 | 1.00 | 283.24 | 0.49 |\n", + "| 15 | 500 | 1000 | 0 | 2.00 | 0.40 | 0.91 ( 0 ) | 9.4 ( 1.07 ) | 0.07 ( 0.03 ) | 15.33 | 0.47 | 0.91 | 9.40 | 0.07 |\n", + "| 16 | 1000 | 1000 | 0 | 1.00 | 0.82 | 0.91 ( 0 ) | 1.91 ( 0.29 ) | 0.01 ( 0.01 ) | 7.90 | 0.18 | 0.91 | 1.91 | 0.01 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "1 50 50 0 1.00 0.13 0.98 ( 0 ) 16.38 ( 0.96 ) 0.61 ( 0.06 )\n", + "2 100 50 0 0.50 0.32 0.93 ( 0 ) 7.94 ( 0.54 ) 0.34 ( 0.06 )\n", + "3 500 50 0 0.10 0.63 0.91 ( 0 ) 2.67 ( 0.6 ) 0.1 ( 0.03 ) \n", + "4 1000 50 0 0.05 0.75 0.91 ( 0 ) 1.61 ( 0.48 ) 0.04 ( 0.02 )\n", + "5 50 100 0 2.00 0.06 0.99 ( 0 ) 39.18 ( 2.14 ) 0.63 ( 0.07 )\n", + "6 100 100 0 1.00 0.20 0.94 ( 0 ) 16.29 ( 1.16 ) 0.47 ( 0.06 )\n", + "7 500 100 0 0.20 0.47 0.91 ( 0 ) 5.63 ( 0.84 ) 0.13 ( 0.03 )\n", + "8 1000 100 0 0.10 0.43 0.91 ( 0 ) 6.87 ( 1.8 ) 0 ( 0 ) \n", + "9 50 500 0 10.00 0.01 1 ( 0 ) 251.02 ( 6.8 ) 0.36 ( 0.06 )\n", + "10 100 500 0 5.00 0.03 1 ( 0 ) 134.32 ( 6.63 ) 0.33 ( 0.05 )\n", + "11 500 500 0 1.00 0.43 0.91 ( 0 ) 8.32 ( 1.15 ) 0.1 ( 0.03 ) \n", + "12 1000 500 0 0.50 0.60 0.91 ( 0 ) 4.63 ( 1.57 ) 0 ( 0 ) \n", + "13 50 1000 0 20.00 0.01 1 ( 0 ) 406.32 ( 7.33 ) 0.73 ( 0.07 )\n", + "14 100 1000 0 10.00 0.02 1 ( 0 ) 283.24 ( 7.31 ) 0.49 ( 0.06 )\n", + "15 500 1000 0 2.00 0.40 0.91 ( 0 ) 9.4 ( 1.07 ) 0.07 ( 0.03 )\n", + "16 1000 1000 0 1.00 0.82 0.91 ( 0 ) 1.91 ( 0.29 ) 0.01 ( 0.01 )\n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "1 21.77 0.71 0.98 16.38 0.61 \n", + "2 13.60 0.54 0.93 7.94 0.34 \n", + "3 8.57 0.19 0.91 2.67 0.10 \n", + "4 7.57 0.09 0.91 1.61 0.04 \n", + "5 44.55 0.85 0.99 39.18 0.63 \n", + "6 21.82 0.7 0.94 16.29 0.47 \n", + "7 11.50 0.3 0.91 5.63 0.13 \n", + "8 12.87 0.17 0.91 6.87 0.00 \n", + "9 256.66 0.98 1.00 251.02 0.36 \n", + "10 139.99 0.95 1.00 134.32 0.33 \n", + "11 14.22 0.41 0.91 8.32 0.10 \n", + "12 10.63 0.21 0.91 4.63 0.00 \n", + "13 411.59 0.99 1.00 406.32 0.73 \n", + "14 288.75 0.98 1.00 283.24 0.49 \n", + "15 15.33 0.47 0.91 9.40 0.07 \n", + "16 7.90 0.18 0.91 1.91 0.01 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_toe\n", + "\n", + "## export\n", + "write.table(result.table_toe, '../results_summary_updated/sim_ind_GencompLasso_binary.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_bin/.ipynb_checkpoints/1.1_sim_toe_lasso_binary_update-checkpoint.ipynb b/simulations/notebooks_sim_bin/.ipynb_checkpoints/1.1_sim_toe_lasso_binary_update-checkpoint.ipynb new file mode 100644 index 0000000..339fd90 --- /dev/null +++ b/simulations/notebooks_sim_bin/.ipynb_checkpoints/1.1_sim_toe_lasso_binary_update-checkpoint.ipynb @@ -0,0 +1,976 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize lasso results on Toeplitz Simulation Scenarios for binary outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "rou.list = seq(0.1, 0.9, 0.2)\n", + "\n", + "files = NULL\n", + "for (rou in rou.list){\n", + " for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_toeplitz_corr', rou, paste('P', p, 'N', n, sep='_'), '.RData', sep=''))\n", + " }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "80" + ], + "text/latex": [ + "80" + ], + "text/markdown": [ + "80" + ], + "text/plain": [ + "[1] 80" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "length(files)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1] \"indx: 1\"\n", + "[1] \"indx: 2\"\n", + "[1] \"indx: 3\"\n", + "[1] \"indx: 4\"\n", + "[1] \"indx: 5\"\n", + "[1] \"indx: 6\"\n", + "[1] \"indx: 7\"\n", + "[1] \"indx: 8\"\n", + "[1] \"indx: 9\"\n", + "[1] \"indx: 10\"\n", + "[1] \"indx: 11\"\n", + "[1] \"indx: 12\"\n", + "[1] \"indx: 13\"\n", + "[1] \"indx: 14\"\n", + "[1] \"indx: 15\"\n", + "[1] \"indx: 16\"\n", + "[1] \"indx: 17\"\n", + "[1] \"indx: 18\"\n", + "[1] \"indx: 19\"\n", + "[1] \"indx: 20\"\n", + "[1] \"indx: 21\"\n", + "[1] \"indx: 22\"\n", + "[1] \"indx: 23\"\n", + "[1] \"indx: 24\"\n", + "[1] \"indx: 25\"\n", + "[1] \"indx: 26\"\n", + "[1] \"indx: 27\"\n", + "[1] \"indx: 28\"\n", + "[1] \"indx: 29\"\n", + "[1] \"indx: 30\"\n", + "[1] \"indx: 31\"\n", + "[1] \"indx: 32\"\n", + "[1] \"indx: 33\"\n", + "[1] \"indx: 34\"\n", + "[1] \"indx: 35\"\n", + "[1] \"indx: 36\"\n", + "[1] \"indx: 37\"\n", + "[1] \"indx: 38\"\n", + "[1] \"indx: 39\"\n", + "[1] \"indx: 40\"\n", + "[1] \"indx: 41\"\n", + "[1] \"indx: 42\"\n", + "[1] \"indx: 43\"\n", + "[1] \"indx: 44\"\n", + "[1] \"indx: 45\"\n", + "[1] \"indx: 46\"\n", + "[1] \"indx: 47\"\n", + "[1] \"indx: 48\"\n", + "[1] \"indx: 49\"\n", + "[1] \"indx: 50\"\n", + "[1] \"indx: 51\"\n", + "[1] \"indx: 52\"\n", + "[1] \"indx: 53\"\n", + "[1] \"indx: 54\"\n", + "[1] \"indx: 55\"\n", + "[1] \"indx: 56\"\n", + "[1] \"indx: 57\"\n", + "[1] \"indx: 58\"\n", + "[1] \"indx: 59\"\n", + "[1] \"indx: 60\"\n", + "[1] \"indx: 61\"\n", + "[1] \"indx: 62\"\n", + "[1] \"indx: 63\"\n", + "[1] \"indx: 64\"\n", + "[1] \"indx: 65\"\n", + "[1] \"indx: 66\"\n", + "[1] \"indx: 67\"\n", + "[1] \"indx: 68\"\n", + "[1] \"indx: 69\"\n", + "[1] \"indx: 70\"\n", + "[1] \"indx: 71\"\n", + "[1] \"indx: 72\"\n", + "[1] \"indx: 73\"\n", + "[1] \"indx: 74\"\n", + "[1] \"indx: 75\"\n", + "[1] \"indx: 76\"\n", + "[1] \"indx: 77\"\n", + "[1] \"indx: 78\"\n", + "[1] \"indx: 79\"\n", + "[1] \"indx: 80\"\n" + ] + } + ], + "source": [ + "avg_FDR = NULL\n", + "table_toe = NULL\n", + "tmp_num_select = rep(0, length(files))\n", + "for (i in 1:length(files)){\n", + " print(paste0('indx: ', i))\n", + " load(paste0(dir, '/binary_update/toe_Lasso_binary_', i, '.RData')) \n", + " \n", + " table_toe = rbind(table_toe, results_toe_lasso[c('n', 'p', 'rou', 'FP', 'FN', 'ROC', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_toe_lasso$Stab.table))\n", + " \n", + " # calculate FDR\n", + " load(file_name, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_toe_lasso$Stab.table\n", + " FDR = NULL # false positive rate\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}\n", + "table_toe = as.data.frame(table_toe)\n", + "table_toe$num_select = tmp_num_select\n", + "table_toe$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
150500.13.65 ( 0.23 )2.83 ( 0.11 )0.78 ( 0.01 )0.32 5.820.39
2100500.17.35 ( 0.34 )0.68 ( 0.09 )0.85 ( 0.01 )0.3411.670.50
3500500.14.99 ( 0.22 )0 ( 0 )0.92 ( 0 )0.55 9.990.37
41000500.12.42 ( 0.12 )0 ( 0 )0.93 ( 0 )0.78 7.420.17
5501000.14.65 ( 0.29 )2.93 ( 0.12 )0.74 ( 0.01 )0.26 6.720.48
61001000.18.11 ( 0.41 )0.86 ( 0.09 )0.85 ( 0.01 )0.3312.250.52
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 3.65 ( 0.23 ) & 2.83 ( 0.11 ) & 0.78 ( 0.01 ) & 0.32 & 5.82 & 0.39\\\\\n", + "\t2 & 100 & 50 & 0.1 & 7.35 ( 0.34 ) & 0.68 ( 0.09 ) & 0.85 ( 0.01 ) & 0.34 & 11.67 & 0.50\\\\\n", + "\t3 & 500 & 50 & 0.1 & 4.99 ( 0.22 ) & 0 ( 0 ) & 0.92 ( 0 ) & 0.55 & 9.99 & 0.37\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 2.42 ( 0.12 ) & 0 ( 0 ) & 0.93 ( 0 ) & 0.78 & 7.42 & 0.17\\\\\n", + "\t5 & 50 & 100 & 0.1 & 4.65 ( 0.29 ) & 2.93 ( 0.12 ) & 0.74 ( 0.01 ) & 0.26 & 6.72 & 0.48\\\\\n", + "\t6 & 100 & 100 & 0.1 & 8.11 ( 0.41 ) & 0.86 ( 0.09 ) & 0.85 ( 0.01 ) & 0.33 & 12.25 & 0.52\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 3.65 ( 0.23 ) | 2.83 ( 0.11 ) | 0.78 ( 0.01 ) | 0.32 | 5.82 | 0.39 |\n", + "| 2 | 100 | 50 | 0.1 | 7.35 ( 0.34 ) | 0.68 ( 0.09 ) | 0.85 ( 0.01 ) | 0.34 | 11.67 | 0.50 |\n", + "| 3 | 500 | 50 | 0.1 | 4.99 ( 0.22 ) | 0 ( 0 ) | 0.92 ( 0 ) | 0.55 | 9.99 | 0.37 |\n", + "| 4 | 1000 | 50 | 0.1 | 2.42 ( 0.12 ) | 0 ( 0 ) | 0.93 ( 0 ) | 0.78 | 7.42 | 0.17 |\n", + "| 5 | 50 | 100 | 0.1 | 4.65 ( 0.29 ) | 2.93 ( 0.12 ) | 0.74 ( 0.01 ) | 0.26 | 6.72 | 0.48 |\n", + "| 6 | 100 | 100 | 0.1 | 8.11 ( 0.41 ) | 0.86 ( 0.09 ) | 0.85 ( 0.01 ) | 0.33 | 12.25 | 0.52 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select FDR \n", + "1 50 50 0.1 3.65 ( 0.23 ) 2.83 ( 0.11 ) 0.78 ( 0.01 ) 0.32 5.82 0.39\n", + "2 100 50 0.1 7.35 ( 0.34 ) 0.68 ( 0.09 ) 0.85 ( 0.01 ) 0.34 11.67 0.50\n", + "3 500 50 0.1 4.99 ( 0.22 ) 0 ( 0 ) 0.92 ( 0 ) 0.55 9.99 0.37\n", + "4 1000 50 0.1 2.42 ( 0.12 ) 0 ( 0 ) 0.93 ( 0 ) 0.78 7.42 0.17\n", + "5 50 100 0.1 4.65 ( 0.29 ) 2.93 ( 0.12 ) 0.74 ( 0.01 ) 0.26 6.72 0.48\n", + "6 100 100 0.1 8.11 ( 0.41 ) 0.86 ( 0.09 ) 0.85 ( 0.01 ) 0.33 12.25 0.52" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
755005000.915.93 ( 0.73 )1.42 ( 0.1 )0.81 ( 0 )0.1919.510.73
7610005000.911.96 ( 0.46 )0.42 ( 0.06 )0.83 ( 0 )0.3116.540.63
775010000.98.02 ( 0.28 )4.9 ( 0.07 )0.66 ( 0.01 )0.08 8.120.85
7810010000.95.85 ( 0.58 )4.37 ( 0.07 )0.69 ( 0.01 )0.18 6.480.61
7950010000.918.7 ( 0.93 )1.88 ( 0.1 )0.8 ( 0 )0.1621.820.77
80100010000.920.07 ( 0.72 )0.41 ( 0.05 )0.83 ( 0 )0.2124.660.75
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 15.93 ( 0.73 ) & 1.42 ( 0.1 ) & 0.81 ( 0 ) & 0.19 & 19.51 & 0.73\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 11.96 ( 0.46 ) & 0.42 ( 0.06 ) & 0.83 ( 0 ) & 0.31 & 16.54 & 0.63\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 8.02 ( 0.28 ) & 4.9 ( 0.07 ) & 0.66 ( 0.01 ) & 0.08 & 8.12 & 0.85\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 5.85 ( 0.58 ) & 4.37 ( 0.07 ) & 0.69 ( 0.01 ) & 0.18 & 6.48 & 0.61\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 18.7 ( 0.93 ) & 1.88 ( 0.1 ) & 0.8 ( 0 ) & 0.16 & 21.82 & 0.77\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 20.07 ( 0.72 ) & 0.41 ( 0.05 ) & 0.83 ( 0 ) & 0.21 & 24.66 & 0.75\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 15.93 ( 0.73 ) | 1.42 ( 0.1 ) | 0.81 ( 0 ) | 0.19 | 19.51 | 0.73 |\n", + "| 76 | 1000 | 500 | 0.9 | 11.96 ( 0.46 ) | 0.42 ( 0.06 ) | 0.83 ( 0 ) | 0.31 | 16.54 | 0.63 |\n", + "| 77 | 50 | 1000 | 0.9 | 8.02 ( 0.28 ) | 4.9 ( 0.07 ) | 0.66 ( 0.01 ) | 0.08 | 8.12 | 0.85 |\n", + "| 78 | 100 | 1000 | 0.9 | 5.85 ( 0.58 ) | 4.37 ( 0.07 ) | 0.69 ( 0.01 ) | 0.18 | 6.48 | 0.61 |\n", + "| 79 | 500 | 1000 | 0.9 | 18.7 ( 0.93 ) | 1.88 ( 0.1 ) | 0.8 ( 0 ) | 0.16 | 21.82 | 0.77 |\n", + "| 80 | 1000 | 1000 | 0.9 | 20.07 ( 0.72 ) | 0.41 ( 0.05 ) | 0.83 ( 0 ) | 0.21 | 24.66 | 0.75 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select\n", + "75 500 500 0.9 15.93 ( 0.73 ) 1.42 ( 0.1 ) 0.81 ( 0 ) 0.19 19.51 \n", + "76 1000 500 0.9 11.96 ( 0.46 ) 0.42 ( 0.06 ) 0.83 ( 0 ) 0.31 16.54 \n", + "77 50 1000 0.9 8.02 ( 0.28 ) 4.9 ( 0.07 ) 0.66 ( 0.01 ) 0.08 8.12 \n", + "78 100 1000 0.9 5.85 ( 0.58 ) 4.37 ( 0.07 ) 0.69 ( 0.01 ) 0.18 6.48 \n", + "79 500 1000 0.9 18.7 ( 0.93 ) 1.88 ( 0.1 ) 0.8 ( 0 ) 0.16 21.82 \n", + "80 1000 1000 0.9 20.07 ( 0.72 ) 0.41 ( 0.05 ) 0.83 ( 0 ) 0.21 24.66 \n", + " FDR \n", + "75 0.73\n", + "76 0.63\n", + "77 0.85\n", + "78 0.61\n", + "79 0.77\n", + "80 0.75" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_toe <- apply(table_toe,2,as.character)\n", + "rownames(result.table_toe) = rownames(table_toe)\n", + "result.table_toe = as.data.frame(result.table_toe)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_toe$n = tidyr::extract_numeric(result.table_toe$n)\n", + "result.table_toe$p = tidyr::extract_numeric(result.table_toe$p)\n", + "result.table_toe$ratio = result.table_toe$p / result.table_toe$n\n", + "\n", + "result.table_toe = result.table_toe[c('n', 'p', 'rou', 'ratio', 'Stab', 'ROC', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_toe)[1:4] = c('N', 'P', 'Corr', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_toe$Stab = as.numeric(as.character(result.table_toe$Stab))\n", + "result.table_toe$num_select = as.numeric(as.character(result.table_toe$num_select))\n", + "\n", + "result.table_toe$ROC_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$ROC))\n", + "result.table_toe$FP_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$FP))\n", + "result.table_toe$FN_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$FN))" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "
A data.frame: 0 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
\n" + ], + "text/latex": [ + "A data.frame: 0 × 13\n", + "\\begin{tabular}{lllllllllllll}\n", + " N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 0 × 13\n", + "\n", + "| N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select FDR ROC_mean FP_mean FN_mean" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check whether missing values exists\n", + "result.table_toe[rowSums(is.na(result.table_toe)) > 0,]" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 500.11.000.320.78 ( 0.01 )3.65 ( 0.23 )2.83 ( 0.11 ) 5.820.390.783.652.83
2 100 500.10.500.340.85 ( 0.01 )7.35 ( 0.34 )0.68 ( 0.09 )11.670.5 0.857.350.68
3 500 500.10.100.550.92 ( 0 ) 4.99 ( 0.22 )0 ( 0 ) 9.990.370.924.990.00
41000 500.10.050.780.93 ( 0 ) 2.42 ( 0.12 )0 ( 0 ) 7.420.170.932.420.00
5 501000.12.000.260.74 ( 0.01 )4.65 ( 0.29 )2.93 ( 0.12 ) 6.720.480.744.652.93
6 1001000.11.000.330.85 ( 0.01 )8.11 ( 0.41 )0.86 ( 0.09 )12.250.520.858.110.86
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1.00 & 0.32 & 0.78 ( 0.01 ) & 3.65 ( 0.23 ) & 2.83 ( 0.11 ) & 5.82 & 0.39 & 0.78 & 3.65 & 2.83\\\\\n", + "\t2 & 100 & 50 & 0.1 & 0.50 & 0.34 & 0.85 ( 0.01 ) & 7.35 ( 0.34 ) & 0.68 ( 0.09 ) & 11.67 & 0.5 & 0.85 & 7.35 & 0.68\\\\\n", + "\t3 & 500 & 50 & 0.1 & 0.10 & 0.55 & 0.92 ( 0 ) & 4.99 ( 0.22 ) & 0 ( 0 ) & 9.99 & 0.37 & 0.92 & 4.99 & 0.00\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 0.05 & 0.78 & 0.93 ( 0 ) & 2.42 ( 0.12 ) & 0 ( 0 ) & 7.42 & 0.17 & 0.93 & 2.42 & 0.00\\\\\n", + "\t5 & 50 & 100 & 0.1 & 2.00 & 0.26 & 0.74 ( 0.01 ) & 4.65 ( 0.29 ) & 2.93 ( 0.12 ) & 6.72 & 0.48 & 0.74 & 4.65 & 2.93\\\\\n", + "\t6 & 100 & 100 & 0.1 & 1.00 & 0.33 & 0.85 ( 0.01 ) & 8.11 ( 0.41 ) & 0.86 ( 0.09 ) & 12.25 & 0.52 & 0.85 & 8.11 & 0.86\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1.00 | 0.32 | 0.78 ( 0.01 ) | 3.65 ( 0.23 ) | 2.83 ( 0.11 ) | 5.82 | 0.39 | 0.78 | 3.65 | 2.83 |\n", + "| 2 | 100 | 50 | 0.1 | 0.50 | 0.34 | 0.85 ( 0.01 ) | 7.35 ( 0.34 ) | 0.68 ( 0.09 ) | 11.67 | 0.5 | 0.85 | 7.35 | 0.68 |\n", + "| 3 | 500 | 50 | 0.1 | 0.10 | 0.55 | 0.92 ( 0 ) | 4.99 ( 0.22 ) | 0 ( 0 ) | 9.99 | 0.37 | 0.92 | 4.99 | 0.00 |\n", + "| 4 | 1000 | 50 | 0.1 | 0.05 | 0.78 | 0.93 ( 0 ) | 2.42 ( 0.12 ) | 0 ( 0 ) | 7.42 | 0.17 | 0.93 | 2.42 | 0.00 |\n", + "| 5 | 50 | 100 | 0.1 | 2.00 | 0.26 | 0.74 ( 0.01 ) | 4.65 ( 0.29 ) | 2.93 ( 0.12 ) | 6.72 | 0.48 | 0.74 | 4.65 | 2.93 |\n", + "| 6 | 100 | 100 | 0.1 | 1.00 | 0.33 | 0.85 ( 0.01 ) | 8.11 ( 0.41 ) | 0.86 ( 0.09 ) | 12.25 | 0.52 | 0.85 | 8.11 | 0.86 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select\n", + "1 50 50 0.1 1.00 0.32 0.78 ( 0.01 ) 3.65 ( 0.23 ) 2.83 ( 0.11 ) 5.82 \n", + "2 100 50 0.1 0.50 0.34 0.85 ( 0.01 ) 7.35 ( 0.34 ) 0.68 ( 0.09 ) 11.67 \n", + "3 500 50 0.1 0.10 0.55 0.92 ( 0 ) 4.99 ( 0.22 ) 0 ( 0 ) 9.99 \n", + "4 1000 50 0.1 0.05 0.78 0.93 ( 0 ) 2.42 ( 0.12 ) 0 ( 0 ) 7.42 \n", + "5 50 100 0.1 2.00 0.26 0.74 ( 0.01 ) 4.65 ( 0.29 ) 2.93 ( 0.12 ) 6.72 \n", + "6 100 100 0.1 1.00 0.33 0.85 ( 0.01 ) 8.11 ( 0.41 ) 0.86 ( 0.09 ) 12.25 \n", + " FDR ROC_mean FP_mean FN_mean\n", + "1 0.39 0.78 3.65 2.83 \n", + "2 0.5 0.85 7.35 0.68 \n", + "3 0.37 0.92 4.99 0.00 \n", + "4 0.17 0.93 2.42 0.00 \n", + "5 0.48 0.74 4.65 2.93 \n", + "6 0.52 0.85 8.11 0.86 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
75 500 5000.9 1.00.190.81 ( 0 ) 15.93 ( 0.73 )1.42 ( 0.1 ) 19.510.730.8115.931.42
761000 5000.9 0.50.310.83 ( 0 ) 11.96 ( 0.46 )0.42 ( 0.06 )16.540.630.8311.960.42
77 5010000.920.00.080.66 ( 0.01 )8.02 ( 0.28 ) 4.9 ( 0.07 ) 8.120.850.66 8.024.90
78 10010000.910.00.180.69 ( 0.01 )5.85 ( 0.58 ) 4.37 ( 0.07 ) 6.480.610.69 5.854.37
79 50010000.9 2.00.160.8 ( 0 ) 18.7 ( 0.93 ) 1.88 ( 0.1 ) 21.820.770.8018.701.88
80100010000.9 1.00.210.83 ( 0 ) 20.07 ( 0.72 )0.41 ( 0.05 )24.660.750.8320.070.41
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 1.0 & 0.19 & 0.81 ( 0 ) & 15.93 ( 0.73 ) & 1.42 ( 0.1 ) & 19.51 & 0.73 & 0.81 & 15.93 & 1.42\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.5 & 0.31 & 0.83 ( 0 ) & 11.96 ( 0.46 ) & 0.42 ( 0.06 ) & 16.54 & 0.63 & 0.83 & 11.96 & 0.42\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.0 & 0.08 & 0.66 ( 0.01 ) & 8.02 ( 0.28 ) & 4.9 ( 0.07 ) & 8.12 & 0.85 & 0.66 & 8.02 & 4.90\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.0 & 0.18 & 0.69 ( 0.01 ) & 5.85 ( 0.58 ) & 4.37 ( 0.07 ) & 6.48 & 0.61 & 0.69 & 5.85 & 4.37\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.0 & 0.16 & 0.8 ( 0 ) & 18.7 ( 0.93 ) & 1.88 ( 0.1 ) & 21.82 & 0.77 & 0.80 & 18.70 & 1.88\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.0 & 0.21 & 0.83 ( 0 ) & 20.07 ( 0.72 ) & 0.41 ( 0.05 ) & 24.66 & 0.75 & 0.83 & 20.07 & 0.41\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 1.0 | 0.19 | 0.81 ( 0 ) | 15.93 ( 0.73 ) | 1.42 ( 0.1 ) | 19.51 | 0.73 | 0.81 | 15.93 | 1.42 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.5 | 0.31 | 0.83 ( 0 ) | 11.96 ( 0.46 ) | 0.42 ( 0.06 ) | 16.54 | 0.63 | 0.83 | 11.96 | 0.42 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.0 | 0.08 | 0.66 ( 0.01 ) | 8.02 ( 0.28 ) | 4.9 ( 0.07 ) | 8.12 | 0.85 | 0.66 | 8.02 | 4.90 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.0 | 0.18 | 0.69 ( 0.01 ) | 5.85 ( 0.58 ) | 4.37 ( 0.07 ) | 6.48 | 0.61 | 0.69 | 5.85 | 4.37 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.0 | 0.16 | 0.8 ( 0 ) | 18.7 ( 0.93 ) | 1.88 ( 0.1 ) | 21.82 | 0.77 | 0.80 | 18.70 | 1.88 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.0 | 0.21 | 0.83 ( 0 ) | 20.07 ( 0.72 ) | 0.41 ( 0.05 ) | 24.66 | 0.75 | 0.83 | 20.07 | 0.41 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "75 500 500 0.9 1.0 0.19 0.81 ( 0 ) 15.93 ( 0.73 ) 1.42 ( 0.1 ) \n", + "76 1000 500 0.9 0.5 0.31 0.83 ( 0 ) 11.96 ( 0.46 ) 0.42 ( 0.06 )\n", + "77 50 1000 0.9 20.0 0.08 0.66 ( 0.01 ) 8.02 ( 0.28 ) 4.9 ( 0.07 ) \n", + "78 100 1000 0.9 10.0 0.18 0.69 ( 0.01 ) 5.85 ( 0.58 ) 4.37 ( 0.07 )\n", + "79 500 1000 0.9 2.0 0.16 0.8 ( 0 ) 18.7 ( 0.93 ) 1.88 ( 0.1 ) \n", + "80 1000 1000 0.9 1.0 0.21 0.83 ( 0 ) 20.07 ( 0.72 ) 0.41 ( 0.05 )\n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "75 19.51 0.73 0.81 15.93 1.42 \n", + "76 16.54 0.63 0.83 11.96 0.42 \n", + "77 8.12 0.85 0.66 8.02 4.90 \n", + "78 6.48 0.61 0.69 5.85 4.37 \n", + "79 21.82 0.77 0.80 18.70 1.88 \n", + "80 24.66 0.75 0.83 20.07 0.41 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 80 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 500.1 1.000.320.78 ( 0.01 )3.65 ( 0.23 ) 2.83 ( 0.11 ) 5.820.390.78 3.652.83
2 100 500.1 0.500.340.85 ( 0.01 )7.35 ( 0.34 ) 0.68 ( 0.09 )11.670.5 0.85 7.350.68
3 500 500.1 0.100.550.92 ( 0 ) 4.99 ( 0.22 ) 0 ( 0 ) 9.990.370.92 4.990.00
41000 500.1 0.050.780.93 ( 0 ) 2.42 ( 0.12 ) 0 ( 0 ) 7.420.170.93 2.420.00
5 50 1000.1 2.000.260.74 ( 0.01 )4.65 ( 0.29 ) 2.93 ( 0.12 ) 6.720.480.74 4.652.93
6 100 1000.1 1.000.330.85 ( 0.01 )8.11 ( 0.41 ) 0.86 ( 0.09 )12.250.520.85 8.110.86
7 500 1000.1 0.200.400.92 ( 0 ) 8.63 ( 0.29 ) 0 ( 0 ) 13.630.540.92 8.630.00
81000 1000.1 0.100.640.92 ( 0 ) 4.02 ( 0.18 ) 0 ( 0 ) 9.020.310.92 4.020.00
9 50 5000.110.000.120.71 ( 0.01 )8.29 ( 0.25 ) 3.89 ( 0.1 ) 9.400.770.71 8.293.89
10 100 5000.1 5.000.240.8 ( 0.01 ) 8.84 ( 0.61 ) 2.19 ( 0.12 )11.650.570.80 8.842.19
11 500 5000.1 1.000.210.92 ( 0 ) 22.86 ( 0.75 )0 ( 0 ) 27.860.770.9222.860.00
121000 5000.1 0.500.330.93 ( 0 ) 12.73 ( 0.35 )0 ( 0 ) 17.730.650.9312.730.00
13 5010000.120.000.090.68 ( 0.01 )10.35 ( 0.33 )4.14 ( 0.09 )11.210.820.6810.354.14
14 10010000.110.000.190.77 ( 0.01 )10.84 ( 0.75 )2.46 ( 0.1 ) 13.380.630.7710.842.46
15 50010000.1 2.000.160.92 ( 0 ) 30.83 ( 1.05 )0 ( 0 ) 35.830.810.9230.830.00
16100010000.1 1.000.230.93 ( 0 ) 20.39 ( 0.59 )0 ( 0 ) 25.390.750.9320.390.00
17 50 500.3 1.000.280.75 ( 0.01 )3.69 ( 0.22 ) 3.04 ( 0.1 ) 5.650.4 0.75 3.693.04
18 100 500.3 0.500.320.84 ( 0.01 )7.11 ( 0.33 ) 0.93 ( 0.1 ) 11.180.5 0.84 7.110.93
19 500 500.3 0.100.510.92 ( 0 ) 5.67 ( 0.22 ) 0 ( 0 ) 10.670.410.92 5.670.00
201000 500.3 0.050.780.92 ( 0 ) 2.48 ( 0.13 ) 0 ( 0 ) 7.480.180.92 2.480.00
21 50 1000.3 2.000.260.75 ( 0.01 )4.41 ( 0.27 ) 3.47 ( 0.09 ) 5.940.490.75 4.413.47
22 100 1000.3 1.000.280.82 ( 0.01 )8.16 ( 0.53 ) 1.46 ( 0.11 )11.700.520.82 8.161.46
23 500 1000.3 0.200.410.92 ( 0 ) 8.48 ( 0.34 ) 0 ( 0 ) 13.480.530.92 8.480.00
241000 1000.3 0.100.670.92 ( 0 ) 3.71 ( 0.15 ) 0 ( 0 ) 8.710.290.92 3.710.00
25 50 5000.310.000.130.69 ( 0.01 )7.94 ( 0.3 ) 4.11 ( 0.08 ) 8.830.770.69 7.944.11
26 100 5000.3 5.000.200.78 ( 0.01 )10.16 ( 0.68 )2.49 ( 0.11 )12.670.630.7810.162.49
27 500 5000.3 1.000.200.91 ( 0 ) 23.65 ( 0.7 ) 0 ( 0 ) 28.650.780.9123.650.00
281000 5000.3 0.500.340.92 ( 0 ) 12.28 ( 0.34 )0 ( 0 ) 17.280.640.9212.280.00
29 5010000.320.000.100.68 ( 0.01 )9.77 ( 0.31 ) 4.3 ( 0.06 ) 10.470.830.68 9.774.30
30 10010000.310.000.170.77 ( 0.01 )10.68 ( 0.8 ) 3.02 ( 0.11 )12.660.670.7710.683.02
51 500 500.7 0.100.570.89 ( 0 ) 4.61 ( 0.17 ) 0.04 ( 0.02 ) 9.570.360.89 4.610.04
521000 500.7 0.050.740.89 ( 0 ) 2.8 ( 0.15 ) 0 ( 0 ) 7.800.210.89 2.800.00
53 50 1000.7 2.000.240.71 ( 0.01 )4.31 ( 0.28 ) 4.05 ( 0.09 ) 5.260.550.71 4.314.05
54 100 1000.7 1.000.270.79 ( 0.01 )6.34 ( 0.4 ) 2.67 ( 0.12 ) 8.670.530.79 6.342.67
55 500 1000.7 0.200.430.89 ( 0 ) 7.92 ( 0.24 ) 0.04 ( 0.02 )12.880.520.89 7.920.04
561000 1000.7 0.100.660.9 ( 0 ) 3.85 ( 0.16 ) 0 ( 0 ) 8.850.3 0.90 3.850.00
57 50 5000.710.000.140.7 ( 0.01 ) 6.5 ( 0.24 ) 4.63 ( 0.06 ) 6.870.770.70 6.504.63
58 100 5000.7 5.000.210.76 ( 0.01 )6.98 ( 0.58 ) 3.65 ( 0.08 ) 8.330.560.76 6.983.65
59 500 5000.7 1.000.200.88 ( 0 ) 22.04 ( 0.74 )0.14 ( 0.04 )26.900.760.8822.040.14
601000 5000.7 0.500.330.89 ( 0 ) 13.15 ( 0.38 )0 ( 0 ) 18.150.650.8913.150.00
61 5010000.720.000.100.66 ( 0.01 )8.82 ( 0.28 ) 4.72 ( 0.05 ) 9.100.850.66 8.824.72
62 10010000.710.000.180.76 ( 0.01 )6.93 ( 0.59 ) 4 ( 0.08 ) 7.930.620.76 6.934.00
63 50010000.7 2.000.160.87 ( 0 ) 29.07 ( 1 ) 0.16 ( 0.04 )33.910.810.8729.070.16
64100010000.7 1.000.220.89 ( 0 ) 21.8 ( 0.63 ) 0 ( 0 ) 26.800.760.8921.800.00
65 50 500.9 1.000.300.69 ( 0.01 )2.9 ( 0.2 ) 4.22 ( 0.09 ) 3.680.410.69 2.904.22
66 100 500.9 0.500.370.76 ( 0.01 )3.93 ( 0.21 ) 2.74 ( 0.11 ) 6.190.410.76 3.932.74
67 500 500.9 0.100.570.83 ( 0 ) 3.65 ( 0.16 ) 0.56 ( 0.08 ) 8.090.310.83 3.650.56
681000 500.9 0.050.760.83 ( 0 ) 2.41 ( 0.12 ) 0.23 ( 0.04 ) 7.180.180.83 2.410.23
69 50 1000.9 2.000.260.7 ( 0.01 ) 3.29 ( 0.23 ) 4.29 ( 0.09 ) 4.000.450.70 3.294.29
70 100 1000.9 1.000.320.76 ( 0.01 )4.77 ( 0.33 ) 3.26 ( 0.09 ) 6.510.460.76 4.773.26
71 500 1000.9 0.200.450.82 ( 0 ) 5.65 ( 0.21 ) 0.92 ( 0.09 ) 9.730.450.82 5.650.92
721000 1000.9 0.100.630.83 ( 0 ) 3.87 ( 0.18 ) 0.24 ( 0.05 ) 8.630.3 0.83 3.870.24
73 50 5000.910.000.150.66 ( 0.01 )5.8 ( 0.24 ) 4.65 ( 0.07 ) 6.150.750.66 5.804.65
74 100 5000.9 5.000.210.7 ( 0.01 ) 5.55 ( 0.55 ) 4.14 ( 0.09 ) 6.410.510.70 5.554.14
75 500 5000.9 1.000.190.81 ( 0 ) 15.93 ( 0.73 )1.42 ( 0.1 ) 19.510.730.8115.931.42
761000 5000.9 0.500.310.83 ( 0 ) 11.96 ( 0.46 )0.42 ( 0.06 )16.540.630.8311.960.42
77 5010000.920.000.080.66 ( 0.01 )8.02 ( 0.28 ) 4.9 ( 0.07 ) 8.120.850.66 8.024.90
78 10010000.910.000.180.69 ( 0.01 )5.85 ( 0.58 ) 4.37 ( 0.07 ) 6.480.610.69 5.854.37
79 50010000.9 2.000.160.8 ( 0 ) 18.7 ( 0.93 ) 1.88 ( 0.1 ) 21.820.770.8018.701.88
80100010000.9 1.000.210.83 ( 0 ) 20.07 ( 0.72 )0.41 ( 0.05 )24.660.750.8320.070.41
\n" + ], + "text/latex": [ + "A data.frame: 80 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1.00 & 0.32 & 0.78 ( 0.01 ) & 3.65 ( 0.23 ) & 2.83 ( 0.11 ) & 5.82 & 0.39 & 0.78 & 3.65 & 2.83\\\\\n", + "\t2 & 100 & 50 & 0.1 & 0.50 & 0.34 & 0.85 ( 0.01 ) & 7.35 ( 0.34 ) & 0.68 ( 0.09 ) & 11.67 & 0.5 & 0.85 & 7.35 & 0.68\\\\\n", + "\t3 & 500 & 50 & 0.1 & 0.10 & 0.55 & 0.92 ( 0 ) & 4.99 ( 0.22 ) & 0 ( 0 ) & 9.99 & 0.37 & 0.92 & 4.99 & 0.00\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 0.05 & 0.78 & 0.93 ( 0 ) & 2.42 ( 0.12 ) & 0 ( 0 ) & 7.42 & 0.17 & 0.93 & 2.42 & 0.00\\\\\n", + "\t5 & 50 & 100 & 0.1 & 2.00 & 0.26 & 0.74 ( 0.01 ) & 4.65 ( 0.29 ) & 2.93 ( 0.12 ) & 6.72 & 0.48 & 0.74 & 4.65 & 2.93\\\\\n", + "\t6 & 100 & 100 & 0.1 & 1.00 & 0.33 & 0.85 ( 0.01 ) & 8.11 ( 0.41 ) & 0.86 ( 0.09 ) & 12.25 & 0.52 & 0.85 & 8.11 & 0.86\\\\\n", + "\t7 & 500 & 100 & 0.1 & 0.20 & 0.40 & 0.92 ( 0 ) & 8.63 ( 0.29 ) & 0 ( 0 ) & 13.63 & 0.54 & 0.92 & 8.63 & 0.00\\\\\n", + "\t8 & 1000 & 100 & 0.1 & 0.10 & 0.64 & 0.92 ( 0 ) & 4.02 ( 0.18 ) & 0 ( 0 ) & 9.02 & 0.31 & 0.92 & 4.02 & 0.00\\\\\n", + "\t9 & 50 & 500 & 0.1 & 10.00 & 0.12 & 0.71 ( 0.01 ) & 8.29 ( 0.25 ) & 3.89 ( 0.1 ) & 9.40 & 0.77 & 0.71 & 8.29 & 3.89\\\\\n", + "\t10 & 100 & 500 & 0.1 & 5.00 & 0.24 & 0.8 ( 0.01 ) & 8.84 ( 0.61 ) & 2.19 ( 0.12 ) & 11.65 & 0.57 & 0.80 & 8.84 & 2.19\\\\\n", + "\t11 & 500 & 500 & 0.1 & 1.00 & 0.21 & 0.92 ( 0 ) & 22.86 ( 0.75 ) & 0 ( 0 ) & 27.86 & 0.77 & 0.92 & 22.86 & 0.00\\\\\n", + "\t12 & 1000 & 500 & 0.1 & 0.50 & 0.33 & 0.93 ( 0 ) & 12.73 ( 0.35 ) & 0 ( 0 ) & 17.73 & 0.65 & 0.93 & 12.73 & 0.00\\\\\n", + "\t13 & 50 & 1000 & 0.1 & 20.00 & 0.09 & 0.68 ( 0.01 ) & 10.35 ( 0.33 ) & 4.14 ( 0.09 ) & 11.21 & 0.82 & 0.68 & 10.35 & 4.14\\\\\n", + "\t14 & 100 & 1000 & 0.1 & 10.00 & 0.19 & 0.77 ( 0.01 ) & 10.84 ( 0.75 ) & 2.46 ( 0.1 ) & 13.38 & 0.63 & 0.77 & 10.84 & 2.46\\\\\n", + "\t15 & 500 & 1000 & 0.1 & 2.00 & 0.16 & 0.92 ( 0 ) & 30.83 ( 1.05 ) & 0 ( 0 ) & 35.83 & 0.81 & 0.92 & 30.83 & 0.00\\\\\n", + "\t16 & 1000 & 1000 & 0.1 & 1.00 & 0.23 & 0.93 ( 0 ) & 20.39 ( 0.59 ) & 0 ( 0 ) & 25.39 & 0.75 & 0.93 & 20.39 & 0.00\\\\\n", + "\t17 & 50 & 50 & 0.3 & 1.00 & 0.28 & 0.75 ( 0.01 ) & 3.69 ( 0.22 ) & 3.04 ( 0.1 ) & 5.65 & 0.4 & 0.75 & 3.69 & 3.04\\\\\n", + "\t18 & 100 & 50 & 0.3 & 0.50 & 0.32 & 0.84 ( 0.01 ) & 7.11 ( 0.33 ) & 0.93 ( 0.1 ) & 11.18 & 0.5 & 0.84 & 7.11 & 0.93\\\\\n", + "\t19 & 500 & 50 & 0.3 & 0.10 & 0.51 & 0.92 ( 0 ) & 5.67 ( 0.22 ) & 0 ( 0 ) & 10.67 & 0.41 & 0.92 & 5.67 & 0.00\\\\\n", + "\t20 & 1000 & 50 & 0.3 & 0.05 & 0.78 & 0.92 ( 0 ) & 2.48 ( 0.13 ) & 0 ( 0 ) & 7.48 & 0.18 & 0.92 & 2.48 & 0.00\\\\\n", + "\t21 & 50 & 100 & 0.3 & 2.00 & 0.26 & 0.75 ( 0.01 ) & 4.41 ( 0.27 ) & 3.47 ( 0.09 ) & 5.94 & 0.49 & 0.75 & 4.41 & 3.47\\\\\n", + "\t22 & 100 & 100 & 0.3 & 1.00 & 0.28 & 0.82 ( 0.01 ) & 8.16 ( 0.53 ) & 1.46 ( 0.11 ) & 11.70 & 0.52 & 0.82 & 8.16 & 1.46\\\\\n", + "\t23 & 500 & 100 & 0.3 & 0.20 & 0.41 & 0.92 ( 0 ) & 8.48 ( 0.34 ) & 0 ( 0 ) & 13.48 & 0.53 & 0.92 & 8.48 & 0.00\\\\\n", + "\t24 & 1000 & 100 & 0.3 & 0.10 & 0.67 & 0.92 ( 0 ) & 3.71 ( 0.15 ) & 0 ( 0 ) & 8.71 & 0.29 & 0.92 & 3.71 & 0.00\\\\\n", + "\t25 & 50 & 500 & 0.3 & 10.00 & 0.13 & 0.69 ( 0.01 ) & 7.94 ( 0.3 ) & 4.11 ( 0.08 ) & 8.83 & 0.77 & 0.69 & 7.94 & 4.11\\\\\n", + "\t26 & 100 & 500 & 0.3 & 5.00 & 0.20 & 0.78 ( 0.01 ) & 10.16 ( 0.68 ) & 2.49 ( 0.11 ) & 12.67 & 0.63 & 0.78 & 10.16 & 2.49\\\\\n", + "\t27 & 500 & 500 & 0.3 & 1.00 & 0.20 & 0.91 ( 0 ) & 23.65 ( 0.7 ) & 0 ( 0 ) & 28.65 & 0.78 & 0.91 & 23.65 & 0.00\\\\\n", + "\t28 & 1000 & 500 & 0.3 & 0.50 & 0.34 & 0.92 ( 0 ) & 12.28 ( 0.34 ) & 0 ( 0 ) & 17.28 & 0.64 & 0.92 & 12.28 & 0.00\\\\\n", + "\t29 & 50 & 1000 & 0.3 & 20.00 & 0.10 & 0.68 ( 0.01 ) & 9.77 ( 0.31 ) & 4.3 ( 0.06 ) & 10.47 & 0.83 & 0.68 & 9.77 & 4.30\\\\\n", + "\t30 & 100 & 1000 & 0.3 & 10.00 & 0.17 & 0.77 ( 0.01 ) & 10.68 ( 0.8 ) & 3.02 ( 0.11 ) & 12.66 & 0.67 & 0.77 & 10.68 & 3.02\\\\\n", + "\t⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮\\\\\n", + "\t51 & 500 & 50 & 0.7 & 0.10 & 0.57 & 0.89 ( 0 ) & 4.61 ( 0.17 ) & 0.04 ( 0.02 ) & 9.57 & 0.36 & 0.89 & 4.61 & 0.04\\\\\n", + "\t52 & 1000 & 50 & 0.7 & 0.05 & 0.74 & 0.89 ( 0 ) & 2.8 ( 0.15 ) & 0 ( 0 ) & 7.80 & 0.21 & 0.89 & 2.80 & 0.00\\\\\n", + "\t53 & 50 & 100 & 0.7 & 2.00 & 0.24 & 0.71 ( 0.01 ) & 4.31 ( 0.28 ) & 4.05 ( 0.09 ) & 5.26 & 0.55 & 0.71 & 4.31 & 4.05\\\\\n", + "\t54 & 100 & 100 & 0.7 & 1.00 & 0.27 & 0.79 ( 0.01 ) & 6.34 ( 0.4 ) & 2.67 ( 0.12 ) & 8.67 & 0.53 & 0.79 & 6.34 & 2.67\\\\\n", + "\t55 & 500 & 100 & 0.7 & 0.20 & 0.43 & 0.89 ( 0 ) & 7.92 ( 0.24 ) & 0.04 ( 0.02 ) & 12.88 & 0.52 & 0.89 & 7.92 & 0.04\\\\\n", + "\t56 & 1000 & 100 & 0.7 & 0.10 & 0.66 & 0.9 ( 0 ) & 3.85 ( 0.16 ) & 0 ( 0 ) & 8.85 & 0.3 & 0.90 & 3.85 & 0.00\\\\\n", + "\t57 & 50 & 500 & 0.7 & 10.00 & 0.14 & 0.7 ( 0.01 ) & 6.5 ( 0.24 ) & 4.63 ( 0.06 ) & 6.87 & 0.77 & 0.70 & 6.50 & 4.63\\\\\n", + "\t58 & 100 & 500 & 0.7 & 5.00 & 0.21 & 0.76 ( 0.01 ) & 6.98 ( 0.58 ) & 3.65 ( 0.08 ) & 8.33 & 0.56 & 0.76 & 6.98 & 3.65\\\\\n", + "\t59 & 500 & 500 & 0.7 & 1.00 & 0.20 & 0.88 ( 0 ) & 22.04 ( 0.74 ) & 0.14 ( 0.04 ) & 26.90 & 0.76 & 0.88 & 22.04 & 0.14\\\\\n", + "\t60 & 1000 & 500 & 0.7 & 0.50 & 0.33 & 0.89 ( 0 ) & 13.15 ( 0.38 ) & 0 ( 0 ) & 18.15 & 0.65 & 0.89 & 13.15 & 0.00\\\\\n", + "\t61 & 50 & 1000 & 0.7 & 20.00 & 0.10 & 0.66 ( 0.01 ) & 8.82 ( 0.28 ) & 4.72 ( 0.05 ) & 9.10 & 0.85 & 0.66 & 8.82 & 4.72\\\\\n", + "\t62 & 100 & 1000 & 0.7 & 10.00 & 0.18 & 0.76 ( 0.01 ) & 6.93 ( 0.59 ) & 4 ( 0.08 ) & 7.93 & 0.62 & 0.76 & 6.93 & 4.00\\\\\n", + "\t63 & 500 & 1000 & 0.7 & 2.00 & 0.16 & 0.87 ( 0 ) & 29.07 ( 1 ) & 0.16 ( 0.04 ) & 33.91 & 0.81 & 0.87 & 29.07 & 0.16\\\\\n", + "\t64 & 1000 & 1000 & 0.7 & 1.00 & 0.22 & 0.89 ( 0 ) & 21.8 ( 0.63 ) & 0 ( 0 ) & 26.80 & 0.76 & 0.89 & 21.80 & 0.00\\\\\n", + "\t65 & 50 & 50 & 0.9 & 1.00 & 0.30 & 0.69 ( 0.01 ) & 2.9 ( 0.2 ) & 4.22 ( 0.09 ) & 3.68 & 0.41 & 0.69 & 2.90 & 4.22\\\\\n", + "\t66 & 100 & 50 & 0.9 & 0.50 & 0.37 & 0.76 ( 0.01 ) & 3.93 ( 0.21 ) & 2.74 ( 0.11 ) & 6.19 & 0.41 & 0.76 & 3.93 & 2.74\\\\\n", + "\t67 & 500 & 50 & 0.9 & 0.10 & 0.57 & 0.83 ( 0 ) & 3.65 ( 0.16 ) & 0.56 ( 0.08 ) & 8.09 & 0.31 & 0.83 & 3.65 & 0.56\\\\\n", + "\t68 & 1000 & 50 & 0.9 & 0.05 & 0.76 & 0.83 ( 0 ) & 2.41 ( 0.12 ) & 0.23 ( 0.04 ) & 7.18 & 0.18 & 0.83 & 2.41 & 0.23\\\\\n", + "\t69 & 50 & 100 & 0.9 & 2.00 & 0.26 & 0.7 ( 0.01 ) & 3.29 ( 0.23 ) & 4.29 ( 0.09 ) & 4.00 & 0.45 & 0.70 & 3.29 & 4.29\\\\\n", + "\t70 & 100 & 100 & 0.9 & 1.00 & 0.32 & 0.76 ( 0.01 ) & 4.77 ( 0.33 ) & 3.26 ( 0.09 ) & 6.51 & 0.46 & 0.76 & 4.77 & 3.26\\\\\n", + "\t71 & 500 & 100 & 0.9 & 0.20 & 0.45 & 0.82 ( 0 ) & 5.65 ( 0.21 ) & 0.92 ( 0.09 ) & 9.73 & 0.45 & 0.82 & 5.65 & 0.92\\\\\n", + "\t72 & 1000 & 100 & 0.9 & 0.10 & 0.63 & 0.83 ( 0 ) & 3.87 ( 0.18 ) & 0.24 ( 0.05 ) & 8.63 & 0.3 & 0.83 & 3.87 & 0.24\\\\\n", + "\t73 & 50 & 500 & 0.9 & 10.00 & 0.15 & 0.66 ( 0.01 ) & 5.8 ( 0.24 ) & 4.65 ( 0.07 ) & 6.15 & 0.75 & 0.66 & 5.80 & 4.65\\\\\n", + "\t74 & 100 & 500 & 0.9 & 5.00 & 0.21 & 0.7 ( 0.01 ) & 5.55 ( 0.55 ) & 4.14 ( 0.09 ) & 6.41 & 0.51 & 0.70 & 5.55 & 4.14\\\\\n", + "\t75 & 500 & 500 & 0.9 & 1.00 & 0.19 & 0.81 ( 0 ) & 15.93 ( 0.73 ) & 1.42 ( 0.1 ) & 19.51 & 0.73 & 0.81 & 15.93 & 1.42\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.50 & 0.31 & 0.83 ( 0 ) & 11.96 ( 0.46 ) & 0.42 ( 0.06 ) & 16.54 & 0.63 & 0.83 & 11.96 & 0.42\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.00 & 0.08 & 0.66 ( 0.01 ) & 8.02 ( 0.28 ) & 4.9 ( 0.07 ) & 8.12 & 0.85 & 0.66 & 8.02 & 4.90\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.00 & 0.18 & 0.69 ( 0.01 ) & 5.85 ( 0.58 ) & 4.37 ( 0.07 ) & 6.48 & 0.61 & 0.69 & 5.85 & 4.37\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.00 & 0.16 & 0.8 ( 0 ) & 18.7 ( 0.93 ) & 1.88 ( 0.1 ) & 21.82 & 0.77 & 0.80 & 18.70 & 1.88\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.00 & 0.21 & 0.83 ( 0 ) & 20.07 ( 0.72 ) & 0.41 ( 0.05 ) & 24.66 & 0.75 & 0.83 & 20.07 & 0.41\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 80 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1.00 | 0.32 | 0.78 ( 0.01 ) | 3.65 ( 0.23 ) | 2.83 ( 0.11 ) | 5.82 | 0.39 | 0.78 | 3.65 | 2.83 |\n", + "| 2 | 100 | 50 | 0.1 | 0.50 | 0.34 | 0.85 ( 0.01 ) | 7.35 ( 0.34 ) | 0.68 ( 0.09 ) | 11.67 | 0.5 | 0.85 | 7.35 | 0.68 |\n", + "| 3 | 500 | 50 | 0.1 | 0.10 | 0.55 | 0.92 ( 0 ) | 4.99 ( 0.22 ) | 0 ( 0 ) | 9.99 | 0.37 | 0.92 | 4.99 | 0.00 |\n", + "| 4 | 1000 | 50 | 0.1 | 0.05 | 0.78 | 0.93 ( 0 ) | 2.42 ( 0.12 ) | 0 ( 0 ) | 7.42 | 0.17 | 0.93 | 2.42 | 0.00 |\n", + "| 5 | 50 | 100 | 0.1 | 2.00 | 0.26 | 0.74 ( 0.01 ) | 4.65 ( 0.29 ) | 2.93 ( 0.12 ) | 6.72 | 0.48 | 0.74 | 4.65 | 2.93 |\n", + "| 6 | 100 | 100 | 0.1 | 1.00 | 0.33 | 0.85 ( 0.01 ) | 8.11 ( 0.41 ) | 0.86 ( 0.09 ) | 12.25 | 0.52 | 0.85 | 8.11 | 0.86 |\n", + "| 7 | 500 | 100 | 0.1 | 0.20 | 0.40 | 0.92 ( 0 ) | 8.63 ( 0.29 ) | 0 ( 0 ) | 13.63 | 0.54 | 0.92 | 8.63 | 0.00 |\n", + "| 8 | 1000 | 100 | 0.1 | 0.10 | 0.64 | 0.92 ( 0 ) | 4.02 ( 0.18 ) | 0 ( 0 ) | 9.02 | 0.31 | 0.92 | 4.02 | 0.00 |\n", + "| 9 | 50 | 500 | 0.1 | 10.00 | 0.12 | 0.71 ( 0.01 ) | 8.29 ( 0.25 ) | 3.89 ( 0.1 ) | 9.40 | 0.77 | 0.71 | 8.29 | 3.89 |\n", + "| 10 | 100 | 500 | 0.1 | 5.00 | 0.24 | 0.8 ( 0.01 ) | 8.84 ( 0.61 ) | 2.19 ( 0.12 ) | 11.65 | 0.57 | 0.80 | 8.84 | 2.19 |\n", + "| 11 | 500 | 500 | 0.1 | 1.00 | 0.21 | 0.92 ( 0 ) | 22.86 ( 0.75 ) | 0 ( 0 ) | 27.86 | 0.77 | 0.92 | 22.86 | 0.00 |\n", + "| 12 | 1000 | 500 | 0.1 | 0.50 | 0.33 | 0.93 ( 0 ) | 12.73 ( 0.35 ) | 0 ( 0 ) | 17.73 | 0.65 | 0.93 | 12.73 | 0.00 |\n", + "| 13 | 50 | 1000 | 0.1 | 20.00 | 0.09 | 0.68 ( 0.01 ) | 10.35 ( 0.33 ) | 4.14 ( 0.09 ) | 11.21 | 0.82 | 0.68 | 10.35 | 4.14 |\n", + "| 14 | 100 | 1000 | 0.1 | 10.00 | 0.19 | 0.77 ( 0.01 ) | 10.84 ( 0.75 ) | 2.46 ( 0.1 ) | 13.38 | 0.63 | 0.77 | 10.84 | 2.46 |\n", + "| 15 | 500 | 1000 | 0.1 | 2.00 | 0.16 | 0.92 ( 0 ) | 30.83 ( 1.05 ) | 0 ( 0 ) | 35.83 | 0.81 | 0.92 | 30.83 | 0.00 |\n", + "| 16 | 1000 | 1000 | 0.1 | 1.00 | 0.23 | 0.93 ( 0 ) | 20.39 ( 0.59 ) | 0 ( 0 ) | 25.39 | 0.75 | 0.93 | 20.39 | 0.00 |\n", + "| 17 | 50 | 50 | 0.3 | 1.00 | 0.28 | 0.75 ( 0.01 ) | 3.69 ( 0.22 ) | 3.04 ( 0.1 ) | 5.65 | 0.4 | 0.75 | 3.69 | 3.04 |\n", + "| 18 | 100 | 50 | 0.3 | 0.50 | 0.32 | 0.84 ( 0.01 ) | 7.11 ( 0.33 ) | 0.93 ( 0.1 ) | 11.18 | 0.5 | 0.84 | 7.11 | 0.93 |\n", + "| 19 | 500 | 50 | 0.3 | 0.10 | 0.51 | 0.92 ( 0 ) | 5.67 ( 0.22 ) | 0 ( 0 ) | 10.67 | 0.41 | 0.92 | 5.67 | 0.00 |\n", + "| 20 | 1000 | 50 | 0.3 | 0.05 | 0.78 | 0.92 ( 0 ) | 2.48 ( 0.13 ) | 0 ( 0 ) | 7.48 | 0.18 | 0.92 | 2.48 | 0.00 |\n", + "| 21 | 50 | 100 | 0.3 | 2.00 | 0.26 | 0.75 ( 0.01 ) | 4.41 ( 0.27 ) | 3.47 ( 0.09 ) | 5.94 | 0.49 | 0.75 | 4.41 | 3.47 |\n", + "| 22 | 100 | 100 | 0.3 | 1.00 | 0.28 | 0.82 ( 0.01 ) | 8.16 ( 0.53 ) | 1.46 ( 0.11 ) | 11.70 | 0.52 | 0.82 | 8.16 | 1.46 |\n", + "| 23 | 500 | 100 | 0.3 | 0.20 | 0.41 | 0.92 ( 0 ) | 8.48 ( 0.34 ) | 0 ( 0 ) | 13.48 | 0.53 | 0.92 | 8.48 | 0.00 |\n", + "| 24 | 1000 | 100 | 0.3 | 0.10 | 0.67 | 0.92 ( 0 ) | 3.71 ( 0.15 ) | 0 ( 0 ) | 8.71 | 0.29 | 0.92 | 3.71 | 0.00 |\n", + "| 25 | 50 | 500 | 0.3 | 10.00 | 0.13 | 0.69 ( 0.01 ) | 7.94 ( 0.3 ) | 4.11 ( 0.08 ) | 8.83 | 0.77 | 0.69 | 7.94 | 4.11 |\n", + "| 26 | 100 | 500 | 0.3 | 5.00 | 0.20 | 0.78 ( 0.01 ) | 10.16 ( 0.68 ) | 2.49 ( 0.11 ) | 12.67 | 0.63 | 0.78 | 10.16 | 2.49 |\n", + "| 27 | 500 | 500 | 0.3 | 1.00 | 0.20 | 0.91 ( 0 ) | 23.65 ( 0.7 ) | 0 ( 0 ) | 28.65 | 0.78 | 0.91 | 23.65 | 0.00 |\n", + "| 28 | 1000 | 500 | 0.3 | 0.50 | 0.34 | 0.92 ( 0 ) | 12.28 ( 0.34 ) | 0 ( 0 ) | 17.28 | 0.64 | 0.92 | 12.28 | 0.00 |\n", + "| 29 | 50 | 1000 | 0.3 | 20.00 | 0.10 | 0.68 ( 0.01 ) | 9.77 ( 0.31 ) | 4.3 ( 0.06 ) | 10.47 | 0.83 | 0.68 | 9.77 | 4.30 |\n", + "| 30 | 100 | 1000 | 0.3 | 10.00 | 0.17 | 0.77 ( 0.01 ) | 10.68 ( 0.8 ) | 3.02 ( 0.11 ) | 12.66 | 0.67 | 0.77 | 10.68 | 3.02 |\n", + "| ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ |\n", + "| 51 | 500 | 50 | 0.7 | 0.10 | 0.57 | 0.89 ( 0 ) | 4.61 ( 0.17 ) | 0.04 ( 0.02 ) | 9.57 | 0.36 | 0.89 | 4.61 | 0.04 |\n", + "| 52 | 1000 | 50 | 0.7 | 0.05 | 0.74 | 0.89 ( 0 ) | 2.8 ( 0.15 ) | 0 ( 0 ) | 7.80 | 0.21 | 0.89 | 2.80 | 0.00 |\n", + "| 53 | 50 | 100 | 0.7 | 2.00 | 0.24 | 0.71 ( 0.01 ) | 4.31 ( 0.28 ) | 4.05 ( 0.09 ) | 5.26 | 0.55 | 0.71 | 4.31 | 4.05 |\n", + "| 54 | 100 | 100 | 0.7 | 1.00 | 0.27 | 0.79 ( 0.01 ) | 6.34 ( 0.4 ) | 2.67 ( 0.12 ) | 8.67 | 0.53 | 0.79 | 6.34 | 2.67 |\n", + "| 55 | 500 | 100 | 0.7 | 0.20 | 0.43 | 0.89 ( 0 ) | 7.92 ( 0.24 ) | 0.04 ( 0.02 ) | 12.88 | 0.52 | 0.89 | 7.92 | 0.04 |\n", + "| 56 | 1000 | 100 | 0.7 | 0.10 | 0.66 | 0.9 ( 0 ) | 3.85 ( 0.16 ) | 0 ( 0 ) | 8.85 | 0.3 | 0.90 | 3.85 | 0.00 |\n", + "| 57 | 50 | 500 | 0.7 | 10.00 | 0.14 | 0.7 ( 0.01 ) | 6.5 ( 0.24 ) | 4.63 ( 0.06 ) | 6.87 | 0.77 | 0.70 | 6.50 | 4.63 |\n", + "| 58 | 100 | 500 | 0.7 | 5.00 | 0.21 | 0.76 ( 0.01 ) | 6.98 ( 0.58 ) | 3.65 ( 0.08 ) | 8.33 | 0.56 | 0.76 | 6.98 | 3.65 |\n", + "| 59 | 500 | 500 | 0.7 | 1.00 | 0.20 | 0.88 ( 0 ) | 22.04 ( 0.74 ) | 0.14 ( 0.04 ) | 26.90 | 0.76 | 0.88 | 22.04 | 0.14 |\n", + "| 60 | 1000 | 500 | 0.7 | 0.50 | 0.33 | 0.89 ( 0 ) | 13.15 ( 0.38 ) | 0 ( 0 ) | 18.15 | 0.65 | 0.89 | 13.15 | 0.00 |\n", + "| 61 | 50 | 1000 | 0.7 | 20.00 | 0.10 | 0.66 ( 0.01 ) | 8.82 ( 0.28 ) | 4.72 ( 0.05 ) | 9.10 | 0.85 | 0.66 | 8.82 | 4.72 |\n", + "| 62 | 100 | 1000 | 0.7 | 10.00 | 0.18 | 0.76 ( 0.01 ) | 6.93 ( 0.59 ) | 4 ( 0.08 ) | 7.93 | 0.62 | 0.76 | 6.93 | 4.00 |\n", + "| 63 | 500 | 1000 | 0.7 | 2.00 | 0.16 | 0.87 ( 0 ) | 29.07 ( 1 ) | 0.16 ( 0.04 ) | 33.91 | 0.81 | 0.87 | 29.07 | 0.16 |\n", + "| 64 | 1000 | 1000 | 0.7 | 1.00 | 0.22 | 0.89 ( 0 ) | 21.8 ( 0.63 ) | 0 ( 0 ) | 26.80 | 0.76 | 0.89 | 21.80 | 0.00 |\n", + "| 65 | 50 | 50 | 0.9 | 1.00 | 0.30 | 0.69 ( 0.01 ) | 2.9 ( 0.2 ) | 4.22 ( 0.09 ) | 3.68 | 0.41 | 0.69 | 2.90 | 4.22 |\n", + "| 66 | 100 | 50 | 0.9 | 0.50 | 0.37 | 0.76 ( 0.01 ) | 3.93 ( 0.21 ) | 2.74 ( 0.11 ) | 6.19 | 0.41 | 0.76 | 3.93 | 2.74 |\n", + "| 67 | 500 | 50 | 0.9 | 0.10 | 0.57 | 0.83 ( 0 ) | 3.65 ( 0.16 ) | 0.56 ( 0.08 ) | 8.09 | 0.31 | 0.83 | 3.65 | 0.56 |\n", + "| 68 | 1000 | 50 | 0.9 | 0.05 | 0.76 | 0.83 ( 0 ) | 2.41 ( 0.12 ) | 0.23 ( 0.04 ) | 7.18 | 0.18 | 0.83 | 2.41 | 0.23 |\n", + "| 69 | 50 | 100 | 0.9 | 2.00 | 0.26 | 0.7 ( 0.01 ) | 3.29 ( 0.23 ) | 4.29 ( 0.09 ) | 4.00 | 0.45 | 0.70 | 3.29 | 4.29 |\n", + "| 70 | 100 | 100 | 0.9 | 1.00 | 0.32 | 0.76 ( 0.01 ) | 4.77 ( 0.33 ) | 3.26 ( 0.09 ) | 6.51 | 0.46 | 0.76 | 4.77 | 3.26 |\n", + "| 71 | 500 | 100 | 0.9 | 0.20 | 0.45 | 0.82 ( 0 ) | 5.65 ( 0.21 ) | 0.92 ( 0.09 ) | 9.73 | 0.45 | 0.82 | 5.65 | 0.92 |\n", + "| 72 | 1000 | 100 | 0.9 | 0.10 | 0.63 | 0.83 ( 0 ) | 3.87 ( 0.18 ) | 0.24 ( 0.05 ) | 8.63 | 0.3 | 0.83 | 3.87 | 0.24 |\n", + "| 73 | 50 | 500 | 0.9 | 10.00 | 0.15 | 0.66 ( 0.01 ) | 5.8 ( 0.24 ) | 4.65 ( 0.07 ) | 6.15 | 0.75 | 0.66 | 5.80 | 4.65 |\n", + "| 74 | 100 | 500 | 0.9 | 5.00 | 0.21 | 0.7 ( 0.01 ) | 5.55 ( 0.55 ) | 4.14 ( 0.09 ) | 6.41 | 0.51 | 0.70 | 5.55 | 4.14 |\n", + "| 75 | 500 | 500 | 0.9 | 1.00 | 0.19 | 0.81 ( 0 ) | 15.93 ( 0.73 ) | 1.42 ( 0.1 ) | 19.51 | 0.73 | 0.81 | 15.93 | 1.42 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.50 | 0.31 | 0.83 ( 0 ) | 11.96 ( 0.46 ) | 0.42 ( 0.06 ) | 16.54 | 0.63 | 0.83 | 11.96 | 0.42 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.00 | 0.08 | 0.66 ( 0.01 ) | 8.02 ( 0.28 ) | 4.9 ( 0.07 ) | 8.12 | 0.85 | 0.66 | 8.02 | 4.90 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.00 | 0.18 | 0.69 ( 0.01 ) | 5.85 ( 0.58 ) | 4.37 ( 0.07 ) | 6.48 | 0.61 | 0.69 | 5.85 | 4.37 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.00 | 0.16 | 0.8 ( 0 ) | 18.7 ( 0.93 ) | 1.88 ( 0.1 ) | 21.82 | 0.77 | 0.80 | 18.70 | 1.88 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.00 | 0.21 | 0.83 ( 0 ) | 20.07 ( 0.72 ) | 0.41 ( 0.05 ) | 24.66 | 0.75 | 0.83 | 20.07 | 0.41 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "1 50 50 0.1 1.00 0.32 0.78 ( 0.01 ) 3.65 ( 0.23 ) 2.83 ( 0.11 )\n", + "2 100 50 0.1 0.50 0.34 0.85 ( 0.01 ) 7.35 ( 0.34 ) 0.68 ( 0.09 )\n", + "3 500 50 0.1 0.10 0.55 0.92 ( 0 ) 4.99 ( 0.22 ) 0 ( 0 ) \n", + "4 1000 50 0.1 0.05 0.78 0.93 ( 0 ) 2.42 ( 0.12 ) 0 ( 0 ) \n", + "5 50 100 0.1 2.00 0.26 0.74 ( 0.01 ) 4.65 ( 0.29 ) 2.93 ( 0.12 )\n", + "6 100 100 0.1 1.00 0.33 0.85 ( 0.01 ) 8.11 ( 0.41 ) 0.86 ( 0.09 )\n", + "7 500 100 0.1 0.20 0.40 0.92 ( 0 ) 8.63 ( 0.29 ) 0 ( 0 ) \n", + "8 1000 100 0.1 0.10 0.64 0.92 ( 0 ) 4.02 ( 0.18 ) 0 ( 0 ) \n", + "9 50 500 0.1 10.00 0.12 0.71 ( 0.01 ) 8.29 ( 0.25 ) 3.89 ( 0.1 ) \n", + "10 100 500 0.1 5.00 0.24 0.8 ( 0.01 ) 8.84 ( 0.61 ) 2.19 ( 0.12 )\n", + "11 500 500 0.1 1.00 0.21 0.92 ( 0 ) 22.86 ( 0.75 ) 0 ( 0 ) \n", + "12 1000 500 0.1 0.50 0.33 0.93 ( 0 ) 12.73 ( 0.35 ) 0 ( 0 ) \n", + "13 50 1000 0.1 20.00 0.09 0.68 ( 0.01 ) 10.35 ( 0.33 ) 4.14 ( 0.09 )\n", + "14 100 1000 0.1 10.00 0.19 0.77 ( 0.01 ) 10.84 ( 0.75 ) 2.46 ( 0.1 ) \n", + "15 500 1000 0.1 2.00 0.16 0.92 ( 0 ) 30.83 ( 1.05 ) 0 ( 0 ) \n", + "16 1000 1000 0.1 1.00 0.23 0.93 ( 0 ) 20.39 ( 0.59 ) 0 ( 0 ) \n", + "17 50 50 0.3 1.00 0.28 0.75 ( 0.01 ) 3.69 ( 0.22 ) 3.04 ( 0.1 ) \n", + "18 100 50 0.3 0.50 0.32 0.84 ( 0.01 ) 7.11 ( 0.33 ) 0.93 ( 0.1 ) \n", + "19 500 50 0.3 0.10 0.51 0.92 ( 0 ) 5.67 ( 0.22 ) 0 ( 0 ) \n", + "20 1000 50 0.3 0.05 0.78 0.92 ( 0 ) 2.48 ( 0.13 ) 0 ( 0 ) \n", + "21 50 100 0.3 2.00 0.26 0.75 ( 0.01 ) 4.41 ( 0.27 ) 3.47 ( 0.09 )\n", + "22 100 100 0.3 1.00 0.28 0.82 ( 0.01 ) 8.16 ( 0.53 ) 1.46 ( 0.11 )\n", + "23 500 100 0.3 0.20 0.41 0.92 ( 0 ) 8.48 ( 0.34 ) 0 ( 0 ) \n", + "24 1000 100 0.3 0.10 0.67 0.92 ( 0 ) 3.71 ( 0.15 ) 0 ( 0 ) \n", + "25 50 500 0.3 10.00 0.13 0.69 ( 0.01 ) 7.94 ( 0.3 ) 4.11 ( 0.08 )\n", + "26 100 500 0.3 5.00 0.20 0.78 ( 0.01 ) 10.16 ( 0.68 ) 2.49 ( 0.11 )\n", + "27 500 500 0.3 1.00 0.20 0.91 ( 0 ) 23.65 ( 0.7 ) 0 ( 0 ) \n", + "28 1000 500 0.3 0.50 0.34 0.92 ( 0 ) 12.28 ( 0.34 ) 0 ( 0 ) \n", + "29 50 1000 0.3 20.00 0.10 0.68 ( 0.01 ) 9.77 ( 0.31 ) 4.3 ( 0.06 ) \n", + "30 100 1000 0.3 10.00 0.17 0.77 ( 0.01 ) 10.68 ( 0.8 ) 3.02 ( 0.11 )\n", + "⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ \n", + "51 500 50 0.7 0.10 0.57 0.89 ( 0 ) 4.61 ( 0.17 ) 0.04 ( 0.02 )\n", + "52 1000 50 0.7 0.05 0.74 0.89 ( 0 ) 2.8 ( 0.15 ) 0 ( 0 ) \n", + "53 50 100 0.7 2.00 0.24 0.71 ( 0.01 ) 4.31 ( 0.28 ) 4.05 ( 0.09 )\n", + "54 100 100 0.7 1.00 0.27 0.79 ( 0.01 ) 6.34 ( 0.4 ) 2.67 ( 0.12 )\n", + "55 500 100 0.7 0.20 0.43 0.89 ( 0 ) 7.92 ( 0.24 ) 0.04 ( 0.02 )\n", + "56 1000 100 0.7 0.10 0.66 0.9 ( 0 ) 3.85 ( 0.16 ) 0 ( 0 ) \n", + "57 50 500 0.7 10.00 0.14 0.7 ( 0.01 ) 6.5 ( 0.24 ) 4.63 ( 0.06 )\n", + "58 100 500 0.7 5.00 0.21 0.76 ( 0.01 ) 6.98 ( 0.58 ) 3.65 ( 0.08 )\n", + "59 500 500 0.7 1.00 0.20 0.88 ( 0 ) 22.04 ( 0.74 ) 0.14 ( 0.04 )\n", + "60 1000 500 0.7 0.50 0.33 0.89 ( 0 ) 13.15 ( 0.38 ) 0 ( 0 ) \n", + "61 50 1000 0.7 20.00 0.10 0.66 ( 0.01 ) 8.82 ( 0.28 ) 4.72 ( 0.05 )\n", + "62 100 1000 0.7 10.00 0.18 0.76 ( 0.01 ) 6.93 ( 0.59 ) 4 ( 0.08 ) \n", + "63 500 1000 0.7 2.00 0.16 0.87 ( 0 ) 29.07 ( 1 ) 0.16 ( 0.04 )\n", + "64 1000 1000 0.7 1.00 0.22 0.89 ( 0 ) 21.8 ( 0.63 ) 0 ( 0 ) \n", + "65 50 50 0.9 1.00 0.30 0.69 ( 0.01 ) 2.9 ( 0.2 ) 4.22 ( 0.09 )\n", + "66 100 50 0.9 0.50 0.37 0.76 ( 0.01 ) 3.93 ( 0.21 ) 2.74 ( 0.11 )\n", + "67 500 50 0.9 0.10 0.57 0.83 ( 0 ) 3.65 ( 0.16 ) 0.56 ( 0.08 )\n", + "68 1000 50 0.9 0.05 0.76 0.83 ( 0 ) 2.41 ( 0.12 ) 0.23 ( 0.04 )\n", + "69 50 100 0.9 2.00 0.26 0.7 ( 0.01 ) 3.29 ( 0.23 ) 4.29 ( 0.09 )\n", + "70 100 100 0.9 1.00 0.32 0.76 ( 0.01 ) 4.77 ( 0.33 ) 3.26 ( 0.09 )\n", + "71 500 100 0.9 0.20 0.45 0.82 ( 0 ) 5.65 ( 0.21 ) 0.92 ( 0.09 )\n", + "72 1000 100 0.9 0.10 0.63 0.83 ( 0 ) 3.87 ( 0.18 ) 0.24 ( 0.05 )\n", + "73 50 500 0.9 10.00 0.15 0.66 ( 0.01 ) 5.8 ( 0.24 ) 4.65 ( 0.07 )\n", + "74 100 500 0.9 5.00 0.21 0.7 ( 0.01 ) 5.55 ( 0.55 ) 4.14 ( 0.09 )\n", + "75 500 500 0.9 1.00 0.19 0.81 ( 0 ) 15.93 ( 0.73 ) 1.42 ( 0.1 ) \n", + "76 1000 500 0.9 0.50 0.31 0.83 ( 0 ) 11.96 ( 0.46 ) 0.42 ( 0.06 )\n", + "77 50 1000 0.9 20.00 0.08 0.66 ( 0.01 ) 8.02 ( 0.28 ) 4.9 ( 0.07 ) \n", + "78 100 1000 0.9 10.00 0.18 0.69 ( 0.01 ) 5.85 ( 0.58 ) 4.37 ( 0.07 )\n", + "79 500 1000 0.9 2.00 0.16 0.8 ( 0 ) 18.7 ( 0.93 ) 1.88 ( 0.1 ) \n", + "80 1000 1000 0.9 1.00 0.21 0.83 ( 0 ) 20.07 ( 0.72 ) 0.41 ( 0.05 )\n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "1 5.82 0.39 0.78 3.65 2.83 \n", + "2 11.67 0.5 0.85 7.35 0.68 \n", + "3 9.99 0.37 0.92 4.99 0.00 \n", + "4 7.42 0.17 0.93 2.42 0.00 \n", + "5 6.72 0.48 0.74 4.65 2.93 \n", + "6 12.25 0.52 0.85 8.11 0.86 \n", + "7 13.63 0.54 0.92 8.63 0.00 \n", + "8 9.02 0.31 0.92 4.02 0.00 \n", + "9 9.40 0.77 0.71 8.29 3.89 \n", + "10 11.65 0.57 0.80 8.84 2.19 \n", + "11 27.86 0.77 0.92 22.86 0.00 \n", + "12 17.73 0.65 0.93 12.73 0.00 \n", + "13 11.21 0.82 0.68 10.35 4.14 \n", + "14 13.38 0.63 0.77 10.84 2.46 \n", + "15 35.83 0.81 0.92 30.83 0.00 \n", + "16 25.39 0.75 0.93 20.39 0.00 \n", + "17 5.65 0.4 0.75 3.69 3.04 \n", + "18 11.18 0.5 0.84 7.11 0.93 \n", + "19 10.67 0.41 0.92 5.67 0.00 \n", + "20 7.48 0.18 0.92 2.48 0.00 \n", + "21 5.94 0.49 0.75 4.41 3.47 \n", + "22 11.70 0.52 0.82 8.16 1.46 \n", + "23 13.48 0.53 0.92 8.48 0.00 \n", + "24 8.71 0.29 0.92 3.71 0.00 \n", + "25 8.83 0.77 0.69 7.94 4.11 \n", + "26 12.67 0.63 0.78 10.16 2.49 \n", + "27 28.65 0.78 0.91 23.65 0.00 \n", + "28 17.28 0.64 0.92 12.28 0.00 \n", + "29 10.47 0.83 0.68 9.77 4.30 \n", + "30 12.66 0.67 0.77 10.68 3.02 \n", + "⋮ ⋮ ⋮ ⋮ ⋮ ⋮ \n", + "51 9.57 0.36 0.89 4.61 0.04 \n", + "52 7.80 0.21 0.89 2.80 0.00 \n", + "53 5.26 0.55 0.71 4.31 4.05 \n", + "54 8.67 0.53 0.79 6.34 2.67 \n", + "55 12.88 0.52 0.89 7.92 0.04 \n", + "56 8.85 0.3 0.90 3.85 0.00 \n", + "57 6.87 0.77 0.70 6.50 4.63 \n", + "58 8.33 0.56 0.76 6.98 3.65 \n", + "59 26.90 0.76 0.88 22.04 0.14 \n", + "60 18.15 0.65 0.89 13.15 0.00 \n", + "61 9.10 0.85 0.66 8.82 4.72 \n", + "62 7.93 0.62 0.76 6.93 4.00 \n", + "63 33.91 0.81 0.87 29.07 0.16 \n", + "64 26.80 0.76 0.89 21.80 0.00 \n", + "65 3.68 0.41 0.69 2.90 4.22 \n", + "66 6.19 0.41 0.76 3.93 2.74 \n", + "67 8.09 0.31 0.83 3.65 0.56 \n", + "68 7.18 0.18 0.83 2.41 0.23 \n", + "69 4.00 0.45 0.70 3.29 4.29 \n", + "70 6.51 0.46 0.76 4.77 3.26 \n", + "71 9.73 0.45 0.82 5.65 0.92 \n", + "72 8.63 0.3 0.83 3.87 0.24 \n", + "73 6.15 0.75 0.66 5.80 4.65 \n", + "74 6.41 0.51 0.70 5.55 4.14 \n", + "75 19.51 0.73 0.81 15.93 1.42 \n", + "76 16.54 0.63 0.83 11.96 0.42 \n", + "77 8.12 0.85 0.66 8.02 4.90 \n", + "78 6.48 0.61 0.69 5.85 4.37 \n", + "79 21.82 0.77 0.80 18.70 1.88 \n", + "80 24.66 0.75 0.83 20.07 0.41 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_toe\n", + "\n", + "## export\n", + "write.table(result.table_toe, '../results_summary_bin/sim_toe_lasso_binary.txt', \n", + " sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_bin/.ipynb_checkpoints/1.2_sim_toe_elnet_binary_update-checkpoint.ipynb b/simulations/notebooks_sim_bin/.ipynb_checkpoints/1.2_sim_toe_elnet_binary_update-checkpoint.ipynb new file mode 100644 index 0000000..b011e9c --- /dev/null +++ b/simulations/notebooks_sim_bin/.ipynb_checkpoints/1.2_sim_toe_elnet_binary_update-checkpoint.ipynb @@ -0,0 +1,973 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize elastic net results on Toeplitz Simulation Scenarios for binary outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "rou.list = seq(0.1, 0.9, 0.2)\n", + "\n", + "files = NULL\n", + "for (rou in rou.list){\n", + " for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_toeplitz_corr', rou, paste('P', p, 'N', n, sep='_'), '.RData', sep=''))\n", + " }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "80" + ], + "text/latex": [ + "80" + ], + "text/markdown": [ + "80" + ], + "text/plain": [ + "[1] 80" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "length(files)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1] \"indx: 1\"\n", + "[1] \"indx: 2\"\n", + "[1] \"indx: 3\"\n", + "[1] \"indx: 4\"\n", + "[1] \"indx: 5\"\n", + "[1] \"indx: 6\"\n", + "[1] \"indx: 7\"\n", + "[1] \"indx: 8\"\n", + "[1] \"indx: 9\"\n", + "[1] \"indx: 10\"\n", + "[1] \"indx: 11\"\n", + "[1] \"indx: 12\"\n", + "[1] \"indx: 13\"\n", + "[1] \"indx: 14\"\n", + "[1] \"indx: 15\"\n", + "[1] \"indx: 16\"\n", + "[1] \"indx: 17\"\n", + "[1] \"indx: 18\"\n", + "[1] \"indx: 19\"\n", + "[1] \"indx: 20\"\n", + "[1] \"indx: 21\"\n", + "[1] \"indx: 22\"\n", + "[1] \"indx: 23\"\n", + "[1] \"indx: 24\"\n", + "[1] \"indx: 25\"\n", + "[1] \"indx: 26\"\n", + "[1] \"indx: 27\"\n", + "[1] \"indx: 28\"\n", + "[1] \"indx: 29\"\n", + "[1] \"indx: 30\"\n", + "[1] \"indx: 31\"\n", + "[1] \"indx: 32\"\n", + "[1] \"indx: 33\"\n", + "[1] \"indx: 34\"\n", + "[1] \"indx: 35\"\n", + "[1] \"indx: 36\"\n", + "[1] \"indx: 37\"\n", + "[1] \"indx: 38\"\n", + "[1] \"indx: 39\"\n", + "[1] \"indx: 40\"\n", + "[1] \"indx: 41\"\n", + "[1] \"indx: 42\"\n", + "[1] \"indx: 43\"\n", + "[1] \"indx: 44\"\n", + "[1] \"indx: 45\"\n", + "[1] \"indx: 46\"\n", + "[1] \"indx: 47\"\n", + "[1] \"indx: 48\"\n", + "[1] \"indx: 49\"\n", + "[1] \"indx: 50\"\n", + "[1] \"indx: 51\"\n", + "[1] \"indx: 52\"\n", + "[1] \"indx: 53\"\n", + "[1] \"indx: 54\"\n", + "[1] \"indx: 55\"\n", + "[1] \"indx: 56\"\n", + "[1] \"indx: 57\"\n", + "[1] \"indx: 58\"\n", + "[1] \"indx: 59\"\n", + "[1] \"indx: 60\"\n", + "[1] \"indx: 61\"\n", + "[1] \"indx: 62\"\n", + "[1] \"indx: 63\"\n", + "[1] \"indx: 64\"\n", + "[1] \"indx: 65\"\n", + "[1] \"indx: 66\"\n", + "[1] \"indx: 67\"\n", + "[1] \"indx: 68\"\n", + "[1] \"indx: 69\"\n", + "[1] \"indx: 70\"\n", + "[1] \"indx: 71\"\n", + "[1] \"indx: 72\"\n", + "[1] \"indx: 73\"\n", + "[1] \"indx: 74\"\n", + "[1] \"indx: 75\"\n", + "[1] \"indx: 76\"\n", + "[1] \"indx: 77\"\n", + "[1] \"indx: 78\"\n", + "[1] \"indx: 79\"\n", + "[1] \"indx: 80\"\n" + ] + } + ], + "source": [ + "avg_FDR = NULL\n", + "table_toe = NULL\n", + "tmp_num_select = rep(0, length(files))\n", + "for (i in 1:length(files)){\n", + " print(paste0('indx: ', i))\n", + " load(paste0(dir, '/binary_update/toe_Elnet_binary_', i, '.RData')) \n", + " \n", + " table_toe = rbind(table_toe, results_toe_elnet[c('n', 'p', 'rou', 'FP', 'FN', 'ROC', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_toe_elnet$Stab.table))\n", + " \n", + " # calculate FDR\n", + " load(file_name, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_toe_elnet$Stab.table\n", + " FDR = NULL # false positive rate\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}\n", + "table_toe = as.data.frame(table_toe)\n", + "table_toe$num_select = tmp_num_select\n", + "table_toe$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
150500.113.02 ( 1.02 )1.51 ( 0.11 )0.77 ( 0.01 )0.1316.510.63
2100500.110.71 ( 0.62 )0.56 ( 0.07 )0.85 ( 0.01 )0.2415.150.57
3500500.17.43 ( 0.6 )0.02 ( 0.01 )0.92 ( 0 )0.4112.410.42
41000500.17.82 ( 0.76 )0 ( 0 )0.92 ( 0 )0.3912.820.40
5501000.121.55 ( 1.94 )1.64 ( 0.11 )0.73 ( 0.01 )0.0924.910.73
61001000.115.59 ( 1.32 )0.84 ( 0.1 )0.83 ( 0.01 )0.1819.750.62
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 13.02 ( 1.02 ) & 1.51 ( 0.11 ) & 0.77 ( 0.01 ) & 0.13 & 16.51 & 0.63\\\\\n", + "\t2 & 100 & 50 & 0.1 & 10.71 ( 0.62 ) & 0.56 ( 0.07 ) & 0.85 ( 0.01 ) & 0.24 & 15.15 & 0.57\\\\\n", + "\t3 & 500 & 50 & 0.1 & 7.43 ( 0.6 ) & 0.02 ( 0.01 ) & 0.92 ( 0 ) & 0.41 & 12.41 & 0.42\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 7.82 ( 0.76 ) & 0 ( 0 ) & 0.92 ( 0 ) & 0.39 & 12.82 & 0.40\\\\\n", + "\t5 & 50 & 100 & 0.1 & 21.55 ( 1.94 ) & 1.64 ( 0.11 ) & 0.73 ( 0.01 ) & 0.09 & 24.91 & 0.73\\\\\n", + "\t6 & 100 & 100 & 0.1 & 15.59 ( 1.32 ) & 0.84 ( 0.1 ) & 0.83 ( 0.01 ) & 0.18 & 19.75 & 0.62\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 13.02 ( 1.02 ) | 1.51 ( 0.11 ) | 0.77 ( 0.01 ) | 0.13 | 16.51 | 0.63 |\n", + "| 2 | 100 | 50 | 0.1 | 10.71 ( 0.62 ) | 0.56 ( 0.07 ) | 0.85 ( 0.01 ) | 0.24 | 15.15 | 0.57 |\n", + "| 3 | 500 | 50 | 0.1 | 7.43 ( 0.6 ) | 0.02 ( 0.01 ) | 0.92 ( 0 ) | 0.41 | 12.41 | 0.42 |\n", + "| 4 | 1000 | 50 | 0.1 | 7.82 ( 0.76 ) | 0 ( 0 ) | 0.92 ( 0 ) | 0.39 | 12.82 | 0.40 |\n", + "| 5 | 50 | 100 | 0.1 | 21.55 ( 1.94 ) | 1.64 ( 0.11 ) | 0.73 ( 0.01 ) | 0.09 | 24.91 | 0.73 |\n", + "| 6 | 100 | 100 | 0.1 | 15.59 ( 1.32 ) | 0.84 ( 0.1 ) | 0.83 ( 0.01 ) | 0.18 | 19.75 | 0.62 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select FDR \n", + "1 50 50 0.1 13.02 ( 1.02 ) 1.51 ( 0.11 ) 0.77 ( 0.01 ) 0.13 16.51 0.63\n", + "2 100 50 0.1 10.71 ( 0.62 ) 0.56 ( 0.07 ) 0.85 ( 0.01 ) 0.24 15.15 0.57\n", + "3 500 50 0.1 7.43 ( 0.6 ) 0.02 ( 0.01 ) 0.92 ( 0 ) 0.41 12.41 0.42\n", + "4 1000 50 0.1 7.82 ( 0.76 ) 0 ( 0 ) 0.92 ( 0 ) 0.39 12.82 0.40\n", + "5 50 100 0.1 21.55 ( 1.94 ) 1.64 ( 0.11 ) 0.73 ( 0.01 ) 0.09 24.91 0.73\n", + "6 100 100 0.1 15.59 ( 1.32 ) 0.84 ( 0.1 ) 0.83 ( 0.01 ) 0.18 19.75 0.62" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
755005000.925.68 ( 1.61 )1.07 ( 0.11 )0.81 ( 0 )0.1429.610.76
7610005000.923.49 ( 1.26 )0.15 ( 0.05 )0.83 ( 0 )0.2128.340.75
775010000.949.08 ( 6.86 )4.29 ( 0.09 )0.65 ( 0.01 )0.0249.790.93
7810010000.932.99 ( 5.22 )3.81 ( 0.09 )0.66 ( 0.01 )0.0534.180.80
7950010000.930.91 ( 2.22 )1.52 ( 0.12 )0.8 ( 0 )0.1134.390.78
80100010000.935.66 ( 1.98 )0.23 ( 0.06 )0.83 ( 0 )0.1440.430.82
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 25.68 ( 1.61 ) & 1.07 ( 0.11 ) & 0.81 ( 0 ) & 0.14 & 29.61 & 0.76\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 23.49 ( 1.26 ) & 0.15 ( 0.05 ) & 0.83 ( 0 ) & 0.21 & 28.34 & 0.75\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 49.08 ( 6.86 ) & 4.29 ( 0.09 ) & 0.65 ( 0.01 ) & 0.02 & 49.79 & 0.93\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 32.99 ( 5.22 ) & 3.81 ( 0.09 ) & 0.66 ( 0.01 ) & 0.05 & 34.18 & 0.80\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 30.91 ( 2.22 ) & 1.52 ( 0.12 ) & 0.8 ( 0 ) & 0.11 & 34.39 & 0.78\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 35.66 ( 1.98 ) & 0.23 ( 0.06 ) & 0.83 ( 0 ) & 0.14 & 40.43 & 0.82\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 25.68 ( 1.61 ) | 1.07 ( 0.11 ) | 0.81 ( 0 ) | 0.14 | 29.61 | 0.76 |\n", + "| 76 | 1000 | 500 | 0.9 | 23.49 ( 1.26 ) | 0.15 ( 0.05 ) | 0.83 ( 0 ) | 0.21 | 28.34 | 0.75 |\n", + "| 77 | 50 | 1000 | 0.9 | 49.08 ( 6.86 ) | 4.29 ( 0.09 ) | 0.65 ( 0.01 ) | 0.02 | 49.79 | 0.93 |\n", + "| 78 | 100 | 1000 | 0.9 | 32.99 ( 5.22 ) | 3.81 ( 0.09 ) | 0.66 ( 0.01 ) | 0.05 | 34.18 | 0.80 |\n", + "| 79 | 500 | 1000 | 0.9 | 30.91 ( 2.22 ) | 1.52 ( 0.12 ) | 0.8 ( 0 ) | 0.11 | 34.39 | 0.78 |\n", + "| 80 | 1000 | 1000 | 0.9 | 35.66 ( 1.98 ) | 0.23 ( 0.06 ) | 0.83 ( 0 ) | 0.14 | 40.43 | 0.82 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select\n", + "75 500 500 0.9 25.68 ( 1.61 ) 1.07 ( 0.11 ) 0.81 ( 0 ) 0.14 29.61 \n", + "76 1000 500 0.9 23.49 ( 1.26 ) 0.15 ( 0.05 ) 0.83 ( 0 ) 0.21 28.34 \n", + "77 50 1000 0.9 49.08 ( 6.86 ) 4.29 ( 0.09 ) 0.65 ( 0.01 ) 0.02 49.79 \n", + "78 100 1000 0.9 32.99 ( 5.22 ) 3.81 ( 0.09 ) 0.66 ( 0.01 ) 0.05 34.18 \n", + "79 500 1000 0.9 30.91 ( 2.22 ) 1.52 ( 0.12 ) 0.8 ( 0 ) 0.11 34.39 \n", + "80 1000 1000 0.9 35.66 ( 1.98 ) 0.23 ( 0.06 ) 0.83 ( 0 ) 0.14 40.43 \n", + " FDR \n", + "75 0.76\n", + "76 0.75\n", + "77 0.93\n", + "78 0.80\n", + "79 0.78\n", + "80 0.82" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_toe <- apply(table_toe,2,as.character)\n", + "rownames(result.table_toe) = rownames(table_toe)\n", + "result.table_toe = as.data.frame(result.table_toe)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_toe$n = tidyr::extract_numeric(result.table_toe$n)\n", + "result.table_toe$p = tidyr::extract_numeric(result.table_toe$p)\n", + "result.table_toe$ratio = result.table_toe$p / result.table_toe$n\n", + "\n", + "result.table_toe = result.table_toe[c('n', 'p', 'rou', 'ratio', 'Stab', 'ROC', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_toe)[1:4] = c('N', 'P', 'Corr', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_toe$Stab = as.numeric(as.character(result.table_toe$Stab))\n", + "result.table_toe$num_select = as.numeric(as.character(result.table_toe$num_select))\n", + "\n", + "result.table_toe$ROC_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$ROC))\n", + "result.table_toe$FP_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$FP))\n", + "result.table_toe$FN_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$FN))" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "
A data.frame: 0 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
\n" + ], + "text/latex": [ + "A data.frame: 0 × 13\n", + "\\begin{tabular}{lllllllllllll}\n", + " N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 0 × 13\n", + "\n", + "| N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select FDR ROC_mean FP_mean FN_mean" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check whether missing values exists\n", + "result.table_toe[rowSums(is.na(result.table_toe)) > 0,]" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 500.11.000.130.77 ( 0.01 )13.02 ( 1.02 )1.51 ( 0.11 )16.510.630.7713.021.51
2 100 500.10.500.240.85 ( 0.01 )10.71 ( 0.62 )0.56 ( 0.07 )15.150.570.8510.710.56
3 500 500.10.100.410.92 ( 0 ) 7.43 ( 0.6 ) 0.02 ( 0.01 )12.410.420.92 7.430.02
41000 500.10.050.390.92 ( 0 ) 7.82 ( 0.76 ) 0 ( 0 ) 12.820.4 0.92 7.820.00
5 501000.12.000.090.73 ( 0.01 )21.55 ( 1.94 )1.64 ( 0.11 )24.910.730.7321.551.64
6 1001000.11.000.180.83 ( 0.01 )15.59 ( 1.32 )0.84 ( 0.1 ) 19.750.620.8315.590.84
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1.00 & 0.13 & 0.77 ( 0.01 ) & 13.02 ( 1.02 ) & 1.51 ( 0.11 ) & 16.51 & 0.63 & 0.77 & 13.02 & 1.51\\\\\n", + "\t2 & 100 & 50 & 0.1 & 0.50 & 0.24 & 0.85 ( 0.01 ) & 10.71 ( 0.62 ) & 0.56 ( 0.07 ) & 15.15 & 0.57 & 0.85 & 10.71 & 0.56\\\\\n", + "\t3 & 500 & 50 & 0.1 & 0.10 & 0.41 & 0.92 ( 0 ) & 7.43 ( 0.6 ) & 0.02 ( 0.01 ) & 12.41 & 0.42 & 0.92 & 7.43 & 0.02\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 0.05 & 0.39 & 0.92 ( 0 ) & 7.82 ( 0.76 ) & 0 ( 0 ) & 12.82 & 0.4 & 0.92 & 7.82 & 0.00\\\\\n", + "\t5 & 50 & 100 & 0.1 & 2.00 & 0.09 & 0.73 ( 0.01 ) & 21.55 ( 1.94 ) & 1.64 ( 0.11 ) & 24.91 & 0.73 & 0.73 & 21.55 & 1.64\\\\\n", + "\t6 & 100 & 100 & 0.1 & 1.00 & 0.18 & 0.83 ( 0.01 ) & 15.59 ( 1.32 ) & 0.84 ( 0.1 ) & 19.75 & 0.62 & 0.83 & 15.59 & 0.84\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1.00 | 0.13 | 0.77 ( 0.01 ) | 13.02 ( 1.02 ) | 1.51 ( 0.11 ) | 16.51 | 0.63 | 0.77 | 13.02 | 1.51 |\n", + "| 2 | 100 | 50 | 0.1 | 0.50 | 0.24 | 0.85 ( 0.01 ) | 10.71 ( 0.62 ) | 0.56 ( 0.07 ) | 15.15 | 0.57 | 0.85 | 10.71 | 0.56 |\n", + "| 3 | 500 | 50 | 0.1 | 0.10 | 0.41 | 0.92 ( 0 ) | 7.43 ( 0.6 ) | 0.02 ( 0.01 ) | 12.41 | 0.42 | 0.92 | 7.43 | 0.02 |\n", + "| 4 | 1000 | 50 | 0.1 | 0.05 | 0.39 | 0.92 ( 0 ) | 7.82 ( 0.76 ) | 0 ( 0 ) | 12.82 | 0.4 | 0.92 | 7.82 | 0.00 |\n", + "| 5 | 50 | 100 | 0.1 | 2.00 | 0.09 | 0.73 ( 0.01 ) | 21.55 ( 1.94 ) | 1.64 ( 0.11 ) | 24.91 | 0.73 | 0.73 | 21.55 | 1.64 |\n", + "| 6 | 100 | 100 | 0.1 | 1.00 | 0.18 | 0.83 ( 0.01 ) | 15.59 ( 1.32 ) | 0.84 ( 0.1 ) | 19.75 | 0.62 | 0.83 | 15.59 | 0.84 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "1 50 50 0.1 1.00 0.13 0.77 ( 0.01 ) 13.02 ( 1.02 ) 1.51 ( 0.11 )\n", + "2 100 50 0.1 0.50 0.24 0.85 ( 0.01 ) 10.71 ( 0.62 ) 0.56 ( 0.07 )\n", + "3 500 50 0.1 0.10 0.41 0.92 ( 0 ) 7.43 ( 0.6 ) 0.02 ( 0.01 )\n", + "4 1000 50 0.1 0.05 0.39 0.92 ( 0 ) 7.82 ( 0.76 ) 0 ( 0 ) \n", + "5 50 100 0.1 2.00 0.09 0.73 ( 0.01 ) 21.55 ( 1.94 ) 1.64 ( 0.11 )\n", + "6 100 100 0.1 1.00 0.18 0.83 ( 0.01 ) 15.59 ( 1.32 ) 0.84 ( 0.1 ) \n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "1 16.51 0.63 0.77 13.02 1.51 \n", + "2 15.15 0.57 0.85 10.71 0.56 \n", + "3 12.41 0.42 0.92 7.43 0.02 \n", + "4 12.82 0.4 0.92 7.82 0.00 \n", + "5 24.91 0.73 0.73 21.55 1.64 \n", + "6 19.75 0.62 0.83 15.59 0.84 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
75 500 5000.9 1.00.140.81 ( 0 ) 25.68 ( 1.61 )1.07 ( 0.11 )29.610.760.8125.681.07
761000 5000.9 0.50.210.83 ( 0 ) 23.49 ( 1.26 )0.15 ( 0.05 )28.340.750.8323.490.15
77 5010000.920.00.020.65 ( 0.01 )49.08 ( 6.86 )4.29 ( 0.09 )49.790.930.6549.084.29
78 10010000.910.00.050.66 ( 0.01 )32.99 ( 5.22 )3.81 ( 0.09 )34.180.8 0.6632.993.81
79 50010000.9 2.00.110.8 ( 0 ) 30.91 ( 2.22 )1.52 ( 0.12 )34.390.780.8030.911.52
80100010000.9 1.00.140.83 ( 0 ) 35.66 ( 1.98 )0.23 ( 0.06 )40.430.820.8335.660.23
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 1.0 & 0.14 & 0.81 ( 0 ) & 25.68 ( 1.61 ) & 1.07 ( 0.11 ) & 29.61 & 0.76 & 0.81 & 25.68 & 1.07\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.5 & 0.21 & 0.83 ( 0 ) & 23.49 ( 1.26 ) & 0.15 ( 0.05 ) & 28.34 & 0.75 & 0.83 & 23.49 & 0.15\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.0 & 0.02 & 0.65 ( 0.01 ) & 49.08 ( 6.86 ) & 4.29 ( 0.09 ) & 49.79 & 0.93 & 0.65 & 49.08 & 4.29\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.0 & 0.05 & 0.66 ( 0.01 ) & 32.99 ( 5.22 ) & 3.81 ( 0.09 ) & 34.18 & 0.8 & 0.66 & 32.99 & 3.81\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.0 & 0.11 & 0.8 ( 0 ) & 30.91 ( 2.22 ) & 1.52 ( 0.12 ) & 34.39 & 0.78 & 0.80 & 30.91 & 1.52\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.0 & 0.14 & 0.83 ( 0 ) & 35.66 ( 1.98 ) & 0.23 ( 0.06 ) & 40.43 & 0.82 & 0.83 & 35.66 & 0.23\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 1.0 | 0.14 | 0.81 ( 0 ) | 25.68 ( 1.61 ) | 1.07 ( 0.11 ) | 29.61 | 0.76 | 0.81 | 25.68 | 1.07 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.5 | 0.21 | 0.83 ( 0 ) | 23.49 ( 1.26 ) | 0.15 ( 0.05 ) | 28.34 | 0.75 | 0.83 | 23.49 | 0.15 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.0 | 0.02 | 0.65 ( 0.01 ) | 49.08 ( 6.86 ) | 4.29 ( 0.09 ) | 49.79 | 0.93 | 0.65 | 49.08 | 4.29 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.0 | 0.05 | 0.66 ( 0.01 ) | 32.99 ( 5.22 ) | 3.81 ( 0.09 ) | 34.18 | 0.8 | 0.66 | 32.99 | 3.81 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.0 | 0.11 | 0.8 ( 0 ) | 30.91 ( 2.22 ) | 1.52 ( 0.12 ) | 34.39 | 0.78 | 0.80 | 30.91 | 1.52 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.0 | 0.14 | 0.83 ( 0 ) | 35.66 ( 1.98 ) | 0.23 ( 0.06 ) | 40.43 | 0.82 | 0.83 | 35.66 | 0.23 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "75 500 500 0.9 1.0 0.14 0.81 ( 0 ) 25.68 ( 1.61 ) 1.07 ( 0.11 )\n", + "76 1000 500 0.9 0.5 0.21 0.83 ( 0 ) 23.49 ( 1.26 ) 0.15 ( 0.05 )\n", + "77 50 1000 0.9 20.0 0.02 0.65 ( 0.01 ) 49.08 ( 6.86 ) 4.29 ( 0.09 )\n", + "78 100 1000 0.9 10.0 0.05 0.66 ( 0.01 ) 32.99 ( 5.22 ) 3.81 ( 0.09 )\n", + "79 500 1000 0.9 2.0 0.11 0.8 ( 0 ) 30.91 ( 2.22 ) 1.52 ( 0.12 )\n", + "80 1000 1000 0.9 1.0 0.14 0.83 ( 0 ) 35.66 ( 1.98 ) 0.23 ( 0.06 )\n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "75 29.61 0.76 0.81 25.68 1.07 \n", + "76 28.34 0.75 0.83 23.49 0.15 \n", + "77 49.79 0.93 0.65 49.08 4.29 \n", + "78 34.18 0.8 0.66 32.99 3.81 \n", + "79 34.39 0.78 0.80 30.91 1.52 \n", + "80 40.43 0.82 0.83 35.66 0.23 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 80 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 500.1 1.000.130.77 ( 0.01 )13.02 ( 1.02 )1.51 ( 0.11 )16.510.630.7713.021.51
2 100 500.1 0.500.240.85 ( 0.01 )10.71 ( 0.62 )0.56 ( 0.07 )15.150.570.8510.710.56
3 500 500.1 0.100.410.92 ( 0 ) 7.43 ( 0.6 ) 0.02 ( 0.01 )12.410.420.92 7.430.02
41000 500.1 0.050.390.92 ( 0 ) 7.82 ( 0.76 ) 0 ( 0 ) 12.820.4 0.92 7.820.00
5 50 1000.1 2.000.090.73 ( 0.01 )21.55 ( 1.94 )1.64 ( 0.11 )24.910.730.7321.551.64
6 100 1000.1 1.000.180.83 ( 0.01 )15.59 ( 1.32 )0.84 ( 0.1 ) 19.750.620.8315.590.84
7 500 1000.1 0.200.320.92 ( 0 ) 11.5 ( 0.9 ) 0 ( 0 ) 16.500.540.9211.500.00
81000 1000.1 0.100.340.92 ( 0 ) 11.02 ( 1.05 )0 ( 0 ) 16.020.490.9211.020.00
9 50 5000.110.000.030.66 ( 0.01 )58.7 ( 5.86 ) 2.64 ( 0.12 )61.060.890.6658.702.64
10 100 5000.1 5.000.140.78 ( 0.01 )19.29 ( 1.92 )1.76 ( 0.1 ) 22.530.680.7819.291.76
11 500 5000.1 1.000.260.91 ( 0 ) 17.05 ( 1.43 )0 ( 0 ) 22.050.620.9117.050.00
121000 5000.1 0.500.290.93 ( 0 ) 15.14 ( 1.39 )0 ( 0 ) 20.140.540.9315.140.00
13 5010000.120.000.020.65 ( 0.01 )85.97 ( 9 ) 3.03 ( 0.13 )87.940.920.6585.973.03
14 10010000.110.000.120.76 ( 0.01 )22.02 ( 1.97 )2.07 ( 0.1 ) 24.950.750.7622.022.07
15 50010000.1 2.000.230.91 ( 0 ) 21.07 ( 1.75 )0 ( 0 ) 26.070.660.9121.070.00
16100010000.1 1.000.240.92 ( 0 ) 19.56 ( 2.29 )0 ( 0 ) 24.560.570.9219.560.00
17 50 500.3 1.000.130.76 ( 0.01 )11.32 ( 0.99 )1.87 ( 0.14 )14.450.590.7611.321.87
18 100 500.3 0.500.180.83 ( 0.01 )12.96 ( 0.86 )0.75 ( 0.09 )17.210.610.8312.960.75
19 500 500.3 0.100.330.91 ( 0 ) 9.89 ( 0.75 ) 0 ( 0 ) 14.890.510.91 9.890.00
201000 500.3 0.050.380.92 ( 0 ) 8.56 ( 0.69 ) 0 ( 0 ) 13.560.440.92 8.560.00
21 50 1000.3 2.000.080.74 ( 0.01 )17.99 ( 1.78 )2.32 ( 0.14 )20.670.720.7417.992.32
22 100 1000.3 1.000.170.82 ( 0.01 )14.36 ( 1.25 )1.36 ( 0.12 )18.000.6 0.8214.361.36
23 500 1000.3 0.200.290.91 ( 0 ) 13.08 ( 1 ) 0 ( 0 ) 18.080.560.9113.080.00
241000 1000.3 0.100.380.92 ( 0 ) 9.67 ( 0.76 ) 0 ( 0 ) 14.670.490.92 9.670.00
25 50 5000.310.000.030.66 ( 0.01 )49.2 ( 5.65 ) 3.15 ( 0.13 )51.050.890.6649.203.15
26 100 5000.3 5.000.110.77 ( 0.01 )23.84 ( 2.37 )2.05 ( 0.11 )26.790.730.7723.842.05
27 500 5000.3 1.000.190.91 ( 0 ) 25.04 ( 1.69 )0 ( 0 ) 30.040.720.9125.040.00
281000 5000.3 0.500.250.92 ( 0 ) 18.51 ( 1.25 )0 ( 0 ) 23.510.660.9218.510.00
29 5010000.320.000.020.67 ( 0.01 )54.74 ( 6.8 ) 3.54 ( 0.12 )56.200.910.6754.743.54
30 10010000.310.000.080.75 ( 0.01 )28.55 ( 5.11 )2.58 ( 0.11 )30.970.750.7528.552.58
51 500 500.7 0.100.310.89 ( 0 ) 11.14 ( 0.74 )0.02 ( 0.02 )16.120.560.8911.140.02
521000 500.7 0.050.370.89 ( 0 ) 9.65 ( 0.77 ) 0 ( 0 ) 14.650.490.89 9.650.00
53 50 1000.7 2.000.080.71 ( 0.01 )17.76 ( 1.65 )2.81 ( 0.14 )19.950.740.7117.762.81
54 100 1000.7 1.000.130.79 ( 0.01 )16.43 ( 1.31 )1.79 ( 0.13 )19.640.680.7916.431.79
55 500 1000.7 0.200.250.89 ( 0 ) 16.01 ( 0.82 )0.03 ( 0.03 )20.980.670.8916.010.03
561000 1000.7 0.100.330.89 ( 0 ) 12.77 ( 0.94 )0 ( 0 ) 17.770.580.8912.770.00
57 50 5000.710.000.030.67 ( 0.01 )43.83 ( 5.17 )3.75 ( 0.12 )45.080.9 0.6743.833.75
58 100 5000.7 5.000.100.74 ( 0.01 )19.1 ( 1.88 ) 3.08 ( 0.1 ) 21.020.730.7419.103.08
59 500 5000.7 1.000.150.87 ( 0 ) 31.23 ( 1.88 )0.17 ( 0.04 )36.060.780.8731.230.17
601000 5000.7 0.500.220.89 ( 0 ) 22.46 ( 1.45 )0 ( 0 ) 27.460.710.8922.460.00
61 5010000.720.000.020.64 ( 0.01 )47.17 ( 5.85 )4.12 ( 0.09 )48.050.920.6447.174.12
62 10010000.710.000.080.75 ( 0.01 )20.86 ( 2.56 )3.59 ( 0.09 )22.270.770.7520.863.59
63 50010000.7 2.000.130.87 ( 0 ) 36.32 ( 2.18 )0.23 ( 0.05 )41.090.810.8736.320.23
64100010000.7 1.000.160.89 ( 0 ) 32.22 ( 2.11 )0.01 ( 0.01 )37.210.8 0.8932.220.01
65 50 500.9 1.000.090.71 ( 0.01 )14.15 ( 1 ) 2.3 ( 0.14 ) 16.850.680.7114.152.30
66 100 500.9 0.500.150.77 ( 0.01 )11.74 ( 0.88 )1.74 ( 0.13 )15.000.640.7711.741.74
67 500 500.9 0.100.270.83 ( 0 ) 12.28 ( 0.9 ) 0.18 ( 0.06 )17.100.570.8312.280.18
681000 500.9 0.050.390.84 ( 0 ) 9.58 ( 0.68 ) 0.01 ( 0.01 )14.570.510.84 9.580.01
69 50 1000.9 2.000.080.7 ( 0.01 ) 15.1 ( 1.65 ) 3.16 ( 0.13 )16.940.7 0.7015.103.16
70 100 1000.9 1.000.150.75 ( 0.01 )14.19 ( 1.38 )2.23 ( 0.13 )16.960.640.7514.192.23
71 500 1000.9 0.200.250.83 ( 0 ) 16.33 ( 1.01 )0.2 ( 0.06 ) 21.130.670.8316.330.20
721000 1000.9 0.100.320.84 ( 0 ) 13.82 ( 1.17 )0.03 ( 0.02 )18.790.6 0.8413.820.03
73 50 5000.910.000.050.66 ( 0.02 )28.64 ( 3.14 )4.13 ( 0.07 )29.510.880.6628.644.13
74 100 5000.9 5.000.070.7 ( 0.01 ) 25.71 ( 4.03 )3.42 ( 0.1 ) 27.290.780.7025.713.42
75 500 5000.9 1.000.140.81 ( 0 ) 25.68 ( 1.61 )1.07 ( 0.11 )29.610.760.8125.681.07
761000 5000.9 0.500.210.83 ( 0 ) 23.49 ( 1.26 )0.15 ( 0.05 )28.340.750.8323.490.15
77 5010000.920.000.020.65 ( 0.01 )49.08 ( 6.86 )4.29 ( 0.09 )49.790.930.6549.084.29
78 10010000.910.000.050.66 ( 0.01 )32.99 ( 5.22 )3.81 ( 0.09 )34.180.8 0.6632.993.81
79 50010000.9 2.000.110.8 ( 0 ) 30.91 ( 2.22 )1.52 ( 0.12 )34.390.780.8030.911.52
80100010000.9 1.000.140.83 ( 0 ) 35.66 ( 1.98 )0.23 ( 0.06 )40.430.820.8335.660.23
\n" + ], + "text/latex": [ + "A data.frame: 80 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1.00 & 0.13 & 0.77 ( 0.01 ) & 13.02 ( 1.02 ) & 1.51 ( 0.11 ) & 16.51 & 0.63 & 0.77 & 13.02 & 1.51\\\\\n", + "\t2 & 100 & 50 & 0.1 & 0.50 & 0.24 & 0.85 ( 0.01 ) & 10.71 ( 0.62 ) & 0.56 ( 0.07 ) & 15.15 & 0.57 & 0.85 & 10.71 & 0.56\\\\\n", + "\t3 & 500 & 50 & 0.1 & 0.10 & 0.41 & 0.92 ( 0 ) & 7.43 ( 0.6 ) & 0.02 ( 0.01 ) & 12.41 & 0.42 & 0.92 & 7.43 & 0.02\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 0.05 & 0.39 & 0.92 ( 0 ) & 7.82 ( 0.76 ) & 0 ( 0 ) & 12.82 & 0.4 & 0.92 & 7.82 & 0.00\\\\\n", + "\t5 & 50 & 100 & 0.1 & 2.00 & 0.09 & 0.73 ( 0.01 ) & 21.55 ( 1.94 ) & 1.64 ( 0.11 ) & 24.91 & 0.73 & 0.73 & 21.55 & 1.64\\\\\n", + "\t6 & 100 & 100 & 0.1 & 1.00 & 0.18 & 0.83 ( 0.01 ) & 15.59 ( 1.32 ) & 0.84 ( 0.1 ) & 19.75 & 0.62 & 0.83 & 15.59 & 0.84\\\\\n", + "\t7 & 500 & 100 & 0.1 & 0.20 & 0.32 & 0.92 ( 0 ) & 11.5 ( 0.9 ) & 0 ( 0 ) & 16.50 & 0.54 & 0.92 & 11.50 & 0.00\\\\\n", + "\t8 & 1000 & 100 & 0.1 & 0.10 & 0.34 & 0.92 ( 0 ) & 11.02 ( 1.05 ) & 0 ( 0 ) & 16.02 & 0.49 & 0.92 & 11.02 & 0.00\\\\\n", + "\t9 & 50 & 500 & 0.1 & 10.00 & 0.03 & 0.66 ( 0.01 ) & 58.7 ( 5.86 ) & 2.64 ( 0.12 ) & 61.06 & 0.89 & 0.66 & 58.70 & 2.64\\\\\n", + "\t10 & 100 & 500 & 0.1 & 5.00 & 0.14 & 0.78 ( 0.01 ) & 19.29 ( 1.92 ) & 1.76 ( 0.1 ) & 22.53 & 0.68 & 0.78 & 19.29 & 1.76\\\\\n", + "\t11 & 500 & 500 & 0.1 & 1.00 & 0.26 & 0.91 ( 0 ) & 17.05 ( 1.43 ) & 0 ( 0 ) & 22.05 & 0.62 & 0.91 & 17.05 & 0.00\\\\\n", + "\t12 & 1000 & 500 & 0.1 & 0.50 & 0.29 & 0.93 ( 0 ) & 15.14 ( 1.39 ) & 0 ( 0 ) & 20.14 & 0.54 & 0.93 & 15.14 & 0.00\\\\\n", + "\t13 & 50 & 1000 & 0.1 & 20.00 & 0.02 & 0.65 ( 0.01 ) & 85.97 ( 9 ) & 3.03 ( 0.13 ) & 87.94 & 0.92 & 0.65 & 85.97 & 3.03\\\\\n", + "\t14 & 100 & 1000 & 0.1 & 10.00 & 0.12 & 0.76 ( 0.01 ) & 22.02 ( 1.97 ) & 2.07 ( 0.1 ) & 24.95 & 0.75 & 0.76 & 22.02 & 2.07\\\\\n", + "\t15 & 500 & 1000 & 0.1 & 2.00 & 0.23 & 0.91 ( 0 ) & 21.07 ( 1.75 ) & 0 ( 0 ) & 26.07 & 0.66 & 0.91 & 21.07 & 0.00\\\\\n", + "\t16 & 1000 & 1000 & 0.1 & 1.00 & 0.24 & 0.92 ( 0 ) & 19.56 ( 2.29 ) & 0 ( 0 ) & 24.56 & 0.57 & 0.92 & 19.56 & 0.00\\\\\n", + "\t17 & 50 & 50 & 0.3 & 1.00 & 0.13 & 0.76 ( 0.01 ) & 11.32 ( 0.99 ) & 1.87 ( 0.14 ) & 14.45 & 0.59 & 0.76 & 11.32 & 1.87\\\\\n", + "\t18 & 100 & 50 & 0.3 & 0.50 & 0.18 & 0.83 ( 0.01 ) & 12.96 ( 0.86 ) & 0.75 ( 0.09 ) & 17.21 & 0.61 & 0.83 & 12.96 & 0.75\\\\\n", + "\t19 & 500 & 50 & 0.3 & 0.10 & 0.33 & 0.91 ( 0 ) & 9.89 ( 0.75 ) & 0 ( 0 ) & 14.89 & 0.51 & 0.91 & 9.89 & 0.00\\\\\n", + "\t20 & 1000 & 50 & 0.3 & 0.05 & 0.38 & 0.92 ( 0 ) & 8.56 ( 0.69 ) & 0 ( 0 ) & 13.56 & 0.44 & 0.92 & 8.56 & 0.00\\\\\n", + "\t21 & 50 & 100 & 0.3 & 2.00 & 0.08 & 0.74 ( 0.01 ) & 17.99 ( 1.78 ) & 2.32 ( 0.14 ) & 20.67 & 0.72 & 0.74 & 17.99 & 2.32\\\\\n", + "\t22 & 100 & 100 & 0.3 & 1.00 & 0.17 & 0.82 ( 0.01 ) & 14.36 ( 1.25 ) & 1.36 ( 0.12 ) & 18.00 & 0.6 & 0.82 & 14.36 & 1.36\\\\\n", + "\t23 & 500 & 100 & 0.3 & 0.20 & 0.29 & 0.91 ( 0 ) & 13.08 ( 1 ) & 0 ( 0 ) & 18.08 & 0.56 & 0.91 & 13.08 & 0.00\\\\\n", + "\t24 & 1000 & 100 & 0.3 & 0.10 & 0.38 & 0.92 ( 0 ) & 9.67 ( 0.76 ) & 0 ( 0 ) & 14.67 & 0.49 & 0.92 & 9.67 & 0.00\\\\\n", + "\t25 & 50 & 500 & 0.3 & 10.00 & 0.03 & 0.66 ( 0.01 ) & 49.2 ( 5.65 ) & 3.15 ( 0.13 ) & 51.05 & 0.89 & 0.66 & 49.20 & 3.15\\\\\n", + "\t26 & 100 & 500 & 0.3 & 5.00 & 0.11 & 0.77 ( 0.01 ) & 23.84 ( 2.37 ) & 2.05 ( 0.11 ) & 26.79 & 0.73 & 0.77 & 23.84 & 2.05\\\\\n", + "\t27 & 500 & 500 & 0.3 & 1.00 & 0.19 & 0.91 ( 0 ) & 25.04 ( 1.69 ) & 0 ( 0 ) & 30.04 & 0.72 & 0.91 & 25.04 & 0.00\\\\\n", + "\t28 & 1000 & 500 & 0.3 & 0.50 & 0.25 & 0.92 ( 0 ) & 18.51 ( 1.25 ) & 0 ( 0 ) & 23.51 & 0.66 & 0.92 & 18.51 & 0.00\\\\\n", + "\t29 & 50 & 1000 & 0.3 & 20.00 & 0.02 & 0.67 ( 0.01 ) & 54.74 ( 6.8 ) & 3.54 ( 0.12 ) & 56.20 & 0.91 & 0.67 & 54.74 & 3.54\\\\\n", + "\t30 & 100 & 1000 & 0.3 & 10.00 & 0.08 & 0.75 ( 0.01 ) & 28.55 ( 5.11 ) & 2.58 ( 0.11 ) & 30.97 & 0.75 & 0.75 & 28.55 & 2.58\\\\\n", + "\t⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮\\\\\n", + "\t51 & 500 & 50 & 0.7 & 0.10 & 0.31 & 0.89 ( 0 ) & 11.14 ( 0.74 ) & 0.02 ( 0.02 ) & 16.12 & 0.56 & 0.89 & 11.14 & 0.02\\\\\n", + "\t52 & 1000 & 50 & 0.7 & 0.05 & 0.37 & 0.89 ( 0 ) & 9.65 ( 0.77 ) & 0 ( 0 ) & 14.65 & 0.49 & 0.89 & 9.65 & 0.00\\\\\n", + "\t53 & 50 & 100 & 0.7 & 2.00 & 0.08 & 0.71 ( 0.01 ) & 17.76 ( 1.65 ) & 2.81 ( 0.14 ) & 19.95 & 0.74 & 0.71 & 17.76 & 2.81\\\\\n", + "\t54 & 100 & 100 & 0.7 & 1.00 & 0.13 & 0.79 ( 0.01 ) & 16.43 ( 1.31 ) & 1.79 ( 0.13 ) & 19.64 & 0.68 & 0.79 & 16.43 & 1.79\\\\\n", + "\t55 & 500 & 100 & 0.7 & 0.20 & 0.25 & 0.89 ( 0 ) & 16.01 ( 0.82 ) & 0.03 ( 0.03 ) & 20.98 & 0.67 & 0.89 & 16.01 & 0.03\\\\\n", + "\t56 & 1000 & 100 & 0.7 & 0.10 & 0.33 & 0.89 ( 0 ) & 12.77 ( 0.94 ) & 0 ( 0 ) & 17.77 & 0.58 & 0.89 & 12.77 & 0.00\\\\\n", + "\t57 & 50 & 500 & 0.7 & 10.00 & 0.03 & 0.67 ( 0.01 ) & 43.83 ( 5.17 ) & 3.75 ( 0.12 ) & 45.08 & 0.9 & 0.67 & 43.83 & 3.75\\\\\n", + "\t58 & 100 & 500 & 0.7 & 5.00 & 0.10 & 0.74 ( 0.01 ) & 19.1 ( 1.88 ) & 3.08 ( 0.1 ) & 21.02 & 0.73 & 0.74 & 19.10 & 3.08\\\\\n", + "\t59 & 500 & 500 & 0.7 & 1.00 & 0.15 & 0.87 ( 0 ) & 31.23 ( 1.88 ) & 0.17 ( 0.04 ) & 36.06 & 0.78 & 0.87 & 31.23 & 0.17\\\\\n", + "\t60 & 1000 & 500 & 0.7 & 0.50 & 0.22 & 0.89 ( 0 ) & 22.46 ( 1.45 ) & 0 ( 0 ) & 27.46 & 0.71 & 0.89 & 22.46 & 0.00\\\\\n", + "\t61 & 50 & 1000 & 0.7 & 20.00 & 0.02 & 0.64 ( 0.01 ) & 47.17 ( 5.85 ) & 4.12 ( 0.09 ) & 48.05 & 0.92 & 0.64 & 47.17 & 4.12\\\\\n", + "\t62 & 100 & 1000 & 0.7 & 10.00 & 0.08 & 0.75 ( 0.01 ) & 20.86 ( 2.56 ) & 3.59 ( 0.09 ) & 22.27 & 0.77 & 0.75 & 20.86 & 3.59\\\\\n", + "\t63 & 500 & 1000 & 0.7 & 2.00 & 0.13 & 0.87 ( 0 ) & 36.32 ( 2.18 ) & 0.23 ( 0.05 ) & 41.09 & 0.81 & 0.87 & 36.32 & 0.23\\\\\n", + "\t64 & 1000 & 1000 & 0.7 & 1.00 & 0.16 & 0.89 ( 0 ) & 32.22 ( 2.11 ) & 0.01 ( 0.01 ) & 37.21 & 0.8 & 0.89 & 32.22 & 0.01\\\\\n", + "\t65 & 50 & 50 & 0.9 & 1.00 & 0.09 & 0.71 ( 0.01 ) & 14.15 ( 1 ) & 2.3 ( 0.14 ) & 16.85 & 0.68 & 0.71 & 14.15 & 2.30\\\\\n", + "\t66 & 100 & 50 & 0.9 & 0.50 & 0.15 & 0.77 ( 0.01 ) & 11.74 ( 0.88 ) & 1.74 ( 0.13 ) & 15.00 & 0.64 & 0.77 & 11.74 & 1.74\\\\\n", + "\t67 & 500 & 50 & 0.9 & 0.10 & 0.27 & 0.83 ( 0 ) & 12.28 ( 0.9 ) & 0.18 ( 0.06 ) & 17.10 & 0.57 & 0.83 & 12.28 & 0.18\\\\\n", + "\t68 & 1000 & 50 & 0.9 & 0.05 & 0.39 & 0.84 ( 0 ) & 9.58 ( 0.68 ) & 0.01 ( 0.01 ) & 14.57 & 0.51 & 0.84 & 9.58 & 0.01\\\\\n", + "\t69 & 50 & 100 & 0.9 & 2.00 & 0.08 & 0.7 ( 0.01 ) & 15.1 ( 1.65 ) & 3.16 ( 0.13 ) & 16.94 & 0.7 & 0.70 & 15.10 & 3.16\\\\\n", + "\t70 & 100 & 100 & 0.9 & 1.00 & 0.15 & 0.75 ( 0.01 ) & 14.19 ( 1.38 ) & 2.23 ( 0.13 ) & 16.96 & 0.64 & 0.75 & 14.19 & 2.23\\\\\n", + "\t71 & 500 & 100 & 0.9 & 0.20 & 0.25 & 0.83 ( 0 ) & 16.33 ( 1.01 ) & 0.2 ( 0.06 ) & 21.13 & 0.67 & 0.83 & 16.33 & 0.20\\\\\n", + "\t72 & 1000 & 100 & 0.9 & 0.10 & 0.32 & 0.84 ( 0 ) & 13.82 ( 1.17 ) & 0.03 ( 0.02 ) & 18.79 & 0.6 & 0.84 & 13.82 & 0.03\\\\\n", + "\t73 & 50 & 500 & 0.9 & 10.00 & 0.05 & 0.66 ( 0.02 ) & 28.64 ( 3.14 ) & 4.13 ( 0.07 ) & 29.51 & 0.88 & 0.66 & 28.64 & 4.13\\\\\n", + "\t74 & 100 & 500 & 0.9 & 5.00 & 0.07 & 0.7 ( 0.01 ) & 25.71 ( 4.03 ) & 3.42 ( 0.1 ) & 27.29 & 0.78 & 0.70 & 25.71 & 3.42\\\\\n", + "\t75 & 500 & 500 & 0.9 & 1.00 & 0.14 & 0.81 ( 0 ) & 25.68 ( 1.61 ) & 1.07 ( 0.11 ) & 29.61 & 0.76 & 0.81 & 25.68 & 1.07\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.50 & 0.21 & 0.83 ( 0 ) & 23.49 ( 1.26 ) & 0.15 ( 0.05 ) & 28.34 & 0.75 & 0.83 & 23.49 & 0.15\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.00 & 0.02 & 0.65 ( 0.01 ) & 49.08 ( 6.86 ) & 4.29 ( 0.09 ) & 49.79 & 0.93 & 0.65 & 49.08 & 4.29\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.00 & 0.05 & 0.66 ( 0.01 ) & 32.99 ( 5.22 ) & 3.81 ( 0.09 ) & 34.18 & 0.8 & 0.66 & 32.99 & 3.81\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.00 & 0.11 & 0.8 ( 0 ) & 30.91 ( 2.22 ) & 1.52 ( 0.12 ) & 34.39 & 0.78 & 0.80 & 30.91 & 1.52\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.00 & 0.14 & 0.83 ( 0 ) & 35.66 ( 1.98 ) & 0.23 ( 0.06 ) & 40.43 & 0.82 & 0.83 & 35.66 & 0.23\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 80 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1.00 | 0.13 | 0.77 ( 0.01 ) | 13.02 ( 1.02 ) | 1.51 ( 0.11 ) | 16.51 | 0.63 | 0.77 | 13.02 | 1.51 |\n", + "| 2 | 100 | 50 | 0.1 | 0.50 | 0.24 | 0.85 ( 0.01 ) | 10.71 ( 0.62 ) | 0.56 ( 0.07 ) | 15.15 | 0.57 | 0.85 | 10.71 | 0.56 |\n", + "| 3 | 500 | 50 | 0.1 | 0.10 | 0.41 | 0.92 ( 0 ) | 7.43 ( 0.6 ) | 0.02 ( 0.01 ) | 12.41 | 0.42 | 0.92 | 7.43 | 0.02 |\n", + "| 4 | 1000 | 50 | 0.1 | 0.05 | 0.39 | 0.92 ( 0 ) | 7.82 ( 0.76 ) | 0 ( 0 ) | 12.82 | 0.4 | 0.92 | 7.82 | 0.00 |\n", + "| 5 | 50 | 100 | 0.1 | 2.00 | 0.09 | 0.73 ( 0.01 ) | 21.55 ( 1.94 ) | 1.64 ( 0.11 ) | 24.91 | 0.73 | 0.73 | 21.55 | 1.64 |\n", + "| 6 | 100 | 100 | 0.1 | 1.00 | 0.18 | 0.83 ( 0.01 ) | 15.59 ( 1.32 ) | 0.84 ( 0.1 ) | 19.75 | 0.62 | 0.83 | 15.59 | 0.84 |\n", + "| 7 | 500 | 100 | 0.1 | 0.20 | 0.32 | 0.92 ( 0 ) | 11.5 ( 0.9 ) | 0 ( 0 ) | 16.50 | 0.54 | 0.92 | 11.50 | 0.00 |\n", + "| 8 | 1000 | 100 | 0.1 | 0.10 | 0.34 | 0.92 ( 0 ) | 11.02 ( 1.05 ) | 0 ( 0 ) | 16.02 | 0.49 | 0.92 | 11.02 | 0.00 |\n", + "| 9 | 50 | 500 | 0.1 | 10.00 | 0.03 | 0.66 ( 0.01 ) | 58.7 ( 5.86 ) | 2.64 ( 0.12 ) | 61.06 | 0.89 | 0.66 | 58.70 | 2.64 |\n", + "| 10 | 100 | 500 | 0.1 | 5.00 | 0.14 | 0.78 ( 0.01 ) | 19.29 ( 1.92 ) | 1.76 ( 0.1 ) | 22.53 | 0.68 | 0.78 | 19.29 | 1.76 |\n", + "| 11 | 500 | 500 | 0.1 | 1.00 | 0.26 | 0.91 ( 0 ) | 17.05 ( 1.43 ) | 0 ( 0 ) | 22.05 | 0.62 | 0.91 | 17.05 | 0.00 |\n", + "| 12 | 1000 | 500 | 0.1 | 0.50 | 0.29 | 0.93 ( 0 ) | 15.14 ( 1.39 ) | 0 ( 0 ) | 20.14 | 0.54 | 0.93 | 15.14 | 0.00 |\n", + "| 13 | 50 | 1000 | 0.1 | 20.00 | 0.02 | 0.65 ( 0.01 ) | 85.97 ( 9 ) | 3.03 ( 0.13 ) | 87.94 | 0.92 | 0.65 | 85.97 | 3.03 |\n", + "| 14 | 100 | 1000 | 0.1 | 10.00 | 0.12 | 0.76 ( 0.01 ) | 22.02 ( 1.97 ) | 2.07 ( 0.1 ) | 24.95 | 0.75 | 0.76 | 22.02 | 2.07 |\n", + "| 15 | 500 | 1000 | 0.1 | 2.00 | 0.23 | 0.91 ( 0 ) | 21.07 ( 1.75 ) | 0 ( 0 ) | 26.07 | 0.66 | 0.91 | 21.07 | 0.00 |\n", + "| 16 | 1000 | 1000 | 0.1 | 1.00 | 0.24 | 0.92 ( 0 ) | 19.56 ( 2.29 ) | 0 ( 0 ) | 24.56 | 0.57 | 0.92 | 19.56 | 0.00 |\n", + "| 17 | 50 | 50 | 0.3 | 1.00 | 0.13 | 0.76 ( 0.01 ) | 11.32 ( 0.99 ) | 1.87 ( 0.14 ) | 14.45 | 0.59 | 0.76 | 11.32 | 1.87 |\n", + "| 18 | 100 | 50 | 0.3 | 0.50 | 0.18 | 0.83 ( 0.01 ) | 12.96 ( 0.86 ) | 0.75 ( 0.09 ) | 17.21 | 0.61 | 0.83 | 12.96 | 0.75 |\n", + "| 19 | 500 | 50 | 0.3 | 0.10 | 0.33 | 0.91 ( 0 ) | 9.89 ( 0.75 ) | 0 ( 0 ) | 14.89 | 0.51 | 0.91 | 9.89 | 0.00 |\n", + "| 20 | 1000 | 50 | 0.3 | 0.05 | 0.38 | 0.92 ( 0 ) | 8.56 ( 0.69 ) | 0 ( 0 ) | 13.56 | 0.44 | 0.92 | 8.56 | 0.00 |\n", + "| 21 | 50 | 100 | 0.3 | 2.00 | 0.08 | 0.74 ( 0.01 ) | 17.99 ( 1.78 ) | 2.32 ( 0.14 ) | 20.67 | 0.72 | 0.74 | 17.99 | 2.32 |\n", + "| 22 | 100 | 100 | 0.3 | 1.00 | 0.17 | 0.82 ( 0.01 ) | 14.36 ( 1.25 ) | 1.36 ( 0.12 ) | 18.00 | 0.6 | 0.82 | 14.36 | 1.36 |\n", + "| 23 | 500 | 100 | 0.3 | 0.20 | 0.29 | 0.91 ( 0 ) | 13.08 ( 1 ) | 0 ( 0 ) | 18.08 | 0.56 | 0.91 | 13.08 | 0.00 |\n", + "| 24 | 1000 | 100 | 0.3 | 0.10 | 0.38 | 0.92 ( 0 ) | 9.67 ( 0.76 ) | 0 ( 0 ) | 14.67 | 0.49 | 0.92 | 9.67 | 0.00 |\n", + "| 25 | 50 | 500 | 0.3 | 10.00 | 0.03 | 0.66 ( 0.01 ) | 49.2 ( 5.65 ) | 3.15 ( 0.13 ) | 51.05 | 0.89 | 0.66 | 49.20 | 3.15 |\n", + "| 26 | 100 | 500 | 0.3 | 5.00 | 0.11 | 0.77 ( 0.01 ) | 23.84 ( 2.37 ) | 2.05 ( 0.11 ) | 26.79 | 0.73 | 0.77 | 23.84 | 2.05 |\n", + "| 27 | 500 | 500 | 0.3 | 1.00 | 0.19 | 0.91 ( 0 ) | 25.04 ( 1.69 ) | 0 ( 0 ) | 30.04 | 0.72 | 0.91 | 25.04 | 0.00 |\n", + "| 28 | 1000 | 500 | 0.3 | 0.50 | 0.25 | 0.92 ( 0 ) | 18.51 ( 1.25 ) | 0 ( 0 ) | 23.51 | 0.66 | 0.92 | 18.51 | 0.00 |\n", + "| 29 | 50 | 1000 | 0.3 | 20.00 | 0.02 | 0.67 ( 0.01 ) | 54.74 ( 6.8 ) | 3.54 ( 0.12 ) | 56.20 | 0.91 | 0.67 | 54.74 | 3.54 |\n", + "| 30 | 100 | 1000 | 0.3 | 10.00 | 0.08 | 0.75 ( 0.01 ) | 28.55 ( 5.11 ) | 2.58 ( 0.11 ) | 30.97 | 0.75 | 0.75 | 28.55 | 2.58 |\n", + "| ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ |\n", + "| 51 | 500 | 50 | 0.7 | 0.10 | 0.31 | 0.89 ( 0 ) | 11.14 ( 0.74 ) | 0.02 ( 0.02 ) | 16.12 | 0.56 | 0.89 | 11.14 | 0.02 |\n", + "| 52 | 1000 | 50 | 0.7 | 0.05 | 0.37 | 0.89 ( 0 ) | 9.65 ( 0.77 ) | 0 ( 0 ) | 14.65 | 0.49 | 0.89 | 9.65 | 0.00 |\n", + "| 53 | 50 | 100 | 0.7 | 2.00 | 0.08 | 0.71 ( 0.01 ) | 17.76 ( 1.65 ) | 2.81 ( 0.14 ) | 19.95 | 0.74 | 0.71 | 17.76 | 2.81 |\n", + "| 54 | 100 | 100 | 0.7 | 1.00 | 0.13 | 0.79 ( 0.01 ) | 16.43 ( 1.31 ) | 1.79 ( 0.13 ) | 19.64 | 0.68 | 0.79 | 16.43 | 1.79 |\n", + "| 55 | 500 | 100 | 0.7 | 0.20 | 0.25 | 0.89 ( 0 ) | 16.01 ( 0.82 ) | 0.03 ( 0.03 ) | 20.98 | 0.67 | 0.89 | 16.01 | 0.03 |\n", + "| 56 | 1000 | 100 | 0.7 | 0.10 | 0.33 | 0.89 ( 0 ) | 12.77 ( 0.94 ) | 0 ( 0 ) | 17.77 | 0.58 | 0.89 | 12.77 | 0.00 |\n", + "| 57 | 50 | 500 | 0.7 | 10.00 | 0.03 | 0.67 ( 0.01 ) | 43.83 ( 5.17 ) | 3.75 ( 0.12 ) | 45.08 | 0.9 | 0.67 | 43.83 | 3.75 |\n", + "| 58 | 100 | 500 | 0.7 | 5.00 | 0.10 | 0.74 ( 0.01 ) | 19.1 ( 1.88 ) | 3.08 ( 0.1 ) | 21.02 | 0.73 | 0.74 | 19.10 | 3.08 |\n", + "| 59 | 500 | 500 | 0.7 | 1.00 | 0.15 | 0.87 ( 0 ) | 31.23 ( 1.88 ) | 0.17 ( 0.04 ) | 36.06 | 0.78 | 0.87 | 31.23 | 0.17 |\n", + "| 60 | 1000 | 500 | 0.7 | 0.50 | 0.22 | 0.89 ( 0 ) | 22.46 ( 1.45 ) | 0 ( 0 ) | 27.46 | 0.71 | 0.89 | 22.46 | 0.00 |\n", + "| 61 | 50 | 1000 | 0.7 | 20.00 | 0.02 | 0.64 ( 0.01 ) | 47.17 ( 5.85 ) | 4.12 ( 0.09 ) | 48.05 | 0.92 | 0.64 | 47.17 | 4.12 |\n", + "| 62 | 100 | 1000 | 0.7 | 10.00 | 0.08 | 0.75 ( 0.01 ) | 20.86 ( 2.56 ) | 3.59 ( 0.09 ) | 22.27 | 0.77 | 0.75 | 20.86 | 3.59 |\n", + "| 63 | 500 | 1000 | 0.7 | 2.00 | 0.13 | 0.87 ( 0 ) | 36.32 ( 2.18 ) | 0.23 ( 0.05 ) | 41.09 | 0.81 | 0.87 | 36.32 | 0.23 |\n", + "| 64 | 1000 | 1000 | 0.7 | 1.00 | 0.16 | 0.89 ( 0 ) | 32.22 ( 2.11 ) | 0.01 ( 0.01 ) | 37.21 | 0.8 | 0.89 | 32.22 | 0.01 |\n", + "| 65 | 50 | 50 | 0.9 | 1.00 | 0.09 | 0.71 ( 0.01 ) | 14.15 ( 1 ) | 2.3 ( 0.14 ) | 16.85 | 0.68 | 0.71 | 14.15 | 2.30 |\n", + "| 66 | 100 | 50 | 0.9 | 0.50 | 0.15 | 0.77 ( 0.01 ) | 11.74 ( 0.88 ) | 1.74 ( 0.13 ) | 15.00 | 0.64 | 0.77 | 11.74 | 1.74 |\n", + "| 67 | 500 | 50 | 0.9 | 0.10 | 0.27 | 0.83 ( 0 ) | 12.28 ( 0.9 ) | 0.18 ( 0.06 ) | 17.10 | 0.57 | 0.83 | 12.28 | 0.18 |\n", + "| 68 | 1000 | 50 | 0.9 | 0.05 | 0.39 | 0.84 ( 0 ) | 9.58 ( 0.68 ) | 0.01 ( 0.01 ) | 14.57 | 0.51 | 0.84 | 9.58 | 0.01 |\n", + "| 69 | 50 | 100 | 0.9 | 2.00 | 0.08 | 0.7 ( 0.01 ) | 15.1 ( 1.65 ) | 3.16 ( 0.13 ) | 16.94 | 0.7 | 0.70 | 15.10 | 3.16 |\n", + "| 70 | 100 | 100 | 0.9 | 1.00 | 0.15 | 0.75 ( 0.01 ) | 14.19 ( 1.38 ) | 2.23 ( 0.13 ) | 16.96 | 0.64 | 0.75 | 14.19 | 2.23 |\n", + "| 71 | 500 | 100 | 0.9 | 0.20 | 0.25 | 0.83 ( 0 ) | 16.33 ( 1.01 ) | 0.2 ( 0.06 ) | 21.13 | 0.67 | 0.83 | 16.33 | 0.20 |\n", + "| 72 | 1000 | 100 | 0.9 | 0.10 | 0.32 | 0.84 ( 0 ) | 13.82 ( 1.17 ) | 0.03 ( 0.02 ) | 18.79 | 0.6 | 0.84 | 13.82 | 0.03 |\n", + "| 73 | 50 | 500 | 0.9 | 10.00 | 0.05 | 0.66 ( 0.02 ) | 28.64 ( 3.14 ) | 4.13 ( 0.07 ) | 29.51 | 0.88 | 0.66 | 28.64 | 4.13 |\n", + "| 74 | 100 | 500 | 0.9 | 5.00 | 0.07 | 0.7 ( 0.01 ) | 25.71 ( 4.03 ) | 3.42 ( 0.1 ) | 27.29 | 0.78 | 0.70 | 25.71 | 3.42 |\n", + "| 75 | 500 | 500 | 0.9 | 1.00 | 0.14 | 0.81 ( 0 ) | 25.68 ( 1.61 ) | 1.07 ( 0.11 ) | 29.61 | 0.76 | 0.81 | 25.68 | 1.07 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.50 | 0.21 | 0.83 ( 0 ) | 23.49 ( 1.26 ) | 0.15 ( 0.05 ) | 28.34 | 0.75 | 0.83 | 23.49 | 0.15 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.00 | 0.02 | 0.65 ( 0.01 ) | 49.08 ( 6.86 ) | 4.29 ( 0.09 ) | 49.79 | 0.93 | 0.65 | 49.08 | 4.29 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.00 | 0.05 | 0.66 ( 0.01 ) | 32.99 ( 5.22 ) | 3.81 ( 0.09 ) | 34.18 | 0.8 | 0.66 | 32.99 | 3.81 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.00 | 0.11 | 0.8 ( 0 ) | 30.91 ( 2.22 ) | 1.52 ( 0.12 ) | 34.39 | 0.78 | 0.80 | 30.91 | 1.52 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.00 | 0.14 | 0.83 ( 0 ) | 35.66 ( 1.98 ) | 0.23 ( 0.06 ) | 40.43 | 0.82 | 0.83 | 35.66 | 0.23 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "1 50 50 0.1 1.00 0.13 0.77 ( 0.01 ) 13.02 ( 1.02 ) 1.51 ( 0.11 )\n", + "2 100 50 0.1 0.50 0.24 0.85 ( 0.01 ) 10.71 ( 0.62 ) 0.56 ( 0.07 )\n", + "3 500 50 0.1 0.10 0.41 0.92 ( 0 ) 7.43 ( 0.6 ) 0.02 ( 0.01 )\n", + "4 1000 50 0.1 0.05 0.39 0.92 ( 0 ) 7.82 ( 0.76 ) 0 ( 0 ) \n", + "5 50 100 0.1 2.00 0.09 0.73 ( 0.01 ) 21.55 ( 1.94 ) 1.64 ( 0.11 )\n", + "6 100 100 0.1 1.00 0.18 0.83 ( 0.01 ) 15.59 ( 1.32 ) 0.84 ( 0.1 ) \n", + "7 500 100 0.1 0.20 0.32 0.92 ( 0 ) 11.5 ( 0.9 ) 0 ( 0 ) \n", + "8 1000 100 0.1 0.10 0.34 0.92 ( 0 ) 11.02 ( 1.05 ) 0 ( 0 ) \n", + "9 50 500 0.1 10.00 0.03 0.66 ( 0.01 ) 58.7 ( 5.86 ) 2.64 ( 0.12 )\n", + "10 100 500 0.1 5.00 0.14 0.78 ( 0.01 ) 19.29 ( 1.92 ) 1.76 ( 0.1 ) \n", + "11 500 500 0.1 1.00 0.26 0.91 ( 0 ) 17.05 ( 1.43 ) 0 ( 0 ) \n", + "12 1000 500 0.1 0.50 0.29 0.93 ( 0 ) 15.14 ( 1.39 ) 0 ( 0 ) \n", + "13 50 1000 0.1 20.00 0.02 0.65 ( 0.01 ) 85.97 ( 9 ) 3.03 ( 0.13 )\n", + "14 100 1000 0.1 10.00 0.12 0.76 ( 0.01 ) 22.02 ( 1.97 ) 2.07 ( 0.1 ) \n", + "15 500 1000 0.1 2.00 0.23 0.91 ( 0 ) 21.07 ( 1.75 ) 0 ( 0 ) \n", + "16 1000 1000 0.1 1.00 0.24 0.92 ( 0 ) 19.56 ( 2.29 ) 0 ( 0 ) \n", + "17 50 50 0.3 1.00 0.13 0.76 ( 0.01 ) 11.32 ( 0.99 ) 1.87 ( 0.14 )\n", + "18 100 50 0.3 0.50 0.18 0.83 ( 0.01 ) 12.96 ( 0.86 ) 0.75 ( 0.09 )\n", + "19 500 50 0.3 0.10 0.33 0.91 ( 0 ) 9.89 ( 0.75 ) 0 ( 0 ) \n", + "20 1000 50 0.3 0.05 0.38 0.92 ( 0 ) 8.56 ( 0.69 ) 0 ( 0 ) \n", + "21 50 100 0.3 2.00 0.08 0.74 ( 0.01 ) 17.99 ( 1.78 ) 2.32 ( 0.14 )\n", + "22 100 100 0.3 1.00 0.17 0.82 ( 0.01 ) 14.36 ( 1.25 ) 1.36 ( 0.12 )\n", + "23 500 100 0.3 0.20 0.29 0.91 ( 0 ) 13.08 ( 1 ) 0 ( 0 ) \n", + "24 1000 100 0.3 0.10 0.38 0.92 ( 0 ) 9.67 ( 0.76 ) 0 ( 0 ) \n", + "25 50 500 0.3 10.00 0.03 0.66 ( 0.01 ) 49.2 ( 5.65 ) 3.15 ( 0.13 )\n", + "26 100 500 0.3 5.00 0.11 0.77 ( 0.01 ) 23.84 ( 2.37 ) 2.05 ( 0.11 )\n", + "27 500 500 0.3 1.00 0.19 0.91 ( 0 ) 25.04 ( 1.69 ) 0 ( 0 ) \n", + "28 1000 500 0.3 0.50 0.25 0.92 ( 0 ) 18.51 ( 1.25 ) 0 ( 0 ) \n", + "29 50 1000 0.3 20.00 0.02 0.67 ( 0.01 ) 54.74 ( 6.8 ) 3.54 ( 0.12 )\n", + "30 100 1000 0.3 10.00 0.08 0.75 ( 0.01 ) 28.55 ( 5.11 ) 2.58 ( 0.11 )\n", + "⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ \n", + "51 500 50 0.7 0.10 0.31 0.89 ( 0 ) 11.14 ( 0.74 ) 0.02 ( 0.02 )\n", + "52 1000 50 0.7 0.05 0.37 0.89 ( 0 ) 9.65 ( 0.77 ) 0 ( 0 ) \n", + "53 50 100 0.7 2.00 0.08 0.71 ( 0.01 ) 17.76 ( 1.65 ) 2.81 ( 0.14 )\n", + "54 100 100 0.7 1.00 0.13 0.79 ( 0.01 ) 16.43 ( 1.31 ) 1.79 ( 0.13 )\n", + "55 500 100 0.7 0.20 0.25 0.89 ( 0 ) 16.01 ( 0.82 ) 0.03 ( 0.03 )\n", + "56 1000 100 0.7 0.10 0.33 0.89 ( 0 ) 12.77 ( 0.94 ) 0 ( 0 ) \n", + "57 50 500 0.7 10.00 0.03 0.67 ( 0.01 ) 43.83 ( 5.17 ) 3.75 ( 0.12 )\n", + "58 100 500 0.7 5.00 0.10 0.74 ( 0.01 ) 19.1 ( 1.88 ) 3.08 ( 0.1 ) \n", + "59 500 500 0.7 1.00 0.15 0.87 ( 0 ) 31.23 ( 1.88 ) 0.17 ( 0.04 )\n", + "60 1000 500 0.7 0.50 0.22 0.89 ( 0 ) 22.46 ( 1.45 ) 0 ( 0 ) \n", + "61 50 1000 0.7 20.00 0.02 0.64 ( 0.01 ) 47.17 ( 5.85 ) 4.12 ( 0.09 )\n", + "62 100 1000 0.7 10.00 0.08 0.75 ( 0.01 ) 20.86 ( 2.56 ) 3.59 ( 0.09 )\n", + "63 500 1000 0.7 2.00 0.13 0.87 ( 0 ) 36.32 ( 2.18 ) 0.23 ( 0.05 )\n", + "64 1000 1000 0.7 1.00 0.16 0.89 ( 0 ) 32.22 ( 2.11 ) 0.01 ( 0.01 )\n", + "65 50 50 0.9 1.00 0.09 0.71 ( 0.01 ) 14.15 ( 1 ) 2.3 ( 0.14 ) \n", + "66 100 50 0.9 0.50 0.15 0.77 ( 0.01 ) 11.74 ( 0.88 ) 1.74 ( 0.13 )\n", + "67 500 50 0.9 0.10 0.27 0.83 ( 0 ) 12.28 ( 0.9 ) 0.18 ( 0.06 )\n", + "68 1000 50 0.9 0.05 0.39 0.84 ( 0 ) 9.58 ( 0.68 ) 0.01 ( 0.01 )\n", + "69 50 100 0.9 2.00 0.08 0.7 ( 0.01 ) 15.1 ( 1.65 ) 3.16 ( 0.13 )\n", + "70 100 100 0.9 1.00 0.15 0.75 ( 0.01 ) 14.19 ( 1.38 ) 2.23 ( 0.13 )\n", + "71 500 100 0.9 0.20 0.25 0.83 ( 0 ) 16.33 ( 1.01 ) 0.2 ( 0.06 ) \n", + "72 1000 100 0.9 0.10 0.32 0.84 ( 0 ) 13.82 ( 1.17 ) 0.03 ( 0.02 )\n", + "73 50 500 0.9 10.00 0.05 0.66 ( 0.02 ) 28.64 ( 3.14 ) 4.13 ( 0.07 )\n", + "74 100 500 0.9 5.00 0.07 0.7 ( 0.01 ) 25.71 ( 4.03 ) 3.42 ( 0.1 ) \n", + "75 500 500 0.9 1.00 0.14 0.81 ( 0 ) 25.68 ( 1.61 ) 1.07 ( 0.11 )\n", + "76 1000 500 0.9 0.50 0.21 0.83 ( 0 ) 23.49 ( 1.26 ) 0.15 ( 0.05 )\n", + "77 50 1000 0.9 20.00 0.02 0.65 ( 0.01 ) 49.08 ( 6.86 ) 4.29 ( 0.09 )\n", + "78 100 1000 0.9 10.00 0.05 0.66 ( 0.01 ) 32.99 ( 5.22 ) 3.81 ( 0.09 )\n", + "79 500 1000 0.9 2.00 0.11 0.8 ( 0 ) 30.91 ( 2.22 ) 1.52 ( 0.12 )\n", + "80 1000 1000 0.9 1.00 0.14 0.83 ( 0 ) 35.66 ( 1.98 ) 0.23 ( 0.06 )\n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "1 16.51 0.63 0.77 13.02 1.51 \n", + "2 15.15 0.57 0.85 10.71 0.56 \n", + "3 12.41 0.42 0.92 7.43 0.02 \n", + "4 12.82 0.4 0.92 7.82 0.00 \n", + "5 24.91 0.73 0.73 21.55 1.64 \n", + "6 19.75 0.62 0.83 15.59 0.84 \n", + "7 16.50 0.54 0.92 11.50 0.00 \n", + "8 16.02 0.49 0.92 11.02 0.00 \n", + "9 61.06 0.89 0.66 58.70 2.64 \n", + "10 22.53 0.68 0.78 19.29 1.76 \n", + "11 22.05 0.62 0.91 17.05 0.00 \n", + "12 20.14 0.54 0.93 15.14 0.00 \n", + "13 87.94 0.92 0.65 85.97 3.03 \n", + "14 24.95 0.75 0.76 22.02 2.07 \n", + "15 26.07 0.66 0.91 21.07 0.00 \n", + "16 24.56 0.57 0.92 19.56 0.00 \n", + "17 14.45 0.59 0.76 11.32 1.87 \n", + "18 17.21 0.61 0.83 12.96 0.75 \n", + "19 14.89 0.51 0.91 9.89 0.00 \n", + "20 13.56 0.44 0.92 8.56 0.00 \n", + "21 20.67 0.72 0.74 17.99 2.32 \n", + "22 18.00 0.6 0.82 14.36 1.36 \n", + "23 18.08 0.56 0.91 13.08 0.00 \n", + "24 14.67 0.49 0.92 9.67 0.00 \n", + "25 51.05 0.89 0.66 49.20 3.15 \n", + "26 26.79 0.73 0.77 23.84 2.05 \n", + "27 30.04 0.72 0.91 25.04 0.00 \n", + "28 23.51 0.66 0.92 18.51 0.00 \n", + "29 56.20 0.91 0.67 54.74 3.54 \n", + "30 30.97 0.75 0.75 28.55 2.58 \n", + "⋮ ⋮ ⋮ ⋮ ⋮ ⋮ \n", + "51 16.12 0.56 0.89 11.14 0.02 \n", + "52 14.65 0.49 0.89 9.65 0.00 \n", + "53 19.95 0.74 0.71 17.76 2.81 \n", + "54 19.64 0.68 0.79 16.43 1.79 \n", + "55 20.98 0.67 0.89 16.01 0.03 \n", + "56 17.77 0.58 0.89 12.77 0.00 \n", + "57 45.08 0.9 0.67 43.83 3.75 \n", + "58 21.02 0.73 0.74 19.10 3.08 \n", + "59 36.06 0.78 0.87 31.23 0.17 \n", + "60 27.46 0.71 0.89 22.46 0.00 \n", + "61 48.05 0.92 0.64 47.17 4.12 \n", + "62 22.27 0.77 0.75 20.86 3.59 \n", + "63 41.09 0.81 0.87 36.32 0.23 \n", + "64 37.21 0.8 0.89 32.22 0.01 \n", + "65 16.85 0.68 0.71 14.15 2.30 \n", + "66 15.00 0.64 0.77 11.74 1.74 \n", + "67 17.10 0.57 0.83 12.28 0.18 \n", + "68 14.57 0.51 0.84 9.58 0.01 \n", + "69 16.94 0.7 0.70 15.10 3.16 \n", + "70 16.96 0.64 0.75 14.19 2.23 \n", + "71 21.13 0.67 0.83 16.33 0.20 \n", + "72 18.79 0.6 0.84 13.82 0.03 \n", + "73 29.51 0.88 0.66 28.64 4.13 \n", + "74 27.29 0.78 0.70 25.71 3.42 \n", + "75 29.61 0.76 0.81 25.68 1.07 \n", + "76 28.34 0.75 0.83 23.49 0.15 \n", + "77 49.79 0.93 0.65 49.08 4.29 \n", + "78 34.18 0.8 0.66 32.99 3.81 \n", + "79 34.39 0.78 0.80 30.91 1.52 \n", + "80 40.43 0.82 0.83 35.66 0.23 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_toe\n", + "\n", + "## export\n", + "write.table(result.table_toe, '../results_summary_bin/sim_toe_Elnet_binary.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_bin/.ipynb_checkpoints/1.3_sim_toe_rf_binary_update-checkpoint.ipynb b/simulations/notebooks_sim_bin/.ipynb_checkpoints/1.3_sim_toe_rf_binary_update-checkpoint.ipynb new file mode 100644 index 0000000..a03a60e --- /dev/null +++ b/simulations/notebooks_sim_bin/.ipynb_checkpoints/1.3_sim_toe_rf_binary_update-checkpoint.ipynb @@ -0,0 +1,1067 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize random forests results on Toeplitz Simulation Scenarios for binary outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "rou.list = seq(0.1, 0.9, 0.2)\n", + "\n", + "files = NULL\n", + "for (rou in rou.list){\n", + " for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_toeplitz_corr', rou, paste('P', p, 'N', n, sep='_'), '.RData', sep=''))\n", + " }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "80" + ], + "text/latex": [ + "80" + ], + "text/markdown": [ + "80" + ], + "text/plain": [ + "[1] 80" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "length(files)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1] \"indx: 1\"\n", + "[1] \"indx: 2\"\n", + "[1] \"indx: 3\"\n", + "[1] \"indx: 4\"\n", + "[1] \"indx: 5\"\n", + "[1] \"indx: 6\"\n", + "[1] \"indx: 7\"\n", + "[1] \"indx: 8\"\n", + "[1] \"indx: 9\"\n", + "[1] \"indx: 10\"\n", + "[1] \"indx: 11\"\n", + "[1] \"indx: 12\"\n", + "[1] \"indx: 13\"\n", + "[1] \"indx: 14\"\n", + "[1] \"indx: 15\"\n", + "[1] \"indx: 16\"\n", + "[1] \"indx: 17\"\n", + "[1] \"indx: 18\"\n", + "[1] \"indx: 19\"\n", + "[1] \"indx: 20\"\n", + "[1] \"indx: 21\"\n", + "[1] \"indx: 22\"\n", + "[1] \"indx: 23\"\n", + "[1] \"indx: 24\"\n", + "[1] \"indx: 25\"\n", + "[1] \"indx: 26\"\n", + "[1] \"indx: 27\"\n", + "[1] \"indx: 28\"\n", + "[1] \"indx: 29\"\n", + "[1] \"indx: 30\"\n", + "[1] \"indx: 31\"\n", + "[1] \"indx: 32\"\n", + "[1] \"indx: 33\"\n", + "[1] \"indx: 34\"\n", + "[1] \"indx: 35\"\n", + "[1] \"indx: 36\"\n", + "[1] \"indx: 37\"\n", + "[1] \"indx: 38\"\n", + "[1] \"indx: 39\"\n", + "[1] \"indx: 40\"\n", + "[1] \"indx: 41\"\n", + "[1] \"indx: 42\"\n", + "[1] \"indx: 43\"\n", + "[1] \"indx: 44\"\n", + "[1] \"indx: 45\"\n", + "[1] \"indx: 46\"\n", + "[1] \"indx: 47\"\n", + "[1] \"indx: 48\"\n", + "[1] \"indx: 49\"\n", + "[1] \"indx: 50\"\n", + "[1] \"indx: 51\"\n", + "[1] \"indx: 52\"\n", + "[1] \"indx: 53\"\n", + "[1] \"indx: 54\"\n", + "[1] \"indx: 55\"\n", + "[1] \"indx: 56\"\n", + "[1] \"indx: 57\"\n", + "[1] \"indx: 58\"\n", + "[1] \"indx: 59\"\n", + "[1] \"indx: 60\"\n", + "[1] \"indx: 61\"\n", + "[1] \"indx: 62\"\n", + "[1] \"indx: 63\"\n", + "[1] \"indx: 64\"\n", + "[1] \"indx: 65\"\n", + "[1] \"indx: 66\"\n", + "[1] \"indx: 67\"\n", + "[1] \"indx: 68\"\n", + "[1] \"indx: 69\"\n", + "[1] \"indx: 70\"\n", + "[1] \"indx: 71\"\n", + "[1] \"indx: 72\"\n", + "[1] \"indx: 73\"\n", + "[1] \"indx: 74\"\n", + "[1] \"indx: 75\"\n", + "[1] \"indx: 76\"\n", + "[1] \"indx: 77\"\n", + "[1] \"indx: 78\"\n", + "[1] \"indx: 79\"\n", + "[1] \"indx: 80\"\n" + ] + } + ], + "source": [ + "avg_FDR = NULL\n", + "table_toe = NULL\n", + "tmp_num_select = rep(0, length(files))\n", + "for (i in 1:length(files)){\n", + " print(paste0('indx: ', i))\n", + " load(paste0(dir, '/binary_update/toe_RF_binary_', i, '.RData')) \n", + " \n", + " table_toe = rbind(table_toe, results_toe_rf[c('n', 'p', 'rou', 'FP', 'FN', 'ROC', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_toe_rf$Stab.table))\n", + " \n", + " # calculate FDR\n", + " load(file_name, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_toe_rf$Stab.table\n", + " FDR = NULL # false positive rate\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}\n", + "table_toe = as.data.frame(table_toe)\n", + "table_toe$num_select = tmp_num_select\n", + "table_toe$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
150500.11 ( 0 )6 ( 0 )1 ( 0 )NaN0.00 NaN
2100500.12.05 ( 0.14 )4.71 ( 0.08 )1 ( 0 )0.13.310.56
3500500.11.4 ( 0.12 )2.4 ( 0.08 )1 ( 0 )0.55.000.25
41000500.10.98 ( 0.09 )1.2 ( 0.08 )1 ( 0 )0.695.780.15
5501000.11 ( 0 )6 ( 0 )1 ( 0 )NaN0.00 NaN
61001000.13.95 ( 0.21 )4.66 ( 0.08 )1 ( 0 )0.065.290.72
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1 ( 0 ) & 6 ( 0 ) & 1 ( 0 ) & NaN & 0.00 & NaN\\\\\n", + "\t2 & 100 & 50 & 0.1 & 2.05 ( 0.14 ) & 4.71 ( 0.08 ) & 1 ( 0 ) & 0.1 & 3.31 & 0.56\\\\\n", + "\t3 & 500 & 50 & 0.1 & 1.4 ( 0.12 ) & 2.4 ( 0.08 ) & 1 ( 0 ) & 0.5 & 5.00 & 0.25\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 0.98 ( 0.09 ) & 1.2 ( 0.08 ) & 1 ( 0 ) & 0.69 & 5.78 & 0.15\\\\\n", + "\t5 & 50 & 100 & 0.1 & 1 ( 0 ) & 6 ( 0 ) & 1 ( 0 ) & NaN & 0.00 & NaN\\\\\n", + "\t6 & 100 & 100 & 0.1 & 3.95 ( 0.21 ) & 4.66 ( 0.08 ) & 1 ( 0 ) & 0.06 & 5.29 & 0.72\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1 ( 0 ) | 6 ( 0 ) | 1 ( 0 ) | NaN | 0.00 | NaN |\n", + "| 2 | 100 | 50 | 0.1 | 2.05 ( 0.14 ) | 4.71 ( 0.08 ) | 1 ( 0 ) | 0.1 | 3.31 | 0.56 |\n", + "| 3 | 500 | 50 | 0.1 | 1.4 ( 0.12 ) | 2.4 ( 0.08 ) | 1 ( 0 ) | 0.5 | 5.00 | 0.25 |\n", + "| 4 | 1000 | 50 | 0.1 | 0.98 ( 0.09 ) | 1.2 ( 0.08 ) | 1 ( 0 ) | 0.69 | 5.78 | 0.15 |\n", + "| 5 | 50 | 100 | 0.1 | 1 ( 0 ) | 6 ( 0 ) | 1 ( 0 ) | NaN | 0.00 | NaN |\n", + "| 6 | 100 | 100 | 0.1 | 3.95 ( 0.21 ) | 4.66 ( 0.08 ) | 1 ( 0 ) | 0.06 | 5.29 | 0.72 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select FDR \n", + "1 50 50 0.1 1 ( 0 ) 6 ( 0 ) 1 ( 0 ) NaN 0.00 NaN\n", + "2 100 50 0.1 2.05 ( 0.14 ) 4.71 ( 0.08 ) 1 ( 0 ) 0.1 3.31 0.56\n", + "3 500 50 0.1 1.4 ( 0.12 ) 2.4 ( 0.08 ) 1 ( 0 ) 0.5 5.00 0.25\n", + "4 1000 50 0.1 0.98 ( 0.09 ) 1.2 ( 0.08 ) 1 ( 0 ) 0.69 5.78 0.15\n", + "5 50 100 0.1 1 ( 0 ) 6 ( 0 ) 1 ( 0 ) NaN 0.00 NaN\n", + "6 100 100 0.1 3.95 ( 0.21 ) 4.66 ( 0.08 ) 1 ( 0 ) 0.06 5.29 0.72" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
755005000.924.91 ( 0.57 )3.53 ( 0.09 )1 ( 0 )0.0827.380.91
7610005000.924.53 ( 0.53 )2.84 ( 0.08 )1 ( 0 )0.1327.690.88
775010000.91 ( 0 )6 ( 0 )1 ( 0 )NaN 0.00 NaN
7810010000.947.19 ( 0.96 )5.2 ( 0.08 )1 ( 0 )047.990.98
7950010000.948.11 ( 0.92 )3.78 ( 0.08 )1 ( 0 )0.0450.330.95
80100010000.949.47 ( 0.78 )2.97 ( 0.07 )1 ( 0 )0.0752.500.94
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 24.91 ( 0.57 ) & 3.53 ( 0.09 ) & 1 ( 0 ) & 0.08 & 27.38 & 0.91\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 24.53 ( 0.53 ) & 2.84 ( 0.08 ) & 1 ( 0 ) & 0.13 & 27.69 & 0.88\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 1 ( 0 ) & 6 ( 0 ) & 1 ( 0 ) & NaN & 0.00 & NaN\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 47.19 ( 0.96 ) & 5.2 ( 0.08 ) & 1 ( 0 ) & 0 & 47.99 & 0.98\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 48.11 ( 0.92 ) & 3.78 ( 0.08 ) & 1 ( 0 ) & 0.04 & 50.33 & 0.95\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 49.47 ( 0.78 ) & 2.97 ( 0.07 ) & 1 ( 0 ) & 0.07 & 52.50 & 0.94\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 24.91 ( 0.57 ) | 3.53 ( 0.09 ) | 1 ( 0 ) | 0.08 | 27.38 | 0.91 |\n", + "| 76 | 1000 | 500 | 0.9 | 24.53 ( 0.53 ) | 2.84 ( 0.08 ) | 1 ( 0 ) | 0.13 | 27.69 | 0.88 |\n", + "| 77 | 50 | 1000 | 0.9 | 1 ( 0 ) | 6 ( 0 ) | 1 ( 0 ) | NaN | 0.00 | NaN |\n", + "| 78 | 100 | 1000 | 0.9 | 47.19 ( 0.96 ) | 5.2 ( 0.08 ) | 1 ( 0 ) | 0 | 47.99 | 0.98 |\n", + "| 79 | 500 | 1000 | 0.9 | 48.11 ( 0.92 ) | 3.78 ( 0.08 ) | 1 ( 0 ) | 0.04 | 50.33 | 0.95 |\n", + "| 80 | 1000 | 1000 | 0.9 | 49.47 ( 0.78 ) | 2.97 ( 0.07 ) | 1 ( 0 ) | 0.07 | 52.50 | 0.94 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select FDR \n", + "75 500 500 0.9 24.91 ( 0.57 ) 3.53 ( 0.09 ) 1 ( 0 ) 0.08 27.38 0.91\n", + "76 1000 500 0.9 24.53 ( 0.53 ) 2.84 ( 0.08 ) 1 ( 0 ) 0.13 27.69 0.88\n", + "77 50 1000 0.9 1 ( 0 ) 6 ( 0 ) 1 ( 0 ) NaN 0.00 NaN\n", + "78 100 1000 0.9 47.19 ( 0.96 ) 5.2 ( 0.08 ) 1 ( 0 ) 0 47.99 0.98\n", + "79 500 1000 0.9 48.11 ( 0.92 ) 3.78 ( 0.08 ) 1 ( 0 ) 0.04 50.33 0.95\n", + "80 1000 1000 0.9 49.47 ( 0.78 ) 2.97 ( 0.07 ) 1 ( 0 ) 0.07 52.50 0.94" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_toe <- apply(table_toe,2,as.character)\n", + "rownames(result.table_toe) = rownames(table_toe)\n", + "result.table_toe = as.data.frame(result.table_toe)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_toe$n = tidyr::extract_numeric(result.table_toe$n)\n", + "result.table_toe$p = tidyr::extract_numeric(result.table_toe$p)\n", + "result.table_toe$ratio = result.table_toe$p / result.table_toe$n\n", + "\n", + "result.table_toe = result.table_toe[c('n', 'p', 'rou', 'ratio', 'Stab', 'ROC', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_toe)[1:4] = c('N', 'P', 'Corr', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_toe$Stab = as.numeric(as.character(result.table_toe$Stab))\n", + "result.table_toe$num_select = as.numeric(as.character(result.table_toe$num_select))\n", + "\n", + "result.table_toe$ROC_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$ROC))\n", + "result.table_toe$FP_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$FP))\n", + "result.table_toe$FN_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$FN))" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 20 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
150 500.1 1NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
550 1000.1 2NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
950 5000.110NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
135010000.120NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
1750 500.3 1NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
2150 1000.3 2NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
2550 5000.310NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
295010000.320NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
3350 500.5 1NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
3750 1000.5 2NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
4150 5000.510NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
455010000.520NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
4950 500.7 1NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
5350 1000.7 2NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
5750 5000.710NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
615010000.720NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
6550 500.9 1NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
6950 1000.9 2NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
7350 5000.910NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
775010000.920NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
\n" + ], + "text/latex": [ + "A data.frame: 20 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t5 & 50 & 100 & 0.1 & 2 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t9 & 50 & 500 & 0.1 & 10 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t13 & 50 & 1000 & 0.1 & 20 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t17 & 50 & 50 & 0.3 & 1 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t21 & 50 & 100 & 0.3 & 2 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t25 & 50 & 500 & 0.3 & 10 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t29 & 50 & 1000 & 0.3 & 20 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t33 & 50 & 50 & 0.5 & 1 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t37 & 50 & 100 & 0.5 & 2 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t41 & 50 & 500 & 0.5 & 10 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t45 & 50 & 1000 & 0.5 & 20 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t49 & 50 & 50 & 0.7 & 1 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t53 & 50 & 100 & 0.7 & 2 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t57 & 50 & 500 & 0.7 & 10 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t61 & 50 & 1000 & 0.7 & 20 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t65 & 50 & 50 & 0.9 & 1 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t69 & 50 & 100 & 0.9 & 2 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t73 & 50 & 500 & 0.9 & 10 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 20 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 5 | 50 | 100 | 0.1 | 2 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 9 | 50 | 500 | 0.1 | 10 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 13 | 50 | 1000 | 0.1 | 20 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 17 | 50 | 50 | 0.3 | 1 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 21 | 50 | 100 | 0.3 | 2 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 25 | 50 | 500 | 0.3 | 10 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 29 | 50 | 1000 | 0.3 | 20 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 33 | 50 | 50 | 0.5 | 1 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 37 | 50 | 100 | 0.5 | 2 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 41 | 50 | 500 | 0.5 | 10 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 45 | 50 | 1000 | 0.5 | 20 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 49 | 50 | 50 | 0.7 | 1 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 53 | 50 | 100 | 0.7 | 2 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 57 | 50 | 500 | 0.7 | 10 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 61 | 50 | 1000 | 0.7 | 20 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 65 | 50 | 50 | 0.9 | 1 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 69 | 50 | 100 | 0.9 | 2 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 73 | 50 | 500 | 0.9 | 10 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 77 | 50 | 1000 | 0.9 | 20 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select FDR ROC_mean\n", + "1 50 50 0.1 1 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "5 50 100 0.1 2 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "9 50 500 0.1 10 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "13 50 1000 0.1 20 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "17 50 50 0.3 1 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "21 50 100 0.3 2 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "25 50 500 0.3 10 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "29 50 1000 0.3 20 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "33 50 50 0.5 1 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "37 50 100 0.5 2 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "41 50 500 0.5 10 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "45 50 1000 0.5 20 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "49 50 50 0.7 1 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "53 50 100 0.7 2 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "57 50 500 0.7 10 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "61 50 1000 0.7 20 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "65 50 50 0.9 1 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "69 50 100 0.9 2 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "73 50 500 0.9 10 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "77 50 1000 0.9 20 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + " FP_mean FN_mean\n", + "1 1 6 \n", + "5 1 6 \n", + "9 1 6 \n", + "13 1 6 \n", + "17 1 6 \n", + "21 1 6 \n", + "25 1 6 \n", + "29 1 6 \n", + "33 1 6 \n", + "37 1 6 \n", + "41 1 6 \n", + "45 1 6 \n", + "49 1 6 \n", + "53 1 6 \n", + "57 1 6 \n", + "61 1 6 \n", + "65 1 6 \n", + "69 1 6 \n", + "73 1 6 \n", + "77 1 6 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check whether missing values exists\n", + "result.table_toe[rowSums(is.na(result.table_toe)) > 0,]" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 500.11.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 11.006.00
2 100 500.10.500.101 ( 0 )2.05 ( 0.14 )4.71 ( 0.08 )3.310.5612.054.71
3 500 500.10.100.501 ( 0 )1.4 ( 0.12 ) 2.4 ( 0.08 ) 5.000.2511.402.40
41000 500.10.050.691 ( 0 )0.98 ( 0.09 )1.2 ( 0.08 ) 5.780.1510.981.20
5 501000.12.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 11.006.00
6 1001000.11.000.061 ( 0 )3.95 ( 0.21 )4.66 ( 0.08 )5.290.7213.954.66
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t2 & 100 & 50 & 0.1 & 0.50 & 0.10 & 1 ( 0 ) & 2.05 ( 0.14 ) & 4.71 ( 0.08 ) & 3.31 & 0.56 & 1 & 2.05 & 4.71\\\\\n", + "\t3 & 500 & 50 & 0.1 & 0.10 & 0.50 & 1 ( 0 ) & 1.4 ( 0.12 ) & 2.4 ( 0.08 ) & 5.00 & 0.25 & 1 & 1.40 & 2.40\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 0.05 & 0.69 & 1 ( 0 ) & 0.98 ( 0.09 ) & 1.2 ( 0.08 ) & 5.78 & 0.15 & 1 & 0.98 & 1.20\\\\\n", + "\t5 & 50 & 100 & 0.1 & 2.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t6 & 100 & 100 & 0.1 & 1.00 & 0.06 & 1 ( 0 ) & 3.95 ( 0.21 ) & 4.66 ( 0.08 ) & 5.29 & 0.72 & 1 & 3.95 & 4.66\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 2 | 100 | 50 | 0.1 | 0.50 | 0.10 | 1 ( 0 ) | 2.05 ( 0.14 ) | 4.71 ( 0.08 ) | 3.31 | 0.56 | 1 | 2.05 | 4.71 |\n", + "| 3 | 500 | 50 | 0.1 | 0.10 | 0.50 | 1 ( 0 ) | 1.4 ( 0.12 ) | 2.4 ( 0.08 ) | 5.00 | 0.25 | 1 | 1.40 | 2.40 |\n", + "| 4 | 1000 | 50 | 0.1 | 0.05 | 0.69 | 1 ( 0 ) | 0.98 ( 0.09 ) | 1.2 ( 0.08 ) | 5.78 | 0.15 | 1 | 0.98 | 1.20 |\n", + "| 5 | 50 | 100 | 0.1 | 2.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 6 | 100 | 100 | 0.1 | 1.00 | 0.06 | 1 ( 0 ) | 3.95 ( 0.21 ) | 4.66 ( 0.08 ) | 5.29 | 0.72 | 1 | 3.95 | 4.66 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select FDR \n", + "1 50 50 0.1 1.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 NaN \n", + "2 100 50 0.1 0.50 0.10 1 ( 0 ) 2.05 ( 0.14 ) 4.71 ( 0.08 ) 3.31 0.56\n", + "3 500 50 0.1 0.10 0.50 1 ( 0 ) 1.4 ( 0.12 ) 2.4 ( 0.08 ) 5.00 0.25\n", + "4 1000 50 0.1 0.05 0.69 1 ( 0 ) 0.98 ( 0.09 ) 1.2 ( 0.08 ) 5.78 0.15\n", + "5 50 100 0.1 2.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 NaN \n", + "6 100 100 0.1 1.00 0.06 1 ( 0 ) 3.95 ( 0.21 ) 4.66 ( 0.08 ) 5.29 0.72\n", + " ROC_mean FP_mean FN_mean\n", + "1 1 1.00 6.00 \n", + "2 1 2.05 4.71 \n", + "3 1 1.40 2.40 \n", + "4 1 0.98 1.20 \n", + "5 1 1.00 6.00 \n", + "6 1 3.95 4.66 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
75 500 5000.9 1.00.081 ( 0 )24.91 ( 0.57 )3.53 ( 0.09 )27.380.91124.913.53
761000 5000.9 0.50.131 ( 0 )24.53 ( 0.53 )2.84 ( 0.08 )27.690.88124.532.84
77 5010000.920.0 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
78 10010000.910.00.001 ( 0 )47.19 ( 0.96 )5.2 ( 0.08 ) 47.990.98147.195.20
79 50010000.9 2.00.041 ( 0 )48.11 ( 0.92 )3.78 ( 0.08 )50.330.95148.113.78
80100010000.9 1.00.071 ( 0 )49.47 ( 0.78 )2.97 ( 0.07 )52.500.94149.472.97
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 1.0 & 0.08 & 1 ( 0 ) & 24.91 ( 0.57 ) & 3.53 ( 0.09 ) & 27.38 & 0.91 & 1 & 24.91 & 3.53\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.5 & 0.13 & 1 ( 0 ) & 24.53 ( 0.53 ) & 2.84 ( 0.08 ) & 27.69 & 0.88 & 1 & 24.53 & 2.84\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.0 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.0 & 0.00 & 1 ( 0 ) & 47.19 ( 0.96 ) & 5.2 ( 0.08 ) & 47.99 & 0.98 & 1 & 47.19 & 5.20\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.0 & 0.04 & 1 ( 0 ) & 48.11 ( 0.92 ) & 3.78 ( 0.08 ) & 50.33 & 0.95 & 1 & 48.11 & 3.78\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.0 & 0.07 & 1 ( 0 ) & 49.47 ( 0.78 ) & 2.97 ( 0.07 ) & 52.50 & 0.94 & 1 & 49.47 & 2.97\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 1.0 | 0.08 | 1 ( 0 ) | 24.91 ( 0.57 ) | 3.53 ( 0.09 ) | 27.38 | 0.91 | 1 | 24.91 | 3.53 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.5 | 0.13 | 1 ( 0 ) | 24.53 ( 0.53 ) | 2.84 ( 0.08 ) | 27.69 | 0.88 | 1 | 24.53 | 2.84 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.0 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.0 | 0.00 | 1 ( 0 ) | 47.19 ( 0.96 ) | 5.2 ( 0.08 ) | 47.99 | 0.98 | 1 | 47.19 | 5.20 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.0 | 0.04 | 1 ( 0 ) | 48.11 ( 0.92 ) | 3.78 ( 0.08 ) | 50.33 | 0.95 | 1 | 48.11 | 3.78 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.0 | 0.07 | 1 ( 0 ) | 49.47 ( 0.78 ) | 2.97 ( 0.07 ) | 52.50 | 0.94 | 1 | 49.47 | 2.97 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select\n", + "75 500 500 0.9 1.0 0.08 1 ( 0 ) 24.91 ( 0.57 ) 3.53 ( 0.09 ) 27.38 \n", + "76 1000 500 0.9 0.5 0.13 1 ( 0 ) 24.53 ( 0.53 ) 2.84 ( 0.08 ) 27.69 \n", + "77 50 1000 0.9 20.0 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "78 100 1000 0.9 10.0 0.00 1 ( 0 ) 47.19 ( 0.96 ) 5.2 ( 0.08 ) 47.99 \n", + "79 500 1000 0.9 2.0 0.04 1 ( 0 ) 48.11 ( 0.92 ) 3.78 ( 0.08 ) 50.33 \n", + "80 1000 1000 0.9 1.0 0.07 1 ( 0 ) 49.47 ( 0.78 ) 2.97 ( 0.07 ) 52.50 \n", + " FDR ROC_mean FP_mean FN_mean\n", + "75 0.91 1 24.91 3.53 \n", + "76 0.88 1 24.53 2.84 \n", + "77 NaN 1 1.00 6.00 \n", + "78 0.98 1 47.19 5.20 \n", + "79 0.95 1 48.11 3.78 \n", + "80 0.94 1 49.47 2.97 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 80 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 500.1 1.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
2 100 500.1 0.500.101 ( 0 )2.05 ( 0.14 ) 4.71 ( 0.08 ) 3.310.561 2.054.71
3 500 500.1 0.100.501 ( 0 )1.4 ( 0.12 ) 2.4 ( 0.08 ) 5.000.251 1.402.40
41000 500.1 0.050.691 ( 0 )0.98 ( 0.09 ) 1.2 ( 0.08 ) 5.780.151 0.981.20
5 50 1000.1 2.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
6 100 1000.1 1.000.061 ( 0 )3.95 ( 0.21 ) 4.66 ( 0.08 ) 5.290.721 3.954.66
7 500 1000.1 0.200.351 ( 0 )3.91 ( 0.21 ) 2.17 ( 0.08 ) 7.740.481 3.912.17
81000 1000.1 0.100.511 ( 0 )2.97 ( 0.15 ) 1.29 ( 0.07 ) 7.680.361 2.971.29
9 50 5000.110.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
10 100 5000.1 5.000.011 ( 0 )24.57 ( 0.55 )4.72 ( 0.08 )25.850.95124.574.72
11 500 5000.1 1.000.091 ( 0 )23.57 ( 0.51 )2.43 ( 0.1 ) 27.140.86123.572.43
121000 5000.1 0.500.141 ( 0 )22.61 ( 0.5 ) 1.31 ( 0.08 )27.300.82122.611.31
13 5010000.120.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
14 10010000.110.000.011 ( 0 )48.35 ( 0.66 )4.88 ( 0.08 )49.470.98148.354.88
15 50010000.1 2.000.041 ( 0 )48.59 ( 0.73 )2.71 ( 0.1 ) 51.880.94148.592.71
16100010000.1 1.000.061 ( 0 )46.74 ( 0.64 )1.75 ( 0.09 )50.990.92146.741.75
17 50 500.3 1.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
18 100 500.3 0.500.101 ( 0 )1.68 ( 0.12 ) 4.86 ( 0.08 ) 2.810.541 1.684.86
19 500 500.3 0.100.441 ( 0 )1.57 ( 0.12 ) 2.74 ( 0.08 ) 4.830.3 1 1.572.74
201000 500.3 0.050.621 ( 0 )1.33 ( 0.1 ) 1.44 ( 0.08 ) 5.890.211 1.331.44
21 50 1000.3 2.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
22 100 1000.3 1.000.051 ( 0 )4.45 ( 0.2 ) 4.85 ( 0.08 ) 5.600.781 4.454.85
23 500 1000.3 0.200.331 ( 0 )3.36 ( 0.19 ) 2.57 ( 0.09 ) 6.790.461 3.362.57
241000 1000.3 0.100.471 ( 0 )3.43 ( 0.17 ) 1.61 ( 0.09 ) 7.820.411 3.431.61
25 50 5000.310.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
26 100 5000.3 5.000.011 ( 0 )23.69 ( 0.53 )4.87 ( 0.08 )24.820.95123.694.87
27 500 5000.3 1.000.071 ( 0 )22.84 ( 0.44 )3.11 ( 0.09 )25.730.89122.843.11
281000 5000.3 0.500.131 ( 0 )22.24 ( 0.43 )1.77 ( 0.09 )26.470.84122.241.77
29 5010000.320.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
30 10010000.310.000.011 ( 0 )48.06 ( 0.76 )5.02 ( 0.08 )49.040.98148.065.02
51 500 500.7 0.100.451 ( 0 )2.14 ( 0.13 ) 3.36 ( 0.08 ) 4.780.431 2.143.36
521000 500.7 0.050.601 ( 0 )2.66 ( 0.14 ) 2.27 ( 0.08 ) 6.390.391 2.662.27
53 50 1000.7 2.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
54 100 1000.7 1.000.081 ( 0 )4.36 ( 0.22 ) 4.8 ( 0.09 ) 5.560.771 4.364.80
55 500 1000.7 0.200.381 ( 0 )4.03 ( 0.18 ) 3.1 ( 0.09 ) 6.930.561 4.033.10
561000 1000.7 0.100.501 ( 0 )4.65 ( 0.22 ) 2 ( 0.07 ) 8.650.511 4.652.00
57 50 5000.710.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
58 100 5000.7 5.000.021 ( 0 )23.58 ( 0.53 )4.72 ( 0.09 )24.860.95123.584.72
59 500 5000.7 1.000.101 ( 0 )23.09 ( 0.56 )3.38 ( 0.09 )25.710.89123.093.38
601000 5000.7 0.500.141 ( 0 )23.33 ( 0.53 )2.58 ( 0.07 )26.750.87123.332.58
61 5010000.720.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
62 10010000.710.000.011 ( 0 )46.8 ( 0.69 ) 5.13 ( 0.07 )47.670.98146.805.13
63 50010000.7 2.000.051 ( 0 )48.68 ( 0.77 )3.54 ( 0.08 )51.140.95148.683.54
64100010000.7 1.000.071 ( 0 )47.14 ( 0.7 ) 2.73 ( 0.07 )50.410.93147.142.73
65 50 500.9 1.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
66 100 500.9 0.500.121 ( 0 )2.09 ( 0.16 ) 4.98 ( 0.09 ) 3.060.621 2.094.98
67 500 500.9 0.100.451 ( 0 )2.6 ( 0.13 ) 3.33 ( 0.08 ) 5.270.471 2.603.33
681000 500.9 0.050.511 ( 0 )3.48 ( 0.17 ) 2.35 ( 0.08 ) 7.130.471 3.482.35
69 50 1000.9 2.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
70 100 1000.9 1.000.071 ( 0 )4.4 ( 0.23 ) 4.96 ( 0.09 ) 5.430.811 4.404.96
71 500 1000.9 0.200.351 ( 0 )4.57 ( 0.24 ) 3.5 ( 0.08 ) 7.070.621 4.573.50
721000 1000.9 0.100.371 ( 0 )6.43 ( 0.28 ) 2.57 ( 0.08 ) 9.860.631 6.432.57
73 50 5000.910.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
74 100 5000.9 5.000.011 ( 0 )24.58 ( 0.66 )5.1 ( 0.09 ) 25.480.96124.585.10
75 500 5000.9 1.000.081 ( 0 )24.91 ( 0.57 )3.53 ( 0.09 )27.380.91124.913.53
761000 5000.9 0.500.131 ( 0 )24.53 ( 0.53 )2.84 ( 0.08 )27.690.88124.532.84
77 5010000.920.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
78 10010000.910.000.001 ( 0 )47.19 ( 0.96 )5.2 ( 0.08 ) 47.990.98147.195.20
79 50010000.9 2.000.041 ( 0 )48.11 ( 0.92 )3.78 ( 0.08 )50.330.95148.113.78
80100010000.9 1.000.071 ( 0 )49.47 ( 0.78 )2.97 ( 0.07 )52.500.94149.472.97
\n" + ], + "text/latex": [ + "A data.frame: 80 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t2 & 100 & 50 & 0.1 & 0.50 & 0.10 & 1 ( 0 ) & 2.05 ( 0.14 ) & 4.71 ( 0.08 ) & 3.31 & 0.56 & 1 & 2.05 & 4.71\\\\\n", + "\t3 & 500 & 50 & 0.1 & 0.10 & 0.50 & 1 ( 0 ) & 1.4 ( 0.12 ) & 2.4 ( 0.08 ) & 5.00 & 0.25 & 1 & 1.40 & 2.40\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 0.05 & 0.69 & 1 ( 0 ) & 0.98 ( 0.09 ) & 1.2 ( 0.08 ) & 5.78 & 0.15 & 1 & 0.98 & 1.20\\\\\n", + "\t5 & 50 & 100 & 0.1 & 2.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t6 & 100 & 100 & 0.1 & 1.00 & 0.06 & 1 ( 0 ) & 3.95 ( 0.21 ) & 4.66 ( 0.08 ) & 5.29 & 0.72 & 1 & 3.95 & 4.66\\\\\n", + "\t7 & 500 & 100 & 0.1 & 0.20 & 0.35 & 1 ( 0 ) & 3.91 ( 0.21 ) & 2.17 ( 0.08 ) & 7.74 & 0.48 & 1 & 3.91 & 2.17\\\\\n", + "\t8 & 1000 & 100 & 0.1 & 0.10 & 0.51 & 1 ( 0 ) & 2.97 ( 0.15 ) & 1.29 ( 0.07 ) & 7.68 & 0.36 & 1 & 2.97 & 1.29\\\\\n", + "\t9 & 50 & 500 & 0.1 & 10.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t10 & 100 & 500 & 0.1 & 5.00 & 0.01 & 1 ( 0 ) & 24.57 ( 0.55 ) & 4.72 ( 0.08 ) & 25.85 & 0.95 & 1 & 24.57 & 4.72\\\\\n", + "\t11 & 500 & 500 & 0.1 & 1.00 & 0.09 & 1 ( 0 ) & 23.57 ( 0.51 ) & 2.43 ( 0.1 ) & 27.14 & 0.86 & 1 & 23.57 & 2.43\\\\\n", + "\t12 & 1000 & 500 & 0.1 & 0.50 & 0.14 & 1 ( 0 ) & 22.61 ( 0.5 ) & 1.31 ( 0.08 ) & 27.30 & 0.82 & 1 & 22.61 & 1.31\\\\\n", + "\t13 & 50 & 1000 & 0.1 & 20.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t14 & 100 & 1000 & 0.1 & 10.00 & 0.01 & 1 ( 0 ) & 48.35 ( 0.66 ) & 4.88 ( 0.08 ) & 49.47 & 0.98 & 1 & 48.35 & 4.88\\\\\n", + "\t15 & 500 & 1000 & 0.1 & 2.00 & 0.04 & 1 ( 0 ) & 48.59 ( 0.73 ) & 2.71 ( 0.1 ) & 51.88 & 0.94 & 1 & 48.59 & 2.71\\\\\n", + "\t16 & 1000 & 1000 & 0.1 & 1.00 & 0.06 & 1 ( 0 ) & 46.74 ( 0.64 ) & 1.75 ( 0.09 ) & 50.99 & 0.92 & 1 & 46.74 & 1.75\\\\\n", + "\t17 & 50 & 50 & 0.3 & 1.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t18 & 100 & 50 & 0.3 & 0.50 & 0.10 & 1 ( 0 ) & 1.68 ( 0.12 ) & 4.86 ( 0.08 ) & 2.81 & 0.54 & 1 & 1.68 & 4.86\\\\\n", + "\t19 & 500 & 50 & 0.3 & 0.10 & 0.44 & 1 ( 0 ) & 1.57 ( 0.12 ) & 2.74 ( 0.08 ) & 4.83 & 0.3 & 1 & 1.57 & 2.74\\\\\n", + "\t20 & 1000 & 50 & 0.3 & 0.05 & 0.62 & 1 ( 0 ) & 1.33 ( 0.1 ) & 1.44 ( 0.08 ) & 5.89 & 0.21 & 1 & 1.33 & 1.44\\\\\n", + "\t21 & 50 & 100 & 0.3 & 2.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t22 & 100 & 100 & 0.3 & 1.00 & 0.05 & 1 ( 0 ) & 4.45 ( 0.2 ) & 4.85 ( 0.08 ) & 5.60 & 0.78 & 1 & 4.45 & 4.85\\\\\n", + "\t23 & 500 & 100 & 0.3 & 0.20 & 0.33 & 1 ( 0 ) & 3.36 ( 0.19 ) & 2.57 ( 0.09 ) & 6.79 & 0.46 & 1 & 3.36 & 2.57\\\\\n", + "\t24 & 1000 & 100 & 0.3 & 0.10 & 0.47 & 1 ( 0 ) & 3.43 ( 0.17 ) & 1.61 ( 0.09 ) & 7.82 & 0.41 & 1 & 3.43 & 1.61\\\\\n", + "\t25 & 50 & 500 & 0.3 & 10.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t26 & 100 & 500 & 0.3 & 5.00 & 0.01 & 1 ( 0 ) & 23.69 ( 0.53 ) & 4.87 ( 0.08 ) & 24.82 & 0.95 & 1 & 23.69 & 4.87\\\\\n", + "\t27 & 500 & 500 & 0.3 & 1.00 & 0.07 & 1 ( 0 ) & 22.84 ( 0.44 ) & 3.11 ( 0.09 ) & 25.73 & 0.89 & 1 & 22.84 & 3.11\\\\\n", + "\t28 & 1000 & 500 & 0.3 & 0.50 & 0.13 & 1 ( 0 ) & 22.24 ( 0.43 ) & 1.77 ( 0.09 ) & 26.47 & 0.84 & 1 & 22.24 & 1.77\\\\\n", + "\t29 & 50 & 1000 & 0.3 & 20.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t30 & 100 & 1000 & 0.3 & 10.00 & 0.01 & 1 ( 0 ) & 48.06 ( 0.76 ) & 5.02 ( 0.08 ) & 49.04 & 0.98 & 1 & 48.06 & 5.02\\\\\n", + "\t⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮\\\\\n", + "\t51 & 500 & 50 & 0.7 & 0.10 & 0.45 & 1 ( 0 ) & 2.14 ( 0.13 ) & 3.36 ( 0.08 ) & 4.78 & 0.43 & 1 & 2.14 & 3.36\\\\\n", + "\t52 & 1000 & 50 & 0.7 & 0.05 & 0.60 & 1 ( 0 ) & 2.66 ( 0.14 ) & 2.27 ( 0.08 ) & 6.39 & 0.39 & 1 & 2.66 & 2.27\\\\\n", + "\t53 & 50 & 100 & 0.7 & 2.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t54 & 100 & 100 & 0.7 & 1.00 & 0.08 & 1 ( 0 ) & 4.36 ( 0.22 ) & 4.8 ( 0.09 ) & 5.56 & 0.77 & 1 & 4.36 & 4.80\\\\\n", + "\t55 & 500 & 100 & 0.7 & 0.20 & 0.38 & 1 ( 0 ) & 4.03 ( 0.18 ) & 3.1 ( 0.09 ) & 6.93 & 0.56 & 1 & 4.03 & 3.10\\\\\n", + "\t56 & 1000 & 100 & 0.7 & 0.10 & 0.50 & 1 ( 0 ) & 4.65 ( 0.22 ) & 2 ( 0.07 ) & 8.65 & 0.51 & 1 & 4.65 & 2.00\\\\\n", + "\t57 & 50 & 500 & 0.7 & 10.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t58 & 100 & 500 & 0.7 & 5.00 & 0.02 & 1 ( 0 ) & 23.58 ( 0.53 ) & 4.72 ( 0.09 ) & 24.86 & 0.95 & 1 & 23.58 & 4.72\\\\\n", + "\t59 & 500 & 500 & 0.7 & 1.00 & 0.10 & 1 ( 0 ) & 23.09 ( 0.56 ) & 3.38 ( 0.09 ) & 25.71 & 0.89 & 1 & 23.09 & 3.38\\\\\n", + "\t60 & 1000 & 500 & 0.7 & 0.50 & 0.14 & 1 ( 0 ) & 23.33 ( 0.53 ) & 2.58 ( 0.07 ) & 26.75 & 0.87 & 1 & 23.33 & 2.58\\\\\n", + "\t61 & 50 & 1000 & 0.7 & 20.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t62 & 100 & 1000 & 0.7 & 10.00 & 0.01 & 1 ( 0 ) & 46.8 ( 0.69 ) & 5.13 ( 0.07 ) & 47.67 & 0.98 & 1 & 46.80 & 5.13\\\\\n", + "\t63 & 500 & 1000 & 0.7 & 2.00 & 0.05 & 1 ( 0 ) & 48.68 ( 0.77 ) & 3.54 ( 0.08 ) & 51.14 & 0.95 & 1 & 48.68 & 3.54\\\\\n", + "\t64 & 1000 & 1000 & 0.7 & 1.00 & 0.07 & 1 ( 0 ) & 47.14 ( 0.7 ) & 2.73 ( 0.07 ) & 50.41 & 0.93 & 1 & 47.14 & 2.73\\\\\n", + "\t65 & 50 & 50 & 0.9 & 1.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t66 & 100 & 50 & 0.9 & 0.50 & 0.12 & 1 ( 0 ) & 2.09 ( 0.16 ) & 4.98 ( 0.09 ) & 3.06 & 0.62 & 1 & 2.09 & 4.98\\\\\n", + "\t67 & 500 & 50 & 0.9 & 0.10 & 0.45 & 1 ( 0 ) & 2.6 ( 0.13 ) & 3.33 ( 0.08 ) & 5.27 & 0.47 & 1 & 2.60 & 3.33\\\\\n", + "\t68 & 1000 & 50 & 0.9 & 0.05 & 0.51 & 1 ( 0 ) & 3.48 ( 0.17 ) & 2.35 ( 0.08 ) & 7.13 & 0.47 & 1 & 3.48 & 2.35\\\\\n", + "\t69 & 50 & 100 & 0.9 & 2.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t70 & 100 & 100 & 0.9 & 1.00 & 0.07 & 1 ( 0 ) & 4.4 ( 0.23 ) & 4.96 ( 0.09 ) & 5.43 & 0.81 & 1 & 4.40 & 4.96\\\\\n", + "\t71 & 500 & 100 & 0.9 & 0.20 & 0.35 & 1 ( 0 ) & 4.57 ( 0.24 ) & 3.5 ( 0.08 ) & 7.07 & 0.62 & 1 & 4.57 & 3.50\\\\\n", + "\t72 & 1000 & 100 & 0.9 & 0.10 & 0.37 & 1 ( 0 ) & 6.43 ( 0.28 ) & 2.57 ( 0.08 ) & 9.86 & 0.63 & 1 & 6.43 & 2.57\\\\\n", + "\t73 & 50 & 500 & 0.9 & 10.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t74 & 100 & 500 & 0.9 & 5.00 & 0.01 & 1 ( 0 ) & 24.58 ( 0.66 ) & 5.1 ( 0.09 ) & 25.48 & 0.96 & 1 & 24.58 & 5.10\\\\\n", + "\t75 & 500 & 500 & 0.9 & 1.00 & 0.08 & 1 ( 0 ) & 24.91 ( 0.57 ) & 3.53 ( 0.09 ) & 27.38 & 0.91 & 1 & 24.91 & 3.53\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.50 & 0.13 & 1 ( 0 ) & 24.53 ( 0.53 ) & 2.84 ( 0.08 ) & 27.69 & 0.88 & 1 & 24.53 & 2.84\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.00 & 0.00 & 1 ( 0 ) & 47.19 ( 0.96 ) & 5.2 ( 0.08 ) & 47.99 & 0.98 & 1 & 47.19 & 5.20\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.00 & 0.04 & 1 ( 0 ) & 48.11 ( 0.92 ) & 3.78 ( 0.08 ) & 50.33 & 0.95 & 1 & 48.11 & 3.78\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.00 & 0.07 & 1 ( 0 ) & 49.47 ( 0.78 ) & 2.97 ( 0.07 ) & 52.50 & 0.94 & 1 & 49.47 & 2.97\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 80 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 2 | 100 | 50 | 0.1 | 0.50 | 0.10 | 1 ( 0 ) | 2.05 ( 0.14 ) | 4.71 ( 0.08 ) | 3.31 | 0.56 | 1 | 2.05 | 4.71 |\n", + "| 3 | 500 | 50 | 0.1 | 0.10 | 0.50 | 1 ( 0 ) | 1.4 ( 0.12 ) | 2.4 ( 0.08 ) | 5.00 | 0.25 | 1 | 1.40 | 2.40 |\n", + "| 4 | 1000 | 50 | 0.1 | 0.05 | 0.69 | 1 ( 0 ) | 0.98 ( 0.09 ) | 1.2 ( 0.08 ) | 5.78 | 0.15 | 1 | 0.98 | 1.20 |\n", + "| 5 | 50 | 100 | 0.1 | 2.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 6 | 100 | 100 | 0.1 | 1.00 | 0.06 | 1 ( 0 ) | 3.95 ( 0.21 ) | 4.66 ( 0.08 ) | 5.29 | 0.72 | 1 | 3.95 | 4.66 |\n", + "| 7 | 500 | 100 | 0.1 | 0.20 | 0.35 | 1 ( 0 ) | 3.91 ( 0.21 ) | 2.17 ( 0.08 ) | 7.74 | 0.48 | 1 | 3.91 | 2.17 |\n", + "| 8 | 1000 | 100 | 0.1 | 0.10 | 0.51 | 1 ( 0 ) | 2.97 ( 0.15 ) | 1.29 ( 0.07 ) | 7.68 | 0.36 | 1 | 2.97 | 1.29 |\n", + "| 9 | 50 | 500 | 0.1 | 10.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 10 | 100 | 500 | 0.1 | 5.00 | 0.01 | 1 ( 0 ) | 24.57 ( 0.55 ) | 4.72 ( 0.08 ) | 25.85 | 0.95 | 1 | 24.57 | 4.72 |\n", + "| 11 | 500 | 500 | 0.1 | 1.00 | 0.09 | 1 ( 0 ) | 23.57 ( 0.51 ) | 2.43 ( 0.1 ) | 27.14 | 0.86 | 1 | 23.57 | 2.43 |\n", + "| 12 | 1000 | 500 | 0.1 | 0.50 | 0.14 | 1 ( 0 ) | 22.61 ( 0.5 ) | 1.31 ( 0.08 ) | 27.30 | 0.82 | 1 | 22.61 | 1.31 |\n", + "| 13 | 50 | 1000 | 0.1 | 20.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 14 | 100 | 1000 | 0.1 | 10.00 | 0.01 | 1 ( 0 ) | 48.35 ( 0.66 ) | 4.88 ( 0.08 ) | 49.47 | 0.98 | 1 | 48.35 | 4.88 |\n", + "| 15 | 500 | 1000 | 0.1 | 2.00 | 0.04 | 1 ( 0 ) | 48.59 ( 0.73 ) | 2.71 ( 0.1 ) | 51.88 | 0.94 | 1 | 48.59 | 2.71 |\n", + "| 16 | 1000 | 1000 | 0.1 | 1.00 | 0.06 | 1 ( 0 ) | 46.74 ( 0.64 ) | 1.75 ( 0.09 ) | 50.99 | 0.92 | 1 | 46.74 | 1.75 |\n", + "| 17 | 50 | 50 | 0.3 | 1.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 18 | 100 | 50 | 0.3 | 0.50 | 0.10 | 1 ( 0 ) | 1.68 ( 0.12 ) | 4.86 ( 0.08 ) | 2.81 | 0.54 | 1 | 1.68 | 4.86 |\n", + "| 19 | 500 | 50 | 0.3 | 0.10 | 0.44 | 1 ( 0 ) | 1.57 ( 0.12 ) | 2.74 ( 0.08 ) | 4.83 | 0.3 | 1 | 1.57 | 2.74 |\n", + "| 20 | 1000 | 50 | 0.3 | 0.05 | 0.62 | 1 ( 0 ) | 1.33 ( 0.1 ) | 1.44 ( 0.08 ) | 5.89 | 0.21 | 1 | 1.33 | 1.44 |\n", + "| 21 | 50 | 100 | 0.3 | 2.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 22 | 100 | 100 | 0.3 | 1.00 | 0.05 | 1 ( 0 ) | 4.45 ( 0.2 ) | 4.85 ( 0.08 ) | 5.60 | 0.78 | 1 | 4.45 | 4.85 |\n", + "| 23 | 500 | 100 | 0.3 | 0.20 | 0.33 | 1 ( 0 ) | 3.36 ( 0.19 ) | 2.57 ( 0.09 ) | 6.79 | 0.46 | 1 | 3.36 | 2.57 |\n", + "| 24 | 1000 | 100 | 0.3 | 0.10 | 0.47 | 1 ( 0 ) | 3.43 ( 0.17 ) | 1.61 ( 0.09 ) | 7.82 | 0.41 | 1 | 3.43 | 1.61 |\n", + "| 25 | 50 | 500 | 0.3 | 10.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 26 | 100 | 500 | 0.3 | 5.00 | 0.01 | 1 ( 0 ) | 23.69 ( 0.53 ) | 4.87 ( 0.08 ) | 24.82 | 0.95 | 1 | 23.69 | 4.87 |\n", + "| 27 | 500 | 500 | 0.3 | 1.00 | 0.07 | 1 ( 0 ) | 22.84 ( 0.44 ) | 3.11 ( 0.09 ) | 25.73 | 0.89 | 1 | 22.84 | 3.11 |\n", + "| 28 | 1000 | 500 | 0.3 | 0.50 | 0.13 | 1 ( 0 ) | 22.24 ( 0.43 ) | 1.77 ( 0.09 ) | 26.47 | 0.84 | 1 | 22.24 | 1.77 |\n", + "| 29 | 50 | 1000 | 0.3 | 20.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 30 | 100 | 1000 | 0.3 | 10.00 | 0.01 | 1 ( 0 ) | 48.06 ( 0.76 ) | 5.02 ( 0.08 ) | 49.04 | 0.98 | 1 | 48.06 | 5.02 |\n", + "| ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ |\n", + "| 51 | 500 | 50 | 0.7 | 0.10 | 0.45 | 1 ( 0 ) | 2.14 ( 0.13 ) | 3.36 ( 0.08 ) | 4.78 | 0.43 | 1 | 2.14 | 3.36 |\n", + "| 52 | 1000 | 50 | 0.7 | 0.05 | 0.60 | 1 ( 0 ) | 2.66 ( 0.14 ) | 2.27 ( 0.08 ) | 6.39 | 0.39 | 1 | 2.66 | 2.27 |\n", + "| 53 | 50 | 100 | 0.7 | 2.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 54 | 100 | 100 | 0.7 | 1.00 | 0.08 | 1 ( 0 ) | 4.36 ( 0.22 ) | 4.8 ( 0.09 ) | 5.56 | 0.77 | 1 | 4.36 | 4.80 |\n", + "| 55 | 500 | 100 | 0.7 | 0.20 | 0.38 | 1 ( 0 ) | 4.03 ( 0.18 ) | 3.1 ( 0.09 ) | 6.93 | 0.56 | 1 | 4.03 | 3.10 |\n", + "| 56 | 1000 | 100 | 0.7 | 0.10 | 0.50 | 1 ( 0 ) | 4.65 ( 0.22 ) | 2 ( 0.07 ) | 8.65 | 0.51 | 1 | 4.65 | 2.00 |\n", + "| 57 | 50 | 500 | 0.7 | 10.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 58 | 100 | 500 | 0.7 | 5.00 | 0.02 | 1 ( 0 ) | 23.58 ( 0.53 ) | 4.72 ( 0.09 ) | 24.86 | 0.95 | 1 | 23.58 | 4.72 |\n", + "| 59 | 500 | 500 | 0.7 | 1.00 | 0.10 | 1 ( 0 ) | 23.09 ( 0.56 ) | 3.38 ( 0.09 ) | 25.71 | 0.89 | 1 | 23.09 | 3.38 |\n", + "| 60 | 1000 | 500 | 0.7 | 0.50 | 0.14 | 1 ( 0 ) | 23.33 ( 0.53 ) | 2.58 ( 0.07 ) | 26.75 | 0.87 | 1 | 23.33 | 2.58 |\n", + "| 61 | 50 | 1000 | 0.7 | 20.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 62 | 100 | 1000 | 0.7 | 10.00 | 0.01 | 1 ( 0 ) | 46.8 ( 0.69 ) | 5.13 ( 0.07 ) | 47.67 | 0.98 | 1 | 46.80 | 5.13 |\n", + "| 63 | 500 | 1000 | 0.7 | 2.00 | 0.05 | 1 ( 0 ) | 48.68 ( 0.77 ) | 3.54 ( 0.08 ) | 51.14 | 0.95 | 1 | 48.68 | 3.54 |\n", + "| 64 | 1000 | 1000 | 0.7 | 1.00 | 0.07 | 1 ( 0 ) | 47.14 ( 0.7 ) | 2.73 ( 0.07 ) | 50.41 | 0.93 | 1 | 47.14 | 2.73 |\n", + "| 65 | 50 | 50 | 0.9 | 1.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 66 | 100 | 50 | 0.9 | 0.50 | 0.12 | 1 ( 0 ) | 2.09 ( 0.16 ) | 4.98 ( 0.09 ) | 3.06 | 0.62 | 1 | 2.09 | 4.98 |\n", + "| 67 | 500 | 50 | 0.9 | 0.10 | 0.45 | 1 ( 0 ) | 2.6 ( 0.13 ) | 3.33 ( 0.08 ) | 5.27 | 0.47 | 1 | 2.60 | 3.33 |\n", + "| 68 | 1000 | 50 | 0.9 | 0.05 | 0.51 | 1 ( 0 ) | 3.48 ( 0.17 ) | 2.35 ( 0.08 ) | 7.13 | 0.47 | 1 | 3.48 | 2.35 |\n", + "| 69 | 50 | 100 | 0.9 | 2.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 70 | 100 | 100 | 0.9 | 1.00 | 0.07 | 1 ( 0 ) | 4.4 ( 0.23 ) | 4.96 ( 0.09 ) | 5.43 | 0.81 | 1 | 4.40 | 4.96 |\n", + "| 71 | 500 | 100 | 0.9 | 0.20 | 0.35 | 1 ( 0 ) | 4.57 ( 0.24 ) | 3.5 ( 0.08 ) | 7.07 | 0.62 | 1 | 4.57 | 3.50 |\n", + "| 72 | 1000 | 100 | 0.9 | 0.10 | 0.37 | 1 ( 0 ) | 6.43 ( 0.28 ) | 2.57 ( 0.08 ) | 9.86 | 0.63 | 1 | 6.43 | 2.57 |\n", + "| 73 | 50 | 500 | 0.9 | 10.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 74 | 100 | 500 | 0.9 | 5.00 | 0.01 | 1 ( 0 ) | 24.58 ( 0.66 ) | 5.1 ( 0.09 ) | 25.48 | 0.96 | 1 | 24.58 | 5.10 |\n", + "| 75 | 500 | 500 | 0.9 | 1.00 | 0.08 | 1 ( 0 ) | 24.91 ( 0.57 ) | 3.53 ( 0.09 ) | 27.38 | 0.91 | 1 | 24.91 | 3.53 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.50 | 0.13 | 1 ( 0 ) | 24.53 ( 0.53 ) | 2.84 ( 0.08 ) | 27.69 | 0.88 | 1 | 24.53 | 2.84 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.00 | 0.00 | 1 ( 0 ) | 47.19 ( 0.96 ) | 5.2 ( 0.08 ) | 47.99 | 0.98 | 1 | 47.19 | 5.20 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.00 | 0.04 | 1 ( 0 ) | 48.11 ( 0.92 ) | 3.78 ( 0.08 ) | 50.33 | 0.95 | 1 | 48.11 | 3.78 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.00 | 0.07 | 1 ( 0 ) | 49.47 ( 0.78 ) | 2.97 ( 0.07 ) | 52.50 | 0.94 | 1 | 49.47 | 2.97 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select\n", + "1 50 50 0.1 1.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "2 100 50 0.1 0.50 0.10 1 ( 0 ) 2.05 ( 0.14 ) 4.71 ( 0.08 ) 3.31 \n", + "3 500 50 0.1 0.10 0.50 1 ( 0 ) 1.4 ( 0.12 ) 2.4 ( 0.08 ) 5.00 \n", + "4 1000 50 0.1 0.05 0.69 1 ( 0 ) 0.98 ( 0.09 ) 1.2 ( 0.08 ) 5.78 \n", + "5 50 100 0.1 2.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "6 100 100 0.1 1.00 0.06 1 ( 0 ) 3.95 ( 0.21 ) 4.66 ( 0.08 ) 5.29 \n", + "7 500 100 0.1 0.20 0.35 1 ( 0 ) 3.91 ( 0.21 ) 2.17 ( 0.08 ) 7.74 \n", + "8 1000 100 0.1 0.10 0.51 1 ( 0 ) 2.97 ( 0.15 ) 1.29 ( 0.07 ) 7.68 \n", + "9 50 500 0.1 10.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "10 100 500 0.1 5.00 0.01 1 ( 0 ) 24.57 ( 0.55 ) 4.72 ( 0.08 ) 25.85 \n", + "11 500 500 0.1 1.00 0.09 1 ( 0 ) 23.57 ( 0.51 ) 2.43 ( 0.1 ) 27.14 \n", + "12 1000 500 0.1 0.50 0.14 1 ( 0 ) 22.61 ( 0.5 ) 1.31 ( 0.08 ) 27.30 \n", + "13 50 1000 0.1 20.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "14 100 1000 0.1 10.00 0.01 1 ( 0 ) 48.35 ( 0.66 ) 4.88 ( 0.08 ) 49.47 \n", + "15 500 1000 0.1 2.00 0.04 1 ( 0 ) 48.59 ( 0.73 ) 2.71 ( 0.1 ) 51.88 \n", + "16 1000 1000 0.1 1.00 0.06 1 ( 0 ) 46.74 ( 0.64 ) 1.75 ( 0.09 ) 50.99 \n", + "17 50 50 0.3 1.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "18 100 50 0.3 0.50 0.10 1 ( 0 ) 1.68 ( 0.12 ) 4.86 ( 0.08 ) 2.81 \n", + "19 500 50 0.3 0.10 0.44 1 ( 0 ) 1.57 ( 0.12 ) 2.74 ( 0.08 ) 4.83 \n", + "20 1000 50 0.3 0.05 0.62 1 ( 0 ) 1.33 ( 0.1 ) 1.44 ( 0.08 ) 5.89 \n", + "21 50 100 0.3 2.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "22 100 100 0.3 1.00 0.05 1 ( 0 ) 4.45 ( 0.2 ) 4.85 ( 0.08 ) 5.60 \n", + "23 500 100 0.3 0.20 0.33 1 ( 0 ) 3.36 ( 0.19 ) 2.57 ( 0.09 ) 6.79 \n", + "24 1000 100 0.3 0.10 0.47 1 ( 0 ) 3.43 ( 0.17 ) 1.61 ( 0.09 ) 7.82 \n", + "25 50 500 0.3 10.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "26 100 500 0.3 5.00 0.01 1 ( 0 ) 23.69 ( 0.53 ) 4.87 ( 0.08 ) 24.82 \n", + "27 500 500 0.3 1.00 0.07 1 ( 0 ) 22.84 ( 0.44 ) 3.11 ( 0.09 ) 25.73 \n", + "28 1000 500 0.3 0.50 0.13 1 ( 0 ) 22.24 ( 0.43 ) 1.77 ( 0.09 ) 26.47 \n", + "29 50 1000 0.3 20.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "30 100 1000 0.3 10.00 0.01 1 ( 0 ) 48.06 ( 0.76 ) 5.02 ( 0.08 ) 49.04 \n", + "⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ \n", + "51 500 50 0.7 0.10 0.45 1 ( 0 ) 2.14 ( 0.13 ) 3.36 ( 0.08 ) 4.78 \n", + "52 1000 50 0.7 0.05 0.60 1 ( 0 ) 2.66 ( 0.14 ) 2.27 ( 0.08 ) 6.39 \n", + "53 50 100 0.7 2.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "54 100 100 0.7 1.00 0.08 1 ( 0 ) 4.36 ( 0.22 ) 4.8 ( 0.09 ) 5.56 \n", + "55 500 100 0.7 0.20 0.38 1 ( 0 ) 4.03 ( 0.18 ) 3.1 ( 0.09 ) 6.93 \n", + "56 1000 100 0.7 0.10 0.50 1 ( 0 ) 4.65 ( 0.22 ) 2 ( 0.07 ) 8.65 \n", + "57 50 500 0.7 10.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "58 100 500 0.7 5.00 0.02 1 ( 0 ) 23.58 ( 0.53 ) 4.72 ( 0.09 ) 24.86 \n", + "59 500 500 0.7 1.00 0.10 1 ( 0 ) 23.09 ( 0.56 ) 3.38 ( 0.09 ) 25.71 \n", + "60 1000 500 0.7 0.50 0.14 1 ( 0 ) 23.33 ( 0.53 ) 2.58 ( 0.07 ) 26.75 \n", + "61 50 1000 0.7 20.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "62 100 1000 0.7 10.00 0.01 1 ( 0 ) 46.8 ( 0.69 ) 5.13 ( 0.07 ) 47.67 \n", + "63 500 1000 0.7 2.00 0.05 1 ( 0 ) 48.68 ( 0.77 ) 3.54 ( 0.08 ) 51.14 \n", + "64 1000 1000 0.7 1.00 0.07 1 ( 0 ) 47.14 ( 0.7 ) 2.73 ( 0.07 ) 50.41 \n", + "65 50 50 0.9 1.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "66 100 50 0.9 0.50 0.12 1 ( 0 ) 2.09 ( 0.16 ) 4.98 ( 0.09 ) 3.06 \n", + "67 500 50 0.9 0.10 0.45 1 ( 0 ) 2.6 ( 0.13 ) 3.33 ( 0.08 ) 5.27 \n", + "68 1000 50 0.9 0.05 0.51 1 ( 0 ) 3.48 ( 0.17 ) 2.35 ( 0.08 ) 7.13 \n", + "69 50 100 0.9 2.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "70 100 100 0.9 1.00 0.07 1 ( 0 ) 4.4 ( 0.23 ) 4.96 ( 0.09 ) 5.43 \n", + "71 500 100 0.9 0.20 0.35 1 ( 0 ) 4.57 ( 0.24 ) 3.5 ( 0.08 ) 7.07 \n", + "72 1000 100 0.9 0.10 0.37 1 ( 0 ) 6.43 ( 0.28 ) 2.57 ( 0.08 ) 9.86 \n", + "73 50 500 0.9 10.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "74 100 500 0.9 5.00 0.01 1 ( 0 ) 24.58 ( 0.66 ) 5.1 ( 0.09 ) 25.48 \n", + "75 500 500 0.9 1.00 0.08 1 ( 0 ) 24.91 ( 0.57 ) 3.53 ( 0.09 ) 27.38 \n", + "76 1000 500 0.9 0.50 0.13 1 ( 0 ) 24.53 ( 0.53 ) 2.84 ( 0.08 ) 27.69 \n", + "77 50 1000 0.9 20.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "78 100 1000 0.9 10.00 0.00 1 ( 0 ) 47.19 ( 0.96 ) 5.2 ( 0.08 ) 47.99 \n", + "79 500 1000 0.9 2.00 0.04 1 ( 0 ) 48.11 ( 0.92 ) 3.78 ( 0.08 ) 50.33 \n", + "80 1000 1000 0.9 1.00 0.07 1 ( 0 ) 49.47 ( 0.78 ) 2.97 ( 0.07 ) 52.50 \n", + " FDR ROC_mean FP_mean FN_mean\n", + "1 NaN 1 1.00 6.00 \n", + "2 0.56 1 2.05 4.71 \n", + "3 0.25 1 1.40 2.40 \n", + "4 0.15 1 0.98 1.20 \n", + "5 NaN 1 1.00 6.00 \n", + "6 0.72 1 3.95 4.66 \n", + "7 0.48 1 3.91 2.17 \n", + "8 0.36 1 2.97 1.29 \n", + "9 NaN 1 1.00 6.00 \n", + "10 0.95 1 24.57 4.72 \n", + "11 0.86 1 23.57 2.43 \n", + "12 0.82 1 22.61 1.31 \n", + "13 NaN 1 1.00 6.00 \n", + "14 0.98 1 48.35 4.88 \n", + "15 0.94 1 48.59 2.71 \n", + "16 0.92 1 46.74 1.75 \n", + "17 NaN 1 1.00 6.00 \n", + "18 0.54 1 1.68 4.86 \n", + "19 0.3 1 1.57 2.74 \n", + "20 0.21 1 1.33 1.44 \n", + "21 NaN 1 1.00 6.00 \n", + "22 0.78 1 4.45 4.85 \n", + "23 0.46 1 3.36 2.57 \n", + "24 0.41 1 3.43 1.61 \n", + "25 NaN 1 1.00 6.00 \n", + "26 0.95 1 23.69 4.87 \n", + "27 0.89 1 22.84 3.11 \n", + "28 0.84 1 22.24 1.77 \n", + "29 NaN 1 1.00 6.00 \n", + "30 0.98 1 48.06 5.02 \n", + "⋮ ⋮ ⋮ ⋮ ⋮ \n", + "51 0.43 1 2.14 3.36 \n", + "52 0.39 1 2.66 2.27 \n", + "53 NaN 1 1.00 6.00 \n", + "54 0.77 1 4.36 4.80 \n", + "55 0.56 1 4.03 3.10 \n", + "56 0.51 1 4.65 2.00 \n", + "57 NaN 1 1.00 6.00 \n", + "58 0.95 1 23.58 4.72 \n", + "59 0.89 1 23.09 3.38 \n", + "60 0.87 1 23.33 2.58 \n", + "61 NaN 1 1.00 6.00 \n", + "62 0.98 1 46.80 5.13 \n", + "63 0.95 1 48.68 3.54 \n", + "64 0.93 1 47.14 2.73 \n", + "65 NaN 1 1.00 6.00 \n", + "66 0.62 1 2.09 4.98 \n", + "67 0.47 1 2.60 3.33 \n", + "68 0.47 1 3.48 2.35 \n", + "69 NaN 1 1.00 6.00 \n", + "70 0.81 1 4.40 4.96 \n", + "71 0.62 1 4.57 3.50 \n", + "72 0.63 1 6.43 2.57 \n", + "73 NaN 1 1.00 6.00 \n", + "74 0.96 1 24.58 5.10 \n", + "75 0.91 1 24.91 3.53 \n", + "76 0.88 1 24.53 2.84 \n", + "77 NaN 1 1.00 6.00 \n", + "78 0.98 1 47.19 5.20 \n", + "79 0.95 1 48.11 3.78 \n", + "80 0.94 1 49.47 2.97 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_toe\n", + "\n", + "## export\n", + "write.table(result.table_toe, '../results_summary_bin/sim_toe_RF_binary.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_bin/.ipynb_checkpoints/1.4_sim_toe_compLasso_binary_update-checkpoint.ipynb b/simulations/notebooks_sim_bin/.ipynb_checkpoints/1.4_sim_toe_compLasso_binary_update-checkpoint.ipynb new file mode 100644 index 0000000..1e829f4 --- /dev/null +++ b/simulations/notebooks_sim_bin/.ipynb_checkpoints/1.4_sim_toe_compLasso_binary_update-checkpoint.ipynb @@ -0,0 +1,966 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize compositional lasso results on Toeplitz Simulation Scenarios for binary outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "rou.list = seq(0.1, 0.9, 0.2)\n", + "\n", + "files = NULL\n", + "for (rou in rou.list){\n", + " for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_toeplitz_corr', rou, paste('P', p, 'N', n, sep='_'), '.RData', sep=''))\n", + " }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "80" + ], + "text/latex": [ + "80" + ], + "text/markdown": [ + "80" + ], + "text/plain": [ + "[1] 80" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "length(files)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1] \"indx: 1\"\n", + "[1] \"indx: 2\"\n", + "[1] \"indx: 3\"\n", + "[1] \"indx: 4\"\n", + "[1] \"indx: 5\"\n", + "[1] \"indx: 6\"\n", + "[1] \"indx: 7\"\n", + "[1] \"indx: 8\"\n", + "[1] \"indx: 9\"\n", + "[1] \"indx: 10\"\n", + "[1] \"indx: 11\"\n", + "[1] \"indx: 12\"\n", + "[1] \"indx: 13\"\n", + "[1] \"indx: 14\"\n", + "[1] \"indx: 15\"\n", + "[1] \"indx: 16\"\n", + "[1] \"indx: 17\"\n", + "[1] \"indx: 18\"\n", + "[1] \"indx: 19\"\n", + "[1] \"indx: 20\"\n", + "[1] \"indx: 21\"\n", + "[1] \"indx: 22\"\n", + "[1] \"indx: 23\"\n", + "[1] \"indx: 24\"\n", + "[1] \"indx: 25\"\n", + "[1] \"indx: 26\"\n", + "[1] \"indx: 27\"\n", + "[1] \"indx: 28\"\n", + "[1] \"indx: 29\"\n", + "[1] \"indx: 30\"\n", + "[1] \"indx: 31\"\n", + "[1] \"indx: 32\"\n", + "[1] \"indx: 33\"\n", + "[1] \"indx: 34\"\n", + "[1] \"indx: 35\"\n", + "[1] \"indx: 36\"\n", + "[1] \"indx: 37\"\n", + "[1] \"indx: 38\"\n", + "[1] \"indx: 39\"\n", + "[1] \"indx: 40\"\n", + "[1] \"indx: 41\"\n", + "[1] \"indx: 42\"\n", + "[1] \"indx: 43\"\n", + "[1] \"indx: 44\"\n", + "[1] \"indx: 45\"\n", + "[1] \"indx: 46\"\n", + "[1] \"indx: 47\"\n", + "[1] \"indx: 48\"\n", + "[1] \"indx: 49\"\n", + "[1] \"indx: 50\"\n", + "[1] \"indx: 51\"\n", + "[1] \"indx: 52\"\n", + "[1] \"indx: 53\"\n", + "[1] \"indx: 54\"\n", + "[1] \"indx: 55\"\n", + "[1] \"indx: 56\"\n", + "[1] \"indx: 57\"\n", + "[1] \"indx: 58\"\n", + "[1] \"indx: 59\"\n", + "[1] \"indx: 60\"\n", + "[1] \"indx: 61\"\n", + "[1] \"indx: 62\"\n", + "[1] \"indx: 63\"\n", + "[1] \"indx: 64\"\n", + "[1] \"indx: 65\"\n", + "[1] \"indx: 66\"\n", + "[1] \"indx: 67\"\n", + "[1] \"indx: 68\"\n", + "[1] \"indx: 69\"\n", + "[1] \"indx: 70\"\n", + "[1] \"indx: 71\"\n", + "[1] \"indx: 72\"\n", + "[1] \"indx: 73\"\n", + "[1] \"indx: 74\"\n", + "[1] \"indx: 75\"\n", + "[1] \"indx: 76\"\n", + "[1] \"indx: 77\"\n", + "[1] \"indx: 78\"\n", + "[1] \"indx: 79\"\n", + "[1] \"indx: 80\"\n" + ] + } + ], + "source": [ + "avg_FDR = NULL\n", + "table_toe = NULL\n", + "tmp_num_select = rep(0, length(files))\n", + "for (i in 1:length(files)){\n", + " print(paste0('indx: ', i))\n", + " load(paste0(dir, '/binary_update/toe_GenCompLasso_binary_', i, '.RData')) \n", + " \n", + " table_toe = rbind(table_toe, results_toe_GenCompLasso[c('n', 'p', 'rou', 'FP', 'FN', 'ROC', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_toe_GenCompLasso$Stab.table))\n", + " \n", + " # calculate FDR\n", + " load(file_name, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_toe_GenCompLasso$Stab.table\n", + " FDR = NULL # false positive rate\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}\n", + "table_toe = as.data.frame(table_toe)\n", + "table_toe$num_select = tmp_num_select\n", + "table_toe$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
150500.114.84 ( 0.9 )0.93 ( 0.09 )0.97 ( 0 )0.1319.910.70
2100500.17.19 ( 0.43 )0.49 ( 0.07 )0.93 ( 0 )0.3312.700.53
3500500.11.93 ( 0.34 )0.16 ( 0.04 )0.9 ( 0 )0.7 7.770.16
41000500.11.37 ( 0.42 )0.01 ( 0.01 )0.9 ( 0 )0.79 7.360.10
5501000.136.64 ( 2.16 )0.65 ( 0.07 )0.99 ( 0 )0.0741.990.84
61001000.116.16 ( 1.22 )0.47 ( 0.06 )0.94 ( 0 )0.221.690.70
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 14.84 ( 0.9 ) & 0.93 ( 0.09 ) & 0.97 ( 0 ) & 0.13 & 19.91 & 0.70\\\\\n", + "\t2 & 100 & 50 & 0.1 & 7.19 ( 0.43 ) & 0.49 ( 0.07 ) & 0.93 ( 0 ) & 0.33 & 12.70 & 0.53\\\\\n", + "\t3 & 500 & 50 & 0.1 & 1.93 ( 0.34 ) & 0.16 ( 0.04 ) & 0.9 ( 0 ) & 0.7 & 7.77 & 0.16\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 1.37 ( 0.42 ) & 0.01 ( 0.01 ) & 0.9 ( 0 ) & 0.79 & 7.36 & 0.10\\\\\n", + "\t5 & 50 & 100 & 0.1 & 36.64 ( 2.16 ) & 0.65 ( 0.07 ) & 0.99 ( 0 ) & 0.07 & 41.99 & 0.84\\\\\n", + "\t6 & 100 & 100 & 0.1 & 16.16 ( 1.22 ) & 0.47 ( 0.06 ) & 0.94 ( 0 ) & 0.2 & 21.69 & 0.70\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 14.84 ( 0.9 ) | 0.93 ( 0.09 ) | 0.97 ( 0 ) | 0.13 | 19.91 | 0.70 |\n", + "| 2 | 100 | 50 | 0.1 | 7.19 ( 0.43 ) | 0.49 ( 0.07 ) | 0.93 ( 0 ) | 0.33 | 12.70 | 0.53 |\n", + "| 3 | 500 | 50 | 0.1 | 1.93 ( 0.34 ) | 0.16 ( 0.04 ) | 0.9 ( 0 ) | 0.7 | 7.77 | 0.16 |\n", + "| 4 | 1000 | 50 | 0.1 | 1.37 ( 0.42 ) | 0.01 ( 0.01 ) | 0.9 ( 0 ) | 0.79 | 7.36 | 0.10 |\n", + "| 5 | 50 | 100 | 0.1 | 36.64 ( 2.16 ) | 0.65 ( 0.07 ) | 0.99 ( 0 ) | 0.07 | 41.99 | 0.84 |\n", + "| 6 | 100 | 100 | 0.1 | 16.16 ( 1.22 ) | 0.47 ( 0.06 ) | 0.94 ( 0 ) | 0.2 | 21.69 | 0.70 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select FDR \n", + "1 50 50 0.1 14.84 ( 0.9 ) 0.93 ( 0.09 ) 0.97 ( 0 ) 0.13 19.91 0.70\n", + "2 100 50 0.1 7.19 ( 0.43 ) 0.49 ( 0.07 ) 0.93 ( 0 ) 0.33 12.70 0.53\n", + "3 500 50 0.1 1.93 ( 0.34 ) 0.16 ( 0.04 ) 0.9 ( 0 ) 0.7 7.77 0.16\n", + "4 1000 50 0.1 1.37 ( 0.42 ) 0.01 ( 0.01 ) 0.9 ( 0 ) 0.79 7.36 0.10\n", + "5 50 100 0.1 36.64 ( 2.16 ) 0.65 ( 0.07 ) 0.99 ( 0 ) 0.07 41.99 0.84\n", + "6 100 100 0.1 16.16 ( 1.22 ) 0.47 ( 0.06 ) 0.94 ( 0 ) 0.2 21.69 0.70" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
755005000.96.75 ( 0.73 )2.76 ( 0.07 )0.79 ( 0 )0.4 9.990.56
7610005000.92.48 ( 0.28 )2.79 ( 0.05 )0.8 ( 0 )0.73 5.690.37
775010000.9201.98 ( 10.15 )2.34 ( 0.16 )1 ( 0 )0.01205.640.98
7810010000.970.81 ( 4.4 )3.05 ( 0.12 )0.95 ( 0 )0.03 73.760.96
7950010000.97.71 ( 1.09 )2.85 ( 0.06 )0.79 ( 0 )0.38 10.860.59
80100010000.92.41 ( 0.17 )2.77 ( 0.07 )0.8 ( 0 )0.76 5.640.39
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 6.75 ( 0.73 ) & 2.76 ( 0.07 ) & 0.79 ( 0 ) & 0.4 & 9.99 & 0.56\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 2.48 ( 0.28 ) & 2.79 ( 0.05 ) & 0.8 ( 0 ) & 0.73 & 5.69 & 0.37\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 201.98 ( 10.15 ) & 2.34 ( 0.16 ) & 1 ( 0 ) & 0.01 & 205.64 & 0.98\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 70.81 ( 4.4 ) & 3.05 ( 0.12 ) & 0.95 ( 0 ) & 0.03 & 73.76 & 0.96\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 7.71 ( 1.09 ) & 2.85 ( 0.06 ) & 0.79 ( 0 ) & 0.38 & 10.86 & 0.59\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 2.41 ( 0.17 ) & 2.77 ( 0.07 ) & 0.8 ( 0 ) & 0.76 & 5.64 & 0.39\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 6.75 ( 0.73 ) | 2.76 ( 0.07 ) | 0.79 ( 0 ) | 0.4 | 9.99 | 0.56 |\n", + "| 76 | 1000 | 500 | 0.9 | 2.48 ( 0.28 ) | 2.79 ( 0.05 ) | 0.8 ( 0 ) | 0.73 | 5.69 | 0.37 |\n", + "| 77 | 50 | 1000 | 0.9 | 201.98 ( 10.15 ) | 2.34 ( 0.16 ) | 1 ( 0 ) | 0.01 | 205.64 | 0.98 |\n", + "| 78 | 100 | 1000 | 0.9 | 70.81 ( 4.4 ) | 3.05 ( 0.12 ) | 0.95 ( 0 ) | 0.03 | 73.76 | 0.96 |\n", + "| 79 | 500 | 1000 | 0.9 | 7.71 ( 1.09 ) | 2.85 ( 0.06 ) | 0.79 ( 0 ) | 0.38 | 10.86 | 0.59 |\n", + "| 80 | 1000 | 1000 | 0.9 | 2.41 ( 0.17 ) | 2.77 ( 0.07 ) | 0.8 ( 0 ) | 0.76 | 5.64 | 0.39 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select FDR \n", + "75 500 500 0.9 6.75 ( 0.73 ) 2.76 ( 0.07 ) 0.79 ( 0 ) 0.4 9.99 0.56\n", + "76 1000 500 0.9 2.48 ( 0.28 ) 2.79 ( 0.05 ) 0.8 ( 0 ) 0.73 5.69 0.37\n", + "77 50 1000 0.9 201.98 ( 10.15 ) 2.34 ( 0.16 ) 1 ( 0 ) 0.01 205.64 0.98\n", + "78 100 1000 0.9 70.81 ( 4.4 ) 3.05 ( 0.12 ) 0.95 ( 0 ) 0.03 73.76 0.96\n", + "79 500 1000 0.9 7.71 ( 1.09 ) 2.85 ( 0.06 ) 0.79 ( 0 ) 0.38 10.86 0.59\n", + "80 1000 1000 0.9 2.41 ( 0.17 ) 2.77 ( 0.07 ) 0.8 ( 0 ) 0.76 5.64 0.39" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_toe <- apply(table_toe,2,as.character)\n", + "rownames(result.table_toe) = rownames(table_toe)\n", + "result.table_toe = as.data.frame(result.table_toe)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_toe$n = tidyr::extract_numeric(result.table_toe$n)\n", + "result.table_toe$p = tidyr::extract_numeric(result.table_toe$p)\n", + "result.table_toe$ratio = result.table_toe$p / result.table_toe$n\n", + "\n", + "result.table_toe = result.table_toe[c('n', 'p', 'rou', 'ratio', 'Stab', 'ROC', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_toe)[1:4] = c('N', 'P', 'Corr', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_toe$Stab = as.numeric(as.character(result.table_toe$Stab))\n", + "result.table_toe$num_select = as.numeric(as.character(result.table_toe$num_select))\n", + "\n", + "result.table_toe$ROC_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$ROC))\n", + "result.table_toe$FP_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$FP))\n", + "result.table_toe$FN_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$FN))" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "
A data.frame: 0 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
\n" + ], + "text/latex": [ + "A data.frame: 0 × 13\n", + "\\begin{tabular}{lllllllllllll}\n", + " N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 0 × 13\n", + "\n", + "| N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select FDR ROC_mean FP_mean FN_mean" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check whether missing values exists\n", + "result.table_toe[rowSums(is.na(result.table_toe)) > 0,]" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 500.11.000.130.97 ( 0 )14.84 ( 0.9 ) 0.93 ( 0.09 )19.910.7 0.9714.840.93
2 100 500.10.500.330.93 ( 0 )7.19 ( 0.43 ) 0.49 ( 0.07 )12.700.530.93 7.190.49
3 500 500.10.100.700.9 ( 0 ) 1.93 ( 0.34 ) 0.16 ( 0.04 ) 7.770.160.90 1.930.16
41000 500.10.050.790.9 ( 0 ) 1.37 ( 0.42 ) 0.01 ( 0.01 ) 7.360.1 0.90 1.370.01
5 501000.12.000.070.99 ( 0 )36.64 ( 2.16 )0.65 ( 0.07 )41.990.840.9936.640.65
6 1001000.11.000.200.94 ( 0 )16.16 ( 1.22 )0.47 ( 0.06 )21.690.7 0.9416.160.47
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1.00 & 0.13 & 0.97 ( 0 ) & 14.84 ( 0.9 ) & 0.93 ( 0.09 ) & 19.91 & 0.7 & 0.97 & 14.84 & 0.93\\\\\n", + "\t2 & 100 & 50 & 0.1 & 0.50 & 0.33 & 0.93 ( 0 ) & 7.19 ( 0.43 ) & 0.49 ( 0.07 ) & 12.70 & 0.53 & 0.93 & 7.19 & 0.49\\\\\n", + "\t3 & 500 & 50 & 0.1 & 0.10 & 0.70 & 0.9 ( 0 ) & 1.93 ( 0.34 ) & 0.16 ( 0.04 ) & 7.77 & 0.16 & 0.90 & 1.93 & 0.16\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 0.05 & 0.79 & 0.9 ( 0 ) & 1.37 ( 0.42 ) & 0.01 ( 0.01 ) & 7.36 & 0.1 & 0.90 & 1.37 & 0.01\\\\\n", + "\t5 & 50 & 100 & 0.1 & 2.00 & 0.07 & 0.99 ( 0 ) & 36.64 ( 2.16 ) & 0.65 ( 0.07 ) & 41.99 & 0.84 & 0.99 & 36.64 & 0.65\\\\\n", + "\t6 & 100 & 100 & 0.1 & 1.00 & 0.20 & 0.94 ( 0 ) & 16.16 ( 1.22 ) & 0.47 ( 0.06 ) & 21.69 & 0.7 & 0.94 & 16.16 & 0.47\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1.00 | 0.13 | 0.97 ( 0 ) | 14.84 ( 0.9 ) | 0.93 ( 0.09 ) | 19.91 | 0.7 | 0.97 | 14.84 | 0.93 |\n", + "| 2 | 100 | 50 | 0.1 | 0.50 | 0.33 | 0.93 ( 0 ) | 7.19 ( 0.43 ) | 0.49 ( 0.07 ) | 12.70 | 0.53 | 0.93 | 7.19 | 0.49 |\n", + "| 3 | 500 | 50 | 0.1 | 0.10 | 0.70 | 0.9 ( 0 ) | 1.93 ( 0.34 ) | 0.16 ( 0.04 ) | 7.77 | 0.16 | 0.90 | 1.93 | 0.16 |\n", + "| 4 | 1000 | 50 | 0.1 | 0.05 | 0.79 | 0.9 ( 0 ) | 1.37 ( 0.42 ) | 0.01 ( 0.01 ) | 7.36 | 0.1 | 0.90 | 1.37 | 0.01 |\n", + "| 5 | 50 | 100 | 0.1 | 2.00 | 0.07 | 0.99 ( 0 ) | 36.64 ( 2.16 ) | 0.65 ( 0.07 ) | 41.99 | 0.84 | 0.99 | 36.64 | 0.65 |\n", + "| 6 | 100 | 100 | 0.1 | 1.00 | 0.20 | 0.94 ( 0 ) | 16.16 ( 1.22 ) | 0.47 ( 0.06 ) | 21.69 | 0.7 | 0.94 | 16.16 | 0.47 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select\n", + "1 50 50 0.1 1.00 0.13 0.97 ( 0 ) 14.84 ( 0.9 ) 0.93 ( 0.09 ) 19.91 \n", + "2 100 50 0.1 0.50 0.33 0.93 ( 0 ) 7.19 ( 0.43 ) 0.49 ( 0.07 ) 12.70 \n", + "3 500 50 0.1 0.10 0.70 0.9 ( 0 ) 1.93 ( 0.34 ) 0.16 ( 0.04 ) 7.77 \n", + "4 1000 50 0.1 0.05 0.79 0.9 ( 0 ) 1.37 ( 0.42 ) 0.01 ( 0.01 ) 7.36 \n", + "5 50 100 0.1 2.00 0.07 0.99 ( 0 ) 36.64 ( 2.16 ) 0.65 ( 0.07 ) 41.99 \n", + "6 100 100 0.1 1.00 0.20 0.94 ( 0 ) 16.16 ( 1.22 ) 0.47 ( 0.06 ) 21.69 \n", + " FDR ROC_mean FP_mean FN_mean\n", + "1 0.7 0.97 14.84 0.93 \n", + "2 0.53 0.93 7.19 0.49 \n", + "3 0.16 0.90 1.93 0.16 \n", + "4 0.1 0.90 1.37 0.01 \n", + "5 0.84 0.99 36.64 0.65 \n", + "6 0.7 0.94 16.16 0.47 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
75 500 5000.9 1.00.400.79 ( 0 )6.75 ( 0.73 ) 2.76 ( 0.07 ) 9.990.560.79 6.752.76
761000 5000.9 0.50.730.8 ( 0 ) 2.48 ( 0.28 ) 2.79 ( 0.05 ) 5.690.370.80 2.482.79
77 5010000.920.00.011 ( 0 ) 201.98 ( 10.15 )2.34 ( 0.16 )205.640.981.00201.982.34
78 10010000.910.00.030.95 ( 0 )70.81 ( 4.4 ) 3.05 ( 0.12 ) 73.760.960.95 70.813.05
79 50010000.9 2.00.380.79 ( 0 )7.71 ( 1.09 ) 2.85 ( 0.06 ) 10.860.590.79 7.712.85
80100010000.9 1.00.760.8 ( 0 ) 2.41 ( 0.17 ) 2.77 ( 0.07 ) 5.640.390.80 2.412.77
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 1.0 & 0.40 & 0.79 ( 0 ) & 6.75 ( 0.73 ) & 2.76 ( 0.07 ) & 9.99 & 0.56 & 0.79 & 6.75 & 2.76\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.5 & 0.73 & 0.8 ( 0 ) & 2.48 ( 0.28 ) & 2.79 ( 0.05 ) & 5.69 & 0.37 & 0.80 & 2.48 & 2.79\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.0 & 0.01 & 1 ( 0 ) & 201.98 ( 10.15 ) & 2.34 ( 0.16 ) & 205.64 & 0.98 & 1.00 & 201.98 & 2.34\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.0 & 0.03 & 0.95 ( 0 ) & 70.81 ( 4.4 ) & 3.05 ( 0.12 ) & 73.76 & 0.96 & 0.95 & 70.81 & 3.05\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.0 & 0.38 & 0.79 ( 0 ) & 7.71 ( 1.09 ) & 2.85 ( 0.06 ) & 10.86 & 0.59 & 0.79 & 7.71 & 2.85\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.0 & 0.76 & 0.8 ( 0 ) & 2.41 ( 0.17 ) & 2.77 ( 0.07 ) & 5.64 & 0.39 & 0.80 & 2.41 & 2.77\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 1.0 | 0.40 | 0.79 ( 0 ) | 6.75 ( 0.73 ) | 2.76 ( 0.07 ) | 9.99 | 0.56 | 0.79 | 6.75 | 2.76 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.5 | 0.73 | 0.8 ( 0 ) | 2.48 ( 0.28 ) | 2.79 ( 0.05 ) | 5.69 | 0.37 | 0.80 | 2.48 | 2.79 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.0 | 0.01 | 1 ( 0 ) | 201.98 ( 10.15 ) | 2.34 ( 0.16 ) | 205.64 | 0.98 | 1.00 | 201.98 | 2.34 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.0 | 0.03 | 0.95 ( 0 ) | 70.81 ( 4.4 ) | 3.05 ( 0.12 ) | 73.76 | 0.96 | 0.95 | 70.81 | 3.05 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.0 | 0.38 | 0.79 ( 0 ) | 7.71 ( 1.09 ) | 2.85 ( 0.06 ) | 10.86 | 0.59 | 0.79 | 7.71 | 2.85 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.0 | 0.76 | 0.8 ( 0 ) | 2.41 ( 0.17 ) | 2.77 ( 0.07 ) | 5.64 | 0.39 | 0.80 | 2.41 | 2.77 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "75 500 500 0.9 1.0 0.40 0.79 ( 0 ) 6.75 ( 0.73 ) 2.76 ( 0.07 )\n", + "76 1000 500 0.9 0.5 0.73 0.8 ( 0 ) 2.48 ( 0.28 ) 2.79 ( 0.05 )\n", + "77 50 1000 0.9 20.0 0.01 1 ( 0 ) 201.98 ( 10.15 ) 2.34 ( 0.16 )\n", + "78 100 1000 0.9 10.0 0.03 0.95 ( 0 ) 70.81 ( 4.4 ) 3.05 ( 0.12 )\n", + "79 500 1000 0.9 2.0 0.38 0.79 ( 0 ) 7.71 ( 1.09 ) 2.85 ( 0.06 )\n", + "80 1000 1000 0.9 1.0 0.76 0.8 ( 0 ) 2.41 ( 0.17 ) 2.77 ( 0.07 )\n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "75 9.99 0.56 0.79 6.75 2.76 \n", + "76 5.69 0.37 0.80 2.48 2.79 \n", + "77 205.64 0.98 1.00 201.98 2.34 \n", + "78 73.76 0.96 0.95 70.81 3.05 \n", + "79 10.86 0.59 0.79 7.71 2.85 \n", + "80 5.64 0.39 0.80 2.41 2.77 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 80 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 500.1 1.000.130.97 ( 0 )14.84 ( 0.9 ) 0.93 ( 0.09 ) 19.910.7 0.97 14.840.93
2 100 500.1 0.500.330.93 ( 0 )7.19 ( 0.43 ) 0.49 ( 0.07 ) 12.700.530.93 7.190.49
3 500 500.1 0.100.700.9 ( 0 ) 1.93 ( 0.34 ) 0.16 ( 0.04 ) 7.770.160.90 1.930.16
41000 500.1 0.050.790.9 ( 0 ) 1.37 ( 0.42 ) 0.01 ( 0.01 ) 7.360.1 0.90 1.370.01
5 50 1000.1 2.000.070.99 ( 0 )36.64 ( 2.16 ) 0.65 ( 0.07 ) 41.990.840.99 36.640.65
6 100 1000.1 1.000.200.94 ( 0 )16.16 ( 1.22 ) 0.47 ( 0.06 ) 21.690.7 0.94 16.160.47
7 500 1000.1 0.200.360.9 ( 0 ) 8.64 ( 1.35 ) 0.08 ( 0.03 ) 14.560.370.90 8.640.08
81000 1000.1 0.100.470.9 ( 0 ) 5.83 ( 1.4 ) 0.02 ( 0.01 ) 11.810.220.90 5.830.02
9 50 5000.110.000.011 ( 0 ) 248.06 ( 7.56 )0.56 ( 0.07 )253.500.981.00248.060.56
10 100 5000.1 5.000.031 ( 0 ) 132.04 ( 7.47 )0.33 ( 0.05 )137.710.951.00132.040.33
11 500 5000.1 1.000.340.91 ( 0 )12.55 ( 1.81 ) 0.04 ( 0.02 ) 18.510.520.91 12.550.04
121000 5000.1 0.500.690.9 ( 0 ) 3.02 ( 0.6 ) 0.01 ( 0.01 ) 9.010.220.90 3.020.01
13 5010000.120.000.011 ( 0 ) 398.98 ( 6.9 ) 0.8 ( 0.08 ) 404.180.991.00398.980.80
14 10010000.110.000.021 ( 0 ) 296.19 ( 8.29 )0.35 ( 0.05 )301.840.981.00296.190.35
15 50010000.1 2.000.390.9 ( 0 ) 10.2 ( 0.98 ) 0.1 ( 0.03 ) 16.100.520.90 10.200.10
16100010000.1 1.000.830.9 ( 0 ) 1.76 ( 0.26 ) 0.02 ( 0.01 ) 7.740.180.90 1.760.02
17 50 500.3 1.000.140.96 ( 0 )13.96 ( 0.83 ) 1.01 ( 0.09 ) 18.950.7 0.96 13.961.01
18 100 500.3 0.500.250.92 ( 0 )9.38 ( 0.67 ) 0.68 ( 0.07 ) 14.700.580.92 9.380.68
19 500 500.3 0.100.440.89 ( 0 )5.43 ( 0.9 ) 0.14 ( 0.03 ) 11.290.3 0.89 5.430.14
201000 500.3 0.050.480.88 ( 0 )5.03 ( 1 ) 0.09 ( 0.03 ) 10.940.230.88 5.030.09
21 50 1000.3 2.000.060.99 ( 0 )36.33 ( 2.24 ) 0.9 ( 0.09 ) 41.430.850.99 36.330.90
22 100 1000.3 1.000.190.93 ( 0 )16.08 ( 0.95 ) 0.75 ( 0.07 ) 21.330.720.93 16.080.75
23 500 1000.3 0.200.370.89 ( 0 )8.66 ( 1.15 ) 0.11 ( 0.03 ) 14.550.420.89 8.660.11
241000 1000.3 0.100.390.88 ( 0 )8.45 ( 1.17 ) 0.12 ( 0.03 ) 14.330.390.88 8.450.12
25 50 5000.310.000.011 ( 0 ) 228.37 ( 7.07 )0.6 ( 0.08 ) 233.770.971.00228.370.60
26 100 5000.3 5.000.040.99 ( 0 )114.53 ( 5.78 )0.43 ( 0.06 )120.100.940.99114.530.43
27 500 5000.3 1.000.310.89 ( 0 )13.64 ( 2.08 ) 0.2 ( 0.04 ) 19.440.570.89 13.640.20
281000 5000.3 0.500.540.88 ( 0 )6.3 ( 1.15 ) 0.09 ( 0.04 ) 12.210.380.88 6.300.09
29 5010000.320.000.011 ( 0 ) 412.73 ( 7.91 )0.88 ( 0.1 ) 417.850.991.00412.730.88
30 10010000.310.000.021 ( 0 ) 279.68 ( 7.94 )0.45 ( 0.07 )285.230.981.00279.680.45
51 500 500.7 0.100.670.86 ( 0 ) 1.32 ( 0.25 ) 2.42 ( 0.06 ) 4.900.190.86 1.322.42
521000 500.7 0.050.740.85 ( 0 ) 0.84 ( 0.14 ) 2.48 ( 0.06 ) 4.360.130.85 0.842.48
53 50 1000.7 2.000.070.96 ( 0 ) 24.54 ( 1.62 ) 2.08 ( 0.11 ) 28.460.840.96 24.542.08
54 100 1000.7 1.000.160.89 ( 0 ) 14.69 ( 1.28 ) 1.85 ( 0.08 ) 18.840.710.89 14.691.85
55 500 1000.7 0.200.550.86 ( 0 ) 2.19 ( 0.64 ) 2.33 ( 0.07 ) 5.860.180.86 2.192.33
561000 1000.7 0.100.810.85 ( 0 ) 0.51 ( 0.1 ) 2.56 ( 0.05 ) 3.950.090.85 0.512.56
57 50 5000.710.000.021 ( 0 ) 161.23 ( 7.83 ) 1.29 ( 0.1 ) 165.940.961.00161.231.29
58 100 5000.7 5.000.060.96 ( 0 ) 60.05 ( 4.29 ) 1.63 ( 0.12 ) 64.420.920.96 60.051.63
59 500 5000.7 1.000.500.85 ( 0 ) 3.12 ( 1.31 ) 2.68 ( 0.07 ) 6.440.190.85 3.122.68
601000 5000.7 0.500.890.85 ( 0 ) 0.39 ( 0.06 ) 2.88 ( 0.04 ) 3.510.090.85 0.392.88
61 5010000.720.000.011 ( 0 ) 363.91 ( 11.45 )1.39 ( 0.1 ) 368.520.991.00363.911.39
62 10010000.710.000.030.99 ( 0 ) 145.9 ( 7.62 ) 1.24 ( 0.11 )150.660.960.99145.901.24
63 50010000.7 2.000.610.85 ( 0 ) 2.38 ( 0.4 ) 2.7 ( 0.06 ) 5.680.270.85 2.382.70
64100010000.7 1.000.870.85 ( 0 ) 0.65 ( 0.08 ) 2.87 ( 0.04 ) 3.780.140.85 0.652.87
65 50 500.9 1.000.140.84 ( 0.01 )9.98 ( 0.78 ) 2.68 ( 0.11 ) 13.300.7 0.84 9.982.68
66 100 500.9 0.500.250.8 ( 0 ) 6.57 ( 0.7 ) 2.73 ( 0.09 ) 9.840.580.80 6.572.73
67 500 500.9 0.100.520.8 ( 0 ) 2.9 ( 0.5 ) 2.75 ( 0.07 ) 6.150.330.80 2.902.75
681000 500.9 0.050.700.8 ( 0 ) 1.88 ( 0.19 ) 2.79 ( 0.05 ) 5.090.3 0.80 1.882.79
69 50 1000.9 2.000.100.87 ( 0.01 )15.93 ( 1 ) 2.88 ( 0.1 ) 19.050.810.87 15.932.88
70 100 1000.9 1.000.140.81 ( 0 ) 14.34 ( 1.4 ) 2.75 ( 0.1 ) 17.590.730.81 14.342.75
71 500 1000.9 0.200.560.8 ( 0 ) 3.51 ( 0.44 ) 2.86 ( 0.04 ) 6.650.4 0.80 3.512.86
721000 1000.9 0.100.570.8 ( 0 ) 3.18 ( 0.59 ) 2.86 ( 0.04 ) 6.320.340.80 3.182.86
73 50 5000.910.000.020.99 ( 0 ) 95.52 ( 6.42 ) 2.37 ( 0.15 ) 99.150.950.99 95.522.37
74 100 5000.9 5.000.040.88 ( 0 ) 53.08 ( 3.93 ) 2.8 ( 0.12 ) 56.280.930.88 53.082.80
75 500 5000.9 1.000.400.79 ( 0 ) 6.75 ( 0.73 ) 2.76 ( 0.07 ) 9.990.560.79 6.752.76
761000 5000.9 0.500.730.8 ( 0 ) 2.48 ( 0.28 ) 2.79 ( 0.05 ) 5.690.370.80 2.482.79
77 5010000.920.000.011 ( 0 ) 201.98 ( 10.15 )2.34 ( 0.16 )205.640.981.00201.982.34
78 10010000.910.000.030.95 ( 0 ) 70.81 ( 4.4 ) 3.05 ( 0.12 ) 73.760.960.95 70.813.05
79 50010000.9 2.000.380.79 ( 0 ) 7.71 ( 1.09 ) 2.85 ( 0.06 ) 10.860.590.79 7.712.85
80100010000.9 1.000.760.8 ( 0 ) 2.41 ( 0.17 ) 2.77 ( 0.07 ) 5.640.390.80 2.412.77
\n" + ], + "text/latex": [ + "A data.frame: 80 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1.00 & 0.13 & 0.97 ( 0 ) & 14.84 ( 0.9 ) & 0.93 ( 0.09 ) & 19.91 & 0.7 & 0.97 & 14.84 & 0.93\\\\\n", + "\t2 & 100 & 50 & 0.1 & 0.50 & 0.33 & 0.93 ( 0 ) & 7.19 ( 0.43 ) & 0.49 ( 0.07 ) & 12.70 & 0.53 & 0.93 & 7.19 & 0.49\\\\\n", + "\t3 & 500 & 50 & 0.1 & 0.10 & 0.70 & 0.9 ( 0 ) & 1.93 ( 0.34 ) & 0.16 ( 0.04 ) & 7.77 & 0.16 & 0.90 & 1.93 & 0.16\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 0.05 & 0.79 & 0.9 ( 0 ) & 1.37 ( 0.42 ) & 0.01 ( 0.01 ) & 7.36 & 0.1 & 0.90 & 1.37 & 0.01\\\\\n", + "\t5 & 50 & 100 & 0.1 & 2.00 & 0.07 & 0.99 ( 0 ) & 36.64 ( 2.16 ) & 0.65 ( 0.07 ) & 41.99 & 0.84 & 0.99 & 36.64 & 0.65\\\\\n", + "\t6 & 100 & 100 & 0.1 & 1.00 & 0.20 & 0.94 ( 0 ) & 16.16 ( 1.22 ) & 0.47 ( 0.06 ) & 21.69 & 0.7 & 0.94 & 16.16 & 0.47\\\\\n", + "\t7 & 500 & 100 & 0.1 & 0.20 & 0.36 & 0.9 ( 0 ) & 8.64 ( 1.35 ) & 0.08 ( 0.03 ) & 14.56 & 0.37 & 0.90 & 8.64 & 0.08\\\\\n", + "\t8 & 1000 & 100 & 0.1 & 0.10 & 0.47 & 0.9 ( 0 ) & 5.83 ( 1.4 ) & 0.02 ( 0.01 ) & 11.81 & 0.22 & 0.90 & 5.83 & 0.02\\\\\n", + "\t9 & 50 & 500 & 0.1 & 10.00 & 0.01 & 1 ( 0 ) & 248.06 ( 7.56 ) & 0.56 ( 0.07 ) & 253.50 & 0.98 & 1.00 & 248.06 & 0.56\\\\\n", + "\t10 & 100 & 500 & 0.1 & 5.00 & 0.03 & 1 ( 0 ) & 132.04 ( 7.47 ) & 0.33 ( 0.05 ) & 137.71 & 0.95 & 1.00 & 132.04 & 0.33\\\\\n", + "\t11 & 500 & 500 & 0.1 & 1.00 & 0.34 & 0.91 ( 0 ) & 12.55 ( 1.81 ) & 0.04 ( 0.02 ) & 18.51 & 0.52 & 0.91 & 12.55 & 0.04\\\\\n", + "\t12 & 1000 & 500 & 0.1 & 0.50 & 0.69 & 0.9 ( 0 ) & 3.02 ( 0.6 ) & 0.01 ( 0.01 ) & 9.01 & 0.22 & 0.90 & 3.02 & 0.01\\\\\n", + "\t13 & 50 & 1000 & 0.1 & 20.00 & 0.01 & 1 ( 0 ) & 398.98 ( 6.9 ) & 0.8 ( 0.08 ) & 404.18 & 0.99 & 1.00 & 398.98 & 0.80\\\\\n", + "\t14 & 100 & 1000 & 0.1 & 10.00 & 0.02 & 1 ( 0 ) & 296.19 ( 8.29 ) & 0.35 ( 0.05 ) & 301.84 & 0.98 & 1.00 & 296.19 & 0.35\\\\\n", + "\t15 & 500 & 1000 & 0.1 & 2.00 & 0.39 & 0.9 ( 0 ) & 10.2 ( 0.98 ) & 0.1 ( 0.03 ) & 16.10 & 0.52 & 0.90 & 10.20 & 0.10\\\\\n", + "\t16 & 1000 & 1000 & 0.1 & 1.00 & 0.83 & 0.9 ( 0 ) & 1.76 ( 0.26 ) & 0.02 ( 0.01 ) & 7.74 & 0.18 & 0.90 & 1.76 & 0.02\\\\\n", + "\t17 & 50 & 50 & 0.3 & 1.00 & 0.14 & 0.96 ( 0 ) & 13.96 ( 0.83 ) & 1.01 ( 0.09 ) & 18.95 & 0.7 & 0.96 & 13.96 & 1.01\\\\\n", + "\t18 & 100 & 50 & 0.3 & 0.50 & 0.25 & 0.92 ( 0 ) & 9.38 ( 0.67 ) & 0.68 ( 0.07 ) & 14.70 & 0.58 & 0.92 & 9.38 & 0.68\\\\\n", + "\t19 & 500 & 50 & 0.3 & 0.10 & 0.44 & 0.89 ( 0 ) & 5.43 ( 0.9 ) & 0.14 ( 0.03 ) & 11.29 & 0.3 & 0.89 & 5.43 & 0.14\\\\\n", + "\t20 & 1000 & 50 & 0.3 & 0.05 & 0.48 & 0.88 ( 0 ) & 5.03 ( 1 ) & 0.09 ( 0.03 ) & 10.94 & 0.23 & 0.88 & 5.03 & 0.09\\\\\n", + "\t21 & 50 & 100 & 0.3 & 2.00 & 0.06 & 0.99 ( 0 ) & 36.33 ( 2.24 ) & 0.9 ( 0.09 ) & 41.43 & 0.85 & 0.99 & 36.33 & 0.90\\\\\n", + "\t22 & 100 & 100 & 0.3 & 1.00 & 0.19 & 0.93 ( 0 ) & 16.08 ( 0.95 ) & 0.75 ( 0.07 ) & 21.33 & 0.72 & 0.93 & 16.08 & 0.75\\\\\n", + "\t23 & 500 & 100 & 0.3 & 0.20 & 0.37 & 0.89 ( 0 ) & 8.66 ( 1.15 ) & 0.11 ( 0.03 ) & 14.55 & 0.42 & 0.89 & 8.66 & 0.11\\\\\n", + "\t24 & 1000 & 100 & 0.3 & 0.10 & 0.39 & 0.88 ( 0 ) & 8.45 ( 1.17 ) & 0.12 ( 0.03 ) & 14.33 & 0.39 & 0.88 & 8.45 & 0.12\\\\\n", + "\t25 & 50 & 500 & 0.3 & 10.00 & 0.01 & 1 ( 0 ) & 228.37 ( 7.07 ) & 0.6 ( 0.08 ) & 233.77 & 0.97 & 1.00 & 228.37 & 0.60\\\\\n", + "\t26 & 100 & 500 & 0.3 & 5.00 & 0.04 & 0.99 ( 0 ) & 114.53 ( 5.78 ) & 0.43 ( 0.06 ) & 120.10 & 0.94 & 0.99 & 114.53 & 0.43\\\\\n", + "\t27 & 500 & 500 & 0.3 & 1.00 & 0.31 & 0.89 ( 0 ) & 13.64 ( 2.08 ) & 0.2 ( 0.04 ) & 19.44 & 0.57 & 0.89 & 13.64 & 0.20\\\\\n", + "\t28 & 1000 & 500 & 0.3 & 0.50 & 0.54 & 0.88 ( 0 ) & 6.3 ( 1.15 ) & 0.09 ( 0.04 ) & 12.21 & 0.38 & 0.88 & 6.30 & 0.09\\\\\n", + "\t29 & 50 & 1000 & 0.3 & 20.00 & 0.01 & 1 ( 0 ) & 412.73 ( 7.91 ) & 0.88 ( 0.1 ) & 417.85 & 0.99 & 1.00 & 412.73 & 0.88\\\\\n", + "\t30 & 100 & 1000 & 0.3 & 10.00 & 0.02 & 1 ( 0 ) & 279.68 ( 7.94 ) & 0.45 ( 0.07 ) & 285.23 & 0.98 & 1.00 & 279.68 & 0.45\\\\\n", + "\t⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮\\\\\n", + "\t51 & 500 & 50 & 0.7 & 0.10 & 0.67 & 0.86 ( 0 ) & 1.32 ( 0.25 ) & 2.42 ( 0.06 ) & 4.90 & 0.19 & 0.86 & 1.32 & 2.42\\\\\n", + "\t52 & 1000 & 50 & 0.7 & 0.05 & 0.74 & 0.85 ( 0 ) & 0.84 ( 0.14 ) & 2.48 ( 0.06 ) & 4.36 & 0.13 & 0.85 & 0.84 & 2.48\\\\\n", + "\t53 & 50 & 100 & 0.7 & 2.00 & 0.07 & 0.96 ( 0 ) & 24.54 ( 1.62 ) & 2.08 ( 0.11 ) & 28.46 & 0.84 & 0.96 & 24.54 & 2.08\\\\\n", + "\t54 & 100 & 100 & 0.7 & 1.00 & 0.16 & 0.89 ( 0 ) & 14.69 ( 1.28 ) & 1.85 ( 0.08 ) & 18.84 & 0.71 & 0.89 & 14.69 & 1.85\\\\\n", + "\t55 & 500 & 100 & 0.7 & 0.20 & 0.55 & 0.86 ( 0 ) & 2.19 ( 0.64 ) & 2.33 ( 0.07 ) & 5.86 & 0.18 & 0.86 & 2.19 & 2.33\\\\\n", + "\t56 & 1000 & 100 & 0.7 & 0.10 & 0.81 & 0.85 ( 0 ) & 0.51 ( 0.1 ) & 2.56 ( 0.05 ) & 3.95 & 0.09 & 0.85 & 0.51 & 2.56\\\\\n", + "\t57 & 50 & 500 & 0.7 & 10.00 & 0.02 & 1 ( 0 ) & 161.23 ( 7.83 ) & 1.29 ( 0.1 ) & 165.94 & 0.96 & 1.00 & 161.23 & 1.29\\\\\n", + "\t58 & 100 & 500 & 0.7 & 5.00 & 0.06 & 0.96 ( 0 ) & 60.05 ( 4.29 ) & 1.63 ( 0.12 ) & 64.42 & 0.92 & 0.96 & 60.05 & 1.63\\\\\n", + "\t59 & 500 & 500 & 0.7 & 1.00 & 0.50 & 0.85 ( 0 ) & 3.12 ( 1.31 ) & 2.68 ( 0.07 ) & 6.44 & 0.19 & 0.85 & 3.12 & 2.68\\\\\n", + "\t60 & 1000 & 500 & 0.7 & 0.50 & 0.89 & 0.85 ( 0 ) & 0.39 ( 0.06 ) & 2.88 ( 0.04 ) & 3.51 & 0.09 & 0.85 & 0.39 & 2.88\\\\\n", + "\t61 & 50 & 1000 & 0.7 & 20.00 & 0.01 & 1 ( 0 ) & 363.91 ( 11.45 ) & 1.39 ( 0.1 ) & 368.52 & 0.99 & 1.00 & 363.91 & 1.39\\\\\n", + "\t62 & 100 & 1000 & 0.7 & 10.00 & 0.03 & 0.99 ( 0 ) & 145.9 ( 7.62 ) & 1.24 ( 0.11 ) & 150.66 & 0.96 & 0.99 & 145.90 & 1.24\\\\\n", + "\t63 & 500 & 1000 & 0.7 & 2.00 & 0.61 & 0.85 ( 0 ) & 2.38 ( 0.4 ) & 2.7 ( 0.06 ) & 5.68 & 0.27 & 0.85 & 2.38 & 2.70\\\\\n", + "\t64 & 1000 & 1000 & 0.7 & 1.00 & 0.87 & 0.85 ( 0 ) & 0.65 ( 0.08 ) & 2.87 ( 0.04 ) & 3.78 & 0.14 & 0.85 & 0.65 & 2.87\\\\\n", + "\t65 & 50 & 50 & 0.9 & 1.00 & 0.14 & 0.84 ( 0.01 ) & 9.98 ( 0.78 ) & 2.68 ( 0.11 ) & 13.30 & 0.7 & 0.84 & 9.98 & 2.68\\\\\n", + "\t66 & 100 & 50 & 0.9 & 0.50 & 0.25 & 0.8 ( 0 ) & 6.57 ( 0.7 ) & 2.73 ( 0.09 ) & 9.84 & 0.58 & 0.80 & 6.57 & 2.73\\\\\n", + "\t67 & 500 & 50 & 0.9 & 0.10 & 0.52 & 0.8 ( 0 ) & 2.9 ( 0.5 ) & 2.75 ( 0.07 ) & 6.15 & 0.33 & 0.80 & 2.90 & 2.75\\\\\n", + "\t68 & 1000 & 50 & 0.9 & 0.05 & 0.70 & 0.8 ( 0 ) & 1.88 ( 0.19 ) & 2.79 ( 0.05 ) & 5.09 & 0.3 & 0.80 & 1.88 & 2.79\\\\\n", + "\t69 & 50 & 100 & 0.9 & 2.00 & 0.10 & 0.87 ( 0.01 ) & 15.93 ( 1 ) & 2.88 ( 0.1 ) & 19.05 & 0.81 & 0.87 & 15.93 & 2.88\\\\\n", + "\t70 & 100 & 100 & 0.9 & 1.00 & 0.14 & 0.81 ( 0 ) & 14.34 ( 1.4 ) & 2.75 ( 0.1 ) & 17.59 & 0.73 & 0.81 & 14.34 & 2.75\\\\\n", + "\t71 & 500 & 100 & 0.9 & 0.20 & 0.56 & 0.8 ( 0 ) & 3.51 ( 0.44 ) & 2.86 ( 0.04 ) & 6.65 & 0.4 & 0.80 & 3.51 & 2.86\\\\\n", + "\t72 & 1000 & 100 & 0.9 & 0.10 & 0.57 & 0.8 ( 0 ) & 3.18 ( 0.59 ) & 2.86 ( 0.04 ) & 6.32 & 0.34 & 0.80 & 3.18 & 2.86\\\\\n", + "\t73 & 50 & 500 & 0.9 & 10.00 & 0.02 & 0.99 ( 0 ) & 95.52 ( 6.42 ) & 2.37 ( 0.15 ) & 99.15 & 0.95 & 0.99 & 95.52 & 2.37\\\\\n", + "\t74 & 100 & 500 & 0.9 & 5.00 & 0.04 & 0.88 ( 0 ) & 53.08 ( 3.93 ) & 2.8 ( 0.12 ) & 56.28 & 0.93 & 0.88 & 53.08 & 2.80\\\\\n", + "\t75 & 500 & 500 & 0.9 & 1.00 & 0.40 & 0.79 ( 0 ) & 6.75 ( 0.73 ) & 2.76 ( 0.07 ) & 9.99 & 0.56 & 0.79 & 6.75 & 2.76\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.50 & 0.73 & 0.8 ( 0 ) & 2.48 ( 0.28 ) & 2.79 ( 0.05 ) & 5.69 & 0.37 & 0.80 & 2.48 & 2.79\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.00 & 0.01 & 1 ( 0 ) & 201.98 ( 10.15 ) & 2.34 ( 0.16 ) & 205.64 & 0.98 & 1.00 & 201.98 & 2.34\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.00 & 0.03 & 0.95 ( 0 ) & 70.81 ( 4.4 ) & 3.05 ( 0.12 ) & 73.76 & 0.96 & 0.95 & 70.81 & 3.05\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.00 & 0.38 & 0.79 ( 0 ) & 7.71 ( 1.09 ) & 2.85 ( 0.06 ) & 10.86 & 0.59 & 0.79 & 7.71 & 2.85\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.00 & 0.76 & 0.8 ( 0 ) & 2.41 ( 0.17 ) & 2.77 ( 0.07 ) & 5.64 & 0.39 & 0.80 & 2.41 & 2.77\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 80 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1.00 | 0.13 | 0.97 ( 0 ) | 14.84 ( 0.9 ) | 0.93 ( 0.09 ) | 19.91 | 0.7 | 0.97 | 14.84 | 0.93 |\n", + "| 2 | 100 | 50 | 0.1 | 0.50 | 0.33 | 0.93 ( 0 ) | 7.19 ( 0.43 ) | 0.49 ( 0.07 ) | 12.70 | 0.53 | 0.93 | 7.19 | 0.49 |\n", + "| 3 | 500 | 50 | 0.1 | 0.10 | 0.70 | 0.9 ( 0 ) | 1.93 ( 0.34 ) | 0.16 ( 0.04 ) | 7.77 | 0.16 | 0.90 | 1.93 | 0.16 |\n", + "| 4 | 1000 | 50 | 0.1 | 0.05 | 0.79 | 0.9 ( 0 ) | 1.37 ( 0.42 ) | 0.01 ( 0.01 ) | 7.36 | 0.1 | 0.90 | 1.37 | 0.01 |\n", + "| 5 | 50 | 100 | 0.1 | 2.00 | 0.07 | 0.99 ( 0 ) | 36.64 ( 2.16 ) | 0.65 ( 0.07 ) | 41.99 | 0.84 | 0.99 | 36.64 | 0.65 |\n", + "| 6 | 100 | 100 | 0.1 | 1.00 | 0.20 | 0.94 ( 0 ) | 16.16 ( 1.22 ) | 0.47 ( 0.06 ) | 21.69 | 0.7 | 0.94 | 16.16 | 0.47 |\n", + "| 7 | 500 | 100 | 0.1 | 0.20 | 0.36 | 0.9 ( 0 ) | 8.64 ( 1.35 ) | 0.08 ( 0.03 ) | 14.56 | 0.37 | 0.90 | 8.64 | 0.08 |\n", + "| 8 | 1000 | 100 | 0.1 | 0.10 | 0.47 | 0.9 ( 0 ) | 5.83 ( 1.4 ) | 0.02 ( 0.01 ) | 11.81 | 0.22 | 0.90 | 5.83 | 0.02 |\n", + "| 9 | 50 | 500 | 0.1 | 10.00 | 0.01 | 1 ( 0 ) | 248.06 ( 7.56 ) | 0.56 ( 0.07 ) | 253.50 | 0.98 | 1.00 | 248.06 | 0.56 |\n", + "| 10 | 100 | 500 | 0.1 | 5.00 | 0.03 | 1 ( 0 ) | 132.04 ( 7.47 ) | 0.33 ( 0.05 ) | 137.71 | 0.95 | 1.00 | 132.04 | 0.33 |\n", + "| 11 | 500 | 500 | 0.1 | 1.00 | 0.34 | 0.91 ( 0 ) | 12.55 ( 1.81 ) | 0.04 ( 0.02 ) | 18.51 | 0.52 | 0.91 | 12.55 | 0.04 |\n", + "| 12 | 1000 | 500 | 0.1 | 0.50 | 0.69 | 0.9 ( 0 ) | 3.02 ( 0.6 ) | 0.01 ( 0.01 ) | 9.01 | 0.22 | 0.90 | 3.02 | 0.01 |\n", + "| 13 | 50 | 1000 | 0.1 | 20.00 | 0.01 | 1 ( 0 ) | 398.98 ( 6.9 ) | 0.8 ( 0.08 ) | 404.18 | 0.99 | 1.00 | 398.98 | 0.80 |\n", + "| 14 | 100 | 1000 | 0.1 | 10.00 | 0.02 | 1 ( 0 ) | 296.19 ( 8.29 ) | 0.35 ( 0.05 ) | 301.84 | 0.98 | 1.00 | 296.19 | 0.35 |\n", + "| 15 | 500 | 1000 | 0.1 | 2.00 | 0.39 | 0.9 ( 0 ) | 10.2 ( 0.98 ) | 0.1 ( 0.03 ) | 16.10 | 0.52 | 0.90 | 10.20 | 0.10 |\n", + "| 16 | 1000 | 1000 | 0.1 | 1.00 | 0.83 | 0.9 ( 0 ) | 1.76 ( 0.26 ) | 0.02 ( 0.01 ) | 7.74 | 0.18 | 0.90 | 1.76 | 0.02 |\n", + "| 17 | 50 | 50 | 0.3 | 1.00 | 0.14 | 0.96 ( 0 ) | 13.96 ( 0.83 ) | 1.01 ( 0.09 ) | 18.95 | 0.7 | 0.96 | 13.96 | 1.01 |\n", + "| 18 | 100 | 50 | 0.3 | 0.50 | 0.25 | 0.92 ( 0 ) | 9.38 ( 0.67 ) | 0.68 ( 0.07 ) | 14.70 | 0.58 | 0.92 | 9.38 | 0.68 |\n", + "| 19 | 500 | 50 | 0.3 | 0.10 | 0.44 | 0.89 ( 0 ) | 5.43 ( 0.9 ) | 0.14 ( 0.03 ) | 11.29 | 0.3 | 0.89 | 5.43 | 0.14 |\n", + "| 20 | 1000 | 50 | 0.3 | 0.05 | 0.48 | 0.88 ( 0 ) | 5.03 ( 1 ) | 0.09 ( 0.03 ) | 10.94 | 0.23 | 0.88 | 5.03 | 0.09 |\n", + "| 21 | 50 | 100 | 0.3 | 2.00 | 0.06 | 0.99 ( 0 ) | 36.33 ( 2.24 ) | 0.9 ( 0.09 ) | 41.43 | 0.85 | 0.99 | 36.33 | 0.90 |\n", + "| 22 | 100 | 100 | 0.3 | 1.00 | 0.19 | 0.93 ( 0 ) | 16.08 ( 0.95 ) | 0.75 ( 0.07 ) | 21.33 | 0.72 | 0.93 | 16.08 | 0.75 |\n", + "| 23 | 500 | 100 | 0.3 | 0.20 | 0.37 | 0.89 ( 0 ) | 8.66 ( 1.15 ) | 0.11 ( 0.03 ) | 14.55 | 0.42 | 0.89 | 8.66 | 0.11 |\n", + "| 24 | 1000 | 100 | 0.3 | 0.10 | 0.39 | 0.88 ( 0 ) | 8.45 ( 1.17 ) | 0.12 ( 0.03 ) | 14.33 | 0.39 | 0.88 | 8.45 | 0.12 |\n", + "| 25 | 50 | 500 | 0.3 | 10.00 | 0.01 | 1 ( 0 ) | 228.37 ( 7.07 ) | 0.6 ( 0.08 ) | 233.77 | 0.97 | 1.00 | 228.37 | 0.60 |\n", + "| 26 | 100 | 500 | 0.3 | 5.00 | 0.04 | 0.99 ( 0 ) | 114.53 ( 5.78 ) | 0.43 ( 0.06 ) | 120.10 | 0.94 | 0.99 | 114.53 | 0.43 |\n", + "| 27 | 500 | 500 | 0.3 | 1.00 | 0.31 | 0.89 ( 0 ) | 13.64 ( 2.08 ) | 0.2 ( 0.04 ) | 19.44 | 0.57 | 0.89 | 13.64 | 0.20 |\n", + "| 28 | 1000 | 500 | 0.3 | 0.50 | 0.54 | 0.88 ( 0 ) | 6.3 ( 1.15 ) | 0.09 ( 0.04 ) | 12.21 | 0.38 | 0.88 | 6.30 | 0.09 |\n", + "| 29 | 50 | 1000 | 0.3 | 20.00 | 0.01 | 1 ( 0 ) | 412.73 ( 7.91 ) | 0.88 ( 0.1 ) | 417.85 | 0.99 | 1.00 | 412.73 | 0.88 |\n", + "| 30 | 100 | 1000 | 0.3 | 10.00 | 0.02 | 1 ( 0 ) | 279.68 ( 7.94 ) | 0.45 ( 0.07 ) | 285.23 | 0.98 | 1.00 | 279.68 | 0.45 |\n", + "| ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ |\n", + "| 51 | 500 | 50 | 0.7 | 0.10 | 0.67 | 0.86 ( 0 ) | 1.32 ( 0.25 ) | 2.42 ( 0.06 ) | 4.90 | 0.19 | 0.86 | 1.32 | 2.42 |\n", + "| 52 | 1000 | 50 | 0.7 | 0.05 | 0.74 | 0.85 ( 0 ) | 0.84 ( 0.14 ) | 2.48 ( 0.06 ) | 4.36 | 0.13 | 0.85 | 0.84 | 2.48 |\n", + "| 53 | 50 | 100 | 0.7 | 2.00 | 0.07 | 0.96 ( 0 ) | 24.54 ( 1.62 ) | 2.08 ( 0.11 ) | 28.46 | 0.84 | 0.96 | 24.54 | 2.08 |\n", + "| 54 | 100 | 100 | 0.7 | 1.00 | 0.16 | 0.89 ( 0 ) | 14.69 ( 1.28 ) | 1.85 ( 0.08 ) | 18.84 | 0.71 | 0.89 | 14.69 | 1.85 |\n", + "| 55 | 500 | 100 | 0.7 | 0.20 | 0.55 | 0.86 ( 0 ) | 2.19 ( 0.64 ) | 2.33 ( 0.07 ) | 5.86 | 0.18 | 0.86 | 2.19 | 2.33 |\n", + "| 56 | 1000 | 100 | 0.7 | 0.10 | 0.81 | 0.85 ( 0 ) | 0.51 ( 0.1 ) | 2.56 ( 0.05 ) | 3.95 | 0.09 | 0.85 | 0.51 | 2.56 |\n", + "| 57 | 50 | 500 | 0.7 | 10.00 | 0.02 | 1 ( 0 ) | 161.23 ( 7.83 ) | 1.29 ( 0.1 ) | 165.94 | 0.96 | 1.00 | 161.23 | 1.29 |\n", + "| 58 | 100 | 500 | 0.7 | 5.00 | 0.06 | 0.96 ( 0 ) | 60.05 ( 4.29 ) | 1.63 ( 0.12 ) | 64.42 | 0.92 | 0.96 | 60.05 | 1.63 |\n", + "| 59 | 500 | 500 | 0.7 | 1.00 | 0.50 | 0.85 ( 0 ) | 3.12 ( 1.31 ) | 2.68 ( 0.07 ) | 6.44 | 0.19 | 0.85 | 3.12 | 2.68 |\n", + "| 60 | 1000 | 500 | 0.7 | 0.50 | 0.89 | 0.85 ( 0 ) | 0.39 ( 0.06 ) | 2.88 ( 0.04 ) | 3.51 | 0.09 | 0.85 | 0.39 | 2.88 |\n", + "| 61 | 50 | 1000 | 0.7 | 20.00 | 0.01 | 1 ( 0 ) | 363.91 ( 11.45 ) | 1.39 ( 0.1 ) | 368.52 | 0.99 | 1.00 | 363.91 | 1.39 |\n", + "| 62 | 100 | 1000 | 0.7 | 10.00 | 0.03 | 0.99 ( 0 ) | 145.9 ( 7.62 ) | 1.24 ( 0.11 ) | 150.66 | 0.96 | 0.99 | 145.90 | 1.24 |\n", + "| 63 | 500 | 1000 | 0.7 | 2.00 | 0.61 | 0.85 ( 0 ) | 2.38 ( 0.4 ) | 2.7 ( 0.06 ) | 5.68 | 0.27 | 0.85 | 2.38 | 2.70 |\n", + "| 64 | 1000 | 1000 | 0.7 | 1.00 | 0.87 | 0.85 ( 0 ) | 0.65 ( 0.08 ) | 2.87 ( 0.04 ) | 3.78 | 0.14 | 0.85 | 0.65 | 2.87 |\n", + "| 65 | 50 | 50 | 0.9 | 1.00 | 0.14 | 0.84 ( 0.01 ) | 9.98 ( 0.78 ) | 2.68 ( 0.11 ) | 13.30 | 0.7 | 0.84 | 9.98 | 2.68 |\n", + "| 66 | 100 | 50 | 0.9 | 0.50 | 0.25 | 0.8 ( 0 ) | 6.57 ( 0.7 ) | 2.73 ( 0.09 ) | 9.84 | 0.58 | 0.80 | 6.57 | 2.73 |\n", + "| 67 | 500 | 50 | 0.9 | 0.10 | 0.52 | 0.8 ( 0 ) | 2.9 ( 0.5 ) | 2.75 ( 0.07 ) | 6.15 | 0.33 | 0.80 | 2.90 | 2.75 |\n", + "| 68 | 1000 | 50 | 0.9 | 0.05 | 0.70 | 0.8 ( 0 ) | 1.88 ( 0.19 ) | 2.79 ( 0.05 ) | 5.09 | 0.3 | 0.80 | 1.88 | 2.79 |\n", + "| 69 | 50 | 100 | 0.9 | 2.00 | 0.10 | 0.87 ( 0.01 ) | 15.93 ( 1 ) | 2.88 ( 0.1 ) | 19.05 | 0.81 | 0.87 | 15.93 | 2.88 |\n", + "| 70 | 100 | 100 | 0.9 | 1.00 | 0.14 | 0.81 ( 0 ) | 14.34 ( 1.4 ) | 2.75 ( 0.1 ) | 17.59 | 0.73 | 0.81 | 14.34 | 2.75 |\n", + "| 71 | 500 | 100 | 0.9 | 0.20 | 0.56 | 0.8 ( 0 ) | 3.51 ( 0.44 ) | 2.86 ( 0.04 ) | 6.65 | 0.4 | 0.80 | 3.51 | 2.86 |\n", + "| 72 | 1000 | 100 | 0.9 | 0.10 | 0.57 | 0.8 ( 0 ) | 3.18 ( 0.59 ) | 2.86 ( 0.04 ) | 6.32 | 0.34 | 0.80 | 3.18 | 2.86 |\n", + "| 73 | 50 | 500 | 0.9 | 10.00 | 0.02 | 0.99 ( 0 ) | 95.52 ( 6.42 ) | 2.37 ( 0.15 ) | 99.15 | 0.95 | 0.99 | 95.52 | 2.37 |\n", + "| 74 | 100 | 500 | 0.9 | 5.00 | 0.04 | 0.88 ( 0 ) | 53.08 ( 3.93 ) | 2.8 ( 0.12 ) | 56.28 | 0.93 | 0.88 | 53.08 | 2.80 |\n", + "| 75 | 500 | 500 | 0.9 | 1.00 | 0.40 | 0.79 ( 0 ) | 6.75 ( 0.73 ) | 2.76 ( 0.07 ) | 9.99 | 0.56 | 0.79 | 6.75 | 2.76 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.50 | 0.73 | 0.8 ( 0 ) | 2.48 ( 0.28 ) | 2.79 ( 0.05 ) | 5.69 | 0.37 | 0.80 | 2.48 | 2.79 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.00 | 0.01 | 1 ( 0 ) | 201.98 ( 10.15 ) | 2.34 ( 0.16 ) | 205.64 | 0.98 | 1.00 | 201.98 | 2.34 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.00 | 0.03 | 0.95 ( 0 ) | 70.81 ( 4.4 ) | 3.05 ( 0.12 ) | 73.76 | 0.96 | 0.95 | 70.81 | 3.05 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.00 | 0.38 | 0.79 ( 0 ) | 7.71 ( 1.09 ) | 2.85 ( 0.06 ) | 10.86 | 0.59 | 0.79 | 7.71 | 2.85 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.00 | 0.76 | 0.8 ( 0 ) | 2.41 ( 0.17 ) | 2.77 ( 0.07 ) | 5.64 | 0.39 | 0.80 | 2.41 | 2.77 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "1 50 50 0.1 1.00 0.13 0.97 ( 0 ) 14.84 ( 0.9 ) 0.93 ( 0.09 )\n", + "2 100 50 0.1 0.50 0.33 0.93 ( 0 ) 7.19 ( 0.43 ) 0.49 ( 0.07 )\n", + "3 500 50 0.1 0.10 0.70 0.9 ( 0 ) 1.93 ( 0.34 ) 0.16 ( 0.04 )\n", + "4 1000 50 0.1 0.05 0.79 0.9 ( 0 ) 1.37 ( 0.42 ) 0.01 ( 0.01 )\n", + "5 50 100 0.1 2.00 0.07 0.99 ( 0 ) 36.64 ( 2.16 ) 0.65 ( 0.07 )\n", + "6 100 100 0.1 1.00 0.20 0.94 ( 0 ) 16.16 ( 1.22 ) 0.47 ( 0.06 )\n", + "7 500 100 0.1 0.20 0.36 0.9 ( 0 ) 8.64 ( 1.35 ) 0.08 ( 0.03 )\n", + "8 1000 100 0.1 0.10 0.47 0.9 ( 0 ) 5.83 ( 1.4 ) 0.02 ( 0.01 )\n", + "9 50 500 0.1 10.00 0.01 1 ( 0 ) 248.06 ( 7.56 ) 0.56 ( 0.07 )\n", + "10 100 500 0.1 5.00 0.03 1 ( 0 ) 132.04 ( 7.47 ) 0.33 ( 0.05 )\n", + "11 500 500 0.1 1.00 0.34 0.91 ( 0 ) 12.55 ( 1.81 ) 0.04 ( 0.02 )\n", + "12 1000 500 0.1 0.50 0.69 0.9 ( 0 ) 3.02 ( 0.6 ) 0.01 ( 0.01 )\n", + "13 50 1000 0.1 20.00 0.01 1 ( 0 ) 398.98 ( 6.9 ) 0.8 ( 0.08 ) \n", + "14 100 1000 0.1 10.00 0.02 1 ( 0 ) 296.19 ( 8.29 ) 0.35 ( 0.05 )\n", + "15 500 1000 0.1 2.00 0.39 0.9 ( 0 ) 10.2 ( 0.98 ) 0.1 ( 0.03 ) \n", + "16 1000 1000 0.1 1.00 0.83 0.9 ( 0 ) 1.76 ( 0.26 ) 0.02 ( 0.01 )\n", + "17 50 50 0.3 1.00 0.14 0.96 ( 0 ) 13.96 ( 0.83 ) 1.01 ( 0.09 )\n", + "18 100 50 0.3 0.50 0.25 0.92 ( 0 ) 9.38 ( 0.67 ) 0.68 ( 0.07 )\n", + "19 500 50 0.3 0.10 0.44 0.89 ( 0 ) 5.43 ( 0.9 ) 0.14 ( 0.03 )\n", + "20 1000 50 0.3 0.05 0.48 0.88 ( 0 ) 5.03 ( 1 ) 0.09 ( 0.03 )\n", + "21 50 100 0.3 2.00 0.06 0.99 ( 0 ) 36.33 ( 2.24 ) 0.9 ( 0.09 ) \n", + "22 100 100 0.3 1.00 0.19 0.93 ( 0 ) 16.08 ( 0.95 ) 0.75 ( 0.07 )\n", + "23 500 100 0.3 0.20 0.37 0.89 ( 0 ) 8.66 ( 1.15 ) 0.11 ( 0.03 )\n", + "24 1000 100 0.3 0.10 0.39 0.88 ( 0 ) 8.45 ( 1.17 ) 0.12 ( 0.03 )\n", + "25 50 500 0.3 10.00 0.01 1 ( 0 ) 228.37 ( 7.07 ) 0.6 ( 0.08 ) \n", + "26 100 500 0.3 5.00 0.04 0.99 ( 0 ) 114.53 ( 5.78 ) 0.43 ( 0.06 )\n", + "27 500 500 0.3 1.00 0.31 0.89 ( 0 ) 13.64 ( 2.08 ) 0.2 ( 0.04 ) \n", + "28 1000 500 0.3 0.50 0.54 0.88 ( 0 ) 6.3 ( 1.15 ) 0.09 ( 0.04 )\n", + "29 50 1000 0.3 20.00 0.01 1 ( 0 ) 412.73 ( 7.91 ) 0.88 ( 0.1 ) \n", + "30 100 1000 0.3 10.00 0.02 1 ( 0 ) 279.68 ( 7.94 ) 0.45 ( 0.07 )\n", + "⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ \n", + "51 500 50 0.7 0.10 0.67 0.86 ( 0 ) 1.32 ( 0.25 ) 2.42 ( 0.06 )\n", + "52 1000 50 0.7 0.05 0.74 0.85 ( 0 ) 0.84 ( 0.14 ) 2.48 ( 0.06 )\n", + "53 50 100 0.7 2.00 0.07 0.96 ( 0 ) 24.54 ( 1.62 ) 2.08 ( 0.11 )\n", + "54 100 100 0.7 1.00 0.16 0.89 ( 0 ) 14.69 ( 1.28 ) 1.85 ( 0.08 )\n", + "55 500 100 0.7 0.20 0.55 0.86 ( 0 ) 2.19 ( 0.64 ) 2.33 ( 0.07 )\n", + "56 1000 100 0.7 0.10 0.81 0.85 ( 0 ) 0.51 ( 0.1 ) 2.56 ( 0.05 )\n", + "57 50 500 0.7 10.00 0.02 1 ( 0 ) 161.23 ( 7.83 ) 1.29 ( 0.1 ) \n", + "58 100 500 0.7 5.00 0.06 0.96 ( 0 ) 60.05 ( 4.29 ) 1.63 ( 0.12 )\n", + "59 500 500 0.7 1.00 0.50 0.85 ( 0 ) 3.12 ( 1.31 ) 2.68 ( 0.07 )\n", + "60 1000 500 0.7 0.50 0.89 0.85 ( 0 ) 0.39 ( 0.06 ) 2.88 ( 0.04 )\n", + "61 50 1000 0.7 20.00 0.01 1 ( 0 ) 363.91 ( 11.45 ) 1.39 ( 0.1 ) \n", + "62 100 1000 0.7 10.00 0.03 0.99 ( 0 ) 145.9 ( 7.62 ) 1.24 ( 0.11 )\n", + "63 500 1000 0.7 2.00 0.61 0.85 ( 0 ) 2.38 ( 0.4 ) 2.7 ( 0.06 ) \n", + "64 1000 1000 0.7 1.00 0.87 0.85 ( 0 ) 0.65 ( 0.08 ) 2.87 ( 0.04 )\n", + "65 50 50 0.9 1.00 0.14 0.84 ( 0.01 ) 9.98 ( 0.78 ) 2.68 ( 0.11 )\n", + "66 100 50 0.9 0.50 0.25 0.8 ( 0 ) 6.57 ( 0.7 ) 2.73 ( 0.09 )\n", + "67 500 50 0.9 0.10 0.52 0.8 ( 0 ) 2.9 ( 0.5 ) 2.75 ( 0.07 )\n", + "68 1000 50 0.9 0.05 0.70 0.8 ( 0 ) 1.88 ( 0.19 ) 2.79 ( 0.05 )\n", + "69 50 100 0.9 2.00 0.10 0.87 ( 0.01 ) 15.93 ( 1 ) 2.88 ( 0.1 ) \n", + "70 100 100 0.9 1.00 0.14 0.81 ( 0 ) 14.34 ( 1.4 ) 2.75 ( 0.1 ) \n", + "71 500 100 0.9 0.20 0.56 0.8 ( 0 ) 3.51 ( 0.44 ) 2.86 ( 0.04 )\n", + "72 1000 100 0.9 0.10 0.57 0.8 ( 0 ) 3.18 ( 0.59 ) 2.86 ( 0.04 )\n", + "73 50 500 0.9 10.00 0.02 0.99 ( 0 ) 95.52 ( 6.42 ) 2.37 ( 0.15 )\n", + "74 100 500 0.9 5.00 0.04 0.88 ( 0 ) 53.08 ( 3.93 ) 2.8 ( 0.12 ) \n", + "75 500 500 0.9 1.00 0.40 0.79 ( 0 ) 6.75 ( 0.73 ) 2.76 ( 0.07 )\n", + "76 1000 500 0.9 0.50 0.73 0.8 ( 0 ) 2.48 ( 0.28 ) 2.79 ( 0.05 )\n", + "77 50 1000 0.9 20.00 0.01 1 ( 0 ) 201.98 ( 10.15 ) 2.34 ( 0.16 )\n", + "78 100 1000 0.9 10.00 0.03 0.95 ( 0 ) 70.81 ( 4.4 ) 3.05 ( 0.12 )\n", + "79 500 1000 0.9 2.00 0.38 0.79 ( 0 ) 7.71 ( 1.09 ) 2.85 ( 0.06 )\n", + "80 1000 1000 0.9 1.00 0.76 0.8 ( 0 ) 2.41 ( 0.17 ) 2.77 ( 0.07 )\n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "1 19.91 0.7 0.97 14.84 0.93 \n", + "2 12.70 0.53 0.93 7.19 0.49 \n", + "3 7.77 0.16 0.90 1.93 0.16 \n", + "4 7.36 0.1 0.90 1.37 0.01 \n", + "5 41.99 0.84 0.99 36.64 0.65 \n", + "6 21.69 0.7 0.94 16.16 0.47 \n", + "7 14.56 0.37 0.90 8.64 0.08 \n", + "8 11.81 0.22 0.90 5.83 0.02 \n", + "9 253.50 0.98 1.00 248.06 0.56 \n", + "10 137.71 0.95 1.00 132.04 0.33 \n", + "11 18.51 0.52 0.91 12.55 0.04 \n", + "12 9.01 0.22 0.90 3.02 0.01 \n", + "13 404.18 0.99 1.00 398.98 0.80 \n", + "14 301.84 0.98 1.00 296.19 0.35 \n", + "15 16.10 0.52 0.90 10.20 0.10 \n", + "16 7.74 0.18 0.90 1.76 0.02 \n", + "17 18.95 0.7 0.96 13.96 1.01 \n", + "18 14.70 0.58 0.92 9.38 0.68 \n", + "19 11.29 0.3 0.89 5.43 0.14 \n", + "20 10.94 0.23 0.88 5.03 0.09 \n", + "21 41.43 0.85 0.99 36.33 0.90 \n", + "22 21.33 0.72 0.93 16.08 0.75 \n", + "23 14.55 0.42 0.89 8.66 0.11 \n", + "24 14.33 0.39 0.88 8.45 0.12 \n", + "25 233.77 0.97 1.00 228.37 0.60 \n", + "26 120.10 0.94 0.99 114.53 0.43 \n", + "27 19.44 0.57 0.89 13.64 0.20 \n", + "28 12.21 0.38 0.88 6.30 0.09 \n", + "29 417.85 0.99 1.00 412.73 0.88 \n", + "30 285.23 0.98 1.00 279.68 0.45 \n", + "⋮ ⋮ ⋮ ⋮ ⋮ ⋮ \n", + "51 4.90 0.19 0.86 1.32 2.42 \n", + "52 4.36 0.13 0.85 0.84 2.48 \n", + "53 28.46 0.84 0.96 24.54 2.08 \n", + "54 18.84 0.71 0.89 14.69 1.85 \n", + "55 5.86 0.18 0.86 2.19 2.33 \n", + "56 3.95 0.09 0.85 0.51 2.56 \n", + "57 165.94 0.96 1.00 161.23 1.29 \n", + "58 64.42 0.92 0.96 60.05 1.63 \n", + "59 6.44 0.19 0.85 3.12 2.68 \n", + "60 3.51 0.09 0.85 0.39 2.88 \n", + "61 368.52 0.99 1.00 363.91 1.39 \n", + "62 150.66 0.96 0.99 145.90 1.24 \n", + "63 5.68 0.27 0.85 2.38 2.70 \n", + "64 3.78 0.14 0.85 0.65 2.87 \n", + "65 13.30 0.7 0.84 9.98 2.68 \n", + "66 9.84 0.58 0.80 6.57 2.73 \n", + "67 6.15 0.33 0.80 2.90 2.75 \n", + "68 5.09 0.3 0.80 1.88 2.79 \n", + "69 19.05 0.81 0.87 15.93 2.88 \n", + "70 17.59 0.73 0.81 14.34 2.75 \n", + "71 6.65 0.4 0.80 3.51 2.86 \n", + "72 6.32 0.34 0.80 3.18 2.86 \n", + "73 99.15 0.95 0.99 95.52 2.37 \n", + "74 56.28 0.93 0.88 53.08 2.80 \n", + "75 9.99 0.56 0.79 6.75 2.76 \n", + "76 5.69 0.37 0.80 2.48 2.79 \n", + "77 205.64 0.98 1.00 201.98 2.34 \n", + "78 73.76 0.96 0.95 70.81 3.05 \n", + "79 10.86 0.59 0.79 7.71 2.85 \n", + "80 5.64 0.39 0.80 2.41 2.77 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_toe\n", + "\n", + "## export\n", + "write.table(result.table_toe, '../results_summary_bin/sim_toe_GencompLasso_binary.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_bin/.ipynb_checkpoints/2.1_sim_block_lasso_binary_update-checkpoint.ipynb b/simulations/notebooks_sim_bin/.ipynb_checkpoints/2.1_sim_block_lasso_binary_update-checkpoint.ipynb new file mode 100644 index 0000000..484e80b --- /dev/null +++ b/simulations/notebooks_sim_bin/.ipynb_checkpoints/2.1_sim_block_lasso_binary_update-checkpoint.ipynb @@ -0,0 +1,971 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize lasso results on Block Simulation Scenarios for binary outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "rou.list = seq(0.1, 0.9, 0.2)\n", + "files = NULL\n", + "for (rou in rou.list){\n", + " for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_block_corr', rou, paste('P', p, 'N', n, sep='_'), '.RData', sep=''))\n", + " }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "80" + ], + "text/latex": [ + "80" + ], + "text/markdown": [ + "80" + ], + "text/plain": [ + "[1] 80" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "length(files)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1] \"indx: 1\"\n", + "[1] \"indx: 2\"\n", + "[1] \"indx: 3\"\n", + "[1] \"indx: 4\"\n", + "[1] \"indx: 5\"\n", + "[1] \"indx: 6\"\n", + "[1] \"indx: 7\"\n", + "[1] \"indx: 8\"\n", + "[1] \"indx: 9\"\n", + "[1] \"indx: 10\"\n", + "[1] \"indx: 11\"\n", + "[1] \"indx: 12\"\n", + "[1] \"indx: 13\"\n", + "[1] \"indx: 14\"\n", + "[1] \"indx: 15\"\n", + "[1] \"indx: 16\"\n", + "[1] \"indx: 17\"\n", + "[1] \"indx: 18\"\n", + "[1] \"indx: 19\"\n", + "[1] \"indx: 20\"\n", + "[1] \"indx: 21\"\n", + "[1] \"indx: 22\"\n", + "[1] \"indx: 23\"\n", + "[1] \"indx: 24\"\n", + "[1] \"indx: 25\"\n", + "[1] \"indx: 26\"\n", + "[1] \"indx: 27\"\n", + "[1] \"indx: 28\"\n", + "[1] \"indx: 29\"\n", + "[1] \"indx: 30\"\n", + "[1] \"indx: 31\"\n", + "[1] \"indx: 32\"\n", + "[1] \"indx: 33\"\n", + "[1] \"indx: 34\"\n", + "[1] \"indx: 35\"\n", + "[1] \"indx: 36\"\n", + "[1] \"indx: 37\"\n", + "[1] \"indx: 38\"\n", + "[1] \"indx: 39\"\n", + "[1] \"indx: 40\"\n", + "[1] \"indx: 41\"\n", + "[1] \"indx: 42\"\n", + "[1] \"indx: 43\"\n", + "[1] \"indx: 44\"\n", + "[1] \"indx: 45\"\n", + "[1] \"indx: 46\"\n", + "[1] \"indx: 47\"\n", + "[1] \"indx: 48\"\n", + "[1] \"indx: 49\"\n", + "[1] \"indx: 50\"\n", + "[1] \"indx: 51\"\n", + "[1] \"indx: 52\"\n", + "[1] \"indx: 53\"\n", + "[1] \"indx: 54\"\n", + "[1] \"indx: 55\"\n", + "[1] \"indx: 56\"\n", + "[1] \"indx: 57\"\n", + "[1] \"indx: 58\"\n", + "[1] \"indx: 59\"\n", + "[1] \"indx: 60\"\n", + "[1] \"indx: 61\"\n", + "[1] \"indx: 62\"\n", + "[1] \"indx: 63\"\n", + "[1] \"indx: 64\"\n", + "[1] \"indx: 65\"\n", + "[1] \"indx: 66\"\n", + "[1] \"indx: 67\"\n", + "[1] \"indx: 68\"\n", + "[1] \"indx: 69\"\n", + "[1] \"indx: 70\"\n", + "[1] \"indx: 71\"\n", + "[1] \"indx: 72\"\n", + "[1] \"indx: 73\"\n", + "[1] \"indx: 74\"\n", + "[1] \"indx: 75\"\n", + "[1] \"indx: 76\"\n", + "[1] \"indx: 77\"\n", + "[1] \"indx: 78\"\n", + "[1] \"indx: 79\"\n", + "[1] \"indx: 80\"\n" + ] + } + ], + "source": [ + "avg_FDR = NULL\n", + "table_block = NULL\n", + "tmp_num_select = rep(0, length(files))\n", + "for (i in 1:length(files)){\n", + " print(paste0('indx: ', i))\n", + " load(paste0(dir, '/binary_update/block_Lasso_binary_', i, '.RData')) \n", + " \n", + " table_block = rbind(table_block, results_block_lasso[c('n', 'p', 'rou', 'FP', 'FN', 'ROC', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_block_lasso$Stab.table))\n", + " \n", + " # calculate FDR\n", + " load(file_name, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_block_lasso$Stab.table\n", + " FDR = NULL # false positive rate\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}\n", + "table_block = as.data.frame(table_block)\n", + "table_block$num_select = tmp_num_select\n", + "table_block$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
150500.12.69 ( 0.14 )5.3 ( 0.07 )0.59 ( 0.01 )0.032.390.67
2100500.12.02 ( 0.15 )5.02 ( 0.08 )0.56 ( 0.01 )0.112.000.39
3500500.14.52 ( 0.29 )3 ( 0.11 )0.63 ( 0 )0.286.520.45
41000500.14.74 ( 0.22 )2.1 ( 0.09 )0.64 ( 0 )0.397.640.44
5501000.13.82 ( 0.16 )5.34 ( 0.07 )0.62 ( 0.01 )0.023.480.78
61001000.12.29 ( 0.19 )5.27 ( 0.08 )0.56 ( 0.01 )0.072.020.57
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 2.69 ( 0.14 ) & 5.3 ( 0.07 ) & 0.59 ( 0.01 ) & 0.03 & 2.39 & 0.67\\\\\n", + "\t2 & 100 & 50 & 0.1 & 2.02 ( 0.15 ) & 5.02 ( 0.08 ) & 0.56 ( 0.01 ) & 0.11 & 2.00 & 0.39\\\\\n", + "\t3 & 500 & 50 & 0.1 & 4.52 ( 0.29 ) & 3 ( 0.11 ) & 0.63 ( 0 ) & 0.28 & 6.52 & 0.45\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 4.74 ( 0.22 ) & 2.1 ( 0.09 ) & 0.64 ( 0 ) & 0.39 & 7.64 & 0.44\\\\\n", + "\t5 & 50 & 100 & 0.1 & 3.82 ( 0.16 ) & 5.34 ( 0.07 ) & 0.62 ( 0.01 ) & 0.02 & 3.48 & 0.78\\\\\n", + "\t6 & 100 & 100 & 0.1 & 2.29 ( 0.19 ) & 5.27 ( 0.08 ) & 0.56 ( 0.01 ) & 0.07 & 2.02 & 0.57\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 2.69 ( 0.14 ) | 5.3 ( 0.07 ) | 0.59 ( 0.01 ) | 0.03 | 2.39 | 0.67 |\n", + "| 2 | 100 | 50 | 0.1 | 2.02 ( 0.15 ) | 5.02 ( 0.08 ) | 0.56 ( 0.01 ) | 0.11 | 2.00 | 0.39 |\n", + "| 3 | 500 | 50 | 0.1 | 4.52 ( 0.29 ) | 3 ( 0.11 ) | 0.63 ( 0 ) | 0.28 | 6.52 | 0.45 |\n", + "| 4 | 1000 | 50 | 0.1 | 4.74 ( 0.22 ) | 2.1 ( 0.09 ) | 0.64 ( 0 ) | 0.39 | 7.64 | 0.44 |\n", + "| 5 | 50 | 100 | 0.1 | 3.82 ( 0.16 ) | 5.34 ( 0.07 ) | 0.62 ( 0.01 ) | 0.02 | 3.48 | 0.78 |\n", + "| 6 | 100 | 100 | 0.1 | 2.29 ( 0.19 ) | 5.27 ( 0.08 ) | 0.56 ( 0.01 ) | 0.07 | 2.02 | 0.57 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select FDR \n", + "1 50 50 0.1 2.69 ( 0.14 ) 5.3 ( 0.07 ) 0.59 ( 0.01 ) 0.03 2.39 0.67\n", + "2 100 50 0.1 2.02 ( 0.15 ) 5.02 ( 0.08 ) 0.56 ( 0.01 ) 0.11 2.00 0.39\n", + "3 500 50 0.1 4.52 ( 0.29 ) 3 ( 0.11 ) 0.63 ( 0 ) 0.28 6.52 0.45\n", + "4 1000 50 0.1 4.74 ( 0.22 ) 2.1 ( 0.09 ) 0.64 ( 0 ) 0.39 7.64 0.44\n", + "5 50 100 0.1 3.82 ( 0.16 ) 5.34 ( 0.07 ) 0.62 ( 0.01 ) 0.02 3.48 0.78\n", + "6 100 100 0.1 2.29 ( 0.19 ) 5.27 ( 0.08 ) 0.56 ( 0.01 ) 0.07 2.02 0.57" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
755005000.924.91 ( 0.78 )0 ( 0 )0.91 ( 0 )0.1929.910.78
7610005000.914.12 ( 0.43 )0 ( 0 )0.92 ( 0 )0.3119.120.67
775010000.910.81 ( 0.29 )4.22 ( 0.08 )0.64 ( 0.01 )0.0711.590.84
7810010000.911.15 ( 0.75 )2.44 ( 0.11 )0.74 ( 0.01 )0.1913.710.65
7950010000.934.98 ( 1.04 )0 ( 0 )0.91 ( 0 )0.1439.980.83
80100010000.922.21 ( 0.73 )0 ( 0 )0.92 ( 0 )0.2227.210.76
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 24.91 ( 0.78 ) & 0 ( 0 ) & 0.91 ( 0 ) & 0.19 & 29.91 & 0.78\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 14.12 ( 0.43 ) & 0 ( 0 ) & 0.92 ( 0 ) & 0.31 & 19.12 & 0.67\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 10.81 ( 0.29 ) & 4.22 ( 0.08 ) & 0.64 ( 0.01 ) & 0.07 & 11.59 & 0.84\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 11.15 ( 0.75 ) & 2.44 ( 0.11 ) & 0.74 ( 0.01 ) & 0.19 & 13.71 & 0.65\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 34.98 ( 1.04 ) & 0 ( 0 ) & 0.91 ( 0 ) & 0.14 & 39.98 & 0.83\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 22.21 ( 0.73 ) & 0 ( 0 ) & 0.92 ( 0 ) & 0.22 & 27.21 & 0.76\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 24.91 ( 0.78 ) | 0 ( 0 ) | 0.91 ( 0 ) | 0.19 | 29.91 | 0.78 |\n", + "| 76 | 1000 | 500 | 0.9 | 14.12 ( 0.43 ) | 0 ( 0 ) | 0.92 ( 0 ) | 0.31 | 19.12 | 0.67 |\n", + "| 77 | 50 | 1000 | 0.9 | 10.81 ( 0.29 ) | 4.22 ( 0.08 ) | 0.64 ( 0.01 ) | 0.07 | 11.59 | 0.84 |\n", + "| 78 | 100 | 1000 | 0.9 | 11.15 ( 0.75 ) | 2.44 ( 0.11 ) | 0.74 ( 0.01 ) | 0.19 | 13.71 | 0.65 |\n", + "| 79 | 500 | 1000 | 0.9 | 34.98 ( 1.04 ) | 0 ( 0 ) | 0.91 ( 0 ) | 0.14 | 39.98 | 0.83 |\n", + "| 80 | 1000 | 1000 | 0.9 | 22.21 ( 0.73 ) | 0 ( 0 ) | 0.92 ( 0 ) | 0.22 | 27.21 | 0.76 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select\n", + "75 500 500 0.9 24.91 ( 0.78 ) 0 ( 0 ) 0.91 ( 0 ) 0.19 29.91 \n", + "76 1000 500 0.9 14.12 ( 0.43 ) 0 ( 0 ) 0.92 ( 0 ) 0.31 19.12 \n", + "77 50 1000 0.9 10.81 ( 0.29 ) 4.22 ( 0.08 ) 0.64 ( 0.01 ) 0.07 11.59 \n", + "78 100 1000 0.9 11.15 ( 0.75 ) 2.44 ( 0.11 ) 0.74 ( 0.01 ) 0.19 13.71 \n", + "79 500 1000 0.9 34.98 ( 1.04 ) 0 ( 0 ) 0.91 ( 0 ) 0.14 39.98 \n", + "80 1000 1000 0.9 22.21 ( 0.73 ) 0 ( 0 ) 0.92 ( 0 ) 0.22 27.21 \n", + " FDR \n", + "75 0.78\n", + "76 0.67\n", + "77 0.84\n", + "78 0.65\n", + "79 0.83\n", + "80 0.76" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_block <- apply(table_block,2,as.character)\n", + "rownames(result.table_block) = rownames(table_block)\n", + "result.table_block = as.data.frame(result.table_block)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_block$n = tidyr::extract_numeric(result.table_block$n)\n", + "result.table_block$p = tidyr::extract_numeric(result.table_block$p)\n", + "result.table_block$ratio = result.table_block$p / result.table_block$n\n", + "\n", + "result.table_block = result.table_block[c('n', 'p', 'rou', 'ratio', 'Stab', 'ROC', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_block)[1:4] = c('N', 'P', 'Corr', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_block$Stab = as.numeric(as.character(result.table_block$Stab))\n", + "result.table_block$ROC_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_block$ROC))\n", + "result.table_block$FP_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_block$FP))\n", + "result.table_block$FN_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_block$FN))\n", + "result.table_block$num_select = as.numeric(as.character(result.table_block$num_select))" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "
A data.frame: 0 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
\n" + ], + "text/latex": [ + "A data.frame: 0 × 13\n", + "\\begin{tabular}{lllllllllllll}\n", + " N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 0 × 13\n", + "\n", + "| N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select FDR ROC_mean FP_mean FN_mean" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check whether missing values exists\n", + "result.table_block[rowSums(is.na(result.table_block)) > 0,]" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 500.11.000.030.59 ( 0.01 )2.69 ( 0.14 )5.3 ( 0.07 ) 2.390.670.592.695.30
2 100 500.10.500.110.56 ( 0.01 )2.02 ( 0.15 )5.02 ( 0.08 )2.000.390.562.025.02
3 500 500.10.100.280.63 ( 0 ) 4.52 ( 0.29 )3 ( 0.11 ) 6.520.450.634.523.00
41000 500.10.050.390.64 ( 0 ) 4.74 ( 0.22 )2.1 ( 0.09 ) 7.640.440.644.742.10
5 501000.12.000.020.62 ( 0.01 )3.82 ( 0.16 )5.34 ( 0.07 )3.480.780.623.825.34
6 1001000.11.000.070.56 ( 0.01 )2.29 ( 0.19 )5.27 ( 0.08 )2.020.570.562.295.27
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1.00 & 0.03 & 0.59 ( 0.01 ) & 2.69 ( 0.14 ) & 5.3 ( 0.07 ) & 2.39 & 0.67 & 0.59 & 2.69 & 5.30\\\\\n", + "\t2 & 100 & 50 & 0.1 & 0.50 & 0.11 & 0.56 ( 0.01 ) & 2.02 ( 0.15 ) & 5.02 ( 0.08 ) & 2.00 & 0.39 & 0.56 & 2.02 & 5.02\\\\\n", + "\t3 & 500 & 50 & 0.1 & 0.10 & 0.28 & 0.63 ( 0 ) & 4.52 ( 0.29 ) & 3 ( 0.11 ) & 6.52 & 0.45 & 0.63 & 4.52 & 3.00\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 0.05 & 0.39 & 0.64 ( 0 ) & 4.74 ( 0.22 ) & 2.1 ( 0.09 ) & 7.64 & 0.44 & 0.64 & 4.74 & 2.10\\\\\n", + "\t5 & 50 & 100 & 0.1 & 2.00 & 0.02 & 0.62 ( 0.01 ) & 3.82 ( 0.16 ) & 5.34 ( 0.07 ) & 3.48 & 0.78 & 0.62 & 3.82 & 5.34\\\\\n", + "\t6 & 100 & 100 & 0.1 & 1.00 & 0.07 & 0.56 ( 0.01 ) & 2.29 ( 0.19 ) & 5.27 ( 0.08 ) & 2.02 & 0.57 & 0.56 & 2.29 & 5.27\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1.00 | 0.03 | 0.59 ( 0.01 ) | 2.69 ( 0.14 ) | 5.3 ( 0.07 ) | 2.39 | 0.67 | 0.59 | 2.69 | 5.30 |\n", + "| 2 | 100 | 50 | 0.1 | 0.50 | 0.11 | 0.56 ( 0.01 ) | 2.02 ( 0.15 ) | 5.02 ( 0.08 ) | 2.00 | 0.39 | 0.56 | 2.02 | 5.02 |\n", + "| 3 | 500 | 50 | 0.1 | 0.10 | 0.28 | 0.63 ( 0 ) | 4.52 ( 0.29 ) | 3 ( 0.11 ) | 6.52 | 0.45 | 0.63 | 4.52 | 3.00 |\n", + "| 4 | 1000 | 50 | 0.1 | 0.05 | 0.39 | 0.64 ( 0 ) | 4.74 ( 0.22 ) | 2.1 ( 0.09 ) | 7.64 | 0.44 | 0.64 | 4.74 | 2.10 |\n", + "| 5 | 50 | 100 | 0.1 | 2.00 | 0.02 | 0.62 ( 0.01 ) | 3.82 ( 0.16 ) | 5.34 ( 0.07 ) | 3.48 | 0.78 | 0.62 | 3.82 | 5.34 |\n", + "| 6 | 100 | 100 | 0.1 | 1.00 | 0.07 | 0.56 ( 0.01 ) | 2.29 ( 0.19 ) | 5.27 ( 0.08 ) | 2.02 | 0.57 | 0.56 | 2.29 | 5.27 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select\n", + "1 50 50 0.1 1.00 0.03 0.59 ( 0.01 ) 2.69 ( 0.14 ) 5.3 ( 0.07 ) 2.39 \n", + "2 100 50 0.1 0.50 0.11 0.56 ( 0.01 ) 2.02 ( 0.15 ) 5.02 ( 0.08 ) 2.00 \n", + "3 500 50 0.1 0.10 0.28 0.63 ( 0 ) 4.52 ( 0.29 ) 3 ( 0.11 ) 6.52 \n", + "4 1000 50 0.1 0.05 0.39 0.64 ( 0 ) 4.74 ( 0.22 ) 2.1 ( 0.09 ) 7.64 \n", + "5 50 100 0.1 2.00 0.02 0.62 ( 0.01 ) 3.82 ( 0.16 ) 5.34 ( 0.07 ) 3.48 \n", + "6 100 100 0.1 1.00 0.07 0.56 ( 0.01 ) 2.29 ( 0.19 ) 5.27 ( 0.08 ) 2.02 \n", + " FDR ROC_mean FP_mean FN_mean\n", + "1 0.67 0.59 2.69 5.30 \n", + "2 0.39 0.56 2.02 5.02 \n", + "3 0.45 0.63 4.52 3.00 \n", + "4 0.44 0.64 4.74 2.10 \n", + "5 0.78 0.62 3.82 5.34 \n", + "6 0.57 0.56 2.29 5.27 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
75 500 5000.9 1.00.190.91 ( 0 ) 24.91 ( 0.78 )0 ( 0 ) 29.910.780.9124.910.00
761000 5000.9 0.50.310.92 ( 0 ) 14.12 ( 0.43 )0 ( 0 ) 19.120.670.9214.120.00
77 5010000.920.00.070.64 ( 0.01 )10.81 ( 0.29 )4.22 ( 0.08 )11.590.840.6410.814.22
78 10010000.910.00.190.74 ( 0.01 )11.15 ( 0.75 )2.44 ( 0.11 )13.710.650.7411.152.44
79 50010000.9 2.00.140.91 ( 0 ) 34.98 ( 1.04 )0 ( 0 ) 39.980.830.9134.980.00
80100010000.9 1.00.220.92 ( 0 ) 22.21 ( 0.73 )0 ( 0 ) 27.210.760.9222.210.00
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 1.0 & 0.19 & 0.91 ( 0 ) & 24.91 ( 0.78 ) & 0 ( 0 ) & 29.91 & 0.78 & 0.91 & 24.91 & 0.00\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.5 & 0.31 & 0.92 ( 0 ) & 14.12 ( 0.43 ) & 0 ( 0 ) & 19.12 & 0.67 & 0.92 & 14.12 & 0.00\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.0 & 0.07 & 0.64 ( 0.01 ) & 10.81 ( 0.29 ) & 4.22 ( 0.08 ) & 11.59 & 0.84 & 0.64 & 10.81 & 4.22\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.0 & 0.19 & 0.74 ( 0.01 ) & 11.15 ( 0.75 ) & 2.44 ( 0.11 ) & 13.71 & 0.65 & 0.74 & 11.15 & 2.44\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.0 & 0.14 & 0.91 ( 0 ) & 34.98 ( 1.04 ) & 0 ( 0 ) & 39.98 & 0.83 & 0.91 & 34.98 & 0.00\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.0 & 0.22 & 0.92 ( 0 ) & 22.21 ( 0.73 ) & 0 ( 0 ) & 27.21 & 0.76 & 0.92 & 22.21 & 0.00\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 1.0 | 0.19 | 0.91 ( 0 ) | 24.91 ( 0.78 ) | 0 ( 0 ) | 29.91 | 0.78 | 0.91 | 24.91 | 0.00 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.5 | 0.31 | 0.92 ( 0 ) | 14.12 ( 0.43 ) | 0 ( 0 ) | 19.12 | 0.67 | 0.92 | 14.12 | 0.00 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.0 | 0.07 | 0.64 ( 0.01 ) | 10.81 ( 0.29 ) | 4.22 ( 0.08 ) | 11.59 | 0.84 | 0.64 | 10.81 | 4.22 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.0 | 0.19 | 0.74 ( 0.01 ) | 11.15 ( 0.75 ) | 2.44 ( 0.11 ) | 13.71 | 0.65 | 0.74 | 11.15 | 2.44 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.0 | 0.14 | 0.91 ( 0 ) | 34.98 ( 1.04 ) | 0 ( 0 ) | 39.98 | 0.83 | 0.91 | 34.98 | 0.00 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.0 | 0.22 | 0.92 ( 0 ) | 22.21 ( 0.73 ) | 0 ( 0 ) | 27.21 | 0.76 | 0.92 | 22.21 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "75 500 500 0.9 1.0 0.19 0.91 ( 0 ) 24.91 ( 0.78 ) 0 ( 0 ) \n", + "76 1000 500 0.9 0.5 0.31 0.92 ( 0 ) 14.12 ( 0.43 ) 0 ( 0 ) \n", + "77 50 1000 0.9 20.0 0.07 0.64 ( 0.01 ) 10.81 ( 0.29 ) 4.22 ( 0.08 )\n", + "78 100 1000 0.9 10.0 0.19 0.74 ( 0.01 ) 11.15 ( 0.75 ) 2.44 ( 0.11 )\n", + "79 500 1000 0.9 2.0 0.14 0.91 ( 0 ) 34.98 ( 1.04 ) 0 ( 0 ) \n", + "80 1000 1000 0.9 1.0 0.22 0.92 ( 0 ) 22.21 ( 0.73 ) 0 ( 0 ) \n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "75 29.91 0.78 0.91 24.91 0.00 \n", + "76 19.12 0.67 0.92 14.12 0.00 \n", + "77 11.59 0.84 0.64 10.81 4.22 \n", + "78 13.71 0.65 0.74 11.15 2.44 \n", + "79 39.98 0.83 0.91 34.98 0.00 \n", + "80 27.21 0.76 0.92 22.21 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(result.table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 80 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 500.1 1.000.030.59 ( 0.01 )2.69 ( 0.14 ) 5.3 ( 0.07 ) 2.390.670.59 2.695.30
2 100 500.1 0.500.110.56 ( 0.01 )2.02 ( 0.15 ) 5.02 ( 0.08 ) 2.000.390.56 2.025.02
3 500 500.1 0.100.280.63 ( 0 ) 4.52 ( 0.29 ) 3 ( 0.11 ) 6.520.450.63 4.523.00
41000 500.1 0.050.390.64 ( 0 ) 4.74 ( 0.22 ) 2.1 ( 0.09 ) 7.640.440.64 4.742.10
5 50 1000.1 2.000.020.62 ( 0.01 )3.82 ( 0.16 ) 5.34 ( 0.07 ) 3.480.780.62 3.825.34
6 100 1000.1 1.000.070.56 ( 0.01 )2.29 ( 0.19 ) 5.27 ( 0.08 ) 2.020.570.56 2.295.27
7 500 1000.1 0.200.230.61 ( 0 ) 5.54 ( 0.52 ) 3.27 ( 0.12 ) 7.270.470.61 5.543.27
81000 1000.1 0.100.270.64 ( 0 ) 7.69 ( 0.42 ) 2.25 ( 0.1 ) 10.440.560.64 7.692.25
9 50 5000.110.000.010.6 ( 0.01 ) 8.69 ( 0.24 ) 5.55 ( 0.06 ) 8.140.940.60 8.695.55
10 100 5000.1 5.000.030.56 ( 0.01 )4.39 ( 0.34 ) 5.4 ( 0.07 ) 3.990.820.56 4.395.40
11 500 5000.1 1.000.270.61 ( 0.01 )3.84 ( 0.28 ) 3.93 ( 0.08 ) 4.910.470.61 3.843.93
121000 5000.1 0.500.200.63 ( 0 ) 9.87 ( 1.4 ) 3.18 ( 0.09 )11.690.490.63 9.873.18
13 5010000.120.000.000.62 ( 0.01 )10.42 ( 0.22 )5.56 ( 0.06 ) 9.860.950.6210.425.56
14 10010000.110.000.010.56 ( 0.01 )5.93 ( 0.28 ) 5.53 ( 0.06 ) 5.400.9 0.56 5.935.53
15 50010000.1 2.000.240.62 ( 0.01 )4.22 ( 0.48 ) 4.05 ( 0.09 ) 5.170.460.62 4.224.05
16100010000.1 1.000.330.63 ( 0 ) 5.03 ( 0.78 ) 3.35 ( 0.06 ) 6.680.420.63 5.033.35
17 50 500.3 1.000.170.65 ( 0.01 )3.87 ( 0.23 ) 3.68 ( 0.12 ) 5.190.5 0.65 3.873.68
18 100 500.3 0.500.320.78 ( 0.01 )6.48 ( 0.32 ) 1.13 ( 0.11 )10.350.490.78 6.481.13
19 500 500.3 0.100.440.85 ( 0 ) 6.84 ( 0.26 ) 0 ( 0 ) 11.840.470.85 6.840.00
201000 500.3 0.050.650.86 ( 0 ) 3.69 ( 0.19 ) 0 ( 0 ) 8.690.280.86 3.690.00
21 50 1000.3 2.000.140.63 ( 0.01 )5.12 ( 0.25 ) 3.91 ( 0.1 ) 6.210.630.63 5.123.91
22 100 1000.3 1.000.260.74 ( 0.01 )7.62 ( 0.48 ) 1.8 ( 0.12 ) 10.820.530.74 7.621.80
23 500 1000.3 0.200.360.86 ( 0 ) 10.19 ( 0.4 ) 0 ( 0 ) 15.190.570.8610.190.00
241000 1000.3 0.100.520.86 ( 0 ) 6 ( 0.27 ) 0 ( 0 ) 11.000.420.86 6.000.00
25 50 5000.310.000.030.61 ( 0.01 )10.46 ( 0.31 )4.69 ( 0.08 )10.770.870.6110.464.69
26 100 5000.3 5.000.170.66 ( 0.01 )8.6 ( 0.65 ) 3.19 ( 0.12 )10.410.640.66 8.603.19
27 500 5000.3 1.000.190.85 ( 0 ) 25.12 ( 1.08 )0 ( 0 ) 30.120.770.8525.120.00
281000 5000.3 0.500.250.86 ( 0 ) 18.48 ( 0.73 )0 ( 0 ) 23.480.720.8618.480.00
29 5010000.320.000.020.6 ( 0.01 ) 12.08 ( 0.26 )4.97 ( 0.08 )12.110.910.6012.084.97
30 10010000.310.000.130.65 ( 0.01 )9 ( 0.66 ) 3.58 ( 0.12 )10.420.720.65 9.003.58
51 500 500.7 0.100.490.91 ( 0 ) 5.84 ( 0.26 ) 0 ( 0 ) 10.840.420.91 5.840.00
521000 500.7 0.050.710.92 ( 0 ) 3.03 ( 0.15 ) 0 ( 0 ) 8.030.230.92 3.030.00
53 50 1000.7 2.000.210.69 ( 0.01 )5.07 ( 0.25 ) 3.13 ( 0.1 ) 6.940.550.69 5.073.13
54 100 1000.7 1.000.280.82 ( 0.01 )9.65 ( 0.48 ) 0.97 ( 0.1 ) 13.680.590.82 9.650.97
55 500 1000.7 0.200.360.91 ( 0 ) 10.19 ( 0.37 )0 ( 0 ) 15.190.580.9110.190.00
561000 1000.7 0.100.590.92 ( 0 ) 4.81 ( 0.19 ) 0 ( 0 ) 9.810.370.92 4.810.00
57 50 5000.710.000.090.66 ( 0.01 )9.13 ( 0.25 ) 4.14 ( 0.08 ) 9.990.810.66 9.134.14
58 100 5000.7 5.000.210.75 ( 0.01 )9.59 ( 0.72 ) 2.44 ( 0.11 )12.150.610.75 9.592.44
59 500 5000.7 1.000.180.9 ( 0 ) 26.2 ( 0.86 ) 0 ( 0 ) 31.200.790.9026.200.00
601000 5000.7 0.500.280.91 ( 0 ) 15.6 ( 0.55 ) 0 ( 0 ) 20.600.680.9115.600.00
61 5010000.720.000.050.64 ( 0.01 )11.44 ( 0.28 )4.51 ( 0.08 )11.930.870.6411.444.51
62 10010000.710.000.180.71 ( 0.01 )10.03 ( 0.71 )2.95 ( 0.1 ) 12.080.650.7110.032.95
63 50010000.7 2.000.140.9 ( 0 ) 34.85 ( 1.14 )0 ( 0 ) 39.850.830.9034.850.00
64100010000.7 1.000.200.91 ( 0 ) 24.83 ( 0.82 )0 ( 0 ) 29.830.780.9124.830.00
65 50 500.9 1.000.300.73 ( 0.01 )4.4 ( 0.26 ) 2.55 ( 0.11 ) 6.850.440.73 4.402.55
66 100 500.9 0.500.330.85 ( 0.01 )8.14 ( 0.35 ) 0.42 ( 0.06 )12.720.530.85 8.140.42
67 500 500.9 0.100.540.92 ( 0 ) 5.15 ( 0.22 ) 0 ( 0 ) 10.150.380.92 5.150.00
681000 500.9 0.050.760.92 ( 0 ) 2.61 ( 0.13 ) 0 ( 0 ) 7.610.190.92 2.610.00
69 50 1000.9 2.000.230.7 ( 0.01 ) 4.84 ( 0.24 ) 3.3 ( 0.09 ) 6.540.540.70 4.843.30
70 100 1000.9 1.000.280.81 ( 0.01 )9.92 ( 0.51 ) 0.87 ( 0.08 )14.050.570.81 9.920.87
71 500 1000.9 0.200.370.92 ( 0 ) 9.65 ( 0.35 ) 0 ( 0 ) 14.650.570.92 9.650.00
721000 1000.9 0.100.620.93 ( 0 ) 4.29 ( 0.18 ) 0 ( 0 ) 9.290.330.93 4.290.00
73 50 5000.910.000.080.62 ( 0.01 )8.99 ( 0.26 ) 4.13 ( 0.09 ) 9.860.8 0.62 8.994.13
74 100 5000.9 5.000.230.74 ( 0.01 )8.85 ( 0.62 ) 2.4 ( 0.12 ) 11.450.6 0.74 8.852.40
75 500 5000.9 1.000.190.91 ( 0 ) 24.91 ( 0.78 )0 ( 0 ) 29.910.780.9124.910.00
761000 5000.9 0.500.310.92 ( 0 ) 14.12 ( 0.43 )0 ( 0 ) 19.120.670.9214.120.00
77 5010000.920.000.070.64 ( 0.01 )10.81 ( 0.29 )4.22 ( 0.08 )11.590.840.6410.814.22
78 10010000.910.000.190.74 ( 0.01 )11.15 ( 0.75 )2.44 ( 0.11 )13.710.650.7411.152.44
79 50010000.9 2.000.140.91 ( 0 ) 34.98 ( 1.04 )0 ( 0 ) 39.980.830.9134.980.00
80100010000.9 1.000.220.92 ( 0 ) 22.21 ( 0.73 )0 ( 0 ) 27.210.760.9222.210.00
\n" + ], + "text/latex": [ + "A data.frame: 80 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1.00 & 0.03 & 0.59 ( 0.01 ) & 2.69 ( 0.14 ) & 5.3 ( 0.07 ) & 2.39 & 0.67 & 0.59 & 2.69 & 5.30\\\\\n", + "\t2 & 100 & 50 & 0.1 & 0.50 & 0.11 & 0.56 ( 0.01 ) & 2.02 ( 0.15 ) & 5.02 ( 0.08 ) & 2.00 & 0.39 & 0.56 & 2.02 & 5.02\\\\\n", + "\t3 & 500 & 50 & 0.1 & 0.10 & 0.28 & 0.63 ( 0 ) & 4.52 ( 0.29 ) & 3 ( 0.11 ) & 6.52 & 0.45 & 0.63 & 4.52 & 3.00\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 0.05 & 0.39 & 0.64 ( 0 ) & 4.74 ( 0.22 ) & 2.1 ( 0.09 ) & 7.64 & 0.44 & 0.64 & 4.74 & 2.10\\\\\n", + "\t5 & 50 & 100 & 0.1 & 2.00 & 0.02 & 0.62 ( 0.01 ) & 3.82 ( 0.16 ) & 5.34 ( 0.07 ) & 3.48 & 0.78 & 0.62 & 3.82 & 5.34\\\\\n", + "\t6 & 100 & 100 & 0.1 & 1.00 & 0.07 & 0.56 ( 0.01 ) & 2.29 ( 0.19 ) & 5.27 ( 0.08 ) & 2.02 & 0.57 & 0.56 & 2.29 & 5.27\\\\\n", + "\t7 & 500 & 100 & 0.1 & 0.20 & 0.23 & 0.61 ( 0 ) & 5.54 ( 0.52 ) & 3.27 ( 0.12 ) & 7.27 & 0.47 & 0.61 & 5.54 & 3.27\\\\\n", + "\t8 & 1000 & 100 & 0.1 & 0.10 & 0.27 & 0.64 ( 0 ) & 7.69 ( 0.42 ) & 2.25 ( 0.1 ) & 10.44 & 0.56 & 0.64 & 7.69 & 2.25\\\\\n", + "\t9 & 50 & 500 & 0.1 & 10.00 & 0.01 & 0.6 ( 0.01 ) & 8.69 ( 0.24 ) & 5.55 ( 0.06 ) & 8.14 & 0.94 & 0.60 & 8.69 & 5.55\\\\\n", + "\t10 & 100 & 500 & 0.1 & 5.00 & 0.03 & 0.56 ( 0.01 ) & 4.39 ( 0.34 ) & 5.4 ( 0.07 ) & 3.99 & 0.82 & 0.56 & 4.39 & 5.40\\\\\n", + "\t11 & 500 & 500 & 0.1 & 1.00 & 0.27 & 0.61 ( 0.01 ) & 3.84 ( 0.28 ) & 3.93 ( 0.08 ) & 4.91 & 0.47 & 0.61 & 3.84 & 3.93\\\\\n", + "\t12 & 1000 & 500 & 0.1 & 0.50 & 0.20 & 0.63 ( 0 ) & 9.87 ( 1.4 ) & 3.18 ( 0.09 ) & 11.69 & 0.49 & 0.63 & 9.87 & 3.18\\\\\n", + "\t13 & 50 & 1000 & 0.1 & 20.00 & 0.00 & 0.62 ( 0.01 ) & 10.42 ( 0.22 ) & 5.56 ( 0.06 ) & 9.86 & 0.95 & 0.62 & 10.42 & 5.56\\\\\n", + "\t14 & 100 & 1000 & 0.1 & 10.00 & 0.01 & 0.56 ( 0.01 ) & 5.93 ( 0.28 ) & 5.53 ( 0.06 ) & 5.40 & 0.9 & 0.56 & 5.93 & 5.53\\\\\n", + "\t15 & 500 & 1000 & 0.1 & 2.00 & 0.24 & 0.62 ( 0.01 ) & 4.22 ( 0.48 ) & 4.05 ( 0.09 ) & 5.17 & 0.46 & 0.62 & 4.22 & 4.05\\\\\n", + "\t16 & 1000 & 1000 & 0.1 & 1.00 & 0.33 & 0.63 ( 0 ) & 5.03 ( 0.78 ) & 3.35 ( 0.06 ) & 6.68 & 0.42 & 0.63 & 5.03 & 3.35\\\\\n", + "\t17 & 50 & 50 & 0.3 & 1.00 & 0.17 & 0.65 ( 0.01 ) & 3.87 ( 0.23 ) & 3.68 ( 0.12 ) & 5.19 & 0.5 & 0.65 & 3.87 & 3.68\\\\\n", + "\t18 & 100 & 50 & 0.3 & 0.50 & 0.32 & 0.78 ( 0.01 ) & 6.48 ( 0.32 ) & 1.13 ( 0.11 ) & 10.35 & 0.49 & 0.78 & 6.48 & 1.13\\\\\n", + "\t19 & 500 & 50 & 0.3 & 0.10 & 0.44 & 0.85 ( 0 ) & 6.84 ( 0.26 ) & 0 ( 0 ) & 11.84 & 0.47 & 0.85 & 6.84 & 0.00\\\\\n", + "\t20 & 1000 & 50 & 0.3 & 0.05 & 0.65 & 0.86 ( 0 ) & 3.69 ( 0.19 ) & 0 ( 0 ) & 8.69 & 0.28 & 0.86 & 3.69 & 0.00\\\\\n", + "\t21 & 50 & 100 & 0.3 & 2.00 & 0.14 & 0.63 ( 0.01 ) & 5.12 ( 0.25 ) & 3.91 ( 0.1 ) & 6.21 & 0.63 & 0.63 & 5.12 & 3.91\\\\\n", + "\t22 & 100 & 100 & 0.3 & 1.00 & 0.26 & 0.74 ( 0.01 ) & 7.62 ( 0.48 ) & 1.8 ( 0.12 ) & 10.82 & 0.53 & 0.74 & 7.62 & 1.80\\\\\n", + "\t23 & 500 & 100 & 0.3 & 0.20 & 0.36 & 0.86 ( 0 ) & 10.19 ( 0.4 ) & 0 ( 0 ) & 15.19 & 0.57 & 0.86 & 10.19 & 0.00\\\\\n", + "\t24 & 1000 & 100 & 0.3 & 0.10 & 0.52 & 0.86 ( 0 ) & 6 ( 0.27 ) & 0 ( 0 ) & 11.00 & 0.42 & 0.86 & 6.00 & 0.00\\\\\n", + "\t25 & 50 & 500 & 0.3 & 10.00 & 0.03 & 0.61 ( 0.01 ) & 10.46 ( 0.31 ) & 4.69 ( 0.08 ) & 10.77 & 0.87 & 0.61 & 10.46 & 4.69\\\\\n", + "\t26 & 100 & 500 & 0.3 & 5.00 & 0.17 & 0.66 ( 0.01 ) & 8.6 ( 0.65 ) & 3.19 ( 0.12 ) & 10.41 & 0.64 & 0.66 & 8.60 & 3.19\\\\\n", + "\t27 & 500 & 500 & 0.3 & 1.00 & 0.19 & 0.85 ( 0 ) & 25.12 ( 1.08 ) & 0 ( 0 ) & 30.12 & 0.77 & 0.85 & 25.12 & 0.00\\\\\n", + "\t28 & 1000 & 500 & 0.3 & 0.50 & 0.25 & 0.86 ( 0 ) & 18.48 ( 0.73 ) & 0 ( 0 ) & 23.48 & 0.72 & 0.86 & 18.48 & 0.00\\\\\n", + "\t29 & 50 & 1000 & 0.3 & 20.00 & 0.02 & 0.6 ( 0.01 ) & 12.08 ( 0.26 ) & 4.97 ( 0.08 ) & 12.11 & 0.91 & 0.60 & 12.08 & 4.97\\\\\n", + "\t30 & 100 & 1000 & 0.3 & 10.00 & 0.13 & 0.65 ( 0.01 ) & 9 ( 0.66 ) & 3.58 ( 0.12 ) & 10.42 & 0.72 & 0.65 & 9.00 & 3.58\\\\\n", + "\t⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮\\\\\n", + "\t51 & 500 & 50 & 0.7 & 0.10 & 0.49 & 0.91 ( 0 ) & 5.84 ( 0.26 ) & 0 ( 0 ) & 10.84 & 0.42 & 0.91 & 5.84 & 0.00\\\\\n", + "\t52 & 1000 & 50 & 0.7 & 0.05 & 0.71 & 0.92 ( 0 ) & 3.03 ( 0.15 ) & 0 ( 0 ) & 8.03 & 0.23 & 0.92 & 3.03 & 0.00\\\\\n", + "\t53 & 50 & 100 & 0.7 & 2.00 & 0.21 & 0.69 ( 0.01 ) & 5.07 ( 0.25 ) & 3.13 ( 0.1 ) & 6.94 & 0.55 & 0.69 & 5.07 & 3.13\\\\\n", + "\t54 & 100 & 100 & 0.7 & 1.00 & 0.28 & 0.82 ( 0.01 ) & 9.65 ( 0.48 ) & 0.97 ( 0.1 ) & 13.68 & 0.59 & 0.82 & 9.65 & 0.97\\\\\n", + "\t55 & 500 & 100 & 0.7 & 0.20 & 0.36 & 0.91 ( 0 ) & 10.19 ( 0.37 ) & 0 ( 0 ) & 15.19 & 0.58 & 0.91 & 10.19 & 0.00\\\\\n", + "\t56 & 1000 & 100 & 0.7 & 0.10 & 0.59 & 0.92 ( 0 ) & 4.81 ( 0.19 ) & 0 ( 0 ) & 9.81 & 0.37 & 0.92 & 4.81 & 0.00\\\\\n", + "\t57 & 50 & 500 & 0.7 & 10.00 & 0.09 & 0.66 ( 0.01 ) & 9.13 ( 0.25 ) & 4.14 ( 0.08 ) & 9.99 & 0.81 & 0.66 & 9.13 & 4.14\\\\\n", + "\t58 & 100 & 500 & 0.7 & 5.00 & 0.21 & 0.75 ( 0.01 ) & 9.59 ( 0.72 ) & 2.44 ( 0.11 ) & 12.15 & 0.61 & 0.75 & 9.59 & 2.44\\\\\n", + "\t59 & 500 & 500 & 0.7 & 1.00 & 0.18 & 0.9 ( 0 ) & 26.2 ( 0.86 ) & 0 ( 0 ) & 31.20 & 0.79 & 0.90 & 26.20 & 0.00\\\\\n", + "\t60 & 1000 & 500 & 0.7 & 0.50 & 0.28 & 0.91 ( 0 ) & 15.6 ( 0.55 ) & 0 ( 0 ) & 20.60 & 0.68 & 0.91 & 15.60 & 0.00\\\\\n", + "\t61 & 50 & 1000 & 0.7 & 20.00 & 0.05 & 0.64 ( 0.01 ) & 11.44 ( 0.28 ) & 4.51 ( 0.08 ) & 11.93 & 0.87 & 0.64 & 11.44 & 4.51\\\\\n", + "\t62 & 100 & 1000 & 0.7 & 10.00 & 0.18 & 0.71 ( 0.01 ) & 10.03 ( 0.71 ) & 2.95 ( 0.1 ) & 12.08 & 0.65 & 0.71 & 10.03 & 2.95\\\\\n", + "\t63 & 500 & 1000 & 0.7 & 2.00 & 0.14 & 0.9 ( 0 ) & 34.85 ( 1.14 ) & 0 ( 0 ) & 39.85 & 0.83 & 0.90 & 34.85 & 0.00\\\\\n", + "\t64 & 1000 & 1000 & 0.7 & 1.00 & 0.20 & 0.91 ( 0 ) & 24.83 ( 0.82 ) & 0 ( 0 ) & 29.83 & 0.78 & 0.91 & 24.83 & 0.00\\\\\n", + "\t65 & 50 & 50 & 0.9 & 1.00 & 0.30 & 0.73 ( 0.01 ) & 4.4 ( 0.26 ) & 2.55 ( 0.11 ) & 6.85 & 0.44 & 0.73 & 4.40 & 2.55\\\\\n", + "\t66 & 100 & 50 & 0.9 & 0.50 & 0.33 & 0.85 ( 0.01 ) & 8.14 ( 0.35 ) & 0.42 ( 0.06 ) & 12.72 & 0.53 & 0.85 & 8.14 & 0.42\\\\\n", + "\t67 & 500 & 50 & 0.9 & 0.10 & 0.54 & 0.92 ( 0 ) & 5.15 ( 0.22 ) & 0 ( 0 ) & 10.15 & 0.38 & 0.92 & 5.15 & 0.00\\\\\n", + "\t68 & 1000 & 50 & 0.9 & 0.05 & 0.76 & 0.92 ( 0 ) & 2.61 ( 0.13 ) & 0 ( 0 ) & 7.61 & 0.19 & 0.92 & 2.61 & 0.00\\\\\n", + "\t69 & 50 & 100 & 0.9 & 2.00 & 0.23 & 0.7 ( 0.01 ) & 4.84 ( 0.24 ) & 3.3 ( 0.09 ) & 6.54 & 0.54 & 0.70 & 4.84 & 3.30\\\\\n", + "\t70 & 100 & 100 & 0.9 & 1.00 & 0.28 & 0.81 ( 0.01 ) & 9.92 ( 0.51 ) & 0.87 ( 0.08 ) & 14.05 & 0.57 & 0.81 & 9.92 & 0.87\\\\\n", + "\t71 & 500 & 100 & 0.9 & 0.20 & 0.37 & 0.92 ( 0 ) & 9.65 ( 0.35 ) & 0 ( 0 ) & 14.65 & 0.57 & 0.92 & 9.65 & 0.00\\\\\n", + "\t72 & 1000 & 100 & 0.9 & 0.10 & 0.62 & 0.93 ( 0 ) & 4.29 ( 0.18 ) & 0 ( 0 ) & 9.29 & 0.33 & 0.93 & 4.29 & 0.00\\\\\n", + "\t73 & 50 & 500 & 0.9 & 10.00 & 0.08 & 0.62 ( 0.01 ) & 8.99 ( 0.26 ) & 4.13 ( 0.09 ) & 9.86 & 0.8 & 0.62 & 8.99 & 4.13\\\\\n", + "\t74 & 100 & 500 & 0.9 & 5.00 & 0.23 & 0.74 ( 0.01 ) & 8.85 ( 0.62 ) & 2.4 ( 0.12 ) & 11.45 & 0.6 & 0.74 & 8.85 & 2.40\\\\\n", + "\t75 & 500 & 500 & 0.9 & 1.00 & 0.19 & 0.91 ( 0 ) & 24.91 ( 0.78 ) & 0 ( 0 ) & 29.91 & 0.78 & 0.91 & 24.91 & 0.00\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.50 & 0.31 & 0.92 ( 0 ) & 14.12 ( 0.43 ) & 0 ( 0 ) & 19.12 & 0.67 & 0.92 & 14.12 & 0.00\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.00 & 0.07 & 0.64 ( 0.01 ) & 10.81 ( 0.29 ) & 4.22 ( 0.08 ) & 11.59 & 0.84 & 0.64 & 10.81 & 4.22\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.00 & 0.19 & 0.74 ( 0.01 ) & 11.15 ( 0.75 ) & 2.44 ( 0.11 ) & 13.71 & 0.65 & 0.74 & 11.15 & 2.44\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.00 & 0.14 & 0.91 ( 0 ) & 34.98 ( 1.04 ) & 0 ( 0 ) & 39.98 & 0.83 & 0.91 & 34.98 & 0.00\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.00 & 0.22 & 0.92 ( 0 ) & 22.21 ( 0.73 ) & 0 ( 0 ) & 27.21 & 0.76 & 0.92 & 22.21 & 0.00\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 80 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1.00 | 0.03 | 0.59 ( 0.01 ) | 2.69 ( 0.14 ) | 5.3 ( 0.07 ) | 2.39 | 0.67 | 0.59 | 2.69 | 5.30 |\n", + "| 2 | 100 | 50 | 0.1 | 0.50 | 0.11 | 0.56 ( 0.01 ) | 2.02 ( 0.15 ) | 5.02 ( 0.08 ) | 2.00 | 0.39 | 0.56 | 2.02 | 5.02 |\n", + "| 3 | 500 | 50 | 0.1 | 0.10 | 0.28 | 0.63 ( 0 ) | 4.52 ( 0.29 ) | 3 ( 0.11 ) | 6.52 | 0.45 | 0.63 | 4.52 | 3.00 |\n", + "| 4 | 1000 | 50 | 0.1 | 0.05 | 0.39 | 0.64 ( 0 ) | 4.74 ( 0.22 ) | 2.1 ( 0.09 ) | 7.64 | 0.44 | 0.64 | 4.74 | 2.10 |\n", + "| 5 | 50 | 100 | 0.1 | 2.00 | 0.02 | 0.62 ( 0.01 ) | 3.82 ( 0.16 ) | 5.34 ( 0.07 ) | 3.48 | 0.78 | 0.62 | 3.82 | 5.34 |\n", + "| 6 | 100 | 100 | 0.1 | 1.00 | 0.07 | 0.56 ( 0.01 ) | 2.29 ( 0.19 ) | 5.27 ( 0.08 ) | 2.02 | 0.57 | 0.56 | 2.29 | 5.27 |\n", + "| 7 | 500 | 100 | 0.1 | 0.20 | 0.23 | 0.61 ( 0 ) | 5.54 ( 0.52 ) | 3.27 ( 0.12 ) | 7.27 | 0.47 | 0.61 | 5.54 | 3.27 |\n", + "| 8 | 1000 | 100 | 0.1 | 0.10 | 0.27 | 0.64 ( 0 ) | 7.69 ( 0.42 ) | 2.25 ( 0.1 ) | 10.44 | 0.56 | 0.64 | 7.69 | 2.25 |\n", + "| 9 | 50 | 500 | 0.1 | 10.00 | 0.01 | 0.6 ( 0.01 ) | 8.69 ( 0.24 ) | 5.55 ( 0.06 ) | 8.14 | 0.94 | 0.60 | 8.69 | 5.55 |\n", + "| 10 | 100 | 500 | 0.1 | 5.00 | 0.03 | 0.56 ( 0.01 ) | 4.39 ( 0.34 ) | 5.4 ( 0.07 ) | 3.99 | 0.82 | 0.56 | 4.39 | 5.40 |\n", + "| 11 | 500 | 500 | 0.1 | 1.00 | 0.27 | 0.61 ( 0.01 ) | 3.84 ( 0.28 ) | 3.93 ( 0.08 ) | 4.91 | 0.47 | 0.61 | 3.84 | 3.93 |\n", + "| 12 | 1000 | 500 | 0.1 | 0.50 | 0.20 | 0.63 ( 0 ) | 9.87 ( 1.4 ) | 3.18 ( 0.09 ) | 11.69 | 0.49 | 0.63 | 9.87 | 3.18 |\n", + "| 13 | 50 | 1000 | 0.1 | 20.00 | 0.00 | 0.62 ( 0.01 ) | 10.42 ( 0.22 ) | 5.56 ( 0.06 ) | 9.86 | 0.95 | 0.62 | 10.42 | 5.56 |\n", + "| 14 | 100 | 1000 | 0.1 | 10.00 | 0.01 | 0.56 ( 0.01 ) | 5.93 ( 0.28 ) | 5.53 ( 0.06 ) | 5.40 | 0.9 | 0.56 | 5.93 | 5.53 |\n", + "| 15 | 500 | 1000 | 0.1 | 2.00 | 0.24 | 0.62 ( 0.01 ) | 4.22 ( 0.48 ) | 4.05 ( 0.09 ) | 5.17 | 0.46 | 0.62 | 4.22 | 4.05 |\n", + "| 16 | 1000 | 1000 | 0.1 | 1.00 | 0.33 | 0.63 ( 0 ) | 5.03 ( 0.78 ) | 3.35 ( 0.06 ) | 6.68 | 0.42 | 0.63 | 5.03 | 3.35 |\n", + "| 17 | 50 | 50 | 0.3 | 1.00 | 0.17 | 0.65 ( 0.01 ) | 3.87 ( 0.23 ) | 3.68 ( 0.12 ) | 5.19 | 0.5 | 0.65 | 3.87 | 3.68 |\n", + "| 18 | 100 | 50 | 0.3 | 0.50 | 0.32 | 0.78 ( 0.01 ) | 6.48 ( 0.32 ) | 1.13 ( 0.11 ) | 10.35 | 0.49 | 0.78 | 6.48 | 1.13 |\n", + "| 19 | 500 | 50 | 0.3 | 0.10 | 0.44 | 0.85 ( 0 ) | 6.84 ( 0.26 ) | 0 ( 0 ) | 11.84 | 0.47 | 0.85 | 6.84 | 0.00 |\n", + "| 20 | 1000 | 50 | 0.3 | 0.05 | 0.65 | 0.86 ( 0 ) | 3.69 ( 0.19 ) | 0 ( 0 ) | 8.69 | 0.28 | 0.86 | 3.69 | 0.00 |\n", + "| 21 | 50 | 100 | 0.3 | 2.00 | 0.14 | 0.63 ( 0.01 ) | 5.12 ( 0.25 ) | 3.91 ( 0.1 ) | 6.21 | 0.63 | 0.63 | 5.12 | 3.91 |\n", + "| 22 | 100 | 100 | 0.3 | 1.00 | 0.26 | 0.74 ( 0.01 ) | 7.62 ( 0.48 ) | 1.8 ( 0.12 ) | 10.82 | 0.53 | 0.74 | 7.62 | 1.80 |\n", + "| 23 | 500 | 100 | 0.3 | 0.20 | 0.36 | 0.86 ( 0 ) | 10.19 ( 0.4 ) | 0 ( 0 ) | 15.19 | 0.57 | 0.86 | 10.19 | 0.00 |\n", + "| 24 | 1000 | 100 | 0.3 | 0.10 | 0.52 | 0.86 ( 0 ) | 6 ( 0.27 ) | 0 ( 0 ) | 11.00 | 0.42 | 0.86 | 6.00 | 0.00 |\n", + "| 25 | 50 | 500 | 0.3 | 10.00 | 0.03 | 0.61 ( 0.01 ) | 10.46 ( 0.31 ) | 4.69 ( 0.08 ) | 10.77 | 0.87 | 0.61 | 10.46 | 4.69 |\n", + "| 26 | 100 | 500 | 0.3 | 5.00 | 0.17 | 0.66 ( 0.01 ) | 8.6 ( 0.65 ) | 3.19 ( 0.12 ) | 10.41 | 0.64 | 0.66 | 8.60 | 3.19 |\n", + "| 27 | 500 | 500 | 0.3 | 1.00 | 0.19 | 0.85 ( 0 ) | 25.12 ( 1.08 ) | 0 ( 0 ) | 30.12 | 0.77 | 0.85 | 25.12 | 0.00 |\n", + "| 28 | 1000 | 500 | 0.3 | 0.50 | 0.25 | 0.86 ( 0 ) | 18.48 ( 0.73 ) | 0 ( 0 ) | 23.48 | 0.72 | 0.86 | 18.48 | 0.00 |\n", + "| 29 | 50 | 1000 | 0.3 | 20.00 | 0.02 | 0.6 ( 0.01 ) | 12.08 ( 0.26 ) | 4.97 ( 0.08 ) | 12.11 | 0.91 | 0.60 | 12.08 | 4.97 |\n", + "| 30 | 100 | 1000 | 0.3 | 10.00 | 0.13 | 0.65 ( 0.01 ) | 9 ( 0.66 ) | 3.58 ( 0.12 ) | 10.42 | 0.72 | 0.65 | 9.00 | 3.58 |\n", + "| ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ |\n", + "| 51 | 500 | 50 | 0.7 | 0.10 | 0.49 | 0.91 ( 0 ) | 5.84 ( 0.26 ) | 0 ( 0 ) | 10.84 | 0.42 | 0.91 | 5.84 | 0.00 |\n", + "| 52 | 1000 | 50 | 0.7 | 0.05 | 0.71 | 0.92 ( 0 ) | 3.03 ( 0.15 ) | 0 ( 0 ) | 8.03 | 0.23 | 0.92 | 3.03 | 0.00 |\n", + "| 53 | 50 | 100 | 0.7 | 2.00 | 0.21 | 0.69 ( 0.01 ) | 5.07 ( 0.25 ) | 3.13 ( 0.1 ) | 6.94 | 0.55 | 0.69 | 5.07 | 3.13 |\n", + "| 54 | 100 | 100 | 0.7 | 1.00 | 0.28 | 0.82 ( 0.01 ) | 9.65 ( 0.48 ) | 0.97 ( 0.1 ) | 13.68 | 0.59 | 0.82 | 9.65 | 0.97 |\n", + "| 55 | 500 | 100 | 0.7 | 0.20 | 0.36 | 0.91 ( 0 ) | 10.19 ( 0.37 ) | 0 ( 0 ) | 15.19 | 0.58 | 0.91 | 10.19 | 0.00 |\n", + "| 56 | 1000 | 100 | 0.7 | 0.10 | 0.59 | 0.92 ( 0 ) | 4.81 ( 0.19 ) | 0 ( 0 ) | 9.81 | 0.37 | 0.92 | 4.81 | 0.00 |\n", + "| 57 | 50 | 500 | 0.7 | 10.00 | 0.09 | 0.66 ( 0.01 ) | 9.13 ( 0.25 ) | 4.14 ( 0.08 ) | 9.99 | 0.81 | 0.66 | 9.13 | 4.14 |\n", + "| 58 | 100 | 500 | 0.7 | 5.00 | 0.21 | 0.75 ( 0.01 ) | 9.59 ( 0.72 ) | 2.44 ( 0.11 ) | 12.15 | 0.61 | 0.75 | 9.59 | 2.44 |\n", + "| 59 | 500 | 500 | 0.7 | 1.00 | 0.18 | 0.9 ( 0 ) | 26.2 ( 0.86 ) | 0 ( 0 ) | 31.20 | 0.79 | 0.90 | 26.20 | 0.00 |\n", + "| 60 | 1000 | 500 | 0.7 | 0.50 | 0.28 | 0.91 ( 0 ) | 15.6 ( 0.55 ) | 0 ( 0 ) | 20.60 | 0.68 | 0.91 | 15.60 | 0.00 |\n", + "| 61 | 50 | 1000 | 0.7 | 20.00 | 0.05 | 0.64 ( 0.01 ) | 11.44 ( 0.28 ) | 4.51 ( 0.08 ) | 11.93 | 0.87 | 0.64 | 11.44 | 4.51 |\n", + "| 62 | 100 | 1000 | 0.7 | 10.00 | 0.18 | 0.71 ( 0.01 ) | 10.03 ( 0.71 ) | 2.95 ( 0.1 ) | 12.08 | 0.65 | 0.71 | 10.03 | 2.95 |\n", + "| 63 | 500 | 1000 | 0.7 | 2.00 | 0.14 | 0.9 ( 0 ) | 34.85 ( 1.14 ) | 0 ( 0 ) | 39.85 | 0.83 | 0.90 | 34.85 | 0.00 |\n", + "| 64 | 1000 | 1000 | 0.7 | 1.00 | 0.20 | 0.91 ( 0 ) | 24.83 ( 0.82 ) | 0 ( 0 ) | 29.83 | 0.78 | 0.91 | 24.83 | 0.00 |\n", + "| 65 | 50 | 50 | 0.9 | 1.00 | 0.30 | 0.73 ( 0.01 ) | 4.4 ( 0.26 ) | 2.55 ( 0.11 ) | 6.85 | 0.44 | 0.73 | 4.40 | 2.55 |\n", + "| 66 | 100 | 50 | 0.9 | 0.50 | 0.33 | 0.85 ( 0.01 ) | 8.14 ( 0.35 ) | 0.42 ( 0.06 ) | 12.72 | 0.53 | 0.85 | 8.14 | 0.42 |\n", + "| 67 | 500 | 50 | 0.9 | 0.10 | 0.54 | 0.92 ( 0 ) | 5.15 ( 0.22 ) | 0 ( 0 ) | 10.15 | 0.38 | 0.92 | 5.15 | 0.00 |\n", + "| 68 | 1000 | 50 | 0.9 | 0.05 | 0.76 | 0.92 ( 0 ) | 2.61 ( 0.13 ) | 0 ( 0 ) | 7.61 | 0.19 | 0.92 | 2.61 | 0.00 |\n", + "| 69 | 50 | 100 | 0.9 | 2.00 | 0.23 | 0.7 ( 0.01 ) | 4.84 ( 0.24 ) | 3.3 ( 0.09 ) | 6.54 | 0.54 | 0.70 | 4.84 | 3.30 |\n", + "| 70 | 100 | 100 | 0.9 | 1.00 | 0.28 | 0.81 ( 0.01 ) | 9.92 ( 0.51 ) | 0.87 ( 0.08 ) | 14.05 | 0.57 | 0.81 | 9.92 | 0.87 |\n", + "| 71 | 500 | 100 | 0.9 | 0.20 | 0.37 | 0.92 ( 0 ) | 9.65 ( 0.35 ) | 0 ( 0 ) | 14.65 | 0.57 | 0.92 | 9.65 | 0.00 |\n", + "| 72 | 1000 | 100 | 0.9 | 0.10 | 0.62 | 0.93 ( 0 ) | 4.29 ( 0.18 ) | 0 ( 0 ) | 9.29 | 0.33 | 0.93 | 4.29 | 0.00 |\n", + "| 73 | 50 | 500 | 0.9 | 10.00 | 0.08 | 0.62 ( 0.01 ) | 8.99 ( 0.26 ) | 4.13 ( 0.09 ) | 9.86 | 0.8 | 0.62 | 8.99 | 4.13 |\n", + "| 74 | 100 | 500 | 0.9 | 5.00 | 0.23 | 0.74 ( 0.01 ) | 8.85 ( 0.62 ) | 2.4 ( 0.12 ) | 11.45 | 0.6 | 0.74 | 8.85 | 2.40 |\n", + "| 75 | 500 | 500 | 0.9 | 1.00 | 0.19 | 0.91 ( 0 ) | 24.91 ( 0.78 ) | 0 ( 0 ) | 29.91 | 0.78 | 0.91 | 24.91 | 0.00 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.50 | 0.31 | 0.92 ( 0 ) | 14.12 ( 0.43 ) | 0 ( 0 ) | 19.12 | 0.67 | 0.92 | 14.12 | 0.00 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.00 | 0.07 | 0.64 ( 0.01 ) | 10.81 ( 0.29 ) | 4.22 ( 0.08 ) | 11.59 | 0.84 | 0.64 | 10.81 | 4.22 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.00 | 0.19 | 0.74 ( 0.01 ) | 11.15 ( 0.75 ) | 2.44 ( 0.11 ) | 13.71 | 0.65 | 0.74 | 11.15 | 2.44 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.00 | 0.14 | 0.91 ( 0 ) | 34.98 ( 1.04 ) | 0 ( 0 ) | 39.98 | 0.83 | 0.91 | 34.98 | 0.00 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.00 | 0.22 | 0.92 ( 0 ) | 22.21 ( 0.73 ) | 0 ( 0 ) | 27.21 | 0.76 | 0.92 | 22.21 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "1 50 50 0.1 1.00 0.03 0.59 ( 0.01 ) 2.69 ( 0.14 ) 5.3 ( 0.07 ) \n", + "2 100 50 0.1 0.50 0.11 0.56 ( 0.01 ) 2.02 ( 0.15 ) 5.02 ( 0.08 )\n", + "3 500 50 0.1 0.10 0.28 0.63 ( 0 ) 4.52 ( 0.29 ) 3 ( 0.11 ) \n", + "4 1000 50 0.1 0.05 0.39 0.64 ( 0 ) 4.74 ( 0.22 ) 2.1 ( 0.09 ) \n", + "5 50 100 0.1 2.00 0.02 0.62 ( 0.01 ) 3.82 ( 0.16 ) 5.34 ( 0.07 )\n", + "6 100 100 0.1 1.00 0.07 0.56 ( 0.01 ) 2.29 ( 0.19 ) 5.27 ( 0.08 )\n", + "7 500 100 0.1 0.20 0.23 0.61 ( 0 ) 5.54 ( 0.52 ) 3.27 ( 0.12 )\n", + "8 1000 100 0.1 0.10 0.27 0.64 ( 0 ) 7.69 ( 0.42 ) 2.25 ( 0.1 ) \n", + "9 50 500 0.1 10.00 0.01 0.6 ( 0.01 ) 8.69 ( 0.24 ) 5.55 ( 0.06 )\n", + "10 100 500 0.1 5.00 0.03 0.56 ( 0.01 ) 4.39 ( 0.34 ) 5.4 ( 0.07 ) \n", + "11 500 500 0.1 1.00 0.27 0.61 ( 0.01 ) 3.84 ( 0.28 ) 3.93 ( 0.08 )\n", + "12 1000 500 0.1 0.50 0.20 0.63 ( 0 ) 9.87 ( 1.4 ) 3.18 ( 0.09 )\n", + "13 50 1000 0.1 20.00 0.00 0.62 ( 0.01 ) 10.42 ( 0.22 ) 5.56 ( 0.06 )\n", + "14 100 1000 0.1 10.00 0.01 0.56 ( 0.01 ) 5.93 ( 0.28 ) 5.53 ( 0.06 )\n", + "15 500 1000 0.1 2.00 0.24 0.62 ( 0.01 ) 4.22 ( 0.48 ) 4.05 ( 0.09 )\n", + "16 1000 1000 0.1 1.00 0.33 0.63 ( 0 ) 5.03 ( 0.78 ) 3.35 ( 0.06 )\n", + "17 50 50 0.3 1.00 0.17 0.65 ( 0.01 ) 3.87 ( 0.23 ) 3.68 ( 0.12 )\n", + "18 100 50 0.3 0.50 0.32 0.78 ( 0.01 ) 6.48 ( 0.32 ) 1.13 ( 0.11 )\n", + "19 500 50 0.3 0.10 0.44 0.85 ( 0 ) 6.84 ( 0.26 ) 0 ( 0 ) \n", + "20 1000 50 0.3 0.05 0.65 0.86 ( 0 ) 3.69 ( 0.19 ) 0 ( 0 ) \n", + "21 50 100 0.3 2.00 0.14 0.63 ( 0.01 ) 5.12 ( 0.25 ) 3.91 ( 0.1 ) \n", + "22 100 100 0.3 1.00 0.26 0.74 ( 0.01 ) 7.62 ( 0.48 ) 1.8 ( 0.12 ) \n", + "23 500 100 0.3 0.20 0.36 0.86 ( 0 ) 10.19 ( 0.4 ) 0 ( 0 ) \n", + "24 1000 100 0.3 0.10 0.52 0.86 ( 0 ) 6 ( 0.27 ) 0 ( 0 ) \n", + "25 50 500 0.3 10.00 0.03 0.61 ( 0.01 ) 10.46 ( 0.31 ) 4.69 ( 0.08 )\n", + "26 100 500 0.3 5.00 0.17 0.66 ( 0.01 ) 8.6 ( 0.65 ) 3.19 ( 0.12 )\n", + "27 500 500 0.3 1.00 0.19 0.85 ( 0 ) 25.12 ( 1.08 ) 0 ( 0 ) \n", + "28 1000 500 0.3 0.50 0.25 0.86 ( 0 ) 18.48 ( 0.73 ) 0 ( 0 ) \n", + "29 50 1000 0.3 20.00 0.02 0.6 ( 0.01 ) 12.08 ( 0.26 ) 4.97 ( 0.08 )\n", + "30 100 1000 0.3 10.00 0.13 0.65 ( 0.01 ) 9 ( 0.66 ) 3.58 ( 0.12 )\n", + "⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ \n", + "51 500 50 0.7 0.10 0.49 0.91 ( 0 ) 5.84 ( 0.26 ) 0 ( 0 ) \n", + "52 1000 50 0.7 0.05 0.71 0.92 ( 0 ) 3.03 ( 0.15 ) 0 ( 0 ) \n", + "53 50 100 0.7 2.00 0.21 0.69 ( 0.01 ) 5.07 ( 0.25 ) 3.13 ( 0.1 ) \n", + "54 100 100 0.7 1.00 0.28 0.82 ( 0.01 ) 9.65 ( 0.48 ) 0.97 ( 0.1 ) \n", + "55 500 100 0.7 0.20 0.36 0.91 ( 0 ) 10.19 ( 0.37 ) 0 ( 0 ) \n", + "56 1000 100 0.7 0.10 0.59 0.92 ( 0 ) 4.81 ( 0.19 ) 0 ( 0 ) \n", + "57 50 500 0.7 10.00 0.09 0.66 ( 0.01 ) 9.13 ( 0.25 ) 4.14 ( 0.08 )\n", + "58 100 500 0.7 5.00 0.21 0.75 ( 0.01 ) 9.59 ( 0.72 ) 2.44 ( 0.11 )\n", + "59 500 500 0.7 1.00 0.18 0.9 ( 0 ) 26.2 ( 0.86 ) 0 ( 0 ) \n", + "60 1000 500 0.7 0.50 0.28 0.91 ( 0 ) 15.6 ( 0.55 ) 0 ( 0 ) \n", + "61 50 1000 0.7 20.00 0.05 0.64 ( 0.01 ) 11.44 ( 0.28 ) 4.51 ( 0.08 )\n", + "62 100 1000 0.7 10.00 0.18 0.71 ( 0.01 ) 10.03 ( 0.71 ) 2.95 ( 0.1 ) \n", + "63 500 1000 0.7 2.00 0.14 0.9 ( 0 ) 34.85 ( 1.14 ) 0 ( 0 ) \n", + "64 1000 1000 0.7 1.00 0.20 0.91 ( 0 ) 24.83 ( 0.82 ) 0 ( 0 ) \n", + "65 50 50 0.9 1.00 0.30 0.73 ( 0.01 ) 4.4 ( 0.26 ) 2.55 ( 0.11 )\n", + "66 100 50 0.9 0.50 0.33 0.85 ( 0.01 ) 8.14 ( 0.35 ) 0.42 ( 0.06 )\n", + "67 500 50 0.9 0.10 0.54 0.92 ( 0 ) 5.15 ( 0.22 ) 0 ( 0 ) \n", + "68 1000 50 0.9 0.05 0.76 0.92 ( 0 ) 2.61 ( 0.13 ) 0 ( 0 ) \n", + "69 50 100 0.9 2.00 0.23 0.7 ( 0.01 ) 4.84 ( 0.24 ) 3.3 ( 0.09 ) \n", + "70 100 100 0.9 1.00 0.28 0.81 ( 0.01 ) 9.92 ( 0.51 ) 0.87 ( 0.08 )\n", + "71 500 100 0.9 0.20 0.37 0.92 ( 0 ) 9.65 ( 0.35 ) 0 ( 0 ) \n", + "72 1000 100 0.9 0.10 0.62 0.93 ( 0 ) 4.29 ( 0.18 ) 0 ( 0 ) \n", + "73 50 500 0.9 10.00 0.08 0.62 ( 0.01 ) 8.99 ( 0.26 ) 4.13 ( 0.09 )\n", + "74 100 500 0.9 5.00 0.23 0.74 ( 0.01 ) 8.85 ( 0.62 ) 2.4 ( 0.12 ) \n", + "75 500 500 0.9 1.00 0.19 0.91 ( 0 ) 24.91 ( 0.78 ) 0 ( 0 ) \n", + "76 1000 500 0.9 0.50 0.31 0.92 ( 0 ) 14.12 ( 0.43 ) 0 ( 0 ) \n", + "77 50 1000 0.9 20.00 0.07 0.64 ( 0.01 ) 10.81 ( 0.29 ) 4.22 ( 0.08 )\n", + "78 100 1000 0.9 10.00 0.19 0.74 ( 0.01 ) 11.15 ( 0.75 ) 2.44 ( 0.11 )\n", + "79 500 1000 0.9 2.00 0.14 0.91 ( 0 ) 34.98 ( 1.04 ) 0 ( 0 ) \n", + "80 1000 1000 0.9 1.00 0.22 0.92 ( 0 ) 22.21 ( 0.73 ) 0 ( 0 ) \n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "1 2.39 0.67 0.59 2.69 5.30 \n", + "2 2.00 0.39 0.56 2.02 5.02 \n", + "3 6.52 0.45 0.63 4.52 3.00 \n", + "4 7.64 0.44 0.64 4.74 2.10 \n", + "5 3.48 0.78 0.62 3.82 5.34 \n", + "6 2.02 0.57 0.56 2.29 5.27 \n", + "7 7.27 0.47 0.61 5.54 3.27 \n", + "8 10.44 0.56 0.64 7.69 2.25 \n", + "9 8.14 0.94 0.60 8.69 5.55 \n", + "10 3.99 0.82 0.56 4.39 5.40 \n", + "11 4.91 0.47 0.61 3.84 3.93 \n", + "12 11.69 0.49 0.63 9.87 3.18 \n", + "13 9.86 0.95 0.62 10.42 5.56 \n", + "14 5.40 0.9 0.56 5.93 5.53 \n", + "15 5.17 0.46 0.62 4.22 4.05 \n", + "16 6.68 0.42 0.63 5.03 3.35 \n", + "17 5.19 0.5 0.65 3.87 3.68 \n", + "18 10.35 0.49 0.78 6.48 1.13 \n", + "19 11.84 0.47 0.85 6.84 0.00 \n", + "20 8.69 0.28 0.86 3.69 0.00 \n", + "21 6.21 0.63 0.63 5.12 3.91 \n", + "22 10.82 0.53 0.74 7.62 1.80 \n", + "23 15.19 0.57 0.86 10.19 0.00 \n", + "24 11.00 0.42 0.86 6.00 0.00 \n", + "25 10.77 0.87 0.61 10.46 4.69 \n", + "26 10.41 0.64 0.66 8.60 3.19 \n", + "27 30.12 0.77 0.85 25.12 0.00 \n", + "28 23.48 0.72 0.86 18.48 0.00 \n", + "29 12.11 0.91 0.60 12.08 4.97 \n", + "30 10.42 0.72 0.65 9.00 3.58 \n", + "⋮ ⋮ ⋮ ⋮ ⋮ ⋮ \n", + "51 10.84 0.42 0.91 5.84 0.00 \n", + "52 8.03 0.23 0.92 3.03 0.00 \n", + "53 6.94 0.55 0.69 5.07 3.13 \n", + "54 13.68 0.59 0.82 9.65 0.97 \n", + "55 15.19 0.58 0.91 10.19 0.00 \n", + "56 9.81 0.37 0.92 4.81 0.00 \n", + "57 9.99 0.81 0.66 9.13 4.14 \n", + "58 12.15 0.61 0.75 9.59 2.44 \n", + "59 31.20 0.79 0.90 26.20 0.00 \n", + "60 20.60 0.68 0.91 15.60 0.00 \n", + "61 11.93 0.87 0.64 11.44 4.51 \n", + "62 12.08 0.65 0.71 10.03 2.95 \n", + "63 39.85 0.83 0.90 34.85 0.00 \n", + "64 29.83 0.78 0.91 24.83 0.00 \n", + "65 6.85 0.44 0.73 4.40 2.55 \n", + "66 12.72 0.53 0.85 8.14 0.42 \n", + "67 10.15 0.38 0.92 5.15 0.00 \n", + "68 7.61 0.19 0.92 2.61 0.00 \n", + "69 6.54 0.54 0.70 4.84 3.30 \n", + "70 14.05 0.57 0.81 9.92 0.87 \n", + "71 14.65 0.57 0.92 9.65 0.00 \n", + "72 9.29 0.33 0.93 4.29 0.00 \n", + "73 9.86 0.8 0.62 8.99 4.13 \n", + "74 11.45 0.6 0.74 8.85 2.40 \n", + "75 29.91 0.78 0.91 24.91 0.00 \n", + "76 19.12 0.67 0.92 14.12 0.00 \n", + "77 11.59 0.84 0.64 10.81 4.22 \n", + "78 13.71 0.65 0.74 11.15 2.44 \n", + "79 39.98 0.83 0.91 34.98 0.00 \n", + "80 27.21 0.76 0.92 22.21 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_block\n", + "\n", + "## export\n", + "write.table(result.table_block, '../results_summary_bin/sim_block_lasso_binary.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_bin/.ipynb_checkpoints/2.2_sim_block_elnet_binary_update-checkpoint.ipynb b/simulations/notebooks_sim_bin/.ipynb_checkpoints/2.2_sim_block_elnet_binary_update-checkpoint.ipynb new file mode 100644 index 0000000..26fb822 --- /dev/null +++ b/simulations/notebooks_sim_bin/.ipynb_checkpoints/2.2_sim_block_elnet_binary_update-checkpoint.ipynb @@ -0,0 +1,972 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize elastic net results on Block Simulation Scenarios for binary outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "rou.list = seq(0.1, 0.9, 0.2)\n", + "\n", + "files = NULL\n", + "for (rou in rou.list){\n", + " for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_block_corr', rou, paste('P', p, 'N', n, sep='_'), '.RData', sep=''))\n", + " }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "80" + ], + "text/latex": [ + "80" + ], + "text/markdown": [ + "80" + ], + "text/plain": [ + "[1] 80" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "length(files)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1] \"indx: 1\"\n", + "[1] \"indx: 2\"\n", + "[1] \"indx: 3\"\n", + "[1] \"indx: 4\"\n", + "[1] \"indx: 5\"\n", + "[1] \"indx: 6\"\n", + "[1] \"indx: 7\"\n", + "[1] \"indx: 8\"\n", + "[1] \"indx: 9\"\n", + "[1] \"indx: 10\"\n", + "[1] \"indx: 11\"\n", + "[1] \"indx: 12\"\n", + "[1] \"indx: 13\"\n", + "[1] \"indx: 14\"\n", + "[1] \"indx: 15\"\n", + "[1] \"indx: 16\"\n", + "[1] \"indx: 17\"\n", + "[1] \"indx: 18\"\n", + "[1] \"indx: 19\"\n", + "[1] \"indx: 20\"\n", + "[1] \"indx: 21\"\n", + "[1] \"indx: 22\"\n", + "[1] \"indx: 23\"\n", + "[1] \"indx: 24\"\n", + "[1] \"indx: 25\"\n", + "[1] \"indx: 26\"\n", + "[1] \"indx: 27\"\n", + "[1] \"indx: 28\"\n", + "[1] \"indx: 29\"\n", + "[1] \"indx: 30\"\n", + "[1] \"indx: 31\"\n", + "[1] \"indx: 32\"\n", + "[1] \"indx: 33\"\n", + "[1] \"indx: 34\"\n", + "[1] \"indx: 35\"\n", + "[1] \"indx: 36\"\n", + "[1] \"indx: 37\"\n", + "[1] \"indx: 38\"\n", + "[1] \"indx: 39\"\n", + "[1] \"indx: 40\"\n", + "[1] \"indx: 41\"\n", + "[1] \"indx: 42\"\n", + "[1] \"indx: 43\"\n", + "[1] \"indx: 44\"\n", + "[1] \"indx: 45\"\n", + "[1] \"indx: 46\"\n", + "[1] \"indx: 47\"\n", + "[1] \"indx: 48\"\n", + "[1] \"indx: 49\"\n", + "[1] \"indx: 50\"\n", + "[1] \"indx: 51\"\n", + "[1] \"indx: 52\"\n", + "[1] \"indx: 53\"\n", + "[1] \"indx: 54\"\n", + "[1] \"indx: 55\"\n", + "[1] \"indx: 56\"\n", + "[1] \"indx: 57\"\n", + "[1] \"indx: 58\"\n", + "[1] \"indx: 59\"\n", + "[1] \"indx: 60\"\n", + "[1] \"indx: 61\"\n", + "[1] \"indx: 62\"\n", + "[1] \"indx: 63\"\n", + "[1] \"indx: 64\"\n", + "[1] \"indx: 65\"\n", + "[1] \"indx: 66\"\n", + "[1] \"indx: 67\"\n", + "[1] \"indx: 68\"\n", + "[1] \"indx: 69\"\n", + "[1] \"indx: 70\"\n", + "[1] \"indx: 71\"\n", + "[1] \"indx: 72\"\n", + "[1] \"indx: 73\"\n", + "[1] \"indx: 74\"\n", + "[1] \"indx: 75\"\n", + "[1] \"indx: 76\"\n", + "[1] \"indx: 77\"\n", + "[1] \"indx: 78\"\n", + "[1] \"indx: 79\"\n", + "[1] \"indx: 80\"\n" + ] + } + ], + "source": [ + "avg_FDR = NULL\n", + "table_block = NULL\n", + "tmp_num_select = rep(0, length(files))\n", + "for (i in 1:length(files)){\n", + " print(paste0('indx: ', i))\n", + " load(paste0(dir, '/binary_update/block_Elnet_binary_', i, '.RData')) \n", + " \n", + " table_block = rbind(table_block, results_block_elnet[c('n', 'p', 'rou', 'FP', 'FN', 'ROC', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_block_elnet$Stab.table))\n", + " \n", + " # calculate FDR\n", + " load(file_name, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_block_elnet$Stab.table\n", + " FDR = NULL # false positive rate\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}\n", + "table_block = as.data.frame(table_block)\n", + "table_block$num_select = tmp_num_select\n", + "table_block$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
150500.117.05 ( 1.31 )3.17 ( 0.19 )0.61 ( 0.01 )0.0118.880.80
2100500.113.62 ( 1.31 )2.9 ( 0.17 )0.59 ( 0.01 )0.0415.720.64
3500500.116.89 ( 1.14 )1.1 ( 0.13 )0.64 ( 0 )0.1120.790.68
41000500.119.43 ( 1.02 )0.42 ( 0.08 )0.66 ( 0 )0.1224.010.71
5501000.127.39 ( 2.11 )3.38 ( 0.17 )0.63 ( 0.01 )0.0129.010.87
61001000.126.17 ( 2.4 )3.34 ( 0.16 )0.59 ( 0.01 )0.0227.830.84
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 17.05 ( 1.31 ) & 3.17 ( 0.19 ) & 0.61 ( 0.01 ) & 0.01 & 18.88 & 0.80\\\\\n", + "\t2 & 100 & 50 & 0.1 & 13.62 ( 1.31 ) & 2.9 ( 0.17 ) & 0.59 ( 0.01 ) & 0.04 & 15.72 & 0.64\\\\\n", + "\t3 & 500 & 50 & 0.1 & 16.89 ( 1.14 ) & 1.1 ( 0.13 ) & 0.64 ( 0 ) & 0.11 & 20.79 & 0.68\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 19.43 ( 1.02 ) & 0.42 ( 0.08 ) & 0.66 ( 0 ) & 0.12 & 24.01 & 0.71\\\\\n", + "\t5 & 50 & 100 & 0.1 & 27.39 ( 2.11 ) & 3.38 ( 0.17 ) & 0.63 ( 0.01 ) & 0.01 & 29.01 & 0.87\\\\\n", + "\t6 & 100 & 100 & 0.1 & 26.17 ( 2.4 ) & 3.34 ( 0.16 ) & 0.59 ( 0.01 ) & 0.02 & 27.83 & 0.84\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 17.05 ( 1.31 ) | 3.17 ( 0.19 ) | 0.61 ( 0.01 ) | 0.01 | 18.88 | 0.80 |\n", + "| 2 | 100 | 50 | 0.1 | 13.62 ( 1.31 ) | 2.9 ( 0.17 ) | 0.59 ( 0.01 ) | 0.04 | 15.72 | 0.64 |\n", + "| 3 | 500 | 50 | 0.1 | 16.89 ( 1.14 ) | 1.1 ( 0.13 ) | 0.64 ( 0 ) | 0.11 | 20.79 | 0.68 |\n", + "| 4 | 1000 | 50 | 0.1 | 19.43 ( 1.02 ) | 0.42 ( 0.08 ) | 0.66 ( 0 ) | 0.12 | 24.01 | 0.71 |\n", + "| 5 | 50 | 100 | 0.1 | 27.39 ( 2.11 ) | 3.38 ( 0.17 ) | 0.63 ( 0.01 ) | 0.01 | 29.01 | 0.87 |\n", + "| 6 | 100 | 100 | 0.1 | 26.17 ( 2.4 ) | 3.34 ( 0.16 ) | 0.59 ( 0.01 ) | 0.02 | 27.83 | 0.84 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select FDR \n", + "1 50 50 0.1 17.05 ( 1.31 ) 3.17 ( 0.19 ) 0.61 ( 0.01 ) 0.01 18.88 0.80\n", + "2 100 50 0.1 13.62 ( 1.31 ) 2.9 ( 0.17 ) 0.59 ( 0.01 ) 0.04 15.72 0.64\n", + "3 500 50 0.1 16.89 ( 1.14 ) 1.1 ( 0.13 ) 0.64 ( 0 ) 0.11 20.79 0.68\n", + "4 1000 50 0.1 19.43 ( 1.02 ) 0.42 ( 0.08 ) 0.66 ( 0 ) 0.12 24.01 0.71\n", + "5 50 100 0.1 27.39 ( 2.11 ) 3.38 ( 0.17 ) 0.63 ( 0.01 ) 0.01 29.01 0.87\n", + "6 100 100 0.1 26.17 ( 2.4 ) 3.34 ( 0.16 ) 0.59 ( 0.01 ) 0.02 27.83 0.84" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
755005000.915.52 ( 1.4 )0 ( 0 )0.91 ( 0 )0.2820.520.57
7610005000.914.84 ( 1.41 )0 ( 0 )0.92 ( 0 )0.2919.840.56
775010000.978.65 ( 8.46 )3.08 ( 0.12 )0.63 ( 0.01 )0.0280.570.92
7810010000.943.94 ( 6.95 )2.01 ( 0.11 )0.74 ( 0.01 )0.0646.930.79
7950010000.918.95 ( 1.93 )0 ( 0 )0.91 ( 0 )0.2523.950.60
80100010000.915.24 ( 1.68 )0 ( 0 )0.92 ( 0 )0.2920.240.52
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 15.52 ( 1.4 ) & 0 ( 0 ) & 0.91 ( 0 ) & 0.28 & 20.52 & 0.57\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 14.84 ( 1.41 ) & 0 ( 0 ) & 0.92 ( 0 ) & 0.29 & 19.84 & 0.56\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 78.65 ( 8.46 ) & 3.08 ( 0.12 ) & 0.63 ( 0.01 ) & 0.02 & 80.57 & 0.92\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 43.94 ( 6.95 ) & 2.01 ( 0.11 ) & 0.74 ( 0.01 ) & 0.06 & 46.93 & 0.79\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 18.95 ( 1.93 ) & 0 ( 0 ) & 0.91 ( 0 ) & 0.25 & 23.95 & 0.60\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 15.24 ( 1.68 ) & 0 ( 0 ) & 0.92 ( 0 ) & 0.29 & 20.24 & 0.52\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 15.52 ( 1.4 ) | 0 ( 0 ) | 0.91 ( 0 ) | 0.28 | 20.52 | 0.57 |\n", + "| 76 | 1000 | 500 | 0.9 | 14.84 ( 1.41 ) | 0 ( 0 ) | 0.92 ( 0 ) | 0.29 | 19.84 | 0.56 |\n", + "| 77 | 50 | 1000 | 0.9 | 78.65 ( 8.46 ) | 3.08 ( 0.12 ) | 0.63 ( 0.01 ) | 0.02 | 80.57 | 0.92 |\n", + "| 78 | 100 | 1000 | 0.9 | 43.94 ( 6.95 ) | 2.01 ( 0.11 ) | 0.74 ( 0.01 ) | 0.06 | 46.93 | 0.79 |\n", + "| 79 | 500 | 1000 | 0.9 | 18.95 ( 1.93 ) | 0 ( 0 ) | 0.91 ( 0 ) | 0.25 | 23.95 | 0.60 |\n", + "| 80 | 1000 | 1000 | 0.9 | 15.24 ( 1.68 ) | 0 ( 0 ) | 0.92 ( 0 ) | 0.29 | 20.24 | 0.52 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select\n", + "75 500 500 0.9 15.52 ( 1.4 ) 0 ( 0 ) 0.91 ( 0 ) 0.28 20.52 \n", + "76 1000 500 0.9 14.84 ( 1.41 ) 0 ( 0 ) 0.92 ( 0 ) 0.29 19.84 \n", + "77 50 1000 0.9 78.65 ( 8.46 ) 3.08 ( 0.12 ) 0.63 ( 0.01 ) 0.02 80.57 \n", + "78 100 1000 0.9 43.94 ( 6.95 ) 2.01 ( 0.11 ) 0.74 ( 0.01 ) 0.06 46.93 \n", + "79 500 1000 0.9 18.95 ( 1.93 ) 0 ( 0 ) 0.91 ( 0 ) 0.25 23.95 \n", + "80 1000 1000 0.9 15.24 ( 1.68 ) 0 ( 0 ) 0.92 ( 0 ) 0.29 20.24 \n", + " FDR \n", + "75 0.57\n", + "76 0.56\n", + "77 0.92\n", + "78 0.79\n", + "79 0.60\n", + "80 0.52" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_block <- apply(table_block,2,as.character)\n", + "rownames(result.table_block) = rownames(table_block)\n", + "result.table_block = as.data.frame(result.table_block)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_block$n = tidyr::extract_numeric(result.table_block$n)\n", + "result.table_block$p = tidyr::extract_numeric(result.table_block$p)\n", + "result.table_block$ratio = result.table_block$p / result.table_block$n\n", + "\n", + "result.table_block = result.table_block[c('n', 'p', 'rou', 'ratio', 'Stab', 'ROC', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_block)[1:4] = c('N', 'P', 'Corr', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_block$Stab = as.numeric(as.character(result.table_block$Stab))\n", + "result.table_block$ROC_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_block$ROC))\n", + "result.table_block$FP_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_block$FP))\n", + "result.table_block$FN_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_block$FN))\n", + "result.table_block$num_select = as.numeric(as.character(result.table_block$num_select))" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "
A data.frame: 0 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
\n" + ], + "text/latex": [ + "A data.frame: 0 × 13\n", + "\\begin{tabular}{lllllllllllll}\n", + " N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 0 × 13\n", + "\n", + "| N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select FDR ROC_mean FP_mean FN_mean" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check whether missing values exists\n", + "result.table_block[rowSums(is.na(result.table_block)) > 0,]" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 500.11.000.010.61 ( 0.01 )17.05 ( 1.31 )3.17 ( 0.19 )18.880.8 0.6117.053.17
2 100 500.10.500.040.59 ( 0.01 )13.62 ( 1.31 )2.9 ( 0.17 ) 15.720.640.5913.622.90
3 500 500.10.100.110.64 ( 0 ) 16.89 ( 1.14 )1.1 ( 0.13 ) 20.790.680.6416.891.10
41000 500.10.050.120.66 ( 0 ) 19.43 ( 1.02 )0.42 ( 0.08 )24.010.710.6619.430.42
5 501000.12.000.010.63 ( 0.01 )27.39 ( 2.11 )3.38 ( 0.17 )29.010.870.6327.393.38
6 1001000.11.000.020.59 ( 0.01 )26.17 ( 2.4 ) 3.34 ( 0.16 )27.830.840.5926.173.34
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1.00 & 0.01 & 0.61 ( 0.01 ) & 17.05 ( 1.31 ) & 3.17 ( 0.19 ) & 18.88 & 0.8 & 0.61 & 17.05 & 3.17\\\\\n", + "\t2 & 100 & 50 & 0.1 & 0.50 & 0.04 & 0.59 ( 0.01 ) & 13.62 ( 1.31 ) & 2.9 ( 0.17 ) & 15.72 & 0.64 & 0.59 & 13.62 & 2.90\\\\\n", + "\t3 & 500 & 50 & 0.1 & 0.10 & 0.11 & 0.64 ( 0 ) & 16.89 ( 1.14 ) & 1.1 ( 0.13 ) & 20.79 & 0.68 & 0.64 & 16.89 & 1.10\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 0.05 & 0.12 & 0.66 ( 0 ) & 19.43 ( 1.02 ) & 0.42 ( 0.08 ) & 24.01 & 0.71 & 0.66 & 19.43 & 0.42\\\\\n", + "\t5 & 50 & 100 & 0.1 & 2.00 & 0.01 & 0.63 ( 0.01 ) & 27.39 ( 2.11 ) & 3.38 ( 0.17 ) & 29.01 & 0.87 & 0.63 & 27.39 & 3.38\\\\\n", + "\t6 & 100 & 100 & 0.1 & 1.00 & 0.02 & 0.59 ( 0.01 ) & 26.17 ( 2.4 ) & 3.34 ( 0.16 ) & 27.83 & 0.84 & 0.59 & 26.17 & 3.34\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1.00 | 0.01 | 0.61 ( 0.01 ) | 17.05 ( 1.31 ) | 3.17 ( 0.19 ) | 18.88 | 0.8 | 0.61 | 17.05 | 3.17 |\n", + "| 2 | 100 | 50 | 0.1 | 0.50 | 0.04 | 0.59 ( 0.01 ) | 13.62 ( 1.31 ) | 2.9 ( 0.17 ) | 15.72 | 0.64 | 0.59 | 13.62 | 2.90 |\n", + "| 3 | 500 | 50 | 0.1 | 0.10 | 0.11 | 0.64 ( 0 ) | 16.89 ( 1.14 ) | 1.1 ( 0.13 ) | 20.79 | 0.68 | 0.64 | 16.89 | 1.10 |\n", + "| 4 | 1000 | 50 | 0.1 | 0.05 | 0.12 | 0.66 ( 0 ) | 19.43 ( 1.02 ) | 0.42 ( 0.08 ) | 24.01 | 0.71 | 0.66 | 19.43 | 0.42 |\n", + "| 5 | 50 | 100 | 0.1 | 2.00 | 0.01 | 0.63 ( 0.01 ) | 27.39 ( 2.11 ) | 3.38 ( 0.17 ) | 29.01 | 0.87 | 0.63 | 27.39 | 3.38 |\n", + "| 6 | 100 | 100 | 0.1 | 1.00 | 0.02 | 0.59 ( 0.01 ) | 26.17 ( 2.4 ) | 3.34 ( 0.16 ) | 27.83 | 0.84 | 0.59 | 26.17 | 3.34 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "1 50 50 0.1 1.00 0.01 0.61 ( 0.01 ) 17.05 ( 1.31 ) 3.17 ( 0.19 )\n", + "2 100 50 0.1 0.50 0.04 0.59 ( 0.01 ) 13.62 ( 1.31 ) 2.9 ( 0.17 ) \n", + "3 500 50 0.1 0.10 0.11 0.64 ( 0 ) 16.89 ( 1.14 ) 1.1 ( 0.13 ) \n", + "4 1000 50 0.1 0.05 0.12 0.66 ( 0 ) 19.43 ( 1.02 ) 0.42 ( 0.08 )\n", + "5 50 100 0.1 2.00 0.01 0.63 ( 0.01 ) 27.39 ( 2.11 ) 3.38 ( 0.17 )\n", + "6 100 100 0.1 1.00 0.02 0.59 ( 0.01 ) 26.17 ( 2.4 ) 3.34 ( 0.16 )\n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "1 18.88 0.8 0.61 17.05 3.17 \n", + "2 15.72 0.64 0.59 13.62 2.90 \n", + "3 20.79 0.68 0.64 16.89 1.10 \n", + "4 24.01 0.71 0.66 19.43 0.42 \n", + "5 29.01 0.87 0.63 27.39 3.38 \n", + "6 27.83 0.84 0.59 26.17 3.34 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
75 500 5000.9 1.00.280.91 ( 0 ) 15.52 ( 1.4 ) 0 ( 0 ) 20.520.570.9115.520.00
761000 5000.9 0.50.290.92 ( 0 ) 14.84 ( 1.41 )0 ( 0 ) 19.840.560.9214.840.00
77 5010000.920.00.020.63 ( 0.01 )78.65 ( 8.46 )3.08 ( 0.12 )80.570.920.6378.653.08
78 10010000.910.00.060.74 ( 0.01 )43.94 ( 6.95 )2.01 ( 0.11 )46.930.790.7443.942.01
79 50010000.9 2.00.250.91 ( 0 ) 18.95 ( 1.93 )0 ( 0 ) 23.950.6 0.9118.950.00
80100010000.9 1.00.290.92 ( 0 ) 15.24 ( 1.68 )0 ( 0 ) 20.240.520.9215.240.00
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 1.0 & 0.28 & 0.91 ( 0 ) & 15.52 ( 1.4 ) & 0 ( 0 ) & 20.52 & 0.57 & 0.91 & 15.52 & 0.00\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.5 & 0.29 & 0.92 ( 0 ) & 14.84 ( 1.41 ) & 0 ( 0 ) & 19.84 & 0.56 & 0.92 & 14.84 & 0.00\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.0 & 0.02 & 0.63 ( 0.01 ) & 78.65 ( 8.46 ) & 3.08 ( 0.12 ) & 80.57 & 0.92 & 0.63 & 78.65 & 3.08\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.0 & 0.06 & 0.74 ( 0.01 ) & 43.94 ( 6.95 ) & 2.01 ( 0.11 ) & 46.93 & 0.79 & 0.74 & 43.94 & 2.01\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.0 & 0.25 & 0.91 ( 0 ) & 18.95 ( 1.93 ) & 0 ( 0 ) & 23.95 & 0.6 & 0.91 & 18.95 & 0.00\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.0 & 0.29 & 0.92 ( 0 ) & 15.24 ( 1.68 ) & 0 ( 0 ) & 20.24 & 0.52 & 0.92 & 15.24 & 0.00\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 1.0 | 0.28 | 0.91 ( 0 ) | 15.52 ( 1.4 ) | 0 ( 0 ) | 20.52 | 0.57 | 0.91 | 15.52 | 0.00 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.5 | 0.29 | 0.92 ( 0 ) | 14.84 ( 1.41 ) | 0 ( 0 ) | 19.84 | 0.56 | 0.92 | 14.84 | 0.00 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.0 | 0.02 | 0.63 ( 0.01 ) | 78.65 ( 8.46 ) | 3.08 ( 0.12 ) | 80.57 | 0.92 | 0.63 | 78.65 | 3.08 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.0 | 0.06 | 0.74 ( 0.01 ) | 43.94 ( 6.95 ) | 2.01 ( 0.11 ) | 46.93 | 0.79 | 0.74 | 43.94 | 2.01 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.0 | 0.25 | 0.91 ( 0 ) | 18.95 ( 1.93 ) | 0 ( 0 ) | 23.95 | 0.6 | 0.91 | 18.95 | 0.00 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.0 | 0.29 | 0.92 ( 0 ) | 15.24 ( 1.68 ) | 0 ( 0 ) | 20.24 | 0.52 | 0.92 | 15.24 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "75 500 500 0.9 1.0 0.28 0.91 ( 0 ) 15.52 ( 1.4 ) 0 ( 0 ) \n", + "76 1000 500 0.9 0.5 0.29 0.92 ( 0 ) 14.84 ( 1.41 ) 0 ( 0 ) \n", + "77 50 1000 0.9 20.0 0.02 0.63 ( 0.01 ) 78.65 ( 8.46 ) 3.08 ( 0.12 )\n", + "78 100 1000 0.9 10.0 0.06 0.74 ( 0.01 ) 43.94 ( 6.95 ) 2.01 ( 0.11 )\n", + "79 500 1000 0.9 2.0 0.25 0.91 ( 0 ) 18.95 ( 1.93 ) 0 ( 0 ) \n", + "80 1000 1000 0.9 1.0 0.29 0.92 ( 0 ) 15.24 ( 1.68 ) 0 ( 0 ) \n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "75 20.52 0.57 0.91 15.52 0.00 \n", + "76 19.84 0.56 0.92 14.84 0.00 \n", + "77 80.57 0.92 0.63 78.65 3.08 \n", + "78 46.93 0.79 0.74 43.94 2.01 \n", + "79 23.95 0.6 0.91 18.95 0.00 \n", + "80 20.24 0.52 0.92 15.24 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(result.table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 80 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 500.1 1.000.010.61 ( 0.01 )17.05 ( 1.31 ) 3.17 ( 0.19 ) 18.880.8 0.61 17.053.17
2 100 500.1 0.500.040.59 ( 0.01 )13.62 ( 1.31 ) 2.9 ( 0.17 ) 15.720.640.59 13.622.90
3 500 500.1 0.100.110.64 ( 0 ) 16.89 ( 1.14 ) 1.1 ( 0.13 ) 20.790.680.64 16.891.10
41000 500.1 0.050.120.66 ( 0 ) 19.43 ( 1.02 ) 0.42 ( 0.08 ) 24.010.710.66 19.430.42
5 50 1000.1 2.000.010.63 ( 0.01 )27.39 ( 2.11 ) 3.38 ( 0.17 ) 29.010.870.63 27.393.38
6 100 1000.1 1.000.020.59 ( 0.01 )26.17 ( 2.4 ) 3.34 ( 0.16 ) 27.830.840.59 26.173.34
7 500 1000.1 0.200.090.62 ( 0 ) 22.75 ( 1.87 ) 1.61 ( 0.13 ) 26.140.690.62 22.751.61
81000 1000.1 0.100.100.64 ( 0 ) 28.32 ( 1.88 ) 0.66 ( 0.1 ) 32.660.770.64 28.320.66
9 50 5000.110.000.000.61 ( 0.01 )69.03 ( 7.45 ) 4.13 ( 0.19 ) 69.900.960.61 69.034.13
10 100 5000.1 5.000.000.57 ( 0.01 )70.64 ( 9.13 ) 3.91 ( 0.17 ) 71.730.910.57 70.643.91
11 500 5000.1 1.000.100.61 ( 0.01 )20.55 ( 4.33 ) 3.15 ( 0.1 ) 22.400.620.61 20.553.15
121000 5000.1 0.500.120.63 ( 0 ) 26.03 ( 3.45 ) 2.38 ( 0.11 ) 28.650.620.63 26.032.38
13 5010000.120.000.000.59 ( 0.01 )103.61 ( 10.54 )4.34 ( 0.18 )104.270.980.59103.614.34
14 10010000.110.000.000.56 ( 0.01 )103.21 ( 12.75 )4.15 ( 0.17 )104.060.950.56103.214.15
15 50010000.1 2.000.070.61 ( 0 ) 29.41 ( 7.4 ) 3.25 ( 0.09 ) 31.160.620.61 29.413.25
16100010000.1 1.000.180.62 ( 0 ) 16.15 ( 2.77 ) 2.73 ( 0.09 ) 18.420.530.62 16.152.73
17 50 500.3 1.000.080.68 ( 0.01 )14.8 ( 1.01 ) 1.73 ( 0.15 ) 18.070.690.68 14.801.73
18 100 500.3 0.500.150.77 ( 0.01 )15.15 ( 1 ) 0.64 ( 0.09 ) 19.510.650.77 15.150.64
19 500 500.3 0.100.350.85 ( 0 ) 8.95 ( 0.69 ) 0 ( 0 ) 13.950.460.85 8.950.00
201000 500.3 0.050.330.86 ( 0 ) 9.66 ( 0.93 ) 0 ( 0 ) 14.660.440.86 9.660.00
21 50 1000.3 2.000.050.67 ( 0.01 )23.92 ( 2 ) 2.13 ( 0.15 ) 26.790.770.67 23.922.13
22 100 1000.3 1.000.140.74 ( 0.01 )17.75 ( 1.51 ) 1.13 ( 0.11 ) 21.620.670.74 17.751.13
23 500 1000.3 0.200.320.86 ( 0 ) 11.53 ( 1.02 ) 0.01 ( 0.01 ) 16.520.510.86 11.530.01
241000 1000.3 0.100.330.86 ( 0 ) 11.15 ( 1.03 ) 0 ( 0 ) 16.150.490.86 11.150.00
25 50 5000.310.000.010.6 ( 0.01 ) 81.07 ( 6.91 ) 2.92 ( 0.14 ) 83.150.930.60 81.072.92
26 100 5000.3 5.000.060.66 ( 0.01 )38.14 ( 5.11 ) 2.16 ( 0.13 ) 40.980.780.66 38.142.16
27 500 5000.3 1.000.220.84 ( 0 ) 20.87 ( 1.93 ) 0.02 ( 0.01 ) 25.850.630.84 20.870.02
281000 5000.3 0.500.290.86 ( 0 ) 15.35 ( 1.6 ) 0 ( 0 ) 20.350.530.86 15.350.00
29 5010000.320.000.010.63 ( 0.01 )104.78 ( 9.53 ) 3.37 ( 0.14 )106.410.960.63104.783.37
30 10010000.310.000.040.64 ( 0.01 )55.95 ( 7.57 ) 2.5 ( 0.13 ) 58.450.850.64 55.952.50
51 500 500.7 0.100.340.91 ( 0 ) 9.34 ( 0.72 ) 0 ( 0 ) 14.340.480.91 9.340.00
521000 500.7 0.050.360.91 ( 0 ) 8.58 ( 0.78 ) 0 ( 0 ) 13.580.420.91 8.580.00
53 50 1000.7 2.000.070.69 ( 0.01 )24.95 ( 1.99 )1.47 ( 0.1 ) 28.480.760.6924.951.47
54 100 1000.7 1.000.170.79 ( 0.01 )15.63 ( 1.26 )0.96 ( 0.11 )19.670.630.7915.630.96
55 500 1000.7 0.200.340.9 ( 0 ) 10.78 ( 0.81 )0.01 ( 0.01 )15.770.5 0.9010.780.01
561000 1000.7 0.100.380.91 ( 0 ) 9.42 ( 0.9 ) 0 ( 0 ) 14.420.440.91 9.420.00
57 50 5000.710.000.020.62 ( 0.01 )66.01 ( 6.05 )2.75 ( 0.12 )68.260.920.6266.012.75
58 100 5000.7 5.000.100.74 ( 0.01 )25.15 ( 2.8 ) 1.84 ( 0.12 )28.310.710.7425.151.84
59 500 5000.7 1.000.250.9 ( 0 ) 17.68 ( 1.71 )0 ( 0 ) 22.680.590.9017.680.00
601000 5000.7 0.500.310.91 ( 0 ) 13.6 ( 1.43 ) 0 ( 0 ) 18.600.510.9113.600.00
61 5010000.720.000.010.62 ( 0.01 )86.38 ( 8.91 )3.09 ( 0.13 )88.290.930.6286.383.09
62 10010000.710.000.060.69 ( 0.01 )44.56 ( 6.27 )2.12 ( 0.11 )47.440.820.6944.562.12
63 50010000.7 2.000.230.9 ( 0 ) 20.2 ( 1.89 ) 0.03 ( 0.02 )25.170.620.9020.200.03
64100010000.7 1.000.270.91 ( 0 ) 16.62 ( 1.81 )0 ( 0 ) 21.620.540.9116.620.00
65 50 500.9 1.000.140.74 ( 0.01 )12.38 ( 0.9 ) 1.46 ( 0.1 ) 15.920.630.7412.381.46
66 100 500.9 0.500.210.84 ( 0.01 )12.36 ( 0.84 )0.46 ( 0.08 )16.900.580.8412.360.46
67 500 500.9 0.100.390.92 ( 0 ) 7.89 ( 0.68 ) 0 ( 0 ) 12.890.420.92 7.890.00
681000 500.9 0.050.410.92 ( 0 ) 7.38 ( 0.78 ) 0 ( 0 ) 12.380.380.92 7.380.00
69 50 1000.9 2.000.090.7 ( 0.01 ) 19.37 ( 1.75 )2.08 ( 0.13 )22.290.750.7019.372.08
70 100 1000.9 1.000.200.81 ( 0.01 )14.28 ( 1.07 )0.93 ( 0.09 )18.350.610.8114.280.93
71 500 1000.9 0.200.360.92 ( 0 ) 10.15 ( 0.82 )0 ( 0 ) 15.150.480.9210.150.00
721000 1000.9 0.100.380.93 ( 0 ) 9.4 ( 1.07 ) 0 ( 0 ) 14.400.420.93 9.400.00
73 50 5000.910.000.020.62 ( 0.01 )62.39 ( 5.92 )2.69 ( 0.14 )64.700.9 0.6262.392.69
74 100 5000.9 5.000.120.74 ( 0.01 )21.21 ( 2.91 )2.02 ( 0.12 )24.190.690.7421.212.02
75 500 5000.9 1.000.280.91 ( 0 ) 15.52 ( 1.4 ) 0 ( 0 ) 20.520.570.9115.520.00
761000 5000.9 0.500.290.92 ( 0 ) 14.84 ( 1.41 )0 ( 0 ) 19.840.560.9214.840.00
77 5010000.920.000.020.63 ( 0.01 )78.65 ( 8.46 )3.08 ( 0.12 )80.570.920.6378.653.08
78 10010000.910.000.060.74 ( 0.01 )43.94 ( 6.95 )2.01 ( 0.11 )46.930.790.7443.942.01
79 50010000.9 2.000.250.91 ( 0 ) 18.95 ( 1.93 )0 ( 0 ) 23.950.6 0.9118.950.00
80100010000.9 1.000.290.92 ( 0 ) 15.24 ( 1.68 )0 ( 0 ) 20.240.520.9215.240.00
\n" + ], + "text/latex": [ + "A data.frame: 80 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1.00 & 0.01 & 0.61 ( 0.01 ) & 17.05 ( 1.31 ) & 3.17 ( 0.19 ) & 18.88 & 0.8 & 0.61 & 17.05 & 3.17\\\\\n", + "\t2 & 100 & 50 & 0.1 & 0.50 & 0.04 & 0.59 ( 0.01 ) & 13.62 ( 1.31 ) & 2.9 ( 0.17 ) & 15.72 & 0.64 & 0.59 & 13.62 & 2.90\\\\\n", + "\t3 & 500 & 50 & 0.1 & 0.10 & 0.11 & 0.64 ( 0 ) & 16.89 ( 1.14 ) & 1.1 ( 0.13 ) & 20.79 & 0.68 & 0.64 & 16.89 & 1.10\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 0.05 & 0.12 & 0.66 ( 0 ) & 19.43 ( 1.02 ) & 0.42 ( 0.08 ) & 24.01 & 0.71 & 0.66 & 19.43 & 0.42\\\\\n", + "\t5 & 50 & 100 & 0.1 & 2.00 & 0.01 & 0.63 ( 0.01 ) & 27.39 ( 2.11 ) & 3.38 ( 0.17 ) & 29.01 & 0.87 & 0.63 & 27.39 & 3.38\\\\\n", + "\t6 & 100 & 100 & 0.1 & 1.00 & 0.02 & 0.59 ( 0.01 ) & 26.17 ( 2.4 ) & 3.34 ( 0.16 ) & 27.83 & 0.84 & 0.59 & 26.17 & 3.34\\\\\n", + "\t7 & 500 & 100 & 0.1 & 0.20 & 0.09 & 0.62 ( 0 ) & 22.75 ( 1.87 ) & 1.61 ( 0.13 ) & 26.14 & 0.69 & 0.62 & 22.75 & 1.61\\\\\n", + "\t8 & 1000 & 100 & 0.1 & 0.10 & 0.10 & 0.64 ( 0 ) & 28.32 ( 1.88 ) & 0.66 ( 0.1 ) & 32.66 & 0.77 & 0.64 & 28.32 & 0.66\\\\\n", + "\t9 & 50 & 500 & 0.1 & 10.00 & 0.00 & 0.61 ( 0.01 ) & 69.03 ( 7.45 ) & 4.13 ( 0.19 ) & 69.90 & 0.96 & 0.61 & 69.03 & 4.13\\\\\n", + "\t10 & 100 & 500 & 0.1 & 5.00 & 0.00 & 0.57 ( 0.01 ) & 70.64 ( 9.13 ) & 3.91 ( 0.17 ) & 71.73 & 0.91 & 0.57 & 70.64 & 3.91\\\\\n", + "\t11 & 500 & 500 & 0.1 & 1.00 & 0.10 & 0.61 ( 0.01 ) & 20.55 ( 4.33 ) & 3.15 ( 0.1 ) & 22.40 & 0.62 & 0.61 & 20.55 & 3.15\\\\\n", + "\t12 & 1000 & 500 & 0.1 & 0.50 & 0.12 & 0.63 ( 0 ) & 26.03 ( 3.45 ) & 2.38 ( 0.11 ) & 28.65 & 0.62 & 0.63 & 26.03 & 2.38\\\\\n", + "\t13 & 50 & 1000 & 0.1 & 20.00 & 0.00 & 0.59 ( 0.01 ) & 103.61 ( 10.54 ) & 4.34 ( 0.18 ) & 104.27 & 0.98 & 0.59 & 103.61 & 4.34\\\\\n", + "\t14 & 100 & 1000 & 0.1 & 10.00 & 0.00 & 0.56 ( 0.01 ) & 103.21 ( 12.75 ) & 4.15 ( 0.17 ) & 104.06 & 0.95 & 0.56 & 103.21 & 4.15\\\\\n", + "\t15 & 500 & 1000 & 0.1 & 2.00 & 0.07 & 0.61 ( 0 ) & 29.41 ( 7.4 ) & 3.25 ( 0.09 ) & 31.16 & 0.62 & 0.61 & 29.41 & 3.25\\\\\n", + "\t16 & 1000 & 1000 & 0.1 & 1.00 & 0.18 & 0.62 ( 0 ) & 16.15 ( 2.77 ) & 2.73 ( 0.09 ) & 18.42 & 0.53 & 0.62 & 16.15 & 2.73\\\\\n", + "\t17 & 50 & 50 & 0.3 & 1.00 & 0.08 & 0.68 ( 0.01 ) & 14.8 ( 1.01 ) & 1.73 ( 0.15 ) & 18.07 & 0.69 & 0.68 & 14.80 & 1.73\\\\\n", + "\t18 & 100 & 50 & 0.3 & 0.50 & 0.15 & 0.77 ( 0.01 ) & 15.15 ( 1 ) & 0.64 ( 0.09 ) & 19.51 & 0.65 & 0.77 & 15.15 & 0.64\\\\\n", + "\t19 & 500 & 50 & 0.3 & 0.10 & 0.35 & 0.85 ( 0 ) & 8.95 ( 0.69 ) & 0 ( 0 ) & 13.95 & 0.46 & 0.85 & 8.95 & 0.00\\\\\n", + "\t20 & 1000 & 50 & 0.3 & 0.05 & 0.33 & 0.86 ( 0 ) & 9.66 ( 0.93 ) & 0 ( 0 ) & 14.66 & 0.44 & 0.86 & 9.66 & 0.00\\\\\n", + "\t21 & 50 & 100 & 0.3 & 2.00 & 0.05 & 0.67 ( 0.01 ) & 23.92 ( 2 ) & 2.13 ( 0.15 ) & 26.79 & 0.77 & 0.67 & 23.92 & 2.13\\\\\n", + "\t22 & 100 & 100 & 0.3 & 1.00 & 0.14 & 0.74 ( 0.01 ) & 17.75 ( 1.51 ) & 1.13 ( 0.11 ) & 21.62 & 0.67 & 0.74 & 17.75 & 1.13\\\\\n", + "\t23 & 500 & 100 & 0.3 & 0.20 & 0.32 & 0.86 ( 0 ) & 11.53 ( 1.02 ) & 0.01 ( 0.01 ) & 16.52 & 0.51 & 0.86 & 11.53 & 0.01\\\\\n", + "\t24 & 1000 & 100 & 0.3 & 0.10 & 0.33 & 0.86 ( 0 ) & 11.15 ( 1.03 ) & 0 ( 0 ) & 16.15 & 0.49 & 0.86 & 11.15 & 0.00\\\\\n", + "\t25 & 50 & 500 & 0.3 & 10.00 & 0.01 & 0.6 ( 0.01 ) & 81.07 ( 6.91 ) & 2.92 ( 0.14 ) & 83.15 & 0.93 & 0.60 & 81.07 & 2.92\\\\\n", + "\t26 & 100 & 500 & 0.3 & 5.00 & 0.06 & 0.66 ( 0.01 ) & 38.14 ( 5.11 ) & 2.16 ( 0.13 ) & 40.98 & 0.78 & 0.66 & 38.14 & 2.16\\\\\n", + "\t27 & 500 & 500 & 0.3 & 1.00 & 0.22 & 0.84 ( 0 ) & 20.87 ( 1.93 ) & 0.02 ( 0.01 ) & 25.85 & 0.63 & 0.84 & 20.87 & 0.02\\\\\n", + "\t28 & 1000 & 500 & 0.3 & 0.50 & 0.29 & 0.86 ( 0 ) & 15.35 ( 1.6 ) & 0 ( 0 ) & 20.35 & 0.53 & 0.86 & 15.35 & 0.00\\\\\n", + "\t29 & 50 & 1000 & 0.3 & 20.00 & 0.01 & 0.63 ( 0.01 ) & 104.78 ( 9.53 ) & 3.37 ( 0.14 ) & 106.41 & 0.96 & 0.63 & 104.78 & 3.37\\\\\n", + "\t30 & 100 & 1000 & 0.3 & 10.00 & 0.04 & 0.64 ( 0.01 ) & 55.95 ( 7.57 ) & 2.5 ( 0.13 ) & 58.45 & 0.85 & 0.64 & 55.95 & 2.50\\\\\n", + "\t⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮\\\\\n", + "\t51 & 500 & 50 & 0.7 & 0.10 & 0.34 & 0.91 ( 0 ) & 9.34 ( 0.72 ) & 0 ( 0 ) & 14.34 & 0.48 & 0.91 & 9.34 & 0.00\\\\\n", + "\t52 & 1000 & 50 & 0.7 & 0.05 & 0.36 & 0.91 ( 0 ) & 8.58 ( 0.78 ) & 0 ( 0 ) & 13.58 & 0.42 & 0.91 & 8.58 & 0.00\\\\\n", + "\t53 & 50 & 100 & 0.7 & 2.00 & 0.07 & 0.69 ( 0.01 ) & 24.95 ( 1.99 ) & 1.47 ( 0.1 ) & 28.48 & 0.76 & 0.69 & 24.95 & 1.47\\\\\n", + "\t54 & 100 & 100 & 0.7 & 1.00 & 0.17 & 0.79 ( 0.01 ) & 15.63 ( 1.26 ) & 0.96 ( 0.11 ) & 19.67 & 0.63 & 0.79 & 15.63 & 0.96\\\\\n", + "\t55 & 500 & 100 & 0.7 & 0.20 & 0.34 & 0.9 ( 0 ) & 10.78 ( 0.81 ) & 0.01 ( 0.01 ) & 15.77 & 0.5 & 0.90 & 10.78 & 0.01\\\\\n", + "\t56 & 1000 & 100 & 0.7 & 0.10 & 0.38 & 0.91 ( 0 ) & 9.42 ( 0.9 ) & 0 ( 0 ) & 14.42 & 0.44 & 0.91 & 9.42 & 0.00\\\\\n", + "\t57 & 50 & 500 & 0.7 & 10.00 & 0.02 & 0.62 ( 0.01 ) & 66.01 ( 6.05 ) & 2.75 ( 0.12 ) & 68.26 & 0.92 & 0.62 & 66.01 & 2.75\\\\\n", + "\t58 & 100 & 500 & 0.7 & 5.00 & 0.10 & 0.74 ( 0.01 ) & 25.15 ( 2.8 ) & 1.84 ( 0.12 ) & 28.31 & 0.71 & 0.74 & 25.15 & 1.84\\\\\n", + "\t59 & 500 & 500 & 0.7 & 1.00 & 0.25 & 0.9 ( 0 ) & 17.68 ( 1.71 ) & 0 ( 0 ) & 22.68 & 0.59 & 0.90 & 17.68 & 0.00\\\\\n", + "\t60 & 1000 & 500 & 0.7 & 0.50 & 0.31 & 0.91 ( 0 ) & 13.6 ( 1.43 ) & 0 ( 0 ) & 18.60 & 0.51 & 0.91 & 13.60 & 0.00\\\\\n", + "\t61 & 50 & 1000 & 0.7 & 20.00 & 0.01 & 0.62 ( 0.01 ) & 86.38 ( 8.91 ) & 3.09 ( 0.13 ) & 88.29 & 0.93 & 0.62 & 86.38 & 3.09\\\\\n", + "\t62 & 100 & 1000 & 0.7 & 10.00 & 0.06 & 0.69 ( 0.01 ) & 44.56 ( 6.27 ) & 2.12 ( 0.11 ) & 47.44 & 0.82 & 0.69 & 44.56 & 2.12\\\\\n", + "\t63 & 500 & 1000 & 0.7 & 2.00 & 0.23 & 0.9 ( 0 ) & 20.2 ( 1.89 ) & 0.03 ( 0.02 ) & 25.17 & 0.62 & 0.90 & 20.20 & 0.03\\\\\n", + "\t64 & 1000 & 1000 & 0.7 & 1.00 & 0.27 & 0.91 ( 0 ) & 16.62 ( 1.81 ) & 0 ( 0 ) & 21.62 & 0.54 & 0.91 & 16.62 & 0.00\\\\\n", + "\t65 & 50 & 50 & 0.9 & 1.00 & 0.14 & 0.74 ( 0.01 ) & 12.38 ( 0.9 ) & 1.46 ( 0.1 ) & 15.92 & 0.63 & 0.74 & 12.38 & 1.46\\\\\n", + "\t66 & 100 & 50 & 0.9 & 0.50 & 0.21 & 0.84 ( 0.01 ) & 12.36 ( 0.84 ) & 0.46 ( 0.08 ) & 16.90 & 0.58 & 0.84 & 12.36 & 0.46\\\\\n", + "\t67 & 500 & 50 & 0.9 & 0.10 & 0.39 & 0.92 ( 0 ) & 7.89 ( 0.68 ) & 0 ( 0 ) & 12.89 & 0.42 & 0.92 & 7.89 & 0.00\\\\\n", + "\t68 & 1000 & 50 & 0.9 & 0.05 & 0.41 & 0.92 ( 0 ) & 7.38 ( 0.78 ) & 0 ( 0 ) & 12.38 & 0.38 & 0.92 & 7.38 & 0.00\\\\\n", + "\t69 & 50 & 100 & 0.9 & 2.00 & 0.09 & 0.7 ( 0.01 ) & 19.37 ( 1.75 ) & 2.08 ( 0.13 ) & 22.29 & 0.75 & 0.70 & 19.37 & 2.08\\\\\n", + "\t70 & 100 & 100 & 0.9 & 1.00 & 0.20 & 0.81 ( 0.01 ) & 14.28 ( 1.07 ) & 0.93 ( 0.09 ) & 18.35 & 0.61 & 0.81 & 14.28 & 0.93\\\\\n", + "\t71 & 500 & 100 & 0.9 & 0.20 & 0.36 & 0.92 ( 0 ) & 10.15 ( 0.82 ) & 0 ( 0 ) & 15.15 & 0.48 & 0.92 & 10.15 & 0.00\\\\\n", + "\t72 & 1000 & 100 & 0.9 & 0.10 & 0.38 & 0.93 ( 0 ) & 9.4 ( 1.07 ) & 0 ( 0 ) & 14.40 & 0.42 & 0.93 & 9.40 & 0.00\\\\\n", + "\t73 & 50 & 500 & 0.9 & 10.00 & 0.02 & 0.62 ( 0.01 ) & 62.39 ( 5.92 ) & 2.69 ( 0.14 ) & 64.70 & 0.9 & 0.62 & 62.39 & 2.69\\\\\n", + "\t74 & 100 & 500 & 0.9 & 5.00 & 0.12 & 0.74 ( 0.01 ) & 21.21 ( 2.91 ) & 2.02 ( 0.12 ) & 24.19 & 0.69 & 0.74 & 21.21 & 2.02\\\\\n", + "\t75 & 500 & 500 & 0.9 & 1.00 & 0.28 & 0.91 ( 0 ) & 15.52 ( 1.4 ) & 0 ( 0 ) & 20.52 & 0.57 & 0.91 & 15.52 & 0.00\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.50 & 0.29 & 0.92 ( 0 ) & 14.84 ( 1.41 ) & 0 ( 0 ) & 19.84 & 0.56 & 0.92 & 14.84 & 0.00\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.00 & 0.02 & 0.63 ( 0.01 ) & 78.65 ( 8.46 ) & 3.08 ( 0.12 ) & 80.57 & 0.92 & 0.63 & 78.65 & 3.08\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.00 & 0.06 & 0.74 ( 0.01 ) & 43.94 ( 6.95 ) & 2.01 ( 0.11 ) & 46.93 & 0.79 & 0.74 & 43.94 & 2.01\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.00 & 0.25 & 0.91 ( 0 ) & 18.95 ( 1.93 ) & 0 ( 0 ) & 23.95 & 0.6 & 0.91 & 18.95 & 0.00\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.00 & 0.29 & 0.92 ( 0 ) & 15.24 ( 1.68 ) & 0 ( 0 ) & 20.24 & 0.52 & 0.92 & 15.24 & 0.00\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 80 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1.00 | 0.01 | 0.61 ( 0.01 ) | 17.05 ( 1.31 ) | 3.17 ( 0.19 ) | 18.88 | 0.8 | 0.61 | 17.05 | 3.17 |\n", + "| 2 | 100 | 50 | 0.1 | 0.50 | 0.04 | 0.59 ( 0.01 ) | 13.62 ( 1.31 ) | 2.9 ( 0.17 ) | 15.72 | 0.64 | 0.59 | 13.62 | 2.90 |\n", + "| 3 | 500 | 50 | 0.1 | 0.10 | 0.11 | 0.64 ( 0 ) | 16.89 ( 1.14 ) | 1.1 ( 0.13 ) | 20.79 | 0.68 | 0.64 | 16.89 | 1.10 |\n", + "| 4 | 1000 | 50 | 0.1 | 0.05 | 0.12 | 0.66 ( 0 ) | 19.43 ( 1.02 ) | 0.42 ( 0.08 ) | 24.01 | 0.71 | 0.66 | 19.43 | 0.42 |\n", + "| 5 | 50 | 100 | 0.1 | 2.00 | 0.01 | 0.63 ( 0.01 ) | 27.39 ( 2.11 ) | 3.38 ( 0.17 ) | 29.01 | 0.87 | 0.63 | 27.39 | 3.38 |\n", + "| 6 | 100 | 100 | 0.1 | 1.00 | 0.02 | 0.59 ( 0.01 ) | 26.17 ( 2.4 ) | 3.34 ( 0.16 ) | 27.83 | 0.84 | 0.59 | 26.17 | 3.34 |\n", + "| 7 | 500 | 100 | 0.1 | 0.20 | 0.09 | 0.62 ( 0 ) | 22.75 ( 1.87 ) | 1.61 ( 0.13 ) | 26.14 | 0.69 | 0.62 | 22.75 | 1.61 |\n", + "| 8 | 1000 | 100 | 0.1 | 0.10 | 0.10 | 0.64 ( 0 ) | 28.32 ( 1.88 ) | 0.66 ( 0.1 ) | 32.66 | 0.77 | 0.64 | 28.32 | 0.66 |\n", + "| 9 | 50 | 500 | 0.1 | 10.00 | 0.00 | 0.61 ( 0.01 ) | 69.03 ( 7.45 ) | 4.13 ( 0.19 ) | 69.90 | 0.96 | 0.61 | 69.03 | 4.13 |\n", + "| 10 | 100 | 500 | 0.1 | 5.00 | 0.00 | 0.57 ( 0.01 ) | 70.64 ( 9.13 ) | 3.91 ( 0.17 ) | 71.73 | 0.91 | 0.57 | 70.64 | 3.91 |\n", + "| 11 | 500 | 500 | 0.1 | 1.00 | 0.10 | 0.61 ( 0.01 ) | 20.55 ( 4.33 ) | 3.15 ( 0.1 ) | 22.40 | 0.62 | 0.61 | 20.55 | 3.15 |\n", + "| 12 | 1000 | 500 | 0.1 | 0.50 | 0.12 | 0.63 ( 0 ) | 26.03 ( 3.45 ) | 2.38 ( 0.11 ) | 28.65 | 0.62 | 0.63 | 26.03 | 2.38 |\n", + "| 13 | 50 | 1000 | 0.1 | 20.00 | 0.00 | 0.59 ( 0.01 ) | 103.61 ( 10.54 ) | 4.34 ( 0.18 ) | 104.27 | 0.98 | 0.59 | 103.61 | 4.34 |\n", + "| 14 | 100 | 1000 | 0.1 | 10.00 | 0.00 | 0.56 ( 0.01 ) | 103.21 ( 12.75 ) | 4.15 ( 0.17 ) | 104.06 | 0.95 | 0.56 | 103.21 | 4.15 |\n", + "| 15 | 500 | 1000 | 0.1 | 2.00 | 0.07 | 0.61 ( 0 ) | 29.41 ( 7.4 ) | 3.25 ( 0.09 ) | 31.16 | 0.62 | 0.61 | 29.41 | 3.25 |\n", + "| 16 | 1000 | 1000 | 0.1 | 1.00 | 0.18 | 0.62 ( 0 ) | 16.15 ( 2.77 ) | 2.73 ( 0.09 ) | 18.42 | 0.53 | 0.62 | 16.15 | 2.73 |\n", + "| 17 | 50 | 50 | 0.3 | 1.00 | 0.08 | 0.68 ( 0.01 ) | 14.8 ( 1.01 ) | 1.73 ( 0.15 ) | 18.07 | 0.69 | 0.68 | 14.80 | 1.73 |\n", + "| 18 | 100 | 50 | 0.3 | 0.50 | 0.15 | 0.77 ( 0.01 ) | 15.15 ( 1 ) | 0.64 ( 0.09 ) | 19.51 | 0.65 | 0.77 | 15.15 | 0.64 |\n", + "| 19 | 500 | 50 | 0.3 | 0.10 | 0.35 | 0.85 ( 0 ) | 8.95 ( 0.69 ) | 0 ( 0 ) | 13.95 | 0.46 | 0.85 | 8.95 | 0.00 |\n", + "| 20 | 1000 | 50 | 0.3 | 0.05 | 0.33 | 0.86 ( 0 ) | 9.66 ( 0.93 ) | 0 ( 0 ) | 14.66 | 0.44 | 0.86 | 9.66 | 0.00 |\n", + "| 21 | 50 | 100 | 0.3 | 2.00 | 0.05 | 0.67 ( 0.01 ) | 23.92 ( 2 ) | 2.13 ( 0.15 ) | 26.79 | 0.77 | 0.67 | 23.92 | 2.13 |\n", + "| 22 | 100 | 100 | 0.3 | 1.00 | 0.14 | 0.74 ( 0.01 ) | 17.75 ( 1.51 ) | 1.13 ( 0.11 ) | 21.62 | 0.67 | 0.74 | 17.75 | 1.13 |\n", + "| 23 | 500 | 100 | 0.3 | 0.20 | 0.32 | 0.86 ( 0 ) | 11.53 ( 1.02 ) | 0.01 ( 0.01 ) | 16.52 | 0.51 | 0.86 | 11.53 | 0.01 |\n", + "| 24 | 1000 | 100 | 0.3 | 0.10 | 0.33 | 0.86 ( 0 ) | 11.15 ( 1.03 ) | 0 ( 0 ) | 16.15 | 0.49 | 0.86 | 11.15 | 0.00 |\n", + "| 25 | 50 | 500 | 0.3 | 10.00 | 0.01 | 0.6 ( 0.01 ) | 81.07 ( 6.91 ) | 2.92 ( 0.14 ) | 83.15 | 0.93 | 0.60 | 81.07 | 2.92 |\n", + "| 26 | 100 | 500 | 0.3 | 5.00 | 0.06 | 0.66 ( 0.01 ) | 38.14 ( 5.11 ) | 2.16 ( 0.13 ) | 40.98 | 0.78 | 0.66 | 38.14 | 2.16 |\n", + "| 27 | 500 | 500 | 0.3 | 1.00 | 0.22 | 0.84 ( 0 ) | 20.87 ( 1.93 ) | 0.02 ( 0.01 ) | 25.85 | 0.63 | 0.84 | 20.87 | 0.02 |\n", + "| 28 | 1000 | 500 | 0.3 | 0.50 | 0.29 | 0.86 ( 0 ) | 15.35 ( 1.6 ) | 0 ( 0 ) | 20.35 | 0.53 | 0.86 | 15.35 | 0.00 |\n", + "| 29 | 50 | 1000 | 0.3 | 20.00 | 0.01 | 0.63 ( 0.01 ) | 104.78 ( 9.53 ) | 3.37 ( 0.14 ) | 106.41 | 0.96 | 0.63 | 104.78 | 3.37 |\n", + "| 30 | 100 | 1000 | 0.3 | 10.00 | 0.04 | 0.64 ( 0.01 ) | 55.95 ( 7.57 ) | 2.5 ( 0.13 ) | 58.45 | 0.85 | 0.64 | 55.95 | 2.50 |\n", + "| ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ |\n", + "| 51 | 500 | 50 | 0.7 | 0.10 | 0.34 | 0.91 ( 0 ) | 9.34 ( 0.72 ) | 0 ( 0 ) | 14.34 | 0.48 | 0.91 | 9.34 | 0.00 |\n", + "| 52 | 1000 | 50 | 0.7 | 0.05 | 0.36 | 0.91 ( 0 ) | 8.58 ( 0.78 ) | 0 ( 0 ) | 13.58 | 0.42 | 0.91 | 8.58 | 0.00 |\n", + "| 53 | 50 | 100 | 0.7 | 2.00 | 0.07 | 0.69 ( 0.01 ) | 24.95 ( 1.99 ) | 1.47 ( 0.1 ) | 28.48 | 0.76 | 0.69 | 24.95 | 1.47 |\n", + "| 54 | 100 | 100 | 0.7 | 1.00 | 0.17 | 0.79 ( 0.01 ) | 15.63 ( 1.26 ) | 0.96 ( 0.11 ) | 19.67 | 0.63 | 0.79 | 15.63 | 0.96 |\n", + "| 55 | 500 | 100 | 0.7 | 0.20 | 0.34 | 0.9 ( 0 ) | 10.78 ( 0.81 ) | 0.01 ( 0.01 ) | 15.77 | 0.5 | 0.90 | 10.78 | 0.01 |\n", + "| 56 | 1000 | 100 | 0.7 | 0.10 | 0.38 | 0.91 ( 0 ) | 9.42 ( 0.9 ) | 0 ( 0 ) | 14.42 | 0.44 | 0.91 | 9.42 | 0.00 |\n", + "| 57 | 50 | 500 | 0.7 | 10.00 | 0.02 | 0.62 ( 0.01 ) | 66.01 ( 6.05 ) | 2.75 ( 0.12 ) | 68.26 | 0.92 | 0.62 | 66.01 | 2.75 |\n", + "| 58 | 100 | 500 | 0.7 | 5.00 | 0.10 | 0.74 ( 0.01 ) | 25.15 ( 2.8 ) | 1.84 ( 0.12 ) | 28.31 | 0.71 | 0.74 | 25.15 | 1.84 |\n", + "| 59 | 500 | 500 | 0.7 | 1.00 | 0.25 | 0.9 ( 0 ) | 17.68 ( 1.71 ) | 0 ( 0 ) | 22.68 | 0.59 | 0.90 | 17.68 | 0.00 |\n", + "| 60 | 1000 | 500 | 0.7 | 0.50 | 0.31 | 0.91 ( 0 ) | 13.6 ( 1.43 ) | 0 ( 0 ) | 18.60 | 0.51 | 0.91 | 13.60 | 0.00 |\n", + "| 61 | 50 | 1000 | 0.7 | 20.00 | 0.01 | 0.62 ( 0.01 ) | 86.38 ( 8.91 ) | 3.09 ( 0.13 ) | 88.29 | 0.93 | 0.62 | 86.38 | 3.09 |\n", + "| 62 | 100 | 1000 | 0.7 | 10.00 | 0.06 | 0.69 ( 0.01 ) | 44.56 ( 6.27 ) | 2.12 ( 0.11 ) | 47.44 | 0.82 | 0.69 | 44.56 | 2.12 |\n", + "| 63 | 500 | 1000 | 0.7 | 2.00 | 0.23 | 0.9 ( 0 ) | 20.2 ( 1.89 ) | 0.03 ( 0.02 ) | 25.17 | 0.62 | 0.90 | 20.20 | 0.03 |\n", + "| 64 | 1000 | 1000 | 0.7 | 1.00 | 0.27 | 0.91 ( 0 ) | 16.62 ( 1.81 ) | 0 ( 0 ) | 21.62 | 0.54 | 0.91 | 16.62 | 0.00 |\n", + "| 65 | 50 | 50 | 0.9 | 1.00 | 0.14 | 0.74 ( 0.01 ) | 12.38 ( 0.9 ) | 1.46 ( 0.1 ) | 15.92 | 0.63 | 0.74 | 12.38 | 1.46 |\n", + "| 66 | 100 | 50 | 0.9 | 0.50 | 0.21 | 0.84 ( 0.01 ) | 12.36 ( 0.84 ) | 0.46 ( 0.08 ) | 16.90 | 0.58 | 0.84 | 12.36 | 0.46 |\n", + "| 67 | 500 | 50 | 0.9 | 0.10 | 0.39 | 0.92 ( 0 ) | 7.89 ( 0.68 ) | 0 ( 0 ) | 12.89 | 0.42 | 0.92 | 7.89 | 0.00 |\n", + "| 68 | 1000 | 50 | 0.9 | 0.05 | 0.41 | 0.92 ( 0 ) | 7.38 ( 0.78 ) | 0 ( 0 ) | 12.38 | 0.38 | 0.92 | 7.38 | 0.00 |\n", + "| 69 | 50 | 100 | 0.9 | 2.00 | 0.09 | 0.7 ( 0.01 ) | 19.37 ( 1.75 ) | 2.08 ( 0.13 ) | 22.29 | 0.75 | 0.70 | 19.37 | 2.08 |\n", + "| 70 | 100 | 100 | 0.9 | 1.00 | 0.20 | 0.81 ( 0.01 ) | 14.28 ( 1.07 ) | 0.93 ( 0.09 ) | 18.35 | 0.61 | 0.81 | 14.28 | 0.93 |\n", + "| 71 | 500 | 100 | 0.9 | 0.20 | 0.36 | 0.92 ( 0 ) | 10.15 ( 0.82 ) | 0 ( 0 ) | 15.15 | 0.48 | 0.92 | 10.15 | 0.00 |\n", + "| 72 | 1000 | 100 | 0.9 | 0.10 | 0.38 | 0.93 ( 0 ) | 9.4 ( 1.07 ) | 0 ( 0 ) | 14.40 | 0.42 | 0.93 | 9.40 | 0.00 |\n", + "| 73 | 50 | 500 | 0.9 | 10.00 | 0.02 | 0.62 ( 0.01 ) | 62.39 ( 5.92 ) | 2.69 ( 0.14 ) | 64.70 | 0.9 | 0.62 | 62.39 | 2.69 |\n", + "| 74 | 100 | 500 | 0.9 | 5.00 | 0.12 | 0.74 ( 0.01 ) | 21.21 ( 2.91 ) | 2.02 ( 0.12 ) | 24.19 | 0.69 | 0.74 | 21.21 | 2.02 |\n", + "| 75 | 500 | 500 | 0.9 | 1.00 | 0.28 | 0.91 ( 0 ) | 15.52 ( 1.4 ) | 0 ( 0 ) | 20.52 | 0.57 | 0.91 | 15.52 | 0.00 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.50 | 0.29 | 0.92 ( 0 ) | 14.84 ( 1.41 ) | 0 ( 0 ) | 19.84 | 0.56 | 0.92 | 14.84 | 0.00 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.00 | 0.02 | 0.63 ( 0.01 ) | 78.65 ( 8.46 ) | 3.08 ( 0.12 ) | 80.57 | 0.92 | 0.63 | 78.65 | 3.08 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.00 | 0.06 | 0.74 ( 0.01 ) | 43.94 ( 6.95 ) | 2.01 ( 0.11 ) | 46.93 | 0.79 | 0.74 | 43.94 | 2.01 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.00 | 0.25 | 0.91 ( 0 ) | 18.95 ( 1.93 ) | 0 ( 0 ) | 23.95 | 0.6 | 0.91 | 18.95 | 0.00 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.00 | 0.29 | 0.92 ( 0 ) | 15.24 ( 1.68 ) | 0 ( 0 ) | 20.24 | 0.52 | 0.92 | 15.24 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "1 50 50 0.1 1.00 0.01 0.61 ( 0.01 ) 17.05 ( 1.31 ) 3.17 ( 0.19 )\n", + "2 100 50 0.1 0.50 0.04 0.59 ( 0.01 ) 13.62 ( 1.31 ) 2.9 ( 0.17 ) \n", + "3 500 50 0.1 0.10 0.11 0.64 ( 0 ) 16.89 ( 1.14 ) 1.1 ( 0.13 ) \n", + "4 1000 50 0.1 0.05 0.12 0.66 ( 0 ) 19.43 ( 1.02 ) 0.42 ( 0.08 )\n", + "5 50 100 0.1 2.00 0.01 0.63 ( 0.01 ) 27.39 ( 2.11 ) 3.38 ( 0.17 )\n", + "6 100 100 0.1 1.00 0.02 0.59 ( 0.01 ) 26.17 ( 2.4 ) 3.34 ( 0.16 )\n", + "7 500 100 0.1 0.20 0.09 0.62 ( 0 ) 22.75 ( 1.87 ) 1.61 ( 0.13 )\n", + "8 1000 100 0.1 0.10 0.10 0.64 ( 0 ) 28.32 ( 1.88 ) 0.66 ( 0.1 ) \n", + "9 50 500 0.1 10.00 0.00 0.61 ( 0.01 ) 69.03 ( 7.45 ) 4.13 ( 0.19 )\n", + "10 100 500 0.1 5.00 0.00 0.57 ( 0.01 ) 70.64 ( 9.13 ) 3.91 ( 0.17 )\n", + "11 500 500 0.1 1.00 0.10 0.61 ( 0.01 ) 20.55 ( 4.33 ) 3.15 ( 0.1 ) \n", + "12 1000 500 0.1 0.50 0.12 0.63 ( 0 ) 26.03 ( 3.45 ) 2.38 ( 0.11 )\n", + "13 50 1000 0.1 20.00 0.00 0.59 ( 0.01 ) 103.61 ( 10.54 ) 4.34 ( 0.18 )\n", + "14 100 1000 0.1 10.00 0.00 0.56 ( 0.01 ) 103.21 ( 12.75 ) 4.15 ( 0.17 )\n", + "15 500 1000 0.1 2.00 0.07 0.61 ( 0 ) 29.41 ( 7.4 ) 3.25 ( 0.09 )\n", + "16 1000 1000 0.1 1.00 0.18 0.62 ( 0 ) 16.15 ( 2.77 ) 2.73 ( 0.09 )\n", + "17 50 50 0.3 1.00 0.08 0.68 ( 0.01 ) 14.8 ( 1.01 ) 1.73 ( 0.15 )\n", + "18 100 50 0.3 0.50 0.15 0.77 ( 0.01 ) 15.15 ( 1 ) 0.64 ( 0.09 )\n", + "19 500 50 0.3 0.10 0.35 0.85 ( 0 ) 8.95 ( 0.69 ) 0 ( 0 ) \n", + "20 1000 50 0.3 0.05 0.33 0.86 ( 0 ) 9.66 ( 0.93 ) 0 ( 0 ) \n", + "21 50 100 0.3 2.00 0.05 0.67 ( 0.01 ) 23.92 ( 2 ) 2.13 ( 0.15 )\n", + "22 100 100 0.3 1.00 0.14 0.74 ( 0.01 ) 17.75 ( 1.51 ) 1.13 ( 0.11 )\n", + "23 500 100 0.3 0.20 0.32 0.86 ( 0 ) 11.53 ( 1.02 ) 0.01 ( 0.01 )\n", + "24 1000 100 0.3 0.10 0.33 0.86 ( 0 ) 11.15 ( 1.03 ) 0 ( 0 ) \n", + "25 50 500 0.3 10.00 0.01 0.6 ( 0.01 ) 81.07 ( 6.91 ) 2.92 ( 0.14 )\n", + "26 100 500 0.3 5.00 0.06 0.66 ( 0.01 ) 38.14 ( 5.11 ) 2.16 ( 0.13 )\n", + "27 500 500 0.3 1.00 0.22 0.84 ( 0 ) 20.87 ( 1.93 ) 0.02 ( 0.01 )\n", + "28 1000 500 0.3 0.50 0.29 0.86 ( 0 ) 15.35 ( 1.6 ) 0 ( 0 ) \n", + "29 50 1000 0.3 20.00 0.01 0.63 ( 0.01 ) 104.78 ( 9.53 ) 3.37 ( 0.14 )\n", + "30 100 1000 0.3 10.00 0.04 0.64 ( 0.01 ) 55.95 ( 7.57 ) 2.5 ( 0.13 ) \n", + "⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ \n", + "51 500 50 0.7 0.10 0.34 0.91 ( 0 ) 9.34 ( 0.72 ) 0 ( 0 ) \n", + "52 1000 50 0.7 0.05 0.36 0.91 ( 0 ) 8.58 ( 0.78 ) 0 ( 0 ) \n", + "53 50 100 0.7 2.00 0.07 0.69 ( 0.01 ) 24.95 ( 1.99 ) 1.47 ( 0.1 ) \n", + "54 100 100 0.7 1.00 0.17 0.79 ( 0.01 ) 15.63 ( 1.26 ) 0.96 ( 0.11 )\n", + "55 500 100 0.7 0.20 0.34 0.9 ( 0 ) 10.78 ( 0.81 ) 0.01 ( 0.01 )\n", + "56 1000 100 0.7 0.10 0.38 0.91 ( 0 ) 9.42 ( 0.9 ) 0 ( 0 ) \n", + "57 50 500 0.7 10.00 0.02 0.62 ( 0.01 ) 66.01 ( 6.05 ) 2.75 ( 0.12 )\n", + "58 100 500 0.7 5.00 0.10 0.74 ( 0.01 ) 25.15 ( 2.8 ) 1.84 ( 0.12 )\n", + "59 500 500 0.7 1.00 0.25 0.9 ( 0 ) 17.68 ( 1.71 ) 0 ( 0 ) \n", + "60 1000 500 0.7 0.50 0.31 0.91 ( 0 ) 13.6 ( 1.43 ) 0 ( 0 ) \n", + "61 50 1000 0.7 20.00 0.01 0.62 ( 0.01 ) 86.38 ( 8.91 ) 3.09 ( 0.13 )\n", + "62 100 1000 0.7 10.00 0.06 0.69 ( 0.01 ) 44.56 ( 6.27 ) 2.12 ( 0.11 )\n", + "63 500 1000 0.7 2.00 0.23 0.9 ( 0 ) 20.2 ( 1.89 ) 0.03 ( 0.02 )\n", + "64 1000 1000 0.7 1.00 0.27 0.91 ( 0 ) 16.62 ( 1.81 ) 0 ( 0 ) \n", + "65 50 50 0.9 1.00 0.14 0.74 ( 0.01 ) 12.38 ( 0.9 ) 1.46 ( 0.1 ) \n", + "66 100 50 0.9 0.50 0.21 0.84 ( 0.01 ) 12.36 ( 0.84 ) 0.46 ( 0.08 )\n", + "67 500 50 0.9 0.10 0.39 0.92 ( 0 ) 7.89 ( 0.68 ) 0 ( 0 ) \n", + "68 1000 50 0.9 0.05 0.41 0.92 ( 0 ) 7.38 ( 0.78 ) 0 ( 0 ) \n", + "69 50 100 0.9 2.00 0.09 0.7 ( 0.01 ) 19.37 ( 1.75 ) 2.08 ( 0.13 )\n", + "70 100 100 0.9 1.00 0.20 0.81 ( 0.01 ) 14.28 ( 1.07 ) 0.93 ( 0.09 )\n", + "71 500 100 0.9 0.20 0.36 0.92 ( 0 ) 10.15 ( 0.82 ) 0 ( 0 ) \n", + "72 1000 100 0.9 0.10 0.38 0.93 ( 0 ) 9.4 ( 1.07 ) 0 ( 0 ) \n", + "73 50 500 0.9 10.00 0.02 0.62 ( 0.01 ) 62.39 ( 5.92 ) 2.69 ( 0.14 )\n", + "74 100 500 0.9 5.00 0.12 0.74 ( 0.01 ) 21.21 ( 2.91 ) 2.02 ( 0.12 )\n", + "75 500 500 0.9 1.00 0.28 0.91 ( 0 ) 15.52 ( 1.4 ) 0 ( 0 ) \n", + "76 1000 500 0.9 0.50 0.29 0.92 ( 0 ) 14.84 ( 1.41 ) 0 ( 0 ) \n", + "77 50 1000 0.9 20.00 0.02 0.63 ( 0.01 ) 78.65 ( 8.46 ) 3.08 ( 0.12 )\n", + "78 100 1000 0.9 10.00 0.06 0.74 ( 0.01 ) 43.94 ( 6.95 ) 2.01 ( 0.11 )\n", + "79 500 1000 0.9 2.00 0.25 0.91 ( 0 ) 18.95 ( 1.93 ) 0 ( 0 ) \n", + "80 1000 1000 0.9 1.00 0.29 0.92 ( 0 ) 15.24 ( 1.68 ) 0 ( 0 ) \n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "1 18.88 0.8 0.61 17.05 3.17 \n", + "2 15.72 0.64 0.59 13.62 2.90 \n", + "3 20.79 0.68 0.64 16.89 1.10 \n", + "4 24.01 0.71 0.66 19.43 0.42 \n", + "5 29.01 0.87 0.63 27.39 3.38 \n", + "6 27.83 0.84 0.59 26.17 3.34 \n", + "7 26.14 0.69 0.62 22.75 1.61 \n", + "8 32.66 0.77 0.64 28.32 0.66 \n", + "9 69.90 0.96 0.61 69.03 4.13 \n", + "10 71.73 0.91 0.57 70.64 3.91 \n", + "11 22.40 0.62 0.61 20.55 3.15 \n", + "12 28.65 0.62 0.63 26.03 2.38 \n", + "13 104.27 0.98 0.59 103.61 4.34 \n", + "14 104.06 0.95 0.56 103.21 4.15 \n", + "15 31.16 0.62 0.61 29.41 3.25 \n", + "16 18.42 0.53 0.62 16.15 2.73 \n", + "17 18.07 0.69 0.68 14.80 1.73 \n", + "18 19.51 0.65 0.77 15.15 0.64 \n", + "19 13.95 0.46 0.85 8.95 0.00 \n", + "20 14.66 0.44 0.86 9.66 0.00 \n", + "21 26.79 0.77 0.67 23.92 2.13 \n", + "22 21.62 0.67 0.74 17.75 1.13 \n", + "23 16.52 0.51 0.86 11.53 0.01 \n", + "24 16.15 0.49 0.86 11.15 0.00 \n", + "25 83.15 0.93 0.60 81.07 2.92 \n", + "26 40.98 0.78 0.66 38.14 2.16 \n", + "27 25.85 0.63 0.84 20.87 0.02 \n", + "28 20.35 0.53 0.86 15.35 0.00 \n", + "29 106.41 0.96 0.63 104.78 3.37 \n", + "30 58.45 0.85 0.64 55.95 2.50 \n", + "⋮ ⋮ ⋮ ⋮ ⋮ ⋮ \n", + "51 14.34 0.48 0.91 9.34 0.00 \n", + "52 13.58 0.42 0.91 8.58 0.00 \n", + "53 28.48 0.76 0.69 24.95 1.47 \n", + "54 19.67 0.63 0.79 15.63 0.96 \n", + "55 15.77 0.5 0.90 10.78 0.01 \n", + "56 14.42 0.44 0.91 9.42 0.00 \n", + "57 68.26 0.92 0.62 66.01 2.75 \n", + "58 28.31 0.71 0.74 25.15 1.84 \n", + "59 22.68 0.59 0.90 17.68 0.00 \n", + "60 18.60 0.51 0.91 13.60 0.00 \n", + "61 88.29 0.93 0.62 86.38 3.09 \n", + "62 47.44 0.82 0.69 44.56 2.12 \n", + "63 25.17 0.62 0.90 20.20 0.03 \n", + "64 21.62 0.54 0.91 16.62 0.00 \n", + "65 15.92 0.63 0.74 12.38 1.46 \n", + "66 16.90 0.58 0.84 12.36 0.46 \n", + "67 12.89 0.42 0.92 7.89 0.00 \n", + "68 12.38 0.38 0.92 7.38 0.00 \n", + "69 22.29 0.75 0.70 19.37 2.08 \n", + "70 18.35 0.61 0.81 14.28 0.93 \n", + "71 15.15 0.48 0.92 10.15 0.00 \n", + "72 14.40 0.42 0.93 9.40 0.00 \n", + "73 64.70 0.9 0.62 62.39 2.69 \n", + "74 24.19 0.69 0.74 21.21 2.02 \n", + "75 20.52 0.57 0.91 15.52 0.00 \n", + "76 19.84 0.56 0.92 14.84 0.00 \n", + "77 80.57 0.92 0.63 78.65 3.08 \n", + "78 46.93 0.79 0.74 43.94 2.01 \n", + "79 23.95 0.6 0.91 18.95 0.00 \n", + "80 20.24 0.52 0.92 15.24 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_block\n", + "\n", + "## export\n", + "write.table(result.table_block, '../results_summary_bin/sim_block_Elnet_binary.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_bin/.ipynb_checkpoints/2.3_sim_block_rf_binary_update-checkpoint.ipynb b/simulations/notebooks_sim_bin/.ipynb_checkpoints/2.3_sim_block_rf_binary_update-checkpoint.ipynb new file mode 100644 index 0000000..6322392 --- /dev/null +++ b/simulations/notebooks_sim_bin/.ipynb_checkpoints/2.3_sim_block_rf_binary_update-checkpoint.ipynb @@ -0,0 +1,1067 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize random forests results on Block Simulation Scenarios for binary outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "rou.list = seq(0.1, 0.9, 0.2)\n", + "\n", + "files = NULL\n", + "for (rou in rou.list){\n", + " for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_block_corr', rou, paste('P', p, 'N', n, sep='_'), '.RData', sep=''))\n", + " }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "80" + ], + "text/latex": [ + "80" + ], + "text/markdown": [ + "80" + ], + "text/plain": [ + "[1] 80" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "length(files)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1] \"indx: 1\"\n", + "[1] \"indx: 2\"\n", + "[1] \"indx: 3\"\n", + "[1] \"indx: 4\"\n", + "[1] \"indx: 5\"\n", + "[1] \"indx: 6\"\n", + "[1] \"indx: 7\"\n", + "[1] \"indx: 8\"\n", + "[1] \"indx: 9\"\n", + "[1] \"indx: 10\"\n", + "[1] \"indx: 11\"\n", + "[1] \"indx: 12\"\n", + "[1] \"indx: 13\"\n", + "[1] \"indx: 14\"\n", + "[1] \"indx: 15\"\n", + "[1] \"indx: 16\"\n", + "[1] \"indx: 17\"\n", + "[1] \"indx: 18\"\n", + "[1] \"indx: 19\"\n", + "[1] \"indx: 20\"\n", + "[1] \"indx: 21\"\n", + "[1] \"indx: 22\"\n", + "[1] \"indx: 23\"\n", + "[1] \"indx: 24\"\n", + "[1] \"indx: 25\"\n", + "[1] \"indx: 26\"\n", + "[1] \"indx: 27\"\n", + "[1] \"indx: 28\"\n", + "[1] \"indx: 29\"\n", + "[1] \"indx: 30\"\n", + "[1] \"indx: 31\"\n", + "[1] \"indx: 32\"\n", + "[1] \"indx: 33\"\n", + "[1] \"indx: 34\"\n", + "[1] \"indx: 35\"\n", + "[1] \"indx: 36\"\n", + "[1] \"indx: 37\"\n", + "[1] \"indx: 38\"\n", + "[1] \"indx: 39\"\n", + "[1] \"indx: 40\"\n", + "[1] \"indx: 41\"\n", + "[1] \"indx: 42\"\n", + "[1] \"indx: 43\"\n", + "[1] \"indx: 44\"\n", + "[1] \"indx: 45\"\n", + "[1] \"indx: 46\"\n", + "[1] \"indx: 47\"\n", + "[1] \"indx: 48\"\n", + "[1] \"indx: 49\"\n", + "[1] \"indx: 50\"\n", + "[1] \"indx: 51\"\n", + "[1] \"indx: 52\"\n", + "[1] \"indx: 53\"\n", + "[1] \"indx: 54\"\n", + "[1] \"indx: 55\"\n", + "[1] \"indx: 56\"\n", + "[1] \"indx: 57\"\n", + "[1] \"indx: 58\"\n", + "[1] \"indx: 59\"\n", + "[1] \"indx: 60\"\n", + "[1] \"indx: 61\"\n", + "[1] \"indx: 62\"\n", + "[1] \"indx: 63\"\n", + "[1] \"indx: 64\"\n", + "[1] \"indx: 65\"\n", + "[1] \"indx: 66\"\n", + "[1] \"indx: 67\"\n", + "[1] \"indx: 68\"\n", + "[1] \"indx: 69\"\n", + "[1] \"indx: 70\"\n", + "[1] \"indx: 71\"\n", + "[1] \"indx: 72\"\n", + "[1] \"indx: 73\"\n", + "[1] \"indx: 74\"\n", + "[1] \"indx: 75\"\n", + "[1] \"indx: 76\"\n", + "[1] \"indx: 77\"\n", + "[1] \"indx: 78\"\n", + "[1] \"indx: 79\"\n", + "[1] \"indx: 80\"\n" + ] + } + ], + "source": [ + "avg_FDR = NULL\n", + "table_block = NULL\n", + "tmp_num_select = rep(0, length(files))\n", + "for (i in 1:length(files)){\n", + " #if(i == 16) next \n", + " print(paste0('indx: ', i))\n", + " load(paste0(dir, '/binary_update/block_RF_binary_', i, '.RData')) \n", + " \n", + " table_block = rbind(table_block, results_block_rf[c('n', 'p', 'rou', 'FP', 'FN', 'ROC', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_block_rf$Stab.table))\n", + " \n", + " # calculate FDR\n", + " load(file_name, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_block_rf$Stab.table\n", + " FDR = NULL # false positive rate\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}\n", + "table_block = as.data.frame(table_block)\n", + "table_block$num_select = tmp_num_select\n", + "table_block$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
150500.11 ( 0 )6 ( 0 )1 ( 0 )NaN0.00 NaN
2100500.12.4 ( 0.16 )5.3 ( 0.11 )1 ( 0 )0.013.000.78
3500500.12.96 ( 0.21 )4.29 ( 0.15 )1 ( 0 )0.124.630.62
41000500.13.28 ( 0.21 )3.04 ( 0.12 )1 ( 0 )0.336.240.49
5501000.11 ( 0 )6 ( 0 )1 ( 0 )NaN0.00 NaN
61001000.15.09 ( 0.21 )5.6 ( 0.09 )1 ( 0 )05.480.93
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1 ( 0 ) & 6 ( 0 ) & 1 ( 0 ) & NaN & 0.00 & NaN\\\\\n", + "\t2 & 100 & 50 & 0.1 & 2.4 ( 0.16 ) & 5.3 ( 0.11 ) & 1 ( 0 ) & 0.01 & 3.00 & 0.78\\\\\n", + "\t3 & 500 & 50 & 0.1 & 2.96 ( 0.21 ) & 4.29 ( 0.15 ) & 1 ( 0 ) & 0.12 & 4.63 & 0.62\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 3.28 ( 0.21 ) & 3.04 ( 0.12 ) & 1 ( 0 ) & 0.33 & 6.24 & 0.49\\\\\n", + "\t5 & 50 & 100 & 0.1 & 1 ( 0 ) & 6 ( 0 ) & 1 ( 0 ) & NaN & 0.00 & NaN\\\\\n", + "\t6 & 100 & 100 & 0.1 & 5.09 ( 0.21 ) & 5.6 ( 0.09 ) & 1 ( 0 ) & 0 & 5.48 & 0.93\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1 ( 0 ) | 6 ( 0 ) | 1 ( 0 ) | NaN | 0.00 | NaN |\n", + "| 2 | 100 | 50 | 0.1 | 2.4 ( 0.16 ) | 5.3 ( 0.11 ) | 1 ( 0 ) | 0.01 | 3.00 | 0.78 |\n", + "| 3 | 500 | 50 | 0.1 | 2.96 ( 0.21 ) | 4.29 ( 0.15 ) | 1 ( 0 ) | 0.12 | 4.63 | 0.62 |\n", + "| 4 | 1000 | 50 | 0.1 | 3.28 ( 0.21 ) | 3.04 ( 0.12 ) | 1 ( 0 ) | 0.33 | 6.24 | 0.49 |\n", + "| 5 | 50 | 100 | 0.1 | 1 ( 0 ) | 6 ( 0 ) | 1 ( 0 ) | NaN | 0.00 | NaN |\n", + "| 6 | 100 | 100 | 0.1 | 5.09 ( 0.21 ) | 5.6 ( 0.09 ) | 1 ( 0 ) | 0 | 5.48 | 0.93 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select FDR \n", + "1 50 50 0.1 1 ( 0 ) 6 ( 0 ) 1 ( 0 ) NaN 0.00 NaN\n", + "2 100 50 0.1 2.4 ( 0.16 ) 5.3 ( 0.11 ) 1 ( 0 ) 0.01 3.00 0.78\n", + "3 500 50 0.1 2.96 ( 0.21 ) 4.29 ( 0.15 ) 1 ( 0 ) 0.12 4.63 0.62\n", + "4 1000 50 0.1 3.28 ( 0.21 ) 3.04 ( 0.12 ) 1 ( 0 ) 0.33 6.24 0.49\n", + "5 50 100 0.1 1 ( 0 ) 6 ( 0 ) 1 ( 0 ) NaN 0.00 NaN\n", + "6 100 100 0.1 5.09 ( 0.21 ) 5.6 ( 0.09 ) 1 ( 0 ) 0 5.48 0.93" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
755005000.924.29 ( 0.42 )2.65 ( 0.09 )1 ( 0 )0.0727.640.88
7610005000.921.42 ( 0.42 )1.49 ( 0.08 )1 ( 0 )0.1325.930.82
775010000.91 ( 0 )6 ( 0 )1 ( 0 )NaN 0.00 NaN
7810010000.947.48 ( 0.72 )4.95 ( 0.08 )1 ( 0 )048.530.98
7950010000.948.09 ( 0.7 )2.94 ( 0.09 )1 ( 0 )0.0451.150.94
80100010000.945.6 ( 0.72 )1.63 ( 0.08 )1 ( 0 )0.0749.970.91
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 24.29 ( 0.42 ) & 2.65 ( 0.09 ) & 1 ( 0 ) & 0.07 & 27.64 & 0.88\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 21.42 ( 0.42 ) & 1.49 ( 0.08 ) & 1 ( 0 ) & 0.13 & 25.93 & 0.82\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 1 ( 0 ) & 6 ( 0 ) & 1 ( 0 ) & NaN & 0.00 & NaN\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 47.48 ( 0.72 ) & 4.95 ( 0.08 ) & 1 ( 0 ) & 0 & 48.53 & 0.98\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 48.09 ( 0.7 ) & 2.94 ( 0.09 ) & 1 ( 0 ) & 0.04 & 51.15 & 0.94\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 45.6 ( 0.72 ) & 1.63 ( 0.08 ) & 1 ( 0 ) & 0.07 & 49.97 & 0.91\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 24.29 ( 0.42 ) | 2.65 ( 0.09 ) | 1 ( 0 ) | 0.07 | 27.64 | 0.88 |\n", + "| 76 | 1000 | 500 | 0.9 | 21.42 ( 0.42 ) | 1.49 ( 0.08 ) | 1 ( 0 ) | 0.13 | 25.93 | 0.82 |\n", + "| 77 | 50 | 1000 | 0.9 | 1 ( 0 ) | 6 ( 0 ) | 1 ( 0 ) | NaN | 0.00 | NaN |\n", + "| 78 | 100 | 1000 | 0.9 | 47.48 ( 0.72 ) | 4.95 ( 0.08 ) | 1 ( 0 ) | 0 | 48.53 | 0.98 |\n", + "| 79 | 500 | 1000 | 0.9 | 48.09 ( 0.7 ) | 2.94 ( 0.09 ) | 1 ( 0 ) | 0.04 | 51.15 | 0.94 |\n", + "| 80 | 1000 | 1000 | 0.9 | 45.6 ( 0.72 ) | 1.63 ( 0.08 ) | 1 ( 0 ) | 0.07 | 49.97 | 0.91 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select FDR \n", + "75 500 500 0.9 24.29 ( 0.42 ) 2.65 ( 0.09 ) 1 ( 0 ) 0.07 27.64 0.88\n", + "76 1000 500 0.9 21.42 ( 0.42 ) 1.49 ( 0.08 ) 1 ( 0 ) 0.13 25.93 0.82\n", + "77 50 1000 0.9 1 ( 0 ) 6 ( 0 ) 1 ( 0 ) NaN 0.00 NaN\n", + "78 100 1000 0.9 47.48 ( 0.72 ) 4.95 ( 0.08 ) 1 ( 0 ) 0 48.53 0.98\n", + "79 500 1000 0.9 48.09 ( 0.7 ) 2.94 ( 0.09 ) 1 ( 0 ) 0.04 51.15 0.94\n", + "80 1000 1000 0.9 45.6 ( 0.72 ) 1.63 ( 0.08 ) 1 ( 0 ) 0.07 49.97 0.91" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_block <- apply(table_block,2,as.character)\n", + "rownames(result.table_block) = rownames(table_block)\n", + "result.table_block = as.data.frame(result.table_block)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_block$n = tidyr::extract_numeric(result.table_block$n)\n", + "result.table_block$p = tidyr::extract_numeric(result.table_block$p)\n", + "result.table_block$ratio = result.table_block$p / result.table_block$n\n", + "\n", + "result.table_block = result.table_block[c('n', 'p', 'rou', 'ratio', 'Stab', 'ROC', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_block)[1:4] = c('N', 'P', 'Corr', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_block$Stab = as.numeric(as.character(result.table_block$Stab))\n", + "result.table_block$ROC_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_block$ROC))\n", + "result.table_block$FP_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_block$FP))\n", + "result.table_block$FN_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_block$FN))\n", + "result.table_block$num_select = as.numeric(as.character(result.table_block$num_select))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 20 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
150 500.1 1NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
550 1000.1 2NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
950 5000.110NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
135010000.120NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
1750 500.3 1NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
2150 1000.3 2NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
2550 5000.310NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
295010000.320NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
3350 500.5 1NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
3750 1000.5 2NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
4150 5000.510NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
455010000.520NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
4950 500.7 1NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
5350 1000.7 2NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
5750 5000.710NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
615010000.720NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
6550 500.9 1NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
6950 1000.9 2NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
7350 5000.910NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
775010000.920NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
\n" + ], + "text/latex": [ + "A data.frame: 20 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t5 & 50 & 100 & 0.1 & 2 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t9 & 50 & 500 & 0.1 & 10 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t13 & 50 & 1000 & 0.1 & 20 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t17 & 50 & 50 & 0.3 & 1 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t21 & 50 & 100 & 0.3 & 2 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t25 & 50 & 500 & 0.3 & 10 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t29 & 50 & 1000 & 0.3 & 20 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t33 & 50 & 50 & 0.5 & 1 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t37 & 50 & 100 & 0.5 & 2 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t41 & 50 & 500 & 0.5 & 10 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t45 & 50 & 1000 & 0.5 & 20 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t49 & 50 & 50 & 0.7 & 1 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t53 & 50 & 100 & 0.7 & 2 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t57 & 50 & 500 & 0.7 & 10 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t61 & 50 & 1000 & 0.7 & 20 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t65 & 50 & 50 & 0.9 & 1 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t69 & 50 & 100 & 0.9 & 2 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t73 & 50 & 500 & 0.9 & 10 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 20 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 5 | 50 | 100 | 0.1 | 2 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 9 | 50 | 500 | 0.1 | 10 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 13 | 50 | 1000 | 0.1 | 20 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 17 | 50 | 50 | 0.3 | 1 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 21 | 50 | 100 | 0.3 | 2 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 25 | 50 | 500 | 0.3 | 10 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 29 | 50 | 1000 | 0.3 | 20 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 33 | 50 | 50 | 0.5 | 1 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 37 | 50 | 100 | 0.5 | 2 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 41 | 50 | 500 | 0.5 | 10 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 45 | 50 | 1000 | 0.5 | 20 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 49 | 50 | 50 | 0.7 | 1 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 53 | 50 | 100 | 0.7 | 2 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 57 | 50 | 500 | 0.7 | 10 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 61 | 50 | 1000 | 0.7 | 20 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 65 | 50 | 50 | 0.9 | 1 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 69 | 50 | 100 | 0.9 | 2 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 73 | 50 | 500 | 0.9 | 10 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 77 | 50 | 1000 | 0.9 | 20 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select FDR ROC_mean\n", + "1 50 50 0.1 1 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "5 50 100 0.1 2 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "9 50 500 0.1 10 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "13 50 1000 0.1 20 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "17 50 50 0.3 1 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "21 50 100 0.3 2 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "25 50 500 0.3 10 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "29 50 1000 0.3 20 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "33 50 50 0.5 1 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "37 50 100 0.5 2 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "41 50 500 0.5 10 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "45 50 1000 0.5 20 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "49 50 50 0.7 1 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "53 50 100 0.7 2 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "57 50 500 0.7 10 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "61 50 1000 0.7 20 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "65 50 50 0.9 1 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "69 50 100 0.9 2 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "73 50 500 0.9 10 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "77 50 1000 0.9 20 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + " FP_mean FN_mean\n", + "1 1 6 \n", + "5 1 6 \n", + "9 1 6 \n", + "13 1 6 \n", + "17 1 6 \n", + "21 1 6 \n", + "25 1 6 \n", + "29 1 6 \n", + "33 1 6 \n", + "37 1 6 \n", + "41 1 6 \n", + "45 1 6 \n", + "49 1 6 \n", + "53 1 6 \n", + "57 1 6 \n", + "61 1 6 \n", + "65 1 6 \n", + "69 1 6 \n", + "73 1 6 \n", + "77 1 6 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check whether missing values exists\n", + "result.table_block[rowSums(is.na(result.table_block)) > 0,]" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 500.11.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 11.006.00
2 100 500.10.500.011 ( 0 )2.4 ( 0.16 ) 5.3 ( 0.11 ) 3.000.7812.405.30
3 500 500.10.100.121 ( 0 )2.96 ( 0.21 )4.29 ( 0.15 )4.630.6212.964.29
41000 500.10.050.331 ( 0 )3.28 ( 0.21 )3.04 ( 0.12 )6.240.4913.283.04
5 501000.12.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 11.006.00
6 1001000.11.000.001 ( 0 )5.09 ( 0.21 )5.6 ( 0.09 ) 5.480.9315.095.60
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t2 & 100 & 50 & 0.1 & 0.50 & 0.01 & 1 ( 0 ) & 2.4 ( 0.16 ) & 5.3 ( 0.11 ) & 3.00 & 0.78 & 1 & 2.40 & 5.30\\\\\n", + "\t3 & 500 & 50 & 0.1 & 0.10 & 0.12 & 1 ( 0 ) & 2.96 ( 0.21 ) & 4.29 ( 0.15 ) & 4.63 & 0.62 & 1 & 2.96 & 4.29\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 0.05 & 0.33 & 1 ( 0 ) & 3.28 ( 0.21 ) & 3.04 ( 0.12 ) & 6.24 & 0.49 & 1 & 3.28 & 3.04\\\\\n", + "\t5 & 50 & 100 & 0.1 & 2.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t6 & 100 & 100 & 0.1 & 1.00 & 0.00 & 1 ( 0 ) & 5.09 ( 0.21 ) & 5.6 ( 0.09 ) & 5.48 & 0.93 & 1 & 5.09 & 5.60\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 2 | 100 | 50 | 0.1 | 0.50 | 0.01 | 1 ( 0 ) | 2.4 ( 0.16 ) | 5.3 ( 0.11 ) | 3.00 | 0.78 | 1 | 2.40 | 5.30 |\n", + "| 3 | 500 | 50 | 0.1 | 0.10 | 0.12 | 1 ( 0 ) | 2.96 ( 0.21 ) | 4.29 ( 0.15 ) | 4.63 | 0.62 | 1 | 2.96 | 4.29 |\n", + "| 4 | 1000 | 50 | 0.1 | 0.05 | 0.33 | 1 ( 0 ) | 3.28 ( 0.21 ) | 3.04 ( 0.12 ) | 6.24 | 0.49 | 1 | 3.28 | 3.04 |\n", + "| 5 | 50 | 100 | 0.1 | 2.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 6 | 100 | 100 | 0.1 | 1.00 | 0.00 | 1 ( 0 ) | 5.09 ( 0.21 ) | 5.6 ( 0.09 ) | 5.48 | 0.93 | 1 | 5.09 | 5.60 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select FDR \n", + "1 50 50 0.1 1.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 NaN \n", + "2 100 50 0.1 0.50 0.01 1 ( 0 ) 2.4 ( 0.16 ) 5.3 ( 0.11 ) 3.00 0.78\n", + "3 500 50 0.1 0.10 0.12 1 ( 0 ) 2.96 ( 0.21 ) 4.29 ( 0.15 ) 4.63 0.62\n", + "4 1000 50 0.1 0.05 0.33 1 ( 0 ) 3.28 ( 0.21 ) 3.04 ( 0.12 ) 6.24 0.49\n", + "5 50 100 0.1 2.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 NaN \n", + "6 100 100 0.1 1.00 0.00 1 ( 0 ) 5.09 ( 0.21 ) 5.6 ( 0.09 ) 5.48 0.93\n", + " ROC_mean FP_mean FN_mean\n", + "1 1 1.00 6.00 \n", + "2 1 2.40 5.30 \n", + "3 1 2.96 4.29 \n", + "4 1 3.28 3.04 \n", + "5 1 1.00 6.00 \n", + "6 1 5.09 5.60 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
75 500 5000.9 1.00.071 ( 0 )24.29 ( 0.42 )2.65 ( 0.09 )27.640.88124.292.65
761000 5000.9 0.50.131 ( 0 )21.42 ( 0.42 )1.49 ( 0.08 )25.930.82121.421.49
77 5010000.920.0 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
78 10010000.910.00.001 ( 0 )47.48 ( 0.72 )4.95 ( 0.08 )48.530.98147.484.95
79 50010000.9 2.00.041 ( 0 )48.09 ( 0.7 ) 2.94 ( 0.09 )51.150.94148.092.94
80100010000.9 1.00.071 ( 0 )45.6 ( 0.72 ) 1.63 ( 0.08 )49.970.91145.601.63
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 1.0 & 0.07 & 1 ( 0 ) & 24.29 ( 0.42 ) & 2.65 ( 0.09 ) & 27.64 & 0.88 & 1 & 24.29 & 2.65\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.5 & 0.13 & 1 ( 0 ) & 21.42 ( 0.42 ) & 1.49 ( 0.08 ) & 25.93 & 0.82 & 1 & 21.42 & 1.49\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.0 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.0 & 0.00 & 1 ( 0 ) & 47.48 ( 0.72 ) & 4.95 ( 0.08 ) & 48.53 & 0.98 & 1 & 47.48 & 4.95\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.0 & 0.04 & 1 ( 0 ) & 48.09 ( 0.7 ) & 2.94 ( 0.09 ) & 51.15 & 0.94 & 1 & 48.09 & 2.94\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.0 & 0.07 & 1 ( 0 ) & 45.6 ( 0.72 ) & 1.63 ( 0.08 ) & 49.97 & 0.91 & 1 & 45.60 & 1.63\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 1.0 | 0.07 | 1 ( 0 ) | 24.29 ( 0.42 ) | 2.65 ( 0.09 ) | 27.64 | 0.88 | 1 | 24.29 | 2.65 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.5 | 0.13 | 1 ( 0 ) | 21.42 ( 0.42 ) | 1.49 ( 0.08 ) | 25.93 | 0.82 | 1 | 21.42 | 1.49 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.0 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.0 | 0.00 | 1 ( 0 ) | 47.48 ( 0.72 ) | 4.95 ( 0.08 ) | 48.53 | 0.98 | 1 | 47.48 | 4.95 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.0 | 0.04 | 1 ( 0 ) | 48.09 ( 0.7 ) | 2.94 ( 0.09 ) | 51.15 | 0.94 | 1 | 48.09 | 2.94 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.0 | 0.07 | 1 ( 0 ) | 45.6 ( 0.72 ) | 1.63 ( 0.08 ) | 49.97 | 0.91 | 1 | 45.60 | 1.63 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select\n", + "75 500 500 0.9 1.0 0.07 1 ( 0 ) 24.29 ( 0.42 ) 2.65 ( 0.09 ) 27.64 \n", + "76 1000 500 0.9 0.5 0.13 1 ( 0 ) 21.42 ( 0.42 ) 1.49 ( 0.08 ) 25.93 \n", + "77 50 1000 0.9 20.0 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "78 100 1000 0.9 10.0 0.00 1 ( 0 ) 47.48 ( 0.72 ) 4.95 ( 0.08 ) 48.53 \n", + "79 500 1000 0.9 2.0 0.04 1 ( 0 ) 48.09 ( 0.7 ) 2.94 ( 0.09 ) 51.15 \n", + "80 1000 1000 0.9 1.0 0.07 1 ( 0 ) 45.6 ( 0.72 ) 1.63 ( 0.08 ) 49.97 \n", + " FDR ROC_mean FP_mean FN_mean\n", + "75 0.88 1 24.29 2.65 \n", + "76 0.82 1 21.42 1.49 \n", + "77 NaN 1 1.00 6.00 \n", + "78 0.98 1 47.48 4.95 \n", + "79 0.94 1 48.09 2.94 \n", + "80 0.91 1 45.60 1.63 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(result.table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 80 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 500.1 1.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
2 100 500.1 0.500.011 ( 0 )2.4 ( 0.16 ) 5.3 ( 0.11 ) 3.000.781 2.405.30
3 500 500.1 0.100.121 ( 0 )2.96 ( 0.21 ) 4.29 ( 0.15 ) 4.630.621 2.964.29
41000 500.1 0.050.331 ( 0 )3.28 ( 0.21 ) 3.04 ( 0.12 ) 6.240.491 3.283.04
5 50 1000.1 2.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
6 100 1000.1 1.000.001 ( 0 )5.09 ( 0.21 ) 5.6 ( 0.09 ) 5.480.931 5.095.60
7 500 1000.1 0.200.101 ( 0 )5.39 ( 0.29 ) 4.05 ( 0.16 ) 7.340.721 5.394.05
81000 1000.1 0.100.251 ( 0 )5.43 ( 0.26 ) 2.89 ( 0.14 ) 8.540.621 5.432.89
9 50 5000.110.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
10 100 5000.1 5.000.001 ( 0 )24.14 ( 0.56 )5.35 ( 0.11 )24.790.97124.145.35
11 500 5000.1 1.000.031 ( 0 )24.48 ( 0.54 )4.25 ( 0.16 )26.230.93124.484.25
121000 5000.1 0.500.071 ( 0 )24.08 ( 0.54 )3.1 ( 0.16 ) 26.980.89124.083.10
13 5010000.120.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
14 10010000.110.000.001 ( 0 )48.22 ( 0.62 )5.53 ( 0.09 )48.690.99148.225.53
15 50010000.1 2.000.011 ( 0 )50.18 ( 0.78 )4.63 ( 0.12 )51.550.97150.184.63
16100010000.1 1.000.041 ( 0 )49.43 ( 0.66 )3.23 ( 0.14 )52.200.95149.433.23
17 50 500.3 1.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
18 100 500.3 0.500.021 ( 0 )2.13 ( 0.12 ) 5.14 ( 0.08 ) 2.960.711 2.135.14
19 500 500.3 0.100.461 ( 0 )1.43 ( 0.11 ) 2.59 ( 0.11 ) 4.840.271 1.432.59
201000 500.3 0.050.601 ( 0 )1.44 ( 0.13 ) 1.35 ( 0.08 ) 6.090.211 1.441.35
21 50 1000.3 2.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
22 100 1000.3 1.000.011 ( 0 )4.84 ( 0.18 ) 5.1 ( 0.08 ) 5.730.841 4.845.10
23 500 1000.3 0.200.281 ( 0 )3.77 ( 0.17 ) 2.76 ( 0.1 ) 7.010.521 3.772.76
241000 1000.3 0.100.441 ( 0 )3.43 ( 0.18 ) 1.5 ( 0.09 ) 7.930.411 3.431.50
25 50 5000.310.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
26 100 5000.3 5.000.001 ( 0 )24.49 ( 0.47 )5.11 ( 0.08 )25.380.96124.495.11
27 500 5000.3 1.000.061 ( 0 )23.05 ( 0.49 )3.15 ( 0.09 )25.900.89123.053.15
281000 5000.3 0.500.111 ( 0 )22.18 ( 0.49 )1.91 ( 0.09 )26.270.84122.181.91
29 5010000.320.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
30 10010000.310.000.001 ( 0 )46.96 ( 0.66 )5.18 ( 0.08 )47.780.98146.965.18
51 500 500.7 0.100.531 ( 0 )1.29 ( 0.11 ) 2.25 ( 0.08 ) 5.040.231 1.292.25
521000 500.7 0.050.631 ( 0 )1.29 ( 0.11 ) 1.3 ( 0.08 ) 5.990.191 1.291.30
53 50 1000.7 2.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
54 100 1000.7 1.000.031 ( 0 )4.35 ( 0.18 ) 4.98 ( 0.07 ) 5.370.8 1 4.354.98
55 500 1000.7 0.200.341 ( 0 )3.46 ( 0.18 ) 2.53 ( 0.09 ) 6.930.471 3.462.53
561000 1000.7 0.100.481 ( 0 )3.04 ( 0.15 ) 1.27 ( 0.08 ) 7.770.371 3.041.27
57 50 5000.710.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
58 100 5000.7 5.000.011 ( 0 )23.78 ( 0.44 )4.93 ( 0.08 )24.850.96123.784.93
59 500 5000.7 1.000.081 ( 0 )23.14 ( 0.52 )2.73 ( 0.09 )26.410.87123.142.73
601000 5000.7 0.500.131 ( 0 )21.58 ( 0.49 )1.57 ( 0.08 )26.010.82121.581.57
61 5010000.720.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
62 10010000.710.000.001 ( 0 )47.84 ( 0.72 )5 ( 0.09 ) 48.840.98147.845.00
63 50010000.7 2.000.041 ( 0 )47.31 ( 0.68 )2.9 ( 0.1 ) 50.410.94147.312.90
64100010000.7 1.000.061 ( 0 )46.57 ( 0.73 )1.71 ( 0.08 )50.860.91146.571.71
65 50 500.9 1.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
66 100 500.9 0.500.051 ( 0 )2.2 ( 0.13 ) 5 ( 0.08 ) 3.190.661 2.205.00
67 500 500.9 0.100.531 ( 0 )1.28 ( 0.1 ) 2.32 ( 0.08 ) 4.960.231 1.282.32
681000 500.9 0.050.671 ( 0 )0.93 ( 0.09 ) 1.31 ( 0.09 ) 5.620.151 0.931.31
69 50 1000.9 2.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
70 100 1000.9 1.000.041 ( 0 )4.24 ( 0.16 ) 4.83 ( 0.09 ) 5.400.791 4.244.83
71 500 1000.9 0.200.361 ( 0 )3.54 ( 0.19 ) 2.29 ( 0.09 ) 7.250.461 3.542.29
721000 1000.9 0.100.531 ( 0 )2.53 ( 0.14 ) 1.31 ( 0.08 ) 7.220.331 2.531.31
73 50 5000.910.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
74 100 5000.9 5.000.011 ( 0 )23.63 ( 0.45 )5.04 ( 0.08 )24.590.96123.635.04
75 500 5000.9 1.000.071 ( 0 )24.29 ( 0.42 )2.65 ( 0.09 )27.640.88124.292.65
761000 5000.9 0.500.131 ( 0 )21.42 ( 0.42 )1.49 ( 0.08 )25.930.82121.421.49
77 5010000.920.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
78 10010000.910.000.001 ( 0 )47.48 ( 0.72 )4.95 ( 0.08 )48.530.98147.484.95
79 50010000.9 2.000.041 ( 0 )48.09 ( 0.7 ) 2.94 ( 0.09 )51.150.94148.092.94
80100010000.9 1.000.071 ( 0 )45.6 ( 0.72 ) 1.63 ( 0.08 )49.970.91145.601.63
\n" + ], + "text/latex": [ + "A data.frame: 80 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t2 & 100 & 50 & 0.1 & 0.50 & 0.01 & 1 ( 0 ) & 2.4 ( 0.16 ) & 5.3 ( 0.11 ) & 3.00 & 0.78 & 1 & 2.40 & 5.30\\\\\n", + "\t3 & 500 & 50 & 0.1 & 0.10 & 0.12 & 1 ( 0 ) & 2.96 ( 0.21 ) & 4.29 ( 0.15 ) & 4.63 & 0.62 & 1 & 2.96 & 4.29\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 0.05 & 0.33 & 1 ( 0 ) & 3.28 ( 0.21 ) & 3.04 ( 0.12 ) & 6.24 & 0.49 & 1 & 3.28 & 3.04\\\\\n", + "\t5 & 50 & 100 & 0.1 & 2.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t6 & 100 & 100 & 0.1 & 1.00 & 0.00 & 1 ( 0 ) & 5.09 ( 0.21 ) & 5.6 ( 0.09 ) & 5.48 & 0.93 & 1 & 5.09 & 5.60\\\\\n", + "\t7 & 500 & 100 & 0.1 & 0.20 & 0.10 & 1 ( 0 ) & 5.39 ( 0.29 ) & 4.05 ( 0.16 ) & 7.34 & 0.72 & 1 & 5.39 & 4.05\\\\\n", + "\t8 & 1000 & 100 & 0.1 & 0.10 & 0.25 & 1 ( 0 ) & 5.43 ( 0.26 ) & 2.89 ( 0.14 ) & 8.54 & 0.62 & 1 & 5.43 & 2.89\\\\\n", + "\t9 & 50 & 500 & 0.1 & 10.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t10 & 100 & 500 & 0.1 & 5.00 & 0.00 & 1 ( 0 ) & 24.14 ( 0.56 ) & 5.35 ( 0.11 ) & 24.79 & 0.97 & 1 & 24.14 & 5.35\\\\\n", + "\t11 & 500 & 500 & 0.1 & 1.00 & 0.03 & 1 ( 0 ) & 24.48 ( 0.54 ) & 4.25 ( 0.16 ) & 26.23 & 0.93 & 1 & 24.48 & 4.25\\\\\n", + "\t12 & 1000 & 500 & 0.1 & 0.50 & 0.07 & 1 ( 0 ) & 24.08 ( 0.54 ) & 3.1 ( 0.16 ) & 26.98 & 0.89 & 1 & 24.08 & 3.10\\\\\n", + "\t13 & 50 & 1000 & 0.1 & 20.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t14 & 100 & 1000 & 0.1 & 10.00 & 0.00 & 1 ( 0 ) & 48.22 ( 0.62 ) & 5.53 ( 0.09 ) & 48.69 & 0.99 & 1 & 48.22 & 5.53\\\\\n", + "\t15 & 500 & 1000 & 0.1 & 2.00 & 0.01 & 1 ( 0 ) & 50.18 ( 0.78 ) & 4.63 ( 0.12 ) & 51.55 & 0.97 & 1 & 50.18 & 4.63\\\\\n", + "\t16 & 1000 & 1000 & 0.1 & 1.00 & 0.04 & 1 ( 0 ) & 49.43 ( 0.66 ) & 3.23 ( 0.14 ) & 52.20 & 0.95 & 1 & 49.43 & 3.23\\\\\n", + "\t17 & 50 & 50 & 0.3 & 1.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t18 & 100 & 50 & 0.3 & 0.50 & 0.02 & 1 ( 0 ) & 2.13 ( 0.12 ) & 5.14 ( 0.08 ) & 2.96 & 0.71 & 1 & 2.13 & 5.14\\\\\n", + "\t19 & 500 & 50 & 0.3 & 0.10 & 0.46 & 1 ( 0 ) & 1.43 ( 0.11 ) & 2.59 ( 0.11 ) & 4.84 & 0.27 & 1 & 1.43 & 2.59\\\\\n", + "\t20 & 1000 & 50 & 0.3 & 0.05 & 0.60 & 1 ( 0 ) & 1.44 ( 0.13 ) & 1.35 ( 0.08 ) & 6.09 & 0.21 & 1 & 1.44 & 1.35\\\\\n", + "\t21 & 50 & 100 & 0.3 & 2.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t22 & 100 & 100 & 0.3 & 1.00 & 0.01 & 1 ( 0 ) & 4.84 ( 0.18 ) & 5.1 ( 0.08 ) & 5.73 & 0.84 & 1 & 4.84 & 5.10\\\\\n", + "\t23 & 500 & 100 & 0.3 & 0.20 & 0.28 & 1 ( 0 ) & 3.77 ( 0.17 ) & 2.76 ( 0.1 ) & 7.01 & 0.52 & 1 & 3.77 & 2.76\\\\\n", + "\t24 & 1000 & 100 & 0.3 & 0.10 & 0.44 & 1 ( 0 ) & 3.43 ( 0.18 ) & 1.5 ( 0.09 ) & 7.93 & 0.41 & 1 & 3.43 & 1.50\\\\\n", + "\t25 & 50 & 500 & 0.3 & 10.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t26 & 100 & 500 & 0.3 & 5.00 & 0.00 & 1 ( 0 ) & 24.49 ( 0.47 ) & 5.11 ( 0.08 ) & 25.38 & 0.96 & 1 & 24.49 & 5.11\\\\\n", + "\t27 & 500 & 500 & 0.3 & 1.00 & 0.06 & 1 ( 0 ) & 23.05 ( 0.49 ) & 3.15 ( 0.09 ) & 25.90 & 0.89 & 1 & 23.05 & 3.15\\\\\n", + "\t28 & 1000 & 500 & 0.3 & 0.50 & 0.11 & 1 ( 0 ) & 22.18 ( 0.49 ) & 1.91 ( 0.09 ) & 26.27 & 0.84 & 1 & 22.18 & 1.91\\\\\n", + "\t29 & 50 & 1000 & 0.3 & 20.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t30 & 100 & 1000 & 0.3 & 10.00 & 0.00 & 1 ( 0 ) & 46.96 ( 0.66 ) & 5.18 ( 0.08 ) & 47.78 & 0.98 & 1 & 46.96 & 5.18\\\\\n", + "\t⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮\\\\\n", + "\t51 & 500 & 50 & 0.7 & 0.10 & 0.53 & 1 ( 0 ) & 1.29 ( 0.11 ) & 2.25 ( 0.08 ) & 5.04 & 0.23 & 1 & 1.29 & 2.25\\\\\n", + "\t52 & 1000 & 50 & 0.7 & 0.05 & 0.63 & 1 ( 0 ) & 1.29 ( 0.11 ) & 1.3 ( 0.08 ) & 5.99 & 0.19 & 1 & 1.29 & 1.30\\\\\n", + "\t53 & 50 & 100 & 0.7 & 2.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t54 & 100 & 100 & 0.7 & 1.00 & 0.03 & 1 ( 0 ) & 4.35 ( 0.18 ) & 4.98 ( 0.07 ) & 5.37 & 0.8 & 1 & 4.35 & 4.98\\\\\n", + "\t55 & 500 & 100 & 0.7 & 0.20 & 0.34 & 1 ( 0 ) & 3.46 ( 0.18 ) & 2.53 ( 0.09 ) & 6.93 & 0.47 & 1 & 3.46 & 2.53\\\\\n", + "\t56 & 1000 & 100 & 0.7 & 0.10 & 0.48 & 1 ( 0 ) & 3.04 ( 0.15 ) & 1.27 ( 0.08 ) & 7.77 & 0.37 & 1 & 3.04 & 1.27\\\\\n", + "\t57 & 50 & 500 & 0.7 & 10.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t58 & 100 & 500 & 0.7 & 5.00 & 0.01 & 1 ( 0 ) & 23.78 ( 0.44 ) & 4.93 ( 0.08 ) & 24.85 & 0.96 & 1 & 23.78 & 4.93\\\\\n", + "\t59 & 500 & 500 & 0.7 & 1.00 & 0.08 & 1 ( 0 ) & 23.14 ( 0.52 ) & 2.73 ( 0.09 ) & 26.41 & 0.87 & 1 & 23.14 & 2.73\\\\\n", + "\t60 & 1000 & 500 & 0.7 & 0.50 & 0.13 & 1 ( 0 ) & 21.58 ( 0.49 ) & 1.57 ( 0.08 ) & 26.01 & 0.82 & 1 & 21.58 & 1.57\\\\\n", + "\t61 & 50 & 1000 & 0.7 & 20.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t62 & 100 & 1000 & 0.7 & 10.00 & 0.00 & 1 ( 0 ) & 47.84 ( 0.72 ) & 5 ( 0.09 ) & 48.84 & 0.98 & 1 & 47.84 & 5.00\\\\\n", + "\t63 & 500 & 1000 & 0.7 & 2.00 & 0.04 & 1 ( 0 ) & 47.31 ( 0.68 ) & 2.9 ( 0.1 ) & 50.41 & 0.94 & 1 & 47.31 & 2.90\\\\\n", + "\t64 & 1000 & 1000 & 0.7 & 1.00 & 0.06 & 1 ( 0 ) & 46.57 ( 0.73 ) & 1.71 ( 0.08 ) & 50.86 & 0.91 & 1 & 46.57 & 1.71\\\\\n", + "\t65 & 50 & 50 & 0.9 & 1.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t66 & 100 & 50 & 0.9 & 0.50 & 0.05 & 1 ( 0 ) & 2.2 ( 0.13 ) & 5 ( 0.08 ) & 3.19 & 0.66 & 1 & 2.20 & 5.00\\\\\n", + "\t67 & 500 & 50 & 0.9 & 0.10 & 0.53 & 1 ( 0 ) & 1.28 ( 0.1 ) & 2.32 ( 0.08 ) & 4.96 & 0.23 & 1 & 1.28 & 2.32\\\\\n", + "\t68 & 1000 & 50 & 0.9 & 0.05 & 0.67 & 1 ( 0 ) & 0.93 ( 0.09 ) & 1.31 ( 0.09 ) & 5.62 & 0.15 & 1 & 0.93 & 1.31\\\\\n", + "\t69 & 50 & 100 & 0.9 & 2.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t70 & 100 & 100 & 0.9 & 1.00 & 0.04 & 1 ( 0 ) & 4.24 ( 0.16 ) & 4.83 ( 0.09 ) & 5.40 & 0.79 & 1 & 4.24 & 4.83\\\\\n", + "\t71 & 500 & 100 & 0.9 & 0.20 & 0.36 & 1 ( 0 ) & 3.54 ( 0.19 ) & 2.29 ( 0.09 ) & 7.25 & 0.46 & 1 & 3.54 & 2.29\\\\\n", + "\t72 & 1000 & 100 & 0.9 & 0.10 & 0.53 & 1 ( 0 ) & 2.53 ( 0.14 ) & 1.31 ( 0.08 ) & 7.22 & 0.33 & 1 & 2.53 & 1.31\\\\\n", + "\t73 & 50 & 500 & 0.9 & 10.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t74 & 100 & 500 & 0.9 & 5.00 & 0.01 & 1 ( 0 ) & 23.63 ( 0.45 ) & 5.04 ( 0.08 ) & 24.59 & 0.96 & 1 & 23.63 & 5.04\\\\\n", + "\t75 & 500 & 500 & 0.9 & 1.00 & 0.07 & 1 ( 0 ) & 24.29 ( 0.42 ) & 2.65 ( 0.09 ) & 27.64 & 0.88 & 1 & 24.29 & 2.65\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.50 & 0.13 & 1 ( 0 ) & 21.42 ( 0.42 ) & 1.49 ( 0.08 ) & 25.93 & 0.82 & 1 & 21.42 & 1.49\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.00 & 0.00 & 1 ( 0 ) & 47.48 ( 0.72 ) & 4.95 ( 0.08 ) & 48.53 & 0.98 & 1 & 47.48 & 4.95\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.00 & 0.04 & 1 ( 0 ) & 48.09 ( 0.7 ) & 2.94 ( 0.09 ) & 51.15 & 0.94 & 1 & 48.09 & 2.94\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.00 & 0.07 & 1 ( 0 ) & 45.6 ( 0.72 ) & 1.63 ( 0.08 ) & 49.97 & 0.91 & 1 & 45.60 & 1.63\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 80 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 2 | 100 | 50 | 0.1 | 0.50 | 0.01 | 1 ( 0 ) | 2.4 ( 0.16 ) | 5.3 ( 0.11 ) | 3.00 | 0.78 | 1 | 2.40 | 5.30 |\n", + "| 3 | 500 | 50 | 0.1 | 0.10 | 0.12 | 1 ( 0 ) | 2.96 ( 0.21 ) | 4.29 ( 0.15 ) | 4.63 | 0.62 | 1 | 2.96 | 4.29 |\n", + "| 4 | 1000 | 50 | 0.1 | 0.05 | 0.33 | 1 ( 0 ) | 3.28 ( 0.21 ) | 3.04 ( 0.12 ) | 6.24 | 0.49 | 1 | 3.28 | 3.04 |\n", + "| 5 | 50 | 100 | 0.1 | 2.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 6 | 100 | 100 | 0.1 | 1.00 | 0.00 | 1 ( 0 ) | 5.09 ( 0.21 ) | 5.6 ( 0.09 ) | 5.48 | 0.93 | 1 | 5.09 | 5.60 |\n", + "| 7 | 500 | 100 | 0.1 | 0.20 | 0.10 | 1 ( 0 ) | 5.39 ( 0.29 ) | 4.05 ( 0.16 ) | 7.34 | 0.72 | 1 | 5.39 | 4.05 |\n", + "| 8 | 1000 | 100 | 0.1 | 0.10 | 0.25 | 1 ( 0 ) | 5.43 ( 0.26 ) | 2.89 ( 0.14 ) | 8.54 | 0.62 | 1 | 5.43 | 2.89 |\n", + "| 9 | 50 | 500 | 0.1 | 10.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 10 | 100 | 500 | 0.1 | 5.00 | 0.00 | 1 ( 0 ) | 24.14 ( 0.56 ) | 5.35 ( 0.11 ) | 24.79 | 0.97 | 1 | 24.14 | 5.35 |\n", + "| 11 | 500 | 500 | 0.1 | 1.00 | 0.03 | 1 ( 0 ) | 24.48 ( 0.54 ) | 4.25 ( 0.16 ) | 26.23 | 0.93 | 1 | 24.48 | 4.25 |\n", + "| 12 | 1000 | 500 | 0.1 | 0.50 | 0.07 | 1 ( 0 ) | 24.08 ( 0.54 ) | 3.1 ( 0.16 ) | 26.98 | 0.89 | 1 | 24.08 | 3.10 |\n", + "| 13 | 50 | 1000 | 0.1 | 20.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 14 | 100 | 1000 | 0.1 | 10.00 | 0.00 | 1 ( 0 ) | 48.22 ( 0.62 ) | 5.53 ( 0.09 ) | 48.69 | 0.99 | 1 | 48.22 | 5.53 |\n", + "| 15 | 500 | 1000 | 0.1 | 2.00 | 0.01 | 1 ( 0 ) | 50.18 ( 0.78 ) | 4.63 ( 0.12 ) | 51.55 | 0.97 | 1 | 50.18 | 4.63 |\n", + "| 16 | 1000 | 1000 | 0.1 | 1.00 | 0.04 | 1 ( 0 ) | 49.43 ( 0.66 ) | 3.23 ( 0.14 ) | 52.20 | 0.95 | 1 | 49.43 | 3.23 |\n", + "| 17 | 50 | 50 | 0.3 | 1.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 18 | 100 | 50 | 0.3 | 0.50 | 0.02 | 1 ( 0 ) | 2.13 ( 0.12 ) | 5.14 ( 0.08 ) | 2.96 | 0.71 | 1 | 2.13 | 5.14 |\n", + "| 19 | 500 | 50 | 0.3 | 0.10 | 0.46 | 1 ( 0 ) | 1.43 ( 0.11 ) | 2.59 ( 0.11 ) | 4.84 | 0.27 | 1 | 1.43 | 2.59 |\n", + "| 20 | 1000 | 50 | 0.3 | 0.05 | 0.60 | 1 ( 0 ) | 1.44 ( 0.13 ) | 1.35 ( 0.08 ) | 6.09 | 0.21 | 1 | 1.44 | 1.35 |\n", + "| 21 | 50 | 100 | 0.3 | 2.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 22 | 100 | 100 | 0.3 | 1.00 | 0.01 | 1 ( 0 ) | 4.84 ( 0.18 ) | 5.1 ( 0.08 ) | 5.73 | 0.84 | 1 | 4.84 | 5.10 |\n", + "| 23 | 500 | 100 | 0.3 | 0.20 | 0.28 | 1 ( 0 ) | 3.77 ( 0.17 ) | 2.76 ( 0.1 ) | 7.01 | 0.52 | 1 | 3.77 | 2.76 |\n", + "| 24 | 1000 | 100 | 0.3 | 0.10 | 0.44 | 1 ( 0 ) | 3.43 ( 0.18 ) | 1.5 ( 0.09 ) | 7.93 | 0.41 | 1 | 3.43 | 1.50 |\n", + "| 25 | 50 | 500 | 0.3 | 10.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 26 | 100 | 500 | 0.3 | 5.00 | 0.00 | 1 ( 0 ) | 24.49 ( 0.47 ) | 5.11 ( 0.08 ) | 25.38 | 0.96 | 1 | 24.49 | 5.11 |\n", + "| 27 | 500 | 500 | 0.3 | 1.00 | 0.06 | 1 ( 0 ) | 23.05 ( 0.49 ) | 3.15 ( 0.09 ) | 25.90 | 0.89 | 1 | 23.05 | 3.15 |\n", + "| 28 | 1000 | 500 | 0.3 | 0.50 | 0.11 | 1 ( 0 ) | 22.18 ( 0.49 ) | 1.91 ( 0.09 ) | 26.27 | 0.84 | 1 | 22.18 | 1.91 |\n", + "| 29 | 50 | 1000 | 0.3 | 20.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 30 | 100 | 1000 | 0.3 | 10.00 | 0.00 | 1 ( 0 ) | 46.96 ( 0.66 ) | 5.18 ( 0.08 ) | 47.78 | 0.98 | 1 | 46.96 | 5.18 |\n", + "| ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ |\n", + "| 51 | 500 | 50 | 0.7 | 0.10 | 0.53 | 1 ( 0 ) | 1.29 ( 0.11 ) | 2.25 ( 0.08 ) | 5.04 | 0.23 | 1 | 1.29 | 2.25 |\n", + "| 52 | 1000 | 50 | 0.7 | 0.05 | 0.63 | 1 ( 0 ) | 1.29 ( 0.11 ) | 1.3 ( 0.08 ) | 5.99 | 0.19 | 1 | 1.29 | 1.30 |\n", + "| 53 | 50 | 100 | 0.7 | 2.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 54 | 100 | 100 | 0.7 | 1.00 | 0.03 | 1 ( 0 ) | 4.35 ( 0.18 ) | 4.98 ( 0.07 ) | 5.37 | 0.8 | 1 | 4.35 | 4.98 |\n", + "| 55 | 500 | 100 | 0.7 | 0.20 | 0.34 | 1 ( 0 ) | 3.46 ( 0.18 ) | 2.53 ( 0.09 ) | 6.93 | 0.47 | 1 | 3.46 | 2.53 |\n", + "| 56 | 1000 | 100 | 0.7 | 0.10 | 0.48 | 1 ( 0 ) | 3.04 ( 0.15 ) | 1.27 ( 0.08 ) | 7.77 | 0.37 | 1 | 3.04 | 1.27 |\n", + "| 57 | 50 | 500 | 0.7 | 10.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 58 | 100 | 500 | 0.7 | 5.00 | 0.01 | 1 ( 0 ) | 23.78 ( 0.44 ) | 4.93 ( 0.08 ) | 24.85 | 0.96 | 1 | 23.78 | 4.93 |\n", + "| 59 | 500 | 500 | 0.7 | 1.00 | 0.08 | 1 ( 0 ) | 23.14 ( 0.52 ) | 2.73 ( 0.09 ) | 26.41 | 0.87 | 1 | 23.14 | 2.73 |\n", + "| 60 | 1000 | 500 | 0.7 | 0.50 | 0.13 | 1 ( 0 ) | 21.58 ( 0.49 ) | 1.57 ( 0.08 ) | 26.01 | 0.82 | 1 | 21.58 | 1.57 |\n", + "| 61 | 50 | 1000 | 0.7 | 20.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 62 | 100 | 1000 | 0.7 | 10.00 | 0.00 | 1 ( 0 ) | 47.84 ( 0.72 ) | 5 ( 0.09 ) | 48.84 | 0.98 | 1 | 47.84 | 5.00 |\n", + "| 63 | 500 | 1000 | 0.7 | 2.00 | 0.04 | 1 ( 0 ) | 47.31 ( 0.68 ) | 2.9 ( 0.1 ) | 50.41 | 0.94 | 1 | 47.31 | 2.90 |\n", + "| 64 | 1000 | 1000 | 0.7 | 1.00 | 0.06 | 1 ( 0 ) | 46.57 ( 0.73 ) | 1.71 ( 0.08 ) | 50.86 | 0.91 | 1 | 46.57 | 1.71 |\n", + "| 65 | 50 | 50 | 0.9 | 1.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 66 | 100 | 50 | 0.9 | 0.50 | 0.05 | 1 ( 0 ) | 2.2 ( 0.13 ) | 5 ( 0.08 ) | 3.19 | 0.66 | 1 | 2.20 | 5.00 |\n", + "| 67 | 500 | 50 | 0.9 | 0.10 | 0.53 | 1 ( 0 ) | 1.28 ( 0.1 ) | 2.32 ( 0.08 ) | 4.96 | 0.23 | 1 | 1.28 | 2.32 |\n", + "| 68 | 1000 | 50 | 0.9 | 0.05 | 0.67 | 1 ( 0 ) | 0.93 ( 0.09 ) | 1.31 ( 0.09 ) | 5.62 | 0.15 | 1 | 0.93 | 1.31 |\n", + "| 69 | 50 | 100 | 0.9 | 2.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 70 | 100 | 100 | 0.9 | 1.00 | 0.04 | 1 ( 0 ) | 4.24 ( 0.16 ) | 4.83 ( 0.09 ) | 5.40 | 0.79 | 1 | 4.24 | 4.83 |\n", + "| 71 | 500 | 100 | 0.9 | 0.20 | 0.36 | 1 ( 0 ) | 3.54 ( 0.19 ) | 2.29 ( 0.09 ) | 7.25 | 0.46 | 1 | 3.54 | 2.29 |\n", + "| 72 | 1000 | 100 | 0.9 | 0.10 | 0.53 | 1 ( 0 ) | 2.53 ( 0.14 ) | 1.31 ( 0.08 ) | 7.22 | 0.33 | 1 | 2.53 | 1.31 |\n", + "| 73 | 50 | 500 | 0.9 | 10.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 74 | 100 | 500 | 0.9 | 5.00 | 0.01 | 1 ( 0 ) | 23.63 ( 0.45 ) | 5.04 ( 0.08 ) | 24.59 | 0.96 | 1 | 23.63 | 5.04 |\n", + "| 75 | 500 | 500 | 0.9 | 1.00 | 0.07 | 1 ( 0 ) | 24.29 ( 0.42 ) | 2.65 ( 0.09 ) | 27.64 | 0.88 | 1 | 24.29 | 2.65 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.50 | 0.13 | 1 ( 0 ) | 21.42 ( 0.42 ) | 1.49 ( 0.08 ) | 25.93 | 0.82 | 1 | 21.42 | 1.49 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.00 | 0.00 | 1 ( 0 ) | 47.48 ( 0.72 ) | 4.95 ( 0.08 ) | 48.53 | 0.98 | 1 | 47.48 | 4.95 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.00 | 0.04 | 1 ( 0 ) | 48.09 ( 0.7 ) | 2.94 ( 0.09 ) | 51.15 | 0.94 | 1 | 48.09 | 2.94 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.00 | 0.07 | 1 ( 0 ) | 45.6 ( 0.72 ) | 1.63 ( 0.08 ) | 49.97 | 0.91 | 1 | 45.60 | 1.63 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select\n", + "1 50 50 0.1 1.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "2 100 50 0.1 0.50 0.01 1 ( 0 ) 2.4 ( 0.16 ) 5.3 ( 0.11 ) 3.00 \n", + "3 500 50 0.1 0.10 0.12 1 ( 0 ) 2.96 ( 0.21 ) 4.29 ( 0.15 ) 4.63 \n", + "4 1000 50 0.1 0.05 0.33 1 ( 0 ) 3.28 ( 0.21 ) 3.04 ( 0.12 ) 6.24 \n", + "5 50 100 0.1 2.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "6 100 100 0.1 1.00 0.00 1 ( 0 ) 5.09 ( 0.21 ) 5.6 ( 0.09 ) 5.48 \n", + "7 500 100 0.1 0.20 0.10 1 ( 0 ) 5.39 ( 0.29 ) 4.05 ( 0.16 ) 7.34 \n", + "8 1000 100 0.1 0.10 0.25 1 ( 0 ) 5.43 ( 0.26 ) 2.89 ( 0.14 ) 8.54 \n", + "9 50 500 0.1 10.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "10 100 500 0.1 5.00 0.00 1 ( 0 ) 24.14 ( 0.56 ) 5.35 ( 0.11 ) 24.79 \n", + "11 500 500 0.1 1.00 0.03 1 ( 0 ) 24.48 ( 0.54 ) 4.25 ( 0.16 ) 26.23 \n", + "12 1000 500 0.1 0.50 0.07 1 ( 0 ) 24.08 ( 0.54 ) 3.1 ( 0.16 ) 26.98 \n", + "13 50 1000 0.1 20.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "14 100 1000 0.1 10.00 0.00 1 ( 0 ) 48.22 ( 0.62 ) 5.53 ( 0.09 ) 48.69 \n", + "15 500 1000 0.1 2.00 0.01 1 ( 0 ) 50.18 ( 0.78 ) 4.63 ( 0.12 ) 51.55 \n", + "16 1000 1000 0.1 1.00 0.04 1 ( 0 ) 49.43 ( 0.66 ) 3.23 ( 0.14 ) 52.20 \n", + "17 50 50 0.3 1.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "18 100 50 0.3 0.50 0.02 1 ( 0 ) 2.13 ( 0.12 ) 5.14 ( 0.08 ) 2.96 \n", + "19 500 50 0.3 0.10 0.46 1 ( 0 ) 1.43 ( 0.11 ) 2.59 ( 0.11 ) 4.84 \n", + "20 1000 50 0.3 0.05 0.60 1 ( 0 ) 1.44 ( 0.13 ) 1.35 ( 0.08 ) 6.09 \n", + "21 50 100 0.3 2.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "22 100 100 0.3 1.00 0.01 1 ( 0 ) 4.84 ( 0.18 ) 5.1 ( 0.08 ) 5.73 \n", + "23 500 100 0.3 0.20 0.28 1 ( 0 ) 3.77 ( 0.17 ) 2.76 ( 0.1 ) 7.01 \n", + "24 1000 100 0.3 0.10 0.44 1 ( 0 ) 3.43 ( 0.18 ) 1.5 ( 0.09 ) 7.93 \n", + "25 50 500 0.3 10.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "26 100 500 0.3 5.00 0.00 1 ( 0 ) 24.49 ( 0.47 ) 5.11 ( 0.08 ) 25.38 \n", + "27 500 500 0.3 1.00 0.06 1 ( 0 ) 23.05 ( 0.49 ) 3.15 ( 0.09 ) 25.90 \n", + "28 1000 500 0.3 0.50 0.11 1 ( 0 ) 22.18 ( 0.49 ) 1.91 ( 0.09 ) 26.27 \n", + "29 50 1000 0.3 20.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "30 100 1000 0.3 10.00 0.00 1 ( 0 ) 46.96 ( 0.66 ) 5.18 ( 0.08 ) 47.78 \n", + "⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ \n", + "51 500 50 0.7 0.10 0.53 1 ( 0 ) 1.29 ( 0.11 ) 2.25 ( 0.08 ) 5.04 \n", + "52 1000 50 0.7 0.05 0.63 1 ( 0 ) 1.29 ( 0.11 ) 1.3 ( 0.08 ) 5.99 \n", + "53 50 100 0.7 2.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "54 100 100 0.7 1.00 0.03 1 ( 0 ) 4.35 ( 0.18 ) 4.98 ( 0.07 ) 5.37 \n", + "55 500 100 0.7 0.20 0.34 1 ( 0 ) 3.46 ( 0.18 ) 2.53 ( 0.09 ) 6.93 \n", + "56 1000 100 0.7 0.10 0.48 1 ( 0 ) 3.04 ( 0.15 ) 1.27 ( 0.08 ) 7.77 \n", + "57 50 500 0.7 10.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "58 100 500 0.7 5.00 0.01 1 ( 0 ) 23.78 ( 0.44 ) 4.93 ( 0.08 ) 24.85 \n", + "59 500 500 0.7 1.00 0.08 1 ( 0 ) 23.14 ( 0.52 ) 2.73 ( 0.09 ) 26.41 \n", + "60 1000 500 0.7 0.50 0.13 1 ( 0 ) 21.58 ( 0.49 ) 1.57 ( 0.08 ) 26.01 \n", + "61 50 1000 0.7 20.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "62 100 1000 0.7 10.00 0.00 1 ( 0 ) 47.84 ( 0.72 ) 5 ( 0.09 ) 48.84 \n", + "63 500 1000 0.7 2.00 0.04 1 ( 0 ) 47.31 ( 0.68 ) 2.9 ( 0.1 ) 50.41 \n", + "64 1000 1000 0.7 1.00 0.06 1 ( 0 ) 46.57 ( 0.73 ) 1.71 ( 0.08 ) 50.86 \n", + "65 50 50 0.9 1.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "66 100 50 0.9 0.50 0.05 1 ( 0 ) 2.2 ( 0.13 ) 5 ( 0.08 ) 3.19 \n", + "67 500 50 0.9 0.10 0.53 1 ( 0 ) 1.28 ( 0.1 ) 2.32 ( 0.08 ) 4.96 \n", + "68 1000 50 0.9 0.05 0.67 1 ( 0 ) 0.93 ( 0.09 ) 1.31 ( 0.09 ) 5.62 \n", + "69 50 100 0.9 2.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "70 100 100 0.9 1.00 0.04 1 ( 0 ) 4.24 ( 0.16 ) 4.83 ( 0.09 ) 5.40 \n", + "71 500 100 0.9 0.20 0.36 1 ( 0 ) 3.54 ( 0.19 ) 2.29 ( 0.09 ) 7.25 \n", + "72 1000 100 0.9 0.10 0.53 1 ( 0 ) 2.53 ( 0.14 ) 1.31 ( 0.08 ) 7.22 \n", + "73 50 500 0.9 10.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "74 100 500 0.9 5.00 0.01 1 ( 0 ) 23.63 ( 0.45 ) 5.04 ( 0.08 ) 24.59 \n", + "75 500 500 0.9 1.00 0.07 1 ( 0 ) 24.29 ( 0.42 ) 2.65 ( 0.09 ) 27.64 \n", + "76 1000 500 0.9 0.50 0.13 1 ( 0 ) 21.42 ( 0.42 ) 1.49 ( 0.08 ) 25.93 \n", + "77 50 1000 0.9 20.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "78 100 1000 0.9 10.00 0.00 1 ( 0 ) 47.48 ( 0.72 ) 4.95 ( 0.08 ) 48.53 \n", + "79 500 1000 0.9 2.00 0.04 1 ( 0 ) 48.09 ( 0.7 ) 2.94 ( 0.09 ) 51.15 \n", + "80 1000 1000 0.9 1.00 0.07 1 ( 0 ) 45.6 ( 0.72 ) 1.63 ( 0.08 ) 49.97 \n", + " FDR ROC_mean FP_mean FN_mean\n", + "1 NaN 1 1.00 6.00 \n", + "2 0.78 1 2.40 5.30 \n", + "3 0.62 1 2.96 4.29 \n", + "4 0.49 1 3.28 3.04 \n", + "5 NaN 1 1.00 6.00 \n", + "6 0.93 1 5.09 5.60 \n", + "7 0.72 1 5.39 4.05 \n", + "8 0.62 1 5.43 2.89 \n", + "9 NaN 1 1.00 6.00 \n", + "10 0.97 1 24.14 5.35 \n", + "11 0.93 1 24.48 4.25 \n", + "12 0.89 1 24.08 3.10 \n", + "13 NaN 1 1.00 6.00 \n", + "14 0.99 1 48.22 5.53 \n", + "15 0.97 1 50.18 4.63 \n", + "16 0.95 1 49.43 3.23 \n", + "17 NaN 1 1.00 6.00 \n", + "18 0.71 1 2.13 5.14 \n", + "19 0.27 1 1.43 2.59 \n", + "20 0.21 1 1.44 1.35 \n", + "21 NaN 1 1.00 6.00 \n", + "22 0.84 1 4.84 5.10 \n", + "23 0.52 1 3.77 2.76 \n", + "24 0.41 1 3.43 1.50 \n", + "25 NaN 1 1.00 6.00 \n", + "26 0.96 1 24.49 5.11 \n", + "27 0.89 1 23.05 3.15 \n", + "28 0.84 1 22.18 1.91 \n", + "29 NaN 1 1.00 6.00 \n", + "30 0.98 1 46.96 5.18 \n", + "⋮ ⋮ ⋮ ⋮ ⋮ \n", + "51 0.23 1 1.29 2.25 \n", + "52 0.19 1 1.29 1.30 \n", + "53 NaN 1 1.00 6.00 \n", + "54 0.8 1 4.35 4.98 \n", + "55 0.47 1 3.46 2.53 \n", + "56 0.37 1 3.04 1.27 \n", + "57 NaN 1 1.00 6.00 \n", + "58 0.96 1 23.78 4.93 \n", + "59 0.87 1 23.14 2.73 \n", + "60 0.82 1 21.58 1.57 \n", + "61 NaN 1 1.00 6.00 \n", + "62 0.98 1 47.84 5.00 \n", + "63 0.94 1 47.31 2.90 \n", + "64 0.91 1 46.57 1.71 \n", + "65 NaN 1 1.00 6.00 \n", + "66 0.66 1 2.20 5.00 \n", + "67 0.23 1 1.28 2.32 \n", + "68 0.15 1 0.93 1.31 \n", + "69 NaN 1 1.00 6.00 \n", + "70 0.79 1 4.24 4.83 \n", + "71 0.46 1 3.54 2.29 \n", + "72 0.33 1 2.53 1.31 \n", + "73 NaN 1 1.00 6.00 \n", + "74 0.96 1 23.63 5.04 \n", + "75 0.88 1 24.29 2.65 \n", + "76 0.82 1 21.42 1.49 \n", + "77 NaN 1 1.00 6.00 \n", + "78 0.98 1 47.48 4.95 \n", + "79 0.94 1 48.09 2.94 \n", + "80 0.91 1 45.60 1.63 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_block\n", + "\n", + "## export\n", + "write.table(result.table_block, '../results_summary_bin/sim_block_RF_binary.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_bin/.ipynb_checkpoints/2.4_sim_block_GencompLasso_binary_update-checkpoint.ipynb b/simulations/notebooks_sim_bin/.ipynb_checkpoints/2.4_sim_block_GencompLasso_binary_update-checkpoint.ipynb new file mode 100644 index 0000000..b3900c2 --- /dev/null +++ b/simulations/notebooks_sim_bin/.ipynb_checkpoints/2.4_sim_block_GencompLasso_binary_update-checkpoint.ipynb @@ -0,0 +1,1003 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize compositional lasso results on Block Simulation Scenarios for binary outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "rou.list = seq(0.1, 0.9, 0.2)\n", + "\n", + "files = NULL\n", + "for (rou in rou.list){\n", + " for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_block_corr', rou, paste('P', p, 'N', n, sep='_'), '.RData', sep=''))\n", + " }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "80" + ], + "text/latex": [ + "80" + ], + "text/markdown": [ + "80" + ], + "text/plain": [ + "[1] 80" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "length(files)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1] \"indx: 1\"\n", + "[1] \"indx: 2\"\n", + "[1] \"indx: 3\"\n", + "[1] \"indx: 4\"\n", + "[1] \"indx: 5\"\n", + "[1] \"indx: 6\"\n", + "[1] \"indx: 7\"\n", + "[1] \"indx: 8\"\n", + "[1] \"indx: 9\"\n", + "[1] \"indx: 10\"\n", + "[1] \"indx: 11\"\n", + "[1] \"indx: 12\"\n", + "[1] \"indx: 13\"\n", + "[1] \"indx: 14\"\n", + "[1] \"indx: 15\"\n", + "[1] \"indx: 16\"\n", + "[1] \"indx: 17\"\n", + "[1] \"indx: 18\"\n", + "[1] \"indx: 19\"\n", + "[1] \"indx: 20\"\n", + "[1] \"indx: 21\"\n", + "[1] \"indx: 22\"\n", + "[1] \"indx: 23\"\n", + "[1] \"indx: 24\"\n", + "[1] \"indx: 25\"\n", + "[1] \"indx: 26\"\n", + "[1] \"indx: 27\"\n", + "[1] \"indx: 28\"\n", + "[1] \"indx: 29\"\n", + "[1] \"indx: 30\"\n", + "[1] \"indx: 31\"\n", + "[1] \"indx: 32\"\n", + "[1] \"indx: 33\"\n", + "[1] \"indx: 34\"\n", + "[1] \"indx: 35\"\n", + "[1] \"indx: 36\"\n", + "[1] \"indx: 37\"\n", + "[1] \"indx: 38\"\n", + "[1] \"indx: 39\"\n", + "[1] \"indx: 40\"\n", + "[1] \"indx: 41\"\n", + "[1] \"indx: 42\"\n", + "[1] \"indx: 43\"\n", + "[1] \"indx: 44\"\n", + "[1] \"indx: 45\"\n", + "[1] \"indx: 46\"\n", + "[1] \"indx: 47\"\n", + "[1] \"indx: 48\"\n", + "[1] \"indx: 49\"\n", + "[1] \"indx: 50\"\n", + "[1] \"indx: 51\"\n", + "[1] \"indx: 52\"\n", + "[1] \"indx: 53\"\n", + "[1] \"indx: 54\"\n", + "[1] \"indx: 55\"\n", + "[1] \"indx: 56\"\n", + "[1] \"indx: 57\"\n", + "[1] \"indx: 58\"\n", + "[1] \"indx: 59\"\n", + "[1] \"indx: 60\"\n", + "[1] \"indx: 61\"\n", + "[1] \"indx: 62\"\n", + "[1] \"indx: 63\"\n", + "[1] \"indx: 64\"\n", + "[1] \"indx: 65\"\n", + "[1] \"indx: 66\"\n", + "[1] \"indx: 67\"\n", + "[1] \"indx: 68\"\n", + "[1] \"indx: 69\"\n", + "[1] \"indx: 70\"\n", + "[1] \"indx: 71\"\n", + "[1] \"indx: 72\"\n", + "[1] \"indx: 73\"\n", + "[1] \"indx: 74\"\n", + "[1] \"indx: 75\"\n", + "[1] \"indx: 76\"\n", + "[1] \"indx: 77\"\n", + "[1] \"indx: 78\"\n", + "[1] \"indx: 79\"\n", + "[1] \"indx: 80\"\n" + ] + } + ], + "source": [ + "avg_FDR = NULL\n", + "table_block = NULL\n", + "tmp_num_select = rep(0, length(files))\n", + "for (i in 1:length(files)){\n", + " print(paste0('indx: ', i))\n", + " load(paste0(dir, '/binary_update/block_GenCompLasso_binary_', i, '.RData')) \n", + " \n", + " table_block = rbind(table_block, results_block_GenCompLasso[c('n', 'p', 'rou', 'FP', 'FN', 'ROC', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_block_GenCompLasso$Stab.table))\n", + " \n", + " # calculate FDR\n", + " load(file_name, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_block_GenCompLasso$Stab.table\n", + " FDR = NULL # false positive rate\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}\n", + "table_block = as.data.frame(table_block)\n", + "table_block$num_select = tmp_num_select\n", + "table_block$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
150500.11.68 ( 0.53 )5.42 ( 0.1 )0.58 ( 0.01 )0.022.260.58
2100500.10.08 ( 0.04 )5.65 ( 0.08 )0.51 ( 0 )0.060.430.18
3500500.10 ( 0 )6 ( 0 )0.5 ( 0 )NaN0.00 NaN
41000500.10 ( 0 )6 ( 0 )0.5 ( 0 )NaN0.00 NaN
5501000.13.43 ( 0.63 )5.23 ( 0.1 )0.61 ( 0.01 )0.044.200.71
61001000.10.31 ( 0.1 )5.8 ( 0.05 )0.51 ( 0 )0.030.510.53
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1.68 ( 0.53 ) & 5.42 ( 0.1 ) & 0.58 ( 0.01 ) & 0.02 & 2.26 & 0.58\\\\\n", + "\t2 & 100 & 50 & 0.1 & 0.08 ( 0.04 ) & 5.65 ( 0.08 ) & 0.51 ( 0 ) & 0.06 & 0.43 & 0.18\\\\\n", + "\t3 & 500 & 50 & 0.1 & 0 ( 0 ) & 6 ( 0 ) & 0.5 ( 0 ) & NaN & 0.00 & NaN\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 0 ( 0 ) & 6 ( 0 ) & 0.5 ( 0 ) & NaN & 0.00 & NaN\\\\\n", + "\t5 & 50 & 100 & 0.1 & 3.43 ( 0.63 ) & 5.23 ( 0.1 ) & 0.61 ( 0.01 ) & 0.04 & 4.20 & 0.71\\\\\n", + "\t6 & 100 & 100 & 0.1 & 0.31 ( 0.1 ) & 5.8 ( 0.05 ) & 0.51 ( 0 ) & 0.03 & 0.51 & 0.53\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1.68 ( 0.53 ) | 5.42 ( 0.1 ) | 0.58 ( 0.01 ) | 0.02 | 2.26 | 0.58 |\n", + "| 2 | 100 | 50 | 0.1 | 0.08 ( 0.04 ) | 5.65 ( 0.08 ) | 0.51 ( 0 ) | 0.06 | 0.43 | 0.18 |\n", + "| 3 | 500 | 50 | 0.1 | 0 ( 0 ) | 6 ( 0 ) | 0.5 ( 0 ) | NaN | 0.00 | NaN |\n", + "| 4 | 1000 | 50 | 0.1 | 0 ( 0 ) | 6 ( 0 ) | 0.5 ( 0 ) | NaN | 0.00 | NaN |\n", + "| 5 | 50 | 100 | 0.1 | 3.43 ( 0.63 ) | 5.23 ( 0.1 ) | 0.61 ( 0.01 ) | 0.04 | 4.20 | 0.71 |\n", + "| 6 | 100 | 100 | 0.1 | 0.31 ( 0.1 ) | 5.8 ( 0.05 ) | 0.51 ( 0 ) | 0.03 | 0.51 | 0.53 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select FDR \n", + "1 50 50 0.1 1.68 ( 0.53 ) 5.42 ( 0.1 ) 0.58 ( 0.01 ) 0.02 2.26 0.58\n", + "2 100 50 0.1 0.08 ( 0.04 ) 5.65 ( 0.08 ) 0.51 ( 0 ) 0.06 0.43 0.18\n", + "3 500 50 0.1 0 ( 0 ) 6 ( 0 ) 0.5 ( 0 ) NaN 0.00 NaN\n", + "4 1000 50 0.1 0 ( 0 ) 6 ( 0 ) 0.5 ( 0 ) NaN 0.00 NaN\n", + "5 50 100 0.1 3.43 ( 0.63 ) 5.23 ( 0.1 ) 0.61 ( 0.01 ) 0.04 4.20 0.71\n", + "6 100 100 0.1 0.31 ( 0.1 ) 5.8 ( 0.05 ) 0.51 ( 0 ) 0.03 0.51 0.53" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
755005000.91.08 ( 0.33 )0.01 ( 0.01 )0.91 ( 0 )0.85 7.070.08
7610005000.90.14 ( 0.07 )0 ( 0 )0.91 ( 0 )0.98 6.140.02
775010000.9330.51 ( 8.59 )0.97 ( 0.08 )1 ( 0 )0.01335.540.98
7810010000.9217.74 ( 6.88 )0.67 ( 0.07 )1 ( 0 )0.02223.070.97
7950010000.91.91 ( 0.48 )0.02 ( 0.01 )0.91 ( 0 )0.76 7.890.12
80100010000.90.27 ( 0.11 )0.02 ( 0.01 )0.91 ( 0 )0.95 6.250.03
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 1.08 ( 0.33 ) & 0.01 ( 0.01 ) & 0.91 ( 0 ) & 0.85 & 7.07 & 0.08\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.14 ( 0.07 ) & 0 ( 0 ) & 0.91 ( 0 ) & 0.98 & 6.14 & 0.02\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 330.51 ( 8.59 ) & 0.97 ( 0.08 ) & 1 ( 0 ) & 0.01 & 335.54 & 0.98\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 217.74 ( 6.88 ) & 0.67 ( 0.07 ) & 1 ( 0 ) & 0.02 & 223.07 & 0.97\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 1.91 ( 0.48 ) & 0.02 ( 0.01 ) & 0.91 ( 0 ) & 0.76 & 7.89 & 0.12\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 0.27 ( 0.11 ) & 0.02 ( 0.01 ) & 0.91 ( 0 ) & 0.95 & 6.25 & 0.03\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 1.08 ( 0.33 ) | 0.01 ( 0.01 ) | 0.91 ( 0 ) | 0.85 | 7.07 | 0.08 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.14 ( 0.07 ) | 0 ( 0 ) | 0.91 ( 0 ) | 0.98 | 6.14 | 0.02 |\n", + "| 77 | 50 | 1000 | 0.9 | 330.51 ( 8.59 ) | 0.97 ( 0.08 ) | 1 ( 0 ) | 0.01 | 335.54 | 0.98 |\n", + "| 78 | 100 | 1000 | 0.9 | 217.74 ( 6.88 ) | 0.67 ( 0.07 ) | 1 ( 0 ) | 0.02 | 223.07 | 0.97 |\n", + "| 79 | 500 | 1000 | 0.9 | 1.91 ( 0.48 ) | 0.02 ( 0.01 ) | 0.91 ( 0 ) | 0.76 | 7.89 | 0.12 |\n", + "| 80 | 1000 | 1000 | 0.9 | 0.27 ( 0.11 ) | 0.02 ( 0.01 ) | 0.91 ( 0 ) | 0.95 | 6.25 | 0.03 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select FDR \n", + "75 500 500 0.9 1.08 ( 0.33 ) 0.01 ( 0.01 ) 0.91 ( 0 ) 0.85 7.07 0.08\n", + "76 1000 500 0.9 0.14 ( 0.07 ) 0 ( 0 ) 0.91 ( 0 ) 0.98 6.14 0.02\n", + "77 50 1000 0.9 330.51 ( 8.59 ) 0.97 ( 0.08 ) 1 ( 0 ) 0.01 335.54 0.98\n", + "78 100 1000 0.9 217.74 ( 6.88 ) 0.67 ( 0.07 ) 1 ( 0 ) 0.02 223.07 0.97\n", + "79 500 1000 0.9 1.91 ( 0.48 ) 0.02 ( 0.01 ) 0.91 ( 0 ) 0.76 7.89 0.12\n", + "80 1000 1000 0.9 0.27 ( 0.11 ) 0.02 ( 0.01 ) 0.91 ( 0 ) 0.95 6.25 0.03" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_block <- apply(table_block,2,as.character)\n", + "rownames(result.table_block) = rownames(table_block)\n", + "result.table_block = as.data.frame(result.table_block)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_block$n = tidyr::extract_numeric(result.table_block$n)\n", + "result.table_block$p = tidyr::extract_numeric(result.table_block$p)\n", + "result.table_block$ratio = result.table_block$p / result.table_block$n\n", + "\n", + "result.table_block = result.table_block[c('n', 'p', 'rou', 'ratio', 'Stab', 'ROC', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_block)[1:4] = c('N', 'P', 'Corr', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_block$Stab = as.numeric(as.character(result.table_block$Stab))\n", + "result.table_block$ROC_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_block$ROC))\n", + "result.table_block$FP_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_block$FP))\n", + "result.table_block$FN_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_block$FN))\n", + "result.table_block$num_select = as.numeric(as.character(result.table_block$num_select))" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 7 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
3 500 500.10.10NaN0.5 ( 0 )0 ( 0 )6 ( 0 )0NaN0.506
41000 500.10.05NaN0.5 ( 0 )0 ( 0 )6 ( 0 )0NaN0.506
7 500 1000.10.20NaN0.5 ( 0 )0 ( 0 )6 ( 0 )0NaN0.506
81000 1000.10.10NaN0.5 ( 0 )0 ( 0 )6 ( 0 )0NaN0.506
11 500 5000.11.00NaN0.5 ( 0 )0 ( 0 )6 ( 0 )0NaN0.506
121000 5000.10.50NaN0.5 ( 0 )0 ( 0 )6 ( 0 )0NaN0.506
16100010000.11.00NaN0.5 ( 0 )0 ( 0 )6 ( 0 )0NaN0.506
\n" + ], + "text/latex": [ + "A data.frame: 7 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t3 & 500 & 50 & 0.1 & 0.10 & NaN & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.5 & 0 & 6\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 0.05 & NaN & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.5 & 0 & 6\\\\\n", + "\t7 & 500 & 100 & 0.1 & 0.20 & NaN & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.5 & 0 & 6\\\\\n", + "\t8 & 1000 & 100 & 0.1 & 0.10 & NaN & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.5 & 0 & 6\\\\\n", + "\t11 & 500 & 500 & 0.1 & 1.00 & NaN & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.5 & 0 & 6\\\\\n", + "\t12 & 1000 & 500 & 0.1 & 0.50 & NaN & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.5 & 0 & 6\\\\\n", + "\t16 & 1000 & 1000 & 0.1 & 1.00 & NaN & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.5 & 0 & 6\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 7 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 3 | 500 | 50 | 0.1 | 0.10 | NaN | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.5 | 0 | 6 |\n", + "| 4 | 1000 | 50 | 0.1 | 0.05 | NaN | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.5 | 0 | 6 |\n", + "| 7 | 500 | 100 | 0.1 | 0.20 | NaN | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.5 | 0 | 6 |\n", + "| 8 | 1000 | 100 | 0.1 | 0.10 | NaN | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.5 | 0 | 6 |\n", + "| 11 | 500 | 500 | 0.1 | 1.00 | NaN | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.5 | 0 | 6 |\n", + "| 12 | 1000 | 500 | 0.1 | 0.50 | NaN | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.5 | 0 | 6 |\n", + "| 16 | 1000 | 1000 | 0.1 | 1.00 | NaN | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.5 | 0 | 6 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select FDR ROC_mean\n", + "3 500 50 0.1 0.10 NaN 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0 NaN 0.5 \n", + "4 1000 50 0.1 0.05 NaN 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0 NaN 0.5 \n", + "7 500 100 0.1 0.20 NaN 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0 NaN 0.5 \n", + "8 1000 100 0.1 0.10 NaN 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0 NaN 0.5 \n", + "11 500 500 0.1 1.00 NaN 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0 NaN 0.5 \n", + "12 1000 500 0.1 0.50 NaN 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0 NaN 0.5 \n", + "16 1000 1000 0.1 1.00 NaN 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0 NaN 0.5 \n", + " FP_mean FN_mean\n", + "3 0 6 \n", + "4 0 6 \n", + "7 0 6 \n", + "8 0 6 \n", + "11 0 6 \n", + "12 0 6 \n", + "16 0 6 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check whether missing values exists\n", + "result.table_block[rowSums(is.na(result.table_block)) > 0,]" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 500.11.000.020.58 ( 0.01 )1.68 ( 0.53 )5.42 ( 0.1 ) 2.260.580.581.685.42
2 100 500.10.500.060.51 ( 0 ) 0.08 ( 0.04 )5.65 ( 0.08 )0.430.180.510.085.65
3 500 500.10.10 NaN0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00NaN 0.500.006.00
41000 500.10.05 NaN0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00NaN 0.500.006.00
5 501000.12.000.040.61 ( 0.01 )3.43 ( 0.63 )5.23 ( 0.1 ) 4.200.710.613.435.23
6 1001000.11.000.030.51 ( 0 ) 0.31 ( 0.1 ) 5.8 ( 0.05 ) 0.510.530.510.315.80
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1.00 & 0.02 & 0.58 ( 0.01 ) & 1.68 ( 0.53 ) & 5.42 ( 0.1 ) & 2.26 & 0.58 & 0.58 & 1.68 & 5.42\\\\\n", + "\t2 & 100 & 50 & 0.1 & 0.50 & 0.06 & 0.51 ( 0 ) & 0.08 ( 0.04 ) & 5.65 ( 0.08 ) & 0.43 & 0.18 & 0.51 & 0.08 & 5.65\\\\\n", + "\t3 & 500 & 50 & 0.1 & 0.10 & NaN & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 0.50 & 0.00 & 6.00\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 0.05 & NaN & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 0.50 & 0.00 & 6.00\\\\\n", + "\t5 & 50 & 100 & 0.1 & 2.00 & 0.04 & 0.61 ( 0.01 ) & 3.43 ( 0.63 ) & 5.23 ( 0.1 ) & 4.20 & 0.71 & 0.61 & 3.43 & 5.23\\\\\n", + "\t6 & 100 & 100 & 0.1 & 1.00 & 0.03 & 0.51 ( 0 ) & 0.31 ( 0.1 ) & 5.8 ( 0.05 ) & 0.51 & 0.53 & 0.51 & 0.31 & 5.80\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1.00 | 0.02 | 0.58 ( 0.01 ) | 1.68 ( 0.53 ) | 5.42 ( 0.1 ) | 2.26 | 0.58 | 0.58 | 1.68 | 5.42 |\n", + "| 2 | 100 | 50 | 0.1 | 0.50 | 0.06 | 0.51 ( 0 ) | 0.08 ( 0.04 ) | 5.65 ( 0.08 ) | 0.43 | 0.18 | 0.51 | 0.08 | 5.65 |\n", + "| 3 | 500 | 50 | 0.1 | 0.10 | NaN | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 0.50 | 0.00 | 6.00 |\n", + "| 4 | 1000 | 50 | 0.1 | 0.05 | NaN | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 0.50 | 0.00 | 6.00 |\n", + "| 5 | 50 | 100 | 0.1 | 2.00 | 0.04 | 0.61 ( 0.01 ) | 3.43 ( 0.63 ) | 5.23 ( 0.1 ) | 4.20 | 0.71 | 0.61 | 3.43 | 5.23 |\n", + "| 6 | 100 | 100 | 0.1 | 1.00 | 0.03 | 0.51 ( 0 ) | 0.31 ( 0.1 ) | 5.8 ( 0.05 ) | 0.51 | 0.53 | 0.51 | 0.31 | 5.80 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select\n", + "1 50 50 0.1 1.00 0.02 0.58 ( 0.01 ) 1.68 ( 0.53 ) 5.42 ( 0.1 ) 2.26 \n", + "2 100 50 0.1 0.50 0.06 0.51 ( 0 ) 0.08 ( 0.04 ) 5.65 ( 0.08 ) 0.43 \n", + "3 500 50 0.1 0.10 NaN 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00 \n", + "4 1000 50 0.1 0.05 NaN 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00 \n", + "5 50 100 0.1 2.00 0.04 0.61 ( 0.01 ) 3.43 ( 0.63 ) 5.23 ( 0.1 ) 4.20 \n", + "6 100 100 0.1 1.00 0.03 0.51 ( 0 ) 0.31 ( 0.1 ) 5.8 ( 0.05 ) 0.51 \n", + " FDR ROC_mean FP_mean FN_mean\n", + "1 0.58 0.58 1.68 5.42 \n", + "2 0.18 0.51 0.08 5.65 \n", + "3 NaN 0.50 0.00 6.00 \n", + "4 NaN 0.50 0.00 6.00 \n", + "5 0.71 0.61 3.43 5.23 \n", + "6 0.53 0.51 0.31 5.80 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
75 500 5000.9 1.00.850.91 ( 0 )1.08 ( 0.33 ) 0.01 ( 0.01 ) 7.070.080.91 1.080.01
761000 5000.9 0.50.980.91 ( 0 )0.14 ( 0.07 ) 0 ( 0 ) 6.140.020.91 0.140.00
77 5010000.920.00.011 ( 0 ) 330.51 ( 8.59 )0.97 ( 0.08 )335.540.981.00330.510.97
78 10010000.910.00.021 ( 0 ) 217.74 ( 6.88 )0.67 ( 0.07 )223.070.971.00217.740.67
79 50010000.9 2.00.760.91 ( 0 )1.91 ( 0.48 ) 0.02 ( 0.01 ) 7.890.120.91 1.910.02
80100010000.9 1.00.950.91 ( 0 )0.27 ( 0.11 ) 0.02 ( 0.01 ) 6.250.030.91 0.270.02
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 1.0 & 0.85 & 0.91 ( 0 ) & 1.08 ( 0.33 ) & 0.01 ( 0.01 ) & 7.07 & 0.08 & 0.91 & 1.08 & 0.01\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.5 & 0.98 & 0.91 ( 0 ) & 0.14 ( 0.07 ) & 0 ( 0 ) & 6.14 & 0.02 & 0.91 & 0.14 & 0.00\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.0 & 0.01 & 1 ( 0 ) & 330.51 ( 8.59 ) & 0.97 ( 0.08 ) & 335.54 & 0.98 & 1.00 & 330.51 & 0.97\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.0 & 0.02 & 1 ( 0 ) & 217.74 ( 6.88 ) & 0.67 ( 0.07 ) & 223.07 & 0.97 & 1.00 & 217.74 & 0.67\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.0 & 0.76 & 0.91 ( 0 ) & 1.91 ( 0.48 ) & 0.02 ( 0.01 ) & 7.89 & 0.12 & 0.91 & 1.91 & 0.02\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.0 & 0.95 & 0.91 ( 0 ) & 0.27 ( 0.11 ) & 0.02 ( 0.01 ) & 6.25 & 0.03 & 0.91 & 0.27 & 0.02\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 1.0 | 0.85 | 0.91 ( 0 ) | 1.08 ( 0.33 ) | 0.01 ( 0.01 ) | 7.07 | 0.08 | 0.91 | 1.08 | 0.01 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.5 | 0.98 | 0.91 ( 0 ) | 0.14 ( 0.07 ) | 0 ( 0 ) | 6.14 | 0.02 | 0.91 | 0.14 | 0.00 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.0 | 0.01 | 1 ( 0 ) | 330.51 ( 8.59 ) | 0.97 ( 0.08 ) | 335.54 | 0.98 | 1.00 | 330.51 | 0.97 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.0 | 0.02 | 1 ( 0 ) | 217.74 ( 6.88 ) | 0.67 ( 0.07 ) | 223.07 | 0.97 | 1.00 | 217.74 | 0.67 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.0 | 0.76 | 0.91 ( 0 ) | 1.91 ( 0.48 ) | 0.02 ( 0.01 ) | 7.89 | 0.12 | 0.91 | 1.91 | 0.02 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.0 | 0.95 | 0.91 ( 0 ) | 0.27 ( 0.11 ) | 0.02 ( 0.01 ) | 6.25 | 0.03 | 0.91 | 0.27 | 0.02 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "75 500 500 0.9 1.0 0.85 0.91 ( 0 ) 1.08 ( 0.33 ) 0.01 ( 0.01 )\n", + "76 1000 500 0.9 0.5 0.98 0.91 ( 0 ) 0.14 ( 0.07 ) 0 ( 0 ) \n", + "77 50 1000 0.9 20.0 0.01 1 ( 0 ) 330.51 ( 8.59 ) 0.97 ( 0.08 )\n", + "78 100 1000 0.9 10.0 0.02 1 ( 0 ) 217.74 ( 6.88 ) 0.67 ( 0.07 )\n", + "79 500 1000 0.9 2.0 0.76 0.91 ( 0 ) 1.91 ( 0.48 ) 0.02 ( 0.01 )\n", + "80 1000 1000 0.9 1.0 0.95 0.91 ( 0 ) 0.27 ( 0.11 ) 0.02 ( 0.01 )\n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "75 7.07 0.08 0.91 1.08 0.01 \n", + "76 6.14 0.02 0.91 0.14 0.00 \n", + "77 335.54 0.98 1.00 330.51 0.97 \n", + "78 223.07 0.97 1.00 217.74 0.67 \n", + "79 7.89 0.12 0.91 1.91 0.02 \n", + "80 6.25 0.03 0.91 0.27 0.02 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(result.table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 80 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 500.1 1.000.020.58 ( 0.01 )1.68 ( 0.53 ) 5.42 ( 0.1 ) 2.260.580.58 1.685.42
2 100 500.1 0.500.060.51 ( 0 ) 0.08 ( 0.04 ) 5.65 ( 0.08 ) 0.430.180.51 0.085.65
3 500 500.1 0.10 NaN0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00NaN 0.50 0.006.00
41000 500.1 0.05 NaN0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00NaN 0.50 0.006.00
5 50 1000.1 2.000.040.61 ( 0.01 )3.43 ( 0.63 ) 5.23 ( 0.1 ) 4.200.710.61 3.435.23
6 100 1000.1 1.000.030.51 ( 0 ) 0.31 ( 0.1 ) 5.8 ( 0.05 ) 0.510.530.51 0.315.80
7 500 1000.1 0.20 NaN0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00NaN 0.50 0.006.00
81000 1000.1 0.10 NaN0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00NaN 0.50 0.006.00
9 50 5000.110.000.000.73 ( 0.01 )29.62 ( 7.94 ) 5.17 ( 0.13 ) 30.450.9 0.73 29.625.17
10 100 5000.1 5.000.040.53 ( 0.01 )0.53 ( 0.1 ) 5.63 ( 0.08 ) 0.900.570.53 0.535.63
11 500 5000.1 1.00 NaN0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00NaN 0.50 0.006.00
121000 5000.1 0.50 NaN0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00NaN 0.50 0.006.00
13 5010000.120.000.010.83 ( 0.01 )17.45 ( 2.89 ) 5.37 ( 0.1 ) 18.080.940.83 17.455.37
14 10010000.110.000.030.56 ( 0.01 )1.27 ( 0.25 ) 5.59 ( 0.08 ) 1.680.730.56 1.275.59
15 50010000.1 2.000.000.5 ( 0 ) 0 ( 0 ) 5.98 ( 0.02 ) 0.020 0.50 0.005.98
16100010000.1 1.00 NaN0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00NaN 0.50 0.006.00
17 50 500.3 1.000.140.86 ( 0.01 )9.81 ( 1.05 ) 1.78 ( 0.11 ) 14.030.6 0.86 9.811.78
18 100 500.3 0.500.370.83 ( 0.01 )3.64 ( 0.75 ) 1.7 ( 0.09 ) 7.940.270.83 3.641.70
19 500 500.3 0.100.810.81 ( 0 ) 0.02 ( 0.01 ) 1.75 ( 0.09 ) 4.270 0.81 0.021.75
201000 500.3 0.050.810.8 ( 0 ) 0.06 ( 0.05 ) 1.7 ( 0.09 ) 4.360.010.80 0.061.70
21 50 1000.3 2.000.100.9 ( 0 ) 16.32 ( 1.58 ) 2.2 ( 0.11 ) 20.120.740.90 16.322.20
22 100 1000.3 1.000.310.84 ( 0 ) 5.71 ( 1.02 ) 1.72 ( 0.1 ) 9.990.410.84 5.711.72
23 500 1000.3 0.200.800.81 ( 0 ) 0.12 ( 0.06 ) 1.7 ( 0.09 ) 4.420.010.81 0.121.70
241000 1000.3 0.100.740.8 ( 0 ) 0.49 ( 0.26 ) 2.05 ( 0.08 ) 4.440.040.80 0.492.05
25 50 5000.310.000.021 ( 0 ) 105.94 ( 7.57 )2.04 ( 0.11 )109.900.951.00105.942.04
26 100 5000.3 5.000.120.88 ( 0.01 )23.82 ( 3.36 ) 1.9 ( 0.09 ) 27.920.750.88 23.821.90
27 500 5000.3 1.000.790.8 ( 0 ) 0.24 ( 0.08 ) 1.86 ( 0.09 ) 4.380.030.80 0.241.86
281000 5000.3 0.500.730.8 ( 0 ) 0.63 ( 0.15 ) 1.85 ( 0.09 ) 4.780.080.80 0.631.85
29 5010000.320.000.021 ( 0 ) 154.21 ( 5.09 )2.09 ( 0.1 ) 158.120.971.00154.212.09
30 10010000.310.000.070.91 ( 0 ) 36.7 ( 6.19 ) 2.26 ( 0.1 ) 40.440.840.91 36.702.26
51 500 500.7 0.100.960.9 ( 0 ) 0.17 ( 0.08 ) 0.04 ( 0.02 ) 6.130.020.90 0.170.04
521000 500.7 0.050.980.89 ( 0 )0.1 ( 0.06 ) 0 ( 0 ) 6.100.010.89 0.100.00
53 50 1000.7 2.000.060.99 ( 0 )35.59 ( 2.41 ) 0.94 ( 0.09 ) 40.650.830.99 35.590.94
54 100 1000.7 1.000.260.92 ( 0 )11.64 ( 1.38 ) 0.53 ( 0.06 ) 17.110.570.92 11.640.53
55 500 1000.7 0.200.970.9 ( 0 ) 0.15 ( 0.07 ) 0.05 ( 0.02 ) 6.100.020.90 0.150.05
561000 1000.7 0.100.930.9 ( 0 ) 0.41 ( 0.14 ) 0.03 ( 0.02 ) 6.380.040.90 0.410.03
57 50 5000.710.000.021 ( 0 ) 171.29 ( 6.32 )1.12 ( 0.09 )176.170.971.00171.291.12
58 100 5000.7 5.000.060.98 ( 0 )68.31 ( 6.57 ) 0.98 ( 0.09 ) 73.330.870.98 68.310.98
59 500 5000.7 1.000.930.89 ( 0 )0.37 ( 0.12 ) 0.06 ( 0.02 ) 6.310.040.89 0.370.06
601000 5000.7 0.500.980.9 ( 0 ) 0.13 ( 0.07 ) 0.01 ( 0.01 ) 6.120.010.90 0.130.01
61 5010000.720.000.011 ( 0 ) 275.88 ( 8.89 )1.39 ( 0.09 )280.490.981.00275.881.39
62 10010000.710.000.031 ( 0 ) 155.38 ( 7.45 )0.93 ( 0.08 )160.450.951.00155.380.93
63 50010000.7 2.000.840.9 ( 0 ) 1.07 ( 0.26 ) 0.1 ( 0.03 ) 6.970.090.90 1.070.10
64100010000.7 1.000.950.9 ( 0 ) 0.3 ( 0.11 ) 0.02 ( 0.01 ) 6.280.030.90 0.300.02
65 50 500.9 1.000.130.97 ( 0 )15.75 ( 1.04 ) 0.71 ( 0.07 ) 21.040.7 0.97 15.750.71
66 100 500.9 0.500.440.93 ( 0 )5.06 ( 0.38 ) 0.34 ( 0.05 ) 10.720.420.93 5.060.34
67 500 500.9 0.100.980.91 ( 0 )0.07 ( 0.04 ) 0.03 ( 0.02 ) 6.040.010.91 0.070.03
681000 500.9 0.051.000.91 ( 0 )0 ( 0 ) 0 ( 0 ) 6.000 0.91 0.000.00
69 50 1000.9 2.000.060.99 ( 0 )37.69 ( 2.33 ) 0.96 ( 0.09 ) 42.730.840.99 37.690.96
70 100 1000.9 1.000.260.94 ( 0 )11.53 ( 1.15 ) 0.52 ( 0.06 ) 17.010.610.94 11.530.52
71 500 1000.9 0.200.960.91 ( 0 )0.18 ( 0.06 ) 0.03 ( 0.02 ) 6.150.020.91 0.180.03
721000 1000.9 0.100.970.91 ( 0 )0.17 ( 0.09 ) 0 ( 0 ) 6.170.020.91 0.170.00
73 50 5000.910.000.011 ( 0 ) 189.13 ( 6.24 )0.91 ( 0.1 ) 194.220.971.00189.130.91
74 100 5000.9 5.000.050.99 ( 0 )88.92 ( 5.92 ) 0.68 ( 0.07 ) 94.240.920.99 88.920.68
75 500 5000.9 1.000.850.91 ( 0 )1.08 ( 0.33 ) 0.01 ( 0.01 ) 7.070.080.91 1.080.01
761000 5000.9 0.500.980.91 ( 0 )0.14 ( 0.07 ) 0 ( 0 ) 6.140.020.91 0.140.00
77 5010000.920.000.011 ( 0 ) 330.51 ( 8.59 )0.97 ( 0.08 )335.540.981.00330.510.97
78 10010000.910.000.021 ( 0 ) 217.74 ( 6.88 )0.67 ( 0.07 )223.070.971.00217.740.67
79 50010000.9 2.000.760.91 ( 0 )1.91 ( 0.48 ) 0.02 ( 0.01 ) 7.890.120.91 1.910.02
80100010000.9 1.000.950.91 ( 0 )0.27 ( 0.11 ) 0.02 ( 0.01 ) 6.250.030.91 0.270.02
\n" + ], + "text/latex": [ + "A data.frame: 80 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1.00 & 0.02 & 0.58 ( 0.01 ) & 1.68 ( 0.53 ) & 5.42 ( 0.1 ) & 2.26 & 0.58 & 0.58 & 1.68 & 5.42\\\\\n", + "\t2 & 100 & 50 & 0.1 & 0.50 & 0.06 & 0.51 ( 0 ) & 0.08 ( 0.04 ) & 5.65 ( 0.08 ) & 0.43 & 0.18 & 0.51 & 0.08 & 5.65\\\\\n", + "\t3 & 500 & 50 & 0.1 & 0.10 & NaN & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 0.50 & 0.00 & 6.00\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 0.05 & NaN & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 0.50 & 0.00 & 6.00\\\\\n", + "\t5 & 50 & 100 & 0.1 & 2.00 & 0.04 & 0.61 ( 0.01 ) & 3.43 ( 0.63 ) & 5.23 ( 0.1 ) & 4.20 & 0.71 & 0.61 & 3.43 & 5.23\\\\\n", + "\t6 & 100 & 100 & 0.1 & 1.00 & 0.03 & 0.51 ( 0 ) & 0.31 ( 0.1 ) & 5.8 ( 0.05 ) & 0.51 & 0.53 & 0.51 & 0.31 & 5.80\\\\\n", + "\t7 & 500 & 100 & 0.1 & 0.20 & NaN & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 0.50 & 0.00 & 6.00\\\\\n", + "\t8 & 1000 & 100 & 0.1 & 0.10 & NaN & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 0.50 & 0.00 & 6.00\\\\\n", + "\t9 & 50 & 500 & 0.1 & 10.00 & 0.00 & 0.73 ( 0.01 ) & 29.62 ( 7.94 ) & 5.17 ( 0.13 ) & 30.45 & 0.9 & 0.73 & 29.62 & 5.17\\\\\n", + "\t10 & 100 & 500 & 0.1 & 5.00 & 0.04 & 0.53 ( 0.01 ) & 0.53 ( 0.1 ) & 5.63 ( 0.08 ) & 0.90 & 0.57 & 0.53 & 0.53 & 5.63\\\\\n", + "\t11 & 500 & 500 & 0.1 & 1.00 & NaN & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 0.50 & 0.00 & 6.00\\\\\n", + "\t12 & 1000 & 500 & 0.1 & 0.50 & NaN & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 0.50 & 0.00 & 6.00\\\\\n", + "\t13 & 50 & 1000 & 0.1 & 20.00 & 0.01 & 0.83 ( 0.01 ) & 17.45 ( 2.89 ) & 5.37 ( 0.1 ) & 18.08 & 0.94 & 0.83 & 17.45 & 5.37\\\\\n", + "\t14 & 100 & 1000 & 0.1 & 10.00 & 0.03 & 0.56 ( 0.01 ) & 1.27 ( 0.25 ) & 5.59 ( 0.08 ) & 1.68 & 0.73 & 0.56 & 1.27 & 5.59\\\\\n", + "\t15 & 500 & 1000 & 0.1 & 2.00 & 0.00 & 0.5 ( 0 ) & 0 ( 0 ) & 5.98 ( 0.02 ) & 0.02 & 0 & 0.50 & 0.00 & 5.98\\\\\n", + "\t16 & 1000 & 1000 & 0.1 & 1.00 & NaN & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 0.50 & 0.00 & 6.00\\\\\n", + "\t17 & 50 & 50 & 0.3 & 1.00 & 0.14 & 0.86 ( 0.01 ) & 9.81 ( 1.05 ) & 1.78 ( 0.11 ) & 14.03 & 0.6 & 0.86 & 9.81 & 1.78\\\\\n", + "\t18 & 100 & 50 & 0.3 & 0.50 & 0.37 & 0.83 ( 0.01 ) & 3.64 ( 0.75 ) & 1.7 ( 0.09 ) & 7.94 & 0.27 & 0.83 & 3.64 & 1.70\\\\\n", + "\t19 & 500 & 50 & 0.3 & 0.10 & 0.81 & 0.81 ( 0 ) & 0.02 ( 0.01 ) & 1.75 ( 0.09 ) & 4.27 & 0 & 0.81 & 0.02 & 1.75\\\\\n", + "\t20 & 1000 & 50 & 0.3 & 0.05 & 0.81 & 0.8 ( 0 ) & 0.06 ( 0.05 ) & 1.7 ( 0.09 ) & 4.36 & 0.01 & 0.80 & 0.06 & 1.70\\\\\n", + "\t21 & 50 & 100 & 0.3 & 2.00 & 0.10 & 0.9 ( 0 ) & 16.32 ( 1.58 ) & 2.2 ( 0.11 ) & 20.12 & 0.74 & 0.90 & 16.32 & 2.20\\\\\n", + "\t22 & 100 & 100 & 0.3 & 1.00 & 0.31 & 0.84 ( 0 ) & 5.71 ( 1.02 ) & 1.72 ( 0.1 ) & 9.99 & 0.41 & 0.84 & 5.71 & 1.72\\\\\n", + "\t23 & 500 & 100 & 0.3 & 0.20 & 0.80 & 0.81 ( 0 ) & 0.12 ( 0.06 ) & 1.7 ( 0.09 ) & 4.42 & 0.01 & 0.81 & 0.12 & 1.70\\\\\n", + "\t24 & 1000 & 100 & 0.3 & 0.10 & 0.74 & 0.8 ( 0 ) & 0.49 ( 0.26 ) & 2.05 ( 0.08 ) & 4.44 & 0.04 & 0.80 & 0.49 & 2.05\\\\\n", + "\t25 & 50 & 500 & 0.3 & 10.00 & 0.02 & 1 ( 0 ) & 105.94 ( 7.57 ) & 2.04 ( 0.11 ) & 109.90 & 0.95 & 1.00 & 105.94 & 2.04\\\\\n", + "\t26 & 100 & 500 & 0.3 & 5.00 & 0.12 & 0.88 ( 0.01 ) & 23.82 ( 3.36 ) & 1.9 ( 0.09 ) & 27.92 & 0.75 & 0.88 & 23.82 & 1.90\\\\\n", + "\t27 & 500 & 500 & 0.3 & 1.00 & 0.79 & 0.8 ( 0 ) & 0.24 ( 0.08 ) & 1.86 ( 0.09 ) & 4.38 & 0.03 & 0.80 & 0.24 & 1.86\\\\\n", + "\t28 & 1000 & 500 & 0.3 & 0.50 & 0.73 & 0.8 ( 0 ) & 0.63 ( 0.15 ) & 1.85 ( 0.09 ) & 4.78 & 0.08 & 0.80 & 0.63 & 1.85\\\\\n", + "\t29 & 50 & 1000 & 0.3 & 20.00 & 0.02 & 1 ( 0 ) & 154.21 ( 5.09 ) & 2.09 ( 0.1 ) & 158.12 & 0.97 & 1.00 & 154.21 & 2.09\\\\\n", + "\t30 & 100 & 1000 & 0.3 & 10.00 & 0.07 & 0.91 ( 0 ) & 36.7 ( 6.19 ) & 2.26 ( 0.1 ) & 40.44 & 0.84 & 0.91 & 36.70 & 2.26\\\\\n", + "\t⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮\\\\\n", + "\t51 & 500 & 50 & 0.7 & 0.10 & 0.96 & 0.9 ( 0 ) & 0.17 ( 0.08 ) & 0.04 ( 0.02 ) & 6.13 & 0.02 & 0.90 & 0.17 & 0.04\\\\\n", + "\t52 & 1000 & 50 & 0.7 & 0.05 & 0.98 & 0.89 ( 0 ) & 0.1 ( 0.06 ) & 0 ( 0 ) & 6.10 & 0.01 & 0.89 & 0.10 & 0.00\\\\\n", + "\t53 & 50 & 100 & 0.7 & 2.00 & 0.06 & 0.99 ( 0 ) & 35.59 ( 2.41 ) & 0.94 ( 0.09 ) & 40.65 & 0.83 & 0.99 & 35.59 & 0.94\\\\\n", + "\t54 & 100 & 100 & 0.7 & 1.00 & 0.26 & 0.92 ( 0 ) & 11.64 ( 1.38 ) & 0.53 ( 0.06 ) & 17.11 & 0.57 & 0.92 & 11.64 & 0.53\\\\\n", + "\t55 & 500 & 100 & 0.7 & 0.20 & 0.97 & 0.9 ( 0 ) & 0.15 ( 0.07 ) & 0.05 ( 0.02 ) & 6.10 & 0.02 & 0.90 & 0.15 & 0.05\\\\\n", + "\t56 & 1000 & 100 & 0.7 & 0.10 & 0.93 & 0.9 ( 0 ) & 0.41 ( 0.14 ) & 0.03 ( 0.02 ) & 6.38 & 0.04 & 0.90 & 0.41 & 0.03\\\\\n", + "\t57 & 50 & 500 & 0.7 & 10.00 & 0.02 & 1 ( 0 ) & 171.29 ( 6.32 ) & 1.12 ( 0.09 ) & 176.17 & 0.97 & 1.00 & 171.29 & 1.12\\\\\n", + "\t58 & 100 & 500 & 0.7 & 5.00 & 0.06 & 0.98 ( 0 ) & 68.31 ( 6.57 ) & 0.98 ( 0.09 ) & 73.33 & 0.87 & 0.98 & 68.31 & 0.98\\\\\n", + "\t59 & 500 & 500 & 0.7 & 1.00 & 0.93 & 0.89 ( 0 ) & 0.37 ( 0.12 ) & 0.06 ( 0.02 ) & 6.31 & 0.04 & 0.89 & 0.37 & 0.06\\\\\n", + "\t60 & 1000 & 500 & 0.7 & 0.50 & 0.98 & 0.9 ( 0 ) & 0.13 ( 0.07 ) & 0.01 ( 0.01 ) & 6.12 & 0.01 & 0.90 & 0.13 & 0.01\\\\\n", + "\t61 & 50 & 1000 & 0.7 & 20.00 & 0.01 & 1 ( 0 ) & 275.88 ( 8.89 ) & 1.39 ( 0.09 ) & 280.49 & 0.98 & 1.00 & 275.88 & 1.39\\\\\n", + "\t62 & 100 & 1000 & 0.7 & 10.00 & 0.03 & 1 ( 0 ) & 155.38 ( 7.45 ) & 0.93 ( 0.08 ) & 160.45 & 0.95 & 1.00 & 155.38 & 0.93\\\\\n", + "\t63 & 500 & 1000 & 0.7 & 2.00 & 0.84 & 0.9 ( 0 ) & 1.07 ( 0.26 ) & 0.1 ( 0.03 ) & 6.97 & 0.09 & 0.90 & 1.07 & 0.10\\\\\n", + "\t64 & 1000 & 1000 & 0.7 & 1.00 & 0.95 & 0.9 ( 0 ) & 0.3 ( 0.11 ) & 0.02 ( 0.01 ) & 6.28 & 0.03 & 0.90 & 0.30 & 0.02\\\\\n", + "\t65 & 50 & 50 & 0.9 & 1.00 & 0.13 & 0.97 ( 0 ) & 15.75 ( 1.04 ) & 0.71 ( 0.07 ) & 21.04 & 0.7 & 0.97 & 15.75 & 0.71\\\\\n", + "\t66 & 100 & 50 & 0.9 & 0.50 & 0.44 & 0.93 ( 0 ) & 5.06 ( 0.38 ) & 0.34 ( 0.05 ) & 10.72 & 0.42 & 0.93 & 5.06 & 0.34\\\\\n", + "\t67 & 500 & 50 & 0.9 & 0.10 & 0.98 & 0.91 ( 0 ) & 0.07 ( 0.04 ) & 0.03 ( 0.02 ) & 6.04 & 0.01 & 0.91 & 0.07 & 0.03\\\\\n", + "\t68 & 1000 & 50 & 0.9 & 0.05 & 1.00 & 0.91 ( 0 ) & 0 ( 0 ) & 0 ( 0 ) & 6.00 & 0 & 0.91 & 0.00 & 0.00\\\\\n", + "\t69 & 50 & 100 & 0.9 & 2.00 & 0.06 & 0.99 ( 0 ) & 37.69 ( 2.33 ) & 0.96 ( 0.09 ) & 42.73 & 0.84 & 0.99 & 37.69 & 0.96\\\\\n", + "\t70 & 100 & 100 & 0.9 & 1.00 & 0.26 & 0.94 ( 0 ) & 11.53 ( 1.15 ) & 0.52 ( 0.06 ) & 17.01 & 0.61 & 0.94 & 11.53 & 0.52\\\\\n", + "\t71 & 500 & 100 & 0.9 & 0.20 & 0.96 & 0.91 ( 0 ) & 0.18 ( 0.06 ) & 0.03 ( 0.02 ) & 6.15 & 0.02 & 0.91 & 0.18 & 0.03\\\\\n", + "\t72 & 1000 & 100 & 0.9 & 0.10 & 0.97 & 0.91 ( 0 ) & 0.17 ( 0.09 ) & 0 ( 0 ) & 6.17 & 0.02 & 0.91 & 0.17 & 0.00\\\\\n", + "\t73 & 50 & 500 & 0.9 & 10.00 & 0.01 & 1 ( 0 ) & 189.13 ( 6.24 ) & 0.91 ( 0.1 ) & 194.22 & 0.97 & 1.00 & 189.13 & 0.91\\\\\n", + "\t74 & 100 & 500 & 0.9 & 5.00 & 0.05 & 0.99 ( 0 ) & 88.92 ( 5.92 ) & 0.68 ( 0.07 ) & 94.24 & 0.92 & 0.99 & 88.92 & 0.68\\\\\n", + "\t75 & 500 & 500 & 0.9 & 1.00 & 0.85 & 0.91 ( 0 ) & 1.08 ( 0.33 ) & 0.01 ( 0.01 ) & 7.07 & 0.08 & 0.91 & 1.08 & 0.01\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.50 & 0.98 & 0.91 ( 0 ) & 0.14 ( 0.07 ) & 0 ( 0 ) & 6.14 & 0.02 & 0.91 & 0.14 & 0.00\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.00 & 0.01 & 1 ( 0 ) & 330.51 ( 8.59 ) & 0.97 ( 0.08 ) & 335.54 & 0.98 & 1.00 & 330.51 & 0.97\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.00 & 0.02 & 1 ( 0 ) & 217.74 ( 6.88 ) & 0.67 ( 0.07 ) & 223.07 & 0.97 & 1.00 & 217.74 & 0.67\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.00 & 0.76 & 0.91 ( 0 ) & 1.91 ( 0.48 ) & 0.02 ( 0.01 ) & 7.89 & 0.12 & 0.91 & 1.91 & 0.02\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.00 & 0.95 & 0.91 ( 0 ) & 0.27 ( 0.11 ) & 0.02 ( 0.01 ) & 6.25 & 0.03 & 0.91 & 0.27 & 0.02\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 80 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1.00 | 0.02 | 0.58 ( 0.01 ) | 1.68 ( 0.53 ) | 5.42 ( 0.1 ) | 2.26 | 0.58 | 0.58 | 1.68 | 5.42 |\n", + "| 2 | 100 | 50 | 0.1 | 0.50 | 0.06 | 0.51 ( 0 ) | 0.08 ( 0.04 ) | 5.65 ( 0.08 ) | 0.43 | 0.18 | 0.51 | 0.08 | 5.65 |\n", + "| 3 | 500 | 50 | 0.1 | 0.10 | NaN | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 0.50 | 0.00 | 6.00 |\n", + "| 4 | 1000 | 50 | 0.1 | 0.05 | NaN | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 0.50 | 0.00 | 6.00 |\n", + "| 5 | 50 | 100 | 0.1 | 2.00 | 0.04 | 0.61 ( 0.01 ) | 3.43 ( 0.63 ) | 5.23 ( 0.1 ) | 4.20 | 0.71 | 0.61 | 3.43 | 5.23 |\n", + "| 6 | 100 | 100 | 0.1 | 1.00 | 0.03 | 0.51 ( 0 ) | 0.31 ( 0.1 ) | 5.8 ( 0.05 ) | 0.51 | 0.53 | 0.51 | 0.31 | 5.80 |\n", + "| 7 | 500 | 100 | 0.1 | 0.20 | NaN | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 0.50 | 0.00 | 6.00 |\n", + "| 8 | 1000 | 100 | 0.1 | 0.10 | NaN | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 0.50 | 0.00 | 6.00 |\n", + "| 9 | 50 | 500 | 0.1 | 10.00 | 0.00 | 0.73 ( 0.01 ) | 29.62 ( 7.94 ) | 5.17 ( 0.13 ) | 30.45 | 0.9 | 0.73 | 29.62 | 5.17 |\n", + "| 10 | 100 | 500 | 0.1 | 5.00 | 0.04 | 0.53 ( 0.01 ) | 0.53 ( 0.1 ) | 5.63 ( 0.08 ) | 0.90 | 0.57 | 0.53 | 0.53 | 5.63 |\n", + "| 11 | 500 | 500 | 0.1 | 1.00 | NaN | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 0.50 | 0.00 | 6.00 |\n", + "| 12 | 1000 | 500 | 0.1 | 0.50 | NaN | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 0.50 | 0.00 | 6.00 |\n", + "| 13 | 50 | 1000 | 0.1 | 20.00 | 0.01 | 0.83 ( 0.01 ) | 17.45 ( 2.89 ) | 5.37 ( 0.1 ) | 18.08 | 0.94 | 0.83 | 17.45 | 5.37 |\n", + "| 14 | 100 | 1000 | 0.1 | 10.00 | 0.03 | 0.56 ( 0.01 ) | 1.27 ( 0.25 ) | 5.59 ( 0.08 ) | 1.68 | 0.73 | 0.56 | 1.27 | 5.59 |\n", + "| 15 | 500 | 1000 | 0.1 | 2.00 | 0.00 | 0.5 ( 0 ) | 0 ( 0 ) | 5.98 ( 0.02 ) | 0.02 | 0 | 0.50 | 0.00 | 5.98 |\n", + "| 16 | 1000 | 1000 | 0.1 | 1.00 | NaN | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 0.50 | 0.00 | 6.00 |\n", + "| 17 | 50 | 50 | 0.3 | 1.00 | 0.14 | 0.86 ( 0.01 ) | 9.81 ( 1.05 ) | 1.78 ( 0.11 ) | 14.03 | 0.6 | 0.86 | 9.81 | 1.78 |\n", + "| 18 | 100 | 50 | 0.3 | 0.50 | 0.37 | 0.83 ( 0.01 ) | 3.64 ( 0.75 ) | 1.7 ( 0.09 ) | 7.94 | 0.27 | 0.83 | 3.64 | 1.70 |\n", + "| 19 | 500 | 50 | 0.3 | 0.10 | 0.81 | 0.81 ( 0 ) | 0.02 ( 0.01 ) | 1.75 ( 0.09 ) | 4.27 | 0 | 0.81 | 0.02 | 1.75 |\n", + "| 20 | 1000 | 50 | 0.3 | 0.05 | 0.81 | 0.8 ( 0 ) | 0.06 ( 0.05 ) | 1.7 ( 0.09 ) | 4.36 | 0.01 | 0.80 | 0.06 | 1.70 |\n", + "| 21 | 50 | 100 | 0.3 | 2.00 | 0.10 | 0.9 ( 0 ) | 16.32 ( 1.58 ) | 2.2 ( 0.11 ) | 20.12 | 0.74 | 0.90 | 16.32 | 2.20 |\n", + "| 22 | 100 | 100 | 0.3 | 1.00 | 0.31 | 0.84 ( 0 ) | 5.71 ( 1.02 ) | 1.72 ( 0.1 ) | 9.99 | 0.41 | 0.84 | 5.71 | 1.72 |\n", + "| 23 | 500 | 100 | 0.3 | 0.20 | 0.80 | 0.81 ( 0 ) | 0.12 ( 0.06 ) | 1.7 ( 0.09 ) | 4.42 | 0.01 | 0.81 | 0.12 | 1.70 |\n", + "| 24 | 1000 | 100 | 0.3 | 0.10 | 0.74 | 0.8 ( 0 ) | 0.49 ( 0.26 ) | 2.05 ( 0.08 ) | 4.44 | 0.04 | 0.80 | 0.49 | 2.05 |\n", + "| 25 | 50 | 500 | 0.3 | 10.00 | 0.02 | 1 ( 0 ) | 105.94 ( 7.57 ) | 2.04 ( 0.11 ) | 109.90 | 0.95 | 1.00 | 105.94 | 2.04 |\n", + "| 26 | 100 | 500 | 0.3 | 5.00 | 0.12 | 0.88 ( 0.01 ) | 23.82 ( 3.36 ) | 1.9 ( 0.09 ) | 27.92 | 0.75 | 0.88 | 23.82 | 1.90 |\n", + "| 27 | 500 | 500 | 0.3 | 1.00 | 0.79 | 0.8 ( 0 ) | 0.24 ( 0.08 ) | 1.86 ( 0.09 ) | 4.38 | 0.03 | 0.80 | 0.24 | 1.86 |\n", + "| 28 | 1000 | 500 | 0.3 | 0.50 | 0.73 | 0.8 ( 0 ) | 0.63 ( 0.15 ) | 1.85 ( 0.09 ) | 4.78 | 0.08 | 0.80 | 0.63 | 1.85 |\n", + "| 29 | 50 | 1000 | 0.3 | 20.00 | 0.02 | 1 ( 0 ) | 154.21 ( 5.09 ) | 2.09 ( 0.1 ) | 158.12 | 0.97 | 1.00 | 154.21 | 2.09 |\n", + "| 30 | 100 | 1000 | 0.3 | 10.00 | 0.07 | 0.91 ( 0 ) | 36.7 ( 6.19 ) | 2.26 ( 0.1 ) | 40.44 | 0.84 | 0.91 | 36.70 | 2.26 |\n", + "| ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ |\n", + "| 51 | 500 | 50 | 0.7 | 0.10 | 0.96 | 0.9 ( 0 ) | 0.17 ( 0.08 ) | 0.04 ( 0.02 ) | 6.13 | 0.02 | 0.90 | 0.17 | 0.04 |\n", + "| 52 | 1000 | 50 | 0.7 | 0.05 | 0.98 | 0.89 ( 0 ) | 0.1 ( 0.06 ) | 0 ( 0 ) | 6.10 | 0.01 | 0.89 | 0.10 | 0.00 |\n", + "| 53 | 50 | 100 | 0.7 | 2.00 | 0.06 | 0.99 ( 0 ) | 35.59 ( 2.41 ) | 0.94 ( 0.09 ) | 40.65 | 0.83 | 0.99 | 35.59 | 0.94 |\n", + "| 54 | 100 | 100 | 0.7 | 1.00 | 0.26 | 0.92 ( 0 ) | 11.64 ( 1.38 ) | 0.53 ( 0.06 ) | 17.11 | 0.57 | 0.92 | 11.64 | 0.53 |\n", + "| 55 | 500 | 100 | 0.7 | 0.20 | 0.97 | 0.9 ( 0 ) | 0.15 ( 0.07 ) | 0.05 ( 0.02 ) | 6.10 | 0.02 | 0.90 | 0.15 | 0.05 |\n", + "| 56 | 1000 | 100 | 0.7 | 0.10 | 0.93 | 0.9 ( 0 ) | 0.41 ( 0.14 ) | 0.03 ( 0.02 ) | 6.38 | 0.04 | 0.90 | 0.41 | 0.03 |\n", + "| 57 | 50 | 500 | 0.7 | 10.00 | 0.02 | 1 ( 0 ) | 171.29 ( 6.32 ) | 1.12 ( 0.09 ) | 176.17 | 0.97 | 1.00 | 171.29 | 1.12 |\n", + "| 58 | 100 | 500 | 0.7 | 5.00 | 0.06 | 0.98 ( 0 ) | 68.31 ( 6.57 ) | 0.98 ( 0.09 ) | 73.33 | 0.87 | 0.98 | 68.31 | 0.98 |\n", + "| 59 | 500 | 500 | 0.7 | 1.00 | 0.93 | 0.89 ( 0 ) | 0.37 ( 0.12 ) | 0.06 ( 0.02 ) | 6.31 | 0.04 | 0.89 | 0.37 | 0.06 |\n", + "| 60 | 1000 | 500 | 0.7 | 0.50 | 0.98 | 0.9 ( 0 ) | 0.13 ( 0.07 ) | 0.01 ( 0.01 ) | 6.12 | 0.01 | 0.90 | 0.13 | 0.01 |\n", + "| 61 | 50 | 1000 | 0.7 | 20.00 | 0.01 | 1 ( 0 ) | 275.88 ( 8.89 ) | 1.39 ( 0.09 ) | 280.49 | 0.98 | 1.00 | 275.88 | 1.39 |\n", + "| 62 | 100 | 1000 | 0.7 | 10.00 | 0.03 | 1 ( 0 ) | 155.38 ( 7.45 ) | 0.93 ( 0.08 ) | 160.45 | 0.95 | 1.00 | 155.38 | 0.93 |\n", + "| 63 | 500 | 1000 | 0.7 | 2.00 | 0.84 | 0.9 ( 0 ) | 1.07 ( 0.26 ) | 0.1 ( 0.03 ) | 6.97 | 0.09 | 0.90 | 1.07 | 0.10 |\n", + "| 64 | 1000 | 1000 | 0.7 | 1.00 | 0.95 | 0.9 ( 0 ) | 0.3 ( 0.11 ) | 0.02 ( 0.01 ) | 6.28 | 0.03 | 0.90 | 0.30 | 0.02 |\n", + "| 65 | 50 | 50 | 0.9 | 1.00 | 0.13 | 0.97 ( 0 ) | 15.75 ( 1.04 ) | 0.71 ( 0.07 ) | 21.04 | 0.7 | 0.97 | 15.75 | 0.71 |\n", + "| 66 | 100 | 50 | 0.9 | 0.50 | 0.44 | 0.93 ( 0 ) | 5.06 ( 0.38 ) | 0.34 ( 0.05 ) | 10.72 | 0.42 | 0.93 | 5.06 | 0.34 |\n", + "| 67 | 500 | 50 | 0.9 | 0.10 | 0.98 | 0.91 ( 0 ) | 0.07 ( 0.04 ) | 0.03 ( 0.02 ) | 6.04 | 0.01 | 0.91 | 0.07 | 0.03 |\n", + "| 68 | 1000 | 50 | 0.9 | 0.05 | 1.00 | 0.91 ( 0 ) | 0 ( 0 ) | 0 ( 0 ) | 6.00 | 0 | 0.91 | 0.00 | 0.00 |\n", + "| 69 | 50 | 100 | 0.9 | 2.00 | 0.06 | 0.99 ( 0 ) | 37.69 ( 2.33 ) | 0.96 ( 0.09 ) | 42.73 | 0.84 | 0.99 | 37.69 | 0.96 |\n", + "| 70 | 100 | 100 | 0.9 | 1.00 | 0.26 | 0.94 ( 0 ) | 11.53 ( 1.15 ) | 0.52 ( 0.06 ) | 17.01 | 0.61 | 0.94 | 11.53 | 0.52 |\n", + "| 71 | 500 | 100 | 0.9 | 0.20 | 0.96 | 0.91 ( 0 ) | 0.18 ( 0.06 ) | 0.03 ( 0.02 ) | 6.15 | 0.02 | 0.91 | 0.18 | 0.03 |\n", + "| 72 | 1000 | 100 | 0.9 | 0.10 | 0.97 | 0.91 ( 0 ) | 0.17 ( 0.09 ) | 0 ( 0 ) | 6.17 | 0.02 | 0.91 | 0.17 | 0.00 |\n", + "| 73 | 50 | 500 | 0.9 | 10.00 | 0.01 | 1 ( 0 ) | 189.13 ( 6.24 ) | 0.91 ( 0.1 ) | 194.22 | 0.97 | 1.00 | 189.13 | 0.91 |\n", + "| 74 | 100 | 500 | 0.9 | 5.00 | 0.05 | 0.99 ( 0 ) | 88.92 ( 5.92 ) | 0.68 ( 0.07 ) | 94.24 | 0.92 | 0.99 | 88.92 | 0.68 |\n", + "| 75 | 500 | 500 | 0.9 | 1.00 | 0.85 | 0.91 ( 0 ) | 1.08 ( 0.33 ) | 0.01 ( 0.01 ) | 7.07 | 0.08 | 0.91 | 1.08 | 0.01 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.50 | 0.98 | 0.91 ( 0 ) | 0.14 ( 0.07 ) | 0 ( 0 ) | 6.14 | 0.02 | 0.91 | 0.14 | 0.00 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.00 | 0.01 | 1 ( 0 ) | 330.51 ( 8.59 ) | 0.97 ( 0.08 ) | 335.54 | 0.98 | 1.00 | 330.51 | 0.97 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.00 | 0.02 | 1 ( 0 ) | 217.74 ( 6.88 ) | 0.67 ( 0.07 ) | 223.07 | 0.97 | 1.00 | 217.74 | 0.67 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.00 | 0.76 | 0.91 ( 0 ) | 1.91 ( 0.48 ) | 0.02 ( 0.01 ) | 7.89 | 0.12 | 0.91 | 1.91 | 0.02 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.00 | 0.95 | 0.91 ( 0 ) | 0.27 ( 0.11 ) | 0.02 ( 0.01 ) | 6.25 | 0.03 | 0.91 | 0.27 | 0.02 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "1 50 50 0.1 1.00 0.02 0.58 ( 0.01 ) 1.68 ( 0.53 ) 5.42 ( 0.1 ) \n", + "2 100 50 0.1 0.50 0.06 0.51 ( 0 ) 0.08 ( 0.04 ) 5.65 ( 0.08 )\n", + "3 500 50 0.1 0.10 NaN 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + "4 1000 50 0.1 0.05 NaN 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + "5 50 100 0.1 2.00 0.04 0.61 ( 0.01 ) 3.43 ( 0.63 ) 5.23 ( 0.1 ) \n", + "6 100 100 0.1 1.00 0.03 0.51 ( 0 ) 0.31 ( 0.1 ) 5.8 ( 0.05 ) \n", + "7 500 100 0.1 0.20 NaN 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + "8 1000 100 0.1 0.10 NaN 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + "9 50 500 0.1 10.00 0.00 0.73 ( 0.01 ) 29.62 ( 7.94 ) 5.17 ( 0.13 )\n", + "10 100 500 0.1 5.00 0.04 0.53 ( 0.01 ) 0.53 ( 0.1 ) 5.63 ( 0.08 )\n", + "11 500 500 0.1 1.00 NaN 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + "12 1000 500 0.1 0.50 NaN 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + "13 50 1000 0.1 20.00 0.01 0.83 ( 0.01 ) 17.45 ( 2.89 ) 5.37 ( 0.1 ) \n", + "14 100 1000 0.1 10.00 0.03 0.56 ( 0.01 ) 1.27 ( 0.25 ) 5.59 ( 0.08 )\n", + "15 500 1000 0.1 2.00 0.00 0.5 ( 0 ) 0 ( 0 ) 5.98 ( 0.02 )\n", + "16 1000 1000 0.1 1.00 NaN 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + "17 50 50 0.3 1.00 0.14 0.86 ( 0.01 ) 9.81 ( 1.05 ) 1.78 ( 0.11 )\n", + "18 100 50 0.3 0.50 0.37 0.83 ( 0.01 ) 3.64 ( 0.75 ) 1.7 ( 0.09 ) \n", + "19 500 50 0.3 0.10 0.81 0.81 ( 0 ) 0.02 ( 0.01 ) 1.75 ( 0.09 )\n", + "20 1000 50 0.3 0.05 0.81 0.8 ( 0 ) 0.06 ( 0.05 ) 1.7 ( 0.09 ) \n", + "21 50 100 0.3 2.00 0.10 0.9 ( 0 ) 16.32 ( 1.58 ) 2.2 ( 0.11 ) \n", + "22 100 100 0.3 1.00 0.31 0.84 ( 0 ) 5.71 ( 1.02 ) 1.72 ( 0.1 ) \n", + "23 500 100 0.3 0.20 0.80 0.81 ( 0 ) 0.12 ( 0.06 ) 1.7 ( 0.09 ) \n", + "24 1000 100 0.3 0.10 0.74 0.8 ( 0 ) 0.49 ( 0.26 ) 2.05 ( 0.08 )\n", + "25 50 500 0.3 10.00 0.02 1 ( 0 ) 105.94 ( 7.57 ) 2.04 ( 0.11 )\n", + "26 100 500 0.3 5.00 0.12 0.88 ( 0.01 ) 23.82 ( 3.36 ) 1.9 ( 0.09 ) \n", + "27 500 500 0.3 1.00 0.79 0.8 ( 0 ) 0.24 ( 0.08 ) 1.86 ( 0.09 )\n", + "28 1000 500 0.3 0.50 0.73 0.8 ( 0 ) 0.63 ( 0.15 ) 1.85 ( 0.09 )\n", + "29 50 1000 0.3 20.00 0.02 1 ( 0 ) 154.21 ( 5.09 ) 2.09 ( 0.1 ) \n", + "30 100 1000 0.3 10.00 0.07 0.91 ( 0 ) 36.7 ( 6.19 ) 2.26 ( 0.1 ) \n", + "⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ \n", + "51 500 50 0.7 0.10 0.96 0.9 ( 0 ) 0.17 ( 0.08 ) 0.04 ( 0.02 )\n", + "52 1000 50 0.7 0.05 0.98 0.89 ( 0 ) 0.1 ( 0.06 ) 0 ( 0 ) \n", + "53 50 100 0.7 2.00 0.06 0.99 ( 0 ) 35.59 ( 2.41 ) 0.94 ( 0.09 )\n", + "54 100 100 0.7 1.00 0.26 0.92 ( 0 ) 11.64 ( 1.38 ) 0.53 ( 0.06 )\n", + "55 500 100 0.7 0.20 0.97 0.9 ( 0 ) 0.15 ( 0.07 ) 0.05 ( 0.02 )\n", + "56 1000 100 0.7 0.10 0.93 0.9 ( 0 ) 0.41 ( 0.14 ) 0.03 ( 0.02 )\n", + "57 50 500 0.7 10.00 0.02 1 ( 0 ) 171.29 ( 6.32 ) 1.12 ( 0.09 )\n", + "58 100 500 0.7 5.00 0.06 0.98 ( 0 ) 68.31 ( 6.57 ) 0.98 ( 0.09 )\n", + "59 500 500 0.7 1.00 0.93 0.89 ( 0 ) 0.37 ( 0.12 ) 0.06 ( 0.02 )\n", + "60 1000 500 0.7 0.50 0.98 0.9 ( 0 ) 0.13 ( 0.07 ) 0.01 ( 0.01 )\n", + "61 50 1000 0.7 20.00 0.01 1 ( 0 ) 275.88 ( 8.89 ) 1.39 ( 0.09 )\n", + "62 100 1000 0.7 10.00 0.03 1 ( 0 ) 155.38 ( 7.45 ) 0.93 ( 0.08 )\n", + "63 500 1000 0.7 2.00 0.84 0.9 ( 0 ) 1.07 ( 0.26 ) 0.1 ( 0.03 ) \n", + "64 1000 1000 0.7 1.00 0.95 0.9 ( 0 ) 0.3 ( 0.11 ) 0.02 ( 0.01 )\n", + "65 50 50 0.9 1.00 0.13 0.97 ( 0 ) 15.75 ( 1.04 ) 0.71 ( 0.07 )\n", + "66 100 50 0.9 0.50 0.44 0.93 ( 0 ) 5.06 ( 0.38 ) 0.34 ( 0.05 )\n", + "67 500 50 0.9 0.10 0.98 0.91 ( 0 ) 0.07 ( 0.04 ) 0.03 ( 0.02 )\n", + "68 1000 50 0.9 0.05 1.00 0.91 ( 0 ) 0 ( 0 ) 0 ( 0 ) \n", + "69 50 100 0.9 2.00 0.06 0.99 ( 0 ) 37.69 ( 2.33 ) 0.96 ( 0.09 )\n", + "70 100 100 0.9 1.00 0.26 0.94 ( 0 ) 11.53 ( 1.15 ) 0.52 ( 0.06 )\n", + "71 500 100 0.9 0.20 0.96 0.91 ( 0 ) 0.18 ( 0.06 ) 0.03 ( 0.02 )\n", + "72 1000 100 0.9 0.10 0.97 0.91 ( 0 ) 0.17 ( 0.09 ) 0 ( 0 ) \n", + "73 50 500 0.9 10.00 0.01 1 ( 0 ) 189.13 ( 6.24 ) 0.91 ( 0.1 ) \n", + "74 100 500 0.9 5.00 0.05 0.99 ( 0 ) 88.92 ( 5.92 ) 0.68 ( 0.07 )\n", + "75 500 500 0.9 1.00 0.85 0.91 ( 0 ) 1.08 ( 0.33 ) 0.01 ( 0.01 )\n", + "76 1000 500 0.9 0.50 0.98 0.91 ( 0 ) 0.14 ( 0.07 ) 0 ( 0 ) \n", + "77 50 1000 0.9 20.00 0.01 1 ( 0 ) 330.51 ( 8.59 ) 0.97 ( 0.08 )\n", + "78 100 1000 0.9 10.00 0.02 1 ( 0 ) 217.74 ( 6.88 ) 0.67 ( 0.07 )\n", + "79 500 1000 0.9 2.00 0.76 0.91 ( 0 ) 1.91 ( 0.48 ) 0.02 ( 0.01 )\n", + "80 1000 1000 0.9 1.00 0.95 0.91 ( 0 ) 0.27 ( 0.11 ) 0.02 ( 0.01 )\n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "1 2.26 0.58 0.58 1.68 5.42 \n", + "2 0.43 0.18 0.51 0.08 5.65 \n", + "3 0.00 NaN 0.50 0.00 6.00 \n", + "4 0.00 NaN 0.50 0.00 6.00 \n", + "5 4.20 0.71 0.61 3.43 5.23 \n", + "6 0.51 0.53 0.51 0.31 5.80 \n", + "7 0.00 NaN 0.50 0.00 6.00 \n", + "8 0.00 NaN 0.50 0.00 6.00 \n", + "9 30.45 0.9 0.73 29.62 5.17 \n", + "10 0.90 0.57 0.53 0.53 5.63 \n", + "11 0.00 NaN 0.50 0.00 6.00 \n", + "12 0.00 NaN 0.50 0.00 6.00 \n", + "13 18.08 0.94 0.83 17.45 5.37 \n", + "14 1.68 0.73 0.56 1.27 5.59 \n", + "15 0.02 0 0.50 0.00 5.98 \n", + "16 0.00 NaN 0.50 0.00 6.00 \n", + "17 14.03 0.6 0.86 9.81 1.78 \n", + "18 7.94 0.27 0.83 3.64 1.70 \n", + "19 4.27 0 0.81 0.02 1.75 \n", + "20 4.36 0.01 0.80 0.06 1.70 \n", + "21 20.12 0.74 0.90 16.32 2.20 \n", + "22 9.99 0.41 0.84 5.71 1.72 \n", + "23 4.42 0.01 0.81 0.12 1.70 \n", + "24 4.44 0.04 0.80 0.49 2.05 \n", + "25 109.90 0.95 1.00 105.94 2.04 \n", + "26 27.92 0.75 0.88 23.82 1.90 \n", + "27 4.38 0.03 0.80 0.24 1.86 \n", + "28 4.78 0.08 0.80 0.63 1.85 \n", + "29 158.12 0.97 1.00 154.21 2.09 \n", + "30 40.44 0.84 0.91 36.70 2.26 \n", + "⋮ ⋮ ⋮ ⋮ ⋮ ⋮ \n", + "51 6.13 0.02 0.90 0.17 0.04 \n", + "52 6.10 0.01 0.89 0.10 0.00 \n", + "53 40.65 0.83 0.99 35.59 0.94 \n", + "54 17.11 0.57 0.92 11.64 0.53 \n", + "55 6.10 0.02 0.90 0.15 0.05 \n", + "56 6.38 0.04 0.90 0.41 0.03 \n", + "57 176.17 0.97 1.00 171.29 1.12 \n", + "58 73.33 0.87 0.98 68.31 0.98 \n", + "59 6.31 0.04 0.89 0.37 0.06 \n", + "60 6.12 0.01 0.90 0.13 0.01 \n", + "61 280.49 0.98 1.00 275.88 1.39 \n", + "62 160.45 0.95 1.00 155.38 0.93 \n", + "63 6.97 0.09 0.90 1.07 0.10 \n", + "64 6.28 0.03 0.90 0.30 0.02 \n", + "65 21.04 0.7 0.97 15.75 0.71 \n", + "66 10.72 0.42 0.93 5.06 0.34 \n", + "67 6.04 0.01 0.91 0.07 0.03 \n", + "68 6.00 0 0.91 0.00 0.00 \n", + "69 42.73 0.84 0.99 37.69 0.96 \n", + "70 17.01 0.61 0.94 11.53 0.52 \n", + "71 6.15 0.02 0.91 0.18 0.03 \n", + "72 6.17 0.02 0.91 0.17 0.00 \n", + "73 194.22 0.97 1.00 189.13 0.91 \n", + "74 94.24 0.92 0.99 88.92 0.68 \n", + "75 7.07 0.08 0.91 1.08 0.01 \n", + "76 6.14 0.02 0.91 0.14 0.00 \n", + "77 335.54 0.98 1.00 330.51 0.97 \n", + "78 223.07 0.97 1.00 217.74 0.67 \n", + "79 7.89 0.12 0.91 1.91 0.02 \n", + "80 6.25 0.03 0.91 0.27 0.02 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_block\n", + "\n", + "## export\n", + "write.table(result.table_block, '../results_summary_bin/sim_block_GenCompLasso_binary.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_bin/.ipynb_checkpoints/3_sim_binary_summary_update-checkpoint.ipynb b/simulations/notebooks_sim_bin/.ipynb_checkpoints/3_sim_binary_summary_update-checkpoint.ipynb new file mode 100644 index 0000000..52874ac --- /dev/null +++ b/simulations/notebooks_sim_bin/.ipynb_checkpoints/3_sim_binary_summary_update-checkpoint.ipynb @@ -0,0 +1,1052 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize method comparison results across 4 feature selection methods in different simulation scenarios" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize Independent results" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "ind_lasso = read.csv('../results_summary_bin/sim_ind_lasso_binary.txt', sep='\\t')\n", + "ind_elnet = read.csv('../results_summary_bin/sim_ind_Elnet_binary.txt', sep='\\t')\n", + "ind_rf = read.csv('../results_summary_bin/sim_ind_RF_binary.txt', sep='\\t')\n", + "ind_compLasso = read.csv('../results_summary_bin/sim_ind_GencompLasso_binary.txt', sep='\\t')\n", + "\n", + "ind_lasso$method = rep('lasso', dim(ind_lasso)[1])\n", + "ind_elnet$method = rep('elnet', dim(ind_elnet)[1])\n", + "ind_rf$method = rep('rf', dim(ind_rf)[1])\n", + "ind_compLasso$method = rep('compLasso', dim(ind_compLasso)[1])" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "
  1. 16
  2. 14
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 16\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 16\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 16 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "
  1. 16
  2. 14
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 16\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 16\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 16 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "
  1. 16
  2. 14
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 16\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 16\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 16 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "
  1. 16
  2. 14
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 16\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 16\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 16 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "dim(ind_lasso)\n", + "dim(ind_elnet)\n", + "dim(ind_rf)\n", + "dim(ind_compLasso)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "
  1. 64
  2. 14
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 64\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 64\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 64 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ind = rbind(ind_lasso, ind_elnet)\n", + "ind = rbind(ind, ind_rf)\n", + "ind = rbind(ind, ind_compLasso)\n", + "dim(ind)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 4 × 14
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_meanmethod
<int><int><int><dbl><dbl><fct><fct><fct><dbl><dbl><dbl><dbl><dbl><chr>
3350 500 1NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
3750 1000 2NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
4150 500010NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
45501000020NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
\n" + ], + "text/latex": [ + "A data.frame: 4 × 14\n", + "\\begin{tabular}{r|llllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean & method\\\\\n", + " & & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t33 & 50 & 50 & 0 & 1 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t37 & 50 & 100 & 0 & 2 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t41 & 50 & 500 & 0 & 10 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t45 & 50 & 1000 & 0 & 20 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 4 × 14\n", + "\n", + "| | N <int> | P <int> | Corr <int> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <dbl> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> | method <chr> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 33 | 50 | 50 | 0 | 1 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 37 | 50 | 100 | 0 | 2 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 41 | 50 | 500 | 0 | 10 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 45 | 50 | 1000 | 0 | 20 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select FDR ROC_mean\n", + "33 50 50 0 1 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "37 50 100 0 2 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "41 50 500 0 10 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "45 50 1000 0 20 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + " FP_mean FN_mean method\n", + "33 1 6 rf \n", + "37 1 6 rf \n", + "41 1 6 rf \n", + "45 1 6 rf " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ind[ind$num_select == 0, ]" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "# fix false positives: when nothing was selected, then fp should be zero\n", + "# fp is now 1 due to length(setdiff(0/NA)) = 1 when actually should be 0 (in cv_sim_apply.R)\n", + "ind$FP_mean[ind$num_select ==0] = 0\n", + "write.table(ind, '../results_summary_bin/table_ind_binary_all.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize Toeplitz results" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "toe_lasso = read.csv('../results_summary_bin/sim_toe_lasso_binary.txt', sep='\\t')\n", + "toe_elnet = read.csv('../results_summary_bin/sim_toe_Elnet_binary.txt', sep='\\t')\n", + "toe_rf = read.csv('../results_summary_bin/sim_toe_RF_binary.txt', sep='\\t')\n", + "toe_compLasso = read.csv('../results_summary_bin/sim_toe_GencompLasso_binary.txt', sep='\\t')\n", + "\n", + "toe_lasso$method = rep('lasso', dim(toe_lasso)[1])\n", + "toe_elnet$method = rep('elnet', dim(toe_elnet)[1])\n", + "toe_rf$method = rep('rf', dim(toe_rf)[1])\n", + "toe_compLasso$method = rep('compLasso', dim(toe_compLasso)[1])" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "
  1. 80
  2. 14
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 80\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 80\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 80 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "
  1. 80
  2. 14
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 80\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 80\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 80 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "
  1. 80
  2. 14
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 80\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 80\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 80 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "
  1. 80
  2. 14
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 80\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 80\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 80 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "dim(toe_lasso)\n", + "dim(toe_elnet)\n", + "dim(toe_rf)\n", + "dim(toe_compLasso)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "
  1. 320
  2. 14
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 320\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 320\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 320 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "toe = rbind(toe_lasso, toe_elnet)\n", + "toe = rbind(toe, toe_rf)\n", + "toe = rbind(toe, toe_compLasso)\n", + "dim(toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 20 × 14
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_meanmethod
<int><int><dbl><dbl><dbl><fct><fct><fct><dbl><dbl><dbl><dbl><dbl><chr>
16150 500.1 1NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
16550 1000.1 2NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
16950 5000.110NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
1735010000.120NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
17750 500.3 1NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
18150 1000.3 2NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
18550 5000.310NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
1895010000.320NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
19350 500.5 1NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
19750 1000.5 2NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
20150 5000.510NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
2055010000.520NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
20950 500.7 1NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
21350 1000.7 2NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
21750 5000.710NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
2215010000.720NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
22550 500.9 1NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
22950 1000.9 2NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
23350 5000.910NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
2375010000.920NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
\n" + ], + "text/latex": [ + "A data.frame: 20 × 14\n", + "\\begin{tabular}{r|llllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean & method\\\\\n", + " & & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t161 & 50 & 50 & 0.1 & 1 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t165 & 50 & 100 & 0.1 & 2 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t169 & 50 & 500 & 0.1 & 10 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t173 & 50 & 1000 & 0.1 & 20 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t177 & 50 & 50 & 0.3 & 1 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t181 & 50 & 100 & 0.3 & 2 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t185 & 50 & 500 & 0.3 & 10 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t189 & 50 & 1000 & 0.3 & 20 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t193 & 50 & 50 & 0.5 & 1 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t197 & 50 & 100 & 0.5 & 2 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t201 & 50 & 500 & 0.5 & 10 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t205 & 50 & 1000 & 0.5 & 20 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t209 & 50 & 50 & 0.7 & 1 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t213 & 50 & 100 & 0.7 & 2 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t217 & 50 & 500 & 0.7 & 10 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t221 & 50 & 1000 & 0.7 & 20 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t225 & 50 & 50 & 0.9 & 1 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t229 & 50 & 100 & 0.9 & 2 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t233 & 50 & 500 & 0.9 & 10 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t237 & 50 & 1000 & 0.9 & 20 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 20 × 14\n", + "\n", + "| | N <int> | P <int> | Corr <dbl> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <dbl> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> | method <chr> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 161 | 50 | 50 | 0.1 | 1 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 165 | 50 | 100 | 0.1 | 2 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 169 | 50 | 500 | 0.1 | 10 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 173 | 50 | 1000 | 0.1 | 20 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 177 | 50 | 50 | 0.3 | 1 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 181 | 50 | 100 | 0.3 | 2 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 185 | 50 | 500 | 0.3 | 10 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 189 | 50 | 1000 | 0.3 | 20 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 193 | 50 | 50 | 0.5 | 1 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 197 | 50 | 100 | 0.5 | 2 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 201 | 50 | 500 | 0.5 | 10 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 205 | 50 | 1000 | 0.5 | 20 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 209 | 50 | 50 | 0.7 | 1 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 213 | 50 | 100 | 0.7 | 2 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 217 | 50 | 500 | 0.7 | 10 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 221 | 50 | 1000 | 0.7 | 20 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 225 | 50 | 50 | 0.9 | 1 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 229 | 50 | 100 | 0.9 | 2 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 233 | 50 | 500 | 0.9 | 10 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 237 | 50 | 1000 | 0.9 | 20 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select FDR ROC_mean\n", + "161 50 50 0.1 1 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "165 50 100 0.1 2 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "169 50 500 0.1 10 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "173 50 1000 0.1 20 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "177 50 50 0.3 1 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "181 50 100 0.3 2 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "185 50 500 0.3 10 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "189 50 1000 0.3 20 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "193 50 50 0.5 1 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "197 50 100 0.5 2 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "201 50 500 0.5 10 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "205 50 1000 0.5 20 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "209 50 50 0.7 1 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "213 50 100 0.7 2 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "217 50 500 0.7 10 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "221 50 1000 0.7 20 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "225 50 50 0.9 1 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "229 50 100 0.9 2 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "233 50 500 0.9 10 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "237 50 1000 0.9 20 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + " FP_mean FN_mean method\n", + "161 1 6 rf \n", + "165 1 6 rf \n", + "169 1 6 rf \n", + "173 1 6 rf \n", + "177 1 6 rf \n", + "181 1 6 rf \n", + "185 1 6 rf \n", + "189 1 6 rf \n", + "193 1 6 rf \n", + "197 1 6 rf \n", + "201 1 6 rf \n", + "205 1 6 rf \n", + "209 1 6 rf \n", + "213 1 6 rf \n", + "217 1 6 rf \n", + "221 1 6 rf \n", + "225 1 6 rf \n", + "229 1 6 rf \n", + "233 1 6 rf \n", + "237 1 6 rf " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "toe[toe$num_select == 0, ]" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# fix false positives: when nothing was selected, then fp should be zero\n", + "# fp is now 1 due to length(setdiff(0/NA)) = 1 when actually should be 0 (in cv_sim_apply.R)\n", + "toe$FP_mean[toe$num_select ==0] = 0\n", + "write.table(toe, '../results_summary_bin/table_toe_binary_all.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize Block results" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "block_lasso = read.csv('../results_summary_bin/sim_block_lasso_binary.txt', sep='\\t')\n", + "block_elnet = read.csv('../results_summary_bin/sim_block_Elnet_binary.txt', sep='\\t')\n", + "block_rf = read.csv('../results_summary_bin/sim_block_RF_binary.txt', sep='\\t')\n", + "block_compLasso = read.csv('../results_summary_bin/sim_block_GenCompLasso_binary.txt', sep='\\t')\n", + "\n", + "block_lasso$method = rep('lasso', dim(block_lasso)[1])\n", + "block_elnet$method = rep('elnet', dim(block_elnet)[1])\n", + "block_rf$method = rep('rf', dim(block_rf)[1])\n", + "block_compLasso$method = rep('compLasso', dim(block_compLasso)[1])" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "
  1. 80
  2. 14
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 80\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 80\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 80 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "
  1. 80
  2. 14
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 80\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 80\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 80 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "
  1. 80
  2. 14
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 80\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 80\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 80 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "
  1. 80
  2. 14
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 80\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 80\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 80 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "dim(block_lasso)\n", + "dim(block_elnet)\n", + "dim(block_rf)\n", + "dim(block_compLasso)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "
  1. 320
  2. 14
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 320\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 320\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 320 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "block = rbind(block_lasso, block_elnet)\n", + "block = rbind(block, block_rf)\n", + "block = rbind(block, block_compLasso)\n", + "dim(block)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 27 × 14
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_meanmethod
<int><int><dbl><dbl><dbl><fct><fct><fct><dbl><dbl><dbl><dbl><dbl><chr>
161 50 500.1 1.00NA1 ( 0 ) 1 ( 0 )6 ( 0 )0NaN1.016rf
165 50 1000.1 2.00NA1 ( 0 ) 1 ( 0 )6 ( 0 )0NaN1.016rf
169 50 5000.110.00NA1 ( 0 ) 1 ( 0 )6 ( 0 )0NaN1.016rf
173 5010000.120.00NA1 ( 0 ) 1 ( 0 )6 ( 0 )0NaN1.016rf
177 50 500.3 1.00NA1 ( 0 ) 1 ( 0 )6 ( 0 )0NaN1.016rf
181 50 1000.3 2.00NA1 ( 0 ) 1 ( 0 )6 ( 0 )0NaN1.016rf
185 50 5000.310.00NA1 ( 0 ) 1 ( 0 )6 ( 0 )0NaN1.016rf
189 5010000.320.00NA1 ( 0 ) 1 ( 0 )6 ( 0 )0NaN1.016rf
193 50 500.5 1.00NA1 ( 0 ) 1 ( 0 )6 ( 0 )0NaN1.016rf
197 50 1000.5 2.00NA1 ( 0 ) 1 ( 0 )6 ( 0 )0NaN1.016rf
201 50 5000.510.00NA1 ( 0 ) 1 ( 0 )6 ( 0 )0NaN1.016rf
205 5010000.520.00NA1 ( 0 ) 1 ( 0 )6 ( 0 )0NaN1.016rf
209 50 500.7 1.00NA1 ( 0 ) 1 ( 0 )6 ( 0 )0NaN1.016rf
213 50 1000.7 2.00NA1 ( 0 ) 1 ( 0 )6 ( 0 )0NaN1.016rf
217 50 5000.710.00NA1 ( 0 ) 1 ( 0 )6 ( 0 )0NaN1.016rf
221 5010000.720.00NA1 ( 0 ) 1 ( 0 )6 ( 0 )0NaN1.016rf
225 50 500.9 1.00NA1 ( 0 ) 1 ( 0 )6 ( 0 )0NaN1.016rf
229 50 1000.9 2.00NA1 ( 0 ) 1 ( 0 )6 ( 0 )0NaN1.016rf
233 50 5000.910.00NA1 ( 0 ) 1 ( 0 )6 ( 0 )0NaN1.016rf
237 5010000.920.00NA1 ( 0 ) 1 ( 0 )6 ( 0 )0NaN1.016rf
243 500 500.1 0.10NA0.5 ( 0 )0 ( 0 )6 ( 0 )0NaN0.506compLasso
2441000 500.1 0.05NA0.5 ( 0 )0 ( 0 )6 ( 0 )0NaN0.506compLasso
247 500 1000.1 0.20NA0.5 ( 0 )0 ( 0 )6 ( 0 )0NaN0.506compLasso
2481000 1000.1 0.10NA0.5 ( 0 )0 ( 0 )6 ( 0 )0NaN0.506compLasso
251 500 5000.1 1.00NA0.5 ( 0 )0 ( 0 )6 ( 0 )0NaN0.506compLasso
2521000 5000.1 0.50NA0.5 ( 0 )0 ( 0 )6 ( 0 )0NaN0.506compLasso
256100010000.1 1.00NA0.5 ( 0 )0 ( 0 )6 ( 0 )0NaN0.506compLasso
\n" + ], + "text/latex": [ + "A data.frame: 27 × 14\n", + "\\begin{tabular}{r|llllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean & method\\\\\n", + " & & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t161 & 50 & 50 & 0.1 & 1.00 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.0 & 1 & 6 & rf \\\\\n", + "\t165 & 50 & 100 & 0.1 & 2.00 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.0 & 1 & 6 & rf \\\\\n", + "\t169 & 50 & 500 & 0.1 & 10.00 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.0 & 1 & 6 & rf \\\\\n", + "\t173 & 50 & 1000 & 0.1 & 20.00 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.0 & 1 & 6 & rf \\\\\n", + "\t177 & 50 & 50 & 0.3 & 1.00 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.0 & 1 & 6 & rf \\\\\n", + "\t181 & 50 & 100 & 0.3 & 2.00 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.0 & 1 & 6 & rf \\\\\n", + "\t185 & 50 & 500 & 0.3 & 10.00 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.0 & 1 & 6 & rf \\\\\n", + "\t189 & 50 & 1000 & 0.3 & 20.00 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.0 & 1 & 6 & rf \\\\\n", + "\t193 & 50 & 50 & 0.5 & 1.00 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.0 & 1 & 6 & rf \\\\\n", + "\t197 & 50 & 100 & 0.5 & 2.00 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.0 & 1 & 6 & rf \\\\\n", + "\t201 & 50 & 500 & 0.5 & 10.00 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.0 & 1 & 6 & rf \\\\\n", + "\t205 & 50 & 1000 & 0.5 & 20.00 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.0 & 1 & 6 & rf \\\\\n", + "\t209 & 50 & 50 & 0.7 & 1.00 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.0 & 1 & 6 & rf \\\\\n", + "\t213 & 50 & 100 & 0.7 & 2.00 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.0 & 1 & 6 & rf \\\\\n", + "\t217 & 50 & 500 & 0.7 & 10.00 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.0 & 1 & 6 & rf \\\\\n", + "\t221 & 50 & 1000 & 0.7 & 20.00 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.0 & 1 & 6 & rf \\\\\n", + "\t225 & 50 & 50 & 0.9 & 1.00 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.0 & 1 & 6 & rf \\\\\n", + "\t229 & 50 & 100 & 0.9 & 2.00 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.0 & 1 & 6 & rf \\\\\n", + "\t233 & 50 & 500 & 0.9 & 10.00 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.0 & 1 & 6 & rf \\\\\n", + "\t237 & 50 & 1000 & 0.9 & 20.00 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.0 & 1 & 6 & rf \\\\\n", + "\t243 & 500 & 50 & 0.1 & 0.10 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.5 & 0 & 6 & compLasso\\\\\n", + "\t244 & 1000 & 50 & 0.1 & 0.05 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.5 & 0 & 6 & compLasso\\\\\n", + "\t247 & 500 & 100 & 0.1 & 0.20 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.5 & 0 & 6 & compLasso\\\\\n", + "\t248 & 1000 & 100 & 0.1 & 0.10 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.5 & 0 & 6 & compLasso\\\\\n", + "\t251 & 500 & 500 & 0.1 & 1.00 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.5 & 0 & 6 & compLasso\\\\\n", + "\t252 & 1000 & 500 & 0.1 & 0.50 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.5 & 0 & 6 & compLasso\\\\\n", + "\t256 & 1000 & 1000 & 0.1 & 1.00 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.5 & 0 & 6 & compLasso\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 27 × 14\n", + "\n", + "| | N <int> | P <int> | Corr <dbl> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <dbl> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> | method <chr> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 161 | 50 | 50 | 0.1 | 1.00 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.0 | 1 | 6 | rf |\n", + "| 165 | 50 | 100 | 0.1 | 2.00 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.0 | 1 | 6 | rf |\n", + "| 169 | 50 | 500 | 0.1 | 10.00 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.0 | 1 | 6 | rf |\n", + "| 173 | 50 | 1000 | 0.1 | 20.00 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.0 | 1 | 6 | rf |\n", + "| 177 | 50 | 50 | 0.3 | 1.00 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.0 | 1 | 6 | rf |\n", + "| 181 | 50 | 100 | 0.3 | 2.00 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.0 | 1 | 6 | rf |\n", + "| 185 | 50 | 500 | 0.3 | 10.00 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.0 | 1 | 6 | rf |\n", + "| 189 | 50 | 1000 | 0.3 | 20.00 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.0 | 1 | 6 | rf |\n", + "| 193 | 50 | 50 | 0.5 | 1.00 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.0 | 1 | 6 | rf |\n", + "| 197 | 50 | 100 | 0.5 | 2.00 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.0 | 1 | 6 | rf |\n", + "| 201 | 50 | 500 | 0.5 | 10.00 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.0 | 1 | 6 | rf |\n", + "| 205 | 50 | 1000 | 0.5 | 20.00 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.0 | 1 | 6 | rf |\n", + "| 209 | 50 | 50 | 0.7 | 1.00 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.0 | 1 | 6 | rf |\n", + "| 213 | 50 | 100 | 0.7 | 2.00 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.0 | 1 | 6 | rf |\n", + "| 217 | 50 | 500 | 0.7 | 10.00 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.0 | 1 | 6 | rf |\n", + "| 221 | 50 | 1000 | 0.7 | 20.00 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.0 | 1 | 6 | rf |\n", + "| 225 | 50 | 50 | 0.9 | 1.00 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.0 | 1 | 6 | rf |\n", + "| 229 | 50 | 100 | 0.9 | 2.00 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.0 | 1 | 6 | rf |\n", + "| 233 | 50 | 500 | 0.9 | 10.00 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.0 | 1 | 6 | rf |\n", + "| 237 | 50 | 1000 | 0.9 | 20.00 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.0 | 1 | 6 | rf |\n", + "| 243 | 500 | 50 | 0.1 | 0.10 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.5 | 0 | 6 | compLasso |\n", + "| 244 | 1000 | 50 | 0.1 | 0.05 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.5 | 0 | 6 | compLasso |\n", + "| 247 | 500 | 100 | 0.1 | 0.20 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.5 | 0 | 6 | compLasso |\n", + "| 248 | 1000 | 100 | 0.1 | 0.10 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.5 | 0 | 6 | compLasso |\n", + "| 251 | 500 | 500 | 0.1 | 1.00 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.5 | 0 | 6 | compLasso |\n", + "| 252 | 1000 | 500 | 0.1 | 0.50 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.5 | 0 | 6 | compLasso |\n", + "| 256 | 1000 | 1000 | 0.1 | 1.00 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.5 | 0 | 6 | compLasso |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select FDR ROC_mean\n", + "161 50 50 0.1 1.00 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.0 \n", + "165 50 100 0.1 2.00 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.0 \n", + "169 50 500 0.1 10.00 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.0 \n", + "173 50 1000 0.1 20.00 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.0 \n", + "177 50 50 0.3 1.00 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.0 \n", + "181 50 100 0.3 2.00 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.0 \n", + "185 50 500 0.3 10.00 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.0 \n", + "189 50 1000 0.3 20.00 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.0 \n", + "193 50 50 0.5 1.00 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.0 \n", + "197 50 100 0.5 2.00 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.0 \n", + "201 50 500 0.5 10.00 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.0 \n", + "205 50 1000 0.5 20.00 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.0 \n", + "209 50 50 0.7 1.00 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.0 \n", + "213 50 100 0.7 2.00 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.0 \n", + "217 50 500 0.7 10.00 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.0 \n", + "221 50 1000 0.7 20.00 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.0 \n", + "225 50 50 0.9 1.00 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.0 \n", + "229 50 100 0.9 2.00 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.0 \n", + "233 50 500 0.9 10.00 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.0 \n", + "237 50 1000 0.9 20.00 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.0 \n", + "243 500 50 0.1 0.10 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0 NaN 0.5 \n", + "244 1000 50 0.1 0.05 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0 NaN 0.5 \n", + "247 500 100 0.1 0.20 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0 NaN 0.5 \n", + "248 1000 100 0.1 0.10 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0 NaN 0.5 \n", + "251 500 500 0.1 1.00 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0 NaN 0.5 \n", + "252 1000 500 0.1 0.50 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0 NaN 0.5 \n", + "256 1000 1000 0.1 1.00 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0 NaN 0.5 \n", + " FP_mean FN_mean method \n", + "161 1 6 rf \n", + "165 1 6 rf \n", + "169 1 6 rf \n", + "173 1 6 rf \n", + "177 1 6 rf \n", + "181 1 6 rf \n", + "185 1 6 rf \n", + "189 1 6 rf \n", + "193 1 6 rf \n", + "197 1 6 rf \n", + "201 1 6 rf \n", + "205 1 6 rf \n", + "209 1 6 rf \n", + "213 1 6 rf \n", + "217 1 6 rf \n", + "221 1 6 rf \n", + "225 1 6 rf \n", + "229 1 6 rf \n", + "233 1 6 rf \n", + "237 1 6 rf \n", + "243 0 6 compLasso\n", + "244 0 6 compLasso\n", + "247 0 6 compLasso\n", + "248 0 6 compLasso\n", + "251 0 6 compLasso\n", + "252 0 6 compLasso\n", + "256 0 6 compLasso" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "block[block$num_select ==0, ] " + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "# fix false positives: when nothing was selected, then fp should be zero\n", + "# fp is now 1 due to length(setdiff(0/NA)) = 1 when actually should be 0 (in cv_sim_apply.R)\n", + "block$FP_mean[block$num_select ==0] = 0\n", + "write.table(block, '../results_summary_bin/table_block_binary_all.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_bin/.ipynb_checkpoints/4_sim_binary_hypothesis_testing-checkpoint.ipynb b/simulations/notebooks_sim_bin/.ipynb_checkpoints/4_sim_binary_hypothesis_testing-checkpoint.ipynb new file mode 100644 index 0000000..2357762 --- /dev/null +++ b/simulations/notebooks_sim_bin/.ipynb_checkpoints/4_sim_binary_hypothesis_testing-checkpoint.ipynb @@ -0,0 +1,768 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Hypothesis testing based on boostrap for selected simulation scenario" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data/'" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "load(paste0(dir, 'binary_update/boot_toe_RF_binary.RData'))\n", + "load(paste0(dir, 'binary_update/boot_block_RF_binary.RData'))\n", + "load(paste0(dir, 'binary_update/boot_toe_genCompLasso_binary.RData'))\n", + "load(paste0(dir, 'binary_update/boot_block_genCompLasso_binary.RData'))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### hypothesis testing based on Stability" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 4
toe_rftoe_genCompLassoblock_rfblock_genCompLasso
<dbl><dbl><dbl><dbl>
10.010.190.010.18
20.010.190.010.18
30.010.190.000.16
40.010.190.000.20
50.010.170.010.17
60.010.180.010.18
\n" + ], + "text/latex": [ + "A data.frame: 6 × 4\n", + "\\begin{tabular}{r|llll}\n", + " & toe\\_rf & toe\\_genCompLasso & block\\_rf & block\\_genCompLasso\\\\\n", + " & & & & \\\\\n", + "\\hline\n", + "\t1 & 0.01 & 0.19 & 0.01 & 0.18\\\\\n", + "\t2 & 0.01 & 0.19 & 0.01 & 0.18\\\\\n", + "\t3 & 0.01 & 0.19 & 0.00 & 0.16\\\\\n", + "\t4 & 0.01 & 0.19 & 0.00 & 0.20\\\\\n", + "\t5 & 0.01 & 0.17 & 0.01 & 0.17\\\\\n", + "\t6 & 0.01 & 0.18 & 0.01 & 0.18\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 4\n", + "\n", + "| | toe_rf <dbl> | toe_genCompLasso <dbl> | block_rf <dbl> | block_genCompLasso <dbl> |\n", + "|---|---|---|---|---|\n", + "| 1 | 0.01 | 0.19 | 0.01 | 0.18 |\n", + "| 2 | 0.01 | 0.19 | 0.01 | 0.18 |\n", + "| 3 | 0.01 | 0.19 | 0.00 | 0.16 |\n", + "| 4 | 0.01 | 0.19 | 0.00 | 0.20 |\n", + "| 5 | 0.01 | 0.17 | 0.01 | 0.17 |\n", + "| 6 | 0.01 | 0.18 | 0.01 | 0.18 |\n", + "\n" + ], + "text/plain": [ + " toe_rf toe_genCompLasso block_rf block_genCompLasso\n", + "1 0.01 0.19 0.01 0.18 \n", + "2 0.01 0.19 0.01 0.18 \n", + "3 0.01 0.19 0.00 0.16 \n", + "4 0.01 0.19 0.00 0.20 \n", + "5 0.01 0.17 0.01 0.17 \n", + "6 0.01 0.18 0.01 0.18 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "table = as.data.frame(cbind(toe_rf$stab_index, toe_genCompLasso$stab_index, block_rf$stab_index, block_genCompLasso$stab_index))\n", + "colnames(table) = c('toe_rf', 'toe_genCompLasso', 'block_rf', 'block_genCompLasso')\n", + "head(table)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "0.1732" + ], + "text/latex": [ + "0.1732" + ], + "text/markdown": [ + "0.1732" + ], + "text/plain": [ + "[1] 0.1732" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "0.0097" + ], + "text/latex": [ + "0.0097" + ], + "text/markdown": [ + "0.0097" + ], + "text/plain": [ + "[1] 0.0097" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "mean(table$toe_genCompLasso)\n", + "mean(table$toe_rf)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "0.1635" + ], + "text/latex": [ + "0.1635" + ], + "text/markdown": [ + "0.1635" + ], + "text/plain": [ + "[1] 0.1635" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
2.5%
0.14
97.5%
0.18
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[2.5\\textbackslash{}\\%] 0.14\n", + "\\item[97.5\\textbackslash{}\\%] 0.18\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "2.5%\n", + ": 0.1497.5%\n", + ": 0.18\n", + "\n" + ], + "text/plain": [ + " 2.5% 97.5% \n", + " 0.14 0.18 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "diff_toe = (table$toe_genCompLasso - table$toe_rf)\n", + "mean(diff_toe)\n", + "quantile(diff_toe, probs = c(0.025, 0.975))" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "0.1782" + ], + "text/latex": [ + "0.1782" + ], + "text/markdown": [ + "0.1782" + ], + "text/plain": [ + "[1] 0.1782" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "0.0079" + ], + "text/latex": [ + "0.0079" + ], + "text/markdown": [ + "0.0079" + ], + "text/plain": [ + "[1] 0.0079" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "mean(table$block_genCompLasso)\n", + "mean(table$block_rf)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "0.1703" + ], + "text/latex": [ + "0.1703" + ], + "text/markdown": [ + "0.1703" + ], + "text/plain": [ + "[1] 0.1703" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
2.5%
0.15
97.5%
0.19525
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[2.5\\textbackslash{}\\%] 0.15\n", + "\\item[97.5\\textbackslash{}\\%] 0.19525\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "2.5%\n", + ": 0.1597.5%\n", + ": 0.19525\n", + "\n" + ], + "text/plain": [ + " 2.5% 97.5% \n", + "0.15000 0.19525 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "diff_block = (table$block_genCompLasso - table$block_rf)\n", + "mean(diff_block)\n", + "quantile(diff_block, probs = c(0.025, 0.975))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### hypothesis testing based on ROC" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### block 0.5, p = 1000, n = 100" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\t
$n
\n", + "\t\t
N: 100
\n", + "\t
$p
\n", + "\t\t
P: 1000
\n", + "\t
$rou
\n", + "\t\t
0.5
\n", + "
\n" + ], + "text/latex": [ + "\\begin{description}\n", + "\\item[\\$n] \\textbf{N:} 100\n", + "\\item[\\$p] \\textbf{P:} 1000\n", + "\\item[\\$rou] 0.5\n", + "\\end{description}\n" + ], + "text/markdown": [ + "$n\n", + ": **N:** 100\n", + "$p\n", + ": **P:** 1000\n", + "$rou\n", + ": 0.5\n", + "\n", + "\n" + ], + "text/plain": [ + "$n\n", + " N \n", + "100 \n", + "\n", + "$p\n", + " P \n", + "1000 \n", + "\n", + "$rou\n", + "[1] 0.5\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "i = 46\n", + "load(paste0(dir, '/binary_update/block_RF_binary_', i, '.RData')) \n", + "results_block_rf[c('n', 'p', 'rou')]\n", + "block_rf_rocs = results_block_rf$ROC.list" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\t
$n
\n", + "\t\t
N: 100
\n", + "\t
$p
\n", + "\t\t
P: 1000
\n", + "\t
$rou
\n", + "\t\t
0.5
\n", + "
\n" + ], + "text/latex": [ + "\\begin{description}\n", + "\\item[\\$n] \\textbf{N:} 100\n", + "\\item[\\$p] \\textbf{P:} 1000\n", + "\\item[\\$rou] 0.5\n", + "\\end{description}\n" + ], + "text/markdown": [ + "$n\n", + ": **N:** 100\n", + "$p\n", + ": **P:** 1000\n", + "$rou\n", + ": 0.5\n", + "\n", + "\n" + ], + "text/plain": [ + "$n\n", + " N \n", + "100 \n", + "\n", + "$p\n", + " P \n", + "1000 \n", + "\n", + "$rou\n", + "[1] 0.5\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "i = 46\n", + "load(paste0(dir, '/binary_update/block_GenCompLasso_binary_', i, '.RData')) \n", + "results_block_GenCompLasso[c('n', 'p', 'rou')]\n", + "block_GenCompLasso_rocs = results_block_GenCompLasso$ROC.list" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "-0.0181" + ], + "text/latex": [ + "-0.0181" + ], + "text/markdown": [ + "-0.0181" + ], + "text/plain": [ + "[1] -0.0181" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
2.5%
-0.0700000000000001
97.5%
0
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[2.5\\textbackslash{}\\%] -0.0700000000000001\n", + "\\item[97.5\\textbackslash{}\\%] 0\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "2.5%\n", + ": -0.070000000000000197.5%\n", + ": 0\n", + "\n" + ], + "text/plain": [ + " 2.5% 97.5% \n", + "-0.07 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "diff_block = (block_GenCompLasso_rocs - block_rf_rocs)\n", + "mean(diff_block)\n", + "quantile(diff_block, probs = c(0.025, 0.975))" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "diff_block\n", + " -0.18 -0.0800000000000001 -0.0700000000000001 -0.0600000000000001 \n", + " 1 1 2 2 \n", + " -0.05 -0.04 -0.03 -0.02 \n", + " 7 8 10 15 \n", + " -0.01 0 \n", + " 2 52 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "table(diff_block)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Toeplitz 0.5" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\t
$n
\n", + "\t\t
N: 100
\n", + "\t
$p
\n", + "\t\t
P: 1000
\n", + "\t
$rou
\n", + "\t\t
0.5
\n", + "
\n" + ], + "text/latex": [ + "\\begin{description}\n", + "\\item[\\$n] \\textbf{N:} 100\n", + "\\item[\\$p] \\textbf{P:} 1000\n", + "\\item[\\$rou] 0.5\n", + "\\end{description}\n" + ], + "text/markdown": [ + "$n\n", + ": **N:** 100\n", + "$p\n", + ": **P:** 1000\n", + "$rou\n", + ": 0.5\n", + "\n", + "\n" + ], + "text/plain": [ + "$n\n", + " N \n", + "100 \n", + "\n", + "$p\n", + " P \n", + "1000 \n", + "\n", + "$rou\n", + "[1] 0.5\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "i = 46\n", + "load(paste0(dir, '/binary_update/toe_RF_binary_', i, '.RData')) \n", + "results_toe_rf[c('n', 'p', 'rou')]\n", + "toe_rf_rocs = results_toe_rf$ROC.list" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\t
$n
\n", + "\t\t
N: 100
\n", + "\t
$p
\n", + "\t\t
P: 1000
\n", + "\t
$rou
\n", + "\t\t
0.5
\n", + "
\n" + ], + "text/latex": [ + "\\begin{description}\n", + "\\item[\\$n] \\textbf{N:} 100\n", + "\\item[\\$p] \\textbf{P:} 1000\n", + "\\item[\\$rou] 0.5\n", + "\\end{description}\n" + ], + "text/markdown": [ + "$n\n", + ": **N:** 100\n", + "$p\n", + ": **P:** 1000\n", + "$rou\n", + ": 0.5\n", + "\n", + "\n" + ], + "text/plain": [ + "$n\n", + " N \n", + "100 \n", + "\n", + "$p\n", + " P \n", + "1000 \n", + "\n", + "$rou\n", + "[1] 0.5\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "i = 46\n", + "load(paste0(dir, '/binary_update/toe_GenCompLasso_binary_', i, '.RData')) \n", + "results_toe_GenCompLasso[c('n', 'p', 'rou')]\n", + "toe_GenCompLasso_rocs = results_toe_GenCompLasso$ROC.list" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "-6e-04" + ], + "text/latex": [ + "-6e-04" + ], + "text/markdown": [ + "-6e-04" + ], + "text/plain": [ + "[1] -6e-04" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
2.5%
-0.01
97.5%
0
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[2.5\\textbackslash{}\\%] -0.01\n", + "\\item[97.5\\textbackslash{}\\%] 0\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "2.5%\n", + ": -0.0197.5%\n", + ": 0\n", + "\n" + ], + "text/plain": [ + " 2.5% 97.5% \n", + "-0.01 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "diff_toe = (toe_GenCompLasso_rocs - toe_rf_rocs)\n", + "mean(diff_toe)\n", + "quantile(diff_toe, probs = c(0.025, 0.975))" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "diff_toe\n", + "-0.02 -0.01 0 \n", + " 2 2 96 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "table(diff_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_bin/.ipynb_checkpoints/5_applications_results-checkpoint.ipynb b/simulations/notebooks_sim_bin/.ipynb_checkpoints/5_applications_results-checkpoint.ipynb new file mode 100644 index 0000000..fa46c90 --- /dev/null +++ b/simulations/notebooks_sim_bin/.ipynb_checkpoints/5_applications_results-checkpoint.ipynb @@ -0,0 +1,505 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Results for real microbiome data applications" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/data_applications/'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### BMI dataset application" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "load(paste0(dir, '/BMI_binary_GenCompLasso.RData'))\n", + "load(paste0(dir, '/BMI_binary_lasso.RData', sep=''))\n", + "load(paste0(dir, '/BMI_binary_elnet.RData', sep=''))\n", + "load(paste0(dir, '/BMI_binary_rf.RData', sep=''))" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 4 × 4
datasetmethodROCstability
<chr><chr><dbl><dbl>
bmi_gutlasso 0.630.14
bmi_gutelent 0.780.19
bmi_gutrf 1.000.01
bmi_gutcompLasso0.850.29
\n" + ], + "text/latex": [ + "A data.frame: 4 × 4\n", + "\\begin{tabular}{llll}\n", + " dataset & method & ROC & stability\\\\\n", + " & & & \\\\\n", + "\\hline\n", + "\t bmi\\_gut & lasso & 0.63 & 0.14\\\\\n", + "\t bmi\\_gut & elent & 0.78 & 0.19\\\\\n", + "\t bmi\\_gut & rf & 1.00 & 0.01\\\\\n", + "\t bmi\\_gut & compLasso & 0.85 & 0.29\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 4 × 4\n", + "\n", + "| dataset <chr> | method <chr> | ROC <dbl> | stability <dbl> |\n", + "|---|---|---|---|\n", + "| bmi_gut | lasso | 0.63 | 0.14 |\n", + "| bmi_gut | elent | 0.78 | 0.19 |\n", + "| bmi_gut | rf | 1.00 | 0.01 |\n", + "| bmi_gut | compLasso | 0.85 | 0.29 |\n", + "\n" + ], + "text/plain": [ + " dataset method ROC stability\n", + "1 bmi_gut lasso 0.63 0.14 \n", + "2 bmi_gut elent 0.78 0.19 \n", + "3 bmi_gut rf 1.00 0.01 \n", + "4 bmi_gut compLasso 0.85 0.29 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "bmi_gut = as.data.frame(matrix(NA, nrow=4, ncol=4))\n", + "colnames(bmi_gut) = c('dataset', 'method', 'ROC', 'stability')\n", + "bmi_gut$dataset = 'bmi_gut'\n", + "bmi_gut$method = c('lasso', 'elent', 'rf', 'compLasso')\n", + "bmi_gut$ROC = c(out_lasso$ROC_mean, out_elnet$ROC_mean, out_rf$ROC_mean, out_GenCompLasso$ROC_mean)\n", + "bmi_gut$stability = c(out_lasso$stab_index, out_elnet$stab_index, out_rf$stab_index, out_GenCompLasso$stab_index)\n", + "bmi_gut" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "# testing\n", + "load(paste0(dir, '/BMI_binary_boot_rf.RData'))\n", + "load(paste0(dir, '/BMI_binary_boot_compLasso.RData'))" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "0.2997" + ], + "text/latex": [ + "0.2997" + ], + "text/markdown": [ + "0.2997" + ], + "text/plain": [ + "[1] 0.2997" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
2.5%
0.11
97.5%
0.41525
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[2.5\\textbackslash{}\\%] 0.11\n", + "\\item[97.5\\textbackslash{}\\%] 0.41525\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "2.5%\n", + ": 0.1197.5%\n", + ": 0.41525\n", + "\n" + ], + "text/plain": [ + " 2.5% 97.5% \n", + "0.11000 0.41525 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "diff_stab = (boot_compLasso$stab_index - boot_rf$stab_index)\n", + "mean(diff_stab)\n", + "quantile(diff_stab, probs = c(0.025, 0.975)) \n", + "# CI doesn't contain zero: compLasso is significantly more stable than RF" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "-0.0942798529453605" + ], + "text/latex": [ + "-0.0942798529453605" + ], + "text/markdown": [ + "-0.0942798529453605" + ], + "text/plain": [ + "[1] -0.09427985" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
2.5%
-0.19020132947925
97.5%
-0.020967051775781
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[2.5\\textbackslash{}\\%] -0.19020132947925\n", + "\\item[97.5\\textbackslash{}\\%] -0.020967051775781\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "2.5%\n", + ": -0.1902013294792597.5%\n", + ": -0.020967051775781\n", + "\n" + ], + "text/plain": [ + " 2.5% 97.5% \n", + "-0.19020133 -0.02096705 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "diff_ROC = (unlist(boot_compLasso$ROC_list) - unlist(boot_rf$ROC_list)) # use all 100*100 ROCs\n", + "mean(diff_ROC)\n", + "quantile(diff_ROC, probs = c(0.025, 0.975)) \n", + "### CI doesn't contain zero: compLasso is significantly different from RF based on ROC\n", + "### although very close to zero (now ROC has similar scale as Stability, Stability still better differentiation)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 88 soils dataset application" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "load(paste0(dir, '/soils_binary_ph_GenCompLasso.RData', sep=''))\n", + "load(paste0(dir, '/soils_binary_ph_lasso.RData', sep=''))\n", + "load(paste0(dir, '/soils_binary_ph_elnet.RData', sep=''))\n", + "load(paste0(dir, '/soils_binary_ph_rf.RData', sep=''))" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 4 × 4
datasetmethodROCstability
<chr><chr><dbl><dbl>
soil_88lasso 0.900.28
soil_88elent 0.940.32
soil_88rf 1.000.03
soil_88compLasso0.960.46
\n" + ], + "text/latex": [ + "A data.frame: 4 × 4\n", + "\\begin{tabular}{llll}\n", + " dataset & method & ROC & stability\\\\\n", + " & & & \\\\\n", + "\\hline\n", + "\t soil\\_88 & lasso & 0.90 & 0.28\\\\\n", + "\t soil\\_88 & elent & 0.94 & 0.32\\\\\n", + "\t soil\\_88 & rf & 1.00 & 0.03\\\\\n", + "\t soil\\_88 & compLasso & 0.96 & 0.46\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 4 × 4\n", + "\n", + "| dataset <chr> | method <chr> | ROC <dbl> | stability <dbl> |\n", + "|---|---|---|---|\n", + "| soil_88 | lasso | 0.90 | 0.28 |\n", + "| soil_88 | elent | 0.94 | 0.32 |\n", + "| soil_88 | rf | 1.00 | 0.03 |\n", + "| soil_88 | compLasso | 0.96 | 0.46 |\n", + "\n" + ], + "text/plain": [ + " dataset method ROC stability\n", + "1 soil_88 lasso 0.90 0.28 \n", + "2 soil_88 elent 0.94 0.32 \n", + "3 soil_88 rf 1.00 0.03 \n", + "4 soil_88 compLasso 0.96 0.46 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "soil_88 = as.data.frame(matrix(NA, nrow=4, ncol=4))\n", + "colnames(soil_88) = c('dataset', 'method', 'ROC', 'stability')\n", + "soil_88$dataset = 'soil_88'\n", + "soil_88$method = c('lasso', 'elent', 'rf', 'compLasso')\n", + "soil_88$ROC = c(out_lasso$ROC_mean, out_elnet$ROC_mean, out_rf$ROC_mean, out_GenCompLasso$ROC_mean)\n", + "soil_88$stability = c(out_lasso$stab_index, out_elnet$stab_index, out_rf$stab_index, out_GenCompLasso$stab_index)\n", + "soil_88" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "# testing\n", + "load(paste0(dir, '/soils_binary_ph_boot_rf.RData'))\n", + "load(paste0(dir, '/soils_binary_ph_boot_compLasso.RData'))" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "0.4323" + ], + "text/latex": [ + "0.4323" + ], + "text/markdown": [ + "0.4323" + ], + "text/plain": [ + "[1] 0.4323" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
2.5%
0.37
97.5%
0.5
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[2.5\\textbackslash{}\\%] 0.37\n", + "\\item[97.5\\textbackslash{}\\%] 0.5\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "2.5%\n", + ": 0.3797.5%\n", + ": 0.5\n", + "\n" + ], + "text/plain": [ + " 2.5% 97.5% \n", + " 0.37 0.50 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "diff_stab = (boot_compLasso$stab_index - boot_rf$stab_index)\n", + "mean(diff_stab)\n", + "quantile(diff_stab, probs = c(0.025, 0.975)) \n", + "# CI doesn't contain zero: compLasso is significantly more stable than RF" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "-0.0247120820917325" + ], + "text/latex": [ + "-0.0247120820917325" + ], + "text/markdown": [ + "-0.0247120820917325" + ], + "text/plain": [ + "[1] -0.02471208" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
2.5%
-0.0838574423480084
97.5%
0
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[2.5\\textbackslash{}\\%] -0.0838574423480084\n", + "\\item[97.5\\textbackslash{}\\%] 0\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "2.5%\n", + ": -0.083857442348008497.5%\n", + ": 0\n", + "\n" + ], + "text/plain": [ + " 2.5% 97.5% \n", + "-0.08385744 0.00000000 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "diff_ROC = (unlist(boot_compLasso$ROC_list) - unlist(boot_rf$ROC_list)) # use all 100*100 ROCs\n", + "mean(diff_ROC)\n", + "quantile(diff_ROC, probs = c(0.025, 0.975)) \n", + "# CI contain zero: compLasso is not significantly different from RF based on ROC" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + " Min. 1st Qu. Median Mean 3rd Qu. Max. \n", + "-0.24949 -0.04206 -0.02250 -0.02471 0.00000 0.03769 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "summary(diff_ROC)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_bin/.ipynb_checkpoints/6_make_figures_combined-checkpoint.ipynb b/simulations/notebooks_sim_bin/.ipynb_checkpoints/6_make_figures_combined-checkpoint.ipynb new file mode 100644 index 0000000..992fa99 --- /dev/null +++ b/simulations/notebooks_sim_bin/.ipynb_checkpoints/6_make_figures_combined-checkpoint.ipynb @@ -0,0 +1,1937 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Generate updated figures for both continuous and binary outcomes" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Loading required package: magrittr\n", + "\n" + ] + } + ], + "source": [ + "library(ggplot2)\n", + "library(gridExtra)\n", + "library(ggpubr)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### load continuous results" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "ind_cts = read.csv('../results_summary_cts/table_ind_all.txt', sep='\\t')\n", + "toe_cts = read.csv('../results_summary_cts/table_toe_all.txt', sep='\\t')\n", + "block_cts = read.csv('../results_summary_cts/table_block_all.txt', sep='\\t')" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "ind_cts$Ratio = as.factor(ind_cts$Ratio)\n", + "toe_cts$Ratio = as.factor(toe_cts$Ratio)\n", + "block_cts$Ratio = as.factor(block_cts$Ratio)\n", + "\n", + "toe_cts$N = as.factor(toe_cts$N)\n", + "toe_cts$P = as.factor(toe_cts$P)\n", + "\n", + "toe_cts_sub1 = toe_cts[toe_cts$Corr %in% 0.1, ]\n", + "toe_cts_sub3 = toe_cts[toe_cts$Corr %in% 0.3, ]\n", + "toe_cts_sub5 = toe_cts[toe_cts$Corr %in% 0.5, ]\n", + "toe_cts_sub7 = toe_cts[toe_cts$Corr %in% 0.7, ]\n", + "toe_cts_sub9 = toe_cts[toe_cts$Corr %in% 0.9, ]\n", + "\n", + "block_cts$N = as.factor(block_cts$N)\n", + "block_cts$P = as.factor(block_cts$P)\n", + "block_cts_sub1 = block_cts[block_cts$Corr %in% 0.1, ]\n", + "block_cts_sub3 = block_cts[block_cts$Corr %in% 0.3, ]\n", + "block_cts_sub5 = block_cts[block_cts$Corr %in% 0.5, ]\n", + "block_cts_sub7 = block_cts[block_cts$Corr %in% 0.7, ]\n", + "block_cts_sub9 = block_cts[block_cts$Corr %in% 0.9, ]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### load binary results (not that should be AUC in stead of ROC -- code checked)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "ind_bin = read.csv('../results_summary_bin/table_ind_binary_all.txt', sep='\\t')\n", + "toe_bin = read.csv('../results_summary_bin/table_toe_binary_all.txt', sep='\\t')\n", + "block_bin = read.csv('../results_summary_bin/table_block_binary_all.txt', sep='\\t')" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "ind_bin$Ratio = as.factor(ind_bin$Ratio)\n", + "toe_bin$Ratio = as.factor(toe_bin$Ratio)\n", + "block_bin$Ratio = as.factor(block_bin$Ratio)\n", + "\n", + "toe_bin$N = as.factor(toe_bin$N)\n", + "toe_bin$P = as.factor(toe_bin$P)\n", + "toe_bin_sub1 = toe_bin[toe_bin$Corr %in% 0.1, ]\n", + "toe_bin_sub3 = toe_bin[toe_bin$Corr %in% 0.3, ]\n", + "toe_bin_sub5 = toe_bin[toe_bin$Corr %in% 0.5, ]\n", + "toe_bin_sub7 = toe_bin[toe_bin$Corr %in% 0.7, ]\n", + "toe_bin_sub9 = toe_bin[toe_bin$Corr %in% 0.9, ]\n", + "\n", + "block_bin$N = as.factor(block_bin$N)\n", + "block_bin$P = as.factor(block_bin$P)\n", + "block_bin_sub1 = block_bin[block_bin$Corr %in% 0.1, ]\n", + "block_bin_sub3 = block_bin[block_bin$Corr %in% 0.3, ]\n", + "block_bin_sub5 = block_bin[block_bin$Corr %in% 0.5, ]\n", + "block_bin_sub7 = block_bin[block_bin$Corr %in% 0.7, ]\n", + "block_bin_sub9 = block_bin[block_bin$Corr %in% 0.9, ]" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 14
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_meanmethod
<fct><fct><dbl><fct><dbl><fct><fct><fct><dbl><dbl><dbl><dbl><dbl><fct>
150 50 0.11 0.030.59 ( 0.01 )2.69 ( 0.14 )5.3 ( 0.07 ) 2.390.670.592.695.30lasso
2100 50 0.10.5 0.110.56 ( 0.01 )2.02 ( 0.15 )5.02 ( 0.08 )2.000.390.562.025.02lasso
3500 50 0.10.1 0.280.63 ( 0 ) 4.52 ( 0.29 )3 ( 0.11 ) 6.520.450.634.523.00lasso
4100050 0.10.050.390.64 ( 0 ) 4.74 ( 0.22 )2.1 ( 0.09 ) 7.640.440.644.742.10lasso
550 1000.12 0.020.62 ( 0.01 )3.82 ( 0.16 )5.34 ( 0.07 )3.480.780.623.825.34lasso
6100 1000.11 0.070.56 ( 0.01 )2.29 ( 0.19 )5.27 ( 0.08 )2.020.570.562.295.27lasso
\n" + ], + "text/latex": [ + "A data.frame: 6 × 14\n", + "\\begin{tabular}{r|llllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean & method\\\\\n", + " & & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1 & 0.03 & 0.59 ( 0.01 ) & 2.69 ( 0.14 ) & 5.3 ( 0.07 ) & 2.39 & 0.67 & 0.59 & 2.69 & 5.30 & lasso\\\\\n", + "\t2 & 100 & 50 & 0.1 & 0.5 & 0.11 & 0.56 ( 0.01 ) & 2.02 ( 0.15 ) & 5.02 ( 0.08 ) & 2.00 & 0.39 & 0.56 & 2.02 & 5.02 & lasso\\\\\n", + "\t3 & 500 & 50 & 0.1 & 0.1 & 0.28 & 0.63 ( 0 ) & 4.52 ( 0.29 ) & 3 ( 0.11 ) & 6.52 & 0.45 & 0.63 & 4.52 & 3.00 & lasso\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 0.05 & 0.39 & 0.64 ( 0 ) & 4.74 ( 0.22 ) & 2.1 ( 0.09 ) & 7.64 & 0.44 & 0.64 & 4.74 & 2.10 & lasso\\\\\n", + "\t5 & 50 & 100 & 0.1 & 2 & 0.02 & 0.62 ( 0.01 ) & 3.82 ( 0.16 ) & 5.34 ( 0.07 ) & 3.48 & 0.78 & 0.62 & 3.82 & 5.34 & lasso\\\\\n", + "\t6 & 100 & 100 & 0.1 & 1 & 0.07 & 0.56 ( 0.01 ) & 2.29 ( 0.19 ) & 5.27 ( 0.08 ) & 2.02 & 0.57 & 0.56 & 2.29 & 5.27 & lasso\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 14\n", + "\n", + "| | N <fct> | P <fct> | Corr <dbl> | Ratio <fct> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <dbl> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> | method <fct> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1 | 0.03 | 0.59 ( 0.01 ) | 2.69 ( 0.14 ) | 5.3 ( 0.07 ) | 2.39 | 0.67 | 0.59 | 2.69 | 5.30 | lasso |\n", + "| 2 | 100 | 50 | 0.1 | 0.5 | 0.11 | 0.56 ( 0.01 ) | 2.02 ( 0.15 ) | 5.02 ( 0.08 ) | 2.00 | 0.39 | 0.56 | 2.02 | 5.02 | lasso |\n", + "| 3 | 500 | 50 | 0.1 | 0.1 | 0.28 | 0.63 ( 0 ) | 4.52 ( 0.29 ) | 3 ( 0.11 ) | 6.52 | 0.45 | 0.63 | 4.52 | 3.00 | lasso |\n", + "| 4 | 1000 | 50 | 0.1 | 0.05 | 0.39 | 0.64 ( 0 ) | 4.74 ( 0.22 ) | 2.1 ( 0.09 ) | 7.64 | 0.44 | 0.64 | 4.74 | 2.10 | lasso |\n", + "| 5 | 50 | 100 | 0.1 | 2 | 0.02 | 0.62 ( 0.01 ) | 3.82 ( 0.16 ) | 5.34 ( 0.07 ) | 3.48 | 0.78 | 0.62 | 3.82 | 5.34 | lasso |\n", + "| 6 | 100 | 100 | 0.1 | 1 | 0.07 | 0.56 ( 0.01 ) | 2.29 ( 0.19 ) | 5.27 ( 0.08 ) | 2.02 | 0.57 | 0.56 | 2.29 | 5.27 | lasso |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select\n", + "1 50 50 0.1 1 0.03 0.59 ( 0.01 ) 2.69 ( 0.14 ) 5.3 ( 0.07 ) 2.39 \n", + "2 100 50 0.1 0.5 0.11 0.56 ( 0.01 ) 2.02 ( 0.15 ) 5.02 ( 0.08 ) 2.00 \n", + "3 500 50 0.1 0.1 0.28 0.63 ( 0 ) 4.52 ( 0.29 ) 3 ( 0.11 ) 6.52 \n", + "4 1000 50 0.1 0.05 0.39 0.64 ( 0 ) 4.74 ( 0.22 ) 2.1 ( 0.09 ) 7.64 \n", + "5 50 100 0.1 2 0.02 0.62 ( 0.01 ) 3.82 ( 0.16 ) 5.34 ( 0.07 ) 3.48 \n", + "6 100 100 0.1 1 0.07 0.56 ( 0.01 ) 2.29 ( 0.19 ) 5.27 ( 0.08 ) 2.02 \n", + " FDR ROC_mean FP_mean FN_mean method\n", + "1 0.67 0.59 2.69 5.30 lasso \n", + "2 0.39 0.56 2.02 5.02 lasso \n", + "3 0.45 0.63 4.52 3.00 lasso \n", + "4 0.44 0.64 4.74 2.10 lasso \n", + "5 0.78 0.62 3.82 5.34 lasso \n", + "6 0.57 0.56 2.29 5.27 lasso " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(block_bin)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Figure 1: MSE/AUC vs. Stability (evaludated by FPR)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 9 × 14
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_meanmethod
<fct><fct><dbl><fct><dbl><fct><fct><fct><dbl><dbl><dbl><dbl><dbl><fct>
243500 50 0.10.1 NA0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00 NA0.50 0.006.00compLasso
244100050 0.10.05NA0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00 NA0.50 0.006.00compLasso
247500 100 0.10.2 NA0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00 NA0.50 0.006.00compLasso
2481000100 0.10.1 NA0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00 NA0.50 0.006.00compLasso
24950 500 0.110 00.73 ( 0.01 )29.62 ( 7.94 )5.17 ( 0.13 )30.450.90.7329.625.17compLasso
251500 500 0.11 NA0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00 NA0.50 0.006.00compLasso
2521000500 0.10.5 NA0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00 NA0.50 0.006.00compLasso
255500 10000.12 00.5 ( 0 ) 0 ( 0 ) 5.98 ( 0.02 ) 0.020.00.50 0.005.98compLasso
256100010000.11 NA0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00 NA0.50 0.006.00compLasso
\n" + ], + "text/latex": [ + "A data.frame: 9 × 14\n", + "\\begin{tabular}{r|llllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean & method\\\\\n", + " & & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t243 & 500 & 50 & 0.1 & 0.1 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NA & 0.50 & 0.00 & 6.00 & compLasso\\\\\n", + "\t244 & 1000 & 50 & 0.1 & 0.05 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NA & 0.50 & 0.00 & 6.00 & compLasso\\\\\n", + "\t247 & 500 & 100 & 0.1 & 0.2 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NA & 0.50 & 0.00 & 6.00 & compLasso\\\\\n", + "\t248 & 1000 & 100 & 0.1 & 0.1 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NA & 0.50 & 0.00 & 6.00 & compLasso\\\\\n", + "\t249 & 50 & 500 & 0.1 & 10 & 0 & 0.73 ( 0.01 ) & 29.62 ( 7.94 ) & 5.17 ( 0.13 ) & 30.45 & 0.9 & 0.73 & 29.62 & 5.17 & compLasso\\\\\n", + "\t251 & 500 & 500 & 0.1 & 1 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NA & 0.50 & 0.00 & 6.00 & compLasso\\\\\n", + "\t252 & 1000 & 500 & 0.1 & 0.5 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NA & 0.50 & 0.00 & 6.00 & compLasso\\\\\n", + "\t255 & 500 & 1000 & 0.1 & 2 & 0 & 0.5 ( 0 ) & 0 ( 0 ) & 5.98 ( 0.02 ) & 0.02 & 0.0 & 0.50 & 0.00 & 5.98 & compLasso\\\\\n", + "\t256 & 1000 & 1000 & 0.1 & 1 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NA & 0.50 & 0.00 & 6.00 & compLasso\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 9 × 14\n", + "\n", + "| | N <fct> | P <fct> | Corr <dbl> | Ratio <fct> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <dbl> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> | method <fct> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 243 | 500 | 50 | 0.1 | 0.1 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NA | 0.50 | 0.00 | 6.00 | compLasso |\n", + "| 244 | 1000 | 50 | 0.1 | 0.05 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NA | 0.50 | 0.00 | 6.00 | compLasso |\n", + "| 247 | 500 | 100 | 0.1 | 0.2 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NA | 0.50 | 0.00 | 6.00 | compLasso |\n", + "| 248 | 1000 | 100 | 0.1 | 0.1 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NA | 0.50 | 0.00 | 6.00 | compLasso |\n", + "| 249 | 50 | 500 | 0.1 | 10 | 0 | 0.73 ( 0.01 ) | 29.62 ( 7.94 ) | 5.17 ( 0.13 ) | 30.45 | 0.9 | 0.73 | 29.62 | 5.17 | compLasso |\n", + "| 251 | 500 | 500 | 0.1 | 1 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NA | 0.50 | 0.00 | 6.00 | compLasso |\n", + "| 252 | 1000 | 500 | 0.1 | 0.5 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NA | 0.50 | 0.00 | 6.00 | compLasso |\n", + "| 255 | 500 | 1000 | 0.1 | 2 | 0 | 0.5 ( 0 ) | 0 ( 0 ) | 5.98 ( 0.02 ) | 0.02 | 0.0 | 0.50 | 0.00 | 5.98 | compLasso |\n", + "| 256 | 1000 | 1000 | 0.1 | 1 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NA | 0.50 | 0.00 | 6.00 | compLasso |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "243 500 50 0.1 0.1 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + "244 1000 50 0.1 0.05 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + "247 500 100 0.1 0.2 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + "248 1000 100 0.1 0.1 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + "249 50 500 0.1 10 0 0.73 ( 0.01 ) 29.62 ( 7.94 ) 5.17 ( 0.13 )\n", + "251 500 500 0.1 1 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + "252 1000 500 0.1 0.5 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + "255 500 1000 0.1 2 0 0.5 ( 0 ) 0 ( 0 ) 5.98 ( 0.02 )\n", + "256 1000 1000 0.1 1 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + " num_select FDR ROC_mean FP_mean FN_mean method \n", + "243 0.00 NA 0.50 0.00 6.00 compLasso\n", + "244 0.00 NA 0.50 0.00 6.00 compLasso\n", + "247 0.00 NA 0.50 0.00 6.00 compLasso\n", + "248 0.00 NA 0.50 0.00 6.00 compLasso\n", + "249 30.45 0.9 0.73 29.62 5.17 compLasso\n", + "251 0.00 NA 0.50 0.00 6.00 compLasso\n", + "252 0.00 NA 0.50 0.00 6.00 compLasso\n", + "255 0.02 0.0 0.50 0.00 5.98 compLasso\n", + "256 0.00 NA 0.50 0.00 6.00 compLasso" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "block_bin[block_bin$method=='compLasso' & block_bin$Stab %in% c(NA, 0),]\n", + "\n", + "# composittional Lasso perform poor (often select nothing) at Block Corr 0.1" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 21 × 14
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_meanmethod
<fct><fct><dbl><fct><dbl><fct><fct><fct><dbl><dbl><dbl><dbl><dbl><fct>
1350 10000.120 00.62 ( 0.01 )10.42 ( 0.22 ) 5.56 ( 0.06 ) 9.860.950.62 10.425.56lasso
8950 500 0.110 00.61 ( 0.01 )69.03 ( 7.45 ) 4.13 ( 0.19 ) 69.900.960.61 69.034.13elnet
90100 500 0.15 00.57 ( 0.01 )70.64 ( 9.13 ) 3.91 ( 0.17 ) 71.730.910.57 70.643.91elnet
9350 10000.120 00.59 ( 0.01 )103.61 ( 10.54 )4.34 ( 0.18 )104.270.980.59103.614.34elnet
94100 10000.110 00.56 ( 0.01 )103.21 ( 12.75 )4.15 ( 0.17 )104.060.950.56103.214.15elnet
16150 50 0.11 NA1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 NA1.00 0.006.00rf
16550 100 0.12 NA1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 NA1.00 0.006.00rf
166100 100 0.11 01 ( 0 ) 5.09 ( 0.21 ) 5.6 ( 0.09 ) 5.480.931.00 5.095.60rf
16950 500 0.110 NA1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 NA1.00 0.006.00rf
170100 500 0.15 01 ( 0 ) 24.14 ( 0.56 ) 5.35 ( 0.11 ) 24.790.971.00 24.145.35rf
17350 10000.120 NA1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 NA1.00 0.006.00rf
174100 10000.110 01 ( 0 ) 48.22 ( 0.62 ) 5.53 ( 0.09 ) 48.690.991.00 48.225.53rf
243500 50 0.10.1 NA0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00 NA0.50 0.006.00compLasso
244100050 0.10.05NA0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00 NA0.50 0.006.00compLasso
247500 100 0.10.2 NA0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00 NA0.50 0.006.00compLasso
2481000100 0.10.1 NA0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00 NA0.50 0.006.00compLasso
24950 500 0.110 00.73 ( 0.01 )29.62 ( 7.94 ) 5.17 ( 0.13 ) 30.450.900.73 29.625.17compLasso
251500 500 0.11 NA0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00 NA0.50 0.006.00compLasso
2521000500 0.10.5 NA0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00 NA0.50 0.006.00compLasso
255500 10000.12 00.5 ( 0 ) 0 ( 0 ) 5.98 ( 0.02 ) 0.020.000.50 0.005.98compLasso
256100010000.11 NA0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00 NA0.50 0.006.00compLasso
\n" + ], + "text/latex": [ + "A data.frame: 21 × 14\n", + "\\begin{tabular}{r|llllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean & method\\\\\n", + " & & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t13 & 50 & 1000 & 0.1 & 20 & 0 & 0.62 ( 0.01 ) & 10.42 ( 0.22 ) & 5.56 ( 0.06 ) & 9.86 & 0.95 & 0.62 & 10.42 & 5.56 & lasso \\\\\n", + "\t89 & 50 & 500 & 0.1 & 10 & 0 & 0.61 ( 0.01 ) & 69.03 ( 7.45 ) & 4.13 ( 0.19 ) & 69.90 & 0.96 & 0.61 & 69.03 & 4.13 & elnet \\\\\n", + "\t90 & 100 & 500 & 0.1 & 5 & 0 & 0.57 ( 0.01 ) & 70.64 ( 9.13 ) & 3.91 ( 0.17 ) & 71.73 & 0.91 & 0.57 & 70.64 & 3.91 & elnet \\\\\n", + "\t93 & 50 & 1000 & 0.1 & 20 & 0 & 0.59 ( 0.01 ) & 103.61 ( 10.54 ) & 4.34 ( 0.18 ) & 104.27 & 0.98 & 0.59 & 103.61 & 4.34 & elnet \\\\\n", + "\t94 & 100 & 1000 & 0.1 & 10 & 0 & 0.56 ( 0.01 ) & 103.21 ( 12.75 ) & 4.15 ( 0.17 ) & 104.06 & 0.95 & 0.56 & 103.21 & 4.15 & elnet \\\\\n", + "\t161 & 50 & 50 & 0.1 & 1 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NA & 1.00 & 0.00 & 6.00 & rf \\\\\n", + "\t165 & 50 & 100 & 0.1 & 2 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NA & 1.00 & 0.00 & 6.00 & rf \\\\\n", + "\t166 & 100 & 100 & 0.1 & 1 & 0 & 1 ( 0 ) & 5.09 ( 0.21 ) & 5.6 ( 0.09 ) & 5.48 & 0.93 & 1.00 & 5.09 & 5.60 & rf \\\\\n", + "\t169 & 50 & 500 & 0.1 & 10 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NA & 1.00 & 0.00 & 6.00 & rf \\\\\n", + "\t170 & 100 & 500 & 0.1 & 5 & 0 & 1 ( 0 ) & 24.14 ( 0.56 ) & 5.35 ( 0.11 ) & 24.79 & 0.97 & 1.00 & 24.14 & 5.35 & rf \\\\\n", + "\t173 & 50 & 1000 & 0.1 & 20 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NA & 1.00 & 0.00 & 6.00 & rf \\\\\n", + "\t174 & 100 & 1000 & 0.1 & 10 & 0 & 1 ( 0 ) & 48.22 ( 0.62 ) & 5.53 ( 0.09 ) & 48.69 & 0.99 & 1.00 & 48.22 & 5.53 & rf \\\\\n", + "\t243 & 500 & 50 & 0.1 & 0.1 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NA & 0.50 & 0.00 & 6.00 & compLasso\\\\\n", + "\t244 & 1000 & 50 & 0.1 & 0.05 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NA & 0.50 & 0.00 & 6.00 & compLasso\\\\\n", + "\t247 & 500 & 100 & 0.1 & 0.2 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NA & 0.50 & 0.00 & 6.00 & compLasso\\\\\n", + "\t248 & 1000 & 100 & 0.1 & 0.1 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NA & 0.50 & 0.00 & 6.00 & compLasso\\\\\n", + "\t249 & 50 & 500 & 0.1 & 10 & 0 & 0.73 ( 0.01 ) & 29.62 ( 7.94 ) & 5.17 ( 0.13 ) & 30.45 & 0.90 & 0.73 & 29.62 & 5.17 & compLasso\\\\\n", + "\t251 & 500 & 500 & 0.1 & 1 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NA & 0.50 & 0.00 & 6.00 & compLasso\\\\\n", + "\t252 & 1000 & 500 & 0.1 & 0.5 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NA & 0.50 & 0.00 & 6.00 & compLasso\\\\\n", + "\t255 & 500 & 1000 & 0.1 & 2 & 0 & 0.5 ( 0 ) & 0 ( 0 ) & 5.98 ( 0.02 ) & 0.02 & 0.00 & 0.50 & 0.00 & 5.98 & compLasso\\\\\n", + "\t256 & 1000 & 1000 & 0.1 & 1 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NA & 0.50 & 0.00 & 6.00 & compLasso\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 21 × 14\n", + "\n", + "| | N <fct> | P <fct> | Corr <dbl> | Ratio <fct> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <dbl> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> | method <fct> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 13 | 50 | 1000 | 0.1 | 20 | 0 | 0.62 ( 0.01 ) | 10.42 ( 0.22 ) | 5.56 ( 0.06 ) | 9.86 | 0.95 | 0.62 | 10.42 | 5.56 | lasso |\n", + "| 89 | 50 | 500 | 0.1 | 10 | 0 | 0.61 ( 0.01 ) | 69.03 ( 7.45 ) | 4.13 ( 0.19 ) | 69.90 | 0.96 | 0.61 | 69.03 | 4.13 | elnet |\n", + "| 90 | 100 | 500 | 0.1 | 5 | 0 | 0.57 ( 0.01 ) | 70.64 ( 9.13 ) | 3.91 ( 0.17 ) | 71.73 | 0.91 | 0.57 | 70.64 | 3.91 | elnet |\n", + "| 93 | 50 | 1000 | 0.1 | 20 | 0 | 0.59 ( 0.01 ) | 103.61 ( 10.54 ) | 4.34 ( 0.18 ) | 104.27 | 0.98 | 0.59 | 103.61 | 4.34 | elnet |\n", + "| 94 | 100 | 1000 | 0.1 | 10 | 0 | 0.56 ( 0.01 ) | 103.21 ( 12.75 ) | 4.15 ( 0.17 ) | 104.06 | 0.95 | 0.56 | 103.21 | 4.15 | elnet |\n", + "| 161 | 50 | 50 | 0.1 | 1 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NA | 1.00 | 0.00 | 6.00 | rf |\n", + "| 165 | 50 | 100 | 0.1 | 2 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NA | 1.00 | 0.00 | 6.00 | rf |\n", + "| 166 | 100 | 100 | 0.1 | 1 | 0 | 1 ( 0 ) | 5.09 ( 0.21 ) | 5.6 ( 0.09 ) | 5.48 | 0.93 | 1.00 | 5.09 | 5.60 | rf |\n", + "| 169 | 50 | 500 | 0.1 | 10 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NA | 1.00 | 0.00 | 6.00 | rf |\n", + "| 170 | 100 | 500 | 0.1 | 5 | 0 | 1 ( 0 ) | 24.14 ( 0.56 ) | 5.35 ( 0.11 ) | 24.79 | 0.97 | 1.00 | 24.14 | 5.35 | rf |\n", + "| 173 | 50 | 1000 | 0.1 | 20 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NA | 1.00 | 0.00 | 6.00 | rf |\n", + "| 174 | 100 | 1000 | 0.1 | 10 | 0 | 1 ( 0 ) | 48.22 ( 0.62 ) | 5.53 ( 0.09 ) | 48.69 | 0.99 | 1.00 | 48.22 | 5.53 | rf |\n", + "| 243 | 500 | 50 | 0.1 | 0.1 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NA | 0.50 | 0.00 | 6.00 | compLasso |\n", + "| 244 | 1000 | 50 | 0.1 | 0.05 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NA | 0.50 | 0.00 | 6.00 | compLasso |\n", + "| 247 | 500 | 100 | 0.1 | 0.2 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NA | 0.50 | 0.00 | 6.00 | compLasso |\n", + "| 248 | 1000 | 100 | 0.1 | 0.1 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NA | 0.50 | 0.00 | 6.00 | compLasso |\n", + "| 249 | 50 | 500 | 0.1 | 10 | 0 | 0.73 ( 0.01 ) | 29.62 ( 7.94 ) | 5.17 ( 0.13 ) | 30.45 | 0.90 | 0.73 | 29.62 | 5.17 | compLasso |\n", + "| 251 | 500 | 500 | 0.1 | 1 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NA | 0.50 | 0.00 | 6.00 | compLasso |\n", + "| 252 | 1000 | 500 | 0.1 | 0.5 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NA | 0.50 | 0.00 | 6.00 | compLasso |\n", + "| 255 | 500 | 1000 | 0.1 | 2 | 0 | 0.5 ( 0 ) | 0 ( 0 ) | 5.98 ( 0.02 ) | 0.02 | 0.00 | 0.50 | 0.00 | 5.98 | compLasso |\n", + "| 256 | 1000 | 1000 | 0.1 | 1 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NA | 0.50 | 0.00 | 6.00 | compLasso |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "13 50 1000 0.1 20 0 0.62 ( 0.01 ) 10.42 ( 0.22 ) 5.56 ( 0.06 )\n", + "89 50 500 0.1 10 0 0.61 ( 0.01 ) 69.03 ( 7.45 ) 4.13 ( 0.19 )\n", + "90 100 500 0.1 5 0 0.57 ( 0.01 ) 70.64 ( 9.13 ) 3.91 ( 0.17 )\n", + "93 50 1000 0.1 20 0 0.59 ( 0.01 ) 103.61 ( 10.54 ) 4.34 ( 0.18 )\n", + "94 100 1000 0.1 10 0 0.56 ( 0.01 ) 103.21 ( 12.75 ) 4.15 ( 0.17 )\n", + "161 50 50 0.1 1 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) \n", + "165 50 100 0.1 2 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) \n", + "166 100 100 0.1 1 0 1 ( 0 ) 5.09 ( 0.21 ) 5.6 ( 0.09 ) \n", + "169 50 500 0.1 10 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) \n", + "170 100 500 0.1 5 0 1 ( 0 ) 24.14 ( 0.56 ) 5.35 ( 0.11 )\n", + "173 50 1000 0.1 20 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) \n", + "174 100 1000 0.1 10 0 1 ( 0 ) 48.22 ( 0.62 ) 5.53 ( 0.09 )\n", + "243 500 50 0.1 0.1 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + "244 1000 50 0.1 0.05 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + "247 500 100 0.1 0.2 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + "248 1000 100 0.1 0.1 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + "249 50 500 0.1 10 0 0.73 ( 0.01 ) 29.62 ( 7.94 ) 5.17 ( 0.13 )\n", + "251 500 500 0.1 1 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + "252 1000 500 0.1 0.5 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + "255 500 1000 0.1 2 0 0.5 ( 0 ) 0 ( 0 ) 5.98 ( 0.02 )\n", + "256 1000 1000 0.1 1 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + " num_select FDR ROC_mean FP_mean FN_mean method \n", + "13 9.86 0.95 0.62 10.42 5.56 lasso \n", + "89 69.90 0.96 0.61 69.03 4.13 elnet \n", + "90 71.73 0.91 0.57 70.64 3.91 elnet \n", + "93 104.27 0.98 0.59 103.61 4.34 elnet \n", + "94 104.06 0.95 0.56 103.21 4.15 elnet \n", + "161 0.00 NA 1.00 0.00 6.00 rf \n", + "165 0.00 NA 1.00 0.00 6.00 rf \n", + "166 5.48 0.93 1.00 5.09 5.60 rf \n", + "169 0.00 NA 1.00 0.00 6.00 rf \n", + "170 24.79 0.97 1.00 24.14 5.35 rf \n", + "173 0.00 NA 1.00 0.00 6.00 rf \n", + "174 48.69 0.99 1.00 48.22 5.53 rf \n", + "243 0.00 NA 0.50 0.00 6.00 compLasso\n", + "244 0.00 NA 0.50 0.00 6.00 compLasso\n", + "247 0.00 NA 0.50 0.00 6.00 compLasso\n", + "248 0.00 NA 0.50 0.00 6.00 compLasso\n", + "249 30.45 0.90 0.73 29.62 5.17 compLasso\n", + "251 0.00 NA 0.50 0.00 6.00 compLasso\n", + "252 0.00 NA 0.50 0.00 6.00 compLasso\n", + "255 0.02 0.00 0.50 0.00 5.98 compLasso\n", + "256 0.00 NA 0.50 0.00 6.00 compLasso" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check other method results at Block Corr 0.1\n", + "block_bin[block_bin$Corr == 0.1 & block_bin$Stab %in% c(NA, 0),]\n", + "\n", + "# other method: Stab = 0 or NA (if Stab = 0, then high FPR)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 20 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 20 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 20 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 20 rows containing missing values (geom_point).”\n" + ] + } + ], + "source": [ + "ind_cts_mse_fpr <- ggplot(ind_cts, aes(x=FDR, y=MSE_mean, color=method, size=Ratio)) + geom_point(alpha=0.8) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Independent', x='False Positive Rate', y='MSE') + ylim(0, 4) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "ind_cts_stab_fpr <- ggplot(ind_cts, aes(x=FDR, y=Stab, color=method, size=Ratio)) + geom_point(alpha=0.8) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Independent', x='False Positive Rate', y='Stability') + ylim(0, 1) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "toe_cts_mse_fpr <- ggplot(toe_cts, aes(x=FDR, y=MSE_mean, color=method, size=Ratio)) + geom_point(alpha=0.3) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Toeplitz', x='False Positive Rate', y='MSE') + ylim(0, 4) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "toe_cts_stab_fpr <- ggplot(toe_cts, aes(x=FDR, y=Stab, color=method, size=Ratio)) + geom_point(alpha=0.3) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Toeplitz', x='False Positive Rate', y='Stability') + ylim(0, 1) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "block_cts_mse_fpr <- ggplot(block_cts, aes(x=FDR, y=MSE_mean, color=method, size=Ratio)) + geom_point(alpha=0.3) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Block', x='False Positive Rate', y='MSE') + ylim(0, 4) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "block_cts_stab_fpr <- ggplot(block_cts, aes(x=FDR, y=Stab, color=method, size=Ratio)) + geom_point(alpha=0.3) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Block', x='False Positive Rate', y='Stability') + ylim(0, 1) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "fig1_cts <- ggarrange(ind_cts_mse_fpr, ind_cts_stab_fpr, toe_cts_mse_fpr, toe_cts_stab_fpr, \n", + " block_cts_mse_fpr, block_cts_stab_fpr, \n", + " nrow=3, ncol = 2, align = \"hv\", labels = \"AUTO\", common.legend = T, legend = \"bottom\") " + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 20 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 20 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 27 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 27 rows containing missing values (geom_point).”\n" + ] + } + ], + "source": [ + "ind_bin_ROC_fpr <- ggplot(ind_bin, aes(x=FDR, y=ROC_mean, color=method, size=Ratio)) + geom_point(alpha=0.8) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Independent', x='False Positive Rate', y='AUC') + ylim(0, 1) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "ind_bin_stab_fpr <- ggplot(ind_bin, aes(x=FDR, y=Stab, color=method, size=Ratio)) + geom_point(alpha=0.8) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Independent', x='False Positive Rate', y='Stability') + ylim(0, 1) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "toe_bin_ROC_fpr <- ggplot(toe_bin, aes(x=FDR, y=ROC_mean, color=method, size=Ratio)) + geom_point(alpha=0.3) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Toeplitz', x='False Positive Rate', y='AUC') + ylim(0, 1) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "toe_bin_stab_fpr <- ggplot(toe_bin, aes(x=FDR, y=Stab, color=method, size=Ratio)) + geom_point(alpha=0.3) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Toeplitz', x='False Positive Rate', y='Stability') + ylim(0, 1) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "block_bin_ROC_fpr <- ggplot(block_bin, aes(x=FDR, y=ROC_mean, color=method, size=Ratio)) + geom_point(alpha=0.3) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Block', x='False Positive Rate', y='AUC') + ylim(0, 1) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "block_bin_stab_fpr <- ggplot(block_bin, aes(x=FDR, y=Stab, color=method, size=Ratio)) + geom_point(alpha=0.3) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Block', x='False Positive Rate', y='Stability') + ylim(0, 1) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "fig1_bin <- ggarrange(ind_bin_ROC_fpr, ind_bin_stab_fpr, toe_bin_ROC_fpr, toe_bin_stab_fpr, block_bin_ROC_fpr, block_bin_stab_fpr, \n", + " nrow=3, ncol = 2, align = \"hv\", labels = \"AUTO\", common.legend = T, legend = \"bottom\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 20 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 20 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 20 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 20 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 20 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 20 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 27 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 27 rows containing missing values (geom_point).”\n" + ] + }, + { + "data": { + "image/png": "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\nt7cRCouTEjfWuXyGYYoWjmDVy7J8bzrD++3aCQNlA2VGukgqkgcAECEizk7AGpVZbvMF9aaL\nGk0ziLA+HP5RZqY09OGVK1asePbZZ42W2mWCIPzoRz/63e9+11X7ioqKQCDQWj9g+vTpmqaV\nlpZOnz69Q7P9+/dv3LgxHA5PmTLlnnvuSU9P7+Wxwwq0WIk3/+ewaOGuCGeGngjklptfMHRO\nSYOqwnNe8/zzz3ez9+c///ljjz325ptvduXYjbZRF2MoiNm6HkmQxLV5seDXnunOsXM6nYFA\n4Pjx43PmzCktLd2/fz8AzJ7dXA/0yJEjAJCZmTkU3UpJSbn99tsjn8Ph8DPPPGO32zvoSF19\n9dWR6heapg1npUeWkYU5uVBXB4MyaRcMsgsuhPjeLknnmk3XJzjXnq4eo7TTtpB501jvazme\nVzVm09Hul8a2KZ9IjDRGOgBnoAo8FBIzGpTZZXG36WgFAI+hz7TZ7kobtEzYrnjqqaciiWNJ\nSUm5ubmlpaW1tbVPP/10ZmbmT37yk6iH1NfXi6LYGg4lSZLVanW5XG3buN1un88niuLKlSt1\nXX/99dcffvjhtWvX9ubY4TbqMC2D9n2OFgAAE2N+w+jg21GbBApF14viEwCAAwS4caHVclb7\net7yrW9967HHHjt+/HhXDUbbqIsx6MRsXY+EGqD2cyCA1NlgSjzXvRnedOfYTZ48ubKyctWq\nVY8++ugf/vAHALDb7RHHrqKiIpLRE1kqHSKI6KOPPvrLX/6Smpr69NNP22ztFv5sNlvk5SYQ\nCAzryTxEYe7FxhuvRikA2keIcwj4xYv6Ftl2b2ba+42NdZoe17Iga9dKJjWtjgsf9YuZhDJA\nh6LYyFHm2OIIMhAoPM77qkP98qhzpU/IqNX0X4xLsQ19fPerr74KAA899NBjjz0miqKu648+\n+ugTTzzx0ksvdWXsiKjzvFWH8nd2u/2vf/2rzWaLtBw/fvySJUt27doly3KPxw63UcfyJoGm\nga6DKCaIYoOmUZuFVwISW9RZTYZeZo/7IiUdAOpV7UKrtUnT6jQtOTZv1xMRWTu5a9m/0Tbq\nYgw6MVvXI2Xvgb8CCCBYA5PvhE6aTjHO0J1j98ADD3zwwQfr169fv359ZMvixYslSXK5XGPG\nNMd4dTXmBo7b7X7yySdramruuuuuhQsXdh6FGzdujHx4++23WxeIhydsyjQ+aQovO9nLbNau\n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\nZ5xxxuWXX64M2gadHIq0Awuq0wzj+7XTAaSkDOQ420U19TNl/fL01viK67PZW+r3lWtqeNCC\nnMNotsx5gcCPZk6PjnG5bjh8QribyADON6LnFUb/mUj+tav77/FEi2l12TYAXURixf+vqOmL\nPqMiT69WiXp90nsXlvVCyVZ3qv702V9dWffv4zKxSWY0yhmuzdGjumOMymDZxxd8839e+7St\nV8adUMqJ65zSOaVwBgw3QslvFetWqRS2kAeP1iciUga8AzkwdePk4anOY/LxVDdpLK+9ur79\nxUByZ5GW12RaaSlcN7ddBc9M73h/NDU3rbazkAQQqz6rfGvEWRxDmoWkAc+opMowTfAz6NFr\n2D388MPPPffcNddco6rq3Xffbdv2lVdeeaQndYCAOPhvz/XTqmb4fHc3Nm1KpMKaYpBQiCzm\nlO3EHOcjxUXfmV49zWcctJ9DQwBLQsEloZ5SuKaUWXbrVSx8uzHy0rYfdaf2BvQiIQ78MTNz\nxu5KZVtPnfmlFfNunKCJTTSjUc5wbY5y1U1p5pdftHL+TX/dcnNxYHpWFqZkgSkdS5osbcGW\nIEc35zE5LDJC9iZNGQYCQQzyO3ZrMB8hPNV5TD6e6iaNkFH6vhNufeqtL6Wtjpn+4K50xmQW\nAIvUa7X/vqT+y1Wd73HIJECw1lD4660V35V75y9qmxfTE7m2HQNCGiCHDr7uNjwHO+wozWOX\nTqeffPLJz3/+88uWLTvppJOuuuqqP//5z93d3Ud6XmPm4yVFjy+Yf9usGWfn50/3+Qo1bUEg\n8Lny0qdOrLt/3qyJs+oGowvRV4WsruLDFy75+azSc9qT27rT9fHs/kSmOZZu6EhuKw7N/ejS\nB1fWfVeZmhGGo1HOcG2OGdUdtZw+69ql078QS+3ywSzRtCrDN90fmRGM1oRKq4MVhcEQQSFi\nCIcghskCQABBQAz2cJg4j5WD4anOY/LxVDfJVBa868w5X4+lGhy7q8rQbWYAClHaaHxl1jee\nWXDJuln/9vfa/+9vdUs2TPuyqbS/MG3dxsKtedmwz+mtug4CSEB1C3tO3O3qKF2xa2hoSKVS\nS5YscV8uWrTIsqzdu3cvWnQgBc3jjz8upQTwz3/+MxQaW1TpZFKgqpeVlVxWdnQVVC2NLPzQ\nSfefOef6vR2vxDNNjswGjdKK/CUV+Sf3OaRPRUajnOHaBAKBY0Z1RydEyvtOuLUgMP3Zjd8I\n+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\nhsNT3ZANxoVJU93U24p1MQyjtD/RaPRITUbXdXcOc+bMufPOO4kIwNtvv304fX7xi1+85JJL\nnn766UNucMhomuaeTllZ2aJFi1wxxePx9vb2cR9rauGpzlPd5OOpzlPd5OOpbkqrbqoadsPR\n1NT0hS98Yfr06T6fr7q6+tJLL92+ffuQLTs6Oq699tpZs2b5/f7a2torr7yyoaHB/UhKedtt\nty1dujQUCs2ePfumm27KZDKjnICqqq7s/H6/+86LL7547rnnlpeXl5SUrFy58tlnnx3NHF55\n5ZU1a9a4L0899VS3fvkzzzxDRI7jDGiwevVqInINfxd3L/+ss846zNMBwMzueeXl5WH4Kzzk\nJA9z6KmCpzoXT3WTiac6F091k4mnOpejXXWHu7Y46bgLxYNJJBKWZS1evNh9GYlE3P/U1tY6\njsODForf/e53AyCiiooKVyizZ8+Ox+PM/KlPfarvWF3XAaxYscLtZADuQvEZZ5zhvuzu7r7h\nhhvcY59++mlm/tWvfuV2ruu6YRjuR3feeedB55A729tvv72urg5ATU3Nl7/85cGn85e//MXt\neefOncxs23Z+fj6An/3sZ2M6HXeheN68eW1tbW1tba2trZs2bVq4cCGAj370o8w8whUecpKj\nH/oox1Odp7rJx1Odp7rJx1PdMaC6Y8qwe/XVV91vcd26dczcZ7lv3ryZ+39P9fX17kd//OMf\nmXnHjh3RaDQUCj311FMvv/xybifbt293nwx+85vfDJ6MK7vBLFmyxHGcrq4ud/n64osvTiaT\nmUzmc5/7HIBQKNTc3DzCHHjQH8ngzfXcBo7jVFRUALjrrruYee3atQAURWlubh7T6biyG8yq\nVatcB4uRr/CASY5p6KMcT3UunuomE091Lp7qJhNPdS5TWnVTdSt2sGtnIBBYtmyZbdudnZ2p\nVOqOO+64+eab3caJRGLA4bquK4oC4LLLLrviiiteeeWVDRs2xOPx884774UXXgAQjUYfeeSR\n66677p577nGls27dutFMzO/3X3jhhX/84x+FEG+88UZHRweAn/70p4FAwDCM22+/XVEU9y9k\nhDmM9WoIIS655BIATz75JABXDStXriwpKTnM03FpampyF3hHf4UBjMvQRxWe6nLxVDc5eKrL\nxVPd5OCpLpepp7pxsfEnE/d54uyzzx78keM4V199tRsCHQqFTjvtNPf8X3/9dR5kof/hD39Y\nunRp7mX6xCc+0draunr16iEv/apVqwaPOCBmZ//+/bZt9316//33A8jLy8s9xDX8b7/9/2fv\nzsMkq+r78b8/5651a++u3runZ8eBGZkZYFDEDcjXPYqKCZEk5knyRIUnmER/KmqIJsbnSYzm\na1yexATFAOJPzS8hGiFAQCKCsgozwzAz3bP0Mr3XXrfudj6/P6openoWBpjp7uk+rz9mbp97\nuurUrU9Xfe6555z75ZO04djWnvx8gpkfeeQRAJZllcvlxiG66aabmPlFvZzG+cTmzZsbP4Zh\neM899wghAHzyk598wSM8r5Ev6qmXOBV1DSrqFpKKugYVdQtJRV3DWR11Z2uP3XHddttt3/jG\nN4jo7rvvLpVKN99880kqv/3tb3/kkUcGBwe/8Y1vvPWtbxVCfPe73/2nf/qnvr4+ABdccMG8\nt+S//uu/TvRQzTk7HR0djVOEhtWrVwMoFouTk5ONknK5PDExAaC/v/8kbXgJr/3CCy/csGGD\n53nf//73H3nkEdM0r7zySgAv4eU0aZp2+eWXb9u2DcC+ffvwIo/wy3nqs4iKOhV1C09FnYq6\nhaei7myJumWV2DUmj8Tj8e3btwP42te+dqKaN998c19f36ZNm2Kx2Ac/+MF///d/37hxI4DJ\nycnG+tpPPvnkzp07AYyPj19yySWbNm265ZZbXmx7tm/f3hhief3113ueFwTBn/zJn4Rh6DjO\nq1/96pO04UQPePLFqX/rt34LwKc//ekoit7ylrc0nvrlv5zGkMxqtYpTO8LNRp7GI7mUqaiD\niroFp6IOKuoWnIo6nC1Rx2ebk3QUN0caGoaRSqUaxx3A3XffzUf3rB46dKi1tRUAEfX399u2\nDSAWiz355JPM3MjEDcPYtGlT46BfeOGFlUrl2GecN2fnWDfddFNjMo5t247jNNrzla985QXb\nMK8f+BOf+AQAIcTWrVsbfdHHrga5Z8+e5nt/++23N8tP/eXM6yhueMMb3gDgNa95zQse4WMb\neepPvcSpqFNRt/BU1KmoW3gq6pZB1C2rxI6Zv/rVr65Zs6a1tfU973nP0NDQRz7ykQ984ANf\n//rX+Zj3affu3b/927/dWC2mo6PjzW9+889//vPGriAIPve5z23ZsiUWi23YsOFTn/pUsVg8\n7tO9YNgx83333XfFFVd0dHTkcrnLLrvsrrvuau46SRvmtXZkZOTSSy+1bbunp+dEYcfMF1xw\nAQDHceZG1am/nOOG3Yc//GEAlmXt2rXr5Ef42Eae+lMvcSrqVNQtPBV1KuoWnoq6ZRB1xMxQ\nFEVRFEVRzn7LaoydoiiKoijKSqYSO0VRFEVRlGVCJXaKoiiKoijLhErsFEVRFEVRlgmV2CmK\noiiKoiwTKrFTFEVRFEVZJlRipyiKoiiKskyoxE5RFEVRFGWZUImdoiiKoijKMqESO0VRFEVR\nlGVCJXaKoiiKoijLhErsFEVRFEVRlgmV2CmKoiiKoiwTKrFTFEVRFEVZJlRipyiKoiiKskyo\nxE5RFEVRFGWZUImdoiiKoijKMqESO0VRFEVRlGVCJXaKoiiKoijLhErsFEVRFEVRlgmV2CmK\noiiKoiwTJ0vsdu3aRafg0KFDC9bcRXTFFVec/Dik02kp5YK156qrrmo878GDBxsl733ve8/2\nd+Suu+56wXi7+uqrF7uZC0dF3aLYtWvXxz72sfPPP7+lpSWZTG7btu2qq6669dZbF/JQLyIV\ndQvma1/7WvOoTk9Pz9v72GOPNff+8Ic/XJQWLhgVdaeR6rE7JVLKRx555OR1duzYIcTCHc9G\ne1pbW1evXt0o+cUvfgGgo6Ojv7+/UXLjjTf29fX19fU9+uijC9Yw5XRRUbfwgiC47rrrzj//\n/C9+8YtPPfVUPp+vVCpPPvnkD37wg2uuuea888772c9+tthtPLNU1CkLT0Xd6aWfYr1kMmlZ\n1nF3LeSxXizlcvmP//iPmz9++9vfHh4eBvC7v/u7fX19jcJXvepVC9aeycnJxknDRRdd1Cjx\nff8DH/gAgLVr1zar3XPPPcPDw5qmbdq0acHadrqk02nDMI4tTyaTC9+YRaGiboGFYfi2t73t\n7rvvPlGFPXv2vP3tb3/wwQfPO++8hWzYQlJRpyw8FXWnGZ/Yzp07m9V+8IMfnKTmSpPL5RqH\nZXJyclEa8OMf/7jRgM985jONknw+v3Pnzp07d05PTzdKfN+3bRvAli1bFqWRL8Gdd97ZDLmH\nH354sZuztKioO9M+/vGPN8Nv1apVt9xyy969e8vl8hNPPHHttdfq+uxp8MaNGxe7pQtHRd0Z\n9dWvfrUZclNTU/P2zu0HWlFfwSrqXqbl39l22h04cGBqagrA2rVrm/HXxMzf+c53rrjiio6O\njkQisW3bts997nO1Wm1uneHh4WuvvXbHjh3JZHLz5s3XXnttqVRq7v3kJz+5bdu2bdu2DQwM\n3Hjjjdu3b89ms29605v27NnTrNPstW6eT/z93//95s2bN2/e/NBDDwG47rrrTNOs1+sAnn76\naSLatWtXtVrVdf24wxf+5V/+5fQfKeX0UVF3pg0PD3/5y19ubF900UVPPPHE+9///g0bNiQS\nia1bt371q1+9/fbbG3v37t271K68nCEq6pSFp6LuNDhJ0qd67I6r+fn+G7/xG/N25fP51772\ntcce5IsvvjgIgkad73znO6lUal6FdevW5fP5RoWNGzcCMAzj8ssvn1snm802zxXe9ra3NQpH\nR0cbJW9961sbJWNjY8x85ZVXZjKZRkl7e/umTZuiKPrpT396ojB46qmnFuLYvRDVY3ciKurO\ntBtvvLHZsAcffPC4dT760Y9ec80111xzzR133LHAzVsUKurONNVjdywVdS+fSuxetD/7sz9r\nHJMvfvGLc8ullM2Y+/Vf//Xvfve7X/va11paWholN910EzPfeeedjSGJr3zlK//5n//53/7t\n3970pjc1Ktxwww3MPDMzQ0SNkjVr1nzlK1/57ne/u2bNmkbJ5z//+cZztbe3A+jp6Wk+e6Ok\nr6+vWfJ7v/d780JqdHT0nufceeedzWEBl19+eRRFZ/q4nQqV2J2Iiroz7ZJLLmk07KKLLlrs\ntiwVKurOtLmJXXt7e+fRWltbm3tXzlewirqX71QTuxP5q7/6qwVr6xLxute9rvHaf/rTn84t\nb55nXHvttc3Cf/zHf2wUfvCDH/R9f926dQD6+/td121UaE6lfu1rX8vMP/nJTxo/9vX1jYyM\nNOr853/+Z6PwN3/zN5m5Odf6Xe9617wHufLKK5tP3RjfHY/HwzCc9xJ833/Pe97T+JU3v/nN\nzcYsurmJ3XE1jsAKpKLuTMtms422/c7v/M5it2WpUFF3ps1N7E5u5SR2KupevlOdFas0SCkf\nf/xxAEKI7du3z93153/+5wBaW1u/8IUvNAs3b97c2LAs68477xwYGACQz+e3bNnSfMDGRltb\nG4CHH3648eNnPvOZ7u7uxnZzGk7jVOPYy//HlpTL5WeeeQbABRdcoGna3HZ6nnfVVVc1Qvnt\nb3/7D37wgxPNd1aWCBV1Z5qUslAoNLabaxk0PPjgg5deeum8+tddd90//MM/LFDjFomKOmXh\nqag7LV7uciexWOy0tmepe+aZZyqVCoBzzz03kUg0y8fGxvbu3Qvgsssum7sex+HDhxsbW7Zs\n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\nE5/4xCfq6uombyt33XXXjh07Pv/5z0/eFwkAt91226FDh771rW+F3+VU6l4FlbrxGlfqZu4Y\nu3GZN29eeEnj/vvvB3DxxRdPUif9q1/9ajQa3bBhw2RUfuDAgRtuuKGurm6S6i8WiwCWL18+\nSfU/++yzW7ZsWbdu3YoVKyaj/plGpW4sVOom1lDqJsqBAwcArFmz5txzz53Aao/y9NNPAzjr\nrLMm9R/yhx9+GMD69esn7wo0gHvvvffQoUOXXHIJpTN0WokJp1I3ihmYutdKLhVFURRFUea8\nudaxcxwnHo9P3minWCw2tAzLhGOMxePxyVuVzzCMeDw+SbcLAZimGY/HJ3uowQykUjcKlboZ\nLjyAmja5d28sy4rH45N9iWtqthKJRCb1pttrgUrdeI0rdXNkjJ2iKIqiKIoy167YKYqiKIqi\nvGapjp2iKIqiKMocoTp2iqIoiqIoc4Tq2Cnj8+ijj3qeN92tUF5bVOqUKaYip0y9iUrdbHp4\nQghxzz33bN68mXN+/vnnX3XVVcc+CjdSmZP57HClUun222/ftm1bJpNZsmTJ1VdfvXDhQgD3\n33//j3/846FijLFf/OIXr6L+keqZkPY//vjj3/72t4/61CWXXPLJT35yLO0H0N7evnHjxrvu\nuisWix3725M5+DOWSp1K3ew12eka+1ZOJmNj3MrJJ22IitzJUKmb9tTNpgmK77nnnk2bNl13\n3XWapt16661BEGzcuHGMZU7ms8N9/etf7+vr27hxYywW+8UvfvGlL33p5ptvLisra2lpWbt2\n7Zvf/Oaw2HFnvhhL/SPVMyHtX7ly5Ve+8pWhl0EQ3HTTTWvXrh1lu0MOHDjwxBNPbNq0aZRv\nAidz8GcslTqVutlrstM19q2cTMbGWPJkkjZERe7kqdRNf+omf6G5iVEoFN7znvc8+uij4cun\nnnrqne98Z39//1jKnMxnh5dpbm5+y1vesmPHjvBlEARXXnnl7373Oynl9ddf/6tf/eok2z9S\nPRPV/qPcd999N9100yjbHW7r1q233nrrN7/5zbe85S2ZTGbsO3jc90fZ0IyiUqdSN3tNdrrG\nvpWRaht7fiY7aUMmNnKjt3BOUqmbCambNVfsmpubC4XCmjVrwperV6/2ff/gwYOrV68+YRnH\ncV71Z4eX0XX9fe9735IlS8KXQRB4nieECD++bdu2n//8567rrly58pprrqmtrR1v+0eq52T2\n/aj6h7S3tz/88MPf//73R9nu8PLr1q1bt27dvn37tmzZctwKx3Xwj1vDDKRSp1I3e012usa+\nlZFqG3t+JjtpQyY2cqO0cK5SqZsJqZs1D090d3drmjY0/76u65FIpKenZyxlTuazw8tUVVW9\n733vMwwDgOu6N954YywWW79+fTqdzuVymqb9y7/8y2c+85l8Pv+FL3whXCJzXPWPVM9EtX+4\nW2655d3vfne43sBY2n9C4zr446p5GqnUqdTNXpOdrrFv5WQyNvatDDfhSTthS8bbwrlKpW4m\npG7WXLGTUh57izoIgrGUOZnPHrcljzzyyF133VVdXX3DDTdEo1EhxN133x2NRsMaFi1adNVV\nV23duvWiiy4aV/2xWOy49RiGMYHtB7B58+aenp5LLrlk9O0Ob/8JjevgzxYqdRPVfqjUTbnJ\nTtfYt3IyGRvvvmByknbCloyrhXOYSt3oW5+a1M2ajl0qlfJ9v1AoOI4DgHOez+crKirGUsZx\nnFf92aOakU6nv/Od73R0dHzgAx+44IILwmNKKR3+GEs0Gq2urj6qXz+W+keq55RTTpmo9od+\n9rOfXXbZZUOBGEv7T2hcB39cNU8jlTqVutlrstM19q2cTMbGtS+hyUjaCVsylv/eXwtU6kbf\n+shHbjTjTd2suRXb2NhoWdb27dvDlzt37qSUNjU1jaXMyXx2eBkp5Ve/+lXHcW6++eYLL7xw\n6E+4bdu266+/PpfLhS+LxWJXV1dDQ8N46x+pnolqf2jXrl0tLS2vf/3rT7jdYz87inEd/HHV\nPI1U6lTqZq/JTtfYt3IyGRv7VkKTlLQTtmTsLZzbVOrGuy9jMd7UzZordo7jbNiw4Y477igv\nL6eU/uhHP7rooouSySSAP/zhD57nXXbZZaOUGen9cdX//PPP79+//21ve9vevXuHPlhfX79y\n5cqOjo7vfe97b3/72zVN++lPf1pXV3fmmWeOt/6R6mGMTUj7w5KPP/74smXLotHo0GfH0v6R\nvLqDP+Y/+zRTqVOpm70mO11j38rJZGzsWwlLTmzShkzIf++vBSp1oelN3WyaoJhzfscddzz+\n+ONCiLPOOuvaa6/VNA3Al770pXw+/+///u+jlBnp/XHV/8ADD9x+++1HfWrjxo1vetOburq6\n/uu//mvXrl2U0jVr1lx99dXxePxVtH+keiak/WGx66677rzzznv/+98//LNjaT+Affv2/dM/\n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\nUqhuNZxh1W3ZvPls62J9Wam6PkEQTE1NrdPUbZIkU1NTh5NirC21Wm1qamqd0vKt65/k+Pj4\nyvQfz6l7XZ9CdcfkTKpu48aNJ/jKLoSIHYCdO3f+8Ic/BPD5z39+165d733ve6NodYlGToU9\ne/b80z/907XXXnv99deveecAPv3pT8/MzPz+7//+enS+Y8eOf/u3f3vlK1959dVXr0f/f/M3\nf2OMec973tM/LJVKr33ta9fjg84dCtWdlEJ1a85h1fXZv3//Zz7zmRe/+MWvfvWr1/yzHnjg\ngS9/+cs/93M/d+WVV65559/85je/+93vvv3tb9+wYcOad/4v//Ivjz/++Pve975wHepW3XHH\nHQBuu+22/mGhurWlUN0xOTXVnSmn/wzx27/929u3b282m+vR+Xe/+93t27d//OMfX4/OmflX\nf/VXf+ZnfmadOv/a1762ffv2f/iHf1in/n/xF3/x1a9+9Tp1fo5TqO54FKpbbx588MHt27d/\n6EMfWo/O77rrru3bt3/hC19Yj84/+tGPbt++/b777luPzt/znvds37691WqtR+c33XTTa1/7\n2vXo+XyhUN0xOXdUd47Wii0oKCgoKCgoKDhVCseuoKCgoKCgoOAC4QJZY1dQUFBQUFBQUFBE\n7AoKCgoKCgoKLhAKx66goKCgoKCg4AKhcOwKCgoKCgoKCi4QCseu4BT41re+lef52bai4LlF\nobqCM0+huoIzz1qp7nzaPOG9v/POO++++27n3HXXXXfzzTfLlUV5T9jmdM5dSZqmn/zkJ++/\n//5ms7lt27Z3vOMdF110EYAvfOELn/nMZw43k1J+6UtfOtXOj9fJmhh/zz33/OVf/uUzzrrx\nxhvf+973ntT4PgcOHLj11ls/+9nPViqVo989nZE/lylUV6juLLKu8ls/7a2r8ArVrTeF6s53\n1Z0n9XoBAHfeeefXv/712267TSl1xx13WGtvvfXWVbY5nXNX8ud//ueLi4u33nprpVL50pe+\n9IEPfOBjH/vYwMDAvn37XvKSl/zCL/xCvxkdVU1vNZ0fr5M1Mf7yyy//0z/908OH1trbb7/9\nJS95yQk+9zC7du36zne+8/Wvf/0EjwGnM/LnMoXqCtWdRdZVfuunvXUVXqG69aZQ3XmvuvVI\nkbwedLvdX/7lX/7Wt77VP/ze9773S7/0S0tLS6tpczrnrmyzd+/e173udT/5yU/6h9bat73t\nbV/96leZ+f3vf/9dd911OsYfr5O1Mv4ZfP7zn7/99ttP8Lkruffee++4444PfvCDr3vd645Z\nX+F0Rv5cplDdaRr/DArVnRLrKr/10966Cq9Q3XpTqO4CUN15s8Zu79693W73qquu6h9eccUV\nxpjdu3evps3pnLuyjdb6rW9967Zt2/qH1to8z733/dPvv//+X//1X3/b2972F3/xF/v37z/V\nzo/XyVoZv5IDBw7813/917ve9a4TfO5Krr766ne/+91vetObjtfh6Yz8uUyhutM0fiWF6k6V\ndZXf+mlvXYVXqG69KVR3AajuvHHs5ubmlFKlUql/qLUulUrz8/OraXM6565sMzo6+ta3vjUI\nAgBZln30ox+tVCovf/nLG41Gu91WSv3e7/3eH/zBH3Q6nT/+4z/u9Xqn1PnxOlkr41fy8Y9/\n/M1vfnO/Yv1JjV8NpzPy5zKF6k7T+JUUqjtV1lV+66e9dRVeobr1plDdBaC682aNHTMfPTNt\nrV1Nm9M595iWfPOb3/zsZz87Njb2kY98pFwue+8/97nPlcvlfg9bt269+eab77333htuuGH1\nnVcqlWN2EgTBGhoP4O67756fn7/xxhtP/LmHjV8NpzPy5zKF6tbEeBSqe1asq/zWT3vrKrxC\ndetNobrTMRvnhurOG8ducHDQGNPtdpMkAeCc63Q6w8PDq2mTJMmzPvcZZjQajQ996EMzMzO/\n9mu/dv311/fHVAixchtLuVweGxtb6c6vpvPjdfL85z9/rYzv88UvfvGmm246rIaTGr8aTmfk\nz2UK1RWqO4usq/zWT3vrKrxCdetNoboLQHXnzVTspk2boih64IEH+ocPPvigEGJ6eno1bU7n\n3JVtmPnP/uzPkiT52Mc+9opXvOLwN3f//fe///3vb7fb/cNerzc7O7tx48ZT6vx4nayV8X0e\neuihffv2vfKVrzzp5x597gk4nZE/lylUd5rG9ylU9+xYV/mtn/bWVXiF6tabQnUXgOrOm4hd\nkiSvetWrPvWpTw0NDQkhPvGJT9xwww31eh3AN77xjTzPb7rpphO0Od7rp9T/j3/84507d77+\n9a9/9NFHD584NTV1+eWXz8zMfPjDH37DG96glPrnf/7nycnJ7du3n1Lnx+tESrkmxvdb3nPP\nPZdcckm5XD587kmNPwFrMvLnMoXqCtWdRdZVfuunvXUVXqG69aZQ3QWguvMpQbFz7lOf+tQ9\n99zjvb/mmmtuueUWpRSAD3zgA51O56/+6q9O0OZ4r59S///6r//6yU9+8hln3XrrrT//8z8/\nOzv7d3/3dw899JAQ4qqrrnrHO95RrVZP1fjjdbImxveb3XbbbS972cve/va3rzz3pMb3eeyx\nx373d3/3c5/73OHA8lqN/LlMobpCdWeRdZXf+mlvXYVXqG69KVR3vqvufHLsCgoKCgoKCgoK\nTsB5s8auoKCgoKCgoKDgxBSOXUFBQUFBQUHBBULh2BUUFBQUFBQUXCAUjl1BQUFBQUFBwQVC\n4dgVFBQUFBQUFFwgFI5dQUFBQUFBQcEFQuHYFRQUFBQUFBRcIJx/jt21115Lx+LlL3/5iU/c\nuHEjEd1+++1raMyrX/3qlTZIKbdu3XrLLbfMzMycZs8ntXY9LudNb3rT0QM7NTX17ne/u9Vq\nreEHnXcUqltlg2dBobrjUahulQ2eBYXqjkehulU2eBacMdWdl3mxz1m897t27dq1a9e3v/3t\n++67T2u9Vj3ffffdDz/88MaNG1/72teuVZ+r5Kmnnvrrv/5rIrrjjjtO3PIsGvlcplBdoboz\nT6G6QnVnnkJ1qzWSzzde+tKXAnj5y19+4OnMz8+f+MQNGzYA+OhHP7qGxrzqVa8CcPXVV/dt\nePjhh9/5zncGyJkGAAAgAElEQVT2B/aLX/zi6fR88ODBAwcOdDqd/uHNN98M4DWvec3xGqwJ\nb3zjGwFccskl/cvZv3///fff/4IXvABApVI56elHG3nBUKjumA3WhEJ1x6NQ3TEbrAmF6o5H\nobpjNlgTzpjqzr+p2D5hGI49ncHBwbNlTBAEfRue97zn3X777UQE4KGHHjqdPn/rt37rLW95\ny1e+8pVn3eBZo7XuX874+PgVV1zRF1Or1Zqfn1/zzzq/KFRXqO7MU6iuUN2Zp1Ddea2689Wx\nOx779+9/17vetWXLliiKNm7c+La3ve2xxx47ZsuFhYXf+Z3fufjii+M4np6evvXWW/fu3dt/\ny3v/4Q9/+CUveUm5XN62bduf/MmfpGm6SgOUUn3ZxXHcf+Vb3/rWa17zmomJidHR0RtvvPE/\n//M/V2PDt7/97bvvvrt/eO211/793/89gK9+9atE5Jx7RoNbbrmFiPqOf5/+XP71119/mpcD\ngJn711Wr1XD8ET6mkaf50ecLher6FKo7kxSq61Oo7kxSqK7Pua66040tnnH6geKjabfbxpgr\n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", + "text/plain": [ + "plot without title" + ] + }, + "metadata": { + "image/png": { + "height": 420, + "width": 420 + }, + "text/plain": { + "height": 420, + "width": 420 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "fig1_combined <- ggarrange(ind_cts_mse_fpr, ind_cts_stab_fpr, ind_bin_ROC_fpr, ind_bin_stab_fpr, \n", + " toe_cts_mse_fpr, toe_cts_stab_fpr, toe_bin_ROC_fpr, toe_bin_stab_fpr, \n", + " block_cts_mse_fpr, block_cts_stab_fpr, block_bin_ROC_fpr, block_bin_stab_fpr, \n", + " nrow=3, ncol = 4, align = \"hv\", common.legend = T, legend = \"bottom\",\n", + " labels = \"AUTO\") \n", + "fig1_combined\n", + "\n", + "ggsave(\"../figures_combined/fig1_combined.png\", fig1_combined, dpi = 300, width = 8, height = 6)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Figure S1: MSE/AUC vs. Stability (evaludated by FNR)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "ind_cts_mse_fnr <- ggplot(ind_cts, aes(x=FN_mean/6, y=MSE_mean, color=method, size=Ratio)) + geom_point(alpha=0.8) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Independent', x='False Negative Rate', y='MSE') + ylim(0, 4) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "ind_cts_stab_fnr <- ggplot(ind_cts, aes(x=FN_mean/6, y=Stab, color=method, size=Ratio)) + geom_point(alpha=0.8) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Independent', x='False Negative Rate', y='Stability') + ylim(0, 1) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "toe_cts_mse_fnr <- ggplot(toe_cts, aes(x=FN_mean/6, y=MSE_mean, color=method, size=Ratio)) + geom_point(alpha=0.3) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Toeplitz', x='False Negative Rate', y='MSE') + ylim(0, 4) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "toe_cts_stab_fnr <- ggplot(toe_cts, aes(x=FN_mean/6, y=Stab, color=method, size=Ratio)) + geom_point(alpha=0.3) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Toeplitz', x='False Negative Rate', y='Stability') + ylim(0, 1) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "block_cts_mse_fnr <- ggplot(block_cts, aes(x=FN_mean/6, y=MSE_mean, color=method, size=Ratio)) + geom_point(alpha=0.3) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Block', x='False Negative Rate', y='MSE') + ylim(0, 4) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "block_cts_stab_fnr <- ggplot(block_cts, aes(x=FN_mean/6, y=Stab, color=method, size=Ratio)) + geom_point(alpha=0.3) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Block', x='False Negative Rate', y='Stability') + ylim(0, 1) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "# ggarrange(ind_cts_mse_fnr, ind_cts_stab_fnr, toe_cts_mse_fnr, toe_cts_stab_fnr, block_cts_mse_fnr, block_cts_stab_fnr, \n", + "# nrow=3, ncol = 2, align = \"hv\", labels = \"AUTO\", common.legend = T, legend = \"bottom\") " + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "ind_bin_ROC_fnr <- ggplot(ind_bin, aes(x=FN_mean/6, y=ROC_mean, color=method, size=Ratio)) + geom_point(alpha=0.8) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Independent', x='False Negative Rate', y='AUC') + ylim(0, 1) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "ind_bin_stab_fnr <- ggplot(ind_bin, aes(x=FN_mean/6, y=Stab, color=method, size=Ratio)) + geom_point(alpha=0.8) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Independent', x='False Negative Rate', y='Stability') + ylim(0, 1) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "\n", + "toe_bin_ROC_fnr <- ggplot(toe_bin, aes(x=FN_mean/6, y=ROC_mean, color=method, size=Ratio)) + geom_point(alpha=0.3) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Toeplitz', x='False Negative Rate', y='AUC') + ylim(0, 1) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "toe_bin_stab_fnr <- ggplot(toe_bin, aes(x=FN_mean/6, y=Stab, color=method, size=Ratio)) + geom_point(alpha=0.3) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Toeplitz', x='False Negative Rate', y='Stability') + ylim(0, 1) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "block_bin_ROC_fnr <- ggplot(block_bin, aes(x=FN_mean/6, y=ROC_mean, color=method, size=Ratio)) + geom_point(alpha=0.3) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Block', x='False Negative Rate', y='AUC') + ylim(0, 1) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "block_bin_stab_fnr <- ggplot(block_bin, aes(x=FN_mean/6, y=Stab, color=method, size=Ratio)) + geom_point(alpha=0.3) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Block', x='False Negative Rate', y='Stability') + ylim(0, 1) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "\n", + "# ggarrange(ind_bin_ROC_fnr, ind_bin_stab_fnr, toe_bin_ROC_fnr, toe_bin_stab_fnr, block_bin_ROC_fnr, block_bin_stab_fnr, \n", + "# nrow=3, ncol = 2, align = \"hv\", labels = \"AUTO\", common.legend = T, legend = \"bottom\") " + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 20 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 27 rows containing missing values (geom_point).”\n" + ] + }, + { + "data": { + "image/png": "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\n7FNTU3PiiSdefPHFybedtvhQju2NLxKOMQaAMwbAISIJnbe3yQCTDqz4M0WhYNuhXVqKw0R9\nfX1/H9XU1PzjH/946aWXPv74Y71/+YzRH3Upxjvjca4D4OWciOKOY5H0Hrml2PwlUH2wIsic\nDsU9+P7HFAOZMp988gmARx999KyzzgKwfv16AGedddacOXMA3HTTTffee+9hUmOvqanZvHnz\n3XffPWvWLACrVq36j//4j/fff/+CCy4YZsuhePVC++1NkU8KeDSsWT7Tn3DzhMgVlFBlmMDB\nOPVR7pUYCCQZpCkyTJ4lWc+1AAK5bCt9ygi4FVN0Zffu3a+//npVVdWUKVPOOeec6dMHEsOM\nx+Mvv/zy17/+9cWLFwO4/vrrf/rTn15xxRXp6d0M7pqamtNPP72HMtkQj+0BAdK2uub8M8aS\n5Sw7C5zILoYdMQbLHOrFpxgVrr322j63O46zffv29evXb9u27aGHHvrud7/b526jP+pSHJWM\n8bkuyUK/78clk14JtJ6RnnZ90RGTYuICOXOO1MnHOoMsxQJYuHBh8u37778P4JJLLkm+TTrP\nGhoaDke3VFW98sorp02blnxr27ZpmlIeegarI60ttc9tr31xe/3LinAtdrgF0exO051zXHYb\nMQmQwz0SgkFysjiZXRZnSTLNYbrD3Rb3Sdb3U7vjyHTp+I47/pA7maI3N9988y9+8QvHaa/k\nK4T45je/+bOf/ay//aurq2OxWGf9gLlz51qWVVlZOXfu3B67lZeXP//884ZhzJw585prriks\nLBzisT2wiBoVTaGeWTjU5UU3wWrHYd5UBYmxxa9//esBPv3BD35w1113/elPf+rPsBv9UZfi\n6GPsz3UHujqh6OYJQyp4neKIMJBhl5mZGYvFduzYsWjRosrKyvLycgAnnnhi8tOtW7cCKC4u\nPhzdysvLu/LKK5OvDcN46KGH/H5/Dx2p888/P1n9wrKsgQMUKhrfWF/x88rmdzx6drZvKmcK\ns+3KhGF72bbswMRwWkyxAHAyBdk29yZELjGVUfsPjJgimUIYKP6AiHy25ZROY/kpMdkR4777\n7ksmjuXk5JSWllZWVjY2Nj744IPFxcXf+c53+jykublZUZTOcChVVb1ebyAQ6LpPMBiMRCKK\noqxatcq27T/84Q+33nrrww8/PJRje4w6AhRgV1qmx+lZiKXTlJMgj+jiAzZNXpQK9B1PfPGL\nX7zrrrt27NjR3w6jPOpG+PJSjAHG/lw34pccrUVTORQdeYuhpfRKRpSBDLsZM2bU1NTce++9\nt99++89//nMAfr8/adhVV1cnM3qSS6WHCSJ66623nnzyyfz8/AcffNDn6+bn8Pl8yYebWCzW\nnzOPINfvfujNrT/06LlZ3rLO8IJ0RUkTdlTKfxXWXB3IiQubGBE4MU1QwmPXJESeKTKHnlHh\nkCywTN+pZ6RkuEeQ3//+9wBuueWWu+66S1EU27Zvv/32u++++7HHHutvsiOi3skrPcrf+f3+\np556yufzJfcsKytbsWLFhg0bNE0b9Ngeo44BnLFP8wq2+NJyTDOqKAwggDPWEWJHDuGACL5t\nwzT5tOMO6ftIcWRIytpp/WdijvKoG8alpBijjP25bnjX1xNpofIVGG0gG2YEpZeMbPPHOgMZ\ndt/61rfefPPN55577rnnnktuueyyy1RVDQQCEye2q073N+aGTzAYvOeeexoaGq666qozzjij\n9yh8/vnnky9eeumlzgXirjjSevXTVeX7Hs/wTFG617RhQJGuVSWMnektn+Q2zGjNDmlG8iOC\nIMZdTiMnK9EhUDcwNlGhZSozZvPjZh7Kpaboh9raWs75j370o6SWmKIod9xxx3333TdAqHtW\nVpZlWbFYzOPxAHAcJxqN9qj+yTn3+w88Ifp8vvz8/EAgMGvWrEGP7THq2t2zbvdzxVNu376p\nSngcsKS1l8yKtSRlKYqv07ALh8XpS5E1YBKXZVEoiFiMEnHmcjGvD35/qhrjkcK27dWrVwM4\n7rh+zfFRHnUjd3Epxgpjf67r3QFZsUu+/y9EIygoUs44G2kHERVqxxGthSsHZMEMDf24FENi\nIMNu2bJlyXhhwzAALFq0KJkem0RV1Z/97GdnnHHG4egWEf3oRz/KyspavXq151Drw7y786fl\nVU9keKfwvtJdXZwXalpFIvHa5D3ZhjsjrsfVzucVJpmmyTZyhCFyeh/bFYco07J8uXnuC5el\n3HUjy9lnn/3HP/5xy5YtnYGe27Zts237zDPP7O+QSZMmuVyuzZs3J0sFbNmyhXPeQ5OsvLz8\nqaee+uEPf5j0Acfj8aampokTJw7l2B4EbTvdcWoM83cTSxe0BS5qrK11exwwm4gRAXAJXqRr\nAECEcJCVlIql5/bdVjwud22XFbuoZj/V1zHOiHGQBBHLL2RFE3jpVD79eIyTcknji/7KhTmO\ns2fPnmQk8YoVK/o7fJRHXYqjj7E/1/WAGursxx5hPh8Ulepq7bZW5csrMOQkWdWPnLkIbAYR\nCk4e+mlTDIlBBD5uuummG264YevWrR6PZ+rUqZxzAB6P55lnnjn99NP7E38aPps2baqoqLjk\nkkt27drVubG4uLjHI8UAfFrz7Lu77sv09G3VJUlTxGRdr0L85Sm7b9i0gBgSygFftGSK7jRL\nplu83/V/iyjTtgvMuH7BxSwnd4h9SzEAL774YufrZcuWvfbaa5/5zGe+8Y1vTJ06taKiYvXq\n1V6vd+XKlf0d7vF4zj333Mceeyw7O5tz/utf/3rp0qUZGRkA3nzzTdM0L7roopkzZzY0NDzw\nwAPLly9XFOWZZ54pKipauHChEKK/Y/tjkd//XiLhEHSh3Dp7ob1VfL62KqC7QopqSfIrYqKu\nqQAMg6IRPm2G8tnPQ+8lkW5Zsnyjs3ED1ddB15mus9w8dPVRWybt2GZv/pjlFYgFi/iCRSkH\n3sjyj3/8Y+AdLrjggquuuqq/T0d51KU4Ohhfc10PZMUu5tLh8QKApsrtWynQzHLzhng4Yyj5\nLHLnQ+jw5A/9tCmGxODKbZqmzZs3r+sWt9v9pS996bB1CQD27t1LRD2qcV933XXLli0byuEJ\nq23DnjV+V6Hgg9z/slRF46yGh34zs/yifWVZhiusdkpRMGKK5rTY3NM7c4KILKJC20zLzNLP\nu4KXTRvipaUYmN6yiKFQ6Lbbbuu65cknnzznnHP6a+Gaa67hnP/kJz+RUi5ZsuSrX/1qcvu6\ndeui0ehFF12kadoDDzzwm9/85v777+ecz58/f9WqVUlxzv6O7Y/zszKa3e59CSMmpcmVm2ct\nfCsr7z+qK05qCxhceFXVZcTJsljxRHHGWWLBYqg9q5JQU6Pzlxdk5V7m9bH+lmiFAq/CvF5E\no/Zf/8y3bBbLLmH5h+ux6hjk3HP7dqNyzqdMmXLqqaf++7//+8DC46M56lIcHYyvua4HjMCI\nyDTBGFOUQyjNyTj8w6pCkqJfGPWSaehkiGrAra2tI9efQyEZAXDXXXd9//vfT275564H3tl5\nd7pnSp8zMQExRxokHSKbiIMRKOJIT9h16d7ppeH0iGoZot11x8lKiFxTZHU5nGxJLseeYJna\npMn6suW88LCkBh+bDKVux4oVKx577LFR6MwAJEfdj//nf1688GJTkgTi0rGJBJjOMDfc5m1p\n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\nilBdQkao6kaMYzcMqa2tveeee1J5xDVr1jzyyCP//Oc/U3lQm8OHDz/88MO33XZbry2H0Mhj\nAaG6hAjVDSpCdQkRqhtUhOoS0icj+Qjh5JNPBrBgwYKarjQ2NibfcfTo0QDuv//+ATRm3Lhx\n9tVzu93V1dX2xrvvvtveaJrmAB4rlmXLlgE4++yzo1vq6upqamoCgcAAHuXSSy8FcNxxx9lX\nuLq6etOmTVOmTAHg9XqPwMiRi1AdF6pLOUJ1XKgu5QjV8TRS3QgbsdM0rbArOTk5Q2hPIBC4\n6667htCA5cuXX3HFFW+88caA96woin2Fi4qKpk2bZovJ5/M1NjYO+LGGOUJ1cQjVpQChujiE\n6lKAUF0cI1R1I8yx64nq6upvfetb48aNczgcpaWlV1555e7duxO2bGpq+u53vzthwgSn0zl+\n/Pjrr7++srLS/ogxdu+9986ePdvj8UycOPHOO+8Mh8NJDrpgwQJVVR999NEvvvii+6fJe3vq\nqadmzZqVn59/9dVXr1+/vqKioqKiwg4d6Olc5s2b98QTTwBYtWpVNM7g448/XrNmjX0K1113\nHSHEdvxt7Ln800477QjOLg7OOQBZljMzM/trZPdD9/24wxmhOgjVpRyhOgjVpRyhOows1Q3M\n2OLgYw8Ud8fv9xuGMX36dPttRkaG/WL8+PGWZfFuA8Vf+tKXABBCiouLCSEAJk6c6PP5OOdL\nly6N7quqKoDTTz/d7iQOe6B42bJl3/72twFcdNFFvNtAcZLeHnroIfsjSimACRMmRHdMci73\n3Xff5MmTAYwdO/aWW27pfnbvvPOO3X7v3r2cc9M0s7KyADz44IP9Ojt7oPj4449vaGhoaGio\nr6/ftm3b1KlTAVx66aWc8/4a2f3QgyCQQUGoTqgu9QjVCdWlHqG6dFJdOsjuk08+sZW0bt06\nzvmbb75pf7Rjxw7e9Ys5ePCg/dE///lPzvmePXtycnI8Hs8//vGPtWvXxnaye/dup9MJ4Lnn\nnutuTFR29fX19nVfu3ZtrOyS9NbW1mYPbi9dutTv92/ZsiUaT2CaZvJz6T65Hnt2lmUVFxcD\nWLlyJef8o48+AiBJUm1tbb/OzpZddxYvXmzHW/TLyISHHihVDDZCdVyoLuUI1XGhupQjVMfT\nSHUjbCq2e2iny+WaM2eOaZrNzc3BYPD++++Pfv2xK6VtVFWVJAnA1Vdf/Y1vfOPjjz/esmWL\nz+c755xz3n33XQA5OTkvvvjiihUrHn74YVsc69atS2JPXl6evYxlxYoVnPPo9iS9ffrpp01N\nTYSQ+++/3+12T5ky5cc//nF0x76fS3copVdccQWA119/HYCthoULFxYUFBzZ2cVRXV1tjy33\ny8ieDj2CEKpLglDdICFUlwShukFCqC4JI0l1A+HrpwL7eWLRokXdP7Is68Ybb1QUBYDH45k/\nf759whs2bODdBopfe+212bNnx16XJUuW1NfXX3fddQmv9eLFi7sfMfo8wTkPBAK2Fz9r1ix7\nF9M0k/T2xz/+EUBubm60t08//TS6Y/JzSf48wTlfv349AE3TfD6ffcUee+wxznm/zs5+npgy\nZYr91jTN1atX22Pat99+e68XPM7IhIfu33c/dAjVcaG6lCNUx4XqUo5QHU8j1Y2wEbuEPPvs\ns3/4wx8IIW+99VZbW9uTTz6ZpPF55523fv36vXv3/uEPfzjnnHMopc8999wf//jH0tJSALNm\nzYr7DnpNaeNyuexlOxs3boxuTNJbUVERgObm5mgqwj179hzZuXRn9uzZEydO1HX9xRdfXL9+\nvaqqF110UXJ7eu1TkqSFCxfOmDEDwK5du/prZMJD9+ukhidCdVGE6lKGUF0UobqUIVQXZaSo\nLh0cO3u1iNvtnjlzJoAHH3ywp5ZPPvlkaWlpRUWF0+m84YYbXnnllUmTJgGor6+382tv2rRp\n69atAGpra+fPn19RUfH000/3asA111xjxzNGSdLbrFmzVFVljK1YsULX9d27d//kJz/p17kk\nT0595ZVXAvjRj35kWdbixYvt6M6jOTsbOyQbSSniAAAgAElEQVQzEAj018iEh+7jQYczQnWx\nCNWlBqG6WITqUoNQXSwjQ3V8hJBkoDgaWqgoSkZGhn2hAbz11lu861DqgQMHcnNzARBCxo4d\n63A4ADidzk2bNnHObddbUZSKigr7Ks+ePdvv93c/YuxAsc2rr74aveL2mp0kva1YscJuKcsy\nAK/XG90x+bl8//vfB0ApnT59un2U7skhd+zYEbXk+eefj27v+9nFDRTbnH766QBOOeWUXi94\ndyO7H7rPX/sQI1THhepSjlAdF6pLOUJ1PI1Ulw6y45w/8MADZWVlubm5l1xyyaFDh2655ZZl\ny5Y99NBDvNsXs3379q9//et2epjCwsKzzz77o48+sj8yDOOnP/3p1KlTnU7nxIkTf/jDH7a2\n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\nStnQBkQFKXa2owHX7XOd9b73XBRv8LxAnlGOck7Hug6Y7cQ47/iZzTQ9+QT19oIIQQ7d3aQc\nrlXltu2n5rN4iXAc6uu3P/lfKOSZmUBoNuiS7ecC6TwDID56ibQW8eCDD771rW/9v+/4nT/8\n77e/iMu52Ujy8hH8S0+4xXdXUFaKVDsHp6P50XlM+G63OEFVbKpb+TTXP5NDmDPeImNmplZc\n95r5Db9Qym1gWMsGYAEhpOcInxg8O0MDg0zA6EGUu19ACa01XKtTd/d53CnlmWeeefDBB//5\nn//5hz/8oTGmc/Dyyy+/5ZZb/umf/mlsbOzuu+/+0z/90zM/sM6s+9P/47994NWvaoInjYEx\nXdrERJHnlaXMJ3FXqeQKgUKR1q2j/kGenxVbt9MptcdkRm0P0gZg4XWhtG2Fcxr70Z6E8JDM\nYug1F7vKrmF0Zt0999zzR3/0R6fpV8y1nnty9Kv9xSuJqNYePTj3I98tpVlTm6gWHUp0I85q\nodebUjgXjTmUGh2DNYRgq8GwMGADOIYTcAYmgImIoYgtk8YCLVvYuO0UwXZycwAW1EHMnW3Z\nTsYPAIh4sTwWbC3JTnWFXaycBZBRQLAAJuW2lI7kw320pE2fCt6SIC/AvXbfc/4b5sW6Qddt\nGzPsuy1jAyFeUSpa5j7XuSofAtjVit7S233ZGUzaneOxrjPreG7WPvYT9PWRlHZyknc+hTRG\nb5/I5ZHPi6uuoYFzSOHBzYbZtRN799All8rLLjsdnbvPTZyjGbszB2ZTnZns0iVn/Yqsjiyr\nidlkal/Vreack5nS5dMgP95q5BG44dJJTJT5yNXt5HP/3958lvf7iRSBGMay6clvc2WY8/PB\nricpZdp2Cb2gfrVCUrmMdsv++Efi6mtOLWM4F3DJJZfs2bNn6eXw8PCtt9767ne/++qrrwZw\n++23X3PNNTt37jx7AwQ8L3PdJE1JSENUlY4lKKKI2ZPCBjk4jm02xcQEcnnoo2p0Tgk6BhFC\nLmxjMa8wQ5kBASGO3+q6iIs4FuXcxpHuV041nu7KbSgGQ32FS+fa+0q5dQyUw03MJjXtRDem\n6k8Vne5qe58jQ2trsCkzBHmKlLUZhGADgjIwBAkGyDJZwkI/sqOVdcs3ZRf+v0DoaGm+MsEC\ncsFcb5HudZJ9DAewtOB4l/rcWE7sUoRF1Lqz/Yedl1lQU/aWzViNBi2YiAzDFyKxlsEFKZ9q\n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\njzzyuc997o//+I/HMeA0TdfW1rZv334x256NA/esDcJwPksI3Nfad853LnCu0F4tidOgylJx\nlon5BUxM0PFwMQc+QHb/PpEmtH3nZbNi3+L58+1vf/vCK7zlLW9597vffb5nf/JX3RbXAFfd\nWHcCXl7iYyucZehviOeTw+2YC+bgApUWRGg0ihKDdeg6RstQIfwmQMcrw+hMVXcCoQCQ2LHD\nseOjRxCEEISiQJKIO+66in4EL53nTtfwPO/lL3/5qUvCMPylX/qlH9spAcAPf/jDxcXFd7zj\nHXv37j2xcNu2bRd5S5EU64c6D25r3cHA3iTdn2bz51Z1EEIba9ZN2VbKFzSyLmf2j2s7CZLC\nFdaTZrWu2glLn/jsoJ0DSuZAilAIyYXzduVOVD3KXMjedUbNK3PEG/2XEIFn962r4XrD9V1v\nSuykQrtRsFBERjnGIBc29nThVUulxwfJmUMhqlKeOGYghE/oGVOloJetB7pOdNqXhJSCPSWi\nrjXn+VXkAXC2LeJgMPijP/qjU5f84z/+48///M+fc/Moit70pjf9/d///cTEhBDib//2b++5\n555mswngP//zP4uieOtb33rLLbesrq7ed99973znO5VSn//85+fn5++66y4p5fm2PR/SWknk\nmDva31etN4ucQZEtPcvK5KXvG6kmBr3Q92lunhpNnGJYQ0Lw+rpY2M7drgPE7j0X5WxXlpyl\nKM3mp6w0tKIw+mnobP3j401vetM5lwshdu3a9drXvvbXfu3XLjBp8BO+6ra4Nri6xrrTsA5a\ni0oF03M0PXORG+1PsyeT5Dv94RuajZdVK9Nn27Iehx1IQPogcVou3UXhB2LP9dyeRJbAOvg+\n6o0LeOyxRRlD6GsqR/k5qmIvZhe9Xu8yncxJ9u/fz8z33XffqQt/8zd/8+1vf/vFbD7MViKv\nCdCRLH88TrafPwNAyErpUokaAb4Qgii2dmCdT3R8WlYY5yy8CmVKRgNjNUEd11kMGLBhVKUI\nhCBAcOZEXQtZFeqIKUBCiaA0caAqoRsJb45olzG9jfCmRLeOleUdUh6UVCmQehpswDHsGmgG\nspaDfKKqlGdPH1elSK23khzVujUVTpz+kgSMPbmyFGRPy5y4vLhyM/sBgFCQ3ovfdfS9732v\nEOLP//zPnXOvetWrfuM3fmO8/Bvf+EYcx29961s9z7vvvvv+7u/+7i/+4i+EEHfccceHPvSh\n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\n8/vf//673vUuIcQvfvGLH/3oRzNnzgSwZMmSPn+DQ5a0CYfDftrOs2y/FUQAACAASURBVM8+\nW9g4RG9Tp04F0NnZWShFuGPHjiMbS3+WLl06b968bDb70EMPbd68ORAIvO997xvankP2KaU8\n55xzFi1aBOC11147XCMHPPVhDWp8olVXQKuuZGjVFdCqKxladQUmiuomg2PnZ4tEIpHFixcD\nuPPOOwdr+bOf/WzmzJnz588PhUJXXnnlI488cswxxwBobW3162tv2bLlhRdeANDS0nL66afP\nnz///vvvP6QBl112mR/PWGCI3pYsWRIIBJRSa9asyWaz27dvv+GGGw5rLEMXp7744osBfPGL\nX/Q8b+XKlX505xsZnY8fkplMJg/XyAFPPcyTjme06orRqisNWnXFaNWVBq26YiaG6niCMMRE\ncSG00DTNsrIy/0IDeOKJJ7j3VOqePXuqq6sBENHs2bODwSCAUCi0ZcsWZvZdb9M058+f71/l\npUuXJhKJ/mcsnij2Wbt2beGK+zk7Q/S2Zs0av6VhGABisVjhwKHH8oUvfAGAEOLkk0/2z9K/\nOOTLL79csOSXv/xlYfvwR9dnotjn7LPPBnDGGWcc8oL3N7L/qYf9Zx9jtOpYq67kaNWxVl3J\n0arjSaS6ySA7Zv7e9743d+7c6urqD3zgA3v37v3sZz976aWX3nXXXdzvD/Piiy/+x3/8h18e\npq6u7txzz3366af9XY7jfPWrXz3xxBNDodC8efOuv/767u7uAU/XX3bM7BezKchuiN6UUjfd\ndNP8+fMrKirOP//8wmytf+AQY2lsbDzzzDODweD06dMHkx0z+7EI4XC4WFXDH92Aslu9ejUA\ny7K2bdt2uEb2P/WA5x2HaNWxVl3J0apjrbqSo1XHk0h1xJMiCGACkUwm/YnWefPmhcNhAA8/\n/PD73//+urq65ubmsbZOMznRqtOUHq06TenRqsPkSJ6YWHR3dy9atOjkk0++8sorW1paXnrp\nJb86+dvf/vaxNk0zadGq05QerTpN6dGqA6Bn7MaAW2655dprr81ms4UtS5Yseeyxx2pqasbQ\nKs3kRqtOU3q06jSlR6tOO3Zjw759+/7yl7/s27evvLx8wYIFb3vb28baIs3kR6tOU3q06jSl\n502uOu3YaTQajUaj0UwSdIydRqPRaDQazSRBO3YajUaj0Wg0kwTt2Gk0Go1Go9FMErRjp9Fo\nNBqNRjNJ0I6dRqPRaDQazSRBO3YajUaj0Wg0kwTt2Gk0Go1Go9FMErRjp9FoNBqNRjNJ0I6d\nRqPRaDQazSRBO3YajUaj0Wg0kwTt2Gk0Go1Go9FMErRjp9FoNBqNRjNJ0I6dRqPRaDQazSRB\nO3YajUaj0Wg0kwTt2Gk0Go1Go9FMErRjp9FoNBqNRjNJ0I6dRqPRaDQazSShl2N37bXXEhER\nhUKhsTJoQvOzn/2M+hGJRE466aQbbrghk8kUWl544YX+3t27d4+gAQsWLPDP6HneCHY7hmzb\ntq1wJX/zm9+MtTnjEa26EeHxxx8vXL2NGzf22Xv11VcX9l5zzTVjYuG4QqvuDbJjx47CdXvg\ngQfG2pyJgVbdMDHG2oBJxebNm/tvTKVSW7du3bp165YtWx555JHiltXV1XPmzBmps8fj8Vde\neQXA4sWLpZQj1a1mnKNVN9p861vfuuOOO/zXH//4x7/5zW+OrT3jAa06TenRqhsm2rEbSQqy\nW716dVVVFYB0Or1hw4annnoKwO9+97v9+/fX19e3trbu2bMHwFve8pYRPPuzzz6rlBrxbjXj\nHK26UeWBBx74whe+4L++4IILfvjDH46tPeMErTpN6dGqGybasRsxHMf5v//7PwCWZd16662m\naRZ2nXDCCdu2bQPQ2tpaX19fUOfI6qN/t7Ztt7a2AiCi+vr6ETyXZpygVTeqrFu37rLLLmNm\nAO94xzseeOABIXRcsladZgzQqhs++ktqxHj++eez2SyAE088sVhznud1dXUBKC8vP+aYYzCQ\nPgAw83333bdixYq6urpoNLpo0aKvfvWrqVSq+BTd3d1f/vKXTzrppEgkUldX9453vKN4arpP\nt4lE4p3vfOeMGTPmzJmzbt26URq1ZmzRqhs9tmzZ8v73v99xHACnnnrqww8/HAgExtqocYFW\nnab0aNUdBlxEYcUhGAyy5jD5/ve/71+9VatWFTYeOHDg05/+tL/929/+tr/x3e9+t79l//79\n/pbOzs7ly5f3/+uccsopjuP4bV577bVZs2b1aSClXL9+vd9g7ty5ACorK5VS3d3dp59+OoBQ\nKPToo4+W8DKMMC+88EJhsL/+9a/H2pxxh1bdSPHYY48VBrhhw4bdu3dPmzbNf3v88ce3t7eP\ntYHjCK26N8727dsLQ7v//vvH2pwJgFbd8NGO3YjxsY99rL9uCqxZs6bQsra2FsD06dP9t0qp\ngub+7d/+7Re/+MWdd97pBxAAuOeee/w2/l2CYRhr1qx55JFH/uu//stvsHz5cmZua2vz377j\nHe/o6OjwG1dUVPzjH/8Yk6sxUmjHbmi06kaKYsfu0UcfPe644/zXc+fObWxsHGvrxhdadW8c\n7dgdLlp1w0c7diPGiSeeOJjmhBC//e1v/WZ+UCeA888/39/yy1/+0t/yyU9+stBbIUb7yiuv\nZOaf/OQn/ts77rij0KaiogLA1KlTmfmPf/yj3+ATn/jEokWLAEybNu35558v3fhHB+3YDY1W\n3UhR7NhNnTq18Pr2228fa9PGHVp1bxzt2B0uWnXDRydPjAypVOrFF18EEAqFCp5+JpN55pln\nnnrqKaXUxRdffODAgVgs1n/5/8tf/jKA6urq//mf/yl0eMIJJ/gvLMtSSn3xi18EMGvWrNWr\nVxfavPzyy67r+nnXhW7vvfdePyrosssuG+KToJkEaNWNEs3NzYXX11133YoVK+bPnz+G9owr\ntOo0pUer7rDQjt3I8K9//cuvWLh48eKvfe1rxbvOPvvsv/3tb5lM5rnnnjvrrLP6yK65ufnV\nV18F8Pa3vz0WixWOev311/0XJ5544saNG5uamgCcf/75xUl5dXV1hdeFbn3NAXjggQe+/vWv\nE9EID1UzbtCqGz0aGhq6u7vb29sTicQHPvCBTZs2RaPRsTZqXKBVpyk9WnWHhc6KHRkKf/Ul\nS5b02RWPx/0X06dPL265dOlSAIWlRj8ws8BDDz0EgIjOPPNMP5EbQENDQ6FBNpvt7u7u7u72\n5f7Pf/7T3/7hD3942bJlAPbs2fPXv/51hMZXCn7/+99fmKe4hrhmMLTqRolZs2b95S9/ue++\n+/xv7Zdeemno+J43FVp1mtKjVXdYaMduZBhMdlu2bHnuuecATJ8+/aijjmLmZ599FsBRRx1V\nWVkJIJ1O+y39ktY+a9eu/d3vfgfgoosuOvbYY13X9bf39PT4L9Lp9OLFiysqKo499ljbthsb\nG/0bjuXLl993330XXnih3+ynP/3pKI13NHj11Vd/nacwZM0QaNWNEj/5yU9mz579rne9q7Do\n89BDD91yyy1ja9U4QatOU3q06g4LvRQ7MhRk9/e//33Xrl0AlFJ79+59+OGHmRnArbfeCuDV\nV1/t7u5G0fL/kiVLpJSe561du/b6668//fTTn3zyydtuu83zvFgs9tWvfhXAKaec4je+/fbb\n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\no0eP0aNH+7ZmANixY0dKSsrMmTN9/r/RYrGsXbu2a9eut99+u2ujXq9vil60Khh19cKo8zmM\nunph1PkcRl29WlXUtd577BqkQ4cOHTp0cL38448/Pv74444dO955550+P9aRI0fOnz9/2223\nVZsc3ngXL1587733EhISmqLZp06dSklJSU5ObteunW9rzs7OXrt2bUxMTFM0uzXDqKsXRp3P\nYdTVC6PO5zDq6tWqoq6VPisWIYQQQgg1FCZ2CCGEEEJ+wk/usUMIIYQQQjhihxBCCCHkJzCx\nQwghhBDyE5jYIYQQQgj5CUzskKcOHjzodDpbuhXonwWjDjU/jDrU/HwYdW1y8oQsy5s2bTpw\n4IAkSQMGDJg2bVrNVarrKuN+X09qrqysfP/990+ePFlWVpaYmHjfffclJCQAwBdffPHxxx+7\nirEsu23btoY2u65KGtnsX3755dVXX612rGHDhj3++OP1NluRm5s7c+bMjRs3Go3Gmu96d7bb\nQoOiaAAAIABJREFUFow6jLrmh1GHUdf8MOraetS1yQWKN23atHfv3ocffpjjuNWrV4uiOHPm\nTA/LuN/Xk5oXL15cUlIyc+ZMo9G4bdu25557buXKlYGBgVlZWf369bv11luVYoRUf+qlJ5XX\nVUkjm52UlPTiiy+6XoqiuGLFin79+rk5osvFixd//fXXvXv3uvkO4N3Zblsw6jDqmh9GHUZd\n88Ooa/NR1/QPmvMxm8121113HTx4UHl59OjR8ePHl5aWelLG/b6e1JyZmXnbbbedOXNGeSmK\n4uTJk3ft2kUpnTdv3tdff92YZtdVSeObXc2WLVtWrFjh5ohVHT58ePXq1UuWLLntttvKyso8\n75oXDWu1MOow6pofRh1GXfPDqPODqGt799hlZmbabLbevXsrL3v16iUIwuXLlz0p435fT2rm\neX7SpEmJiYnKS1EUnU6nLMvK7idPnpw+ffrkyZNffvnlnJychja7rkoa3+yqcnNzd+/e/eCD\nD7o5YlXXXXfdQw895OZhJt6d7bYFow6jrvlh1GHUNT+MOj+IuraX2BUWFnIcp9frlZc8z+v1\n+qKiIk/KuN/Xk5rDwsImTZqkUqkAwOFwLF++3Gg0Dhw40GKxVFRUcBw3d+7cp59+2mq1Pvvs\ns3a7vUHNrquSxje7qrfffnvixIkajcbNEev9FBp/ttsWjDqMuuaHUYdR1/ww6vwg6trePXaU\n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\nYWFhP//886ZNmxraeEEQBg0aFBsbe+rUqY8//njVqlXr1q3zZMeffvrJYDA09HB10ev1+/fv\nv3jxYoP2qhYkHoYWQqhlYWKHkP9IT0/ftWvXihUrEhISHn/88a5du27YsKFamVWrVrVv337F\nihVN0YDjx4/fc889jz322NKlS2fOnDllypRLly41pkJPepSamjp06NBufwkICPC8/q1btxqN\nRrVa7b4YISQ4OHjbtm2SJDWo/YcPH87JyXnrrbfatWs3ePDg2bNnb9++vd69nE7n77//7vWc\niZpYltVqtceOHfOwfM0g8eSDQAi1BpjYIdSSLl++vHDhwvnz5589e7bxtaWkpMTExERHRysv\nb7rpppSUlGplBg4cuGbNmnHjxjX+cNVYrdZFixZdvnw5Li4uMjIyISEhJSXlxRdfbMxaG/X2\nyGazZWdnP/fccwEBAYmJiatWrWpQ/YcOHfJwGoFerz927NiZM2caVH94ePjq1atdF3mLi4vd\nDw0qioqK/vzzz7oeGuEdnufz8vI8LFwzSDwJLYRQa4CJHUIt6YUXXvj888+3bds2f/78xi82\nlpOTExIS4noZEhKSm5tbrUyvXr1GjhwZHx/fyGPVdPz48d9++y0oKKhqA3bv3p2WluZ1nfX2\nKC0tjWGYkSNHnj179pVXXnn66ae//PJLDyu32+3FxcX1DtcpCCFqtTorK8vzxgNAYmLijBkz\nlJ9//PHHDz/80PXSjeLiYkIIw/jy9zPHcUVFRR4WrhkknoQWQqg1wHXsEGoxlNKsrCyTycSy\nbElJicPhaOTN8rIsE0KqbhEEoXFtbIDy8vJqw1EMwzAM05hFUurtUY8ePZxOp3LciRMnHjx4\ncMOGDf/61788qdxut58/f75Dhw4eNoYQYrPZPCxclc1me+6559auXfvuu++OHTu23vKVlZW+\nzeoAgGEYq9Xq9e4tG1oIIc/hiB1CLYYQMmrUqMzMzCtXrgwaNKjxUyDDw8OLi4tdL4uLiyMj\nIxtZp+fi4+OdTqcoiq4tDocjMTExLi7O6zo96VHVbDIpKSknJ8fDys1mc5cuXao22D1RFIOD\ngz0s7HLhwoU+ffocP378yJEjkyZN8mSXwMBASZJ8u8ioKIpVh9waqmVDCyHkOUzsEGpJTz31\n1K5du7755psXX3yx8bX16tUrPT09Pz9feXn48OFevXo1vloPJSUlPfDAA1lZWXa7XVndNzs7\n+8477/QiGXKpt0dffvnlPffc43p58eLFjh07elg5wzBdunTxcBBOFEVBELp06eJh5Qqn0zl6\n9OhRo0b98MMP3bp183Cv4ODgTp06NXSihnuiKFa9St5QLRtaCCHPYWKHUEsihPTq1atv374+\nufQWFxc3fPjwZ/6/vbsLZS8O4wBuXlJLdJi3LLVzsRtW7MLKdjXbldJK0ZQLNRKRhdZ2JRdI\n7pSEUkQjFy6WKxfu1MoiUiOvezG22RnTtsP0v1CSl+0wh9n/+7ncdp7znHbz9Ht+5/cYDIFA\nwGg07u3tNTU1paSkrK6uWiyW+OPHpNfrtVotQRDHx8eFhYWDg4NtbW3xBIz5RBKJZHl5eXh4\n2Ol0mkym6enpjo4O5vHlcrnf72eyNkZRlEql+uwylclk8ng8Go3m8PDQarVarVabzRbzquzs\n7Nzc3FAo9Kl7RRcKhUiS/PLlH/0RAJBosMcOIKksLi62tLSUlpYKBIK1tbWn1TK9Xq9SqcRi\nMdt353K5PT093d3dfr+fIIhviRn9iUpKStbX13U63dDQkEAgmJ2dra6uZh68rq7OaDQeHBxE\nX80Kh8M+n0+j0Xw2+d3dXYqiRCLR8ycKhSLmWcEcDkcqle7v73/XUXahUEgoFFZVVcUT5N0/\nAgASDWbFArAFs2IZ+t1Zsdvb2319fW63Oycn592raJq22+06na6rq+vdH7AxK3Zzc7O+vp4k\nyW9ZynW73bW1tWNjY8+fYFYsQLJCKxYA/msVFRUDAwPFxcUXFxc0Tb/86vHx8fr6+uzsrLe3\nt7Oz8yezkkgkSqXS5/PFH+rh4YGiqIaGhvhDAUDiQ2EHAP87mUw2MzPT2NiYmZl5enrqdDpd\nLpfNZjs6OqqsrFxaWtJqtd9+/kh0qampra2tPp+P+Uu7H/F6vWq1Os4+LAD8FWjFArAFrViG\nfrcV+5LH4zGbzS6XKxwO5+fni0QioVD46vy2t9hoxT7p7+9fWVnh8/kxc/jIzc1NQUHB5OTk\nqzcn0IoFSFYo7ADYgsKOocQp7L6GvcIuEAi0t7ebzeaioqIvRAsGg3a7fWFhQS6Xv/oKhR1A\nskIrFgAgQWVlZY2MjJSXlzscjs9OnLu9vbXb7aOjo2+rOgBIYijsAAASF5/Pn5qaqqmpOT8/\nZ3iWciQSuby85PF48/Pzzc3NbGcIAAkFhR0AQELj8Xjj4+MGg4EgCIfDcXd399EWGpqmvV7v\nycmJUqmcmJhQKBQ/nCoA/DrssQNgC/bYMYQ9ds+iZ3h1dTU3N7exsWGxWLhcbkZGRnp6OofD\niUQi9/f3T7MlysrK1Gq1TCb7sZwBIKGgsANgCwo7hlDYPWOSYSQS2dnZ2dra8ng8Xq83GAzm\n5eXxeDySJKVSKcOBHyjsAJIVRooBAPwlaWlpYrH4BwbEAcBfhD12AAAAAEkChR0AAABAkvgH\naURyYlUo94oAAAAASUVORK5CYII=", + "text/plain": [ + "plot without title" + ] + }, + "metadata": { + "image/png": { + "height": 420, + "width": 420 + }, + "text/plain": { + "height": 420, + "width": 420 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "figS1_combined <- ggarrange(ind_cts_mse_fnr, ind_cts_stab_fnr, ind_bin_ROC_fnr, ind_bin_stab_fnr, \n", + " toe_cts_mse_fnr, toe_cts_stab_fnr, toe_bin_ROC_fnr, toe_bin_stab_fnr, \n", + " block_cts_mse_fnr, block_cts_stab_fnr, block_bin_ROC_fnr, block_bin_stab_fnr, \n", + " nrow=3, ncol = 4, align = \"hv\", labels = \"AUTO\", common.legend = T, legend = \"bottom\") \n", + "figS1_combined\n", + "\n", + "ggsave(\"../figures_combined/figS1_combined.png\", figS1_combined, dpi = 300, width = 8, height = 6)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Figure 2: best method chosen by Stability" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "toe5_cts_stab <- ggplot(toe_cts_sub5, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Toeplitz Correlation 0.5\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\", \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both)\n", + "\n", + "toe9_cts_stab <- ggplot(toe_cts_sub9, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Toeplitz Correlation 0.9\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0,1) \n", + "\n", + "block5_cts_stab <- ggplot(block_cts_sub5, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Block Correlation 0.5\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1) \n", + "\n", + "block1_cts_stab <- ggplot(block_cts_sub1, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Block Correlation 0.1\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1)\n", + "\n", + "# ggarrange(toe5_cts_stab, toe9_cts_stab, block5_cts_stab, block1_cts_stab, \n", + "# nrow=2, ncol = 2, labels = \"AUTO\", common.legend = T, legend = \"bottom\") " + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "toe5_bin_stab <- ggplot(toe_bin_sub5, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Toeplitz Correlation 0.5 (Binary)\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\", \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1)\n", + "\n", + "toe9_bin_stab <- ggplot(toe_bin_sub9, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Toeplitz Correlation 0.9 (Binary)\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0,1) \n", + "\n", + "block5_bin_stab <- ggplot(block_bin_sub5, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Block Correlation 0.5 (Binary)\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1) \n", + "\n", + "block1_bin_stab <- ggplot(block_bin_sub1, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Block Correlation 0.1 (Binary)\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1)\n", + "\n", + "# ggarrange(toe5_bin_stab, toe9_bin_stab, block5_bin_stab, block1_bin_stab, \n", + "# nrow=2, ncol = 2, labels = \"AUTO\", common.legend = T, legend = \"bottom\") \n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_bar).”\n", + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_bar).”\n", + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_bar).”\n", + "Warning message:\n", + "“Removed 11 rows containing missing values (geom_bar).”\n" + ] + } + ], + "source": [ + "fig2_combined <- ggarrange(toe5_cts_stab + rremove(\"x.title\"), toe9_cts_stab + rremove(\"x.title\"), \n", + " block5_cts_stab + rremove(\"x.title\"), block1_cts_stab + rremove(\"x.title\"), \n", + " toe5_bin_stab + rremove(\"x.title\"), toe9_bin_stab + rremove(\"x.title\"), \n", + " block5_bin_stab, block1_bin_stab, \n", + " nrow=4, ncol = 2, labels = \"AUTO\", common.legend = T, legend = \"bottom\") \n", + "\n", + "ggsave(\"../figures_combined/fig2_combined.png\", fig2_combined, dpi = 300, width = 6.5, height = 8)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Figure S2: best method chosen by Stability in easy Toeplitz correlations" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "toe1_cts_stab <- ggplot(toe_cts_sub1, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Toeplitz Correlation 0.1\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\", \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both)\n", + "\n", + "toe3_cts_stab <- ggplot(toe_cts_sub3, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Toeplitz Correlation 0.3\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.3, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\", \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both)\n", + "\n", + "toe5_cts_stab <- ggplot(toe_cts_sub5, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Toeplitz Correlation 0.5\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\", \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both)\n", + "\n", + "toe7_cts_stab <- ggplot(toe_cts_sub7, aes(fill=method, y=Stab, x=N)) + ylim(0, 1) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Toeplitz Correlation 0.7\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\", \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both)\n", + "\n", + "# ggarrange(toe1_cts_stab, toe3_cts_stab, toe5_cts_stab, toe7_cts_stab, \n", + "# nrow=2, ncol = 2, labels = \"AUTO\", common.legend = T, legend = \"bottom\") " + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "toe1_bin_stab <- ggplot(toe_bin_sub1, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Toeplitz Correlation 0.1 (Binary)\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\", \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1)\n", + "\n", + "toe3_bin_stab <- ggplot(toe_bin_sub3, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Toeplitz Correlation 0.3 (Binary)\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.3, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\", \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1)\n", + "\n", + "toe5_bin_stab <- ggplot(toe_bin_sub5, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Toeplitz Correlation 0.5 (Binary)\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\", \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1)\n", + "\n", + "toe7_bin_stab <- ggplot(toe_bin_sub7, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Toeplitz Correlation 0.7 (Binary)\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\", \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1)\n", + "\n", + "# ggarrange(toe1_bin_stab, toe3_bin_stab, toe5_bin_stab, toe7_bin_stab, \n", + "# nrow=2, ncol = 2, labels = \"AUTO\", common.legend = T, legend = \"bottom\")" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_bar).”\n", + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_bar).”\n", + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_bar).”\n", + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_bar).”\n" + ] + } + ], + "source": [ + "figS2_combined <- ggarrange(toe1_cts_stab + rremove(\"x.title\"), toe3_cts_stab + rremove(\"x.title\"), \n", + " toe5_cts_stab + rremove(\"x.title\"), toe7_cts_stab + rremove(\"x.title\"), \n", + " toe1_bin_stab + rremove(\"x.title\"), toe3_bin_stab + rremove(\"x.title\"), \n", + " toe5_bin_stab, toe7_bin_stab, \n", + " nrow=4, ncol = 2, labels = \"AUTO\", common.legend = T, legend = \"bottom\") \n", + "ggsave(\"../figures_combined/figS2_combined.png\", figS2_combined, dpi = 300, width = 6.5, height = 8)\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Figure S3: best method chosen by Stability in easy Block correlations" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "block3_cts_stab <- ggplot(block_cts_sub3, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Block Correlation 0.3\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1) \n", + "\n", + "block5_cts_stab <- ggplot(block_cts_sub5, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Block Correlation 0.5\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1) \n", + "\n", + "block7_cts_stab <- ggplot(block_cts_sub7, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Block Correlation 0.7\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1)\n", + "\n", + "block9_cts_stab <- ggplot(block_cts_sub9, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Block Correlation 0.9\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1) \n", + "\n", + "# ggarrange(block9_cts_stab, block7_cts_stab, block5_cts_stab, block3_cts_stab, \n", + "# nrow=2, ncol = 2, labels = \"AUTO\", common.legend = T, legend = \"bottom\")" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "block3_bin_stab <- ggplot(block_bin_sub3, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Block Correlation 0.3 (Binary)\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1) \n", + "\n", + "block5_bin_stab <- ggplot(block_bin_sub5, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Block Correlation 0.5 (Binary)\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1) \n", + "\n", + "block7_bin_stab <- ggplot(block_bin_sub7, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Block Correlation 0.7 (Binary)\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1) \n", + "\n", + "block9_bin_stab <- ggplot(block_bin_sub9, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Block Correlation 0.9 (Binary)\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1) \n", + "\n", + "# ggarrange(block9_bin_stab, block7_bin_stab, block5_bin_stab, block3_bin_stab, \n", + "# nrow=2, ncol = 2, labels = \"AUTO\", common.legend = T, legend = \"bottom\") " + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_bar).”\n", + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_bar).”\n", + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_bar).”\n", + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_bar).”\n" + ] + } + ], + "source": [ + "figS3_combined <- ggarrange(block9_cts_stab + rremove(\"x.title\"), block7_cts_stab + rremove(\"x.title\"), \n", + " block5_cts_stab + rremove(\"x.title\"), block3_cts_stab + rremove(\"x.title\"), \n", + " block9_bin_stab + rremove(\"x.title\"), block7_bin_stab + rremove(\"x.title\"), \n", + " block5_bin_stab, block3_bin_stab, \n", + " nrow=4, ncol = 2, labels = \"AUTO\", common.legend = T, legend = \"bottom\") \n", + "ggsave(\"../figures_combined/figS3_combined.png\", figS3_combined, dpi = 300, width = 6.5, height = 8)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Figure 3: best method based on MSE/AUC" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "toe9_cts_mse <- ggplot(toe_cts_sub9, aes(fill=method, y=MSE_mean, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Toeplitz 0.9\") + xlab('') + ylab(\"MSE\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1)\n", + "\n", + "block1_cts_mse <- ggplot(block_cts_sub1, aes(fill=method, y=MSE_mean, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " xlab('') + ggtitle(\"Block 0.1\") + ylab(\"MSE\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1) \n", + "\n", + "toe9_cts_FNR <- ggplot(toe_cts_sub9, aes(fill=method, y=FN_mean/6, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " xlab('') + ylab(\"FNR\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) \n", + "\n", + "block1_cts_FNR <- ggplot(block_cts_sub1, aes(fill=method, y=FN_mean/6, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " xlab('') + ylab(\"FNR\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) \n", + "\n", + "toe9_cts_FPR <- ggplot(toe_cts_sub9, aes(fill=method, y=FP_mean/num_select, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " xlab(\"Number of Samples\") + ylab(\"FPR\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) \n", + "\n", + "block1_cts_FPR <- ggplot(block_cts_sub1, aes(fill=method, y=FP_mean/num_select, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " xlab(\"Number of Samples\") + ylab(\"FPR\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both)\n", + "\n", + "# ggarrange(toe9_cts_mse, block1_cts_mse, toe9_cts_FNR, block1_cts_FNR, toe9_cts_FPR, block1_cts_FPR, \n", + "# nrow=3, ncol = 2, labels = \"AUTO\", common.legend = T, legend = \"bottom\") " + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "toe9_bin_ROC <- ggplot(toe_bin_sub9, aes(fill=method, y=ROC_mean, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Toeplitz 0.9 (Binary)\") + xlab('') + ylab(\"AUC\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1)\n", + "\n", + "block1_bin_ROC <- ggplot(block_bin_sub1, aes(fill=method, y=ROC_mean, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " xlab('') + ggtitle(\"Block 0.1 (Binary)\") + ylab(\"AUC\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1) \n", + "\n", + "toe9_bin_FNR <- ggplot(toe_bin_sub9, aes(fill=method, y=FN_mean/6, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " xlab('') + ylab(\"FNR\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) \n", + "\n", + "block1_bin_FNR <- ggplot(block_bin_sub1, aes(fill=method, y=FN_mean/6, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " xlab('') + ylab(\"FNR\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) \n", + "\n", + "toe9_bin_FPR <- ggplot(toe_bin_sub9, aes(fill=method, y=FP_mean/num_select, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " xlab(\"Number of Samples\") + ylab(\"FPR\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) \n", + "\n", + "block1_bin_FPR <- ggplot(block_bin_sub1, aes(fill=method, y=FP_mean/num_select, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " xlab(\"Number of Samples\") + ylab(\"FPR\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both)\n", + "\n", + "# ggarrange(toe9_bin_ROC, block1_bin_ROC, toe9_bin_FNR, block1_bin_FNR, toe9_bin_FPR, block1_bin_FPR, \n", + "# nrow=3, ncol = 2, labels = \"AUTO\", common.legend = T, legend = \"bottom\")" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message:\n", + "“Removed 1 rows containing missing values (geom_bar).”\n", + "Warning message:\n", + "“Removed 1 rows containing missing values (geom_bar).”\n", + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_bar).”\n", + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_bar).”\n", + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_bar).”\n", + "Warning message:\n", + "“Removed 11 rows containing missing values (geom_bar).”\n" + ] + } + ], + "source": [ + "fig3_combined <- ggarrange(toe9_cts_mse, block1_cts_mse, toe9_bin_ROC, block1_bin_ROC,\n", + " toe9_cts_FNR, block1_cts_FNR, toe9_bin_FNR, block1_bin_FNR, \n", + " toe9_cts_FPR, block1_cts_FPR, toe9_bin_FPR, block1_bin_FPR,\n", + " nrow=3, ncol = 4, labels = \"AUTO\", common.legend = T, legend = \"bottom\") \n", + "ggsave(\"../figures_combined/fig3_combined.png\", fig3_combined, dpi = 300, width = 10, height = 6)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Figure S4: check feature correlation impact (continuous, selected case)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1] \"lasso: n: 100 p: 1000 rou: 0\"\n", + "[1] \"elnet: n: 100 p: 1000 rou: 0\"\n", + "[1] \"complasso: n: 100 p: 1000 rou: 0\"\n", + "[1] \"rf: n: 100 p: 1000 rou: 0\"\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "
  1. 1
  2. 2
  3. 3
  4. 6
  5. 7
  6. 8
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 1\n", + "\\item 2\n", + "\\item 3\n", + "\\item 6\n", + "\\item 7\n", + "\\item 8\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 1\n", + "2. 2\n", + "3. 3\n", + "4. 6\n", + "5. 7\n", + "6. 8\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 1 2 3 6 7 8" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# load results for 4 methods\n", + "load('../sim_data/independent_Lasso.RData')\n", + "load('../sim_data/independent_Elnet.RData')\n", + "load('../sim_data/independent_compLasso.RData')\n", + "load('../sim_data/independent_RF.RData')\n", + "\n", + "# check index\n", + "b = 14\n", + "print(paste0('lasso: ', 'n: ', results_ind_lasso[[b]]$n, ' p: ', results_ind_lasso[[b]]$p, \n", + " ' rou: ', results_ind_lasso[[b]]$rou))\n", + "print(paste0('elnet: ', 'n: ', results_ind_elnet[[b]]$n, ' p: ', results_ind_elnet[[b]]$p, \n", + " ' rou: ', results_ind_elnet[[b]]$rou))\n", + "print(paste0('complasso: ', 'n: ', results_ind_compLasso[[b]]$n, ' p: ', results_ind_compLasso[[b]]$p, \n", + " ' rou: ', results_ind_compLasso[[b]]$rou))\n", + "print(paste0('rf: ', 'n: ', results_ind_rf[[b]]$n, ' p: ', results_ind_rf[[b]]$p, \n", + " ' rou: ', results_ind_rf[[b]]$rou))\n", + "\n", + "# load simulated data\n", + "load('../sim_data/sim_independent_P_1000_N_100.RData', dat <- new.env())\n", + "i = 1\n", + "sub = dat$sim_array[[i]]\n", + "coef = sub$beta\n", + "coef.true = which(coef != 0)\n", + "coef.true\n", + "\n", + "# summarize results\n", + "table_ind = data.frame(matrix(0, nrow=1000, ncol=6))\n", + "colnames(table_ind) = c('FeatureIndex', 'FeatureTrue', 'Lasso', 'Elnet', 'compLasso', 'RF')\n", + "table_ind$FeatureIndex = seq(1, 1000, 1)\n", + "table_ind$FeatureTrue[coef.true] = 1\n", + "\n", + "table_ind$Lasso = colMeans(results_ind_lasso[[b]]$Stab.table)\n", + "table_ind$Elnet = colMeans(results_ind_elnet[[b]]$Stab.table)\n", + "table_ind$compLasso = colMeans(results_ind_compLasso[[b]]$Stab.table)\n", + "table_ind$RF = colMeans(results_ind_rf[[b]]$Stab.table)\n", + "\n", + "# zoom in first 15 features\n", + "ind_cts_Lasso <- ggplot(table_ind, aes(x=FeatureIndex, y=Lasso, color=as.factor(FeatureTrue))) + \n", + " geom_point() + scale_color_manual(values=c('black', 'red')) + \n", + " theme(legend.position=\"top\") + labs(color =\"True Feature\") + \n", + " labs(title='Lasso (Independent)', x='Feature Index', y='Selection Prob') +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8)) + xlim(1, 15) + ylim(0, 1)\n", + "\n", + "\n", + "ind_cts_Elnet <- ggplot(table_ind, aes(x=FeatureIndex, y=Elnet, color=as.factor(FeatureTrue))) + \n", + " geom_point() + scale_color_manual(values=c('black', 'red')) + \n", + " theme(legend.position=\"top\") + labs(color =\"True Feature\") +\n", + " labs(title='Elastic Net (Independent)', x='Feature Index', y='Selection Prob') +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8)) + xlim(1, 15) + ylim(0, 1)\n", + "\n", + "\n", + "ind_cts_compLasso <- ggplot(table_ind, aes(x=FeatureIndex, y=compLasso, color=as.factor(FeatureTrue))) + \n", + " geom_point() + scale_color_manual(values=c('black', 'red')) + \n", + " theme(legend.position=\"top\") + labs(color =\"True Feature\") +\n", + " labs(title='Compositional Lasso (Ind)', x='Feature Index', y='Selection Prob') +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8)) + xlim(1, 15) + ylim(0, 1)\n", + "\n", + "\n", + "ind_cts_RF <- ggplot(table_ind, aes(x=FeatureIndex, y=RF, color=as.factor(FeatureTrue))) + \n", + " geom_point() + scale_color_manual(values=c('black', 'red')) + \n", + " theme(legend.position=\"top\") + labs(color =\"True Feature\") +\n", + " labs(title='Random Forests (Independent)', x='Feature Index', y='Selection Prob') +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8)) + xlim(1, 15) + ylim(0, 1)\n", + " \n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1] \"lasso: n: 100 p: 1000 rou: 0.9\"\n", + "[1] \"elnet: n: 100 p: 1000 rou: 0.9\"\n", + "[1] \"complasso: n: 100 p: 1000 rou: 0.9\"\n", + "[1] \"complasso: n: 100 p: 1000 rou: 0.9\"\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "
  1. 1
  2. 2
  3. 3
  4. 6
  5. 7
  6. 8
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 1\n", + "\\item 2\n", + "\\item 3\n", + "\\item 6\n", + "\\item 7\n", + "\\item 8\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 1\n", + "2. 2\n", + "3. 3\n", + "4. 6\n", + "5. 7\n", + "6. 8\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 1 2 3 6 7 8" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# load results for 4 methods\n", + "load('../sim_data/toe_Lasso.RData')\n", + "load('../sim_data/toe_Elnet.RData')\n", + "load('../sim_data/toe_compLasso.RData')\n", + "load('../sim_data/toe_RF.RData')\n", + "\n", + "# check index\n", + "b = 78\n", + "print(paste0('lasso: ', 'n: ', results_toe_lasso[[b]]$n, ' p: ', results_toe_lasso[[b]]$p, \n", + " ' rou: ', results_toe_lasso[[b]]$rou))\n", + "print(paste0('elnet: ', 'n: ', results_toe_elnet[[b]]$n, ' p: ', results_toe_elnet[[b]]$p, \n", + " ' rou: ', results_toe_elnet[[b]]$rou))\n", + "print(paste0('complasso: ', 'n: ', results_toe_compLasso[[b]]$n, ' p: ', results_toe_compLasso[[b]]$p, \n", + " ' rou: ', results_toe_compLasso[[b]]$rou))\n", + "print(paste0('complasso: ', 'n: ', results_toe_rf[[b]]$n, ' p: ', results_toe_rf[[b]]$p, \n", + " ' rou: ', results_toe_rf[[b]]$rou))\n", + "\n", + "# load simulated data\n", + "load('../sim_data/sim_toeplitz_corr0.9P_1000_N_100.RData', dat <- new.env())\n", + "i = 1\n", + "sub = dat$sim_array[[i]]\n", + "coef = sub$beta\n", + "coef.true = which(coef != 0)\n", + "coef.true\n", + "\n", + "# summarize results\n", + "table_toe = data.frame(matrix(0, nrow=1000, ncol=6))\n", + "colnames(table_toe) = c('FeatureIndex', 'FeatureTrue', 'Lasso', 'Elnet', 'compLasso', 'RF')\n", + "table_toe$FeatureIndex = seq(1, 1000, 1)\n", + "table_toe$FeatureTrue[coef.true] = 1\n", + "\n", + "table_toe$Lasso = colMeans(results_toe_lasso[[b]]$Stab.table)\n", + "table_toe$Elnet = colMeans(results_toe_elnet[[b]]$Stab.table)\n", + "table_toe$compLasso = colMeans(results_toe_compLasso[[b]]$Stab.table)\n", + "table_toe$RF = colMeans(results_toe_rf[[b]]$Stab.table)\n", + "\n", + "# zoom in first 15 features\n", + "toe_cts_Lasso <- ggplot(table_toe, aes(x=FeatureIndex, y=Lasso, color=as.factor(FeatureTrue))) + \n", + " geom_point() + scale_color_manual(values=c('black', 'red')) + \n", + " theme(legend.position=\"top\") + labs(color =\"True Feature\") + \n", + " labs(title='Lasso (Toeplitz 0.9)', x='Feature Index', y='Selection Prob') +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8)) + xlim(1, 15) + ylim(0, 1)\n", + "\n", + "\n", + "toe_cts_Elnet <- ggplot(table_toe, aes(x=FeatureIndex, y=Elnet, color=as.factor(FeatureTrue))) + \n", + " geom_point() + scale_color_manual(values=c('black', 'red')) + \n", + " theme(legend.position=\"top\") + labs(color =\"True Feature\") +\n", + " labs(title='Elastic Net (Toeplitz 0.9)', x='Feature Index', y='Selection Prob') +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8)) + xlim(1, 15) + ylim(0, 1)\n", + "\n", + "\n", + "toe_cts_compLasso <- ggplot(table_toe, aes(x=FeatureIndex, y=compLasso, color=as.factor(FeatureTrue))) + \n", + " geom_point() + scale_color_manual(values=c('black', 'red')) + \n", + " theme(legend.position=\"top\") + labs(color =\"True Feature\") +\n", + " labs(title='Compositional Lasso (Toeplitz 0.9)', x='Feature Index', y='Selection Prob') +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8)) + xlim(1, 15) + ylim(0, 1)\n", + "\n", + "\n", + "toe_cts_RF <- ggplot(table_toe, aes(x=FeatureIndex, y=RF, color=as.factor(FeatureTrue))) + \n", + " geom_point() + scale_color_manual(values=c('black', 'red')) + \n", + " theme(legend.position=\"top\") + labs(color =\"True Feature\") +\n", + " labs(title='Random Forests (Toeplitz 0.9)', x='Feature Index', y='Selection Prob') +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8)) + xlim(1, 15) + ylim(0, 1)\n", + " \n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message:\n", + "“Removed 985 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 985 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 985 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 985 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 985 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 985 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 985 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 985 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 985 rows containing missing values (geom_point).”\n" + ] + } + ], + "source": [ + "figS4_combined <- ggarrange(ind_cts_Lasso, toe_cts_Lasso, \n", + " ind_cts_Elnet, toe_cts_Elnet,\n", + " ind_cts_compLasso, toe_cts_compLasso,\n", + " ind_cts_RF, toe_cts_RF, \n", + " nrow=4, ncol = 2, align = \"hv\", labels = \"AUTO\", \n", + " common.legend = T, legend = \"bottom\")\n", + "\n", + "\n", + "ggsave(\"../figures_combined/figS4_combined.png\", figS4_combined, dpi = 300, width = 6.5, height = 8)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Supplementary Figure 5: number of features (continuous, selected case)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nqQL4umgYyeDrwNdRG0S9ePFiwsm88soro0ePXrdu3enTp81m86BBgxISEt5+++133nmHLBgp\nqqqqvv322/vuu09Ko9ayZcvBgwd/8sknDMN0797dq1Rubu68efMOHTr0xRdf7Nu3r127dk8/\n/XR+fv6HH35YWVmp0WhKSkrWrVv3+OOPd+jQgSB7/PjxMWPGVFRUKBEMROHGYhB/ZaPWICiA\nCx3lBqHuookZBHwd+DrwdQ3Pqwl8tQPvotEZRCawEwShrq7ut99+Ky0tRQht3LjxtddeO336\ntCAIer2+rq6uWbNm7s9LRopLly4hhDQaTatWrQ4dOvTjjz8OHjyY4zj835iYGK1Wu2/fvvvu\nu6+h7NWrVxcuXLho0aLp06cPHz68srJyw4YN5eXlL7zwQqdOnQ4fPvzFF1/89NNPo0ePvv/+\n+2VlN2/e3LFjxyeffPLYsWMEQQkKhf2ySdu2bSNrEOWyUWsQr+el8EJHv0GC9a1p7AYBXwe+\nDnyd1/Nq7F9tdBP6OvJdYYmnn34aIbR06dJHH33UZDK5t7Bu3TqFjYQIu92emZn51ltv4cPL\nly9PnDhx2rRp58+fl+rs3r17zpw5XsVld3Mm3NcnyxIEq6qqjhw5UlJSIgiCvworwd0m0WMQ\ngmw0G0T2vBq7QcRgD5JQGER0s0lpaWnQDSIBvo5CFnydctloNojseTV2g4g3h6+TWbFbs2bN\nu+++W1b2/9m78/Aoivx/4DU9dyYHObgJBELAcBggmHCJCKiAoIAHRNclCCyHXHIsLsohIPIV\nUMPl7oICCkF0FWSD4HIY5JL7SFCQcAQSIIYQckwmyRz9+6N+tsMk09NTcyXD+/Xw8GR6urpq\namo+U9NdXZV77Nix69ev79u3Lykp6Zdffjl//vz3338fGxsbEhLSqVMntuWx3WXjxo2//vrr\n7Nmz6enKwMDAnj17uvFsp8h1ffG0bdq0qTaVi6dnna2TmlMh9tLW8Apx+LrsvdG1pUKIuz81\nbq8Q4vJ1QIcQ6xDr3FghNeSjjVhHHspY56Bj95///GflypU7d+6kY/3S0tLOnTt39uzZ27dv\nr1+/vlevXsOGDfNtpMvIyPjkk0+mT5/esmXLzMzMVatWffPNNzk5OSNHjmzfvr2nT/96+WoI\nc53s3LmzadOmvXr1+vXXX1EhzlaIK3VSWyrEa58atoSuXwd0CLHuIfxoo0LcWCe1pUIeilgn\n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\nc8eMGZORkREREdG+fXt6SjIqKqpv3772koCXOejY9ejR48yZM4SQo0eP3rhxo2nTpjY7TJs2\nbe3atYSQqKgoe50/qO2q/l6kDAYD/ePSpUvCxh07dtAAl5SU1Lp1a3oBghCSm5tLg53RaPz4\n44/LyspCQ0MnT558+fLlwsJCQkhpaendu3fpBa+TJ09u2LCBENKxY8dnnnmG5/lTp04RQqKj\no+mcScKWli1b0i2kuqBcUlIyYMCAQ4cOEUJeffXVjRs32psOgCorK6N/5OXl0T+2b99Oz70l\nJSUJFyysDRo0iO5w6tQpOib1woULND727duXjoOB2i4nJ4de+SLenagWvAyxjtiPdVu2bDly\n5AghZNasWU8//TQh5Jtvvjl8+DAh5N133xXPDrxKfAgefc+ov/zlLzb3vNy+fVsYd1L1znDw\nG9Y/HK235+bm0g+zTCabPXt2WlrarFmz6HiOoKCgrKwsnuc//fRTmjYmJmbr1q2bN28WBp1s\n3LiR5/mNGzcKbaxv375paWnvv/++cLHjxx9/5HleWJKYDi7meV74lrW+rYf+8OA47vTp08XF\nxXq9XrhO0aFDh3379qX/Qbily8Yvv/xC91epVCNHjpw1a1ZISAghJCws7Pfff+d5/syZMw0a\nNGjQoEG/fv1oksGDB9MkHTt2nDt37vjx42lMDA4OvnTpktvfC/AQ8Zsnpk2bJjx76tQpn5QQ\nvACxTiTW/f3vfxdi3bx584YPH04XaBk4cCDuh61RHK88YX1+9bnnnjt58mRFRUVZWdkPP/wg\njBslhOzfv98LxQXvq6iooJ9elUpVUVFh8ywdUGwjIiLip59+ojuYzWa6JIM1juM++OADusP4\n8ePpRuEqAxUQEPDll1/Sfb744gu6cfny5XTL559/brOF53nh5ywh5NChQ//73/+qlo0aNGiQ\nvddbdaRIeHj4zz//TJ9ds2YN3Th+/Hi6Zf/+/VWvd0RERNjcUgc1nL2O3Y0bN2bOnCk81b17\ndx8WEjwKsU481p0/f77qfRhPPvmkMEUf1BCOO3Y3b960GVOiUCiEmXioMWPGeKGs4BPW5/yr\n3WHr1q3dunULDQ0NCgpq377922+/bTPHh8FgeOedd9q1a6fValu0aPGXv/zl5MmTwrP01rOg\noKDbt28nJSU1aNAgLCzs+eeft54QW1jGUYihVbfwPL927dqGDRtqtdrY2Fi9Xr9w4UJ7wW7R\n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\nFwe8TeoZO4PB0L9//wMHDghbFi1alJKSsm/fvqAgsVkRrl69+vPPP+/du9dm9kgsjA0gDneK\n+QRzrAMAqAmkduwWL1584MABrVYbFhaWm5tLCAkNDT169OjSpUsXLFggkvDu3btFRUUxMTF3\n794VNhoMBraFsR+qxSsBwPuYYx3Aw6AGDikDG1I7dqmpqSqVKiMj45///OeyZcsIIdu2bYuM\njNy6dat4sEtISEhISMjKyjp69Kiw0eHC2NeuXUtLSxP279evX5MmTaS/KvGZbN2YViaTMedF\nV41kSyuXy51Ny5yXswm1Wi3b2j7WS2oy8FqFuOs4nn6xqBA2zLEOAKAmkNqxu3PnTmRkJF1j\nh6pfv350dPSNGzcYcr179674wtg3b97cuHGj8LBz584xMTGEkAoiiVarZSgVW1rmvJRKJfMa\ntXK5nKatmDX5gSfs/35iLqezCZmXHJXL5b594yS2LhfzdT2hkNZ6yVHXj+8HFcK2SLEN98Y6\nAAAvk9qxa9269ZkzZ44f/3MJ0czMzCtXrrRt25YhV4cLYz/66KNr1qwRHkZGRtJp3yV2GVxZ\nD8OptDzPFxcXs2VUXl5ufTdJVSIXpk0mE11UW3ofqurr0iye8+cD+z1CZyuzpKSE7fuVLqkp\nsoP4lXpny1lNhTiVnjVf1xMKaRUKhUJh9yP8EFYIx3GuD4Nzb6wDgJrPz0Z5Se3YJSUlnTlz\npkuXLmFhYYSQ+Pj4c+fOmc3mF198kSFXhwtj16lThw6/o4qKiuhasRK/aRwuLOvGtMx5WSwW\n19NK/+qtmpcnKtNmQgqn5o5xpUKIO944tn4Mc5ldf7Hia94/hBUil8uZjyBwb6wDf+VKrPM5\njJPzb1I7dtOnTz937tzmzZvpBdPTp08TQoYOHTpr1iyGXH2yMLYnmrL18sC164PtxxCzwBXu\njXVQE4jEBO3Pp4S/EcPBP0jt2HEct2nTpvHjx6enp2dnZ0dGRvbs2fOJJ55gyzUgIAALY4MN\nzdGTwt+IsG6Enq5T3BvrnKVQKByed5TJZOIjWZULZ//54MF3nHlcL3Fh+KxCoWBOy3GclLQa\njYbtni2bg3gnrVwu91peDPu7/Tiuv1iOE5tzt5ZWyAOfUyI1ONO04pdrnFh5ghDSvXv37t27\nO5XEHrcsjA0A4AlujHVOEY/Xwj5SdquW9c+n0sc6OJWWOVNX0kp8sa6UTeQgigX/eOCx/a9e\nZwvgzcp0S+W4chyaUHplOptpLa0QV9Kyd+xSUlKkZDNlyhSH+7Rs2XLHjh3WW2rvwtjuojt+\nRvgbJ6gAfMiNsc5FRqPR4VhDi8ViMBhEdpB4/4j4QWy4MuzEZDKJ5yUyW43ZbHZYTofD3Zgr\nRPqdOE5VpvV6rNVWpvj0PU7lVe3+bHcY0eMwpGVOKKQVX4z0IawQuVxOb1GolljHburUqVKy\n8UKwg4dNVsoDCy20nHLX3p4ArquBsc4nt+n52b2BvoUhEOArYh07p+YE/n/s3Xl8E2X+B/An\nk6tperdQrnKVQ84CBQooiIAorgIiiMXdtQjKISAILCvIISKyIGgR6q6ABYUiXhxbQFZAEOQU\nKJR2KRShtuUqpWeO5prfH89vx5A2k8mkaY5+3i9fvshknnmefPPkm6eTmefxY0h2olmPz/x7\ncIYk7tN8K9dZrzXnPSf73f0RQB6uDmkHasQ3sMvPz6+zdvgrv/zguZJh/TIgrvDXryvRb7RH\nAoJc51a47ASgLjlx84TFYvn6669Pnz6dk5Ozb9++bdu2jRw5shZX8gEA8AbIdQC+CCcOKKED\nO51ON2zYsKNHj3Jbli1blpycfOjQIdenencoICCAXicocEGDGpcoEF22Diq1/skyfpHjaVpl\nMhmtTvgKD6JfV/W2iVu2ydkGVy8rcB93v9E1HkdEWdcDwr/CRz0MiOsTXhBP5zqob3A9MdQ6\noQO75cuXHz16VKVSRUREFBYWEkLCw8NPnjy5atWqOlgYu6qqymw2E0Ls3gTysMrKyuobRZet\ng0prPE54eLi9fcxmM119S/jxRb+u6gcRUbBWyvIEhFi9QHe/0TUexyPBlMlkSqWSfx/hVfhB\nQBiG4b97TgjP5jrwUfXnemLwfnyT/llLS0tTKBSZmZmJiYl0y86dO+Vy+Y4dO9zWtj+wLGs2\nm+nYTghzTUSXFVgwZ0249X9Ola2xATz7OBsQ4sLrqn4QEQXroGydvdEi2la7Bbmy/Ceo6mFA\nxC1SbMOzuQ48KDc5ivvP020BEE/oGbs7d+7ExMTExsZyW6Kjo2NjY3///Xf3NAwAwAOQ69wK\nZ7YA3E3owK59+/YXLlw4c+YMt+Xy5cvXr1/v1KmTexrmMcg7APVZ/cl1ouGyMABvJnRgl5iY\neOHChT59+kRERBBC4uPjL168aDabR48e7c7mAQDUKeQ6APBpQgd2s2fPvnjx4rZt24qLiwkh\n58+fJ4SMGjVq3rx5bmwdAEDdqj+5Dr9OAPgloQM7hmG2bt06ZcqUI0eO5OXlxcTEDBgw4PHH\nH3dr4wAA6hhyHQD4NEEDO41GQyfnfPTRR6VS6ZEjRxQKBc88C0JYLJa0tLQjR46YzebHHnss\nKSlJKpW6ckAAABch1wGAr3MwsNu3b9/MmTPz8/N1Oh0hZNWqVX/729+4Z6dOnbpu3TqJRCKi\n4rS0tIMHD06dOlUmk6WkpJhMpkmTJok4DgCA65DrAMA/8M1jd/369dGjR1+7do0+LCoqWrBg\nASFEJpNFRkYSQlJSUnbv3i2iVp1Ol56ePnHixN69e/fo0WPy5Mk//vhjWVmZiEMBALgIuQ4A\n/AbfGbslS5bodLpWrVr94x//IITs3bvXaDQyDHPu3LmuXbvOmzdv5cqVKSkpI0eOdLbWgoIC\nrVbbvXt3+jAuLs5oNN68eTMuLo5uOXv27LJly7j9Fy1a1K1bN0KISdjxa1yiQGDZ6scRUdCV\nsvzrK1ByuTwgIMCp41c/rK8EhAiLCbeP6E7ikTfalUr5p/OthwERvaQYch1yXY0HQa6rfhzk\nOpvjeGGuk/A83bVr18zMzMOHDz/xxBOEkEmTJn322WeDBw8+ePAgIeTWrVtNmzZt0aLFzZs3\nnW0ZXZ/n+++/57aMGzdu4sSJgwYNog/tJTt76DUrIqatl0gkDMNYLBYRXwkMw0gkEvdVynMh\njsFg4L9Mx8W2sSwrYhJ/0ZUSQqRSqcNK+V8yf720beLeaCFtq5ErvUtIlzabzTwraPGX9WDP\nd1/vYllWJhN6Q5g15Dp+yHW1VSlBrqupUoJc52Sl/LmOLwlev36dEBIfH08f0hk7R4wYQR/S\nYePdu3edbPP/t6n61Som0x/j1169eln/8FFWVlZSUsJzwIiICJZl+fepkVKpDA4O1mq1er3e\n2bLh4eEMw4ioVKFQhISE6PV6ut6rPVFRdpe1MRqN5eXlPGVDQkIUCkVpaamzXVkmk4WFhVVV\nVdW49C2/4OBgpVJZXl7u7MeAYZiIiAiDwVBRUcGzG09ACCH8b4RarVapVBUVFUaj0am20XrN\nZnNpaamzBVUqlVqtrqysNBgMzpaNjIy0WCz8L0qhUPAkO/6ytOfrdDp6SZlTwsLCpFKp6J6v\n0+n4e36NQkND5XI5f5eWSqVCTnhUh1zHD7nOBnKdDeQ6G57NdXzX2NFiOTk5hJCbN29mZGQQ\nQnr27Emfzc7OJoQ0bdrU2UYTQiIiIoxGI/eCzWazRqPh78oAAG6CXAcAfoNvYPfII48QQlau\nXJmZmfn+++8TQoKDg2myKygomDlzJiFE3DI7zZs3DwgIyMzMpA+zsrIYhmndurWIQ/mfioqK\nzMzM27dv18qK5n4AAamOxuTWrVuICeViJ0Gu8wh8tG0gINUh19kQ0kn4foqdNWvWoUOHvv32\n22+//ZZuGT16tFwuLy4ujomJoVtmz54tomWBgYFDhgxJTU2NjIxkGGbDhg0DBw4MCwsTcSg/\nc/z48c2bNyuVSp1O17Rp07/+9a99+/b1dKM8CQGpDjGx4XpAkOvqHrqxDQSkOsTEhsCA8N08\nQQhJTk6eN29eVVUVIaRXr1579+5t0KBBcXFxVFSUXC5fs2bNtGnTxLXPbDanpqaeOHHCYrEk\nJCS89tprPFcCarVa/ksZfv31V4ZhevTo4WwzioqKrl27FhsbGx0d7WzZjIyMqqqqhIQEZwuW\nlpZmZ2c3b968WbNm1tuLi4tnzZo1d+7cLl26FBUV/fDDDwcOHOjbt+9bb71lc3lBVVUV/6UM\n//3vf0tKShISEpydClWr1WZkZDRq1EjESYXc3Nx79+7Fx8c7O6FrVVXVuXPnoqKi2rVrZ71d\neEAIIfzXrPz+++8FBQWdO3cOCQlxqm2EkBMnToSEhHTu3NnZgoWFhXl5eY888ghdddQpZ8+e\nlclk3N2UHOuYPHjwYO/evfZiwh+Q+/fvX716tVWrVo0bN3a2bZcuXdJqtX369HG2oL2eL0R2\ndnZpaWmfPn0Y5qHfGawDcv/+/f379/N0Eh7IdTyQ62wg19lArrPh4VzHOlJVVXXhwoWcnByz\n2Uy3aLXaHTt23Lp1y2HZOjN06NDnnntORMH09PT4+Pivv/7aZntpaemvv/6an5/PverqxowZ\n079/fxEFf/755/j4+I0bN9psP3To0Jtvvmm95fLly3/+85/nzZtnMpkEvZ7/mT59enx8fHl5\nuVOlWJbNycmJj49///33bbYLeV0LFiyIj48vKChwtuydO3fi4+PnzZtns70WA7J27dr4+Phz\n5845VYqKj49PSkqy2SgkIJs3b46Pjz98+LCIsk888cTzzz9ffXttxWT//v3x8fHbt28XXoST\nmJjYr18/m41CXtQvv/wSHx//r3/9S0TZSZMmxcfH6/V6m+212EmQ6+yVRa6zgVxnA7nOhmdz\nneOpARQKhc3t9yqV6sUXX3R2EOpDDh48uG7duoCAAK1W69TpX9EFqfDw8Fu3bpWVlYWGhtIt\nnTp1WrVq1ezZs3fv3j1q1CgxL6Y2uPK6XCmLgFTnnTHxj4Ag1yHXIdfZ8I+Pdi3yiYDw3TxR\nP92/f3/9+vWLFy/+6quvNmzY0KVLlxUrVqxYscLhXdyiC3K6devWvHnzlStXWt+V3ahRo3Hj\nxp04cUL8S3KNK6/LxZggINV5YUwQEB+FXGcDuc4GPto2fCUg/jmwKysrO3fuXEFBgYj7aC5d\nutSiRQv6e390dPTUqVOXL1+elZW1aNEi/mtfRBfkGlxYWDhr1qyioqK5c+daT4WqVqvFLVJp\nc/w6DogrZREQew1mWXbOnDleFRN/DYhPQK6r8fg+99FGQKo3GLnOprVOBMTer7y+5erVq9eu\nXaP//vHHH0eMGDF27Njnnntu8uTJJ06c4ClIr3B88OABt+X8+fNjxoyhcwNybt++PW7cuO++\n+8564/Xr13NyckQUrKioyM7OLioqqrHBP/zwwzvvvDNixIh169ZlZGScOXNmwoQJ1a9d4JeX\nl5ednU1/xXcqIHq9Pjs7+/bt2yJeV2FhYXZ2dlVVlbNlDQZDdnY2d8GKOwJy9+7d7OxsjUbj\nbEBYls3Ozr5x44aIgNy/fz87O9v66h/hZXNycq5fv07/Xb3BpaWlLsakrKwsOzu7uLjYXhU8\nZa9fv37lyhURL6qysjI7O/vevXsiyvJ3adcD4iuQ62wg19lArrNRD3Od0IFdbm7uqVOnBO7s\nQUVFRSNHjjx//jzLsnfu3Fm/fv3w4cM/+OAD608gP4vFMnv27Pnz52u1Wuvt6enps2fPrvWC\n9hr8888/v/3226NHjx4/fvyePXsENl748esgIOLKIiDCG3zq1ClviImfBQS5DrkOuU70i3Kl\nLHKd8NbyB8TBwO7mzZv3799nWfbPf/4zd3ovLS1tzpw5/AU9RfR9NNb3qty+ffu111574403\nrP92+emnn+y9aq5sQUGBUwUdNpgub+cKzwZERFmvDQjrwhvtvoCwLOsNncQPAoJcx+2AXOcN\nPRm5rnqDvaGT+ERApEuWLOH5cff9998fOXJkampqTk6ORqPp27dvZGTk2rVr//nPf/IX9JTS\n0tL9+/cPHTo0ICCAbmnYsGG/fv2++eYbhmE6dOhQY6mDBw/Onz//zJkzu3btOnbsWIsWLV5+\n+eULFy588cUXxcXFSqUyPz8/NTX1hRdeaNWqFU/ZjIyMUaNGFRUVCSkopMEdO3b06YA4W9Zr\nA0JceKPdGpAOHTq4fiWZ653EDwKCXIdch1xX/XX5wUfb9Zj4XEAcDOzMZrNer793715BQQEh\nZOvWrStXrqTzPAUGBur1+rCwMJVKxRfIutWoUaMzZ86cPn26X79+crmcbgwKCgoICDh27NjQ\noUOrF7l///7ChQsXL148ffr0QYMGFRcXb9my5c6dO3//+9/btGlz9uzZXbt2Xbp0aeTIkU89\n9ZTDsl999VXr1q3Hjh17/vx5noKuNNi3AiK8rNcGpMbXJfCN9v6AiKvC/wKCXIdch1xX4+vy\n9Y+2i1X4ZEB4zj1ae/nllwkhy5YtGz58uM181qmpqQIP4j6FhYXcZZt1efq3Vs6lO9tggbiY\neE9A+MtyvC0grAtvtE8EREQVfhkQCrlORFnkOqfKcrwtIKyffrTrW65zcMYuJSXls88+Kyws\nPH369M2bNw8dOpSYmJidnX3p0qV9+/Z16NAhNDS0R48e4pbHri1Go3HhwoV5eXl03Y+goKAB\nAwbUzelf0efSy8rKsrKyLBZLUFBQcHCwUw12NibeExCest4cEIevi+eN9omAkNr+1LgjINYx\nadSo0eOPP167AUGuQ66rxYB4yUcbuY7Uy1znYGD37bfffvLJJ3v37qWTpqSnp1+8eDEjI+P2\n7dupqakDBw4cO3asZzMdIWTLli3//e9/58+fz4UvICBg0KBBrVq1cvfpX3FlbX53j4yMbNOm\njfAGC2ETEwTElYCIfl0+FBBSV51EdEGbmDRp0uSvf/1rLQYEua4efrQRkNp6XT4UEFIfch3/\naUCLxXLt2rWvv/6azqpn/cOEUqns2bPn66+/npGR4fB0ovtcunRp+PDhJ0+eZFk2MzNz4cKF\nb7zxRnJyMjc7kTvOdrpyXtfh7dau3/jDHxMERERAWBdi4nMBEVhFnQWEdRQT1wPCItfV1482\nAlIdcp0Nn8t1Ds7YSSSSiIiITp06HT9+/NKlSzqdbuzYsZcvX87Ly0tISMjMzDx16lS3bt16\n9uzJN3h0G61Wu2jRot69e48ZM+by5ctLlizp0KFDp06dLly4kJ6e3rt375CQEHtnO81mM8P8\n/8IbTp2bdfG87qlTp+7evTt+/HhatlevXl27dt25c+e5c+eeeOIJhmFcvPFHSEwQEGcD4kpM\nfDEgNVbhqYAIiYkrAaGQ6+rnRxsBIch1XhMQITER9MqFjP5Ylt21a9eyZcvovydMmBAUFMSy\nrNlszsrKunnzpsCD1DqTyfTBBx/89a9/LSgoePvtt3fs2MFtX7x48T/+8Q+eglOmTDl27JjN\ndiGzIG7atOnll18uKSkRUZZ1ZvppccTFBAGpXqrGgLAuxAQBERcQ1v0xsYZcx6lXH20EpPpT\nyHU2fCXX+fySYmazefXq1a+88srYsWOtY3Hu3LmkpCSegtu2bXvuuefWrFlDl16xxnO20/Xz\nuq5MXS2QuJggIDZ4AsK6EBMERMTPQ3UQE++HXFcdcp0N3/poIyA1Htz1mNTCTxiexTDMrFmz\nevXqZTKZZDIZt/3evXvh4eE8BRs1asQwTFZW1owZM7Kysqyfsnf6V6vVfvTRR48//nifPn3o\ned2oqKgBAwZcu3btb3/7W2Fhob2y1kv8SiQSd69ZLi4mdRkQYhUTXwwIcSEmCIizASF1EhPv\nh1xXHXKdDd/6aCMgVK1/ahxcY+cTJBJJ7969u3Xr1rhxY7PZbDab//vf/6akpIwdO5bnfuCN\nGzcOGjRo9uzZBQUFGzdurKqq6ty5M/8P2AzD5OTkXL58uXfv3p9//vngwYNfffXVTp06PfXU\nU5mZmVeuXHn00UerlzKbzdOnTw8NDW3evDndIuJ3d2eJiEmdBYRUi4nfBITUUidBQDzyqfF+\nyHXVIdfZ8K2PNgLilk+NwDN7vuKDDz547rnnhg8fvn37dv49f/31V25tuBMnTrz88sszZszI\ny8vjL1W753Vra2FjfgJjUpcBYe3ExA8CwtYic3UGAAAgAElEQVRqJ0FAPPWp8X7IddUh19nw\noY82AlKLnxp/G9gVFxefPXv2wYMHzhZ88ODB4sWLX3jhhfT0dP49LRbLunXrXnjhhcrKSm7j\n/v37Z82aZa/IoUOHRowYMWHChAkTJly+fLn6AZ1trVPExcStAWF5Y+LrAWFru5MgIHX/qfF+\nyHXVIdfZ8LmPNgJSK58afxvYuSg9PV3IO8eybE5ODsuyJpPJYDBkZma+/PLLhw4dsrfz/Pnz\n09LSdDpdcnLy8OHDU1NTjUZjrTXandwUENZnYyI8IGz96CQIiI9CrrOBXGcDH20bPhQQCcuy\ngn6yhZqsWLHixIkTEokkMTHxpZdesrfbuXPnunXrJpVKCSEnT55cv359ZGTk7Nmzud/U/YbA\ngBDEpBoExEb9CYhPwLtmA7muOnQSG54KCAZ2Lnnw4MFvv/0WGxvLf1eajZKSkuTk5MuXL48f\nP/5Pf/qT+5pX98QFhCAm1SAgNvw4ID4B75oN5Lrq0ElseCogGNh5zN69ewkhftaPXYSY2EBA\nbCAgvgjvWnWIiQ0ExIYrAcHADgAAAMBP+PwExQAAAABAYWAHAAAA4CcwsAMAAADwExjYAQAA\nAPgJDOwAAAAA/AQGdgAAAAB+AgM7AAAAAD+BgR0AAACAn8DADgAAAMBPYGAHAAAA4CcwsAMA\nAADwExjYAQAAAPgJDOwAAAAA/AQGdgAAAAB+AgM7AAAAAD+BgR0AAACAn8DADgAAAMBPYGAH\nAAAA4CcwsAMAAADwExjYAQAAAPgJDOwAAAAA/AQGdgAAAAB+AgM7AAAAAD+BgZ0fatWqlUQi\nadSoUWVlJbfx/fffl0gkEonEbDbXYl1VVVX0sLt3767Fwwqh1+tHjRoVFBQUGBj4+++/17jP\n/v37hw4dGhMTo1ar4+Li/vKXv1y/fr2O2xkTEyORSJKTk+u4XgC/h1zHQa4DDgZ2fuvu3bsf\nfvihp1vhRjt27Ni5c6dGo2nbtq1cLq++w9q1a5955pkff/yxoKBAq9VeunRp69atXbp02bdv\nX923FgDcBLkOuQ6sYWDnzz788MM7d+54uhXukpeXRwhp3br1xYsXGzdubPOswWD429/+RggZ\nNWrUqVOnSktLDx482LJlS51ON3PmTA80FwDcBrmOINfB/2Bg5880Gs27777r6Va4xSeffHLg\nwAFCSFlZ2dy5c6v/PJGdnV1VVUUIWbJkSUJCQmho6ODBg1euXBkQEJCfn6/RaDzQaABwD+Q6\nglwH/4OBnd/q37+/QqHYuHFjTk6OzVMajYZeLLJ37166Zffu3dZXpdB/JycnP/roo0FBQV26\ndElNTS0tLU1MTGzQoEGzZs3mzp1rc/1KaWnpiy++GBUVFRcXZ/2ziMViWb16dc+ePYOCgtq2\nbbt48WK9Xk+fCg4OlkgkW7Zs+fjjj2NjY6u3kxBy7Nixp59+unHjxg0bNhw8eDBNcISQtLS0\nEydOEEKKi4s//PDD27dv2xQMDAyk//jkk0/o37uEkDFjxuh0Op1Op1arCSG3b99+/fXXW7Zs\nGRAQEBMTM27cuNzcXLqn8AhotdoOHTp06NBh//79r7zySnR0dFxc3KpVq+y9LzwBefDgwaxZ\ns9q0aaNSqVq3bj1p0qSCggJ7xwEACrmO/gO5Dv4fC36nZcuWhJCkpKQZM2YQQp5//nmWZZct\nW0bfcZPJxF1onJ6eTovs2rWLe5ZlWfpvhvlj3C+RSJo3b27dc9auXcuyLPdBDQkJsS7y5ptv\n0iP/+c9/pltat26tUCgIIQMHDjSbzSzLBgUFEUJGjBhBd7hy5YrNC9myZYtEIiGEKBQKpVJJ\nd0tOTqbPLlmyhBDSuXPnGoNgNpt79uzJtbZ79+6TJk1KTU0tKiqiOxiNxm7dulk3njaStk14\nBLhgNm3a1LrIjBkzaEXNmjUjhHz88ccOA/L444/Tipo0aUJfeNu2bSsqKmqhTwD4I+Q6FrkO\nqsHAzg9xya6oqIh+jH/55RcRyS4hIeHOnTunT5+mn8nIyMjs7OwbN260adOG/C+HcsmuQYMG\nZ86c0el0c+fOJYRIpdLc3NxffvmFfnpPnz7Nsmxubq5KpSKEbN++nf1fsgsICJg/f/7WrVtL\nS0utX0VpaWlERAQh5MUXX9RoNHq9/tVXXyWEBAUF3b17l3WU7FiWvXv37iuvvEJr4cjl8g8/\n/JBl2VOnTlm3jfv7mOZc4RHgghkdHf3rr79qtdo5c+bQCFy7do19ONnxBIT7hWXfvn0sy16/\nfj0iIiIoKGjv3r213kMA/ANyHYVcB9bwU6w/i4qKmjdvHiFk7ty57P8+wMJNmDAhOjq6d+/e\nnTt3JoSMGDGiQ4cOLVu2HDRoECGkoqLCeucZM2b06tUrICDg/fffj4qKMpvNBw4c+Omnnwgh\nERER33zzzdy5c//5z3/S/HX69Gmu4MyZM99///2XX345NDTU+oDnz59/8OABIWTdunWBgYFK\npfKjjz6SSqWVlZU0TznUsGHDzZs3P3jw4MSJE8nJyYMGDZJIJEajcc6cOadOnerdu7fJZCop\nKdFqtR9//DH3ZWA9b4JTEXjzzTfj4+NVKtXy5csjIiLMZvOhQ4dsmsQTEIVCIZVKCSGvvPLK\nhAkTTp48mZmZWVFR8cwzzwh5sQD1GXIdch1wZJ5uALjXzJkz169ff+LECXp1rVPo55D875R7\nw4YNrR/aoH/YEULkcnnr1q3v37+fl5dXUlJC/ndpiPXO1peYtG/fvsbab968SQgJDQ1t0KAB\n3RISEhIdHX3r1q3ffvvNYeN1Op1WqyWEREZG9u3bt2/fvjNmzLh06VJ8fLzJZDpy5Ejv3r2n\nT5++ceNGo9EYFBTUtWtXFyPQtm1bLgItW7Z88OBB9cuc6RUwNQYkOjp6165d77777q+//vr5\n559//vnnhJDExMS1a9dGRUU5fL0A9RxyHXIdUDhj5+cCAwPpzWLnzp2r/ix3w5Trd05xk2Ga\nTCaap1q2bBkTE0MIiY+PtzlRbD27Er3Aojr6I0tZWVlRURHdUlFRce/ePUJIixYtHLbn3//+\nd1RUVFRUlPU1uV27dqV/KysUirS0tE8//VQikfz444/l5eVbtmwR8aqtcSnYaDTSpEZfgjX+\ngDz77LNnz5797bffPv3002eeeYZhmO3bt3/22WcuNgygPkCuQ64DCgM7/zd+/PiOHTtabwkM\nDKQ3Un3xxRd37969cePG2rVrXaxl3bp1ly5dMhgMixcvvnfvnlQqHTRoUP/+/QkhGRkZly9f\nJoTcvXu3X79+HTp02Lp1q8MD9ujRIywsjBDy5ptvVlVVGY3GWbNmmUymwMDAvn37Oizev39/\nOpNnYmLi+fPn9Xr97du3//73vxcXFxNC+vbtS28KU6vVPXr0IISsX7/epddPyMcff5yZmWkw\nGN55553i4mKpVDpw4MDqrSJ2ArJly5aYmJgOHTqoVKrJkyfv2rWrXbt2hBAu1wMAP+Q65Dog\n+Cm2PpBKpStWrBg+fDi3RSKRDBs27Lvvvtu7d2+jRo0IIdUnvXRWRUVFXFycTCYzmUyEkOnT\np7dv3759+/bPP//8zp07e/To0aZNm+vXrxsMhp49ez7//PMODxgaGrpmzZoJEyZs3759586d\nDMPQnxtWrFhB28yvcePGq1evnjFjxvHjx+Pj462fmjp1at++felVIyUlJY0aNVKpVNwvDvQn\nFRFYlu3atSsXgRkzZnA/WHAGDhxoLyDFxcU6na6goKBJkybNmze/e/euXq9XqVRJSUni2gNQ\n3yDXIdcBwRm7euK5554bMGCA9ZZPP/00MTExMjKyWbNmU6ZM+f7775OSkpKSkuz9WGCPVCql\nBXfv3v3888+HhIR07Nhx5cqVa9asoTt8/fXXS5cufeSRR27evNmiRYsFCxYcOnSITq3k0Pjx\n4w8fPjxkyJDQ0NDAwMBBgwYdOHBg+vTpAts2ffr0n3766dlnn23VqpVSqWzevPngwYO/++67\ndevWEUKGDh26bt26Vq1ahYSEPPnkk5mZmTNnzkxKSrp27ZpTEeAkJyePGzcuLCyMRmD16tU1\n7mYvIM2bNz927Nhf/vKXFi1a3L17NzQ09Omnnz506FBcXJy49gDUQ8h1yHUgEXEDEQBwNBoN\nnWUgPT39T3/6k6ebAwDgFsh1vgJn7AAAAAD8BAZ2AAAAAH4CN08AuESpVH711VeEkO7du3u6\nLQAA7oJc5ytwjR0AAACAn8BPsQAAAAB+AgM7AAAAAD+BgR0AAACAn8DADgAAAMBPYGAHAAAA\n4CcwsAMAAADwExjYAQAAAPgJDOwAAAAA/AQGdgAAAAB+AgM7AAAAAD+BgR0AAACAn8DADgAA\nAMBPYGAHAAAA4CcwsAMAAADwExjYAQAAAPgJDOwAAAAA/ATfwC4rK0siQF5eXp01FwCgdh04\ncMBhlktMTPR0MwEABMEZO3DVli1bqn8RqtXqrl27LlmyRK/Xc3uOGTOGPnvz5s1abEDHjh1p\njWazuRYPCwBgrR7murKysqysrDt37tRNdVArhA7sgoODo+xgGIwO67WzZ89W36jVajMzM999\n992XXnrJZs/IyMiWLVvWVu0VFRU5OTmEkB49ekilUuEFr1+//vrrr7dp0yYoKKh79+7r16+3\nWCz8Rc6cOZOUlNSxY8fQ0NBHH3109+7dLjUdvE9oaGiNWS44ONjTTQPPqz+5jrJYLKNGjerc\nufPXX38tstHgCTKB+6Wmpr7wwgtubQr4KC7ZTZ06NSIighCi0+lOnTr1yy+/EEJ2795969at\nJk2aFBUV0V/te/XqVYu1nzt3jiYppw574MCBF154QaPR0IcZGRnTpk3Lz89fsWKFvSJLly59\n7733TCYTfXjixImRI0du3LhxwoQJLjQfvMuBAwcSEhI83QrwUvUk11HXrl2bNm3a4cOHCSH4\nUPgY1r7Lly9zu3377bc8e0K9ZTAYlEolIUSpVBoMBuunOnXqRDtPRkYGy7J79+6lDxcuXFiL\nDVi5ciU9bFpaGt1SVVVVUFBQUFBQWFhYY5GcnJyAgABCSKdOnbZt27Zs2TK5XE4IkclkZWVl\nNRZJTU2ltTzzzDPffPNNSkpKeHg4ISQiIsJisdTiy4G698MPP3CJ7tSpU55uDnipepLrrly5\n8uyzz3bu3Jn7UCgUCr1eX4svBNwNv6KCSy5dulRVVUUI6dKlC00ZlNlsLi0tJYSEhoa2a9eO\nWP2xa/3nJsuyX3zxxZAhQ6Kjo+nPBEuXLtVqtdZVlJWVLVq0qGvXrmq1Ojo6+sknn7T+QcTm\nsJWVlUOHDm3WrFnLli0PHjxYY5unTZum1+uVSuXhw4fHjRu3YMGCp59+mhBiMpmys7Or719c\nXDxr1ixCyJAhQ9LT00ePHj1lypTZs2cTQh48eHD9+nWnowYAvqY+5DpCyOHDh9PT061P68TF\nxdERLfgMnkEfztiBQ59++intIZMmTeI23rt3b/r06XT7qlWr6MY//elPdMutW7folpKSkv79\n+1fvkwkJCUajke5z7dq15s2b2+wglUqPHDlCd2jVqhUhJDw83GKxlJWV9evXjxCiUqnS09Nr\nbHBeXp5EIiGEjBw5kts4evRoeuSLFy9WL/Ldd9/RZ/fs2cNtXLx4Md2Yl5cnPnzgBXDGDoSo\nD7mOljp16tSpU6fWrVtH95w2bZprkYO6JnRgZ8+yZcvqrK3ghV599VWe7jF37lxuz4YNGxJC\nmjZtSh9aLBYu0w0fPnz79u3r16+nl60QQj7//HO6D/3bVCaTzZ07d9euXfQ8GSGkf//+LMve\nv3+fPnzyyScfPHhAdw4LCzt+/Li9BnM/Z+zYsYPb2LNnT0KIRCLRaDTVi8yfP58WOXPmDN1i\nMBg6dOhACFGr1fgp1tdZD+xq9NJLL3m6jeB59SHXWVuzZg0t/uWXX7oSN6h7GNiBS7p06WKv\nbzAM8/3339PduMkOub8dv/rqK7rljTfe4I72r3/9i26cPHkyy7KbNm2iDz/55BNun7CwMEJI\no0aNWJbdv38/3eH111/v3r07IaRx48aXLl3iaXB8fDxtW2VlJd1iMpnoPY9cIrbBDezGjRtX\nWFiYlZXF/UUeHx8vPnbgHTCwAyHqQ66zNnbsWFpjTk6Oc5ECTxN6V2xwcHCNv7KrVCqBRwD/\no9Vq6YUaKpWK+/tSr9efPHnyl19+sVgs48aNu3fvXnBwcPWLThYtWkQIiYyM/OCDD7gDclfs\nKpVKi8XyzjvvEEKaN28+depUbp8rV66YTCZ6tz932NTUVKPRSAgZP348T/41Go0ZGRmEkFat\nWqnVarrx/PnzFRUVxP69Zk8++eTy5csJIWlpaWlpadZPxcXFOYwS+JDQ0FDry6cozHUC9STX\nWTtz5gwhJDw8vG3btg53Bq+C6U5AvPPnz9N5Mnv06PHee+9ZPzVw4MCjR4/q9foLFy4MGDDA\nJtnduXPn6tWrhJBBgwZZf2v+/vvv9B9dunQ5ffr07du3CSEjR460nisxOjqa+zd3WJrpCCH0\nzi96ZUl1N27coA1+5JFHuI1Hjx6l/7Cehsrmtbz77rtLly6lZdu1axcfH799+3ZCyIsvvsgT\nH/A5mO4EalRPch2nqKjoxo0bhJDevXvbqwK8Fu6KBfG4XEPP+VujfxcSQpo2bWq9J73Cg/uV\nn14OzPnmm28IIRKJ5LHHHsvKyqIbW7duze1QVVVVVlZWVlZGc9avv/5Kt7/88su9e/cmhOTl\n5f3000/2Gnzt2jX6Dy7ZsSy7bds2QkhgYOCzzz5rr+CiRYvy8/MPHDhw7ty5y5cv5+fnE0Ja\ntmw5ZMgQe0UAwG/Un1xH0dN1BDPY+SYM7EA8e8kuIyPjwoULhJCmTZvGxsayLHvu3DlCSGxs\nLJ3+TafT0T3pROrUnj176FoOiYmJ7du356YCLi8vp//Q6XQ9evQICwtr3769wWAoLCykf+b2\n79//iy++GDNmDN1t8+bN9hrMTS5w9+5d+o9du3bRHywSExO5Hyysbd++ffr06dOnTzebzUOH\nDu3Ro8eePXvofKTvvvuuU/O/A4CPqg+5zho3sKODSPAtQn+KBaiOS3Y///wzPW9vsVjy8/N3\n7tzJsiwh5OOPPyaEXL16taysjFhd2BEfHy+VSs1m8549exYsWNCvX79jx44lJyebzebg4OCl\nS5cSq78U165d26JFC6VSuXHjRnqZy4IFC1QqFVf7kCFDGIYZNWrU3LlzCSHffffd+vXra7wu\niruu5euvv5bL5Q0bNvznP/9JCImIiKCXv2RkZAwbNowQ0q1bN3q1ckZGBr3t/5dffhk+fHhO\nTg69SvrZZ5/9y1/+UvsxBQDvUx9ynbXTp0/Tf2Bg55N4bqywvis2LCyskR3vvvuu+2/yAK/z\n4MEDnn4llUrffvttuueXX35JN65evZorTi8othEVFfXzzz9z+7zyyivV95k+fTp9lrtZdf/+\n/XRLt27d6JZNmzbZa3b1q+IiIyO52ctSUlLoxilTptAtly5dolO3W3viiSdKSkpqL5bgSZjH\nDvjVk1xnjc7G0rp1a9ciB57h6nQnhJA5c+bUWXPBe/znP/+p3hnUanVcXNyLL7547tw5bs8Z\nM2bQZ60TGcuyO3bs6NevX3h4eHBwcJcuXRYsWHD//n3rHSwWS3Jycnx8fHBwcOPGjYcOHXrg\nwAHu2aFDh9LDcqXon7+EkMcee8xes3U63YIFC9q1a6dSqdq3bz9r1izr1Xi49Lp582Zu44kT\n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\n", + "text/plain": [ + "plot without title" + ] + }, + "metadata": { + "image/png": { + "height": 420, + "width": 420 + }, + "text/plain": { + "height": 420, + "width": 420 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "ind_num_select <- ggplot(ind_cts, aes(fill=method, y=num_select, x=as.factor(N))) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Independent\") + xlab(\"Number of Samples\") + ylab(\"# Selected Features\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\", \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both)\n", + "\n", + "toe1_num_select <- ggplot(toe_cts[toe_cts$Corr %in% 0.1,], aes(fill=method, y=num_select, x=as.factor(N))) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Toeplitz 0.1\") + xlab(\"Number of Samples\") + ylab(\"# Selected Features\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\", \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both)\n", + "\n", + "toe5_num_select <- ggplot(toe_cts[toe_cts$Corr %in% 0.5,], aes(fill=method, y=num_select, x=as.factor(N))) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Toeplitz 0.5\") + xlab(\"Number of Samples\") + ylab(\"# Selected Features\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\", \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both)\n", + "\n", + "toe9_num_select <- ggplot(toe_cts[toe_cts$Corr %in% 0.9,], aes(fill=method, y=num_select, x=as.factor(N))) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Toeplitz 0.9\") + xlab(\"Number of Samples\") + ylab(\"# Selected Features\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\", \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both)\n", + "\n", + "block9_num_select <- ggplot(block_cts[block_cts$Corr %in% 0.9,], aes(fill=method, y=num_select, x=as.factor(N))) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Block 0.9\") + xlab(\"Number of Samples\") + ylab(\"# Selected Features\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\", \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both)\n", + "\n", + "block1_num_select <- ggplot(block_cts[block_cts$Corr %in% 0.1,], aes(fill=method, y=num_select, x=as.factor(N))) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Block 0.1\") + xlab(\"Number of Samples\") + ylab(\"# Selected Features\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\", \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both)\n", + "\n", + "fig_cts_num_select <- ggarrange(ind_num_select, toe1_num_select, \n", + " toe5_num_select, toe9_num_select, \n", + " block9_num_select, block1_num_select, \n", + " nrow=3, ncol = 2, align = \"hv\", labels = \"AUTO\", \n", + " common.legend = T, legend = \"bottom\") \n", + "fig_cts_num_select\n", + "ggsave(\"../figures_combined/fig_cts_num_select.png\", fig_cts_num_select, dpi = 300, width = 6.5, height = 8)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_bin/0.1_sim_ind_lasso_binary_update.ipynb b/simulations/notebooks_sim_bin/0.1_sim_ind_lasso_binary_update.ipynb new file mode 100644 index 0000000..7532ddd --- /dev/null +++ b/simulations/notebooks_sim_bin/0.1_sim_ind_lasso_binary_update.ipynb @@ -0,0 +1,683 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize lasso results on Independent Simulation Scenarios for binary outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "files = NULL\n", + "for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_independent_', paste('P', p, 'N', n, sep='_'), '.RData'))\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "16" + ], + "text/latex": [ + "16" + ], + "text/markdown": [ + "16" + ], + "text/plain": [ + "[1] 16" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "length(files)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1] \"indx: 1\"\n", + "[1] \"indx: 2\"\n", + "[1] \"indx: 3\"\n", + "[1] \"indx: 4\"\n", + "[1] \"indx: 5\"\n", + "[1] \"indx: 6\"\n", + "[1] \"indx: 7\"\n", + "[1] \"indx: 8\"\n", + "[1] \"indx: 9\"\n", + "[1] \"indx: 10\"\n", + "[1] \"indx: 11\"\n", + "[1] \"indx: 12\"\n", + "[1] \"indx: 13\"\n", + "[1] \"indx: 14\"\n", + "[1] \"indx: 15\"\n", + "[1] \"indx: 16\"\n" + ] + } + ], + "source": [ + "avg_FDR = NULL\n", + "table_toe = NULL\n", + "tmp_num_select = rep(0, length(files))\n", + "for (i in 1:length(files)){\n", + " print(paste0('indx: ', i))\n", + " load(paste0(dir, '/binary_update/ind_Lasso_binary_', i, '.RData')) \n", + " \n", + " table_toe = rbind(table_toe, results_ind_lasso[c('n', 'p', 'rou', 'FP', 'FN', 'ROC', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_ind_lasso$Stab.table))\n", + " \n", + " # calculate FDR\n", + " load(file_name, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_ind_lasso$Stab.table\n", + " FDR = NULL # false positive rate\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}\n", + "table_toe = as.data.frame(table_toe)\n", + "table_toe$num_select = tmp_num_select\n", + "table_toe$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
1505003.69 ( 0.25 )2.5 ( 0.12 )0.74 ( 0.01 )0.33 6.190.37
21005007.16 ( 0.37 )0.64 ( 0.08 )0.85 ( 0.01 )0.3511.520.48
35005005.21 ( 0.21 )0 ( 0 )0.93 ( 0 )0.5310.210.39
410005002.25 ( 0.11 )0 ( 0 )0.93 ( 0 )0.8 7.250.15
55010005.13 ( 0.34 )2.93 ( 0.1 )0.73 ( 0.01 )0.25 7.200.50
610010008.22 ( 0.44 )1.03 ( 0.09 )0.83 ( 0.01 )0.3212.190.54
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0 & 3.69 ( 0.25 ) & 2.5 ( 0.12 ) & 0.74 ( 0.01 ) & 0.33 & 6.19 & 0.37\\\\\n", + "\t2 & 100 & 50 & 0 & 7.16 ( 0.37 ) & 0.64 ( 0.08 ) & 0.85 ( 0.01 ) & 0.35 & 11.52 & 0.48\\\\\n", + "\t3 & 500 & 50 & 0 & 5.21 ( 0.21 ) & 0 ( 0 ) & 0.93 ( 0 ) & 0.53 & 10.21 & 0.39\\\\\n", + "\t4 & 1000 & 50 & 0 & 2.25 ( 0.11 ) & 0 ( 0 ) & 0.93 ( 0 ) & 0.8 & 7.25 & 0.15\\\\\n", + "\t5 & 50 & 100 & 0 & 5.13 ( 0.34 ) & 2.93 ( 0.1 ) & 0.73 ( 0.01 ) & 0.25 & 7.20 & 0.50\\\\\n", + "\t6 & 100 & 100 & 0 & 8.22 ( 0.44 ) & 1.03 ( 0.09 ) & 0.83 ( 0.01 ) & 0.32 & 12.19 & 0.54\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0 | 3.69 ( 0.25 ) | 2.5 ( 0.12 ) | 0.74 ( 0.01 ) | 0.33 | 6.19 | 0.37 |\n", + "| 2 | 100 | 50 | 0 | 7.16 ( 0.37 ) | 0.64 ( 0.08 ) | 0.85 ( 0.01 ) | 0.35 | 11.52 | 0.48 |\n", + "| 3 | 500 | 50 | 0 | 5.21 ( 0.21 ) | 0 ( 0 ) | 0.93 ( 0 ) | 0.53 | 10.21 | 0.39 |\n", + "| 4 | 1000 | 50 | 0 | 2.25 ( 0.11 ) | 0 ( 0 ) | 0.93 ( 0 ) | 0.8 | 7.25 | 0.15 |\n", + "| 5 | 50 | 100 | 0 | 5.13 ( 0.34 ) | 2.93 ( 0.1 ) | 0.73 ( 0.01 ) | 0.25 | 7.20 | 0.50 |\n", + "| 6 | 100 | 100 | 0 | 8.22 ( 0.44 ) | 1.03 ( 0.09 ) | 0.83 ( 0.01 ) | 0.32 | 12.19 | 0.54 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select FDR \n", + "1 50 50 0 3.69 ( 0.25 ) 2.5 ( 0.12 ) 0.74 ( 0.01 ) 0.33 6.19 0.37\n", + "2 100 50 0 7.16 ( 0.37 ) 0.64 ( 0.08 ) 0.85 ( 0.01 ) 0.35 11.52 0.48\n", + "3 500 50 0 5.21 ( 0.21 ) 0 ( 0 ) 0.93 ( 0 ) 0.53 10.21 0.39\n", + "4 1000 50 0 2.25 ( 0.11 ) 0 ( 0 ) 0.93 ( 0 ) 0.8 7.25 0.15\n", + "5 50 100 0 5.13 ( 0.34 ) 2.93 ( 0.1 ) 0.73 ( 0.01 ) 0.25 7.20 0.50\n", + "6 100 100 0 8.22 ( 0.44 ) 1.03 ( 0.09 ) 0.83 ( 0.01 ) 0.32 12.19 0.54" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
11500500023.83 ( 0.69 )0 ( 0 )0.92 ( 0 )0.228.830.78
121000500011.38 ( 0.41 )0 ( 0 )0.93 ( 0 )0.3616.380.60
1350100009.77 ( 0.24 )4.03 ( 0.08 )0.67 ( 0.01 )0.0910.740.81
141001000011.91 ( 0.8 )2.32 ( 0.1 )0.78 ( 0.01 )0.214.590.66
155001000030.84 ( 0.92 )0 ( 0 )0.91 ( 0 )0.1635.840.82
1610001000019.96 ( 0.61 )0 ( 0 )0.93 ( 0 )0.2424.960.74
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t11 & 500 & 500 & 0 & 23.83 ( 0.69 ) & 0 ( 0 ) & 0.92 ( 0 ) & 0.2 & 28.83 & 0.78\\\\\n", + "\t12 & 1000 & 500 & 0 & 11.38 ( 0.41 ) & 0 ( 0 ) & 0.93 ( 0 ) & 0.36 & 16.38 & 0.60\\\\\n", + "\t13 & 50 & 1000 & 0 & 9.77 ( 0.24 ) & 4.03 ( 0.08 ) & 0.67 ( 0.01 ) & 0.09 & 10.74 & 0.81\\\\\n", + "\t14 & 100 & 1000 & 0 & 11.91 ( 0.8 ) & 2.32 ( 0.1 ) & 0.78 ( 0.01 ) & 0.2 & 14.59 & 0.66\\\\\n", + "\t15 & 500 & 1000 & 0 & 30.84 ( 0.92 ) & 0 ( 0 ) & 0.91 ( 0 ) & 0.16 & 35.84 & 0.82\\\\\n", + "\t16 & 1000 & 1000 & 0 & 19.96 ( 0.61 ) & 0 ( 0 ) & 0.93 ( 0 ) & 0.24 & 24.96 & 0.74\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 11 | 500 | 500 | 0 | 23.83 ( 0.69 ) | 0 ( 0 ) | 0.92 ( 0 ) | 0.2 | 28.83 | 0.78 |\n", + "| 12 | 1000 | 500 | 0 | 11.38 ( 0.41 ) | 0 ( 0 ) | 0.93 ( 0 ) | 0.36 | 16.38 | 0.60 |\n", + "| 13 | 50 | 1000 | 0 | 9.77 ( 0.24 ) | 4.03 ( 0.08 ) | 0.67 ( 0.01 ) | 0.09 | 10.74 | 0.81 |\n", + "| 14 | 100 | 1000 | 0 | 11.91 ( 0.8 ) | 2.32 ( 0.1 ) | 0.78 ( 0.01 ) | 0.2 | 14.59 | 0.66 |\n", + "| 15 | 500 | 1000 | 0 | 30.84 ( 0.92 ) | 0 ( 0 ) | 0.91 ( 0 ) | 0.16 | 35.84 | 0.82 |\n", + "| 16 | 1000 | 1000 | 0 | 19.96 ( 0.61 ) | 0 ( 0 ) | 0.93 ( 0 ) | 0.24 | 24.96 | 0.74 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select\n", + "11 500 500 0 23.83 ( 0.69 ) 0 ( 0 ) 0.92 ( 0 ) 0.2 28.83 \n", + "12 1000 500 0 11.38 ( 0.41 ) 0 ( 0 ) 0.93 ( 0 ) 0.36 16.38 \n", + "13 50 1000 0 9.77 ( 0.24 ) 4.03 ( 0.08 ) 0.67 ( 0.01 ) 0.09 10.74 \n", + "14 100 1000 0 11.91 ( 0.8 ) 2.32 ( 0.1 ) 0.78 ( 0.01 ) 0.2 14.59 \n", + "15 500 1000 0 30.84 ( 0.92 ) 0 ( 0 ) 0.91 ( 0 ) 0.16 35.84 \n", + "16 1000 1000 0 19.96 ( 0.61 ) 0 ( 0 ) 0.93 ( 0 ) 0.24 24.96 \n", + " FDR \n", + "11 0.78\n", + "12 0.60\n", + "13 0.81\n", + "14 0.66\n", + "15 0.82\n", + "16 0.74" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_toe <- apply(table_toe,2,as.character)\n", + "rownames(result.table_toe) = rownames(table_toe)\n", + "result.table_toe = as.data.frame(result.table_toe)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_toe$n = tidyr::extract_numeric(result.table_toe$n)\n", + "result.table_toe$p = tidyr::extract_numeric(result.table_toe$p)\n", + "result.table_toe$ratio = result.table_toe$p / result.table_toe$n\n", + "\n", + "result.table_toe = result.table_toe[c('n', 'p', 'rou', 'ratio', 'Stab', 'ROC', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_toe)[1:4] = c('N', 'P', 'Corr', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_toe$Stab = as.numeric(as.character(result.table_toe$Stab))\n", + "result.table_toe$num_select = as.numeric(as.character(result.table_toe$num_select))\n", + "\n", + "result.table_toe$ROC_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$ROC))\n", + "result.table_toe$FP_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$FP))\n", + "result.table_toe$FN_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$FN))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "
A data.frame: 0 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
\n" + ], + "text/latex": [ + "A data.frame: 0 × 13\n", + "\\begin{tabular}{lllllllllllll}\n", + " N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 0 × 13\n", + "\n", + "| N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select FDR ROC_mean FP_mean FN_mean" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check whether missing values exists\n", + "result.table_toe[rowSums(is.na(result.table_toe)) > 0,]" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 5001.000.330.74 ( 0.01 )3.69 ( 0.25 )2.5 ( 0.12 ) 6.190.370.743.692.50
2 100 5000.500.350.85 ( 0.01 )7.16 ( 0.37 )0.64 ( 0.08 )11.520.480.857.160.64
3 500 5000.100.530.93 ( 0 ) 5.21 ( 0.21 )0 ( 0 ) 10.210.390.935.210.00
41000 5000.050.800.93 ( 0 ) 2.25 ( 0.11 )0 ( 0 ) 7.250.150.932.250.00
5 5010002.000.250.73 ( 0.01 )5.13 ( 0.34 )2.93 ( 0.1 ) 7.200.5 0.735.132.93
6 10010001.000.320.83 ( 0.01 )8.22 ( 0.44 )1.03 ( 0.09 )12.190.540.838.221.03
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0 & 1.00 & 0.33 & 0.74 ( 0.01 ) & 3.69 ( 0.25 ) & 2.5 ( 0.12 ) & 6.19 & 0.37 & 0.74 & 3.69 & 2.50\\\\\n", + "\t2 & 100 & 50 & 0 & 0.50 & 0.35 & 0.85 ( 0.01 ) & 7.16 ( 0.37 ) & 0.64 ( 0.08 ) & 11.52 & 0.48 & 0.85 & 7.16 & 0.64\\\\\n", + "\t3 & 500 & 50 & 0 & 0.10 & 0.53 & 0.93 ( 0 ) & 5.21 ( 0.21 ) & 0 ( 0 ) & 10.21 & 0.39 & 0.93 & 5.21 & 0.00\\\\\n", + "\t4 & 1000 & 50 & 0 & 0.05 & 0.80 & 0.93 ( 0 ) & 2.25 ( 0.11 ) & 0 ( 0 ) & 7.25 & 0.15 & 0.93 & 2.25 & 0.00\\\\\n", + "\t5 & 50 & 100 & 0 & 2.00 & 0.25 & 0.73 ( 0.01 ) & 5.13 ( 0.34 ) & 2.93 ( 0.1 ) & 7.20 & 0.5 & 0.73 & 5.13 & 2.93\\\\\n", + "\t6 & 100 & 100 & 0 & 1.00 & 0.32 & 0.83 ( 0.01 ) & 8.22 ( 0.44 ) & 1.03 ( 0.09 ) & 12.19 & 0.54 & 0.83 & 8.22 & 1.03\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0 | 1.00 | 0.33 | 0.74 ( 0.01 ) | 3.69 ( 0.25 ) | 2.5 ( 0.12 ) | 6.19 | 0.37 | 0.74 | 3.69 | 2.50 |\n", + "| 2 | 100 | 50 | 0 | 0.50 | 0.35 | 0.85 ( 0.01 ) | 7.16 ( 0.37 ) | 0.64 ( 0.08 ) | 11.52 | 0.48 | 0.85 | 7.16 | 0.64 |\n", + "| 3 | 500 | 50 | 0 | 0.10 | 0.53 | 0.93 ( 0 ) | 5.21 ( 0.21 ) | 0 ( 0 ) | 10.21 | 0.39 | 0.93 | 5.21 | 0.00 |\n", + "| 4 | 1000 | 50 | 0 | 0.05 | 0.80 | 0.93 ( 0 ) | 2.25 ( 0.11 ) | 0 ( 0 ) | 7.25 | 0.15 | 0.93 | 2.25 | 0.00 |\n", + "| 5 | 50 | 100 | 0 | 2.00 | 0.25 | 0.73 ( 0.01 ) | 5.13 ( 0.34 ) | 2.93 ( 0.1 ) | 7.20 | 0.5 | 0.73 | 5.13 | 2.93 |\n", + "| 6 | 100 | 100 | 0 | 1.00 | 0.32 | 0.83 ( 0.01 ) | 8.22 ( 0.44 ) | 1.03 ( 0.09 ) | 12.19 | 0.54 | 0.83 | 8.22 | 1.03 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select\n", + "1 50 50 0 1.00 0.33 0.74 ( 0.01 ) 3.69 ( 0.25 ) 2.5 ( 0.12 ) 6.19 \n", + "2 100 50 0 0.50 0.35 0.85 ( 0.01 ) 7.16 ( 0.37 ) 0.64 ( 0.08 ) 11.52 \n", + "3 500 50 0 0.10 0.53 0.93 ( 0 ) 5.21 ( 0.21 ) 0 ( 0 ) 10.21 \n", + "4 1000 50 0 0.05 0.80 0.93 ( 0 ) 2.25 ( 0.11 ) 0 ( 0 ) 7.25 \n", + "5 50 100 0 2.00 0.25 0.73 ( 0.01 ) 5.13 ( 0.34 ) 2.93 ( 0.1 ) 7.20 \n", + "6 100 100 0 1.00 0.32 0.83 ( 0.01 ) 8.22 ( 0.44 ) 1.03 ( 0.09 ) 12.19 \n", + " FDR ROC_mean FP_mean FN_mean\n", + "1 0.37 0.74 3.69 2.50 \n", + "2 0.48 0.85 7.16 0.64 \n", + "3 0.39 0.93 5.21 0.00 \n", + "4 0.15 0.93 2.25 0.00 \n", + "5 0.5 0.73 5.13 2.93 \n", + "6 0.54 0.83 8.22 1.03 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
11 500 5000 1.00.200.92 ( 0 ) 23.83 ( 0.69 )0 ( 0 ) 28.830.780.9223.830.00
121000 5000 0.50.360.93 ( 0 ) 11.38 ( 0.41 )0 ( 0 ) 16.380.6 0.9311.380.00
13 501000020.00.090.67 ( 0.01 )9.77 ( 0.24 ) 4.03 ( 0.08 )10.740.810.67 9.774.03
14 1001000010.00.200.78 ( 0.01 )11.91 ( 0.8 ) 2.32 ( 0.1 ) 14.590.660.7811.912.32
15 50010000 2.00.160.91 ( 0 ) 30.84 ( 0.92 )0 ( 0 ) 35.840.820.9130.840.00
16100010000 1.00.240.93 ( 0 ) 19.96 ( 0.61 )0 ( 0 ) 24.960.740.9319.960.00
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t11 & 500 & 500 & 0 & 1.0 & 0.20 & 0.92 ( 0 ) & 23.83 ( 0.69 ) & 0 ( 0 ) & 28.83 & 0.78 & 0.92 & 23.83 & 0.00\\\\\n", + "\t12 & 1000 & 500 & 0 & 0.5 & 0.36 & 0.93 ( 0 ) & 11.38 ( 0.41 ) & 0 ( 0 ) & 16.38 & 0.6 & 0.93 & 11.38 & 0.00\\\\\n", + "\t13 & 50 & 1000 & 0 & 20.0 & 0.09 & 0.67 ( 0.01 ) & 9.77 ( 0.24 ) & 4.03 ( 0.08 ) & 10.74 & 0.81 & 0.67 & 9.77 & 4.03\\\\\n", + "\t14 & 100 & 1000 & 0 & 10.0 & 0.20 & 0.78 ( 0.01 ) & 11.91 ( 0.8 ) & 2.32 ( 0.1 ) & 14.59 & 0.66 & 0.78 & 11.91 & 2.32\\\\\n", + "\t15 & 500 & 1000 & 0 & 2.0 & 0.16 & 0.91 ( 0 ) & 30.84 ( 0.92 ) & 0 ( 0 ) & 35.84 & 0.82 & 0.91 & 30.84 & 0.00\\\\\n", + "\t16 & 1000 & 1000 & 0 & 1.0 & 0.24 & 0.93 ( 0 ) & 19.96 ( 0.61 ) & 0 ( 0 ) & 24.96 & 0.74 & 0.93 & 19.96 & 0.00\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 11 | 500 | 500 | 0 | 1.0 | 0.20 | 0.92 ( 0 ) | 23.83 ( 0.69 ) | 0 ( 0 ) | 28.83 | 0.78 | 0.92 | 23.83 | 0.00 |\n", + "| 12 | 1000 | 500 | 0 | 0.5 | 0.36 | 0.93 ( 0 ) | 11.38 ( 0.41 ) | 0 ( 0 ) | 16.38 | 0.6 | 0.93 | 11.38 | 0.00 |\n", + "| 13 | 50 | 1000 | 0 | 20.0 | 0.09 | 0.67 ( 0.01 ) | 9.77 ( 0.24 ) | 4.03 ( 0.08 ) | 10.74 | 0.81 | 0.67 | 9.77 | 4.03 |\n", + "| 14 | 100 | 1000 | 0 | 10.0 | 0.20 | 0.78 ( 0.01 ) | 11.91 ( 0.8 ) | 2.32 ( 0.1 ) | 14.59 | 0.66 | 0.78 | 11.91 | 2.32 |\n", + "| 15 | 500 | 1000 | 0 | 2.0 | 0.16 | 0.91 ( 0 ) | 30.84 ( 0.92 ) | 0 ( 0 ) | 35.84 | 0.82 | 0.91 | 30.84 | 0.00 |\n", + "| 16 | 1000 | 1000 | 0 | 1.0 | 0.24 | 0.93 ( 0 ) | 19.96 ( 0.61 ) | 0 ( 0 ) | 24.96 | 0.74 | 0.93 | 19.96 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "11 500 500 0 1.0 0.20 0.92 ( 0 ) 23.83 ( 0.69 ) 0 ( 0 ) \n", + "12 1000 500 0 0.5 0.36 0.93 ( 0 ) 11.38 ( 0.41 ) 0 ( 0 ) \n", + "13 50 1000 0 20.0 0.09 0.67 ( 0.01 ) 9.77 ( 0.24 ) 4.03 ( 0.08 )\n", + "14 100 1000 0 10.0 0.20 0.78 ( 0.01 ) 11.91 ( 0.8 ) 2.32 ( 0.1 ) \n", + "15 500 1000 0 2.0 0.16 0.91 ( 0 ) 30.84 ( 0.92 ) 0 ( 0 ) \n", + "16 1000 1000 0 1.0 0.24 0.93 ( 0 ) 19.96 ( 0.61 ) 0 ( 0 ) \n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "11 28.83 0.78 0.92 23.83 0.00 \n", + "12 16.38 0.6 0.93 11.38 0.00 \n", + "13 10.74 0.81 0.67 9.77 4.03 \n", + "14 14.59 0.66 0.78 11.91 2.32 \n", + "15 35.84 0.82 0.91 30.84 0.00 \n", + "16 24.96 0.74 0.93 19.96 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 16 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 500 1.000.330.74 ( 0.01 )3.69 ( 0.25 ) 2.5 ( 0.12 ) 6.190.370.74 3.692.50
2 100 500 0.500.350.85 ( 0.01 )7.16 ( 0.37 ) 0.64 ( 0.08 )11.520.480.85 7.160.64
3 500 500 0.100.530.93 ( 0 ) 5.21 ( 0.21 ) 0 ( 0 ) 10.210.390.93 5.210.00
41000 500 0.050.800.93 ( 0 ) 2.25 ( 0.11 ) 0 ( 0 ) 7.250.150.93 2.250.00
5 50 1000 2.000.250.73 ( 0.01 )5.13 ( 0.34 ) 2.93 ( 0.1 ) 7.200.5 0.73 5.132.93
6 100 1000 1.000.320.83 ( 0.01 )8.22 ( 0.44 ) 1.03 ( 0.09 )12.190.540.83 8.221.03
7 500 1000 0.200.400.92 ( 0 ) 8.89 ( 0.29 ) 0 ( 0 ) 13.890.550.92 8.890.00
81000 1000 0.100.690.93 ( 0 ) 3.53 ( 0.16 ) 0 ( 0 ) 8.530.270.93 3.530.00
9 50 500010.000.130.7 ( 0.01 ) 8.05 ( 0.28 ) 3.74 ( 0.09 ) 9.310.740.70 8.053.74
10 100 5000 5.000.240.79 ( 0.01 )11.14 ( 0.64 )1.71 ( 0.1 ) 14.430.630.7911.141.71
11 500 5000 1.000.200.92 ( 0 ) 23.83 ( 0.69 )0 ( 0 ) 28.830.780.9223.830.00
121000 5000 0.500.360.93 ( 0 ) 11.38 ( 0.41 )0 ( 0 ) 16.380.6 0.9311.380.00
13 501000020.000.090.67 ( 0.01 )9.77 ( 0.24 ) 4.03 ( 0.08 )10.740.810.67 9.774.03
14 1001000010.000.200.78 ( 0.01 )11.91 ( 0.8 ) 2.32 ( 0.1 ) 14.590.660.7811.912.32
15 50010000 2.000.160.91 ( 0 ) 30.84 ( 0.92 )0 ( 0 ) 35.840.820.9130.840.00
16100010000 1.000.240.93 ( 0 ) 19.96 ( 0.61 )0 ( 0 ) 24.960.740.9319.960.00
\n" + ], + "text/latex": [ + "A data.frame: 16 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0 & 1.00 & 0.33 & 0.74 ( 0.01 ) & 3.69 ( 0.25 ) & 2.5 ( 0.12 ) & 6.19 & 0.37 & 0.74 & 3.69 & 2.50\\\\\n", + "\t2 & 100 & 50 & 0 & 0.50 & 0.35 & 0.85 ( 0.01 ) & 7.16 ( 0.37 ) & 0.64 ( 0.08 ) & 11.52 & 0.48 & 0.85 & 7.16 & 0.64\\\\\n", + "\t3 & 500 & 50 & 0 & 0.10 & 0.53 & 0.93 ( 0 ) & 5.21 ( 0.21 ) & 0 ( 0 ) & 10.21 & 0.39 & 0.93 & 5.21 & 0.00\\\\\n", + "\t4 & 1000 & 50 & 0 & 0.05 & 0.80 & 0.93 ( 0 ) & 2.25 ( 0.11 ) & 0 ( 0 ) & 7.25 & 0.15 & 0.93 & 2.25 & 0.00\\\\\n", + "\t5 & 50 & 100 & 0 & 2.00 & 0.25 & 0.73 ( 0.01 ) & 5.13 ( 0.34 ) & 2.93 ( 0.1 ) & 7.20 & 0.5 & 0.73 & 5.13 & 2.93\\\\\n", + "\t6 & 100 & 100 & 0 & 1.00 & 0.32 & 0.83 ( 0.01 ) & 8.22 ( 0.44 ) & 1.03 ( 0.09 ) & 12.19 & 0.54 & 0.83 & 8.22 & 1.03\\\\\n", + "\t7 & 500 & 100 & 0 & 0.20 & 0.40 & 0.92 ( 0 ) & 8.89 ( 0.29 ) & 0 ( 0 ) & 13.89 & 0.55 & 0.92 & 8.89 & 0.00\\\\\n", + "\t8 & 1000 & 100 & 0 & 0.10 & 0.69 & 0.93 ( 0 ) & 3.53 ( 0.16 ) & 0 ( 0 ) & 8.53 & 0.27 & 0.93 & 3.53 & 0.00\\\\\n", + "\t9 & 50 & 500 & 0 & 10.00 & 0.13 & 0.7 ( 0.01 ) & 8.05 ( 0.28 ) & 3.74 ( 0.09 ) & 9.31 & 0.74 & 0.70 & 8.05 & 3.74\\\\\n", + "\t10 & 100 & 500 & 0 & 5.00 & 0.24 & 0.79 ( 0.01 ) & 11.14 ( 0.64 ) & 1.71 ( 0.1 ) & 14.43 & 0.63 & 0.79 & 11.14 & 1.71\\\\\n", + "\t11 & 500 & 500 & 0 & 1.00 & 0.20 & 0.92 ( 0 ) & 23.83 ( 0.69 ) & 0 ( 0 ) & 28.83 & 0.78 & 0.92 & 23.83 & 0.00\\\\\n", + "\t12 & 1000 & 500 & 0 & 0.50 & 0.36 & 0.93 ( 0 ) & 11.38 ( 0.41 ) & 0 ( 0 ) & 16.38 & 0.6 & 0.93 & 11.38 & 0.00\\\\\n", + "\t13 & 50 & 1000 & 0 & 20.00 & 0.09 & 0.67 ( 0.01 ) & 9.77 ( 0.24 ) & 4.03 ( 0.08 ) & 10.74 & 0.81 & 0.67 & 9.77 & 4.03\\\\\n", + "\t14 & 100 & 1000 & 0 & 10.00 & 0.20 & 0.78 ( 0.01 ) & 11.91 ( 0.8 ) & 2.32 ( 0.1 ) & 14.59 & 0.66 & 0.78 & 11.91 & 2.32\\\\\n", + "\t15 & 500 & 1000 & 0 & 2.00 & 0.16 & 0.91 ( 0 ) & 30.84 ( 0.92 ) & 0 ( 0 ) & 35.84 & 0.82 & 0.91 & 30.84 & 0.00\\\\\n", + "\t16 & 1000 & 1000 & 0 & 1.00 & 0.24 & 0.93 ( 0 ) & 19.96 ( 0.61 ) & 0 ( 0 ) & 24.96 & 0.74 & 0.93 & 19.96 & 0.00\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 16 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0 | 1.00 | 0.33 | 0.74 ( 0.01 ) | 3.69 ( 0.25 ) | 2.5 ( 0.12 ) | 6.19 | 0.37 | 0.74 | 3.69 | 2.50 |\n", + "| 2 | 100 | 50 | 0 | 0.50 | 0.35 | 0.85 ( 0.01 ) | 7.16 ( 0.37 ) | 0.64 ( 0.08 ) | 11.52 | 0.48 | 0.85 | 7.16 | 0.64 |\n", + "| 3 | 500 | 50 | 0 | 0.10 | 0.53 | 0.93 ( 0 ) | 5.21 ( 0.21 ) | 0 ( 0 ) | 10.21 | 0.39 | 0.93 | 5.21 | 0.00 |\n", + "| 4 | 1000 | 50 | 0 | 0.05 | 0.80 | 0.93 ( 0 ) | 2.25 ( 0.11 ) | 0 ( 0 ) | 7.25 | 0.15 | 0.93 | 2.25 | 0.00 |\n", + "| 5 | 50 | 100 | 0 | 2.00 | 0.25 | 0.73 ( 0.01 ) | 5.13 ( 0.34 ) | 2.93 ( 0.1 ) | 7.20 | 0.5 | 0.73 | 5.13 | 2.93 |\n", + "| 6 | 100 | 100 | 0 | 1.00 | 0.32 | 0.83 ( 0.01 ) | 8.22 ( 0.44 ) | 1.03 ( 0.09 ) | 12.19 | 0.54 | 0.83 | 8.22 | 1.03 |\n", + "| 7 | 500 | 100 | 0 | 0.20 | 0.40 | 0.92 ( 0 ) | 8.89 ( 0.29 ) | 0 ( 0 ) | 13.89 | 0.55 | 0.92 | 8.89 | 0.00 |\n", + "| 8 | 1000 | 100 | 0 | 0.10 | 0.69 | 0.93 ( 0 ) | 3.53 ( 0.16 ) | 0 ( 0 ) | 8.53 | 0.27 | 0.93 | 3.53 | 0.00 |\n", + "| 9 | 50 | 500 | 0 | 10.00 | 0.13 | 0.7 ( 0.01 ) | 8.05 ( 0.28 ) | 3.74 ( 0.09 ) | 9.31 | 0.74 | 0.70 | 8.05 | 3.74 |\n", + "| 10 | 100 | 500 | 0 | 5.00 | 0.24 | 0.79 ( 0.01 ) | 11.14 ( 0.64 ) | 1.71 ( 0.1 ) | 14.43 | 0.63 | 0.79 | 11.14 | 1.71 |\n", + "| 11 | 500 | 500 | 0 | 1.00 | 0.20 | 0.92 ( 0 ) | 23.83 ( 0.69 ) | 0 ( 0 ) | 28.83 | 0.78 | 0.92 | 23.83 | 0.00 |\n", + "| 12 | 1000 | 500 | 0 | 0.50 | 0.36 | 0.93 ( 0 ) | 11.38 ( 0.41 ) | 0 ( 0 ) | 16.38 | 0.6 | 0.93 | 11.38 | 0.00 |\n", + "| 13 | 50 | 1000 | 0 | 20.00 | 0.09 | 0.67 ( 0.01 ) | 9.77 ( 0.24 ) | 4.03 ( 0.08 ) | 10.74 | 0.81 | 0.67 | 9.77 | 4.03 |\n", + "| 14 | 100 | 1000 | 0 | 10.00 | 0.20 | 0.78 ( 0.01 ) | 11.91 ( 0.8 ) | 2.32 ( 0.1 ) | 14.59 | 0.66 | 0.78 | 11.91 | 2.32 |\n", + "| 15 | 500 | 1000 | 0 | 2.00 | 0.16 | 0.91 ( 0 ) | 30.84 ( 0.92 ) | 0 ( 0 ) | 35.84 | 0.82 | 0.91 | 30.84 | 0.00 |\n", + "| 16 | 1000 | 1000 | 0 | 1.00 | 0.24 | 0.93 ( 0 ) | 19.96 ( 0.61 ) | 0 ( 0 ) | 24.96 | 0.74 | 0.93 | 19.96 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "1 50 50 0 1.00 0.33 0.74 ( 0.01 ) 3.69 ( 0.25 ) 2.5 ( 0.12 ) \n", + "2 100 50 0 0.50 0.35 0.85 ( 0.01 ) 7.16 ( 0.37 ) 0.64 ( 0.08 )\n", + "3 500 50 0 0.10 0.53 0.93 ( 0 ) 5.21 ( 0.21 ) 0 ( 0 ) \n", + "4 1000 50 0 0.05 0.80 0.93 ( 0 ) 2.25 ( 0.11 ) 0 ( 0 ) \n", + "5 50 100 0 2.00 0.25 0.73 ( 0.01 ) 5.13 ( 0.34 ) 2.93 ( 0.1 ) \n", + "6 100 100 0 1.00 0.32 0.83 ( 0.01 ) 8.22 ( 0.44 ) 1.03 ( 0.09 )\n", + "7 500 100 0 0.20 0.40 0.92 ( 0 ) 8.89 ( 0.29 ) 0 ( 0 ) \n", + "8 1000 100 0 0.10 0.69 0.93 ( 0 ) 3.53 ( 0.16 ) 0 ( 0 ) \n", + "9 50 500 0 10.00 0.13 0.7 ( 0.01 ) 8.05 ( 0.28 ) 3.74 ( 0.09 )\n", + "10 100 500 0 5.00 0.24 0.79 ( 0.01 ) 11.14 ( 0.64 ) 1.71 ( 0.1 ) \n", + "11 500 500 0 1.00 0.20 0.92 ( 0 ) 23.83 ( 0.69 ) 0 ( 0 ) \n", + "12 1000 500 0 0.50 0.36 0.93 ( 0 ) 11.38 ( 0.41 ) 0 ( 0 ) \n", + "13 50 1000 0 20.00 0.09 0.67 ( 0.01 ) 9.77 ( 0.24 ) 4.03 ( 0.08 )\n", + "14 100 1000 0 10.00 0.20 0.78 ( 0.01 ) 11.91 ( 0.8 ) 2.32 ( 0.1 ) \n", + "15 500 1000 0 2.00 0.16 0.91 ( 0 ) 30.84 ( 0.92 ) 0 ( 0 ) \n", + "16 1000 1000 0 1.00 0.24 0.93 ( 0 ) 19.96 ( 0.61 ) 0 ( 0 ) \n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "1 6.19 0.37 0.74 3.69 2.50 \n", + "2 11.52 0.48 0.85 7.16 0.64 \n", + "3 10.21 0.39 0.93 5.21 0.00 \n", + "4 7.25 0.15 0.93 2.25 0.00 \n", + "5 7.20 0.5 0.73 5.13 2.93 \n", + "6 12.19 0.54 0.83 8.22 1.03 \n", + "7 13.89 0.55 0.92 8.89 0.00 \n", + "8 8.53 0.27 0.93 3.53 0.00 \n", + "9 9.31 0.74 0.70 8.05 3.74 \n", + "10 14.43 0.63 0.79 11.14 1.71 \n", + "11 28.83 0.78 0.92 23.83 0.00 \n", + "12 16.38 0.6 0.93 11.38 0.00 \n", + "13 10.74 0.81 0.67 9.77 4.03 \n", + "14 14.59 0.66 0.78 11.91 2.32 \n", + "15 35.84 0.82 0.91 30.84 0.00 \n", + "16 24.96 0.74 0.93 19.96 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_toe\n", + "\n", + "## export\n", + "write.table(result.table_toe, '../results_summary_bin/sim_ind_lasso_binary.txt', \n", + " sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_bin/0.2_sim_ind_elnet_binary_update.ipynb b/simulations/notebooks_sim_bin/0.2_sim_ind_elnet_binary_update.ipynb new file mode 100644 index 0000000..da8ff21 --- /dev/null +++ b/simulations/notebooks_sim_bin/0.2_sim_ind_elnet_binary_update.ipynb @@ -0,0 +1,680 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize elastic net results on Independent Simulation Scenarios for binary outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "files = NULL\n", + "for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_independent_', paste('P', p, 'N', n, sep='_'), '.RData'))\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "16" + ], + "text/latex": [ + "16" + ], + "text/markdown": [ + "16" + ], + "text/plain": [ + "[1] 16" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "length(files)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1] \"indx: 1\"\n", + "[1] \"indx: 2\"\n", + "[1] \"indx: 3\"\n", + "[1] \"indx: 4\"\n", + "[1] \"indx: 5\"\n", + "[1] \"indx: 6\"\n", + "[1] \"indx: 7\"\n", + "[1] \"indx: 8\"\n", + "[1] \"indx: 9\"\n", + "[1] \"indx: 10\"\n", + "[1] \"indx: 11\"\n", + "[1] \"indx: 12\"\n", + "[1] \"indx: 13\"\n", + "[1] \"indx: 14\"\n", + "[1] \"indx: 15\"\n", + "[1] \"indx: 16\"\n" + ] + } + ], + "source": [ + "avg_FDR = NULL\n", + "table_toe = NULL\n", + "tmp_num_select = rep(0, length(files))\n", + "for (i in 1:length(files)){\n", + " print(paste0('indx: ', i))\n", + " load(paste0(dir, '/binary_update/ind_Elnet_binary_', i, '.RData')) \n", + " \n", + " table_toe = rbind(table_toe, results_ind_elnet[c('n', 'p', 'rou', 'FP', 'FN', 'ROC', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_ind_elnet$Stab.table))\n", + " \n", + " # calculate FDR\n", + " load(file_name, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_ind_elnet$Stab.table\n", + " FDR = NULL # false positive rate\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}\n", + "table_toe = as.data.frame(table_toe)\n", + "table_toe$num_select = tmp_num_select\n", + "table_toe$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
15050012.04 ( 0.89 )1.42 ( 0.11 )0.76 ( 0.01 )0.1515.620.61
210050011.44 ( 0.76 )0.46 ( 0.07 )0.84 ( 0.01 )0.2315.980.56
35005008.74 ( 0.72 )0 ( 0 )0.92 ( 0 )0.3613.740.45
410005007.56 ( 0.72 )0 ( 0 )0.93 ( 0 )0.4112.560.40
550100018.92 ( 1.7 )1.81 ( 0.12 )0.72 ( 0.01 )0.122.110.72
6100100012.48 ( 0.9 )0.96 ( 0.09 )0.82 ( 0.01 )0.2216.520.58
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0 & 12.04 ( 0.89 ) & 1.42 ( 0.11 ) & 0.76 ( 0.01 ) & 0.15 & 15.62 & 0.61\\\\\n", + "\t2 & 100 & 50 & 0 & 11.44 ( 0.76 ) & 0.46 ( 0.07 ) & 0.84 ( 0.01 ) & 0.23 & 15.98 & 0.56\\\\\n", + "\t3 & 500 & 50 & 0 & 8.74 ( 0.72 ) & 0 ( 0 ) & 0.92 ( 0 ) & 0.36 & 13.74 & 0.45\\\\\n", + "\t4 & 1000 & 50 & 0 & 7.56 ( 0.72 ) & 0 ( 0 ) & 0.93 ( 0 ) & 0.41 & 12.56 & 0.40\\\\\n", + "\t5 & 50 & 100 & 0 & 18.92 ( 1.7 ) & 1.81 ( 0.12 ) & 0.72 ( 0.01 ) & 0.1 & 22.11 & 0.72\\\\\n", + "\t6 & 100 & 100 & 0 & 12.48 ( 0.9 ) & 0.96 ( 0.09 ) & 0.82 ( 0.01 ) & 0.22 & 16.52 & 0.58\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0 | 12.04 ( 0.89 ) | 1.42 ( 0.11 ) | 0.76 ( 0.01 ) | 0.15 | 15.62 | 0.61 |\n", + "| 2 | 100 | 50 | 0 | 11.44 ( 0.76 ) | 0.46 ( 0.07 ) | 0.84 ( 0.01 ) | 0.23 | 15.98 | 0.56 |\n", + "| 3 | 500 | 50 | 0 | 8.74 ( 0.72 ) | 0 ( 0 ) | 0.92 ( 0 ) | 0.36 | 13.74 | 0.45 |\n", + "| 4 | 1000 | 50 | 0 | 7.56 ( 0.72 ) | 0 ( 0 ) | 0.93 ( 0 ) | 0.41 | 12.56 | 0.40 |\n", + "| 5 | 50 | 100 | 0 | 18.92 ( 1.7 ) | 1.81 ( 0.12 ) | 0.72 ( 0.01 ) | 0.1 | 22.11 | 0.72 |\n", + "| 6 | 100 | 100 | 0 | 12.48 ( 0.9 ) | 0.96 ( 0.09 ) | 0.82 ( 0.01 ) | 0.22 | 16.52 | 0.58 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select FDR \n", + "1 50 50 0 12.04 ( 0.89 ) 1.42 ( 0.11 ) 0.76 ( 0.01 ) 0.15 15.62 0.61\n", + "2 100 50 0 11.44 ( 0.76 ) 0.46 ( 0.07 ) 0.84 ( 0.01 ) 0.23 15.98 0.56\n", + "3 500 50 0 8.74 ( 0.72 ) 0 ( 0 ) 0.92 ( 0 ) 0.36 13.74 0.45\n", + "4 1000 50 0 7.56 ( 0.72 ) 0 ( 0 ) 0.93 ( 0 ) 0.41 12.56 0.40\n", + "5 50 100 0 18.92 ( 1.7 ) 1.81 ( 0.12 ) 0.72 ( 0.01 ) 0.1 22.11 0.72\n", + "6 100 100 0 12.48 ( 0.9 ) 0.96 ( 0.09 ) 0.82 ( 0.01 ) 0.22 16.52 0.58" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
11500500016.79 ( 1.47 )0 ( 0 )0.92 ( 0 )0.2721.790.61
121000500011.47 ( 1.14 )0 ( 0 )0.93 ( 0 )0.3616.470.48
13501000072.88 ( 8.55 )2.89 ( 0.13 )0.67 ( 0.01 )0.0274.990.91
141001000029.95 ( 4.05 )2 ( 0.1 )0.76 ( 0.01 )0.0932.950.77
155001000019.47 ( 1.76 )0 ( 0 )0.91 ( 0 )0.2424.470.62
1610001000018.47 ( 1.76 )0 ( 0 )0.93 ( 0 )0.2523.470.58
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t11 & 500 & 500 & 0 & 16.79 ( 1.47 ) & 0 ( 0 ) & 0.92 ( 0 ) & 0.27 & 21.79 & 0.61\\\\\n", + "\t12 & 1000 & 500 & 0 & 11.47 ( 1.14 ) & 0 ( 0 ) & 0.93 ( 0 ) & 0.36 & 16.47 & 0.48\\\\\n", + "\t13 & 50 & 1000 & 0 & 72.88 ( 8.55 ) & 2.89 ( 0.13 ) & 0.67 ( 0.01 ) & 0.02 & 74.99 & 0.91\\\\\n", + "\t14 & 100 & 1000 & 0 & 29.95 ( 4.05 ) & 2 ( 0.1 ) & 0.76 ( 0.01 ) & 0.09 & 32.95 & 0.77\\\\\n", + "\t15 & 500 & 1000 & 0 & 19.47 ( 1.76 ) & 0 ( 0 ) & 0.91 ( 0 ) & 0.24 & 24.47 & 0.62\\\\\n", + "\t16 & 1000 & 1000 & 0 & 18.47 ( 1.76 ) & 0 ( 0 ) & 0.93 ( 0 ) & 0.25 & 23.47 & 0.58\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 11 | 500 | 500 | 0 | 16.79 ( 1.47 ) | 0 ( 0 ) | 0.92 ( 0 ) | 0.27 | 21.79 | 0.61 |\n", + "| 12 | 1000 | 500 | 0 | 11.47 ( 1.14 ) | 0 ( 0 ) | 0.93 ( 0 ) | 0.36 | 16.47 | 0.48 |\n", + "| 13 | 50 | 1000 | 0 | 72.88 ( 8.55 ) | 2.89 ( 0.13 ) | 0.67 ( 0.01 ) | 0.02 | 74.99 | 0.91 |\n", + "| 14 | 100 | 1000 | 0 | 29.95 ( 4.05 ) | 2 ( 0.1 ) | 0.76 ( 0.01 ) | 0.09 | 32.95 | 0.77 |\n", + "| 15 | 500 | 1000 | 0 | 19.47 ( 1.76 ) | 0 ( 0 ) | 0.91 ( 0 ) | 0.24 | 24.47 | 0.62 |\n", + "| 16 | 1000 | 1000 | 0 | 18.47 ( 1.76 ) | 0 ( 0 ) | 0.93 ( 0 ) | 0.25 | 23.47 | 0.58 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select\n", + "11 500 500 0 16.79 ( 1.47 ) 0 ( 0 ) 0.92 ( 0 ) 0.27 21.79 \n", + "12 1000 500 0 11.47 ( 1.14 ) 0 ( 0 ) 0.93 ( 0 ) 0.36 16.47 \n", + "13 50 1000 0 72.88 ( 8.55 ) 2.89 ( 0.13 ) 0.67 ( 0.01 ) 0.02 74.99 \n", + "14 100 1000 0 29.95 ( 4.05 ) 2 ( 0.1 ) 0.76 ( 0.01 ) 0.09 32.95 \n", + "15 500 1000 0 19.47 ( 1.76 ) 0 ( 0 ) 0.91 ( 0 ) 0.24 24.47 \n", + "16 1000 1000 0 18.47 ( 1.76 ) 0 ( 0 ) 0.93 ( 0 ) 0.25 23.47 \n", + " FDR \n", + "11 0.61\n", + "12 0.48\n", + "13 0.91\n", + "14 0.77\n", + "15 0.62\n", + "16 0.58" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_toe <- apply(table_toe,2,as.character)\n", + "rownames(result.table_toe) = rownames(table_toe)\n", + "result.table_toe = as.data.frame(result.table_toe)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_toe$n = tidyr::extract_numeric(result.table_toe$n)\n", + "result.table_toe$p = tidyr::extract_numeric(result.table_toe$p)\n", + "result.table_toe$ratio = result.table_toe$p / result.table_toe$n\n", + "\n", + "result.table_toe = result.table_toe[c('n', 'p', 'rou', 'ratio', 'Stab', 'ROC', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_toe)[1:4] = c('N', 'P', 'Corr', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_toe$Stab = as.numeric(as.character(result.table_toe$Stab))\n", + "result.table_toe$num_select = as.numeric(as.character(result.table_toe$num_select))\n", + "\n", + "result.table_toe$ROC_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$ROC))\n", + "result.table_toe$FP_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$FP))\n", + "result.table_toe$FN_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$FN))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "
A data.frame: 0 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
\n" + ], + "text/latex": [ + "A data.frame: 0 × 13\n", + "\\begin{tabular}{lllllllllllll}\n", + " N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 0 × 13\n", + "\n", + "| N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select FDR ROC_mean FP_mean FN_mean" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check whether missing values exists\n", + "result.table_toe[rowSums(is.na(result.table_toe)) > 0,]" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 5001.000.150.76 ( 0.01 )12.04 ( 0.89 )1.42 ( 0.11 )15.620.610.7612.041.42
2 100 5000.500.230.84 ( 0.01 )11.44 ( 0.76 )0.46 ( 0.07 )15.980.560.8411.440.46
3 500 5000.100.360.92 ( 0 ) 8.74 ( 0.72 ) 0 ( 0 ) 13.740.450.92 8.740.00
41000 5000.050.410.93 ( 0 ) 7.56 ( 0.72 ) 0 ( 0 ) 12.560.4 0.93 7.560.00
5 5010002.000.100.72 ( 0.01 )18.92 ( 1.7 ) 1.81 ( 0.12 )22.110.720.7218.921.81
6 10010001.000.220.82 ( 0.01 )12.48 ( 0.9 ) 0.96 ( 0.09 )16.520.580.8212.480.96
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0 & 1.00 & 0.15 & 0.76 ( 0.01 ) & 12.04 ( 0.89 ) & 1.42 ( 0.11 ) & 15.62 & 0.61 & 0.76 & 12.04 & 1.42\\\\\n", + "\t2 & 100 & 50 & 0 & 0.50 & 0.23 & 0.84 ( 0.01 ) & 11.44 ( 0.76 ) & 0.46 ( 0.07 ) & 15.98 & 0.56 & 0.84 & 11.44 & 0.46\\\\\n", + "\t3 & 500 & 50 & 0 & 0.10 & 0.36 & 0.92 ( 0 ) & 8.74 ( 0.72 ) & 0 ( 0 ) & 13.74 & 0.45 & 0.92 & 8.74 & 0.00\\\\\n", + "\t4 & 1000 & 50 & 0 & 0.05 & 0.41 & 0.93 ( 0 ) & 7.56 ( 0.72 ) & 0 ( 0 ) & 12.56 & 0.4 & 0.93 & 7.56 & 0.00\\\\\n", + "\t5 & 50 & 100 & 0 & 2.00 & 0.10 & 0.72 ( 0.01 ) & 18.92 ( 1.7 ) & 1.81 ( 0.12 ) & 22.11 & 0.72 & 0.72 & 18.92 & 1.81\\\\\n", + "\t6 & 100 & 100 & 0 & 1.00 & 0.22 & 0.82 ( 0.01 ) & 12.48 ( 0.9 ) & 0.96 ( 0.09 ) & 16.52 & 0.58 & 0.82 & 12.48 & 0.96\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0 | 1.00 | 0.15 | 0.76 ( 0.01 ) | 12.04 ( 0.89 ) | 1.42 ( 0.11 ) | 15.62 | 0.61 | 0.76 | 12.04 | 1.42 |\n", + "| 2 | 100 | 50 | 0 | 0.50 | 0.23 | 0.84 ( 0.01 ) | 11.44 ( 0.76 ) | 0.46 ( 0.07 ) | 15.98 | 0.56 | 0.84 | 11.44 | 0.46 |\n", + "| 3 | 500 | 50 | 0 | 0.10 | 0.36 | 0.92 ( 0 ) | 8.74 ( 0.72 ) | 0 ( 0 ) | 13.74 | 0.45 | 0.92 | 8.74 | 0.00 |\n", + "| 4 | 1000 | 50 | 0 | 0.05 | 0.41 | 0.93 ( 0 ) | 7.56 ( 0.72 ) | 0 ( 0 ) | 12.56 | 0.4 | 0.93 | 7.56 | 0.00 |\n", + "| 5 | 50 | 100 | 0 | 2.00 | 0.10 | 0.72 ( 0.01 ) | 18.92 ( 1.7 ) | 1.81 ( 0.12 ) | 22.11 | 0.72 | 0.72 | 18.92 | 1.81 |\n", + "| 6 | 100 | 100 | 0 | 1.00 | 0.22 | 0.82 ( 0.01 ) | 12.48 ( 0.9 ) | 0.96 ( 0.09 ) | 16.52 | 0.58 | 0.82 | 12.48 | 0.96 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "1 50 50 0 1.00 0.15 0.76 ( 0.01 ) 12.04 ( 0.89 ) 1.42 ( 0.11 )\n", + "2 100 50 0 0.50 0.23 0.84 ( 0.01 ) 11.44 ( 0.76 ) 0.46 ( 0.07 )\n", + "3 500 50 0 0.10 0.36 0.92 ( 0 ) 8.74 ( 0.72 ) 0 ( 0 ) \n", + "4 1000 50 0 0.05 0.41 0.93 ( 0 ) 7.56 ( 0.72 ) 0 ( 0 ) \n", + "5 50 100 0 2.00 0.10 0.72 ( 0.01 ) 18.92 ( 1.7 ) 1.81 ( 0.12 )\n", + "6 100 100 0 1.00 0.22 0.82 ( 0.01 ) 12.48 ( 0.9 ) 0.96 ( 0.09 )\n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "1 15.62 0.61 0.76 12.04 1.42 \n", + "2 15.98 0.56 0.84 11.44 0.46 \n", + "3 13.74 0.45 0.92 8.74 0.00 \n", + "4 12.56 0.4 0.93 7.56 0.00 \n", + "5 22.11 0.72 0.72 18.92 1.81 \n", + "6 16.52 0.58 0.82 12.48 0.96 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
11 500 5000 1.00.270.92 ( 0 ) 16.79 ( 1.47 )0 ( 0 ) 21.790.610.9216.790.00
121000 5000 0.50.360.93 ( 0 ) 11.47 ( 1.14 )0 ( 0 ) 16.470.480.9311.470.00
13 501000020.00.020.67 ( 0.01 )72.88 ( 8.55 )2.89 ( 0.13 )74.990.910.6772.882.89
14 1001000010.00.090.76 ( 0.01 )29.95 ( 4.05 )2 ( 0.1 ) 32.950.770.7629.952.00
15 50010000 2.00.240.91 ( 0 ) 19.47 ( 1.76 )0 ( 0 ) 24.470.620.9119.470.00
16100010000 1.00.250.93 ( 0 ) 18.47 ( 1.76 )0 ( 0 ) 23.470.580.9318.470.00
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t11 & 500 & 500 & 0 & 1.0 & 0.27 & 0.92 ( 0 ) & 16.79 ( 1.47 ) & 0 ( 0 ) & 21.79 & 0.61 & 0.92 & 16.79 & 0.00\\\\\n", + "\t12 & 1000 & 500 & 0 & 0.5 & 0.36 & 0.93 ( 0 ) & 11.47 ( 1.14 ) & 0 ( 0 ) & 16.47 & 0.48 & 0.93 & 11.47 & 0.00\\\\\n", + "\t13 & 50 & 1000 & 0 & 20.0 & 0.02 & 0.67 ( 0.01 ) & 72.88 ( 8.55 ) & 2.89 ( 0.13 ) & 74.99 & 0.91 & 0.67 & 72.88 & 2.89\\\\\n", + "\t14 & 100 & 1000 & 0 & 10.0 & 0.09 & 0.76 ( 0.01 ) & 29.95 ( 4.05 ) & 2 ( 0.1 ) & 32.95 & 0.77 & 0.76 & 29.95 & 2.00\\\\\n", + "\t15 & 500 & 1000 & 0 & 2.0 & 0.24 & 0.91 ( 0 ) & 19.47 ( 1.76 ) & 0 ( 0 ) & 24.47 & 0.62 & 0.91 & 19.47 & 0.00\\\\\n", + "\t16 & 1000 & 1000 & 0 & 1.0 & 0.25 & 0.93 ( 0 ) & 18.47 ( 1.76 ) & 0 ( 0 ) & 23.47 & 0.58 & 0.93 & 18.47 & 0.00\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 11 | 500 | 500 | 0 | 1.0 | 0.27 | 0.92 ( 0 ) | 16.79 ( 1.47 ) | 0 ( 0 ) | 21.79 | 0.61 | 0.92 | 16.79 | 0.00 |\n", + "| 12 | 1000 | 500 | 0 | 0.5 | 0.36 | 0.93 ( 0 ) | 11.47 ( 1.14 ) | 0 ( 0 ) | 16.47 | 0.48 | 0.93 | 11.47 | 0.00 |\n", + "| 13 | 50 | 1000 | 0 | 20.0 | 0.02 | 0.67 ( 0.01 ) | 72.88 ( 8.55 ) | 2.89 ( 0.13 ) | 74.99 | 0.91 | 0.67 | 72.88 | 2.89 |\n", + "| 14 | 100 | 1000 | 0 | 10.0 | 0.09 | 0.76 ( 0.01 ) | 29.95 ( 4.05 ) | 2 ( 0.1 ) | 32.95 | 0.77 | 0.76 | 29.95 | 2.00 |\n", + "| 15 | 500 | 1000 | 0 | 2.0 | 0.24 | 0.91 ( 0 ) | 19.47 ( 1.76 ) | 0 ( 0 ) | 24.47 | 0.62 | 0.91 | 19.47 | 0.00 |\n", + "| 16 | 1000 | 1000 | 0 | 1.0 | 0.25 | 0.93 ( 0 ) | 18.47 ( 1.76 ) | 0 ( 0 ) | 23.47 | 0.58 | 0.93 | 18.47 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "11 500 500 0 1.0 0.27 0.92 ( 0 ) 16.79 ( 1.47 ) 0 ( 0 ) \n", + "12 1000 500 0 0.5 0.36 0.93 ( 0 ) 11.47 ( 1.14 ) 0 ( 0 ) \n", + "13 50 1000 0 20.0 0.02 0.67 ( 0.01 ) 72.88 ( 8.55 ) 2.89 ( 0.13 )\n", + "14 100 1000 0 10.0 0.09 0.76 ( 0.01 ) 29.95 ( 4.05 ) 2 ( 0.1 ) \n", + "15 500 1000 0 2.0 0.24 0.91 ( 0 ) 19.47 ( 1.76 ) 0 ( 0 ) \n", + "16 1000 1000 0 1.0 0.25 0.93 ( 0 ) 18.47 ( 1.76 ) 0 ( 0 ) \n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "11 21.79 0.61 0.92 16.79 0.00 \n", + "12 16.47 0.48 0.93 11.47 0.00 \n", + "13 74.99 0.91 0.67 72.88 2.89 \n", + "14 32.95 0.77 0.76 29.95 2.00 \n", + "15 24.47 0.62 0.91 19.47 0.00 \n", + "16 23.47 0.58 0.93 18.47 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 16 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 500 1.000.150.76 ( 0.01 )12.04 ( 0.89 )1.42 ( 0.11 )15.620.610.7612.041.42
2 100 500 0.500.230.84 ( 0.01 )11.44 ( 0.76 )0.46 ( 0.07 )15.980.560.8411.440.46
3 500 500 0.100.360.92 ( 0 ) 8.74 ( 0.72 ) 0 ( 0 ) 13.740.450.92 8.740.00
41000 500 0.050.410.93 ( 0 ) 7.56 ( 0.72 ) 0 ( 0 ) 12.560.4 0.93 7.560.00
5 50 1000 2.000.100.72 ( 0.01 )18.92 ( 1.7 ) 1.81 ( 0.12 )22.110.720.7218.921.81
6 100 1000 1.000.220.82 ( 0.01 )12.48 ( 0.9 ) 0.96 ( 0.09 )16.520.580.8212.480.96
7 500 1000 0.200.320.92 ( 0 ) 11.78 ( 0.99 )0 ( 0 ) 16.780.520.9211.780.00
81000 1000 0.100.340.93 ( 0 ) 10.71 ( 1.03 )0 ( 0 ) 15.710.470.9310.710.00
9 50 500010.000.030.68 ( 0.01 )57.17 ( 5.72 )2.27 ( 0.13 )59.900.880.6857.172.27
10 100 5000 5.000.150.77 ( 0.01 )20.84 ( 2.08 )1.49 ( 0.1 ) 24.350.690.7720.841.49
11 500 5000 1.000.270.92 ( 0 ) 16.79 ( 1.47 )0 ( 0 ) 21.790.610.9216.790.00
121000 5000 0.500.360.93 ( 0 ) 11.47 ( 1.14 )0 ( 0 ) 16.470.480.9311.470.00
13 501000020.000.020.67 ( 0.01 )72.88 ( 8.55 )2.89 ( 0.13 )74.990.910.6772.882.89
14 1001000010.000.090.76 ( 0.01 )29.95 ( 4.05 )2 ( 0.1 ) 32.950.770.7629.952.00
15 50010000 2.000.240.91 ( 0 ) 19.47 ( 1.76 )0 ( 0 ) 24.470.620.9119.470.00
16100010000 1.000.250.93 ( 0 ) 18.47 ( 1.76 )0 ( 0 ) 23.470.580.9318.470.00
\n" + ], + "text/latex": [ + "A data.frame: 16 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0 & 1.00 & 0.15 & 0.76 ( 0.01 ) & 12.04 ( 0.89 ) & 1.42 ( 0.11 ) & 15.62 & 0.61 & 0.76 & 12.04 & 1.42\\\\\n", + "\t2 & 100 & 50 & 0 & 0.50 & 0.23 & 0.84 ( 0.01 ) & 11.44 ( 0.76 ) & 0.46 ( 0.07 ) & 15.98 & 0.56 & 0.84 & 11.44 & 0.46\\\\\n", + "\t3 & 500 & 50 & 0 & 0.10 & 0.36 & 0.92 ( 0 ) & 8.74 ( 0.72 ) & 0 ( 0 ) & 13.74 & 0.45 & 0.92 & 8.74 & 0.00\\\\\n", + "\t4 & 1000 & 50 & 0 & 0.05 & 0.41 & 0.93 ( 0 ) & 7.56 ( 0.72 ) & 0 ( 0 ) & 12.56 & 0.4 & 0.93 & 7.56 & 0.00\\\\\n", + "\t5 & 50 & 100 & 0 & 2.00 & 0.10 & 0.72 ( 0.01 ) & 18.92 ( 1.7 ) & 1.81 ( 0.12 ) & 22.11 & 0.72 & 0.72 & 18.92 & 1.81\\\\\n", + "\t6 & 100 & 100 & 0 & 1.00 & 0.22 & 0.82 ( 0.01 ) & 12.48 ( 0.9 ) & 0.96 ( 0.09 ) & 16.52 & 0.58 & 0.82 & 12.48 & 0.96\\\\\n", + "\t7 & 500 & 100 & 0 & 0.20 & 0.32 & 0.92 ( 0 ) & 11.78 ( 0.99 ) & 0 ( 0 ) & 16.78 & 0.52 & 0.92 & 11.78 & 0.00\\\\\n", + "\t8 & 1000 & 100 & 0 & 0.10 & 0.34 & 0.93 ( 0 ) & 10.71 ( 1.03 ) & 0 ( 0 ) & 15.71 & 0.47 & 0.93 & 10.71 & 0.00\\\\\n", + "\t9 & 50 & 500 & 0 & 10.00 & 0.03 & 0.68 ( 0.01 ) & 57.17 ( 5.72 ) & 2.27 ( 0.13 ) & 59.90 & 0.88 & 0.68 & 57.17 & 2.27\\\\\n", + "\t10 & 100 & 500 & 0 & 5.00 & 0.15 & 0.77 ( 0.01 ) & 20.84 ( 2.08 ) & 1.49 ( 0.1 ) & 24.35 & 0.69 & 0.77 & 20.84 & 1.49\\\\\n", + "\t11 & 500 & 500 & 0 & 1.00 & 0.27 & 0.92 ( 0 ) & 16.79 ( 1.47 ) & 0 ( 0 ) & 21.79 & 0.61 & 0.92 & 16.79 & 0.00\\\\\n", + "\t12 & 1000 & 500 & 0 & 0.50 & 0.36 & 0.93 ( 0 ) & 11.47 ( 1.14 ) & 0 ( 0 ) & 16.47 & 0.48 & 0.93 & 11.47 & 0.00\\\\\n", + "\t13 & 50 & 1000 & 0 & 20.00 & 0.02 & 0.67 ( 0.01 ) & 72.88 ( 8.55 ) & 2.89 ( 0.13 ) & 74.99 & 0.91 & 0.67 & 72.88 & 2.89\\\\\n", + "\t14 & 100 & 1000 & 0 & 10.00 & 0.09 & 0.76 ( 0.01 ) & 29.95 ( 4.05 ) & 2 ( 0.1 ) & 32.95 & 0.77 & 0.76 & 29.95 & 2.00\\\\\n", + "\t15 & 500 & 1000 & 0 & 2.00 & 0.24 & 0.91 ( 0 ) & 19.47 ( 1.76 ) & 0 ( 0 ) & 24.47 & 0.62 & 0.91 & 19.47 & 0.00\\\\\n", + "\t16 & 1000 & 1000 & 0 & 1.00 & 0.25 & 0.93 ( 0 ) & 18.47 ( 1.76 ) & 0 ( 0 ) & 23.47 & 0.58 & 0.93 & 18.47 & 0.00\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 16 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0 | 1.00 | 0.15 | 0.76 ( 0.01 ) | 12.04 ( 0.89 ) | 1.42 ( 0.11 ) | 15.62 | 0.61 | 0.76 | 12.04 | 1.42 |\n", + "| 2 | 100 | 50 | 0 | 0.50 | 0.23 | 0.84 ( 0.01 ) | 11.44 ( 0.76 ) | 0.46 ( 0.07 ) | 15.98 | 0.56 | 0.84 | 11.44 | 0.46 |\n", + "| 3 | 500 | 50 | 0 | 0.10 | 0.36 | 0.92 ( 0 ) | 8.74 ( 0.72 ) | 0 ( 0 ) | 13.74 | 0.45 | 0.92 | 8.74 | 0.00 |\n", + "| 4 | 1000 | 50 | 0 | 0.05 | 0.41 | 0.93 ( 0 ) | 7.56 ( 0.72 ) | 0 ( 0 ) | 12.56 | 0.4 | 0.93 | 7.56 | 0.00 |\n", + "| 5 | 50 | 100 | 0 | 2.00 | 0.10 | 0.72 ( 0.01 ) | 18.92 ( 1.7 ) | 1.81 ( 0.12 ) | 22.11 | 0.72 | 0.72 | 18.92 | 1.81 |\n", + "| 6 | 100 | 100 | 0 | 1.00 | 0.22 | 0.82 ( 0.01 ) | 12.48 ( 0.9 ) | 0.96 ( 0.09 ) | 16.52 | 0.58 | 0.82 | 12.48 | 0.96 |\n", + "| 7 | 500 | 100 | 0 | 0.20 | 0.32 | 0.92 ( 0 ) | 11.78 ( 0.99 ) | 0 ( 0 ) | 16.78 | 0.52 | 0.92 | 11.78 | 0.00 |\n", + "| 8 | 1000 | 100 | 0 | 0.10 | 0.34 | 0.93 ( 0 ) | 10.71 ( 1.03 ) | 0 ( 0 ) | 15.71 | 0.47 | 0.93 | 10.71 | 0.00 |\n", + "| 9 | 50 | 500 | 0 | 10.00 | 0.03 | 0.68 ( 0.01 ) | 57.17 ( 5.72 ) | 2.27 ( 0.13 ) | 59.90 | 0.88 | 0.68 | 57.17 | 2.27 |\n", + "| 10 | 100 | 500 | 0 | 5.00 | 0.15 | 0.77 ( 0.01 ) | 20.84 ( 2.08 ) | 1.49 ( 0.1 ) | 24.35 | 0.69 | 0.77 | 20.84 | 1.49 |\n", + "| 11 | 500 | 500 | 0 | 1.00 | 0.27 | 0.92 ( 0 ) | 16.79 ( 1.47 ) | 0 ( 0 ) | 21.79 | 0.61 | 0.92 | 16.79 | 0.00 |\n", + "| 12 | 1000 | 500 | 0 | 0.50 | 0.36 | 0.93 ( 0 ) | 11.47 ( 1.14 ) | 0 ( 0 ) | 16.47 | 0.48 | 0.93 | 11.47 | 0.00 |\n", + "| 13 | 50 | 1000 | 0 | 20.00 | 0.02 | 0.67 ( 0.01 ) | 72.88 ( 8.55 ) | 2.89 ( 0.13 ) | 74.99 | 0.91 | 0.67 | 72.88 | 2.89 |\n", + "| 14 | 100 | 1000 | 0 | 10.00 | 0.09 | 0.76 ( 0.01 ) | 29.95 ( 4.05 ) | 2 ( 0.1 ) | 32.95 | 0.77 | 0.76 | 29.95 | 2.00 |\n", + "| 15 | 500 | 1000 | 0 | 2.00 | 0.24 | 0.91 ( 0 ) | 19.47 ( 1.76 ) | 0 ( 0 ) | 24.47 | 0.62 | 0.91 | 19.47 | 0.00 |\n", + "| 16 | 1000 | 1000 | 0 | 1.00 | 0.25 | 0.93 ( 0 ) | 18.47 ( 1.76 ) | 0 ( 0 ) | 23.47 | 0.58 | 0.93 | 18.47 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "1 50 50 0 1.00 0.15 0.76 ( 0.01 ) 12.04 ( 0.89 ) 1.42 ( 0.11 )\n", + "2 100 50 0 0.50 0.23 0.84 ( 0.01 ) 11.44 ( 0.76 ) 0.46 ( 0.07 )\n", + "3 500 50 0 0.10 0.36 0.92 ( 0 ) 8.74 ( 0.72 ) 0 ( 0 ) \n", + "4 1000 50 0 0.05 0.41 0.93 ( 0 ) 7.56 ( 0.72 ) 0 ( 0 ) \n", + "5 50 100 0 2.00 0.10 0.72 ( 0.01 ) 18.92 ( 1.7 ) 1.81 ( 0.12 )\n", + "6 100 100 0 1.00 0.22 0.82 ( 0.01 ) 12.48 ( 0.9 ) 0.96 ( 0.09 )\n", + "7 500 100 0 0.20 0.32 0.92 ( 0 ) 11.78 ( 0.99 ) 0 ( 0 ) \n", + "8 1000 100 0 0.10 0.34 0.93 ( 0 ) 10.71 ( 1.03 ) 0 ( 0 ) \n", + "9 50 500 0 10.00 0.03 0.68 ( 0.01 ) 57.17 ( 5.72 ) 2.27 ( 0.13 )\n", + "10 100 500 0 5.00 0.15 0.77 ( 0.01 ) 20.84 ( 2.08 ) 1.49 ( 0.1 ) \n", + "11 500 500 0 1.00 0.27 0.92 ( 0 ) 16.79 ( 1.47 ) 0 ( 0 ) \n", + "12 1000 500 0 0.50 0.36 0.93 ( 0 ) 11.47 ( 1.14 ) 0 ( 0 ) \n", + "13 50 1000 0 20.00 0.02 0.67 ( 0.01 ) 72.88 ( 8.55 ) 2.89 ( 0.13 )\n", + "14 100 1000 0 10.00 0.09 0.76 ( 0.01 ) 29.95 ( 4.05 ) 2 ( 0.1 ) \n", + "15 500 1000 0 2.00 0.24 0.91 ( 0 ) 19.47 ( 1.76 ) 0 ( 0 ) \n", + "16 1000 1000 0 1.00 0.25 0.93 ( 0 ) 18.47 ( 1.76 ) 0 ( 0 ) \n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "1 15.62 0.61 0.76 12.04 1.42 \n", + "2 15.98 0.56 0.84 11.44 0.46 \n", + "3 13.74 0.45 0.92 8.74 0.00 \n", + "4 12.56 0.4 0.93 7.56 0.00 \n", + "5 22.11 0.72 0.72 18.92 1.81 \n", + "6 16.52 0.58 0.82 12.48 0.96 \n", + "7 16.78 0.52 0.92 11.78 0.00 \n", + "8 15.71 0.47 0.93 10.71 0.00 \n", + "9 59.90 0.88 0.68 57.17 2.27 \n", + "10 24.35 0.69 0.77 20.84 1.49 \n", + "11 21.79 0.61 0.92 16.79 0.00 \n", + "12 16.47 0.48 0.93 11.47 0.00 \n", + "13 74.99 0.91 0.67 72.88 2.89 \n", + "14 32.95 0.77 0.76 29.95 2.00 \n", + "15 24.47 0.62 0.91 19.47 0.00 \n", + "16 23.47 0.58 0.93 18.47 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_toe\n", + "\n", + "## export\n", + "write.table(result.table_toe, '../results_summary_bin/sim_ind_Elnet_binary.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_bin/0.3_sim_ind_rf_binary_update.ipynb b/simulations/notebooks_sim_bin/0.3_sim_ind_rf_binary_update.ipynb new file mode 100644 index 0000000..6dfa2c6 --- /dev/null +++ b/simulations/notebooks_sim_bin/0.3_sim_ind_rf_binary_update.ipynb @@ -0,0 +1,694 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize random forests results on Independent Simulation Scenarios for binary outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "files = NULL\n", + "for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_independent_', paste('P', p, 'N', n, sep='_'), '.RData'))\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "16" + ], + "text/latex": [ + "16" + ], + "text/markdown": [ + "16" + ], + "text/plain": [ + "[1] 16" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "length(files)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1] \"indx: 1\"\n", + "[1] \"indx: 2\"\n", + "[1] \"indx: 3\"\n", + "[1] \"indx: 4\"\n", + "[1] \"indx: 5\"\n", + "[1] \"indx: 6\"\n", + "[1] \"indx: 7\"\n", + "[1] \"indx: 8\"\n", + "[1] \"indx: 9\"\n", + "[1] \"indx: 10\"\n", + "[1] \"indx: 11\"\n", + "[1] \"indx: 12\"\n", + "[1] \"indx: 13\"\n", + "[1] \"indx: 14\"\n", + "[1] \"indx: 15\"\n", + "[1] \"indx: 16\"\n" + ] + } + ], + "source": [ + "avg_FDR = NULL\n", + "table_toe = NULL\n", + "tmp_num_select = rep(0, length(files))\n", + "for (i in 1:length(files)){\n", + " print(paste0('indx: ', i))\n", + " load(paste0(dir, '/binary_update/ind_RF_binary_', i, '.RData')) \n", + " \n", + " table_toe = rbind(table_toe, results_ind_rf[c('n', 'p', 'rou', 'FP', 'FN', 'ROC', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_ind_rf$Stab.table))\n", + " \n", + " # calculate FDR\n", + " load(file_name, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_ind_rf$Stab.table\n", + " FDR = NULL # false positive rate\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}\n", + "table_toe = as.data.frame(table_toe)\n", + "table_toe$num_select = tmp_num_select\n", + "table_toe$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
1505001 ( 0 )6 ( 0 )1 ( 0 )NaN0.00 NaN
21005001.97 ( 0.13 )4.62 ( 0.08 )1 ( 0 )0.13.340.55
35005001.26 ( 0.12 )2.19 ( 0.08 )1 ( 0 )0.545.070.22
410005000.86 ( 0.09 )1.12 ( 0.08 )1 ( 0 )0.735.740.13
55010001 ( 0 )6 ( 0 )1 ( 0 )NaN0.00 NaN
610010004.29 ( 0.17 )4.79 ( 0.09 )1 ( 0 )0.055.500.77
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0 & 1 ( 0 ) & 6 ( 0 ) & 1 ( 0 ) & NaN & 0.00 & NaN\\\\\n", + "\t2 & 100 & 50 & 0 & 1.97 ( 0.13 ) & 4.62 ( 0.08 ) & 1 ( 0 ) & 0.1 & 3.34 & 0.55\\\\\n", + "\t3 & 500 & 50 & 0 & 1.26 ( 0.12 ) & 2.19 ( 0.08 ) & 1 ( 0 ) & 0.54 & 5.07 & 0.22\\\\\n", + "\t4 & 1000 & 50 & 0 & 0.86 ( 0.09 ) & 1.12 ( 0.08 ) & 1 ( 0 ) & 0.73 & 5.74 & 0.13\\\\\n", + "\t5 & 50 & 100 & 0 & 1 ( 0 ) & 6 ( 0 ) & 1 ( 0 ) & NaN & 0.00 & NaN\\\\\n", + "\t6 & 100 & 100 & 0 & 4.29 ( 0.17 ) & 4.79 ( 0.09 ) & 1 ( 0 ) & 0.05 & 5.50 & 0.77\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0 | 1 ( 0 ) | 6 ( 0 ) | 1 ( 0 ) | NaN | 0.00 | NaN |\n", + "| 2 | 100 | 50 | 0 | 1.97 ( 0.13 ) | 4.62 ( 0.08 ) | 1 ( 0 ) | 0.1 | 3.34 | 0.55 |\n", + "| 3 | 500 | 50 | 0 | 1.26 ( 0.12 ) | 2.19 ( 0.08 ) | 1 ( 0 ) | 0.54 | 5.07 | 0.22 |\n", + "| 4 | 1000 | 50 | 0 | 0.86 ( 0.09 ) | 1.12 ( 0.08 ) | 1 ( 0 ) | 0.73 | 5.74 | 0.13 |\n", + "| 5 | 50 | 100 | 0 | 1 ( 0 ) | 6 ( 0 ) | 1 ( 0 ) | NaN | 0.00 | NaN |\n", + "| 6 | 100 | 100 | 0 | 4.29 ( 0.17 ) | 4.79 ( 0.09 ) | 1 ( 0 ) | 0.05 | 5.50 | 0.77 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select FDR \n", + "1 50 50 0 1 ( 0 ) 6 ( 0 ) 1 ( 0 ) NaN 0.00 NaN\n", + "2 100 50 0 1.97 ( 0.13 ) 4.62 ( 0.08 ) 1 ( 0 ) 0.1 3.34 0.55\n", + "3 500 50 0 1.26 ( 0.12 ) 2.19 ( 0.08 ) 1 ( 0 ) 0.54 5.07 0.22\n", + "4 1000 50 0 0.86 ( 0.09 ) 1.12 ( 0.08 ) 1 ( 0 ) 0.73 5.74 0.13\n", + "5 50 100 0 1 ( 0 ) 6 ( 0 ) 1 ( 0 ) NaN 0.00 NaN\n", + "6 100 100 0 4.29 ( 0.17 ) 4.79 ( 0.09 ) 1 ( 0 ) 0.05 5.50 0.77" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
11500500023.08 ( 0.51 )2.34 ( 0.1 )1 ( 0 )0.0926.740.86
121000500022.72 ( 0.46 )1.34 ( 0.08 )1 ( 0 )0.1427.380.83
1350100001 ( 0 )6 ( 0 )1 ( 0 )NaN 0.00 NaN
141001000046.76 ( 0.67 )4.86 ( 0.09 )1 ( 0 )0.0147.900.98
155001000047.82 ( 0.66 )2.5 ( 0.1 )1 ( 0 )0.0451.320.93
1610001000047.14 ( 0.77 )1.46 ( 0.08 )1 ( 0 )0.0751.680.91
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t11 & 500 & 500 & 0 & 23.08 ( 0.51 ) & 2.34 ( 0.1 ) & 1 ( 0 ) & 0.09 & 26.74 & 0.86\\\\\n", + "\t12 & 1000 & 500 & 0 & 22.72 ( 0.46 ) & 1.34 ( 0.08 ) & 1 ( 0 ) & 0.14 & 27.38 & 0.83\\\\\n", + "\t13 & 50 & 1000 & 0 & 1 ( 0 ) & 6 ( 0 ) & 1 ( 0 ) & NaN & 0.00 & NaN\\\\\n", + "\t14 & 100 & 1000 & 0 & 46.76 ( 0.67 ) & 4.86 ( 0.09 ) & 1 ( 0 ) & 0.01 & 47.90 & 0.98\\\\\n", + "\t15 & 500 & 1000 & 0 & 47.82 ( 0.66 ) & 2.5 ( 0.1 ) & 1 ( 0 ) & 0.04 & 51.32 & 0.93\\\\\n", + "\t16 & 1000 & 1000 & 0 & 47.14 ( 0.77 ) & 1.46 ( 0.08 ) & 1 ( 0 ) & 0.07 & 51.68 & 0.91\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 11 | 500 | 500 | 0 | 23.08 ( 0.51 ) | 2.34 ( 0.1 ) | 1 ( 0 ) | 0.09 | 26.74 | 0.86 |\n", + "| 12 | 1000 | 500 | 0 | 22.72 ( 0.46 ) | 1.34 ( 0.08 ) | 1 ( 0 ) | 0.14 | 27.38 | 0.83 |\n", + "| 13 | 50 | 1000 | 0 | 1 ( 0 ) | 6 ( 0 ) | 1 ( 0 ) | NaN | 0.00 | NaN |\n", + "| 14 | 100 | 1000 | 0 | 46.76 ( 0.67 ) | 4.86 ( 0.09 ) | 1 ( 0 ) | 0.01 | 47.90 | 0.98 |\n", + "| 15 | 500 | 1000 | 0 | 47.82 ( 0.66 ) | 2.5 ( 0.1 ) | 1 ( 0 ) | 0.04 | 51.32 | 0.93 |\n", + "| 16 | 1000 | 1000 | 0 | 47.14 ( 0.77 ) | 1.46 ( 0.08 ) | 1 ( 0 ) | 0.07 | 51.68 | 0.91 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select FDR \n", + "11 500 500 0 23.08 ( 0.51 ) 2.34 ( 0.1 ) 1 ( 0 ) 0.09 26.74 0.86\n", + "12 1000 500 0 22.72 ( 0.46 ) 1.34 ( 0.08 ) 1 ( 0 ) 0.14 27.38 0.83\n", + "13 50 1000 0 1 ( 0 ) 6 ( 0 ) 1 ( 0 ) NaN 0.00 NaN\n", + "14 100 1000 0 46.76 ( 0.67 ) 4.86 ( 0.09 ) 1 ( 0 ) 0.01 47.90 0.98\n", + "15 500 1000 0 47.82 ( 0.66 ) 2.5 ( 0.1 ) 1 ( 0 ) 0.04 51.32 0.93\n", + "16 1000 1000 0 47.14 ( 0.77 ) 1.46 ( 0.08 ) 1 ( 0 ) 0.07 51.68 0.91" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_toe <- apply(table_toe,2,as.character)\n", + "rownames(result.table_toe) = rownames(table_toe)\n", + "result.table_toe = as.data.frame(result.table_toe)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_toe$n = tidyr::extract_numeric(result.table_toe$n)\n", + "result.table_toe$p = tidyr::extract_numeric(result.table_toe$p)\n", + "result.table_toe$ratio = result.table_toe$p / result.table_toe$n\n", + "\n", + "result.table_toe = result.table_toe[c('n', 'p', 'rou', 'ratio', 'Stab', 'ROC', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_toe)[1:4] = c('N', 'P', 'Corr', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_toe$Stab = as.numeric(as.character(result.table_toe$Stab))\n", + "result.table_toe$num_select = as.numeric(as.character(result.table_toe$num_select))\n", + "\n", + "result.table_toe$ROC_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$ROC))\n", + "result.table_toe$FP_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$FP))\n", + "result.table_toe$FN_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$FN))" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 4 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
150 500 1NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
550 1000 2NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
950 500010NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
13501000020NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
\n" + ], + "text/latex": [ + "A data.frame: 4 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0 & 1 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t5 & 50 & 100 & 0 & 2 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t9 & 50 & 500 & 0 & 10 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t13 & 50 & 1000 & 0 & 20 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 4 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0 | 1 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 5 | 50 | 100 | 0 | 2 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 9 | 50 | 500 | 0 | 10 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 13 | 50 | 1000 | 0 | 20 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select FDR ROC_mean\n", + "1 50 50 0 1 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "5 50 100 0 2 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "9 50 500 0 10 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "13 50 1000 0 20 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + " FP_mean FN_mean\n", + "1 1 6 \n", + "5 1 6 \n", + "9 1 6 \n", + "13 1 6 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check whether missing values exists\n", + "result.table_toe[rowSums(is.na(result.table_toe)) > 0,]" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 5001.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 11.006.00
2 100 5000.500.101 ( 0 )1.97 ( 0.13 )4.62 ( 0.08 )3.340.5511.974.62
3 500 5000.100.541 ( 0 )1.26 ( 0.12 )2.19 ( 0.08 )5.070.2211.262.19
41000 5000.050.731 ( 0 )0.86 ( 0.09 )1.12 ( 0.08 )5.740.1310.861.12
5 5010002.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 11.006.00
6 10010001.000.051 ( 0 )4.29 ( 0.17 )4.79 ( 0.09 )5.500.7714.294.79
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0 & 1.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t2 & 100 & 50 & 0 & 0.50 & 0.10 & 1 ( 0 ) & 1.97 ( 0.13 ) & 4.62 ( 0.08 ) & 3.34 & 0.55 & 1 & 1.97 & 4.62\\\\\n", + "\t3 & 500 & 50 & 0 & 0.10 & 0.54 & 1 ( 0 ) & 1.26 ( 0.12 ) & 2.19 ( 0.08 ) & 5.07 & 0.22 & 1 & 1.26 & 2.19\\\\\n", + "\t4 & 1000 & 50 & 0 & 0.05 & 0.73 & 1 ( 0 ) & 0.86 ( 0.09 ) & 1.12 ( 0.08 ) & 5.74 & 0.13 & 1 & 0.86 & 1.12\\\\\n", + "\t5 & 50 & 100 & 0 & 2.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t6 & 100 & 100 & 0 & 1.00 & 0.05 & 1 ( 0 ) & 4.29 ( 0.17 ) & 4.79 ( 0.09 ) & 5.50 & 0.77 & 1 & 4.29 & 4.79\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0 | 1.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 2 | 100 | 50 | 0 | 0.50 | 0.10 | 1 ( 0 ) | 1.97 ( 0.13 ) | 4.62 ( 0.08 ) | 3.34 | 0.55 | 1 | 1.97 | 4.62 |\n", + "| 3 | 500 | 50 | 0 | 0.10 | 0.54 | 1 ( 0 ) | 1.26 ( 0.12 ) | 2.19 ( 0.08 ) | 5.07 | 0.22 | 1 | 1.26 | 2.19 |\n", + "| 4 | 1000 | 50 | 0 | 0.05 | 0.73 | 1 ( 0 ) | 0.86 ( 0.09 ) | 1.12 ( 0.08 ) | 5.74 | 0.13 | 1 | 0.86 | 1.12 |\n", + "| 5 | 50 | 100 | 0 | 2.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 6 | 100 | 100 | 0 | 1.00 | 0.05 | 1 ( 0 ) | 4.29 ( 0.17 ) | 4.79 ( 0.09 ) | 5.50 | 0.77 | 1 | 4.29 | 4.79 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select FDR \n", + "1 50 50 0 1.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 NaN \n", + "2 100 50 0 0.50 0.10 1 ( 0 ) 1.97 ( 0.13 ) 4.62 ( 0.08 ) 3.34 0.55\n", + "3 500 50 0 0.10 0.54 1 ( 0 ) 1.26 ( 0.12 ) 2.19 ( 0.08 ) 5.07 0.22\n", + "4 1000 50 0 0.05 0.73 1 ( 0 ) 0.86 ( 0.09 ) 1.12 ( 0.08 ) 5.74 0.13\n", + "5 50 100 0 2.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 NaN \n", + "6 100 100 0 1.00 0.05 1 ( 0 ) 4.29 ( 0.17 ) 4.79 ( 0.09 ) 5.50 0.77\n", + " ROC_mean FP_mean FN_mean\n", + "1 1 1.00 6.00 \n", + "2 1 1.97 4.62 \n", + "3 1 1.26 2.19 \n", + "4 1 0.86 1.12 \n", + "5 1 1.00 6.00 \n", + "6 1 4.29 4.79 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
11 500 5000 1.00.091 ( 0 )23.08 ( 0.51 )2.34 ( 0.1 ) 26.740.86123.082.34
121000 5000 0.50.141 ( 0 )22.72 ( 0.46 )1.34 ( 0.08 )27.380.83122.721.34
13 501000020.0 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
14 1001000010.00.011 ( 0 )46.76 ( 0.67 )4.86 ( 0.09 )47.900.98146.764.86
15 50010000 2.00.041 ( 0 )47.82 ( 0.66 )2.5 ( 0.1 ) 51.320.93147.822.50
16100010000 1.00.071 ( 0 )47.14 ( 0.77 )1.46 ( 0.08 )51.680.91147.141.46
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t11 & 500 & 500 & 0 & 1.0 & 0.09 & 1 ( 0 ) & 23.08 ( 0.51 ) & 2.34 ( 0.1 ) & 26.74 & 0.86 & 1 & 23.08 & 2.34\\\\\n", + "\t12 & 1000 & 500 & 0 & 0.5 & 0.14 & 1 ( 0 ) & 22.72 ( 0.46 ) & 1.34 ( 0.08 ) & 27.38 & 0.83 & 1 & 22.72 & 1.34\\\\\n", + "\t13 & 50 & 1000 & 0 & 20.0 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t14 & 100 & 1000 & 0 & 10.0 & 0.01 & 1 ( 0 ) & 46.76 ( 0.67 ) & 4.86 ( 0.09 ) & 47.90 & 0.98 & 1 & 46.76 & 4.86\\\\\n", + "\t15 & 500 & 1000 & 0 & 2.0 & 0.04 & 1 ( 0 ) & 47.82 ( 0.66 ) & 2.5 ( 0.1 ) & 51.32 & 0.93 & 1 & 47.82 & 2.50\\\\\n", + "\t16 & 1000 & 1000 & 0 & 1.0 & 0.07 & 1 ( 0 ) & 47.14 ( 0.77 ) & 1.46 ( 0.08 ) & 51.68 & 0.91 & 1 & 47.14 & 1.46\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 11 | 500 | 500 | 0 | 1.0 | 0.09 | 1 ( 0 ) | 23.08 ( 0.51 ) | 2.34 ( 0.1 ) | 26.74 | 0.86 | 1 | 23.08 | 2.34 |\n", + "| 12 | 1000 | 500 | 0 | 0.5 | 0.14 | 1 ( 0 ) | 22.72 ( 0.46 ) | 1.34 ( 0.08 ) | 27.38 | 0.83 | 1 | 22.72 | 1.34 |\n", + "| 13 | 50 | 1000 | 0 | 20.0 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 14 | 100 | 1000 | 0 | 10.0 | 0.01 | 1 ( 0 ) | 46.76 ( 0.67 ) | 4.86 ( 0.09 ) | 47.90 | 0.98 | 1 | 46.76 | 4.86 |\n", + "| 15 | 500 | 1000 | 0 | 2.0 | 0.04 | 1 ( 0 ) | 47.82 ( 0.66 ) | 2.5 ( 0.1 ) | 51.32 | 0.93 | 1 | 47.82 | 2.50 |\n", + "| 16 | 1000 | 1000 | 0 | 1.0 | 0.07 | 1 ( 0 ) | 47.14 ( 0.77 ) | 1.46 ( 0.08 ) | 51.68 | 0.91 | 1 | 47.14 | 1.46 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select\n", + "11 500 500 0 1.0 0.09 1 ( 0 ) 23.08 ( 0.51 ) 2.34 ( 0.1 ) 26.74 \n", + "12 1000 500 0 0.5 0.14 1 ( 0 ) 22.72 ( 0.46 ) 1.34 ( 0.08 ) 27.38 \n", + "13 50 1000 0 20.0 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "14 100 1000 0 10.0 0.01 1 ( 0 ) 46.76 ( 0.67 ) 4.86 ( 0.09 ) 47.90 \n", + "15 500 1000 0 2.0 0.04 1 ( 0 ) 47.82 ( 0.66 ) 2.5 ( 0.1 ) 51.32 \n", + "16 1000 1000 0 1.0 0.07 1 ( 0 ) 47.14 ( 0.77 ) 1.46 ( 0.08 ) 51.68 \n", + " FDR ROC_mean FP_mean FN_mean\n", + "11 0.86 1 23.08 2.34 \n", + "12 0.83 1 22.72 1.34 \n", + "13 NaN 1 1.00 6.00 \n", + "14 0.98 1 46.76 4.86 \n", + "15 0.93 1 47.82 2.50 \n", + "16 0.91 1 47.14 1.46 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 16 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 500 1.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
2 100 500 0.500.101 ( 0 )1.97 ( 0.13 ) 4.62 ( 0.08 ) 3.340.551 1.974.62
3 500 500 0.100.541 ( 0 )1.26 ( 0.12 ) 2.19 ( 0.08 ) 5.070.221 1.262.19
41000 500 0.050.731 ( 0 )0.86 ( 0.09 ) 1.12 ( 0.08 ) 5.740.131 0.861.12
5 50 1000 2.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
6 100 1000 1.000.051 ( 0 )4.29 ( 0.17 ) 4.79 ( 0.09 ) 5.500.771 4.294.79
7 500 1000 0.200.401 ( 0 )3.42 ( 0.16 ) 2.01 ( 0.09 ) 7.410.441 3.422.01
81000 1000 0.100.491 ( 0 )3.39 ( 0.19 ) 1.14 ( 0.07 ) 8.250.381 3.391.14
9 50 500010.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
10 100 5000 5.000.011 ( 0 )24.68 ( 0.48 )4.5 ( 0.09 ) 26.180.94124.684.50
11 500 5000 1.000.091 ( 0 )23.08 ( 0.51 )2.34 ( 0.1 ) 26.740.86123.082.34
121000 5000 0.500.141 ( 0 )22.72 ( 0.46 )1.34 ( 0.08 )27.380.83122.721.34
13 501000020.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
14 1001000010.000.011 ( 0 )46.76 ( 0.67 )4.86 ( 0.09 )47.900.98146.764.86
15 50010000 2.000.041 ( 0 )47.82 ( 0.66 )2.5 ( 0.1 ) 51.320.93147.822.50
16100010000 1.000.071 ( 0 )47.14 ( 0.77 )1.46 ( 0.08 )51.680.91147.141.46
\n" + ], + "text/latex": [ + "A data.frame: 16 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0 & 1.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t2 & 100 & 50 & 0 & 0.50 & 0.10 & 1 ( 0 ) & 1.97 ( 0.13 ) & 4.62 ( 0.08 ) & 3.34 & 0.55 & 1 & 1.97 & 4.62\\\\\n", + "\t3 & 500 & 50 & 0 & 0.10 & 0.54 & 1 ( 0 ) & 1.26 ( 0.12 ) & 2.19 ( 0.08 ) & 5.07 & 0.22 & 1 & 1.26 & 2.19\\\\\n", + "\t4 & 1000 & 50 & 0 & 0.05 & 0.73 & 1 ( 0 ) & 0.86 ( 0.09 ) & 1.12 ( 0.08 ) & 5.74 & 0.13 & 1 & 0.86 & 1.12\\\\\n", + "\t5 & 50 & 100 & 0 & 2.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t6 & 100 & 100 & 0 & 1.00 & 0.05 & 1 ( 0 ) & 4.29 ( 0.17 ) & 4.79 ( 0.09 ) & 5.50 & 0.77 & 1 & 4.29 & 4.79\\\\\n", + "\t7 & 500 & 100 & 0 & 0.20 & 0.40 & 1 ( 0 ) & 3.42 ( 0.16 ) & 2.01 ( 0.09 ) & 7.41 & 0.44 & 1 & 3.42 & 2.01\\\\\n", + "\t8 & 1000 & 100 & 0 & 0.10 & 0.49 & 1 ( 0 ) & 3.39 ( 0.19 ) & 1.14 ( 0.07 ) & 8.25 & 0.38 & 1 & 3.39 & 1.14\\\\\n", + "\t9 & 50 & 500 & 0 & 10.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t10 & 100 & 500 & 0 & 5.00 & 0.01 & 1 ( 0 ) & 24.68 ( 0.48 ) & 4.5 ( 0.09 ) & 26.18 & 0.94 & 1 & 24.68 & 4.50\\\\\n", + "\t11 & 500 & 500 & 0 & 1.00 & 0.09 & 1 ( 0 ) & 23.08 ( 0.51 ) & 2.34 ( 0.1 ) & 26.74 & 0.86 & 1 & 23.08 & 2.34\\\\\n", + "\t12 & 1000 & 500 & 0 & 0.50 & 0.14 & 1 ( 0 ) & 22.72 ( 0.46 ) & 1.34 ( 0.08 ) & 27.38 & 0.83 & 1 & 22.72 & 1.34\\\\\n", + "\t13 & 50 & 1000 & 0 & 20.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t14 & 100 & 1000 & 0 & 10.00 & 0.01 & 1 ( 0 ) & 46.76 ( 0.67 ) & 4.86 ( 0.09 ) & 47.90 & 0.98 & 1 & 46.76 & 4.86\\\\\n", + "\t15 & 500 & 1000 & 0 & 2.00 & 0.04 & 1 ( 0 ) & 47.82 ( 0.66 ) & 2.5 ( 0.1 ) & 51.32 & 0.93 & 1 & 47.82 & 2.50\\\\\n", + "\t16 & 1000 & 1000 & 0 & 1.00 & 0.07 & 1 ( 0 ) & 47.14 ( 0.77 ) & 1.46 ( 0.08 ) & 51.68 & 0.91 & 1 & 47.14 & 1.46\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 16 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0 | 1.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 2 | 100 | 50 | 0 | 0.50 | 0.10 | 1 ( 0 ) | 1.97 ( 0.13 ) | 4.62 ( 0.08 ) | 3.34 | 0.55 | 1 | 1.97 | 4.62 |\n", + "| 3 | 500 | 50 | 0 | 0.10 | 0.54 | 1 ( 0 ) | 1.26 ( 0.12 ) | 2.19 ( 0.08 ) | 5.07 | 0.22 | 1 | 1.26 | 2.19 |\n", + "| 4 | 1000 | 50 | 0 | 0.05 | 0.73 | 1 ( 0 ) | 0.86 ( 0.09 ) | 1.12 ( 0.08 ) | 5.74 | 0.13 | 1 | 0.86 | 1.12 |\n", + "| 5 | 50 | 100 | 0 | 2.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 6 | 100 | 100 | 0 | 1.00 | 0.05 | 1 ( 0 ) | 4.29 ( 0.17 ) | 4.79 ( 0.09 ) | 5.50 | 0.77 | 1 | 4.29 | 4.79 |\n", + "| 7 | 500 | 100 | 0 | 0.20 | 0.40 | 1 ( 0 ) | 3.42 ( 0.16 ) | 2.01 ( 0.09 ) | 7.41 | 0.44 | 1 | 3.42 | 2.01 |\n", + "| 8 | 1000 | 100 | 0 | 0.10 | 0.49 | 1 ( 0 ) | 3.39 ( 0.19 ) | 1.14 ( 0.07 ) | 8.25 | 0.38 | 1 | 3.39 | 1.14 |\n", + "| 9 | 50 | 500 | 0 | 10.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 10 | 100 | 500 | 0 | 5.00 | 0.01 | 1 ( 0 ) | 24.68 ( 0.48 ) | 4.5 ( 0.09 ) | 26.18 | 0.94 | 1 | 24.68 | 4.50 |\n", + "| 11 | 500 | 500 | 0 | 1.00 | 0.09 | 1 ( 0 ) | 23.08 ( 0.51 ) | 2.34 ( 0.1 ) | 26.74 | 0.86 | 1 | 23.08 | 2.34 |\n", + "| 12 | 1000 | 500 | 0 | 0.50 | 0.14 | 1 ( 0 ) | 22.72 ( 0.46 ) | 1.34 ( 0.08 ) | 27.38 | 0.83 | 1 | 22.72 | 1.34 |\n", + "| 13 | 50 | 1000 | 0 | 20.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 14 | 100 | 1000 | 0 | 10.00 | 0.01 | 1 ( 0 ) | 46.76 ( 0.67 ) | 4.86 ( 0.09 ) | 47.90 | 0.98 | 1 | 46.76 | 4.86 |\n", + "| 15 | 500 | 1000 | 0 | 2.00 | 0.04 | 1 ( 0 ) | 47.82 ( 0.66 ) | 2.5 ( 0.1 ) | 51.32 | 0.93 | 1 | 47.82 | 2.50 |\n", + "| 16 | 1000 | 1000 | 0 | 1.00 | 0.07 | 1 ( 0 ) | 47.14 ( 0.77 ) | 1.46 ( 0.08 ) | 51.68 | 0.91 | 1 | 47.14 | 1.46 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select\n", + "1 50 50 0 1.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "2 100 50 0 0.50 0.10 1 ( 0 ) 1.97 ( 0.13 ) 4.62 ( 0.08 ) 3.34 \n", + "3 500 50 0 0.10 0.54 1 ( 0 ) 1.26 ( 0.12 ) 2.19 ( 0.08 ) 5.07 \n", + "4 1000 50 0 0.05 0.73 1 ( 0 ) 0.86 ( 0.09 ) 1.12 ( 0.08 ) 5.74 \n", + "5 50 100 0 2.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "6 100 100 0 1.00 0.05 1 ( 0 ) 4.29 ( 0.17 ) 4.79 ( 0.09 ) 5.50 \n", + "7 500 100 0 0.20 0.40 1 ( 0 ) 3.42 ( 0.16 ) 2.01 ( 0.09 ) 7.41 \n", + "8 1000 100 0 0.10 0.49 1 ( 0 ) 3.39 ( 0.19 ) 1.14 ( 0.07 ) 8.25 \n", + "9 50 500 0 10.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "10 100 500 0 5.00 0.01 1 ( 0 ) 24.68 ( 0.48 ) 4.5 ( 0.09 ) 26.18 \n", + "11 500 500 0 1.00 0.09 1 ( 0 ) 23.08 ( 0.51 ) 2.34 ( 0.1 ) 26.74 \n", + "12 1000 500 0 0.50 0.14 1 ( 0 ) 22.72 ( 0.46 ) 1.34 ( 0.08 ) 27.38 \n", + "13 50 1000 0 20.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "14 100 1000 0 10.00 0.01 1 ( 0 ) 46.76 ( 0.67 ) 4.86 ( 0.09 ) 47.90 \n", + "15 500 1000 0 2.00 0.04 1 ( 0 ) 47.82 ( 0.66 ) 2.5 ( 0.1 ) 51.32 \n", + "16 1000 1000 0 1.00 0.07 1 ( 0 ) 47.14 ( 0.77 ) 1.46 ( 0.08 ) 51.68 \n", + " FDR ROC_mean FP_mean FN_mean\n", + "1 NaN 1 1.00 6.00 \n", + "2 0.55 1 1.97 4.62 \n", + "3 0.22 1 1.26 2.19 \n", + "4 0.13 1 0.86 1.12 \n", + "5 NaN 1 1.00 6.00 \n", + "6 0.77 1 4.29 4.79 \n", + "7 0.44 1 3.42 2.01 \n", + "8 0.38 1 3.39 1.14 \n", + "9 NaN 1 1.00 6.00 \n", + "10 0.94 1 24.68 4.50 \n", + "11 0.86 1 23.08 2.34 \n", + "12 0.83 1 22.72 1.34 \n", + "13 NaN 1 1.00 6.00 \n", + "14 0.98 1 46.76 4.86 \n", + "15 0.93 1 47.82 2.50 \n", + "16 0.91 1 47.14 1.46 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_toe\n", + "\n", + "## export\n", + "write.table(result.table_toe, '../results_summary_bin/sim_ind_RF_binary.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_bin/0.4_sim_ind_compLasso_binary_update.ipynb b/simulations/notebooks_sim_bin/0.4_sim_ind_compLasso_binary_update.ipynb new file mode 100644 index 0000000..e765396 --- /dev/null +++ b/simulations/notebooks_sim_bin/0.4_sim_ind_compLasso_binary_update.ipynb @@ -0,0 +1,677 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize compositional lasso results on Independent Simulation Scenarios for binary outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "files = NULL\n", + "for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_independent_', paste('P', p, 'N', n, sep='_'), '.RData'))\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "16" + ], + "text/latex": [ + "16" + ], + "text/markdown": [ + "16" + ], + "text/plain": [ + "[1] 16" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "length(files)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1] \"indx: 1\"\n", + "[1] \"indx: 2\"\n", + "[1] \"indx: 3\"\n", + "[1] \"indx: 4\"\n", + "[1] \"indx: 5\"\n", + "[1] \"indx: 6\"\n", + "[1] \"indx: 7\"\n", + "[1] \"indx: 8\"\n", + "[1] \"indx: 9\"\n", + "[1] \"indx: 10\"\n", + "[1] \"indx: 11\"\n", + "[1] \"indx: 12\"\n", + "[1] \"indx: 13\"\n", + "[1] \"indx: 14\"\n", + "[1] \"indx: 15\"\n", + "[1] \"indx: 16\"\n" + ] + } + ], + "source": [ + "avg_FDR = NULL\n", + "table_toe = NULL\n", + "tmp_num_select = rep(0, length(files))\n", + "for (i in 1:length(files)){\n", + " print(paste0('indx: ', i))\n", + " load(paste0(dir, '/binary_update/ind_GenCompLasso_binary_', i, '.RData')) \n", + " \n", + " table_toe = rbind(table_toe, results_ind_GenCompLasso[c('n', 'p', 'rou', 'FP', 'FN', 'ROC', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_ind_GenCompLasso$Stab.table))\n", + " \n", + " # calculate FDR\n", + " load(file_name, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_ind_GenCompLasso$Stab.table\n", + " FDR = NULL # false positive rate\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}\n", + "table_toe = as.data.frame(table_toe)\n", + "table_toe$num_select = tmp_num_select\n", + "table_toe$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
15050016.38 ( 0.96 )0.61 ( 0.06 )0.98 ( 0 )0.1321.770.71
21005007.94 ( 0.54 )0.34 ( 0.06 )0.93 ( 0 )0.3213.600.54
35005002.67 ( 0.6 )0.1 ( 0.03 )0.91 ( 0 )0.63 8.570.19
410005001.61 ( 0.48 )0.04 ( 0.02 )0.91 ( 0 )0.75 7.570.09
550100039.18 ( 2.14 )0.63 ( 0.07 )0.99 ( 0 )0.0644.550.85
6100100016.29 ( 1.16 )0.47 ( 0.06 )0.94 ( 0 )0.221.820.70
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0 & 16.38 ( 0.96 ) & 0.61 ( 0.06 ) & 0.98 ( 0 ) & 0.13 & 21.77 & 0.71\\\\\n", + "\t2 & 100 & 50 & 0 & 7.94 ( 0.54 ) & 0.34 ( 0.06 ) & 0.93 ( 0 ) & 0.32 & 13.60 & 0.54\\\\\n", + "\t3 & 500 & 50 & 0 & 2.67 ( 0.6 ) & 0.1 ( 0.03 ) & 0.91 ( 0 ) & 0.63 & 8.57 & 0.19\\\\\n", + "\t4 & 1000 & 50 & 0 & 1.61 ( 0.48 ) & 0.04 ( 0.02 ) & 0.91 ( 0 ) & 0.75 & 7.57 & 0.09\\\\\n", + "\t5 & 50 & 100 & 0 & 39.18 ( 2.14 ) & 0.63 ( 0.07 ) & 0.99 ( 0 ) & 0.06 & 44.55 & 0.85\\\\\n", + "\t6 & 100 & 100 & 0 & 16.29 ( 1.16 ) & 0.47 ( 0.06 ) & 0.94 ( 0 ) & 0.2 & 21.82 & 0.70\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0 | 16.38 ( 0.96 ) | 0.61 ( 0.06 ) | 0.98 ( 0 ) | 0.13 | 21.77 | 0.71 |\n", + "| 2 | 100 | 50 | 0 | 7.94 ( 0.54 ) | 0.34 ( 0.06 ) | 0.93 ( 0 ) | 0.32 | 13.60 | 0.54 |\n", + "| 3 | 500 | 50 | 0 | 2.67 ( 0.6 ) | 0.1 ( 0.03 ) | 0.91 ( 0 ) | 0.63 | 8.57 | 0.19 |\n", + "| 4 | 1000 | 50 | 0 | 1.61 ( 0.48 ) | 0.04 ( 0.02 ) | 0.91 ( 0 ) | 0.75 | 7.57 | 0.09 |\n", + "| 5 | 50 | 100 | 0 | 39.18 ( 2.14 ) | 0.63 ( 0.07 ) | 0.99 ( 0 ) | 0.06 | 44.55 | 0.85 |\n", + "| 6 | 100 | 100 | 0 | 16.29 ( 1.16 ) | 0.47 ( 0.06 ) | 0.94 ( 0 ) | 0.2 | 21.82 | 0.70 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select FDR \n", + "1 50 50 0 16.38 ( 0.96 ) 0.61 ( 0.06 ) 0.98 ( 0 ) 0.13 21.77 0.71\n", + "2 100 50 0 7.94 ( 0.54 ) 0.34 ( 0.06 ) 0.93 ( 0 ) 0.32 13.60 0.54\n", + "3 500 50 0 2.67 ( 0.6 ) 0.1 ( 0.03 ) 0.91 ( 0 ) 0.63 8.57 0.19\n", + "4 1000 50 0 1.61 ( 0.48 ) 0.04 ( 0.02 ) 0.91 ( 0 ) 0.75 7.57 0.09\n", + "5 50 100 0 39.18 ( 2.14 ) 0.63 ( 0.07 ) 0.99 ( 0 ) 0.06 44.55 0.85\n", + "6 100 100 0 16.29 ( 1.16 ) 0.47 ( 0.06 ) 0.94 ( 0 ) 0.2 21.82 0.70" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
1150050008.32 ( 1.15 )0.1 ( 0.03 )0.91 ( 0 )0.43 14.220.41
12100050004.63 ( 1.57 )0 ( 0 )0.91 ( 0 )0.6 10.630.21
135010000406.32 ( 7.33 )0.73 ( 0.07 )1 ( 0 )0.01411.590.99
1410010000283.24 ( 7.31 )0.49 ( 0.06 )1 ( 0 )0.02288.750.98
15500100009.4 ( 1.07 )0.07 ( 0.03 )0.91 ( 0 )0.4 15.330.47
161000100001.91 ( 0.29 )0.01 ( 0.01 )0.91 ( 0 )0.82 7.900.18
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t11 & 500 & 500 & 0 & 8.32 ( 1.15 ) & 0.1 ( 0.03 ) & 0.91 ( 0 ) & 0.43 & 14.22 & 0.41\\\\\n", + "\t12 & 1000 & 500 & 0 & 4.63 ( 1.57 ) & 0 ( 0 ) & 0.91 ( 0 ) & 0.6 & 10.63 & 0.21\\\\\n", + "\t13 & 50 & 1000 & 0 & 406.32 ( 7.33 ) & 0.73 ( 0.07 ) & 1 ( 0 ) & 0.01 & 411.59 & 0.99\\\\\n", + "\t14 & 100 & 1000 & 0 & 283.24 ( 7.31 ) & 0.49 ( 0.06 ) & 1 ( 0 ) & 0.02 & 288.75 & 0.98\\\\\n", + "\t15 & 500 & 1000 & 0 & 9.4 ( 1.07 ) & 0.07 ( 0.03 ) & 0.91 ( 0 ) & 0.4 & 15.33 & 0.47\\\\\n", + "\t16 & 1000 & 1000 & 0 & 1.91 ( 0.29 ) & 0.01 ( 0.01 ) & 0.91 ( 0 ) & 0.82 & 7.90 & 0.18\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 11 | 500 | 500 | 0 | 8.32 ( 1.15 ) | 0.1 ( 0.03 ) | 0.91 ( 0 ) | 0.43 | 14.22 | 0.41 |\n", + "| 12 | 1000 | 500 | 0 | 4.63 ( 1.57 ) | 0 ( 0 ) | 0.91 ( 0 ) | 0.6 | 10.63 | 0.21 |\n", + "| 13 | 50 | 1000 | 0 | 406.32 ( 7.33 ) | 0.73 ( 0.07 ) | 1 ( 0 ) | 0.01 | 411.59 | 0.99 |\n", + "| 14 | 100 | 1000 | 0 | 283.24 ( 7.31 ) | 0.49 ( 0.06 ) | 1 ( 0 ) | 0.02 | 288.75 | 0.98 |\n", + "| 15 | 500 | 1000 | 0 | 9.4 ( 1.07 ) | 0.07 ( 0.03 ) | 0.91 ( 0 ) | 0.4 | 15.33 | 0.47 |\n", + "| 16 | 1000 | 1000 | 0 | 1.91 ( 0.29 ) | 0.01 ( 0.01 ) | 0.91 ( 0 ) | 0.82 | 7.90 | 0.18 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select FDR \n", + "11 500 500 0 8.32 ( 1.15 ) 0.1 ( 0.03 ) 0.91 ( 0 ) 0.43 14.22 0.41\n", + "12 1000 500 0 4.63 ( 1.57 ) 0 ( 0 ) 0.91 ( 0 ) 0.6 10.63 0.21\n", + "13 50 1000 0 406.32 ( 7.33 ) 0.73 ( 0.07 ) 1 ( 0 ) 0.01 411.59 0.99\n", + "14 100 1000 0 283.24 ( 7.31 ) 0.49 ( 0.06 ) 1 ( 0 ) 0.02 288.75 0.98\n", + "15 500 1000 0 9.4 ( 1.07 ) 0.07 ( 0.03 ) 0.91 ( 0 ) 0.4 15.33 0.47\n", + "16 1000 1000 0 1.91 ( 0.29 ) 0.01 ( 0.01 ) 0.91 ( 0 ) 0.82 7.90 0.18" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_toe <- apply(table_toe,2,as.character)\n", + "rownames(result.table_toe) = rownames(table_toe)\n", + "result.table_toe = as.data.frame(result.table_toe)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_toe$n = tidyr::extract_numeric(result.table_toe$n)\n", + "result.table_toe$p = tidyr::extract_numeric(result.table_toe$p)\n", + "result.table_toe$ratio = result.table_toe$p / result.table_toe$n\n", + "\n", + "result.table_toe = result.table_toe[c('n', 'p', 'rou', 'ratio', 'Stab', 'ROC', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_toe)[1:4] = c('N', 'P', 'Corr', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_toe$Stab = as.numeric(as.character(result.table_toe$Stab))\n", + "# result.table_toe$ROC_mean = as.numeric(substr(result.table_toe$ROC, start=1, stop=4))\n", + "# result.table_toe$FP_mean = as.numeric(substr(result.table_toe$FP, start=1, stop=4))\n", + "# result.table_toe$FN_mean = as.numeric(substr(result.table_toe$FN, start=1, stop=4))\n", + "# result.table_toe$FN_mean[is.na(result.table_toe$FN_mean)] = 0\n", + "result.table_toe$num_select = as.numeric(as.character(result.table_toe$num_select))\n", + "\n", + "result.table_toe$ROC_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$ROC))\n", + "result.table_toe$FP_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$FP))\n", + "result.table_toe$FN_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$FN))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "
A data.frame: 0 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
\n" + ], + "text/latex": [ + "A data.frame: 0 × 13\n", + "\\begin{tabular}{lllllllllllll}\n", + " N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 0 × 13\n", + "\n", + "| N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select FDR ROC_mean FP_mean FN_mean" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check whether missing values exists\n", + "result.table_toe[rowSums(is.na(result.table_toe)) > 0,]" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 5001.000.130.98 ( 0 )16.38 ( 0.96 )0.61 ( 0.06 )21.770.710.9816.380.61
2 100 5000.500.320.93 ( 0 )7.94 ( 0.54 ) 0.34 ( 0.06 )13.600.540.93 7.940.34
3 500 5000.100.630.91 ( 0 )2.67 ( 0.6 ) 0.1 ( 0.03 ) 8.570.190.91 2.670.10
41000 5000.050.750.91 ( 0 )1.61 ( 0.48 ) 0.04 ( 0.02 ) 7.570.090.91 1.610.04
5 5010002.000.060.99 ( 0 )39.18 ( 2.14 )0.63 ( 0.07 )44.550.850.9939.180.63
6 10010001.000.200.94 ( 0 )16.29 ( 1.16 )0.47 ( 0.06 )21.820.7 0.9416.290.47
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0 & 1.00 & 0.13 & 0.98 ( 0 ) & 16.38 ( 0.96 ) & 0.61 ( 0.06 ) & 21.77 & 0.71 & 0.98 & 16.38 & 0.61\\\\\n", + "\t2 & 100 & 50 & 0 & 0.50 & 0.32 & 0.93 ( 0 ) & 7.94 ( 0.54 ) & 0.34 ( 0.06 ) & 13.60 & 0.54 & 0.93 & 7.94 & 0.34\\\\\n", + "\t3 & 500 & 50 & 0 & 0.10 & 0.63 & 0.91 ( 0 ) & 2.67 ( 0.6 ) & 0.1 ( 0.03 ) & 8.57 & 0.19 & 0.91 & 2.67 & 0.10\\\\\n", + "\t4 & 1000 & 50 & 0 & 0.05 & 0.75 & 0.91 ( 0 ) & 1.61 ( 0.48 ) & 0.04 ( 0.02 ) & 7.57 & 0.09 & 0.91 & 1.61 & 0.04\\\\\n", + "\t5 & 50 & 100 & 0 & 2.00 & 0.06 & 0.99 ( 0 ) & 39.18 ( 2.14 ) & 0.63 ( 0.07 ) & 44.55 & 0.85 & 0.99 & 39.18 & 0.63\\\\\n", + "\t6 & 100 & 100 & 0 & 1.00 & 0.20 & 0.94 ( 0 ) & 16.29 ( 1.16 ) & 0.47 ( 0.06 ) & 21.82 & 0.7 & 0.94 & 16.29 & 0.47\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0 | 1.00 | 0.13 | 0.98 ( 0 ) | 16.38 ( 0.96 ) | 0.61 ( 0.06 ) | 21.77 | 0.71 | 0.98 | 16.38 | 0.61 |\n", + "| 2 | 100 | 50 | 0 | 0.50 | 0.32 | 0.93 ( 0 ) | 7.94 ( 0.54 ) | 0.34 ( 0.06 ) | 13.60 | 0.54 | 0.93 | 7.94 | 0.34 |\n", + "| 3 | 500 | 50 | 0 | 0.10 | 0.63 | 0.91 ( 0 ) | 2.67 ( 0.6 ) | 0.1 ( 0.03 ) | 8.57 | 0.19 | 0.91 | 2.67 | 0.10 |\n", + "| 4 | 1000 | 50 | 0 | 0.05 | 0.75 | 0.91 ( 0 ) | 1.61 ( 0.48 ) | 0.04 ( 0.02 ) | 7.57 | 0.09 | 0.91 | 1.61 | 0.04 |\n", + "| 5 | 50 | 100 | 0 | 2.00 | 0.06 | 0.99 ( 0 ) | 39.18 ( 2.14 ) | 0.63 ( 0.07 ) | 44.55 | 0.85 | 0.99 | 39.18 | 0.63 |\n", + "| 6 | 100 | 100 | 0 | 1.00 | 0.20 | 0.94 ( 0 ) | 16.29 ( 1.16 ) | 0.47 ( 0.06 ) | 21.82 | 0.7 | 0.94 | 16.29 | 0.47 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select\n", + "1 50 50 0 1.00 0.13 0.98 ( 0 ) 16.38 ( 0.96 ) 0.61 ( 0.06 ) 21.77 \n", + "2 100 50 0 0.50 0.32 0.93 ( 0 ) 7.94 ( 0.54 ) 0.34 ( 0.06 ) 13.60 \n", + "3 500 50 0 0.10 0.63 0.91 ( 0 ) 2.67 ( 0.6 ) 0.1 ( 0.03 ) 8.57 \n", + "4 1000 50 0 0.05 0.75 0.91 ( 0 ) 1.61 ( 0.48 ) 0.04 ( 0.02 ) 7.57 \n", + "5 50 100 0 2.00 0.06 0.99 ( 0 ) 39.18 ( 2.14 ) 0.63 ( 0.07 ) 44.55 \n", + "6 100 100 0 1.00 0.20 0.94 ( 0 ) 16.29 ( 1.16 ) 0.47 ( 0.06 ) 21.82 \n", + " FDR ROC_mean FP_mean FN_mean\n", + "1 0.71 0.98 16.38 0.61 \n", + "2 0.54 0.93 7.94 0.34 \n", + "3 0.19 0.91 2.67 0.10 \n", + "4 0.09 0.91 1.61 0.04 \n", + "5 0.85 0.99 39.18 0.63 \n", + "6 0.7 0.94 16.29 0.47 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
11 500 5000 1.00.430.91 ( 0 )8.32 ( 1.15 ) 0.1 ( 0.03 ) 14.220.410.91 8.320.10
121000 5000 0.50.600.91 ( 0 )4.63 ( 1.57 ) 0 ( 0 ) 10.630.210.91 4.630.00
13 501000020.00.011 ( 0 ) 406.32 ( 7.33 )0.73 ( 0.07 )411.590.991.00406.320.73
14 1001000010.00.021 ( 0 ) 283.24 ( 7.31 )0.49 ( 0.06 )288.750.981.00283.240.49
15 50010000 2.00.400.91 ( 0 )9.4 ( 1.07 ) 0.07 ( 0.03 ) 15.330.470.91 9.400.07
16100010000 1.00.820.91 ( 0 )1.91 ( 0.29 ) 0.01 ( 0.01 ) 7.900.180.91 1.910.01
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t11 & 500 & 500 & 0 & 1.0 & 0.43 & 0.91 ( 0 ) & 8.32 ( 1.15 ) & 0.1 ( 0.03 ) & 14.22 & 0.41 & 0.91 & 8.32 & 0.10\\\\\n", + "\t12 & 1000 & 500 & 0 & 0.5 & 0.60 & 0.91 ( 0 ) & 4.63 ( 1.57 ) & 0 ( 0 ) & 10.63 & 0.21 & 0.91 & 4.63 & 0.00\\\\\n", + "\t13 & 50 & 1000 & 0 & 20.0 & 0.01 & 1 ( 0 ) & 406.32 ( 7.33 ) & 0.73 ( 0.07 ) & 411.59 & 0.99 & 1.00 & 406.32 & 0.73\\\\\n", + "\t14 & 100 & 1000 & 0 & 10.0 & 0.02 & 1 ( 0 ) & 283.24 ( 7.31 ) & 0.49 ( 0.06 ) & 288.75 & 0.98 & 1.00 & 283.24 & 0.49\\\\\n", + "\t15 & 500 & 1000 & 0 & 2.0 & 0.40 & 0.91 ( 0 ) & 9.4 ( 1.07 ) & 0.07 ( 0.03 ) & 15.33 & 0.47 & 0.91 & 9.40 & 0.07\\\\\n", + "\t16 & 1000 & 1000 & 0 & 1.0 & 0.82 & 0.91 ( 0 ) & 1.91 ( 0.29 ) & 0.01 ( 0.01 ) & 7.90 & 0.18 & 0.91 & 1.91 & 0.01\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 11 | 500 | 500 | 0 | 1.0 | 0.43 | 0.91 ( 0 ) | 8.32 ( 1.15 ) | 0.1 ( 0.03 ) | 14.22 | 0.41 | 0.91 | 8.32 | 0.10 |\n", + "| 12 | 1000 | 500 | 0 | 0.5 | 0.60 | 0.91 ( 0 ) | 4.63 ( 1.57 ) | 0 ( 0 ) | 10.63 | 0.21 | 0.91 | 4.63 | 0.00 |\n", + "| 13 | 50 | 1000 | 0 | 20.0 | 0.01 | 1 ( 0 ) | 406.32 ( 7.33 ) | 0.73 ( 0.07 ) | 411.59 | 0.99 | 1.00 | 406.32 | 0.73 |\n", + "| 14 | 100 | 1000 | 0 | 10.0 | 0.02 | 1 ( 0 ) | 283.24 ( 7.31 ) | 0.49 ( 0.06 ) | 288.75 | 0.98 | 1.00 | 283.24 | 0.49 |\n", + "| 15 | 500 | 1000 | 0 | 2.0 | 0.40 | 0.91 ( 0 ) | 9.4 ( 1.07 ) | 0.07 ( 0.03 ) | 15.33 | 0.47 | 0.91 | 9.40 | 0.07 |\n", + "| 16 | 1000 | 1000 | 0 | 1.0 | 0.82 | 0.91 ( 0 ) | 1.91 ( 0.29 ) | 0.01 ( 0.01 ) | 7.90 | 0.18 | 0.91 | 1.91 | 0.01 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "11 500 500 0 1.0 0.43 0.91 ( 0 ) 8.32 ( 1.15 ) 0.1 ( 0.03 ) \n", + "12 1000 500 0 0.5 0.60 0.91 ( 0 ) 4.63 ( 1.57 ) 0 ( 0 ) \n", + "13 50 1000 0 20.0 0.01 1 ( 0 ) 406.32 ( 7.33 ) 0.73 ( 0.07 )\n", + "14 100 1000 0 10.0 0.02 1 ( 0 ) 283.24 ( 7.31 ) 0.49 ( 0.06 )\n", + "15 500 1000 0 2.0 0.40 0.91 ( 0 ) 9.4 ( 1.07 ) 0.07 ( 0.03 )\n", + "16 1000 1000 0 1.0 0.82 0.91 ( 0 ) 1.91 ( 0.29 ) 0.01 ( 0.01 )\n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "11 14.22 0.41 0.91 8.32 0.10 \n", + "12 10.63 0.21 0.91 4.63 0.00 \n", + "13 411.59 0.99 1.00 406.32 0.73 \n", + "14 288.75 0.98 1.00 283.24 0.49 \n", + "15 15.33 0.47 0.91 9.40 0.07 \n", + "16 7.90 0.18 0.91 1.91 0.01 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 16 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 500 1.000.130.98 ( 0 )16.38 ( 0.96 ) 0.61 ( 0.06 ) 21.770.710.98 16.380.61
2 100 500 0.500.320.93 ( 0 )7.94 ( 0.54 ) 0.34 ( 0.06 ) 13.600.540.93 7.940.34
3 500 500 0.100.630.91 ( 0 )2.67 ( 0.6 ) 0.1 ( 0.03 ) 8.570.190.91 2.670.10
41000 500 0.050.750.91 ( 0 )1.61 ( 0.48 ) 0.04 ( 0.02 ) 7.570.090.91 1.610.04
5 50 1000 2.000.060.99 ( 0 )39.18 ( 2.14 ) 0.63 ( 0.07 ) 44.550.850.99 39.180.63
6 100 1000 1.000.200.94 ( 0 )16.29 ( 1.16 ) 0.47 ( 0.06 ) 21.820.7 0.94 16.290.47
7 500 1000 0.200.470.91 ( 0 )5.63 ( 0.84 ) 0.13 ( 0.03 ) 11.500.3 0.91 5.630.13
81000 1000 0.100.430.91 ( 0 )6.87 ( 1.8 ) 0 ( 0 ) 12.870.170.91 6.870.00
9 50 500010.000.011 ( 0 ) 251.02 ( 6.8 ) 0.36 ( 0.06 )256.660.981.00251.020.36
10 100 5000 5.000.031 ( 0 ) 134.32 ( 6.63 )0.33 ( 0.05 )139.990.951.00134.320.33
11 500 5000 1.000.430.91 ( 0 )8.32 ( 1.15 ) 0.1 ( 0.03 ) 14.220.410.91 8.320.10
121000 5000 0.500.600.91 ( 0 )4.63 ( 1.57 ) 0 ( 0 ) 10.630.210.91 4.630.00
13 501000020.000.011 ( 0 ) 406.32 ( 7.33 )0.73 ( 0.07 )411.590.991.00406.320.73
14 1001000010.000.021 ( 0 ) 283.24 ( 7.31 )0.49 ( 0.06 )288.750.981.00283.240.49
15 50010000 2.000.400.91 ( 0 )9.4 ( 1.07 ) 0.07 ( 0.03 ) 15.330.470.91 9.400.07
16100010000 1.000.820.91 ( 0 )1.91 ( 0.29 ) 0.01 ( 0.01 ) 7.900.180.91 1.910.01
\n" + ], + "text/latex": [ + "A data.frame: 16 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0 & 1.00 & 0.13 & 0.98 ( 0 ) & 16.38 ( 0.96 ) & 0.61 ( 0.06 ) & 21.77 & 0.71 & 0.98 & 16.38 & 0.61\\\\\n", + "\t2 & 100 & 50 & 0 & 0.50 & 0.32 & 0.93 ( 0 ) & 7.94 ( 0.54 ) & 0.34 ( 0.06 ) & 13.60 & 0.54 & 0.93 & 7.94 & 0.34\\\\\n", + "\t3 & 500 & 50 & 0 & 0.10 & 0.63 & 0.91 ( 0 ) & 2.67 ( 0.6 ) & 0.1 ( 0.03 ) & 8.57 & 0.19 & 0.91 & 2.67 & 0.10\\\\\n", + "\t4 & 1000 & 50 & 0 & 0.05 & 0.75 & 0.91 ( 0 ) & 1.61 ( 0.48 ) & 0.04 ( 0.02 ) & 7.57 & 0.09 & 0.91 & 1.61 & 0.04\\\\\n", + "\t5 & 50 & 100 & 0 & 2.00 & 0.06 & 0.99 ( 0 ) & 39.18 ( 2.14 ) & 0.63 ( 0.07 ) & 44.55 & 0.85 & 0.99 & 39.18 & 0.63\\\\\n", + "\t6 & 100 & 100 & 0 & 1.00 & 0.20 & 0.94 ( 0 ) & 16.29 ( 1.16 ) & 0.47 ( 0.06 ) & 21.82 & 0.7 & 0.94 & 16.29 & 0.47\\\\\n", + "\t7 & 500 & 100 & 0 & 0.20 & 0.47 & 0.91 ( 0 ) & 5.63 ( 0.84 ) & 0.13 ( 0.03 ) & 11.50 & 0.3 & 0.91 & 5.63 & 0.13\\\\\n", + "\t8 & 1000 & 100 & 0 & 0.10 & 0.43 & 0.91 ( 0 ) & 6.87 ( 1.8 ) & 0 ( 0 ) & 12.87 & 0.17 & 0.91 & 6.87 & 0.00\\\\\n", + "\t9 & 50 & 500 & 0 & 10.00 & 0.01 & 1 ( 0 ) & 251.02 ( 6.8 ) & 0.36 ( 0.06 ) & 256.66 & 0.98 & 1.00 & 251.02 & 0.36\\\\\n", + "\t10 & 100 & 500 & 0 & 5.00 & 0.03 & 1 ( 0 ) & 134.32 ( 6.63 ) & 0.33 ( 0.05 ) & 139.99 & 0.95 & 1.00 & 134.32 & 0.33\\\\\n", + "\t11 & 500 & 500 & 0 & 1.00 & 0.43 & 0.91 ( 0 ) & 8.32 ( 1.15 ) & 0.1 ( 0.03 ) & 14.22 & 0.41 & 0.91 & 8.32 & 0.10\\\\\n", + "\t12 & 1000 & 500 & 0 & 0.50 & 0.60 & 0.91 ( 0 ) & 4.63 ( 1.57 ) & 0 ( 0 ) & 10.63 & 0.21 & 0.91 & 4.63 & 0.00\\\\\n", + "\t13 & 50 & 1000 & 0 & 20.00 & 0.01 & 1 ( 0 ) & 406.32 ( 7.33 ) & 0.73 ( 0.07 ) & 411.59 & 0.99 & 1.00 & 406.32 & 0.73\\\\\n", + "\t14 & 100 & 1000 & 0 & 10.00 & 0.02 & 1 ( 0 ) & 283.24 ( 7.31 ) & 0.49 ( 0.06 ) & 288.75 & 0.98 & 1.00 & 283.24 & 0.49\\\\\n", + "\t15 & 500 & 1000 & 0 & 2.00 & 0.40 & 0.91 ( 0 ) & 9.4 ( 1.07 ) & 0.07 ( 0.03 ) & 15.33 & 0.47 & 0.91 & 9.40 & 0.07\\\\\n", + "\t16 & 1000 & 1000 & 0 & 1.00 & 0.82 & 0.91 ( 0 ) & 1.91 ( 0.29 ) & 0.01 ( 0.01 ) & 7.90 & 0.18 & 0.91 & 1.91 & 0.01\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 16 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0 | 1.00 | 0.13 | 0.98 ( 0 ) | 16.38 ( 0.96 ) | 0.61 ( 0.06 ) | 21.77 | 0.71 | 0.98 | 16.38 | 0.61 |\n", + "| 2 | 100 | 50 | 0 | 0.50 | 0.32 | 0.93 ( 0 ) | 7.94 ( 0.54 ) | 0.34 ( 0.06 ) | 13.60 | 0.54 | 0.93 | 7.94 | 0.34 |\n", + "| 3 | 500 | 50 | 0 | 0.10 | 0.63 | 0.91 ( 0 ) | 2.67 ( 0.6 ) | 0.1 ( 0.03 ) | 8.57 | 0.19 | 0.91 | 2.67 | 0.10 |\n", + "| 4 | 1000 | 50 | 0 | 0.05 | 0.75 | 0.91 ( 0 ) | 1.61 ( 0.48 ) | 0.04 ( 0.02 ) | 7.57 | 0.09 | 0.91 | 1.61 | 0.04 |\n", + "| 5 | 50 | 100 | 0 | 2.00 | 0.06 | 0.99 ( 0 ) | 39.18 ( 2.14 ) | 0.63 ( 0.07 ) | 44.55 | 0.85 | 0.99 | 39.18 | 0.63 |\n", + "| 6 | 100 | 100 | 0 | 1.00 | 0.20 | 0.94 ( 0 ) | 16.29 ( 1.16 ) | 0.47 ( 0.06 ) | 21.82 | 0.7 | 0.94 | 16.29 | 0.47 |\n", + "| 7 | 500 | 100 | 0 | 0.20 | 0.47 | 0.91 ( 0 ) | 5.63 ( 0.84 ) | 0.13 ( 0.03 ) | 11.50 | 0.3 | 0.91 | 5.63 | 0.13 |\n", + "| 8 | 1000 | 100 | 0 | 0.10 | 0.43 | 0.91 ( 0 ) | 6.87 ( 1.8 ) | 0 ( 0 ) | 12.87 | 0.17 | 0.91 | 6.87 | 0.00 |\n", + "| 9 | 50 | 500 | 0 | 10.00 | 0.01 | 1 ( 0 ) | 251.02 ( 6.8 ) | 0.36 ( 0.06 ) | 256.66 | 0.98 | 1.00 | 251.02 | 0.36 |\n", + "| 10 | 100 | 500 | 0 | 5.00 | 0.03 | 1 ( 0 ) | 134.32 ( 6.63 ) | 0.33 ( 0.05 ) | 139.99 | 0.95 | 1.00 | 134.32 | 0.33 |\n", + "| 11 | 500 | 500 | 0 | 1.00 | 0.43 | 0.91 ( 0 ) | 8.32 ( 1.15 ) | 0.1 ( 0.03 ) | 14.22 | 0.41 | 0.91 | 8.32 | 0.10 |\n", + "| 12 | 1000 | 500 | 0 | 0.50 | 0.60 | 0.91 ( 0 ) | 4.63 ( 1.57 ) | 0 ( 0 ) | 10.63 | 0.21 | 0.91 | 4.63 | 0.00 |\n", + "| 13 | 50 | 1000 | 0 | 20.00 | 0.01 | 1 ( 0 ) | 406.32 ( 7.33 ) | 0.73 ( 0.07 ) | 411.59 | 0.99 | 1.00 | 406.32 | 0.73 |\n", + "| 14 | 100 | 1000 | 0 | 10.00 | 0.02 | 1 ( 0 ) | 283.24 ( 7.31 ) | 0.49 ( 0.06 ) | 288.75 | 0.98 | 1.00 | 283.24 | 0.49 |\n", + "| 15 | 500 | 1000 | 0 | 2.00 | 0.40 | 0.91 ( 0 ) | 9.4 ( 1.07 ) | 0.07 ( 0.03 ) | 15.33 | 0.47 | 0.91 | 9.40 | 0.07 |\n", + "| 16 | 1000 | 1000 | 0 | 1.00 | 0.82 | 0.91 ( 0 ) | 1.91 ( 0.29 ) | 0.01 ( 0.01 ) | 7.90 | 0.18 | 0.91 | 1.91 | 0.01 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "1 50 50 0 1.00 0.13 0.98 ( 0 ) 16.38 ( 0.96 ) 0.61 ( 0.06 )\n", + "2 100 50 0 0.50 0.32 0.93 ( 0 ) 7.94 ( 0.54 ) 0.34 ( 0.06 )\n", + "3 500 50 0 0.10 0.63 0.91 ( 0 ) 2.67 ( 0.6 ) 0.1 ( 0.03 ) \n", + "4 1000 50 0 0.05 0.75 0.91 ( 0 ) 1.61 ( 0.48 ) 0.04 ( 0.02 )\n", + "5 50 100 0 2.00 0.06 0.99 ( 0 ) 39.18 ( 2.14 ) 0.63 ( 0.07 )\n", + "6 100 100 0 1.00 0.20 0.94 ( 0 ) 16.29 ( 1.16 ) 0.47 ( 0.06 )\n", + "7 500 100 0 0.20 0.47 0.91 ( 0 ) 5.63 ( 0.84 ) 0.13 ( 0.03 )\n", + "8 1000 100 0 0.10 0.43 0.91 ( 0 ) 6.87 ( 1.8 ) 0 ( 0 ) \n", + "9 50 500 0 10.00 0.01 1 ( 0 ) 251.02 ( 6.8 ) 0.36 ( 0.06 )\n", + "10 100 500 0 5.00 0.03 1 ( 0 ) 134.32 ( 6.63 ) 0.33 ( 0.05 )\n", + "11 500 500 0 1.00 0.43 0.91 ( 0 ) 8.32 ( 1.15 ) 0.1 ( 0.03 ) \n", + "12 1000 500 0 0.50 0.60 0.91 ( 0 ) 4.63 ( 1.57 ) 0 ( 0 ) \n", + "13 50 1000 0 20.00 0.01 1 ( 0 ) 406.32 ( 7.33 ) 0.73 ( 0.07 )\n", + "14 100 1000 0 10.00 0.02 1 ( 0 ) 283.24 ( 7.31 ) 0.49 ( 0.06 )\n", + "15 500 1000 0 2.00 0.40 0.91 ( 0 ) 9.4 ( 1.07 ) 0.07 ( 0.03 )\n", + "16 1000 1000 0 1.00 0.82 0.91 ( 0 ) 1.91 ( 0.29 ) 0.01 ( 0.01 )\n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "1 21.77 0.71 0.98 16.38 0.61 \n", + "2 13.60 0.54 0.93 7.94 0.34 \n", + "3 8.57 0.19 0.91 2.67 0.10 \n", + "4 7.57 0.09 0.91 1.61 0.04 \n", + "5 44.55 0.85 0.99 39.18 0.63 \n", + "6 21.82 0.7 0.94 16.29 0.47 \n", + "7 11.50 0.3 0.91 5.63 0.13 \n", + "8 12.87 0.17 0.91 6.87 0.00 \n", + "9 256.66 0.98 1.00 251.02 0.36 \n", + "10 139.99 0.95 1.00 134.32 0.33 \n", + "11 14.22 0.41 0.91 8.32 0.10 \n", + "12 10.63 0.21 0.91 4.63 0.00 \n", + "13 411.59 0.99 1.00 406.32 0.73 \n", + "14 288.75 0.98 1.00 283.24 0.49 \n", + "15 15.33 0.47 0.91 9.40 0.07 \n", + "16 7.90 0.18 0.91 1.91 0.01 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_toe\n", + "\n", + "## export\n", + "write.table(result.table_toe, '../results_summary_updated/sim_ind_GencompLasso_binary.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_bin/1.1_sim_toe_lasso_binary_update.ipynb b/simulations/notebooks_sim_bin/1.1_sim_toe_lasso_binary_update.ipynb new file mode 100644 index 0000000..339fd90 --- /dev/null +++ b/simulations/notebooks_sim_bin/1.1_sim_toe_lasso_binary_update.ipynb @@ -0,0 +1,976 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize lasso results on Toeplitz Simulation Scenarios for binary outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "rou.list = seq(0.1, 0.9, 0.2)\n", + "\n", + "files = NULL\n", + "for (rou in rou.list){\n", + " for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_toeplitz_corr', rou, paste('P', p, 'N', n, sep='_'), '.RData', sep=''))\n", + " }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "80" + ], + "text/latex": [ + "80" + ], + "text/markdown": [ + "80" + ], + "text/plain": [ + "[1] 80" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "length(files)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1] \"indx: 1\"\n", + "[1] \"indx: 2\"\n", + "[1] \"indx: 3\"\n", + "[1] \"indx: 4\"\n", + "[1] \"indx: 5\"\n", + "[1] \"indx: 6\"\n", + "[1] \"indx: 7\"\n", + "[1] \"indx: 8\"\n", + "[1] \"indx: 9\"\n", + "[1] \"indx: 10\"\n", + "[1] \"indx: 11\"\n", + "[1] \"indx: 12\"\n", + "[1] \"indx: 13\"\n", + "[1] \"indx: 14\"\n", + "[1] \"indx: 15\"\n", + "[1] \"indx: 16\"\n", + "[1] \"indx: 17\"\n", + "[1] \"indx: 18\"\n", + "[1] \"indx: 19\"\n", + "[1] \"indx: 20\"\n", + "[1] \"indx: 21\"\n", + "[1] \"indx: 22\"\n", + "[1] \"indx: 23\"\n", + "[1] \"indx: 24\"\n", + "[1] \"indx: 25\"\n", + "[1] \"indx: 26\"\n", + "[1] \"indx: 27\"\n", + "[1] \"indx: 28\"\n", + "[1] \"indx: 29\"\n", + "[1] \"indx: 30\"\n", + "[1] \"indx: 31\"\n", + "[1] \"indx: 32\"\n", + "[1] \"indx: 33\"\n", + "[1] \"indx: 34\"\n", + "[1] \"indx: 35\"\n", + "[1] \"indx: 36\"\n", + "[1] \"indx: 37\"\n", + "[1] \"indx: 38\"\n", + "[1] \"indx: 39\"\n", + "[1] \"indx: 40\"\n", + "[1] \"indx: 41\"\n", + "[1] \"indx: 42\"\n", + "[1] \"indx: 43\"\n", + "[1] \"indx: 44\"\n", + "[1] \"indx: 45\"\n", + "[1] \"indx: 46\"\n", + "[1] \"indx: 47\"\n", + "[1] \"indx: 48\"\n", + "[1] \"indx: 49\"\n", + "[1] \"indx: 50\"\n", + "[1] \"indx: 51\"\n", + "[1] \"indx: 52\"\n", + "[1] \"indx: 53\"\n", + "[1] \"indx: 54\"\n", + "[1] \"indx: 55\"\n", + "[1] \"indx: 56\"\n", + "[1] \"indx: 57\"\n", + "[1] \"indx: 58\"\n", + "[1] \"indx: 59\"\n", + "[1] \"indx: 60\"\n", + "[1] \"indx: 61\"\n", + "[1] \"indx: 62\"\n", + "[1] \"indx: 63\"\n", + "[1] \"indx: 64\"\n", + "[1] \"indx: 65\"\n", + "[1] \"indx: 66\"\n", + "[1] \"indx: 67\"\n", + "[1] \"indx: 68\"\n", + "[1] \"indx: 69\"\n", + "[1] \"indx: 70\"\n", + "[1] \"indx: 71\"\n", + "[1] \"indx: 72\"\n", + "[1] \"indx: 73\"\n", + "[1] \"indx: 74\"\n", + "[1] \"indx: 75\"\n", + "[1] \"indx: 76\"\n", + "[1] \"indx: 77\"\n", + "[1] \"indx: 78\"\n", + "[1] \"indx: 79\"\n", + "[1] \"indx: 80\"\n" + ] + } + ], + "source": [ + "avg_FDR = NULL\n", + "table_toe = NULL\n", + "tmp_num_select = rep(0, length(files))\n", + "for (i in 1:length(files)){\n", + " print(paste0('indx: ', i))\n", + " load(paste0(dir, '/binary_update/toe_Lasso_binary_', i, '.RData')) \n", + " \n", + " table_toe = rbind(table_toe, results_toe_lasso[c('n', 'p', 'rou', 'FP', 'FN', 'ROC', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_toe_lasso$Stab.table))\n", + " \n", + " # calculate FDR\n", + " load(file_name, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_toe_lasso$Stab.table\n", + " FDR = NULL # false positive rate\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}\n", + "table_toe = as.data.frame(table_toe)\n", + "table_toe$num_select = tmp_num_select\n", + "table_toe$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
150500.13.65 ( 0.23 )2.83 ( 0.11 )0.78 ( 0.01 )0.32 5.820.39
2100500.17.35 ( 0.34 )0.68 ( 0.09 )0.85 ( 0.01 )0.3411.670.50
3500500.14.99 ( 0.22 )0 ( 0 )0.92 ( 0 )0.55 9.990.37
41000500.12.42 ( 0.12 )0 ( 0 )0.93 ( 0 )0.78 7.420.17
5501000.14.65 ( 0.29 )2.93 ( 0.12 )0.74 ( 0.01 )0.26 6.720.48
61001000.18.11 ( 0.41 )0.86 ( 0.09 )0.85 ( 0.01 )0.3312.250.52
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 3.65 ( 0.23 ) & 2.83 ( 0.11 ) & 0.78 ( 0.01 ) & 0.32 & 5.82 & 0.39\\\\\n", + "\t2 & 100 & 50 & 0.1 & 7.35 ( 0.34 ) & 0.68 ( 0.09 ) & 0.85 ( 0.01 ) & 0.34 & 11.67 & 0.50\\\\\n", + "\t3 & 500 & 50 & 0.1 & 4.99 ( 0.22 ) & 0 ( 0 ) & 0.92 ( 0 ) & 0.55 & 9.99 & 0.37\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 2.42 ( 0.12 ) & 0 ( 0 ) & 0.93 ( 0 ) & 0.78 & 7.42 & 0.17\\\\\n", + "\t5 & 50 & 100 & 0.1 & 4.65 ( 0.29 ) & 2.93 ( 0.12 ) & 0.74 ( 0.01 ) & 0.26 & 6.72 & 0.48\\\\\n", + "\t6 & 100 & 100 & 0.1 & 8.11 ( 0.41 ) & 0.86 ( 0.09 ) & 0.85 ( 0.01 ) & 0.33 & 12.25 & 0.52\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 3.65 ( 0.23 ) | 2.83 ( 0.11 ) | 0.78 ( 0.01 ) | 0.32 | 5.82 | 0.39 |\n", + "| 2 | 100 | 50 | 0.1 | 7.35 ( 0.34 ) | 0.68 ( 0.09 ) | 0.85 ( 0.01 ) | 0.34 | 11.67 | 0.50 |\n", + "| 3 | 500 | 50 | 0.1 | 4.99 ( 0.22 ) | 0 ( 0 ) | 0.92 ( 0 ) | 0.55 | 9.99 | 0.37 |\n", + "| 4 | 1000 | 50 | 0.1 | 2.42 ( 0.12 ) | 0 ( 0 ) | 0.93 ( 0 ) | 0.78 | 7.42 | 0.17 |\n", + "| 5 | 50 | 100 | 0.1 | 4.65 ( 0.29 ) | 2.93 ( 0.12 ) | 0.74 ( 0.01 ) | 0.26 | 6.72 | 0.48 |\n", + "| 6 | 100 | 100 | 0.1 | 8.11 ( 0.41 ) | 0.86 ( 0.09 ) | 0.85 ( 0.01 ) | 0.33 | 12.25 | 0.52 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select FDR \n", + "1 50 50 0.1 3.65 ( 0.23 ) 2.83 ( 0.11 ) 0.78 ( 0.01 ) 0.32 5.82 0.39\n", + "2 100 50 0.1 7.35 ( 0.34 ) 0.68 ( 0.09 ) 0.85 ( 0.01 ) 0.34 11.67 0.50\n", + "3 500 50 0.1 4.99 ( 0.22 ) 0 ( 0 ) 0.92 ( 0 ) 0.55 9.99 0.37\n", + "4 1000 50 0.1 2.42 ( 0.12 ) 0 ( 0 ) 0.93 ( 0 ) 0.78 7.42 0.17\n", + "5 50 100 0.1 4.65 ( 0.29 ) 2.93 ( 0.12 ) 0.74 ( 0.01 ) 0.26 6.72 0.48\n", + "6 100 100 0.1 8.11 ( 0.41 ) 0.86 ( 0.09 ) 0.85 ( 0.01 ) 0.33 12.25 0.52" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
755005000.915.93 ( 0.73 )1.42 ( 0.1 )0.81 ( 0 )0.1919.510.73
7610005000.911.96 ( 0.46 )0.42 ( 0.06 )0.83 ( 0 )0.3116.540.63
775010000.98.02 ( 0.28 )4.9 ( 0.07 )0.66 ( 0.01 )0.08 8.120.85
7810010000.95.85 ( 0.58 )4.37 ( 0.07 )0.69 ( 0.01 )0.18 6.480.61
7950010000.918.7 ( 0.93 )1.88 ( 0.1 )0.8 ( 0 )0.1621.820.77
80100010000.920.07 ( 0.72 )0.41 ( 0.05 )0.83 ( 0 )0.2124.660.75
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 15.93 ( 0.73 ) & 1.42 ( 0.1 ) & 0.81 ( 0 ) & 0.19 & 19.51 & 0.73\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 11.96 ( 0.46 ) & 0.42 ( 0.06 ) & 0.83 ( 0 ) & 0.31 & 16.54 & 0.63\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 8.02 ( 0.28 ) & 4.9 ( 0.07 ) & 0.66 ( 0.01 ) & 0.08 & 8.12 & 0.85\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 5.85 ( 0.58 ) & 4.37 ( 0.07 ) & 0.69 ( 0.01 ) & 0.18 & 6.48 & 0.61\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 18.7 ( 0.93 ) & 1.88 ( 0.1 ) & 0.8 ( 0 ) & 0.16 & 21.82 & 0.77\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 20.07 ( 0.72 ) & 0.41 ( 0.05 ) & 0.83 ( 0 ) & 0.21 & 24.66 & 0.75\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 15.93 ( 0.73 ) | 1.42 ( 0.1 ) | 0.81 ( 0 ) | 0.19 | 19.51 | 0.73 |\n", + "| 76 | 1000 | 500 | 0.9 | 11.96 ( 0.46 ) | 0.42 ( 0.06 ) | 0.83 ( 0 ) | 0.31 | 16.54 | 0.63 |\n", + "| 77 | 50 | 1000 | 0.9 | 8.02 ( 0.28 ) | 4.9 ( 0.07 ) | 0.66 ( 0.01 ) | 0.08 | 8.12 | 0.85 |\n", + "| 78 | 100 | 1000 | 0.9 | 5.85 ( 0.58 ) | 4.37 ( 0.07 ) | 0.69 ( 0.01 ) | 0.18 | 6.48 | 0.61 |\n", + "| 79 | 500 | 1000 | 0.9 | 18.7 ( 0.93 ) | 1.88 ( 0.1 ) | 0.8 ( 0 ) | 0.16 | 21.82 | 0.77 |\n", + "| 80 | 1000 | 1000 | 0.9 | 20.07 ( 0.72 ) | 0.41 ( 0.05 ) | 0.83 ( 0 ) | 0.21 | 24.66 | 0.75 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select\n", + "75 500 500 0.9 15.93 ( 0.73 ) 1.42 ( 0.1 ) 0.81 ( 0 ) 0.19 19.51 \n", + "76 1000 500 0.9 11.96 ( 0.46 ) 0.42 ( 0.06 ) 0.83 ( 0 ) 0.31 16.54 \n", + "77 50 1000 0.9 8.02 ( 0.28 ) 4.9 ( 0.07 ) 0.66 ( 0.01 ) 0.08 8.12 \n", + "78 100 1000 0.9 5.85 ( 0.58 ) 4.37 ( 0.07 ) 0.69 ( 0.01 ) 0.18 6.48 \n", + "79 500 1000 0.9 18.7 ( 0.93 ) 1.88 ( 0.1 ) 0.8 ( 0 ) 0.16 21.82 \n", + "80 1000 1000 0.9 20.07 ( 0.72 ) 0.41 ( 0.05 ) 0.83 ( 0 ) 0.21 24.66 \n", + " FDR \n", + "75 0.73\n", + "76 0.63\n", + "77 0.85\n", + "78 0.61\n", + "79 0.77\n", + "80 0.75" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_toe <- apply(table_toe,2,as.character)\n", + "rownames(result.table_toe) = rownames(table_toe)\n", + "result.table_toe = as.data.frame(result.table_toe)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_toe$n = tidyr::extract_numeric(result.table_toe$n)\n", + "result.table_toe$p = tidyr::extract_numeric(result.table_toe$p)\n", + "result.table_toe$ratio = result.table_toe$p / result.table_toe$n\n", + "\n", + "result.table_toe = result.table_toe[c('n', 'p', 'rou', 'ratio', 'Stab', 'ROC', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_toe)[1:4] = c('N', 'P', 'Corr', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_toe$Stab = as.numeric(as.character(result.table_toe$Stab))\n", + "result.table_toe$num_select = as.numeric(as.character(result.table_toe$num_select))\n", + "\n", + "result.table_toe$ROC_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$ROC))\n", + "result.table_toe$FP_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$FP))\n", + "result.table_toe$FN_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$FN))" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "
A data.frame: 0 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
\n" + ], + "text/latex": [ + "A data.frame: 0 × 13\n", + "\\begin{tabular}{lllllllllllll}\n", + " N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 0 × 13\n", + "\n", + "| N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select FDR ROC_mean FP_mean FN_mean" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check whether missing values exists\n", + "result.table_toe[rowSums(is.na(result.table_toe)) > 0,]" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 500.11.000.320.78 ( 0.01 )3.65 ( 0.23 )2.83 ( 0.11 ) 5.820.390.783.652.83
2 100 500.10.500.340.85 ( 0.01 )7.35 ( 0.34 )0.68 ( 0.09 )11.670.5 0.857.350.68
3 500 500.10.100.550.92 ( 0 ) 4.99 ( 0.22 )0 ( 0 ) 9.990.370.924.990.00
41000 500.10.050.780.93 ( 0 ) 2.42 ( 0.12 )0 ( 0 ) 7.420.170.932.420.00
5 501000.12.000.260.74 ( 0.01 )4.65 ( 0.29 )2.93 ( 0.12 ) 6.720.480.744.652.93
6 1001000.11.000.330.85 ( 0.01 )8.11 ( 0.41 )0.86 ( 0.09 )12.250.520.858.110.86
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1.00 & 0.32 & 0.78 ( 0.01 ) & 3.65 ( 0.23 ) & 2.83 ( 0.11 ) & 5.82 & 0.39 & 0.78 & 3.65 & 2.83\\\\\n", + "\t2 & 100 & 50 & 0.1 & 0.50 & 0.34 & 0.85 ( 0.01 ) & 7.35 ( 0.34 ) & 0.68 ( 0.09 ) & 11.67 & 0.5 & 0.85 & 7.35 & 0.68\\\\\n", + "\t3 & 500 & 50 & 0.1 & 0.10 & 0.55 & 0.92 ( 0 ) & 4.99 ( 0.22 ) & 0 ( 0 ) & 9.99 & 0.37 & 0.92 & 4.99 & 0.00\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 0.05 & 0.78 & 0.93 ( 0 ) & 2.42 ( 0.12 ) & 0 ( 0 ) & 7.42 & 0.17 & 0.93 & 2.42 & 0.00\\\\\n", + "\t5 & 50 & 100 & 0.1 & 2.00 & 0.26 & 0.74 ( 0.01 ) & 4.65 ( 0.29 ) & 2.93 ( 0.12 ) & 6.72 & 0.48 & 0.74 & 4.65 & 2.93\\\\\n", + "\t6 & 100 & 100 & 0.1 & 1.00 & 0.33 & 0.85 ( 0.01 ) & 8.11 ( 0.41 ) & 0.86 ( 0.09 ) & 12.25 & 0.52 & 0.85 & 8.11 & 0.86\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1.00 | 0.32 | 0.78 ( 0.01 ) | 3.65 ( 0.23 ) | 2.83 ( 0.11 ) | 5.82 | 0.39 | 0.78 | 3.65 | 2.83 |\n", + "| 2 | 100 | 50 | 0.1 | 0.50 | 0.34 | 0.85 ( 0.01 ) | 7.35 ( 0.34 ) | 0.68 ( 0.09 ) | 11.67 | 0.5 | 0.85 | 7.35 | 0.68 |\n", + "| 3 | 500 | 50 | 0.1 | 0.10 | 0.55 | 0.92 ( 0 ) | 4.99 ( 0.22 ) | 0 ( 0 ) | 9.99 | 0.37 | 0.92 | 4.99 | 0.00 |\n", + "| 4 | 1000 | 50 | 0.1 | 0.05 | 0.78 | 0.93 ( 0 ) | 2.42 ( 0.12 ) | 0 ( 0 ) | 7.42 | 0.17 | 0.93 | 2.42 | 0.00 |\n", + "| 5 | 50 | 100 | 0.1 | 2.00 | 0.26 | 0.74 ( 0.01 ) | 4.65 ( 0.29 ) | 2.93 ( 0.12 ) | 6.72 | 0.48 | 0.74 | 4.65 | 2.93 |\n", + "| 6 | 100 | 100 | 0.1 | 1.00 | 0.33 | 0.85 ( 0.01 ) | 8.11 ( 0.41 ) | 0.86 ( 0.09 ) | 12.25 | 0.52 | 0.85 | 8.11 | 0.86 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select\n", + "1 50 50 0.1 1.00 0.32 0.78 ( 0.01 ) 3.65 ( 0.23 ) 2.83 ( 0.11 ) 5.82 \n", + "2 100 50 0.1 0.50 0.34 0.85 ( 0.01 ) 7.35 ( 0.34 ) 0.68 ( 0.09 ) 11.67 \n", + "3 500 50 0.1 0.10 0.55 0.92 ( 0 ) 4.99 ( 0.22 ) 0 ( 0 ) 9.99 \n", + "4 1000 50 0.1 0.05 0.78 0.93 ( 0 ) 2.42 ( 0.12 ) 0 ( 0 ) 7.42 \n", + "5 50 100 0.1 2.00 0.26 0.74 ( 0.01 ) 4.65 ( 0.29 ) 2.93 ( 0.12 ) 6.72 \n", + "6 100 100 0.1 1.00 0.33 0.85 ( 0.01 ) 8.11 ( 0.41 ) 0.86 ( 0.09 ) 12.25 \n", + " FDR ROC_mean FP_mean FN_mean\n", + "1 0.39 0.78 3.65 2.83 \n", + "2 0.5 0.85 7.35 0.68 \n", + "3 0.37 0.92 4.99 0.00 \n", + "4 0.17 0.93 2.42 0.00 \n", + "5 0.48 0.74 4.65 2.93 \n", + "6 0.52 0.85 8.11 0.86 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
75 500 5000.9 1.00.190.81 ( 0 ) 15.93 ( 0.73 )1.42 ( 0.1 ) 19.510.730.8115.931.42
761000 5000.9 0.50.310.83 ( 0 ) 11.96 ( 0.46 )0.42 ( 0.06 )16.540.630.8311.960.42
77 5010000.920.00.080.66 ( 0.01 )8.02 ( 0.28 ) 4.9 ( 0.07 ) 8.120.850.66 8.024.90
78 10010000.910.00.180.69 ( 0.01 )5.85 ( 0.58 ) 4.37 ( 0.07 ) 6.480.610.69 5.854.37
79 50010000.9 2.00.160.8 ( 0 ) 18.7 ( 0.93 ) 1.88 ( 0.1 ) 21.820.770.8018.701.88
80100010000.9 1.00.210.83 ( 0 ) 20.07 ( 0.72 )0.41 ( 0.05 )24.660.750.8320.070.41
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 1.0 & 0.19 & 0.81 ( 0 ) & 15.93 ( 0.73 ) & 1.42 ( 0.1 ) & 19.51 & 0.73 & 0.81 & 15.93 & 1.42\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.5 & 0.31 & 0.83 ( 0 ) & 11.96 ( 0.46 ) & 0.42 ( 0.06 ) & 16.54 & 0.63 & 0.83 & 11.96 & 0.42\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.0 & 0.08 & 0.66 ( 0.01 ) & 8.02 ( 0.28 ) & 4.9 ( 0.07 ) & 8.12 & 0.85 & 0.66 & 8.02 & 4.90\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.0 & 0.18 & 0.69 ( 0.01 ) & 5.85 ( 0.58 ) & 4.37 ( 0.07 ) & 6.48 & 0.61 & 0.69 & 5.85 & 4.37\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.0 & 0.16 & 0.8 ( 0 ) & 18.7 ( 0.93 ) & 1.88 ( 0.1 ) & 21.82 & 0.77 & 0.80 & 18.70 & 1.88\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.0 & 0.21 & 0.83 ( 0 ) & 20.07 ( 0.72 ) & 0.41 ( 0.05 ) & 24.66 & 0.75 & 0.83 & 20.07 & 0.41\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 1.0 | 0.19 | 0.81 ( 0 ) | 15.93 ( 0.73 ) | 1.42 ( 0.1 ) | 19.51 | 0.73 | 0.81 | 15.93 | 1.42 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.5 | 0.31 | 0.83 ( 0 ) | 11.96 ( 0.46 ) | 0.42 ( 0.06 ) | 16.54 | 0.63 | 0.83 | 11.96 | 0.42 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.0 | 0.08 | 0.66 ( 0.01 ) | 8.02 ( 0.28 ) | 4.9 ( 0.07 ) | 8.12 | 0.85 | 0.66 | 8.02 | 4.90 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.0 | 0.18 | 0.69 ( 0.01 ) | 5.85 ( 0.58 ) | 4.37 ( 0.07 ) | 6.48 | 0.61 | 0.69 | 5.85 | 4.37 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.0 | 0.16 | 0.8 ( 0 ) | 18.7 ( 0.93 ) | 1.88 ( 0.1 ) | 21.82 | 0.77 | 0.80 | 18.70 | 1.88 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.0 | 0.21 | 0.83 ( 0 ) | 20.07 ( 0.72 ) | 0.41 ( 0.05 ) | 24.66 | 0.75 | 0.83 | 20.07 | 0.41 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "75 500 500 0.9 1.0 0.19 0.81 ( 0 ) 15.93 ( 0.73 ) 1.42 ( 0.1 ) \n", + "76 1000 500 0.9 0.5 0.31 0.83 ( 0 ) 11.96 ( 0.46 ) 0.42 ( 0.06 )\n", + "77 50 1000 0.9 20.0 0.08 0.66 ( 0.01 ) 8.02 ( 0.28 ) 4.9 ( 0.07 ) \n", + "78 100 1000 0.9 10.0 0.18 0.69 ( 0.01 ) 5.85 ( 0.58 ) 4.37 ( 0.07 )\n", + "79 500 1000 0.9 2.0 0.16 0.8 ( 0 ) 18.7 ( 0.93 ) 1.88 ( 0.1 ) \n", + "80 1000 1000 0.9 1.0 0.21 0.83 ( 0 ) 20.07 ( 0.72 ) 0.41 ( 0.05 )\n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "75 19.51 0.73 0.81 15.93 1.42 \n", + "76 16.54 0.63 0.83 11.96 0.42 \n", + "77 8.12 0.85 0.66 8.02 4.90 \n", + "78 6.48 0.61 0.69 5.85 4.37 \n", + "79 21.82 0.77 0.80 18.70 1.88 \n", + "80 24.66 0.75 0.83 20.07 0.41 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 80 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 500.1 1.000.320.78 ( 0.01 )3.65 ( 0.23 ) 2.83 ( 0.11 ) 5.820.390.78 3.652.83
2 100 500.1 0.500.340.85 ( 0.01 )7.35 ( 0.34 ) 0.68 ( 0.09 )11.670.5 0.85 7.350.68
3 500 500.1 0.100.550.92 ( 0 ) 4.99 ( 0.22 ) 0 ( 0 ) 9.990.370.92 4.990.00
41000 500.1 0.050.780.93 ( 0 ) 2.42 ( 0.12 ) 0 ( 0 ) 7.420.170.93 2.420.00
5 50 1000.1 2.000.260.74 ( 0.01 )4.65 ( 0.29 ) 2.93 ( 0.12 ) 6.720.480.74 4.652.93
6 100 1000.1 1.000.330.85 ( 0.01 )8.11 ( 0.41 ) 0.86 ( 0.09 )12.250.520.85 8.110.86
7 500 1000.1 0.200.400.92 ( 0 ) 8.63 ( 0.29 ) 0 ( 0 ) 13.630.540.92 8.630.00
81000 1000.1 0.100.640.92 ( 0 ) 4.02 ( 0.18 ) 0 ( 0 ) 9.020.310.92 4.020.00
9 50 5000.110.000.120.71 ( 0.01 )8.29 ( 0.25 ) 3.89 ( 0.1 ) 9.400.770.71 8.293.89
10 100 5000.1 5.000.240.8 ( 0.01 ) 8.84 ( 0.61 ) 2.19 ( 0.12 )11.650.570.80 8.842.19
11 500 5000.1 1.000.210.92 ( 0 ) 22.86 ( 0.75 )0 ( 0 ) 27.860.770.9222.860.00
121000 5000.1 0.500.330.93 ( 0 ) 12.73 ( 0.35 )0 ( 0 ) 17.730.650.9312.730.00
13 5010000.120.000.090.68 ( 0.01 )10.35 ( 0.33 )4.14 ( 0.09 )11.210.820.6810.354.14
14 10010000.110.000.190.77 ( 0.01 )10.84 ( 0.75 )2.46 ( 0.1 ) 13.380.630.7710.842.46
15 50010000.1 2.000.160.92 ( 0 ) 30.83 ( 1.05 )0 ( 0 ) 35.830.810.9230.830.00
16100010000.1 1.000.230.93 ( 0 ) 20.39 ( 0.59 )0 ( 0 ) 25.390.750.9320.390.00
17 50 500.3 1.000.280.75 ( 0.01 )3.69 ( 0.22 ) 3.04 ( 0.1 ) 5.650.4 0.75 3.693.04
18 100 500.3 0.500.320.84 ( 0.01 )7.11 ( 0.33 ) 0.93 ( 0.1 ) 11.180.5 0.84 7.110.93
19 500 500.3 0.100.510.92 ( 0 ) 5.67 ( 0.22 ) 0 ( 0 ) 10.670.410.92 5.670.00
201000 500.3 0.050.780.92 ( 0 ) 2.48 ( 0.13 ) 0 ( 0 ) 7.480.180.92 2.480.00
21 50 1000.3 2.000.260.75 ( 0.01 )4.41 ( 0.27 ) 3.47 ( 0.09 ) 5.940.490.75 4.413.47
22 100 1000.3 1.000.280.82 ( 0.01 )8.16 ( 0.53 ) 1.46 ( 0.11 )11.700.520.82 8.161.46
23 500 1000.3 0.200.410.92 ( 0 ) 8.48 ( 0.34 ) 0 ( 0 ) 13.480.530.92 8.480.00
241000 1000.3 0.100.670.92 ( 0 ) 3.71 ( 0.15 ) 0 ( 0 ) 8.710.290.92 3.710.00
25 50 5000.310.000.130.69 ( 0.01 )7.94 ( 0.3 ) 4.11 ( 0.08 ) 8.830.770.69 7.944.11
26 100 5000.3 5.000.200.78 ( 0.01 )10.16 ( 0.68 )2.49 ( 0.11 )12.670.630.7810.162.49
27 500 5000.3 1.000.200.91 ( 0 ) 23.65 ( 0.7 ) 0 ( 0 ) 28.650.780.9123.650.00
281000 5000.3 0.500.340.92 ( 0 ) 12.28 ( 0.34 )0 ( 0 ) 17.280.640.9212.280.00
29 5010000.320.000.100.68 ( 0.01 )9.77 ( 0.31 ) 4.3 ( 0.06 ) 10.470.830.68 9.774.30
30 10010000.310.000.170.77 ( 0.01 )10.68 ( 0.8 ) 3.02 ( 0.11 )12.660.670.7710.683.02
51 500 500.7 0.100.570.89 ( 0 ) 4.61 ( 0.17 ) 0.04 ( 0.02 ) 9.570.360.89 4.610.04
521000 500.7 0.050.740.89 ( 0 ) 2.8 ( 0.15 ) 0 ( 0 ) 7.800.210.89 2.800.00
53 50 1000.7 2.000.240.71 ( 0.01 )4.31 ( 0.28 ) 4.05 ( 0.09 ) 5.260.550.71 4.314.05
54 100 1000.7 1.000.270.79 ( 0.01 )6.34 ( 0.4 ) 2.67 ( 0.12 ) 8.670.530.79 6.342.67
55 500 1000.7 0.200.430.89 ( 0 ) 7.92 ( 0.24 ) 0.04 ( 0.02 )12.880.520.89 7.920.04
561000 1000.7 0.100.660.9 ( 0 ) 3.85 ( 0.16 ) 0 ( 0 ) 8.850.3 0.90 3.850.00
57 50 5000.710.000.140.7 ( 0.01 ) 6.5 ( 0.24 ) 4.63 ( 0.06 ) 6.870.770.70 6.504.63
58 100 5000.7 5.000.210.76 ( 0.01 )6.98 ( 0.58 ) 3.65 ( 0.08 ) 8.330.560.76 6.983.65
59 500 5000.7 1.000.200.88 ( 0 ) 22.04 ( 0.74 )0.14 ( 0.04 )26.900.760.8822.040.14
601000 5000.7 0.500.330.89 ( 0 ) 13.15 ( 0.38 )0 ( 0 ) 18.150.650.8913.150.00
61 5010000.720.000.100.66 ( 0.01 )8.82 ( 0.28 ) 4.72 ( 0.05 ) 9.100.850.66 8.824.72
62 10010000.710.000.180.76 ( 0.01 )6.93 ( 0.59 ) 4 ( 0.08 ) 7.930.620.76 6.934.00
63 50010000.7 2.000.160.87 ( 0 ) 29.07 ( 1 ) 0.16 ( 0.04 )33.910.810.8729.070.16
64100010000.7 1.000.220.89 ( 0 ) 21.8 ( 0.63 ) 0 ( 0 ) 26.800.760.8921.800.00
65 50 500.9 1.000.300.69 ( 0.01 )2.9 ( 0.2 ) 4.22 ( 0.09 ) 3.680.410.69 2.904.22
66 100 500.9 0.500.370.76 ( 0.01 )3.93 ( 0.21 ) 2.74 ( 0.11 ) 6.190.410.76 3.932.74
67 500 500.9 0.100.570.83 ( 0 ) 3.65 ( 0.16 ) 0.56 ( 0.08 ) 8.090.310.83 3.650.56
681000 500.9 0.050.760.83 ( 0 ) 2.41 ( 0.12 ) 0.23 ( 0.04 ) 7.180.180.83 2.410.23
69 50 1000.9 2.000.260.7 ( 0.01 ) 3.29 ( 0.23 ) 4.29 ( 0.09 ) 4.000.450.70 3.294.29
70 100 1000.9 1.000.320.76 ( 0.01 )4.77 ( 0.33 ) 3.26 ( 0.09 ) 6.510.460.76 4.773.26
71 500 1000.9 0.200.450.82 ( 0 ) 5.65 ( 0.21 ) 0.92 ( 0.09 ) 9.730.450.82 5.650.92
721000 1000.9 0.100.630.83 ( 0 ) 3.87 ( 0.18 ) 0.24 ( 0.05 ) 8.630.3 0.83 3.870.24
73 50 5000.910.000.150.66 ( 0.01 )5.8 ( 0.24 ) 4.65 ( 0.07 ) 6.150.750.66 5.804.65
74 100 5000.9 5.000.210.7 ( 0.01 ) 5.55 ( 0.55 ) 4.14 ( 0.09 ) 6.410.510.70 5.554.14
75 500 5000.9 1.000.190.81 ( 0 ) 15.93 ( 0.73 )1.42 ( 0.1 ) 19.510.730.8115.931.42
761000 5000.9 0.500.310.83 ( 0 ) 11.96 ( 0.46 )0.42 ( 0.06 )16.540.630.8311.960.42
77 5010000.920.000.080.66 ( 0.01 )8.02 ( 0.28 ) 4.9 ( 0.07 ) 8.120.850.66 8.024.90
78 10010000.910.000.180.69 ( 0.01 )5.85 ( 0.58 ) 4.37 ( 0.07 ) 6.480.610.69 5.854.37
79 50010000.9 2.000.160.8 ( 0 ) 18.7 ( 0.93 ) 1.88 ( 0.1 ) 21.820.770.8018.701.88
80100010000.9 1.000.210.83 ( 0 ) 20.07 ( 0.72 )0.41 ( 0.05 )24.660.750.8320.070.41
\n" + ], + "text/latex": [ + "A data.frame: 80 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1.00 & 0.32 & 0.78 ( 0.01 ) & 3.65 ( 0.23 ) & 2.83 ( 0.11 ) & 5.82 & 0.39 & 0.78 & 3.65 & 2.83\\\\\n", + "\t2 & 100 & 50 & 0.1 & 0.50 & 0.34 & 0.85 ( 0.01 ) & 7.35 ( 0.34 ) & 0.68 ( 0.09 ) & 11.67 & 0.5 & 0.85 & 7.35 & 0.68\\\\\n", + "\t3 & 500 & 50 & 0.1 & 0.10 & 0.55 & 0.92 ( 0 ) & 4.99 ( 0.22 ) & 0 ( 0 ) & 9.99 & 0.37 & 0.92 & 4.99 & 0.00\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 0.05 & 0.78 & 0.93 ( 0 ) & 2.42 ( 0.12 ) & 0 ( 0 ) & 7.42 & 0.17 & 0.93 & 2.42 & 0.00\\\\\n", + "\t5 & 50 & 100 & 0.1 & 2.00 & 0.26 & 0.74 ( 0.01 ) & 4.65 ( 0.29 ) & 2.93 ( 0.12 ) & 6.72 & 0.48 & 0.74 & 4.65 & 2.93\\\\\n", + "\t6 & 100 & 100 & 0.1 & 1.00 & 0.33 & 0.85 ( 0.01 ) & 8.11 ( 0.41 ) & 0.86 ( 0.09 ) & 12.25 & 0.52 & 0.85 & 8.11 & 0.86\\\\\n", + "\t7 & 500 & 100 & 0.1 & 0.20 & 0.40 & 0.92 ( 0 ) & 8.63 ( 0.29 ) & 0 ( 0 ) & 13.63 & 0.54 & 0.92 & 8.63 & 0.00\\\\\n", + "\t8 & 1000 & 100 & 0.1 & 0.10 & 0.64 & 0.92 ( 0 ) & 4.02 ( 0.18 ) & 0 ( 0 ) & 9.02 & 0.31 & 0.92 & 4.02 & 0.00\\\\\n", + "\t9 & 50 & 500 & 0.1 & 10.00 & 0.12 & 0.71 ( 0.01 ) & 8.29 ( 0.25 ) & 3.89 ( 0.1 ) & 9.40 & 0.77 & 0.71 & 8.29 & 3.89\\\\\n", + "\t10 & 100 & 500 & 0.1 & 5.00 & 0.24 & 0.8 ( 0.01 ) & 8.84 ( 0.61 ) & 2.19 ( 0.12 ) & 11.65 & 0.57 & 0.80 & 8.84 & 2.19\\\\\n", + "\t11 & 500 & 500 & 0.1 & 1.00 & 0.21 & 0.92 ( 0 ) & 22.86 ( 0.75 ) & 0 ( 0 ) & 27.86 & 0.77 & 0.92 & 22.86 & 0.00\\\\\n", + "\t12 & 1000 & 500 & 0.1 & 0.50 & 0.33 & 0.93 ( 0 ) & 12.73 ( 0.35 ) & 0 ( 0 ) & 17.73 & 0.65 & 0.93 & 12.73 & 0.00\\\\\n", + "\t13 & 50 & 1000 & 0.1 & 20.00 & 0.09 & 0.68 ( 0.01 ) & 10.35 ( 0.33 ) & 4.14 ( 0.09 ) & 11.21 & 0.82 & 0.68 & 10.35 & 4.14\\\\\n", + "\t14 & 100 & 1000 & 0.1 & 10.00 & 0.19 & 0.77 ( 0.01 ) & 10.84 ( 0.75 ) & 2.46 ( 0.1 ) & 13.38 & 0.63 & 0.77 & 10.84 & 2.46\\\\\n", + "\t15 & 500 & 1000 & 0.1 & 2.00 & 0.16 & 0.92 ( 0 ) & 30.83 ( 1.05 ) & 0 ( 0 ) & 35.83 & 0.81 & 0.92 & 30.83 & 0.00\\\\\n", + "\t16 & 1000 & 1000 & 0.1 & 1.00 & 0.23 & 0.93 ( 0 ) & 20.39 ( 0.59 ) & 0 ( 0 ) & 25.39 & 0.75 & 0.93 & 20.39 & 0.00\\\\\n", + "\t17 & 50 & 50 & 0.3 & 1.00 & 0.28 & 0.75 ( 0.01 ) & 3.69 ( 0.22 ) & 3.04 ( 0.1 ) & 5.65 & 0.4 & 0.75 & 3.69 & 3.04\\\\\n", + "\t18 & 100 & 50 & 0.3 & 0.50 & 0.32 & 0.84 ( 0.01 ) & 7.11 ( 0.33 ) & 0.93 ( 0.1 ) & 11.18 & 0.5 & 0.84 & 7.11 & 0.93\\\\\n", + "\t19 & 500 & 50 & 0.3 & 0.10 & 0.51 & 0.92 ( 0 ) & 5.67 ( 0.22 ) & 0 ( 0 ) & 10.67 & 0.41 & 0.92 & 5.67 & 0.00\\\\\n", + "\t20 & 1000 & 50 & 0.3 & 0.05 & 0.78 & 0.92 ( 0 ) & 2.48 ( 0.13 ) & 0 ( 0 ) & 7.48 & 0.18 & 0.92 & 2.48 & 0.00\\\\\n", + "\t21 & 50 & 100 & 0.3 & 2.00 & 0.26 & 0.75 ( 0.01 ) & 4.41 ( 0.27 ) & 3.47 ( 0.09 ) & 5.94 & 0.49 & 0.75 & 4.41 & 3.47\\\\\n", + "\t22 & 100 & 100 & 0.3 & 1.00 & 0.28 & 0.82 ( 0.01 ) & 8.16 ( 0.53 ) & 1.46 ( 0.11 ) & 11.70 & 0.52 & 0.82 & 8.16 & 1.46\\\\\n", + "\t23 & 500 & 100 & 0.3 & 0.20 & 0.41 & 0.92 ( 0 ) & 8.48 ( 0.34 ) & 0 ( 0 ) & 13.48 & 0.53 & 0.92 & 8.48 & 0.00\\\\\n", + "\t24 & 1000 & 100 & 0.3 & 0.10 & 0.67 & 0.92 ( 0 ) & 3.71 ( 0.15 ) & 0 ( 0 ) & 8.71 & 0.29 & 0.92 & 3.71 & 0.00\\\\\n", + "\t25 & 50 & 500 & 0.3 & 10.00 & 0.13 & 0.69 ( 0.01 ) & 7.94 ( 0.3 ) & 4.11 ( 0.08 ) & 8.83 & 0.77 & 0.69 & 7.94 & 4.11\\\\\n", + "\t26 & 100 & 500 & 0.3 & 5.00 & 0.20 & 0.78 ( 0.01 ) & 10.16 ( 0.68 ) & 2.49 ( 0.11 ) & 12.67 & 0.63 & 0.78 & 10.16 & 2.49\\\\\n", + "\t27 & 500 & 500 & 0.3 & 1.00 & 0.20 & 0.91 ( 0 ) & 23.65 ( 0.7 ) & 0 ( 0 ) & 28.65 & 0.78 & 0.91 & 23.65 & 0.00\\\\\n", + "\t28 & 1000 & 500 & 0.3 & 0.50 & 0.34 & 0.92 ( 0 ) & 12.28 ( 0.34 ) & 0 ( 0 ) & 17.28 & 0.64 & 0.92 & 12.28 & 0.00\\\\\n", + "\t29 & 50 & 1000 & 0.3 & 20.00 & 0.10 & 0.68 ( 0.01 ) & 9.77 ( 0.31 ) & 4.3 ( 0.06 ) & 10.47 & 0.83 & 0.68 & 9.77 & 4.30\\\\\n", + "\t30 & 100 & 1000 & 0.3 & 10.00 & 0.17 & 0.77 ( 0.01 ) & 10.68 ( 0.8 ) & 3.02 ( 0.11 ) & 12.66 & 0.67 & 0.77 & 10.68 & 3.02\\\\\n", + "\t⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮\\\\\n", + "\t51 & 500 & 50 & 0.7 & 0.10 & 0.57 & 0.89 ( 0 ) & 4.61 ( 0.17 ) & 0.04 ( 0.02 ) & 9.57 & 0.36 & 0.89 & 4.61 & 0.04\\\\\n", + "\t52 & 1000 & 50 & 0.7 & 0.05 & 0.74 & 0.89 ( 0 ) & 2.8 ( 0.15 ) & 0 ( 0 ) & 7.80 & 0.21 & 0.89 & 2.80 & 0.00\\\\\n", + "\t53 & 50 & 100 & 0.7 & 2.00 & 0.24 & 0.71 ( 0.01 ) & 4.31 ( 0.28 ) & 4.05 ( 0.09 ) & 5.26 & 0.55 & 0.71 & 4.31 & 4.05\\\\\n", + "\t54 & 100 & 100 & 0.7 & 1.00 & 0.27 & 0.79 ( 0.01 ) & 6.34 ( 0.4 ) & 2.67 ( 0.12 ) & 8.67 & 0.53 & 0.79 & 6.34 & 2.67\\\\\n", + "\t55 & 500 & 100 & 0.7 & 0.20 & 0.43 & 0.89 ( 0 ) & 7.92 ( 0.24 ) & 0.04 ( 0.02 ) & 12.88 & 0.52 & 0.89 & 7.92 & 0.04\\\\\n", + "\t56 & 1000 & 100 & 0.7 & 0.10 & 0.66 & 0.9 ( 0 ) & 3.85 ( 0.16 ) & 0 ( 0 ) & 8.85 & 0.3 & 0.90 & 3.85 & 0.00\\\\\n", + "\t57 & 50 & 500 & 0.7 & 10.00 & 0.14 & 0.7 ( 0.01 ) & 6.5 ( 0.24 ) & 4.63 ( 0.06 ) & 6.87 & 0.77 & 0.70 & 6.50 & 4.63\\\\\n", + "\t58 & 100 & 500 & 0.7 & 5.00 & 0.21 & 0.76 ( 0.01 ) & 6.98 ( 0.58 ) & 3.65 ( 0.08 ) & 8.33 & 0.56 & 0.76 & 6.98 & 3.65\\\\\n", + "\t59 & 500 & 500 & 0.7 & 1.00 & 0.20 & 0.88 ( 0 ) & 22.04 ( 0.74 ) & 0.14 ( 0.04 ) & 26.90 & 0.76 & 0.88 & 22.04 & 0.14\\\\\n", + "\t60 & 1000 & 500 & 0.7 & 0.50 & 0.33 & 0.89 ( 0 ) & 13.15 ( 0.38 ) & 0 ( 0 ) & 18.15 & 0.65 & 0.89 & 13.15 & 0.00\\\\\n", + "\t61 & 50 & 1000 & 0.7 & 20.00 & 0.10 & 0.66 ( 0.01 ) & 8.82 ( 0.28 ) & 4.72 ( 0.05 ) & 9.10 & 0.85 & 0.66 & 8.82 & 4.72\\\\\n", + "\t62 & 100 & 1000 & 0.7 & 10.00 & 0.18 & 0.76 ( 0.01 ) & 6.93 ( 0.59 ) & 4 ( 0.08 ) & 7.93 & 0.62 & 0.76 & 6.93 & 4.00\\\\\n", + "\t63 & 500 & 1000 & 0.7 & 2.00 & 0.16 & 0.87 ( 0 ) & 29.07 ( 1 ) & 0.16 ( 0.04 ) & 33.91 & 0.81 & 0.87 & 29.07 & 0.16\\\\\n", + "\t64 & 1000 & 1000 & 0.7 & 1.00 & 0.22 & 0.89 ( 0 ) & 21.8 ( 0.63 ) & 0 ( 0 ) & 26.80 & 0.76 & 0.89 & 21.80 & 0.00\\\\\n", + "\t65 & 50 & 50 & 0.9 & 1.00 & 0.30 & 0.69 ( 0.01 ) & 2.9 ( 0.2 ) & 4.22 ( 0.09 ) & 3.68 & 0.41 & 0.69 & 2.90 & 4.22\\\\\n", + "\t66 & 100 & 50 & 0.9 & 0.50 & 0.37 & 0.76 ( 0.01 ) & 3.93 ( 0.21 ) & 2.74 ( 0.11 ) & 6.19 & 0.41 & 0.76 & 3.93 & 2.74\\\\\n", + "\t67 & 500 & 50 & 0.9 & 0.10 & 0.57 & 0.83 ( 0 ) & 3.65 ( 0.16 ) & 0.56 ( 0.08 ) & 8.09 & 0.31 & 0.83 & 3.65 & 0.56\\\\\n", + "\t68 & 1000 & 50 & 0.9 & 0.05 & 0.76 & 0.83 ( 0 ) & 2.41 ( 0.12 ) & 0.23 ( 0.04 ) & 7.18 & 0.18 & 0.83 & 2.41 & 0.23\\\\\n", + "\t69 & 50 & 100 & 0.9 & 2.00 & 0.26 & 0.7 ( 0.01 ) & 3.29 ( 0.23 ) & 4.29 ( 0.09 ) & 4.00 & 0.45 & 0.70 & 3.29 & 4.29\\\\\n", + "\t70 & 100 & 100 & 0.9 & 1.00 & 0.32 & 0.76 ( 0.01 ) & 4.77 ( 0.33 ) & 3.26 ( 0.09 ) & 6.51 & 0.46 & 0.76 & 4.77 & 3.26\\\\\n", + "\t71 & 500 & 100 & 0.9 & 0.20 & 0.45 & 0.82 ( 0 ) & 5.65 ( 0.21 ) & 0.92 ( 0.09 ) & 9.73 & 0.45 & 0.82 & 5.65 & 0.92\\\\\n", + "\t72 & 1000 & 100 & 0.9 & 0.10 & 0.63 & 0.83 ( 0 ) & 3.87 ( 0.18 ) & 0.24 ( 0.05 ) & 8.63 & 0.3 & 0.83 & 3.87 & 0.24\\\\\n", + "\t73 & 50 & 500 & 0.9 & 10.00 & 0.15 & 0.66 ( 0.01 ) & 5.8 ( 0.24 ) & 4.65 ( 0.07 ) & 6.15 & 0.75 & 0.66 & 5.80 & 4.65\\\\\n", + "\t74 & 100 & 500 & 0.9 & 5.00 & 0.21 & 0.7 ( 0.01 ) & 5.55 ( 0.55 ) & 4.14 ( 0.09 ) & 6.41 & 0.51 & 0.70 & 5.55 & 4.14\\\\\n", + "\t75 & 500 & 500 & 0.9 & 1.00 & 0.19 & 0.81 ( 0 ) & 15.93 ( 0.73 ) & 1.42 ( 0.1 ) & 19.51 & 0.73 & 0.81 & 15.93 & 1.42\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.50 & 0.31 & 0.83 ( 0 ) & 11.96 ( 0.46 ) & 0.42 ( 0.06 ) & 16.54 & 0.63 & 0.83 & 11.96 & 0.42\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.00 & 0.08 & 0.66 ( 0.01 ) & 8.02 ( 0.28 ) & 4.9 ( 0.07 ) & 8.12 & 0.85 & 0.66 & 8.02 & 4.90\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.00 & 0.18 & 0.69 ( 0.01 ) & 5.85 ( 0.58 ) & 4.37 ( 0.07 ) & 6.48 & 0.61 & 0.69 & 5.85 & 4.37\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.00 & 0.16 & 0.8 ( 0 ) & 18.7 ( 0.93 ) & 1.88 ( 0.1 ) & 21.82 & 0.77 & 0.80 & 18.70 & 1.88\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.00 & 0.21 & 0.83 ( 0 ) & 20.07 ( 0.72 ) & 0.41 ( 0.05 ) & 24.66 & 0.75 & 0.83 & 20.07 & 0.41\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 80 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1.00 | 0.32 | 0.78 ( 0.01 ) | 3.65 ( 0.23 ) | 2.83 ( 0.11 ) | 5.82 | 0.39 | 0.78 | 3.65 | 2.83 |\n", + "| 2 | 100 | 50 | 0.1 | 0.50 | 0.34 | 0.85 ( 0.01 ) | 7.35 ( 0.34 ) | 0.68 ( 0.09 ) | 11.67 | 0.5 | 0.85 | 7.35 | 0.68 |\n", + "| 3 | 500 | 50 | 0.1 | 0.10 | 0.55 | 0.92 ( 0 ) | 4.99 ( 0.22 ) | 0 ( 0 ) | 9.99 | 0.37 | 0.92 | 4.99 | 0.00 |\n", + "| 4 | 1000 | 50 | 0.1 | 0.05 | 0.78 | 0.93 ( 0 ) | 2.42 ( 0.12 ) | 0 ( 0 ) | 7.42 | 0.17 | 0.93 | 2.42 | 0.00 |\n", + "| 5 | 50 | 100 | 0.1 | 2.00 | 0.26 | 0.74 ( 0.01 ) | 4.65 ( 0.29 ) | 2.93 ( 0.12 ) | 6.72 | 0.48 | 0.74 | 4.65 | 2.93 |\n", + "| 6 | 100 | 100 | 0.1 | 1.00 | 0.33 | 0.85 ( 0.01 ) | 8.11 ( 0.41 ) | 0.86 ( 0.09 ) | 12.25 | 0.52 | 0.85 | 8.11 | 0.86 |\n", + "| 7 | 500 | 100 | 0.1 | 0.20 | 0.40 | 0.92 ( 0 ) | 8.63 ( 0.29 ) | 0 ( 0 ) | 13.63 | 0.54 | 0.92 | 8.63 | 0.00 |\n", + "| 8 | 1000 | 100 | 0.1 | 0.10 | 0.64 | 0.92 ( 0 ) | 4.02 ( 0.18 ) | 0 ( 0 ) | 9.02 | 0.31 | 0.92 | 4.02 | 0.00 |\n", + "| 9 | 50 | 500 | 0.1 | 10.00 | 0.12 | 0.71 ( 0.01 ) | 8.29 ( 0.25 ) | 3.89 ( 0.1 ) | 9.40 | 0.77 | 0.71 | 8.29 | 3.89 |\n", + "| 10 | 100 | 500 | 0.1 | 5.00 | 0.24 | 0.8 ( 0.01 ) | 8.84 ( 0.61 ) | 2.19 ( 0.12 ) | 11.65 | 0.57 | 0.80 | 8.84 | 2.19 |\n", + "| 11 | 500 | 500 | 0.1 | 1.00 | 0.21 | 0.92 ( 0 ) | 22.86 ( 0.75 ) | 0 ( 0 ) | 27.86 | 0.77 | 0.92 | 22.86 | 0.00 |\n", + "| 12 | 1000 | 500 | 0.1 | 0.50 | 0.33 | 0.93 ( 0 ) | 12.73 ( 0.35 ) | 0 ( 0 ) | 17.73 | 0.65 | 0.93 | 12.73 | 0.00 |\n", + "| 13 | 50 | 1000 | 0.1 | 20.00 | 0.09 | 0.68 ( 0.01 ) | 10.35 ( 0.33 ) | 4.14 ( 0.09 ) | 11.21 | 0.82 | 0.68 | 10.35 | 4.14 |\n", + "| 14 | 100 | 1000 | 0.1 | 10.00 | 0.19 | 0.77 ( 0.01 ) | 10.84 ( 0.75 ) | 2.46 ( 0.1 ) | 13.38 | 0.63 | 0.77 | 10.84 | 2.46 |\n", + "| 15 | 500 | 1000 | 0.1 | 2.00 | 0.16 | 0.92 ( 0 ) | 30.83 ( 1.05 ) | 0 ( 0 ) | 35.83 | 0.81 | 0.92 | 30.83 | 0.00 |\n", + "| 16 | 1000 | 1000 | 0.1 | 1.00 | 0.23 | 0.93 ( 0 ) | 20.39 ( 0.59 ) | 0 ( 0 ) | 25.39 | 0.75 | 0.93 | 20.39 | 0.00 |\n", + "| 17 | 50 | 50 | 0.3 | 1.00 | 0.28 | 0.75 ( 0.01 ) | 3.69 ( 0.22 ) | 3.04 ( 0.1 ) | 5.65 | 0.4 | 0.75 | 3.69 | 3.04 |\n", + "| 18 | 100 | 50 | 0.3 | 0.50 | 0.32 | 0.84 ( 0.01 ) | 7.11 ( 0.33 ) | 0.93 ( 0.1 ) | 11.18 | 0.5 | 0.84 | 7.11 | 0.93 |\n", + "| 19 | 500 | 50 | 0.3 | 0.10 | 0.51 | 0.92 ( 0 ) | 5.67 ( 0.22 ) | 0 ( 0 ) | 10.67 | 0.41 | 0.92 | 5.67 | 0.00 |\n", + "| 20 | 1000 | 50 | 0.3 | 0.05 | 0.78 | 0.92 ( 0 ) | 2.48 ( 0.13 ) | 0 ( 0 ) | 7.48 | 0.18 | 0.92 | 2.48 | 0.00 |\n", + "| 21 | 50 | 100 | 0.3 | 2.00 | 0.26 | 0.75 ( 0.01 ) | 4.41 ( 0.27 ) | 3.47 ( 0.09 ) | 5.94 | 0.49 | 0.75 | 4.41 | 3.47 |\n", + "| 22 | 100 | 100 | 0.3 | 1.00 | 0.28 | 0.82 ( 0.01 ) | 8.16 ( 0.53 ) | 1.46 ( 0.11 ) | 11.70 | 0.52 | 0.82 | 8.16 | 1.46 |\n", + "| 23 | 500 | 100 | 0.3 | 0.20 | 0.41 | 0.92 ( 0 ) | 8.48 ( 0.34 ) | 0 ( 0 ) | 13.48 | 0.53 | 0.92 | 8.48 | 0.00 |\n", + "| 24 | 1000 | 100 | 0.3 | 0.10 | 0.67 | 0.92 ( 0 ) | 3.71 ( 0.15 ) | 0 ( 0 ) | 8.71 | 0.29 | 0.92 | 3.71 | 0.00 |\n", + "| 25 | 50 | 500 | 0.3 | 10.00 | 0.13 | 0.69 ( 0.01 ) | 7.94 ( 0.3 ) | 4.11 ( 0.08 ) | 8.83 | 0.77 | 0.69 | 7.94 | 4.11 |\n", + "| 26 | 100 | 500 | 0.3 | 5.00 | 0.20 | 0.78 ( 0.01 ) | 10.16 ( 0.68 ) | 2.49 ( 0.11 ) | 12.67 | 0.63 | 0.78 | 10.16 | 2.49 |\n", + "| 27 | 500 | 500 | 0.3 | 1.00 | 0.20 | 0.91 ( 0 ) | 23.65 ( 0.7 ) | 0 ( 0 ) | 28.65 | 0.78 | 0.91 | 23.65 | 0.00 |\n", + "| 28 | 1000 | 500 | 0.3 | 0.50 | 0.34 | 0.92 ( 0 ) | 12.28 ( 0.34 ) | 0 ( 0 ) | 17.28 | 0.64 | 0.92 | 12.28 | 0.00 |\n", + "| 29 | 50 | 1000 | 0.3 | 20.00 | 0.10 | 0.68 ( 0.01 ) | 9.77 ( 0.31 ) | 4.3 ( 0.06 ) | 10.47 | 0.83 | 0.68 | 9.77 | 4.30 |\n", + "| 30 | 100 | 1000 | 0.3 | 10.00 | 0.17 | 0.77 ( 0.01 ) | 10.68 ( 0.8 ) | 3.02 ( 0.11 ) | 12.66 | 0.67 | 0.77 | 10.68 | 3.02 |\n", + "| ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ |\n", + "| 51 | 500 | 50 | 0.7 | 0.10 | 0.57 | 0.89 ( 0 ) | 4.61 ( 0.17 ) | 0.04 ( 0.02 ) | 9.57 | 0.36 | 0.89 | 4.61 | 0.04 |\n", + "| 52 | 1000 | 50 | 0.7 | 0.05 | 0.74 | 0.89 ( 0 ) | 2.8 ( 0.15 ) | 0 ( 0 ) | 7.80 | 0.21 | 0.89 | 2.80 | 0.00 |\n", + "| 53 | 50 | 100 | 0.7 | 2.00 | 0.24 | 0.71 ( 0.01 ) | 4.31 ( 0.28 ) | 4.05 ( 0.09 ) | 5.26 | 0.55 | 0.71 | 4.31 | 4.05 |\n", + "| 54 | 100 | 100 | 0.7 | 1.00 | 0.27 | 0.79 ( 0.01 ) | 6.34 ( 0.4 ) | 2.67 ( 0.12 ) | 8.67 | 0.53 | 0.79 | 6.34 | 2.67 |\n", + "| 55 | 500 | 100 | 0.7 | 0.20 | 0.43 | 0.89 ( 0 ) | 7.92 ( 0.24 ) | 0.04 ( 0.02 ) | 12.88 | 0.52 | 0.89 | 7.92 | 0.04 |\n", + "| 56 | 1000 | 100 | 0.7 | 0.10 | 0.66 | 0.9 ( 0 ) | 3.85 ( 0.16 ) | 0 ( 0 ) | 8.85 | 0.3 | 0.90 | 3.85 | 0.00 |\n", + "| 57 | 50 | 500 | 0.7 | 10.00 | 0.14 | 0.7 ( 0.01 ) | 6.5 ( 0.24 ) | 4.63 ( 0.06 ) | 6.87 | 0.77 | 0.70 | 6.50 | 4.63 |\n", + "| 58 | 100 | 500 | 0.7 | 5.00 | 0.21 | 0.76 ( 0.01 ) | 6.98 ( 0.58 ) | 3.65 ( 0.08 ) | 8.33 | 0.56 | 0.76 | 6.98 | 3.65 |\n", + "| 59 | 500 | 500 | 0.7 | 1.00 | 0.20 | 0.88 ( 0 ) | 22.04 ( 0.74 ) | 0.14 ( 0.04 ) | 26.90 | 0.76 | 0.88 | 22.04 | 0.14 |\n", + "| 60 | 1000 | 500 | 0.7 | 0.50 | 0.33 | 0.89 ( 0 ) | 13.15 ( 0.38 ) | 0 ( 0 ) | 18.15 | 0.65 | 0.89 | 13.15 | 0.00 |\n", + "| 61 | 50 | 1000 | 0.7 | 20.00 | 0.10 | 0.66 ( 0.01 ) | 8.82 ( 0.28 ) | 4.72 ( 0.05 ) | 9.10 | 0.85 | 0.66 | 8.82 | 4.72 |\n", + "| 62 | 100 | 1000 | 0.7 | 10.00 | 0.18 | 0.76 ( 0.01 ) | 6.93 ( 0.59 ) | 4 ( 0.08 ) | 7.93 | 0.62 | 0.76 | 6.93 | 4.00 |\n", + "| 63 | 500 | 1000 | 0.7 | 2.00 | 0.16 | 0.87 ( 0 ) | 29.07 ( 1 ) | 0.16 ( 0.04 ) | 33.91 | 0.81 | 0.87 | 29.07 | 0.16 |\n", + "| 64 | 1000 | 1000 | 0.7 | 1.00 | 0.22 | 0.89 ( 0 ) | 21.8 ( 0.63 ) | 0 ( 0 ) | 26.80 | 0.76 | 0.89 | 21.80 | 0.00 |\n", + "| 65 | 50 | 50 | 0.9 | 1.00 | 0.30 | 0.69 ( 0.01 ) | 2.9 ( 0.2 ) | 4.22 ( 0.09 ) | 3.68 | 0.41 | 0.69 | 2.90 | 4.22 |\n", + "| 66 | 100 | 50 | 0.9 | 0.50 | 0.37 | 0.76 ( 0.01 ) | 3.93 ( 0.21 ) | 2.74 ( 0.11 ) | 6.19 | 0.41 | 0.76 | 3.93 | 2.74 |\n", + "| 67 | 500 | 50 | 0.9 | 0.10 | 0.57 | 0.83 ( 0 ) | 3.65 ( 0.16 ) | 0.56 ( 0.08 ) | 8.09 | 0.31 | 0.83 | 3.65 | 0.56 |\n", + "| 68 | 1000 | 50 | 0.9 | 0.05 | 0.76 | 0.83 ( 0 ) | 2.41 ( 0.12 ) | 0.23 ( 0.04 ) | 7.18 | 0.18 | 0.83 | 2.41 | 0.23 |\n", + "| 69 | 50 | 100 | 0.9 | 2.00 | 0.26 | 0.7 ( 0.01 ) | 3.29 ( 0.23 ) | 4.29 ( 0.09 ) | 4.00 | 0.45 | 0.70 | 3.29 | 4.29 |\n", + "| 70 | 100 | 100 | 0.9 | 1.00 | 0.32 | 0.76 ( 0.01 ) | 4.77 ( 0.33 ) | 3.26 ( 0.09 ) | 6.51 | 0.46 | 0.76 | 4.77 | 3.26 |\n", + "| 71 | 500 | 100 | 0.9 | 0.20 | 0.45 | 0.82 ( 0 ) | 5.65 ( 0.21 ) | 0.92 ( 0.09 ) | 9.73 | 0.45 | 0.82 | 5.65 | 0.92 |\n", + "| 72 | 1000 | 100 | 0.9 | 0.10 | 0.63 | 0.83 ( 0 ) | 3.87 ( 0.18 ) | 0.24 ( 0.05 ) | 8.63 | 0.3 | 0.83 | 3.87 | 0.24 |\n", + "| 73 | 50 | 500 | 0.9 | 10.00 | 0.15 | 0.66 ( 0.01 ) | 5.8 ( 0.24 ) | 4.65 ( 0.07 ) | 6.15 | 0.75 | 0.66 | 5.80 | 4.65 |\n", + "| 74 | 100 | 500 | 0.9 | 5.00 | 0.21 | 0.7 ( 0.01 ) | 5.55 ( 0.55 ) | 4.14 ( 0.09 ) | 6.41 | 0.51 | 0.70 | 5.55 | 4.14 |\n", + "| 75 | 500 | 500 | 0.9 | 1.00 | 0.19 | 0.81 ( 0 ) | 15.93 ( 0.73 ) | 1.42 ( 0.1 ) | 19.51 | 0.73 | 0.81 | 15.93 | 1.42 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.50 | 0.31 | 0.83 ( 0 ) | 11.96 ( 0.46 ) | 0.42 ( 0.06 ) | 16.54 | 0.63 | 0.83 | 11.96 | 0.42 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.00 | 0.08 | 0.66 ( 0.01 ) | 8.02 ( 0.28 ) | 4.9 ( 0.07 ) | 8.12 | 0.85 | 0.66 | 8.02 | 4.90 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.00 | 0.18 | 0.69 ( 0.01 ) | 5.85 ( 0.58 ) | 4.37 ( 0.07 ) | 6.48 | 0.61 | 0.69 | 5.85 | 4.37 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.00 | 0.16 | 0.8 ( 0 ) | 18.7 ( 0.93 ) | 1.88 ( 0.1 ) | 21.82 | 0.77 | 0.80 | 18.70 | 1.88 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.00 | 0.21 | 0.83 ( 0 ) | 20.07 ( 0.72 ) | 0.41 ( 0.05 ) | 24.66 | 0.75 | 0.83 | 20.07 | 0.41 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "1 50 50 0.1 1.00 0.32 0.78 ( 0.01 ) 3.65 ( 0.23 ) 2.83 ( 0.11 )\n", + "2 100 50 0.1 0.50 0.34 0.85 ( 0.01 ) 7.35 ( 0.34 ) 0.68 ( 0.09 )\n", + "3 500 50 0.1 0.10 0.55 0.92 ( 0 ) 4.99 ( 0.22 ) 0 ( 0 ) \n", + "4 1000 50 0.1 0.05 0.78 0.93 ( 0 ) 2.42 ( 0.12 ) 0 ( 0 ) \n", + "5 50 100 0.1 2.00 0.26 0.74 ( 0.01 ) 4.65 ( 0.29 ) 2.93 ( 0.12 )\n", + "6 100 100 0.1 1.00 0.33 0.85 ( 0.01 ) 8.11 ( 0.41 ) 0.86 ( 0.09 )\n", + "7 500 100 0.1 0.20 0.40 0.92 ( 0 ) 8.63 ( 0.29 ) 0 ( 0 ) \n", + "8 1000 100 0.1 0.10 0.64 0.92 ( 0 ) 4.02 ( 0.18 ) 0 ( 0 ) \n", + "9 50 500 0.1 10.00 0.12 0.71 ( 0.01 ) 8.29 ( 0.25 ) 3.89 ( 0.1 ) \n", + "10 100 500 0.1 5.00 0.24 0.8 ( 0.01 ) 8.84 ( 0.61 ) 2.19 ( 0.12 )\n", + "11 500 500 0.1 1.00 0.21 0.92 ( 0 ) 22.86 ( 0.75 ) 0 ( 0 ) \n", + "12 1000 500 0.1 0.50 0.33 0.93 ( 0 ) 12.73 ( 0.35 ) 0 ( 0 ) \n", + "13 50 1000 0.1 20.00 0.09 0.68 ( 0.01 ) 10.35 ( 0.33 ) 4.14 ( 0.09 )\n", + "14 100 1000 0.1 10.00 0.19 0.77 ( 0.01 ) 10.84 ( 0.75 ) 2.46 ( 0.1 ) \n", + "15 500 1000 0.1 2.00 0.16 0.92 ( 0 ) 30.83 ( 1.05 ) 0 ( 0 ) \n", + "16 1000 1000 0.1 1.00 0.23 0.93 ( 0 ) 20.39 ( 0.59 ) 0 ( 0 ) \n", + "17 50 50 0.3 1.00 0.28 0.75 ( 0.01 ) 3.69 ( 0.22 ) 3.04 ( 0.1 ) \n", + "18 100 50 0.3 0.50 0.32 0.84 ( 0.01 ) 7.11 ( 0.33 ) 0.93 ( 0.1 ) \n", + "19 500 50 0.3 0.10 0.51 0.92 ( 0 ) 5.67 ( 0.22 ) 0 ( 0 ) \n", + "20 1000 50 0.3 0.05 0.78 0.92 ( 0 ) 2.48 ( 0.13 ) 0 ( 0 ) \n", + "21 50 100 0.3 2.00 0.26 0.75 ( 0.01 ) 4.41 ( 0.27 ) 3.47 ( 0.09 )\n", + "22 100 100 0.3 1.00 0.28 0.82 ( 0.01 ) 8.16 ( 0.53 ) 1.46 ( 0.11 )\n", + "23 500 100 0.3 0.20 0.41 0.92 ( 0 ) 8.48 ( 0.34 ) 0 ( 0 ) \n", + "24 1000 100 0.3 0.10 0.67 0.92 ( 0 ) 3.71 ( 0.15 ) 0 ( 0 ) \n", + "25 50 500 0.3 10.00 0.13 0.69 ( 0.01 ) 7.94 ( 0.3 ) 4.11 ( 0.08 )\n", + "26 100 500 0.3 5.00 0.20 0.78 ( 0.01 ) 10.16 ( 0.68 ) 2.49 ( 0.11 )\n", + "27 500 500 0.3 1.00 0.20 0.91 ( 0 ) 23.65 ( 0.7 ) 0 ( 0 ) \n", + "28 1000 500 0.3 0.50 0.34 0.92 ( 0 ) 12.28 ( 0.34 ) 0 ( 0 ) \n", + "29 50 1000 0.3 20.00 0.10 0.68 ( 0.01 ) 9.77 ( 0.31 ) 4.3 ( 0.06 ) \n", + "30 100 1000 0.3 10.00 0.17 0.77 ( 0.01 ) 10.68 ( 0.8 ) 3.02 ( 0.11 )\n", + "⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ \n", + "51 500 50 0.7 0.10 0.57 0.89 ( 0 ) 4.61 ( 0.17 ) 0.04 ( 0.02 )\n", + "52 1000 50 0.7 0.05 0.74 0.89 ( 0 ) 2.8 ( 0.15 ) 0 ( 0 ) \n", + "53 50 100 0.7 2.00 0.24 0.71 ( 0.01 ) 4.31 ( 0.28 ) 4.05 ( 0.09 )\n", + "54 100 100 0.7 1.00 0.27 0.79 ( 0.01 ) 6.34 ( 0.4 ) 2.67 ( 0.12 )\n", + "55 500 100 0.7 0.20 0.43 0.89 ( 0 ) 7.92 ( 0.24 ) 0.04 ( 0.02 )\n", + "56 1000 100 0.7 0.10 0.66 0.9 ( 0 ) 3.85 ( 0.16 ) 0 ( 0 ) \n", + "57 50 500 0.7 10.00 0.14 0.7 ( 0.01 ) 6.5 ( 0.24 ) 4.63 ( 0.06 )\n", + "58 100 500 0.7 5.00 0.21 0.76 ( 0.01 ) 6.98 ( 0.58 ) 3.65 ( 0.08 )\n", + "59 500 500 0.7 1.00 0.20 0.88 ( 0 ) 22.04 ( 0.74 ) 0.14 ( 0.04 )\n", + "60 1000 500 0.7 0.50 0.33 0.89 ( 0 ) 13.15 ( 0.38 ) 0 ( 0 ) \n", + "61 50 1000 0.7 20.00 0.10 0.66 ( 0.01 ) 8.82 ( 0.28 ) 4.72 ( 0.05 )\n", + "62 100 1000 0.7 10.00 0.18 0.76 ( 0.01 ) 6.93 ( 0.59 ) 4 ( 0.08 ) \n", + "63 500 1000 0.7 2.00 0.16 0.87 ( 0 ) 29.07 ( 1 ) 0.16 ( 0.04 )\n", + "64 1000 1000 0.7 1.00 0.22 0.89 ( 0 ) 21.8 ( 0.63 ) 0 ( 0 ) \n", + "65 50 50 0.9 1.00 0.30 0.69 ( 0.01 ) 2.9 ( 0.2 ) 4.22 ( 0.09 )\n", + "66 100 50 0.9 0.50 0.37 0.76 ( 0.01 ) 3.93 ( 0.21 ) 2.74 ( 0.11 )\n", + "67 500 50 0.9 0.10 0.57 0.83 ( 0 ) 3.65 ( 0.16 ) 0.56 ( 0.08 )\n", + "68 1000 50 0.9 0.05 0.76 0.83 ( 0 ) 2.41 ( 0.12 ) 0.23 ( 0.04 )\n", + "69 50 100 0.9 2.00 0.26 0.7 ( 0.01 ) 3.29 ( 0.23 ) 4.29 ( 0.09 )\n", + "70 100 100 0.9 1.00 0.32 0.76 ( 0.01 ) 4.77 ( 0.33 ) 3.26 ( 0.09 )\n", + "71 500 100 0.9 0.20 0.45 0.82 ( 0 ) 5.65 ( 0.21 ) 0.92 ( 0.09 )\n", + "72 1000 100 0.9 0.10 0.63 0.83 ( 0 ) 3.87 ( 0.18 ) 0.24 ( 0.05 )\n", + "73 50 500 0.9 10.00 0.15 0.66 ( 0.01 ) 5.8 ( 0.24 ) 4.65 ( 0.07 )\n", + "74 100 500 0.9 5.00 0.21 0.7 ( 0.01 ) 5.55 ( 0.55 ) 4.14 ( 0.09 )\n", + "75 500 500 0.9 1.00 0.19 0.81 ( 0 ) 15.93 ( 0.73 ) 1.42 ( 0.1 ) \n", + "76 1000 500 0.9 0.50 0.31 0.83 ( 0 ) 11.96 ( 0.46 ) 0.42 ( 0.06 )\n", + "77 50 1000 0.9 20.00 0.08 0.66 ( 0.01 ) 8.02 ( 0.28 ) 4.9 ( 0.07 ) \n", + "78 100 1000 0.9 10.00 0.18 0.69 ( 0.01 ) 5.85 ( 0.58 ) 4.37 ( 0.07 )\n", + "79 500 1000 0.9 2.00 0.16 0.8 ( 0 ) 18.7 ( 0.93 ) 1.88 ( 0.1 ) \n", + "80 1000 1000 0.9 1.00 0.21 0.83 ( 0 ) 20.07 ( 0.72 ) 0.41 ( 0.05 )\n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "1 5.82 0.39 0.78 3.65 2.83 \n", + "2 11.67 0.5 0.85 7.35 0.68 \n", + "3 9.99 0.37 0.92 4.99 0.00 \n", + "4 7.42 0.17 0.93 2.42 0.00 \n", + "5 6.72 0.48 0.74 4.65 2.93 \n", + "6 12.25 0.52 0.85 8.11 0.86 \n", + "7 13.63 0.54 0.92 8.63 0.00 \n", + "8 9.02 0.31 0.92 4.02 0.00 \n", + "9 9.40 0.77 0.71 8.29 3.89 \n", + "10 11.65 0.57 0.80 8.84 2.19 \n", + "11 27.86 0.77 0.92 22.86 0.00 \n", + "12 17.73 0.65 0.93 12.73 0.00 \n", + "13 11.21 0.82 0.68 10.35 4.14 \n", + "14 13.38 0.63 0.77 10.84 2.46 \n", + "15 35.83 0.81 0.92 30.83 0.00 \n", + "16 25.39 0.75 0.93 20.39 0.00 \n", + "17 5.65 0.4 0.75 3.69 3.04 \n", + "18 11.18 0.5 0.84 7.11 0.93 \n", + "19 10.67 0.41 0.92 5.67 0.00 \n", + "20 7.48 0.18 0.92 2.48 0.00 \n", + "21 5.94 0.49 0.75 4.41 3.47 \n", + "22 11.70 0.52 0.82 8.16 1.46 \n", + "23 13.48 0.53 0.92 8.48 0.00 \n", + "24 8.71 0.29 0.92 3.71 0.00 \n", + "25 8.83 0.77 0.69 7.94 4.11 \n", + "26 12.67 0.63 0.78 10.16 2.49 \n", + "27 28.65 0.78 0.91 23.65 0.00 \n", + "28 17.28 0.64 0.92 12.28 0.00 \n", + "29 10.47 0.83 0.68 9.77 4.30 \n", + "30 12.66 0.67 0.77 10.68 3.02 \n", + "⋮ ⋮ ⋮ ⋮ ⋮ ⋮ \n", + "51 9.57 0.36 0.89 4.61 0.04 \n", + "52 7.80 0.21 0.89 2.80 0.00 \n", + "53 5.26 0.55 0.71 4.31 4.05 \n", + "54 8.67 0.53 0.79 6.34 2.67 \n", + "55 12.88 0.52 0.89 7.92 0.04 \n", + "56 8.85 0.3 0.90 3.85 0.00 \n", + "57 6.87 0.77 0.70 6.50 4.63 \n", + "58 8.33 0.56 0.76 6.98 3.65 \n", + "59 26.90 0.76 0.88 22.04 0.14 \n", + "60 18.15 0.65 0.89 13.15 0.00 \n", + "61 9.10 0.85 0.66 8.82 4.72 \n", + "62 7.93 0.62 0.76 6.93 4.00 \n", + "63 33.91 0.81 0.87 29.07 0.16 \n", + "64 26.80 0.76 0.89 21.80 0.00 \n", + "65 3.68 0.41 0.69 2.90 4.22 \n", + "66 6.19 0.41 0.76 3.93 2.74 \n", + "67 8.09 0.31 0.83 3.65 0.56 \n", + "68 7.18 0.18 0.83 2.41 0.23 \n", + "69 4.00 0.45 0.70 3.29 4.29 \n", + "70 6.51 0.46 0.76 4.77 3.26 \n", + "71 9.73 0.45 0.82 5.65 0.92 \n", + "72 8.63 0.3 0.83 3.87 0.24 \n", + "73 6.15 0.75 0.66 5.80 4.65 \n", + "74 6.41 0.51 0.70 5.55 4.14 \n", + "75 19.51 0.73 0.81 15.93 1.42 \n", + "76 16.54 0.63 0.83 11.96 0.42 \n", + "77 8.12 0.85 0.66 8.02 4.90 \n", + "78 6.48 0.61 0.69 5.85 4.37 \n", + "79 21.82 0.77 0.80 18.70 1.88 \n", + "80 24.66 0.75 0.83 20.07 0.41 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_toe\n", + "\n", + "## export\n", + "write.table(result.table_toe, '../results_summary_bin/sim_toe_lasso_binary.txt', \n", + " sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_bin/1.2_sim_toe_elnet_binary_update.ipynb b/simulations/notebooks_sim_bin/1.2_sim_toe_elnet_binary_update.ipynb new file mode 100644 index 0000000..b011e9c --- /dev/null +++ b/simulations/notebooks_sim_bin/1.2_sim_toe_elnet_binary_update.ipynb @@ -0,0 +1,973 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize elastic net results on Toeplitz Simulation Scenarios for binary outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "rou.list = seq(0.1, 0.9, 0.2)\n", + "\n", + "files = NULL\n", + "for (rou in rou.list){\n", + " for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_toeplitz_corr', rou, paste('P', p, 'N', n, sep='_'), '.RData', sep=''))\n", + " }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "80" + ], + "text/latex": [ + "80" + ], + "text/markdown": [ + "80" + ], + "text/plain": [ + "[1] 80" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "length(files)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1] \"indx: 1\"\n", + "[1] \"indx: 2\"\n", + "[1] \"indx: 3\"\n", + "[1] \"indx: 4\"\n", + "[1] \"indx: 5\"\n", + "[1] \"indx: 6\"\n", + "[1] \"indx: 7\"\n", + "[1] \"indx: 8\"\n", + "[1] \"indx: 9\"\n", + "[1] \"indx: 10\"\n", + "[1] \"indx: 11\"\n", + "[1] \"indx: 12\"\n", + "[1] \"indx: 13\"\n", + "[1] \"indx: 14\"\n", + "[1] \"indx: 15\"\n", + "[1] \"indx: 16\"\n", + "[1] \"indx: 17\"\n", + "[1] \"indx: 18\"\n", + "[1] \"indx: 19\"\n", + "[1] \"indx: 20\"\n", + "[1] \"indx: 21\"\n", + "[1] \"indx: 22\"\n", + "[1] \"indx: 23\"\n", + "[1] \"indx: 24\"\n", + "[1] \"indx: 25\"\n", + "[1] \"indx: 26\"\n", + "[1] \"indx: 27\"\n", + "[1] \"indx: 28\"\n", + "[1] \"indx: 29\"\n", + "[1] \"indx: 30\"\n", + "[1] \"indx: 31\"\n", + "[1] \"indx: 32\"\n", + "[1] \"indx: 33\"\n", + "[1] \"indx: 34\"\n", + "[1] \"indx: 35\"\n", + "[1] \"indx: 36\"\n", + "[1] \"indx: 37\"\n", + "[1] \"indx: 38\"\n", + "[1] \"indx: 39\"\n", + "[1] \"indx: 40\"\n", + "[1] \"indx: 41\"\n", + "[1] \"indx: 42\"\n", + "[1] \"indx: 43\"\n", + "[1] \"indx: 44\"\n", + "[1] \"indx: 45\"\n", + "[1] \"indx: 46\"\n", + "[1] \"indx: 47\"\n", + "[1] \"indx: 48\"\n", + "[1] \"indx: 49\"\n", + "[1] \"indx: 50\"\n", + "[1] \"indx: 51\"\n", + "[1] \"indx: 52\"\n", + "[1] \"indx: 53\"\n", + "[1] \"indx: 54\"\n", + "[1] \"indx: 55\"\n", + "[1] \"indx: 56\"\n", + "[1] \"indx: 57\"\n", + "[1] \"indx: 58\"\n", + "[1] \"indx: 59\"\n", + "[1] \"indx: 60\"\n", + "[1] \"indx: 61\"\n", + "[1] \"indx: 62\"\n", + "[1] \"indx: 63\"\n", + "[1] \"indx: 64\"\n", + "[1] \"indx: 65\"\n", + "[1] \"indx: 66\"\n", + "[1] \"indx: 67\"\n", + "[1] \"indx: 68\"\n", + "[1] \"indx: 69\"\n", + "[1] \"indx: 70\"\n", + "[1] \"indx: 71\"\n", + "[1] \"indx: 72\"\n", + "[1] \"indx: 73\"\n", + "[1] \"indx: 74\"\n", + "[1] \"indx: 75\"\n", + "[1] \"indx: 76\"\n", + "[1] \"indx: 77\"\n", + "[1] \"indx: 78\"\n", + "[1] \"indx: 79\"\n", + "[1] \"indx: 80\"\n" + ] + } + ], + "source": [ + "avg_FDR = NULL\n", + "table_toe = NULL\n", + "tmp_num_select = rep(0, length(files))\n", + "for (i in 1:length(files)){\n", + " print(paste0('indx: ', i))\n", + " load(paste0(dir, '/binary_update/toe_Elnet_binary_', i, '.RData')) \n", + " \n", + " table_toe = rbind(table_toe, results_toe_elnet[c('n', 'p', 'rou', 'FP', 'FN', 'ROC', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_toe_elnet$Stab.table))\n", + " \n", + " # calculate FDR\n", + " load(file_name, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_toe_elnet$Stab.table\n", + " FDR = NULL # false positive rate\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}\n", + "table_toe = as.data.frame(table_toe)\n", + "table_toe$num_select = tmp_num_select\n", + "table_toe$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
150500.113.02 ( 1.02 )1.51 ( 0.11 )0.77 ( 0.01 )0.1316.510.63
2100500.110.71 ( 0.62 )0.56 ( 0.07 )0.85 ( 0.01 )0.2415.150.57
3500500.17.43 ( 0.6 )0.02 ( 0.01 )0.92 ( 0 )0.4112.410.42
41000500.17.82 ( 0.76 )0 ( 0 )0.92 ( 0 )0.3912.820.40
5501000.121.55 ( 1.94 )1.64 ( 0.11 )0.73 ( 0.01 )0.0924.910.73
61001000.115.59 ( 1.32 )0.84 ( 0.1 )0.83 ( 0.01 )0.1819.750.62
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 13.02 ( 1.02 ) & 1.51 ( 0.11 ) & 0.77 ( 0.01 ) & 0.13 & 16.51 & 0.63\\\\\n", + "\t2 & 100 & 50 & 0.1 & 10.71 ( 0.62 ) & 0.56 ( 0.07 ) & 0.85 ( 0.01 ) & 0.24 & 15.15 & 0.57\\\\\n", + "\t3 & 500 & 50 & 0.1 & 7.43 ( 0.6 ) & 0.02 ( 0.01 ) & 0.92 ( 0 ) & 0.41 & 12.41 & 0.42\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 7.82 ( 0.76 ) & 0 ( 0 ) & 0.92 ( 0 ) & 0.39 & 12.82 & 0.40\\\\\n", + "\t5 & 50 & 100 & 0.1 & 21.55 ( 1.94 ) & 1.64 ( 0.11 ) & 0.73 ( 0.01 ) & 0.09 & 24.91 & 0.73\\\\\n", + "\t6 & 100 & 100 & 0.1 & 15.59 ( 1.32 ) & 0.84 ( 0.1 ) & 0.83 ( 0.01 ) & 0.18 & 19.75 & 0.62\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 13.02 ( 1.02 ) | 1.51 ( 0.11 ) | 0.77 ( 0.01 ) | 0.13 | 16.51 | 0.63 |\n", + "| 2 | 100 | 50 | 0.1 | 10.71 ( 0.62 ) | 0.56 ( 0.07 ) | 0.85 ( 0.01 ) | 0.24 | 15.15 | 0.57 |\n", + "| 3 | 500 | 50 | 0.1 | 7.43 ( 0.6 ) | 0.02 ( 0.01 ) | 0.92 ( 0 ) | 0.41 | 12.41 | 0.42 |\n", + "| 4 | 1000 | 50 | 0.1 | 7.82 ( 0.76 ) | 0 ( 0 ) | 0.92 ( 0 ) | 0.39 | 12.82 | 0.40 |\n", + "| 5 | 50 | 100 | 0.1 | 21.55 ( 1.94 ) | 1.64 ( 0.11 ) | 0.73 ( 0.01 ) | 0.09 | 24.91 | 0.73 |\n", + "| 6 | 100 | 100 | 0.1 | 15.59 ( 1.32 ) | 0.84 ( 0.1 ) | 0.83 ( 0.01 ) | 0.18 | 19.75 | 0.62 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select FDR \n", + "1 50 50 0.1 13.02 ( 1.02 ) 1.51 ( 0.11 ) 0.77 ( 0.01 ) 0.13 16.51 0.63\n", + "2 100 50 0.1 10.71 ( 0.62 ) 0.56 ( 0.07 ) 0.85 ( 0.01 ) 0.24 15.15 0.57\n", + "3 500 50 0.1 7.43 ( 0.6 ) 0.02 ( 0.01 ) 0.92 ( 0 ) 0.41 12.41 0.42\n", + "4 1000 50 0.1 7.82 ( 0.76 ) 0 ( 0 ) 0.92 ( 0 ) 0.39 12.82 0.40\n", + "5 50 100 0.1 21.55 ( 1.94 ) 1.64 ( 0.11 ) 0.73 ( 0.01 ) 0.09 24.91 0.73\n", + "6 100 100 0.1 15.59 ( 1.32 ) 0.84 ( 0.1 ) 0.83 ( 0.01 ) 0.18 19.75 0.62" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
755005000.925.68 ( 1.61 )1.07 ( 0.11 )0.81 ( 0 )0.1429.610.76
7610005000.923.49 ( 1.26 )0.15 ( 0.05 )0.83 ( 0 )0.2128.340.75
775010000.949.08 ( 6.86 )4.29 ( 0.09 )0.65 ( 0.01 )0.0249.790.93
7810010000.932.99 ( 5.22 )3.81 ( 0.09 )0.66 ( 0.01 )0.0534.180.80
7950010000.930.91 ( 2.22 )1.52 ( 0.12 )0.8 ( 0 )0.1134.390.78
80100010000.935.66 ( 1.98 )0.23 ( 0.06 )0.83 ( 0 )0.1440.430.82
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 25.68 ( 1.61 ) & 1.07 ( 0.11 ) & 0.81 ( 0 ) & 0.14 & 29.61 & 0.76\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 23.49 ( 1.26 ) & 0.15 ( 0.05 ) & 0.83 ( 0 ) & 0.21 & 28.34 & 0.75\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 49.08 ( 6.86 ) & 4.29 ( 0.09 ) & 0.65 ( 0.01 ) & 0.02 & 49.79 & 0.93\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 32.99 ( 5.22 ) & 3.81 ( 0.09 ) & 0.66 ( 0.01 ) & 0.05 & 34.18 & 0.80\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 30.91 ( 2.22 ) & 1.52 ( 0.12 ) & 0.8 ( 0 ) & 0.11 & 34.39 & 0.78\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 35.66 ( 1.98 ) & 0.23 ( 0.06 ) & 0.83 ( 0 ) & 0.14 & 40.43 & 0.82\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 25.68 ( 1.61 ) | 1.07 ( 0.11 ) | 0.81 ( 0 ) | 0.14 | 29.61 | 0.76 |\n", + "| 76 | 1000 | 500 | 0.9 | 23.49 ( 1.26 ) | 0.15 ( 0.05 ) | 0.83 ( 0 ) | 0.21 | 28.34 | 0.75 |\n", + "| 77 | 50 | 1000 | 0.9 | 49.08 ( 6.86 ) | 4.29 ( 0.09 ) | 0.65 ( 0.01 ) | 0.02 | 49.79 | 0.93 |\n", + "| 78 | 100 | 1000 | 0.9 | 32.99 ( 5.22 ) | 3.81 ( 0.09 ) | 0.66 ( 0.01 ) | 0.05 | 34.18 | 0.80 |\n", + "| 79 | 500 | 1000 | 0.9 | 30.91 ( 2.22 ) | 1.52 ( 0.12 ) | 0.8 ( 0 ) | 0.11 | 34.39 | 0.78 |\n", + "| 80 | 1000 | 1000 | 0.9 | 35.66 ( 1.98 ) | 0.23 ( 0.06 ) | 0.83 ( 0 ) | 0.14 | 40.43 | 0.82 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select\n", + "75 500 500 0.9 25.68 ( 1.61 ) 1.07 ( 0.11 ) 0.81 ( 0 ) 0.14 29.61 \n", + "76 1000 500 0.9 23.49 ( 1.26 ) 0.15 ( 0.05 ) 0.83 ( 0 ) 0.21 28.34 \n", + "77 50 1000 0.9 49.08 ( 6.86 ) 4.29 ( 0.09 ) 0.65 ( 0.01 ) 0.02 49.79 \n", + "78 100 1000 0.9 32.99 ( 5.22 ) 3.81 ( 0.09 ) 0.66 ( 0.01 ) 0.05 34.18 \n", + "79 500 1000 0.9 30.91 ( 2.22 ) 1.52 ( 0.12 ) 0.8 ( 0 ) 0.11 34.39 \n", + "80 1000 1000 0.9 35.66 ( 1.98 ) 0.23 ( 0.06 ) 0.83 ( 0 ) 0.14 40.43 \n", + " FDR \n", + "75 0.76\n", + "76 0.75\n", + "77 0.93\n", + "78 0.80\n", + "79 0.78\n", + "80 0.82" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_toe <- apply(table_toe,2,as.character)\n", + "rownames(result.table_toe) = rownames(table_toe)\n", + "result.table_toe = as.data.frame(result.table_toe)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_toe$n = tidyr::extract_numeric(result.table_toe$n)\n", + "result.table_toe$p = tidyr::extract_numeric(result.table_toe$p)\n", + "result.table_toe$ratio = result.table_toe$p / result.table_toe$n\n", + "\n", + "result.table_toe = result.table_toe[c('n', 'p', 'rou', 'ratio', 'Stab', 'ROC', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_toe)[1:4] = c('N', 'P', 'Corr', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_toe$Stab = as.numeric(as.character(result.table_toe$Stab))\n", + "result.table_toe$num_select = as.numeric(as.character(result.table_toe$num_select))\n", + "\n", + "result.table_toe$ROC_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$ROC))\n", + "result.table_toe$FP_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$FP))\n", + "result.table_toe$FN_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$FN))" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "
A data.frame: 0 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
\n" + ], + "text/latex": [ + "A data.frame: 0 × 13\n", + "\\begin{tabular}{lllllllllllll}\n", + " N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 0 × 13\n", + "\n", + "| N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select FDR ROC_mean FP_mean FN_mean" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check whether missing values exists\n", + "result.table_toe[rowSums(is.na(result.table_toe)) > 0,]" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 500.11.000.130.77 ( 0.01 )13.02 ( 1.02 )1.51 ( 0.11 )16.510.630.7713.021.51
2 100 500.10.500.240.85 ( 0.01 )10.71 ( 0.62 )0.56 ( 0.07 )15.150.570.8510.710.56
3 500 500.10.100.410.92 ( 0 ) 7.43 ( 0.6 ) 0.02 ( 0.01 )12.410.420.92 7.430.02
41000 500.10.050.390.92 ( 0 ) 7.82 ( 0.76 ) 0 ( 0 ) 12.820.4 0.92 7.820.00
5 501000.12.000.090.73 ( 0.01 )21.55 ( 1.94 )1.64 ( 0.11 )24.910.730.7321.551.64
6 1001000.11.000.180.83 ( 0.01 )15.59 ( 1.32 )0.84 ( 0.1 ) 19.750.620.8315.590.84
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1.00 & 0.13 & 0.77 ( 0.01 ) & 13.02 ( 1.02 ) & 1.51 ( 0.11 ) & 16.51 & 0.63 & 0.77 & 13.02 & 1.51\\\\\n", + "\t2 & 100 & 50 & 0.1 & 0.50 & 0.24 & 0.85 ( 0.01 ) & 10.71 ( 0.62 ) & 0.56 ( 0.07 ) & 15.15 & 0.57 & 0.85 & 10.71 & 0.56\\\\\n", + "\t3 & 500 & 50 & 0.1 & 0.10 & 0.41 & 0.92 ( 0 ) & 7.43 ( 0.6 ) & 0.02 ( 0.01 ) & 12.41 & 0.42 & 0.92 & 7.43 & 0.02\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 0.05 & 0.39 & 0.92 ( 0 ) & 7.82 ( 0.76 ) & 0 ( 0 ) & 12.82 & 0.4 & 0.92 & 7.82 & 0.00\\\\\n", + "\t5 & 50 & 100 & 0.1 & 2.00 & 0.09 & 0.73 ( 0.01 ) & 21.55 ( 1.94 ) & 1.64 ( 0.11 ) & 24.91 & 0.73 & 0.73 & 21.55 & 1.64\\\\\n", + "\t6 & 100 & 100 & 0.1 & 1.00 & 0.18 & 0.83 ( 0.01 ) & 15.59 ( 1.32 ) & 0.84 ( 0.1 ) & 19.75 & 0.62 & 0.83 & 15.59 & 0.84\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1.00 | 0.13 | 0.77 ( 0.01 ) | 13.02 ( 1.02 ) | 1.51 ( 0.11 ) | 16.51 | 0.63 | 0.77 | 13.02 | 1.51 |\n", + "| 2 | 100 | 50 | 0.1 | 0.50 | 0.24 | 0.85 ( 0.01 ) | 10.71 ( 0.62 ) | 0.56 ( 0.07 ) | 15.15 | 0.57 | 0.85 | 10.71 | 0.56 |\n", + "| 3 | 500 | 50 | 0.1 | 0.10 | 0.41 | 0.92 ( 0 ) | 7.43 ( 0.6 ) | 0.02 ( 0.01 ) | 12.41 | 0.42 | 0.92 | 7.43 | 0.02 |\n", + "| 4 | 1000 | 50 | 0.1 | 0.05 | 0.39 | 0.92 ( 0 ) | 7.82 ( 0.76 ) | 0 ( 0 ) | 12.82 | 0.4 | 0.92 | 7.82 | 0.00 |\n", + "| 5 | 50 | 100 | 0.1 | 2.00 | 0.09 | 0.73 ( 0.01 ) | 21.55 ( 1.94 ) | 1.64 ( 0.11 ) | 24.91 | 0.73 | 0.73 | 21.55 | 1.64 |\n", + "| 6 | 100 | 100 | 0.1 | 1.00 | 0.18 | 0.83 ( 0.01 ) | 15.59 ( 1.32 ) | 0.84 ( 0.1 ) | 19.75 | 0.62 | 0.83 | 15.59 | 0.84 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "1 50 50 0.1 1.00 0.13 0.77 ( 0.01 ) 13.02 ( 1.02 ) 1.51 ( 0.11 )\n", + "2 100 50 0.1 0.50 0.24 0.85 ( 0.01 ) 10.71 ( 0.62 ) 0.56 ( 0.07 )\n", + "3 500 50 0.1 0.10 0.41 0.92 ( 0 ) 7.43 ( 0.6 ) 0.02 ( 0.01 )\n", + "4 1000 50 0.1 0.05 0.39 0.92 ( 0 ) 7.82 ( 0.76 ) 0 ( 0 ) \n", + "5 50 100 0.1 2.00 0.09 0.73 ( 0.01 ) 21.55 ( 1.94 ) 1.64 ( 0.11 )\n", + "6 100 100 0.1 1.00 0.18 0.83 ( 0.01 ) 15.59 ( 1.32 ) 0.84 ( 0.1 ) \n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "1 16.51 0.63 0.77 13.02 1.51 \n", + "2 15.15 0.57 0.85 10.71 0.56 \n", + "3 12.41 0.42 0.92 7.43 0.02 \n", + "4 12.82 0.4 0.92 7.82 0.00 \n", + "5 24.91 0.73 0.73 21.55 1.64 \n", + "6 19.75 0.62 0.83 15.59 0.84 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
75 500 5000.9 1.00.140.81 ( 0 ) 25.68 ( 1.61 )1.07 ( 0.11 )29.610.760.8125.681.07
761000 5000.9 0.50.210.83 ( 0 ) 23.49 ( 1.26 )0.15 ( 0.05 )28.340.750.8323.490.15
77 5010000.920.00.020.65 ( 0.01 )49.08 ( 6.86 )4.29 ( 0.09 )49.790.930.6549.084.29
78 10010000.910.00.050.66 ( 0.01 )32.99 ( 5.22 )3.81 ( 0.09 )34.180.8 0.6632.993.81
79 50010000.9 2.00.110.8 ( 0 ) 30.91 ( 2.22 )1.52 ( 0.12 )34.390.780.8030.911.52
80100010000.9 1.00.140.83 ( 0 ) 35.66 ( 1.98 )0.23 ( 0.06 )40.430.820.8335.660.23
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 1.0 & 0.14 & 0.81 ( 0 ) & 25.68 ( 1.61 ) & 1.07 ( 0.11 ) & 29.61 & 0.76 & 0.81 & 25.68 & 1.07\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.5 & 0.21 & 0.83 ( 0 ) & 23.49 ( 1.26 ) & 0.15 ( 0.05 ) & 28.34 & 0.75 & 0.83 & 23.49 & 0.15\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.0 & 0.02 & 0.65 ( 0.01 ) & 49.08 ( 6.86 ) & 4.29 ( 0.09 ) & 49.79 & 0.93 & 0.65 & 49.08 & 4.29\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.0 & 0.05 & 0.66 ( 0.01 ) & 32.99 ( 5.22 ) & 3.81 ( 0.09 ) & 34.18 & 0.8 & 0.66 & 32.99 & 3.81\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.0 & 0.11 & 0.8 ( 0 ) & 30.91 ( 2.22 ) & 1.52 ( 0.12 ) & 34.39 & 0.78 & 0.80 & 30.91 & 1.52\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.0 & 0.14 & 0.83 ( 0 ) & 35.66 ( 1.98 ) & 0.23 ( 0.06 ) & 40.43 & 0.82 & 0.83 & 35.66 & 0.23\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 1.0 | 0.14 | 0.81 ( 0 ) | 25.68 ( 1.61 ) | 1.07 ( 0.11 ) | 29.61 | 0.76 | 0.81 | 25.68 | 1.07 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.5 | 0.21 | 0.83 ( 0 ) | 23.49 ( 1.26 ) | 0.15 ( 0.05 ) | 28.34 | 0.75 | 0.83 | 23.49 | 0.15 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.0 | 0.02 | 0.65 ( 0.01 ) | 49.08 ( 6.86 ) | 4.29 ( 0.09 ) | 49.79 | 0.93 | 0.65 | 49.08 | 4.29 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.0 | 0.05 | 0.66 ( 0.01 ) | 32.99 ( 5.22 ) | 3.81 ( 0.09 ) | 34.18 | 0.8 | 0.66 | 32.99 | 3.81 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.0 | 0.11 | 0.8 ( 0 ) | 30.91 ( 2.22 ) | 1.52 ( 0.12 ) | 34.39 | 0.78 | 0.80 | 30.91 | 1.52 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.0 | 0.14 | 0.83 ( 0 ) | 35.66 ( 1.98 ) | 0.23 ( 0.06 ) | 40.43 | 0.82 | 0.83 | 35.66 | 0.23 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "75 500 500 0.9 1.0 0.14 0.81 ( 0 ) 25.68 ( 1.61 ) 1.07 ( 0.11 )\n", + "76 1000 500 0.9 0.5 0.21 0.83 ( 0 ) 23.49 ( 1.26 ) 0.15 ( 0.05 )\n", + "77 50 1000 0.9 20.0 0.02 0.65 ( 0.01 ) 49.08 ( 6.86 ) 4.29 ( 0.09 )\n", + "78 100 1000 0.9 10.0 0.05 0.66 ( 0.01 ) 32.99 ( 5.22 ) 3.81 ( 0.09 )\n", + "79 500 1000 0.9 2.0 0.11 0.8 ( 0 ) 30.91 ( 2.22 ) 1.52 ( 0.12 )\n", + "80 1000 1000 0.9 1.0 0.14 0.83 ( 0 ) 35.66 ( 1.98 ) 0.23 ( 0.06 )\n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "75 29.61 0.76 0.81 25.68 1.07 \n", + "76 28.34 0.75 0.83 23.49 0.15 \n", + "77 49.79 0.93 0.65 49.08 4.29 \n", + "78 34.18 0.8 0.66 32.99 3.81 \n", + "79 34.39 0.78 0.80 30.91 1.52 \n", + "80 40.43 0.82 0.83 35.66 0.23 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 80 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 500.1 1.000.130.77 ( 0.01 )13.02 ( 1.02 )1.51 ( 0.11 )16.510.630.7713.021.51
2 100 500.1 0.500.240.85 ( 0.01 )10.71 ( 0.62 )0.56 ( 0.07 )15.150.570.8510.710.56
3 500 500.1 0.100.410.92 ( 0 ) 7.43 ( 0.6 ) 0.02 ( 0.01 )12.410.420.92 7.430.02
41000 500.1 0.050.390.92 ( 0 ) 7.82 ( 0.76 ) 0 ( 0 ) 12.820.4 0.92 7.820.00
5 50 1000.1 2.000.090.73 ( 0.01 )21.55 ( 1.94 )1.64 ( 0.11 )24.910.730.7321.551.64
6 100 1000.1 1.000.180.83 ( 0.01 )15.59 ( 1.32 )0.84 ( 0.1 ) 19.750.620.8315.590.84
7 500 1000.1 0.200.320.92 ( 0 ) 11.5 ( 0.9 ) 0 ( 0 ) 16.500.540.9211.500.00
81000 1000.1 0.100.340.92 ( 0 ) 11.02 ( 1.05 )0 ( 0 ) 16.020.490.9211.020.00
9 50 5000.110.000.030.66 ( 0.01 )58.7 ( 5.86 ) 2.64 ( 0.12 )61.060.890.6658.702.64
10 100 5000.1 5.000.140.78 ( 0.01 )19.29 ( 1.92 )1.76 ( 0.1 ) 22.530.680.7819.291.76
11 500 5000.1 1.000.260.91 ( 0 ) 17.05 ( 1.43 )0 ( 0 ) 22.050.620.9117.050.00
121000 5000.1 0.500.290.93 ( 0 ) 15.14 ( 1.39 )0 ( 0 ) 20.140.540.9315.140.00
13 5010000.120.000.020.65 ( 0.01 )85.97 ( 9 ) 3.03 ( 0.13 )87.940.920.6585.973.03
14 10010000.110.000.120.76 ( 0.01 )22.02 ( 1.97 )2.07 ( 0.1 ) 24.950.750.7622.022.07
15 50010000.1 2.000.230.91 ( 0 ) 21.07 ( 1.75 )0 ( 0 ) 26.070.660.9121.070.00
16100010000.1 1.000.240.92 ( 0 ) 19.56 ( 2.29 )0 ( 0 ) 24.560.570.9219.560.00
17 50 500.3 1.000.130.76 ( 0.01 )11.32 ( 0.99 )1.87 ( 0.14 )14.450.590.7611.321.87
18 100 500.3 0.500.180.83 ( 0.01 )12.96 ( 0.86 )0.75 ( 0.09 )17.210.610.8312.960.75
19 500 500.3 0.100.330.91 ( 0 ) 9.89 ( 0.75 ) 0 ( 0 ) 14.890.510.91 9.890.00
201000 500.3 0.050.380.92 ( 0 ) 8.56 ( 0.69 ) 0 ( 0 ) 13.560.440.92 8.560.00
21 50 1000.3 2.000.080.74 ( 0.01 )17.99 ( 1.78 )2.32 ( 0.14 )20.670.720.7417.992.32
22 100 1000.3 1.000.170.82 ( 0.01 )14.36 ( 1.25 )1.36 ( 0.12 )18.000.6 0.8214.361.36
23 500 1000.3 0.200.290.91 ( 0 ) 13.08 ( 1 ) 0 ( 0 ) 18.080.560.9113.080.00
241000 1000.3 0.100.380.92 ( 0 ) 9.67 ( 0.76 ) 0 ( 0 ) 14.670.490.92 9.670.00
25 50 5000.310.000.030.66 ( 0.01 )49.2 ( 5.65 ) 3.15 ( 0.13 )51.050.890.6649.203.15
26 100 5000.3 5.000.110.77 ( 0.01 )23.84 ( 2.37 )2.05 ( 0.11 )26.790.730.7723.842.05
27 500 5000.3 1.000.190.91 ( 0 ) 25.04 ( 1.69 )0 ( 0 ) 30.040.720.9125.040.00
281000 5000.3 0.500.250.92 ( 0 ) 18.51 ( 1.25 )0 ( 0 ) 23.510.660.9218.510.00
29 5010000.320.000.020.67 ( 0.01 )54.74 ( 6.8 ) 3.54 ( 0.12 )56.200.910.6754.743.54
30 10010000.310.000.080.75 ( 0.01 )28.55 ( 5.11 )2.58 ( 0.11 )30.970.750.7528.552.58
51 500 500.7 0.100.310.89 ( 0 ) 11.14 ( 0.74 )0.02 ( 0.02 )16.120.560.8911.140.02
521000 500.7 0.050.370.89 ( 0 ) 9.65 ( 0.77 ) 0 ( 0 ) 14.650.490.89 9.650.00
53 50 1000.7 2.000.080.71 ( 0.01 )17.76 ( 1.65 )2.81 ( 0.14 )19.950.740.7117.762.81
54 100 1000.7 1.000.130.79 ( 0.01 )16.43 ( 1.31 )1.79 ( 0.13 )19.640.680.7916.431.79
55 500 1000.7 0.200.250.89 ( 0 ) 16.01 ( 0.82 )0.03 ( 0.03 )20.980.670.8916.010.03
561000 1000.7 0.100.330.89 ( 0 ) 12.77 ( 0.94 )0 ( 0 ) 17.770.580.8912.770.00
57 50 5000.710.000.030.67 ( 0.01 )43.83 ( 5.17 )3.75 ( 0.12 )45.080.9 0.6743.833.75
58 100 5000.7 5.000.100.74 ( 0.01 )19.1 ( 1.88 ) 3.08 ( 0.1 ) 21.020.730.7419.103.08
59 500 5000.7 1.000.150.87 ( 0 ) 31.23 ( 1.88 )0.17 ( 0.04 )36.060.780.8731.230.17
601000 5000.7 0.500.220.89 ( 0 ) 22.46 ( 1.45 )0 ( 0 ) 27.460.710.8922.460.00
61 5010000.720.000.020.64 ( 0.01 )47.17 ( 5.85 )4.12 ( 0.09 )48.050.920.6447.174.12
62 10010000.710.000.080.75 ( 0.01 )20.86 ( 2.56 )3.59 ( 0.09 )22.270.770.7520.863.59
63 50010000.7 2.000.130.87 ( 0 ) 36.32 ( 2.18 )0.23 ( 0.05 )41.090.810.8736.320.23
64100010000.7 1.000.160.89 ( 0 ) 32.22 ( 2.11 )0.01 ( 0.01 )37.210.8 0.8932.220.01
65 50 500.9 1.000.090.71 ( 0.01 )14.15 ( 1 ) 2.3 ( 0.14 ) 16.850.680.7114.152.30
66 100 500.9 0.500.150.77 ( 0.01 )11.74 ( 0.88 )1.74 ( 0.13 )15.000.640.7711.741.74
67 500 500.9 0.100.270.83 ( 0 ) 12.28 ( 0.9 ) 0.18 ( 0.06 )17.100.570.8312.280.18
681000 500.9 0.050.390.84 ( 0 ) 9.58 ( 0.68 ) 0.01 ( 0.01 )14.570.510.84 9.580.01
69 50 1000.9 2.000.080.7 ( 0.01 ) 15.1 ( 1.65 ) 3.16 ( 0.13 )16.940.7 0.7015.103.16
70 100 1000.9 1.000.150.75 ( 0.01 )14.19 ( 1.38 )2.23 ( 0.13 )16.960.640.7514.192.23
71 500 1000.9 0.200.250.83 ( 0 ) 16.33 ( 1.01 )0.2 ( 0.06 ) 21.130.670.8316.330.20
721000 1000.9 0.100.320.84 ( 0 ) 13.82 ( 1.17 )0.03 ( 0.02 )18.790.6 0.8413.820.03
73 50 5000.910.000.050.66 ( 0.02 )28.64 ( 3.14 )4.13 ( 0.07 )29.510.880.6628.644.13
74 100 5000.9 5.000.070.7 ( 0.01 ) 25.71 ( 4.03 )3.42 ( 0.1 ) 27.290.780.7025.713.42
75 500 5000.9 1.000.140.81 ( 0 ) 25.68 ( 1.61 )1.07 ( 0.11 )29.610.760.8125.681.07
761000 5000.9 0.500.210.83 ( 0 ) 23.49 ( 1.26 )0.15 ( 0.05 )28.340.750.8323.490.15
77 5010000.920.000.020.65 ( 0.01 )49.08 ( 6.86 )4.29 ( 0.09 )49.790.930.6549.084.29
78 10010000.910.000.050.66 ( 0.01 )32.99 ( 5.22 )3.81 ( 0.09 )34.180.8 0.6632.993.81
79 50010000.9 2.000.110.8 ( 0 ) 30.91 ( 2.22 )1.52 ( 0.12 )34.390.780.8030.911.52
80100010000.9 1.000.140.83 ( 0 ) 35.66 ( 1.98 )0.23 ( 0.06 )40.430.820.8335.660.23
\n" + ], + "text/latex": [ + "A data.frame: 80 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1.00 & 0.13 & 0.77 ( 0.01 ) & 13.02 ( 1.02 ) & 1.51 ( 0.11 ) & 16.51 & 0.63 & 0.77 & 13.02 & 1.51\\\\\n", + "\t2 & 100 & 50 & 0.1 & 0.50 & 0.24 & 0.85 ( 0.01 ) & 10.71 ( 0.62 ) & 0.56 ( 0.07 ) & 15.15 & 0.57 & 0.85 & 10.71 & 0.56\\\\\n", + "\t3 & 500 & 50 & 0.1 & 0.10 & 0.41 & 0.92 ( 0 ) & 7.43 ( 0.6 ) & 0.02 ( 0.01 ) & 12.41 & 0.42 & 0.92 & 7.43 & 0.02\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 0.05 & 0.39 & 0.92 ( 0 ) & 7.82 ( 0.76 ) & 0 ( 0 ) & 12.82 & 0.4 & 0.92 & 7.82 & 0.00\\\\\n", + "\t5 & 50 & 100 & 0.1 & 2.00 & 0.09 & 0.73 ( 0.01 ) & 21.55 ( 1.94 ) & 1.64 ( 0.11 ) & 24.91 & 0.73 & 0.73 & 21.55 & 1.64\\\\\n", + "\t6 & 100 & 100 & 0.1 & 1.00 & 0.18 & 0.83 ( 0.01 ) & 15.59 ( 1.32 ) & 0.84 ( 0.1 ) & 19.75 & 0.62 & 0.83 & 15.59 & 0.84\\\\\n", + "\t7 & 500 & 100 & 0.1 & 0.20 & 0.32 & 0.92 ( 0 ) & 11.5 ( 0.9 ) & 0 ( 0 ) & 16.50 & 0.54 & 0.92 & 11.50 & 0.00\\\\\n", + "\t8 & 1000 & 100 & 0.1 & 0.10 & 0.34 & 0.92 ( 0 ) & 11.02 ( 1.05 ) & 0 ( 0 ) & 16.02 & 0.49 & 0.92 & 11.02 & 0.00\\\\\n", + "\t9 & 50 & 500 & 0.1 & 10.00 & 0.03 & 0.66 ( 0.01 ) & 58.7 ( 5.86 ) & 2.64 ( 0.12 ) & 61.06 & 0.89 & 0.66 & 58.70 & 2.64\\\\\n", + "\t10 & 100 & 500 & 0.1 & 5.00 & 0.14 & 0.78 ( 0.01 ) & 19.29 ( 1.92 ) & 1.76 ( 0.1 ) & 22.53 & 0.68 & 0.78 & 19.29 & 1.76\\\\\n", + "\t11 & 500 & 500 & 0.1 & 1.00 & 0.26 & 0.91 ( 0 ) & 17.05 ( 1.43 ) & 0 ( 0 ) & 22.05 & 0.62 & 0.91 & 17.05 & 0.00\\\\\n", + "\t12 & 1000 & 500 & 0.1 & 0.50 & 0.29 & 0.93 ( 0 ) & 15.14 ( 1.39 ) & 0 ( 0 ) & 20.14 & 0.54 & 0.93 & 15.14 & 0.00\\\\\n", + "\t13 & 50 & 1000 & 0.1 & 20.00 & 0.02 & 0.65 ( 0.01 ) & 85.97 ( 9 ) & 3.03 ( 0.13 ) & 87.94 & 0.92 & 0.65 & 85.97 & 3.03\\\\\n", + "\t14 & 100 & 1000 & 0.1 & 10.00 & 0.12 & 0.76 ( 0.01 ) & 22.02 ( 1.97 ) & 2.07 ( 0.1 ) & 24.95 & 0.75 & 0.76 & 22.02 & 2.07\\\\\n", + "\t15 & 500 & 1000 & 0.1 & 2.00 & 0.23 & 0.91 ( 0 ) & 21.07 ( 1.75 ) & 0 ( 0 ) & 26.07 & 0.66 & 0.91 & 21.07 & 0.00\\\\\n", + "\t16 & 1000 & 1000 & 0.1 & 1.00 & 0.24 & 0.92 ( 0 ) & 19.56 ( 2.29 ) & 0 ( 0 ) & 24.56 & 0.57 & 0.92 & 19.56 & 0.00\\\\\n", + "\t17 & 50 & 50 & 0.3 & 1.00 & 0.13 & 0.76 ( 0.01 ) & 11.32 ( 0.99 ) & 1.87 ( 0.14 ) & 14.45 & 0.59 & 0.76 & 11.32 & 1.87\\\\\n", + "\t18 & 100 & 50 & 0.3 & 0.50 & 0.18 & 0.83 ( 0.01 ) & 12.96 ( 0.86 ) & 0.75 ( 0.09 ) & 17.21 & 0.61 & 0.83 & 12.96 & 0.75\\\\\n", + "\t19 & 500 & 50 & 0.3 & 0.10 & 0.33 & 0.91 ( 0 ) & 9.89 ( 0.75 ) & 0 ( 0 ) & 14.89 & 0.51 & 0.91 & 9.89 & 0.00\\\\\n", + "\t20 & 1000 & 50 & 0.3 & 0.05 & 0.38 & 0.92 ( 0 ) & 8.56 ( 0.69 ) & 0 ( 0 ) & 13.56 & 0.44 & 0.92 & 8.56 & 0.00\\\\\n", + "\t21 & 50 & 100 & 0.3 & 2.00 & 0.08 & 0.74 ( 0.01 ) & 17.99 ( 1.78 ) & 2.32 ( 0.14 ) & 20.67 & 0.72 & 0.74 & 17.99 & 2.32\\\\\n", + "\t22 & 100 & 100 & 0.3 & 1.00 & 0.17 & 0.82 ( 0.01 ) & 14.36 ( 1.25 ) & 1.36 ( 0.12 ) & 18.00 & 0.6 & 0.82 & 14.36 & 1.36\\\\\n", + "\t23 & 500 & 100 & 0.3 & 0.20 & 0.29 & 0.91 ( 0 ) & 13.08 ( 1 ) & 0 ( 0 ) & 18.08 & 0.56 & 0.91 & 13.08 & 0.00\\\\\n", + "\t24 & 1000 & 100 & 0.3 & 0.10 & 0.38 & 0.92 ( 0 ) & 9.67 ( 0.76 ) & 0 ( 0 ) & 14.67 & 0.49 & 0.92 & 9.67 & 0.00\\\\\n", + "\t25 & 50 & 500 & 0.3 & 10.00 & 0.03 & 0.66 ( 0.01 ) & 49.2 ( 5.65 ) & 3.15 ( 0.13 ) & 51.05 & 0.89 & 0.66 & 49.20 & 3.15\\\\\n", + "\t26 & 100 & 500 & 0.3 & 5.00 & 0.11 & 0.77 ( 0.01 ) & 23.84 ( 2.37 ) & 2.05 ( 0.11 ) & 26.79 & 0.73 & 0.77 & 23.84 & 2.05\\\\\n", + "\t27 & 500 & 500 & 0.3 & 1.00 & 0.19 & 0.91 ( 0 ) & 25.04 ( 1.69 ) & 0 ( 0 ) & 30.04 & 0.72 & 0.91 & 25.04 & 0.00\\\\\n", + "\t28 & 1000 & 500 & 0.3 & 0.50 & 0.25 & 0.92 ( 0 ) & 18.51 ( 1.25 ) & 0 ( 0 ) & 23.51 & 0.66 & 0.92 & 18.51 & 0.00\\\\\n", + "\t29 & 50 & 1000 & 0.3 & 20.00 & 0.02 & 0.67 ( 0.01 ) & 54.74 ( 6.8 ) & 3.54 ( 0.12 ) & 56.20 & 0.91 & 0.67 & 54.74 & 3.54\\\\\n", + "\t30 & 100 & 1000 & 0.3 & 10.00 & 0.08 & 0.75 ( 0.01 ) & 28.55 ( 5.11 ) & 2.58 ( 0.11 ) & 30.97 & 0.75 & 0.75 & 28.55 & 2.58\\\\\n", + "\t⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮\\\\\n", + "\t51 & 500 & 50 & 0.7 & 0.10 & 0.31 & 0.89 ( 0 ) & 11.14 ( 0.74 ) & 0.02 ( 0.02 ) & 16.12 & 0.56 & 0.89 & 11.14 & 0.02\\\\\n", + "\t52 & 1000 & 50 & 0.7 & 0.05 & 0.37 & 0.89 ( 0 ) & 9.65 ( 0.77 ) & 0 ( 0 ) & 14.65 & 0.49 & 0.89 & 9.65 & 0.00\\\\\n", + "\t53 & 50 & 100 & 0.7 & 2.00 & 0.08 & 0.71 ( 0.01 ) & 17.76 ( 1.65 ) & 2.81 ( 0.14 ) & 19.95 & 0.74 & 0.71 & 17.76 & 2.81\\\\\n", + "\t54 & 100 & 100 & 0.7 & 1.00 & 0.13 & 0.79 ( 0.01 ) & 16.43 ( 1.31 ) & 1.79 ( 0.13 ) & 19.64 & 0.68 & 0.79 & 16.43 & 1.79\\\\\n", + "\t55 & 500 & 100 & 0.7 & 0.20 & 0.25 & 0.89 ( 0 ) & 16.01 ( 0.82 ) & 0.03 ( 0.03 ) & 20.98 & 0.67 & 0.89 & 16.01 & 0.03\\\\\n", + "\t56 & 1000 & 100 & 0.7 & 0.10 & 0.33 & 0.89 ( 0 ) & 12.77 ( 0.94 ) & 0 ( 0 ) & 17.77 & 0.58 & 0.89 & 12.77 & 0.00\\\\\n", + "\t57 & 50 & 500 & 0.7 & 10.00 & 0.03 & 0.67 ( 0.01 ) & 43.83 ( 5.17 ) & 3.75 ( 0.12 ) & 45.08 & 0.9 & 0.67 & 43.83 & 3.75\\\\\n", + "\t58 & 100 & 500 & 0.7 & 5.00 & 0.10 & 0.74 ( 0.01 ) & 19.1 ( 1.88 ) & 3.08 ( 0.1 ) & 21.02 & 0.73 & 0.74 & 19.10 & 3.08\\\\\n", + "\t59 & 500 & 500 & 0.7 & 1.00 & 0.15 & 0.87 ( 0 ) & 31.23 ( 1.88 ) & 0.17 ( 0.04 ) & 36.06 & 0.78 & 0.87 & 31.23 & 0.17\\\\\n", + "\t60 & 1000 & 500 & 0.7 & 0.50 & 0.22 & 0.89 ( 0 ) & 22.46 ( 1.45 ) & 0 ( 0 ) & 27.46 & 0.71 & 0.89 & 22.46 & 0.00\\\\\n", + "\t61 & 50 & 1000 & 0.7 & 20.00 & 0.02 & 0.64 ( 0.01 ) & 47.17 ( 5.85 ) & 4.12 ( 0.09 ) & 48.05 & 0.92 & 0.64 & 47.17 & 4.12\\\\\n", + "\t62 & 100 & 1000 & 0.7 & 10.00 & 0.08 & 0.75 ( 0.01 ) & 20.86 ( 2.56 ) & 3.59 ( 0.09 ) & 22.27 & 0.77 & 0.75 & 20.86 & 3.59\\\\\n", + "\t63 & 500 & 1000 & 0.7 & 2.00 & 0.13 & 0.87 ( 0 ) & 36.32 ( 2.18 ) & 0.23 ( 0.05 ) & 41.09 & 0.81 & 0.87 & 36.32 & 0.23\\\\\n", + "\t64 & 1000 & 1000 & 0.7 & 1.00 & 0.16 & 0.89 ( 0 ) & 32.22 ( 2.11 ) & 0.01 ( 0.01 ) & 37.21 & 0.8 & 0.89 & 32.22 & 0.01\\\\\n", + "\t65 & 50 & 50 & 0.9 & 1.00 & 0.09 & 0.71 ( 0.01 ) & 14.15 ( 1 ) & 2.3 ( 0.14 ) & 16.85 & 0.68 & 0.71 & 14.15 & 2.30\\\\\n", + "\t66 & 100 & 50 & 0.9 & 0.50 & 0.15 & 0.77 ( 0.01 ) & 11.74 ( 0.88 ) & 1.74 ( 0.13 ) & 15.00 & 0.64 & 0.77 & 11.74 & 1.74\\\\\n", + "\t67 & 500 & 50 & 0.9 & 0.10 & 0.27 & 0.83 ( 0 ) & 12.28 ( 0.9 ) & 0.18 ( 0.06 ) & 17.10 & 0.57 & 0.83 & 12.28 & 0.18\\\\\n", + "\t68 & 1000 & 50 & 0.9 & 0.05 & 0.39 & 0.84 ( 0 ) & 9.58 ( 0.68 ) & 0.01 ( 0.01 ) & 14.57 & 0.51 & 0.84 & 9.58 & 0.01\\\\\n", + "\t69 & 50 & 100 & 0.9 & 2.00 & 0.08 & 0.7 ( 0.01 ) & 15.1 ( 1.65 ) & 3.16 ( 0.13 ) & 16.94 & 0.7 & 0.70 & 15.10 & 3.16\\\\\n", + "\t70 & 100 & 100 & 0.9 & 1.00 & 0.15 & 0.75 ( 0.01 ) & 14.19 ( 1.38 ) & 2.23 ( 0.13 ) & 16.96 & 0.64 & 0.75 & 14.19 & 2.23\\\\\n", + "\t71 & 500 & 100 & 0.9 & 0.20 & 0.25 & 0.83 ( 0 ) & 16.33 ( 1.01 ) & 0.2 ( 0.06 ) & 21.13 & 0.67 & 0.83 & 16.33 & 0.20\\\\\n", + "\t72 & 1000 & 100 & 0.9 & 0.10 & 0.32 & 0.84 ( 0 ) & 13.82 ( 1.17 ) & 0.03 ( 0.02 ) & 18.79 & 0.6 & 0.84 & 13.82 & 0.03\\\\\n", + "\t73 & 50 & 500 & 0.9 & 10.00 & 0.05 & 0.66 ( 0.02 ) & 28.64 ( 3.14 ) & 4.13 ( 0.07 ) & 29.51 & 0.88 & 0.66 & 28.64 & 4.13\\\\\n", + "\t74 & 100 & 500 & 0.9 & 5.00 & 0.07 & 0.7 ( 0.01 ) & 25.71 ( 4.03 ) & 3.42 ( 0.1 ) & 27.29 & 0.78 & 0.70 & 25.71 & 3.42\\\\\n", + "\t75 & 500 & 500 & 0.9 & 1.00 & 0.14 & 0.81 ( 0 ) & 25.68 ( 1.61 ) & 1.07 ( 0.11 ) & 29.61 & 0.76 & 0.81 & 25.68 & 1.07\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.50 & 0.21 & 0.83 ( 0 ) & 23.49 ( 1.26 ) & 0.15 ( 0.05 ) & 28.34 & 0.75 & 0.83 & 23.49 & 0.15\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.00 & 0.02 & 0.65 ( 0.01 ) & 49.08 ( 6.86 ) & 4.29 ( 0.09 ) & 49.79 & 0.93 & 0.65 & 49.08 & 4.29\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.00 & 0.05 & 0.66 ( 0.01 ) & 32.99 ( 5.22 ) & 3.81 ( 0.09 ) & 34.18 & 0.8 & 0.66 & 32.99 & 3.81\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.00 & 0.11 & 0.8 ( 0 ) & 30.91 ( 2.22 ) & 1.52 ( 0.12 ) & 34.39 & 0.78 & 0.80 & 30.91 & 1.52\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.00 & 0.14 & 0.83 ( 0 ) & 35.66 ( 1.98 ) & 0.23 ( 0.06 ) & 40.43 & 0.82 & 0.83 & 35.66 & 0.23\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 80 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1.00 | 0.13 | 0.77 ( 0.01 ) | 13.02 ( 1.02 ) | 1.51 ( 0.11 ) | 16.51 | 0.63 | 0.77 | 13.02 | 1.51 |\n", + "| 2 | 100 | 50 | 0.1 | 0.50 | 0.24 | 0.85 ( 0.01 ) | 10.71 ( 0.62 ) | 0.56 ( 0.07 ) | 15.15 | 0.57 | 0.85 | 10.71 | 0.56 |\n", + "| 3 | 500 | 50 | 0.1 | 0.10 | 0.41 | 0.92 ( 0 ) | 7.43 ( 0.6 ) | 0.02 ( 0.01 ) | 12.41 | 0.42 | 0.92 | 7.43 | 0.02 |\n", + "| 4 | 1000 | 50 | 0.1 | 0.05 | 0.39 | 0.92 ( 0 ) | 7.82 ( 0.76 ) | 0 ( 0 ) | 12.82 | 0.4 | 0.92 | 7.82 | 0.00 |\n", + "| 5 | 50 | 100 | 0.1 | 2.00 | 0.09 | 0.73 ( 0.01 ) | 21.55 ( 1.94 ) | 1.64 ( 0.11 ) | 24.91 | 0.73 | 0.73 | 21.55 | 1.64 |\n", + "| 6 | 100 | 100 | 0.1 | 1.00 | 0.18 | 0.83 ( 0.01 ) | 15.59 ( 1.32 ) | 0.84 ( 0.1 ) | 19.75 | 0.62 | 0.83 | 15.59 | 0.84 |\n", + "| 7 | 500 | 100 | 0.1 | 0.20 | 0.32 | 0.92 ( 0 ) | 11.5 ( 0.9 ) | 0 ( 0 ) | 16.50 | 0.54 | 0.92 | 11.50 | 0.00 |\n", + "| 8 | 1000 | 100 | 0.1 | 0.10 | 0.34 | 0.92 ( 0 ) | 11.02 ( 1.05 ) | 0 ( 0 ) | 16.02 | 0.49 | 0.92 | 11.02 | 0.00 |\n", + "| 9 | 50 | 500 | 0.1 | 10.00 | 0.03 | 0.66 ( 0.01 ) | 58.7 ( 5.86 ) | 2.64 ( 0.12 ) | 61.06 | 0.89 | 0.66 | 58.70 | 2.64 |\n", + "| 10 | 100 | 500 | 0.1 | 5.00 | 0.14 | 0.78 ( 0.01 ) | 19.29 ( 1.92 ) | 1.76 ( 0.1 ) | 22.53 | 0.68 | 0.78 | 19.29 | 1.76 |\n", + "| 11 | 500 | 500 | 0.1 | 1.00 | 0.26 | 0.91 ( 0 ) | 17.05 ( 1.43 ) | 0 ( 0 ) | 22.05 | 0.62 | 0.91 | 17.05 | 0.00 |\n", + "| 12 | 1000 | 500 | 0.1 | 0.50 | 0.29 | 0.93 ( 0 ) | 15.14 ( 1.39 ) | 0 ( 0 ) | 20.14 | 0.54 | 0.93 | 15.14 | 0.00 |\n", + "| 13 | 50 | 1000 | 0.1 | 20.00 | 0.02 | 0.65 ( 0.01 ) | 85.97 ( 9 ) | 3.03 ( 0.13 ) | 87.94 | 0.92 | 0.65 | 85.97 | 3.03 |\n", + "| 14 | 100 | 1000 | 0.1 | 10.00 | 0.12 | 0.76 ( 0.01 ) | 22.02 ( 1.97 ) | 2.07 ( 0.1 ) | 24.95 | 0.75 | 0.76 | 22.02 | 2.07 |\n", + "| 15 | 500 | 1000 | 0.1 | 2.00 | 0.23 | 0.91 ( 0 ) | 21.07 ( 1.75 ) | 0 ( 0 ) | 26.07 | 0.66 | 0.91 | 21.07 | 0.00 |\n", + "| 16 | 1000 | 1000 | 0.1 | 1.00 | 0.24 | 0.92 ( 0 ) | 19.56 ( 2.29 ) | 0 ( 0 ) | 24.56 | 0.57 | 0.92 | 19.56 | 0.00 |\n", + "| 17 | 50 | 50 | 0.3 | 1.00 | 0.13 | 0.76 ( 0.01 ) | 11.32 ( 0.99 ) | 1.87 ( 0.14 ) | 14.45 | 0.59 | 0.76 | 11.32 | 1.87 |\n", + "| 18 | 100 | 50 | 0.3 | 0.50 | 0.18 | 0.83 ( 0.01 ) | 12.96 ( 0.86 ) | 0.75 ( 0.09 ) | 17.21 | 0.61 | 0.83 | 12.96 | 0.75 |\n", + "| 19 | 500 | 50 | 0.3 | 0.10 | 0.33 | 0.91 ( 0 ) | 9.89 ( 0.75 ) | 0 ( 0 ) | 14.89 | 0.51 | 0.91 | 9.89 | 0.00 |\n", + "| 20 | 1000 | 50 | 0.3 | 0.05 | 0.38 | 0.92 ( 0 ) | 8.56 ( 0.69 ) | 0 ( 0 ) | 13.56 | 0.44 | 0.92 | 8.56 | 0.00 |\n", + "| 21 | 50 | 100 | 0.3 | 2.00 | 0.08 | 0.74 ( 0.01 ) | 17.99 ( 1.78 ) | 2.32 ( 0.14 ) | 20.67 | 0.72 | 0.74 | 17.99 | 2.32 |\n", + "| 22 | 100 | 100 | 0.3 | 1.00 | 0.17 | 0.82 ( 0.01 ) | 14.36 ( 1.25 ) | 1.36 ( 0.12 ) | 18.00 | 0.6 | 0.82 | 14.36 | 1.36 |\n", + "| 23 | 500 | 100 | 0.3 | 0.20 | 0.29 | 0.91 ( 0 ) | 13.08 ( 1 ) | 0 ( 0 ) | 18.08 | 0.56 | 0.91 | 13.08 | 0.00 |\n", + "| 24 | 1000 | 100 | 0.3 | 0.10 | 0.38 | 0.92 ( 0 ) | 9.67 ( 0.76 ) | 0 ( 0 ) | 14.67 | 0.49 | 0.92 | 9.67 | 0.00 |\n", + "| 25 | 50 | 500 | 0.3 | 10.00 | 0.03 | 0.66 ( 0.01 ) | 49.2 ( 5.65 ) | 3.15 ( 0.13 ) | 51.05 | 0.89 | 0.66 | 49.20 | 3.15 |\n", + "| 26 | 100 | 500 | 0.3 | 5.00 | 0.11 | 0.77 ( 0.01 ) | 23.84 ( 2.37 ) | 2.05 ( 0.11 ) | 26.79 | 0.73 | 0.77 | 23.84 | 2.05 |\n", + "| 27 | 500 | 500 | 0.3 | 1.00 | 0.19 | 0.91 ( 0 ) | 25.04 ( 1.69 ) | 0 ( 0 ) | 30.04 | 0.72 | 0.91 | 25.04 | 0.00 |\n", + "| 28 | 1000 | 500 | 0.3 | 0.50 | 0.25 | 0.92 ( 0 ) | 18.51 ( 1.25 ) | 0 ( 0 ) | 23.51 | 0.66 | 0.92 | 18.51 | 0.00 |\n", + "| 29 | 50 | 1000 | 0.3 | 20.00 | 0.02 | 0.67 ( 0.01 ) | 54.74 ( 6.8 ) | 3.54 ( 0.12 ) | 56.20 | 0.91 | 0.67 | 54.74 | 3.54 |\n", + "| 30 | 100 | 1000 | 0.3 | 10.00 | 0.08 | 0.75 ( 0.01 ) | 28.55 ( 5.11 ) | 2.58 ( 0.11 ) | 30.97 | 0.75 | 0.75 | 28.55 | 2.58 |\n", + "| ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ |\n", + "| 51 | 500 | 50 | 0.7 | 0.10 | 0.31 | 0.89 ( 0 ) | 11.14 ( 0.74 ) | 0.02 ( 0.02 ) | 16.12 | 0.56 | 0.89 | 11.14 | 0.02 |\n", + "| 52 | 1000 | 50 | 0.7 | 0.05 | 0.37 | 0.89 ( 0 ) | 9.65 ( 0.77 ) | 0 ( 0 ) | 14.65 | 0.49 | 0.89 | 9.65 | 0.00 |\n", + "| 53 | 50 | 100 | 0.7 | 2.00 | 0.08 | 0.71 ( 0.01 ) | 17.76 ( 1.65 ) | 2.81 ( 0.14 ) | 19.95 | 0.74 | 0.71 | 17.76 | 2.81 |\n", + "| 54 | 100 | 100 | 0.7 | 1.00 | 0.13 | 0.79 ( 0.01 ) | 16.43 ( 1.31 ) | 1.79 ( 0.13 ) | 19.64 | 0.68 | 0.79 | 16.43 | 1.79 |\n", + "| 55 | 500 | 100 | 0.7 | 0.20 | 0.25 | 0.89 ( 0 ) | 16.01 ( 0.82 ) | 0.03 ( 0.03 ) | 20.98 | 0.67 | 0.89 | 16.01 | 0.03 |\n", + "| 56 | 1000 | 100 | 0.7 | 0.10 | 0.33 | 0.89 ( 0 ) | 12.77 ( 0.94 ) | 0 ( 0 ) | 17.77 | 0.58 | 0.89 | 12.77 | 0.00 |\n", + "| 57 | 50 | 500 | 0.7 | 10.00 | 0.03 | 0.67 ( 0.01 ) | 43.83 ( 5.17 ) | 3.75 ( 0.12 ) | 45.08 | 0.9 | 0.67 | 43.83 | 3.75 |\n", + "| 58 | 100 | 500 | 0.7 | 5.00 | 0.10 | 0.74 ( 0.01 ) | 19.1 ( 1.88 ) | 3.08 ( 0.1 ) | 21.02 | 0.73 | 0.74 | 19.10 | 3.08 |\n", + "| 59 | 500 | 500 | 0.7 | 1.00 | 0.15 | 0.87 ( 0 ) | 31.23 ( 1.88 ) | 0.17 ( 0.04 ) | 36.06 | 0.78 | 0.87 | 31.23 | 0.17 |\n", + "| 60 | 1000 | 500 | 0.7 | 0.50 | 0.22 | 0.89 ( 0 ) | 22.46 ( 1.45 ) | 0 ( 0 ) | 27.46 | 0.71 | 0.89 | 22.46 | 0.00 |\n", + "| 61 | 50 | 1000 | 0.7 | 20.00 | 0.02 | 0.64 ( 0.01 ) | 47.17 ( 5.85 ) | 4.12 ( 0.09 ) | 48.05 | 0.92 | 0.64 | 47.17 | 4.12 |\n", + "| 62 | 100 | 1000 | 0.7 | 10.00 | 0.08 | 0.75 ( 0.01 ) | 20.86 ( 2.56 ) | 3.59 ( 0.09 ) | 22.27 | 0.77 | 0.75 | 20.86 | 3.59 |\n", + "| 63 | 500 | 1000 | 0.7 | 2.00 | 0.13 | 0.87 ( 0 ) | 36.32 ( 2.18 ) | 0.23 ( 0.05 ) | 41.09 | 0.81 | 0.87 | 36.32 | 0.23 |\n", + "| 64 | 1000 | 1000 | 0.7 | 1.00 | 0.16 | 0.89 ( 0 ) | 32.22 ( 2.11 ) | 0.01 ( 0.01 ) | 37.21 | 0.8 | 0.89 | 32.22 | 0.01 |\n", + "| 65 | 50 | 50 | 0.9 | 1.00 | 0.09 | 0.71 ( 0.01 ) | 14.15 ( 1 ) | 2.3 ( 0.14 ) | 16.85 | 0.68 | 0.71 | 14.15 | 2.30 |\n", + "| 66 | 100 | 50 | 0.9 | 0.50 | 0.15 | 0.77 ( 0.01 ) | 11.74 ( 0.88 ) | 1.74 ( 0.13 ) | 15.00 | 0.64 | 0.77 | 11.74 | 1.74 |\n", + "| 67 | 500 | 50 | 0.9 | 0.10 | 0.27 | 0.83 ( 0 ) | 12.28 ( 0.9 ) | 0.18 ( 0.06 ) | 17.10 | 0.57 | 0.83 | 12.28 | 0.18 |\n", + "| 68 | 1000 | 50 | 0.9 | 0.05 | 0.39 | 0.84 ( 0 ) | 9.58 ( 0.68 ) | 0.01 ( 0.01 ) | 14.57 | 0.51 | 0.84 | 9.58 | 0.01 |\n", + "| 69 | 50 | 100 | 0.9 | 2.00 | 0.08 | 0.7 ( 0.01 ) | 15.1 ( 1.65 ) | 3.16 ( 0.13 ) | 16.94 | 0.7 | 0.70 | 15.10 | 3.16 |\n", + "| 70 | 100 | 100 | 0.9 | 1.00 | 0.15 | 0.75 ( 0.01 ) | 14.19 ( 1.38 ) | 2.23 ( 0.13 ) | 16.96 | 0.64 | 0.75 | 14.19 | 2.23 |\n", + "| 71 | 500 | 100 | 0.9 | 0.20 | 0.25 | 0.83 ( 0 ) | 16.33 ( 1.01 ) | 0.2 ( 0.06 ) | 21.13 | 0.67 | 0.83 | 16.33 | 0.20 |\n", + "| 72 | 1000 | 100 | 0.9 | 0.10 | 0.32 | 0.84 ( 0 ) | 13.82 ( 1.17 ) | 0.03 ( 0.02 ) | 18.79 | 0.6 | 0.84 | 13.82 | 0.03 |\n", + "| 73 | 50 | 500 | 0.9 | 10.00 | 0.05 | 0.66 ( 0.02 ) | 28.64 ( 3.14 ) | 4.13 ( 0.07 ) | 29.51 | 0.88 | 0.66 | 28.64 | 4.13 |\n", + "| 74 | 100 | 500 | 0.9 | 5.00 | 0.07 | 0.7 ( 0.01 ) | 25.71 ( 4.03 ) | 3.42 ( 0.1 ) | 27.29 | 0.78 | 0.70 | 25.71 | 3.42 |\n", + "| 75 | 500 | 500 | 0.9 | 1.00 | 0.14 | 0.81 ( 0 ) | 25.68 ( 1.61 ) | 1.07 ( 0.11 ) | 29.61 | 0.76 | 0.81 | 25.68 | 1.07 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.50 | 0.21 | 0.83 ( 0 ) | 23.49 ( 1.26 ) | 0.15 ( 0.05 ) | 28.34 | 0.75 | 0.83 | 23.49 | 0.15 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.00 | 0.02 | 0.65 ( 0.01 ) | 49.08 ( 6.86 ) | 4.29 ( 0.09 ) | 49.79 | 0.93 | 0.65 | 49.08 | 4.29 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.00 | 0.05 | 0.66 ( 0.01 ) | 32.99 ( 5.22 ) | 3.81 ( 0.09 ) | 34.18 | 0.8 | 0.66 | 32.99 | 3.81 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.00 | 0.11 | 0.8 ( 0 ) | 30.91 ( 2.22 ) | 1.52 ( 0.12 ) | 34.39 | 0.78 | 0.80 | 30.91 | 1.52 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.00 | 0.14 | 0.83 ( 0 ) | 35.66 ( 1.98 ) | 0.23 ( 0.06 ) | 40.43 | 0.82 | 0.83 | 35.66 | 0.23 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "1 50 50 0.1 1.00 0.13 0.77 ( 0.01 ) 13.02 ( 1.02 ) 1.51 ( 0.11 )\n", + "2 100 50 0.1 0.50 0.24 0.85 ( 0.01 ) 10.71 ( 0.62 ) 0.56 ( 0.07 )\n", + "3 500 50 0.1 0.10 0.41 0.92 ( 0 ) 7.43 ( 0.6 ) 0.02 ( 0.01 )\n", + "4 1000 50 0.1 0.05 0.39 0.92 ( 0 ) 7.82 ( 0.76 ) 0 ( 0 ) \n", + "5 50 100 0.1 2.00 0.09 0.73 ( 0.01 ) 21.55 ( 1.94 ) 1.64 ( 0.11 )\n", + "6 100 100 0.1 1.00 0.18 0.83 ( 0.01 ) 15.59 ( 1.32 ) 0.84 ( 0.1 ) \n", + "7 500 100 0.1 0.20 0.32 0.92 ( 0 ) 11.5 ( 0.9 ) 0 ( 0 ) \n", + "8 1000 100 0.1 0.10 0.34 0.92 ( 0 ) 11.02 ( 1.05 ) 0 ( 0 ) \n", + "9 50 500 0.1 10.00 0.03 0.66 ( 0.01 ) 58.7 ( 5.86 ) 2.64 ( 0.12 )\n", + "10 100 500 0.1 5.00 0.14 0.78 ( 0.01 ) 19.29 ( 1.92 ) 1.76 ( 0.1 ) \n", + "11 500 500 0.1 1.00 0.26 0.91 ( 0 ) 17.05 ( 1.43 ) 0 ( 0 ) \n", + "12 1000 500 0.1 0.50 0.29 0.93 ( 0 ) 15.14 ( 1.39 ) 0 ( 0 ) \n", + "13 50 1000 0.1 20.00 0.02 0.65 ( 0.01 ) 85.97 ( 9 ) 3.03 ( 0.13 )\n", + "14 100 1000 0.1 10.00 0.12 0.76 ( 0.01 ) 22.02 ( 1.97 ) 2.07 ( 0.1 ) \n", + "15 500 1000 0.1 2.00 0.23 0.91 ( 0 ) 21.07 ( 1.75 ) 0 ( 0 ) \n", + "16 1000 1000 0.1 1.00 0.24 0.92 ( 0 ) 19.56 ( 2.29 ) 0 ( 0 ) \n", + "17 50 50 0.3 1.00 0.13 0.76 ( 0.01 ) 11.32 ( 0.99 ) 1.87 ( 0.14 )\n", + "18 100 50 0.3 0.50 0.18 0.83 ( 0.01 ) 12.96 ( 0.86 ) 0.75 ( 0.09 )\n", + "19 500 50 0.3 0.10 0.33 0.91 ( 0 ) 9.89 ( 0.75 ) 0 ( 0 ) \n", + "20 1000 50 0.3 0.05 0.38 0.92 ( 0 ) 8.56 ( 0.69 ) 0 ( 0 ) \n", + "21 50 100 0.3 2.00 0.08 0.74 ( 0.01 ) 17.99 ( 1.78 ) 2.32 ( 0.14 )\n", + "22 100 100 0.3 1.00 0.17 0.82 ( 0.01 ) 14.36 ( 1.25 ) 1.36 ( 0.12 )\n", + "23 500 100 0.3 0.20 0.29 0.91 ( 0 ) 13.08 ( 1 ) 0 ( 0 ) \n", + "24 1000 100 0.3 0.10 0.38 0.92 ( 0 ) 9.67 ( 0.76 ) 0 ( 0 ) \n", + "25 50 500 0.3 10.00 0.03 0.66 ( 0.01 ) 49.2 ( 5.65 ) 3.15 ( 0.13 )\n", + "26 100 500 0.3 5.00 0.11 0.77 ( 0.01 ) 23.84 ( 2.37 ) 2.05 ( 0.11 )\n", + "27 500 500 0.3 1.00 0.19 0.91 ( 0 ) 25.04 ( 1.69 ) 0 ( 0 ) \n", + "28 1000 500 0.3 0.50 0.25 0.92 ( 0 ) 18.51 ( 1.25 ) 0 ( 0 ) \n", + "29 50 1000 0.3 20.00 0.02 0.67 ( 0.01 ) 54.74 ( 6.8 ) 3.54 ( 0.12 )\n", + "30 100 1000 0.3 10.00 0.08 0.75 ( 0.01 ) 28.55 ( 5.11 ) 2.58 ( 0.11 )\n", + "⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ \n", + "51 500 50 0.7 0.10 0.31 0.89 ( 0 ) 11.14 ( 0.74 ) 0.02 ( 0.02 )\n", + "52 1000 50 0.7 0.05 0.37 0.89 ( 0 ) 9.65 ( 0.77 ) 0 ( 0 ) \n", + "53 50 100 0.7 2.00 0.08 0.71 ( 0.01 ) 17.76 ( 1.65 ) 2.81 ( 0.14 )\n", + "54 100 100 0.7 1.00 0.13 0.79 ( 0.01 ) 16.43 ( 1.31 ) 1.79 ( 0.13 )\n", + "55 500 100 0.7 0.20 0.25 0.89 ( 0 ) 16.01 ( 0.82 ) 0.03 ( 0.03 )\n", + "56 1000 100 0.7 0.10 0.33 0.89 ( 0 ) 12.77 ( 0.94 ) 0 ( 0 ) \n", + "57 50 500 0.7 10.00 0.03 0.67 ( 0.01 ) 43.83 ( 5.17 ) 3.75 ( 0.12 )\n", + "58 100 500 0.7 5.00 0.10 0.74 ( 0.01 ) 19.1 ( 1.88 ) 3.08 ( 0.1 ) \n", + "59 500 500 0.7 1.00 0.15 0.87 ( 0 ) 31.23 ( 1.88 ) 0.17 ( 0.04 )\n", + "60 1000 500 0.7 0.50 0.22 0.89 ( 0 ) 22.46 ( 1.45 ) 0 ( 0 ) \n", + "61 50 1000 0.7 20.00 0.02 0.64 ( 0.01 ) 47.17 ( 5.85 ) 4.12 ( 0.09 )\n", + "62 100 1000 0.7 10.00 0.08 0.75 ( 0.01 ) 20.86 ( 2.56 ) 3.59 ( 0.09 )\n", + "63 500 1000 0.7 2.00 0.13 0.87 ( 0 ) 36.32 ( 2.18 ) 0.23 ( 0.05 )\n", + "64 1000 1000 0.7 1.00 0.16 0.89 ( 0 ) 32.22 ( 2.11 ) 0.01 ( 0.01 )\n", + "65 50 50 0.9 1.00 0.09 0.71 ( 0.01 ) 14.15 ( 1 ) 2.3 ( 0.14 ) \n", + "66 100 50 0.9 0.50 0.15 0.77 ( 0.01 ) 11.74 ( 0.88 ) 1.74 ( 0.13 )\n", + "67 500 50 0.9 0.10 0.27 0.83 ( 0 ) 12.28 ( 0.9 ) 0.18 ( 0.06 )\n", + "68 1000 50 0.9 0.05 0.39 0.84 ( 0 ) 9.58 ( 0.68 ) 0.01 ( 0.01 )\n", + "69 50 100 0.9 2.00 0.08 0.7 ( 0.01 ) 15.1 ( 1.65 ) 3.16 ( 0.13 )\n", + "70 100 100 0.9 1.00 0.15 0.75 ( 0.01 ) 14.19 ( 1.38 ) 2.23 ( 0.13 )\n", + "71 500 100 0.9 0.20 0.25 0.83 ( 0 ) 16.33 ( 1.01 ) 0.2 ( 0.06 ) \n", + "72 1000 100 0.9 0.10 0.32 0.84 ( 0 ) 13.82 ( 1.17 ) 0.03 ( 0.02 )\n", + "73 50 500 0.9 10.00 0.05 0.66 ( 0.02 ) 28.64 ( 3.14 ) 4.13 ( 0.07 )\n", + "74 100 500 0.9 5.00 0.07 0.7 ( 0.01 ) 25.71 ( 4.03 ) 3.42 ( 0.1 ) \n", + "75 500 500 0.9 1.00 0.14 0.81 ( 0 ) 25.68 ( 1.61 ) 1.07 ( 0.11 )\n", + "76 1000 500 0.9 0.50 0.21 0.83 ( 0 ) 23.49 ( 1.26 ) 0.15 ( 0.05 )\n", + "77 50 1000 0.9 20.00 0.02 0.65 ( 0.01 ) 49.08 ( 6.86 ) 4.29 ( 0.09 )\n", + "78 100 1000 0.9 10.00 0.05 0.66 ( 0.01 ) 32.99 ( 5.22 ) 3.81 ( 0.09 )\n", + "79 500 1000 0.9 2.00 0.11 0.8 ( 0 ) 30.91 ( 2.22 ) 1.52 ( 0.12 )\n", + "80 1000 1000 0.9 1.00 0.14 0.83 ( 0 ) 35.66 ( 1.98 ) 0.23 ( 0.06 )\n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "1 16.51 0.63 0.77 13.02 1.51 \n", + "2 15.15 0.57 0.85 10.71 0.56 \n", + "3 12.41 0.42 0.92 7.43 0.02 \n", + "4 12.82 0.4 0.92 7.82 0.00 \n", + "5 24.91 0.73 0.73 21.55 1.64 \n", + "6 19.75 0.62 0.83 15.59 0.84 \n", + "7 16.50 0.54 0.92 11.50 0.00 \n", + "8 16.02 0.49 0.92 11.02 0.00 \n", + "9 61.06 0.89 0.66 58.70 2.64 \n", + "10 22.53 0.68 0.78 19.29 1.76 \n", + "11 22.05 0.62 0.91 17.05 0.00 \n", + "12 20.14 0.54 0.93 15.14 0.00 \n", + "13 87.94 0.92 0.65 85.97 3.03 \n", + "14 24.95 0.75 0.76 22.02 2.07 \n", + "15 26.07 0.66 0.91 21.07 0.00 \n", + "16 24.56 0.57 0.92 19.56 0.00 \n", + "17 14.45 0.59 0.76 11.32 1.87 \n", + "18 17.21 0.61 0.83 12.96 0.75 \n", + "19 14.89 0.51 0.91 9.89 0.00 \n", + "20 13.56 0.44 0.92 8.56 0.00 \n", + "21 20.67 0.72 0.74 17.99 2.32 \n", + "22 18.00 0.6 0.82 14.36 1.36 \n", + "23 18.08 0.56 0.91 13.08 0.00 \n", + "24 14.67 0.49 0.92 9.67 0.00 \n", + "25 51.05 0.89 0.66 49.20 3.15 \n", + "26 26.79 0.73 0.77 23.84 2.05 \n", + "27 30.04 0.72 0.91 25.04 0.00 \n", + "28 23.51 0.66 0.92 18.51 0.00 \n", + "29 56.20 0.91 0.67 54.74 3.54 \n", + "30 30.97 0.75 0.75 28.55 2.58 \n", + "⋮ ⋮ ⋮ ⋮ ⋮ ⋮ \n", + "51 16.12 0.56 0.89 11.14 0.02 \n", + "52 14.65 0.49 0.89 9.65 0.00 \n", + "53 19.95 0.74 0.71 17.76 2.81 \n", + "54 19.64 0.68 0.79 16.43 1.79 \n", + "55 20.98 0.67 0.89 16.01 0.03 \n", + "56 17.77 0.58 0.89 12.77 0.00 \n", + "57 45.08 0.9 0.67 43.83 3.75 \n", + "58 21.02 0.73 0.74 19.10 3.08 \n", + "59 36.06 0.78 0.87 31.23 0.17 \n", + "60 27.46 0.71 0.89 22.46 0.00 \n", + "61 48.05 0.92 0.64 47.17 4.12 \n", + "62 22.27 0.77 0.75 20.86 3.59 \n", + "63 41.09 0.81 0.87 36.32 0.23 \n", + "64 37.21 0.8 0.89 32.22 0.01 \n", + "65 16.85 0.68 0.71 14.15 2.30 \n", + "66 15.00 0.64 0.77 11.74 1.74 \n", + "67 17.10 0.57 0.83 12.28 0.18 \n", + "68 14.57 0.51 0.84 9.58 0.01 \n", + "69 16.94 0.7 0.70 15.10 3.16 \n", + "70 16.96 0.64 0.75 14.19 2.23 \n", + "71 21.13 0.67 0.83 16.33 0.20 \n", + "72 18.79 0.6 0.84 13.82 0.03 \n", + "73 29.51 0.88 0.66 28.64 4.13 \n", + "74 27.29 0.78 0.70 25.71 3.42 \n", + "75 29.61 0.76 0.81 25.68 1.07 \n", + "76 28.34 0.75 0.83 23.49 0.15 \n", + "77 49.79 0.93 0.65 49.08 4.29 \n", + "78 34.18 0.8 0.66 32.99 3.81 \n", + "79 34.39 0.78 0.80 30.91 1.52 \n", + "80 40.43 0.82 0.83 35.66 0.23 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_toe\n", + "\n", + "## export\n", + "write.table(result.table_toe, '../results_summary_bin/sim_toe_Elnet_binary.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_bin/1.3_sim_toe_rf_binary_update.ipynb b/simulations/notebooks_sim_bin/1.3_sim_toe_rf_binary_update.ipynb new file mode 100644 index 0000000..a03a60e --- /dev/null +++ b/simulations/notebooks_sim_bin/1.3_sim_toe_rf_binary_update.ipynb @@ -0,0 +1,1067 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize random forests results on Toeplitz Simulation Scenarios for binary outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "rou.list = seq(0.1, 0.9, 0.2)\n", + "\n", + "files = NULL\n", + "for (rou in rou.list){\n", + " for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_toeplitz_corr', rou, paste('P', p, 'N', n, sep='_'), '.RData', sep=''))\n", + " }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "80" + ], + "text/latex": [ + "80" + ], + "text/markdown": [ + "80" + ], + "text/plain": [ + "[1] 80" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "length(files)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1] \"indx: 1\"\n", + "[1] \"indx: 2\"\n", + "[1] \"indx: 3\"\n", + "[1] \"indx: 4\"\n", + "[1] \"indx: 5\"\n", + "[1] \"indx: 6\"\n", + "[1] \"indx: 7\"\n", + "[1] \"indx: 8\"\n", + "[1] \"indx: 9\"\n", + "[1] \"indx: 10\"\n", + "[1] \"indx: 11\"\n", + "[1] \"indx: 12\"\n", + "[1] \"indx: 13\"\n", + "[1] \"indx: 14\"\n", + "[1] \"indx: 15\"\n", + "[1] \"indx: 16\"\n", + "[1] \"indx: 17\"\n", + "[1] \"indx: 18\"\n", + "[1] \"indx: 19\"\n", + "[1] \"indx: 20\"\n", + "[1] \"indx: 21\"\n", + "[1] \"indx: 22\"\n", + "[1] \"indx: 23\"\n", + "[1] \"indx: 24\"\n", + "[1] \"indx: 25\"\n", + "[1] \"indx: 26\"\n", + "[1] \"indx: 27\"\n", + "[1] \"indx: 28\"\n", + "[1] \"indx: 29\"\n", + "[1] \"indx: 30\"\n", + "[1] \"indx: 31\"\n", + "[1] \"indx: 32\"\n", + "[1] \"indx: 33\"\n", + "[1] \"indx: 34\"\n", + "[1] \"indx: 35\"\n", + "[1] \"indx: 36\"\n", + "[1] \"indx: 37\"\n", + "[1] \"indx: 38\"\n", + "[1] \"indx: 39\"\n", + "[1] \"indx: 40\"\n", + "[1] \"indx: 41\"\n", + "[1] \"indx: 42\"\n", + "[1] \"indx: 43\"\n", + "[1] \"indx: 44\"\n", + "[1] \"indx: 45\"\n", + "[1] \"indx: 46\"\n", + "[1] \"indx: 47\"\n", + "[1] \"indx: 48\"\n", + "[1] \"indx: 49\"\n", + "[1] \"indx: 50\"\n", + "[1] \"indx: 51\"\n", + "[1] \"indx: 52\"\n", + "[1] \"indx: 53\"\n", + "[1] \"indx: 54\"\n", + "[1] \"indx: 55\"\n", + "[1] \"indx: 56\"\n", + "[1] \"indx: 57\"\n", + "[1] \"indx: 58\"\n", + "[1] \"indx: 59\"\n", + "[1] \"indx: 60\"\n", + "[1] \"indx: 61\"\n", + "[1] \"indx: 62\"\n", + "[1] \"indx: 63\"\n", + "[1] \"indx: 64\"\n", + "[1] \"indx: 65\"\n", + "[1] \"indx: 66\"\n", + "[1] \"indx: 67\"\n", + "[1] \"indx: 68\"\n", + "[1] \"indx: 69\"\n", + "[1] \"indx: 70\"\n", + "[1] \"indx: 71\"\n", + "[1] \"indx: 72\"\n", + "[1] \"indx: 73\"\n", + "[1] \"indx: 74\"\n", + "[1] \"indx: 75\"\n", + "[1] \"indx: 76\"\n", + "[1] \"indx: 77\"\n", + "[1] \"indx: 78\"\n", + "[1] \"indx: 79\"\n", + "[1] \"indx: 80\"\n" + ] + } + ], + "source": [ + "avg_FDR = NULL\n", + "table_toe = NULL\n", + "tmp_num_select = rep(0, length(files))\n", + "for (i in 1:length(files)){\n", + " print(paste0('indx: ', i))\n", + " load(paste0(dir, '/binary_update/toe_RF_binary_', i, '.RData')) \n", + " \n", + " table_toe = rbind(table_toe, results_toe_rf[c('n', 'p', 'rou', 'FP', 'FN', 'ROC', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_toe_rf$Stab.table))\n", + " \n", + " # calculate FDR\n", + " load(file_name, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_toe_rf$Stab.table\n", + " FDR = NULL # false positive rate\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}\n", + "table_toe = as.data.frame(table_toe)\n", + "table_toe$num_select = tmp_num_select\n", + "table_toe$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
150500.11 ( 0 )6 ( 0 )1 ( 0 )NaN0.00 NaN
2100500.12.05 ( 0.14 )4.71 ( 0.08 )1 ( 0 )0.13.310.56
3500500.11.4 ( 0.12 )2.4 ( 0.08 )1 ( 0 )0.55.000.25
41000500.10.98 ( 0.09 )1.2 ( 0.08 )1 ( 0 )0.695.780.15
5501000.11 ( 0 )6 ( 0 )1 ( 0 )NaN0.00 NaN
61001000.13.95 ( 0.21 )4.66 ( 0.08 )1 ( 0 )0.065.290.72
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1 ( 0 ) & 6 ( 0 ) & 1 ( 0 ) & NaN & 0.00 & NaN\\\\\n", + "\t2 & 100 & 50 & 0.1 & 2.05 ( 0.14 ) & 4.71 ( 0.08 ) & 1 ( 0 ) & 0.1 & 3.31 & 0.56\\\\\n", + "\t3 & 500 & 50 & 0.1 & 1.4 ( 0.12 ) & 2.4 ( 0.08 ) & 1 ( 0 ) & 0.5 & 5.00 & 0.25\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 0.98 ( 0.09 ) & 1.2 ( 0.08 ) & 1 ( 0 ) & 0.69 & 5.78 & 0.15\\\\\n", + "\t5 & 50 & 100 & 0.1 & 1 ( 0 ) & 6 ( 0 ) & 1 ( 0 ) & NaN & 0.00 & NaN\\\\\n", + "\t6 & 100 & 100 & 0.1 & 3.95 ( 0.21 ) & 4.66 ( 0.08 ) & 1 ( 0 ) & 0.06 & 5.29 & 0.72\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1 ( 0 ) | 6 ( 0 ) | 1 ( 0 ) | NaN | 0.00 | NaN |\n", + "| 2 | 100 | 50 | 0.1 | 2.05 ( 0.14 ) | 4.71 ( 0.08 ) | 1 ( 0 ) | 0.1 | 3.31 | 0.56 |\n", + "| 3 | 500 | 50 | 0.1 | 1.4 ( 0.12 ) | 2.4 ( 0.08 ) | 1 ( 0 ) | 0.5 | 5.00 | 0.25 |\n", + "| 4 | 1000 | 50 | 0.1 | 0.98 ( 0.09 ) | 1.2 ( 0.08 ) | 1 ( 0 ) | 0.69 | 5.78 | 0.15 |\n", + "| 5 | 50 | 100 | 0.1 | 1 ( 0 ) | 6 ( 0 ) | 1 ( 0 ) | NaN | 0.00 | NaN |\n", + "| 6 | 100 | 100 | 0.1 | 3.95 ( 0.21 ) | 4.66 ( 0.08 ) | 1 ( 0 ) | 0.06 | 5.29 | 0.72 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select FDR \n", + "1 50 50 0.1 1 ( 0 ) 6 ( 0 ) 1 ( 0 ) NaN 0.00 NaN\n", + "2 100 50 0.1 2.05 ( 0.14 ) 4.71 ( 0.08 ) 1 ( 0 ) 0.1 3.31 0.56\n", + "3 500 50 0.1 1.4 ( 0.12 ) 2.4 ( 0.08 ) 1 ( 0 ) 0.5 5.00 0.25\n", + "4 1000 50 0.1 0.98 ( 0.09 ) 1.2 ( 0.08 ) 1 ( 0 ) 0.69 5.78 0.15\n", + "5 50 100 0.1 1 ( 0 ) 6 ( 0 ) 1 ( 0 ) NaN 0.00 NaN\n", + "6 100 100 0.1 3.95 ( 0.21 ) 4.66 ( 0.08 ) 1 ( 0 ) 0.06 5.29 0.72" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
755005000.924.91 ( 0.57 )3.53 ( 0.09 )1 ( 0 )0.0827.380.91
7610005000.924.53 ( 0.53 )2.84 ( 0.08 )1 ( 0 )0.1327.690.88
775010000.91 ( 0 )6 ( 0 )1 ( 0 )NaN 0.00 NaN
7810010000.947.19 ( 0.96 )5.2 ( 0.08 )1 ( 0 )047.990.98
7950010000.948.11 ( 0.92 )3.78 ( 0.08 )1 ( 0 )0.0450.330.95
80100010000.949.47 ( 0.78 )2.97 ( 0.07 )1 ( 0 )0.0752.500.94
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 24.91 ( 0.57 ) & 3.53 ( 0.09 ) & 1 ( 0 ) & 0.08 & 27.38 & 0.91\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 24.53 ( 0.53 ) & 2.84 ( 0.08 ) & 1 ( 0 ) & 0.13 & 27.69 & 0.88\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 1 ( 0 ) & 6 ( 0 ) & 1 ( 0 ) & NaN & 0.00 & NaN\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 47.19 ( 0.96 ) & 5.2 ( 0.08 ) & 1 ( 0 ) & 0 & 47.99 & 0.98\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 48.11 ( 0.92 ) & 3.78 ( 0.08 ) & 1 ( 0 ) & 0.04 & 50.33 & 0.95\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 49.47 ( 0.78 ) & 2.97 ( 0.07 ) & 1 ( 0 ) & 0.07 & 52.50 & 0.94\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 24.91 ( 0.57 ) | 3.53 ( 0.09 ) | 1 ( 0 ) | 0.08 | 27.38 | 0.91 |\n", + "| 76 | 1000 | 500 | 0.9 | 24.53 ( 0.53 ) | 2.84 ( 0.08 ) | 1 ( 0 ) | 0.13 | 27.69 | 0.88 |\n", + "| 77 | 50 | 1000 | 0.9 | 1 ( 0 ) | 6 ( 0 ) | 1 ( 0 ) | NaN | 0.00 | NaN |\n", + "| 78 | 100 | 1000 | 0.9 | 47.19 ( 0.96 ) | 5.2 ( 0.08 ) | 1 ( 0 ) | 0 | 47.99 | 0.98 |\n", + "| 79 | 500 | 1000 | 0.9 | 48.11 ( 0.92 ) | 3.78 ( 0.08 ) | 1 ( 0 ) | 0.04 | 50.33 | 0.95 |\n", + "| 80 | 1000 | 1000 | 0.9 | 49.47 ( 0.78 ) | 2.97 ( 0.07 ) | 1 ( 0 ) | 0.07 | 52.50 | 0.94 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select FDR \n", + "75 500 500 0.9 24.91 ( 0.57 ) 3.53 ( 0.09 ) 1 ( 0 ) 0.08 27.38 0.91\n", + "76 1000 500 0.9 24.53 ( 0.53 ) 2.84 ( 0.08 ) 1 ( 0 ) 0.13 27.69 0.88\n", + "77 50 1000 0.9 1 ( 0 ) 6 ( 0 ) 1 ( 0 ) NaN 0.00 NaN\n", + "78 100 1000 0.9 47.19 ( 0.96 ) 5.2 ( 0.08 ) 1 ( 0 ) 0 47.99 0.98\n", + "79 500 1000 0.9 48.11 ( 0.92 ) 3.78 ( 0.08 ) 1 ( 0 ) 0.04 50.33 0.95\n", + "80 1000 1000 0.9 49.47 ( 0.78 ) 2.97 ( 0.07 ) 1 ( 0 ) 0.07 52.50 0.94" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_toe <- apply(table_toe,2,as.character)\n", + "rownames(result.table_toe) = rownames(table_toe)\n", + "result.table_toe = as.data.frame(result.table_toe)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_toe$n = tidyr::extract_numeric(result.table_toe$n)\n", + "result.table_toe$p = tidyr::extract_numeric(result.table_toe$p)\n", + "result.table_toe$ratio = result.table_toe$p / result.table_toe$n\n", + "\n", + "result.table_toe = result.table_toe[c('n', 'p', 'rou', 'ratio', 'Stab', 'ROC', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_toe)[1:4] = c('N', 'P', 'Corr', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_toe$Stab = as.numeric(as.character(result.table_toe$Stab))\n", + "result.table_toe$num_select = as.numeric(as.character(result.table_toe$num_select))\n", + "\n", + "result.table_toe$ROC_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$ROC))\n", + "result.table_toe$FP_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$FP))\n", + "result.table_toe$FN_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$FN))" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 20 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
150 500.1 1NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
550 1000.1 2NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
950 5000.110NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
135010000.120NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
1750 500.3 1NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
2150 1000.3 2NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
2550 5000.310NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
295010000.320NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
3350 500.5 1NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
3750 1000.5 2NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
4150 5000.510NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
455010000.520NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
4950 500.7 1NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
5350 1000.7 2NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
5750 5000.710NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
615010000.720NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
6550 500.9 1NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
6950 1000.9 2NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
7350 5000.910NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
775010000.920NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
\n" + ], + "text/latex": [ + "A data.frame: 20 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t5 & 50 & 100 & 0.1 & 2 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t9 & 50 & 500 & 0.1 & 10 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t13 & 50 & 1000 & 0.1 & 20 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t17 & 50 & 50 & 0.3 & 1 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t21 & 50 & 100 & 0.3 & 2 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t25 & 50 & 500 & 0.3 & 10 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t29 & 50 & 1000 & 0.3 & 20 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t33 & 50 & 50 & 0.5 & 1 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t37 & 50 & 100 & 0.5 & 2 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t41 & 50 & 500 & 0.5 & 10 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t45 & 50 & 1000 & 0.5 & 20 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t49 & 50 & 50 & 0.7 & 1 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t53 & 50 & 100 & 0.7 & 2 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t57 & 50 & 500 & 0.7 & 10 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t61 & 50 & 1000 & 0.7 & 20 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t65 & 50 & 50 & 0.9 & 1 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t69 & 50 & 100 & 0.9 & 2 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t73 & 50 & 500 & 0.9 & 10 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 20 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 5 | 50 | 100 | 0.1 | 2 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 9 | 50 | 500 | 0.1 | 10 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 13 | 50 | 1000 | 0.1 | 20 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 17 | 50 | 50 | 0.3 | 1 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 21 | 50 | 100 | 0.3 | 2 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 25 | 50 | 500 | 0.3 | 10 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 29 | 50 | 1000 | 0.3 | 20 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 33 | 50 | 50 | 0.5 | 1 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 37 | 50 | 100 | 0.5 | 2 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 41 | 50 | 500 | 0.5 | 10 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 45 | 50 | 1000 | 0.5 | 20 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 49 | 50 | 50 | 0.7 | 1 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 53 | 50 | 100 | 0.7 | 2 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 57 | 50 | 500 | 0.7 | 10 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 61 | 50 | 1000 | 0.7 | 20 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 65 | 50 | 50 | 0.9 | 1 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 69 | 50 | 100 | 0.9 | 2 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 73 | 50 | 500 | 0.9 | 10 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 77 | 50 | 1000 | 0.9 | 20 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select FDR ROC_mean\n", + "1 50 50 0.1 1 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "5 50 100 0.1 2 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "9 50 500 0.1 10 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "13 50 1000 0.1 20 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "17 50 50 0.3 1 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "21 50 100 0.3 2 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "25 50 500 0.3 10 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "29 50 1000 0.3 20 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "33 50 50 0.5 1 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "37 50 100 0.5 2 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "41 50 500 0.5 10 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "45 50 1000 0.5 20 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "49 50 50 0.7 1 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "53 50 100 0.7 2 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "57 50 500 0.7 10 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "61 50 1000 0.7 20 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "65 50 50 0.9 1 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "69 50 100 0.9 2 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "73 50 500 0.9 10 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "77 50 1000 0.9 20 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + " FP_mean FN_mean\n", + "1 1 6 \n", + "5 1 6 \n", + "9 1 6 \n", + "13 1 6 \n", + "17 1 6 \n", + "21 1 6 \n", + "25 1 6 \n", + "29 1 6 \n", + "33 1 6 \n", + "37 1 6 \n", + "41 1 6 \n", + "45 1 6 \n", + "49 1 6 \n", + "53 1 6 \n", + "57 1 6 \n", + "61 1 6 \n", + "65 1 6 \n", + "69 1 6 \n", + "73 1 6 \n", + "77 1 6 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check whether missing values exists\n", + "result.table_toe[rowSums(is.na(result.table_toe)) > 0,]" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 500.11.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 11.006.00
2 100 500.10.500.101 ( 0 )2.05 ( 0.14 )4.71 ( 0.08 )3.310.5612.054.71
3 500 500.10.100.501 ( 0 )1.4 ( 0.12 ) 2.4 ( 0.08 ) 5.000.2511.402.40
41000 500.10.050.691 ( 0 )0.98 ( 0.09 )1.2 ( 0.08 ) 5.780.1510.981.20
5 501000.12.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 11.006.00
6 1001000.11.000.061 ( 0 )3.95 ( 0.21 )4.66 ( 0.08 )5.290.7213.954.66
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t2 & 100 & 50 & 0.1 & 0.50 & 0.10 & 1 ( 0 ) & 2.05 ( 0.14 ) & 4.71 ( 0.08 ) & 3.31 & 0.56 & 1 & 2.05 & 4.71\\\\\n", + "\t3 & 500 & 50 & 0.1 & 0.10 & 0.50 & 1 ( 0 ) & 1.4 ( 0.12 ) & 2.4 ( 0.08 ) & 5.00 & 0.25 & 1 & 1.40 & 2.40\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 0.05 & 0.69 & 1 ( 0 ) & 0.98 ( 0.09 ) & 1.2 ( 0.08 ) & 5.78 & 0.15 & 1 & 0.98 & 1.20\\\\\n", + "\t5 & 50 & 100 & 0.1 & 2.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t6 & 100 & 100 & 0.1 & 1.00 & 0.06 & 1 ( 0 ) & 3.95 ( 0.21 ) & 4.66 ( 0.08 ) & 5.29 & 0.72 & 1 & 3.95 & 4.66\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 2 | 100 | 50 | 0.1 | 0.50 | 0.10 | 1 ( 0 ) | 2.05 ( 0.14 ) | 4.71 ( 0.08 ) | 3.31 | 0.56 | 1 | 2.05 | 4.71 |\n", + "| 3 | 500 | 50 | 0.1 | 0.10 | 0.50 | 1 ( 0 ) | 1.4 ( 0.12 ) | 2.4 ( 0.08 ) | 5.00 | 0.25 | 1 | 1.40 | 2.40 |\n", + "| 4 | 1000 | 50 | 0.1 | 0.05 | 0.69 | 1 ( 0 ) | 0.98 ( 0.09 ) | 1.2 ( 0.08 ) | 5.78 | 0.15 | 1 | 0.98 | 1.20 |\n", + "| 5 | 50 | 100 | 0.1 | 2.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 6 | 100 | 100 | 0.1 | 1.00 | 0.06 | 1 ( 0 ) | 3.95 ( 0.21 ) | 4.66 ( 0.08 ) | 5.29 | 0.72 | 1 | 3.95 | 4.66 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select FDR \n", + "1 50 50 0.1 1.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 NaN \n", + "2 100 50 0.1 0.50 0.10 1 ( 0 ) 2.05 ( 0.14 ) 4.71 ( 0.08 ) 3.31 0.56\n", + "3 500 50 0.1 0.10 0.50 1 ( 0 ) 1.4 ( 0.12 ) 2.4 ( 0.08 ) 5.00 0.25\n", + "4 1000 50 0.1 0.05 0.69 1 ( 0 ) 0.98 ( 0.09 ) 1.2 ( 0.08 ) 5.78 0.15\n", + "5 50 100 0.1 2.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 NaN \n", + "6 100 100 0.1 1.00 0.06 1 ( 0 ) 3.95 ( 0.21 ) 4.66 ( 0.08 ) 5.29 0.72\n", + " ROC_mean FP_mean FN_mean\n", + "1 1 1.00 6.00 \n", + "2 1 2.05 4.71 \n", + "3 1 1.40 2.40 \n", + "4 1 0.98 1.20 \n", + "5 1 1.00 6.00 \n", + "6 1 3.95 4.66 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
75 500 5000.9 1.00.081 ( 0 )24.91 ( 0.57 )3.53 ( 0.09 )27.380.91124.913.53
761000 5000.9 0.50.131 ( 0 )24.53 ( 0.53 )2.84 ( 0.08 )27.690.88124.532.84
77 5010000.920.0 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
78 10010000.910.00.001 ( 0 )47.19 ( 0.96 )5.2 ( 0.08 ) 47.990.98147.195.20
79 50010000.9 2.00.041 ( 0 )48.11 ( 0.92 )3.78 ( 0.08 )50.330.95148.113.78
80100010000.9 1.00.071 ( 0 )49.47 ( 0.78 )2.97 ( 0.07 )52.500.94149.472.97
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 1.0 & 0.08 & 1 ( 0 ) & 24.91 ( 0.57 ) & 3.53 ( 0.09 ) & 27.38 & 0.91 & 1 & 24.91 & 3.53\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.5 & 0.13 & 1 ( 0 ) & 24.53 ( 0.53 ) & 2.84 ( 0.08 ) & 27.69 & 0.88 & 1 & 24.53 & 2.84\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.0 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.0 & 0.00 & 1 ( 0 ) & 47.19 ( 0.96 ) & 5.2 ( 0.08 ) & 47.99 & 0.98 & 1 & 47.19 & 5.20\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.0 & 0.04 & 1 ( 0 ) & 48.11 ( 0.92 ) & 3.78 ( 0.08 ) & 50.33 & 0.95 & 1 & 48.11 & 3.78\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.0 & 0.07 & 1 ( 0 ) & 49.47 ( 0.78 ) & 2.97 ( 0.07 ) & 52.50 & 0.94 & 1 & 49.47 & 2.97\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 1.0 | 0.08 | 1 ( 0 ) | 24.91 ( 0.57 ) | 3.53 ( 0.09 ) | 27.38 | 0.91 | 1 | 24.91 | 3.53 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.5 | 0.13 | 1 ( 0 ) | 24.53 ( 0.53 ) | 2.84 ( 0.08 ) | 27.69 | 0.88 | 1 | 24.53 | 2.84 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.0 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.0 | 0.00 | 1 ( 0 ) | 47.19 ( 0.96 ) | 5.2 ( 0.08 ) | 47.99 | 0.98 | 1 | 47.19 | 5.20 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.0 | 0.04 | 1 ( 0 ) | 48.11 ( 0.92 ) | 3.78 ( 0.08 ) | 50.33 | 0.95 | 1 | 48.11 | 3.78 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.0 | 0.07 | 1 ( 0 ) | 49.47 ( 0.78 ) | 2.97 ( 0.07 ) | 52.50 | 0.94 | 1 | 49.47 | 2.97 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select\n", + "75 500 500 0.9 1.0 0.08 1 ( 0 ) 24.91 ( 0.57 ) 3.53 ( 0.09 ) 27.38 \n", + "76 1000 500 0.9 0.5 0.13 1 ( 0 ) 24.53 ( 0.53 ) 2.84 ( 0.08 ) 27.69 \n", + "77 50 1000 0.9 20.0 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "78 100 1000 0.9 10.0 0.00 1 ( 0 ) 47.19 ( 0.96 ) 5.2 ( 0.08 ) 47.99 \n", + "79 500 1000 0.9 2.0 0.04 1 ( 0 ) 48.11 ( 0.92 ) 3.78 ( 0.08 ) 50.33 \n", + "80 1000 1000 0.9 1.0 0.07 1 ( 0 ) 49.47 ( 0.78 ) 2.97 ( 0.07 ) 52.50 \n", + " FDR ROC_mean FP_mean FN_mean\n", + "75 0.91 1 24.91 3.53 \n", + "76 0.88 1 24.53 2.84 \n", + "77 NaN 1 1.00 6.00 \n", + "78 0.98 1 47.19 5.20 \n", + "79 0.95 1 48.11 3.78 \n", + "80 0.94 1 49.47 2.97 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 80 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 500.1 1.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
2 100 500.1 0.500.101 ( 0 )2.05 ( 0.14 ) 4.71 ( 0.08 ) 3.310.561 2.054.71
3 500 500.1 0.100.501 ( 0 )1.4 ( 0.12 ) 2.4 ( 0.08 ) 5.000.251 1.402.40
41000 500.1 0.050.691 ( 0 )0.98 ( 0.09 ) 1.2 ( 0.08 ) 5.780.151 0.981.20
5 50 1000.1 2.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
6 100 1000.1 1.000.061 ( 0 )3.95 ( 0.21 ) 4.66 ( 0.08 ) 5.290.721 3.954.66
7 500 1000.1 0.200.351 ( 0 )3.91 ( 0.21 ) 2.17 ( 0.08 ) 7.740.481 3.912.17
81000 1000.1 0.100.511 ( 0 )2.97 ( 0.15 ) 1.29 ( 0.07 ) 7.680.361 2.971.29
9 50 5000.110.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
10 100 5000.1 5.000.011 ( 0 )24.57 ( 0.55 )4.72 ( 0.08 )25.850.95124.574.72
11 500 5000.1 1.000.091 ( 0 )23.57 ( 0.51 )2.43 ( 0.1 ) 27.140.86123.572.43
121000 5000.1 0.500.141 ( 0 )22.61 ( 0.5 ) 1.31 ( 0.08 )27.300.82122.611.31
13 5010000.120.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
14 10010000.110.000.011 ( 0 )48.35 ( 0.66 )4.88 ( 0.08 )49.470.98148.354.88
15 50010000.1 2.000.041 ( 0 )48.59 ( 0.73 )2.71 ( 0.1 ) 51.880.94148.592.71
16100010000.1 1.000.061 ( 0 )46.74 ( 0.64 )1.75 ( 0.09 )50.990.92146.741.75
17 50 500.3 1.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
18 100 500.3 0.500.101 ( 0 )1.68 ( 0.12 ) 4.86 ( 0.08 ) 2.810.541 1.684.86
19 500 500.3 0.100.441 ( 0 )1.57 ( 0.12 ) 2.74 ( 0.08 ) 4.830.3 1 1.572.74
201000 500.3 0.050.621 ( 0 )1.33 ( 0.1 ) 1.44 ( 0.08 ) 5.890.211 1.331.44
21 50 1000.3 2.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
22 100 1000.3 1.000.051 ( 0 )4.45 ( 0.2 ) 4.85 ( 0.08 ) 5.600.781 4.454.85
23 500 1000.3 0.200.331 ( 0 )3.36 ( 0.19 ) 2.57 ( 0.09 ) 6.790.461 3.362.57
241000 1000.3 0.100.471 ( 0 )3.43 ( 0.17 ) 1.61 ( 0.09 ) 7.820.411 3.431.61
25 50 5000.310.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
26 100 5000.3 5.000.011 ( 0 )23.69 ( 0.53 )4.87 ( 0.08 )24.820.95123.694.87
27 500 5000.3 1.000.071 ( 0 )22.84 ( 0.44 )3.11 ( 0.09 )25.730.89122.843.11
281000 5000.3 0.500.131 ( 0 )22.24 ( 0.43 )1.77 ( 0.09 )26.470.84122.241.77
29 5010000.320.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
30 10010000.310.000.011 ( 0 )48.06 ( 0.76 )5.02 ( 0.08 )49.040.98148.065.02
51 500 500.7 0.100.451 ( 0 )2.14 ( 0.13 ) 3.36 ( 0.08 ) 4.780.431 2.143.36
521000 500.7 0.050.601 ( 0 )2.66 ( 0.14 ) 2.27 ( 0.08 ) 6.390.391 2.662.27
53 50 1000.7 2.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
54 100 1000.7 1.000.081 ( 0 )4.36 ( 0.22 ) 4.8 ( 0.09 ) 5.560.771 4.364.80
55 500 1000.7 0.200.381 ( 0 )4.03 ( 0.18 ) 3.1 ( 0.09 ) 6.930.561 4.033.10
561000 1000.7 0.100.501 ( 0 )4.65 ( 0.22 ) 2 ( 0.07 ) 8.650.511 4.652.00
57 50 5000.710.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
58 100 5000.7 5.000.021 ( 0 )23.58 ( 0.53 )4.72 ( 0.09 )24.860.95123.584.72
59 500 5000.7 1.000.101 ( 0 )23.09 ( 0.56 )3.38 ( 0.09 )25.710.89123.093.38
601000 5000.7 0.500.141 ( 0 )23.33 ( 0.53 )2.58 ( 0.07 )26.750.87123.332.58
61 5010000.720.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
62 10010000.710.000.011 ( 0 )46.8 ( 0.69 ) 5.13 ( 0.07 )47.670.98146.805.13
63 50010000.7 2.000.051 ( 0 )48.68 ( 0.77 )3.54 ( 0.08 )51.140.95148.683.54
64100010000.7 1.000.071 ( 0 )47.14 ( 0.7 ) 2.73 ( 0.07 )50.410.93147.142.73
65 50 500.9 1.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
66 100 500.9 0.500.121 ( 0 )2.09 ( 0.16 ) 4.98 ( 0.09 ) 3.060.621 2.094.98
67 500 500.9 0.100.451 ( 0 )2.6 ( 0.13 ) 3.33 ( 0.08 ) 5.270.471 2.603.33
681000 500.9 0.050.511 ( 0 )3.48 ( 0.17 ) 2.35 ( 0.08 ) 7.130.471 3.482.35
69 50 1000.9 2.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
70 100 1000.9 1.000.071 ( 0 )4.4 ( 0.23 ) 4.96 ( 0.09 ) 5.430.811 4.404.96
71 500 1000.9 0.200.351 ( 0 )4.57 ( 0.24 ) 3.5 ( 0.08 ) 7.070.621 4.573.50
721000 1000.9 0.100.371 ( 0 )6.43 ( 0.28 ) 2.57 ( 0.08 ) 9.860.631 6.432.57
73 50 5000.910.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
74 100 5000.9 5.000.011 ( 0 )24.58 ( 0.66 )5.1 ( 0.09 ) 25.480.96124.585.10
75 500 5000.9 1.000.081 ( 0 )24.91 ( 0.57 )3.53 ( 0.09 )27.380.91124.913.53
761000 5000.9 0.500.131 ( 0 )24.53 ( 0.53 )2.84 ( 0.08 )27.690.88124.532.84
77 5010000.920.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
78 10010000.910.000.001 ( 0 )47.19 ( 0.96 )5.2 ( 0.08 ) 47.990.98147.195.20
79 50010000.9 2.000.041 ( 0 )48.11 ( 0.92 )3.78 ( 0.08 )50.330.95148.113.78
80100010000.9 1.000.071 ( 0 )49.47 ( 0.78 )2.97 ( 0.07 )52.500.94149.472.97
\n" + ], + "text/latex": [ + "A data.frame: 80 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t2 & 100 & 50 & 0.1 & 0.50 & 0.10 & 1 ( 0 ) & 2.05 ( 0.14 ) & 4.71 ( 0.08 ) & 3.31 & 0.56 & 1 & 2.05 & 4.71\\\\\n", + "\t3 & 500 & 50 & 0.1 & 0.10 & 0.50 & 1 ( 0 ) & 1.4 ( 0.12 ) & 2.4 ( 0.08 ) & 5.00 & 0.25 & 1 & 1.40 & 2.40\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 0.05 & 0.69 & 1 ( 0 ) & 0.98 ( 0.09 ) & 1.2 ( 0.08 ) & 5.78 & 0.15 & 1 & 0.98 & 1.20\\\\\n", + "\t5 & 50 & 100 & 0.1 & 2.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t6 & 100 & 100 & 0.1 & 1.00 & 0.06 & 1 ( 0 ) & 3.95 ( 0.21 ) & 4.66 ( 0.08 ) & 5.29 & 0.72 & 1 & 3.95 & 4.66\\\\\n", + "\t7 & 500 & 100 & 0.1 & 0.20 & 0.35 & 1 ( 0 ) & 3.91 ( 0.21 ) & 2.17 ( 0.08 ) & 7.74 & 0.48 & 1 & 3.91 & 2.17\\\\\n", + "\t8 & 1000 & 100 & 0.1 & 0.10 & 0.51 & 1 ( 0 ) & 2.97 ( 0.15 ) & 1.29 ( 0.07 ) & 7.68 & 0.36 & 1 & 2.97 & 1.29\\\\\n", + "\t9 & 50 & 500 & 0.1 & 10.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t10 & 100 & 500 & 0.1 & 5.00 & 0.01 & 1 ( 0 ) & 24.57 ( 0.55 ) & 4.72 ( 0.08 ) & 25.85 & 0.95 & 1 & 24.57 & 4.72\\\\\n", + "\t11 & 500 & 500 & 0.1 & 1.00 & 0.09 & 1 ( 0 ) & 23.57 ( 0.51 ) & 2.43 ( 0.1 ) & 27.14 & 0.86 & 1 & 23.57 & 2.43\\\\\n", + "\t12 & 1000 & 500 & 0.1 & 0.50 & 0.14 & 1 ( 0 ) & 22.61 ( 0.5 ) & 1.31 ( 0.08 ) & 27.30 & 0.82 & 1 & 22.61 & 1.31\\\\\n", + "\t13 & 50 & 1000 & 0.1 & 20.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t14 & 100 & 1000 & 0.1 & 10.00 & 0.01 & 1 ( 0 ) & 48.35 ( 0.66 ) & 4.88 ( 0.08 ) & 49.47 & 0.98 & 1 & 48.35 & 4.88\\\\\n", + "\t15 & 500 & 1000 & 0.1 & 2.00 & 0.04 & 1 ( 0 ) & 48.59 ( 0.73 ) & 2.71 ( 0.1 ) & 51.88 & 0.94 & 1 & 48.59 & 2.71\\\\\n", + "\t16 & 1000 & 1000 & 0.1 & 1.00 & 0.06 & 1 ( 0 ) & 46.74 ( 0.64 ) & 1.75 ( 0.09 ) & 50.99 & 0.92 & 1 & 46.74 & 1.75\\\\\n", + "\t17 & 50 & 50 & 0.3 & 1.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t18 & 100 & 50 & 0.3 & 0.50 & 0.10 & 1 ( 0 ) & 1.68 ( 0.12 ) & 4.86 ( 0.08 ) & 2.81 & 0.54 & 1 & 1.68 & 4.86\\\\\n", + "\t19 & 500 & 50 & 0.3 & 0.10 & 0.44 & 1 ( 0 ) & 1.57 ( 0.12 ) & 2.74 ( 0.08 ) & 4.83 & 0.3 & 1 & 1.57 & 2.74\\\\\n", + "\t20 & 1000 & 50 & 0.3 & 0.05 & 0.62 & 1 ( 0 ) & 1.33 ( 0.1 ) & 1.44 ( 0.08 ) & 5.89 & 0.21 & 1 & 1.33 & 1.44\\\\\n", + "\t21 & 50 & 100 & 0.3 & 2.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t22 & 100 & 100 & 0.3 & 1.00 & 0.05 & 1 ( 0 ) & 4.45 ( 0.2 ) & 4.85 ( 0.08 ) & 5.60 & 0.78 & 1 & 4.45 & 4.85\\\\\n", + "\t23 & 500 & 100 & 0.3 & 0.20 & 0.33 & 1 ( 0 ) & 3.36 ( 0.19 ) & 2.57 ( 0.09 ) & 6.79 & 0.46 & 1 & 3.36 & 2.57\\\\\n", + "\t24 & 1000 & 100 & 0.3 & 0.10 & 0.47 & 1 ( 0 ) & 3.43 ( 0.17 ) & 1.61 ( 0.09 ) & 7.82 & 0.41 & 1 & 3.43 & 1.61\\\\\n", + "\t25 & 50 & 500 & 0.3 & 10.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t26 & 100 & 500 & 0.3 & 5.00 & 0.01 & 1 ( 0 ) & 23.69 ( 0.53 ) & 4.87 ( 0.08 ) & 24.82 & 0.95 & 1 & 23.69 & 4.87\\\\\n", + "\t27 & 500 & 500 & 0.3 & 1.00 & 0.07 & 1 ( 0 ) & 22.84 ( 0.44 ) & 3.11 ( 0.09 ) & 25.73 & 0.89 & 1 & 22.84 & 3.11\\\\\n", + "\t28 & 1000 & 500 & 0.3 & 0.50 & 0.13 & 1 ( 0 ) & 22.24 ( 0.43 ) & 1.77 ( 0.09 ) & 26.47 & 0.84 & 1 & 22.24 & 1.77\\\\\n", + "\t29 & 50 & 1000 & 0.3 & 20.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t30 & 100 & 1000 & 0.3 & 10.00 & 0.01 & 1 ( 0 ) & 48.06 ( 0.76 ) & 5.02 ( 0.08 ) & 49.04 & 0.98 & 1 & 48.06 & 5.02\\\\\n", + "\t⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮\\\\\n", + "\t51 & 500 & 50 & 0.7 & 0.10 & 0.45 & 1 ( 0 ) & 2.14 ( 0.13 ) & 3.36 ( 0.08 ) & 4.78 & 0.43 & 1 & 2.14 & 3.36\\\\\n", + "\t52 & 1000 & 50 & 0.7 & 0.05 & 0.60 & 1 ( 0 ) & 2.66 ( 0.14 ) & 2.27 ( 0.08 ) & 6.39 & 0.39 & 1 & 2.66 & 2.27\\\\\n", + "\t53 & 50 & 100 & 0.7 & 2.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t54 & 100 & 100 & 0.7 & 1.00 & 0.08 & 1 ( 0 ) & 4.36 ( 0.22 ) & 4.8 ( 0.09 ) & 5.56 & 0.77 & 1 & 4.36 & 4.80\\\\\n", + "\t55 & 500 & 100 & 0.7 & 0.20 & 0.38 & 1 ( 0 ) & 4.03 ( 0.18 ) & 3.1 ( 0.09 ) & 6.93 & 0.56 & 1 & 4.03 & 3.10\\\\\n", + "\t56 & 1000 & 100 & 0.7 & 0.10 & 0.50 & 1 ( 0 ) & 4.65 ( 0.22 ) & 2 ( 0.07 ) & 8.65 & 0.51 & 1 & 4.65 & 2.00\\\\\n", + "\t57 & 50 & 500 & 0.7 & 10.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t58 & 100 & 500 & 0.7 & 5.00 & 0.02 & 1 ( 0 ) & 23.58 ( 0.53 ) & 4.72 ( 0.09 ) & 24.86 & 0.95 & 1 & 23.58 & 4.72\\\\\n", + "\t59 & 500 & 500 & 0.7 & 1.00 & 0.10 & 1 ( 0 ) & 23.09 ( 0.56 ) & 3.38 ( 0.09 ) & 25.71 & 0.89 & 1 & 23.09 & 3.38\\\\\n", + "\t60 & 1000 & 500 & 0.7 & 0.50 & 0.14 & 1 ( 0 ) & 23.33 ( 0.53 ) & 2.58 ( 0.07 ) & 26.75 & 0.87 & 1 & 23.33 & 2.58\\\\\n", + "\t61 & 50 & 1000 & 0.7 & 20.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t62 & 100 & 1000 & 0.7 & 10.00 & 0.01 & 1 ( 0 ) & 46.8 ( 0.69 ) & 5.13 ( 0.07 ) & 47.67 & 0.98 & 1 & 46.80 & 5.13\\\\\n", + "\t63 & 500 & 1000 & 0.7 & 2.00 & 0.05 & 1 ( 0 ) & 48.68 ( 0.77 ) & 3.54 ( 0.08 ) & 51.14 & 0.95 & 1 & 48.68 & 3.54\\\\\n", + "\t64 & 1000 & 1000 & 0.7 & 1.00 & 0.07 & 1 ( 0 ) & 47.14 ( 0.7 ) & 2.73 ( 0.07 ) & 50.41 & 0.93 & 1 & 47.14 & 2.73\\\\\n", + "\t65 & 50 & 50 & 0.9 & 1.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t66 & 100 & 50 & 0.9 & 0.50 & 0.12 & 1 ( 0 ) & 2.09 ( 0.16 ) & 4.98 ( 0.09 ) & 3.06 & 0.62 & 1 & 2.09 & 4.98\\\\\n", + "\t67 & 500 & 50 & 0.9 & 0.10 & 0.45 & 1 ( 0 ) & 2.6 ( 0.13 ) & 3.33 ( 0.08 ) & 5.27 & 0.47 & 1 & 2.60 & 3.33\\\\\n", + "\t68 & 1000 & 50 & 0.9 & 0.05 & 0.51 & 1 ( 0 ) & 3.48 ( 0.17 ) & 2.35 ( 0.08 ) & 7.13 & 0.47 & 1 & 3.48 & 2.35\\\\\n", + "\t69 & 50 & 100 & 0.9 & 2.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t70 & 100 & 100 & 0.9 & 1.00 & 0.07 & 1 ( 0 ) & 4.4 ( 0.23 ) & 4.96 ( 0.09 ) & 5.43 & 0.81 & 1 & 4.40 & 4.96\\\\\n", + "\t71 & 500 & 100 & 0.9 & 0.20 & 0.35 & 1 ( 0 ) & 4.57 ( 0.24 ) & 3.5 ( 0.08 ) & 7.07 & 0.62 & 1 & 4.57 & 3.50\\\\\n", + "\t72 & 1000 & 100 & 0.9 & 0.10 & 0.37 & 1 ( 0 ) & 6.43 ( 0.28 ) & 2.57 ( 0.08 ) & 9.86 & 0.63 & 1 & 6.43 & 2.57\\\\\n", + "\t73 & 50 & 500 & 0.9 & 10.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t74 & 100 & 500 & 0.9 & 5.00 & 0.01 & 1 ( 0 ) & 24.58 ( 0.66 ) & 5.1 ( 0.09 ) & 25.48 & 0.96 & 1 & 24.58 & 5.10\\\\\n", + "\t75 & 500 & 500 & 0.9 & 1.00 & 0.08 & 1 ( 0 ) & 24.91 ( 0.57 ) & 3.53 ( 0.09 ) & 27.38 & 0.91 & 1 & 24.91 & 3.53\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.50 & 0.13 & 1 ( 0 ) & 24.53 ( 0.53 ) & 2.84 ( 0.08 ) & 27.69 & 0.88 & 1 & 24.53 & 2.84\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.00 & 0.00 & 1 ( 0 ) & 47.19 ( 0.96 ) & 5.2 ( 0.08 ) & 47.99 & 0.98 & 1 & 47.19 & 5.20\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.00 & 0.04 & 1 ( 0 ) & 48.11 ( 0.92 ) & 3.78 ( 0.08 ) & 50.33 & 0.95 & 1 & 48.11 & 3.78\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.00 & 0.07 & 1 ( 0 ) & 49.47 ( 0.78 ) & 2.97 ( 0.07 ) & 52.50 & 0.94 & 1 & 49.47 & 2.97\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 80 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 2 | 100 | 50 | 0.1 | 0.50 | 0.10 | 1 ( 0 ) | 2.05 ( 0.14 ) | 4.71 ( 0.08 ) | 3.31 | 0.56 | 1 | 2.05 | 4.71 |\n", + "| 3 | 500 | 50 | 0.1 | 0.10 | 0.50 | 1 ( 0 ) | 1.4 ( 0.12 ) | 2.4 ( 0.08 ) | 5.00 | 0.25 | 1 | 1.40 | 2.40 |\n", + "| 4 | 1000 | 50 | 0.1 | 0.05 | 0.69 | 1 ( 0 ) | 0.98 ( 0.09 ) | 1.2 ( 0.08 ) | 5.78 | 0.15 | 1 | 0.98 | 1.20 |\n", + "| 5 | 50 | 100 | 0.1 | 2.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 6 | 100 | 100 | 0.1 | 1.00 | 0.06 | 1 ( 0 ) | 3.95 ( 0.21 ) | 4.66 ( 0.08 ) | 5.29 | 0.72 | 1 | 3.95 | 4.66 |\n", + "| 7 | 500 | 100 | 0.1 | 0.20 | 0.35 | 1 ( 0 ) | 3.91 ( 0.21 ) | 2.17 ( 0.08 ) | 7.74 | 0.48 | 1 | 3.91 | 2.17 |\n", + "| 8 | 1000 | 100 | 0.1 | 0.10 | 0.51 | 1 ( 0 ) | 2.97 ( 0.15 ) | 1.29 ( 0.07 ) | 7.68 | 0.36 | 1 | 2.97 | 1.29 |\n", + "| 9 | 50 | 500 | 0.1 | 10.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 10 | 100 | 500 | 0.1 | 5.00 | 0.01 | 1 ( 0 ) | 24.57 ( 0.55 ) | 4.72 ( 0.08 ) | 25.85 | 0.95 | 1 | 24.57 | 4.72 |\n", + "| 11 | 500 | 500 | 0.1 | 1.00 | 0.09 | 1 ( 0 ) | 23.57 ( 0.51 ) | 2.43 ( 0.1 ) | 27.14 | 0.86 | 1 | 23.57 | 2.43 |\n", + "| 12 | 1000 | 500 | 0.1 | 0.50 | 0.14 | 1 ( 0 ) | 22.61 ( 0.5 ) | 1.31 ( 0.08 ) | 27.30 | 0.82 | 1 | 22.61 | 1.31 |\n", + "| 13 | 50 | 1000 | 0.1 | 20.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 14 | 100 | 1000 | 0.1 | 10.00 | 0.01 | 1 ( 0 ) | 48.35 ( 0.66 ) | 4.88 ( 0.08 ) | 49.47 | 0.98 | 1 | 48.35 | 4.88 |\n", + "| 15 | 500 | 1000 | 0.1 | 2.00 | 0.04 | 1 ( 0 ) | 48.59 ( 0.73 ) | 2.71 ( 0.1 ) | 51.88 | 0.94 | 1 | 48.59 | 2.71 |\n", + "| 16 | 1000 | 1000 | 0.1 | 1.00 | 0.06 | 1 ( 0 ) | 46.74 ( 0.64 ) | 1.75 ( 0.09 ) | 50.99 | 0.92 | 1 | 46.74 | 1.75 |\n", + "| 17 | 50 | 50 | 0.3 | 1.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 18 | 100 | 50 | 0.3 | 0.50 | 0.10 | 1 ( 0 ) | 1.68 ( 0.12 ) | 4.86 ( 0.08 ) | 2.81 | 0.54 | 1 | 1.68 | 4.86 |\n", + "| 19 | 500 | 50 | 0.3 | 0.10 | 0.44 | 1 ( 0 ) | 1.57 ( 0.12 ) | 2.74 ( 0.08 ) | 4.83 | 0.3 | 1 | 1.57 | 2.74 |\n", + "| 20 | 1000 | 50 | 0.3 | 0.05 | 0.62 | 1 ( 0 ) | 1.33 ( 0.1 ) | 1.44 ( 0.08 ) | 5.89 | 0.21 | 1 | 1.33 | 1.44 |\n", + "| 21 | 50 | 100 | 0.3 | 2.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 22 | 100 | 100 | 0.3 | 1.00 | 0.05 | 1 ( 0 ) | 4.45 ( 0.2 ) | 4.85 ( 0.08 ) | 5.60 | 0.78 | 1 | 4.45 | 4.85 |\n", + "| 23 | 500 | 100 | 0.3 | 0.20 | 0.33 | 1 ( 0 ) | 3.36 ( 0.19 ) | 2.57 ( 0.09 ) | 6.79 | 0.46 | 1 | 3.36 | 2.57 |\n", + "| 24 | 1000 | 100 | 0.3 | 0.10 | 0.47 | 1 ( 0 ) | 3.43 ( 0.17 ) | 1.61 ( 0.09 ) | 7.82 | 0.41 | 1 | 3.43 | 1.61 |\n", + "| 25 | 50 | 500 | 0.3 | 10.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 26 | 100 | 500 | 0.3 | 5.00 | 0.01 | 1 ( 0 ) | 23.69 ( 0.53 ) | 4.87 ( 0.08 ) | 24.82 | 0.95 | 1 | 23.69 | 4.87 |\n", + "| 27 | 500 | 500 | 0.3 | 1.00 | 0.07 | 1 ( 0 ) | 22.84 ( 0.44 ) | 3.11 ( 0.09 ) | 25.73 | 0.89 | 1 | 22.84 | 3.11 |\n", + "| 28 | 1000 | 500 | 0.3 | 0.50 | 0.13 | 1 ( 0 ) | 22.24 ( 0.43 ) | 1.77 ( 0.09 ) | 26.47 | 0.84 | 1 | 22.24 | 1.77 |\n", + "| 29 | 50 | 1000 | 0.3 | 20.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 30 | 100 | 1000 | 0.3 | 10.00 | 0.01 | 1 ( 0 ) | 48.06 ( 0.76 ) | 5.02 ( 0.08 ) | 49.04 | 0.98 | 1 | 48.06 | 5.02 |\n", + "| ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ |\n", + "| 51 | 500 | 50 | 0.7 | 0.10 | 0.45 | 1 ( 0 ) | 2.14 ( 0.13 ) | 3.36 ( 0.08 ) | 4.78 | 0.43 | 1 | 2.14 | 3.36 |\n", + "| 52 | 1000 | 50 | 0.7 | 0.05 | 0.60 | 1 ( 0 ) | 2.66 ( 0.14 ) | 2.27 ( 0.08 ) | 6.39 | 0.39 | 1 | 2.66 | 2.27 |\n", + "| 53 | 50 | 100 | 0.7 | 2.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 54 | 100 | 100 | 0.7 | 1.00 | 0.08 | 1 ( 0 ) | 4.36 ( 0.22 ) | 4.8 ( 0.09 ) | 5.56 | 0.77 | 1 | 4.36 | 4.80 |\n", + "| 55 | 500 | 100 | 0.7 | 0.20 | 0.38 | 1 ( 0 ) | 4.03 ( 0.18 ) | 3.1 ( 0.09 ) | 6.93 | 0.56 | 1 | 4.03 | 3.10 |\n", + "| 56 | 1000 | 100 | 0.7 | 0.10 | 0.50 | 1 ( 0 ) | 4.65 ( 0.22 ) | 2 ( 0.07 ) | 8.65 | 0.51 | 1 | 4.65 | 2.00 |\n", + "| 57 | 50 | 500 | 0.7 | 10.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 58 | 100 | 500 | 0.7 | 5.00 | 0.02 | 1 ( 0 ) | 23.58 ( 0.53 ) | 4.72 ( 0.09 ) | 24.86 | 0.95 | 1 | 23.58 | 4.72 |\n", + "| 59 | 500 | 500 | 0.7 | 1.00 | 0.10 | 1 ( 0 ) | 23.09 ( 0.56 ) | 3.38 ( 0.09 ) | 25.71 | 0.89 | 1 | 23.09 | 3.38 |\n", + "| 60 | 1000 | 500 | 0.7 | 0.50 | 0.14 | 1 ( 0 ) | 23.33 ( 0.53 ) | 2.58 ( 0.07 ) | 26.75 | 0.87 | 1 | 23.33 | 2.58 |\n", + "| 61 | 50 | 1000 | 0.7 | 20.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 62 | 100 | 1000 | 0.7 | 10.00 | 0.01 | 1 ( 0 ) | 46.8 ( 0.69 ) | 5.13 ( 0.07 ) | 47.67 | 0.98 | 1 | 46.80 | 5.13 |\n", + "| 63 | 500 | 1000 | 0.7 | 2.00 | 0.05 | 1 ( 0 ) | 48.68 ( 0.77 ) | 3.54 ( 0.08 ) | 51.14 | 0.95 | 1 | 48.68 | 3.54 |\n", + "| 64 | 1000 | 1000 | 0.7 | 1.00 | 0.07 | 1 ( 0 ) | 47.14 ( 0.7 ) | 2.73 ( 0.07 ) | 50.41 | 0.93 | 1 | 47.14 | 2.73 |\n", + "| 65 | 50 | 50 | 0.9 | 1.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 66 | 100 | 50 | 0.9 | 0.50 | 0.12 | 1 ( 0 ) | 2.09 ( 0.16 ) | 4.98 ( 0.09 ) | 3.06 | 0.62 | 1 | 2.09 | 4.98 |\n", + "| 67 | 500 | 50 | 0.9 | 0.10 | 0.45 | 1 ( 0 ) | 2.6 ( 0.13 ) | 3.33 ( 0.08 ) | 5.27 | 0.47 | 1 | 2.60 | 3.33 |\n", + "| 68 | 1000 | 50 | 0.9 | 0.05 | 0.51 | 1 ( 0 ) | 3.48 ( 0.17 ) | 2.35 ( 0.08 ) | 7.13 | 0.47 | 1 | 3.48 | 2.35 |\n", + "| 69 | 50 | 100 | 0.9 | 2.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 70 | 100 | 100 | 0.9 | 1.00 | 0.07 | 1 ( 0 ) | 4.4 ( 0.23 ) | 4.96 ( 0.09 ) | 5.43 | 0.81 | 1 | 4.40 | 4.96 |\n", + "| 71 | 500 | 100 | 0.9 | 0.20 | 0.35 | 1 ( 0 ) | 4.57 ( 0.24 ) | 3.5 ( 0.08 ) | 7.07 | 0.62 | 1 | 4.57 | 3.50 |\n", + "| 72 | 1000 | 100 | 0.9 | 0.10 | 0.37 | 1 ( 0 ) | 6.43 ( 0.28 ) | 2.57 ( 0.08 ) | 9.86 | 0.63 | 1 | 6.43 | 2.57 |\n", + "| 73 | 50 | 500 | 0.9 | 10.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 74 | 100 | 500 | 0.9 | 5.00 | 0.01 | 1 ( 0 ) | 24.58 ( 0.66 ) | 5.1 ( 0.09 ) | 25.48 | 0.96 | 1 | 24.58 | 5.10 |\n", + "| 75 | 500 | 500 | 0.9 | 1.00 | 0.08 | 1 ( 0 ) | 24.91 ( 0.57 ) | 3.53 ( 0.09 ) | 27.38 | 0.91 | 1 | 24.91 | 3.53 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.50 | 0.13 | 1 ( 0 ) | 24.53 ( 0.53 ) | 2.84 ( 0.08 ) | 27.69 | 0.88 | 1 | 24.53 | 2.84 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.00 | 0.00 | 1 ( 0 ) | 47.19 ( 0.96 ) | 5.2 ( 0.08 ) | 47.99 | 0.98 | 1 | 47.19 | 5.20 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.00 | 0.04 | 1 ( 0 ) | 48.11 ( 0.92 ) | 3.78 ( 0.08 ) | 50.33 | 0.95 | 1 | 48.11 | 3.78 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.00 | 0.07 | 1 ( 0 ) | 49.47 ( 0.78 ) | 2.97 ( 0.07 ) | 52.50 | 0.94 | 1 | 49.47 | 2.97 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select\n", + "1 50 50 0.1 1.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "2 100 50 0.1 0.50 0.10 1 ( 0 ) 2.05 ( 0.14 ) 4.71 ( 0.08 ) 3.31 \n", + "3 500 50 0.1 0.10 0.50 1 ( 0 ) 1.4 ( 0.12 ) 2.4 ( 0.08 ) 5.00 \n", + "4 1000 50 0.1 0.05 0.69 1 ( 0 ) 0.98 ( 0.09 ) 1.2 ( 0.08 ) 5.78 \n", + "5 50 100 0.1 2.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "6 100 100 0.1 1.00 0.06 1 ( 0 ) 3.95 ( 0.21 ) 4.66 ( 0.08 ) 5.29 \n", + "7 500 100 0.1 0.20 0.35 1 ( 0 ) 3.91 ( 0.21 ) 2.17 ( 0.08 ) 7.74 \n", + "8 1000 100 0.1 0.10 0.51 1 ( 0 ) 2.97 ( 0.15 ) 1.29 ( 0.07 ) 7.68 \n", + "9 50 500 0.1 10.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "10 100 500 0.1 5.00 0.01 1 ( 0 ) 24.57 ( 0.55 ) 4.72 ( 0.08 ) 25.85 \n", + "11 500 500 0.1 1.00 0.09 1 ( 0 ) 23.57 ( 0.51 ) 2.43 ( 0.1 ) 27.14 \n", + "12 1000 500 0.1 0.50 0.14 1 ( 0 ) 22.61 ( 0.5 ) 1.31 ( 0.08 ) 27.30 \n", + "13 50 1000 0.1 20.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "14 100 1000 0.1 10.00 0.01 1 ( 0 ) 48.35 ( 0.66 ) 4.88 ( 0.08 ) 49.47 \n", + "15 500 1000 0.1 2.00 0.04 1 ( 0 ) 48.59 ( 0.73 ) 2.71 ( 0.1 ) 51.88 \n", + "16 1000 1000 0.1 1.00 0.06 1 ( 0 ) 46.74 ( 0.64 ) 1.75 ( 0.09 ) 50.99 \n", + "17 50 50 0.3 1.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "18 100 50 0.3 0.50 0.10 1 ( 0 ) 1.68 ( 0.12 ) 4.86 ( 0.08 ) 2.81 \n", + "19 500 50 0.3 0.10 0.44 1 ( 0 ) 1.57 ( 0.12 ) 2.74 ( 0.08 ) 4.83 \n", + "20 1000 50 0.3 0.05 0.62 1 ( 0 ) 1.33 ( 0.1 ) 1.44 ( 0.08 ) 5.89 \n", + "21 50 100 0.3 2.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "22 100 100 0.3 1.00 0.05 1 ( 0 ) 4.45 ( 0.2 ) 4.85 ( 0.08 ) 5.60 \n", + "23 500 100 0.3 0.20 0.33 1 ( 0 ) 3.36 ( 0.19 ) 2.57 ( 0.09 ) 6.79 \n", + "24 1000 100 0.3 0.10 0.47 1 ( 0 ) 3.43 ( 0.17 ) 1.61 ( 0.09 ) 7.82 \n", + "25 50 500 0.3 10.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "26 100 500 0.3 5.00 0.01 1 ( 0 ) 23.69 ( 0.53 ) 4.87 ( 0.08 ) 24.82 \n", + "27 500 500 0.3 1.00 0.07 1 ( 0 ) 22.84 ( 0.44 ) 3.11 ( 0.09 ) 25.73 \n", + "28 1000 500 0.3 0.50 0.13 1 ( 0 ) 22.24 ( 0.43 ) 1.77 ( 0.09 ) 26.47 \n", + "29 50 1000 0.3 20.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "30 100 1000 0.3 10.00 0.01 1 ( 0 ) 48.06 ( 0.76 ) 5.02 ( 0.08 ) 49.04 \n", + "⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ \n", + "51 500 50 0.7 0.10 0.45 1 ( 0 ) 2.14 ( 0.13 ) 3.36 ( 0.08 ) 4.78 \n", + "52 1000 50 0.7 0.05 0.60 1 ( 0 ) 2.66 ( 0.14 ) 2.27 ( 0.08 ) 6.39 \n", + "53 50 100 0.7 2.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "54 100 100 0.7 1.00 0.08 1 ( 0 ) 4.36 ( 0.22 ) 4.8 ( 0.09 ) 5.56 \n", + "55 500 100 0.7 0.20 0.38 1 ( 0 ) 4.03 ( 0.18 ) 3.1 ( 0.09 ) 6.93 \n", + "56 1000 100 0.7 0.10 0.50 1 ( 0 ) 4.65 ( 0.22 ) 2 ( 0.07 ) 8.65 \n", + "57 50 500 0.7 10.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "58 100 500 0.7 5.00 0.02 1 ( 0 ) 23.58 ( 0.53 ) 4.72 ( 0.09 ) 24.86 \n", + "59 500 500 0.7 1.00 0.10 1 ( 0 ) 23.09 ( 0.56 ) 3.38 ( 0.09 ) 25.71 \n", + "60 1000 500 0.7 0.50 0.14 1 ( 0 ) 23.33 ( 0.53 ) 2.58 ( 0.07 ) 26.75 \n", + "61 50 1000 0.7 20.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "62 100 1000 0.7 10.00 0.01 1 ( 0 ) 46.8 ( 0.69 ) 5.13 ( 0.07 ) 47.67 \n", + "63 500 1000 0.7 2.00 0.05 1 ( 0 ) 48.68 ( 0.77 ) 3.54 ( 0.08 ) 51.14 \n", + "64 1000 1000 0.7 1.00 0.07 1 ( 0 ) 47.14 ( 0.7 ) 2.73 ( 0.07 ) 50.41 \n", + "65 50 50 0.9 1.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "66 100 50 0.9 0.50 0.12 1 ( 0 ) 2.09 ( 0.16 ) 4.98 ( 0.09 ) 3.06 \n", + "67 500 50 0.9 0.10 0.45 1 ( 0 ) 2.6 ( 0.13 ) 3.33 ( 0.08 ) 5.27 \n", + "68 1000 50 0.9 0.05 0.51 1 ( 0 ) 3.48 ( 0.17 ) 2.35 ( 0.08 ) 7.13 \n", + "69 50 100 0.9 2.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "70 100 100 0.9 1.00 0.07 1 ( 0 ) 4.4 ( 0.23 ) 4.96 ( 0.09 ) 5.43 \n", + "71 500 100 0.9 0.20 0.35 1 ( 0 ) 4.57 ( 0.24 ) 3.5 ( 0.08 ) 7.07 \n", + "72 1000 100 0.9 0.10 0.37 1 ( 0 ) 6.43 ( 0.28 ) 2.57 ( 0.08 ) 9.86 \n", + "73 50 500 0.9 10.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "74 100 500 0.9 5.00 0.01 1 ( 0 ) 24.58 ( 0.66 ) 5.1 ( 0.09 ) 25.48 \n", + "75 500 500 0.9 1.00 0.08 1 ( 0 ) 24.91 ( 0.57 ) 3.53 ( 0.09 ) 27.38 \n", + "76 1000 500 0.9 0.50 0.13 1 ( 0 ) 24.53 ( 0.53 ) 2.84 ( 0.08 ) 27.69 \n", + "77 50 1000 0.9 20.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "78 100 1000 0.9 10.00 0.00 1 ( 0 ) 47.19 ( 0.96 ) 5.2 ( 0.08 ) 47.99 \n", + "79 500 1000 0.9 2.00 0.04 1 ( 0 ) 48.11 ( 0.92 ) 3.78 ( 0.08 ) 50.33 \n", + "80 1000 1000 0.9 1.00 0.07 1 ( 0 ) 49.47 ( 0.78 ) 2.97 ( 0.07 ) 52.50 \n", + " FDR ROC_mean FP_mean FN_mean\n", + "1 NaN 1 1.00 6.00 \n", + "2 0.56 1 2.05 4.71 \n", + "3 0.25 1 1.40 2.40 \n", + "4 0.15 1 0.98 1.20 \n", + "5 NaN 1 1.00 6.00 \n", + "6 0.72 1 3.95 4.66 \n", + "7 0.48 1 3.91 2.17 \n", + "8 0.36 1 2.97 1.29 \n", + "9 NaN 1 1.00 6.00 \n", + "10 0.95 1 24.57 4.72 \n", + "11 0.86 1 23.57 2.43 \n", + "12 0.82 1 22.61 1.31 \n", + "13 NaN 1 1.00 6.00 \n", + "14 0.98 1 48.35 4.88 \n", + "15 0.94 1 48.59 2.71 \n", + "16 0.92 1 46.74 1.75 \n", + "17 NaN 1 1.00 6.00 \n", + "18 0.54 1 1.68 4.86 \n", + "19 0.3 1 1.57 2.74 \n", + "20 0.21 1 1.33 1.44 \n", + "21 NaN 1 1.00 6.00 \n", + "22 0.78 1 4.45 4.85 \n", + "23 0.46 1 3.36 2.57 \n", + "24 0.41 1 3.43 1.61 \n", + "25 NaN 1 1.00 6.00 \n", + "26 0.95 1 23.69 4.87 \n", + "27 0.89 1 22.84 3.11 \n", + "28 0.84 1 22.24 1.77 \n", + "29 NaN 1 1.00 6.00 \n", + "30 0.98 1 48.06 5.02 \n", + "⋮ ⋮ ⋮ ⋮ ⋮ \n", + "51 0.43 1 2.14 3.36 \n", + "52 0.39 1 2.66 2.27 \n", + "53 NaN 1 1.00 6.00 \n", + "54 0.77 1 4.36 4.80 \n", + "55 0.56 1 4.03 3.10 \n", + "56 0.51 1 4.65 2.00 \n", + "57 NaN 1 1.00 6.00 \n", + "58 0.95 1 23.58 4.72 \n", + "59 0.89 1 23.09 3.38 \n", + "60 0.87 1 23.33 2.58 \n", + "61 NaN 1 1.00 6.00 \n", + "62 0.98 1 46.80 5.13 \n", + "63 0.95 1 48.68 3.54 \n", + "64 0.93 1 47.14 2.73 \n", + "65 NaN 1 1.00 6.00 \n", + "66 0.62 1 2.09 4.98 \n", + "67 0.47 1 2.60 3.33 \n", + "68 0.47 1 3.48 2.35 \n", + "69 NaN 1 1.00 6.00 \n", + "70 0.81 1 4.40 4.96 \n", + "71 0.62 1 4.57 3.50 \n", + "72 0.63 1 6.43 2.57 \n", + "73 NaN 1 1.00 6.00 \n", + "74 0.96 1 24.58 5.10 \n", + "75 0.91 1 24.91 3.53 \n", + "76 0.88 1 24.53 2.84 \n", + "77 NaN 1 1.00 6.00 \n", + "78 0.98 1 47.19 5.20 \n", + "79 0.95 1 48.11 3.78 \n", + "80 0.94 1 49.47 2.97 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_toe\n", + "\n", + "## export\n", + "write.table(result.table_toe, '../results_summary_bin/sim_toe_RF_binary.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_bin/1.4_sim_toe_compLasso_binary_update.ipynb b/simulations/notebooks_sim_bin/1.4_sim_toe_compLasso_binary_update.ipynb new file mode 100644 index 0000000..1e829f4 --- /dev/null +++ b/simulations/notebooks_sim_bin/1.4_sim_toe_compLasso_binary_update.ipynb @@ -0,0 +1,966 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize compositional lasso results on Toeplitz Simulation Scenarios for binary outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "rou.list = seq(0.1, 0.9, 0.2)\n", + "\n", + "files = NULL\n", + "for (rou in rou.list){\n", + " for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_toeplitz_corr', rou, paste('P', p, 'N', n, sep='_'), '.RData', sep=''))\n", + " }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "80" + ], + "text/latex": [ + "80" + ], + "text/markdown": [ + "80" + ], + "text/plain": [ + "[1] 80" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "length(files)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1] \"indx: 1\"\n", + "[1] \"indx: 2\"\n", + "[1] \"indx: 3\"\n", + "[1] \"indx: 4\"\n", + "[1] \"indx: 5\"\n", + "[1] \"indx: 6\"\n", + "[1] \"indx: 7\"\n", + "[1] \"indx: 8\"\n", + "[1] \"indx: 9\"\n", + "[1] \"indx: 10\"\n", + "[1] \"indx: 11\"\n", + "[1] \"indx: 12\"\n", + "[1] \"indx: 13\"\n", + "[1] \"indx: 14\"\n", + "[1] \"indx: 15\"\n", + "[1] \"indx: 16\"\n", + "[1] \"indx: 17\"\n", + "[1] \"indx: 18\"\n", + "[1] \"indx: 19\"\n", + "[1] \"indx: 20\"\n", + "[1] \"indx: 21\"\n", + "[1] \"indx: 22\"\n", + "[1] \"indx: 23\"\n", + "[1] \"indx: 24\"\n", + "[1] \"indx: 25\"\n", + "[1] \"indx: 26\"\n", + "[1] \"indx: 27\"\n", + "[1] \"indx: 28\"\n", + "[1] \"indx: 29\"\n", + "[1] \"indx: 30\"\n", + "[1] \"indx: 31\"\n", + "[1] \"indx: 32\"\n", + "[1] \"indx: 33\"\n", + "[1] \"indx: 34\"\n", + "[1] \"indx: 35\"\n", + "[1] \"indx: 36\"\n", + "[1] \"indx: 37\"\n", + "[1] \"indx: 38\"\n", + "[1] \"indx: 39\"\n", + "[1] \"indx: 40\"\n", + "[1] \"indx: 41\"\n", + "[1] \"indx: 42\"\n", + "[1] \"indx: 43\"\n", + "[1] \"indx: 44\"\n", + "[1] \"indx: 45\"\n", + "[1] \"indx: 46\"\n", + "[1] \"indx: 47\"\n", + "[1] \"indx: 48\"\n", + "[1] \"indx: 49\"\n", + "[1] \"indx: 50\"\n", + "[1] \"indx: 51\"\n", + "[1] \"indx: 52\"\n", + "[1] \"indx: 53\"\n", + "[1] \"indx: 54\"\n", + "[1] \"indx: 55\"\n", + "[1] \"indx: 56\"\n", + "[1] \"indx: 57\"\n", + "[1] \"indx: 58\"\n", + "[1] \"indx: 59\"\n", + "[1] \"indx: 60\"\n", + "[1] \"indx: 61\"\n", + "[1] \"indx: 62\"\n", + "[1] \"indx: 63\"\n", + "[1] \"indx: 64\"\n", + "[1] \"indx: 65\"\n", + "[1] \"indx: 66\"\n", + "[1] \"indx: 67\"\n", + "[1] \"indx: 68\"\n", + "[1] \"indx: 69\"\n", + "[1] \"indx: 70\"\n", + "[1] \"indx: 71\"\n", + "[1] \"indx: 72\"\n", + "[1] \"indx: 73\"\n", + "[1] \"indx: 74\"\n", + "[1] \"indx: 75\"\n", + "[1] \"indx: 76\"\n", + "[1] \"indx: 77\"\n", + "[1] \"indx: 78\"\n", + "[1] \"indx: 79\"\n", + "[1] \"indx: 80\"\n" + ] + } + ], + "source": [ + "avg_FDR = NULL\n", + "table_toe = NULL\n", + "tmp_num_select = rep(0, length(files))\n", + "for (i in 1:length(files)){\n", + " print(paste0('indx: ', i))\n", + " load(paste0(dir, '/binary_update/toe_GenCompLasso_binary_', i, '.RData')) \n", + " \n", + " table_toe = rbind(table_toe, results_toe_GenCompLasso[c('n', 'p', 'rou', 'FP', 'FN', 'ROC', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_toe_GenCompLasso$Stab.table))\n", + " \n", + " # calculate FDR\n", + " load(file_name, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_toe_GenCompLasso$Stab.table\n", + " FDR = NULL # false positive rate\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}\n", + "table_toe = as.data.frame(table_toe)\n", + "table_toe$num_select = tmp_num_select\n", + "table_toe$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
150500.114.84 ( 0.9 )0.93 ( 0.09 )0.97 ( 0 )0.1319.910.70
2100500.17.19 ( 0.43 )0.49 ( 0.07 )0.93 ( 0 )0.3312.700.53
3500500.11.93 ( 0.34 )0.16 ( 0.04 )0.9 ( 0 )0.7 7.770.16
41000500.11.37 ( 0.42 )0.01 ( 0.01 )0.9 ( 0 )0.79 7.360.10
5501000.136.64 ( 2.16 )0.65 ( 0.07 )0.99 ( 0 )0.0741.990.84
61001000.116.16 ( 1.22 )0.47 ( 0.06 )0.94 ( 0 )0.221.690.70
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 14.84 ( 0.9 ) & 0.93 ( 0.09 ) & 0.97 ( 0 ) & 0.13 & 19.91 & 0.70\\\\\n", + "\t2 & 100 & 50 & 0.1 & 7.19 ( 0.43 ) & 0.49 ( 0.07 ) & 0.93 ( 0 ) & 0.33 & 12.70 & 0.53\\\\\n", + "\t3 & 500 & 50 & 0.1 & 1.93 ( 0.34 ) & 0.16 ( 0.04 ) & 0.9 ( 0 ) & 0.7 & 7.77 & 0.16\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 1.37 ( 0.42 ) & 0.01 ( 0.01 ) & 0.9 ( 0 ) & 0.79 & 7.36 & 0.10\\\\\n", + "\t5 & 50 & 100 & 0.1 & 36.64 ( 2.16 ) & 0.65 ( 0.07 ) & 0.99 ( 0 ) & 0.07 & 41.99 & 0.84\\\\\n", + "\t6 & 100 & 100 & 0.1 & 16.16 ( 1.22 ) & 0.47 ( 0.06 ) & 0.94 ( 0 ) & 0.2 & 21.69 & 0.70\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 14.84 ( 0.9 ) | 0.93 ( 0.09 ) | 0.97 ( 0 ) | 0.13 | 19.91 | 0.70 |\n", + "| 2 | 100 | 50 | 0.1 | 7.19 ( 0.43 ) | 0.49 ( 0.07 ) | 0.93 ( 0 ) | 0.33 | 12.70 | 0.53 |\n", + "| 3 | 500 | 50 | 0.1 | 1.93 ( 0.34 ) | 0.16 ( 0.04 ) | 0.9 ( 0 ) | 0.7 | 7.77 | 0.16 |\n", + "| 4 | 1000 | 50 | 0.1 | 1.37 ( 0.42 ) | 0.01 ( 0.01 ) | 0.9 ( 0 ) | 0.79 | 7.36 | 0.10 |\n", + "| 5 | 50 | 100 | 0.1 | 36.64 ( 2.16 ) | 0.65 ( 0.07 ) | 0.99 ( 0 ) | 0.07 | 41.99 | 0.84 |\n", + "| 6 | 100 | 100 | 0.1 | 16.16 ( 1.22 ) | 0.47 ( 0.06 ) | 0.94 ( 0 ) | 0.2 | 21.69 | 0.70 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select FDR \n", + "1 50 50 0.1 14.84 ( 0.9 ) 0.93 ( 0.09 ) 0.97 ( 0 ) 0.13 19.91 0.70\n", + "2 100 50 0.1 7.19 ( 0.43 ) 0.49 ( 0.07 ) 0.93 ( 0 ) 0.33 12.70 0.53\n", + "3 500 50 0.1 1.93 ( 0.34 ) 0.16 ( 0.04 ) 0.9 ( 0 ) 0.7 7.77 0.16\n", + "4 1000 50 0.1 1.37 ( 0.42 ) 0.01 ( 0.01 ) 0.9 ( 0 ) 0.79 7.36 0.10\n", + "5 50 100 0.1 36.64 ( 2.16 ) 0.65 ( 0.07 ) 0.99 ( 0 ) 0.07 41.99 0.84\n", + "6 100 100 0.1 16.16 ( 1.22 ) 0.47 ( 0.06 ) 0.94 ( 0 ) 0.2 21.69 0.70" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
755005000.96.75 ( 0.73 )2.76 ( 0.07 )0.79 ( 0 )0.4 9.990.56
7610005000.92.48 ( 0.28 )2.79 ( 0.05 )0.8 ( 0 )0.73 5.690.37
775010000.9201.98 ( 10.15 )2.34 ( 0.16 )1 ( 0 )0.01205.640.98
7810010000.970.81 ( 4.4 )3.05 ( 0.12 )0.95 ( 0 )0.03 73.760.96
7950010000.97.71 ( 1.09 )2.85 ( 0.06 )0.79 ( 0 )0.38 10.860.59
80100010000.92.41 ( 0.17 )2.77 ( 0.07 )0.8 ( 0 )0.76 5.640.39
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 6.75 ( 0.73 ) & 2.76 ( 0.07 ) & 0.79 ( 0 ) & 0.4 & 9.99 & 0.56\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 2.48 ( 0.28 ) & 2.79 ( 0.05 ) & 0.8 ( 0 ) & 0.73 & 5.69 & 0.37\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 201.98 ( 10.15 ) & 2.34 ( 0.16 ) & 1 ( 0 ) & 0.01 & 205.64 & 0.98\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 70.81 ( 4.4 ) & 3.05 ( 0.12 ) & 0.95 ( 0 ) & 0.03 & 73.76 & 0.96\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 7.71 ( 1.09 ) & 2.85 ( 0.06 ) & 0.79 ( 0 ) & 0.38 & 10.86 & 0.59\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 2.41 ( 0.17 ) & 2.77 ( 0.07 ) & 0.8 ( 0 ) & 0.76 & 5.64 & 0.39\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 6.75 ( 0.73 ) | 2.76 ( 0.07 ) | 0.79 ( 0 ) | 0.4 | 9.99 | 0.56 |\n", + "| 76 | 1000 | 500 | 0.9 | 2.48 ( 0.28 ) | 2.79 ( 0.05 ) | 0.8 ( 0 ) | 0.73 | 5.69 | 0.37 |\n", + "| 77 | 50 | 1000 | 0.9 | 201.98 ( 10.15 ) | 2.34 ( 0.16 ) | 1 ( 0 ) | 0.01 | 205.64 | 0.98 |\n", + "| 78 | 100 | 1000 | 0.9 | 70.81 ( 4.4 ) | 3.05 ( 0.12 ) | 0.95 ( 0 ) | 0.03 | 73.76 | 0.96 |\n", + "| 79 | 500 | 1000 | 0.9 | 7.71 ( 1.09 ) | 2.85 ( 0.06 ) | 0.79 ( 0 ) | 0.38 | 10.86 | 0.59 |\n", + "| 80 | 1000 | 1000 | 0.9 | 2.41 ( 0.17 ) | 2.77 ( 0.07 ) | 0.8 ( 0 ) | 0.76 | 5.64 | 0.39 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select FDR \n", + "75 500 500 0.9 6.75 ( 0.73 ) 2.76 ( 0.07 ) 0.79 ( 0 ) 0.4 9.99 0.56\n", + "76 1000 500 0.9 2.48 ( 0.28 ) 2.79 ( 0.05 ) 0.8 ( 0 ) 0.73 5.69 0.37\n", + "77 50 1000 0.9 201.98 ( 10.15 ) 2.34 ( 0.16 ) 1 ( 0 ) 0.01 205.64 0.98\n", + "78 100 1000 0.9 70.81 ( 4.4 ) 3.05 ( 0.12 ) 0.95 ( 0 ) 0.03 73.76 0.96\n", + "79 500 1000 0.9 7.71 ( 1.09 ) 2.85 ( 0.06 ) 0.79 ( 0 ) 0.38 10.86 0.59\n", + "80 1000 1000 0.9 2.41 ( 0.17 ) 2.77 ( 0.07 ) 0.8 ( 0 ) 0.76 5.64 0.39" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_toe <- apply(table_toe,2,as.character)\n", + "rownames(result.table_toe) = rownames(table_toe)\n", + "result.table_toe = as.data.frame(result.table_toe)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_toe$n = tidyr::extract_numeric(result.table_toe$n)\n", + "result.table_toe$p = tidyr::extract_numeric(result.table_toe$p)\n", + "result.table_toe$ratio = result.table_toe$p / result.table_toe$n\n", + "\n", + "result.table_toe = result.table_toe[c('n', 'p', 'rou', 'ratio', 'Stab', 'ROC', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_toe)[1:4] = c('N', 'P', 'Corr', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_toe$Stab = as.numeric(as.character(result.table_toe$Stab))\n", + "result.table_toe$num_select = as.numeric(as.character(result.table_toe$num_select))\n", + "\n", + "result.table_toe$ROC_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$ROC))\n", + "result.table_toe$FP_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$FP))\n", + "result.table_toe$FN_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_toe$FN))" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "
A data.frame: 0 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
\n" + ], + "text/latex": [ + "A data.frame: 0 × 13\n", + "\\begin{tabular}{lllllllllllll}\n", + " N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 0 × 13\n", + "\n", + "| N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select FDR ROC_mean FP_mean FN_mean" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check whether missing values exists\n", + "result.table_toe[rowSums(is.na(result.table_toe)) > 0,]" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 500.11.000.130.97 ( 0 )14.84 ( 0.9 ) 0.93 ( 0.09 )19.910.7 0.9714.840.93
2 100 500.10.500.330.93 ( 0 )7.19 ( 0.43 ) 0.49 ( 0.07 )12.700.530.93 7.190.49
3 500 500.10.100.700.9 ( 0 ) 1.93 ( 0.34 ) 0.16 ( 0.04 ) 7.770.160.90 1.930.16
41000 500.10.050.790.9 ( 0 ) 1.37 ( 0.42 ) 0.01 ( 0.01 ) 7.360.1 0.90 1.370.01
5 501000.12.000.070.99 ( 0 )36.64 ( 2.16 )0.65 ( 0.07 )41.990.840.9936.640.65
6 1001000.11.000.200.94 ( 0 )16.16 ( 1.22 )0.47 ( 0.06 )21.690.7 0.9416.160.47
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1.00 & 0.13 & 0.97 ( 0 ) & 14.84 ( 0.9 ) & 0.93 ( 0.09 ) & 19.91 & 0.7 & 0.97 & 14.84 & 0.93\\\\\n", + "\t2 & 100 & 50 & 0.1 & 0.50 & 0.33 & 0.93 ( 0 ) & 7.19 ( 0.43 ) & 0.49 ( 0.07 ) & 12.70 & 0.53 & 0.93 & 7.19 & 0.49\\\\\n", + "\t3 & 500 & 50 & 0.1 & 0.10 & 0.70 & 0.9 ( 0 ) & 1.93 ( 0.34 ) & 0.16 ( 0.04 ) & 7.77 & 0.16 & 0.90 & 1.93 & 0.16\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 0.05 & 0.79 & 0.9 ( 0 ) & 1.37 ( 0.42 ) & 0.01 ( 0.01 ) & 7.36 & 0.1 & 0.90 & 1.37 & 0.01\\\\\n", + "\t5 & 50 & 100 & 0.1 & 2.00 & 0.07 & 0.99 ( 0 ) & 36.64 ( 2.16 ) & 0.65 ( 0.07 ) & 41.99 & 0.84 & 0.99 & 36.64 & 0.65\\\\\n", + "\t6 & 100 & 100 & 0.1 & 1.00 & 0.20 & 0.94 ( 0 ) & 16.16 ( 1.22 ) & 0.47 ( 0.06 ) & 21.69 & 0.7 & 0.94 & 16.16 & 0.47\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1.00 | 0.13 | 0.97 ( 0 ) | 14.84 ( 0.9 ) | 0.93 ( 0.09 ) | 19.91 | 0.7 | 0.97 | 14.84 | 0.93 |\n", + "| 2 | 100 | 50 | 0.1 | 0.50 | 0.33 | 0.93 ( 0 ) | 7.19 ( 0.43 ) | 0.49 ( 0.07 ) | 12.70 | 0.53 | 0.93 | 7.19 | 0.49 |\n", + "| 3 | 500 | 50 | 0.1 | 0.10 | 0.70 | 0.9 ( 0 ) | 1.93 ( 0.34 ) | 0.16 ( 0.04 ) | 7.77 | 0.16 | 0.90 | 1.93 | 0.16 |\n", + "| 4 | 1000 | 50 | 0.1 | 0.05 | 0.79 | 0.9 ( 0 ) | 1.37 ( 0.42 ) | 0.01 ( 0.01 ) | 7.36 | 0.1 | 0.90 | 1.37 | 0.01 |\n", + "| 5 | 50 | 100 | 0.1 | 2.00 | 0.07 | 0.99 ( 0 ) | 36.64 ( 2.16 ) | 0.65 ( 0.07 ) | 41.99 | 0.84 | 0.99 | 36.64 | 0.65 |\n", + "| 6 | 100 | 100 | 0.1 | 1.00 | 0.20 | 0.94 ( 0 ) | 16.16 ( 1.22 ) | 0.47 ( 0.06 ) | 21.69 | 0.7 | 0.94 | 16.16 | 0.47 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select\n", + "1 50 50 0.1 1.00 0.13 0.97 ( 0 ) 14.84 ( 0.9 ) 0.93 ( 0.09 ) 19.91 \n", + "2 100 50 0.1 0.50 0.33 0.93 ( 0 ) 7.19 ( 0.43 ) 0.49 ( 0.07 ) 12.70 \n", + "3 500 50 0.1 0.10 0.70 0.9 ( 0 ) 1.93 ( 0.34 ) 0.16 ( 0.04 ) 7.77 \n", + "4 1000 50 0.1 0.05 0.79 0.9 ( 0 ) 1.37 ( 0.42 ) 0.01 ( 0.01 ) 7.36 \n", + "5 50 100 0.1 2.00 0.07 0.99 ( 0 ) 36.64 ( 2.16 ) 0.65 ( 0.07 ) 41.99 \n", + "6 100 100 0.1 1.00 0.20 0.94 ( 0 ) 16.16 ( 1.22 ) 0.47 ( 0.06 ) 21.69 \n", + " FDR ROC_mean FP_mean FN_mean\n", + "1 0.7 0.97 14.84 0.93 \n", + "2 0.53 0.93 7.19 0.49 \n", + "3 0.16 0.90 1.93 0.16 \n", + "4 0.1 0.90 1.37 0.01 \n", + "5 0.84 0.99 36.64 0.65 \n", + "6 0.7 0.94 16.16 0.47 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
75 500 5000.9 1.00.400.79 ( 0 )6.75 ( 0.73 ) 2.76 ( 0.07 ) 9.990.560.79 6.752.76
761000 5000.9 0.50.730.8 ( 0 ) 2.48 ( 0.28 ) 2.79 ( 0.05 ) 5.690.370.80 2.482.79
77 5010000.920.00.011 ( 0 ) 201.98 ( 10.15 )2.34 ( 0.16 )205.640.981.00201.982.34
78 10010000.910.00.030.95 ( 0 )70.81 ( 4.4 ) 3.05 ( 0.12 ) 73.760.960.95 70.813.05
79 50010000.9 2.00.380.79 ( 0 )7.71 ( 1.09 ) 2.85 ( 0.06 ) 10.860.590.79 7.712.85
80100010000.9 1.00.760.8 ( 0 ) 2.41 ( 0.17 ) 2.77 ( 0.07 ) 5.640.390.80 2.412.77
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 1.0 & 0.40 & 0.79 ( 0 ) & 6.75 ( 0.73 ) & 2.76 ( 0.07 ) & 9.99 & 0.56 & 0.79 & 6.75 & 2.76\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.5 & 0.73 & 0.8 ( 0 ) & 2.48 ( 0.28 ) & 2.79 ( 0.05 ) & 5.69 & 0.37 & 0.80 & 2.48 & 2.79\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.0 & 0.01 & 1 ( 0 ) & 201.98 ( 10.15 ) & 2.34 ( 0.16 ) & 205.64 & 0.98 & 1.00 & 201.98 & 2.34\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.0 & 0.03 & 0.95 ( 0 ) & 70.81 ( 4.4 ) & 3.05 ( 0.12 ) & 73.76 & 0.96 & 0.95 & 70.81 & 3.05\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.0 & 0.38 & 0.79 ( 0 ) & 7.71 ( 1.09 ) & 2.85 ( 0.06 ) & 10.86 & 0.59 & 0.79 & 7.71 & 2.85\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.0 & 0.76 & 0.8 ( 0 ) & 2.41 ( 0.17 ) & 2.77 ( 0.07 ) & 5.64 & 0.39 & 0.80 & 2.41 & 2.77\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 1.0 | 0.40 | 0.79 ( 0 ) | 6.75 ( 0.73 ) | 2.76 ( 0.07 ) | 9.99 | 0.56 | 0.79 | 6.75 | 2.76 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.5 | 0.73 | 0.8 ( 0 ) | 2.48 ( 0.28 ) | 2.79 ( 0.05 ) | 5.69 | 0.37 | 0.80 | 2.48 | 2.79 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.0 | 0.01 | 1 ( 0 ) | 201.98 ( 10.15 ) | 2.34 ( 0.16 ) | 205.64 | 0.98 | 1.00 | 201.98 | 2.34 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.0 | 0.03 | 0.95 ( 0 ) | 70.81 ( 4.4 ) | 3.05 ( 0.12 ) | 73.76 | 0.96 | 0.95 | 70.81 | 3.05 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.0 | 0.38 | 0.79 ( 0 ) | 7.71 ( 1.09 ) | 2.85 ( 0.06 ) | 10.86 | 0.59 | 0.79 | 7.71 | 2.85 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.0 | 0.76 | 0.8 ( 0 ) | 2.41 ( 0.17 ) | 2.77 ( 0.07 ) | 5.64 | 0.39 | 0.80 | 2.41 | 2.77 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "75 500 500 0.9 1.0 0.40 0.79 ( 0 ) 6.75 ( 0.73 ) 2.76 ( 0.07 )\n", + "76 1000 500 0.9 0.5 0.73 0.8 ( 0 ) 2.48 ( 0.28 ) 2.79 ( 0.05 )\n", + "77 50 1000 0.9 20.0 0.01 1 ( 0 ) 201.98 ( 10.15 ) 2.34 ( 0.16 )\n", + "78 100 1000 0.9 10.0 0.03 0.95 ( 0 ) 70.81 ( 4.4 ) 3.05 ( 0.12 )\n", + "79 500 1000 0.9 2.0 0.38 0.79 ( 0 ) 7.71 ( 1.09 ) 2.85 ( 0.06 )\n", + "80 1000 1000 0.9 1.0 0.76 0.8 ( 0 ) 2.41 ( 0.17 ) 2.77 ( 0.07 )\n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "75 9.99 0.56 0.79 6.75 2.76 \n", + "76 5.69 0.37 0.80 2.48 2.79 \n", + "77 205.64 0.98 1.00 201.98 2.34 \n", + "78 73.76 0.96 0.95 70.81 3.05 \n", + "79 10.86 0.59 0.79 7.71 2.85 \n", + "80 5.64 0.39 0.80 2.41 2.77 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 80 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 500.1 1.000.130.97 ( 0 )14.84 ( 0.9 ) 0.93 ( 0.09 ) 19.910.7 0.97 14.840.93
2 100 500.1 0.500.330.93 ( 0 )7.19 ( 0.43 ) 0.49 ( 0.07 ) 12.700.530.93 7.190.49
3 500 500.1 0.100.700.9 ( 0 ) 1.93 ( 0.34 ) 0.16 ( 0.04 ) 7.770.160.90 1.930.16
41000 500.1 0.050.790.9 ( 0 ) 1.37 ( 0.42 ) 0.01 ( 0.01 ) 7.360.1 0.90 1.370.01
5 50 1000.1 2.000.070.99 ( 0 )36.64 ( 2.16 ) 0.65 ( 0.07 ) 41.990.840.99 36.640.65
6 100 1000.1 1.000.200.94 ( 0 )16.16 ( 1.22 ) 0.47 ( 0.06 ) 21.690.7 0.94 16.160.47
7 500 1000.1 0.200.360.9 ( 0 ) 8.64 ( 1.35 ) 0.08 ( 0.03 ) 14.560.370.90 8.640.08
81000 1000.1 0.100.470.9 ( 0 ) 5.83 ( 1.4 ) 0.02 ( 0.01 ) 11.810.220.90 5.830.02
9 50 5000.110.000.011 ( 0 ) 248.06 ( 7.56 )0.56 ( 0.07 )253.500.981.00248.060.56
10 100 5000.1 5.000.031 ( 0 ) 132.04 ( 7.47 )0.33 ( 0.05 )137.710.951.00132.040.33
11 500 5000.1 1.000.340.91 ( 0 )12.55 ( 1.81 ) 0.04 ( 0.02 ) 18.510.520.91 12.550.04
121000 5000.1 0.500.690.9 ( 0 ) 3.02 ( 0.6 ) 0.01 ( 0.01 ) 9.010.220.90 3.020.01
13 5010000.120.000.011 ( 0 ) 398.98 ( 6.9 ) 0.8 ( 0.08 ) 404.180.991.00398.980.80
14 10010000.110.000.021 ( 0 ) 296.19 ( 8.29 )0.35 ( 0.05 )301.840.981.00296.190.35
15 50010000.1 2.000.390.9 ( 0 ) 10.2 ( 0.98 ) 0.1 ( 0.03 ) 16.100.520.90 10.200.10
16100010000.1 1.000.830.9 ( 0 ) 1.76 ( 0.26 ) 0.02 ( 0.01 ) 7.740.180.90 1.760.02
17 50 500.3 1.000.140.96 ( 0 )13.96 ( 0.83 ) 1.01 ( 0.09 ) 18.950.7 0.96 13.961.01
18 100 500.3 0.500.250.92 ( 0 )9.38 ( 0.67 ) 0.68 ( 0.07 ) 14.700.580.92 9.380.68
19 500 500.3 0.100.440.89 ( 0 )5.43 ( 0.9 ) 0.14 ( 0.03 ) 11.290.3 0.89 5.430.14
201000 500.3 0.050.480.88 ( 0 )5.03 ( 1 ) 0.09 ( 0.03 ) 10.940.230.88 5.030.09
21 50 1000.3 2.000.060.99 ( 0 )36.33 ( 2.24 ) 0.9 ( 0.09 ) 41.430.850.99 36.330.90
22 100 1000.3 1.000.190.93 ( 0 )16.08 ( 0.95 ) 0.75 ( 0.07 ) 21.330.720.93 16.080.75
23 500 1000.3 0.200.370.89 ( 0 )8.66 ( 1.15 ) 0.11 ( 0.03 ) 14.550.420.89 8.660.11
241000 1000.3 0.100.390.88 ( 0 )8.45 ( 1.17 ) 0.12 ( 0.03 ) 14.330.390.88 8.450.12
25 50 5000.310.000.011 ( 0 ) 228.37 ( 7.07 )0.6 ( 0.08 ) 233.770.971.00228.370.60
26 100 5000.3 5.000.040.99 ( 0 )114.53 ( 5.78 )0.43 ( 0.06 )120.100.940.99114.530.43
27 500 5000.3 1.000.310.89 ( 0 )13.64 ( 2.08 ) 0.2 ( 0.04 ) 19.440.570.89 13.640.20
281000 5000.3 0.500.540.88 ( 0 )6.3 ( 1.15 ) 0.09 ( 0.04 ) 12.210.380.88 6.300.09
29 5010000.320.000.011 ( 0 ) 412.73 ( 7.91 )0.88 ( 0.1 ) 417.850.991.00412.730.88
30 10010000.310.000.021 ( 0 ) 279.68 ( 7.94 )0.45 ( 0.07 )285.230.981.00279.680.45
51 500 500.7 0.100.670.86 ( 0 ) 1.32 ( 0.25 ) 2.42 ( 0.06 ) 4.900.190.86 1.322.42
521000 500.7 0.050.740.85 ( 0 ) 0.84 ( 0.14 ) 2.48 ( 0.06 ) 4.360.130.85 0.842.48
53 50 1000.7 2.000.070.96 ( 0 ) 24.54 ( 1.62 ) 2.08 ( 0.11 ) 28.460.840.96 24.542.08
54 100 1000.7 1.000.160.89 ( 0 ) 14.69 ( 1.28 ) 1.85 ( 0.08 ) 18.840.710.89 14.691.85
55 500 1000.7 0.200.550.86 ( 0 ) 2.19 ( 0.64 ) 2.33 ( 0.07 ) 5.860.180.86 2.192.33
561000 1000.7 0.100.810.85 ( 0 ) 0.51 ( 0.1 ) 2.56 ( 0.05 ) 3.950.090.85 0.512.56
57 50 5000.710.000.021 ( 0 ) 161.23 ( 7.83 ) 1.29 ( 0.1 ) 165.940.961.00161.231.29
58 100 5000.7 5.000.060.96 ( 0 ) 60.05 ( 4.29 ) 1.63 ( 0.12 ) 64.420.920.96 60.051.63
59 500 5000.7 1.000.500.85 ( 0 ) 3.12 ( 1.31 ) 2.68 ( 0.07 ) 6.440.190.85 3.122.68
601000 5000.7 0.500.890.85 ( 0 ) 0.39 ( 0.06 ) 2.88 ( 0.04 ) 3.510.090.85 0.392.88
61 5010000.720.000.011 ( 0 ) 363.91 ( 11.45 )1.39 ( 0.1 ) 368.520.991.00363.911.39
62 10010000.710.000.030.99 ( 0 ) 145.9 ( 7.62 ) 1.24 ( 0.11 )150.660.960.99145.901.24
63 50010000.7 2.000.610.85 ( 0 ) 2.38 ( 0.4 ) 2.7 ( 0.06 ) 5.680.270.85 2.382.70
64100010000.7 1.000.870.85 ( 0 ) 0.65 ( 0.08 ) 2.87 ( 0.04 ) 3.780.140.85 0.652.87
65 50 500.9 1.000.140.84 ( 0.01 )9.98 ( 0.78 ) 2.68 ( 0.11 ) 13.300.7 0.84 9.982.68
66 100 500.9 0.500.250.8 ( 0 ) 6.57 ( 0.7 ) 2.73 ( 0.09 ) 9.840.580.80 6.572.73
67 500 500.9 0.100.520.8 ( 0 ) 2.9 ( 0.5 ) 2.75 ( 0.07 ) 6.150.330.80 2.902.75
681000 500.9 0.050.700.8 ( 0 ) 1.88 ( 0.19 ) 2.79 ( 0.05 ) 5.090.3 0.80 1.882.79
69 50 1000.9 2.000.100.87 ( 0.01 )15.93 ( 1 ) 2.88 ( 0.1 ) 19.050.810.87 15.932.88
70 100 1000.9 1.000.140.81 ( 0 ) 14.34 ( 1.4 ) 2.75 ( 0.1 ) 17.590.730.81 14.342.75
71 500 1000.9 0.200.560.8 ( 0 ) 3.51 ( 0.44 ) 2.86 ( 0.04 ) 6.650.4 0.80 3.512.86
721000 1000.9 0.100.570.8 ( 0 ) 3.18 ( 0.59 ) 2.86 ( 0.04 ) 6.320.340.80 3.182.86
73 50 5000.910.000.020.99 ( 0 ) 95.52 ( 6.42 ) 2.37 ( 0.15 ) 99.150.950.99 95.522.37
74 100 5000.9 5.000.040.88 ( 0 ) 53.08 ( 3.93 ) 2.8 ( 0.12 ) 56.280.930.88 53.082.80
75 500 5000.9 1.000.400.79 ( 0 ) 6.75 ( 0.73 ) 2.76 ( 0.07 ) 9.990.560.79 6.752.76
761000 5000.9 0.500.730.8 ( 0 ) 2.48 ( 0.28 ) 2.79 ( 0.05 ) 5.690.370.80 2.482.79
77 5010000.920.000.011 ( 0 ) 201.98 ( 10.15 )2.34 ( 0.16 )205.640.981.00201.982.34
78 10010000.910.000.030.95 ( 0 ) 70.81 ( 4.4 ) 3.05 ( 0.12 ) 73.760.960.95 70.813.05
79 50010000.9 2.000.380.79 ( 0 ) 7.71 ( 1.09 ) 2.85 ( 0.06 ) 10.860.590.79 7.712.85
80100010000.9 1.000.760.8 ( 0 ) 2.41 ( 0.17 ) 2.77 ( 0.07 ) 5.640.390.80 2.412.77
\n" + ], + "text/latex": [ + "A data.frame: 80 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1.00 & 0.13 & 0.97 ( 0 ) & 14.84 ( 0.9 ) & 0.93 ( 0.09 ) & 19.91 & 0.7 & 0.97 & 14.84 & 0.93\\\\\n", + "\t2 & 100 & 50 & 0.1 & 0.50 & 0.33 & 0.93 ( 0 ) & 7.19 ( 0.43 ) & 0.49 ( 0.07 ) & 12.70 & 0.53 & 0.93 & 7.19 & 0.49\\\\\n", + "\t3 & 500 & 50 & 0.1 & 0.10 & 0.70 & 0.9 ( 0 ) & 1.93 ( 0.34 ) & 0.16 ( 0.04 ) & 7.77 & 0.16 & 0.90 & 1.93 & 0.16\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 0.05 & 0.79 & 0.9 ( 0 ) & 1.37 ( 0.42 ) & 0.01 ( 0.01 ) & 7.36 & 0.1 & 0.90 & 1.37 & 0.01\\\\\n", + "\t5 & 50 & 100 & 0.1 & 2.00 & 0.07 & 0.99 ( 0 ) & 36.64 ( 2.16 ) & 0.65 ( 0.07 ) & 41.99 & 0.84 & 0.99 & 36.64 & 0.65\\\\\n", + "\t6 & 100 & 100 & 0.1 & 1.00 & 0.20 & 0.94 ( 0 ) & 16.16 ( 1.22 ) & 0.47 ( 0.06 ) & 21.69 & 0.7 & 0.94 & 16.16 & 0.47\\\\\n", + "\t7 & 500 & 100 & 0.1 & 0.20 & 0.36 & 0.9 ( 0 ) & 8.64 ( 1.35 ) & 0.08 ( 0.03 ) & 14.56 & 0.37 & 0.90 & 8.64 & 0.08\\\\\n", + "\t8 & 1000 & 100 & 0.1 & 0.10 & 0.47 & 0.9 ( 0 ) & 5.83 ( 1.4 ) & 0.02 ( 0.01 ) & 11.81 & 0.22 & 0.90 & 5.83 & 0.02\\\\\n", + "\t9 & 50 & 500 & 0.1 & 10.00 & 0.01 & 1 ( 0 ) & 248.06 ( 7.56 ) & 0.56 ( 0.07 ) & 253.50 & 0.98 & 1.00 & 248.06 & 0.56\\\\\n", + "\t10 & 100 & 500 & 0.1 & 5.00 & 0.03 & 1 ( 0 ) & 132.04 ( 7.47 ) & 0.33 ( 0.05 ) & 137.71 & 0.95 & 1.00 & 132.04 & 0.33\\\\\n", + "\t11 & 500 & 500 & 0.1 & 1.00 & 0.34 & 0.91 ( 0 ) & 12.55 ( 1.81 ) & 0.04 ( 0.02 ) & 18.51 & 0.52 & 0.91 & 12.55 & 0.04\\\\\n", + "\t12 & 1000 & 500 & 0.1 & 0.50 & 0.69 & 0.9 ( 0 ) & 3.02 ( 0.6 ) & 0.01 ( 0.01 ) & 9.01 & 0.22 & 0.90 & 3.02 & 0.01\\\\\n", + "\t13 & 50 & 1000 & 0.1 & 20.00 & 0.01 & 1 ( 0 ) & 398.98 ( 6.9 ) & 0.8 ( 0.08 ) & 404.18 & 0.99 & 1.00 & 398.98 & 0.80\\\\\n", + "\t14 & 100 & 1000 & 0.1 & 10.00 & 0.02 & 1 ( 0 ) & 296.19 ( 8.29 ) & 0.35 ( 0.05 ) & 301.84 & 0.98 & 1.00 & 296.19 & 0.35\\\\\n", + "\t15 & 500 & 1000 & 0.1 & 2.00 & 0.39 & 0.9 ( 0 ) & 10.2 ( 0.98 ) & 0.1 ( 0.03 ) & 16.10 & 0.52 & 0.90 & 10.20 & 0.10\\\\\n", + "\t16 & 1000 & 1000 & 0.1 & 1.00 & 0.83 & 0.9 ( 0 ) & 1.76 ( 0.26 ) & 0.02 ( 0.01 ) & 7.74 & 0.18 & 0.90 & 1.76 & 0.02\\\\\n", + "\t17 & 50 & 50 & 0.3 & 1.00 & 0.14 & 0.96 ( 0 ) & 13.96 ( 0.83 ) & 1.01 ( 0.09 ) & 18.95 & 0.7 & 0.96 & 13.96 & 1.01\\\\\n", + "\t18 & 100 & 50 & 0.3 & 0.50 & 0.25 & 0.92 ( 0 ) & 9.38 ( 0.67 ) & 0.68 ( 0.07 ) & 14.70 & 0.58 & 0.92 & 9.38 & 0.68\\\\\n", + "\t19 & 500 & 50 & 0.3 & 0.10 & 0.44 & 0.89 ( 0 ) & 5.43 ( 0.9 ) & 0.14 ( 0.03 ) & 11.29 & 0.3 & 0.89 & 5.43 & 0.14\\\\\n", + "\t20 & 1000 & 50 & 0.3 & 0.05 & 0.48 & 0.88 ( 0 ) & 5.03 ( 1 ) & 0.09 ( 0.03 ) & 10.94 & 0.23 & 0.88 & 5.03 & 0.09\\\\\n", + "\t21 & 50 & 100 & 0.3 & 2.00 & 0.06 & 0.99 ( 0 ) & 36.33 ( 2.24 ) & 0.9 ( 0.09 ) & 41.43 & 0.85 & 0.99 & 36.33 & 0.90\\\\\n", + "\t22 & 100 & 100 & 0.3 & 1.00 & 0.19 & 0.93 ( 0 ) & 16.08 ( 0.95 ) & 0.75 ( 0.07 ) & 21.33 & 0.72 & 0.93 & 16.08 & 0.75\\\\\n", + "\t23 & 500 & 100 & 0.3 & 0.20 & 0.37 & 0.89 ( 0 ) & 8.66 ( 1.15 ) & 0.11 ( 0.03 ) & 14.55 & 0.42 & 0.89 & 8.66 & 0.11\\\\\n", + "\t24 & 1000 & 100 & 0.3 & 0.10 & 0.39 & 0.88 ( 0 ) & 8.45 ( 1.17 ) & 0.12 ( 0.03 ) & 14.33 & 0.39 & 0.88 & 8.45 & 0.12\\\\\n", + "\t25 & 50 & 500 & 0.3 & 10.00 & 0.01 & 1 ( 0 ) & 228.37 ( 7.07 ) & 0.6 ( 0.08 ) & 233.77 & 0.97 & 1.00 & 228.37 & 0.60\\\\\n", + "\t26 & 100 & 500 & 0.3 & 5.00 & 0.04 & 0.99 ( 0 ) & 114.53 ( 5.78 ) & 0.43 ( 0.06 ) & 120.10 & 0.94 & 0.99 & 114.53 & 0.43\\\\\n", + "\t27 & 500 & 500 & 0.3 & 1.00 & 0.31 & 0.89 ( 0 ) & 13.64 ( 2.08 ) & 0.2 ( 0.04 ) & 19.44 & 0.57 & 0.89 & 13.64 & 0.20\\\\\n", + "\t28 & 1000 & 500 & 0.3 & 0.50 & 0.54 & 0.88 ( 0 ) & 6.3 ( 1.15 ) & 0.09 ( 0.04 ) & 12.21 & 0.38 & 0.88 & 6.30 & 0.09\\\\\n", + "\t29 & 50 & 1000 & 0.3 & 20.00 & 0.01 & 1 ( 0 ) & 412.73 ( 7.91 ) & 0.88 ( 0.1 ) & 417.85 & 0.99 & 1.00 & 412.73 & 0.88\\\\\n", + "\t30 & 100 & 1000 & 0.3 & 10.00 & 0.02 & 1 ( 0 ) & 279.68 ( 7.94 ) & 0.45 ( 0.07 ) & 285.23 & 0.98 & 1.00 & 279.68 & 0.45\\\\\n", + "\t⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮\\\\\n", + "\t51 & 500 & 50 & 0.7 & 0.10 & 0.67 & 0.86 ( 0 ) & 1.32 ( 0.25 ) & 2.42 ( 0.06 ) & 4.90 & 0.19 & 0.86 & 1.32 & 2.42\\\\\n", + "\t52 & 1000 & 50 & 0.7 & 0.05 & 0.74 & 0.85 ( 0 ) & 0.84 ( 0.14 ) & 2.48 ( 0.06 ) & 4.36 & 0.13 & 0.85 & 0.84 & 2.48\\\\\n", + "\t53 & 50 & 100 & 0.7 & 2.00 & 0.07 & 0.96 ( 0 ) & 24.54 ( 1.62 ) & 2.08 ( 0.11 ) & 28.46 & 0.84 & 0.96 & 24.54 & 2.08\\\\\n", + "\t54 & 100 & 100 & 0.7 & 1.00 & 0.16 & 0.89 ( 0 ) & 14.69 ( 1.28 ) & 1.85 ( 0.08 ) & 18.84 & 0.71 & 0.89 & 14.69 & 1.85\\\\\n", + "\t55 & 500 & 100 & 0.7 & 0.20 & 0.55 & 0.86 ( 0 ) & 2.19 ( 0.64 ) & 2.33 ( 0.07 ) & 5.86 & 0.18 & 0.86 & 2.19 & 2.33\\\\\n", + "\t56 & 1000 & 100 & 0.7 & 0.10 & 0.81 & 0.85 ( 0 ) & 0.51 ( 0.1 ) & 2.56 ( 0.05 ) & 3.95 & 0.09 & 0.85 & 0.51 & 2.56\\\\\n", + "\t57 & 50 & 500 & 0.7 & 10.00 & 0.02 & 1 ( 0 ) & 161.23 ( 7.83 ) & 1.29 ( 0.1 ) & 165.94 & 0.96 & 1.00 & 161.23 & 1.29\\\\\n", + "\t58 & 100 & 500 & 0.7 & 5.00 & 0.06 & 0.96 ( 0 ) & 60.05 ( 4.29 ) & 1.63 ( 0.12 ) & 64.42 & 0.92 & 0.96 & 60.05 & 1.63\\\\\n", + "\t59 & 500 & 500 & 0.7 & 1.00 & 0.50 & 0.85 ( 0 ) & 3.12 ( 1.31 ) & 2.68 ( 0.07 ) & 6.44 & 0.19 & 0.85 & 3.12 & 2.68\\\\\n", + "\t60 & 1000 & 500 & 0.7 & 0.50 & 0.89 & 0.85 ( 0 ) & 0.39 ( 0.06 ) & 2.88 ( 0.04 ) & 3.51 & 0.09 & 0.85 & 0.39 & 2.88\\\\\n", + "\t61 & 50 & 1000 & 0.7 & 20.00 & 0.01 & 1 ( 0 ) & 363.91 ( 11.45 ) & 1.39 ( 0.1 ) & 368.52 & 0.99 & 1.00 & 363.91 & 1.39\\\\\n", + "\t62 & 100 & 1000 & 0.7 & 10.00 & 0.03 & 0.99 ( 0 ) & 145.9 ( 7.62 ) & 1.24 ( 0.11 ) & 150.66 & 0.96 & 0.99 & 145.90 & 1.24\\\\\n", + "\t63 & 500 & 1000 & 0.7 & 2.00 & 0.61 & 0.85 ( 0 ) & 2.38 ( 0.4 ) & 2.7 ( 0.06 ) & 5.68 & 0.27 & 0.85 & 2.38 & 2.70\\\\\n", + "\t64 & 1000 & 1000 & 0.7 & 1.00 & 0.87 & 0.85 ( 0 ) & 0.65 ( 0.08 ) & 2.87 ( 0.04 ) & 3.78 & 0.14 & 0.85 & 0.65 & 2.87\\\\\n", + "\t65 & 50 & 50 & 0.9 & 1.00 & 0.14 & 0.84 ( 0.01 ) & 9.98 ( 0.78 ) & 2.68 ( 0.11 ) & 13.30 & 0.7 & 0.84 & 9.98 & 2.68\\\\\n", + "\t66 & 100 & 50 & 0.9 & 0.50 & 0.25 & 0.8 ( 0 ) & 6.57 ( 0.7 ) & 2.73 ( 0.09 ) & 9.84 & 0.58 & 0.80 & 6.57 & 2.73\\\\\n", + "\t67 & 500 & 50 & 0.9 & 0.10 & 0.52 & 0.8 ( 0 ) & 2.9 ( 0.5 ) & 2.75 ( 0.07 ) & 6.15 & 0.33 & 0.80 & 2.90 & 2.75\\\\\n", + "\t68 & 1000 & 50 & 0.9 & 0.05 & 0.70 & 0.8 ( 0 ) & 1.88 ( 0.19 ) & 2.79 ( 0.05 ) & 5.09 & 0.3 & 0.80 & 1.88 & 2.79\\\\\n", + "\t69 & 50 & 100 & 0.9 & 2.00 & 0.10 & 0.87 ( 0.01 ) & 15.93 ( 1 ) & 2.88 ( 0.1 ) & 19.05 & 0.81 & 0.87 & 15.93 & 2.88\\\\\n", + "\t70 & 100 & 100 & 0.9 & 1.00 & 0.14 & 0.81 ( 0 ) & 14.34 ( 1.4 ) & 2.75 ( 0.1 ) & 17.59 & 0.73 & 0.81 & 14.34 & 2.75\\\\\n", + "\t71 & 500 & 100 & 0.9 & 0.20 & 0.56 & 0.8 ( 0 ) & 3.51 ( 0.44 ) & 2.86 ( 0.04 ) & 6.65 & 0.4 & 0.80 & 3.51 & 2.86\\\\\n", + "\t72 & 1000 & 100 & 0.9 & 0.10 & 0.57 & 0.8 ( 0 ) & 3.18 ( 0.59 ) & 2.86 ( 0.04 ) & 6.32 & 0.34 & 0.80 & 3.18 & 2.86\\\\\n", + "\t73 & 50 & 500 & 0.9 & 10.00 & 0.02 & 0.99 ( 0 ) & 95.52 ( 6.42 ) & 2.37 ( 0.15 ) & 99.15 & 0.95 & 0.99 & 95.52 & 2.37\\\\\n", + "\t74 & 100 & 500 & 0.9 & 5.00 & 0.04 & 0.88 ( 0 ) & 53.08 ( 3.93 ) & 2.8 ( 0.12 ) & 56.28 & 0.93 & 0.88 & 53.08 & 2.80\\\\\n", + "\t75 & 500 & 500 & 0.9 & 1.00 & 0.40 & 0.79 ( 0 ) & 6.75 ( 0.73 ) & 2.76 ( 0.07 ) & 9.99 & 0.56 & 0.79 & 6.75 & 2.76\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.50 & 0.73 & 0.8 ( 0 ) & 2.48 ( 0.28 ) & 2.79 ( 0.05 ) & 5.69 & 0.37 & 0.80 & 2.48 & 2.79\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.00 & 0.01 & 1 ( 0 ) & 201.98 ( 10.15 ) & 2.34 ( 0.16 ) & 205.64 & 0.98 & 1.00 & 201.98 & 2.34\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.00 & 0.03 & 0.95 ( 0 ) & 70.81 ( 4.4 ) & 3.05 ( 0.12 ) & 73.76 & 0.96 & 0.95 & 70.81 & 3.05\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.00 & 0.38 & 0.79 ( 0 ) & 7.71 ( 1.09 ) & 2.85 ( 0.06 ) & 10.86 & 0.59 & 0.79 & 7.71 & 2.85\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.00 & 0.76 & 0.8 ( 0 ) & 2.41 ( 0.17 ) & 2.77 ( 0.07 ) & 5.64 & 0.39 & 0.80 & 2.41 & 2.77\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 80 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1.00 | 0.13 | 0.97 ( 0 ) | 14.84 ( 0.9 ) | 0.93 ( 0.09 ) | 19.91 | 0.7 | 0.97 | 14.84 | 0.93 |\n", + "| 2 | 100 | 50 | 0.1 | 0.50 | 0.33 | 0.93 ( 0 ) | 7.19 ( 0.43 ) | 0.49 ( 0.07 ) | 12.70 | 0.53 | 0.93 | 7.19 | 0.49 |\n", + "| 3 | 500 | 50 | 0.1 | 0.10 | 0.70 | 0.9 ( 0 ) | 1.93 ( 0.34 ) | 0.16 ( 0.04 ) | 7.77 | 0.16 | 0.90 | 1.93 | 0.16 |\n", + "| 4 | 1000 | 50 | 0.1 | 0.05 | 0.79 | 0.9 ( 0 ) | 1.37 ( 0.42 ) | 0.01 ( 0.01 ) | 7.36 | 0.1 | 0.90 | 1.37 | 0.01 |\n", + "| 5 | 50 | 100 | 0.1 | 2.00 | 0.07 | 0.99 ( 0 ) | 36.64 ( 2.16 ) | 0.65 ( 0.07 ) | 41.99 | 0.84 | 0.99 | 36.64 | 0.65 |\n", + "| 6 | 100 | 100 | 0.1 | 1.00 | 0.20 | 0.94 ( 0 ) | 16.16 ( 1.22 ) | 0.47 ( 0.06 ) | 21.69 | 0.7 | 0.94 | 16.16 | 0.47 |\n", + "| 7 | 500 | 100 | 0.1 | 0.20 | 0.36 | 0.9 ( 0 ) | 8.64 ( 1.35 ) | 0.08 ( 0.03 ) | 14.56 | 0.37 | 0.90 | 8.64 | 0.08 |\n", + "| 8 | 1000 | 100 | 0.1 | 0.10 | 0.47 | 0.9 ( 0 ) | 5.83 ( 1.4 ) | 0.02 ( 0.01 ) | 11.81 | 0.22 | 0.90 | 5.83 | 0.02 |\n", + "| 9 | 50 | 500 | 0.1 | 10.00 | 0.01 | 1 ( 0 ) | 248.06 ( 7.56 ) | 0.56 ( 0.07 ) | 253.50 | 0.98 | 1.00 | 248.06 | 0.56 |\n", + "| 10 | 100 | 500 | 0.1 | 5.00 | 0.03 | 1 ( 0 ) | 132.04 ( 7.47 ) | 0.33 ( 0.05 ) | 137.71 | 0.95 | 1.00 | 132.04 | 0.33 |\n", + "| 11 | 500 | 500 | 0.1 | 1.00 | 0.34 | 0.91 ( 0 ) | 12.55 ( 1.81 ) | 0.04 ( 0.02 ) | 18.51 | 0.52 | 0.91 | 12.55 | 0.04 |\n", + "| 12 | 1000 | 500 | 0.1 | 0.50 | 0.69 | 0.9 ( 0 ) | 3.02 ( 0.6 ) | 0.01 ( 0.01 ) | 9.01 | 0.22 | 0.90 | 3.02 | 0.01 |\n", + "| 13 | 50 | 1000 | 0.1 | 20.00 | 0.01 | 1 ( 0 ) | 398.98 ( 6.9 ) | 0.8 ( 0.08 ) | 404.18 | 0.99 | 1.00 | 398.98 | 0.80 |\n", + "| 14 | 100 | 1000 | 0.1 | 10.00 | 0.02 | 1 ( 0 ) | 296.19 ( 8.29 ) | 0.35 ( 0.05 ) | 301.84 | 0.98 | 1.00 | 296.19 | 0.35 |\n", + "| 15 | 500 | 1000 | 0.1 | 2.00 | 0.39 | 0.9 ( 0 ) | 10.2 ( 0.98 ) | 0.1 ( 0.03 ) | 16.10 | 0.52 | 0.90 | 10.20 | 0.10 |\n", + "| 16 | 1000 | 1000 | 0.1 | 1.00 | 0.83 | 0.9 ( 0 ) | 1.76 ( 0.26 ) | 0.02 ( 0.01 ) | 7.74 | 0.18 | 0.90 | 1.76 | 0.02 |\n", + "| 17 | 50 | 50 | 0.3 | 1.00 | 0.14 | 0.96 ( 0 ) | 13.96 ( 0.83 ) | 1.01 ( 0.09 ) | 18.95 | 0.7 | 0.96 | 13.96 | 1.01 |\n", + "| 18 | 100 | 50 | 0.3 | 0.50 | 0.25 | 0.92 ( 0 ) | 9.38 ( 0.67 ) | 0.68 ( 0.07 ) | 14.70 | 0.58 | 0.92 | 9.38 | 0.68 |\n", + "| 19 | 500 | 50 | 0.3 | 0.10 | 0.44 | 0.89 ( 0 ) | 5.43 ( 0.9 ) | 0.14 ( 0.03 ) | 11.29 | 0.3 | 0.89 | 5.43 | 0.14 |\n", + "| 20 | 1000 | 50 | 0.3 | 0.05 | 0.48 | 0.88 ( 0 ) | 5.03 ( 1 ) | 0.09 ( 0.03 ) | 10.94 | 0.23 | 0.88 | 5.03 | 0.09 |\n", + "| 21 | 50 | 100 | 0.3 | 2.00 | 0.06 | 0.99 ( 0 ) | 36.33 ( 2.24 ) | 0.9 ( 0.09 ) | 41.43 | 0.85 | 0.99 | 36.33 | 0.90 |\n", + "| 22 | 100 | 100 | 0.3 | 1.00 | 0.19 | 0.93 ( 0 ) | 16.08 ( 0.95 ) | 0.75 ( 0.07 ) | 21.33 | 0.72 | 0.93 | 16.08 | 0.75 |\n", + "| 23 | 500 | 100 | 0.3 | 0.20 | 0.37 | 0.89 ( 0 ) | 8.66 ( 1.15 ) | 0.11 ( 0.03 ) | 14.55 | 0.42 | 0.89 | 8.66 | 0.11 |\n", + "| 24 | 1000 | 100 | 0.3 | 0.10 | 0.39 | 0.88 ( 0 ) | 8.45 ( 1.17 ) | 0.12 ( 0.03 ) | 14.33 | 0.39 | 0.88 | 8.45 | 0.12 |\n", + "| 25 | 50 | 500 | 0.3 | 10.00 | 0.01 | 1 ( 0 ) | 228.37 ( 7.07 ) | 0.6 ( 0.08 ) | 233.77 | 0.97 | 1.00 | 228.37 | 0.60 |\n", + "| 26 | 100 | 500 | 0.3 | 5.00 | 0.04 | 0.99 ( 0 ) | 114.53 ( 5.78 ) | 0.43 ( 0.06 ) | 120.10 | 0.94 | 0.99 | 114.53 | 0.43 |\n", + "| 27 | 500 | 500 | 0.3 | 1.00 | 0.31 | 0.89 ( 0 ) | 13.64 ( 2.08 ) | 0.2 ( 0.04 ) | 19.44 | 0.57 | 0.89 | 13.64 | 0.20 |\n", + "| 28 | 1000 | 500 | 0.3 | 0.50 | 0.54 | 0.88 ( 0 ) | 6.3 ( 1.15 ) | 0.09 ( 0.04 ) | 12.21 | 0.38 | 0.88 | 6.30 | 0.09 |\n", + "| 29 | 50 | 1000 | 0.3 | 20.00 | 0.01 | 1 ( 0 ) | 412.73 ( 7.91 ) | 0.88 ( 0.1 ) | 417.85 | 0.99 | 1.00 | 412.73 | 0.88 |\n", + "| 30 | 100 | 1000 | 0.3 | 10.00 | 0.02 | 1 ( 0 ) | 279.68 ( 7.94 ) | 0.45 ( 0.07 ) | 285.23 | 0.98 | 1.00 | 279.68 | 0.45 |\n", + "| ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ |\n", + "| 51 | 500 | 50 | 0.7 | 0.10 | 0.67 | 0.86 ( 0 ) | 1.32 ( 0.25 ) | 2.42 ( 0.06 ) | 4.90 | 0.19 | 0.86 | 1.32 | 2.42 |\n", + "| 52 | 1000 | 50 | 0.7 | 0.05 | 0.74 | 0.85 ( 0 ) | 0.84 ( 0.14 ) | 2.48 ( 0.06 ) | 4.36 | 0.13 | 0.85 | 0.84 | 2.48 |\n", + "| 53 | 50 | 100 | 0.7 | 2.00 | 0.07 | 0.96 ( 0 ) | 24.54 ( 1.62 ) | 2.08 ( 0.11 ) | 28.46 | 0.84 | 0.96 | 24.54 | 2.08 |\n", + "| 54 | 100 | 100 | 0.7 | 1.00 | 0.16 | 0.89 ( 0 ) | 14.69 ( 1.28 ) | 1.85 ( 0.08 ) | 18.84 | 0.71 | 0.89 | 14.69 | 1.85 |\n", + "| 55 | 500 | 100 | 0.7 | 0.20 | 0.55 | 0.86 ( 0 ) | 2.19 ( 0.64 ) | 2.33 ( 0.07 ) | 5.86 | 0.18 | 0.86 | 2.19 | 2.33 |\n", + "| 56 | 1000 | 100 | 0.7 | 0.10 | 0.81 | 0.85 ( 0 ) | 0.51 ( 0.1 ) | 2.56 ( 0.05 ) | 3.95 | 0.09 | 0.85 | 0.51 | 2.56 |\n", + "| 57 | 50 | 500 | 0.7 | 10.00 | 0.02 | 1 ( 0 ) | 161.23 ( 7.83 ) | 1.29 ( 0.1 ) | 165.94 | 0.96 | 1.00 | 161.23 | 1.29 |\n", + "| 58 | 100 | 500 | 0.7 | 5.00 | 0.06 | 0.96 ( 0 ) | 60.05 ( 4.29 ) | 1.63 ( 0.12 ) | 64.42 | 0.92 | 0.96 | 60.05 | 1.63 |\n", + "| 59 | 500 | 500 | 0.7 | 1.00 | 0.50 | 0.85 ( 0 ) | 3.12 ( 1.31 ) | 2.68 ( 0.07 ) | 6.44 | 0.19 | 0.85 | 3.12 | 2.68 |\n", + "| 60 | 1000 | 500 | 0.7 | 0.50 | 0.89 | 0.85 ( 0 ) | 0.39 ( 0.06 ) | 2.88 ( 0.04 ) | 3.51 | 0.09 | 0.85 | 0.39 | 2.88 |\n", + "| 61 | 50 | 1000 | 0.7 | 20.00 | 0.01 | 1 ( 0 ) | 363.91 ( 11.45 ) | 1.39 ( 0.1 ) | 368.52 | 0.99 | 1.00 | 363.91 | 1.39 |\n", + "| 62 | 100 | 1000 | 0.7 | 10.00 | 0.03 | 0.99 ( 0 ) | 145.9 ( 7.62 ) | 1.24 ( 0.11 ) | 150.66 | 0.96 | 0.99 | 145.90 | 1.24 |\n", + "| 63 | 500 | 1000 | 0.7 | 2.00 | 0.61 | 0.85 ( 0 ) | 2.38 ( 0.4 ) | 2.7 ( 0.06 ) | 5.68 | 0.27 | 0.85 | 2.38 | 2.70 |\n", + "| 64 | 1000 | 1000 | 0.7 | 1.00 | 0.87 | 0.85 ( 0 ) | 0.65 ( 0.08 ) | 2.87 ( 0.04 ) | 3.78 | 0.14 | 0.85 | 0.65 | 2.87 |\n", + "| 65 | 50 | 50 | 0.9 | 1.00 | 0.14 | 0.84 ( 0.01 ) | 9.98 ( 0.78 ) | 2.68 ( 0.11 ) | 13.30 | 0.7 | 0.84 | 9.98 | 2.68 |\n", + "| 66 | 100 | 50 | 0.9 | 0.50 | 0.25 | 0.8 ( 0 ) | 6.57 ( 0.7 ) | 2.73 ( 0.09 ) | 9.84 | 0.58 | 0.80 | 6.57 | 2.73 |\n", + "| 67 | 500 | 50 | 0.9 | 0.10 | 0.52 | 0.8 ( 0 ) | 2.9 ( 0.5 ) | 2.75 ( 0.07 ) | 6.15 | 0.33 | 0.80 | 2.90 | 2.75 |\n", + "| 68 | 1000 | 50 | 0.9 | 0.05 | 0.70 | 0.8 ( 0 ) | 1.88 ( 0.19 ) | 2.79 ( 0.05 ) | 5.09 | 0.3 | 0.80 | 1.88 | 2.79 |\n", + "| 69 | 50 | 100 | 0.9 | 2.00 | 0.10 | 0.87 ( 0.01 ) | 15.93 ( 1 ) | 2.88 ( 0.1 ) | 19.05 | 0.81 | 0.87 | 15.93 | 2.88 |\n", + "| 70 | 100 | 100 | 0.9 | 1.00 | 0.14 | 0.81 ( 0 ) | 14.34 ( 1.4 ) | 2.75 ( 0.1 ) | 17.59 | 0.73 | 0.81 | 14.34 | 2.75 |\n", + "| 71 | 500 | 100 | 0.9 | 0.20 | 0.56 | 0.8 ( 0 ) | 3.51 ( 0.44 ) | 2.86 ( 0.04 ) | 6.65 | 0.4 | 0.80 | 3.51 | 2.86 |\n", + "| 72 | 1000 | 100 | 0.9 | 0.10 | 0.57 | 0.8 ( 0 ) | 3.18 ( 0.59 ) | 2.86 ( 0.04 ) | 6.32 | 0.34 | 0.80 | 3.18 | 2.86 |\n", + "| 73 | 50 | 500 | 0.9 | 10.00 | 0.02 | 0.99 ( 0 ) | 95.52 ( 6.42 ) | 2.37 ( 0.15 ) | 99.15 | 0.95 | 0.99 | 95.52 | 2.37 |\n", + "| 74 | 100 | 500 | 0.9 | 5.00 | 0.04 | 0.88 ( 0 ) | 53.08 ( 3.93 ) | 2.8 ( 0.12 ) | 56.28 | 0.93 | 0.88 | 53.08 | 2.80 |\n", + "| 75 | 500 | 500 | 0.9 | 1.00 | 0.40 | 0.79 ( 0 ) | 6.75 ( 0.73 ) | 2.76 ( 0.07 ) | 9.99 | 0.56 | 0.79 | 6.75 | 2.76 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.50 | 0.73 | 0.8 ( 0 ) | 2.48 ( 0.28 ) | 2.79 ( 0.05 ) | 5.69 | 0.37 | 0.80 | 2.48 | 2.79 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.00 | 0.01 | 1 ( 0 ) | 201.98 ( 10.15 ) | 2.34 ( 0.16 ) | 205.64 | 0.98 | 1.00 | 201.98 | 2.34 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.00 | 0.03 | 0.95 ( 0 ) | 70.81 ( 4.4 ) | 3.05 ( 0.12 ) | 73.76 | 0.96 | 0.95 | 70.81 | 3.05 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.00 | 0.38 | 0.79 ( 0 ) | 7.71 ( 1.09 ) | 2.85 ( 0.06 ) | 10.86 | 0.59 | 0.79 | 7.71 | 2.85 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.00 | 0.76 | 0.8 ( 0 ) | 2.41 ( 0.17 ) | 2.77 ( 0.07 ) | 5.64 | 0.39 | 0.80 | 2.41 | 2.77 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "1 50 50 0.1 1.00 0.13 0.97 ( 0 ) 14.84 ( 0.9 ) 0.93 ( 0.09 )\n", + "2 100 50 0.1 0.50 0.33 0.93 ( 0 ) 7.19 ( 0.43 ) 0.49 ( 0.07 )\n", + "3 500 50 0.1 0.10 0.70 0.9 ( 0 ) 1.93 ( 0.34 ) 0.16 ( 0.04 )\n", + "4 1000 50 0.1 0.05 0.79 0.9 ( 0 ) 1.37 ( 0.42 ) 0.01 ( 0.01 )\n", + "5 50 100 0.1 2.00 0.07 0.99 ( 0 ) 36.64 ( 2.16 ) 0.65 ( 0.07 )\n", + "6 100 100 0.1 1.00 0.20 0.94 ( 0 ) 16.16 ( 1.22 ) 0.47 ( 0.06 )\n", + "7 500 100 0.1 0.20 0.36 0.9 ( 0 ) 8.64 ( 1.35 ) 0.08 ( 0.03 )\n", + "8 1000 100 0.1 0.10 0.47 0.9 ( 0 ) 5.83 ( 1.4 ) 0.02 ( 0.01 )\n", + "9 50 500 0.1 10.00 0.01 1 ( 0 ) 248.06 ( 7.56 ) 0.56 ( 0.07 )\n", + "10 100 500 0.1 5.00 0.03 1 ( 0 ) 132.04 ( 7.47 ) 0.33 ( 0.05 )\n", + "11 500 500 0.1 1.00 0.34 0.91 ( 0 ) 12.55 ( 1.81 ) 0.04 ( 0.02 )\n", + "12 1000 500 0.1 0.50 0.69 0.9 ( 0 ) 3.02 ( 0.6 ) 0.01 ( 0.01 )\n", + "13 50 1000 0.1 20.00 0.01 1 ( 0 ) 398.98 ( 6.9 ) 0.8 ( 0.08 ) \n", + "14 100 1000 0.1 10.00 0.02 1 ( 0 ) 296.19 ( 8.29 ) 0.35 ( 0.05 )\n", + "15 500 1000 0.1 2.00 0.39 0.9 ( 0 ) 10.2 ( 0.98 ) 0.1 ( 0.03 ) \n", + "16 1000 1000 0.1 1.00 0.83 0.9 ( 0 ) 1.76 ( 0.26 ) 0.02 ( 0.01 )\n", + "17 50 50 0.3 1.00 0.14 0.96 ( 0 ) 13.96 ( 0.83 ) 1.01 ( 0.09 )\n", + "18 100 50 0.3 0.50 0.25 0.92 ( 0 ) 9.38 ( 0.67 ) 0.68 ( 0.07 )\n", + "19 500 50 0.3 0.10 0.44 0.89 ( 0 ) 5.43 ( 0.9 ) 0.14 ( 0.03 )\n", + "20 1000 50 0.3 0.05 0.48 0.88 ( 0 ) 5.03 ( 1 ) 0.09 ( 0.03 )\n", + "21 50 100 0.3 2.00 0.06 0.99 ( 0 ) 36.33 ( 2.24 ) 0.9 ( 0.09 ) \n", + "22 100 100 0.3 1.00 0.19 0.93 ( 0 ) 16.08 ( 0.95 ) 0.75 ( 0.07 )\n", + "23 500 100 0.3 0.20 0.37 0.89 ( 0 ) 8.66 ( 1.15 ) 0.11 ( 0.03 )\n", + "24 1000 100 0.3 0.10 0.39 0.88 ( 0 ) 8.45 ( 1.17 ) 0.12 ( 0.03 )\n", + "25 50 500 0.3 10.00 0.01 1 ( 0 ) 228.37 ( 7.07 ) 0.6 ( 0.08 ) \n", + "26 100 500 0.3 5.00 0.04 0.99 ( 0 ) 114.53 ( 5.78 ) 0.43 ( 0.06 )\n", + "27 500 500 0.3 1.00 0.31 0.89 ( 0 ) 13.64 ( 2.08 ) 0.2 ( 0.04 ) \n", + "28 1000 500 0.3 0.50 0.54 0.88 ( 0 ) 6.3 ( 1.15 ) 0.09 ( 0.04 )\n", + "29 50 1000 0.3 20.00 0.01 1 ( 0 ) 412.73 ( 7.91 ) 0.88 ( 0.1 ) \n", + "30 100 1000 0.3 10.00 0.02 1 ( 0 ) 279.68 ( 7.94 ) 0.45 ( 0.07 )\n", + "⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ \n", + "51 500 50 0.7 0.10 0.67 0.86 ( 0 ) 1.32 ( 0.25 ) 2.42 ( 0.06 )\n", + "52 1000 50 0.7 0.05 0.74 0.85 ( 0 ) 0.84 ( 0.14 ) 2.48 ( 0.06 )\n", + "53 50 100 0.7 2.00 0.07 0.96 ( 0 ) 24.54 ( 1.62 ) 2.08 ( 0.11 )\n", + "54 100 100 0.7 1.00 0.16 0.89 ( 0 ) 14.69 ( 1.28 ) 1.85 ( 0.08 )\n", + "55 500 100 0.7 0.20 0.55 0.86 ( 0 ) 2.19 ( 0.64 ) 2.33 ( 0.07 )\n", + "56 1000 100 0.7 0.10 0.81 0.85 ( 0 ) 0.51 ( 0.1 ) 2.56 ( 0.05 )\n", + "57 50 500 0.7 10.00 0.02 1 ( 0 ) 161.23 ( 7.83 ) 1.29 ( 0.1 ) \n", + "58 100 500 0.7 5.00 0.06 0.96 ( 0 ) 60.05 ( 4.29 ) 1.63 ( 0.12 )\n", + "59 500 500 0.7 1.00 0.50 0.85 ( 0 ) 3.12 ( 1.31 ) 2.68 ( 0.07 )\n", + "60 1000 500 0.7 0.50 0.89 0.85 ( 0 ) 0.39 ( 0.06 ) 2.88 ( 0.04 )\n", + "61 50 1000 0.7 20.00 0.01 1 ( 0 ) 363.91 ( 11.45 ) 1.39 ( 0.1 ) \n", + "62 100 1000 0.7 10.00 0.03 0.99 ( 0 ) 145.9 ( 7.62 ) 1.24 ( 0.11 )\n", + "63 500 1000 0.7 2.00 0.61 0.85 ( 0 ) 2.38 ( 0.4 ) 2.7 ( 0.06 ) \n", + "64 1000 1000 0.7 1.00 0.87 0.85 ( 0 ) 0.65 ( 0.08 ) 2.87 ( 0.04 )\n", + "65 50 50 0.9 1.00 0.14 0.84 ( 0.01 ) 9.98 ( 0.78 ) 2.68 ( 0.11 )\n", + "66 100 50 0.9 0.50 0.25 0.8 ( 0 ) 6.57 ( 0.7 ) 2.73 ( 0.09 )\n", + "67 500 50 0.9 0.10 0.52 0.8 ( 0 ) 2.9 ( 0.5 ) 2.75 ( 0.07 )\n", + "68 1000 50 0.9 0.05 0.70 0.8 ( 0 ) 1.88 ( 0.19 ) 2.79 ( 0.05 )\n", + "69 50 100 0.9 2.00 0.10 0.87 ( 0.01 ) 15.93 ( 1 ) 2.88 ( 0.1 ) \n", + "70 100 100 0.9 1.00 0.14 0.81 ( 0 ) 14.34 ( 1.4 ) 2.75 ( 0.1 ) \n", + "71 500 100 0.9 0.20 0.56 0.8 ( 0 ) 3.51 ( 0.44 ) 2.86 ( 0.04 )\n", + "72 1000 100 0.9 0.10 0.57 0.8 ( 0 ) 3.18 ( 0.59 ) 2.86 ( 0.04 )\n", + "73 50 500 0.9 10.00 0.02 0.99 ( 0 ) 95.52 ( 6.42 ) 2.37 ( 0.15 )\n", + "74 100 500 0.9 5.00 0.04 0.88 ( 0 ) 53.08 ( 3.93 ) 2.8 ( 0.12 ) \n", + "75 500 500 0.9 1.00 0.40 0.79 ( 0 ) 6.75 ( 0.73 ) 2.76 ( 0.07 )\n", + "76 1000 500 0.9 0.50 0.73 0.8 ( 0 ) 2.48 ( 0.28 ) 2.79 ( 0.05 )\n", + "77 50 1000 0.9 20.00 0.01 1 ( 0 ) 201.98 ( 10.15 ) 2.34 ( 0.16 )\n", + "78 100 1000 0.9 10.00 0.03 0.95 ( 0 ) 70.81 ( 4.4 ) 3.05 ( 0.12 )\n", + "79 500 1000 0.9 2.00 0.38 0.79 ( 0 ) 7.71 ( 1.09 ) 2.85 ( 0.06 )\n", + "80 1000 1000 0.9 1.00 0.76 0.8 ( 0 ) 2.41 ( 0.17 ) 2.77 ( 0.07 )\n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "1 19.91 0.7 0.97 14.84 0.93 \n", + "2 12.70 0.53 0.93 7.19 0.49 \n", + "3 7.77 0.16 0.90 1.93 0.16 \n", + "4 7.36 0.1 0.90 1.37 0.01 \n", + "5 41.99 0.84 0.99 36.64 0.65 \n", + "6 21.69 0.7 0.94 16.16 0.47 \n", + "7 14.56 0.37 0.90 8.64 0.08 \n", + "8 11.81 0.22 0.90 5.83 0.02 \n", + "9 253.50 0.98 1.00 248.06 0.56 \n", + "10 137.71 0.95 1.00 132.04 0.33 \n", + "11 18.51 0.52 0.91 12.55 0.04 \n", + "12 9.01 0.22 0.90 3.02 0.01 \n", + "13 404.18 0.99 1.00 398.98 0.80 \n", + "14 301.84 0.98 1.00 296.19 0.35 \n", + "15 16.10 0.52 0.90 10.20 0.10 \n", + "16 7.74 0.18 0.90 1.76 0.02 \n", + "17 18.95 0.7 0.96 13.96 1.01 \n", + "18 14.70 0.58 0.92 9.38 0.68 \n", + "19 11.29 0.3 0.89 5.43 0.14 \n", + "20 10.94 0.23 0.88 5.03 0.09 \n", + "21 41.43 0.85 0.99 36.33 0.90 \n", + "22 21.33 0.72 0.93 16.08 0.75 \n", + "23 14.55 0.42 0.89 8.66 0.11 \n", + "24 14.33 0.39 0.88 8.45 0.12 \n", + "25 233.77 0.97 1.00 228.37 0.60 \n", + "26 120.10 0.94 0.99 114.53 0.43 \n", + "27 19.44 0.57 0.89 13.64 0.20 \n", + "28 12.21 0.38 0.88 6.30 0.09 \n", + "29 417.85 0.99 1.00 412.73 0.88 \n", + "30 285.23 0.98 1.00 279.68 0.45 \n", + "⋮ ⋮ ⋮ ⋮ ⋮ ⋮ \n", + "51 4.90 0.19 0.86 1.32 2.42 \n", + "52 4.36 0.13 0.85 0.84 2.48 \n", + "53 28.46 0.84 0.96 24.54 2.08 \n", + "54 18.84 0.71 0.89 14.69 1.85 \n", + "55 5.86 0.18 0.86 2.19 2.33 \n", + "56 3.95 0.09 0.85 0.51 2.56 \n", + "57 165.94 0.96 1.00 161.23 1.29 \n", + "58 64.42 0.92 0.96 60.05 1.63 \n", + "59 6.44 0.19 0.85 3.12 2.68 \n", + "60 3.51 0.09 0.85 0.39 2.88 \n", + "61 368.52 0.99 1.00 363.91 1.39 \n", + "62 150.66 0.96 0.99 145.90 1.24 \n", + "63 5.68 0.27 0.85 2.38 2.70 \n", + "64 3.78 0.14 0.85 0.65 2.87 \n", + "65 13.30 0.7 0.84 9.98 2.68 \n", + "66 9.84 0.58 0.80 6.57 2.73 \n", + "67 6.15 0.33 0.80 2.90 2.75 \n", + "68 5.09 0.3 0.80 1.88 2.79 \n", + "69 19.05 0.81 0.87 15.93 2.88 \n", + "70 17.59 0.73 0.81 14.34 2.75 \n", + "71 6.65 0.4 0.80 3.51 2.86 \n", + "72 6.32 0.34 0.80 3.18 2.86 \n", + "73 99.15 0.95 0.99 95.52 2.37 \n", + "74 56.28 0.93 0.88 53.08 2.80 \n", + "75 9.99 0.56 0.79 6.75 2.76 \n", + "76 5.69 0.37 0.80 2.48 2.79 \n", + "77 205.64 0.98 1.00 201.98 2.34 \n", + "78 73.76 0.96 0.95 70.81 3.05 \n", + "79 10.86 0.59 0.79 7.71 2.85 \n", + "80 5.64 0.39 0.80 2.41 2.77 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_toe\n", + "\n", + "## export\n", + "write.table(result.table_toe, '../results_summary_bin/sim_toe_GencompLasso_binary.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_bin/2.1_sim_block_lasso_binary_update.ipynb b/simulations/notebooks_sim_bin/2.1_sim_block_lasso_binary_update.ipynb new file mode 100644 index 0000000..484e80b --- /dev/null +++ b/simulations/notebooks_sim_bin/2.1_sim_block_lasso_binary_update.ipynb @@ -0,0 +1,971 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize lasso results on Block Simulation Scenarios for binary outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "rou.list = seq(0.1, 0.9, 0.2)\n", + "files = NULL\n", + "for (rou in rou.list){\n", + " for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_block_corr', rou, paste('P', p, 'N', n, sep='_'), '.RData', sep=''))\n", + " }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "80" + ], + "text/latex": [ + "80" + ], + "text/markdown": [ + "80" + ], + "text/plain": [ + "[1] 80" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "length(files)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1] \"indx: 1\"\n", + "[1] \"indx: 2\"\n", + "[1] \"indx: 3\"\n", + "[1] \"indx: 4\"\n", + "[1] \"indx: 5\"\n", + "[1] \"indx: 6\"\n", + "[1] \"indx: 7\"\n", + "[1] \"indx: 8\"\n", + "[1] \"indx: 9\"\n", + "[1] \"indx: 10\"\n", + "[1] \"indx: 11\"\n", + "[1] \"indx: 12\"\n", + "[1] \"indx: 13\"\n", + "[1] \"indx: 14\"\n", + "[1] \"indx: 15\"\n", + "[1] \"indx: 16\"\n", + "[1] \"indx: 17\"\n", + "[1] \"indx: 18\"\n", + "[1] \"indx: 19\"\n", + "[1] \"indx: 20\"\n", + "[1] \"indx: 21\"\n", + "[1] \"indx: 22\"\n", + "[1] \"indx: 23\"\n", + "[1] \"indx: 24\"\n", + "[1] \"indx: 25\"\n", + "[1] \"indx: 26\"\n", + "[1] \"indx: 27\"\n", + "[1] \"indx: 28\"\n", + "[1] \"indx: 29\"\n", + "[1] \"indx: 30\"\n", + "[1] \"indx: 31\"\n", + "[1] \"indx: 32\"\n", + "[1] \"indx: 33\"\n", + "[1] \"indx: 34\"\n", + "[1] \"indx: 35\"\n", + "[1] \"indx: 36\"\n", + "[1] \"indx: 37\"\n", + "[1] \"indx: 38\"\n", + "[1] \"indx: 39\"\n", + "[1] \"indx: 40\"\n", + "[1] \"indx: 41\"\n", + "[1] \"indx: 42\"\n", + "[1] \"indx: 43\"\n", + "[1] \"indx: 44\"\n", + "[1] \"indx: 45\"\n", + "[1] \"indx: 46\"\n", + "[1] \"indx: 47\"\n", + "[1] \"indx: 48\"\n", + "[1] \"indx: 49\"\n", + "[1] \"indx: 50\"\n", + "[1] \"indx: 51\"\n", + "[1] \"indx: 52\"\n", + "[1] \"indx: 53\"\n", + "[1] \"indx: 54\"\n", + "[1] \"indx: 55\"\n", + "[1] \"indx: 56\"\n", + "[1] \"indx: 57\"\n", + "[1] \"indx: 58\"\n", + "[1] \"indx: 59\"\n", + "[1] \"indx: 60\"\n", + "[1] \"indx: 61\"\n", + "[1] \"indx: 62\"\n", + "[1] \"indx: 63\"\n", + "[1] \"indx: 64\"\n", + "[1] \"indx: 65\"\n", + "[1] \"indx: 66\"\n", + "[1] \"indx: 67\"\n", + "[1] \"indx: 68\"\n", + "[1] \"indx: 69\"\n", + "[1] \"indx: 70\"\n", + "[1] \"indx: 71\"\n", + "[1] \"indx: 72\"\n", + "[1] \"indx: 73\"\n", + "[1] \"indx: 74\"\n", + "[1] \"indx: 75\"\n", + "[1] \"indx: 76\"\n", + "[1] \"indx: 77\"\n", + "[1] \"indx: 78\"\n", + "[1] \"indx: 79\"\n", + "[1] \"indx: 80\"\n" + ] + } + ], + "source": [ + "avg_FDR = NULL\n", + "table_block = NULL\n", + "tmp_num_select = rep(0, length(files))\n", + "for (i in 1:length(files)){\n", + " print(paste0('indx: ', i))\n", + " load(paste0(dir, '/binary_update/block_Lasso_binary_', i, '.RData')) \n", + " \n", + " table_block = rbind(table_block, results_block_lasso[c('n', 'p', 'rou', 'FP', 'FN', 'ROC', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_block_lasso$Stab.table))\n", + " \n", + " # calculate FDR\n", + " load(file_name, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_block_lasso$Stab.table\n", + " FDR = NULL # false positive rate\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}\n", + "table_block = as.data.frame(table_block)\n", + "table_block$num_select = tmp_num_select\n", + "table_block$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
150500.12.69 ( 0.14 )5.3 ( 0.07 )0.59 ( 0.01 )0.032.390.67
2100500.12.02 ( 0.15 )5.02 ( 0.08 )0.56 ( 0.01 )0.112.000.39
3500500.14.52 ( 0.29 )3 ( 0.11 )0.63 ( 0 )0.286.520.45
41000500.14.74 ( 0.22 )2.1 ( 0.09 )0.64 ( 0 )0.397.640.44
5501000.13.82 ( 0.16 )5.34 ( 0.07 )0.62 ( 0.01 )0.023.480.78
61001000.12.29 ( 0.19 )5.27 ( 0.08 )0.56 ( 0.01 )0.072.020.57
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 2.69 ( 0.14 ) & 5.3 ( 0.07 ) & 0.59 ( 0.01 ) & 0.03 & 2.39 & 0.67\\\\\n", + "\t2 & 100 & 50 & 0.1 & 2.02 ( 0.15 ) & 5.02 ( 0.08 ) & 0.56 ( 0.01 ) & 0.11 & 2.00 & 0.39\\\\\n", + "\t3 & 500 & 50 & 0.1 & 4.52 ( 0.29 ) & 3 ( 0.11 ) & 0.63 ( 0 ) & 0.28 & 6.52 & 0.45\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 4.74 ( 0.22 ) & 2.1 ( 0.09 ) & 0.64 ( 0 ) & 0.39 & 7.64 & 0.44\\\\\n", + "\t5 & 50 & 100 & 0.1 & 3.82 ( 0.16 ) & 5.34 ( 0.07 ) & 0.62 ( 0.01 ) & 0.02 & 3.48 & 0.78\\\\\n", + "\t6 & 100 & 100 & 0.1 & 2.29 ( 0.19 ) & 5.27 ( 0.08 ) & 0.56 ( 0.01 ) & 0.07 & 2.02 & 0.57\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 2.69 ( 0.14 ) | 5.3 ( 0.07 ) | 0.59 ( 0.01 ) | 0.03 | 2.39 | 0.67 |\n", + "| 2 | 100 | 50 | 0.1 | 2.02 ( 0.15 ) | 5.02 ( 0.08 ) | 0.56 ( 0.01 ) | 0.11 | 2.00 | 0.39 |\n", + "| 3 | 500 | 50 | 0.1 | 4.52 ( 0.29 ) | 3 ( 0.11 ) | 0.63 ( 0 ) | 0.28 | 6.52 | 0.45 |\n", + "| 4 | 1000 | 50 | 0.1 | 4.74 ( 0.22 ) | 2.1 ( 0.09 ) | 0.64 ( 0 ) | 0.39 | 7.64 | 0.44 |\n", + "| 5 | 50 | 100 | 0.1 | 3.82 ( 0.16 ) | 5.34 ( 0.07 ) | 0.62 ( 0.01 ) | 0.02 | 3.48 | 0.78 |\n", + "| 6 | 100 | 100 | 0.1 | 2.29 ( 0.19 ) | 5.27 ( 0.08 ) | 0.56 ( 0.01 ) | 0.07 | 2.02 | 0.57 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select FDR \n", + "1 50 50 0.1 2.69 ( 0.14 ) 5.3 ( 0.07 ) 0.59 ( 0.01 ) 0.03 2.39 0.67\n", + "2 100 50 0.1 2.02 ( 0.15 ) 5.02 ( 0.08 ) 0.56 ( 0.01 ) 0.11 2.00 0.39\n", + "3 500 50 0.1 4.52 ( 0.29 ) 3 ( 0.11 ) 0.63 ( 0 ) 0.28 6.52 0.45\n", + "4 1000 50 0.1 4.74 ( 0.22 ) 2.1 ( 0.09 ) 0.64 ( 0 ) 0.39 7.64 0.44\n", + "5 50 100 0.1 3.82 ( 0.16 ) 5.34 ( 0.07 ) 0.62 ( 0.01 ) 0.02 3.48 0.78\n", + "6 100 100 0.1 2.29 ( 0.19 ) 5.27 ( 0.08 ) 0.56 ( 0.01 ) 0.07 2.02 0.57" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
755005000.924.91 ( 0.78 )0 ( 0 )0.91 ( 0 )0.1929.910.78
7610005000.914.12 ( 0.43 )0 ( 0 )0.92 ( 0 )0.3119.120.67
775010000.910.81 ( 0.29 )4.22 ( 0.08 )0.64 ( 0.01 )0.0711.590.84
7810010000.911.15 ( 0.75 )2.44 ( 0.11 )0.74 ( 0.01 )0.1913.710.65
7950010000.934.98 ( 1.04 )0 ( 0 )0.91 ( 0 )0.1439.980.83
80100010000.922.21 ( 0.73 )0 ( 0 )0.92 ( 0 )0.2227.210.76
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 24.91 ( 0.78 ) & 0 ( 0 ) & 0.91 ( 0 ) & 0.19 & 29.91 & 0.78\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 14.12 ( 0.43 ) & 0 ( 0 ) & 0.92 ( 0 ) & 0.31 & 19.12 & 0.67\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 10.81 ( 0.29 ) & 4.22 ( 0.08 ) & 0.64 ( 0.01 ) & 0.07 & 11.59 & 0.84\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 11.15 ( 0.75 ) & 2.44 ( 0.11 ) & 0.74 ( 0.01 ) & 0.19 & 13.71 & 0.65\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 34.98 ( 1.04 ) & 0 ( 0 ) & 0.91 ( 0 ) & 0.14 & 39.98 & 0.83\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 22.21 ( 0.73 ) & 0 ( 0 ) & 0.92 ( 0 ) & 0.22 & 27.21 & 0.76\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 24.91 ( 0.78 ) | 0 ( 0 ) | 0.91 ( 0 ) | 0.19 | 29.91 | 0.78 |\n", + "| 76 | 1000 | 500 | 0.9 | 14.12 ( 0.43 ) | 0 ( 0 ) | 0.92 ( 0 ) | 0.31 | 19.12 | 0.67 |\n", + "| 77 | 50 | 1000 | 0.9 | 10.81 ( 0.29 ) | 4.22 ( 0.08 ) | 0.64 ( 0.01 ) | 0.07 | 11.59 | 0.84 |\n", + "| 78 | 100 | 1000 | 0.9 | 11.15 ( 0.75 ) | 2.44 ( 0.11 ) | 0.74 ( 0.01 ) | 0.19 | 13.71 | 0.65 |\n", + "| 79 | 500 | 1000 | 0.9 | 34.98 ( 1.04 ) | 0 ( 0 ) | 0.91 ( 0 ) | 0.14 | 39.98 | 0.83 |\n", + "| 80 | 1000 | 1000 | 0.9 | 22.21 ( 0.73 ) | 0 ( 0 ) | 0.92 ( 0 ) | 0.22 | 27.21 | 0.76 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select\n", + "75 500 500 0.9 24.91 ( 0.78 ) 0 ( 0 ) 0.91 ( 0 ) 0.19 29.91 \n", + "76 1000 500 0.9 14.12 ( 0.43 ) 0 ( 0 ) 0.92 ( 0 ) 0.31 19.12 \n", + "77 50 1000 0.9 10.81 ( 0.29 ) 4.22 ( 0.08 ) 0.64 ( 0.01 ) 0.07 11.59 \n", + "78 100 1000 0.9 11.15 ( 0.75 ) 2.44 ( 0.11 ) 0.74 ( 0.01 ) 0.19 13.71 \n", + "79 500 1000 0.9 34.98 ( 1.04 ) 0 ( 0 ) 0.91 ( 0 ) 0.14 39.98 \n", + "80 1000 1000 0.9 22.21 ( 0.73 ) 0 ( 0 ) 0.92 ( 0 ) 0.22 27.21 \n", + " FDR \n", + "75 0.78\n", + "76 0.67\n", + "77 0.84\n", + "78 0.65\n", + "79 0.83\n", + "80 0.76" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_block <- apply(table_block,2,as.character)\n", + "rownames(result.table_block) = rownames(table_block)\n", + "result.table_block = as.data.frame(result.table_block)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_block$n = tidyr::extract_numeric(result.table_block$n)\n", + "result.table_block$p = tidyr::extract_numeric(result.table_block$p)\n", + "result.table_block$ratio = result.table_block$p / result.table_block$n\n", + "\n", + "result.table_block = result.table_block[c('n', 'p', 'rou', 'ratio', 'Stab', 'ROC', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_block)[1:4] = c('N', 'P', 'Corr', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_block$Stab = as.numeric(as.character(result.table_block$Stab))\n", + "result.table_block$ROC_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_block$ROC))\n", + "result.table_block$FP_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_block$FP))\n", + "result.table_block$FN_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_block$FN))\n", + "result.table_block$num_select = as.numeric(as.character(result.table_block$num_select))" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "
A data.frame: 0 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
\n" + ], + "text/latex": [ + "A data.frame: 0 × 13\n", + "\\begin{tabular}{lllllllllllll}\n", + " N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 0 × 13\n", + "\n", + "| N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select FDR ROC_mean FP_mean FN_mean" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check whether missing values exists\n", + "result.table_block[rowSums(is.na(result.table_block)) > 0,]" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 500.11.000.030.59 ( 0.01 )2.69 ( 0.14 )5.3 ( 0.07 ) 2.390.670.592.695.30
2 100 500.10.500.110.56 ( 0.01 )2.02 ( 0.15 )5.02 ( 0.08 )2.000.390.562.025.02
3 500 500.10.100.280.63 ( 0 ) 4.52 ( 0.29 )3 ( 0.11 ) 6.520.450.634.523.00
41000 500.10.050.390.64 ( 0 ) 4.74 ( 0.22 )2.1 ( 0.09 ) 7.640.440.644.742.10
5 501000.12.000.020.62 ( 0.01 )3.82 ( 0.16 )5.34 ( 0.07 )3.480.780.623.825.34
6 1001000.11.000.070.56 ( 0.01 )2.29 ( 0.19 )5.27 ( 0.08 )2.020.570.562.295.27
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1.00 & 0.03 & 0.59 ( 0.01 ) & 2.69 ( 0.14 ) & 5.3 ( 0.07 ) & 2.39 & 0.67 & 0.59 & 2.69 & 5.30\\\\\n", + "\t2 & 100 & 50 & 0.1 & 0.50 & 0.11 & 0.56 ( 0.01 ) & 2.02 ( 0.15 ) & 5.02 ( 0.08 ) & 2.00 & 0.39 & 0.56 & 2.02 & 5.02\\\\\n", + "\t3 & 500 & 50 & 0.1 & 0.10 & 0.28 & 0.63 ( 0 ) & 4.52 ( 0.29 ) & 3 ( 0.11 ) & 6.52 & 0.45 & 0.63 & 4.52 & 3.00\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 0.05 & 0.39 & 0.64 ( 0 ) & 4.74 ( 0.22 ) & 2.1 ( 0.09 ) & 7.64 & 0.44 & 0.64 & 4.74 & 2.10\\\\\n", + "\t5 & 50 & 100 & 0.1 & 2.00 & 0.02 & 0.62 ( 0.01 ) & 3.82 ( 0.16 ) & 5.34 ( 0.07 ) & 3.48 & 0.78 & 0.62 & 3.82 & 5.34\\\\\n", + "\t6 & 100 & 100 & 0.1 & 1.00 & 0.07 & 0.56 ( 0.01 ) & 2.29 ( 0.19 ) & 5.27 ( 0.08 ) & 2.02 & 0.57 & 0.56 & 2.29 & 5.27\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1.00 | 0.03 | 0.59 ( 0.01 ) | 2.69 ( 0.14 ) | 5.3 ( 0.07 ) | 2.39 | 0.67 | 0.59 | 2.69 | 5.30 |\n", + "| 2 | 100 | 50 | 0.1 | 0.50 | 0.11 | 0.56 ( 0.01 ) | 2.02 ( 0.15 ) | 5.02 ( 0.08 ) | 2.00 | 0.39 | 0.56 | 2.02 | 5.02 |\n", + "| 3 | 500 | 50 | 0.1 | 0.10 | 0.28 | 0.63 ( 0 ) | 4.52 ( 0.29 ) | 3 ( 0.11 ) | 6.52 | 0.45 | 0.63 | 4.52 | 3.00 |\n", + "| 4 | 1000 | 50 | 0.1 | 0.05 | 0.39 | 0.64 ( 0 ) | 4.74 ( 0.22 ) | 2.1 ( 0.09 ) | 7.64 | 0.44 | 0.64 | 4.74 | 2.10 |\n", + "| 5 | 50 | 100 | 0.1 | 2.00 | 0.02 | 0.62 ( 0.01 ) | 3.82 ( 0.16 ) | 5.34 ( 0.07 ) | 3.48 | 0.78 | 0.62 | 3.82 | 5.34 |\n", + "| 6 | 100 | 100 | 0.1 | 1.00 | 0.07 | 0.56 ( 0.01 ) | 2.29 ( 0.19 ) | 5.27 ( 0.08 ) | 2.02 | 0.57 | 0.56 | 2.29 | 5.27 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select\n", + "1 50 50 0.1 1.00 0.03 0.59 ( 0.01 ) 2.69 ( 0.14 ) 5.3 ( 0.07 ) 2.39 \n", + "2 100 50 0.1 0.50 0.11 0.56 ( 0.01 ) 2.02 ( 0.15 ) 5.02 ( 0.08 ) 2.00 \n", + "3 500 50 0.1 0.10 0.28 0.63 ( 0 ) 4.52 ( 0.29 ) 3 ( 0.11 ) 6.52 \n", + "4 1000 50 0.1 0.05 0.39 0.64 ( 0 ) 4.74 ( 0.22 ) 2.1 ( 0.09 ) 7.64 \n", + "5 50 100 0.1 2.00 0.02 0.62 ( 0.01 ) 3.82 ( 0.16 ) 5.34 ( 0.07 ) 3.48 \n", + "6 100 100 0.1 1.00 0.07 0.56 ( 0.01 ) 2.29 ( 0.19 ) 5.27 ( 0.08 ) 2.02 \n", + " FDR ROC_mean FP_mean FN_mean\n", + "1 0.67 0.59 2.69 5.30 \n", + "2 0.39 0.56 2.02 5.02 \n", + "3 0.45 0.63 4.52 3.00 \n", + "4 0.44 0.64 4.74 2.10 \n", + "5 0.78 0.62 3.82 5.34 \n", + "6 0.57 0.56 2.29 5.27 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
75 500 5000.9 1.00.190.91 ( 0 ) 24.91 ( 0.78 )0 ( 0 ) 29.910.780.9124.910.00
761000 5000.9 0.50.310.92 ( 0 ) 14.12 ( 0.43 )0 ( 0 ) 19.120.670.9214.120.00
77 5010000.920.00.070.64 ( 0.01 )10.81 ( 0.29 )4.22 ( 0.08 )11.590.840.6410.814.22
78 10010000.910.00.190.74 ( 0.01 )11.15 ( 0.75 )2.44 ( 0.11 )13.710.650.7411.152.44
79 50010000.9 2.00.140.91 ( 0 ) 34.98 ( 1.04 )0 ( 0 ) 39.980.830.9134.980.00
80100010000.9 1.00.220.92 ( 0 ) 22.21 ( 0.73 )0 ( 0 ) 27.210.760.9222.210.00
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 1.0 & 0.19 & 0.91 ( 0 ) & 24.91 ( 0.78 ) & 0 ( 0 ) & 29.91 & 0.78 & 0.91 & 24.91 & 0.00\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.5 & 0.31 & 0.92 ( 0 ) & 14.12 ( 0.43 ) & 0 ( 0 ) & 19.12 & 0.67 & 0.92 & 14.12 & 0.00\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.0 & 0.07 & 0.64 ( 0.01 ) & 10.81 ( 0.29 ) & 4.22 ( 0.08 ) & 11.59 & 0.84 & 0.64 & 10.81 & 4.22\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.0 & 0.19 & 0.74 ( 0.01 ) & 11.15 ( 0.75 ) & 2.44 ( 0.11 ) & 13.71 & 0.65 & 0.74 & 11.15 & 2.44\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.0 & 0.14 & 0.91 ( 0 ) & 34.98 ( 1.04 ) & 0 ( 0 ) & 39.98 & 0.83 & 0.91 & 34.98 & 0.00\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.0 & 0.22 & 0.92 ( 0 ) & 22.21 ( 0.73 ) & 0 ( 0 ) & 27.21 & 0.76 & 0.92 & 22.21 & 0.00\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 1.0 | 0.19 | 0.91 ( 0 ) | 24.91 ( 0.78 ) | 0 ( 0 ) | 29.91 | 0.78 | 0.91 | 24.91 | 0.00 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.5 | 0.31 | 0.92 ( 0 ) | 14.12 ( 0.43 ) | 0 ( 0 ) | 19.12 | 0.67 | 0.92 | 14.12 | 0.00 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.0 | 0.07 | 0.64 ( 0.01 ) | 10.81 ( 0.29 ) | 4.22 ( 0.08 ) | 11.59 | 0.84 | 0.64 | 10.81 | 4.22 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.0 | 0.19 | 0.74 ( 0.01 ) | 11.15 ( 0.75 ) | 2.44 ( 0.11 ) | 13.71 | 0.65 | 0.74 | 11.15 | 2.44 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.0 | 0.14 | 0.91 ( 0 ) | 34.98 ( 1.04 ) | 0 ( 0 ) | 39.98 | 0.83 | 0.91 | 34.98 | 0.00 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.0 | 0.22 | 0.92 ( 0 ) | 22.21 ( 0.73 ) | 0 ( 0 ) | 27.21 | 0.76 | 0.92 | 22.21 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "75 500 500 0.9 1.0 0.19 0.91 ( 0 ) 24.91 ( 0.78 ) 0 ( 0 ) \n", + "76 1000 500 0.9 0.5 0.31 0.92 ( 0 ) 14.12 ( 0.43 ) 0 ( 0 ) \n", + "77 50 1000 0.9 20.0 0.07 0.64 ( 0.01 ) 10.81 ( 0.29 ) 4.22 ( 0.08 )\n", + "78 100 1000 0.9 10.0 0.19 0.74 ( 0.01 ) 11.15 ( 0.75 ) 2.44 ( 0.11 )\n", + "79 500 1000 0.9 2.0 0.14 0.91 ( 0 ) 34.98 ( 1.04 ) 0 ( 0 ) \n", + "80 1000 1000 0.9 1.0 0.22 0.92 ( 0 ) 22.21 ( 0.73 ) 0 ( 0 ) \n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "75 29.91 0.78 0.91 24.91 0.00 \n", + "76 19.12 0.67 0.92 14.12 0.00 \n", + "77 11.59 0.84 0.64 10.81 4.22 \n", + "78 13.71 0.65 0.74 11.15 2.44 \n", + "79 39.98 0.83 0.91 34.98 0.00 \n", + "80 27.21 0.76 0.92 22.21 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(result.table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 80 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 500.1 1.000.030.59 ( 0.01 )2.69 ( 0.14 ) 5.3 ( 0.07 ) 2.390.670.59 2.695.30
2 100 500.1 0.500.110.56 ( 0.01 )2.02 ( 0.15 ) 5.02 ( 0.08 ) 2.000.390.56 2.025.02
3 500 500.1 0.100.280.63 ( 0 ) 4.52 ( 0.29 ) 3 ( 0.11 ) 6.520.450.63 4.523.00
41000 500.1 0.050.390.64 ( 0 ) 4.74 ( 0.22 ) 2.1 ( 0.09 ) 7.640.440.64 4.742.10
5 50 1000.1 2.000.020.62 ( 0.01 )3.82 ( 0.16 ) 5.34 ( 0.07 ) 3.480.780.62 3.825.34
6 100 1000.1 1.000.070.56 ( 0.01 )2.29 ( 0.19 ) 5.27 ( 0.08 ) 2.020.570.56 2.295.27
7 500 1000.1 0.200.230.61 ( 0 ) 5.54 ( 0.52 ) 3.27 ( 0.12 ) 7.270.470.61 5.543.27
81000 1000.1 0.100.270.64 ( 0 ) 7.69 ( 0.42 ) 2.25 ( 0.1 ) 10.440.560.64 7.692.25
9 50 5000.110.000.010.6 ( 0.01 ) 8.69 ( 0.24 ) 5.55 ( 0.06 ) 8.140.940.60 8.695.55
10 100 5000.1 5.000.030.56 ( 0.01 )4.39 ( 0.34 ) 5.4 ( 0.07 ) 3.990.820.56 4.395.40
11 500 5000.1 1.000.270.61 ( 0.01 )3.84 ( 0.28 ) 3.93 ( 0.08 ) 4.910.470.61 3.843.93
121000 5000.1 0.500.200.63 ( 0 ) 9.87 ( 1.4 ) 3.18 ( 0.09 )11.690.490.63 9.873.18
13 5010000.120.000.000.62 ( 0.01 )10.42 ( 0.22 )5.56 ( 0.06 ) 9.860.950.6210.425.56
14 10010000.110.000.010.56 ( 0.01 )5.93 ( 0.28 ) 5.53 ( 0.06 ) 5.400.9 0.56 5.935.53
15 50010000.1 2.000.240.62 ( 0.01 )4.22 ( 0.48 ) 4.05 ( 0.09 ) 5.170.460.62 4.224.05
16100010000.1 1.000.330.63 ( 0 ) 5.03 ( 0.78 ) 3.35 ( 0.06 ) 6.680.420.63 5.033.35
17 50 500.3 1.000.170.65 ( 0.01 )3.87 ( 0.23 ) 3.68 ( 0.12 ) 5.190.5 0.65 3.873.68
18 100 500.3 0.500.320.78 ( 0.01 )6.48 ( 0.32 ) 1.13 ( 0.11 )10.350.490.78 6.481.13
19 500 500.3 0.100.440.85 ( 0 ) 6.84 ( 0.26 ) 0 ( 0 ) 11.840.470.85 6.840.00
201000 500.3 0.050.650.86 ( 0 ) 3.69 ( 0.19 ) 0 ( 0 ) 8.690.280.86 3.690.00
21 50 1000.3 2.000.140.63 ( 0.01 )5.12 ( 0.25 ) 3.91 ( 0.1 ) 6.210.630.63 5.123.91
22 100 1000.3 1.000.260.74 ( 0.01 )7.62 ( 0.48 ) 1.8 ( 0.12 ) 10.820.530.74 7.621.80
23 500 1000.3 0.200.360.86 ( 0 ) 10.19 ( 0.4 ) 0 ( 0 ) 15.190.570.8610.190.00
241000 1000.3 0.100.520.86 ( 0 ) 6 ( 0.27 ) 0 ( 0 ) 11.000.420.86 6.000.00
25 50 5000.310.000.030.61 ( 0.01 )10.46 ( 0.31 )4.69 ( 0.08 )10.770.870.6110.464.69
26 100 5000.3 5.000.170.66 ( 0.01 )8.6 ( 0.65 ) 3.19 ( 0.12 )10.410.640.66 8.603.19
27 500 5000.3 1.000.190.85 ( 0 ) 25.12 ( 1.08 )0 ( 0 ) 30.120.770.8525.120.00
281000 5000.3 0.500.250.86 ( 0 ) 18.48 ( 0.73 )0 ( 0 ) 23.480.720.8618.480.00
29 5010000.320.000.020.6 ( 0.01 ) 12.08 ( 0.26 )4.97 ( 0.08 )12.110.910.6012.084.97
30 10010000.310.000.130.65 ( 0.01 )9 ( 0.66 ) 3.58 ( 0.12 )10.420.720.65 9.003.58
51 500 500.7 0.100.490.91 ( 0 ) 5.84 ( 0.26 ) 0 ( 0 ) 10.840.420.91 5.840.00
521000 500.7 0.050.710.92 ( 0 ) 3.03 ( 0.15 ) 0 ( 0 ) 8.030.230.92 3.030.00
53 50 1000.7 2.000.210.69 ( 0.01 )5.07 ( 0.25 ) 3.13 ( 0.1 ) 6.940.550.69 5.073.13
54 100 1000.7 1.000.280.82 ( 0.01 )9.65 ( 0.48 ) 0.97 ( 0.1 ) 13.680.590.82 9.650.97
55 500 1000.7 0.200.360.91 ( 0 ) 10.19 ( 0.37 )0 ( 0 ) 15.190.580.9110.190.00
561000 1000.7 0.100.590.92 ( 0 ) 4.81 ( 0.19 ) 0 ( 0 ) 9.810.370.92 4.810.00
57 50 5000.710.000.090.66 ( 0.01 )9.13 ( 0.25 ) 4.14 ( 0.08 ) 9.990.810.66 9.134.14
58 100 5000.7 5.000.210.75 ( 0.01 )9.59 ( 0.72 ) 2.44 ( 0.11 )12.150.610.75 9.592.44
59 500 5000.7 1.000.180.9 ( 0 ) 26.2 ( 0.86 ) 0 ( 0 ) 31.200.790.9026.200.00
601000 5000.7 0.500.280.91 ( 0 ) 15.6 ( 0.55 ) 0 ( 0 ) 20.600.680.9115.600.00
61 5010000.720.000.050.64 ( 0.01 )11.44 ( 0.28 )4.51 ( 0.08 )11.930.870.6411.444.51
62 10010000.710.000.180.71 ( 0.01 )10.03 ( 0.71 )2.95 ( 0.1 ) 12.080.650.7110.032.95
63 50010000.7 2.000.140.9 ( 0 ) 34.85 ( 1.14 )0 ( 0 ) 39.850.830.9034.850.00
64100010000.7 1.000.200.91 ( 0 ) 24.83 ( 0.82 )0 ( 0 ) 29.830.780.9124.830.00
65 50 500.9 1.000.300.73 ( 0.01 )4.4 ( 0.26 ) 2.55 ( 0.11 ) 6.850.440.73 4.402.55
66 100 500.9 0.500.330.85 ( 0.01 )8.14 ( 0.35 ) 0.42 ( 0.06 )12.720.530.85 8.140.42
67 500 500.9 0.100.540.92 ( 0 ) 5.15 ( 0.22 ) 0 ( 0 ) 10.150.380.92 5.150.00
681000 500.9 0.050.760.92 ( 0 ) 2.61 ( 0.13 ) 0 ( 0 ) 7.610.190.92 2.610.00
69 50 1000.9 2.000.230.7 ( 0.01 ) 4.84 ( 0.24 ) 3.3 ( 0.09 ) 6.540.540.70 4.843.30
70 100 1000.9 1.000.280.81 ( 0.01 )9.92 ( 0.51 ) 0.87 ( 0.08 )14.050.570.81 9.920.87
71 500 1000.9 0.200.370.92 ( 0 ) 9.65 ( 0.35 ) 0 ( 0 ) 14.650.570.92 9.650.00
721000 1000.9 0.100.620.93 ( 0 ) 4.29 ( 0.18 ) 0 ( 0 ) 9.290.330.93 4.290.00
73 50 5000.910.000.080.62 ( 0.01 )8.99 ( 0.26 ) 4.13 ( 0.09 ) 9.860.8 0.62 8.994.13
74 100 5000.9 5.000.230.74 ( 0.01 )8.85 ( 0.62 ) 2.4 ( 0.12 ) 11.450.6 0.74 8.852.40
75 500 5000.9 1.000.190.91 ( 0 ) 24.91 ( 0.78 )0 ( 0 ) 29.910.780.9124.910.00
761000 5000.9 0.500.310.92 ( 0 ) 14.12 ( 0.43 )0 ( 0 ) 19.120.670.9214.120.00
77 5010000.920.000.070.64 ( 0.01 )10.81 ( 0.29 )4.22 ( 0.08 )11.590.840.6410.814.22
78 10010000.910.000.190.74 ( 0.01 )11.15 ( 0.75 )2.44 ( 0.11 )13.710.650.7411.152.44
79 50010000.9 2.000.140.91 ( 0 ) 34.98 ( 1.04 )0 ( 0 ) 39.980.830.9134.980.00
80100010000.9 1.000.220.92 ( 0 ) 22.21 ( 0.73 )0 ( 0 ) 27.210.760.9222.210.00
\n" + ], + "text/latex": [ + "A data.frame: 80 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1.00 & 0.03 & 0.59 ( 0.01 ) & 2.69 ( 0.14 ) & 5.3 ( 0.07 ) & 2.39 & 0.67 & 0.59 & 2.69 & 5.30\\\\\n", + "\t2 & 100 & 50 & 0.1 & 0.50 & 0.11 & 0.56 ( 0.01 ) & 2.02 ( 0.15 ) & 5.02 ( 0.08 ) & 2.00 & 0.39 & 0.56 & 2.02 & 5.02\\\\\n", + "\t3 & 500 & 50 & 0.1 & 0.10 & 0.28 & 0.63 ( 0 ) & 4.52 ( 0.29 ) & 3 ( 0.11 ) & 6.52 & 0.45 & 0.63 & 4.52 & 3.00\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 0.05 & 0.39 & 0.64 ( 0 ) & 4.74 ( 0.22 ) & 2.1 ( 0.09 ) & 7.64 & 0.44 & 0.64 & 4.74 & 2.10\\\\\n", + "\t5 & 50 & 100 & 0.1 & 2.00 & 0.02 & 0.62 ( 0.01 ) & 3.82 ( 0.16 ) & 5.34 ( 0.07 ) & 3.48 & 0.78 & 0.62 & 3.82 & 5.34\\\\\n", + "\t6 & 100 & 100 & 0.1 & 1.00 & 0.07 & 0.56 ( 0.01 ) & 2.29 ( 0.19 ) & 5.27 ( 0.08 ) & 2.02 & 0.57 & 0.56 & 2.29 & 5.27\\\\\n", + "\t7 & 500 & 100 & 0.1 & 0.20 & 0.23 & 0.61 ( 0 ) & 5.54 ( 0.52 ) & 3.27 ( 0.12 ) & 7.27 & 0.47 & 0.61 & 5.54 & 3.27\\\\\n", + "\t8 & 1000 & 100 & 0.1 & 0.10 & 0.27 & 0.64 ( 0 ) & 7.69 ( 0.42 ) & 2.25 ( 0.1 ) & 10.44 & 0.56 & 0.64 & 7.69 & 2.25\\\\\n", + "\t9 & 50 & 500 & 0.1 & 10.00 & 0.01 & 0.6 ( 0.01 ) & 8.69 ( 0.24 ) & 5.55 ( 0.06 ) & 8.14 & 0.94 & 0.60 & 8.69 & 5.55\\\\\n", + "\t10 & 100 & 500 & 0.1 & 5.00 & 0.03 & 0.56 ( 0.01 ) & 4.39 ( 0.34 ) & 5.4 ( 0.07 ) & 3.99 & 0.82 & 0.56 & 4.39 & 5.40\\\\\n", + "\t11 & 500 & 500 & 0.1 & 1.00 & 0.27 & 0.61 ( 0.01 ) & 3.84 ( 0.28 ) & 3.93 ( 0.08 ) & 4.91 & 0.47 & 0.61 & 3.84 & 3.93\\\\\n", + "\t12 & 1000 & 500 & 0.1 & 0.50 & 0.20 & 0.63 ( 0 ) & 9.87 ( 1.4 ) & 3.18 ( 0.09 ) & 11.69 & 0.49 & 0.63 & 9.87 & 3.18\\\\\n", + "\t13 & 50 & 1000 & 0.1 & 20.00 & 0.00 & 0.62 ( 0.01 ) & 10.42 ( 0.22 ) & 5.56 ( 0.06 ) & 9.86 & 0.95 & 0.62 & 10.42 & 5.56\\\\\n", + "\t14 & 100 & 1000 & 0.1 & 10.00 & 0.01 & 0.56 ( 0.01 ) & 5.93 ( 0.28 ) & 5.53 ( 0.06 ) & 5.40 & 0.9 & 0.56 & 5.93 & 5.53\\\\\n", + "\t15 & 500 & 1000 & 0.1 & 2.00 & 0.24 & 0.62 ( 0.01 ) & 4.22 ( 0.48 ) & 4.05 ( 0.09 ) & 5.17 & 0.46 & 0.62 & 4.22 & 4.05\\\\\n", + "\t16 & 1000 & 1000 & 0.1 & 1.00 & 0.33 & 0.63 ( 0 ) & 5.03 ( 0.78 ) & 3.35 ( 0.06 ) & 6.68 & 0.42 & 0.63 & 5.03 & 3.35\\\\\n", + "\t17 & 50 & 50 & 0.3 & 1.00 & 0.17 & 0.65 ( 0.01 ) & 3.87 ( 0.23 ) & 3.68 ( 0.12 ) & 5.19 & 0.5 & 0.65 & 3.87 & 3.68\\\\\n", + "\t18 & 100 & 50 & 0.3 & 0.50 & 0.32 & 0.78 ( 0.01 ) & 6.48 ( 0.32 ) & 1.13 ( 0.11 ) & 10.35 & 0.49 & 0.78 & 6.48 & 1.13\\\\\n", + "\t19 & 500 & 50 & 0.3 & 0.10 & 0.44 & 0.85 ( 0 ) & 6.84 ( 0.26 ) & 0 ( 0 ) & 11.84 & 0.47 & 0.85 & 6.84 & 0.00\\\\\n", + "\t20 & 1000 & 50 & 0.3 & 0.05 & 0.65 & 0.86 ( 0 ) & 3.69 ( 0.19 ) & 0 ( 0 ) & 8.69 & 0.28 & 0.86 & 3.69 & 0.00\\\\\n", + "\t21 & 50 & 100 & 0.3 & 2.00 & 0.14 & 0.63 ( 0.01 ) & 5.12 ( 0.25 ) & 3.91 ( 0.1 ) & 6.21 & 0.63 & 0.63 & 5.12 & 3.91\\\\\n", + "\t22 & 100 & 100 & 0.3 & 1.00 & 0.26 & 0.74 ( 0.01 ) & 7.62 ( 0.48 ) & 1.8 ( 0.12 ) & 10.82 & 0.53 & 0.74 & 7.62 & 1.80\\\\\n", + "\t23 & 500 & 100 & 0.3 & 0.20 & 0.36 & 0.86 ( 0 ) & 10.19 ( 0.4 ) & 0 ( 0 ) & 15.19 & 0.57 & 0.86 & 10.19 & 0.00\\\\\n", + "\t24 & 1000 & 100 & 0.3 & 0.10 & 0.52 & 0.86 ( 0 ) & 6 ( 0.27 ) & 0 ( 0 ) & 11.00 & 0.42 & 0.86 & 6.00 & 0.00\\\\\n", + "\t25 & 50 & 500 & 0.3 & 10.00 & 0.03 & 0.61 ( 0.01 ) & 10.46 ( 0.31 ) & 4.69 ( 0.08 ) & 10.77 & 0.87 & 0.61 & 10.46 & 4.69\\\\\n", + "\t26 & 100 & 500 & 0.3 & 5.00 & 0.17 & 0.66 ( 0.01 ) & 8.6 ( 0.65 ) & 3.19 ( 0.12 ) & 10.41 & 0.64 & 0.66 & 8.60 & 3.19\\\\\n", + "\t27 & 500 & 500 & 0.3 & 1.00 & 0.19 & 0.85 ( 0 ) & 25.12 ( 1.08 ) & 0 ( 0 ) & 30.12 & 0.77 & 0.85 & 25.12 & 0.00\\\\\n", + "\t28 & 1000 & 500 & 0.3 & 0.50 & 0.25 & 0.86 ( 0 ) & 18.48 ( 0.73 ) & 0 ( 0 ) & 23.48 & 0.72 & 0.86 & 18.48 & 0.00\\\\\n", + "\t29 & 50 & 1000 & 0.3 & 20.00 & 0.02 & 0.6 ( 0.01 ) & 12.08 ( 0.26 ) & 4.97 ( 0.08 ) & 12.11 & 0.91 & 0.60 & 12.08 & 4.97\\\\\n", + "\t30 & 100 & 1000 & 0.3 & 10.00 & 0.13 & 0.65 ( 0.01 ) & 9 ( 0.66 ) & 3.58 ( 0.12 ) & 10.42 & 0.72 & 0.65 & 9.00 & 3.58\\\\\n", + "\t⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮\\\\\n", + "\t51 & 500 & 50 & 0.7 & 0.10 & 0.49 & 0.91 ( 0 ) & 5.84 ( 0.26 ) & 0 ( 0 ) & 10.84 & 0.42 & 0.91 & 5.84 & 0.00\\\\\n", + "\t52 & 1000 & 50 & 0.7 & 0.05 & 0.71 & 0.92 ( 0 ) & 3.03 ( 0.15 ) & 0 ( 0 ) & 8.03 & 0.23 & 0.92 & 3.03 & 0.00\\\\\n", + "\t53 & 50 & 100 & 0.7 & 2.00 & 0.21 & 0.69 ( 0.01 ) & 5.07 ( 0.25 ) & 3.13 ( 0.1 ) & 6.94 & 0.55 & 0.69 & 5.07 & 3.13\\\\\n", + "\t54 & 100 & 100 & 0.7 & 1.00 & 0.28 & 0.82 ( 0.01 ) & 9.65 ( 0.48 ) & 0.97 ( 0.1 ) & 13.68 & 0.59 & 0.82 & 9.65 & 0.97\\\\\n", + "\t55 & 500 & 100 & 0.7 & 0.20 & 0.36 & 0.91 ( 0 ) & 10.19 ( 0.37 ) & 0 ( 0 ) & 15.19 & 0.58 & 0.91 & 10.19 & 0.00\\\\\n", + "\t56 & 1000 & 100 & 0.7 & 0.10 & 0.59 & 0.92 ( 0 ) & 4.81 ( 0.19 ) & 0 ( 0 ) & 9.81 & 0.37 & 0.92 & 4.81 & 0.00\\\\\n", + "\t57 & 50 & 500 & 0.7 & 10.00 & 0.09 & 0.66 ( 0.01 ) & 9.13 ( 0.25 ) & 4.14 ( 0.08 ) & 9.99 & 0.81 & 0.66 & 9.13 & 4.14\\\\\n", + "\t58 & 100 & 500 & 0.7 & 5.00 & 0.21 & 0.75 ( 0.01 ) & 9.59 ( 0.72 ) & 2.44 ( 0.11 ) & 12.15 & 0.61 & 0.75 & 9.59 & 2.44\\\\\n", + "\t59 & 500 & 500 & 0.7 & 1.00 & 0.18 & 0.9 ( 0 ) & 26.2 ( 0.86 ) & 0 ( 0 ) & 31.20 & 0.79 & 0.90 & 26.20 & 0.00\\\\\n", + "\t60 & 1000 & 500 & 0.7 & 0.50 & 0.28 & 0.91 ( 0 ) & 15.6 ( 0.55 ) & 0 ( 0 ) & 20.60 & 0.68 & 0.91 & 15.60 & 0.00\\\\\n", + "\t61 & 50 & 1000 & 0.7 & 20.00 & 0.05 & 0.64 ( 0.01 ) & 11.44 ( 0.28 ) & 4.51 ( 0.08 ) & 11.93 & 0.87 & 0.64 & 11.44 & 4.51\\\\\n", + "\t62 & 100 & 1000 & 0.7 & 10.00 & 0.18 & 0.71 ( 0.01 ) & 10.03 ( 0.71 ) & 2.95 ( 0.1 ) & 12.08 & 0.65 & 0.71 & 10.03 & 2.95\\\\\n", + "\t63 & 500 & 1000 & 0.7 & 2.00 & 0.14 & 0.9 ( 0 ) & 34.85 ( 1.14 ) & 0 ( 0 ) & 39.85 & 0.83 & 0.90 & 34.85 & 0.00\\\\\n", + "\t64 & 1000 & 1000 & 0.7 & 1.00 & 0.20 & 0.91 ( 0 ) & 24.83 ( 0.82 ) & 0 ( 0 ) & 29.83 & 0.78 & 0.91 & 24.83 & 0.00\\\\\n", + "\t65 & 50 & 50 & 0.9 & 1.00 & 0.30 & 0.73 ( 0.01 ) & 4.4 ( 0.26 ) & 2.55 ( 0.11 ) & 6.85 & 0.44 & 0.73 & 4.40 & 2.55\\\\\n", + "\t66 & 100 & 50 & 0.9 & 0.50 & 0.33 & 0.85 ( 0.01 ) & 8.14 ( 0.35 ) & 0.42 ( 0.06 ) & 12.72 & 0.53 & 0.85 & 8.14 & 0.42\\\\\n", + "\t67 & 500 & 50 & 0.9 & 0.10 & 0.54 & 0.92 ( 0 ) & 5.15 ( 0.22 ) & 0 ( 0 ) & 10.15 & 0.38 & 0.92 & 5.15 & 0.00\\\\\n", + "\t68 & 1000 & 50 & 0.9 & 0.05 & 0.76 & 0.92 ( 0 ) & 2.61 ( 0.13 ) & 0 ( 0 ) & 7.61 & 0.19 & 0.92 & 2.61 & 0.00\\\\\n", + "\t69 & 50 & 100 & 0.9 & 2.00 & 0.23 & 0.7 ( 0.01 ) & 4.84 ( 0.24 ) & 3.3 ( 0.09 ) & 6.54 & 0.54 & 0.70 & 4.84 & 3.30\\\\\n", + "\t70 & 100 & 100 & 0.9 & 1.00 & 0.28 & 0.81 ( 0.01 ) & 9.92 ( 0.51 ) & 0.87 ( 0.08 ) & 14.05 & 0.57 & 0.81 & 9.92 & 0.87\\\\\n", + "\t71 & 500 & 100 & 0.9 & 0.20 & 0.37 & 0.92 ( 0 ) & 9.65 ( 0.35 ) & 0 ( 0 ) & 14.65 & 0.57 & 0.92 & 9.65 & 0.00\\\\\n", + "\t72 & 1000 & 100 & 0.9 & 0.10 & 0.62 & 0.93 ( 0 ) & 4.29 ( 0.18 ) & 0 ( 0 ) & 9.29 & 0.33 & 0.93 & 4.29 & 0.00\\\\\n", + "\t73 & 50 & 500 & 0.9 & 10.00 & 0.08 & 0.62 ( 0.01 ) & 8.99 ( 0.26 ) & 4.13 ( 0.09 ) & 9.86 & 0.8 & 0.62 & 8.99 & 4.13\\\\\n", + "\t74 & 100 & 500 & 0.9 & 5.00 & 0.23 & 0.74 ( 0.01 ) & 8.85 ( 0.62 ) & 2.4 ( 0.12 ) & 11.45 & 0.6 & 0.74 & 8.85 & 2.40\\\\\n", + "\t75 & 500 & 500 & 0.9 & 1.00 & 0.19 & 0.91 ( 0 ) & 24.91 ( 0.78 ) & 0 ( 0 ) & 29.91 & 0.78 & 0.91 & 24.91 & 0.00\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.50 & 0.31 & 0.92 ( 0 ) & 14.12 ( 0.43 ) & 0 ( 0 ) & 19.12 & 0.67 & 0.92 & 14.12 & 0.00\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.00 & 0.07 & 0.64 ( 0.01 ) & 10.81 ( 0.29 ) & 4.22 ( 0.08 ) & 11.59 & 0.84 & 0.64 & 10.81 & 4.22\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.00 & 0.19 & 0.74 ( 0.01 ) & 11.15 ( 0.75 ) & 2.44 ( 0.11 ) & 13.71 & 0.65 & 0.74 & 11.15 & 2.44\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.00 & 0.14 & 0.91 ( 0 ) & 34.98 ( 1.04 ) & 0 ( 0 ) & 39.98 & 0.83 & 0.91 & 34.98 & 0.00\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.00 & 0.22 & 0.92 ( 0 ) & 22.21 ( 0.73 ) & 0 ( 0 ) & 27.21 & 0.76 & 0.92 & 22.21 & 0.00\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 80 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1.00 | 0.03 | 0.59 ( 0.01 ) | 2.69 ( 0.14 ) | 5.3 ( 0.07 ) | 2.39 | 0.67 | 0.59 | 2.69 | 5.30 |\n", + "| 2 | 100 | 50 | 0.1 | 0.50 | 0.11 | 0.56 ( 0.01 ) | 2.02 ( 0.15 ) | 5.02 ( 0.08 ) | 2.00 | 0.39 | 0.56 | 2.02 | 5.02 |\n", + "| 3 | 500 | 50 | 0.1 | 0.10 | 0.28 | 0.63 ( 0 ) | 4.52 ( 0.29 ) | 3 ( 0.11 ) | 6.52 | 0.45 | 0.63 | 4.52 | 3.00 |\n", + "| 4 | 1000 | 50 | 0.1 | 0.05 | 0.39 | 0.64 ( 0 ) | 4.74 ( 0.22 ) | 2.1 ( 0.09 ) | 7.64 | 0.44 | 0.64 | 4.74 | 2.10 |\n", + "| 5 | 50 | 100 | 0.1 | 2.00 | 0.02 | 0.62 ( 0.01 ) | 3.82 ( 0.16 ) | 5.34 ( 0.07 ) | 3.48 | 0.78 | 0.62 | 3.82 | 5.34 |\n", + "| 6 | 100 | 100 | 0.1 | 1.00 | 0.07 | 0.56 ( 0.01 ) | 2.29 ( 0.19 ) | 5.27 ( 0.08 ) | 2.02 | 0.57 | 0.56 | 2.29 | 5.27 |\n", + "| 7 | 500 | 100 | 0.1 | 0.20 | 0.23 | 0.61 ( 0 ) | 5.54 ( 0.52 ) | 3.27 ( 0.12 ) | 7.27 | 0.47 | 0.61 | 5.54 | 3.27 |\n", + "| 8 | 1000 | 100 | 0.1 | 0.10 | 0.27 | 0.64 ( 0 ) | 7.69 ( 0.42 ) | 2.25 ( 0.1 ) | 10.44 | 0.56 | 0.64 | 7.69 | 2.25 |\n", + "| 9 | 50 | 500 | 0.1 | 10.00 | 0.01 | 0.6 ( 0.01 ) | 8.69 ( 0.24 ) | 5.55 ( 0.06 ) | 8.14 | 0.94 | 0.60 | 8.69 | 5.55 |\n", + "| 10 | 100 | 500 | 0.1 | 5.00 | 0.03 | 0.56 ( 0.01 ) | 4.39 ( 0.34 ) | 5.4 ( 0.07 ) | 3.99 | 0.82 | 0.56 | 4.39 | 5.40 |\n", + "| 11 | 500 | 500 | 0.1 | 1.00 | 0.27 | 0.61 ( 0.01 ) | 3.84 ( 0.28 ) | 3.93 ( 0.08 ) | 4.91 | 0.47 | 0.61 | 3.84 | 3.93 |\n", + "| 12 | 1000 | 500 | 0.1 | 0.50 | 0.20 | 0.63 ( 0 ) | 9.87 ( 1.4 ) | 3.18 ( 0.09 ) | 11.69 | 0.49 | 0.63 | 9.87 | 3.18 |\n", + "| 13 | 50 | 1000 | 0.1 | 20.00 | 0.00 | 0.62 ( 0.01 ) | 10.42 ( 0.22 ) | 5.56 ( 0.06 ) | 9.86 | 0.95 | 0.62 | 10.42 | 5.56 |\n", + "| 14 | 100 | 1000 | 0.1 | 10.00 | 0.01 | 0.56 ( 0.01 ) | 5.93 ( 0.28 ) | 5.53 ( 0.06 ) | 5.40 | 0.9 | 0.56 | 5.93 | 5.53 |\n", + "| 15 | 500 | 1000 | 0.1 | 2.00 | 0.24 | 0.62 ( 0.01 ) | 4.22 ( 0.48 ) | 4.05 ( 0.09 ) | 5.17 | 0.46 | 0.62 | 4.22 | 4.05 |\n", + "| 16 | 1000 | 1000 | 0.1 | 1.00 | 0.33 | 0.63 ( 0 ) | 5.03 ( 0.78 ) | 3.35 ( 0.06 ) | 6.68 | 0.42 | 0.63 | 5.03 | 3.35 |\n", + "| 17 | 50 | 50 | 0.3 | 1.00 | 0.17 | 0.65 ( 0.01 ) | 3.87 ( 0.23 ) | 3.68 ( 0.12 ) | 5.19 | 0.5 | 0.65 | 3.87 | 3.68 |\n", + "| 18 | 100 | 50 | 0.3 | 0.50 | 0.32 | 0.78 ( 0.01 ) | 6.48 ( 0.32 ) | 1.13 ( 0.11 ) | 10.35 | 0.49 | 0.78 | 6.48 | 1.13 |\n", + "| 19 | 500 | 50 | 0.3 | 0.10 | 0.44 | 0.85 ( 0 ) | 6.84 ( 0.26 ) | 0 ( 0 ) | 11.84 | 0.47 | 0.85 | 6.84 | 0.00 |\n", + "| 20 | 1000 | 50 | 0.3 | 0.05 | 0.65 | 0.86 ( 0 ) | 3.69 ( 0.19 ) | 0 ( 0 ) | 8.69 | 0.28 | 0.86 | 3.69 | 0.00 |\n", + "| 21 | 50 | 100 | 0.3 | 2.00 | 0.14 | 0.63 ( 0.01 ) | 5.12 ( 0.25 ) | 3.91 ( 0.1 ) | 6.21 | 0.63 | 0.63 | 5.12 | 3.91 |\n", + "| 22 | 100 | 100 | 0.3 | 1.00 | 0.26 | 0.74 ( 0.01 ) | 7.62 ( 0.48 ) | 1.8 ( 0.12 ) | 10.82 | 0.53 | 0.74 | 7.62 | 1.80 |\n", + "| 23 | 500 | 100 | 0.3 | 0.20 | 0.36 | 0.86 ( 0 ) | 10.19 ( 0.4 ) | 0 ( 0 ) | 15.19 | 0.57 | 0.86 | 10.19 | 0.00 |\n", + "| 24 | 1000 | 100 | 0.3 | 0.10 | 0.52 | 0.86 ( 0 ) | 6 ( 0.27 ) | 0 ( 0 ) | 11.00 | 0.42 | 0.86 | 6.00 | 0.00 |\n", + "| 25 | 50 | 500 | 0.3 | 10.00 | 0.03 | 0.61 ( 0.01 ) | 10.46 ( 0.31 ) | 4.69 ( 0.08 ) | 10.77 | 0.87 | 0.61 | 10.46 | 4.69 |\n", + "| 26 | 100 | 500 | 0.3 | 5.00 | 0.17 | 0.66 ( 0.01 ) | 8.6 ( 0.65 ) | 3.19 ( 0.12 ) | 10.41 | 0.64 | 0.66 | 8.60 | 3.19 |\n", + "| 27 | 500 | 500 | 0.3 | 1.00 | 0.19 | 0.85 ( 0 ) | 25.12 ( 1.08 ) | 0 ( 0 ) | 30.12 | 0.77 | 0.85 | 25.12 | 0.00 |\n", + "| 28 | 1000 | 500 | 0.3 | 0.50 | 0.25 | 0.86 ( 0 ) | 18.48 ( 0.73 ) | 0 ( 0 ) | 23.48 | 0.72 | 0.86 | 18.48 | 0.00 |\n", + "| 29 | 50 | 1000 | 0.3 | 20.00 | 0.02 | 0.6 ( 0.01 ) | 12.08 ( 0.26 ) | 4.97 ( 0.08 ) | 12.11 | 0.91 | 0.60 | 12.08 | 4.97 |\n", + "| 30 | 100 | 1000 | 0.3 | 10.00 | 0.13 | 0.65 ( 0.01 ) | 9 ( 0.66 ) | 3.58 ( 0.12 ) | 10.42 | 0.72 | 0.65 | 9.00 | 3.58 |\n", + "| ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ |\n", + "| 51 | 500 | 50 | 0.7 | 0.10 | 0.49 | 0.91 ( 0 ) | 5.84 ( 0.26 ) | 0 ( 0 ) | 10.84 | 0.42 | 0.91 | 5.84 | 0.00 |\n", + "| 52 | 1000 | 50 | 0.7 | 0.05 | 0.71 | 0.92 ( 0 ) | 3.03 ( 0.15 ) | 0 ( 0 ) | 8.03 | 0.23 | 0.92 | 3.03 | 0.00 |\n", + "| 53 | 50 | 100 | 0.7 | 2.00 | 0.21 | 0.69 ( 0.01 ) | 5.07 ( 0.25 ) | 3.13 ( 0.1 ) | 6.94 | 0.55 | 0.69 | 5.07 | 3.13 |\n", + "| 54 | 100 | 100 | 0.7 | 1.00 | 0.28 | 0.82 ( 0.01 ) | 9.65 ( 0.48 ) | 0.97 ( 0.1 ) | 13.68 | 0.59 | 0.82 | 9.65 | 0.97 |\n", + "| 55 | 500 | 100 | 0.7 | 0.20 | 0.36 | 0.91 ( 0 ) | 10.19 ( 0.37 ) | 0 ( 0 ) | 15.19 | 0.58 | 0.91 | 10.19 | 0.00 |\n", + "| 56 | 1000 | 100 | 0.7 | 0.10 | 0.59 | 0.92 ( 0 ) | 4.81 ( 0.19 ) | 0 ( 0 ) | 9.81 | 0.37 | 0.92 | 4.81 | 0.00 |\n", + "| 57 | 50 | 500 | 0.7 | 10.00 | 0.09 | 0.66 ( 0.01 ) | 9.13 ( 0.25 ) | 4.14 ( 0.08 ) | 9.99 | 0.81 | 0.66 | 9.13 | 4.14 |\n", + "| 58 | 100 | 500 | 0.7 | 5.00 | 0.21 | 0.75 ( 0.01 ) | 9.59 ( 0.72 ) | 2.44 ( 0.11 ) | 12.15 | 0.61 | 0.75 | 9.59 | 2.44 |\n", + "| 59 | 500 | 500 | 0.7 | 1.00 | 0.18 | 0.9 ( 0 ) | 26.2 ( 0.86 ) | 0 ( 0 ) | 31.20 | 0.79 | 0.90 | 26.20 | 0.00 |\n", + "| 60 | 1000 | 500 | 0.7 | 0.50 | 0.28 | 0.91 ( 0 ) | 15.6 ( 0.55 ) | 0 ( 0 ) | 20.60 | 0.68 | 0.91 | 15.60 | 0.00 |\n", + "| 61 | 50 | 1000 | 0.7 | 20.00 | 0.05 | 0.64 ( 0.01 ) | 11.44 ( 0.28 ) | 4.51 ( 0.08 ) | 11.93 | 0.87 | 0.64 | 11.44 | 4.51 |\n", + "| 62 | 100 | 1000 | 0.7 | 10.00 | 0.18 | 0.71 ( 0.01 ) | 10.03 ( 0.71 ) | 2.95 ( 0.1 ) | 12.08 | 0.65 | 0.71 | 10.03 | 2.95 |\n", + "| 63 | 500 | 1000 | 0.7 | 2.00 | 0.14 | 0.9 ( 0 ) | 34.85 ( 1.14 ) | 0 ( 0 ) | 39.85 | 0.83 | 0.90 | 34.85 | 0.00 |\n", + "| 64 | 1000 | 1000 | 0.7 | 1.00 | 0.20 | 0.91 ( 0 ) | 24.83 ( 0.82 ) | 0 ( 0 ) | 29.83 | 0.78 | 0.91 | 24.83 | 0.00 |\n", + "| 65 | 50 | 50 | 0.9 | 1.00 | 0.30 | 0.73 ( 0.01 ) | 4.4 ( 0.26 ) | 2.55 ( 0.11 ) | 6.85 | 0.44 | 0.73 | 4.40 | 2.55 |\n", + "| 66 | 100 | 50 | 0.9 | 0.50 | 0.33 | 0.85 ( 0.01 ) | 8.14 ( 0.35 ) | 0.42 ( 0.06 ) | 12.72 | 0.53 | 0.85 | 8.14 | 0.42 |\n", + "| 67 | 500 | 50 | 0.9 | 0.10 | 0.54 | 0.92 ( 0 ) | 5.15 ( 0.22 ) | 0 ( 0 ) | 10.15 | 0.38 | 0.92 | 5.15 | 0.00 |\n", + "| 68 | 1000 | 50 | 0.9 | 0.05 | 0.76 | 0.92 ( 0 ) | 2.61 ( 0.13 ) | 0 ( 0 ) | 7.61 | 0.19 | 0.92 | 2.61 | 0.00 |\n", + "| 69 | 50 | 100 | 0.9 | 2.00 | 0.23 | 0.7 ( 0.01 ) | 4.84 ( 0.24 ) | 3.3 ( 0.09 ) | 6.54 | 0.54 | 0.70 | 4.84 | 3.30 |\n", + "| 70 | 100 | 100 | 0.9 | 1.00 | 0.28 | 0.81 ( 0.01 ) | 9.92 ( 0.51 ) | 0.87 ( 0.08 ) | 14.05 | 0.57 | 0.81 | 9.92 | 0.87 |\n", + "| 71 | 500 | 100 | 0.9 | 0.20 | 0.37 | 0.92 ( 0 ) | 9.65 ( 0.35 ) | 0 ( 0 ) | 14.65 | 0.57 | 0.92 | 9.65 | 0.00 |\n", + "| 72 | 1000 | 100 | 0.9 | 0.10 | 0.62 | 0.93 ( 0 ) | 4.29 ( 0.18 ) | 0 ( 0 ) | 9.29 | 0.33 | 0.93 | 4.29 | 0.00 |\n", + "| 73 | 50 | 500 | 0.9 | 10.00 | 0.08 | 0.62 ( 0.01 ) | 8.99 ( 0.26 ) | 4.13 ( 0.09 ) | 9.86 | 0.8 | 0.62 | 8.99 | 4.13 |\n", + "| 74 | 100 | 500 | 0.9 | 5.00 | 0.23 | 0.74 ( 0.01 ) | 8.85 ( 0.62 ) | 2.4 ( 0.12 ) | 11.45 | 0.6 | 0.74 | 8.85 | 2.40 |\n", + "| 75 | 500 | 500 | 0.9 | 1.00 | 0.19 | 0.91 ( 0 ) | 24.91 ( 0.78 ) | 0 ( 0 ) | 29.91 | 0.78 | 0.91 | 24.91 | 0.00 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.50 | 0.31 | 0.92 ( 0 ) | 14.12 ( 0.43 ) | 0 ( 0 ) | 19.12 | 0.67 | 0.92 | 14.12 | 0.00 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.00 | 0.07 | 0.64 ( 0.01 ) | 10.81 ( 0.29 ) | 4.22 ( 0.08 ) | 11.59 | 0.84 | 0.64 | 10.81 | 4.22 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.00 | 0.19 | 0.74 ( 0.01 ) | 11.15 ( 0.75 ) | 2.44 ( 0.11 ) | 13.71 | 0.65 | 0.74 | 11.15 | 2.44 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.00 | 0.14 | 0.91 ( 0 ) | 34.98 ( 1.04 ) | 0 ( 0 ) | 39.98 | 0.83 | 0.91 | 34.98 | 0.00 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.00 | 0.22 | 0.92 ( 0 ) | 22.21 ( 0.73 ) | 0 ( 0 ) | 27.21 | 0.76 | 0.92 | 22.21 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "1 50 50 0.1 1.00 0.03 0.59 ( 0.01 ) 2.69 ( 0.14 ) 5.3 ( 0.07 ) \n", + "2 100 50 0.1 0.50 0.11 0.56 ( 0.01 ) 2.02 ( 0.15 ) 5.02 ( 0.08 )\n", + "3 500 50 0.1 0.10 0.28 0.63 ( 0 ) 4.52 ( 0.29 ) 3 ( 0.11 ) \n", + "4 1000 50 0.1 0.05 0.39 0.64 ( 0 ) 4.74 ( 0.22 ) 2.1 ( 0.09 ) \n", + "5 50 100 0.1 2.00 0.02 0.62 ( 0.01 ) 3.82 ( 0.16 ) 5.34 ( 0.07 )\n", + "6 100 100 0.1 1.00 0.07 0.56 ( 0.01 ) 2.29 ( 0.19 ) 5.27 ( 0.08 )\n", + "7 500 100 0.1 0.20 0.23 0.61 ( 0 ) 5.54 ( 0.52 ) 3.27 ( 0.12 )\n", + "8 1000 100 0.1 0.10 0.27 0.64 ( 0 ) 7.69 ( 0.42 ) 2.25 ( 0.1 ) \n", + "9 50 500 0.1 10.00 0.01 0.6 ( 0.01 ) 8.69 ( 0.24 ) 5.55 ( 0.06 )\n", + "10 100 500 0.1 5.00 0.03 0.56 ( 0.01 ) 4.39 ( 0.34 ) 5.4 ( 0.07 ) \n", + "11 500 500 0.1 1.00 0.27 0.61 ( 0.01 ) 3.84 ( 0.28 ) 3.93 ( 0.08 )\n", + "12 1000 500 0.1 0.50 0.20 0.63 ( 0 ) 9.87 ( 1.4 ) 3.18 ( 0.09 )\n", + "13 50 1000 0.1 20.00 0.00 0.62 ( 0.01 ) 10.42 ( 0.22 ) 5.56 ( 0.06 )\n", + "14 100 1000 0.1 10.00 0.01 0.56 ( 0.01 ) 5.93 ( 0.28 ) 5.53 ( 0.06 )\n", + "15 500 1000 0.1 2.00 0.24 0.62 ( 0.01 ) 4.22 ( 0.48 ) 4.05 ( 0.09 )\n", + "16 1000 1000 0.1 1.00 0.33 0.63 ( 0 ) 5.03 ( 0.78 ) 3.35 ( 0.06 )\n", + "17 50 50 0.3 1.00 0.17 0.65 ( 0.01 ) 3.87 ( 0.23 ) 3.68 ( 0.12 )\n", + "18 100 50 0.3 0.50 0.32 0.78 ( 0.01 ) 6.48 ( 0.32 ) 1.13 ( 0.11 )\n", + "19 500 50 0.3 0.10 0.44 0.85 ( 0 ) 6.84 ( 0.26 ) 0 ( 0 ) \n", + "20 1000 50 0.3 0.05 0.65 0.86 ( 0 ) 3.69 ( 0.19 ) 0 ( 0 ) \n", + "21 50 100 0.3 2.00 0.14 0.63 ( 0.01 ) 5.12 ( 0.25 ) 3.91 ( 0.1 ) \n", + "22 100 100 0.3 1.00 0.26 0.74 ( 0.01 ) 7.62 ( 0.48 ) 1.8 ( 0.12 ) \n", + "23 500 100 0.3 0.20 0.36 0.86 ( 0 ) 10.19 ( 0.4 ) 0 ( 0 ) \n", + "24 1000 100 0.3 0.10 0.52 0.86 ( 0 ) 6 ( 0.27 ) 0 ( 0 ) \n", + "25 50 500 0.3 10.00 0.03 0.61 ( 0.01 ) 10.46 ( 0.31 ) 4.69 ( 0.08 )\n", + "26 100 500 0.3 5.00 0.17 0.66 ( 0.01 ) 8.6 ( 0.65 ) 3.19 ( 0.12 )\n", + "27 500 500 0.3 1.00 0.19 0.85 ( 0 ) 25.12 ( 1.08 ) 0 ( 0 ) \n", + "28 1000 500 0.3 0.50 0.25 0.86 ( 0 ) 18.48 ( 0.73 ) 0 ( 0 ) \n", + "29 50 1000 0.3 20.00 0.02 0.6 ( 0.01 ) 12.08 ( 0.26 ) 4.97 ( 0.08 )\n", + "30 100 1000 0.3 10.00 0.13 0.65 ( 0.01 ) 9 ( 0.66 ) 3.58 ( 0.12 )\n", + "⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ \n", + "51 500 50 0.7 0.10 0.49 0.91 ( 0 ) 5.84 ( 0.26 ) 0 ( 0 ) \n", + "52 1000 50 0.7 0.05 0.71 0.92 ( 0 ) 3.03 ( 0.15 ) 0 ( 0 ) \n", + "53 50 100 0.7 2.00 0.21 0.69 ( 0.01 ) 5.07 ( 0.25 ) 3.13 ( 0.1 ) \n", + "54 100 100 0.7 1.00 0.28 0.82 ( 0.01 ) 9.65 ( 0.48 ) 0.97 ( 0.1 ) \n", + "55 500 100 0.7 0.20 0.36 0.91 ( 0 ) 10.19 ( 0.37 ) 0 ( 0 ) \n", + "56 1000 100 0.7 0.10 0.59 0.92 ( 0 ) 4.81 ( 0.19 ) 0 ( 0 ) \n", + "57 50 500 0.7 10.00 0.09 0.66 ( 0.01 ) 9.13 ( 0.25 ) 4.14 ( 0.08 )\n", + "58 100 500 0.7 5.00 0.21 0.75 ( 0.01 ) 9.59 ( 0.72 ) 2.44 ( 0.11 )\n", + "59 500 500 0.7 1.00 0.18 0.9 ( 0 ) 26.2 ( 0.86 ) 0 ( 0 ) \n", + "60 1000 500 0.7 0.50 0.28 0.91 ( 0 ) 15.6 ( 0.55 ) 0 ( 0 ) \n", + "61 50 1000 0.7 20.00 0.05 0.64 ( 0.01 ) 11.44 ( 0.28 ) 4.51 ( 0.08 )\n", + "62 100 1000 0.7 10.00 0.18 0.71 ( 0.01 ) 10.03 ( 0.71 ) 2.95 ( 0.1 ) \n", + "63 500 1000 0.7 2.00 0.14 0.9 ( 0 ) 34.85 ( 1.14 ) 0 ( 0 ) \n", + "64 1000 1000 0.7 1.00 0.20 0.91 ( 0 ) 24.83 ( 0.82 ) 0 ( 0 ) \n", + "65 50 50 0.9 1.00 0.30 0.73 ( 0.01 ) 4.4 ( 0.26 ) 2.55 ( 0.11 )\n", + "66 100 50 0.9 0.50 0.33 0.85 ( 0.01 ) 8.14 ( 0.35 ) 0.42 ( 0.06 )\n", + "67 500 50 0.9 0.10 0.54 0.92 ( 0 ) 5.15 ( 0.22 ) 0 ( 0 ) \n", + "68 1000 50 0.9 0.05 0.76 0.92 ( 0 ) 2.61 ( 0.13 ) 0 ( 0 ) \n", + "69 50 100 0.9 2.00 0.23 0.7 ( 0.01 ) 4.84 ( 0.24 ) 3.3 ( 0.09 ) \n", + "70 100 100 0.9 1.00 0.28 0.81 ( 0.01 ) 9.92 ( 0.51 ) 0.87 ( 0.08 )\n", + "71 500 100 0.9 0.20 0.37 0.92 ( 0 ) 9.65 ( 0.35 ) 0 ( 0 ) \n", + "72 1000 100 0.9 0.10 0.62 0.93 ( 0 ) 4.29 ( 0.18 ) 0 ( 0 ) \n", + "73 50 500 0.9 10.00 0.08 0.62 ( 0.01 ) 8.99 ( 0.26 ) 4.13 ( 0.09 )\n", + "74 100 500 0.9 5.00 0.23 0.74 ( 0.01 ) 8.85 ( 0.62 ) 2.4 ( 0.12 ) \n", + "75 500 500 0.9 1.00 0.19 0.91 ( 0 ) 24.91 ( 0.78 ) 0 ( 0 ) \n", + "76 1000 500 0.9 0.50 0.31 0.92 ( 0 ) 14.12 ( 0.43 ) 0 ( 0 ) \n", + "77 50 1000 0.9 20.00 0.07 0.64 ( 0.01 ) 10.81 ( 0.29 ) 4.22 ( 0.08 )\n", + "78 100 1000 0.9 10.00 0.19 0.74 ( 0.01 ) 11.15 ( 0.75 ) 2.44 ( 0.11 )\n", + "79 500 1000 0.9 2.00 0.14 0.91 ( 0 ) 34.98 ( 1.04 ) 0 ( 0 ) \n", + "80 1000 1000 0.9 1.00 0.22 0.92 ( 0 ) 22.21 ( 0.73 ) 0 ( 0 ) \n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "1 2.39 0.67 0.59 2.69 5.30 \n", + "2 2.00 0.39 0.56 2.02 5.02 \n", + "3 6.52 0.45 0.63 4.52 3.00 \n", + "4 7.64 0.44 0.64 4.74 2.10 \n", + "5 3.48 0.78 0.62 3.82 5.34 \n", + "6 2.02 0.57 0.56 2.29 5.27 \n", + "7 7.27 0.47 0.61 5.54 3.27 \n", + "8 10.44 0.56 0.64 7.69 2.25 \n", + "9 8.14 0.94 0.60 8.69 5.55 \n", + "10 3.99 0.82 0.56 4.39 5.40 \n", + "11 4.91 0.47 0.61 3.84 3.93 \n", + "12 11.69 0.49 0.63 9.87 3.18 \n", + "13 9.86 0.95 0.62 10.42 5.56 \n", + "14 5.40 0.9 0.56 5.93 5.53 \n", + "15 5.17 0.46 0.62 4.22 4.05 \n", + "16 6.68 0.42 0.63 5.03 3.35 \n", + "17 5.19 0.5 0.65 3.87 3.68 \n", + "18 10.35 0.49 0.78 6.48 1.13 \n", + "19 11.84 0.47 0.85 6.84 0.00 \n", + "20 8.69 0.28 0.86 3.69 0.00 \n", + "21 6.21 0.63 0.63 5.12 3.91 \n", + "22 10.82 0.53 0.74 7.62 1.80 \n", + "23 15.19 0.57 0.86 10.19 0.00 \n", + "24 11.00 0.42 0.86 6.00 0.00 \n", + "25 10.77 0.87 0.61 10.46 4.69 \n", + "26 10.41 0.64 0.66 8.60 3.19 \n", + "27 30.12 0.77 0.85 25.12 0.00 \n", + "28 23.48 0.72 0.86 18.48 0.00 \n", + "29 12.11 0.91 0.60 12.08 4.97 \n", + "30 10.42 0.72 0.65 9.00 3.58 \n", + "⋮ ⋮ ⋮ ⋮ ⋮ ⋮ \n", + "51 10.84 0.42 0.91 5.84 0.00 \n", + "52 8.03 0.23 0.92 3.03 0.00 \n", + "53 6.94 0.55 0.69 5.07 3.13 \n", + "54 13.68 0.59 0.82 9.65 0.97 \n", + "55 15.19 0.58 0.91 10.19 0.00 \n", + "56 9.81 0.37 0.92 4.81 0.00 \n", + "57 9.99 0.81 0.66 9.13 4.14 \n", + "58 12.15 0.61 0.75 9.59 2.44 \n", + "59 31.20 0.79 0.90 26.20 0.00 \n", + "60 20.60 0.68 0.91 15.60 0.00 \n", + "61 11.93 0.87 0.64 11.44 4.51 \n", + "62 12.08 0.65 0.71 10.03 2.95 \n", + "63 39.85 0.83 0.90 34.85 0.00 \n", + "64 29.83 0.78 0.91 24.83 0.00 \n", + "65 6.85 0.44 0.73 4.40 2.55 \n", + "66 12.72 0.53 0.85 8.14 0.42 \n", + "67 10.15 0.38 0.92 5.15 0.00 \n", + "68 7.61 0.19 0.92 2.61 0.00 \n", + "69 6.54 0.54 0.70 4.84 3.30 \n", + "70 14.05 0.57 0.81 9.92 0.87 \n", + "71 14.65 0.57 0.92 9.65 0.00 \n", + "72 9.29 0.33 0.93 4.29 0.00 \n", + "73 9.86 0.8 0.62 8.99 4.13 \n", + "74 11.45 0.6 0.74 8.85 2.40 \n", + "75 29.91 0.78 0.91 24.91 0.00 \n", + "76 19.12 0.67 0.92 14.12 0.00 \n", + "77 11.59 0.84 0.64 10.81 4.22 \n", + "78 13.71 0.65 0.74 11.15 2.44 \n", + "79 39.98 0.83 0.91 34.98 0.00 \n", + "80 27.21 0.76 0.92 22.21 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_block\n", + "\n", + "## export\n", + "write.table(result.table_block, '../results_summary_bin/sim_block_lasso_binary.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_bin/2.2_sim_block_elnet_binary_update.ipynb b/simulations/notebooks_sim_bin/2.2_sim_block_elnet_binary_update.ipynb new file mode 100644 index 0000000..26fb822 --- /dev/null +++ b/simulations/notebooks_sim_bin/2.2_sim_block_elnet_binary_update.ipynb @@ -0,0 +1,972 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize elastic net results on Block Simulation Scenarios for binary outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "rou.list = seq(0.1, 0.9, 0.2)\n", + "\n", + "files = NULL\n", + "for (rou in rou.list){\n", + " for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_block_corr', rou, paste('P', p, 'N', n, sep='_'), '.RData', sep=''))\n", + " }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "80" + ], + "text/latex": [ + "80" + ], + "text/markdown": [ + "80" + ], + "text/plain": [ + "[1] 80" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "length(files)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1] \"indx: 1\"\n", + "[1] \"indx: 2\"\n", + "[1] \"indx: 3\"\n", + "[1] \"indx: 4\"\n", + "[1] \"indx: 5\"\n", + "[1] \"indx: 6\"\n", + "[1] \"indx: 7\"\n", + "[1] \"indx: 8\"\n", + "[1] \"indx: 9\"\n", + "[1] \"indx: 10\"\n", + "[1] \"indx: 11\"\n", + "[1] \"indx: 12\"\n", + "[1] \"indx: 13\"\n", + "[1] \"indx: 14\"\n", + "[1] \"indx: 15\"\n", + "[1] \"indx: 16\"\n", + "[1] \"indx: 17\"\n", + "[1] \"indx: 18\"\n", + "[1] \"indx: 19\"\n", + "[1] \"indx: 20\"\n", + "[1] \"indx: 21\"\n", + "[1] \"indx: 22\"\n", + "[1] \"indx: 23\"\n", + "[1] \"indx: 24\"\n", + "[1] \"indx: 25\"\n", + "[1] \"indx: 26\"\n", + "[1] \"indx: 27\"\n", + "[1] \"indx: 28\"\n", + "[1] \"indx: 29\"\n", + "[1] \"indx: 30\"\n", + "[1] \"indx: 31\"\n", + "[1] \"indx: 32\"\n", + "[1] \"indx: 33\"\n", + "[1] \"indx: 34\"\n", + "[1] \"indx: 35\"\n", + "[1] \"indx: 36\"\n", + "[1] \"indx: 37\"\n", + "[1] \"indx: 38\"\n", + "[1] \"indx: 39\"\n", + "[1] \"indx: 40\"\n", + "[1] \"indx: 41\"\n", + "[1] \"indx: 42\"\n", + "[1] \"indx: 43\"\n", + "[1] \"indx: 44\"\n", + "[1] \"indx: 45\"\n", + "[1] \"indx: 46\"\n", + "[1] \"indx: 47\"\n", + "[1] \"indx: 48\"\n", + "[1] \"indx: 49\"\n", + "[1] \"indx: 50\"\n", + "[1] \"indx: 51\"\n", + "[1] \"indx: 52\"\n", + "[1] \"indx: 53\"\n", + "[1] \"indx: 54\"\n", + "[1] \"indx: 55\"\n", + "[1] \"indx: 56\"\n", + "[1] \"indx: 57\"\n", + "[1] \"indx: 58\"\n", + "[1] \"indx: 59\"\n", + "[1] \"indx: 60\"\n", + "[1] \"indx: 61\"\n", + "[1] \"indx: 62\"\n", + "[1] \"indx: 63\"\n", + "[1] \"indx: 64\"\n", + "[1] \"indx: 65\"\n", + "[1] \"indx: 66\"\n", + "[1] \"indx: 67\"\n", + "[1] \"indx: 68\"\n", + "[1] \"indx: 69\"\n", + "[1] \"indx: 70\"\n", + "[1] \"indx: 71\"\n", + "[1] \"indx: 72\"\n", + "[1] \"indx: 73\"\n", + "[1] \"indx: 74\"\n", + "[1] \"indx: 75\"\n", + "[1] \"indx: 76\"\n", + "[1] \"indx: 77\"\n", + "[1] \"indx: 78\"\n", + "[1] \"indx: 79\"\n", + "[1] \"indx: 80\"\n" + ] + } + ], + "source": [ + "avg_FDR = NULL\n", + "table_block = NULL\n", + "tmp_num_select = rep(0, length(files))\n", + "for (i in 1:length(files)){\n", + " print(paste0('indx: ', i))\n", + " load(paste0(dir, '/binary_update/block_Elnet_binary_', i, '.RData')) \n", + " \n", + " table_block = rbind(table_block, results_block_elnet[c('n', 'p', 'rou', 'FP', 'FN', 'ROC', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_block_elnet$Stab.table))\n", + " \n", + " # calculate FDR\n", + " load(file_name, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_block_elnet$Stab.table\n", + " FDR = NULL # false positive rate\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}\n", + "table_block = as.data.frame(table_block)\n", + "table_block$num_select = tmp_num_select\n", + "table_block$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
150500.117.05 ( 1.31 )3.17 ( 0.19 )0.61 ( 0.01 )0.0118.880.80
2100500.113.62 ( 1.31 )2.9 ( 0.17 )0.59 ( 0.01 )0.0415.720.64
3500500.116.89 ( 1.14 )1.1 ( 0.13 )0.64 ( 0 )0.1120.790.68
41000500.119.43 ( 1.02 )0.42 ( 0.08 )0.66 ( 0 )0.1224.010.71
5501000.127.39 ( 2.11 )3.38 ( 0.17 )0.63 ( 0.01 )0.0129.010.87
61001000.126.17 ( 2.4 )3.34 ( 0.16 )0.59 ( 0.01 )0.0227.830.84
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 17.05 ( 1.31 ) & 3.17 ( 0.19 ) & 0.61 ( 0.01 ) & 0.01 & 18.88 & 0.80\\\\\n", + "\t2 & 100 & 50 & 0.1 & 13.62 ( 1.31 ) & 2.9 ( 0.17 ) & 0.59 ( 0.01 ) & 0.04 & 15.72 & 0.64\\\\\n", + "\t3 & 500 & 50 & 0.1 & 16.89 ( 1.14 ) & 1.1 ( 0.13 ) & 0.64 ( 0 ) & 0.11 & 20.79 & 0.68\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 19.43 ( 1.02 ) & 0.42 ( 0.08 ) & 0.66 ( 0 ) & 0.12 & 24.01 & 0.71\\\\\n", + "\t5 & 50 & 100 & 0.1 & 27.39 ( 2.11 ) & 3.38 ( 0.17 ) & 0.63 ( 0.01 ) & 0.01 & 29.01 & 0.87\\\\\n", + "\t6 & 100 & 100 & 0.1 & 26.17 ( 2.4 ) & 3.34 ( 0.16 ) & 0.59 ( 0.01 ) & 0.02 & 27.83 & 0.84\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 17.05 ( 1.31 ) | 3.17 ( 0.19 ) | 0.61 ( 0.01 ) | 0.01 | 18.88 | 0.80 |\n", + "| 2 | 100 | 50 | 0.1 | 13.62 ( 1.31 ) | 2.9 ( 0.17 ) | 0.59 ( 0.01 ) | 0.04 | 15.72 | 0.64 |\n", + "| 3 | 500 | 50 | 0.1 | 16.89 ( 1.14 ) | 1.1 ( 0.13 ) | 0.64 ( 0 ) | 0.11 | 20.79 | 0.68 |\n", + "| 4 | 1000 | 50 | 0.1 | 19.43 ( 1.02 ) | 0.42 ( 0.08 ) | 0.66 ( 0 ) | 0.12 | 24.01 | 0.71 |\n", + "| 5 | 50 | 100 | 0.1 | 27.39 ( 2.11 ) | 3.38 ( 0.17 ) | 0.63 ( 0.01 ) | 0.01 | 29.01 | 0.87 |\n", + "| 6 | 100 | 100 | 0.1 | 26.17 ( 2.4 ) | 3.34 ( 0.16 ) | 0.59 ( 0.01 ) | 0.02 | 27.83 | 0.84 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select FDR \n", + "1 50 50 0.1 17.05 ( 1.31 ) 3.17 ( 0.19 ) 0.61 ( 0.01 ) 0.01 18.88 0.80\n", + "2 100 50 0.1 13.62 ( 1.31 ) 2.9 ( 0.17 ) 0.59 ( 0.01 ) 0.04 15.72 0.64\n", + "3 500 50 0.1 16.89 ( 1.14 ) 1.1 ( 0.13 ) 0.64 ( 0 ) 0.11 20.79 0.68\n", + "4 1000 50 0.1 19.43 ( 1.02 ) 0.42 ( 0.08 ) 0.66 ( 0 ) 0.12 24.01 0.71\n", + "5 50 100 0.1 27.39 ( 2.11 ) 3.38 ( 0.17 ) 0.63 ( 0.01 ) 0.01 29.01 0.87\n", + "6 100 100 0.1 26.17 ( 2.4 ) 3.34 ( 0.16 ) 0.59 ( 0.01 ) 0.02 27.83 0.84" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
755005000.915.52 ( 1.4 )0 ( 0 )0.91 ( 0 )0.2820.520.57
7610005000.914.84 ( 1.41 )0 ( 0 )0.92 ( 0 )0.2919.840.56
775010000.978.65 ( 8.46 )3.08 ( 0.12 )0.63 ( 0.01 )0.0280.570.92
7810010000.943.94 ( 6.95 )2.01 ( 0.11 )0.74 ( 0.01 )0.0646.930.79
7950010000.918.95 ( 1.93 )0 ( 0 )0.91 ( 0 )0.2523.950.60
80100010000.915.24 ( 1.68 )0 ( 0 )0.92 ( 0 )0.2920.240.52
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 15.52 ( 1.4 ) & 0 ( 0 ) & 0.91 ( 0 ) & 0.28 & 20.52 & 0.57\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 14.84 ( 1.41 ) & 0 ( 0 ) & 0.92 ( 0 ) & 0.29 & 19.84 & 0.56\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 78.65 ( 8.46 ) & 3.08 ( 0.12 ) & 0.63 ( 0.01 ) & 0.02 & 80.57 & 0.92\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 43.94 ( 6.95 ) & 2.01 ( 0.11 ) & 0.74 ( 0.01 ) & 0.06 & 46.93 & 0.79\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 18.95 ( 1.93 ) & 0 ( 0 ) & 0.91 ( 0 ) & 0.25 & 23.95 & 0.60\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 15.24 ( 1.68 ) & 0 ( 0 ) & 0.92 ( 0 ) & 0.29 & 20.24 & 0.52\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 15.52 ( 1.4 ) | 0 ( 0 ) | 0.91 ( 0 ) | 0.28 | 20.52 | 0.57 |\n", + "| 76 | 1000 | 500 | 0.9 | 14.84 ( 1.41 ) | 0 ( 0 ) | 0.92 ( 0 ) | 0.29 | 19.84 | 0.56 |\n", + "| 77 | 50 | 1000 | 0.9 | 78.65 ( 8.46 ) | 3.08 ( 0.12 ) | 0.63 ( 0.01 ) | 0.02 | 80.57 | 0.92 |\n", + "| 78 | 100 | 1000 | 0.9 | 43.94 ( 6.95 ) | 2.01 ( 0.11 ) | 0.74 ( 0.01 ) | 0.06 | 46.93 | 0.79 |\n", + "| 79 | 500 | 1000 | 0.9 | 18.95 ( 1.93 ) | 0 ( 0 ) | 0.91 ( 0 ) | 0.25 | 23.95 | 0.60 |\n", + "| 80 | 1000 | 1000 | 0.9 | 15.24 ( 1.68 ) | 0 ( 0 ) | 0.92 ( 0 ) | 0.29 | 20.24 | 0.52 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select\n", + "75 500 500 0.9 15.52 ( 1.4 ) 0 ( 0 ) 0.91 ( 0 ) 0.28 20.52 \n", + "76 1000 500 0.9 14.84 ( 1.41 ) 0 ( 0 ) 0.92 ( 0 ) 0.29 19.84 \n", + "77 50 1000 0.9 78.65 ( 8.46 ) 3.08 ( 0.12 ) 0.63 ( 0.01 ) 0.02 80.57 \n", + "78 100 1000 0.9 43.94 ( 6.95 ) 2.01 ( 0.11 ) 0.74 ( 0.01 ) 0.06 46.93 \n", + "79 500 1000 0.9 18.95 ( 1.93 ) 0 ( 0 ) 0.91 ( 0 ) 0.25 23.95 \n", + "80 1000 1000 0.9 15.24 ( 1.68 ) 0 ( 0 ) 0.92 ( 0 ) 0.29 20.24 \n", + " FDR \n", + "75 0.57\n", + "76 0.56\n", + "77 0.92\n", + "78 0.79\n", + "79 0.60\n", + "80 0.52" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_block <- apply(table_block,2,as.character)\n", + "rownames(result.table_block) = rownames(table_block)\n", + "result.table_block = as.data.frame(result.table_block)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_block$n = tidyr::extract_numeric(result.table_block$n)\n", + "result.table_block$p = tidyr::extract_numeric(result.table_block$p)\n", + "result.table_block$ratio = result.table_block$p / result.table_block$n\n", + "\n", + "result.table_block = result.table_block[c('n', 'p', 'rou', 'ratio', 'Stab', 'ROC', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_block)[1:4] = c('N', 'P', 'Corr', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_block$Stab = as.numeric(as.character(result.table_block$Stab))\n", + "result.table_block$ROC_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_block$ROC))\n", + "result.table_block$FP_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_block$FP))\n", + "result.table_block$FN_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_block$FN))\n", + "result.table_block$num_select = as.numeric(as.character(result.table_block$num_select))" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "
A data.frame: 0 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
\n" + ], + "text/latex": [ + "A data.frame: 0 × 13\n", + "\\begin{tabular}{lllllllllllll}\n", + " N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 0 × 13\n", + "\n", + "| N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select FDR ROC_mean FP_mean FN_mean" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check whether missing values exists\n", + "result.table_block[rowSums(is.na(result.table_block)) > 0,]" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 500.11.000.010.61 ( 0.01 )17.05 ( 1.31 )3.17 ( 0.19 )18.880.8 0.6117.053.17
2 100 500.10.500.040.59 ( 0.01 )13.62 ( 1.31 )2.9 ( 0.17 ) 15.720.640.5913.622.90
3 500 500.10.100.110.64 ( 0 ) 16.89 ( 1.14 )1.1 ( 0.13 ) 20.790.680.6416.891.10
41000 500.10.050.120.66 ( 0 ) 19.43 ( 1.02 )0.42 ( 0.08 )24.010.710.6619.430.42
5 501000.12.000.010.63 ( 0.01 )27.39 ( 2.11 )3.38 ( 0.17 )29.010.870.6327.393.38
6 1001000.11.000.020.59 ( 0.01 )26.17 ( 2.4 ) 3.34 ( 0.16 )27.830.840.5926.173.34
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1.00 & 0.01 & 0.61 ( 0.01 ) & 17.05 ( 1.31 ) & 3.17 ( 0.19 ) & 18.88 & 0.8 & 0.61 & 17.05 & 3.17\\\\\n", + "\t2 & 100 & 50 & 0.1 & 0.50 & 0.04 & 0.59 ( 0.01 ) & 13.62 ( 1.31 ) & 2.9 ( 0.17 ) & 15.72 & 0.64 & 0.59 & 13.62 & 2.90\\\\\n", + "\t3 & 500 & 50 & 0.1 & 0.10 & 0.11 & 0.64 ( 0 ) & 16.89 ( 1.14 ) & 1.1 ( 0.13 ) & 20.79 & 0.68 & 0.64 & 16.89 & 1.10\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 0.05 & 0.12 & 0.66 ( 0 ) & 19.43 ( 1.02 ) & 0.42 ( 0.08 ) & 24.01 & 0.71 & 0.66 & 19.43 & 0.42\\\\\n", + "\t5 & 50 & 100 & 0.1 & 2.00 & 0.01 & 0.63 ( 0.01 ) & 27.39 ( 2.11 ) & 3.38 ( 0.17 ) & 29.01 & 0.87 & 0.63 & 27.39 & 3.38\\\\\n", + "\t6 & 100 & 100 & 0.1 & 1.00 & 0.02 & 0.59 ( 0.01 ) & 26.17 ( 2.4 ) & 3.34 ( 0.16 ) & 27.83 & 0.84 & 0.59 & 26.17 & 3.34\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1.00 | 0.01 | 0.61 ( 0.01 ) | 17.05 ( 1.31 ) | 3.17 ( 0.19 ) | 18.88 | 0.8 | 0.61 | 17.05 | 3.17 |\n", + "| 2 | 100 | 50 | 0.1 | 0.50 | 0.04 | 0.59 ( 0.01 ) | 13.62 ( 1.31 ) | 2.9 ( 0.17 ) | 15.72 | 0.64 | 0.59 | 13.62 | 2.90 |\n", + "| 3 | 500 | 50 | 0.1 | 0.10 | 0.11 | 0.64 ( 0 ) | 16.89 ( 1.14 ) | 1.1 ( 0.13 ) | 20.79 | 0.68 | 0.64 | 16.89 | 1.10 |\n", + "| 4 | 1000 | 50 | 0.1 | 0.05 | 0.12 | 0.66 ( 0 ) | 19.43 ( 1.02 ) | 0.42 ( 0.08 ) | 24.01 | 0.71 | 0.66 | 19.43 | 0.42 |\n", + "| 5 | 50 | 100 | 0.1 | 2.00 | 0.01 | 0.63 ( 0.01 ) | 27.39 ( 2.11 ) | 3.38 ( 0.17 ) | 29.01 | 0.87 | 0.63 | 27.39 | 3.38 |\n", + "| 6 | 100 | 100 | 0.1 | 1.00 | 0.02 | 0.59 ( 0.01 ) | 26.17 ( 2.4 ) | 3.34 ( 0.16 ) | 27.83 | 0.84 | 0.59 | 26.17 | 3.34 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "1 50 50 0.1 1.00 0.01 0.61 ( 0.01 ) 17.05 ( 1.31 ) 3.17 ( 0.19 )\n", + "2 100 50 0.1 0.50 0.04 0.59 ( 0.01 ) 13.62 ( 1.31 ) 2.9 ( 0.17 ) \n", + "3 500 50 0.1 0.10 0.11 0.64 ( 0 ) 16.89 ( 1.14 ) 1.1 ( 0.13 ) \n", + "4 1000 50 0.1 0.05 0.12 0.66 ( 0 ) 19.43 ( 1.02 ) 0.42 ( 0.08 )\n", + "5 50 100 0.1 2.00 0.01 0.63 ( 0.01 ) 27.39 ( 2.11 ) 3.38 ( 0.17 )\n", + "6 100 100 0.1 1.00 0.02 0.59 ( 0.01 ) 26.17 ( 2.4 ) 3.34 ( 0.16 )\n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "1 18.88 0.8 0.61 17.05 3.17 \n", + "2 15.72 0.64 0.59 13.62 2.90 \n", + "3 20.79 0.68 0.64 16.89 1.10 \n", + "4 24.01 0.71 0.66 19.43 0.42 \n", + "5 29.01 0.87 0.63 27.39 3.38 \n", + "6 27.83 0.84 0.59 26.17 3.34 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
75 500 5000.9 1.00.280.91 ( 0 ) 15.52 ( 1.4 ) 0 ( 0 ) 20.520.570.9115.520.00
761000 5000.9 0.50.290.92 ( 0 ) 14.84 ( 1.41 )0 ( 0 ) 19.840.560.9214.840.00
77 5010000.920.00.020.63 ( 0.01 )78.65 ( 8.46 )3.08 ( 0.12 )80.570.920.6378.653.08
78 10010000.910.00.060.74 ( 0.01 )43.94 ( 6.95 )2.01 ( 0.11 )46.930.790.7443.942.01
79 50010000.9 2.00.250.91 ( 0 ) 18.95 ( 1.93 )0 ( 0 ) 23.950.6 0.9118.950.00
80100010000.9 1.00.290.92 ( 0 ) 15.24 ( 1.68 )0 ( 0 ) 20.240.520.9215.240.00
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 1.0 & 0.28 & 0.91 ( 0 ) & 15.52 ( 1.4 ) & 0 ( 0 ) & 20.52 & 0.57 & 0.91 & 15.52 & 0.00\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.5 & 0.29 & 0.92 ( 0 ) & 14.84 ( 1.41 ) & 0 ( 0 ) & 19.84 & 0.56 & 0.92 & 14.84 & 0.00\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.0 & 0.02 & 0.63 ( 0.01 ) & 78.65 ( 8.46 ) & 3.08 ( 0.12 ) & 80.57 & 0.92 & 0.63 & 78.65 & 3.08\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.0 & 0.06 & 0.74 ( 0.01 ) & 43.94 ( 6.95 ) & 2.01 ( 0.11 ) & 46.93 & 0.79 & 0.74 & 43.94 & 2.01\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.0 & 0.25 & 0.91 ( 0 ) & 18.95 ( 1.93 ) & 0 ( 0 ) & 23.95 & 0.6 & 0.91 & 18.95 & 0.00\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.0 & 0.29 & 0.92 ( 0 ) & 15.24 ( 1.68 ) & 0 ( 0 ) & 20.24 & 0.52 & 0.92 & 15.24 & 0.00\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 1.0 | 0.28 | 0.91 ( 0 ) | 15.52 ( 1.4 ) | 0 ( 0 ) | 20.52 | 0.57 | 0.91 | 15.52 | 0.00 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.5 | 0.29 | 0.92 ( 0 ) | 14.84 ( 1.41 ) | 0 ( 0 ) | 19.84 | 0.56 | 0.92 | 14.84 | 0.00 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.0 | 0.02 | 0.63 ( 0.01 ) | 78.65 ( 8.46 ) | 3.08 ( 0.12 ) | 80.57 | 0.92 | 0.63 | 78.65 | 3.08 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.0 | 0.06 | 0.74 ( 0.01 ) | 43.94 ( 6.95 ) | 2.01 ( 0.11 ) | 46.93 | 0.79 | 0.74 | 43.94 | 2.01 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.0 | 0.25 | 0.91 ( 0 ) | 18.95 ( 1.93 ) | 0 ( 0 ) | 23.95 | 0.6 | 0.91 | 18.95 | 0.00 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.0 | 0.29 | 0.92 ( 0 ) | 15.24 ( 1.68 ) | 0 ( 0 ) | 20.24 | 0.52 | 0.92 | 15.24 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "75 500 500 0.9 1.0 0.28 0.91 ( 0 ) 15.52 ( 1.4 ) 0 ( 0 ) \n", + "76 1000 500 0.9 0.5 0.29 0.92 ( 0 ) 14.84 ( 1.41 ) 0 ( 0 ) \n", + "77 50 1000 0.9 20.0 0.02 0.63 ( 0.01 ) 78.65 ( 8.46 ) 3.08 ( 0.12 )\n", + "78 100 1000 0.9 10.0 0.06 0.74 ( 0.01 ) 43.94 ( 6.95 ) 2.01 ( 0.11 )\n", + "79 500 1000 0.9 2.0 0.25 0.91 ( 0 ) 18.95 ( 1.93 ) 0 ( 0 ) \n", + "80 1000 1000 0.9 1.0 0.29 0.92 ( 0 ) 15.24 ( 1.68 ) 0 ( 0 ) \n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "75 20.52 0.57 0.91 15.52 0.00 \n", + "76 19.84 0.56 0.92 14.84 0.00 \n", + "77 80.57 0.92 0.63 78.65 3.08 \n", + "78 46.93 0.79 0.74 43.94 2.01 \n", + "79 23.95 0.6 0.91 18.95 0.00 \n", + "80 20.24 0.52 0.92 15.24 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(result.table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 80 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 500.1 1.000.010.61 ( 0.01 )17.05 ( 1.31 ) 3.17 ( 0.19 ) 18.880.8 0.61 17.053.17
2 100 500.1 0.500.040.59 ( 0.01 )13.62 ( 1.31 ) 2.9 ( 0.17 ) 15.720.640.59 13.622.90
3 500 500.1 0.100.110.64 ( 0 ) 16.89 ( 1.14 ) 1.1 ( 0.13 ) 20.790.680.64 16.891.10
41000 500.1 0.050.120.66 ( 0 ) 19.43 ( 1.02 ) 0.42 ( 0.08 ) 24.010.710.66 19.430.42
5 50 1000.1 2.000.010.63 ( 0.01 )27.39 ( 2.11 ) 3.38 ( 0.17 ) 29.010.870.63 27.393.38
6 100 1000.1 1.000.020.59 ( 0.01 )26.17 ( 2.4 ) 3.34 ( 0.16 ) 27.830.840.59 26.173.34
7 500 1000.1 0.200.090.62 ( 0 ) 22.75 ( 1.87 ) 1.61 ( 0.13 ) 26.140.690.62 22.751.61
81000 1000.1 0.100.100.64 ( 0 ) 28.32 ( 1.88 ) 0.66 ( 0.1 ) 32.660.770.64 28.320.66
9 50 5000.110.000.000.61 ( 0.01 )69.03 ( 7.45 ) 4.13 ( 0.19 ) 69.900.960.61 69.034.13
10 100 5000.1 5.000.000.57 ( 0.01 )70.64 ( 9.13 ) 3.91 ( 0.17 ) 71.730.910.57 70.643.91
11 500 5000.1 1.000.100.61 ( 0.01 )20.55 ( 4.33 ) 3.15 ( 0.1 ) 22.400.620.61 20.553.15
121000 5000.1 0.500.120.63 ( 0 ) 26.03 ( 3.45 ) 2.38 ( 0.11 ) 28.650.620.63 26.032.38
13 5010000.120.000.000.59 ( 0.01 )103.61 ( 10.54 )4.34 ( 0.18 )104.270.980.59103.614.34
14 10010000.110.000.000.56 ( 0.01 )103.21 ( 12.75 )4.15 ( 0.17 )104.060.950.56103.214.15
15 50010000.1 2.000.070.61 ( 0 ) 29.41 ( 7.4 ) 3.25 ( 0.09 ) 31.160.620.61 29.413.25
16100010000.1 1.000.180.62 ( 0 ) 16.15 ( 2.77 ) 2.73 ( 0.09 ) 18.420.530.62 16.152.73
17 50 500.3 1.000.080.68 ( 0.01 )14.8 ( 1.01 ) 1.73 ( 0.15 ) 18.070.690.68 14.801.73
18 100 500.3 0.500.150.77 ( 0.01 )15.15 ( 1 ) 0.64 ( 0.09 ) 19.510.650.77 15.150.64
19 500 500.3 0.100.350.85 ( 0 ) 8.95 ( 0.69 ) 0 ( 0 ) 13.950.460.85 8.950.00
201000 500.3 0.050.330.86 ( 0 ) 9.66 ( 0.93 ) 0 ( 0 ) 14.660.440.86 9.660.00
21 50 1000.3 2.000.050.67 ( 0.01 )23.92 ( 2 ) 2.13 ( 0.15 ) 26.790.770.67 23.922.13
22 100 1000.3 1.000.140.74 ( 0.01 )17.75 ( 1.51 ) 1.13 ( 0.11 ) 21.620.670.74 17.751.13
23 500 1000.3 0.200.320.86 ( 0 ) 11.53 ( 1.02 ) 0.01 ( 0.01 ) 16.520.510.86 11.530.01
241000 1000.3 0.100.330.86 ( 0 ) 11.15 ( 1.03 ) 0 ( 0 ) 16.150.490.86 11.150.00
25 50 5000.310.000.010.6 ( 0.01 ) 81.07 ( 6.91 ) 2.92 ( 0.14 ) 83.150.930.60 81.072.92
26 100 5000.3 5.000.060.66 ( 0.01 )38.14 ( 5.11 ) 2.16 ( 0.13 ) 40.980.780.66 38.142.16
27 500 5000.3 1.000.220.84 ( 0 ) 20.87 ( 1.93 ) 0.02 ( 0.01 ) 25.850.630.84 20.870.02
281000 5000.3 0.500.290.86 ( 0 ) 15.35 ( 1.6 ) 0 ( 0 ) 20.350.530.86 15.350.00
29 5010000.320.000.010.63 ( 0.01 )104.78 ( 9.53 ) 3.37 ( 0.14 )106.410.960.63104.783.37
30 10010000.310.000.040.64 ( 0.01 )55.95 ( 7.57 ) 2.5 ( 0.13 ) 58.450.850.64 55.952.50
51 500 500.7 0.100.340.91 ( 0 ) 9.34 ( 0.72 ) 0 ( 0 ) 14.340.480.91 9.340.00
521000 500.7 0.050.360.91 ( 0 ) 8.58 ( 0.78 ) 0 ( 0 ) 13.580.420.91 8.580.00
53 50 1000.7 2.000.070.69 ( 0.01 )24.95 ( 1.99 )1.47 ( 0.1 ) 28.480.760.6924.951.47
54 100 1000.7 1.000.170.79 ( 0.01 )15.63 ( 1.26 )0.96 ( 0.11 )19.670.630.7915.630.96
55 500 1000.7 0.200.340.9 ( 0 ) 10.78 ( 0.81 )0.01 ( 0.01 )15.770.5 0.9010.780.01
561000 1000.7 0.100.380.91 ( 0 ) 9.42 ( 0.9 ) 0 ( 0 ) 14.420.440.91 9.420.00
57 50 5000.710.000.020.62 ( 0.01 )66.01 ( 6.05 )2.75 ( 0.12 )68.260.920.6266.012.75
58 100 5000.7 5.000.100.74 ( 0.01 )25.15 ( 2.8 ) 1.84 ( 0.12 )28.310.710.7425.151.84
59 500 5000.7 1.000.250.9 ( 0 ) 17.68 ( 1.71 )0 ( 0 ) 22.680.590.9017.680.00
601000 5000.7 0.500.310.91 ( 0 ) 13.6 ( 1.43 ) 0 ( 0 ) 18.600.510.9113.600.00
61 5010000.720.000.010.62 ( 0.01 )86.38 ( 8.91 )3.09 ( 0.13 )88.290.930.6286.383.09
62 10010000.710.000.060.69 ( 0.01 )44.56 ( 6.27 )2.12 ( 0.11 )47.440.820.6944.562.12
63 50010000.7 2.000.230.9 ( 0 ) 20.2 ( 1.89 ) 0.03 ( 0.02 )25.170.620.9020.200.03
64100010000.7 1.000.270.91 ( 0 ) 16.62 ( 1.81 )0 ( 0 ) 21.620.540.9116.620.00
65 50 500.9 1.000.140.74 ( 0.01 )12.38 ( 0.9 ) 1.46 ( 0.1 ) 15.920.630.7412.381.46
66 100 500.9 0.500.210.84 ( 0.01 )12.36 ( 0.84 )0.46 ( 0.08 )16.900.580.8412.360.46
67 500 500.9 0.100.390.92 ( 0 ) 7.89 ( 0.68 ) 0 ( 0 ) 12.890.420.92 7.890.00
681000 500.9 0.050.410.92 ( 0 ) 7.38 ( 0.78 ) 0 ( 0 ) 12.380.380.92 7.380.00
69 50 1000.9 2.000.090.7 ( 0.01 ) 19.37 ( 1.75 )2.08 ( 0.13 )22.290.750.7019.372.08
70 100 1000.9 1.000.200.81 ( 0.01 )14.28 ( 1.07 )0.93 ( 0.09 )18.350.610.8114.280.93
71 500 1000.9 0.200.360.92 ( 0 ) 10.15 ( 0.82 )0 ( 0 ) 15.150.480.9210.150.00
721000 1000.9 0.100.380.93 ( 0 ) 9.4 ( 1.07 ) 0 ( 0 ) 14.400.420.93 9.400.00
73 50 5000.910.000.020.62 ( 0.01 )62.39 ( 5.92 )2.69 ( 0.14 )64.700.9 0.6262.392.69
74 100 5000.9 5.000.120.74 ( 0.01 )21.21 ( 2.91 )2.02 ( 0.12 )24.190.690.7421.212.02
75 500 5000.9 1.000.280.91 ( 0 ) 15.52 ( 1.4 ) 0 ( 0 ) 20.520.570.9115.520.00
761000 5000.9 0.500.290.92 ( 0 ) 14.84 ( 1.41 )0 ( 0 ) 19.840.560.9214.840.00
77 5010000.920.000.020.63 ( 0.01 )78.65 ( 8.46 )3.08 ( 0.12 )80.570.920.6378.653.08
78 10010000.910.000.060.74 ( 0.01 )43.94 ( 6.95 )2.01 ( 0.11 )46.930.790.7443.942.01
79 50010000.9 2.000.250.91 ( 0 ) 18.95 ( 1.93 )0 ( 0 ) 23.950.6 0.9118.950.00
80100010000.9 1.000.290.92 ( 0 ) 15.24 ( 1.68 )0 ( 0 ) 20.240.520.9215.240.00
\n" + ], + "text/latex": [ + "A data.frame: 80 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1.00 & 0.01 & 0.61 ( 0.01 ) & 17.05 ( 1.31 ) & 3.17 ( 0.19 ) & 18.88 & 0.8 & 0.61 & 17.05 & 3.17\\\\\n", + "\t2 & 100 & 50 & 0.1 & 0.50 & 0.04 & 0.59 ( 0.01 ) & 13.62 ( 1.31 ) & 2.9 ( 0.17 ) & 15.72 & 0.64 & 0.59 & 13.62 & 2.90\\\\\n", + "\t3 & 500 & 50 & 0.1 & 0.10 & 0.11 & 0.64 ( 0 ) & 16.89 ( 1.14 ) & 1.1 ( 0.13 ) & 20.79 & 0.68 & 0.64 & 16.89 & 1.10\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 0.05 & 0.12 & 0.66 ( 0 ) & 19.43 ( 1.02 ) & 0.42 ( 0.08 ) & 24.01 & 0.71 & 0.66 & 19.43 & 0.42\\\\\n", + "\t5 & 50 & 100 & 0.1 & 2.00 & 0.01 & 0.63 ( 0.01 ) & 27.39 ( 2.11 ) & 3.38 ( 0.17 ) & 29.01 & 0.87 & 0.63 & 27.39 & 3.38\\\\\n", + "\t6 & 100 & 100 & 0.1 & 1.00 & 0.02 & 0.59 ( 0.01 ) & 26.17 ( 2.4 ) & 3.34 ( 0.16 ) & 27.83 & 0.84 & 0.59 & 26.17 & 3.34\\\\\n", + "\t7 & 500 & 100 & 0.1 & 0.20 & 0.09 & 0.62 ( 0 ) & 22.75 ( 1.87 ) & 1.61 ( 0.13 ) & 26.14 & 0.69 & 0.62 & 22.75 & 1.61\\\\\n", + "\t8 & 1000 & 100 & 0.1 & 0.10 & 0.10 & 0.64 ( 0 ) & 28.32 ( 1.88 ) & 0.66 ( 0.1 ) & 32.66 & 0.77 & 0.64 & 28.32 & 0.66\\\\\n", + "\t9 & 50 & 500 & 0.1 & 10.00 & 0.00 & 0.61 ( 0.01 ) & 69.03 ( 7.45 ) & 4.13 ( 0.19 ) & 69.90 & 0.96 & 0.61 & 69.03 & 4.13\\\\\n", + "\t10 & 100 & 500 & 0.1 & 5.00 & 0.00 & 0.57 ( 0.01 ) & 70.64 ( 9.13 ) & 3.91 ( 0.17 ) & 71.73 & 0.91 & 0.57 & 70.64 & 3.91\\\\\n", + "\t11 & 500 & 500 & 0.1 & 1.00 & 0.10 & 0.61 ( 0.01 ) & 20.55 ( 4.33 ) & 3.15 ( 0.1 ) & 22.40 & 0.62 & 0.61 & 20.55 & 3.15\\\\\n", + "\t12 & 1000 & 500 & 0.1 & 0.50 & 0.12 & 0.63 ( 0 ) & 26.03 ( 3.45 ) & 2.38 ( 0.11 ) & 28.65 & 0.62 & 0.63 & 26.03 & 2.38\\\\\n", + "\t13 & 50 & 1000 & 0.1 & 20.00 & 0.00 & 0.59 ( 0.01 ) & 103.61 ( 10.54 ) & 4.34 ( 0.18 ) & 104.27 & 0.98 & 0.59 & 103.61 & 4.34\\\\\n", + "\t14 & 100 & 1000 & 0.1 & 10.00 & 0.00 & 0.56 ( 0.01 ) & 103.21 ( 12.75 ) & 4.15 ( 0.17 ) & 104.06 & 0.95 & 0.56 & 103.21 & 4.15\\\\\n", + "\t15 & 500 & 1000 & 0.1 & 2.00 & 0.07 & 0.61 ( 0 ) & 29.41 ( 7.4 ) & 3.25 ( 0.09 ) & 31.16 & 0.62 & 0.61 & 29.41 & 3.25\\\\\n", + "\t16 & 1000 & 1000 & 0.1 & 1.00 & 0.18 & 0.62 ( 0 ) & 16.15 ( 2.77 ) & 2.73 ( 0.09 ) & 18.42 & 0.53 & 0.62 & 16.15 & 2.73\\\\\n", + "\t17 & 50 & 50 & 0.3 & 1.00 & 0.08 & 0.68 ( 0.01 ) & 14.8 ( 1.01 ) & 1.73 ( 0.15 ) & 18.07 & 0.69 & 0.68 & 14.80 & 1.73\\\\\n", + "\t18 & 100 & 50 & 0.3 & 0.50 & 0.15 & 0.77 ( 0.01 ) & 15.15 ( 1 ) & 0.64 ( 0.09 ) & 19.51 & 0.65 & 0.77 & 15.15 & 0.64\\\\\n", + "\t19 & 500 & 50 & 0.3 & 0.10 & 0.35 & 0.85 ( 0 ) & 8.95 ( 0.69 ) & 0 ( 0 ) & 13.95 & 0.46 & 0.85 & 8.95 & 0.00\\\\\n", + "\t20 & 1000 & 50 & 0.3 & 0.05 & 0.33 & 0.86 ( 0 ) & 9.66 ( 0.93 ) & 0 ( 0 ) & 14.66 & 0.44 & 0.86 & 9.66 & 0.00\\\\\n", + "\t21 & 50 & 100 & 0.3 & 2.00 & 0.05 & 0.67 ( 0.01 ) & 23.92 ( 2 ) & 2.13 ( 0.15 ) & 26.79 & 0.77 & 0.67 & 23.92 & 2.13\\\\\n", + "\t22 & 100 & 100 & 0.3 & 1.00 & 0.14 & 0.74 ( 0.01 ) & 17.75 ( 1.51 ) & 1.13 ( 0.11 ) & 21.62 & 0.67 & 0.74 & 17.75 & 1.13\\\\\n", + "\t23 & 500 & 100 & 0.3 & 0.20 & 0.32 & 0.86 ( 0 ) & 11.53 ( 1.02 ) & 0.01 ( 0.01 ) & 16.52 & 0.51 & 0.86 & 11.53 & 0.01\\\\\n", + "\t24 & 1000 & 100 & 0.3 & 0.10 & 0.33 & 0.86 ( 0 ) & 11.15 ( 1.03 ) & 0 ( 0 ) & 16.15 & 0.49 & 0.86 & 11.15 & 0.00\\\\\n", + "\t25 & 50 & 500 & 0.3 & 10.00 & 0.01 & 0.6 ( 0.01 ) & 81.07 ( 6.91 ) & 2.92 ( 0.14 ) & 83.15 & 0.93 & 0.60 & 81.07 & 2.92\\\\\n", + "\t26 & 100 & 500 & 0.3 & 5.00 & 0.06 & 0.66 ( 0.01 ) & 38.14 ( 5.11 ) & 2.16 ( 0.13 ) & 40.98 & 0.78 & 0.66 & 38.14 & 2.16\\\\\n", + "\t27 & 500 & 500 & 0.3 & 1.00 & 0.22 & 0.84 ( 0 ) & 20.87 ( 1.93 ) & 0.02 ( 0.01 ) & 25.85 & 0.63 & 0.84 & 20.87 & 0.02\\\\\n", + "\t28 & 1000 & 500 & 0.3 & 0.50 & 0.29 & 0.86 ( 0 ) & 15.35 ( 1.6 ) & 0 ( 0 ) & 20.35 & 0.53 & 0.86 & 15.35 & 0.00\\\\\n", + "\t29 & 50 & 1000 & 0.3 & 20.00 & 0.01 & 0.63 ( 0.01 ) & 104.78 ( 9.53 ) & 3.37 ( 0.14 ) & 106.41 & 0.96 & 0.63 & 104.78 & 3.37\\\\\n", + "\t30 & 100 & 1000 & 0.3 & 10.00 & 0.04 & 0.64 ( 0.01 ) & 55.95 ( 7.57 ) & 2.5 ( 0.13 ) & 58.45 & 0.85 & 0.64 & 55.95 & 2.50\\\\\n", + "\t⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮\\\\\n", + "\t51 & 500 & 50 & 0.7 & 0.10 & 0.34 & 0.91 ( 0 ) & 9.34 ( 0.72 ) & 0 ( 0 ) & 14.34 & 0.48 & 0.91 & 9.34 & 0.00\\\\\n", + "\t52 & 1000 & 50 & 0.7 & 0.05 & 0.36 & 0.91 ( 0 ) & 8.58 ( 0.78 ) & 0 ( 0 ) & 13.58 & 0.42 & 0.91 & 8.58 & 0.00\\\\\n", + "\t53 & 50 & 100 & 0.7 & 2.00 & 0.07 & 0.69 ( 0.01 ) & 24.95 ( 1.99 ) & 1.47 ( 0.1 ) & 28.48 & 0.76 & 0.69 & 24.95 & 1.47\\\\\n", + "\t54 & 100 & 100 & 0.7 & 1.00 & 0.17 & 0.79 ( 0.01 ) & 15.63 ( 1.26 ) & 0.96 ( 0.11 ) & 19.67 & 0.63 & 0.79 & 15.63 & 0.96\\\\\n", + "\t55 & 500 & 100 & 0.7 & 0.20 & 0.34 & 0.9 ( 0 ) & 10.78 ( 0.81 ) & 0.01 ( 0.01 ) & 15.77 & 0.5 & 0.90 & 10.78 & 0.01\\\\\n", + "\t56 & 1000 & 100 & 0.7 & 0.10 & 0.38 & 0.91 ( 0 ) & 9.42 ( 0.9 ) & 0 ( 0 ) & 14.42 & 0.44 & 0.91 & 9.42 & 0.00\\\\\n", + "\t57 & 50 & 500 & 0.7 & 10.00 & 0.02 & 0.62 ( 0.01 ) & 66.01 ( 6.05 ) & 2.75 ( 0.12 ) & 68.26 & 0.92 & 0.62 & 66.01 & 2.75\\\\\n", + "\t58 & 100 & 500 & 0.7 & 5.00 & 0.10 & 0.74 ( 0.01 ) & 25.15 ( 2.8 ) & 1.84 ( 0.12 ) & 28.31 & 0.71 & 0.74 & 25.15 & 1.84\\\\\n", + "\t59 & 500 & 500 & 0.7 & 1.00 & 0.25 & 0.9 ( 0 ) & 17.68 ( 1.71 ) & 0 ( 0 ) & 22.68 & 0.59 & 0.90 & 17.68 & 0.00\\\\\n", + "\t60 & 1000 & 500 & 0.7 & 0.50 & 0.31 & 0.91 ( 0 ) & 13.6 ( 1.43 ) & 0 ( 0 ) & 18.60 & 0.51 & 0.91 & 13.60 & 0.00\\\\\n", + "\t61 & 50 & 1000 & 0.7 & 20.00 & 0.01 & 0.62 ( 0.01 ) & 86.38 ( 8.91 ) & 3.09 ( 0.13 ) & 88.29 & 0.93 & 0.62 & 86.38 & 3.09\\\\\n", + "\t62 & 100 & 1000 & 0.7 & 10.00 & 0.06 & 0.69 ( 0.01 ) & 44.56 ( 6.27 ) & 2.12 ( 0.11 ) & 47.44 & 0.82 & 0.69 & 44.56 & 2.12\\\\\n", + "\t63 & 500 & 1000 & 0.7 & 2.00 & 0.23 & 0.9 ( 0 ) & 20.2 ( 1.89 ) & 0.03 ( 0.02 ) & 25.17 & 0.62 & 0.90 & 20.20 & 0.03\\\\\n", + "\t64 & 1000 & 1000 & 0.7 & 1.00 & 0.27 & 0.91 ( 0 ) & 16.62 ( 1.81 ) & 0 ( 0 ) & 21.62 & 0.54 & 0.91 & 16.62 & 0.00\\\\\n", + "\t65 & 50 & 50 & 0.9 & 1.00 & 0.14 & 0.74 ( 0.01 ) & 12.38 ( 0.9 ) & 1.46 ( 0.1 ) & 15.92 & 0.63 & 0.74 & 12.38 & 1.46\\\\\n", + "\t66 & 100 & 50 & 0.9 & 0.50 & 0.21 & 0.84 ( 0.01 ) & 12.36 ( 0.84 ) & 0.46 ( 0.08 ) & 16.90 & 0.58 & 0.84 & 12.36 & 0.46\\\\\n", + "\t67 & 500 & 50 & 0.9 & 0.10 & 0.39 & 0.92 ( 0 ) & 7.89 ( 0.68 ) & 0 ( 0 ) & 12.89 & 0.42 & 0.92 & 7.89 & 0.00\\\\\n", + "\t68 & 1000 & 50 & 0.9 & 0.05 & 0.41 & 0.92 ( 0 ) & 7.38 ( 0.78 ) & 0 ( 0 ) & 12.38 & 0.38 & 0.92 & 7.38 & 0.00\\\\\n", + "\t69 & 50 & 100 & 0.9 & 2.00 & 0.09 & 0.7 ( 0.01 ) & 19.37 ( 1.75 ) & 2.08 ( 0.13 ) & 22.29 & 0.75 & 0.70 & 19.37 & 2.08\\\\\n", + "\t70 & 100 & 100 & 0.9 & 1.00 & 0.20 & 0.81 ( 0.01 ) & 14.28 ( 1.07 ) & 0.93 ( 0.09 ) & 18.35 & 0.61 & 0.81 & 14.28 & 0.93\\\\\n", + "\t71 & 500 & 100 & 0.9 & 0.20 & 0.36 & 0.92 ( 0 ) & 10.15 ( 0.82 ) & 0 ( 0 ) & 15.15 & 0.48 & 0.92 & 10.15 & 0.00\\\\\n", + "\t72 & 1000 & 100 & 0.9 & 0.10 & 0.38 & 0.93 ( 0 ) & 9.4 ( 1.07 ) & 0 ( 0 ) & 14.40 & 0.42 & 0.93 & 9.40 & 0.00\\\\\n", + "\t73 & 50 & 500 & 0.9 & 10.00 & 0.02 & 0.62 ( 0.01 ) & 62.39 ( 5.92 ) & 2.69 ( 0.14 ) & 64.70 & 0.9 & 0.62 & 62.39 & 2.69\\\\\n", + "\t74 & 100 & 500 & 0.9 & 5.00 & 0.12 & 0.74 ( 0.01 ) & 21.21 ( 2.91 ) & 2.02 ( 0.12 ) & 24.19 & 0.69 & 0.74 & 21.21 & 2.02\\\\\n", + "\t75 & 500 & 500 & 0.9 & 1.00 & 0.28 & 0.91 ( 0 ) & 15.52 ( 1.4 ) & 0 ( 0 ) & 20.52 & 0.57 & 0.91 & 15.52 & 0.00\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.50 & 0.29 & 0.92 ( 0 ) & 14.84 ( 1.41 ) & 0 ( 0 ) & 19.84 & 0.56 & 0.92 & 14.84 & 0.00\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.00 & 0.02 & 0.63 ( 0.01 ) & 78.65 ( 8.46 ) & 3.08 ( 0.12 ) & 80.57 & 0.92 & 0.63 & 78.65 & 3.08\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.00 & 0.06 & 0.74 ( 0.01 ) & 43.94 ( 6.95 ) & 2.01 ( 0.11 ) & 46.93 & 0.79 & 0.74 & 43.94 & 2.01\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.00 & 0.25 & 0.91 ( 0 ) & 18.95 ( 1.93 ) & 0 ( 0 ) & 23.95 & 0.6 & 0.91 & 18.95 & 0.00\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.00 & 0.29 & 0.92 ( 0 ) & 15.24 ( 1.68 ) & 0 ( 0 ) & 20.24 & 0.52 & 0.92 & 15.24 & 0.00\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 80 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1.00 | 0.01 | 0.61 ( 0.01 ) | 17.05 ( 1.31 ) | 3.17 ( 0.19 ) | 18.88 | 0.8 | 0.61 | 17.05 | 3.17 |\n", + "| 2 | 100 | 50 | 0.1 | 0.50 | 0.04 | 0.59 ( 0.01 ) | 13.62 ( 1.31 ) | 2.9 ( 0.17 ) | 15.72 | 0.64 | 0.59 | 13.62 | 2.90 |\n", + "| 3 | 500 | 50 | 0.1 | 0.10 | 0.11 | 0.64 ( 0 ) | 16.89 ( 1.14 ) | 1.1 ( 0.13 ) | 20.79 | 0.68 | 0.64 | 16.89 | 1.10 |\n", + "| 4 | 1000 | 50 | 0.1 | 0.05 | 0.12 | 0.66 ( 0 ) | 19.43 ( 1.02 ) | 0.42 ( 0.08 ) | 24.01 | 0.71 | 0.66 | 19.43 | 0.42 |\n", + "| 5 | 50 | 100 | 0.1 | 2.00 | 0.01 | 0.63 ( 0.01 ) | 27.39 ( 2.11 ) | 3.38 ( 0.17 ) | 29.01 | 0.87 | 0.63 | 27.39 | 3.38 |\n", + "| 6 | 100 | 100 | 0.1 | 1.00 | 0.02 | 0.59 ( 0.01 ) | 26.17 ( 2.4 ) | 3.34 ( 0.16 ) | 27.83 | 0.84 | 0.59 | 26.17 | 3.34 |\n", + "| 7 | 500 | 100 | 0.1 | 0.20 | 0.09 | 0.62 ( 0 ) | 22.75 ( 1.87 ) | 1.61 ( 0.13 ) | 26.14 | 0.69 | 0.62 | 22.75 | 1.61 |\n", + "| 8 | 1000 | 100 | 0.1 | 0.10 | 0.10 | 0.64 ( 0 ) | 28.32 ( 1.88 ) | 0.66 ( 0.1 ) | 32.66 | 0.77 | 0.64 | 28.32 | 0.66 |\n", + "| 9 | 50 | 500 | 0.1 | 10.00 | 0.00 | 0.61 ( 0.01 ) | 69.03 ( 7.45 ) | 4.13 ( 0.19 ) | 69.90 | 0.96 | 0.61 | 69.03 | 4.13 |\n", + "| 10 | 100 | 500 | 0.1 | 5.00 | 0.00 | 0.57 ( 0.01 ) | 70.64 ( 9.13 ) | 3.91 ( 0.17 ) | 71.73 | 0.91 | 0.57 | 70.64 | 3.91 |\n", + "| 11 | 500 | 500 | 0.1 | 1.00 | 0.10 | 0.61 ( 0.01 ) | 20.55 ( 4.33 ) | 3.15 ( 0.1 ) | 22.40 | 0.62 | 0.61 | 20.55 | 3.15 |\n", + "| 12 | 1000 | 500 | 0.1 | 0.50 | 0.12 | 0.63 ( 0 ) | 26.03 ( 3.45 ) | 2.38 ( 0.11 ) | 28.65 | 0.62 | 0.63 | 26.03 | 2.38 |\n", + "| 13 | 50 | 1000 | 0.1 | 20.00 | 0.00 | 0.59 ( 0.01 ) | 103.61 ( 10.54 ) | 4.34 ( 0.18 ) | 104.27 | 0.98 | 0.59 | 103.61 | 4.34 |\n", + "| 14 | 100 | 1000 | 0.1 | 10.00 | 0.00 | 0.56 ( 0.01 ) | 103.21 ( 12.75 ) | 4.15 ( 0.17 ) | 104.06 | 0.95 | 0.56 | 103.21 | 4.15 |\n", + "| 15 | 500 | 1000 | 0.1 | 2.00 | 0.07 | 0.61 ( 0 ) | 29.41 ( 7.4 ) | 3.25 ( 0.09 ) | 31.16 | 0.62 | 0.61 | 29.41 | 3.25 |\n", + "| 16 | 1000 | 1000 | 0.1 | 1.00 | 0.18 | 0.62 ( 0 ) | 16.15 ( 2.77 ) | 2.73 ( 0.09 ) | 18.42 | 0.53 | 0.62 | 16.15 | 2.73 |\n", + "| 17 | 50 | 50 | 0.3 | 1.00 | 0.08 | 0.68 ( 0.01 ) | 14.8 ( 1.01 ) | 1.73 ( 0.15 ) | 18.07 | 0.69 | 0.68 | 14.80 | 1.73 |\n", + "| 18 | 100 | 50 | 0.3 | 0.50 | 0.15 | 0.77 ( 0.01 ) | 15.15 ( 1 ) | 0.64 ( 0.09 ) | 19.51 | 0.65 | 0.77 | 15.15 | 0.64 |\n", + "| 19 | 500 | 50 | 0.3 | 0.10 | 0.35 | 0.85 ( 0 ) | 8.95 ( 0.69 ) | 0 ( 0 ) | 13.95 | 0.46 | 0.85 | 8.95 | 0.00 |\n", + "| 20 | 1000 | 50 | 0.3 | 0.05 | 0.33 | 0.86 ( 0 ) | 9.66 ( 0.93 ) | 0 ( 0 ) | 14.66 | 0.44 | 0.86 | 9.66 | 0.00 |\n", + "| 21 | 50 | 100 | 0.3 | 2.00 | 0.05 | 0.67 ( 0.01 ) | 23.92 ( 2 ) | 2.13 ( 0.15 ) | 26.79 | 0.77 | 0.67 | 23.92 | 2.13 |\n", + "| 22 | 100 | 100 | 0.3 | 1.00 | 0.14 | 0.74 ( 0.01 ) | 17.75 ( 1.51 ) | 1.13 ( 0.11 ) | 21.62 | 0.67 | 0.74 | 17.75 | 1.13 |\n", + "| 23 | 500 | 100 | 0.3 | 0.20 | 0.32 | 0.86 ( 0 ) | 11.53 ( 1.02 ) | 0.01 ( 0.01 ) | 16.52 | 0.51 | 0.86 | 11.53 | 0.01 |\n", + "| 24 | 1000 | 100 | 0.3 | 0.10 | 0.33 | 0.86 ( 0 ) | 11.15 ( 1.03 ) | 0 ( 0 ) | 16.15 | 0.49 | 0.86 | 11.15 | 0.00 |\n", + "| 25 | 50 | 500 | 0.3 | 10.00 | 0.01 | 0.6 ( 0.01 ) | 81.07 ( 6.91 ) | 2.92 ( 0.14 ) | 83.15 | 0.93 | 0.60 | 81.07 | 2.92 |\n", + "| 26 | 100 | 500 | 0.3 | 5.00 | 0.06 | 0.66 ( 0.01 ) | 38.14 ( 5.11 ) | 2.16 ( 0.13 ) | 40.98 | 0.78 | 0.66 | 38.14 | 2.16 |\n", + "| 27 | 500 | 500 | 0.3 | 1.00 | 0.22 | 0.84 ( 0 ) | 20.87 ( 1.93 ) | 0.02 ( 0.01 ) | 25.85 | 0.63 | 0.84 | 20.87 | 0.02 |\n", + "| 28 | 1000 | 500 | 0.3 | 0.50 | 0.29 | 0.86 ( 0 ) | 15.35 ( 1.6 ) | 0 ( 0 ) | 20.35 | 0.53 | 0.86 | 15.35 | 0.00 |\n", + "| 29 | 50 | 1000 | 0.3 | 20.00 | 0.01 | 0.63 ( 0.01 ) | 104.78 ( 9.53 ) | 3.37 ( 0.14 ) | 106.41 | 0.96 | 0.63 | 104.78 | 3.37 |\n", + "| 30 | 100 | 1000 | 0.3 | 10.00 | 0.04 | 0.64 ( 0.01 ) | 55.95 ( 7.57 ) | 2.5 ( 0.13 ) | 58.45 | 0.85 | 0.64 | 55.95 | 2.50 |\n", + "| ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ |\n", + "| 51 | 500 | 50 | 0.7 | 0.10 | 0.34 | 0.91 ( 0 ) | 9.34 ( 0.72 ) | 0 ( 0 ) | 14.34 | 0.48 | 0.91 | 9.34 | 0.00 |\n", + "| 52 | 1000 | 50 | 0.7 | 0.05 | 0.36 | 0.91 ( 0 ) | 8.58 ( 0.78 ) | 0 ( 0 ) | 13.58 | 0.42 | 0.91 | 8.58 | 0.00 |\n", + "| 53 | 50 | 100 | 0.7 | 2.00 | 0.07 | 0.69 ( 0.01 ) | 24.95 ( 1.99 ) | 1.47 ( 0.1 ) | 28.48 | 0.76 | 0.69 | 24.95 | 1.47 |\n", + "| 54 | 100 | 100 | 0.7 | 1.00 | 0.17 | 0.79 ( 0.01 ) | 15.63 ( 1.26 ) | 0.96 ( 0.11 ) | 19.67 | 0.63 | 0.79 | 15.63 | 0.96 |\n", + "| 55 | 500 | 100 | 0.7 | 0.20 | 0.34 | 0.9 ( 0 ) | 10.78 ( 0.81 ) | 0.01 ( 0.01 ) | 15.77 | 0.5 | 0.90 | 10.78 | 0.01 |\n", + "| 56 | 1000 | 100 | 0.7 | 0.10 | 0.38 | 0.91 ( 0 ) | 9.42 ( 0.9 ) | 0 ( 0 ) | 14.42 | 0.44 | 0.91 | 9.42 | 0.00 |\n", + "| 57 | 50 | 500 | 0.7 | 10.00 | 0.02 | 0.62 ( 0.01 ) | 66.01 ( 6.05 ) | 2.75 ( 0.12 ) | 68.26 | 0.92 | 0.62 | 66.01 | 2.75 |\n", + "| 58 | 100 | 500 | 0.7 | 5.00 | 0.10 | 0.74 ( 0.01 ) | 25.15 ( 2.8 ) | 1.84 ( 0.12 ) | 28.31 | 0.71 | 0.74 | 25.15 | 1.84 |\n", + "| 59 | 500 | 500 | 0.7 | 1.00 | 0.25 | 0.9 ( 0 ) | 17.68 ( 1.71 ) | 0 ( 0 ) | 22.68 | 0.59 | 0.90 | 17.68 | 0.00 |\n", + "| 60 | 1000 | 500 | 0.7 | 0.50 | 0.31 | 0.91 ( 0 ) | 13.6 ( 1.43 ) | 0 ( 0 ) | 18.60 | 0.51 | 0.91 | 13.60 | 0.00 |\n", + "| 61 | 50 | 1000 | 0.7 | 20.00 | 0.01 | 0.62 ( 0.01 ) | 86.38 ( 8.91 ) | 3.09 ( 0.13 ) | 88.29 | 0.93 | 0.62 | 86.38 | 3.09 |\n", + "| 62 | 100 | 1000 | 0.7 | 10.00 | 0.06 | 0.69 ( 0.01 ) | 44.56 ( 6.27 ) | 2.12 ( 0.11 ) | 47.44 | 0.82 | 0.69 | 44.56 | 2.12 |\n", + "| 63 | 500 | 1000 | 0.7 | 2.00 | 0.23 | 0.9 ( 0 ) | 20.2 ( 1.89 ) | 0.03 ( 0.02 ) | 25.17 | 0.62 | 0.90 | 20.20 | 0.03 |\n", + "| 64 | 1000 | 1000 | 0.7 | 1.00 | 0.27 | 0.91 ( 0 ) | 16.62 ( 1.81 ) | 0 ( 0 ) | 21.62 | 0.54 | 0.91 | 16.62 | 0.00 |\n", + "| 65 | 50 | 50 | 0.9 | 1.00 | 0.14 | 0.74 ( 0.01 ) | 12.38 ( 0.9 ) | 1.46 ( 0.1 ) | 15.92 | 0.63 | 0.74 | 12.38 | 1.46 |\n", + "| 66 | 100 | 50 | 0.9 | 0.50 | 0.21 | 0.84 ( 0.01 ) | 12.36 ( 0.84 ) | 0.46 ( 0.08 ) | 16.90 | 0.58 | 0.84 | 12.36 | 0.46 |\n", + "| 67 | 500 | 50 | 0.9 | 0.10 | 0.39 | 0.92 ( 0 ) | 7.89 ( 0.68 ) | 0 ( 0 ) | 12.89 | 0.42 | 0.92 | 7.89 | 0.00 |\n", + "| 68 | 1000 | 50 | 0.9 | 0.05 | 0.41 | 0.92 ( 0 ) | 7.38 ( 0.78 ) | 0 ( 0 ) | 12.38 | 0.38 | 0.92 | 7.38 | 0.00 |\n", + "| 69 | 50 | 100 | 0.9 | 2.00 | 0.09 | 0.7 ( 0.01 ) | 19.37 ( 1.75 ) | 2.08 ( 0.13 ) | 22.29 | 0.75 | 0.70 | 19.37 | 2.08 |\n", + "| 70 | 100 | 100 | 0.9 | 1.00 | 0.20 | 0.81 ( 0.01 ) | 14.28 ( 1.07 ) | 0.93 ( 0.09 ) | 18.35 | 0.61 | 0.81 | 14.28 | 0.93 |\n", + "| 71 | 500 | 100 | 0.9 | 0.20 | 0.36 | 0.92 ( 0 ) | 10.15 ( 0.82 ) | 0 ( 0 ) | 15.15 | 0.48 | 0.92 | 10.15 | 0.00 |\n", + "| 72 | 1000 | 100 | 0.9 | 0.10 | 0.38 | 0.93 ( 0 ) | 9.4 ( 1.07 ) | 0 ( 0 ) | 14.40 | 0.42 | 0.93 | 9.40 | 0.00 |\n", + "| 73 | 50 | 500 | 0.9 | 10.00 | 0.02 | 0.62 ( 0.01 ) | 62.39 ( 5.92 ) | 2.69 ( 0.14 ) | 64.70 | 0.9 | 0.62 | 62.39 | 2.69 |\n", + "| 74 | 100 | 500 | 0.9 | 5.00 | 0.12 | 0.74 ( 0.01 ) | 21.21 ( 2.91 ) | 2.02 ( 0.12 ) | 24.19 | 0.69 | 0.74 | 21.21 | 2.02 |\n", + "| 75 | 500 | 500 | 0.9 | 1.00 | 0.28 | 0.91 ( 0 ) | 15.52 ( 1.4 ) | 0 ( 0 ) | 20.52 | 0.57 | 0.91 | 15.52 | 0.00 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.50 | 0.29 | 0.92 ( 0 ) | 14.84 ( 1.41 ) | 0 ( 0 ) | 19.84 | 0.56 | 0.92 | 14.84 | 0.00 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.00 | 0.02 | 0.63 ( 0.01 ) | 78.65 ( 8.46 ) | 3.08 ( 0.12 ) | 80.57 | 0.92 | 0.63 | 78.65 | 3.08 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.00 | 0.06 | 0.74 ( 0.01 ) | 43.94 ( 6.95 ) | 2.01 ( 0.11 ) | 46.93 | 0.79 | 0.74 | 43.94 | 2.01 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.00 | 0.25 | 0.91 ( 0 ) | 18.95 ( 1.93 ) | 0 ( 0 ) | 23.95 | 0.6 | 0.91 | 18.95 | 0.00 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.00 | 0.29 | 0.92 ( 0 ) | 15.24 ( 1.68 ) | 0 ( 0 ) | 20.24 | 0.52 | 0.92 | 15.24 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "1 50 50 0.1 1.00 0.01 0.61 ( 0.01 ) 17.05 ( 1.31 ) 3.17 ( 0.19 )\n", + "2 100 50 0.1 0.50 0.04 0.59 ( 0.01 ) 13.62 ( 1.31 ) 2.9 ( 0.17 ) \n", + "3 500 50 0.1 0.10 0.11 0.64 ( 0 ) 16.89 ( 1.14 ) 1.1 ( 0.13 ) \n", + "4 1000 50 0.1 0.05 0.12 0.66 ( 0 ) 19.43 ( 1.02 ) 0.42 ( 0.08 )\n", + "5 50 100 0.1 2.00 0.01 0.63 ( 0.01 ) 27.39 ( 2.11 ) 3.38 ( 0.17 )\n", + "6 100 100 0.1 1.00 0.02 0.59 ( 0.01 ) 26.17 ( 2.4 ) 3.34 ( 0.16 )\n", + "7 500 100 0.1 0.20 0.09 0.62 ( 0 ) 22.75 ( 1.87 ) 1.61 ( 0.13 )\n", + "8 1000 100 0.1 0.10 0.10 0.64 ( 0 ) 28.32 ( 1.88 ) 0.66 ( 0.1 ) \n", + "9 50 500 0.1 10.00 0.00 0.61 ( 0.01 ) 69.03 ( 7.45 ) 4.13 ( 0.19 )\n", + "10 100 500 0.1 5.00 0.00 0.57 ( 0.01 ) 70.64 ( 9.13 ) 3.91 ( 0.17 )\n", + "11 500 500 0.1 1.00 0.10 0.61 ( 0.01 ) 20.55 ( 4.33 ) 3.15 ( 0.1 ) \n", + "12 1000 500 0.1 0.50 0.12 0.63 ( 0 ) 26.03 ( 3.45 ) 2.38 ( 0.11 )\n", + "13 50 1000 0.1 20.00 0.00 0.59 ( 0.01 ) 103.61 ( 10.54 ) 4.34 ( 0.18 )\n", + "14 100 1000 0.1 10.00 0.00 0.56 ( 0.01 ) 103.21 ( 12.75 ) 4.15 ( 0.17 )\n", + "15 500 1000 0.1 2.00 0.07 0.61 ( 0 ) 29.41 ( 7.4 ) 3.25 ( 0.09 )\n", + "16 1000 1000 0.1 1.00 0.18 0.62 ( 0 ) 16.15 ( 2.77 ) 2.73 ( 0.09 )\n", + "17 50 50 0.3 1.00 0.08 0.68 ( 0.01 ) 14.8 ( 1.01 ) 1.73 ( 0.15 )\n", + "18 100 50 0.3 0.50 0.15 0.77 ( 0.01 ) 15.15 ( 1 ) 0.64 ( 0.09 )\n", + "19 500 50 0.3 0.10 0.35 0.85 ( 0 ) 8.95 ( 0.69 ) 0 ( 0 ) \n", + "20 1000 50 0.3 0.05 0.33 0.86 ( 0 ) 9.66 ( 0.93 ) 0 ( 0 ) \n", + "21 50 100 0.3 2.00 0.05 0.67 ( 0.01 ) 23.92 ( 2 ) 2.13 ( 0.15 )\n", + "22 100 100 0.3 1.00 0.14 0.74 ( 0.01 ) 17.75 ( 1.51 ) 1.13 ( 0.11 )\n", + "23 500 100 0.3 0.20 0.32 0.86 ( 0 ) 11.53 ( 1.02 ) 0.01 ( 0.01 )\n", + "24 1000 100 0.3 0.10 0.33 0.86 ( 0 ) 11.15 ( 1.03 ) 0 ( 0 ) \n", + "25 50 500 0.3 10.00 0.01 0.6 ( 0.01 ) 81.07 ( 6.91 ) 2.92 ( 0.14 )\n", + "26 100 500 0.3 5.00 0.06 0.66 ( 0.01 ) 38.14 ( 5.11 ) 2.16 ( 0.13 )\n", + "27 500 500 0.3 1.00 0.22 0.84 ( 0 ) 20.87 ( 1.93 ) 0.02 ( 0.01 )\n", + "28 1000 500 0.3 0.50 0.29 0.86 ( 0 ) 15.35 ( 1.6 ) 0 ( 0 ) \n", + "29 50 1000 0.3 20.00 0.01 0.63 ( 0.01 ) 104.78 ( 9.53 ) 3.37 ( 0.14 )\n", + "30 100 1000 0.3 10.00 0.04 0.64 ( 0.01 ) 55.95 ( 7.57 ) 2.5 ( 0.13 ) \n", + "⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ \n", + "51 500 50 0.7 0.10 0.34 0.91 ( 0 ) 9.34 ( 0.72 ) 0 ( 0 ) \n", + "52 1000 50 0.7 0.05 0.36 0.91 ( 0 ) 8.58 ( 0.78 ) 0 ( 0 ) \n", + "53 50 100 0.7 2.00 0.07 0.69 ( 0.01 ) 24.95 ( 1.99 ) 1.47 ( 0.1 ) \n", + "54 100 100 0.7 1.00 0.17 0.79 ( 0.01 ) 15.63 ( 1.26 ) 0.96 ( 0.11 )\n", + "55 500 100 0.7 0.20 0.34 0.9 ( 0 ) 10.78 ( 0.81 ) 0.01 ( 0.01 )\n", + "56 1000 100 0.7 0.10 0.38 0.91 ( 0 ) 9.42 ( 0.9 ) 0 ( 0 ) \n", + "57 50 500 0.7 10.00 0.02 0.62 ( 0.01 ) 66.01 ( 6.05 ) 2.75 ( 0.12 )\n", + "58 100 500 0.7 5.00 0.10 0.74 ( 0.01 ) 25.15 ( 2.8 ) 1.84 ( 0.12 )\n", + "59 500 500 0.7 1.00 0.25 0.9 ( 0 ) 17.68 ( 1.71 ) 0 ( 0 ) \n", + "60 1000 500 0.7 0.50 0.31 0.91 ( 0 ) 13.6 ( 1.43 ) 0 ( 0 ) \n", + "61 50 1000 0.7 20.00 0.01 0.62 ( 0.01 ) 86.38 ( 8.91 ) 3.09 ( 0.13 )\n", + "62 100 1000 0.7 10.00 0.06 0.69 ( 0.01 ) 44.56 ( 6.27 ) 2.12 ( 0.11 )\n", + "63 500 1000 0.7 2.00 0.23 0.9 ( 0 ) 20.2 ( 1.89 ) 0.03 ( 0.02 )\n", + "64 1000 1000 0.7 1.00 0.27 0.91 ( 0 ) 16.62 ( 1.81 ) 0 ( 0 ) \n", + "65 50 50 0.9 1.00 0.14 0.74 ( 0.01 ) 12.38 ( 0.9 ) 1.46 ( 0.1 ) \n", + "66 100 50 0.9 0.50 0.21 0.84 ( 0.01 ) 12.36 ( 0.84 ) 0.46 ( 0.08 )\n", + "67 500 50 0.9 0.10 0.39 0.92 ( 0 ) 7.89 ( 0.68 ) 0 ( 0 ) \n", + "68 1000 50 0.9 0.05 0.41 0.92 ( 0 ) 7.38 ( 0.78 ) 0 ( 0 ) \n", + "69 50 100 0.9 2.00 0.09 0.7 ( 0.01 ) 19.37 ( 1.75 ) 2.08 ( 0.13 )\n", + "70 100 100 0.9 1.00 0.20 0.81 ( 0.01 ) 14.28 ( 1.07 ) 0.93 ( 0.09 )\n", + "71 500 100 0.9 0.20 0.36 0.92 ( 0 ) 10.15 ( 0.82 ) 0 ( 0 ) \n", + "72 1000 100 0.9 0.10 0.38 0.93 ( 0 ) 9.4 ( 1.07 ) 0 ( 0 ) \n", + "73 50 500 0.9 10.00 0.02 0.62 ( 0.01 ) 62.39 ( 5.92 ) 2.69 ( 0.14 )\n", + "74 100 500 0.9 5.00 0.12 0.74 ( 0.01 ) 21.21 ( 2.91 ) 2.02 ( 0.12 )\n", + "75 500 500 0.9 1.00 0.28 0.91 ( 0 ) 15.52 ( 1.4 ) 0 ( 0 ) \n", + "76 1000 500 0.9 0.50 0.29 0.92 ( 0 ) 14.84 ( 1.41 ) 0 ( 0 ) \n", + "77 50 1000 0.9 20.00 0.02 0.63 ( 0.01 ) 78.65 ( 8.46 ) 3.08 ( 0.12 )\n", + "78 100 1000 0.9 10.00 0.06 0.74 ( 0.01 ) 43.94 ( 6.95 ) 2.01 ( 0.11 )\n", + "79 500 1000 0.9 2.00 0.25 0.91 ( 0 ) 18.95 ( 1.93 ) 0 ( 0 ) \n", + "80 1000 1000 0.9 1.00 0.29 0.92 ( 0 ) 15.24 ( 1.68 ) 0 ( 0 ) \n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "1 18.88 0.8 0.61 17.05 3.17 \n", + "2 15.72 0.64 0.59 13.62 2.90 \n", + "3 20.79 0.68 0.64 16.89 1.10 \n", + "4 24.01 0.71 0.66 19.43 0.42 \n", + "5 29.01 0.87 0.63 27.39 3.38 \n", + "6 27.83 0.84 0.59 26.17 3.34 \n", + "7 26.14 0.69 0.62 22.75 1.61 \n", + "8 32.66 0.77 0.64 28.32 0.66 \n", + "9 69.90 0.96 0.61 69.03 4.13 \n", + "10 71.73 0.91 0.57 70.64 3.91 \n", + "11 22.40 0.62 0.61 20.55 3.15 \n", + "12 28.65 0.62 0.63 26.03 2.38 \n", + "13 104.27 0.98 0.59 103.61 4.34 \n", + "14 104.06 0.95 0.56 103.21 4.15 \n", + "15 31.16 0.62 0.61 29.41 3.25 \n", + "16 18.42 0.53 0.62 16.15 2.73 \n", + "17 18.07 0.69 0.68 14.80 1.73 \n", + "18 19.51 0.65 0.77 15.15 0.64 \n", + "19 13.95 0.46 0.85 8.95 0.00 \n", + "20 14.66 0.44 0.86 9.66 0.00 \n", + "21 26.79 0.77 0.67 23.92 2.13 \n", + "22 21.62 0.67 0.74 17.75 1.13 \n", + "23 16.52 0.51 0.86 11.53 0.01 \n", + "24 16.15 0.49 0.86 11.15 0.00 \n", + "25 83.15 0.93 0.60 81.07 2.92 \n", + "26 40.98 0.78 0.66 38.14 2.16 \n", + "27 25.85 0.63 0.84 20.87 0.02 \n", + "28 20.35 0.53 0.86 15.35 0.00 \n", + "29 106.41 0.96 0.63 104.78 3.37 \n", + "30 58.45 0.85 0.64 55.95 2.50 \n", + "⋮ ⋮ ⋮ ⋮ ⋮ ⋮ \n", + "51 14.34 0.48 0.91 9.34 0.00 \n", + "52 13.58 0.42 0.91 8.58 0.00 \n", + "53 28.48 0.76 0.69 24.95 1.47 \n", + "54 19.67 0.63 0.79 15.63 0.96 \n", + "55 15.77 0.5 0.90 10.78 0.01 \n", + "56 14.42 0.44 0.91 9.42 0.00 \n", + "57 68.26 0.92 0.62 66.01 2.75 \n", + "58 28.31 0.71 0.74 25.15 1.84 \n", + "59 22.68 0.59 0.90 17.68 0.00 \n", + "60 18.60 0.51 0.91 13.60 0.00 \n", + "61 88.29 0.93 0.62 86.38 3.09 \n", + "62 47.44 0.82 0.69 44.56 2.12 \n", + "63 25.17 0.62 0.90 20.20 0.03 \n", + "64 21.62 0.54 0.91 16.62 0.00 \n", + "65 15.92 0.63 0.74 12.38 1.46 \n", + "66 16.90 0.58 0.84 12.36 0.46 \n", + "67 12.89 0.42 0.92 7.89 0.00 \n", + "68 12.38 0.38 0.92 7.38 0.00 \n", + "69 22.29 0.75 0.70 19.37 2.08 \n", + "70 18.35 0.61 0.81 14.28 0.93 \n", + "71 15.15 0.48 0.92 10.15 0.00 \n", + "72 14.40 0.42 0.93 9.40 0.00 \n", + "73 64.70 0.9 0.62 62.39 2.69 \n", + "74 24.19 0.69 0.74 21.21 2.02 \n", + "75 20.52 0.57 0.91 15.52 0.00 \n", + "76 19.84 0.56 0.92 14.84 0.00 \n", + "77 80.57 0.92 0.63 78.65 3.08 \n", + "78 46.93 0.79 0.74 43.94 2.01 \n", + "79 23.95 0.6 0.91 18.95 0.00 \n", + "80 20.24 0.52 0.92 15.24 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_block\n", + "\n", + "## export\n", + "write.table(result.table_block, '../results_summary_bin/sim_block_Elnet_binary.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_bin/2.3_sim_block_rf_binary_update.ipynb b/simulations/notebooks_sim_bin/2.3_sim_block_rf_binary_update.ipynb new file mode 100644 index 0000000..6322392 --- /dev/null +++ b/simulations/notebooks_sim_bin/2.3_sim_block_rf_binary_update.ipynb @@ -0,0 +1,1067 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize random forests results on Block Simulation Scenarios for binary outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "rou.list = seq(0.1, 0.9, 0.2)\n", + "\n", + "files = NULL\n", + "for (rou in rou.list){\n", + " for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_block_corr', rou, paste('P', p, 'N', n, sep='_'), '.RData', sep=''))\n", + " }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "80" + ], + "text/latex": [ + "80" + ], + "text/markdown": [ + "80" + ], + "text/plain": [ + "[1] 80" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "length(files)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1] \"indx: 1\"\n", + "[1] \"indx: 2\"\n", + "[1] \"indx: 3\"\n", + "[1] \"indx: 4\"\n", + "[1] \"indx: 5\"\n", + "[1] \"indx: 6\"\n", + "[1] \"indx: 7\"\n", + "[1] \"indx: 8\"\n", + "[1] \"indx: 9\"\n", + "[1] \"indx: 10\"\n", + "[1] \"indx: 11\"\n", + "[1] \"indx: 12\"\n", + "[1] \"indx: 13\"\n", + "[1] \"indx: 14\"\n", + "[1] \"indx: 15\"\n", + "[1] \"indx: 16\"\n", + "[1] \"indx: 17\"\n", + "[1] \"indx: 18\"\n", + "[1] \"indx: 19\"\n", + "[1] \"indx: 20\"\n", + "[1] \"indx: 21\"\n", + "[1] \"indx: 22\"\n", + "[1] \"indx: 23\"\n", + "[1] \"indx: 24\"\n", + "[1] \"indx: 25\"\n", + "[1] \"indx: 26\"\n", + "[1] \"indx: 27\"\n", + "[1] \"indx: 28\"\n", + "[1] \"indx: 29\"\n", + "[1] \"indx: 30\"\n", + "[1] \"indx: 31\"\n", + "[1] \"indx: 32\"\n", + "[1] \"indx: 33\"\n", + "[1] \"indx: 34\"\n", + "[1] \"indx: 35\"\n", + "[1] \"indx: 36\"\n", + "[1] \"indx: 37\"\n", + "[1] \"indx: 38\"\n", + "[1] \"indx: 39\"\n", + "[1] \"indx: 40\"\n", + "[1] \"indx: 41\"\n", + "[1] \"indx: 42\"\n", + "[1] \"indx: 43\"\n", + "[1] \"indx: 44\"\n", + "[1] \"indx: 45\"\n", + "[1] \"indx: 46\"\n", + "[1] \"indx: 47\"\n", + "[1] \"indx: 48\"\n", + "[1] \"indx: 49\"\n", + "[1] \"indx: 50\"\n", + "[1] \"indx: 51\"\n", + "[1] \"indx: 52\"\n", + "[1] \"indx: 53\"\n", + "[1] \"indx: 54\"\n", + "[1] \"indx: 55\"\n", + "[1] \"indx: 56\"\n", + "[1] \"indx: 57\"\n", + "[1] \"indx: 58\"\n", + "[1] \"indx: 59\"\n", + "[1] \"indx: 60\"\n", + "[1] \"indx: 61\"\n", + "[1] \"indx: 62\"\n", + "[1] \"indx: 63\"\n", + "[1] \"indx: 64\"\n", + "[1] \"indx: 65\"\n", + "[1] \"indx: 66\"\n", + "[1] \"indx: 67\"\n", + "[1] \"indx: 68\"\n", + "[1] \"indx: 69\"\n", + "[1] \"indx: 70\"\n", + "[1] \"indx: 71\"\n", + "[1] \"indx: 72\"\n", + "[1] \"indx: 73\"\n", + "[1] \"indx: 74\"\n", + "[1] \"indx: 75\"\n", + "[1] \"indx: 76\"\n", + "[1] \"indx: 77\"\n", + "[1] \"indx: 78\"\n", + "[1] \"indx: 79\"\n", + "[1] \"indx: 80\"\n" + ] + } + ], + "source": [ + "avg_FDR = NULL\n", + "table_block = NULL\n", + "tmp_num_select = rep(0, length(files))\n", + "for (i in 1:length(files)){\n", + " #if(i == 16) next \n", + " print(paste0('indx: ', i))\n", + " load(paste0(dir, '/binary_update/block_RF_binary_', i, '.RData')) \n", + " \n", + " table_block = rbind(table_block, results_block_rf[c('n', 'p', 'rou', 'FP', 'FN', 'ROC', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_block_rf$Stab.table))\n", + " \n", + " # calculate FDR\n", + " load(file_name, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_block_rf$Stab.table\n", + " FDR = NULL # false positive rate\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}\n", + "table_block = as.data.frame(table_block)\n", + "table_block$num_select = tmp_num_select\n", + "table_block$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
150500.11 ( 0 )6 ( 0 )1 ( 0 )NaN0.00 NaN
2100500.12.4 ( 0.16 )5.3 ( 0.11 )1 ( 0 )0.013.000.78
3500500.12.96 ( 0.21 )4.29 ( 0.15 )1 ( 0 )0.124.630.62
41000500.13.28 ( 0.21 )3.04 ( 0.12 )1 ( 0 )0.336.240.49
5501000.11 ( 0 )6 ( 0 )1 ( 0 )NaN0.00 NaN
61001000.15.09 ( 0.21 )5.6 ( 0.09 )1 ( 0 )05.480.93
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1 ( 0 ) & 6 ( 0 ) & 1 ( 0 ) & NaN & 0.00 & NaN\\\\\n", + "\t2 & 100 & 50 & 0.1 & 2.4 ( 0.16 ) & 5.3 ( 0.11 ) & 1 ( 0 ) & 0.01 & 3.00 & 0.78\\\\\n", + "\t3 & 500 & 50 & 0.1 & 2.96 ( 0.21 ) & 4.29 ( 0.15 ) & 1 ( 0 ) & 0.12 & 4.63 & 0.62\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 3.28 ( 0.21 ) & 3.04 ( 0.12 ) & 1 ( 0 ) & 0.33 & 6.24 & 0.49\\\\\n", + "\t5 & 50 & 100 & 0.1 & 1 ( 0 ) & 6 ( 0 ) & 1 ( 0 ) & NaN & 0.00 & NaN\\\\\n", + "\t6 & 100 & 100 & 0.1 & 5.09 ( 0.21 ) & 5.6 ( 0.09 ) & 1 ( 0 ) & 0 & 5.48 & 0.93\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1 ( 0 ) | 6 ( 0 ) | 1 ( 0 ) | NaN | 0.00 | NaN |\n", + "| 2 | 100 | 50 | 0.1 | 2.4 ( 0.16 ) | 5.3 ( 0.11 ) | 1 ( 0 ) | 0.01 | 3.00 | 0.78 |\n", + "| 3 | 500 | 50 | 0.1 | 2.96 ( 0.21 ) | 4.29 ( 0.15 ) | 1 ( 0 ) | 0.12 | 4.63 | 0.62 |\n", + "| 4 | 1000 | 50 | 0.1 | 3.28 ( 0.21 ) | 3.04 ( 0.12 ) | 1 ( 0 ) | 0.33 | 6.24 | 0.49 |\n", + "| 5 | 50 | 100 | 0.1 | 1 ( 0 ) | 6 ( 0 ) | 1 ( 0 ) | NaN | 0.00 | NaN |\n", + "| 6 | 100 | 100 | 0.1 | 5.09 ( 0.21 ) | 5.6 ( 0.09 ) | 1 ( 0 ) | 0 | 5.48 | 0.93 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select FDR \n", + "1 50 50 0.1 1 ( 0 ) 6 ( 0 ) 1 ( 0 ) NaN 0.00 NaN\n", + "2 100 50 0.1 2.4 ( 0.16 ) 5.3 ( 0.11 ) 1 ( 0 ) 0.01 3.00 0.78\n", + "3 500 50 0.1 2.96 ( 0.21 ) 4.29 ( 0.15 ) 1 ( 0 ) 0.12 4.63 0.62\n", + "4 1000 50 0.1 3.28 ( 0.21 ) 3.04 ( 0.12 ) 1 ( 0 ) 0.33 6.24 0.49\n", + "5 50 100 0.1 1 ( 0 ) 6 ( 0 ) 1 ( 0 ) NaN 0.00 NaN\n", + "6 100 100 0.1 5.09 ( 0.21 ) 5.6 ( 0.09 ) 1 ( 0 ) 0 5.48 0.93" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
755005000.924.29 ( 0.42 )2.65 ( 0.09 )1 ( 0 )0.0727.640.88
7610005000.921.42 ( 0.42 )1.49 ( 0.08 )1 ( 0 )0.1325.930.82
775010000.91 ( 0 )6 ( 0 )1 ( 0 )NaN 0.00 NaN
7810010000.947.48 ( 0.72 )4.95 ( 0.08 )1 ( 0 )048.530.98
7950010000.948.09 ( 0.7 )2.94 ( 0.09 )1 ( 0 )0.0451.150.94
80100010000.945.6 ( 0.72 )1.63 ( 0.08 )1 ( 0 )0.0749.970.91
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 24.29 ( 0.42 ) & 2.65 ( 0.09 ) & 1 ( 0 ) & 0.07 & 27.64 & 0.88\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 21.42 ( 0.42 ) & 1.49 ( 0.08 ) & 1 ( 0 ) & 0.13 & 25.93 & 0.82\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 1 ( 0 ) & 6 ( 0 ) & 1 ( 0 ) & NaN & 0.00 & NaN\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 47.48 ( 0.72 ) & 4.95 ( 0.08 ) & 1 ( 0 ) & 0 & 48.53 & 0.98\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 48.09 ( 0.7 ) & 2.94 ( 0.09 ) & 1 ( 0 ) & 0.04 & 51.15 & 0.94\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 45.6 ( 0.72 ) & 1.63 ( 0.08 ) & 1 ( 0 ) & 0.07 & 49.97 & 0.91\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 24.29 ( 0.42 ) | 2.65 ( 0.09 ) | 1 ( 0 ) | 0.07 | 27.64 | 0.88 |\n", + "| 76 | 1000 | 500 | 0.9 | 21.42 ( 0.42 ) | 1.49 ( 0.08 ) | 1 ( 0 ) | 0.13 | 25.93 | 0.82 |\n", + "| 77 | 50 | 1000 | 0.9 | 1 ( 0 ) | 6 ( 0 ) | 1 ( 0 ) | NaN | 0.00 | NaN |\n", + "| 78 | 100 | 1000 | 0.9 | 47.48 ( 0.72 ) | 4.95 ( 0.08 ) | 1 ( 0 ) | 0 | 48.53 | 0.98 |\n", + "| 79 | 500 | 1000 | 0.9 | 48.09 ( 0.7 ) | 2.94 ( 0.09 ) | 1 ( 0 ) | 0.04 | 51.15 | 0.94 |\n", + "| 80 | 1000 | 1000 | 0.9 | 45.6 ( 0.72 ) | 1.63 ( 0.08 ) | 1 ( 0 ) | 0.07 | 49.97 | 0.91 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select FDR \n", + "75 500 500 0.9 24.29 ( 0.42 ) 2.65 ( 0.09 ) 1 ( 0 ) 0.07 27.64 0.88\n", + "76 1000 500 0.9 21.42 ( 0.42 ) 1.49 ( 0.08 ) 1 ( 0 ) 0.13 25.93 0.82\n", + "77 50 1000 0.9 1 ( 0 ) 6 ( 0 ) 1 ( 0 ) NaN 0.00 NaN\n", + "78 100 1000 0.9 47.48 ( 0.72 ) 4.95 ( 0.08 ) 1 ( 0 ) 0 48.53 0.98\n", + "79 500 1000 0.9 48.09 ( 0.7 ) 2.94 ( 0.09 ) 1 ( 0 ) 0.04 51.15 0.94\n", + "80 1000 1000 0.9 45.6 ( 0.72 ) 1.63 ( 0.08 ) 1 ( 0 ) 0.07 49.97 0.91" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_block <- apply(table_block,2,as.character)\n", + "rownames(result.table_block) = rownames(table_block)\n", + "result.table_block = as.data.frame(result.table_block)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_block$n = tidyr::extract_numeric(result.table_block$n)\n", + "result.table_block$p = tidyr::extract_numeric(result.table_block$p)\n", + "result.table_block$ratio = result.table_block$p / result.table_block$n\n", + "\n", + "result.table_block = result.table_block[c('n', 'p', 'rou', 'ratio', 'Stab', 'ROC', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_block)[1:4] = c('N', 'P', 'Corr', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_block$Stab = as.numeric(as.character(result.table_block$Stab))\n", + "result.table_block$ROC_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_block$ROC))\n", + "result.table_block$FP_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_block$FP))\n", + "result.table_block$FN_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_block$FN))\n", + "result.table_block$num_select = as.numeric(as.character(result.table_block$num_select))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 20 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
150 500.1 1NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
550 1000.1 2NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
950 5000.110NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
135010000.120NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
1750 500.3 1NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
2150 1000.3 2NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
2550 5000.310NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
295010000.320NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
3350 500.5 1NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
3750 1000.5 2NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
4150 5000.510NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
455010000.520NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
4950 500.7 1NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
5350 1000.7 2NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
5750 5000.710NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
615010000.720NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
6550 500.9 1NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
6950 1000.9 2NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
7350 5000.910NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
775010000.920NaN1 ( 0 )1 ( 0 )6 ( 0 )0NaN116
\n" + ], + "text/latex": [ + "A data.frame: 20 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t5 & 50 & 100 & 0.1 & 2 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t9 & 50 & 500 & 0.1 & 10 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t13 & 50 & 1000 & 0.1 & 20 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t17 & 50 & 50 & 0.3 & 1 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t21 & 50 & 100 & 0.3 & 2 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t25 & 50 & 500 & 0.3 & 10 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t29 & 50 & 1000 & 0.3 & 20 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t33 & 50 & 50 & 0.5 & 1 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t37 & 50 & 100 & 0.5 & 2 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t41 & 50 & 500 & 0.5 & 10 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t45 & 50 & 1000 & 0.5 & 20 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t49 & 50 & 50 & 0.7 & 1 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t53 & 50 & 100 & 0.7 & 2 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t57 & 50 & 500 & 0.7 & 10 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t61 & 50 & 1000 & 0.7 & 20 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t65 & 50 & 50 & 0.9 & 1 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t69 & 50 & 100 & 0.9 & 2 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t73 & 50 & 500 & 0.9 & 10 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 20 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 5 | 50 | 100 | 0.1 | 2 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 9 | 50 | 500 | 0.1 | 10 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 13 | 50 | 1000 | 0.1 | 20 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 17 | 50 | 50 | 0.3 | 1 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 21 | 50 | 100 | 0.3 | 2 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 25 | 50 | 500 | 0.3 | 10 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 29 | 50 | 1000 | 0.3 | 20 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 33 | 50 | 50 | 0.5 | 1 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 37 | 50 | 100 | 0.5 | 2 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 41 | 50 | 500 | 0.5 | 10 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 45 | 50 | 1000 | 0.5 | 20 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 49 | 50 | 50 | 0.7 | 1 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 53 | 50 | 100 | 0.7 | 2 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 57 | 50 | 500 | 0.7 | 10 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 61 | 50 | 1000 | 0.7 | 20 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 65 | 50 | 50 | 0.9 | 1 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 69 | 50 | 100 | 0.9 | 2 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 73 | 50 | 500 | 0.9 | 10 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "| 77 | 50 | 1000 | 0.9 | 20 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select FDR ROC_mean\n", + "1 50 50 0.1 1 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "5 50 100 0.1 2 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "9 50 500 0.1 10 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "13 50 1000 0.1 20 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "17 50 50 0.3 1 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "21 50 100 0.3 2 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "25 50 500 0.3 10 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "29 50 1000 0.3 20 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "33 50 50 0.5 1 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "37 50 100 0.5 2 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "41 50 500 0.5 10 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "45 50 1000 0.5 20 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "49 50 50 0.7 1 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "53 50 100 0.7 2 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "57 50 500 0.7 10 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "61 50 1000 0.7 20 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "65 50 50 0.9 1 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "69 50 100 0.9 2 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "73 50 500 0.9 10 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "77 50 1000 0.9 20 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + " FP_mean FN_mean\n", + "1 1 6 \n", + "5 1 6 \n", + "9 1 6 \n", + "13 1 6 \n", + "17 1 6 \n", + "21 1 6 \n", + "25 1 6 \n", + "29 1 6 \n", + "33 1 6 \n", + "37 1 6 \n", + "41 1 6 \n", + "45 1 6 \n", + "49 1 6 \n", + "53 1 6 \n", + "57 1 6 \n", + "61 1 6 \n", + "65 1 6 \n", + "69 1 6 \n", + "73 1 6 \n", + "77 1 6 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check whether missing values exists\n", + "result.table_block[rowSums(is.na(result.table_block)) > 0,]" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 500.11.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 11.006.00
2 100 500.10.500.011 ( 0 )2.4 ( 0.16 ) 5.3 ( 0.11 ) 3.000.7812.405.30
3 500 500.10.100.121 ( 0 )2.96 ( 0.21 )4.29 ( 0.15 )4.630.6212.964.29
41000 500.10.050.331 ( 0 )3.28 ( 0.21 )3.04 ( 0.12 )6.240.4913.283.04
5 501000.12.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 11.006.00
6 1001000.11.000.001 ( 0 )5.09 ( 0.21 )5.6 ( 0.09 ) 5.480.9315.095.60
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t2 & 100 & 50 & 0.1 & 0.50 & 0.01 & 1 ( 0 ) & 2.4 ( 0.16 ) & 5.3 ( 0.11 ) & 3.00 & 0.78 & 1 & 2.40 & 5.30\\\\\n", + "\t3 & 500 & 50 & 0.1 & 0.10 & 0.12 & 1 ( 0 ) & 2.96 ( 0.21 ) & 4.29 ( 0.15 ) & 4.63 & 0.62 & 1 & 2.96 & 4.29\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 0.05 & 0.33 & 1 ( 0 ) & 3.28 ( 0.21 ) & 3.04 ( 0.12 ) & 6.24 & 0.49 & 1 & 3.28 & 3.04\\\\\n", + "\t5 & 50 & 100 & 0.1 & 2.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t6 & 100 & 100 & 0.1 & 1.00 & 0.00 & 1 ( 0 ) & 5.09 ( 0.21 ) & 5.6 ( 0.09 ) & 5.48 & 0.93 & 1 & 5.09 & 5.60\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 2 | 100 | 50 | 0.1 | 0.50 | 0.01 | 1 ( 0 ) | 2.4 ( 0.16 ) | 5.3 ( 0.11 ) | 3.00 | 0.78 | 1 | 2.40 | 5.30 |\n", + "| 3 | 500 | 50 | 0.1 | 0.10 | 0.12 | 1 ( 0 ) | 2.96 ( 0.21 ) | 4.29 ( 0.15 ) | 4.63 | 0.62 | 1 | 2.96 | 4.29 |\n", + "| 4 | 1000 | 50 | 0.1 | 0.05 | 0.33 | 1 ( 0 ) | 3.28 ( 0.21 ) | 3.04 ( 0.12 ) | 6.24 | 0.49 | 1 | 3.28 | 3.04 |\n", + "| 5 | 50 | 100 | 0.1 | 2.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 6 | 100 | 100 | 0.1 | 1.00 | 0.00 | 1 ( 0 ) | 5.09 ( 0.21 ) | 5.6 ( 0.09 ) | 5.48 | 0.93 | 1 | 5.09 | 5.60 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select FDR \n", + "1 50 50 0.1 1.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 NaN \n", + "2 100 50 0.1 0.50 0.01 1 ( 0 ) 2.4 ( 0.16 ) 5.3 ( 0.11 ) 3.00 0.78\n", + "3 500 50 0.1 0.10 0.12 1 ( 0 ) 2.96 ( 0.21 ) 4.29 ( 0.15 ) 4.63 0.62\n", + "4 1000 50 0.1 0.05 0.33 1 ( 0 ) 3.28 ( 0.21 ) 3.04 ( 0.12 ) 6.24 0.49\n", + "5 50 100 0.1 2.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 NaN \n", + "6 100 100 0.1 1.00 0.00 1 ( 0 ) 5.09 ( 0.21 ) 5.6 ( 0.09 ) 5.48 0.93\n", + " ROC_mean FP_mean FN_mean\n", + "1 1 1.00 6.00 \n", + "2 1 2.40 5.30 \n", + "3 1 2.96 4.29 \n", + "4 1 3.28 3.04 \n", + "5 1 1.00 6.00 \n", + "6 1 5.09 5.60 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
75 500 5000.9 1.00.071 ( 0 )24.29 ( 0.42 )2.65 ( 0.09 )27.640.88124.292.65
761000 5000.9 0.50.131 ( 0 )21.42 ( 0.42 )1.49 ( 0.08 )25.930.82121.421.49
77 5010000.920.0 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
78 10010000.910.00.001 ( 0 )47.48 ( 0.72 )4.95 ( 0.08 )48.530.98147.484.95
79 50010000.9 2.00.041 ( 0 )48.09 ( 0.7 ) 2.94 ( 0.09 )51.150.94148.092.94
80100010000.9 1.00.071 ( 0 )45.6 ( 0.72 ) 1.63 ( 0.08 )49.970.91145.601.63
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 1.0 & 0.07 & 1 ( 0 ) & 24.29 ( 0.42 ) & 2.65 ( 0.09 ) & 27.64 & 0.88 & 1 & 24.29 & 2.65\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.5 & 0.13 & 1 ( 0 ) & 21.42 ( 0.42 ) & 1.49 ( 0.08 ) & 25.93 & 0.82 & 1 & 21.42 & 1.49\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.0 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.0 & 0.00 & 1 ( 0 ) & 47.48 ( 0.72 ) & 4.95 ( 0.08 ) & 48.53 & 0.98 & 1 & 47.48 & 4.95\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.0 & 0.04 & 1 ( 0 ) & 48.09 ( 0.7 ) & 2.94 ( 0.09 ) & 51.15 & 0.94 & 1 & 48.09 & 2.94\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.0 & 0.07 & 1 ( 0 ) & 45.6 ( 0.72 ) & 1.63 ( 0.08 ) & 49.97 & 0.91 & 1 & 45.60 & 1.63\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 1.0 | 0.07 | 1 ( 0 ) | 24.29 ( 0.42 ) | 2.65 ( 0.09 ) | 27.64 | 0.88 | 1 | 24.29 | 2.65 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.5 | 0.13 | 1 ( 0 ) | 21.42 ( 0.42 ) | 1.49 ( 0.08 ) | 25.93 | 0.82 | 1 | 21.42 | 1.49 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.0 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.0 | 0.00 | 1 ( 0 ) | 47.48 ( 0.72 ) | 4.95 ( 0.08 ) | 48.53 | 0.98 | 1 | 47.48 | 4.95 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.0 | 0.04 | 1 ( 0 ) | 48.09 ( 0.7 ) | 2.94 ( 0.09 ) | 51.15 | 0.94 | 1 | 48.09 | 2.94 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.0 | 0.07 | 1 ( 0 ) | 45.6 ( 0.72 ) | 1.63 ( 0.08 ) | 49.97 | 0.91 | 1 | 45.60 | 1.63 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select\n", + "75 500 500 0.9 1.0 0.07 1 ( 0 ) 24.29 ( 0.42 ) 2.65 ( 0.09 ) 27.64 \n", + "76 1000 500 0.9 0.5 0.13 1 ( 0 ) 21.42 ( 0.42 ) 1.49 ( 0.08 ) 25.93 \n", + "77 50 1000 0.9 20.0 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "78 100 1000 0.9 10.0 0.00 1 ( 0 ) 47.48 ( 0.72 ) 4.95 ( 0.08 ) 48.53 \n", + "79 500 1000 0.9 2.0 0.04 1 ( 0 ) 48.09 ( 0.7 ) 2.94 ( 0.09 ) 51.15 \n", + "80 1000 1000 0.9 1.0 0.07 1 ( 0 ) 45.6 ( 0.72 ) 1.63 ( 0.08 ) 49.97 \n", + " FDR ROC_mean FP_mean FN_mean\n", + "75 0.88 1 24.29 2.65 \n", + "76 0.82 1 21.42 1.49 \n", + "77 NaN 1 1.00 6.00 \n", + "78 0.98 1 47.48 4.95 \n", + "79 0.94 1 48.09 2.94 \n", + "80 0.91 1 45.60 1.63 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(result.table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 80 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 500.1 1.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
2 100 500.1 0.500.011 ( 0 )2.4 ( 0.16 ) 5.3 ( 0.11 ) 3.000.781 2.405.30
3 500 500.1 0.100.121 ( 0 )2.96 ( 0.21 ) 4.29 ( 0.15 ) 4.630.621 2.964.29
41000 500.1 0.050.331 ( 0 )3.28 ( 0.21 ) 3.04 ( 0.12 ) 6.240.491 3.283.04
5 50 1000.1 2.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
6 100 1000.1 1.000.001 ( 0 )5.09 ( 0.21 ) 5.6 ( 0.09 ) 5.480.931 5.095.60
7 500 1000.1 0.200.101 ( 0 )5.39 ( 0.29 ) 4.05 ( 0.16 ) 7.340.721 5.394.05
81000 1000.1 0.100.251 ( 0 )5.43 ( 0.26 ) 2.89 ( 0.14 ) 8.540.621 5.432.89
9 50 5000.110.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
10 100 5000.1 5.000.001 ( 0 )24.14 ( 0.56 )5.35 ( 0.11 )24.790.97124.145.35
11 500 5000.1 1.000.031 ( 0 )24.48 ( 0.54 )4.25 ( 0.16 )26.230.93124.484.25
121000 5000.1 0.500.071 ( 0 )24.08 ( 0.54 )3.1 ( 0.16 ) 26.980.89124.083.10
13 5010000.120.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
14 10010000.110.000.001 ( 0 )48.22 ( 0.62 )5.53 ( 0.09 )48.690.99148.225.53
15 50010000.1 2.000.011 ( 0 )50.18 ( 0.78 )4.63 ( 0.12 )51.550.97150.184.63
16100010000.1 1.000.041 ( 0 )49.43 ( 0.66 )3.23 ( 0.14 )52.200.95149.433.23
17 50 500.3 1.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
18 100 500.3 0.500.021 ( 0 )2.13 ( 0.12 ) 5.14 ( 0.08 ) 2.960.711 2.135.14
19 500 500.3 0.100.461 ( 0 )1.43 ( 0.11 ) 2.59 ( 0.11 ) 4.840.271 1.432.59
201000 500.3 0.050.601 ( 0 )1.44 ( 0.13 ) 1.35 ( 0.08 ) 6.090.211 1.441.35
21 50 1000.3 2.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
22 100 1000.3 1.000.011 ( 0 )4.84 ( 0.18 ) 5.1 ( 0.08 ) 5.730.841 4.845.10
23 500 1000.3 0.200.281 ( 0 )3.77 ( 0.17 ) 2.76 ( 0.1 ) 7.010.521 3.772.76
241000 1000.3 0.100.441 ( 0 )3.43 ( 0.18 ) 1.5 ( 0.09 ) 7.930.411 3.431.50
25 50 5000.310.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
26 100 5000.3 5.000.001 ( 0 )24.49 ( 0.47 )5.11 ( 0.08 )25.380.96124.495.11
27 500 5000.3 1.000.061 ( 0 )23.05 ( 0.49 )3.15 ( 0.09 )25.900.89123.053.15
281000 5000.3 0.500.111 ( 0 )22.18 ( 0.49 )1.91 ( 0.09 )26.270.84122.181.91
29 5010000.320.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
30 10010000.310.000.001 ( 0 )46.96 ( 0.66 )5.18 ( 0.08 )47.780.98146.965.18
51 500 500.7 0.100.531 ( 0 )1.29 ( 0.11 ) 2.25 ( 0.08 ) 5.040.231 1.292.25
521000 500.7 0.050.631 ( 0 )1.29 ( 0.11 ) 1.3 ( 0.08 ) 5.990.191 1.291.30
53 50 1000.7 2.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
54 100 1000.7 1.000.031 ( 0 )4.35 ( 0.18 ) 4.98 ( 0.07 ) 5.370.8 1 4.354.98
55 500 1000.7 0.200.341 ( 0 )3.46 ( 0.18 ) 2.53 ( 0.09 ) 6.930.471 3.462.53
561000 1000.7 0.100.481 ( 0 )3.04 ( 0.15 ) 1.27 ( 0.08 ) 7.770.371 3.041.27
57 50 5000.710.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
58 100 5000.7 5.000.011 ( 0 )23.78 ( 0.44 )4.93 ( 0.08 )24.850.96123.784.93
59 500 5000.7 1.000.081 ( 0 )23.14 ( 0.52 )2.73 ( 0.09 )26.410.87123.142.73
601000 5000.7 0.500.131 ( 0 )21.58 ( 0.49 )1.57 ( 0.08 )26.010.82121.581.57
61 5010000.720.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
62 10010000.710.000.001 ( 0 )47.84 ( 0.72 )5 ( 0.09 ) 48.840.98147.845.00
63 50010000.7 2.000.041 ( 0 )47.31 ( 0.68 )2.9 ( 0.1 ) 50.410.94147.312.90
64100010000.7 1.000.061 ( 0 )46.57 ( 0.73 )1.71 ( 0.08 )50.860.91146.571.71
65 50 500.9 1.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
66 100 500.9 0.500.051 ( 0 )2.2 ( 0.13 ) 5 ( 0.08 ) 3.190.661 2.205.00
67 500 500.9 0.100.531 ( 0 )1.28 ( 0.1 ) 2.32 ( 0.08 ) 4.960.231 1.282.32
681000 500.9 0.050.671 ( 0 )0.93 ( 0.09 ) 1.31 ( 0.09 ) 5.620.151 0.931.31
69 50 1000.9 2.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
70 100 1000.9 1.000.041 ( 0 )4.24 ( 0.16 ) 4.83 ( 0.09 ) 5.400.791 4.244.83
71 500 1000.9 0.200.361 ( 0 )3.54 ( 0.19 ) 2.29 ( 0.09 ) 7.250.461 3.542.29
721000 1000.9 0.100.531 ( 0 )2.53 ( 0.14 ) 1.31 ( 0.08 ) 7.220.331 2.531.31
73 50 5000.910.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
74 100 5000.9 5.000.011 ( 0 )23.63 ( 0.45 )5.04 ( 0.08 )24.590.96123.635.04
75 500 5000.9 1.000.071 ( 0 )24.29 ( 0.42 )2.65 ( 0.09 )27.640.88124.292.65
761000 5000.9 0.500.131 ( 0 )21.42 ( 0.42 )1.49 ( 0.08 )25.930.82121.421.49
77 5010000.920.00 NaN1 ( 0 )1 ( 0 ) 6 ( 0 ) 0.00NaN 1 1.006.00
78 10010000.910.000.001 ( 0 )47.48 ( 0.72 )4.95 ( 0.08 )48.530.98147.484.95
79 50010000.9 2.000.041 ( 0 )48.09 ( 0.7 ) 2.94 ( 0.09 )51.150.94148.092.94
80100010000.9 1.000.071 ( 0 )45.6 ( 0.72 ) 1.63 ( 0.08 )49.970.91145.601.63
\n" + ], + "text/latex": [ + "A data.frame: 80 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t2 & 100 & 50 & 0.1 & 0.50 & 0.01 & 1 ( 0 ) & 2.4 ( 0.16 ) & 5.3 ( 0.11 ) & 3.00 & 0.78 & 1 & 2.40 & 5.30\\\\\n", + "\t3 & 500 & 50 & 0.1 & 0.10 & 0.12 & 1 ( 0 ) & 2.96 ( 0.21 ) & 4.29 ( 0.15 ) & 4.63 & 0.62 & 1 & 2.96 & 4.29\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 0.05 & 0.33 & 1 ( 0 ) & 3.28 ( 0.21 ) & 3.04 ( 0.12 ) & 6.24 & 0.49 & 1 & 3.28 & 3.04\\\\\n", + "\t5 & 50 & 100 & 0.1 & 2.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t6 & 100 & 100 & 0.1 & 1.00 & 0.00 & 1 ( 0 ) & 5.09 ( 0.21 ) & 5.6 ( 0.09 ) & 5.48 & 0.93 & 1 & 5.09 & 5.60\\\\\n", + "\t7 & 500 & 100 & 0.1 & 0.20 & 0.10 & 1 ( 0 ) & 5.39 ( 0.29 ) & 4.05 ( 0.16 ) & 7.34 & 0.72 & 1 & 5.39 & 4.05\\\\\n", + "\t8 & 1000 & 100 & 0.1 & 0.10 & 0.25 & 1 ( 0 ) & 5.43 ( 0.26 ) & 2.89 ( 0.14 ) & 8.54 & 0.62 & 1 & 5.43 & 2.89\\\\\n", + "\t9 & 50 & 500 & 0.1 & 10.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t10 & 100 & 500 & 0.1 & 5.00 & 0.00 & 1 ( 0 ) & 24.14 ( 0.56 ) & 5.35 ( 0.11 ) & 24.79 & 0.97 & 1 & 24.14 & 5.35\\\\\n", + "\t11 & 500 & 500 & 0.1 & 1.00 & 0.03 & 1 ( 0 ) & 24.48 ( 0.54 ) & 4.25 ( 0.16 ) & 26.23 & 0.93 & 1 & 24.48 & 4.25\\\\\n", + "\t12 & 1000 & 500 & 0.1 & 0.50 & 0.07 & 1 ( 0 ) & 24.08 ( 0.54 ) & 3.1 ( 0.16 ) & 26.98 & 0.89 & 1 & 24.08 & 3.10\\\\\n", + "\t13 & 50 & 1000 & 0.1 & 20.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t14 & 100 & 1000 & 0.1 & 10.00 & 0.00 & 1 ( 0 ) & 48.22 ( 0.62 ) & 5.53 ( 0.09 ) & 48.69 & 0.99 & 1 & 48.22 & 5.53\\\\\n", + "\t15 & 500 & 1000 & 0.1 & 2.00 & 0.01 & 1 ( 0 ) & 50.18 ( 0.78 ) & 4.63 ( 0.12 ) & 51.55 & 0.97 & 1 & 50.18 & 4.63\\\\\n", + "\t16 & 1000 & 1000 & 0.1 & 1.00 & 0.04 & 1 ( 0 ) & 49.43 ( 0.66 ) & 3.23 ( 0.14 ) & 52.20 & 0.95 & 1 & 49.43 & 3.23\\\\\n", + "\t17 & 50 & 50 & 0.3 & 1.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t18 & 100 & 50 & 0.3 & 0.50 & 0.02 & 1 ( 0 ) & 2.13 ( 0.12 ) & 5.14 ( 0.08 ) & 2.96 & 0.71 & 1 & 2.13 & 5.14\\\\\n", + "\t19 & 500 & 50 & 0.3 & 0.10 & 0.46 & 1 ( 0 ) & 1.43 ( 0.11 ) & 2.59 ( 0.11 ) & 4.84 & 0.27 & 1 & 1.43 & 2.59\\\\\n", + "\t20 & 1000 & 50 & 0.3 & 0.05 & 0.60 & 1 ( 0 ) & 1.44 ( 0.13 ) & 1.35 ( 0.08 ) & 6.09 & 0.21 & 1 & 1.44 & 1.35\\\\\n", + "\t21 & 50 & 100 & 0.3 & 2.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t22 & 100 & 100 & 0.3 & 1.00 & 0.01 & 1 ( 0 ) & 4.84 ( 0.18 ) & 5.1 ( 0.08 ) & 5.73 & 0.84 & 1 & 4.84 & 5.10\\\\\n", + "\t23 & 500 & 100 & 0.3 & 0.20 & 0.28 & 1 ( 0 ) & 3.77 ( 0.17 ) & 2.76 ( 0.1 ) & 7.01 & 0.52 & 1 & 3.77 & 2.76\\\\\n", + "\t24 & 1000 & 100 & 0.3 & 0.10 & 0.44 & 1 ( 0 ) & 3.43 ( 0.18 ) & 1.5 ( 0.09 ) & 7.93 & 0.41 & 1 & 3.43 & 1.50\\\\\n", + "\t25 & 50 & 500 & 0.3 & 10.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t26 & 100 & 500 & 0.3 & 5.00 & 0.00 & 1 ( 0 ) & 24.49 ( 0.47 ) & 5.11 ( 0.08 ) & 25.38 & 0.96 & 1 & 24.49 & 5.11\\\\\n", + "\t27 & 500 & 500 & 0.3 & 1.00 & 0.06 & 1 ( 0 ) & 23.05 ( 0.49 ) & 3.15 ( 0.09 ) & 25.90 & 0.89 & 1 & 23.05 & 3.15\\\\\n", + "\t28 & 1000 & 500 & 0.3 & 0.50 & 0.11 & 1 ( 0 ) & 22.18 ( 0.49 ) & 1.91 ( 0.09 ) & 26.27 & 0.84 & 1 & 22.18 & 1.91\\\\\n", + "\t29 & 50 & 1000 & 0.3 & 20.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t30 & 100 & 1000 & 0.3 & 10.00 & 0.00 & 1 ( 0 ) & 46.96 ( 0.66 ) & 5.18 ( 0.08 ) & 47.78 & 0.98 & 1 & 46.96 & 5.18\\\\\n", + "\t⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮\\\\\n", + "\t51 & 500 & 50 & 0.7 & 0.10 & 0.53 & 1 ( 0 ) & 1.29 ( 0.11 ) & 2.25 ( 0.08 ) & 5.04 & 0.23 & 1 & 1.29 & 2.25\\\\\n", + "\t52 & 1000 & 50 & 0.7 & 0.05 & 0.63 & 1 ( 0 ) & 1.29 ( 0.11 ) & 1.3 ( 0.08 ) & 5.99 & 0.19 & 1 & 1.29 & 1.30\\\\\n", + "\t53 & 50 & 100 & 0.7 & 2.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t54 & 100 & 100 & 0.7 & 1.00 & 0.03 & 1 ( 0 ) & 4.35 ( 0.18 ) & 4.98 ( 0.07 ) & 5.37 & 0.8 & 1 & 4.35 & 4.98\\\\\n", + "\t55 & 500 & 100 & 0.7 & 0.20 & 0.34 & 1 ( 0 ) & 3.46 ( 0.18 ) & 2.53 ( 0.09 ) & 6.93 & 0.47 & 1 & 3.46 & 2.53\\\\\n", + "\t56 & 1000 & 100 & 0.7 & 0.10 & 0.48 & 1 ( 0 ) & 3.04 ( 0.15 ) & 1.27 ( 0.08 ) & 7.77 & 0.37 & 1 & 3.04 & 1.27\\\\\n", + "\t57 & 50 & 500 & 0.7 & 10.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t58 & 100 & 500 & 0.7 & 5.00 & 0.01 & 1 ( 0 ) & 23.78 ( 0.44 ) & 4.93 ( 0.08 ) & 24.85 & 0.96 & 1 & 23.78 & 4.93\\\\\n", + "\t59 & 500 & 500 & 0.7 & 1.00 & 0.08 & 1 ( 0 ) & 23.14 ( 0.52 ) & 2.73 ( 0.09 ) & 26.41 & 0.87 & 1 & 23.14 & 2.73\\\\\n", + "\t60 & 1000 & 500 & 0.7 & 0.50 & 0.13 & 1 ( 0 ) & 21.58 ( 0.49 ) & 1.57 ( 0.08 ) & 26.01 & 0.82 & 1 & 21.58 & 1.57\\\\\n", + "\t61 & 50 & 1000 & 0.7 & 20.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t62 & 100 & 1000 & 0.7 & 10.00 & 0.00 & 1 ( 0 ) & 47.84 ( 0.72 ) & 5 ( 0.09 ) & 48.84 & 0.98 & 1 & 47.84 & 5.00\\\\\n", + "\t63 & 500 & 1000 & 0.7 & 2.00 & 0.04 & 1 ( 0 ) & 47.31 ( 0.68 ) & 2.9 ( 0.1 ) & 50.41 & 0.94 & 1 & 47.31 & 2.90\\\\\n", + "\t64 & 1000 & 1000 & 0.7 & 1.00 & 0.06 & 1 ( 0 ) & 46.57 ( 0.73 ) & 1.71 ( 0.08 ) & 50.86 & 0.91 & 1 & 46.57 & 1.71\\\\\n", + "\t65 & 50 & 50 & 0.9 & 1.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t66 & 100 & 50 & 0.9 & 0.50 & 0.05 & 1 ( 0 ) & 2.2 ( 0.13 ) & 5 ( 0.08 ) & 3.19 & 0.66 & 1 & 2.20 & 5.00\\\\\n", + "\t67 & 500 & 50 & 0.9 & 0.10 & 0.53 & 1 ( 0 ) & 1.28 ( 0.1 ) & 2.32 ( 0.08 ) & 4.96 & 0.23 & 1 & 1.28 & 2.32\\\\\n", + "\t68 & 1000 & 50 & 0.9 & 0.05 & 0.67 & 1 ( 0 ) & 0.93 ( 0.09 ) & 1.31 ( 0.09 ) & 5.62 & 0.15 & 1 & 0.93 & 1.31\\\\\n", + "\t69 & 50 & 100 & 0.9 & 2.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t70 & 100 & 100 & 0.9 & 1.00 & 0.04 & 1 ( 0 ) & 4.24 ( 0.16 ) & 4.83 ( 0.09 ) & 5.40 & 0.79 & 1 & 4.24 & 4.83\\\\\n", + "\t71 & 500 & 100 & 0.9 & 0.20 & 0.36 & 1 ( 0 ) & 3.54 ( 0.19 ) & 2.29 ( 0.09 ) & 7.25 & 0.46 & 1 & 3.54 & 2.29\\\\\n", + "\t72 & 1000 & 100 & 0.9 & 0.10 & 0.53 & 1 ( 0 ) & 2.53 ( 0.14 ) & 1.31 ( 0.08 ) & 7.22 & 0.33 & 1 & 2.53 & 1.31\\\\\n", + "\t73 & 50 & 500 & 0.9 & 10.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t74 & 100 & 500 & 0.9 & 5.00 & 0.01 & 1 ( 0 ) & 23.63 ( 0.45 ) & 5.04 ( 0.08 ) & 24.59 & 0.96 & 1 & 23.63 & 5.04\\\\\n", + "\t75 & 500 & 500 & 0.9 & 1.00 & 0.07 & 1 ( 0 ) & 24.29 ( 0.42 ) & 2.65 ( 0.09 ) & 27.64 & 0.88 & 1 & 24.29 & 2.65\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.50 & 0.13 & 1 ( 0 ) & 21.42 ( 0.42 ) & 1.49 ( 0.08 ) & 25.93 & 0.82 & 1 & 21.42 & 1.49\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.00 & NaN & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 1 & 1.00 & 6.00\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.00 & 0.00 & 1 ( 0 ) & 47.48 ( 0.72 ) & 4.95 ( 0.08 ) & 48.53 & 0.98 & 1 & 47.48 & 4.95\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.00 & 0.04 & 1 ( 0 ) & 48.09 ( 0.7 ) & 2.94 ( 0.09 ) & 51.15 & 0.94 & 1 & 48.09 & 2.94\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.00 & 0.07 & 1 ( 0 ) & 45.6 ( 0.72 ) & 1.63 ( 0.08 ) & 49.97 & 0.91 & 1 & 45.60 & 1.63\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 80 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 2 | 100 | 50 | 0.1 | 0.50 | 0.01 | 1 ( 0 ) | 2.4 ( 0.16 ) | 5.3 ( 0.11 ) | 3.00 | 0.78 | 1 | 2.40 | 5.30 |\n", + "| 3 | 500 | 50 | 0.1 | 0.10 | 0.12 | 1 ( 0 ) | 2.96 ( 0.21 ) | 4.29 ( 0.15 ) | 4.63 | 0.62 | 1 | 2.96 | 4.29 |\n", + "| 4 | 1000 | 50 | 0.1 | 0.05 | 0.33 | 1 ( 0 ) | 3.28 ( 0.21 ) | 3.04 ( 0.12 ) | 6.24 | 0.49 | 1 | 3.28 | 3.04 |\n", + "| 5 | 50 | 100 | 0.1 | 2.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 6 | 100 | 100 | 0.1 | 1.00 | 0.00 | 1 ( 0 ) | 5.09 ( 0.21 ) | 5.6 ( 0.09 ) | 5.48 | 0.93 | 1 | 5.09 | 5.60 |\n", + "| 7 | 500 | 100 | 0.1 | 0.20 | 0.10 | 1 ( 0 ) | 5.39 ( 0.29 ) | 4.05 ( 0.16 ) | 7.34 | 0.72 | 1 | 5.39 | 4.05 |\n", + "| 8 | 1000 | 100 | 0.1 | 0.10 | 0.25 | 1 ( 0 ) | 5.43 ( 0.26 ) | 2.89 ( 0.14 ) | 8.54 | 0.62 | 1 | 5.43 | 2.89 |\n", + "| 9 | 50 | 500 | 0.1 | 10.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 10 | 100 | 500 | 0.1 | 5.00 | 0.00 | 1 ( 0 ) | 24.14 ( 0.56 ) | 5.35 ( 0.11 ) | 24.79 | 0.97 | 1 | 24.14 | 5.35 |\n", + "| 11 | 500 | 500 | 0.1 | 1.00 | 0.03 | 1 ( 0 ) | 24.48 ( 0.54 ) | 4.25 ( 0.16 ) | 26.23 | 0.93 | 1 | 24.48 | 4.25 |\n", + "| 12 | 1000 | 500 | 0.1 | 0.50 | 0.07 | 1 ( 0 ) | 24.08 ( 0.54 ) | 3.1 ( 0.16 ) | 26.98 | 0.89 | 1 | 24.08 | 3.10 |\n", + "| 13 | 50 | 1000 | 0.1 | 20.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 14 | 100 | 1000 | 0.1 | 10.00 | 0.00 | 1 ( 0 ) | 48.22 ( 0.62 ) | 5.53 ( 0.09 ) | 48.69 | 0.99 | 1 | 48.22 | 5.53 |\n", + "| 15 | 500 | 1000 | 0.1 | 2.00 | 0.01 | 1 ( 0 ) | 50.18 ( 0.78 ) | 4.63 ( 0.12 ) | 51.55 | 0.97 | 1 | 50.18 | 4.63 |\n", + "| 16 | 1000 | 1000 | 0.1 | 1.00 | 0.04 | 1 ( 0 ) | 49.43 ( 0.66 ) | 3.23 ( 0.14 ) | 52.20 | 0.95 | 1 | 49.43 | 3.23 |\n", + "| 17 | 50 | 50 | 0.3 | 1.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 18 | 100 | 50 | 0.3 | 0.50 | 0.02 | 1 ( 0 ) | 2.13 ( 0.12 ) | 5.14 ( 0.08 ) | 2.96 | 0.71 | 1 | 2.13 | 5.14 |\n", + "| 19 | 500 | 50 | 0.3 | 0.10 | 0.46 | 1 ( 0 ) | 1.43 ( 0.11 ) | 2.59 ( 0.11 ) | 4.84 | 0.27 | 1 | 1.43 | 2.59 |\n", + "| 20 | 1000 | 50 | 0.3 | 0.05 | 0.60 | 1 ( 0 ) | 1.44 ( 0.13 ) | 1.35 ( 0.08 ) | 6.09 | 0.21 | 1 | 1.44 | 1.35 |\n", + "| 21 | 50 | 100 | 0.3 | 2.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 22 | 100 | 100 | 0.3 | 1.00 | 0.01 | 1 ( 0 ) | 4.84 ( 0.18 ) | 5.1 ( 0.08 ) | 5.73 | 0.84 | 1 | 4.84 | 5.10 |\n", + "| 23 | 500 | 100 | 0.3 | 0.20 | 0.28 | 1 ( 0 ) | 3.77 ( 0.17 ) | 2.76 ( 0.1 ) | 7.01 | 0.52 | 1 | 3.77 | 2.76 |\n", + "| 24 | 1000 | 100 | 0.3 | 0.10 | 0.44 | 1 ( 0 ) | 3.43 ( 0.18 ) | 1.5 ( 0.09 ) | 7.93 | 0.41 | 1 | 3.43 | 1.50 |\n", + "| 25 | 50 | 500 | 0.3 | 10.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 26 | 100 | 500 | 0.3 | 5.00 | 0.00 | 1 ( 0 ) | 24.49 ( 0.47 ) | 5.11 ( 0.08 ) | 25.38 | 0.96 | 1 | 24.49 | 5.11 |\n", + "| 27 | 500 | 500 | 0.3 | 1.00 | 0.06 | 1 ( 0 ) | 23.05 ( 0.49 ) | 3.15 ( 0.09 ) | 25.90 | 0.89 | 1 | 23.05 | 3.15 |\n", + "| 28 | 1000 | 500 | 0.3 | 0.50 | 0.11 | 1 ( 0 ) | 22.18 ( 0.49 ) | 1.91 ( 0.09 ) | 26.27 | 0.84 | 1 | 22.18 | 1.91 |\n", + "| 29 | 50 | 1000 | 0.3 | 20.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 30 | 100 | 1000 | 0.3 | 10.00 | 0.00 | 1 ( 0 ) | 46.96 ( 0.66 ) | 5.18 ( 0.08 ) | 47.78 | 0.98 | 1 | 46.96 | 5.18 |\n", + "| ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ |\n", + "| 51 | 500 | 50 | 0.7 | 0.10 | 0.53 | 1 ( 0 ) | 1.29 ( 0.11 ) | 2.25 ( 0.08 ) | 5.04 | 0.23 | 1 | 1.29 | 2.25 |\n", + "| 52 | 1000 | 50 | 0.7 | 0.05 | 0.63 | 1 ( 0 ) | 1.29 ( 0.11 ) | 1.3 ( 0.08 ) | 5.99 | 0.19 | 1 | 1.29 | 1.30 |\n", + "| 53 | 50 | 100 | 0.7 | 2.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 54 | 100 | 100 | 0.7 | 1.00 | 0.03 | 1 ( 0 ) | 4.35 ( 0.18 ) | 4.98 ( 0.07 ) | 5.37 | 0.8 | 1 | 4.35 | 4.98 |\n", + "| 55 | 500 | 100 | 0.7 | 0.20 | 0.34 | 1 ( 0 ) | 3.46 ( 0.18 ) | 2.53 ( 0.09 ) | 6.93 | 0.47 | 1 | 3.46 | 2.53 |\n", + "| 56 | 1000 | 100 | 0.7 | 0.10 | 0.48 | 1 ( 0 ) | 3.04 ( 0.15 ) | 1.27 ( 0.08 ) | 7.77 | 0.37 | 1 | 3.04 | 1.27 |\n", + "| 57 | 50 | 500 | 0.7 | 10.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 58 | 100 | 500 | 0.7 | 5.00 | 0.01 | 1 ( 0 ) | 23.78 ( 0.44 ) | 4.93 ( 0.08 ) | 24.85 | 0.96 | 1 | 23.78 | 4.93 |\n", + "| 59 | 500 | 500 | 0.7 | 1.00 | 0.08 | 1 ( 0 ) | 23.14 ( 0.52 ) | 2.73 ( 0.09 ) | 26.41 | 0.87 | 1 | 23.14 | 2.73 |\n", + "| 60 | 1000 | 500 | 0.7 | 0.50 | 0.13 | 1 ( 0 ) | 21.58 ( 0.49 ) | 1.57 ( 0.08 ) | 26.01 | 0.82 | 1 | 21.58 | 1.57 |\n", + "| 61 | 50 | 1000 | 0.7 | 20.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 62 | 100 | 1000 | 0.7 | 10.00 | 0.00 | 1 ( 0 ) | 47.84 ( 0.72 ) | 5 ( 0.09 ) | 48.84 | 0.98 | 1 | 47.84 | 5.00 |\n", + "| 63 | 500 | 1000 | 0.7 | 2.00 | 0.04 | 1 ( 0 ) | 47.31 ( 0.68 ) | 2.9 ( 0.1 ) | 50.41 | 0.94 | 1 | 47.31 | 2.90 |\n", + "| 64 | 1000 | 1000 | 0.7 | 1.00 | 0.06 | 1 ( 0 ) | 46.57 ( 0.73 ) | 1.71 ( 0.08 ) | 50.86 | 0.91 | 1 | 46.57 | 1.71 |\n", + "| 65 | 50 | 50 | 0.9 | 1.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 66 | 100 | 50 | 0.9 | 0.50 | 0.05 | 1 ( 0 ) | 2.2 ( 0.13 ) | 5 ( 0.08 ) | 3.19 | 0.66 | 1 | 2.20 | 5.00 |\n", + "| 67 | 500 | 50 | 0.9 | 0.10 | 0.53 | 1 ( 0 ) | 1.28 ( 0.1 ) | 2.32 ( 0.08 ) | 4.96 | 0.23 | 1 | 1.28 | 2.32 |\n", + "| 68 | 1000 | 50 | 0.9 | 0.05 | 0.67 | 1 ( 0 ) | 0.93 ( 0.09 ) | 1.31 ( 0.09 ) | 5.62 | 0.15 | 1 | 0.93 | 1.31 |\n", + "| 69 | 50 | 100 | 0.9 | 2.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 70 | 100 | 100 | 0.9 | 1.00 | 0.04 | 1 ( 0 ) | 4.24 ( 0.16 ) | 4.83 ( 0.09 ) | 5.40 | 0.79 | 1 | 4.24 | 4.83 |\n", + "| 71 | 500 | 100 | 0.9 | 0.20 | 0.36 | 1 ( 0 ) | 3.54 ( 0.19 ) | 2.29 ( 0.09 ) | 7.25 | 0.46 | 1 | 3.54 | 2.29 |\n", + "| 72 | 1000 | 100 | 0.9 | 0.10 | 0.53 | 1 ( 0 ) | 2.53 ( 0.14 ) | 1.31 ( 0.08 ) | 7.22 | 0.33 | 1 | 2.53 | 1.31 |\n", + "| 73 | 50 | 500 | 0.9 | 10.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 74 | 100 | 500 | 0.9 | 5.00 | 0.01 | 1 ( 0 ) | 23.63 ( 0.45 ) | 5.04 ( 0.08 ) | 24.59 | 0.96 | 1 | 23.63 | 5.04 |\n", + "| 75 | 500 | 500 | 0.9 | 1.00 | 0.07 | 1 ( 0 ) | 24.29 ( 0.42 ) | 2.65 ( 0.09 ) | 27.64 | 0.88 | 1 | 24.29 | 2.65 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.50 | 0.13 | 1 ( 0 ) | 21.42 ( 0.42 ) | 1.49 ( 0.08 ) | 25.93 | 0.82 | 1 | 21.42 | 1.49 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.00 | NaN | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 1 | 1.00 | 6.00 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.00 | 0.00 | 1 ( 0 ) | 47.48 ( 0.72 ) | 4.95 ( 0.08 ) | 48.53 | 0.98 | 1 | 47.48 | 4.95 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.00 | 0.04 | 1 ( 0 ) | 48.09 ( 0.7 ) | 2.94 ( 0.09 ) | 51.15 | 0.94 | 1 | 48.09 | 2.94 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.00 | 0.07 | 1 ( 0 ) | 45.6 ( 0.72 ) | 1.63 ( 0.08 ) | 49.97 | 0.91 | 1 | 45.60 | 1.63 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select\n", + "1 50 50 0.1 1.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "2 100 50 0.1 0.50 0.01 1 ( 0 ) 2.4 ( 0.16 ) 5.3 ( 0.11 ) 3.00 \n", + "3 500 50 0.1 0.10 0.12 1 ( 0 ) 2.96 ( 0.21 ) 4.29 ( 0.15 ) 4.63 \n", + "4 1000 50 0.1 0.05 0.33 1 ( 0 ) 3.28 ( 0.21 ) 3.04 ( 0.12 ) 6.24 \n", + "5 50 100 0.1 2.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "6 100 100 0.1 1.00 0.00 1 ( 0 ) 5.09 ( 0.21 ) 5.6 ( 0.09 ) 5.48 \n", + "7 500 100 0.1 0.20 0.10 1 ( 0 ) 5.39 ( 0.29 ) 4.05 ( 0.16 ) 7.34 \n", + "8 1000 100 0.1 0.10 0.25 1 ( 0 ) 5.43 ( 0.26 ) 2.89 ( 0.14 ) 8.54 \n", + "9 50 500 0.1 10.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "10 100 500 0.1 5.00 0.00 1 ( 0 ) 24.14 ( 0.56 ) 5.35 ( 0.11 ) 24.79 \n", + "11 500 500 0.1 1.00 0.03 1 ( 0 ) 24.48 ( 0.54 ) 4.25 ( 0.16 ) 26.23 \n", + "12 1000 500 0.1 0.50 0.07 1 ( 0 ) 24.08 ( 0.54 ) 3.1 ( 0.16 ) 26.98 \n", + "13 50 1000 0.1 20.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "14 100 1000 0.1 10.00 0.00 1 ( 0 ) 48.22 ( 0.62 ) 5.53 ( 0.09 ) 48.69 \n", + "15 500 1000 0.1 2.00 0.01 1 ( 0 ) 50.18 ( 0.78 ) 4.63 ( 0.12 ) 51.55 \n", + "16 1000 1000 0.1 1.00 0.04 1 ( 0 ) 49.43 ( 0.66 ) 3.23 ( 0.14 ) 52.20 \n", + "17 50 50 0.3 1.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "18 100 50 0.3 0.50 0.02 1 ( 0 ) 2.13 ( 0.12 ) 5.14 ( 0.08 ) 2.96 \n", + "19 500 50 0.3 0.10 0.46 1 ( 0 ) 1.43 ( 0.11 ) 2.59 ( 0.11 ) 4.84 \n", + "20 1000 50 0.3 0.05 0.60 1 ( 0 ) 1.44 ( 0.13 ) 1.35 ( 0.08 ) 6.09 \n", + "21 50 100 0.3 2.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "22 100 100 0.3 1.00 0.01 1 ( 0 ) 4.84 ( 0.18 ) 5.1 ( 0.08 ) 5.73 \n", + "23 500 100 0.3 0.20 0.28 1 ( 0 ) 3.77 ( 0.17 ) 2.76 ( 0.1 ) 7.01 \n", + "24 1000 100 0.3 0.10 0.44 1 ( 0 ) 3.43 ( 0.18 ) 1.5 ( 0.09 ) 7.93 \n", + "25 50 500 0.3 10.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "26 100 500 0.3 5.00 0.00 1 ( 0 ) 24.49 ( 0.47 ) 5.11 ( 0.08 ) 25.38 \n", + "27 500 500 0.3 1.00 0.06 1 ( 0 ) 23.05 ( 0.49 ) 3.15 ( 0.09 ) 25.90 \n", + "28 1000 500 0.3 0.50 0.11 1 ( 0 ) 22.18 ( 0.49 ) 1.91 ( 0.09 ) 26.27 \n", + "29 50 1000 0.3 20.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "30 100 1000 0.3 10.00 0.00 1 ( 0 ) 46.96 ( 0.66 ) 5.18 ( 0.08 ) 47.78 \n", + "⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ \n", + "51 500 50 0.7 0.10 0.53 1 ( 0 ) 1.29 ( 0.11 ) 2.25 ( 0.08 ) 5.04 \n", + "52 1000 50 0.7 0.05 0.63 1 ( 0 ) 1.29 ( 0.11 ) 1.3 ( 0.08 ) 5.99 \n", + "53 50 100 0.7 2.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "54 100 100 0.7 1.00 0.03 1 ( 0 ) 4.35 ( 0.18 ) 4.98 ( 0.07 ) 5.37 \n", + "55 500 100 0.7 0.20 0.34 1 ( 0 ) 3.46 ( 0.18 ) 2.53 ( 0.09 ) 6.93 \n", + "56 1000 100 0.7 0.10 0.48 1 ( 0 ) 3.04 ( 0.15 ) 1.27 ( 0.08 ) 7.77 \n", + "57 50 500 0.7 10.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "58 100 500 0.7 5.00 0.01 1 ( 0 ) 23.78 ( 0.44 ) 4.93 ( 0.08 ) 24.85 \n", + "59 500 500 0.7 1.00 0.08 1 ( 0 ) 23.14 ( 0.52 ) 2.73 ( 0.09 ) 26.41 \n", + "60 1000 500 0.7 0.50 0.13 1 ( 0 ) 21.58 ( 0.49 ) 1.57 ( 0.08 ) 26.01 \n", + "61 50 1000 0.7 20.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "62 100 1000 0.7 10.00 0.00 1 ( 0 ) 47.84 ( 0.72 ) 5 ( 0.09 ) 48.84 \n", + "63 500 1000 0.7 2.00 0.04 1 ( 0 ) 47.31 ( 0.68 ) 2.9 ( 0.1 ) 50.41 \n", + "64 1000 1000 0.7 1.00 0.06 1 ( 0 ) 46.57 ( 0.73 ) 1.71 ( 0.08 ) 50.86 \n", + "65 50 50 0.9 1.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "66 100 50 0.9 0.50 0.05 1 ( 0 ) 2.2 ( 0.13 ) 5 ( 0.08 ) 3.19 \n", + "67 500 50 0.9 0.10 0.53 1 ( 0 ) 1.28 ( 0.1 ) 2.32 ( 0.08 ) 4.96 \n", + "68 1000 50 0.9 0.05 0.67 1 ( 0 ) 0.93 ( 0.09 ) 1.31 ( 0.09 ) 5.62 \n", + "69 50 100 0.9 2.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "70 100 100 0.9 1.00 0.04 1 ( 0 ) 4.24 ( 0.16 ) 4.83 ( 0.09 ) 5.40 \n", + "71 500 100 0.9 0.20 0.36 1 ( 0 ) 3.54 ( 0.19 ) 2.29 ( 0.09 ) 7.25 \n", + "72 1000 100 0.9 0.10 0.53 1 ( 0 ) 2.53 ( 0.14 ) 1.31 ( 0.08 ) 7.22 \n", + "73 50 500 0.9 10.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "74 100 500 0.9 5.00 0.01 1 ( 0 ) 23.63 ( 0.45 ) 5.04 ( 0.08 ) 24.59 \n", + "75 500 500 0.9 1.00 0.07 1 ( 0 ) 24.29 ( 0.42 ) 2.65 ( 0.09 ) 27.64 \n", + "76 1000 500 0.9 0.50 0.13 1 ( 0 ) 21.42 ( 0.42 ) 1.49 ( 0.08 ) 25.93 \n", + "77 50 1000 0.9 20.00 NaN 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 \n", + "78 100 1000 0.9 10.00 0.00 1 ( 0 ) 47.48 ( 0.72 ) 4.95 ( 0.08 ) 48.53 \n", + "79 500 1000 0.9 2.00 0.04 1 ( 0 ) 48.09 ( 0.7 ) 2.94 ( 0.09 ) 51.15 \n", + "80 1000 1000 0.9 1.00 0.07 1 ( 0 ) 45.6 ( 0.72 ) 1.63 ( 0.08 ) 49.97 \n", + " FDR ROC_mean FP_mean FN_mean\n", + "1 NaN 1 1.00 6.00 \n", + "2 0.78 1 2.40 5.30 \n", + "3 0.62 1 2.96 4.29 \n", + "4 0.49 1 3.28 3.04 \n", + "5 NaN 1 1.00 6.00 \n", + "6 0.93 1 5.09 5.60 \n", + "7 0.72 1 5.39 4.05 \n", + "8 0.62 1 5.43 2.89 \n", + "9 NaN 1 1.00 6.00 \n", + "10 0.97 1 24.14 5.35 \n", + "11 0.93 1 24.48 4.25 \n", + "12 0.89 1 24.08 3.10 \n", + "13 NaN 1 1.00 6.00 \n", + "14 0.99 1 48.22 5.53 \n", + "15 0.97 1 50.18 4.63 \n", + "16 0.95 1 49.43 3.23 \n", + "17 NaN 1 1.00 6.00 \n", + "18 0.71 1 2.13 5.14 \n", + "19 0.27 1 1.43 2.59 \n", + "20 0.21 1 1.44 1.35 \n", + "21 NaN 1 1.00 6.00 \n", + "22 0.84 1 4.84 5.10 \n", + "23 0.52 1 3.77 2.76 \n", + "24 0.41 1 3.43 1.50 \n", + "25 NaN 1 1.00 6.00 \n", + "26 0.96 1 24.49 5.11 \n", + "27 0.89 1 23.05 3.15 \n", + "28 0.84 1 22.18 1.91 \n", + "29 NaN 1 1.00 6.00 \n", + "30 0.98 1 46.96 5.18 \n", + "⋮ ⋮ ⋮ ⋮ ⋮ \n", + "51 0.23 1 1.29 2.25 \n", + "52 0.19 1 1.29 1.30 \n", + "53 NaN 1 1.00 6.00 \n", + "54 0.8 1 4.35 4.98 \n", + "55 0.47 1 3.46 2.53 \n", + "56 0.37 1 3.04 1.27 \n", + "57 NaN 1 1.00 6.00 \n", + "58 0.96 1 23.78 4.93 \n", + "59 0.87 1 23.14 2.73 \n", + "60 0.82 1 21.58 1.57 \n", + "61 NaN 1 1.00 6.00 \n", + "62 0.98 1 47.84 5.00 \n", + "63 0.94 1 47.31 2.90 \n", + "64 0.91 1 46.57 1.71 \n", + "65 NaN 1 1.00 6.00 \n", + "66 0.66 1 2.20 5.00 \n", + "67 0.23 1 1.28 2.32 \n", + "68 0.15 1 0.93 1.31 \n", + "69 NaN 1 1.00 6.00 \n", + "70 0.79 1 4.24 4.83 \n", + "71 0.46 1 3.54 2.29 \n", + "72 0.33 1 2.53 1.31 \n", + "73 NaN 1 1.00 6.00 \n", + "74 0.96 1 23.63 5.04 \n", + "75 0.88 1 24.29 2.65 \n", + "76 0.82 1 21.42 1.49 \n", + "77 NaN 1 1.00 6.00 \n", + "78 0.98 1 47.48 4.95 \n", + "79 0.94 1 48.09 2.94 \n", + "80 0.91 1 45.60 1.63 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_block\n", + "\n", + "## export\n", + "write.table(result.table_block, '../results_summary_bin/sim_block_RF_binary.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_bin/2.4_sim_block_GencompLasso_binary_update.ipynb b/simulations/notebooks_sim_bin/2.4_sim_block_GencompLasso_binary_update.ipynb new file mode 100644 index 0000000..b3900c2 --- /dev/null +++ b/simulations/notebooks_sim_bin/2.4_sim_block_GencompLasso_binary_update.ipynb @@ -0,0 +1,1003 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize compositional lasso results on Block Simulation Scenarios for binary outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "rou.list = seq(0.1, 0.9, 0.2)\n", + "\n", + "files = NULL\n", + "for (rou in rou.list){\n", + " for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_block_corr', rou, paste('P', p, 'N', n, sep='_'), '.RData', sep=''))\n", + " }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "80" + ], + "text/latex": [ + "80" + ], + "text/markdown": [ + "80" + ], + "text/plain": [ + "[1] 80" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "length(files)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1] \"indx: 1\"\n", + "[1] \"indx: 2\"\n", + "[1] \"indx: 3\"\n", + "[1] \"indx: 4\"\n", + "[1] \"indx: 5\"\n", + "[1] \"indx: 6\"\n", + "[1] \"indx: 7\"\n", + "[1] \"indx: 8\"\n", + "[1] \"indx: 9\"\n", + "[1] \"indx: 10\"\n", + "[1] \"indx: 11\"\n", + "[1] \"indx: 12\"\n", + "[1] \"indx: 13\"\n", + "[1] \"indx: 14\"\n", + "[1] \"indx: 15\"\n", + "[1] \"indx: 16\"\n", + "[1] \"indx: 17\"\n", + "[1] \"indx: 18\"\n", + "[1] \"indx: 19\"\n", + "[1] \"indx: 20\"\n", + "[1] \"indx: 21\"\n", + "[1] \"indx: 22\"\n", + "[1] \"indx: 23\"\n", + "[1] \"indx: 24\"\n", + "[1] \"indx: 25\"\n", + "[1] \"indx: 26\"\n", + "[1] \"indx: 27\"\n", + "[1] \"indx: 28\"\n", + "[1] \"indx: 29\"\n", + "[1] \"indx: 30\"\n", + "[1] \"indx: 31\"\n", + "[1] \"indx: 32\"\n", + "[1] \"indx: 33\"\n", + "[1] \"indx: 34\"\n", + "[1] \"indx: 35\"\n", + "[1] \"indx: 36\"\n", + "[1] \"indx: 37\"\n", + "[1] \"indx: 38\"\n", + "[1] \"indx: 39\"\n", + "[1] \"indx: 40\"\n", + "[1] \"indx: 41\"\n", + "[1] \"indx: 42\"\n", + "[1] \"indx: 43\"\n", + "[1] \"indx: 44\"\n", + "[1] \"indx: 45\"\n", + "[1] \"indx: 46\"\n", + "[1] \"indx: 47\"\n", + "[1] \"indx: 48\"\n", + "[1] \"indx: 49\"\n", + "[1] \"indx: 50\"\n", + "[1] \"indx: 51\"\n", + "[1] \"indx: 52\"\n", + "[1] \"indx: 53\"\n", + "[1] \"indx: 54\"\n", + "[1] \"indx: 55\"\n", + "[1] \"indx: 56\"\n", + "[1] \"indx: 57\"\n", + "[1] \"indx: 58\"\n", + "[1] \"indx: 59\"\n", + "[1] \"indx: 60\"\n", + "[1] \"indx: 61\"\n", + "[1] \"indx: 62\"\n", + "[1] \"indx: 63\"\n", + "[1] \"indx: 64\"\n", + "[1] \"indx: 65\"\n", + "[1] \"indx: 66\"\n", + "[1] \"indx: 67\"\n", + "[1] \"indx: 68\"\n", + "[1] \"indx: 69\"\n", + "[1] \"indx: 70\"\n", + "[1] \"indx: 71\"\n", + "[1] \"indx: 72\"\n", + "[1] \"indx: 73\"\n", + "[1] \"indx: 74\"\n", + "[1] \"indx: 75\"\n", + "[1] \"indx: 76\"\n", + "[1] \"indx: 77\"\n", + "[1] \"indx: 78\"\n", + "[1] \"indx: 79\"\n", + "[1] \"indx: 80\"\n" + ] + } + ], + "source": [ + "avg_FDR = NULL\n", + "table_block = NULL\n", + "tmp_num_select = rep(0, length(files))\n", + "for (i in 1:length(files)){\n", + " print(paste0('indx: ', i))\n", + " load(paste0(dir, '/binary_update/block_GenCompLasso_binary_', i, '.RData')) \n", + " \n", + " table_block = rbind(table_block, results_block_GenCompLasso[c('n', 'p', 'rou', 'FP', 'FN', 'ROC', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_block_GenCompLasso$Stab.table))\n", + " \n", + " # calculate FDR\n", + " load(file_name, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_block_GenCompLasso$Stab.table\n", + " FDR = NULL # false positive rate\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}\n", + "table_block = as.data.frame(table_block)\n", + "table_block$num_select = tmp_num_select\n", + "table_block$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
150500.11.68 ( 0.53 )5.42 ( 0.1 )0.58 ( 0.01 )0.022.260.58
2100500.10.08 ( 0.04 )5.65 ( 0.08 )0.51 ( 0 )0.060.430.18
3500500.10 ( 0 )6 ( 0 )0.5 ( 0 )NaN0.00 NaN
41000500.10 ( 0 )6 ( 0 )0.5 ( 0 )NaN0.00 NaN
5501000.13.43 ( 0.63 )5.23 ( 0.1 )0.61 ( 0.01 )0.044.200.71
61001000.10.31 ( 0.1 )5.8 ( 0.05 )0.51 ( 0 )0.030.510.53
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1.68 ( 0.53 ) & 5.42 ( 0.1 ) & 0.58 ( 0.01 ) & 0.02 & 2.26 & 0.58\\\\\n", + "\t2 & 100 & 50 & 0.1 & 0.08 ( 0.04 ) & 5.65 ( 0.08 ) & 0.51 ( 0 ) & 0.06 & 0.43 & 0.18\\\\\n", + "\t3 & 500 & 50 & 0.1 & 0 ( 0 ) & 6 ( 0 ) & 0.5 ( 0 ) & NaN & 0.00 & NaN\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 0 ( 0 ) & 6 ( 0 ) & 0.5 ( 0 ) & NaN & 0.00 & NaN\\\\\n", + "\t5 & 50 & 100 & 0.1 & 3.43 ( 0.63 ) & 5.23 ( 0.1 ) & 0.61 ( 0.01 ) & 0.04 & 4.20 & 0.71\\\\\n", + "\t6 & 100 & 100 & 0.1 & 0.31 ( 0.1 ) & 5.8 ( 0.05 ) & 0.51 ( 0 ) & 0.03 & 0.51 & 0.53\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1.68 ( 0.53 ) | 5.42 ( 0.1 ) | 0.58 ( 0.01 ) | 0.02 | 2.26 | 0.58 |\n", + "| 2 | 100 | 50 | 0.1 | 0.08 ( 0.04 ) | 5.65 ( 0.08 ) | 0.51 ( 0 ) | 0.06 | 0.43 | 0.18 |\n", + "| 3 | 500 | 50 | 0.1 | 0 ( 0 ) | 6 ( 0 ) | 0.5 ( 0 ) | NaN | 0.00 | NaN |\n", + "| 4 | 1000 | 50 | 0.1 | 0 ( 0 ) | 6 ( 0 ) | 0.5 ( 0 ) | NaN | 0.00 | NaN |\n", + "| 5 | 50 | 100 | 0.1 | 3.43 ( 0.63 ) | 5.23 ( 0.1 ) | 0.61 ( 0.01 ) | 0.04 | 4.20 | 0.71 |\n", + "| 6 | 100 | 100 | 0.1 | 0.31 ( 0.1 ) | 5.8 ( 0.05 ) | 0.51 ( 0 ) | 0.03 | 0.51 | 0.53 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select FDR \n", + "1 50 50 0.1 1.68 ( 0.53 ) 5.42 ( 0.1 ) 0.58 ( 0.01 ) 0.02 2.26 0.58\n", + "2 100 50 0.1 0.08 ( 0.04 ) 5.65 ( 0.08 ) 0.51 ( 0 ) 0.06 0.43 0.18\n", + "3 500 50 0.1 0 ( 0 ) 6 ( 0 ) 0.5 ( 0 ) NaN 0.00 NaN\n", + "4 1000 50 0.1 0 ( 0 ) 6 ( 0 ) 0.5 ( 0 ) NaN 0.00 NaN\n", + "5 50 100 0.1 3.43 ( 0.63 ) 5.23 ( 0.1 ) 0.61 ( 0.01 ) 0.04 4.20 0.71\n", + "6 100 100 0.1 0.31 ( 0.1 ) 5.8 ( 0.05 ) 0.51 ( 0 ) 0.03 0.51 0.53" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 9
nprouFPFNROCStabnum_selectFDR
<list><list><list><list><list><list><list><dbl><dbl>
755005000.91.08 ( 0.33 )0.01 ( 0.01 )0.91 ( 0 )0.85 7.070.08
7610005000.90.14 ( 0.07 )0 ( 0 )0.91 ( 0 )0.98 6.140.02
775010000.9330.51 ( 8.59 )0.97 ( 0.08 )1 ( 0 )0.01335.540.98
7810010000.9217.74 ( 6.88 )0.67 ( 0.07 )1 ( 0 )0.02223.070.97
7950010000.91.91 ( 0.48 )0.02 ( 0.01 )0.91 ( 0 )0.76 7.890.12
80100010000.90.27 ( 0.11 )0.02 ( 0.01 )0.91 ( 0 )0.95 6.250.03
\n" + ], + "text/latex": [ + "A data.frame: 6 × 9\n", + "\\begin{tabular}{r|lllllllll}\n", + " & n & p & rou & FP & FN & ROC & Stab & num\\_select & FDR\\\\\n", + " & & & & & & & & & \\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 1.08 ( 0.33 ) & 0.01 ( 0.01 ) & 0.91 ( 0 ) & 0.85 & 7.07 & 0.08\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.14 ( 0.07 ) & 0 ( 0 ) & 0.91 ( 0 ) & 0.98 & 6.14 & 0.02\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 330.51 ( 8.59 ) & 0.97 ( 0.08 ) & 1 ( 0 ) & 0.01 & 335.54 & 0.98\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 217.74 ( 6.88 ) & 0.67 ( 0.07 ) & 1 ( 0 ) & 0.02 & 223.07 & 0.97\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 1.91 ( 0.48 ) & 0.02 ( 0.01 ) & 0.91 ( 0 ) & 0.76 & 7.89 & 0.12\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 0.27 ( 0.11 ) & 0.02 ( 0.01 ) & 0.91 ( 0 ) & 0.95 & 6.25 & 0.03\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 9\n", + "\n", + "| | n <list> | p <list> | rou <list> | FP <list> | FN <list> | ROC <list> | Stab <list> | num_select <dbl> | FDR <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 1.08 ( 0.33 ) | 0.01 ( 0.01 ) | 0.91 ( 0 ) | 0.85 | 7.07 | 0.08 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.14 ( 0.07 ) | 0 ( 0 ) | 0.91 ( 0 ) | 0.98 | 6.14 | 0.02 |\n", + "| 77 | 50 | 1000 | 0.9 | 330.51 ( 8.59 ) | 0.97 ( 0.08 ) | 1 ( 0 ) | 0.01 | 335.54 | 0.98 |\n", + "| 78 | 100 | 1000 | 0.9 | 217.74 ( 6.88 ) | 0.67 ( 0.07 ) | 1 ( 0 ) | 0.02 | 223.07 | 0.97 |\n", + "| 79 | 500 | 1000 | 0.9 | 1.91 ( 0.48 ) | 0.02 ( 0.01 ) | 0.91 ( 0 ) | 0.76 | 7.89 | 0.12 |\n", + "| 80 | 1000 | 1000 | 0.9 | 0.27 ( 0.11 ) | 0.02 ( 0.01 ) | 0.91 ( 0 ) | 0.95 | 6.25 | 0.03 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN ROC Stab num_select FDR \n", + "75 500 500 0.9 1.08 ( 0.33 ) 0.01 ( 0.01 ) 0.91 ( 0 ) 0.85 7.07 0.08\n", + "76 1000 500 0.9 0.14 ( 0.07 ) 0 ( 0 ) 0.91 ( 0 ) 0.98 6.14 0.02\n", + "77 50 1000 0.9 330.51 ( 8.59 ) 0.97 ( 0.08 ) 1 ( 0 ) 0.01 335.54 0.98\n", + "78 100 1000 0.9 217.74 ( 6.88 ) 0.67 ( 0.07 ) 1 ( 0 ) 0.02 223.07 0.97\n", + "79 500 1000 0.9 1.91 ( 0.48 ) 0.02 ( 0.01 ) 0.91 ( 0 ) 0.76 7.89 0.12\n", + "80 1000 1000 0.9 0.27 ( 0.11 ) 0.02 ( 0.01 ) 0.91 ( 0 ) 0.95 6.25 0.03" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_block <- apply(table_block,2,as.character)\n", + "rownames(result.table_block) = rownames(table_block)\n", + "result.table_block = as.data.frame(result.table_block)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_block$n = tidyr::extract_numeric(result.table_block$n)\n", + "result.table_block$p = tidyr::extract_numeric(result.table_block$p)\n", + "result.table_block$ratio = result.table_block$p / result.table_block$n\n", + "\n", + "result.table_block = result.table_block[c('n', 'p', 'rou', 'ratio', 'Stab', 'ROC', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_block)[1:4] = c('N', 'P', 'Corr', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_block$Stab = as.numeric(as.character(result.table_block$Stab))\n", + "result.table_block$ROC_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_block$ROC))\n", + "result.table_block$FP_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_block$FP))\n", + "result.table_block$FN_mean = as.numeric(sub(\"\\\\(.*\", \"\", result.table_block$FN))\n", + "result.table_block$num_select = as.numeric(as.character(result.table_block$num_select))" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 7 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
3 500 500.10.10NaN0.5 ( 0 )0 ( 0 )6 ( 0 )0NaN0.506
41000 500.10.05NaN0.5 ( 0 )0 ( 0 )6 ( 0 )0NaN0.506
7 500 1000.10.20NaN0.5 ( 0 )0 ( 0 )6 ( 0 )0NaN0.506
81000 1000.10.10NaN0.5 ( 0 )0 ( 0 )6 ( 0 )0NaN0.506
11 500 5000.11.00NaN0.5 ( 0 )0 ( 0 )6 ( 0 )0NaN0.506
121000 5000.10.50NaN0.5 ( 0 )0 ( 0 )6 ( 0 )0NaN0.506
16100010000.11.00NaN0.5 ( 0 )0 ( 0 )6 ( 0 )0NaN0.506
\n" + ], + "text/latex": [ + "A data.frame: 7 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t3 & 500 & 50 & 0.1 & 0.10 & NaN & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.5 & 0 & 6\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 0.05 & NaN & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.5 & 0 & 6\\\\\n", + "\t7 & 500 & 100 & 0.1 & 0.20 & NaN & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.5 & 0 & 6\\\\\n", + "\t8 & 1000 & 100 & 0.1 & 0.10 & NaN & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.5 & 0 & 6\\\\\n", + "\t11 & 500 & 500 & 0.1 & 1.00 & NaN & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.5 & 0 & 6\\\\\n", + "\t12 & 1000 & 500 & 0.1 & 0.50 & NaN & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.5 & 0 & 6\\\\\n", + "\t16 & 1000 & 1000 & 0.1 & 1.00 & NaN & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.5 & 0 & 6\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 7 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 3 | 500 | 50 | 0.1 | 0.10 | NaN | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.5 | 0 | 6 |\n", + "| 4 | 1000 | 50 | 0.1 | 0.05 | NaN | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.5 | 0 | 6 |\n", + "| 7 | 500 | 100 | 0.1 | 0.20 | NaN | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.5 | 0 | 6 |\n", + "| 8 | 1000 | 100 | 0.1 | 0.10 | NaN | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.5 | 0 | 6 |\n", + "| 11 | 500 | 500 | 0.1 | 1.00 | NaN | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.5 | 0 | 6 |\n", + "| 12 | 1000 | 500 | 0.1 | 0.50 | NaN | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.5 | 0 | 6 |\n", + "| 16 | 1000 | 1000 | 0.1 | 1.00 | NaN | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.5 | 0 | 6 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select FDR ROC_mean\n", + "3 500 50 0.1 0.10 NaN 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0 NaN 0.5 \n", + "4 1000 50 0.1 0.05 NaN 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0 NaN 0.5 \n", + "7 500 100 0.1 0.20 NaN 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0 NaN 0.5 \n", + "8 1000 100 0.1 0.10 NaN 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0 NaN 0.5 \n", + "11 500 500 0.1 1.00 NaN 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0 NaN 0.5 \n", + "12 1000 500 0.1 0.50 NaN 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0 NaN 0.5 \n", + "16 1000 1000 0.1 1.00 NaN 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0 NaN 0.5 \n", + " FP_mean FN_mean\n", + "3 0 6 \n", + "4 0 6 \n", + "7 0 6 \n", + "8 0 6 \n", + "11 0 6 \n", + "12 0 6 \n", + "16 0 6 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check whether missing values exists\n", + "result.table_block[rowSums(is.na(result.table_block)) > 0,]" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 500.11.000.020.58 ( 0.01 )1.68 ( 0.53 )5.42 ( 0.1 ) 2.260.580.581.685.42
2 100 500.10.500.060.51 ( 0 ) 0.08 ( 0.04 )5.65 ( 0.08 )0.430.180.510.085.65
3 500 500.10.10 NaN0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00NaN 0.500.006.00
41000 500.10.05 NaN0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00NaN 0.500.006.00
5 501000.12.000.040.61 ( 0.01 )3.43 ( 0.63 )5.23 ( 0.1 ) 4.200.710.613.435.23
6 1001000.11.000.030.51 ( 0 ) 0.31 ( 0.1 ) 5.8 ( 0.05 ) 0.510.530.510.315.80
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1.00 & 0.02 & 0.58 ( 0.01 ) & 1.68 ( 0.53 ) & 5.42 ( 0.1 ) & 2.26 & 0.58 & 0.58 & 1.68 & 5.42\\\\\n", + "\t2 & 100 & 50 & 0.1 & 0.50 & 0.06 & 0.51 ( 0 ) & 0.08 ( 0.04 ) & 5.65 ( 0.08 ) & 0.43 & 0.18 & 0.51 & 0.08 & 5.65\\\\\n", + "\t3 & 500 & 50 & 0.1 & 0.10 & NaN & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 0.50 & 0.00 & 6.00\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 0.05 & NaN & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 0.50 & 0.00 & 6.00\\\\\n", + "\t5 & 50 & 100 & 0.1 & 2.00 & 0.04 & 0.61 ( 0.01 ) & 3.43 ( 0.63 ) & 5.23 ( 0.1 ) & 4.20 & 0.71 & 0.61 & 3.43 & 5.23\\\\\n", + "\t6 & 100 & 100 & 0.1 & 1.00 & 0.03 & 0.51 ( 0 ) & 0.31 ( 0.1 ) & 5.8 ( 0.05 ) & 0.51 & 0.53 & 0.51 & 0.31 & 5.80\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1.00 | 0.02 | 0.58 ( 0.01 ) | 1.68 ( 0.53 ) | 5.42 ( 0.1 ) | 2.26 | 0.58 | 0.58 | 1.68 | 5.42 |\n", + "| 2 | 100 | 50 | 0.1 | 0.50 | 0.06 | 0.51 ( 0 ) | 0.08 ( 0.04 ) | 5.65 ( 0.08 ) | 0.43 | 0.18 | 0.51 | 0.08 | 5.65 |\n", + "| 3 | 500 | 50 | 0.1 | 0.10 | NaN | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 0.50 | 0.00 | 6.00 |\n", + "| 4 | 1000 | 50 | 0.1 | 0.05 | NaN | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 0.50 | 0.00 | 6.00 |\n", + "| 5 | 50 | 100 | 0.1 | 2.00 | 0.04 | 0.61 ( 0.01 ) | 3.43 ( 0.63 ) | 5.23 ( 0.1 ) | 4.20 | 0.71 | 0.61 | 3.43 | 5.23 |\n", + "| 6 | 100 | 100 | 0.1 | 1.00 | 0.03 | 0.51 ( 0 ) | 0.31 ( 0.1 ) | 5.8 ( 0.05 ) | 0.51 | 0.53 | 0.51 | 0.31 | 5.80 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select\n", + "1 50 50 0.1 1.00 0.02 0.58 ( 0.01 ) 1.68 ( 0.53 ) 5.42 ( 0.1 ) 2.26 \n", + "2 100 50 0.1 0.50 0.06 0.51 ( 0 ) 0.08 ( 0.04 ) 5.65 ( 0.08 ) 0.43 \n", + "3 500 50 0.1 0.10 NaN 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00 \n", + "4 1000 50 0.1 0.05 NaN 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00 \n", + "5 50 100 0.1 2.00 0.04 0.61 ( 0.01 ) 3.43 ( 0.63 ) 5.23 ( 0.1 ) 4.20 \n", + "6 100 100 0.1 1.00 0.03 0.51 ( 0 ) 0.31 ( 0.1 ) 5.8 ( 0.05 ) 0.51 \n", + " FDR ROC_mean FP_mean FN_mean\n", + "1 0.58 0.58 1.68 5.42 \n", + "2 0.18 0.51 0.08 5.65 \n", + "3 NaN 0.50 0.00 6.00 \n", + "4 NaN 0.50 0.00 6.00 \n", + "5 0.71 0.61 3.43 5.23 \n", + "6 0.53 0.51 0.31 5.80 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
75 500 5000.9 1.00.850.91 ( 0 )1.08 ( 0.33 ) 0.01 ( 0.01 ) 7.070.080.91 1.080.01
761000 5000.9 0.50.980.91 ( 0 )0.14 ( 0.07 ) 0 ( 0 ) 6.140.020.91 0.140.00
77 5010000.920.00.011 ( 0 ) 330.51 ( 8.59 )0.97 ( 0.08 )335.540.981.00330.510.97
78 10010000.910.00.021 ( 0 ) 217.74 ( 6.88 )0.67 ( 0.07 )223.070.971.00217.740.67
79 50010000.9 2.00.760.91 ( 0 )1.91 ( 0.48 ) 0.02 ( 0.01 ) 7.890.120.91 1.910.02
80100010000.9 1.00.950.91 ( 0 )0.27 ( 0.11 ) 0.02 ( 0.01 ) 6.250.030.91 0.270.02
\n" + ], + "text/latex": [ + "A data.frame: 6 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 1.0 & 0.85 & 0.91 ( 0 ) & 1.08 ( 0.33 ) & 0.01 ( 0.01 ) & 7.07 & 0.08 & 0.91 & 1.08 & 0.01\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.5 & 0.98 & 0.91 ( 0 ) & 0.14 ( 0.07 ) & 0 ( 0 ) & 6.14 & 0.02 & 0.91 & 0.14 & 0.00\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.0 & 0.01 & 1 ( 0 ) & 330.51 ( 8.59 ) & 0.97 ( 0.08 ) & 335.54 & 0.98 & 1.00 & 330.51 & 0.97\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.0 & 0.02 & 1 ( 0 ) & 217.74 ( 6.88 ) & 0.67 ( 0.07 ) & 223.07 & 0.97 & 1.00 & 217.74 & 0.67\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.0 & 0.76 & 0.91 ( 0 ) & 1.91 ( 0.48 ) & 0.02 ( 0.01 ) & 7.89 & 0.12 & 0.91 & 1.91 & 0.02\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.0 & 0.95 & 0.91 ( 0 ) & 0.27 ( 0.11 ) & 0.02 ( 0.01 ) & 6.25 & 0.03 & 0.91 & 0.27 & 0.02\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 1.0 | 0.85 | 0.91 ( 0 ) | 1.08 ( 0.33 ) | 0.01 ( 0.01 ) | 7.07 | 0.08 | 0.91 | 1.08 | 0.01 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.5 | 0.98 | 0.91 ( 0 ) | 0.14 ( 0.07 ) | 0 ( 0 ) | 6.14 | 0.02 | 0.91 | 0.14 | 0.00 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.0 | 0.01 | 1 ( 0 ) | 330.51 ( 8.59 ) | 0.97 ( 0.08 ) | 335.54 | 0.98 | 1.00 | 330.51 | 0.97 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.0 | 0.02 | 1 ( 0 ) | 217.74 ( 6.88 ) | 0.67 ( 0.07 ) | 223.07 | 0.97 | 1.00 | 217.74 | 0.67 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.0 | 0.76 | 0.91 ( 0 ) | 1.91 ( 0.48 ) | 0.02 ( 0.01 ) | 7.89 | 0.12 | 0.91 | 1.91 | 0.02 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.0 | 0.95 | 0.91 ( 0 ) | 0.27 ( 0.11 ) | 0.02 ( 0.01 ) | 6.25 | 0.03 | 0.91 | 0.27 | 0.02 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "75 500 500 0.9 1.0 0.85 0.91 ( 0 ) 1.08 ( 0.33 ) 0.01 ( 0.01 )\n", + "76 1000 500 0.9 0.5 0.98 0.91 ( 0 ) 0.14 ( 0.07 ) 0 ( 0 ) \n", + "77 50 1000 0.9 20.0 0.01 1 ( 0 ) 330.51 ( 8.59 ) 0.97 ( 0.08 )\n", + "78 100 1000 0.9 10.0 0.02 1 ( 0 ) 217.74 ( 6.88 ) 0.67 ( 0.07 )\n", + "79 500 1000 0.9 2.0 0.76 0.91 ( 0 ) 1.91 ( 0.48 ) 0.02 ( 0.01 )\n", + "80 1000 1000 0.9 1.0 0.95 0.91 ( 0 ) 0.27 ( 0.11 ) 0.02 ( 0.01 )\n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "75 7.07 0.08 0.91 1.08 0.01 \n", + "76 6.14 0.02 0.91 0.14 0.00 \n", + "77 335.54 0.98 1.00 330.51 0.97 \n", + "78 223.07 0.97 1.00 217.74 0.67 \n", + "79 7.89 0.12 0.91 1.91 0.02 \n", + "80 6.25 0.03 0.91 0.27 0.02 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(result.table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 80 × 13
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_mean
<dbl><dbl><fct><dbl><dbl><fct><fct><fct><dbl><fct><dbl><dbl><dbl>
1 50 500.1 1.000.020.58 ( 0.01 )1.68 ( 0.53 ) 5.42 ( 0.1 ) 2.260.580.58 1.685.42
2 100 500.1 0.500.060.51 ( 0 ) 0.08 ( 0.04 ) 5.65 ( 0.08 ) 0.430.180.51 0.085.65
3 500 500.1 0.10 NaN0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00NaN 0.50 0.006.00
41000 500.1 0.05 NaN0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00NaN 0.50 0.006.00
5 50 1000.1 2.000.040.61 ( 0.01 )3.43 ( 0.63 ) 5.23 ( 0.1 ) 4.200.710.61 3.435.23
6 100 1000.1 1.000.030.51 ( 0 ) 0.31 ( 0.1 ) 5.8 ( 0.05 ) 0.510.530.51 0.315.80
7 500 1000.1 0.20 NaN0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00NaN 0.50 0.006.00
81000 1000.1 0.10 NaN0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00NaN 0.50 0.006.00
9 50 5000.110.000.000.73 ( 0.01 )29.62 ( 7.94 ) 5.17 ( 0.13 ) 30.450.9 0.73 29.625.17
10 100 5000.1 5.000.040.53 ( 0.01 )0.53 ( 0.1 ) 5.63 ( 0.08 ) 0.900.570.53 0.535.63
11 500 5000.1 1.00 NaN0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00NaN 0.50 0.006.00
121000 5000.1 0.50 NaN0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00NaN 0.50 0.006.00
13 5010000.120.000.010.83 ( 0.01 )17.45 ( 2.89 ) 5.37 ( 0.1 ) 18.080.940.83 17.455.37
14 10010000.110.000.030.56 ( 0.01 )1.27 ( 0.25 ) 5.59 ( 0.08 ) 1.680.730.56 1.275.59
15 50010000.1 2.000.000.5 ( 0 ) 0 ( 0 ) 5.98 ( 0.02 ) 0.020 0.50 0.005.98
16100010000.1 1.00 NaN0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00NaN 0.50 0.006.00
17 50 500.3 1.000.140.86 ( 0.01 )9.81 ( 1.05 ) 1.78 ( 0.11 ) 14.030.6 0.86 9.811.78
18 100 500.3 0.500.370.83 ( 0.01 )3.64 ( 0.75 ) 1.7 ( 0.09 ) 7.940.270.83 3.641.70
19 500 500.3 0.100.810.81 ( 0 ) 0.02 ( 0.01 ) 1.75 ( 0.09 ) 4.270 0.81 0.021.75
201000 500.3 0.050.810.8 ( 0 ) 0.06 ( 0.05 ) 1.7 ( 0.09 ) 4.360.010.80 0.061.70
21 50 1000.3 2.000.100.9 ( 0 ) 16.32 ( 1.58 ) 2.2 ( 0.11 ) 20.120.740.90 16.322.20
22 100 1000.3 1.000.310.84 ( 0 ) 5.71 ( 1.02 ) 1.72 ( 0.1 ) 9.990.410.84 5.711.72
23 500 1000.3 0.200.800.81 ( 0 ) 0.12 ( 0.06 ) 1.7 ( 0.09 ) 4.420.010.81 0.121.70
241000 1000.3 0.100.740.8 ( 0 ) 0.49 ( 0.26 ) 2.05 ( 0.08 ) 4.440.040.80 0.492.05
25 50 5000.310.000.021 ( 0 ) 105.94 ( 7.57 )2.04 ( 0.11 )109.900.951.00105.942.04
26 100 5000.3 5.000.120.88 ( 0.01 )23.82 ( 3.36 ) 1.9 ( 0.09 ) 27.920.750.88 23.821.90
27 500 5000.3 1.000.790.8 ( 0 ) 0.24 ( 0.08 ) 1.86 ( 0.09 ) 4.380.030.80 0.241.86
281000 5000.3 0.500.730.8 ( 0 ) 0.63 ( 0.15 ) 1.85 ( 0.09 ) 4.780.080.80 0.631.85
29 5010000.320.000.021 ( 0 ) 154.21 ( 5.09 )2.09 ( 0.1 ) 158.120.971.00154.212.09
30 10010000.310.000.070.91 ( 0 ) 36.7 ( 6.19 ) 2.26 ( 0.1 ) 40.440.840.91 36.702.26
51 500 500.7 0.100.960.9 ( 0 ) 0.17 ( 0.08 ) 0.04 ( 0.02 ) 6.130.020.90 0.170.04
521000 500.7 0.050.980.89 ( 0 )0.1 ( 0.06 ) 0 ( 0 ) 6.100.010.89 0.100.00
53 50 1000.7 2.000.060.99 ( 0 )35.59 ( 2.41 ) 0.94 ( 0.09 ) 40.650.830.99 35.590.94
54 100 1000.7 1.000.260.92 ( 0 )11.64 ( 1.38 ) 0.53 ( 0.06 ) 17.110.570.92 11.640.53
55 500 1000.7 0.200.970.9 ( 0 ) 0.15 ( 0.07 ) 0.05 ( 0.02 ) 6.100.020.90 0.150.05
561000 1000.7 0.100.930.9 ( 0 ) 0.41 ( 0.14 ) 0.03 ( 0.02 ) 6.380.040.90 0.410.03
57 50 5000.710.000.021 ( 0 ) 171.29 ( 6.32 )1.12 ( 0.09 )176.170.971.00171.291.12
58 100 5000.7 5.000.060.98 ( 0 )68.31 ( 6.57 ) 0.98 ( 0.09 ) 73.330.870.98 68.310.98
59 500 5000.7 1.000.930.89 ( 0 )0.37 ( 0.12 ) 0.06 ( 0.02 ) 6.310.040.89 0.370.06
601000 5000.7 0.500.980.9 ( 0 ) 0.13 ( 0.07 ) 0.01 ( 0.01 ) 6.120.010.90 0.130.01
61 5010000.720.000.011 ( 0 ) 275.88 ( 8.89 )1.39 ( 0.09 )280.490.981.00275.881.39
62 10010000.710.000.031 ( 0 ) 155.38 ( 7.45 )0.93 ( 0.08 )160.450.951.00155.380.93
63 50010000.7 2.000.840.9 ( 0 ) 1.07 ( 0.26 ) 0.1 ( 0.03 ) 6.970.090.90 1.070.10
64100010000.7 1.000.950.9 ( 0 ) 0.3 ( 0.11 ) 0.02 ( 0.01 ) 6.280.030.90 0.300.02
65 50 500.9 1.000.130.97 ( 0 )15.75 ( 1.04 ) 0.71 ( 0.07 ) 21.040.7 0.97 15.750.71
66 100 500.9 0.500.440.93 ( 0 )5.06 ( 0.38 ) 0.34 ( 0.05 ) 10.720.420.93 5.060.34
67 500 500.9 0.100.980.91 ( 0 )0.07 ( 0.04 ) 0.03 ( 0.02 ) 6.040.010.91 0.070.03
681000 500.9 0.051.000.91 ( 0 )0 ( 0 ) 0 ( 0 ) 6.000 0.91 0.000.00
69 50 1000.9 2.000.060.99 ( 0 )37.69 ( 2.33 ) 0.96 ( 0.09 ) 42.730.840.99 37.690.96
70 100 1000.9 1.000.260.94 ( 0 )11.53 ( 1.15 ) 0.52 ( 0.06 ) 17.010.610.94 11.530.52
71 500 1000.9 0.200.960.91 ( 0 )0.18 ( 0.06 ) 0.03 ( 0.02 ) 6.150.020.91 0.180.03
721000 1000.9 0.100.970.91 ( 0 )0.17 ( 0.09 ) 0 ( 0 ) 6.170.020.91 0.170.00
73 50 5000.910.000.011 ( 0 ) 189.13 ( 6.24 )0.91 ( 0.1 ) 194.220.971.00189.130.91
74 100 5000.9 5.000.050.99 ( 0 )88.92 ( 5.92 ) 0.68 ( 0.07 ) 94.240.920.99 88.920.68
75 500 5000.9 1.000.850.91 ( 0 )1.08 ( 0.33 ) 0.01 ( 0.01 ) 7.070.080.91 1.080.01
761000 5000.9 0.500.980.91 ( 0 )0.14 ( 0.07 ) 0 ( 0 ) 6.140.020.91 0.140.00
77 5010000.920.000.011 ( 0 ) 330.51 ( 8.59 )0.97 ( 0.08 )335.540.981.00330.510.97
78 10010000.910.000.021 ( 0 ) 217.74 ( 6.88 )0.67 ( 0.07 )223.070.971.00217.740.67
79 50010000.9 2.000.760.91 ( 0 )1.91 ( 0.48 ) 0.02 ( 0.01 ) 7.890.120.91 1.910.02
80100010000.9 1.000.950.91 ( 0 )0.27 ( 0.11 ) 0.02 ( 0.01 ) 6.250.030.91 0.270.02
\n" + ], + "text/latex": [ + "A data.frame: 80 × 13\n", + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean\\\\\n", + " & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1.00 & 0.02 & 0.58 ( 0.01 ) & 1.68 ( 0.53 ) & 5.42 ( 0.1 ) & 2.26 & 0.58 & 0.58 & 1.68 & 5.42\\\\\n", + "\t2 & 100 & 50 & 0.1 & 0.50 & 0.06 & 0.51 ( 0 ) & 0.08 ( 0.04 ) & 5.65 ( 0.08 ) & 0.43 & 0.18 & 0.51 & 0.08 & 5.65\\\\\n", + "\t3 & 500 & 50 & 0.1 & 0.10 & NaN & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 0.50 & 0.00 & 6.00\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 0.05 & NaN & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 0.50 & 0.00 & 6.00\\\\\n", + "\t5 & 50 & 100 & 0.1 & 2.00 & 0.04 & 0.61 ( 0.01 ) & 3.43 ( 0.63 ) & 5.23 ( 0.1 ) & 4.20 & 0.71 & 0.61 & 3.43 & 5.23\\\\\n", + "\t6 & 100 & 100 & 0.1 & 1.00 & 0.03 & 0.51 ( 0 ) & 0.31 ( 0.1 ) & 5.8 ( 0.05 ) & 0.51 & 0.53 & 0.51 & 0.31 & 5.80\\\\\n", + "\t7 & 500 & 100 & 0.1 & 0.20 & NaN & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 0.50 & 0.00 & 6.00\\\\\n", + "\t8 & 1000 & 100 & 0.1 & 0.10 & NaN & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 0.50 & 0.00 & 6.00\\\\\n", + "\t9 & 50 & 500 & 0.1 & 10.00 & 0.00 & 0.73 ( 0.01 ) & 29.62 ( 7.94 ) & 5.17 ( 0.13 ) & 30.45 & 0.9 & 0.73 & 29.62 & 5.17\\\\\n", + "\t10 & 100 & 500 & 0.1 & 5.00 & 0.04 & 0.53 ( 0.01 ) & 0.53 ( 0.1 ) & 5.63 ( 0.08 ) & 0.90 & 0.57 & 0.53 & 0.53 & 5.63\\\\\n", + "\t11 & 500 & 500 & 0.1 & 1.00 & NaN & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 0.50 & 0.00 & 6.00\\\\\n", + "\t12 & 1000 & 500 & 0.1 & 0.50 & NaN & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 0.50 & 0.00 & 6.00\\\\\n", + "\t13 & 50 & 1000 & 0.1 & 20.00 & 0.01 & 0.83 ( 0.01 ) & 17.45 ( 2.89 ) & 5.37 ( 0.1 ) & 18.08 & 0.94 & 0.83 & 17.45 & 5.37\\\\\n", + "\t14 & 100 & 1000 & 0.1 & 10.00 & 0.03 & 0.56 ( 0.01 ) & 1.27 ( 0.25 ) & 5.59 ( 0.08 ) & 1.68 & 0.73 & 0.56 & 1.27 & 5.59\\\\\n", + "\t15 & 500 & 1000 & 0.1 & 2.00 & 0.00 & 0.5 ( 0 ) & 0 ( 0 ) & 5.98 ( 0.02 ) & 0.02 & 0 & 0.50 & 0.00 & 5.98\\\\\n", + "\t16 & 1000 & 1000 & 0.1 & 1.00 & NaN & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NaN & 0.50 & 0.00 & 6.00\\\\\n", + "\t17 & 50 & 50 & 0.3 & 1.00 & 0.14 & 0.86 ( 0.01 ) & 9.81 ( 1.05 ) & 1.78 ( 0.11 ) & 14.03 & 0.6 & 0.86 & 9.81 & 1.78\\\\\n", + "\t18 & 100 & 50 & 0.3 & 0.50 & 0.37 & 0.83 ( 0.01 ) & 3.64 ( 0.75 ) & 1.7 ( 0.09 ) & 7.94 & 0.27 & 0.83 & 3.64 & 1.70\\\\\n", + "\t19 & 500 & 50 & 0.3 & 0.10 & 0.81 & 0.81 ( 0 ) & 0.02 ( 0.01 ) & 1.75 ( 0.09 ) & 4.27 & 0 & 0.81 & 0.02 & 1.75\\\\\n", + "\t20 & 1000 & 50 & 0.3 & 0.05 & 0.81 & 0.8 ( 0 ) & 0.06 ( 0.05 ) & 1.7 ( 0.09 ) & 4.36 & 0.01 & 0.80 & 0.06 & 1.70\\\\\n", + "\t21 & 50 & 100 & 0.3 & 2.00 & 0.10 & 0.9 ( 0 ) & 16.32 ( 1.58 ) & 2.2 ( 0.11 ) & 20.12 & 0.74 & 0.90 & 16.32 & 2.20\\\\\n", + "\t22 & 100 & 100 & 0.3 & 1.00 & 0.31 & 0.84 ( 0 ) & 5.71 ( 1.02 ) & 1.72 ( 0.1 ) & 9.99 & 0.41 & 0.84 & 5.71 & 1.72\\\\\n", + "\t23 & 500 & 100 & 0.3 & 0.20 & 0.80 & 0.81 ( 0 ) & 0.12 ( 0.06 ) & 1.7 ( 0.09 ) & 4.42 & 0.01 & 0.81 & 0.12 & 1.70\\\\\n", + "\t24 & 1000 & 100 & 0.3 & 0.10 & 0.74 & 0.8 ( 0 ) & 0.49 ( 0.26 ) & 2.05 ( 0.08 ) & 4.44 & 0.04 & 0.80 & 0.49 & 2.05\\\\\n", + "\t25 & 50 & 500 & 0.3 & 10.00 & 0.02 & 1 ( 0 ) & 105.94 ( 7.57 ) & 2.04 ( 0.11 ) & 109.90 & 0.95 & 1.00 & 105.94 & 2.04\\\\\n", + "\t26 & 100 & 500 & 0.3 & 5.00 & 0.12 & 0.88 ( 0.01 ) & 23.82 ( 3.36 ) & 1.9 ( 0.09 ) & 27.92 & 0.75 & 0.88 & 23.82 & 1.90\\\\\n", + "\t27 & 500 & 500 & 0.3 & 1.00 & 0.79 & 0.8 ( 0 ) & 0.24 ( 0.08 ) & 1.86 ( 0.09 ) & 4.38 & 0.03 & 0.80 & 0.24 & 1.86\\\\\n", + "\t28 & 1000 & 500 & 0.3 & 0.50 & 0.73 & 0.8 ( 0 ) & 0.63 ( 0.15 ) & 1.85 ( 0.09 ) & 4.78 & 0.08 & 0.80 & 0.63 & 1.85\\\\\n", + "\t29 & 50 & 1000 & 0.3 & 20.00 & 0.02 & 1 ( 0 ) & 154.21 ( 5.09 ) & 2.09 ( 0.1 ) & 158.12 & 0.97 & 1.00 & 154.21 & 2.09\\\\\n", + "\t30 & 100 & 1000 & 0.3 & 10.00 & 0.07 & 0.91 ( 0 ) & 36.7 ( 6.19 ) & 2.26 ( 0.1 ) & 40.44 & 0.84 & 0.91 & 36.70 & 2.26\\\\\n", + "\t⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮ & ⋮\\\\\n", + "\t51 & 500 & 50 & 0.7 & 0.10 & 0.96 & 0.9 ( 0 ) & 0.17 ( 0.08 ) & 0.04 ( 0.02 ) & 6.13 & 0.02 & 0.90 & 0.17 & 0.04\\\\\n", + "\t52 & 1000 & 50 & 0.7 & 0.05 & 0.98 & 0.89 ( 0 ) & 0.1 ( 0.06 ) & 0 ( 0 ) & 6.10 & 0.01 & 0.89 & 0.10 & 0.00\\\\\n", + "\t53 & 50 & 100 & 0.7 & 2.00 & 0.06 & 0.99 ( 0 ) & 35.59 ( 2.41 ) & 0.94 ( 0.09 ) & 40.65 & 0.83 & 0.99 & 35.59 & 0.94\\\\\n", + "\t54 & 100 & 100 & 0.7 & 1.00 & 0.26 & 0.92 ( 0 ) & 11.64 ( 1.38 ) & 0.53 ( 0.06 ) & 17.11 & 0.57 & 0.92 & 11.64 & 0.53\\\\\n", + "\t55 & 500 & 100 & 0.7 & 0.20 & 0.97 & 0.9 ( 0 ) & 0.15 ( 0.07 ) & 0.05 ( 0.02 ) & 6.10 & 0.02 & 0.90 & 0.15 & 0.05\\\\\n", + "\t56 & 1000 & 100 & 0.7 & 0.10 & 0.93 & 0.9 ( 0 ) & 0.41 ( 0.14 ) & 0.03 ( 0.02 ) & 6.38 & 0.04 & 0.90 & 0.41 & 0.03\\\\\n", + "\t57 & 50 & 500 & 0.7 & 10.00 & 0.02 & 1 ( 0 ) & 171.29 ( 6.32 ) & 1.12 ( 0.09 ) & 176.17 & 0.97 & 1.00 & 171.29 & 1.12\\\\\n", + "\t58 & 100 & 500 & 0.7 & 5.00 & 0.06 & 0.98 ( 0 ) & 68.31 ( 6.57 ) & 0.98 ( 0.09 ) & 73.33 & 0.87 & 0.98 & 68.31 & 0.98\\\\\n", + "\t59 & 500 & 500 & 0.7 & 1.00 & 0.93 & 0.89 ( 0 ) & 0.37 ( 0.12 ) & 0.06 ( 0.02 ) & 6.31 & 0.04 & 0.89 & 0.37 & 0.06\\\\\n", + "\t60 & 1000 & 500 & 0.7 & 0.50 & 0.98 & 0.9 ( 0 ) & 0.13 ( 0.07 ) & 0.01 ( 0.01 ) & 6.12 & 0.01 & 0.90 & 0.13 & 0.01\\\\\n", + "\t61 & 50 & 1000 & 0.7 & 20.00 & 0.01 & 1 ( 0 ) & 275.88 ( 8.89 ) & 1.39 ( 0.09 ) & 280.49 & 0.98 & 1.00 & 275.88 & 1.39\\\\\n", + "\t62 & 100 & 1000 & 0.7 & 10.00 & 0.03 & 1 ( 0 ) & 155.38 ( 7.45 ) & 0.93 ( 0.08 ) & 160.45 & 0.95 & 1.00 & 155.38 & 0.93\\\\\n", + "\t63 & 500 & 1000 & 0.7 & 2.00 & 0.84 & 0.9 ( 0 ) & 1.07 ( 0.26 ) & 0.1 ( 0.03 ) & 6.97 & 0.09 & 0.90 & 1.07 & 0.10\\\\\n", + "\t64 & 1000 & 1000 & 0.7 & 1.00 & 0.95 & 0.9 ( 0 ) & 0.3 ( 0.11 ) & 0.02 ( 0.01 ) & 6.28 & 0.03 & 0.90 & 0.30 & 0.02\\\\\n", + "\t65 & 50 & 50 & 0.9 & 1.00 & 0.13 & 0.97 ( 0 ) & 15.75 ( 1.04 ) & 0.71 ( 0.07 ) & 21.04 & 0.7 & 0.97 & 15.75 & 0.71\\\\\n", + "\t66 & 100 & 50 & 0.9 & 0.50 & 0.44 & 0.93 ( 0 ) & 5.06 ( 0.38 ) & 0.34 ( 0.05 ) & 10.72 & 0.42 & 0.93 & 5.06 & 0.34\\\\\n", + "\t67 & 500 & 50 & 0.9 & 0.10 & 0.98 & 0.91 ( 0 ) & 0.07 ( 0.04 ) & 0.03 ( 0.02 ) & 6.04 & 0.01 & 0.91 & 0.07 & 0.03\\\\\n", + "\t68 & 1000 & 50 & 0.9 & 0.05 & 1.00 & 0.91 ( 0 ) & 0 ( 0 ) & 0 ( 0 ) & 6.00 & 0 & 0.91 & 0.00 & 0.00\\\\\n", + "\t69 & 50 & 100 & 0.9 & 2.00 & 0.06 & 0.99 ( 0 ) & 37.69 ( 2.33 ) & 0.96 ( 0.09 ) & 42.73 & 0.84 & 0.99 & 37.69 & 0.96\\\\\n", + "\t70 & 100 & 100 & 0.9 & 1.00 & 0.26 & 0.94 ( 0 ) & 11.53 ( 1.15 ) & 0.52 ( 0.06 ) & 17.01 & 0.61 & 0.94 & 11.53 & 0.52\\\\\n", + "\t71 & 500 & 100 & 0.9 & 0.20 & 0.96 & 0.91 ( 0 ) & 0.18 ( 0.06 ) & 0.03 ( 0.02 ) & 6.15 & 0.02 & 0.91 & 0.18 & 0.03\\\\\n", + "\t72 & 1000 & 100 & 0.9 & 0.10 & 0.97 & 0.91 ( 0 ) & 0.17 ( 0.09 ) & 0 ( 0 ) & 6.17 & 0.02 & 0.91 & 0.17 & 0.00\\\\\n", + "\t73 & 50 & 500 & 0.9 & 10.00 & 0.01 & 1 ( 0 ) & 189.13 ( 6.24 ) & 0.91 ( 0.1 ) & 194.22 & 0.97 & 1.00 & 189.13 & 0.91\\\\\n", + "\t74 & 100 & 500 & 0.9 & 5.00 & 0.05 & 0.99 ( 0 ) & 88.92 ( 5.92 ) & 0.68 ( 0.07 ) & 94.24 & 0.92 & 0.99 & 88.92 & 0.68\\\\\n", + "\t75 & 500 & 500 & 0.9 & 1.00 & 0.85 & 0.91 ( 0 ) & 1.08 ( 0.33 ) & 0.01 ( 0.01 ) & 7.07 & 0.08 & 0.91 & 1.08 & 0.01\\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.50 & 0.98 & 0.91 ( 0 ) & 0.14 ( 0.07 ) & 0 ( 0 ) & 6.14 & 0.02 & 0.91 & 0.14 & 0.00\\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.00 & 0.01 & 1 ( 0 ) & 330.51 ( 8.59 ) & 0.97 ( 0.08 ) & 335.54 & 0.98 & 1.00 & 330.51 & 0.97\\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.00 & 0.02 & 1 ( 0 ) & 217.74 ( 6.88 ) & 0.67 ( 0.07 ) & 223.07 & 0.97 & 1.00 & 217.74 & 0.67\\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.00 & 0.76 & 0.91 ( 0 ) & 1.91 ( 0.48 ) & 0.02 ( 0.01 ) & 7.89 & 0.12 & 0.91 & 1.91 & 0.02\\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.00 & 0.95 & 0.91 ( 0 ) & 0.27 ( 0.11 ) & 0.02 ( 0.01 ) & 6.25 & 0.03 & 0.91 & 0.27 & 0.02\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 80 × 13\n", + "\n", + "| | N <dbl> | P <dbl> | Corr <fct> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <fct> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1.00 | 0.02 | 0.58 ( 0.01 ) | 1.68 ( 0.53 ) | 5.42 ( 0.1 ) | 2.26 | 0.58 | 0.58 | 1.68 | 5.42 |\n", + "| 2 | 100 | 50 | 0.1 | 0.50 | 0.06 | 0.51 ( 0 ) | 0.08 ( 0.04 ) | 5.65 ( 0.08 ) | 0.43 | 0.18 | 0.51 | 0.08 | 5.65 |\n", + "| 3 | 500 | 50 | 0.1 | 0.10 | NaN | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 0.50 | 0.00 | 6.00 |\n", + "| 4 | 1000 | 50 | 0.1 | 0.05 | NaN | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 0.50 | 0.00 | 6.00 |\n", + "| 5 | 50 | 100 | 0.1 | 2.00 | 0.04 | 0.61 ( 0.01 ) | 3.43 ( 0.63 ) | 5.23 ( 0.1 ) | 4.20 | 0.71 | 0.61 | 3.43 | 5.23 |\n", + "| 6 | 100 | 100 | 0.1 | 1.00 | 0.03 | 0.51 ( 0 ) | 0.31 ( 0.1 ) | 5.8 ( 0.05 ) | 0.51 | 0.53 | 0.51 | 0.31 | 5.80 |\n", + "| 7 | 500 | 100 | 0.1 | 0.20 | NaN | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 0.50 | 0.00 | 6.00 |\n", + "| 8 | 1000 | 100 | 0.1 | 0.10 | NaN | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 0.50 | 0.00 | 6.00 |\n", + "| 9 | 50 | 500 | 0.1 | 10.00 | 0.00 | 0.73 ( 0.01 ) | 29.62 ( 7.94 ) | 5.17 ( 0.13 ) | 30.45 | 0.9 | 0.73 | 29.62 | 5.17 |\n", + "| 10 | 100 | 500 | 0.1 | 5.00 | 0.04 | 0.53 ( 0.01 ) | 0.53 ( 0.1 ) | 5.63 ( 0.08 ) | 0.90 | 0.57 | 0.53 | 0.53 | 5.63 |\n", + "| 11 | 500 | 500 | 0.1 | 1.00 | NaN | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 0.50 | 0.00 | 6.00 |\n", + "| 12 | 1000 | 500 | 0.1 | 0.50 | NaN | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 0.50 | 0.00 | 6.00 |\n", + "| 13 | 50 | 1000 | 0.1 | 20.00 | 0.01 | 0.83 ( 0.01 ) | 17.45 ( 2.89 ) | 5.37 ( 0.1 ) | 18.08 | 0.94 | 0.83 | 17.45 | 5.37 |\n", + "| 14 | 100 | 1000 | 0.1 | 10.00 | 0.03 | 0.56 ( 0.01 ) | 1.27 ( 0.25 ) | 5.59 ( 0.08 ) | 1.68 | 0.73 | 0.56 | 1.27 | 5.59 |\n", + "| 15 | 500 | 1000 | 0.1 | 2.00 | 0.00 | 0.5 ( 0 ) | 0 ( 0 ) | 5.98 ( 0.02 ) | 0.02 | 0 | 0.50 | 0.00 | 5.98 |\n", + "| 16 | 1000 | 1000 | 0.1 | 1.00 | NaN | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NaN | 0.50 | 0.00 | 6.00 |\n", + "| 17 | 50 | 50 | 0.3 | 1.00 | 0.14 | 0.86 ( 0.01 ) | 9.81 ( 1.05 ) | 1.78 ( 0.11 ) | 14.03 | 0.6 | 0.86 | 9.81 | 1.78 |\n", + "| 18 | 100 | 50 | 0.3 | 0.50 | 0.37 | 0.83 ( 0.01 ) | 3.64 ( 0.75 ) | 1.7 ( 0.09 ) | 7.94 | 0.27 | 0.83 | 3.64 | 1.70 |\n", + "| 19 | 500 | 50 | 0.3 | 0.10 | 0.81 | 0.81 ( 0 ) | 0.02 ( 0.01 ) | 1.75 ( 0.09 ) | 4.27 | 0 | 0.81 | 0.02 | 1.75 |\n", + "| 20 | 1000 | 50 | 0.3 | 0.05 | 0.81 | 0.8 ( 0 ) | 0.06 ( 0.05 ) | 1.7 ( 0.09 ) | 4.36 | 0.01 | 0.80 | 0.06 | 1.70 |\n", + "| 21 | 50 | 100 | 0.3 | 2.00 | 0.10 | 0.9 ( 0 ) | 16.32 ( 1.58 ) | 2.2 ( 0.11 ) | 20.12 | 0.74 | 0.90 | 16.32 | 2.20 |\n", + "| 22 | 100 | 100 | 0.3 | 1.00 | 0.31 | 0.84 ( 0 ) | 5.71 ( 1.02 ) | 1.72 ( 0.1 ) | 9.99 | 0.41 | 0.84 | 5.71 | 1.72 |\n", + "| 23 | 500 | 100 | 0.3 | 0.20 | 0.80 | 0.81 ( 0 ) | 0.12 ( 0.06 ) | 1.7 ( 0.09 ) | 4.42 | 0.01 | 0.81 | 0.12 | 1.70 |\n", + "| 24 | 1000 | 100 | 0.3 | 0.10 | 0.74 | 0.8 ( 0 ) | 0.49 ( 0.26 ) | 2.05 ( 0.08 ) | 4.44 | 0.04 | 0.80 | 0.49 | 2.05 |\n", + "| 25 | 50 | 500 | 0.3 | 10.00 | 0.02 | 1 ( 0 ) | 105.94 ( 7.57 ) | 2.04 ( 0.11 ) | 109.90 | 0.95 | 1.00 | 105.94 | 2.04 |\n", + "| 26 | 100 | 500 | 0.3 | 5.00 | 0.12 | 0.88 ( 0.01 ) | 23.82 ( 3.36 ) | 1.9 ( 0.09 ) | 27.92 | 0.75 | 0.88 | 23.82 | 1.90 |\n", + "| 27 | 500 | 500 | 0.3 | 1.00 | 0.79 | 0.8 ( 0 ) | 0.24 ( 0.08 ) | 1.86 ( 0.09 ) | 4.38 | 0.03 | 0.80 | 0.24 | 1.86 |\n", + "| 28 | 1000 | 500 | 0.3 | 0.50 | 0.73 | 0.8 ( 0 ) | 0.63 ( 0.15 ) | 1.85 ( 0.09 ) | 4.78 | 0.08 | 0.80 | 0.63 | 1.85 |\n", + "| 29 | 50 | 1000 | 0.3 | 20.00 | 0.02 | 1 ( 0 ) | 154.21 ( 5.09 ) | 2.09 ( 0.1 ) | 158.12 | 0.97 | 1.00 | 154.21 | 2.09 |\n", + "| 30 | 100 | 1000 | 0.3 | 10.00 | 0.07 | 0.91 ( 0 ) | 36.7 ( 6.19 ) | 2.26 ( 0.1 ) | 40.44 | 0.84 | 0.91 | 36.70 | 2.26 |\n", + "| ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ | ⋮ |\n", + "| 51 | 500 | 50 | 0.7 | 0.10 | 0.96 | 0.9 ( 0 ) | 0.17 ( 0.08 ) | 0.04 ( 0.02 ) | 6.13 | 0.02 | 0.90 | 0.17 | 0.04 |\n", + "| 52 | 1000 | 50 | 0.7 | 0.05 | 0.98 | 0.89 ( 0 ) | 0.1 ( 0.06 ) | 0 ( 0 ) | 6.10 | 0.01 | 0.89 | 0.10 | 0.00 |\n", + "| 53 | 50 | 100 | 0.7 | 2.00 | 0.06 | 0.99 ( 0 ) | 35.59 ( 2.41 ) | 0.94 ( 0.09 ) | 40.65 | 0.83 | 0.99 | 35.59 | 0.94 |\n", + "| 54 | 100 | 100 | 0.7 | 1.00 | 0.26 | 0.92 ( 0 ) | 11.64 ( 1.38 ) | 0.53 ( 0.06 ) | 17.11 | 0.57 | 0.92 | 11.64 | 0.53 |\n", + "| 55 | 500 | 100 | 0.7 | 0.20 | 0.97 | 0.9 ( 0 ) | 0.15 ( 0.07 ) | 0.05 ( 0.02 ) | 6.10 | 0.02 | 0.90 | 0.15 | 0.05 |\n", + "| 56 | 1000 | 100 | 0.7 | 0.10 | 0.93 | 0.9 ( 0 ) | 0.41 ( 0.14 ) | 0.03 ( 0.02 ) | 6.38 | 0.04 | 0.90 | 0.41 | 0.03 |\n", + "| 57 | 50 | 500 | 0.7 | 10.00 | 0.02 | 1 ( 0 ) | 171.29 ( 6.32 ) | 1.12 ( 0.09 ) | 176.17 | 0.97 | 1.00 | 171.29 | 1.12 |\n", + "| 58 | 100 | 500 | 0.7 | 5.00 | 0.06 | 0.98 ( 0 ) | 68.31 ( 6.57 ) | 0.98 ( 0.09 ) | 73.33 | 0.87 | 0.98 | 68.31 | 0.98 |\n", + "| 59 | 500 | 500 | 0.7 | 1.00 | 0.93 | 0.89 ( 0 ) | 0.37 ( 0.12 ) | 0.06 ( 0.02 ) | 6.31 | 0.04 | 0.89 | 0.37 | 0.06 |\n", + "| 60 | 1000 | 500 | 0.7 | 0.50 | 0.98 | 0.9 ( 0 ) | 0.13 ( 0.07 ) | 0.01 ( 0.01 ) | 6.12 | 0.01 | 0.90 | 0.13 | 0.01 |\n", + "| 61 | 50 | 1000 | 0.7 | 20.00 | 0.01 | 1 ( 0 ) | 275.88 ( 8.89 ) | 1.39 ( 0.09 ) | 280.49 | 0.98 | 1.00 | 275.88 | 1.39 |\n", + "| 62 | 100 | 1000 | 0.7 | 10.00 | 0.03 | 1 ( 0 ) | 155.38 ( 7.45 ) | 0.93 ( 0.08 ) | 160.45 | 0.95 | 1.00 | 155.38 | 0.93 |\n", + "| 63 | 500 | 1000 | 0.7 | 2.00 | 0.84 | 0.9 ( 0 ) | 1.07 ( 0.26 ) | 0.1 ( 0.03 ) | 6.97 | 0.09 | 0.90 | 1.07 | 0.10 |\n", + "| 64 | 1000 | 1000 | 0.7 | 1.00 | 0.95 | 0.9 ( 0 ) | 0.3 ( 0.11 ) | 0.02 ( 0.01 ) | 6.28 | 0.03 | 0.90 | 0.30 | 0.02 |\n", + "| 65 | 50 | 50 | 0.9 | 1.00 | 0.13 | 0.97 ( 0 ) | 15.75 ( 1.04 ) | 0.71 ( 0.07 ) | 21.04 | 0.7 | 0.97 | 15.75 | 0.71 |\n", + "| 66 | 100 | 50 | 0.9 | 0.50 | 0.44 | 0.93 ( 0 ) | 5.06 ( 0.38 ) | 0.34 ( 0.05 ) | 10.72 | 0.42 | 0.93 | 5.06 | 0.34 |\n", + "| 67 | 500 | 50 | 0.9 | 0.10 | 0.98 | 0.91 ( 0 ) | 0.07 ( 0.04 ) | 0.03 ( 0.02 ) | 6.04 | 0.01 | 0.91 | 0.07 | 0.03 |\n", + "| 68 | 1000 | 50 | 0.9 | 0.05 | 1.00 | 0.91 ( 0 ) | 0 ( 0 ) | 0 ( 0 ) | 6.00 | 0 | 0.91 | 0.00 | 0.00 |\n", + "| 69 | 50 | 100 | 0.9 | 2.00 | 0.06 | 0.99 ( 0 ) | 37.69 ( 2.33 ) | 0.96 ( 0.09 ) | 42.73 | 0.84 | 0.99 | 37.69 | 0.96 |\n", + "| 70 | 100 | 100 | 0.9 | 1.00 | 0.26 | 0.94 ( 0 ) | 11.53 ( 1.15 ) | 0.52 ( 0.06 ) | 17.01 | 0.61 | 0.94 | 11.53 | 0.52 |\n", + "| 71 | 500 | 100 | 0.9 | 0.20 | 0.96 | 0.91 ( 0 ) | 0.18 ( 0.06 ) | 0.03 ( 0.02 ) | 6.15 | 0.02 | 0.91 | 0.18 | 0.03 |\n", + "| 72 | 1000 | 100 | 0.9 | 0.10 | 0.97 | 0.91 ( 0 ) | 0.17 ( 0.09 ) | 0 ( 0 ) | 6.17 | 0.02 | 0.91 | 0.17 | 0.00 |\n", + "| 73 | 50 | 500 | 0.9 | 10.00 | 0.01 | 1 ( 0 ) | 189.13 ( 6.24 ) | 0.91 ( 0.1 ) | 194.22 | 0.97 | 1.00 | 189.13 | 0.91 |\n", + "| 74 | 100 | 500 | 0.9 | 5.00 | 0.05 | 0.99 ( 0 ) | 88.92 ( 5.92 ) | 0.68 ( 0.07 ) | 94.24 | 0.92 | 0.99 | 88.92 | 0.68 |\n", + "| 75 | 500 | 500 | 0.9 | 1.00 | 0.85 | 0.91 ( 0 ) | 1.08 ( 0.33 ) | 0.01 ( 0.01 ) | 7.07 | 0.08 | 0.91 | 1.08 | 0.01 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.50 | 0.98 | 0.91 ( 0 ) | 0.14 ( 0.07 ) | 0 ( 0 ) | 6.14 | 0.02 | 0.91 | 0.14 | 0.00 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.00 | 0.01 | 1 ( 0 ) | 330.51 ( 8.59 ) | 0.97 ( 0.08 ) | 335.54 | 0.98 | 1.00 | 330.51 | 0.97 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.00 | 0.02 | 1 ( 0 ) | 217.74 ( 6.88 ) | 0.67 ( 0.07 ) | 223.07 | 0.97 | 1.00 | 217.74 | 0.67 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.00 | 0.76 | 0.91 ( 0 ) | 1.91 ( 0.48 ) | 0.02 ( 0.01 ) | 7.89 | 0.12 | 0.91 | 1.91 | 0.02 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.00 | 0.95 | 0.91 ( 0 ) | 0.27 ( 0.11 ) | 0.02 ( 0.01 ) | 6.25 | 0.03 | 0.91 | 0.27 | 0.02 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "1 50 50 0.1 1.00 0.02 0.58 ( 0.01 ) 1.68 ( 0.53 ) 5.42 ( 0.1 ) \n", + "2 100 50 0.1 0.50 0.06 0.51 ( 0 ) 0.08 ( 0.04 ) 5.65 ( 0.08 )\n", + "3 500 50 0.1 0.10 NaN 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + "4 1000 50 0.1 0.05 NaN 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + "5 50 100 0.1 2.00 0.04 0.61 ( 0.01 ) 3.43 ( 0.63 ) 5.23 ( 0.1 ) \n", + "6 100 100 0.1 1.00 0.03 0.51 ( 0 ) 0.31 ( 0.1 ) 5.8 ( 0.05 ) \n", + "7 500 100 0.1 0.20 NaN 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + "8 1000 100 0.1 0.10 NaN 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + "9 50 500 0.1 10.00 0.00 0.73 ( 0.01 ) 29.62 ( 7.94 ) 5.17 ( 0.13 )\n", + "10 100 500 0.1 5.00 0.04 0.53 ( 0.01 ) 0.53 ( 0.1 ) 5.63 ( 0.08 )\n", + "11 500 500 0.1 1.00 NaN 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + "12 1000 500 0.1 0.50 NaN 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + "13 50 1000 0.1 20.00 0.01 0.83 ( 0.01 ) 17.45 ( 2.89 ) 5.37 ( 0.1 ) \n", + "14 100 1000 0.1 10.00 0.03 0.56 ( 0.01 ) 1.27 ( 0.25 ) 5.59 ( 0.08 )\n", + "15 500 1000 0.1 2.00 0.00 0.5 ( 0 ) 0 ( 0 ) 5.98 ( 0.02 )\n", + "16 1000 1000 0.1 1.00 NaN 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + "17 50 50 0.3 1.00 0.14 0.86 ( 0.01 ) 9.81 ( 1.05 ) 1.78 ( 0.11 )\n", + "18 100 50 0.3 0.50 0.37 0.83 ( 0.01 ) 3.64 ( 0.75 ) 1.7 ( 0.09 ) \n", + "19 500 50 0.3 0.10 0.81 0.81 ( 0 ) 0.02 ( 0.01 ) 1.75 ( 0.09 )\n", + "20 1000 50 0.3 0.05 0.81 0.8 ( 0 ) 0.06 ( 0.05 ) 1.7 ( 0.09 ) \n", + "21 50 100 0.3 2.00 0.10 0.9 ( 0 ) 16.32 ( 1.58 ) 2.2 ( 0.11 ) \n", + "22 100 100 0.3 1.00 0.31 0.84 ( 0 ) 5.71 ( 1.02 ) 1.72 ( 0.1 ) \n", + "23 500 100 0.3 0.20 0.80 0.81 ( 0 ) 0.12 ( 0.06 ) 1.7 ( 0.09 ) \n", + "24 1000 100 0.3 0.10 0.74 0.8 ( 0 ) 0.49 ( 0.26 ) 2.05 ( 0.08 )\n", + "25 50 500 0.3 10.00 0.02 1 ( 0 ) 105.94 ( 7.57 ) 2.04 ( 0.11 )\n", + "26 100 500 0.3 5.00 0.12 0.88 ( 0.01 ) 23.82 ( 3.36 ) 1.9 ( 0.09 ) \n", + "27 500 500 0.3 1.00 0.79 0.8 ( 0 ) 0.24 ( 0.08 ) 1.86 ( 0.09 )\n", + "28 1000 500 0.3 0.50 0.73 0.8 ( 0 ) 0.63 ( 0.15 ) 1.85 ( 0.09 )\n", + "29 50 1000 0.3 20.00 0.02 1 ( 0 ) 154.21 ( 5.09 ) 2.09 ( 0.1 ) \n", + "30 100 1000 0.3 10.00 0.07 0.91 ( 0 ) 36.7 ( 6.19 ) 2.26 ( 0.1 ) \n", + "⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ \n", + "51 500 50 0.7 0.10 0.96 0.9 ( 0 ) 0.17 ( 0.08 ) 0.04 ( 0.02 )\n", + "52 1000 50 0.7 0.05 0.98 0.89 ( 0 ) 0.1 ( 0.06 ) 0 ( 0 ) \n", + "53 50 100 0.7 2.00 0.06 0.99 ( 0 ) 35.59 ( 2.41 ) 0.94 ( 0.09 )\n", + "54 100 100 0.7 1.00 0.26 0.92 ( 0 ) 11.64 ( 1.38 ) 0.53 ( 0.06 )\n", + "55 500 100 0.7 0.20 0.97 0.9 ( 0 ) 0.15 ( 0.07 ) 0.05 ( 0.02 )\n", + "56 1000 100 0.7 0.10 0.93 0.9 ( 0 ) 0.41 ( 0.14 ) 0.03 ( 0.02 )\n", + "57 50 500 0.7 10.00 0.02 1 ( 0 ) 171.29 ( 6.32 ) 1.12 ( 0.09 )\n", + "58 100 500 0.7 5.00 0.06 0.98 ( 0 ) 68.31 ( 6.57 ) 0.98 ( 0.09 )\n", + "59 500 500 0.7 1.00 0.93 0.89 ( 0 ) 0.37 ( 0.12 ) 0.06 ( 0.02 )\n", + "60 1000 500 0.7 0.50 0.98 0.9 ( 0 ) 0.13 ( 0.07 ) 0.01 ( 0.01 )\n", + "61 50 1000 0.7 20.00 0.01 1 ( 0 ) 275.88 ( 8.89 ) 1.39 ( 0.09 )\n", + "62 100 1000 0.7 10.00 0.03 1 ( 0 ) 155.38 ( 7.45 ) 0.93 ( 0.08 )\n", + "63 500 1000 0.7 2.00 0.84 0.9 ( 0 ) 1.07 ( 0.26 ) 0.1 ( 0.03 ) \n", + "64 1000 1000 0.7 1.00 0.95 0.9 ( 0 ) 0.3 ( 0.11 ) 0.02 ( 0.01 )\n", + "65 50 50 0.9 1.00 0.13 0.97 ( 0 ) 15.75 ( 1.04 ) 0.71 ( 0.07 )\n", + "66 100 50 0.9 0.50 0.44 0.93 ( 0 ) 5.06 ( 0.38 ) 0.34 ( 0.05 )\n", + "67 500 50 0.9 0.10 0.98 0.91 ( 0 ) 0.07 ( 0.04 ) 0.03 ( 0.02 )\n", + "68 1000 50 0.9 0.05 1.00 0.91 ( 0 ) 0 ( 0 ) 0 ( 0 ) \n", + "69 50 100 0.9 2.00 0.06 0.99 ( 0 ) 37.69 ( 2.33 ) 0.96 ( 0.09 )\n", + "70 100 100 0.9 1.00 0.26 0.94 ( 0 ) 11.53 ( 1.15 ) 0.52 ( 0.06 )\n", + "71 500 100 0.9 0.20 0.96 0.91 ( 0 ) 0.18 ( 0.06 ) 0.03 ( 0.02 )\n", + "72 1000 100 0.9 0.10 0.97 0.91 ( 0 ) 0.17 ( 0.09 ) 0 ( 0 ) \n", + "73 50 500 0.9 10.00 0.01 1 ( 0 ) 189.13 ( 6.24 ) 0.91 ( 0.1 ) \n", + "74 100 500 0.9 5.00 0.05 0.99 ( 0 ) 88.92 ( 5.92 ) 0.68 ( 0.07 )\n", + "75 500 500 0.9 1.00 0.85 0.91 ( 0 ) 1.08 ( 0.33 ) 0.01 ( 0.01 )\n", + "76 1000 500 0.9 0.50 0.98 0.91 ( 0 ) 0.14 ( 0.07 ) 0 ( 0 ) \n", + "77 50 1000 0.9 20.00 0.01 1 ( 0 ) 330.51 ( 8.59 ) 0.97 ( 0.08 )\n", + "78 100 1000 0.9 10.00 0.02 1 ( 0 ) 217.74 ( 6.88 ) 0.67 ( 0.07 )\n", + "79 500 1000 0.9 2.00 0.76 0.91 ( 0 ) 1.91 ( 0.48 ) 0.02 ( 0.01 )\n", + "80 1000 1000 0.9 1.00 0.95 0.91 ( 0 ) 0.27 ( 0.11 ) 0.02 ( 0.01 )\n", + " num_select FDR ROC_mean FP_mean FN_mean\n", + "1 2.26 0.58 0.58 1.68 5.42 \n", + "2 0.43 0.18 0.51 0.08 5.65 \n", + "3 0.00 NaN 0.50 0.00 6.00 \n", + "4 0.00 NaN 0.50 0.00 6.00 \n", + "5 4.20 0.71 0.61 3.43 5.23 \n", + "6 0.51 0.53 0.51 0.31 5.80 \n", + "7 0.00 NaN 0.50 0.00 6.00 \n", + "8 0.00 NaN 0.50 0.00 6.00 \n", + "9 30.45 0.9 0.73 29.62 5.17 \n", + "10 0.90 0.57 0.53 0.53 5.63 \n", + "11 0.00 NaN 0.50 0.00 6.00 \n", + "12 0.00 NaN 0.50 0.00 6.00 \n", + "13 18.08 0.94 0.83 17.45 5.37 \n", + "14 1.68 0.73 0.56 1.27 5.59 \n", + "15 0.02 0 0.50 0.00 5.98 \n", + "16 0.00 NaN 0.50 0.00 6.00 \n", + "17 14.03 0.6 0.86 9.81 1.78 \n", + "18 7.94 0.27 0.83 3.64 1.70 \n", + "19 4.27 0 0.81 0.02 1.75 \n", + "20 4.36 0.01 0.80 0.06 1.70 \n", + "21 20.12 0.74 0.90 16.32 2.20 \n", + "22 9.99 0.41 0.84 5.71 1.72 \n", + "23 4.42 0.01 0.81 0.12 1.70 \n", + "24 4.44 0.04 0.80 0.49 2.05 \n", + "25 109.90 0.95 1.00 105.94 2.04 \n", + "26 27.92 0.75 0.88 23.82 1.90 \n", + "27 4.38 0.03 0.80 0.24 1.86 \n", + "28 4.78 0.08 0.80 0.63 1.85 \n", + "29 158.12 0.97 1.00 154.21 2.09 \n", + "30 40.44 0.84 0.91 36.70 2.26 \n", + "⋮ ⋮ ⋮ ⋮ ⋮ ⋮ \n", + "51 6.13 0.02 0.90 0.17 0.04 \n", + "52 6.10 0.01 0.89 0.10 0.00 \n", + "53 40.65 0.83 0.99 35.59 0.94 \n", + "54 17.11 0.57 0.92 11.64 0.53 \n", + "55 6.10 0.02 0.90 0.15 0.05 \n", + "56 6.38 0.04 0.90 0.41 0.03 \n", + "57 176.17 0.97 1.00 171.29 1.12 \n", + "58 73.33 0.87 0.98 68.31 0.98 \n", + "59 6.31 0.04 0.89 0.37 0.06 \n", + "60 6.12 0.01 0.90 0.13 0.01 \n", + "61 280.49 0.98 1.00 275.88 1.39 \n", + "62 160.45 0.95 1.00 155.38 0.93 \n", + "63 6.97 0.09 0.90 1.07 0.10 \n", + "64 6.28 0.03 0.90 0.30 0.02 \n", + "65 21.04 0.7 0.97 15.75 0.71 \n", + "66 10.72 0.42 0.93 5.06 0.34 \n", + "67 6.04 0.01 0.91 0.07 0.03 \n", + "68 6.00 0 0.91 0.00 0.00 \n", + "69 42.73 0.84 0.99 37.69 0.96 \n", + "70 17.01 0.61 0.94 11.53 0.52 \n", + "71 6.15 0.02 0.91 0.18 0.03 \n", + "72 6.17 0.02 0.91 0.17 0.00 \n", + "73 194.22 0.97 1.00 189.13 0.91 \n", + "74 94.24 0.92 0.99 88.92 0.68 \n", + "75 7.07 0.08 0.91 1.08 0.01 \n", + "76 6.14 0.02 0.91 0.14 0.00 \n", + "77 335.54 0.98 1.00 330.51 0.97 \n", + "78 223.07 0.97 1.00 217.74 0.67 \n", + "79 7.89 0.12 0.91 1.91 0.02 \n", + "80 6.25 0.03 0.91 0.27 0.02 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_block\n", + "\n", + "## export\n", + "write.table(result.table_block, '../results_summary_bin/sim_block_GenCompLasso_binary.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_bin/3_sim_binary_summary_update.ipynb b/simulations/notebooks_sim_bin/3_sim_binary_summary_update.ipynb new file mode 100644 index 0000000..52874ac --- /dev/null +++ b/simulations/notebooks_sim_bin/3_sim_binary_summary_update.ipynb @@ -0,0 +1,1052 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize method comparison results across 4 feature selection methods in different simulation scenarios" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize Independent results" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "ind_lasso = read.csv('../results_summary_bin/sim_ind_lasso_binary.txt', sep='\\t')\n", + "ind_elnet = read.csv('../results_summary_bin/sim_ind_Elnet_binary.txt', sep='\\t')\n", + "ind_rf = read.csv('../results_summary_bin/sim_ind_RF_binary.txt', sep='\\t')\n", + "ind_compLasso = read.csv('../results_summary_bin/sim_ind_GencompLasso_binary.txt', sep='\\t')\n", + "\n", + "ind_lasso$method = rep('lasso', dim(ind_lasso)[1])\n", + "ind_elnet$method = rep('elnet', dim(ind_elnet)[1])\n", + "ind_rf$method = rep('rf', dim(ind_rf)[1])\n", + "ind_compLasso$method = rep('compLasso', dim(ind_compLasso)[1])" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "
  1. 16
  2. 14
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 16\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 16\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 16 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "
  1. 16
  2. 14
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 16\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 16\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 16 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "
  1. 16
  2. 14
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 16\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 16\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 16 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "
  1. 16
  2. 14
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 16\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 16\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 16 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "dim(ind_lasso)\n", + "dim(ind_elnet)\n", + "dim(ind_rf)\n", + "dim(ind_compLasso)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "
  1. 64
  2. 14
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 64\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 64\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 64 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ind = rbind(ind_lasso, ind_elnet)\n", + "ind = rbind(ind, ind_rf)\n", + "ind = rbind(ind, ind_compLasso)\n", + "dim(ind)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 4 × 14
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_meanmethod
<int><int><int><dbl><dbl><fct><fct><fct><dbl><dbl><dbl><dbl><dbl><chr>
3350 500 1NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
3750 1000 2NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
4150 500010NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
45501000020NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
\n" + ], + "text/latex": [ + "A data.frame: 4 × 14\n", + "\\begin{tabular}{r|llllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean & method\\\\\n", + " & & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t33 & 50 & 50 & 0 & 1 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t37 & 50 & 100 & 0 & 2 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t41 & 50 & 500 & 0 & 10 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t45 & 50 & 1000 & 0 & 20 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 4 × 14\n", + "\n", + "| | N <int> | P <int> | Corr <int> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <dbl> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> | method <chr> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 33 | 50 | 50 | 0 | 1 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 37 | 50 | 100 | 0 | 2 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 41 | 50 | 500 | 0 | 10 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 45 | 50 | 1000 | 0 | 20 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select FDR ROC_mean\n", + "33 50 50 0 1 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "37 50 100 0 2 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "41 50 500 0 10 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "45 50 1000 0 20 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + " FP_mean FN_mean method\n", + "33 1 6 rf \n", + "37 1 6 rf \n", + "41 1 6 rf \n", + "45 1 6 rf " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ind[ind$num_select == 0, ]" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "# fix false positives: when nothing was selected, then fp should be zero\n", + "# fp is now 1 due to length(setdiff(0/NA)) = 1 when actually should be 0 (in cv_sim_apply.R)\n", + "ind$FP_mean[ind$num_select ==0] = 0\n", + "write.table(ind, '../results_summary_bin/table_ind_binary_all.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize Toeplitz results" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "toe_lasso = read.csv('../results_summary_bin/sim_toe_lasso_binary.txt', sep='\\t')\n", + "toe_elnet = read.csv('../results_summary_bin/sim_toe_Elnet_binary.txt', sep='\\t')\n", + "toe_rf = read.csv('../results_summary_bin/sim_toe_RF_binary.txt', sep='\\t')\n", + "toe_compLasso = read.csv('../results_summary_bin/sim_toe_GencompLasso_binary.txt', sep='\\t')\n", + "\n", + "toe_lasso$method = rep('lasso', dim(toe_lasso)[1])\n", + "toe_elnet$method = rep('elnet', dim(toe_elnet)[1])\n", + "toe_rf$method = rep('rf', dim(toe_rf)[1])\n", + "toe_compLasso$method = rep('compLasso', dim(toe_compLasso)[1])" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "
  1. 80
  2. 14
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 80\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 80\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 80 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "
  1. 80
  2. 14
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 80\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 80\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 80 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "
  1. 80
  2. 14
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 80\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 80\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 80 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "
  1. 80
  2. 14
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 80\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 80\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 80 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "dim(toe_lasso)\n", + "dim(toe_elnet)\n", + "dim(toe_rf)\n", + "dim(toe_compLasso)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "
  1. 320
  2. 14
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 320\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 320\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 320 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "toe = rbind(toe_lasso, toe_elnet)\n", + "toe = rbind(toe, toe_rf)\n", + "toe = rbind(toe, toe_compLasso)\n", + "dim(toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 20 × 14
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_meanmethod
<int><int><dbl><dbl><dbl><fct><fct><fct><dbl><dbl><dbl><dbl><dbl><chr>
16150 500.1 1NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
16550 1000.1 2NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
16950 5000.110NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
1735010000.120NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
17750 500.3 1NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
18150 1000.3 2NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
18550 5000.310NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
1895010000.320NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
19350 500.5 1NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
19750 1000.5 2NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
20150 5000.510NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
2055010000.520NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
20950 500.7 1NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
21350 1000.7 2NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
21750 5000.710NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
2215010000.720NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
22550 500.9 1NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
22950 1000.9 2NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
23350 5000.910NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
2375010000.920NA1 ( 0 )1 ( 0 )6 ( 0 )0NaN116rf
\n" + ], + "text/latex": [ + "A data.frame: 20 × 14\n", + "\\begin{tabular}{r|llllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean & method\\\\\n", + " & & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t161 & 50 & 50 & 0.1 & 1 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t165 & 50 & 100 & 0.1 & 2 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t169 & 50 & 500 & 0.1 & 10 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t173 & 50 & 1000 & 0.1 & 20 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t177 & 50 & 50 & 0.3 & 1 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t181 & 50 & 100 & 0.3 & 2 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t185 & 50 & 500 & 0.3 & 10 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t189 & 50 & 1000 & 0.3 & 20 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t193 & 50 & 50 & 0.5 & 1 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t197 & 50 & 100 & 0.5 & 2 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t201 & 50 & 500 & 0.5 & 10 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t205 & 50 & 1000 & 0.5 & 20 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t209 & 50 & 50 & 0.7 & 1 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t213 & 50 & 100 & 0.7 & 2 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t217 & 50 & 500 & 0.7 & 10 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t221 & 50 & 1000 & 0.7 & 20 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t225 & 50 & 50 & 0.9 & 1 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t229 & 50 & 100 & 0.9 & 2 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t233 & 50 & 500 & 0.9 & 10 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\t237 & 50 & 1000 & 0.9 & 20 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1 & 1 & 6 & rf\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 20 × 14\n", + "\n", + "| | N <int> | P <int> | Corr <dbl> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <dbl> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> | method <chr> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 161 | 50 | 50 | 0.1 | 1 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 165 | 50 | 100 | 0.1 | 2 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 169 | 50 | 500 | 0.1 | 10 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 173 | 50 | 1000 | 0.1 | 20 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 177 | 50 | 50 | 0.3 | 1 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 181 | 50 | 100 | 0.3 | 2 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 185 | 50 | 500 | 0.3 | 10 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 189 | 50 | 1000 | 0.3 | 20 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 193 | 50 | 50 | 0.5 | 1 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 197 | 50 | 100 | 0.5 | 2 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 201 | 50 | 500 | 0.5 | 10 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 205 | 50 | 1000 | 0.5 | 20 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 209 | 50 | 50 | 0.7 | 1 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 213 | 50 | 100 | 0.7 | 2 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 217 | 50 | 500 | 0.7 | 10 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 221 | 50 | 1000 | 0.7 | 20 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 225 | 50 | 50 | 0.9 | 1 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 229 | 50 | 100 | 0.9 | 2 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 233 | 50 | 500 | 0.9 | 10 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "| 237 | 50 | 1000 | 0.9 | 20 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1 | 1 | 6 | rf |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select FDR ROC_mean\n", + "161 50 50 0.1 1 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "165 50 100 0.1 2 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "169 50 500 0.1 10 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "173 50 1000 0.1 20 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "177 50 50 0.3 1 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "181 50 100 0.3 2 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "185 50 500 0.3 10 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "189 50 1000 0.3 20 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "193 50 50 0.5 1 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "197 50 100 0.5 2 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "201 50 500 0.5 10 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "205 50 1000 0.5 20 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "209 50 50 0.7 1 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "213 50 100 0.7 2 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "217 50 500 0.7 10 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "221 50 1000 0.7 20 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "225 50 50 0.9 1 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "229 50 100 0.9 2 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "233 50 500 0.9 10 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + "237 50 1000 0.9 20 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1 \n", + " FP_mean FN_mean method\n", + "161 1 6 rf \n", + "165 1 6 rf \n", + "169 1 6 rf \n", + "173 1 6 rf \n", + "177 1 6 rf \n", + "181 1 6 rf \n", + "185 1 6 rf \n", + "189 1 6 rf \n", + "193 1 6 rf \n", + "197 1 6 rf \n", + "201 1 6 rf \n", + "205 1 6 rf \n", + "209 1 6 rf \n", + "213 1 6 rf \n", + "217 1 6 rf \n", + "221 1 6 rf \n", + "225 1 6 rf \n", + "229 1 6 rf \n", + "233 1 6 rf \n", + "237 1 6 rf " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "toe[toe$num_select == 0, ]" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# fix false positives: when nothing was selected, then fp should be zero\n", + "# fp is now 1 due to length(setdiff(0/NA)) = 1 when actually should be 0 (in cv_sim_apply.R)\n", + "toe$FP_mean[toe$num_select ==0] = 0\n", + "write.table(toe, '../results_summary_bin/table_toe_binary_all.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize Block results" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "block_lasso = read.csv('../results_summary_bin/sim_block_lasso_binary.txt', sep='\\t')\n", + "block_elnet = read.csv('../results_summary_bin/sim_block_Elnet_binary.txt', sep='\\t')\n", + "block_rf = read.csv('../results_summary_bin/sim_block_RF_binary.txt', sep='\\t')\n", + "block_compLasso = read.csv('../results_summary_bin/sim_block_GenCompLasso_binary.txt', sep='\\t')\n", + "\n", + "block_lasso$method = rep('lasso', dim(block_lasso)[1])\n", + "block_elnet$method = rep('elnet', dim(block_elnet)[1])\n", + "block_rf$method = rep('rf', dim(block_rf)[1])\n", + "block_compLasso$method = rep('compLasso', dim(block_compLasso)[1])" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "
  1. 80
  2. 14
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 80\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 80\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 80 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "
  1. 80
  2. 14
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 80\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 80\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 80 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "
  1. 80
  2. 14
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 80\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 80\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 80 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "
  1. 80
  2. 14
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 80\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 80\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 80 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "dim(block_lasso)\n", + "dim(block_elnet)\n", + "dim(block_rf)\n", + "dim(block_compLasso)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "
  1. 320
  2. 14
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 320\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 320\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 320 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "block = rbind(block_lasso, block_elnet)\n", + "block = rbind(block, block_rf)\n", + "block = rbind(block, block_compLasso)\n", + "dim(block)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 27 × 14
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_meanmethod
<int><int><dbl><dbl><dbl><fct><fct><fct><dbl><dbl><dbl><dbl><dbl><chr>
161 50 500.1 1.00NA1 ( 0 ) 1 ( 0 )6 ( 0 )0NaN1.016rf
165 50 1000.1 2.00NA1 ( 0 ) 1 ( 0 )6 ( 0 )0NaN1.016rf
169 50 5000.110.00NA1 ( 0 ) 1 ( 0 )6 ( 0 )0NaN1.016rf
173 5010000.120.00NA1 ( 0 ) 1 ( 0 )6 ( 0 )0NaN1.016rf
177 50 500.3 1.00NA1 ( 0 ) 1 ( 0 )6 ( 0 )0NaN1.016rf
181 50 1000.3 2.00NA1 ( 0 ) 1 ( 0 )6 ( 0 )0NaN1.016rf
185 50 5000.310.00NA1 ( 0 ) 1 ( 0 )6 ( 0 )0NaN1.016rf
189 5010000.320.00NA1 ( 0 ) 1 ( 0 )6 ( 0 )0NaN1.016rf
193 50 500.5 1.00NA1 ( 0 ) 1 ( 0 )6 ( 0 )0NaN1.016rf
197 50 1000.5 2.00NA1 ( 0 ) 1 ( 0 )6 ( 0 )0NaN1.016rf
201 50 5000.510.00NA1 ( 0 ) 1 ( 0 )6 ( 0 )0NaN1.016rf
205 5010000.520.00NA1 ( 0 ) 1 ( 0 )6 ( 0 )0NaN1.016rf
209 50 500.7 1.00NA1 ( 0 ) 1 ( 0 )6 ( 0 )0NaN1.016rf
213 50 1000.7 2.00NA1 ( 0 ) 1 ( 0 )6 ( 0 )0NaN1.016rf
217 50 5000.710.00NA1 ( 0 ) 1 ( 0 )6 ( 0 )0NaN1.016rf
221 5010000.720.00NA1 ( 0 ) 1 ( 0 )6 ( 0 )0NaN1.016rf
225 50 500.9 1.00NA1 ( 0 ) 1 ( 0 )6 ( 0 )0NaN1.016rf
229 50 1000.9 2.00NA1 ( 0 ) 1 ( 0 )6 ( 0 )0NaN1.016rf
233 50 5000.910.00NA1 ( 0 ) 1 ( 0 )6 ( 0 )0NaN1.016rf
237 5010000.920.00NA1 ( 0 ) 1 ( 0 )6 ( 0 )0NaN1.016rf
243 500 500.1 0.10NA0.5 ( 0 )0 ( 0 )6 ( 0 )0NaN0.506compLasso
2441000 500.1 0.05NA0.5 ( 0 )0 ( 0 )6 ( 0 )0NaN0.506compLasso
247 500 1000.1 0.20NA0.5 ( 0 )0 ( 0 )6 ( 0 )0NaN0.506compLasso
2481000 1000.1 0.10NA0.5 ( 0 )0 ( 0 )6 ( 0 )0NaN0.506compLasso
251 500 5000.1 1.00NA0.5 ( 0 )0 ( 0 )6 ( 0 )0NaN0.506compLasso
2521000 5000.1 0.50NA0.5 ( 0 )0 ( 0 )6 ( 0 )0NaN0.506compLasso
256100010000.1 1.00NA0.5 ( 0 )0 ( 0 )6 ( 0 )0NaN0.506compLasso
\n" + ], + "text/latex": [ + "A data.frame: 27 × 14\n", + "\\begin{tabular}{r|llllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean & method\\\\\n", + " & & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t161 & 50 & 50 & 0.1 & 1.00 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.0 & 1 & 6 & rf \\\\\n", + "\t165 & 50 & 100 & 0.1 & 2.00 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.0 & 1 & 6 & rf \\\\\n", + "\t169 & 50 & 500 & 0.1 & 10.00 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.0 & 1 & 6 & rf \\\\\n", + "\t173 & 50 & 1000 & 0.1 & 20.00 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.0 & 1 & 6 & rf \\\\\n", + "\t177 & 50 & 50 & 0.3 & 1.00 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.0 & 1 & 6 & rf \\\\\n", + "\t181 & 50 & 100 & 0.3 & 2.00 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.0 & 1 & 6 & rf \\\\\n", + "\t185 & 50 & 500 & 0.3 & 10.00 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.0 & 1 & 6 & rf \\\\\n", + "\t189 & 50 & 1000 & 0.3 & 20.00 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.0 & 1 & 6 & rf \\\\\n", + "\t193 & 50 & 50 & 0.5 & 1.00 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.0 & 1 & 6 & rf \\\\\n", + "\t197 & 50 & 100 & 0.5 & 2.00 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.0 & 1 & 6 & rf \\\\\n", + "\t201 & 50 & 500 & 0.5 & 10.00 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.0 & 1 & 6 & rf \\\\\n", + "\t205 & 50 & 1000 & 0.5 & 20.00 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.0 & 1 & 6 & rf \\\\\n", + "\t209 & 50 & 50 & 0.7 & 1.00 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.0 & 1 & 6 & rf \\\\\n", + "\t213 & 50 & 100 & 0.7 & 2.00 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.0 & 1 & 6 & rf \\\\\n", + "\t217 & 50 & 500 & 0.7 & 10.00 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.0 & 1 & 6 & rf \\\\\n", + "\t221 & 50 & 1000 & 0.7 & 20.00 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.0 & 1 & 6 & rf \\\\\n", + "\t225 & 50 & 50 & 0.9 & 1.00 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.0 & 1 & 6 & rf \\\\\n", + "\t229 & 50 & 100 & 0.9 & 2.00 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.0 & 1 & 6 & rf \\\\\n", + "\t233 & 50 & 500 & 0.9 & 10.00 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.0 & 1 & 6 & rf \\\\\n", + "\t237 & 50 & 1000 & 0.9 & 20.00 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.0 & 1 & 6 & rf \\\\\n", + "\t243 & 500 & 50 & 0.1 & 0.10 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.5 & 0 & 6 & compLasso\\\\\n", + "\t244 & 1000 & 50 & 0.1 & 0.05 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.5 & 0 & 6 & compLasso\\\\\n", + "\t247 & 500 & 100 & 0.1 & 0.20 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.5 & 0 & 6 & compLasso\\\\\n", + "\t248 & 1000 & 100 & 0.1 & 0.10 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.5 & 0 & 6 & compLasso\\\\\n", + "\t251 & 500 & 500 & 0.1 & 1.00 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.5 & 0 & 6 & compLasso\\\\\n", + "\t252 & 1000 & 500 & 0.1 & 0.50 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.5 & 0 & 6 & compLasso\\\\\n", + "\t256 & 1000 & 1000 & 0.1 & 1.00 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.5 & 0 & 6 & compLasso\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 27 × 14\n", + "\n", + "| | N <int> | P <int> | Corr <dbl> | Ratio <dbl> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <dbl> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> | method <chr> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 161 | 50 | 50 | 0.1 | 1.00 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.0 | 1 | 6 | rf |\n", + "| 165 | 50 | 100 | 0.1 | 2.00 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.0 | 1 | 6 | rf |\n", + "| 169 | 50 | 500 | 0.1 | 10.00 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.0 | 1 | 6 | rf |\n", + "| 173 | 50 | 1000 | 0.1 | 20.00 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.0 | 1 | 6 | rf |\n", + "| 177 | 50 | 50 | 0.3 | 1.00 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.0 | 1 | 6 | rf |\n", + "| 181 | 50 | 100 | 0.3 | 2.00 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.0 | 1 | 6 | rf |\n", + "| 185 | 50 | 500 | 0.3 | 10.00 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.0 | 1 | 6 | rf |\n", + "| 189 | 50 | 1000 | 0.3 | 20.00 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.0 | 1 | 6 | rf |\n", + "| 193 | 50 | 50 | 0.5 | 1.00 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.0 | 1 | 6 | rf |\n", + "| 197 | 50 | 100 | 0.5 | 2.00 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.0 | 1 | 6 | rf |\n", + "| 201 | 50 | 500 | 0.5 | 10.00 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.0 | 1 | 6 | rf |\n", + "| 205 | 50 | 1000 | 0.5 | 20.00 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.0 | 1 | 6 | rf |\n", + "| 209 | 50 | 50 | 0.7 | 1.00 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.0 | 1 | 6 | rf |\n", + "| 213 | 50 | 100 | 0.7 | 2.00 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.0 | 1 | 6 | rf |\n", + "| 217 | 50 | 500 | 0.7 | 10.00 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.0 | 1 | 6 | rf |\n", + "| 221 | 50 | 1000 | 0.7 | 20.00 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.0 | 1 | 6 | rf |\n", + "| 225 | 50 | 50 | 0.9 | 1.00 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.0 | 1 | 6 | rf |\n", + "| 229 | 50 | 100 | 0.9 | 2.00 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.0 | 1 | 6 | rf |\n", + "| 233 | 50 | 500 | 0.9 | 10.00 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.0 | 1 | 6 | rf |\n", + "| 237 | 50 | 1000 | 0.9 | 20.00 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.0 | 1 | 6 | rf |\n", + "| 243 | 500 | 50 | 0.1 | 0.10 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.5 | 0 | 6 | compLasso |\n", + "| 244 | 1000 | 50 | 0.1 | 0.05 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.5 | 0 | 6 | compLasso |\n", + "| 247 | 500 | 100 | 0.1 | 0.20 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.5 | 0 | 6 | compLasso |\n", + "| 248 | 1000 | 100 | 0.1 | 0.10 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.5 | 0 | 6 | compLasso |\n", + "| 251 | 500 | 500 | 0.1 | 1.00 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.5 | 0 | 6 | compLasso |\n", + "| 252 | 1000 | 500 | 0.1 | 0.50 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.5 | 0 | 6 | compLasso |\n", + "| 256 | 1000 | 1000 | 0.1 | 1.00 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.5 | 0 | 6 | compLasso |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select FDR ROC_mean\n", + "161 50 50 0.1 1.00 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.0 \n", + "165 50 100 0.1 2.00 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.0 \n", + "169 50 500 0.1 10.00 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.0 \n", + "173 50 1000 0.1 20.00 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.0 \n", + "177 50 50 0.3 1.00 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.0 \n", + "181 50 100 0.3 2.00 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.0 \n", + "185 50 500 0.3 10.00 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.0 \n", + "189 50 1000 0.3 20.00 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.0 \n", + "193 50 50 0.5 1.00 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.0 \n", + "197 50 100 0.5 2.00 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.0 \n", + "201 50 500 0.5 10.00 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.0 \n", + "205 50 1000 0.5 20.00 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.0 \n", + "209 50 50 0.7 1.00 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.0 \n", + "213 50 100 0.7 2.00 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.0 \n", + "217 50 500 0.7 10.00 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.0 \n", + "221 50 1000 0.7 20.00 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.0 \n", + "225 50 50 0.9 1.00 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.0 \n", + "229 50 100 0.9 2.00 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.0 \n", + "233 50 500 0.9 10.00 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.0 \n", + "237 50 1000 0.9 20.00 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.0 \n", + "243 500 50 0.1 0.10 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0 NaN 0.5 \n", + "244 1000 50 0.1 0.05 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0 NaN 0.5 \n", + "247 500 100 0.1 0.20 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0 NaN 0.5 \n", + "248 1000 100 0.1 0.10 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0 NaN 0.5 \n", + "251 500 500 0.1 1.00 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0 NaN 0.5 \n", + "252 1000 500 0.1 0.50 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0 NaN 0.5 \n", + "256 1000 1000 0.1 1.00 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0 NaN 0.5 \n", + " FP_mean FN_mean method \n", + "161 1 6 rf \n", + "165 1 6 rf \n", + "169 1 6 rf \n", + "173 1 6 rf \n", + "177 1 6 rf \n", + "181 1 6 rf \n", + "185 1 6 rf \n", + "189 1 6 rf \n", + "193 1 6 rf \n", + "197 1 6 rf \n", + "201 1 6 rf \n", + "205 1 6 rf \n", + "209 1 6 rf \n", + "213 1 6 rf \n", + "217 1 6 rf \n", + "221 1 6 rf \n", + "225 1 6 rf \n", + "229 1 6 rf \n", + "233 1 6 rf \n", + "237 1 6 rf \n", + "243 0 6 compLasso\n", + "244 0 6 compLasso\n", + "247 0 6 compLasso\n", + "248 0 6 compLasso\n", + "251 0 6 compLasso\n", + "252 0 6 compLasso\n", + "256 0 6 compLasso" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "block[block$num_select ==0, ] " + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "# fix false positives: when nothing was selected, then fp should be zero\n", + "# fp is now 1 due to length(setdiff(0/NA)) = 1 when actually should be 0 (in cv_sim_apply.R)\n", + "block$FP_mean[block$num_select ==0] = 0\n", + "write.table(block, '../results_summary_bin/table_block_binary_all.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_bin/4_sim_binary_hypothesis_testing.ipynb b/simulations/notebooks_sim_bin/4_sim_binary_hypothesis_testing.ipynb new file mode 100644 index 0000000..2357762 --- /dev/null +++ b/simulations/notebooks_sim_bin/4_sim_binary_hypothesis_testing.ipynb @@ -0,0 +1,768 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Hypothesis testing based on boostrap for selected simulation scenario" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data/'" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "load(paste0(dir, 'binary_update/boot_toe_RF_binary.RData'))\n", + "load(paste0(dir, 'binary_update/boot_block_RF_binary.RData'))\n", + "load(paste0(dir, 'binary_update/boot_toe_genCompLasso_binary.RData'))\n", + "load(paste0(dir, 'binary_update/boot_block_genCompLasso_binary.RData'))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### hypothesis testing based on Stability" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 4
toe_rftoe_genCompLassoblock_rfblock_genCompLasso
<dbl><dbl><dbl><dbl>
10.010.190.010.18
20.010.190.010.18
30.010.190.000.16
40.010.190.000.20
50.010.170.010.17
60.010.180.010.18
\n" + ], + "text/latex": [ + "A data.frame: 6 × 4\n", + "\\begin{tabular}{r|llll}\n", + " & toe\\_rf & toe\\_genCompLasso & block\\_rf & block\\_genCompLasso\\\\\n", + " & & & & \\\\\n", + "\\hline\n", + "\t1 & 0.01 & 0.19 & 0.01 & 0.18\\\\\n", + "\t2 & 0.01 & 0.19 & 0.01 & 0.18\\\\\n", + "\t3 & 0.01 & 0.19 & 0.00 & 0.16\\\\\n", + "\t4 & 0.01 & 0.19 & 0.00 & 0.20\\\\\n", + "\t5 & 0.01 & 0.17 & 0.01 & 0.17\\\\\n", + "\t6 & 0.01 & 0.18 & 0.01 & 0.18\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 4\n", + "\n", + "| | toe_rf <dbl> | toe_genCompLasso <dbl> | block_rf <dbl> | block_genCompLasso <dbl> |\n", + "|---|---|---|---|---|\n", + "| 1 | 0.01 | 0.19 | 0.01 | 0.18 |\n", + "| 2 | 0.01 | 0.19 | 0.01 | 0.18 |\n", + "| 3 | 0.01 | 0.19 | 0.00 | 0.16 |\n", + "| 4 | 0.01 | 0.19 | 0.00 | 0.20 |\n", + "| 5 | 0.01 | 0.17 | 0.01 | 0.17 |\n", + "| 6 | 0.01 | 0.18 | 0.01 | 0.18 |\n", + "\n" + ], + "text/plain": [ + " toe_rf toe_genCompLasso block_rf block_genCompLasso\n", + "1 0.01 0.19 0.01 0.18 \n", + "2 0.01 0.19 0.01 0.18 \n", + "3 0.01 0.19 0.00 0.16 \n", + "4 0.01 0.19 0.00 0.20 \n", + "5 0.01 0.17 0.01 0.17 \n", + "6 0.01 0.18 0.01 0.18 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "table = as.data.frame(cbind(toe_rf$stab_index, toe_genCompLasso$stab_index, block_rf$stab_index, block_genCompLasso$stab_index))\n", + "colnames(table) = c('toe_rf', 'toe_genCompLasso', 'block_rf', 'block_genCompLasso')\n", + "head(table)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "0.1732" + ], + "text/latex": [ + "0.1732" + ], + "text/markdown": [ + "0.1732" + ], + "text/plain": [ + "[1] 0.1732" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "0.0097" + ], + "text/latex": [ + "0.0097" + ], + "text/markdown": [ + "0.0097" + ], + "text/plain": [ + "[1] 0.0097" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "mean(table$toe_genCompLasso)\n", + "mean(table$toe_rf)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "0.1635" + ], + "text/latex": [ + "0.1635" + ], + "text/markdown": [ + "0.1635" + ], + "text/plain": [ + "[1] 0.1635" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
2.5%
0.14
97.5%
0.18
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[2.5\\textbackslash{}\\%] 0.14\n", + "\\item[97.5\\textbackslash{}\\%] 0.18\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "2.5%\n", + ": 0.1497.5%\n", + ": 0.18\n", + "\n" + ], + "text/plain": [ + " 2.5% 97.5% \n", + " 0.14 0.18 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "diff_toe = (table$toe_genCompLasso - table$toe_rf)\n", + "mean(diff_toe)\n", + "quantile(diff_toe, probs = c(0.025, 0.975))" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "0.1782" + ], + "text/latex": [ + "0.1782" + ], + "text/markdown": [ + "0.1782" + ], + "text/plain": [ + "[1] 0.1782" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "0.0079" + ], + "text/latex": [ + "0.0079" + ], + "text/markdown": [ + "0.0079" + ], + "text/plain": [ + "[1] 0.0079" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "mean(table$block_genCompLasso)\n", + "mean(table$block_rf)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "0.1703" + ], + "text/latex": [ + "0.1703" + ], + "text/markdown": [ + "0.1703" + ], + "text/plain": [ + "[1] 0.1703" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
2.5%
0.15
97.5%
0.19525
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[2.5\\textbackslash{}\\%] 0.15\n", + "\\item[97.5\\textbackslash{}\\%] 0.19525\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "2.5%\n", + ": 0.1597.5%\n", + ": 0.19525\n", + "\n" + ], + "text/plain": [ + " 2.5% 97.5% \n", + "0.15000 0.19525 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "diff_block = (table$block_genCompLasso - table$block_rf)\n", + "mean(diff_block)\n", + "quantile(diff_block, probs = c(0.025, 0.975))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### hypothesis testing based on ROC" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### block 0.5, p = 1000, n = 100" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\t
$n
\n", + "\t\t
N: 100
\n", + "\t
$p
\n", + "\t\t
P: 1000
\n", + "\t
$rou
\n", + "\t\t
0.5
\n", + "
\n" + ], + "text/latex": [ + "\\begin{description}\n", + "\\item[\\$n] \\textbf{N:} 100\n", + "\\item[\\$p] \\textbf{P:} 1000\n", + "\\item[\\$rou] 0.5\n", + "\\end{description}\n" + ], + "text/markdown": [ + "$n\n", + ": **N:** 100\n", + "$p\n", + ": **P:** 1000\n", + "$rou\n", + ": 0.5\n", + "\n", + "\n" + ], + "text/plain": [ + "$n\n", + " N \n", + "100 \n", + "\n", + "$p\n", + " P \n", + "1000 \n", + "\n", + "$rou\n", + "[1] 0.5\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "i = 46\n", + "load(paste0(dir, '/binary_update/block_RF_binary_', i, '.RData')) \n", + "results_block_rf[c('n', 'p', 'rou')]\n", + "block_rf_rocs = results_block_rf$ROC.list" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\t
$n
\n", + "\t\t
N: 100
\n", + "\t
$p
\n", + "\t\t
P: 1000
\n", + "\t
$rou
\n", + "\t\t
0.5
\n", + "
\n" + ], + "text/latex": [ + "\\begin{description}\n", + "\\item[\\$n] \\textbf{N:} 100\n", + "\\item[\\$p] \\textbf{P:} 1000\n", + "\\item[\\$rou] 0.5\n", + "\\end{description}\n" + ], + "text/markdown": [ + "$n\n", + ": **N:** 100\n", + "$p\n", + ": **P:** 1000\n", + "$rou\n", + ": 0.5\n", + "\n", + "\n" + ], + "text/plain": [ + "$n\n", + " N \n", + "100 \n", + "\n", + "$p\n", + " P \n", + "1000 \n", + "\n", + "$rou\n", + "[1] 0.5\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "i = 46\n", + "load(paste0(dir, '/binary_update/block_GenCompLasso_binary_', i, '.RData')) \n", + "results_block_GenCompLasso[c('n', 'p', 'rou')]\n", + "block_GenCompLasso_rocs = results_block_GenCompLasso$ROC.list" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "-0.0181" + ], + "text/latex": [ + "-0.0181" + ], + "text/markdown": [ + "-0.0181" + ], + "text/plain": [ + "[1] -0.0181" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
2.5%
-0.0700000000000001
97.5%
0
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[2.5\\textbackslash{}\\%] -0.0700000000000001\n", + "\\item[97.5\\textbackslash{}\\%] 0\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "2.5%\n", + ": -0.070000000000000197.5%\n", + ": 0\n", + "\n" + ], + "text/plain": [ + " 2.5% 97.5% \n", + "-0.07 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "diff_block = (block_GenCompLasso_rocs - block_rf_rocs)\n", + "mean(diff_block)\n", + "quantile(diff_block, probs = c(0.025, 0.975))" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "diff_block\n", + " -0.18 -0.0800000000000001 -0.0700000000000001 -0.0600000000000001 \n", + " 1 1 2 2 \n", + " -0.05 -0.04 -0.03 -0.02 \n", + " 7 8 10 15 \n", + " -0.01 0 \n", + " 2 52 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "table(diff_block)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Toeplitz 0.5" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\t
$n
\n", + "\t\t
N: 100
\n", + "\t
$p
\n", + "\t\t
P: 1000
\n", + "\t
$rou
\n", + "\t\t
0.5
\n", + "
\n" + ], + "text/latex": [ + "\\begin{description}\n", + "\\item[\\$n] \\textbf{N:} 100\n", + "\\item[\\$p] \\textbf{P:} 1000\n", + "\\item[\\$rou] 0.5\n", + "\\end{description}\n" + ], + "text/markdown": [ + "$n\n", + ": **N:** 100\n", + "$p\n", + ": **P:** 1000\n", + "$rou\n", + ": 0.5\n", + "\n", + "\n" + ], + "text/plain": [ + "$n\n", + " N \n", + "100 \n", + "\n", + "$p\n", + " P \n", + "1000 \n", + "\n", + "$rou\n", + "[1] 0.5\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "i = 46\n", + "load(paste0(dir, '/binary_update/toe_RF_binary_', i, '.RData')) \n", + "results_toe_rf[c('n', 'p', 'rou')]\n", + "toe_rf_rocs = results_toe_rf$ROC.list" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\t
$n
\n", + "\t\t
N: 100
\n", + "\t
$p
\n", + "\t\t
P: 1000
\n", + "\t
$rou
\n", + "\t\t
0.5
\n", + "
\n" + ], + "text/latex": [ + "\\begin{description}\n", + "\\item[\\$n] \\textbf{N:} 100\n", + "\\item[\\$p] \\textbf{P:} 1000\n", + "\\item[\\$rou] 0.5\n", + "\\end{description}\n" + ], + "text/markdown": [ + "$n\n", + ": **N:** 100\n", + "$p\n", + ": **P:** 1000\n", + "$rou\n", + ": 0.5\n", + "\n", + "\n" + ], + "text/plain": [ + "$n\n", + " N \n", + "100 \n", + "\n", + "$p\n", + " P \n", + "1000 \n", + "\n", + "$rou\n", + "[1] 0.5\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "i = 46\n", + "load(paste0(dir, '/binary_update/toe_GenCompLasso_binary_', i, '.RData')) \n", + "results_toe_GenCompLasso[c('n', 'p', 'rou')]\n", + "toe_GenCompLasso_rocs = results_toe_GenCompLasso$ROC.list" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "-6e-04" + ], + "text/latex": [ + "-6e-04" + ], + "text/markdown": [ + "-6e-04" + ], + "text/plain": [ + "[1] -6e-04" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
2.5%
-0.01
97.5%
0
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[2.5\\textbackslash{}\\%] -0.01\n", + "\\item[97.5\\textbackslash{}\\%] 0\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "2.5%\n", + ": -0.0197.5%\n", + ": 0\n", + "\n" + ], + "text/plain": [ + " 2.5% 97.5% \n", + "-0.01 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "diff_toe = (toe_GenCompLasso_rocs - toe_rf_rocs)\n", + "mean(diff_toe)\n", + "quantile(diff_toe, probs = c(0.025, 0.975))" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "diff_toe\n", + "-0.02 -0.01 0 \n", + " 2 2 96 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "table(diff_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_bin/6_make_figures_combined.ipynb b/simulations/notebooks_sim_bin/6_make_figures_combined.ipynb new file mode 100644 index 0000000..992fa99 --- /dev/null +++ b/simulations/notebooks_sim_bin/6_make_figures_combined.ipynb @@ -0,0 +1,1937 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Generate updated figures for both continuous and binary outcomes" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Loading required package: magrittr\n", + "\n" + ] + } + ], + "source": [ + "library(ggplot2)\n", + "library(gridExtra)\n", + "library(ggpubr)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### load continuous results" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "ind_cts = read.csv('../results_summary_cts/table_ind_all.txt', sep='\\t')\n", + "toe_cts = read.csv('../results_summary_cts/table_toe_all.txt', sep='\\t')\n", + "block_cts = read.csv('../results_summary_cts/table_block_all.txt', sep='\\t')" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "ind_cts$Ratio = as.factor(ind_cts$Ratio)\n", + "toe_cts$Ratio = as.factor(toe_cts$Ratio)\n", + "block_cts$Ratio = as.factor(block_cts$Ratio)\n", + "\n", + "toe_cts$N = as.factor(toe_cts$N)\n", + "toe_cts$P = as.factor(toe_cts$P)\n", + "\n", + "toe_cts_sub1 = toe_cts[toe_cts$Corr %in% 0.1, ]\n", + "toe_cts_sub3 = toe_cts[toe_cts$Corr %in% 0.3, ]\n", + "toe_cts_sub5 = toe_cts[toe_cts$Corr %in% 0.5, ]\n", + "toe_cts_sub7 = toe_cts[toe_cts$Corr %in% 0.7, ]\n", + "toe_cts_sub9 = toe_cts[toe_cts$Corr %in% 0.9, ]\n", + "\n", + "block_cts$N = as.factor(block_cts$N)\n", + "block_cts$P = as.factor(block_cts$P)\n", + "block_cts_sub1 = block_cts[block_cts$Corr %in% 0.1, ]\n", + "block_cts_sub3 = block_cts[block_cts$Corr %in% 0.3, ]\n", + "block_cts_sub5 = block_cts[block_cts$Corr %in% 0.5, ]\n", + "block_cts_sub7 = block_cts[block_cts$Corr %in% 0.7, ]\n", + "block_cts_sub9 = block_cts[block_cts$Corr %in% 0.9, ]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### load binary results (not that should be AUC in stead of ROC -- code checked)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "ind_bin = read.csv('../results_summary_bin/table_ind_binary_all.txt', sep='\\t')\n", + "toe_bin = read.csv('../results_summary_bin/table_toe_binary_all.txt', sep='\\t')\n", + "block_bin = read.csv('../results_summary_bin/table_block_binary_all.txt', sep='\\t')" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "ind_bin$Ratio = as.factor(ind_bin$Ratio)\n", + "toe_bin$Ratio = as.factor(toe_bin$Ratio)\n", + "block_bin$Ratio = as.factor(block_bin$Ratio)\n", + "\n", + "toe_bin$N = as.factor(toe_bin$N)\n", + "toe_bin$P = as.factor(toe_bin$P)\n", + "toe_bin_sub1 = toe_bin[toe_bin$Corr %in% 0.1, ]\n", + "toe_bin_sub3 = toe_bin[toe_bin$Corr %in% 0.3, ]\n", + "toe_bin_sub5 = toe_bin[toe_bin$Corr %in% 0.5, ]\n", + "toe_bin_sub7 = toe_bin[toe_bin$Corr %in% 0.7, ]\n", + "toe_bin_sub9 = toe_bin[toe_bin$Corr %in% 0.9, ]\n", + "\n", + "block_bin$N = as.factor(block_bin$N)\n", + "block_bin$P = as.factor(block_bin$P)\n", + "block_bin_sub1 = block_bin[block_bin$Corr %in% 0.1, ]\n", + "block_bin_sub3 = block_bin[block_bin$Corr %in% 0.3, ]\n", + "block_bin_sub5 = block_bin[block_bin$Corr %in% 0.5, ]\n", + "block_bin_sub7 = block_bin[block_bin$Corr %in% 0.7, ]\n", + "block_bin_sub9 = block_bin[block_bin$Corr %in% 0.9, ]" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 14
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_meanmethod
<fct><fct><dbl><fct><dbl><fct><fct><fct><dbl><dbl><dbl><dbl><dbl><fct>
150 50 0.11 0.030.59 ( 0.01 )2.69 ( 0.14 )5.3 ( 0.07 ) 2.390.670.592.695.30lasso
2100 50 0.10.5 0.110.56 ( 0.01 )2.02 ( 0.15 )5.02 ( 0.08 )2.000.390.562.025.02lasso
3500 50 0.10.1 0.280.63 ( 0 ) 4.52 ( 0.29 )3 ( 0.11 ) 6.520.450.634.523.00lasso
4100050 0.10.050.390.64 ( 0 ) 4.74 ( 0.22 )2.1 ( 0.09 ) 7.640.440.644.742.10lasso
550 1000.12 0.020.62 ( 0.01 )3.82 ( 0.16 )5.34 ( 0.07 )3.480.780.623.825.34lasso
6100 1000.11 0.070.56 ( 0.01 )2.29 ( 0.19 )5.27 ( 0.08 )2.020.570.562.295.27lasso
\n" + ], + "text/latex": [ + "A data.frame: 6 × 14\n", + "\\begin{tabular}{r|llllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean & method\\\\\n", + " & & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1 & 0.03 & 0.59 ( 0.01 ) & 2.69 ( 0.14 ) & 5.3 ( 0.07 ) & 2.39 & 0.67 & 0.59 & 2.69 & 5.30 & lasso\\\\\n", + "\t2 & 100 & 50 & 0.1 & 0.5 & 0.11 & 0.56 ( 0.01 ) & 2.02 ( 0.15 ) & 5.02 ( 0.08 ) & 2.00 & 0.39 & 0.56 & 2.02 & 5.02 & lasso\\\\\n", + "\t3 & 500 & 50 & 0.1 & 0.1 & 0.28 & 0.63 ( 0 ) & 4.52 ( 0.29 ) & 3 ( 0.11 ) & 6.52 & 0.45 & 0.63 & 4.52 & 3.00 & lasso\\\\\n", + "\t4 & 1000 & 50 & 0.1 & 0.05 & 0.39 & 0.64 ( 0 ) & 4.74 ( 0.22 ) & 2.1 ( 0.09 ) & 7.64 & 0.44 & 0.64 & 4.74 & 2.10 & lasso\\\\\n", + "\t5 & 50 & 100 & 0.1 & 2 & 0.02 & 0.62 ( 0.01 ) & 3.82 ( 0.16 ) & 5.34 ( 0.07 ) & 3.48 & 0.78 & 0.62 & 3.82 & 5.34 & lasso\\\\\n", + "\t6 & 100 & 100 & 0.1 & 1 & 0.07 & 0.56 ( 0.01 ) & 2.29 ( 0.19 ) & 5.27 ( 0.08 ) & 2.02 & 0.57 & 0.56 & 2.29 & 5.27 & lasso\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 14\n", + "\n", + "| | N <fct> | P <fct> | Corr <dbl> | Ratio <fct> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <dbl> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> | method <fct> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1 | 0.03 | 0.59 ( 0.01 ) | 2.69 ( 0.14 ) | 5.3 ( 0.07 ) | 2.39 | 0.67 | 0.59 | 2.69 | 5.30 | lasso |\n", + "| 2 | 100 | 50 | 0.1 | 0.5 | 0.11 | 0.56 ( 0.01 ) | 2.02 ( 0.15 ) | 5.02 ( 0.08 ) | 2.00 | 0.39 | 0.56 | 2.02 | 5.02 | lasso |\n", + "| 3 | 500 | 50 | 0.1 | 0.1 | 0.28 | 0.63 ( 0 ) | 4.52 ( 0.29 ) | 3 ( 0.11 ) | 6.52 | 0.45 | 0.63 | 4.52 | 3.00 | lasso |\n", + "| 4 | 1000 | 50 | 0.1 | 0.05 | 0.39 | 0.64 ( 0 ) | 4.74 ( 0.22 ) | 2.1 ( 0.09 ) | 7.64 | 0.44 | 0.64 | 4.74 | 2.10 | lasso |\n", + "| 5 | 50 | 100 | 0.1 | 2 | 0.02 | 0.62 ( 0.01 ) | 3.82 ( 0.16 ) | 5.34 ( 0.07 ) | 3.48 | 0.78 | 0.62 | 3.82 | 5.34 | lasso |\n", + "| 6 | 100 | 100 | 0.1 | 1 | 0.07 | 0.56 ( 0.01 ) | 2.29 ( 0.19 ) | 5.27 ( 0.08 ) | 2.02 | 0.57 | 0.56 | 2.29 | 5.27 | lasso |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN num_select\n", + "1 50 50 0.1 1 0.03 0.59 ( 0.01 ) 2.69 ( 0.14 ) 5.3 ( 0.07 ) 2.39 \n", + "2 100 50 0.1 0.5 0.11 0.56 ( 0.01 ) 2.02 ( 0.15 ) 5.02 ( 0.08 ) 2.00 \n", + "3 500 50 0.1 0.1 0.28 0.63 ( 0 ) 4.52 ( 0.29 ) 3 ( 0.11 ) 6.52 \n", + "4 1000 50 0.1 0.05 0.39 0.64 ( 0 ) 4.74 ( 0.22 ) 2.1 ( 0.09 ) 7.64 \n", + "5 50 100 0.1 2 0.02 0.62 ( 0.01 ) 3.82 ( 0.16 ) 5.34 ( 0.07 ) 3.48 \n", + "6 100 100 0.1 1 0.07 0.56 ( 0.01 ) 2.29 ( 0.19 ) 5.27 ( 0.08 ) 2.02 \n", + " FDR ROC_mean FP_mean FN_mean method\n", + "1 0.67 0.59 2.69 5.30 lasso \n", + "2 0.39 0.56 2.02 5.02 lasso \n", + "3 0.45 0.63 4.52 3.00 lasso \n", + "4 0.44 0.64 4.74 2.10 lasso \n", + "5 0.78 0.62 3.82 5.34 lasso \n", + "6 0.57 0.56 2.29 5.27 lasso " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(block_bin)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Figure 1: MSE/AUC vs. Stability (evaludated by FPR)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 9 × 14
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_meanmethod
<fct><fct><dbl><fct><dbl><fct><fct><fct><dbl><dbl><dbl><dbl><dbl><fct>
243500 50 0.10.1 NA0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00 NA0.50 0.006.00compLasso
244100050 0.10.05NA0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00 NA0.50 0.006.00compLasso
247500 100 0.10.2 NA0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00 NA0.50 0.006.00compLasso
2481000100 0.10.1 NA0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00 NA0.50 0.006.00compLasso
24950 500 0.110 00.73 ( 0.01 )29.62 ( 7.94 )5.17 ( 0.13 )30.450.90.7329.625.17compLasso
251500 500 0.11 NA0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00 NA0.50 0.006.00compLasso
2521000500 0.10.5 NA0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00 NA0.50 0.006.00compLasso
255500 10000.12 00.5 ( 0 ) 0 ( 0 ) 5.98 ( 0.02 ) 0.020.00.50 0.005.98compLasso
256100010000.11 NA0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00 NA0.50 0.006.00compLasso
\n" + ], + "text/latex": [ + "A data.frame: 9 × 14\n", + "\\begin{tabular}{r|llllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean & method\\\\\n", + " & & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t243 & 500 & 50 & 0.1 & 0.1 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NA & 0.50 & 0.00 & 6.00 & compLasso\\\\\n", + "\t244 & 1000 & 50 & 0.1 & 0.05 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NA & 0.50 & 0.00 & 6.00 & compLasso\\\\\n", + "\t247 & 500 & 100 & 0.1 & 0.2 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NA & 0.50 & 0.00 & 6.00 & compLasso\\\\\n", + "\t248 & 1000 & 100 & 0.1 & 0.1 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NA & 0.50 & 0.00 & 6.00 & compLasso\\\\\n", + "\t249 & 50 & 500 & 0.1 & 10 & 0 & 0.73 ( 0.01 ) & 29.62 ( 7.94 ) & 5.17 ( 0.13 ) & 30.45 & 0.9 & 0.73 & 29.62 & 5.17 & compLasso\\\\\n", + "\t251 & 500 & 500 & 0.1 & 1 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NA & 0.50 & 0.00 & 6.00 & compLasso\\\\\n", + "\t252 & 1000 & 500 & 0.1 & 0.5 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NA & 0.50 & 0.00 & 6.00 & compLasso\\\\\n", + "\t255 & 500 & 1000 & 0.1 & 2 & 0 & 0.5 ( 0 ) & 0 ( 0 ) & 5.98 ( 0.02 ) & 0.02 & 0.0 & 0.50 & 0.00 & 5.98 & compLasso\\\\\n", + "\t256 & 1000 & 1000 & 0.1 & 1 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NA & 0.50 & 0.00 & 6.00 & compLasso\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 9 × 14\n", + "\n", + "| | N <fct> | P <fct> | Corr <dbl> | Ratio <fct> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <dbl> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> | method <fct> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 243 | 500 | 50 | 0.1 | 0.1 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NA | 0.50 | 0.00 | 6.00 | compLasso |\n", + "| 244 | 1000 | 50 | 0.1 | 0.05 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NA | 0.50 | 0.00 | 6.00 | compLasso |\n", + "| 247 | 500 | 100 | 0.1 | 0.2 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NA | 0.50 | 0.00 | 6.00 | compLasso |\n", + "| 248 | 1000 | 100 | 0.1 | 0.1 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NA | 0.50 | 0.00 | 6.00 | compLasso |\n", + "| 249 | 50 | 500 | 0.1 | 10 | 0 | 0.73 ( 0.01 ) | 29.62 ( 7.94 ) | 5.17 ( 0.13 ) | 30.45 | 0.9 | 0.73 | 29.62 | 5.17 | compLasso |\n", + "| 251 | 500 | 500 | 0.1 | 1 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NA | 0.50 | 0.00 | 6.00 | compLasso |\n", + "| 252 | 1000 | 500 | 0.1 | 0.5 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NA | 0.50 | 0.00 | 6.00 | compLasso |\n", + "| 255 | 500 | 1000 | 0.1 | 2 | 0 | 0.5 ( 0 ) | 0 ( 0 ) | 5.98 ( 0.02 ) | 0.02 | 0.0 | 0.50 | 0.00 | 5.98 | compLasso |\n", + "| 256 | 1000 | 1000 | 0.1 | 1 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NA | 0.50 | 0.00 | 6.00 | compLasso |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "243 500 50 0.1 0.1 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + "244 1000 50 0.1 0.05 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + "247 500 100 0.1 0.2 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + "248 1000 100 0.1 0.1 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + "249 50 500 0.1 10 0 0.73 ( 0.01 ) 29.62 ( 7.94 ) 5.17 ( 0.13 )\n", + "251 500 500 0.1 1 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + "252 1000 500 0.1 0.5 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + "255 500 1000 0.1 2 0 0.5 ( 0 ) 0 ( 0 ) 5.98 ( 0.02 )\n", + "256 1000 1000 0.1 1 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + " num_select FDR ROC_mean FP_mean FN_mean method \n", + "243 0.00 NA 0.50 0.00 6.00 compLasso\n", + "244 0.00 NA 0.50 0.00 6.00 compLasso\n", + "247 0.00 NA 0.50 0.00 6.00 compLasso\n", + "248 0.00 NA 0.50 0.00 6.00 compLasso\n", + "249 30.45 0.9 0.73 29.62 5.17 compLasso\n", + "251 0.00 NA 0.50 0.00 6.00 compLasso\n", + "252 0.00 NA 0.50 0.00 6.00 compLasso\n", + "255 0.02 0.0 0.50 0.00 5.98 compLasso\n", + "256 0.00 NA 0.50 0.00 6.00 compLasso" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "block_bin[block_bin$method=='compLasso' & block_bin$Stab %in% c(NA, 0),]\n", + "\n", + "# composittional Lasso perform poor (often select nothing) at Block Corr 0.1" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 21 × 14
NPCorrRatioStabROCFPFNnum_selectFDRROC_meanFP_meanFN_meanmethod
<fct><fct><dbl><fct><dbl><fct><fct><fct><dbl><dbl><dbl><dbl><dbl><fct>
1350 10000.120 00.62 ( 0.01 )10.42 ( 0.22 ) 5.56 ( 0.06 ) 9.860.950.62 10.425.56lasso
8950 500 0.110 00.61 ( 0.01 )69.03 ( 7.45 ) 4.13 ( 0.19 ) 69.900.960.61 69.034.13elnet
90100 500 0.15 00.57 ( 0.01 )70.64 ( 9.13 ) 3.91 ( 0.17 ) 71.730.910.57 70.643.91elnet
9350 10000.120 00.59 ( 0.01 )103.61 ( 10.54 )4.34 ( 0.18 )104.270.980.59103.614.34elnet
94100 10000.110 00.56 ( 0.01 )103.21 ( 12.75 )4.15 ( 0.17 )104.060.950.56103.214.15elnet
16150 50 0.11 NA1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 NA1.00 0.006.00rf
16550 100 0.12 NA1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 NA1.00 0.006.00rf
166100 100 0.11 01 ( 0 ) 5.09 ( 0.21 ) 5.6 ( 0.09 ) 5.480.931.00 5.095.60rf
16950 500 0.110 NA1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 NA1.00 0.006.00rf
170100 500 0.15 01 ( 0 ) 24.14 ( 0.56 ) 5.35 ( 0.11 ) 24.790.971.00 24.145.35rf
17350 10000.120 NA1 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.00 NA1.00 0.006.00rf
174100 10000.110 01 ( 0 ) 48.22 ( 0.62 ) 5.53 ( 0.09 ) 48.690.991.00 48.225.53rf
243500 50 0.10.1 NA0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00 NA0.50 0.006.00compLasso
244100050 0.10.05NA0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00 NA0.50 0.006.00compLasso
247500 100 0.10.2 NA0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00 NA0.50 0.006.00compLasso
2481000100 0.10.1 NA0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00 NA0.50 0.006.00compLasso
24950 500 0.110 00.73 ( 0.01 )29.62 ( 7.94 ) 5.17 ( 0.13 ) 30.450.900.73 29.625.17compLasso
251500 500 0.11 NA0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00 NA0.50 0.006.00compLasso
2521000500 0.10.5 NA0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00 NA0.50 0.006.00compLasso
255500 10000.12 00.5 ( 0 ) 0 ( 0 ) 5.98 ( 0.02 ) 0.020.000.50 0.005.98compLasso
256100010000.11 NA0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) 0.00 NA0.50 0.006.00compLasso
\n" + ], + "text/latex": [ + "A data.frame: 21 × 14\n", + "\\begin{tabular}{r|llllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & ROC & FP & FN & num\\_select & FDR & ROC\\_mean & FP\\_mean & FN\\_mean & method\\\\\n", + " & & & & & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t13 & 50 & 1000 & 0.1 & 20 & 0 & 0.62 ( 0.01 ) & 10.42 ( 0.22 ) & 5.56 ( 0.06 ) & 9.86 & 0.95 & 0.62 & 10.42 & 5.56 & lasso \\\\\n", + "\t89 & 50 & 500 & 0.1 & 10 & 0 & 0.61 ( 0.01 ) & 69.03 ( 7.45 ) & 4.13 ( 0.19 ) & 69.90 & 0.96 & 0.61 & 69.03 & 4.13 & elnet \\\\\n", + "\t90 & 100 & 500 & 0.1 & 5 & 0 & 0.57 ( 0.01 ) & 70.64 ( 9.13 ) & 3.91 ( 0.17 ) & 71.73 & 0.91 & 0.57 & 70.64 & 3.91 & elnet \\\\\n", + "\t93 & 50 & 1000 & 0.1 & 20 & 0 & 0.59 ( 0.01 ) & 103.61 ( 10.54 ) & 4.34 ( 0.18 ) & 104.27 & 0.98 & 0.59 & 103.61 & 4.34 & elnet \\\\\n", + "\t94 & 100 & 1000 & 0.1 & 10 & 0 & 0.56 ( 0.01 ) & 103.21 ( 12.75 ) & 4.15 ( 0.17 ) & 104.06 & 0.95 & 0.56 & 103.21 & 4.15 & elnet \\\\\n", + "\t161 & 50 & 50 & 0.1 & 1 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NA & 1.00 & 0.00 & 6.00 & rf \\\\\n", + "\t165 & 50 & 100 & 0.1 & 2 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NA & 1.00 & 0.00 & 6.00 & rf \\\\\n", + "\t166 & 100 & 100 & 0.1 & 1 & 0 & 1 ( 0 ) & 5.09 ( 0.21 ) & 5.6 ( 0.09 ) & 5.48 & 0.93 & 1.00 & 5.09 & 5.60 & rf \\\\\n", + "\t169 & 50 & 500 & 0.1 & 10 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NA & 1.00 & 0.00 & 6.00 & rf \\\\\n", + "\t170 & 100 & 500 & 0.1 & 5 & 0 & 1 ( 0 ) & 24.14 ( 0.56 ) & 5.35 ( 0.11 ) & 24.79 & 0.97 & 1.00 & 24.14 & 5.35 & rf \\\\\n", + "\t173 & 50 & 1000 & 0.1 & 20 & NA & 1 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.00 & NA & 1.00 & 0.00 & 6.00 & rf \\\\\n", + "\t174 & 100 & 1000 & 0.1 & 10 & 0 & 1 ( 0 ) & 48.22 ( 0.62 ) & 5.53 ( 0.09 ) & 48.69 & 0.99 & 1.00 & 48.22 & 5.53 & rf \\\\\n", + "\t243 & 500 & 50 & 0.1 & 0.1 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NA & 0.50 & 0.00 & 6.00 & compLasso\\\\\n", + "\t244 & 1000 & 50 & 0.1 & 0.05 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NA & 0.50 & 0.00 & 6.00 & compLasso\\\\\n", + "\t247 & 500 & 100 & 0.1 & 0.2 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NA & 0.50 & 0.00 & 6.00 & compLasso\\\\\n", + "\t248 & 1000 & 100 & 0.1 & 0.1 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NA & 0.50 & 0.00 & 6.00 & compLasso\\\\\n", + "\t249 & 50 & 500 & 0.1 & 10 & 0 & 0.73 ( 0.01 ) & 29.62 ( 7.94 ) & 5.17 ( 0.13 ) & 30.45 & 0.90 & 0.73 & 29.62 & 5.17 & compLasso\\\\\n", + "\t251 & 500 & 500 & 0.1 & 1 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NA & 0.50 & 0.00 & 6.00 & compLasso\\\\\n", + "\t252 & 1000 & 500 & 0.1 & 0.5 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NA & 0.50 & 0.00 & 6.00 & compLasso\\\\\n", + "\t255 & 500 & 1000 & 0.1 & 2 & 0 & 0.5 ( 0 ) & 0 ( 0 ) & 5.98 ( 0.02 ) & 0.02 & 0.00 & 0.50 & 0.00 & 5.98 & compLasso\\\\\n", + "\t256 & 1000 & 1000 & 0.1 & 1 & NA & 0.5 ( 0 ) & 0 ( 0 ) & 6 ( 0 ) & 0.00 & NA & 0.50 & 0.00 & 6.00 & compLasso\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 21 × 14\n", + "\n", + "| | N <fct> | P <fct> | Corr <dbl> | Ratio <fct> | Stab <dbl> | ROC <fct> | FP <fct> | FN <fct> | num_select <dbl> | FDR <dbl> | ROC_mean <dbl> | FP_mean <dbl> | FN_mean <dbl> | method <fct> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 13 | 50 | 1000 | 0.1 | 20 | 0 | 0.62 ( 0.01 ) | 10.42 ( 0.22 ) | 5.56 ( 0.06 ) | 9.86 | 0.95 | 0.62 | 10.42 | 5.56 | lasso |\n", + "| 89 | 50 | 500 | 0.1 | 10 | 0 | 0.61 ( 0.01 ) | 69.03 ( 7.45 ) | 4.13 ( 0.19 ) | 69.90 | 0.96 | 0.61 | 69.03 | 4.13 | elnet |\n", + "| 90 | 100 | 500 | 0.1 | 5 | 0 | 0.57 ( 0.01 ) | 70.64 ( 9.13 ) | 3.91 ( 0.17 ) | 71.73 | 0.91 | 0.57 | 70.64 | 3.91 | elnet |\n", + "| 93 | 50 | 1000 | 0.1 | 20 | 0 | 0.59 ( 0.01 ) | 103.61 ( 10.54 ) | 4.34 ( 0.18 ) | 104.27 | 0.98 | 0.59 | 103.61 | 4.34 | elnet |\n", + "| 94 | 100 | 1000 | 0.1 | 10 | 0 | 0.56 ( 0.01 ) | 103.21 ( 12.75 ) | 4.15 ( 0.17 ) | 104.06 | 0.95 | 0.56 | 103.21 | 4.15 | elnet |\n", + "| 161 | 50 | 50 | 0.1 | 1 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NA | 1.00 | 0.00 | 6.00 | rf |\n", + "| 165 | 50 | 100 | 0.1 | 2 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NA | 1.00 | 0.00 | 6.00 | rf |\n", + "| 166 | 100 | 100 | 0.1 | 1 | 0 | 1 ( 0 ) | 5.09 ( 0.21 ) | 5.6 ( 0.09 ) | 5.48 | 0.93 | 1.00 | 5.09 | 5.60 | rf |\n", + "| 169 | 50 | 500 | 0.1 | 10 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NA | 1.00 | 0.00 | 6.00 | rf |\n", + "| 170 | 100 | 500 | 0.1 | 5 | 0 | 1 ( 0 ) | 24.14 ( 0.56 ) | 5.35 ( 0.11 ) | 24.79 | 0.97 | 1.00 | 24.14 | 5.35 | rf |\n", + "| 173 | 50 | 1000 | 0.1 | 20 | NA | 1 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.00 | NA | 1.00 | 0.00 | 6.00 | rf |\n", + "| 174 | 100 | 1000 | 0.1 | 10 | 0 | 1 ( 0 ) | 48.22 ( 0.62 ) | 5.53 ( 0.09 ) | 48.69 | 0.99 | 1.00 | 48.22 | 5.53 | rf |\n", + "| 243 | 500 | 50 | 0.1 | 0.1 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NA | 0.50 | 0.00 | 6.00 | compLasso |\n", + "| 244 | 1000 | 50 | 0.1 | 0.05 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NA | 0.50 | 0.00 | 6.00 | compLasso |\n", + "| 247 | 500 | 100 | 0.1 | 0.2 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NA | 0.50 | 0.00 | 6.00 | compLasso |\n", + "| 248 | 1000 | 100 | 0.1 | 0.1 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NA | 0.50 | 0.00 | 6.00 | compLasso |\n", + "| 249 | 50 | 500 | 0.1 | 10 | 0 | 0.73 ( 0.01 ) | 29.62 ( 7.94 ) | 5.17 ( 0.13 ) | 30.45 | 0.90 | 0.73 | 29.62 | 5.17 | compLasso |\n", + "| 251 | 500 | 500 | 0.1 | 1 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NA | 0.50 | 0.00 | 6.00 | compLasso |\n", + "| 252 | 1000 | 500 | 0.1 | 0.5 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NA | 0.50 | 0.00 | 6.00 | compLasso |\n", + "| 255 | 500 | 1000 | 0.1 | 2 | 0 | 0.5 ( 0 ) | 0 ( 0 ) | 5.98 ( 0.02 ) | 0.02 | 0.00 | 0.50 | 0.00 | 5.98 | compLasso |\n", + "| 256 | 1000 | 1000 | 0.1 | 1 | NA | 0.5 ( 0 ) | 0 ( 0 ) | 6 ( 0 ) | 0.00 | NA | 0.50 | 0.00 | 6.00 | compLasso |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab ROC FP FN \n", + "13 50 1000 0.1 20 0 0.62 ( 0.01 ) 10.42 ( 0.22 ) 5.56 ( 0.06 )\n", + "89 50 500 0.1 10 0 0.61 ( 0.01 ) 69.03 ( 7.45 ) 4.13 ( 0.19 )\n", + "90 100 500 0.1 5 0 0.57 ( 0.01 ) 70.64 ( 9.13 ) 3.91 ( 0.17 )\n", + "93 50 1000 0.1 20 0 0.59 ( 0.01 ) 103.61 ( 10.54 ) 4.34 ( 0.18 )\n", + "94 100 1000 0.1 10 0 0.56 ( 0.01 ) 103.21 ( 12.75 ) 4.15 ( 0.17 )\n", + "161 50 50 0.1 1 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) \n", + "165 50 100 0.1 2 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) \n", + "166 100 100 0.1 1 0 1 ( 0 ) 5.09 ( 0.21 ) 5.6 ( 0.09 ) \n", + "169 50 500 0.1 10 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) \n", + "170 100 500 0.1 5 0 1 ( 0 ) 24.14 ( 0.56 ) 5.35 ( 0.11 )\n", + "173 50 1000 0.1 20 NA 1 ( 0 ) 1 ( 0 ) 6 ( 0 ) \n", + "174 100 1000 0.1 10 0 1 ( 0 ) 48.22 ( 0.62 ) 5.53 ( 0.09 )\n", + "243 500 50 0.1 0.1 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + "244 1000 50 0.1 0.05 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + "247 500 100 0.1 0.2 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + "248 1000 100 0.1 0.1 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + "249 50 500 0.1 10 0 0.73 ( 0.01 ) 29.62 ( 7.94 ) 5.17 ( 0.13 )\n", + "251 500 500 0.1 1 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + "252 1000 500 0.1 0.5 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + "255 500 1000 0.1 2 0 0.5 ( 0 ) 0 ( 0 ) 5.98 ( 0.02 )\n", + "256 1000 1000 0.1 1 NA 0.5 ( 0 ) 0 ( 0 ) 6 ( 0 ) \n", + " num_select FDR ROC_mean FP_mean FN_mean method \n", + "13 9.86 0.95 0.62 10.42 5.56 lasso \n", + "89 69.90 0.96 0.61 69.03 4.13 elnet \n", + "90 71.73 0.91 0.57 70.64 3.91 elnet \n", + "93 104.27 0.98 0.59 103.61 4.34 elnet \n", + "94 104.06 0.95 0.56 103.21 4.15 elnet \n", + "161 0.00 NA 1.00 0.00 6.00 rf \n", + "165 0.00 NA 1.00 0.00 6.00 rf \n", + "166 5.48 0.93 1.00 5.09 5.60 rf \n", + "169 0.00 NA 1.00 0.00 6.00 rf \n", + "170 24.79 0.97 1.00 24.14 5.35 rf \n", + "173 0.00 NA 1.00 0.00 6.00 rf \n", + "174 48.69 0.99 1.00 48.22 5.53 rf \n", + "243 0.00 NA 0.50 0.00 6.00 compLasso\n", + "244 0.00 NA 0.50 0.00 6.00 compLasso\n", + "247 0.00 NA 0.50 0.00 6.00 compLasso\n", + "248 0.00 NA 0.50 0.00 6.00 compLasso\n", + "249 30.45 0.90 0.73 29.62 5.17 compLasso\n", + "251 0.00 NA 0.50 0.00 6.00 compLasso\n", + "252 0.00 NA 0.50 0.00 6.00 compLasso\n", + "255 0.02 0.00 0.50 0.00 5.98 compLasso\n", + "256 0.00 NA 0.50 0.00 6.00 compLasso" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check other method results at Block Corr 0.1\n", + "block_bin[block_bin$Corr == 0.1 & block_bin$Stab %in% c(NA, 0),]\n", + "\n", + "# other method: Stab = 0 or NA (if Stab = 0, then high FPR)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 20 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 20 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 20 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 20 rows containing missing values (geom_point).”\n" + ] + } + ], + "source": [ + "ind_cts_mse_fpr <- ggplot(ind_cts, aes(x=FDR, y=MSE_mean, color=method, size=Ratio)) + geom_point(alpha=0.8) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Independent', x='False Positive Rate', y='MSE') + ylim(0, 4) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "ind_cts_stab_fpr <- ggplot(ind_cts, aes(x=FDR, y=Stab, color=method, size=Ratio)) + geom_point(alpha=0.8) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Independent', x='False Positive Rate', y='Stability') + ylim(0, 1) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "toe_cts_mse_fpr <- ggplot(toe_cts, aes(x=FDR, y=MSE_mean, color=method, size=Ratio)) + geom_point(alpha=0.3) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Toeplitz', x='False Positive Rate', y='MSE') + ylim(0, 4) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "toe_cts_stab_fpr <- ggplot(toe_cts, aes(x=FDR, y=Stab, color=method, size=Ratio)) + geom_point(alpha=0.3) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Toeplitz', x='False Positive Rate', y='Stability') + ylim(0, 1) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "block_cts_mse_fpr <- ggplot(block_cts, aes(x=FDR, y=MSE_mean, color=method, size=Ratio)) + geom_point(alpha=0.3) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Block', x='False Positive Rate', y='MSE') + ylim(0, 4) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "block_cts_stab_fpr <- ggplot(block_cts, aes(x=FDR, y=Stab, color=method, size=Ratio)) + geom_point(alpha=0.3) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Block', x='False Positive Rate', y='Stability') + ylim(0, 1) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "fig1_cts <- ggarrange(ind_cts_mse_fpr, ind_cts_stab_fpr, toe_cts_mse_fpr, toe_cts_stab_fpr, \n", + " block_cts_mse_fpr, block_cts_stab_fpr, \n", + " nrow=3, ncol = 2, align = \"hv\", labels = \"AUTO\", common.legend = T, legend = \"bottom\") " + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 20 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 20 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 27 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 27 rows containing missing values (geom_point).”\n" + ] + } + ], + "source": [ + "ind_bin_ROC_fpr <- ggplot(ind_bin, aes(x=FDR, y=ROC_mean, color=method, size=Ratio)) + geom_point(alpha=0.8) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Independent', x='False Positive Rate', y='AUC') + ylim(0, 1) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "ind_bin_stab_fpr <- ggplot(ind_bin, aes(x=FDR, y=Stab, color=method, size=Ratio)) + geom_point(alpha=0.8) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Independent', x='False Positive Rate', y='Stability') + ylim(0, 1) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "toe_bin_ROC_fpr <- ggplot(toe_bin, aes(x=FDR, y=ROC_mean, color=method, size=Ratio)) + geom_point(alpha=0.3) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Toeplitz', x='False Positive Rate', y='AUC') + ylim(0, 1) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "toe_bin_stab_fpr <- ggplot(toe_bin, aes(x=FDR, y=Stab, color=method, size=Ratio)) + geom_point(alpha=0.3) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Toeplitz', x='False Positive Rate', y='Stability') + ylim(0, 1) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "block_bin_ROC_fpr <- ggplot(block_bin, aes(x=FDR, y=ROC_mean, color=method, size=Ratio)) + geom_point(alpha=0.3) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Block', x='False Positive Rate', y='AUC') + ylim(0, 1) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "block_bin_stab_fpr <- ggplot(block_bin, aes(x=FDR, y=Stab, color=method, size=Ratio)) + geom_point(alpha=0.3) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Block', x='False Positive Rate', y='Stability') + ylim(0, 1) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "fig1_bin <- ggarrange(ind_bin_ROC_fpr, ind_bin_stab_fpr, toe_bin_ROC_fpr, toe_bin_stab_fpr, block_bin_ROC_fpr, block_bin_stab_fpr, \n", + " nrow=3, ncol = 2, align = \"hv\", labels = \"AUTO\", common.legend = T, legend = \"bottom\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 20 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 20 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 20 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 20 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 20 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 20 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 27 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 27 rows containing missing values (geom_point).”\n" + ] + }, + { + "data": { + "image/png": "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\nt7cRCouTEjfWuXyGYYoWjmDVy7J8bzrD++3aCQNlA2VGukgqkgcAECEizk7AGpVZbvMF9aaL\nGk0ziLA+HP5RZqY09OGVK1asePbZZ42W2mWCIPzoRz/63e9+11X7ioqKQCDQWj9g+vTpmqaV\nlpZOnz69Q7P9+/dv3LgxHA5PmTLlnnvuSU9P7+Wxwwq0WIk3/+ewaOGuCGeGngjklptfMHRO\nSYOqwnNe8/zzz3ez9+c///ljjz325ptvduXYjbZRF2MoiNm6HkmQxLV5seDXnunOsXM6nYFA\n4Pjx43PmzCktLd2/fz8AzJ7dXA/0yJEjAJCZmTkU3UpJSbn99tsjn8Ph8DPPPGO32zvoSF19\n9dWR6heapg1npUeWkYU5uVBXB4MyaRcMsgsuhPjeLknnmk3XJzjXnq4eo7TTtpB501jvazme\nVzVm09Hul8a2KZ9IjDRGOgBnoAo8FBIzGpTZZXG36WgFAI+hz7TZ7kobtEzYrnjqqaciiWNJ\nSUm5ubmlpaW1tbVPP/10ZmbmT37yk6iH1NfXi6LYGg4lSZLVanW5XG3buN1un88niuLKlSt1\nXX/99dcffvjhtWvX9ubY4TbqMC2D9n2OFgAAE2N+w+jg21GbBApF14viEwCAAwS4caHVclb7\net7yrW9967HHHjt+/HhXDUbbqIsx6MRsXY+EGqD2cyCA1NlgSjzXvRnedOfYTZ48ubKyctWq\nVY8++ugf/vAHALDb7RHHrqKiIpLRE1kqHSKI6KOPPvrLX/6Smpr69NNP22ztFv5sNlvk5SYQ\nCAzryTxEYe7FxhuvRikA2keIcwj4xYv6Ftl2b2ba+42NdZoe17Iga9dKJjWtjgsf9YuZhDJA\nh6LYyFHm2OIIMhAoPM77qkP98qhzpU/IqNX0X4xLsQ19fPerr74KAA899NBjjz0miqKu648+\n+ugTTzzx0ksvdWXsiKjzvFWH8nd2u/2vf/2rzWaLtBw/fvySJUt27doly3KPxw63UcfyJoGm\nga6DKCaIYoOmUZuFVwISW9RZTYZeZo/7IiUdAOpV7UKrtUnT6jQtOTZv1xMRWTu5a9m/0Tbq\nYgw6MVvXI2Xvgb8CCCBYA5PvhE6aTjHO0J1j98ADD3zwwQfr169fv359ZMvixYslSXK5XGPG\nNMd4dTXmBo7b7X7yySdramruuuuuhQsXdh6FGzdujHx4++23WxeIhydsyjQ+aQovO9nLbNau\n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\nZ5xxxuWXX64M2gadHIq0Awuq0wzj+7XTAaSkDOQ420U19TNl/fL01viK67PZW+r3lWtqeNCC\nnMNotsx5gcCPZk6PjnG5bjh8QribyADON6LnFUb/mUj+tav77/FEi2l12TYAXURixf+vqOmL\nPqMiT69WiXp90nsXlvVCyVZ3qv702V9dWffv4zKxSWY0yhmuzdGjumOMymDZxxd8839e+7St\nV8adUMqJ65zSOaVwBgw3QslvFetWqRS2kAeP1iciUga8AzkwdePk4anOY/LxVDdpLK+9ur79\nxUByZ5GW12RaaSlcN7ddBc9M73h/NDU3rbazkAQQqz6rfGvEWRxDmoWkAc+opMowTfAz6NFr\n2D388MPPPffcNddco6rq3Xffbdv2lVdeeaQndYCAOPhvz/XTqmb4fHc3Nm1KpMKaYpBQiCzm\nlO3EHOcjxUXfmV49zWcctJ9DQwBLQsEloZ5SuKaUWXbrVSx8uzHy0rYfdaf2BvQiIQ78MTNz\nxu5KZVtPnfmlFfNunKCJTTSjUc5wbY5y1U1p5pdftHL+TX/dcnNxYHpWFqZkgSkdS5osbcGW\nIEc35zE5LDJC9iZNGQYCQQzyO3ZrMB8hPNV5TD6e6iaNkFH6vhNufeqtL6Wtjpn+4K50xmQW\nAIvUa7X/vqT+y1Wd73HIJECw1lD4660V35V75y9qmxfTE7m2HQNCGiCHDr7uNjwHO+wozWOX\nTqeffPLJz3/+88uWLTvppJOuuuqqP//5z93d3Ud6XmPm4yVFjy+Yf9usGWfn50/3+Qo1bUEg\n8Lny0qdOrLt/3qyJs+oGowvRV4WsruLDFy75+azSc9qT27rT9fHs/kSmOZZu6EhuKw7N/ejS\nB1fWfVeZmhGGo1HOcG2OGdUdtZw+69ql078QS+3ywSzRtCrDN90fmRGM1oRKq4MVhcEQQSFi\nCIcghskCQABBQAz2cJg4j5WD4anOY/LxVDfJVBa868w5X4+lGhy7q8rQbWYAClHaaHxl1jee\nWXDJuln/9vfa/+9vdUs2TPuyqbS/MG3dxsKtedmwz+mtug4CSEB1C3tO3O3qKF2xa2hoSKVS\nS5YscV8uWrTIsqzdu3cvWnQgBc3jjz8upQTwz3/+MxQaW1TpZFKgqpeVlVxWdnQVVC2NLPzQ\nSfefOef6vR2vxDNNjswGjdKK/CUV+Sf3OaRPRUajnOHaBAKBY0Z1RydEyvtOuLUgMP3Zjd8I\n+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\nhsNT3ZANxoVJU93U24p1MQyjtD/RaPRITUbXdXcOc+bMufPOO4kIwNtvv304fX7xi1+85JJL\nnn766UNucMhomuaeTllZ2aJFi1wxxePx9vb2cR9rauGpzlPd5OOpzlPd5OOpbkqrbqoadsPR\n1NT0hS98Yfr06T6fr7q6+tJLL92+ffuQLTs6Oq699tpZs2b5/f7a2torr7yyoaHB/UhKedtt\nty1dujQUCs2ePfumm27KZDKjnICqqq7s/H6/+86LL7547rnnlpeXl5SUrFy58tlnnx3NHF55\n5ZU1a9a4L0899VS3fvkzzzxDRI7jDGiwevVqInINfxd3L/+ss846zNMBwMzueeXl5WH4Kzzk\nJA9z6KmCpzoXT3WTiac6F091k4mnOpejXXWHu7Y46bgLxYNJJBKWZS1evNh9GYlE3P/U1tY6\njsODForf/e53AyCiiooKVyizZ8+Ox+PM/KlPfarvWF3XAaxYscLtZADuQvEZZ5zhvuzu7r7h\nhhvcY59++mlm/tWvfuV2ruu6YRjuR3feeedB55A729tvv72urg5ATU3Nl7/85cGn85e//MXt\neefOncxs23Z+fj6An/3sZ2M6HXeheN68eW1tbW1tba2trZs2bVq4cCGAj370o8w8whUecpKj\nH/oox1Odp7rJx1Odp7rJx1PdMaC6Y8qwe/XVV91vcd26dczcZ7lv3ryZ+39P9fX17kd//OMf\nmXnHjh3RaDQUCj311FMvv/xybifbt293nwx+85vfDJ6MK7vBLFmyxHGcrq4ud/n64osvTiaT\nmUzmc5/7HIBQKNTc3DzCHHjQH8ngzfXcBo7jVFRUALjrrruYee3atQAURWlubh7T6biyG8yq\nVatcB4uRr/CASY5p6KMcT3UunuomE091Lp7qJhNPdS5TWnVTdSt2sGtnIBBYtmyZbdudnZ2p\nVOqOO+64+eab3caJRGLA4bquK4oC4LLLLrviiiteeeWVDRs2xOPx884774UXXgAQjUYfeeSR\n66677p577nGls27dutFMzO/3X3jhhX/84x+FEG+88UZHRweAn/70p4FAwDCM22+/XVEU9y9k\nhDmM9WoIIS655BIATz75JABXDStXriwpKTnM03FpampyF3hHf4UBjMvQRxWe6nLxVDc5eKrL\nxVPd5OCpLpepp7pxsfEnE/d54uyzzx78keM4V199tRsCHQqFTjvtNPf8X3/9dR5kof/hD39Y\nunRp7mX6xCc+0draunr16iEv/apVqwaPOCBmZ//+/bZt9316//33A8jLy8s9xDX8b7/9/2fv\nzsMkq+r78b8/5651a++u3runZ8eBGZkZYFDEDcjXPYqKCZEk5knyRIUnmER/KmqIJsbnSYzm\na1yexATFAOJPzS8hGiFAQCKCsgozwzAz3bP0Mr3XXrfudj6/P6openoWBpjp7uk+rz9mbp97\nuurUrU9Xfe6555z75ZO04djWnvx8gpkfeeQRAJZllcvlxiG66aabmPlFvZzG+cTmzZsbP4Zh\neM899wghAHzyk598wSM8r5Ev6qmXOBV1DSrqFpKKugYVdQtJRV3DWR11Z2uP3XHddttt3/jG\nN4jo7rvvLpVKN99880kqv/3tb3/kkUcGBwe/8Y1vvPWtbxVCfPe73/2nf/qnvr4+ABdccMG8\nt+S//uu/TvRQzTk7HR0djVOEhtWrVwMoFouTk5ONknK5PDExAaC/v/8kbXgJr/3CCy/csGGD\n53nf//73H3nkEdM0r7zySgAv4eU0aZp2+eWXb9u2DcC+ffvwIo/wy3nqs4iKOhV1C09FnYq6\nhaei7myJumWV2DUmj8Tj8e3btwP42te+dqKaN998c19f36ZNm2Kx2Ac/+MF///d/37hxI4DJ\nycnG+tpPPvnkzp07AYyPj19yySWbNm265ZZbXmx7tm/f3hhief3113ueFwTBn/zJn4Rh6DjO\nq1/96pO04UQPePLFqX/rt34LwKc//ekoit7ylrc0nvrlv5zGkMxqtYpTO8LNRp7GI7mUqaiD\niroFp6IOKuoWnIo6nC1Rx2ebk3QUN0caGoaRSqUaxx3A3XffzUf3rB46dKi1tRUAEfX399u2\nDSAWiz355JPM3MjEDcPYtGlT46BfeOGFlUrl2GecN2fnWDfddFNjMo5t247jNNrzla985QXb\nMK8f+BOf+AQAIcTWrVsbfdHHrga5Z8+e5nt/++23N8tP/eXM6yhueMMb3gDgNa95zQse4WMb\neepPvcSpqFNRt/BU1KmoW3gq6pZB1C2rxI6Zv/rVr65Zs6a1tfU973nP0NDQRz7ykQ984ANf\n//rX+Zj3affu3b/927/dWC2mo6PjzW9+889//vPGriAIPve5z23ZsiUWi23YsOFTn/pUsVg8\n7tO9YNgx83333XfFFVd0dHTkcrnLLrvsrrvuau46SRvmtXZkZOTSSy+1bbunp+dEYcfMF1xw\nAQDHceZG1am/nOOG3Yc//GEAlmXt2rXr5Ef42Eae+lMvcSrqVNQtPBV1KuoWnoq6ZRB1xMxQ\nFEVRFEVRzn7LaoydoiiKoijKSqYSO0VRFEVRlGVCJXaKoiiKoijLhErsFEVRFEVRlgmV2CmK\noiiKoiwTKrFTFEVRFEVZJlRipyiKoiiKskyoxE5RFEVRFGWZUImdoiiKoijKMqESO0VRFEVR\nlGVCJXaKoiiKoijLhErsFEVRFEVRlgmV2CmKoiiKoiwTKrFTFEVRFEVZJlRipyiKoiiKskyo\nxE5RFEVRFGWZUImdoiiKoijKMqESO0VRFEVRlGVCJXaKoiiKoijLhErsFEVRFEVRlgmV2CmK\noiiKoiwTJ0vsdu3aRafg0KFDC9bcRXTFFVec/Dik02kp5YK156qrrmo878GDBxsl733ve8/2\nd+Suu+56wXi7+uqrF7uZC0dF3aLYtWvXxz72sfPPP7+lpSWZTG7btu2qq6669dZbF/JQLyIV\ndQvma1/7WvOoTk9Pz9v72GOPNff+8Ic/XJQWLhgVdaeR6rE7JVLKRx555OR1duzYIcTCHc9G\ne1pbW1evXt0o+cUvfgGgo6Ojv7+/UXLjjTf29fX19fU9+uijC9Yw5XRRUbfwgiC47rrrzj//\n/C9+8YtPPfVUPp+vVCpPPvnkD37wg2uuuea888772c9+tthtPLNU1CkLT0Xd6aWfYr1kMmlZ\n1nF3LeSxXizlcvmP//iPmz9++9vfHh4eBvC7v/u7fX19jcJXvepVC9aeycnJxknDRRdd1Cjx\nff8DH/gAgLVr1zar3XPPPcPDw5qmbdq0acHadrqk02nDMI4tTyaTC9+YRaGiboGFYfi2t73t\n7rvvPlGFPXv2vP3tb3/wwQfPO++8hWzYQlJRpyw8FXWnGZ/Yzp07m9V+8IMfnKTmSpPL5RqH\nZXJyclEa8OMf/7jRgM985jONknw+v3Pnzp07d05PTzdKfN+3bRvAli1bFqWRL8Gdd97ZDLmH\nH354sZuztKioO9M+/vGPN8Nv1apVt9xyy969e8vl8hNPPHHttdfq+uxp8MaNGxe7pQtHRd0Z\n9dWvfrUZclNTU/P2zu0HWlFfwSrqXqbl39l22h04cGBqagrA2rVrm/HXxMzf+c53rrjiio6O\njkQisW3bts997nO1Wm1uneHh4WuvvXbHjh3JZHLz5s3XXnttqVRq7v3kJz+5bdu2bdu2DQwM\n3Hjjjdu3b89ms29605v27NnTrNPstW6eT/z93//95s2bN2/e/NBDDwG47rrrTNOs1+sAnn76\naSLatWtXtVrVdf24wxf+5V/+5fQfKeX0UVF3pg0PD3/5y19ubF900UVPPPHE+9///g0bNiQS\nia1bt371q1+9/fbbG3v37t271K68nCEq6pSFp6LuNDhJ0qd67I6r+fn+G7/xG/N25fP51772\ntcce5IsvvjgIgkad73znO6lUal6FdevW5fP5RoWNGzcCMAzj8ssvn1snm802zxXe9ra3NQpH\nR0cbJW9961sbJWNjY8x85ZVXZjKZRkl7e/umTZuiKPrpT396ojB46qmnFuLYvRDVY3ciKurO\ntBtvvLHZsAcffPC4dT760Y9ec80111xzzR133LHAzVsUKurONNVjdywVdS+fSuxetD/7sz9r\nHJMvfvGLc8ullM2Y+/Vf//Xvfve7X/va11paWholN910EzPfeeedjSGJr3zlK//5n//53/7t\n3970pjc1Ktxwww3MPDMzQ0SNkjVr1nzlK1/57ne/u2bNmkbJ5z//+cZztbe3A+jp6Wk+e6Ok\nr6+vWfJ7v/d780JqdHT0nufceeedzWEBl19+eRRFZ/q4nQqV2J2Iiroz7ZJLLmk07KKLLlrs\ntiwVKurOtLmJXXt7e+fRWltbm3tXzlewirqX71QTuxP5q7/6qwVr6xLxute9rvHaf/rTn84t\nb55nXHvttc3Cf/zHf2wUfvCDH/R9f926dQD6+/td121UaE6lfu1rX8vMP/nJTxo/9vX1jYyM\nNOr853/+Z6PwN3/zN5m5Odf6Xe9617wHufLKK5tP3RjfHY/HwzCc9xJ833/Pe97T+JU3v/nN\nzcYsurmJ3XE1jsAKpKLuTMtms422/c7v/M5it2WpUFF3ps1N7E5u5SR2KupevlOdFas0SCkf\nf/xxAEKI7du3z93153/+5wBaW1u/8IUvNAs3b97c2LAs68477xwYGACQz+e3bNnSfMDGRltb\nG4CHH3648eNnPvOZ7u7uxnZzGk7jVOPYy//HlpTL5WeeeQbABRdcoGna3HZ6nnfVVVc1Qvnt\nb3/7D37wgxPNd1aWCBV1Z5qUslAoNLabaxk0PPjgg5deeum8+tddd90//MM/LFDjFomKOmXh\nqag7LV7uciexWOy0tmepe+aZZyqVCoBzzz03kUg0y8fGxvbu3Qvgsssum7sex+HDhxsbW7Zs\n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\nE5/4xCfq6uombyt33XXXjh07Pv/5z0/eFwkAt91226FDh771rW+F3+VU6l4FlbrxGlfqZu4Y\nu3GZN29eeEnj/vvvB3DxxRdPUif9q1/9ajQa3bBhw2RUfuDAgRtuuKGurm6S6i8WiwCWL18+\nSfU/++yzW7ZsWbdu3YoVKyaj/plGpW4sVOom1lDqJsqBAwcArFmz5txzz53Aao/y9NNPAzjr\nrLMm9R/yhx9+GMD69esn7wo0gHvvvffQoUOXXHIJpTN0WokJp1I3ihmYutdKLhVFURRFUea8\nudaxcxwnHo9P3minWCw2tAzLhGOMxePxyVuVzzCMeDw+SbcLAZimGY/HJ3uowQykUjcKlboZ\nLjyAmja5d28sy4rH45N9iWtqthKJRCb1pttrgUrdeI0rdXNkjJ2iKIqiKIoy167YKYqiKIqi\nvGapjp2iKIqiKMocoTp2iqIoiqIoc4Tq2Cnj8+ijj3qeN92tUF5bVOqUKaYip0y9iUrdbHp4\nQghxzz33bN68mXN+/vnnX3XVVcc+CjdSmZP57HClUun222/ftm1bJpNZsmTJ1VdfvXDhQgD3\n33//j3/846FijLFf/OIXr6L+keqZkPY//vjj3/72t4/61CWXXPLJT35yLO0H0N7evnHjxrvu\nuisWix3725M5+DOWSp1K3ew12eka+1ZOJmNj3MrJJ22IitzJUKmb9tTNpgmK77nnnk2bNl13\n3XWapt16661BEGzcuHGMZU7ms8N9/etf7+vr27hxYywW+8UvfvGlL33p5ptvLisra2lpWbt2\n7Zvf/Oaw2HFnvhhL/SPVMyHtX7ly5Ve+8pWhl0EQ3HTTTWvXrh1lu0MOHDjwxBNPbNq0aZRv\nAidz8GcslTqVutlrstM19q2cTMbGWPJkkjZERe7kqdRNf+omf6G5iVEoFN7znvc8+uij4cun\nnnrqne98Z39//1jKnMxnh5dpbm5+y1vesmPHjvBlEARXXnnl7373Oynl9ddf/6tf/eok2z9S\nPRPV/qPcd999N9100yjbHW7r1q233nrrN7/5zbe85S2ZTGbsO3jc90fZ0IyiUqdSN3tNdrrG\nvpWRaht7fiY7aUMmNnKjt3BOUqmbCambNVfsmpubC4XCmjVrwperV6/2ff/gwYOrV68+YRnH\ncV71Z4eX0XX9fe9735IlS8KXQRB4nieECD++bdu2n//8567rrly58pprrqmtrR1v+0eq52T2\n/aj6h7S3tz/88MPf//73R9nu8PLr1q1bt27dvn37tmzZctwKx3Xwj1vDDKRSp1I3e012usa+\nlZFqG3t+JjtpQyY2cqO0cK5SqZsJqZs1D090d3drmjY0/76u65FIpKenZyxlTuazw8tUVVW9\n733vMwwDgOu6N954YywWW79+fTqdzuVymqb9y7/8y2c+85l8Pv+FL3whXCJzXPWPVM9EtX+4\nW2655d3vfne43sBY2n9C4zr446p5GqnUqdTNXpOdrrFv5WQyNvatDDfhSTthS8bbwrlKpW4m\npG7WXLGTUh57izoIgrGUOZnPHrcljzzyyF133VVdXX3DDTdEo1EhxN133x2NRsMaFi1adNVV\nV23duvWiiy4aV/2xWOy49RiGMYHtB7B58+aenp5LLrlk9O0Ob/8JjevgzxYqdRPVfqjUTbnJ\nTtfYt3IyGRvvvmByknbCloyrhXOYSt3oW5+a1M2ajl0qlfJ9v1AoOI4DgHOez+crKirGUsZx\nnFf92aOakU6nv/Od73R0dHzgAx+44IILwmNKKR3+GEs0Gq2urj6qXz+W+keq55RTTpmo9od+\n9rOfXXbZZUOBGEv7T2hcB39cNU8jlTqVutlrstM19q2cTMbGtS+hyUjaCVsylv/eXwtU6kbf\n+shHbjTjTd2suRXb2NhoWdb27dvDlzt37qSUNjU1jaXMyXx2eBkp5Ve/+lXHcW6++eYLL7xw\n6E+4bdu266+/PpfLhS+LxWJXV1dDQ8N46x+pnolqf2jXrl0tLS2vf/3rT7jdYz87inEd/HHV\nPI1U6lTqZq/JTtfYt3IyGRv7VkKTlLQTtmTsLZzbVOrGuy9jMd7UzZordo7jbNiw4Y477igv\nL6eU/uhHP7rooouSySSAP/zhD57nXXbZZaOUGen9cdX//PPP79+//21ve9vevXuHPlhfX79y\n5cqOjo7vfe97b3/72zVN++lPf1pXV3fmmWeOt/6R6mGMTUj7w5KPP/74smXLotHo0GfH0v6R\nvLqDP+Y/+zRTqVOpm70mO11j38rJZGzsWwlLTmzShkzIf++vBSp1oelN3WyaoJhzfscddzz+\n+ONCiLPOOuvaa6/VNA3Al770pXw+/+///u+jlBnp/XHV/8ADD9x+++1HfWrjxo1vetOburq6\n/uu//mvXrl2U0jVr1lx99dXxePxVtH+keiak/WGx66677rzzznv/+98//LNjaT+Affv2/dM/\n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\nUqhuNZxh1W3ZvPls62J9Wam6PkEQTE1NrdPUbZIkU1NTh5NirC21Wm1qamqd0vKt65/k+Pj4\nyvQfz6l7XZ9CdcfkTKpu48aNJ/jKLoSIHYCdO3f+8Ic/BPD5z39+165d733ve6NodYlGToU9\ne/b80z/907XXXnv99deveecAPv3pT8/MzPz+7//+enS+Y8eOf/u3f3vlK1959dVXr0f/f/M3\nf2OMec973tM/LJVKr33ta9fjg84dCtWdlEJ1a85h1fXZv3//Zz7zmRe/+MWvfvWr1/yzHnjg\ngS9/+cs/93M/d+WVV65559/85je/+93vvv3tb9+wYcOad/4v//Ivjz/++Pve975wHepW3XHH\nHQBuu+22/mGhurWlUN0xOTXVnSmn/wzx27/929u3b282m+vR+Xe/+93t27d//OMfX4/OmflX\nf/VXf+ZnfmadOv/a1762ffv2f/iHf1in/n/xF3/x1a9+9Tp1fo5TqO54FKpbbx588MHt27d/\n6EMfWo/O77rrru3bt3/hC19Yj84/+tGPbt++/b777luPzt/znvds37691WqtR+c33XTTa1/7\n2vXo+XyhUN0xOXdUd47Wii0oKCgoKCgoKDhVCseuoKCgoKCgoOAC4QJZY1dQUFBQUFBQUFBE\n7AoKCgoKCgoKLhAKx66goKCgoKCg4AKhcOwKCgoKCgoKCi4QCseu4BT41re+lef52bai4LlF\nobqCM0+huoIzz1qp7nzaPOG9v/POO++++27n3HXXXXfzzTfLlUV5T9jmdM5dSZqmn/zkJ++/\n//5ms7lt27Z3vOMdF110EYAvfOELn/nMZw43k1J+6UtfOtXOj9fJmhh/zz33/OVf/uUzzrrx\nxhvf+973ntT4PgcOHLj11ls/+9nPViqVo989nZE/lylUV6juLLKu8ls/7a2r8ArVrTeF6s53\n1Z0n9XoBAHfeeefXv/712267TSl1xx13WGtvvfXWVbY5nXNX8ud//ueLi4u33nprpVL50pe+\n9IEPfOBjH/vYwMDAvn37XvKSl/zCL/xCvxkdVU1vNZ0fr5M1Mf7yyy//0z/908OH1trbb7/9\nJS95yQk+9zC7du36zne+8/Wvf/0EjwGnM/LnMoXqCtWdRdZVfuunvXUVXqG69aZQ3XmvuvVI\nkbwedLvdX/7lX/7Wt77VP/ze9773S7/0S0tLS6tpczrnrmyzd+/e173udT/5yU/6h9bat73t\nbV/96leZ+f3vf/9dd911OsYfr5O1Mv4ZfP7zn7/99ttP8Lkruffee++4444PfvCDr3vd645Z\nX+F0Rv5cplDdaRr/DArVnRLrKr/10966Cq9Q3XpTqO4CUN15s8Zu79693W73qquu6h9eccUV\nxpjdu3evps3pnLuyjdb6rW9967Zt2/qH1to8z733/dPvv//+X//1X3/b2972F3/xF/v37z/V\nzo/XyVoZv5IDBw7813/917ve9a4TfO5Krr766ne/+91vetObjtfh6Yz8uUyhutM0fiWF6k6V\ndZXf+mlvXYVXqG69KVR3AajuvHHs5ubmlFKlUql/qLUulUrz8/OraXM6565sMzo6+ta3vjUI\nAgBZln30ox+tVCovf/nLG41Gu91WSv3e7/3eH/zBH3Q6nT/+4z/u9Xqn1PnxOlkr41fy8Y9/\n/M1vfnO/Yv1JjV8NpzPy5zKF6k7T+JUUqjtV1lV+66e9dRVeobr1plDdBaC682aNHTMfPTNt\nrV1Nm9M595iWfPOb3/zsZz87Njb2kY98pFwue+8/97nPlcvlfg9bt269+eab77333htuuGH1\nnVcqlWN2EgTBGhoP4O67756fn7/xxhtP/LmHjV8NpzPy5zKF6tbEeBSqe1asq/zWT3vrKrxC\ndetNobrTMRvnhurOG8ducHDQGNPtdpMkAeCc63Q6w8PDq2mTJMmzPvcZZjQajQ996EMzMzO/\n9mu/dv311/fHVAixchtLuVweGxtb6c6vpvPjdfL85z9/rYzv88UvfvGmm246rIaTGr8aTmfk\nz2UK1RWqO4usq/zWT3vrKrxCdetNoboLQHXnzVTspk2boih64IEH+ocPPvigEGJ6eno1bU7n\n3JVtmPnP/uzPkiT52Mc+9opXvOLwN3f//fe///3vb7fb/cNerzc7O7tx48ZT6vx4nayV8X0e\neuihffv2vfKVrzzp5x597gk4nZE/lylUd5rG9ylU9+xYV/mtn/bWVXiF6tabQnUXgOrOm4hd\nkiSvetWrPvWpTw0NDQkhPvGJT9xwww31eh3AN77xjTzPb7rpphO0Od7rp9T/j3/84507d77+\n9a9/9NFHD584NTV1+eWXz8zMfPjDH37DG96glPrnf/7nycnJ7du3n1Lnx+tESrkmxvdb3nPP\nPZdcckm5XD587kmNPwFrMvLnMoXqCtWdRdZVfuunvXUVXqG69aZQ3QWguvMpQbFz7lOf+tQ9\n99zjvb/mmmtuueUWpRSAD3zgA51O56/+6q9O0OZ4r59S///6r//6yU9+8hln3XrrrT//8z8/\nOzv7d3/3dw899JAQ4qqrrnrHO95RrVZP1fjjdbImxveb3XbbbS972cve/va3rzz3pMb3eeyx\nx373d3/3c5/73OHA8lqN/LlMobpCdWeRdZXf+mlvXYVXqG69KVR3vqvufHLsCgoKCgoKCgoK\nTsB5s8auoKCgoKCgoKDgxBSOXUFBQUFBQUHBBULh2BUUFBQUFBQUXCAUjl1BQUFBQUFBwQVC\n4dgVFBQUFBQUFFwgFI5dQUFBQUFBQcEFQuHYFRQUFBQUFBRcIJx/jt21115Lx+LlL3/5iU/c\nuHEjEd1+++1raMyrX/3qlTZIKbdu3XrLLbfMzMycZs8ntXY9LudNb3rT0QM7NTX17ne/u9Vq\nreEHnXcUqltlg2dBobrjUahulQ2eBYXqjkehulU2eBacMdWdl3mxz1m897t27dq1a9e3v/3t\n++67T2u9Vj3ffffdDz/88MaNG1/72teuVZ+r5Kmnnvrrv/5rIrrjjjtO3PIsGvlcplBdoboz\nT6G6QnVnnkJ1qzWSzzde+tKXAnj5y19+4OnMz8+f+MQNGzYA+OhHP7qGxrzqVa8CcPXVV/dt\nePjhh9/5zncGyJkGAAAgAElEQVT2B/aLX/zi6fR88ODBAwcOdDqd/uHNN98M4DWvec3xGqwJ\nb3zjGwFccskl/cvZv3///fff/4IXvABApVI56elHG3nBUKjumA3WhEJ1x6NQ3TEbrAmF6o5H\nobpjNlgTzpjqzr+p2D5hGI49ncHBwbNlTBAEfRue97zn3X777UQE4KGHHjqdPn/rt37rLW95\ny1e+8pVn3eBZo7XuX874+PgVV1zRF1Or1Zqfn1/zzzq/KFRXqO7MU6iuUN2Zp1Ddea2689Wx\nOx779+9/17vetWXLliiKNm7c+La3ve2xxx47ZsuFhYXf+Z3fufjii+M4np6evvXWW/fu3dt/\ny3v/4Q9/+CUveUm5XN62bduf/MmfpGm6SgOUUn3ZxXHcf+Vb3/rWa17zmomJidHR0RtvvPE/\n//M/V2PDt7/97bvvvrt/eO211/793/89gK9+9atE5Jx7RoNbbrmFiPqOf5/+XP71119/mpcD\ngJn711Wr1XD8ET6mkaf50ecLher6FKo7kxSq61Oo7kxSqK7Pua66040tnnH6geKjabfbxpgr\n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", + "text/plain": [ + "plot without title" + ] + }, + "metadata": { + "image/png": { + "height": 420, + "width": 420 + }, + "text/plain": { + "height": 420, + "width": 420 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "fig1_combined <- ggarrange(ind_cts_mse_fpr, ind_cts_stab_fpr, ind_bin_ROC_fpr, ind_bin_stab_fpr, \n", + " toe_cts_mse_fpr, toe_cts_stab_fpr, toe_bin_ROC_fpr, toe_bin_stab_fpr, \n", + " block_cts_mse_fpr, block_cts_stab_fpr, block_bin_ROC_fpr, block_bin_stab_fpr, \n", + " nrow=3, ncol = 4, align = \"hv\", common.legend = T, legend = \"bottom\",\n", + " labels = \"AUTO\") \n", + "fig1_combined\n", + "\n", + "ggsave(\"../figures_combined/fig1_combined.png\", fig1_combined, dpi = 300, width = 8, height = 6)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Figure S1: MSE/AUC vs. Stability (evaludated by FNR)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "ind_cts_mse_fnr <- ggplot(ind_cts, aes(x=FN_mean/6, y=MSE_mean, color=method, size=Ratio)) + geom_point(alpha=0.8) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Independent', x='False Negative Rate', y='MSE') + ylim(0, 4) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "ind_cts_stab_fnr <- ggplot(ind_cts, aes(x=FN_mean/6, y=Stab, color=method, size=Ratio)) + geom_point(alpha=0.8) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Independent', x='False Negative Rate', y='Stability') + ylim(0, 1) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "toe_cts_mse_fnr <- ggplot(toe_cts, aes(x=FN_mean/6, y=MSE_mean, color=method, size=Ratio)) + geom_point(alpha=0.3) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Toeplitz', x='False Negative Rate', y='MSE') + ylim(0, 4) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "toe_cts_stab_fnr <- ggplot(toe_cts, aes(x=FN_mean/6, y=Stab, color=method, size=Ratio)) + geom_point(alpha=0.3) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Toeplitz', x='False Negative Rate', y='Stability') + ylim(0, 1) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "block_cts_mse_fnr <- ggplot(block_cts, aes(x=FN_mean/6, y=MSE_mean, color=method, size=Ratio)) + geom_point(alpha=0.3) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Block', x='False Negative Rate', y='MSE') + ylim(0, 4) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "block_cts_stab_fnr <- ggplot(block_cts, aes(x=FN_mean/6, y=Stab, color=method, size=Ratio)) + geom_point(alpha=0.3) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Block', x='False Negative Rate', y='Stability') + ylim(0, 1) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "# ggarrange(ind_cts_mse_fnr, ind_cts_stab_fnr, toe_cts_mse_fnr, toe_cts_stab_fnr, block_cts_mse_fnr, block_cts_stab_fnr, \n", + "# nrow=3, ncol = 2, align = \"hv\", labels = \"AUTO\", common.legend = T, legend = \"bottom\") " + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "ind_bin_ROC_fnr <- ggplot(ind_bin, aes(x=FN_mean/6, y=ROC_mean, color=method, size=Ratio)) + geom_point(alpha=0.8) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Independent', x='False Negative Rate', y='AUC') + ylim(0, 1) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "ind_bin_stab_fnr <- ggplot(ind_bin, aes(x=FN_mean/6, y=Stab, color=method, size=Ratio)) + geom_point(alpha=0.8) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Independent', x='False Negative Rate', y='Stability') + ylim(0, 1) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "\n", + "toe_bin_ROC_fnr <- ggplot(toe_bin, aes(x=FN_mean/6, y=ROC_mean, color=method, size=Ratio)) + geom_point(alpha=0.3) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Toeplitz', x='False Negative Rate', y='AUC') + ylim(0, 1) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "toe_bin_stab_fnr <- ggplot(toe_bin, aes(x=FN_mean/6, y=Stab, color=method, size=Ratio)) + geom_point(alpha=0.3) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Toeplitz', x='False Negative Rate', y='Stability') + ylim(0, 1) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "block_bin_ROC_fnr <- ggplot(block_bin, aes(x=FN_mean/6, y=ROC_mean, color=method, size=Ratio)) + geom_point(alpha=0.3) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Block', x='False Negative Rate', y='AUC') + ylim(0, 1) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "block_bin_stab_fnr <- ggplot(block_bin, aes(x=FN_mean/6, y=Stab, color=method, size=Ratio)) + geom_point(alpha=0.3) + \n", + " theme(legend.position=\"bottom\", legend.box=\"vertical\", legend.margin=margin()) +\n", + " scale_size_manual(values=c(0.1, 0.5, 1, 1.5, 2, 4, 5.5, 7.5, 8.5)) + \n", + " labs(title='Block', x='False Negative Rate', y='Stability') + ylim(0, 1) +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8))\n", + "\n", + "\n", + "# ggarrange(ind_bin_ROC_fnr, ind_bin_stab_fnr, toe_bin_ROC_fnr, toe_bin_stab_fnr, block_bin_ROC_fnr, block_bin_stab_fnr, \n", + "# nrow=3, ncol = 2, align = \"hv\", labels = \"AUTO\", common.legend = T, legend = \"bottom\") " + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 20 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 27 rows containing missing values (geom_point).”\n" + ] + }, + { + "data": { + "image/png": "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\n7FNTU3PiiSdefPHFybedtvhQju2NLxKOMQaAMwbAISIJnbe3yQCTDqz4M0WhYNuhXVqKw0R9\nfX1/H9XU1PzjH/946aWXPv74Y71/+YzRH3Upxjvjca4D4OWciOKOY5H0Hrml2PwlUH2wIsic\nDsU9+P7HFAOZMp988gmARx999KyzzgKwfv16AGedddacOXMA3HTTTffee+9hUmOvqanZvHnz\n3XffPWvWLACrVq36j//4j/fff/+CCy4YZsuhePVC++1NkU8KeDSsWT7Tn3DzhMgVlFBlmMDB\nOPVR7pUYCCQZpCkyTJ4lWc+1AAK5bCt9ygi4FVN0Zffu3a+//npVVdWUKVPOOeec6dMHEsOM\nx+Mvv/zy17/+9cWLFwO4/vrrf/rTn15xxRXp6d0M7pqamtNPP72HMtkQj+0BAdK2uub8M8aS\n5Sw7C5zILoYdMQbLHOrFpxgVrr322j63O46zffv29evXb9u27aGHHvrud7/b526jP+pSHJWM\n8bkuyUK/78clk14JtJ6RnnZ90RGTYuICOXOO1MnHOoMsxQJYuHBh8u37778P4JJLLkm+TTrP\nGhoaDke3VFW98sorp02blnxr27ZpmlIeegarI60ttc9tr31xe/3LinAtdrgF0exO051zXHYb\nMQmQwz0SgkFysjiZXRZnSTLNYbrD3Rb3Sdb3U7vjyHTp+I47/pA7maI3N9988y9+8QvHaa/k\nK4T45je/+bOf/ay//aurq2OxWGf9gLlz51qWVVlZOXfu3B67lZeXP//884ZhzJw585prriks\nLBzisT2wiBoVTaGeWTjU5UU3wWrHYd5UBYmxxa9//esBPv3BD35w1113/elPf+rPsBv9UZfi\n6GPsz3UHujqh6OYJQyp4neKIMJBhl5mZGYvFduzYsWjRosrKyvLycgAnnnhi8tOtW7cCKC4u\nPhzdysvLu/LKK5OvDcN46KGH/H5/Dx2p888/P1n9wrKsgQMUKhrfWF/x88rmdzx6drZvKmcK\ns+3KhGF72bbswMRwWkyxAHAyBdk29yZELjGVUfsPjJgimUIYKP6AiHy25ZROY/kpMdkR4777\n7ksmjuXk5JSWllZWVjY2Nj744IPFxcXf+c53+jykublZUZTOcChVVb1ebyAQ6LpPMBiMRCKK\noqxatcq27T/84Q+33nrrww8/PJRje4w6AhRgV1qmx+lZiKXTlJMgj+jiAzZNXpQK9B1PfPGL\nX7zrrrt27NjR3w6jPOpG+PJSjAHG/lw34pccrUVTORQdeYuhpfRKRpSBDLsZM2bU1NTce++9\nt99++89//nMAfr8/adhVV1cnM3qSS6WHCSJ66623nnzyyfz8/AcffNDn6+bn8Pl8yYebWCzW\nnzOPINfvfujNrT/06LlZ3rLO8IJ0RUkTdlTKfxXWXB3IiQubGBE4MU1QwmPXJESeKTKHnlHh\nkCywTN+pZ6RkuEeQ3//+9wBuueWWu+66S1EU27Zvv/32u++++7HHHutvsiOi3skrPcrf+f3+\np556yufzJfcsKytbsWLFhg0bNE0b9Ngeo44BnLFP8wq2+NJyTDOqKAwggDPWEWJHDuGACL5t\nwzT5tOMO6ftIcWRIytpp/WdijvKoG8alpBijjP25bnjX1xNpofIVGG0gG2YEpZeMbPPHOgMZ\ndt/61rfefPPN55577rnnnktuueyyy1RVDQQCEye2q073N+aGTzAYvOeeexoaGq666qozzjij\n9yh8/vnnky9eeumlzgXirjjSevXTVeX7Hs/wTFG617RhQJGuVSWMnektn+Q2zGjNDmlG8iOC\nIMZdTiMnK9EhUDcwNlGhZSozZvPjZh7Kpaboh9raWs75j370o6SWmKIod9xxx3333TdAqHtW\nVpZlWbFYzOPxAHAcJxqN9qj+yTn3+w88Ifp8vvz8/EAgMGvWrEGP7THq2t2zbvdzxVNu376p\nSngcsKS1l8yKtSRlKYqv07ALh8XpS5E1YBKXZVEoiFiMEnHmcjGvD35/qhrjkcK27dWrVwM4\n7rh+zfFRHnUjd3Epxgpjf67r3QFZsUu+/y9EIygoUs44G2kHERVqxxGthSsHZMEMDf24FENi\nIMNu2bJlyXhhwzAALFq0KJkem0RV1Z/97GdnnHHG4egWEf3oRz/KyspavXq151Drw7y786fl\nVU9keKfwvtJdXZwXalpFIvHa5D3ZhjsjrsfVzucVJpmmyTZyhCFyeh/bFYco07J8uXnuC5el\n3HUjy9lnn/3HP/5xy5YtnYGe27Zts237zDPP7O+QSZMmuVyuzZs3J0sFbNmyhXPeQ5OsvLz8\nqaee+uEPf5j0Acfj8aampokTJw7l2B4EbTvdcWoM83cTSxe0BS5qrK11exwwm4gRAXAJXqRr\nAECEcJCVlIql5/bdVjwud22XFbuoZj/V1zHOiHGQBBHLL2RFE3jpVD79eIyTcknji/7KhTmO\ns2fPnmQk8YoVK/o7fJRHXYqjj7E/1/WAGursxx5hPh8Ulepq7bZW5csrMOQkWdWPnLkIbAYR\nCk4e+mlTDIlBBD5uuummG264YevWrR6PZ+rUqZxzAB6P55lnnjn99NP7E38aPps2baqoqLjk\nkkt27drVubG4uLjHI8UAfFrz7Lu77sv09G3VJUlTxGRdr0L85Sm7b9i0gBgSygFftGSK7jRL\nplu83/V/iyjTtgvMuH7BxSwnd4h9SzEAL774YufrZcuWvfbaa5/5zGe+8Y1vTJ06taKiYvXq\n1V6vd+XKlf0d7vF4zj333Mceeyw7O5tz/utf/3rp0qUZGRkA3nzzTdM0L7roopkzZzY0NDzw\nwAPLly9XFOWZZ54pKipauHChEKK/Y/tjkd//XiLhEHSh3Dp7ob1VfL62KqC7QopqSfIrYqKu\nqQAMg6IRPm2G8tnPQ+8lkW5Zsnyjs3ED1ddB15mus9w8dPVRWybt2GZv/pjlFYgFi/iCRSkH\n3sjyj3/8Y+AdLrjggquuuqq/T0d51KU4Ohhfc10PZMUu5tLh8QKApsrtWynQzHLzhng4Yyj5\nLHLnQ+jw5A/9tCmGxODKbZqmzZs3r+sWt9v9pS996bB1CQD27t1LRD2qcV933XXLli0byuEJ\nq23DnjV+V6Hgg9z/slRF46yGh34zs/yifWVZhiusdkpRMGKK5rTY3NM7c4KILKJC20zLzNLP\nu4KXTRvipaUYmN6yiKFQ6Lbbbuu65cknnzznnHP6a+Gaa67hnP/kJz+RUi5ZsuSrX/1qcvu6\ndeui0ehFF12kadoDDzzwm9/85v777+ecz58/f9WqVUlxzv6O7Y/zszKa3e59CSMmpcmVm2ct\nfCsr7z+qK05qCxhceFXVZcTJsljxRHHGWWLBYqg9q5JQU6Pzlxdk5V7m9bH+lmiFAq/CvF5E\no/Zf/8y3bBbLLmH5h+ux6hjk3HP7dqNyzqdMmXLqqaf++7//+8DC46M56lIcHYyvua4HjMCI\nyDTBGFOUQyjNyTj8w6pCkqJfGPWSaehkiGrAra2tI9efQyEZAXDXXXd9//vfT275564H3tl5\nd7pnSp8zMQExRxokHSKbiIMRKOJIT9h16d7ppeH0iGoZot11x8lKiFxTZHU5nGxJLseeYJna\npMn6suW88LCkBh+bDKVux4oVKx577LFR6MwAJEfdj//nf1688GJTkgTi0rGJBJjOMDfc5m1p\n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\nilBdQkao6kaMYzcMqa2tveeee1J5xDVr1jzyyCP//Oc/U3lQm8OHDz/88MO33XZbry2H0Mhj\nAaG6hAjVDSpCdQkRqhtUhOoS0icj+Qjh5JNPBrBgwYKarjQ2NibfcfTo0QDuv//+ATRm3Lhx\n9tVzu93V1dX2xrvvvtveaJrmAB4rlmXLlgE4++yzo1vq6upqamoCgcAAHuXSSy8FcNxxx9lX\nuLq6etOmTVOmTAHg9XqPwMiRi1AdF6pLOUJ1XKgu5QjV8TRS3QgbsdM0rbArOTk5Q2hPIBC4\n6667htCA5cuXX3HFFW+88caA96woin2Fi4qKpk2bZovJ5/M1NjYO+LGGOUJ1cQjVpQChujiE\n6lKAUF0cI1R1I8yx64nq6upvfetb48aNczgcpaWlV1555e7duxO2bGpq+u53vzthwgSn0zl+\n/Pjrr7++srLS/ogxdu+9986ePdvj8UycOPHOO+8Mh8NJDrpgwQJVVR999NEvvvii+6fJe3vq\nqadmzZqVn59/9dVXr1+/vqKioqKiwg4d6Olc5s2b98QTTwBYtWpVNM7g448/XrNmjX0K1113\nHSHEdvxt7Ln800477QjOLg7OOQBZljMzM/trZPdD9/24wxmhOgjVpRyhOgjVpRyhOows1Q3M\n2OLgYw8Ud8fv9xuGMX36dPttRkaG/WL8+PGWZfFuA8Vf+tKXABBCiouLCSEAJk6c6PP5OOdL\nly6N7quqKoDTTz/d7iQOe6B42bJl3/72twFcdNFFvNtAcZLeHnroIfsjSimACRMmRHdMci73\n3Xff5MmTAYwdO/aWW27pfnbvvPOO3X7v3r2cc9M0s7KyADz44IP9Ojt7oPj4449vaGhoaGio\nr6/ftm3b1KlTAVx66aWc8/4a2f3QgyCQQUGoTqgu9QjVCdWlHqG6dFJdOsjuk08+sZW0bt06\nzvmbb75pf7Rjxw7e9Ys5ePCg/dE///lPzvmePXtycnI8Hs8//vGPtWvXxnaye/dup9MJ4Lnn\nnutuTFR29fX19nVfu3ZtrOyS9NbW1mYPbi9dutTv92/ZsiUaT2CaZvJz6T65Hnt2lmUVFxcD\nWLlyJef8o48+AiBJUm1tbb/OzpZddxYvXmzHW/TLyISHHihVDDZCdVyoLuUI1XGhupQjVMfT\nSHUjbCq2e2iny+WaM2eOaZrNzc3BYPD++++Pfv2xK6VtVFWVJAnA1Vdf/Y1vfOPjjz/esmWL\nz+c755xz3n33XQA5OTkvvvjiihUrHn74YVsc69atS2JPXl6evYxlxYoVnPPo9iS9ffrpp01N\nTYSQ+++/3+12T5ky5cc//nF0x76fS3copVdccQWA119/HYCthoULFxYUFBzZ2cVRXV1tjy33\ny8ieDj2CEKpLglDdICFUlwShukFCqC4JI0l1A+HrpwL7eWLRokXdP7Is68Ybb1QUBYDH45k/\nf759whs2bODdBopfe+212bNnx16XJUuW1NfXX3fddQmv9eLFi7sfMfo8wTkPBAK2Fz9r1ix7\nF9M0k/T2xz/+EUBubm60t08//TS6Y/JzSf48wTlfv349AE3TfD6ffcUee+wxznm/zs5+npgy\nZYr91jTN1atX22Pat99+e68XPM7IhIfu33c/dAjVcaG6lCNUx4XqUo5QHU8j1Y2wEbuEPPvs\ns3/4wx8IIW+99VZbW9uTTz6ZpPF55523fv36vXv3/uEPfzjnnHMopc8999wf//jH0tJSALNm\nzYr7DnpNaeNyuexlOxs3boxuTNJbUVERgObm5mgqwj179hzZuXRn9uzZEydO1HX9xRdfXL9+\nvaqqF110UXJ7eu1TkqSFCxfOmDEDwK5du/prZMJD9+ukhidCdVGE6lKGUF0UobqUIVQXZaSo\nLh0cO3u1iNvtnjlzJoAHH3ywp5ZPPvlkaWlpRUWF0+m84YYbXnnllUmTJgGor6+382tv2rRp\n69atAGpra+fPn19RUfH000/3asA111xjxzNGSdLbrFmzVFVljK1YsULX9d27d//kJz/p17kk\nT0595ZVXAvjRj35kWdbixYvt6M6jOTsbOyQbSSniAAAgAElEQVQzEAj018iEh+7jQYczQnWx\nCNWlBqG6WITqUoNQXSwjQ3V8hJBkoDgaWqgoSkZGhn2hAbz11lu861DqgQMHcnNzARBCxo4d\n63A4ADidzk2bNnHObddbUZSKigr7Ks+ePdvv93c/YuxAsc2rr74aveL2mp0kva1YscJuKcsy\nAK/XG90x+bl8//vfB0ApnT59un2U7skhd+zYEbXk+eefj27v+9nFDRTbnH766QBOOeWUXi94\ndyO7H7rPX/sQI1THhepSjlAdF6pLOUJ1PI1Ulw6y45w/8MADZWVlubm5l1xyyaFDh2655ZZl\ny5Y99NBDvNsXs3379q9//et2epjCwsKzzz77o48+sj8yDOOnP/3p1KlTnU7nxIkTf/jDH7a2\n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\nStnQBkQFKXa2owHX7XOd9b73XBRv8LxAnlGOck7Hug6Y7cQ47/iZzTQ9+QT19oIIQQ7d3aQc\nrlXltu2n5rN4iXAc6uu3P/lfKOSZmUBoNuiS7ecC6TwDID56ibQW8eCDD771rW/9v+/4nT/8\n77e/iMu52Ujy8hH8S0+4xXdXUFaKVDsHp6P50XlM+G63OEFVbKpb+TTXP5NDmDPeImNmplZc\n95r5Db9Qym1gWMsGYAEhpOcInxg8O0MDg0zA6EGUu19ACa01XKtTd/d53CnlmWeeefDBB//5\nn//5hz/8oTGmc/Dyyy+/5ZZb/umf/mlsbOzuu+/+0z/90zM/sM6s+9P/47994NWvaoInjYEx\nXdrERJHnlaXMJ3FXqeQKgUKR1q2j/kGenxVbt9MptcdkRm0P0gZg4XWhtG2Fcxr70Z6E8JDM\nYug1F7vKrmF0Zt0999zzR3/0R6fpV8y1nnty9Kv9xSuJqNYePTj3I98tpVlTm6gWHUp0I85q\nodebUjgXjTmUGh2DNYRgq8GwMGADOIYTcAYmgImIoYgtk8YCLVvYuO0UwXZycwAW1EHMnW3Z\nTsYPAIh4sTwWbC3JTnWFXaycBZBRQLAAJuW2lI7kw320pE2fCt6SIC/AvXbfc/4b5sW6Qddt\nGzPsuy1jAyFeUSpa5j7XuSofAtjVit7S233ZGUzaneOxrjPreG7WPvYT9PWRlHZyknc+hTRG\nb5/I5ZHPi6uuoYFzSOHBzYbZtRN799All8rLLjsdnbvPTZyjGbszB2ZTnZns0iVn/Yqsjiyr\nidlkal/Vreack5nS5dMgP95q5BG44dJJTJT5yNXt5HP/3958lvf7iRSBGMay6clvc2WY8/PB\nricpZdp2Cb2gfrVCUrmMdsv++Efi6mtOLWM4F3DJJZfs2bNn6eXw8PCtt9767ne/++qrrwZw\n++23X3PNNTt37jx7AwQ8L3PdJE1JSENUlY4lKKKI2ZPCBjk4jm02xcQEcnnoo2p0Tgk6BhFC\nLmxjMa8wQ5kBASGO3+q6iIs4FuXcxpHuV041nu7KbSgGQ32FS+fa+0q5dQyUw03MJjXtRDem\n6k8Vne5qe58jQ2trsCkzBHmKlLUZhGADgjIwBAkGyDJZwkI/sqOVdcs3ZRf+v0DoaGm+MsEC\ncsFcb5HudZJ9DAewtOB4l/rcWE7sUoRF1Lqz/Yedl1lQU/aWzViNBi2YiAzDFyKxlsEFKZ9q\ntTcHfkHKXtc5FCdnjNitgVgHAOD5OXSVyHEAiP5+bjV5dpqDHNatF79wFeVeGHNiRmsMViO/\nDuI0kBHKF0RfH8/Pir7eC4fV4SKx40ZjpicZp/Eef9OKJ8jZph3dP+vOBk7PSaoXVcZdEyYJ\ng4hrSJ2c18NApttp1minM8rxyjU3cTMnzBWChQUNM4yJG8lca2q+Ky16TsGbnRT9w/RCc8VB\nDv3KPvm4uPYG6lm5JGqNohPpSqXSL/3SL73rXe+65ZZbxLIP57LLLvvgBz94IjfOMwMCkRSZ\nNYGUkRUGVpEAOmkEVlJCCApyyFLs3Q0/OPXBheD3IpoCCEHfyuuOoBc2A1v0vOxiV9mLeB4Q\nieHuGwynM429XbmRSuESw1kjPpxzK0IoQPnCY9itfW9iiKen/2M+aTpuWcf7JUkQLJtOxSox\nAyyhIB3DBGRkDQAwg8SRJcbyklgcoXF8FPs7slIGiKnTkQIABGwGr5PJI7aWFDG73O6QvKVr\nEir0mj1VNdKiYoJCf7ZzTGy0PCwAy/AFTWptGIKQI1HXpiBllxT/s1p7RalQOCPb4ud+rFuA\n1rQk9RMCfX0wmnp6xPZLXyirA2AzzO8CCfjdcE+PXFwMr0d5wUD0wsEFTew4TeO50ecGnu4J\nr1nxBKFNOnOgKg7nvMpJWB0x/LrNPFgFh8NGPKGkl+l2K512ZBC4XQAZ3xbTrunmXiX9wC0D\nIIIQXqFlnKSQ5LieHSqN1j2ZBH0riPxODnJdrvTanzwqXnnz8W4paxdvf/vb3/Wud73lLW/x\nVrKV8jzvC1/4wpkf1THwPT+o11Kpek3mJIkVlPg5nWWqUOqInQkWrs++jyRFbR7hKS6a8Lvh\nlxcflyvByaO0DTjxCQCsRnsCOoZbQNB/ofnqXMRR8FRhpOdVUrgHZx4pBoM9+S1EYr69P+/0\nZTaK0vme/Jae/NZq++CWrium4/m5ZLolStJMp/EoYAhSCF9IR2cN6YbGpJKkYQFowIKEAAFW\ngDqVrqYjkTsy5ZaScR1Gd9RcXM7YALZQiy8XqysgXLQV0gxHNNmaPAEO7WxLFkGUiGIXz1ms\nW+KXEpRaBhAo2TQGgBQiJ8V8ps8MsVsTsQ4Aua6tzo8yzWRZIMWWQlElidx26YvTAkkXlath\nMzgvnXfVqnbyMEmJgSFaHmOlROF8LjFcERcwsbMGM9NzmzzfX7diMwkGmtOz0ejuVrlYS7UF\nM1iAJEgKeCQ8IRxBzBBNo+qmnSNiSwCRqEVjgkTgdC1FJe2KfNNGQTFK53ynKDREqlU18qYb\nNnC8JnlUyHTc2PfDosulrq0v1NyMPJ+7yjw+Rlu3nfL9vrOFf/iHfyAicXQKs6M+OVvq8uMR\nBkGzVObZ2WIas4DUrIyJyj3dpcVoojWFkpOY1o/Yp3YIzz/1iVV6HipG9DwTKp5FfT+cAlqH\n4IQvuE3ZRZxn8FRhY+W1XbkN1fbB56b/nS2DeXT+keHy9et7XlH0B4lkZhJH5dbl84GkmWgq\ndTdn8JFOCkEgwSaWssBWCBFYGxETQTBLQUfaVXQsiSXD0pKIoJOqW9DX8ZFZ29l1PcLqOqWy\nBvJIxo87jiukOBGcgXwsvmcgDahXPzMj1gm4KYW+rbcX76vB3Y7TIZQOUWwWjE58sUDyzgDW\nRKwDQJXe9q5dPwZRkIutCZvNkYEBvISAFpySWGitHR9Ds2G1Jsu07ZKF48ZcgP6vuHCJnbU8\nPZ1srOzJvj3oHZuuY2AyTQ8nWTS2p+QIa0nAdr5bGmxhjeGUOTK2pKQLEVZ1TZBOAYA5cfUc\nyOb99cSsFv2YCDCKAu3V69Ooe2FNspIySolBmSVmMLuWgrZTs4/YwWrXwC/QC6wCpkLBjo1S\nuYv6zhOxnVLqzjvv/OxnP7v84HXXXTc7Ozs6Onq2RnU8+kqlWQExPl4jqcjIIDfY06MW/vLM\nWcaWRU8fdXWzH2JqkvN58s4tCyi2IAXhAgQ+owZeF3GOQpDsDrd0h1vWd79Cm8iyaSVTtejQ\n+PxjBPJVF0MLKCmdSjjiCjXfPuQ6qs15bWJmTsh3KBOw1iauUEIqY9nCsGHDmgBrF8ojiLhD\nZwxIgHhBLLogsjtmQUILOlJrlxJ1x4A6ueljGjCIvJ1tiD6fW4CXkS+RKWQaShBSw6EUhhmA\nArLFHWGXKD1TotS1EutQKM5dde2+nz+15dAoMR+87IoN60demDT8dKAzZRwXRGQNz86gXuc4\n6kwWcl3kC9Tdg7XTCPgl4oIkdmnKM9O0bXstPxPM9xzTlWU204fiZFc7GrDxFYcnq33FY3aw\nmEkzW0bGdiazfoL1kUpC4QmwzbJ0BiKwnNayaE6jS8mcFE7HtYngzZoeGzS8WiPoVYnJxVnm\nO4KtJFIkHEVQQWiD1sQub6oWbL6Kyt0vKP1GpTLPzVF3D9QansHf+c53lvYdvvnNb+7atWvp\nrUajsWPHjhV3K84OFneNwrAwUypXGrVWWJDlkrM0qeJE5AsodVGlAiIKfDMzLfMFrB85i6M+\nHn43dAv1/ejadrrELhexRuHIwJEBgNDrrRS2V/KXNJLDjfjw/pn/KPrrpHQBNka70pdECjp0\nNztO0IgOx1lVStfoONENQSoF4rQmpBCWmElIIhYMy52yWYaEXayHJTB4hTwLM4QFdaooBCwf\nu4MLdBJ+zMs5oQWBYEh5FKeAZtlvdo3zDW0oAhJwj5C645pCsItkjgBzmondWop1S+jufqRv\n6Fu5woZc7v9aN0jngnxNSuqp2CceE30DttXE2CjlC+x6EALWcrOBQ6PU10+9fVS5ILooXmDE\njpnrddTrnRrS1tTuwCktf3N/kvyo1uhx1CbfU3OHrSNx9C5tbG1kuGW0RyIvJYCSRVPYzLIH\nkGmR8IgkWYdgfSnaxlS1KTsylwkTGb9uxvrI2HkvC7tilSqpmZlh2RpmA5SVLLS02989pccH\nxnJesoF6e5+nyewyUODbw+PUU6HeNdwuanR09Lvf/W7n5wMHDhw4cOCYE66//vozPqiVwVna\nUQI5JFAu7wtDzbzZXxQRpylLQeUeqvRiMUBTqcs+/XNRqdCZqtJijawFAE7hhDI76aG0BYUN\nIHVGW5xdxNqCIFUON5XDTcYm1sZRWicSkqQgR0p3vPpkIx41VjeiMWZDBAklnYKUnjaJYe1I\nRcKH4Ey3QMSd5DAvqOksAIIAMYgJ6PgSLxE2ZoAMKSz4nrDB8sm6XEPKILF8FgswGJpcl7Ok\nY7JHkmALQmSW+x3lENSiabJYXJVZQJ7mXbw1FOuWwAwSVMiHh4w9d4rsqX9AXH+j/V8/RrlM\n/YNYnrBxXYR5RJF9/CfiZVfR4NBJ7nN+4DwidicXQ1jDrRYaddq0pdOPVdt4/8z/HOq6duFq\n5t3taEerPeL7TmdGZHVWR62WWsbOZplPIlyWRQs0IMkw19JmDpErfQBEAjAEuFIIi2YzC+ow\nnoBDAUQqPV+n+djGvlILO7UEkGW0jI2tkbFxc+WmipzGnGCLSu/qt2UpzHO9tqaJ3fbt29/z\nnvcA+MpXvnL55Ze//OUvX/7uwMDAb//2b5+dkR0PAlfnqRDGhqN6XRorBaVCcBCg3YIQtG6E\nhoaxbNlNSnGQQ71+ZsrvdYTmKFoTACM/jPwI5IlSAHTR4u4iVgspvMDtMdb4y9bGjnRDr88R\nfjEYqEfj1dYBV4UMEAlBkogn67skXCFlM5kSLDXFmYmWUnSSFIM0A2CC6djKLmsjJixJQCzT\n2y1/fnU6mLGBI6EtHXmLAQnbFBUmR8BasAJJYs2QghK2ReVFxnRCsWY4i2QxZfZOM7FbS7Fu\nEZZ4NksHfR+cdYjdbKans6xLyYGzuCcbRTw1Sb0ntjXxfeobsD//mfB9Knef2cGdaZxHxE5K\nnhiD58NxSUmGIAIbDZ1xkogkFVsvwfbLqNTVkVKmuiVICVIAmHlPFO1stUc8TywoeDXplJes\ndRgNY6pa54RYvobrmGYaAQkjbCMmX1hWgkDCmIaUxdQiScxIQ7RcJgFDncWmlFlqhXOMqFMQ\nPCIpRTXTZLx2NuUVi2G7RbNA/yBW1yqX/ABJAq1Xef45iFtuueWWW24BsGvXrl/5lV+58847\nz/aITggaWkcbNtoD+2h2ukgqESQsc62aeZ53yXYMDFK5+3jpLgU5rtfOjO9gNIlkHrl+AIhm\nIAPk152BX3sR5z9cGWYmWk7sBClmAyJHhnm/r5lM57xl2njmojdYiw+5KHoqz2wVBxJOaptg\ngpRgK0CS2Fgs7qQuClUhiJY87ECAOVIPCyxq7wDLpDR7ltUyUzwQtCWvs+VrAUUswQmksnaj\n73tEDUZHPpFYu9RtIjI2f5oLF9ZQrFtCTojri8Vex6n5ethz57X+f0bHuhynpvV/HxoY8s4O\nt+PJCZ6bo/JJi3Mdh8rdPDVJxdJ5U2K4Ik727J+cnATQ29srVnJWi+P4r/7qrwC8733vO02D\ne0GgSq+4/ka025zEyDRZC0EkJbkegoDyeRwtVzc2W+ohcSBJftY8wuoAsI2T5BBhIWfbtLaq\ndU4e219GMLqbmM8DJiJSiqhlbJ6kJAAUW5MYVFKROiBJhq22ZIBOis+IE6wFhQiIahZz2pXR\n3IZiWdZrEJIGBldV3SMljx3CyAbk13xl4yOPPHK2h/A8IMcRW7ZGUv5MqLa1RUZCHENc7Tv9\nm7acsNVb4PNze7FxE5zTHgRNCrk48ZUPk5zuX7iGYa19/PHHe3p6Nm7c2Dny6KOPlkql7dvP\njS5J5xhCry/Ofljwj6xPlPCMTTs/OyLM+73WmiOteog8t+hmoTYxQVqrhRBK+poThmW2YAsh\nBQNExnRoW4fMiQUut8jzCJZxJL1Mi74nEhmzjEVB08I3iwEBKKRtqkhiw8IBBZTNuVeA/CHP\n7VLSAKm1eSUBxHaBzGnLMdvuMyW3P/dj3RJ6Hef/7O35H/PVW7pK23O5uUwXpNoa+PvjeCbL\nXiKxSxsA4L7QZ1cS8zO7aHgVa9ZcyGOj3NtH3edzd8WTEbuBgQEAhw8f7u/vB/Abv/EbAD7/\n+c8Xi0UArVbr/e9/P84ZYgchqNSFUteqU+cdEyXMa/1IrTHie3LZlZY1pJQMAJGx81kWHMfq\nAIhOvT5bmAZkIEBKcMYsibTlyJhK5gQZEgcAJJFlRGwdEsgaLE80eYkYroBQ/qHWYd8pD4f9\nPDWJfGG1HnWOw2m6RoVSn//85wHcfvvt//qv/3ro0KETnXbHHXecwUGdDGwMzc5MFopppmeT\n2LXsS2GF4KhNJyJ2QpAQyPQZIHbSRTK/sP2qY/gXhHT4xeCnP/3pu9/97p07dz7wwAO33XZb\n5+CXvvSlBx544Lrrrvu7v/u7rVtfsMHk+Y28P5BmDcOZpAX246hQ27jzsxBKkpeaWVcdEdc7\nIidIulLFusEwgCKSSgSZaRNJIhDIUiZIGJYC1gKdJmOdaGYhABawGi7jSB9ZwDK5BGvIEzAZ\n+ctZIcAOUiMC10ZCuCBrmedNAAAgAElEQVT43J62XX2e3+M4AGJjNwS+Q2SYI2u7lAIwr/Ut\nXaXwdPaKXXOxrgNJ9Oqu4lX5XCClQySAhtF7o7imdWU1PNhars5zq0Vaw3UpzKOrq/OOiTH1\nKBgYetWR5eiKYHOU+p0bDet5K2agVkAQcrNx4RK7Y/CVr3wFwCc/+ckOsVvrEKRAlplH46Tb\nUc7RyTBmayWEgWXEln0hVszbGoG5PIRJLXXWlJBEmbUAMrZ5Ft0ttBclTcRQQBsmMCAmppWF\np8Sd1tdQAnkV7mnOFrxKIReiXkMYrqqHsZDQ+vlPOyfR2Yy49dZb77///ocffvhEp507wY6I\nFFF3mrhT07GUmRAFKQux5elpBLkTcTuWknV2Bsh30A+TojUBZhSGEVwkdithfHz8jW984/z8\n/IrvPvbYYzfddNOePXu6Fp9AFwHAU4WtA2+aqD7eldvQOeI7xY5mrhMMA7er1j7gyHBJyK6k\nVwiGWvG0J/PNrCGES0RKuNpEDCOFTyC2VpKCFMakAmwXbmcZkgCC1XCYxFIjMgIzpIWQrFPy\nmBFTAYuDIILLUZ36Nbwc1Q15imB1vZi/us9zRcev1JoNygNQN+YXwjAnBYCpLHt11+l90q25\nWLcEAoqLUp+yo35n/fBqNXbG2AP7sO9ZzoWsFLRGsyW2XUIbNoCEUMivBwA6KTFJ5jH1GLov\nQzi8cITTlFa/SHYUsmy1J69NrFUZ1kuHIwNrs6k03dmONvnH6smJRNsxc10iTU3ENjjBtqkl\nMEDGsDiS7xOEtjGeDAMtM0l2cVUpLWoBCSn0YlfPFe9JbHmRvDnSC9lOJlGQy6uZaZRKtJoN\n1jWarAMArFu3DoAQore3t/PzuQ4p40rv1id/Nsq2nGhLIM9rVyo5azA7w4NDtJKYg7GYjzjN\nUAGKmxe6jZ2kKvYCx7333js/P18sFj/3uc/deuutS8c/85nPvOY1r7njjjtmZmY+8YlP3Hff\nfWdxkOcg+oqX7518KO/1K+kD8FShN39pO53znAIAVxVLuZF2OuupI1HLU8UGJjy3YJG2kzlH\nhkIooTyjI4IkgMHMkJBWKOZUgsyCqR0RrCWXIdApi2UQQbDR5AnoTPgSaVNWUg5AC4k+CXYR\nVcWIAhSnKYUBca+Istxw56vQMnbY88pKWcacNjcUXADzWl+dDzce91w4tVh7se4E6HFUj7Mq\nLsETY3zwAPUPHalaLhTtc88Kz6PBIVIobQHoecKUSSAkdAwAbNE+DDnHzqqfeiTOUOw9i7iQ\niV1uXfeNP52f7F7J8o1IWWnaipNa5gYnm2WZQhAbsyyRZhhgy+woAy2OpOUci5ZiASRsrAgJ\nK6fshGWzlP8nIbLJ6aS/4Hj9nocoWpVyju2qEnvnJJbcOP/+7//+7I5klWgYM87co7MrGo2O\nbNNvNaaEnC2Ve+ZmqVRasaENWU1nSr4jFLyLmaaT4jvf+Q6Ae++9tyM4WUKxWPy1X/s1rfV7\n3/vef//3fz9Lozt3ETjly4beunfyoUrhMkECoNDrm23tdZ1Cp8whdHurrf1KeFIsJFSkcLqC\n9bVozHcqljnJagQpmaTMaU4VeUo4xlpBQkJqSwBLsIEAORYSJCQ6GbyODsYYcgAYeBaCIJpU\nOdJmheFwvSaGrQhz3KqqzaEKfTPJhZulKgHIgLrR23IBgLlMXxnmuh3V2cZ5ZanonuYouuZi\n3UuFMdxooFzG8kSJEOgqcbXaEZGv1ATqWPgV9Fy50IUsa6D6DGRdVUpmldSOMyPWss/rarBW\nH/8vHURCU/HpxmRhJRWFEB6zmXazUkqSNdsYNmIbs83AR/mqxIodLZY+ScOcMQuyyqp8jKW5\nJpiURaIAQIEzdFybjgNz4jtaLZ/dqqBsQ+tUOYhjrMYwU+sLx2L7rONwq+3vezYftaUULkGA\nIET/7JSzZ5euVXlqamUjHmtZvoBllc2QNU5x6YNJkTVgz/NNiVVhfHwcwE033bTiuzfffDOA\n3bt3n9ExrREMFK9c33NTtb2v8zLvD/aE25Ks1nnpqFxf8ReibM4uC5ueU8r7/dpGgdPliIAg\nPKekVCDIyUwMJsBYtgQWQoINIJT0lXAECQI65mmCSBJ3lFaGHEOOx+26GIbwVOc8god2KnvY\n7fUIIZqO20PQ/aIuvC0ADDCXZpfnwrwUbWurOhvxPQAHk/SmUvH4bZyLeKlIEhw6ePyeKXk+\nH9zHabrK2wgFv2dBN6xCFDejeEVO6NU9HAFOIuTOkIfo2cKFm7EDkMgez9bFiqWmJDx3aFIf\ncAp+pRk1Xd3xmuOO5MPpAXkgH8KJHevoRLC0BACGIQFpjWZlxZFdUVfbuZC0BADBukV+aaVZ\nqDQnvuTlVJNIgue0yUs5MDOFgYHnERNYRqbPtY5Vq0dHUPy8OEd0JxzH8sC+7pkZFgQmYhYE\nYisYTr3KWca1qm3UUekT/f1H2HaS0MjG1ffhiecQT6M5ARiUL0N4Kvw121OY2wFIwKDnygtd\nezcyMrJ79+49e/Zcc82xDQYBPPfcc1gsJruIYyCEWle+wdh0svbz7nCzIFEMhmaau1wZCqEA\n5Lzubt4219wTuD1y0SkxcMqWbSuZlsJV0gu9fstZYtpxOpdkDQFFggGHWFoSxliGEiQcQLMl\nggUEWxDAnIjAsuOhWZdDiexetLkj3zaNLFnVD0gf7bazXqneER7XudcaVc6AuSzbHAS9rsoY\nE2n6+u6ugpQzWbYl8K8vhKfbmhhrLdYdg7oxs2nW4zrFlaUmGE8Swxj2llUlEjp/tJXxoj5w\noVDYANi8NRu5XqdwBcbG1lLUZhIUBGwMRRGVzvMtjOcndm94wxucZemfpZd6zcrzl5DKvnzh\nZUY35DIJCJizbCZNJxrtva14phoOb6p2xV5mRKdzIcAMG7FtEGdw+rUIJorNnrjc9KxlZMwK\n2sqco50lW25p4RhqO0d+g3E9blvC0V8JhsxMWjqek1FOiJa1IIKxOGkyjpNEbNyEc7ARzeqw\nSiencyTY8fycardi18k1Y8MAIK2xIC0lQLAWlQraLfv0DrQaNDRMhSIAjtpU6V3ldrnNMPM4\n/ArCAbBG9Rm4BTjHbchnTUTTsBmkh1z/89SU6QhzOxD0QTiwKWZ3YPCVz3PJ+Y1rrrlm9+7d\nd9999+tf//pK5ai25K1W66Mf/SiAa6+99iyN7lyHI3Mbel6thHdg5r/K4ebQ6xsuXz9RfaIY\nrO+UTeS9ASnUVP1p3ykqGRJAJFwZJqhKp+jIXGbargpzwvNUPkrn4nQ+MW0Jo4QLUiRlbNqW\nHUAoEoDVnIGEoQDSU4YdbjXlYKoGwR1zFOvZRqIqkejNWLnEnq0Kf3tI89q7NPG2t62taXNZ\nLuh1nJR5LE5vLBYGXHc6zQ7E8Zu7y8UzYgK6tmLdcsxl2edHx0MlW9rcsX7oeFOYJxqtb8/M\nSaKbu4o3L9WgeD6NjCCOjrEe46gtNm15SdIUIai3lw8egO8da1BnLe95hqenwIyNm9jz5RUv\nwwvsw77m8PzT96mnnjrJyzWNGE4u2JhUH8qpBZ8qa9M4ejZqP6OcsvS3UDzX8M3u3mjLTDBT\nSBc7CBLgknTBFnoO5NZ94+m2ykQirGQITozKCYYlBkgwchkmizCd+caGZDEjX5gEiwWwHTiZ\nbhc97RzzvGfBwtd6ttlOs9SdOsyuR4JYSHIcuC55/lEUIWphoP/FrX7OBawtETEFQUqUWpJC\nKAtpjZUqI2JrpYADgAE/IMfhQ4e4XhWXXIZiCe32ap1rAJOA5MK+AykIDzo+ltiZBK1xpDUI\nD/EsTIbSJpxEraJjCHehz4RwIRRMckETuzvuuOMf//Efd+/evW3btttuu+3aa6/t7++fm5vb\nsWPHAw88MDExIaX8rd/6rbM9zHMXjgxGel7lO121aHS2uSfv9FcKl861ni14AyAiQs6tDJau\naaXTjXhCCs+aNPT71/XcBLLtdGa+ua+tq4EsSXICtwdAFiUkRIbUlwVByiMYk2ibMoHZSspb\nGRgmwSkTtdVIU3QbBrFVaLscN+SGtigrkg7Qgzmbu8xTUqvBuvuyqpb9ntzk+0Ul28ZOZNlN\npfyI543GyabAf3NPeeBMWeyurVi3HFOZ7lLOtsDbX29OpdnxxG4yTbcEvi/pobn5G4p5v/OE\nEgLlbn7qSfT20xJ1zjLMV7Fpy4t/ZsUx16owRmzYYEZHRV/fcm7HM1O87zn0lDk19Mwu8erX\n0uDwSW52fuBkxO5tb3vbGRvHWUHGHAQboV+WppOO021MK4meS5JDrr+eQAxr3BG2s1Ml4Woa\nqnnzoT7iUcIGnIAzNrOZjRqqvL7Rm7mpREokpakKa8n6gp0gpdmQYnfhQrYROb0Qci7v9qU2\ncxemoNScek7iH/UXkYZVpMOs5bdnATLWoNGEmzAY1kIb6Iy7KxwEotgF14ExaLepaw33S1kS\nFK8NEDWMlcS9DGUNwMKwhLWAIQFJSBI4DkmFQh4QvGc3Nm4SIxuoWHr+mwMAhAM2YA1SAMMk\nkMc9d7IWoin4FQCQLlqjCAcWxMUrQjpgDbYgAWth9YXeTOymm2761Kc+ddddd1Wr1c985jPH\nn3DPPfd0lHYXcSIIkgOlK7vDzaHb10omdStxZTjd2FUIhpVwrDXMxlU5T+U9VYzSeUf6JCDg\nFv1BSc74/BO19KAkJ/T7S8H6YjBcbx/MTOw5RYKQ1tHUFjqSKtBWg5Th1BEus2ucQYXA5TTV\nsVbdlvprKBlyCkJ4Qvi2lqlhC7dJPXNiW5/btV3KslIGOJzqIc95Q5hzBT3Vim4sFW4o5Ivq\nzDUkWGOxbhn2t1v79j2nsviymanK5VfYSoX6B5aX/xeV3NFqKRKv6Sp5y/IOon+AjbE/f5ID\nH9LhLBNJLK665kW7ynG7xQf28/Q0BKHdEutGeGwUxS4KQwjBzIgTVCpotymO0NcvSud5z4kO\nTkbsvvnNb56xcZwVWLAQjh9e2mz8RJBI4gNpOu24/QvvMpPqpviQlbnxcsICG+b8uTDTwsJE\n4AwcgxSJAqAaqjqZD3qa+aqbWVFgSJCROnUtz+bR8txFp8yMVAEyD1Dbk6qVaUcwkTDspLpZ\nCJfqYYVlP9KluRbIh9uGEK4xpFNKEoYlx4XvQ0gArFOaqvPoAYxsYjbikksRhmfpE73wwFZq\n3ZNlhpkFEWSnJtkKAjMbRqvJ7Tbyefg+pSl7Hk2M0ZVXr75sWXooX4b5XZAeTIbixhX2YYHj\ndMMnXf06IYpbUH8OwoVN0HUJ5AmslC8c/N7v/d4tt9zyB3/wBw8//HC2aHOllLr55pvvvffe\nG2+88ewOb63AVfl13TcYmw52XV2PJyaqTxyc/aH0enJeRQjHEf6G7pt9p5joVpJVU9s2JjM2\nC9xKJb+9GU+30ql6PN6KpxhcKVyemmY7niZS5dwgwKmOjI0FuQaZNUnoD/lOXolACkWkIrgN\n601kVgAtY6bTzNNzcLoCIbLc9p7cNeudYiAoYZ7Jsrox1+XzBSXmtH5ZmLuxWNgc+GrNbnSc\nSYyl6T888eRrpg7v8bxLhteXrbHP7BTG0PqRpXOuKxRKShnmzYF/1GdKRMPrRLkb7RayDI5D\nhQJeiiJ8doar81SpAGAvgFLi5Tdheoqf3cuuC0HcqMEY0dfHhSLlQlar90VZw1iVkqDVaoWL\nXOFHP/rRww8/7LruK1/5yle84hWnc2ynHRJkmVxvuLvnvx0e+38JUN5R+mgmV3ubbHKwJUu1\nop4n/bLDQdttt5wGC0Xkyo7ojhSEnHcnbZD1xH11QSD4WkHIqXwUywg2DxECBBtBlgEBZi1F\no+Tn2qkRwkl1rTvU7sLD3ol1oR4HccbGsOMLa8EsrdWuZ9MYSQStEebZdUWYJ+Wg4CDI8dgo\njBGXvewsfJSnDmvLjZ2jKIjbrJSTJE3ldjbWJdhl01ReIAQ8H1IiSbjZRJhHo4ahdS+04UQ4\nBLcIHUE48EorkDa3gFw/knlIF1mE/Aick1d9EQoj8EowKaQHt7C2vQ9PFa699tqHHnrIGHPg\nwIHR0dGhoaFNmzapNdtz+SxCCrcYrCsG64bL12/pe/1sc89E7WdFf8hTxY7qzneKvnOsDRCz\naSXTh+s/LwbD863nfFUUwmknM81kKvT7BYSxUT2ezEwzr/pLuXW+U17OxIpAL6OsdV2bg3Fz\nRM2kMsykOOi/Fs5WGG/GpgnbDZ5blGrQcxvWXBWEw567JfC9s+EPtbZi3RJmWq3XjB10hoaL\nxpIgcl2qVPjpn6Ovb4mieYKuWKmOoQPK5U5ZXWp2xDeKHEXGdBpQYd16ESesM+6b5gPPUaUX\nllGbFxeGx/jzxKzvfOc7d9555+joaBRFAD796U9/6EMfWnr3Ax/4wP33309rbZVjOWsl06lu\nZdFso91w3VyajgHWmFTajBY3pWJra8bM2aJPvX42a2VxPFdvDB/ub8nN1b5IZi1HZ8qSYEXK\nwmrwbE5b4k3VwAjeU263Mi0FQfgwbYYlAKoXcoEiEyj1HL+dgmm+ku9I64iRb8SVyUbmyNRR\nRqSO41khAQhjjHLI9QDAA6ylWhVpykFAYR5CgC36+81PfyKuvZ56+87KZ/vSsbbc2NnYquvX\n3EymqW+0gRBAKmVTOIatdn2vQwscB0pyow7PRZBDu/VCs6pOfuWtVZshrcMa+D1QAUwKvw9B\n76qImrva3eALC1LKzZs3b968+WwP5HwAgbrDLV25kVJupNo+MD7/mOeUPJV3ZCBIgQRbYzjN\ndBRn9VTXNva+dtvAm4v+sOGklcykuhGn9enm0wdm/sv3ewv+ZRtUQQjZjCbHaj/JTFOJnJSe\nEi6RYAbD5pHATI2YycG+N4WF69zg0gaFzUxrwBGUE6KsZE7KgpLdyilKcRafX2sr1i1hK2E+\nH/6PJNPgzZ0qBKmgFJLkJeXeloGzbLW1FEHAzSb5AYi42aBF3kZ+AD8ggHp6uLubG3USkrZd\ngvO9HraDkxG7Z5999h3veEcURb7vA5ienv7IRz4CQClVKpVmZ2e/+MUv/uIv/uIakuLVo7Fq\ndLCdzB6uPaFk0Ey5GWdSZHG0x+iWcrtbzSc9b711equZnsyy1HBRKZL9yKxjZomzWCX7u9yZ\ncCKfuPnU2VAtaAJIS9tNrA4WmpPFmadLQcHIvqZvCLlMRJ6FdMnUWZZJFQGAWRibtzYwmOst\nFOfbhlNjNGlTbGTled3yyEoARoiAxEJ9KxmD5baKQiDIsTWYmWat2bIYHKLefk5T+8Rj4urr\n1ii3W1tu7C1my5YYDd9vaZPLEgIJsLJWu96cENJaXwiAKc1QKMBaqs1zvXZK/jomQeMA2pMg\nCROj9xrkyy/9rhciBgcHVzwupdy0adOrXvWqu+++O7yocHixEOT0FS7vzW8fKF7ZSqbjrJqa\nFrM9NP/ouvLLPVHwcoXA7c57/YG7oA9W5JeCha//+p4bLx3436caO5+b/ndmzrndPfmtXbkN\nUVZNsrq2kbYJs9U2zkwzM/HmymsHy9f1F69wzm2FwdqKdUsIPe8VYbiu0lt2nbJSAJgZ1rBU\nL50j88w0Zmfs/udoZCOVuqh/4OSSOOrrF0lsd+8Cg7ZsxeAQOgOq1zlqo1FDmlFPj9iybe0W\nFL4InIzYfexjH4uiaNOmTZ/61KcA/Mu//EuWZUKIxx577Morr/zwhz983333ffGLXzxNxC6O\n47/8y7984okn6vX6tm3b3vve927atOlF362VzEw3nn5u+gd5vz9Q5YHSVQCQZrt0jXgCgB9u\nY5s6bl892lttHhDuSNnpamvDYEAZp1fpGalnjSgDaDpZw8kM867CjG81cwEicHGorbyY2lZ2\nM8tyPt3UDF49WpJGMxJ2eqyFNFUhisrweOgg77ZzFIlGTbV6xxvGp3wiy3Oy7cESw7I1iZA+\nkRDCk3Darue6xy1ihESQ48nDNDCArm4Qkedxpc/+9Cfypldh1Qr9cwcv3Y3dWvvVr3714Ycf\nNsa8+tWvfs973iOPCw1f//rX//qv/3rppZSyoyhdzbXLkVrb73nVdrueccDWY1gwAZKQk4JI\nTKbpoJSu1sjnKZeD1ogjnpzE+g1YtY/diRDPIppdsKAzMaIZeBeJ3YvC4cOHT/TW2NjYf/7n\nfz744IOPP/64d2IXoTM569YoiGQxGC4GCzWJxmbb+v83IiFW0W0g51U2ejdXCtvr0aFWMn1g\n9j+V8ASpzn9KcGriLb2vzwcDXcH6nNu7JvaR1lasO4IgJ7Zu7R4bcxdZOGpV2rSFXsLuatYE\nCcjmpH3yCZTLGFqHJLa7d1KWiZENJ+NkUtLGzWJwiJjZ84kIWWoPHOB9z0Ipu28vSUWuJ15+\nE23Z+qKHt+ZwMmL3s5/9DMBf/MVfvO51rwPwyCOPAHjd61535ZVXArjjjjvuu+++0+fG/vGP\nf3x+fv5973tfoVD45je/effdd3/hC18ol1/Mg2u2ufeJA3+TDwYGilcJcWTulhy10XOrzapU\nRQAk3FQNHValIo2rdDeb7pLoTdmXpMi0GVY7AzKbscLXkNpmCplV+QbljQgNSJpyYOcUsxZh\nQrlqTu/MNayMhmuy5Zc8EbiA5Wnj57VbmBLZkKhzvE/KQLuBHsoPTduuOicBWHR8N41UBSly\n1qbGtqT24lyhfHzLWmM4alH/ADOoOofe/gVu191tx8ZEELxQOdc5iL179z700EMHDhzYuHHj\nG97whksuueTk53/1q1/9t3/7tw984ANKqS9+8Yta6/e9733HnDM2Nnb99de/5S1v6bxcegys\n5trlcIxpJYkGlXQmLDeVAwFmSKJclgXMBSlaKud2dZHrg8BEkAq1qh09KDa/hAp/AIDVkItU\nXyiwAZuTuZxcxInwm7/5myseN8bs2rXrkUce2blz5+c+97kPf/jDJ7rDmZx15wfkC6/Eznt9\nea8PwMbKq+OsYWxi2QiSUnieyjsyXBN87iQ4l2PdElJr/6vQdUhMDzyz67rucomZNmykdetf\ndDRrjqK6B2RMT37G7aksmLBKSZVe7N7JPRXKn7jCHwBg4Sd1eCVIl+3oQZ4Yp6Fhbrcol6dy\nmatV+/hjcnAQuQsl6f48W7EArrvuus7LRx99FMBb3/rWzssOx5qcnDwdwxobG9uxY8e99957\nxRVXALjrrrt+/dd//dFHH33Tm970gu7DzBO1J3ZNPFgpbl/eiLoDAUhuzzZ2l3ObwUisOZAk\nReUpZzNML9KDLtmmFSW7T+pqp+7QqjzrpgUEcpkoW+kzJAAJsMy3bepxlTix7Lkik7Y9Whxe\n1+xreM4EmVDJAAFEwwhVNLNkG8qtdHrjuZqDhI2A1ICCJstWCycPgiAltIwdjjGttTSiW5ID\nAGw5SShNqX8AYV4AOHyYHY/KZQAU5u30JBULNLz+FPw9zh7uvPPO+++/3yx25ZJS/s7v/M6f\n//mfn+j8KIq+/e1vf/CDH3z5y18O4P3vf/8nP/nJW2+9tVQ6Knk5NjZ28803H2M5u8prl2NG\nqpYQxSQup2nDcTxYWBCgLDxCorUOik3X85QbdoKesTCWBgaw71nu7qEXtVBZgvShI6gcQMha\n8CsXWd2LxJe+9KWTvPvRj370nnvu+da3vnUiYneGZ91FODJ05Pn2kD7HY90SZrX+r3Zy9aWX\nTgz0jzqq3F2mfOFFdydng/lnEA7AtlOz9wCuPlJaCyGt48o00e18awJs4XbBtKFjuEWEy9QT\n7cOYeRxeBaW+lrd/jxheByLyAvT08NwstEZfn52ZESPn25w5EU5G7MrlcrvdfuaZZ2644Yb9\n+/c/8cQTAK6//vrOu08//TSA4eHT4vXnOM473/nObdu2dV5qrdM0tfao7qrvec97Ot+BarV6\nom4/M81dzxz+dn/xCrmoVGOgrs28zqqZSdnubExNZ3KyHTFBEoFhmAWRlAXyt3vpRKTWOQhz\nvNOoMhhtpkjAp0TZyDMTZFImB5BMBIYVHqxSZqogNan1qVgfifzjQ+LKCdgCtbSBdHLpAcP7\nAm9QqQUVp9IYnOZMQechLJwMTmLgFgDJgLCwiiLXKTlBputta31RUFYg09RToXyIpaq9fAHN\nBgr5jhSPSl325ztEd4WCc1pochJ8+tOf7hSOVSqVzZs379+/f2pq6rOf/ezw8PDv//7vr3jJ\noUOH2u32UmOoq666Ksuy/fv3X3XVVcec9sQTT3zjG99IkuTyyy+/7bbbBgcHV3PtMbPOel6z\nVK5pa4w2RJ5laS0AI0TmuVKqOjOTiNiEnW7CSYKhIXI9FIs8PUVdXS8laRdUYCJU90IQ8iOn\nptXYRRyPX/7lX77nnnueeeaZE51whmfdqf8XXsTZxrkf65aO54TI2I6l2bzrX1fpXrGL1+pB\nEoUNiGfBqcxJhrXLOaKwBlK2JxHPQLpI5mBiuGVUd8HNHzF+sgbWgAQaz8YSrtsJqkpS/xB1\ndbPjwBrE8UsZ59rCyVj2pZdeCuC+++7bsWPHPffcA6BQKHSI3aFDhzoVPZ2M2ilHX1/fO9/5\nTtd1ASRJ8rnPfa5QKBxjEDo+Pj42NjY2NlatVle0JKhHYztG/66S37bE6qra/LzZ/s7s3I5m\na05rzdjsyk1B6ErhkWgZmzBPZ7qqddtaS0o6/euyp4yez1TFiFKbCnXOSRlq0R2r4bp3ZeRs\nTuRAJstGFI0sGtVXlZsThMYZydSQEQWAJkN+po/7m5QHxbqe6XlP5nLqCNnKR8wEJyMrKJO2\n5bTb+XzmeBpwIu22U2tBmQ4TGyQOmo2IGqaYo5ER6iph+T/cUVyvcbXaeUWOgzDkmelT/cc5\nc/ibv/kbAB/60IcmJiZ+/OMfj42N/eEf/iGAL3/5yye6ZGZmRim1pHN3HCcMw9nZ2eXn1Gq1\nZrOplLrrrrs+/OEPt1qtj3zkI1EUrebaY2adBCLLNSFrygmMcYzWgjIhBCEXx8pql0izTTtr\nEmMRRaLSCyLkC5G9Kp0AACAASURBVHxwH5qNl/L5kEBhA4Zehb4bUdwMtVYJ/LmOjq2de2JN\n5Bmedaf4n3cR5wDO/Vi3dLyk1O3Dg1flw7f0dG/PnYKgk1+H/DoUt7retZfx/BwvenJyo4Hh\nEcoXwIAAKbQmAAEhwARelufxSggq8EogYvCypbKSCENyXTABKzRnP19xshjxu7/7u9///ve/\n/vWvf/3rX+8cecc73uE4zuzs7Pr1Cxt8J1pMnBIw8w9+8IO//du/7e/v/+xnP5s/eqP9oYce\n6vzw4IMPLm0QL8Gynmo81ZXb0MnYG+Zno/ixRrNLqU2+v6RVyzgNpRtasT9OSkoRACLDPJvp\nUIqCdFxZKsU/b/tXW+a6Np44kmBhuFocG+tjYV1Krer39aSW3SCHCQdLnBFfNaFrzuysKlRg\nBbjjSCEtKrNsgUwi04kVrlU9VasEwc84DZ3IkW2JspLCdT0pPaeQ/P/svWmspFd19/tfe3im\nmuvMp09Pbk8Y22AbDGGKSSBcQO8FRSjJlZILCooSLCFQRBIpgwKJEgmIwwcHQpTwhugNugJk\nEHoTQibEBW6IwQYb47F9eu4z9DlVdWp45r33uh/q9Dy47W5wd3N+Oh/qPPVMVfXUrv+z9lr/\nhdSoQUM2zv7wKIyQJnB27F2MahWjIVtLV2cu9tLSkhDiIx/5yHhYUUp9+MMf/vjHP36BVHdm\nPjvP5oy+xrVa7XOf+1y1Wh2vuWfPnve85z0PPvig53nPue3ZV13BDloxgZiZyAJMMCQySUFZ\nIoxS61LLsMb1+2J+DsbysVUIwca6zrqonenm9XyRAa7KT/cqwRhz//33A7jpppvOt85P/qrb\n4hrjqhjrTrDgewu+h6Lg9TXUG5fYmlyFqI5rgosFB8MHD7DnwRjato22bYOUwSScATtMvxI2\nw2A/mjee5tPuN1Hdgf4i6gu+OlqA+cyZkCKj4LQe0Nc2FxJ2b3/728f5wnmeA3jlK185Lo8d\no7X+y7/8yze84Q0/pjPr9/sf/ehHV1dX3/3ud7/hDW94vlmx3XjxaO/h6dpLAWTO7U2yvWm6\nKwjk6bshgiT4QjjAMqtNg1mKBOWOmW2FtM9Jv+yXsqkFiQv6gxXMkZAgvS63T8umnz/mRM2J\nBpNcruZ2dn1y6G1LIos++1NEGoCXMzP81PR1VooqUSigagy/cIPISwNVKiqsLZReJc5dOeV0\nXYZp2RWpakY7z3xXtOJuB+0JqlQBkOfzkSO0sB2XrB5eFH7u537ui1/84uOPP34i0fPJJ580\nxvzsz/7s+TZpt9tlWSZJEkURAGttHMdntHUXQtROadVarVZnZmY6nc5LX/rS59z2bByjJ1Sk\n/JYocqGaZV6SsIJZUJAXXSl9diqJwQGyjIsS3Q4EwTGyhP/r2ywkZufokitkt7gUztcuzFq7\nb9++cSbxe97znvNt/pO/6ra4xrgqxroTcBLz0hIfW0a3R7fcKq7b83xf77nxPHH9DZiecWme\ndJVBXQ9VVIFXh1cDO5AEGLWdEKcrF5Ko70Z1O4SsOf86Xlul5inpy0WJ4ZBaV3GnzefLc0T1\nP/CBD7zvfe974oknoii6/vrrhRAAoij6/Oc///rXv/585k+XDjN/5CMfabfb999/f/T8i6iZ\nXS/e3wgXiKhkfjpJD2XZwrlbOytH1jrMaN0zNhA40VXGI7LgTplPi6hG8UFbrYgLOl8we0KE\nAlKQFNGAmlFlSpsVL3vCiUC4UVcPhhOtssLVYTrTHZSaclFQwpnRjBqJekihNpDWDEJ/UNGZ\nliDkjhtK1aQAIQJG1qwVPO1V8uRwoBuhd6bdIns+pRkqx6Obvo80vYqE3Ve+8pUTj9/+9rf/\n67/+69ve9rb3v//9119//eLi4v3331+pVO69997zbb5jx44gCB577LFxD6jHH39cCHGG2ewj\njzzyuc997o//+I/HMeA0TdfW1rZv334x256NA/esDcJwPksI3Nfad853LnCu0F4tidOgylJx\nlon5BUxM0PFwMQc+QHb/PpEmtH3nZbNi3+L58+1vf/vCK7zlLW9597vffb5nf/JX3RbXAFfd\nWHcCXl7iYyucZehviOeTw+2YC+bgApUWRGg0ihKDdeg6RstQIfwmQMcrw+hMVXcCoQCQ2LHD\nseOjRxCEEISiQJKIO+66in4EL53nTtfwPO/lL3/5qUvCMPylX/qlH9spAcAPf/jDxcXFd7zj\nHXv37j2xcNu2bRd5S5EU64c6D25r3cHA3iTdn2bz51Z1EEIba9ZN2VbKFzSyLmf2j2s7CZLC\nFdaTZrWu2glLn/jsoJ0DSuZAilAIyYXzduVOVD3KXMjedUbNK3PEG/2XEIFn962r4XrD9V1v\nSuykQrtRsFBERjnGIBc29nThVUulxwfJmUMhqlKeOGYghE/oGVOloJetB7pOdNqXhJSCPSWi\nrjXn+VXkAXC2LeJgMPijP/qjU5f84z/+48///M+fc/Moit70pjf9/d///cTEhBDib//2b++5\n555mswngP//zP4uieOtb33rLLbesrq7ed99973znO5VSn//85+fn5++66y4p5fm2PR/SWknk\nmDva31etN4ucQZEtPcvK5KXvG6kmBr3Q92lunhpNnGJYQ0Lw+rpY2M7drgPE7j0X5WxXlpyl\nKM3mp6w0tKIw+mnobP3j401vetM5lwshdu3a9drXvvbXfu3XLjBp8BO+6ra4Nri6xrrTsA5a\ni0oF03M0PXORG+1PsyeT5Dv94RuajZdVK9Nn27Iehx1IQPogcVou3UXhB2LP9dyeRJbAOvg+\n6o0LeOyxRRlD6GsqR/k5qmIvZhe9Xu8yncxJ9u/fz8z33XffqQt/8zd/8+1vf/vFbD7MViKv\nCdCRLH88TrafPwNAyErpUokaAb4Qgii2dmCdT3R8WlYY5yy8CmVKRgNjNUEd11kMGLBhVKUI\nhCBAcOZEXQtZFeqIKUBCiaA0caAqoRsJb45olzG9jfCmRLeOleUdUh6UVCmQehpswDHsGmgG\nspaDfKKqlGdPH1elSK23khzVujUVTpz+kgSMPbmyFGRPy5y4vLhyM/sBgFCQ3ovfdfS9732v\nEOLP//zPnXOvetWrfuM3fmO8/Bvf+EYcx29961s9z7vvvvv+7u/+7i/+4i+EEHfccceHPvSh\n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\n8/vf//673vUuIcQvfvGLH/3oRzNnzgSwZMmSPn+DQ5a0CYfDftrOs2y/FUQAACAASURBVM8+\nW9g4RG9Tp04F0NnZWShFuGPHjiMbS3+WLl06b968bDb70EMPbd68ORAIvO997xvankP2KaU8\n55xzFi1aBOC11147XCMHPPVhDWp8olVXQKuuZGjVFdCqKxladQUmiuomg2PnZ4tEIpHFixcD\nuPPOOwdr+bOf/WzmzJnz588PhUJXXnnlI488cswxxwBobW3162tv2bLlhRdeANDS0nL66afP\nnz///vvvP6QBl112mR/PWGCI3pYsWRIIBJRSa9asyWaz27dvv+GGGw5rLEMXp7744osBfPGL\nX/Q8b+XKlX505xsZnY8fkplMJg/XyAFPPcyTjme06orRqisNWnXFaNWVBq26YiaG6niCMMRE\ncSG00DTNsrIy/0IDeOKJJ7j3VOqePXuqq6sBENHs2bODwSCAUCi0ZcsWZvZdb9M058+f71/l\npUuXJhKJ/mcsnij2Wbt2beGK+zk7Q/S2Zs0av6VhGABisVjhwKHH8oUvfAGAEOLkk0/2z9K/\nOOTLL79csOSXv/xlYfvwR9dnotjn7LPPBnDGGWcc8oL3N7L/qYf9Zx9jtOpYq67kaNWxVl3J\n0arjSaS6ySA7Zv7e9743d+7c6urqD3zgA3v37v3sZz976aWX3nXXXdzvD/Piiy/+x3/8h18e\npq6u7txzz3366af9XY7jfPWrXz3xxBNDodC8efOuv/767u7uAU/XX3bM7BezKchuiN6UUjfd\ndNP8+fMrKirOP//8wmytf+AQY2lsbDzzzDODweD06dMHkx0z+7EI4XC4WFXDH92Aslu9ejUA\ny7K2bdt2uEb2P/WA5x2HaNWxVl3J0apjrbqSo1XHk0h1xJMiCGACkUwm/YnWefPmhcNhAA8/\n/PD73//+urq65ubmsbZOMznRqtOUHq06TenRqsPkSJ6YWHR3dy9atOjkk0++8sorW1paXnrp\nJb86+dvf/vaxNk0zadGq05QerTpN6dGqA6Bn7MaAW2655dprr81ms4UtS5Yseeyxx2pqasbQ\nKs3kRqtOU3q06jSlR6tOO3Zjw759+/7yl7/s27evvLx8wYIFb3vb28baIs3kR6tOU3q06jSl\n502uOu3YaTQajUaj0UwSdIydRqPRaDQazSRBO3YajUaj0Wg0kwTt2Gk0Go1Go9FMErRjp9Fo\nNBqNRjNJ0I6dRqPRaDQazSRBO3YajUaj0Wg0kwTt2Gk0Go1Go9FMErRjp9FoNBqNRjNJ0I6d\nRqPRaDQazSRBO3YajUaj0Wg0kwTt2Gk0Go1Go9FMErRjp9FoNBqNRjNJ0I6dRqPRaDQazSRB\nO3YajUaj0Wg0kwTt2Gk0Go1Go9FMErRjp9FoNBqNRjNJ0I6dRqPRaDQazSShl2N37bXXEhER\nhUKhsTJoQvOzn/2M+hGJRE466aQbbrghk8kUWl544YX+3t27d4+gAQsWLPDP6HneCHY7hmzb\ntq1wJX/zm9+MtTnjEa26EeHxxx8vXL2NGzf22Xv11VcX9l5zzTVjYuG4QqvuDbJjx47CdXvg\ngQfG2pyJgVbdMDHG2oBJxebNm/tvTKVSW7du3bp165YtWx555JHiltXV1XPmzBmps8fj8Vde\neQXA4sWLpZQj1a1mnKNVN9p861vfuuOOO/zXH//4x7/5zW+OrT3jAa06TenRqhsm2rEbSQqy\nW716dVVVFYB0Or1hw4annnoKwO9+97v9+/fX19e3trbu2bMHwFve8pYRPPuzzz6rlBrxbjXj\nHK26UeWBBx74whe+4L++4IILfvjDH46tPeMErTpN6dGqGybasRsxHMf5v//7PwCWZd16662m\naRZ2nXDCCdu2bQPQ2tpaX19fUOfI6qN/t7Ztt7a2AiCi+vr6ETyXZpygVTeqrFu37rLLLmNm\nAO94xzseeOABIXRcsladZgzQqhs++ktqxHj++eez2SyAE088sVhznud1dXUBKC8vP+aYYzCQ\nPgAw83333bdixYq6urpoNLpo0aKvfvWrqVSq+BTd3d1f/vKXTzrppEgkUldX9453vKN4arpP\nt4lE4p3vfOeMGTPmzJmzbt26URq1ZmzRqhs9tmzZ8v73v99xHACnnnrqww8/HAgExtqocYFW\nnab0aNUdBlxEYcUhGAyy5jD5/ve/71+9VatWFTYeOHDg05/+tL/929/+tr/x3e9+t79l//79\n/pbOzs7ly5f3/+uccsopjuP4bV577bVZs2b1aSClXL9+vd9g7ty5ACorK5VS3d3dp59+OoBQ\nKPToo4+W8DKMMC+88EJhsL/+9a/H2pxxh1bdSPHYY48VBrhhw4bdu3dPmzbNf3v88ce3t7eP\ntYHjCK26N8727dsLQ7v//vvH2pwJgFbd8NGO3YjxsY99rL9uCqxZs6bQsra2FsD06dP9t0qp\ngub+7d/+7Re/+MWdd97pBxAAuOeee/w2/l2CYRhr1qx55JFH/uu//stvsHz5cmZua2vz377j\nHe/o6OjwG1dUVPzjH/8Yk6sxUmjHbmi06kaKYsfu0UcfPe644/zXc+fObWxsHGvrxhdadW8c\n7dgdLlp1w0c7diPGiSeeOJjmhBC//e1v/WZ+UCeA888/39/yy1/+0t/yyU9+stBbIUb7yiuv\nZOaf/OQn/ts77rij0KaiogLA1KlTmfmPf/yj3+ATn/jEokWLAEybNu35558v3fhHB+3YDY1W\n3UhR7NhNnTq18Pr2228fa9PGHVp1bxzt2B0uWnXDRydPjAypVOrFF18EEAqFCp5+JpN55pln\nnnrqKaXUxRdffODAgVgs1n/5/8tf/jKA6urq//mf/yl0eMIJJ/gvLMtSSn3xi18EMGvWrNWr\nVxfavPzyy67r+nnXhW7vvfdePyrosssuG+KToJkEaNWNEs3NzYXX11133YoVK+bPnz+G9owr\ntOo0pUer7rDQjt3I8K9//cuvWLh48eKvfe1rxbvOPvvsv/3tb5lM5rnnnjvrrLP6yK65ufnV\nV18F8Pa3vz0WixWOev311/0XJ5544saNG5uamgCcf/75xUl5dXV1hdeFbn3NAXjggQe+/vWv\nE9EID1UzbtCqGz0aGhq6u7vb29sTicQHPvCBTZs2RaPRsTZqXKBVpyk9WnWHhc6KHRkKf/Ul\nS5b02RWPx/0X06dPL265dOlSAIWlRj8ws8BDDz0EgIjOPPNMP5EbQENDQ6FBNpvt7u7u7u72\n5f7Pf/7T3/7hD3942bJlAPbs2fPXv/51hMZXCn7/+99fmKe4hrhmMLTqRolZs2b95S9/ue++\n+/xv7Zdeemno+J43FVp1mtKjVXdYaMduZBhMdlu2bHnuuecATJ8+/aijjmLmZ599FsBRRx1V\nWVkJIJ1O+y39ktY+a9eu/d3vfgfgoosuOvbYY13X9bf39PT4L9Lp9OLFiysqKo499ljbthsb\nG/0bjuXLl993330XXnih3+ynP/3pKI13NHj11Vd/nacwZM0QaNWNEj/5yU9mz579rne9q7Do\n89BDD91yyy1ja9U4QatOU3q06g4LvRQ7MhRk9/e//33Xrl0AlFJ79+59+OGHmRnArbfeCuDV\nV1/t7u5G0fL/kiVLpJSe561du/b6668//fTTn3zyydtuu83zvFgs9tWvfhXAKaec4je+/fbb\n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\no0eP0aNH+7ZmANixY0dKSsrMmTN9/r/RYrGsXbu2a9eut99+u2ujXq9vil60Khh19cKo8zmM\nunph1PkcRl29WlXUtd577BqkQ4cOHTp0cL38448/Pv74444dO955550+P9aRI0fOnz9/2223\nVZsc3ngXL1587733EhISmqLZp06dSklJSU5ObteunW9rzs7OXrt2bUxMTFM0uzXDqKsXRp3P\nYdTVC6PO5zDq6tWqoq6VPisWIYQQQgg1FCZ2CCGEEEJ+wk/usUMIIYQQQjhihxBCCCHkJzCx\nQwghhBDyE5jYIYQQQgj5CUzskKcOHjzodDpbuhXonwWjDjU/jDrU/HwYdW1y8oQsy5s2bTpw\n4IAkSQMGDJg2bVrNVarrKuN+X09qrqysfP/990+ePFlWVpaYmHjfffclJCQAwBdffPHxxx+7\nirEsu23btoY2u65KGtnsX3755dVXX612rGHDhj3++OP1NluRm5s7c+bMjRs3Go3Gmu96d7bb\nQoOiaAAAIABJREFUFow6jLrmh1GHUdf8MOraetS1yQWKN23atHfv3ocffpjjuNWrV4uiOHPm\nTA/LuN/Xk5oXL15cUlIyc+ZMo9G4bdu25557buXKlYGBgVlZWf369bv11luVYoRUf+qlJ5XX\nVUkjm52UlPTiiy+6XoqiuGLFin79+rk5osvFixd//fXXvXv3uvkO4N3Zblsw6jDqmh9GHUZd\n88Ooa/NR1/QPmvMxm8121113HTx4UHl59OjR8ePHl5aWelLG/b6e1JyZmXnbbbedOXNGeSmK\n4uTJk3ft2kUpnTdv3tdff92YZtdVSeObXc2WLVtWrFjh5ohVHT58ePXq1UuWLLntttvKyso8\n75oXDWu1MOow6pofRh1GXfPDqPODqGt799hlZmbabLbevXsrL3v16iUIwuXLlz0p435fT2rm\neX7SpEmJiYnKS1EUnU6nLMvK7idPnpw+ffrkyZNffvnlnJychja7rkoa3+yqcnNzd+/e/eCD\nD7o5YlXXXXfdQw895OZhJt6d7bYFow6jrvlh1GHUNT+MOj+IuraX2BUWFnIcp9frlZc8z+v1\n+qKiIk/KuN/Xk5rDwsImTZqkUqkAwOFwLF++3Gg0Dhw40GKxVFRUcBw3d+7cp59+2mq1Pvvs\ns3a7vUHNrquSxje7qrfffnvixIkajcbNEev9FBp/ttsWjDqMuuaHUYdR1/ww6vwg6trePXaU\n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\nYWFhP//886ZNmxraeEEQBg0aFBsbe+rUqY8//njVqlXr1q3zZMeffvrJYDA09HB10ev1+/fv\nv3jxYoP2qhYkHoYWQqhlYWKHkP9IT0/ftWvXihUrEhISHn/88a5du27YsKFamVWrVrVv337F\nihVN0YDjx4/fc889jz322NKlS2fOnDllypRLly41pkJPepSamjp06NBufwkICPC8/q1btxqN\nRrVa7b4YISQ4OHjbtm2SJDWo/YcPH87JyXnrrbfatWs3ePDg2bNnb9++vd69nE7n77//7vWc\niZpYltVqtceOHfOwfM0g8eSDQAi1BpjYIdSSLl++vHDhwvnz5589e7bxtaWkpMTExERHRysv\nb7rpppSUlGplBg4cuGbNmnHjxjX+cNVYrdZFixZdvnw5Li4uMjIyISEhJSXlxRdfbMxaG/X2\nyGazZWdnP/fccwEBAYmJiatWrWpQ/YcOHfJwGoFerz927NiZM2caVH94ePjq1atdF3mLi4vd\nDw0qioqK/vzzz7oeGuEdnufz8vI8LFwzSDwJLYRQa4CJHUIt6YUXXvj888+3bds2f/78xi82\nlpOTExIS4noZEhKSm5tbrUyvXr1GjhwZHx/fyGPVdPz48d9++y0oKKhqA3bv3p2WluZ1nfX2\nKC0tjWGYkSNHnj179pVXXnn66ae//PJLDyu32+3FxcX1DtcpCCFqtTorK8vzxgNAYmLijBkz\nlJ9//PHHDz/80PXSjeLiYkIIw/jy9zPHcUVFRR4WrhkknoQWQqg1wHXsEGoxlNKsrCyTycSy\nbElJicPhaOTN8rIsE0KqbhEEoXFtbIDy8vJqw1EMwzAM05hFUurtUY8ePZxOp3LciRMnHjx4\ncMOGDf/61788qdxut58/f75Dhw4eNoYQYrPZPCxclc1me+6559auXfvuu++OHTu23vKVlZW+\nzeoAgGEYq9Xq9e4tG1oIIc/hiB1CLYYQMmrUqMzMzCtXrgwaNKjxUyDDw8OLi4tdL4uLiyMj\nIxtZp+fi4+OdTqcoiq4tDocjMTExLi7O6zo96VHVbDIpKSknJ8fDys1mc5cuXao22D1RFIOD\ngz0s7HLhwoU+ffocP378yJEjkyZN8mSXwMBASZJ8u8ioKIpVh9waqmVDCyHkOUzsEGpJTz31\n1K5du7755psXX3yx8bX16tUrPT09Pz9feXn48OFevXo1vloPJSUlPfDAA1lZWXa7XVndNzs7\n+8477/QiGXKpt0dffvnlPffc43p58eLFjh07elg5wzBdunTxcBBOFEVBELp06eJh5Qqn0zl6\n9OhRo0b98MMP3bp183Cv4ODgTp06NXSihnuiKFa9St5QLRtaCCHPYWKHUEsihPTq1atv374+\nufQWFxc3fPjwZ/6/vbsLZS8O4wBuXlJLdJi3LLVzsRtW7MLKdjXbldJK0ZQLNRKRhdZ2JRdI\n7pSEUkQjFy6WKxfu1MoiUiOvezG22RnTtsP0v1CSl+0wh9n/+7ncdp7znHbz9Ht+5/cYDIFA\nwGg07u3tNTU1paSkrK6uWiyW+OPHpNfrtVotQRDHx8eFhYWDg4NtbW3xBIz5RBKJZHl5eXh4\n2Ol0mkym6enpjo4O5vHlcrnf72eyNkZRlEql+uwylclk8ng8Go3m8PDQarVarVabzRbzquzs\n7Nzc3FAo9Kl7RRcKhUiS/PLlH/0RAJBosMcOIKksLi62tLSUlpYKBIK1tbWn1TK9Xq9SqcRi\nMdt353K5PT093d3dfr+fIIhviRn9iUpKStbX13U63dDQkEAgmJ2dra6uZh68rq7OaDQeHBxE\nX80Kh8M+n0+j0Xw2+d3dXYqiRCLR8ycKhSLmWcEcDkcqle7v73/XUXahUEgoFFZVVcUT5N0/\nAgASDWbFArAFs2IZ+t1Zsdvb2319fW63Oycn592raJq22+06na6rq+vdH7AxK3Zzc7O+vp4k\nyW9ZynW73bW1tWNjY8+fYFYsQLJCKxYA/msVFRUDAwPFxcUXFxc0Tb/86vHx8fr6+uzsrLe3\nt7Oz8yezkkgkSqXS5/PFH+rh4YGiqIaGhvhDAUDiQ2EHAP87mUw2MzPT2NiYmZl5enrqdDpd\nLpfNZjs6OqqsrFxaWtJqtd9+/kh0qampra2tPp+P+Uu7H/F6vWq1Os4+LAD8FWjFArAFrViG\nfrcV+5LH4zGbzS6XKxwO5+fni0QioVD46vy2t9hoxT7p7+9fWVnh8/kxc/jIzc1NQUHB5OTk\nqzcn0IoFSFYo7ADYgsKOocQp7L6GvcIuEAi0t7ebzeaioqIvRAsGg3a7fWFhQS6Xv/oKhR1A\nskIrFgAgQWVlZY2MjJSXlzscjs9OnLu9vbXb7aOjo2+rOgBIYijsAAASF5/Pn5qaqqmpOT8/\nZ3iWciQSuby85PF48/Pzzc3NbGcIAAkFhR0AQELj8Xjj4+MGg4EgCIfDcXd399EWGpqmvV7v\nycmJUqmcmJhQKBQ/nCoA/DrssQNgC/bYMYQ9ds+iZ3h1dTU3N7exsWGxWLhcbkZGRnp6OofD\niUQi9/f3T7MlysrK1Gq1TCb7sZwBIKGgsANgCwo7hlDYPWOSYSQS2dnZ2dra8ng8Xq83GAzm\n5eXxeDySJKVSKcOBHyjsAJIVRooBAPwlaWlpYrH4BwbEAcBfhD12AAAAAEkChR0AAABAkvgH\naURyYlUo94oAAAAASUVORK5CYII=", + "text/plain": [ + "plot without title" + ] + }, + "metadata": { + "image/png": { + "height": 420, + "width": 420 + }, + "text/plain": { + "height": 420, + "width": 420 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "figS1_combined <- ggarrange(ind_cts_mse_fnr, ind_cts_stab_fnr, ind_bin_ROC_fnr, ind_bin_stab_fnr, \n", + " toe_cts_mse_fnr, toe_cts_stab_fnr, toe_bin_ROC_fnr, toe_bin_stab_fnr, \n", + " block_cts_mse_fnr, block_cts_stab_fnr, block_bin_ROC_fnr, block_bin_stab_fnr, \n", + " nrow=3, ncol = 4, align = \"hv\", labels = \"AUTO\", common.legend = T, legend = \"bottom\") \n", + "figS1_combined\n", + "\n", + "ggsave(\"../figures_combined/figS1_combined.png\", figS1_combined, dpi = 300, width = 8, height = 6)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Figure 2: best method chosen by Stability" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "toe5_cts_stab <- ggplot(toe_cts_sub5, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Toeplitz Correlation 0.5\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\", \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both)\n", + "\n", + "toe9_cts_stab <- ggplot(toe_cts_sub9, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Toeplitz Correlation 0.9\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0,1) \n", + "\n", + "block5_cts_stab <- ggplot(block_cts_sub5, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Block Correlation 0.5\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1) \n", + "\n", + "block1_cts_stab <- ggplot(block_cts_sub1, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Block Correlation 0.1\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1)\n", + "\n", + "# ggarrange(toe5_cts_stab, toe9_cts_stab, block5_cts_stab, block1_cts_stab, \n", + "# nrow=2, ncol = 2, labels = \"AUTO\", common.legend = T, legend = \"bottom\") " + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "toe5_bin_stab <- ggplot(toe_bin_sub5, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Toeplitz Correlation 0.5 (Binary)\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\", \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1)\n", + "\n", + "toe9_bin_stab <- ggplot(toe_bin_sub9, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Toeplitz Correlation 0.9 (Binary)\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0,1) \n", + "\n", + "block5_bin_stab <- ggplot(block_bin_sub5, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Block Correlation 0.5 (Binary)\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1) \n", + "\n", + "block1_bin_stab <- ggplot(block_bin_sub1, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Block Correlation 0.1 (Binary)\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1)\n", + "\n", + "# ggarrange(toe5_bin_stab, toe9_bin_stab, block5_bin_stab, block1_bin_stab, \n", + "# nrow=2, ncol = 2, labels = \"AUTO\", common.legend = T, legend = \"bottom\") \n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_bar).”\n", + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_bar).”\n", + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_bar).”\n", + "Warning message:\n", + "“Removed 11 rows containing missing values (geom_bar).”\n" + ] + } + ], + "source": [ + "fig2_combined <- ggarrange(toe5_cts_stab + rremove(\"x.title\"), toe9_cts_stab + rremove(\"x.title\"), \n", + " block5_cts_stab + rremove(\"x.title\"), block1_cts_stab + rremove(\"x.title\"), \n", + " toe5_bin_stab + rremove(\"x.title\"), toe9_bin_stab + rremove(\"x.title\"), \n", + " block5_bin_stab, block1_bin_stab, \n", + " nrow=4, ncol = 2, labels = \"AUTO\", common.legend = T, legend = \"bottom\") \n", + "\n", + "ggsave(\"../figures_combined/fig2_combined.png\", fig2_combined, dpi = 300, width = 6.5, height = 8)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Figure S2: best method chosen by Stability in easy Toeplitz correlations" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "toe1_cts_stab <- ggplot(toe_cts_sub1, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Toeplitz Correlation 0.1\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\", \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both)\n", + "\n", + "toe3_cts_stab <- ggplot(toe_cts_sub3, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Toeplitz Correlation 0.3\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.3, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\", \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both)\n", + "\n", + "toe5_cts_stab <- ggplot(toe_cts_sub5, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Toeplitz Correlation 0.5\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\", \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both)\n", + "\n", + "toe7_cts_stab <- ggplot(toe_cts_sub7, aes(fill=method, y=Stab, x=N)) + ylim(0, 1) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Toeplitz Correlation 0.7\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\", \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both)\n", + "\n", + "# ggarrange(toe1_cts_stab, toe3_cts_stab, toe5_cts_stab, toe7_cts_stab, \n", + "# nrow=2, ncol = 2, labels = \"AUTO\", common.legend = T, legend = \"bottom\") " + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "toe1_bin_stab <- ggplot(toe_bin_sub1, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Toeplitz Correlation 0.1 (Binary)\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\", \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1)\n", + "\n", + "toe3_bin_stab <- ggplot(toe_bin_sub3, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Toeplitz Correlation 0.3 (Binary)\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.3, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\", \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1)\n", + "\n", + "toe5_bin_stab <- ggplot(toe_bin_sub5, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Toeplitz Correlation 0.5 (Binary)\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\", \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1)\n", + "\n", + "toe7_bin_stab <- ggplot(toe_bin_sub7, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Toeplitz Correlation 0.7 (Binary)\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\", \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1)\n", + "\n", + "# ggarrange(toe1_bin_stab, toe3_bin_stab, toe5_bin_stab, toe7_bin_stab, \n", + "# nrow=2, ncol = 2, labels = \"AUTO\", common.legend = T, legend = \"bottom\")" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_bar).”\n", + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_bar).”\n", + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_bar).”\n", + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_bar).”\n" + ] + } + ], + "source": [ + "figS2_combined <- ggarrange(toe1_cts_stab + rremove(\"x.title\"), toe3_cts_stab + rremove(\"x.title\"), \n", + " toe5_cts_stab + rremove(\"x.title\"), toe7_cts_stab + rremove(\"x.title\"), \n", + " toe1_bin_stab + rremove(\"x.title\"), toe3_bin_stab + rremove(\"x.title\"), \n", + " toe5_bin_stab, toe7_bin_stab, \n", + " nrow=4, ncol = 2, labels = \"AUTO\", common.legend = T, legend = \"bottom\") \n", + "ggsave(\"../figures_combined/figS2_combined.png\", figS2_combined, dpi = 300, width = 6.5, height = 8)\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Figure S3: best method chosen by Stability in easy Block correlations" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "block3_cts_stab <- ggplot(block_cts_sub3, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Block Correlation 0.3\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1) \n", + "\n", + "block5_cts_stab <- ggplot(block_cts_sub5, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Block Correlation 0.5\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1) \n", + "\n", + "block7_cts_stab <- ggplot(block_cts_sub7, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Block Correlation 0.7\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1)\n", + "\n", + "block9_cts_stab <- ggplot(block_cts_sub9, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Block Correlation 0.9\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1) \n", + "\n", + "# ggarrange(block9_cts_stab, block7_cts_stab, block5_cts_stab, block3_cts_stab, \n", + "# nrow=2, ncol = 2, labels = \"AUTO\", common.legend = T, legend = \"bottom\")" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "block3_bin_stab <- ggplot(block_bin_sub3, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Block Correlation 0.3 (Binary)\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1) \n", + "\n", + "block5_bin_stab <- ggplot(block_bin_sub5, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Block Correlation 0.5 (Binary)\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1) \n", + "\n", + "block7_bin_stab <- ggplot(block_bin_sub7, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Block Correlation 0.7 (Binary)\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1) \n", + "\n", + "block9_bin_stab <- ggplot(block_bin_sub9, aes(fill=method, y=Stab, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Block Correlation 0.9 (Binary)\") + xlab(\"Number of Samples\") + ylab(\"Stability\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1) \n", + "\n", + "# ggarrange(block9_bin_stab, block7_bin_stab, block5_bin_stab, block3_bin_stab, \n", + "# nrow=2, ncol = 2, labels = \"AUTO\", common.legend = T, legend = \"bottom\") " + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_bar).”\n", + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_bar).”\n", + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_bar).”\n", + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_bar).”\n" + ] + } + ], + "source": [ + "figS3_combined <- ggarrange(block9_cts_stab + rremove(\"x.title\"), block7_cts_stab + rremove(\"x.title\"), \n", + " block5_cts_stab + rremove(\"x.title\"), block3_cts_stab + rremove(\"x.title\"), \n", + " block9_bin_stab + rremove(\"x.title\"), block7_bin_stab + rremove(\"x.title\"), \n", + " block5_bin_stab, block3_bin_stab, \n", + " nrow=4, ncol = 2, labels = \"AUTO\", common.legend = T, legend = \"bottom\") \n", + "ggsave(\"../figures_combined/figS3_combined.png\", figS3_combined, dpi = 300, width = 6.5, height = 8)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Figure 3: best method based on MSE/AUC" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "toe9_cts_mse <- ggplot(toe_cts_sub9, aes(fill=method, y=MSE_mean, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Toeplitz 0.9\") + xlab('') + ylab(\"MSE\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1)\n", + "\n", + "block1_cts_mse <- ggplot(block_cts_sub1, aes(fill=method, y=MSE_mean, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " xlab('') + ggtitle(\"Block 0.1\") + ylab(\"MSE\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1) \n", + "\n", + "toe9_cts_FNR <- ggplot(toe_cts_sub9, aes(fill=method, y=FN_mean/6, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " xlab('') + ylab(\"FNR\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) \n", + "\n", + "block1_cts_FNR <- ggplot(block_cts_sub1, aes(fill=method, y=FN_mean/6, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " xlab('') + ylab(\"FNR\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) \n", + "\n", + "toe9_cts_FPR <- ggplot(toe_cts_sub9, aes(fill=method, y=FP_mean/num_select, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " xlab(\"Number of Samples\") + ylab(\"FPR\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) \n", + "\n", + "block1_cts_FPR <- ggplot(block_cts_sub1, aes(fill=method, y=FP_mean/num_select, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " xlab(\"Number of Samples\") + ylab(\"FPR\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both)\n", + "\n", + "# ggarrange(toe9_cts_mse, block1_cts_mse, toe9_cts_FNR, block1_cts_FNR, toe9_cts_FPR, block1_cts_FPR, \n", + "# nrow=3, ncol = 2, labels = \"AUTO\", common.legend = T, legend = \"bottom\") " + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "toe9_bin_ROC <- ggplot(toe_bin_sub9, aes(fill=method, y=ROC_mean, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Toeplitz 0.9 (Binary)\") + xlab('') + ylab(\"AUC\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1)\n", + "\n", + "block1_bin_ROC <- ggplot(block_bin_sub1, aes(fill=method, y=ROC_mean, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " xlab('') + ggtitle(\"Block 0.1 (Binary)\") + ylab(\"AUC\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) + ylim(0, 1) \n", + "\n", + "toe9_bin_FNR <- ggplot(toe_bin_sub9, aes(fill=method, y=FN_mean/6, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " xlab('') + ylab(\"FNR\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) \n", + "\n", + "block1_bin_FNR <- ggplot(block_bin_sub1, aes(fill=method, y=FN_mean/6, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " xlab('') + ylab(\"FNR\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) \n", + "\n", + "toe9_bin_FPR <- ggplot(toe_bin_sub9, aes(fill=method, y=FP_mean/num_select, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " xlab(\"Number of Samples\") + ylab(\"FPR\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both) \n", + "\n", + "block1_bin_FPR <- ggplot(block_bin_sub1, aes(fill=method, y=FP_mean/num_select, x=N)) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " xlab(\"Number of Samples\") + ylab(\"FPR\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\",\n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both)\n", + "\n", + "# ggarrange(toe9_bin_ROC, block1_bin_ROC, toe9_bin_FNR, block1_bin_FNR, toe9_bin_FPR, block1_bin_FPR, \n", + "# nrow=3, ncol = 2, labels = \"AUTO\", common.legend = T, legend = \"bottom\")" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message:\n", + "“Removed 1 rows containing missing values (geom_bar).”\n", + "Warning message:\n", + "“Removed 1 rows containing missing values (geom_bar).”\n", + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_bar).”\n", + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_bar).”\n", + "Warning message:\n", + "“Removed 4 rows containing missing values (geom_bar).”\n", + "Warning message:\n", + "“Removed 11 rows containing missing values (geom_bar).”\n" + ] + } + ], + "source": [ + "fig3_combined <- ggarrange(toe9_cts_mse, block1_cts_mse, toe9_bin_ROC, block1_bin_ROC,\n", + " toe9_cts_FNR, block1_cts_FNR, toe9_bin_FNR, block1_bin_FNR, \n", + " toe9_cts_FPR, block1_cts_FPR, toe9_bin_FPR, block1_bin_FPR,\n", + " nrow=3, ncol = 4, labels = \"AUTO\", common.legend = T, legend = \"bottom\") \n", + "ggsave(\"../figures_combined/fig3_combined.png\", fig3_combined, dpi = 300, width = 10, height = 6)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Figure S4: check feature correlation impact (continuous, selected case)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1] \"lasso: n: 100 p: 1000 rou: 0\"\n", + "[1] \"elnet: n: 100 p: 1000 rou: 0\"\n", + "[1] \"complasso: n: 100 p: 1000 rou: 0\"\n", + "[1] \"rf: n: 100 p: 1000 rou: 0\"\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "
  1. 1
  2. 2
  3. 3
  4. 6
  5. 7
  6. 8
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 1\n", + "\\item 2\n", + "\\item 3\n", + "\\item 6\n", + "\\item 7\n", + "\\item 8\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 1\n", + "2. 2\n", + "3. 3\n", + "4. 6\n", + "5. 7\n", + "6. 8\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 1 2 3 6 7 8" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# load results for 4 methods\n", + "load('../sim_data/independent_Lasso.RData')\n", + "load('../sim_data/independent_Elnet.RData')\n", + "load('../sim_data/independent_compLasso.RData')\n", + "load('../sim_data/independent_RF.RData')\n", + "\n", + "# check index\n", + "b = 14\n", + "print(paste0('lasso: ', 'n: ', results_ind_lasso[[b]]$n, ' p: ', results_ind_lasso[[b]]$p, \n", + " ' rou: ', results_ind_lasso[[b]]$rou))\n", + "print(paste0('elnet: ', 'n: ', results_ind_elnet[[b]]$n, ' p: ', results_ind_elnet[[b]]$p, \n", + " ' rou: ', results_ind_elnet[[b]]$rou))\n", + "print(paste0('complasso: ', 'n: ', results_ind_compLasso[[b]]$n, ' p: ', results_ind_compLasso[[b]]$p, \n", + " ' rou: ', results_ind_compLasso[[b]]$rou))\n", + "print(paste0('rf: ', 'n: ', results_ind_rf[[b]]$n, ' p: ', results_ind_rf[[b]]$p, \n", + " ' rou: ', results_ind_rf[[b]]$rou))\n", + "\n", + "# load simulated data\n", + "load('../sim_data/sim_independent_P_1000_N_100.RData', dat <- new.env())\n", + "i = 1\n", + "sub = dat$sim_array[[i]]\n", + "coef = sub$beta\n", + "coef.true = which(coef != 0)\n", + "coef.true\n", + "\n", + "# summarize results\n", + "table_ind = data.frame(matrix(0, nrow=1000, ncol=6))\n", + "colnames(table_ind) = c('FeatureIndex', 'FeatureTrue', 'Lasso', 'Elnet', 'compLasso', 'RF')\n", + "table_ind$FeatureIndex = seq(1, 1000, 1)\n", + "table_ind$FeatureTrue[coef.true] = 1\n", + "\n", + "table_ind$Lasso = colMeans(results_ind_lasso[[b]]$Stab.table)\n", + "table_ind$Elnet = colMeans(results_ind_elnet[[b]]$Stab.table)\n", + "table_ind$compLasso = colMeans(results_ind_compLasso[[b]]$Stab.table)\n", + "table_ind$RF = colMeans(results_ind_rf[[b]]$Stab.table)\n", + "\n", + "# zoom in first 15 features\n", + "ind_cts_Lasso <- ggplot(table_ind, aes(x=FeatureIndex, y=Lasso, color=as.factor(FeatureTrue))) + \n", + " geom_point() + scale_color_manual(values=c('black', 'red')) + \n", + " theme(legend.position=\"top\") + labs(color =\"True Feature\") + \n", + " labs(title='Lasso (Independent)', x='Feature Index', y='Selection Prob') +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8)) + xlim(1, 15) + ylim(0, 1)\n", + "\n", + "\n", + "ind_cts_Elnet <- ggplot(table_ind, aes(x=FeatureIndex, y=Elnet, color=as.factor(FeatureTrue))) + \n", + " geom_point() + scale_color_manual(values=c('black', 'red')) + \n", + " theme(legend.position=\"top\") + labs(color =\"True Feature\") +\n", + " labs(title='Elastic Net (Independent)', x='Feature Index', y='Selection Prob') +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8)) + xlim(1, 15) + ylim(0, 1)\n", + "\n", + "\n", + "ind_cts_compLasso <- ggplot(table_ind, aes(x=FeatureIndex, y=compLasso, color=as.factor(FeatureTrue))) + \n", + " geom_point() + scale_color_manual(values=c('black', 'red')) + \n", + " theme(legend.position=\"top\") + labs(color =\"True Feature\") +\n", + " labs(title='Compositional Lasso (Ind)', x='Feature Index', y='Selection Prob') +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8)) + xlim(1, 15) + ylim(0, 1)\n", + "\n", + "\n", + "ind_cts_RF <- ggplot(table_ind, aes(x=FeatureIndex, y=RF, color=as.factor(FeatureTrue))) + \n", + " geom_point() + scale_color_manual(values=c('black', 'red')) + \n", + " theme(legend.position=\"top\") + labs(color =\"True Feature\") +\n", + " labs(title='Random Forests (Independent)', x='Feature Index', y='Selection Prob') +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8)) + xlim(1, 15) + ylim(0, 1)\n", + " \n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1] \"lasso: n: 100 p: 1000 rou: 0.9\"\n", + "[1] \"elnet: n: 100 p: 1000 rou: 0.9\"\n", + "[1] \"complasso: n: 100 p: 1000 rou: 0.9\"\n", + "[1] \"complasso: n: 100 p: 1000 rou: 0.9\"\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "
  1. 1
  2. 2
  3. 3
  4. 6
  5. 7
  6. 8
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 1\n", + "\\item 2\n", + "\\item 3\n", + "\\item 6\n", + "\\item 7\n", + "\\item 8\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 1\n", + "2. 2\n", + "3. 3\n", + "4. 6\n", + "5. 7\n", + "6. 8\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 1 2 3 6 7 8" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# load results for 4 methods\n", + "load('../sim_data/toe_Lasso.RData')\n", + "load('../sim_data/toe_Elnet.RData')\n", + "load('../sim_data/toe_compLasso.RData')\n", + "load('../sim_data/toe_RF.RData')\n", + "\n", + "# check index\n", + "b = 78\n", + "print(paste0('lasso: ', 'n: ', results_toe_lasso[[b]]$n, ' p: ', results_toe_lasso[[b]]$p, \n", + " ' rou: ', results_toe_lasso[[b]]$rou))\n", + "print(paste0('elnet: ', 'n: ', results_toe_elnet[[b]]$n, ' p: ', results_toe_elnet[[b]]$p, \n", + " ' rou: ', results_toe_elnet[[b]]$rou))\n", + "print(paste0('complasso: ', 'n: ', results_toe_compLasso[[b]]$n, ' p: ', results_toe_compLasso[[b]]$p, \n", + " ' rou: ', results_toe_compLasso[[b]]$rou))\n", + "print(paste0('complasso: ', 'n: ', results_toe_rf[[b]]$n, ' p: ', results_toe_rf[[b]]$p, \n", + " ' rou: ', results_toe_rf[[b]]$rou))\n", + "\n", + "# load simulated data\n", + "load('../sim_data/sim_toeplitz_corr0.9P_1000_N_100.RData', dat <- new.env())\n", + "i = 1\n", + "sub = dat$sim_array[[i]]\n", + "coef = sub$beta\n", + "coef.true = which(coef != 0)\n", + "coef.true\n", + "\n", + "# summarize results\n", + "table_toe = data.frame(matrix(0, nrow=1000, ncol=6))\n", + "colnames(table_toe) = c('FeatureIndex', 'FeatureTrue', 'Lasso', 'Elnet', 'compLasso', 'RF')\n", + "table_toe$FeatureIndex = seq(1, 1000, 1)\n", + "table_toe$FeatureTrue[coef.true] = 1\n", + "\n", + "table_toe$Lasso = colMeans(results_toe_lasso[[b]]$Stab.table)\n", + "table_toe$Elnet = colMeans(results_toe_elnet[[b]]$Stab.table)\n", + "table_toe$compLasso = colMeans(results_toe_compLasso[[b]]$Stab.table)\n", + "table_toe$RF = colMeans(results_toe_rf[[b]]$Stab.table)\n", + "\n", + "# zoom in first 15 features\n", + "toe_cts_Lasso <- ggplot(table_toe, aes(x=FeatureIndex, y=Lasso, color=as.factor(FeatureTrue))) + \n", + " geom_point() + scale_color_manual(values=c('black', 'red')) + \n", + " theme(legend.position=\"top\") + labs(color =\"True Feature\") + \n", + " labs(title='Lasso (Toeplitz 0.9)', x='Feature Index', y='Selection Prob') +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8)) + xlim(1, 15) + ylim(0, 1)\n", + "\n", + "\n", + "toe_cts_Elnet <- ggplot(table_toe, aes(x=FeatureIndex, y=Elnet, color=as.factor(FeatureTrue))) + \n", + " geom_point() + scale_color_manual(values=c('black', 'red')) + \n", + " theme(legend.position=\"top\") + labs(color =\"True Feature\") +\n", + " labs(title='Elastic Net (Toeplitz 0.9)', x='Feature Index', y='Selection Prob') +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8)) + xlim(1, 15) + ylim(0, 1)\n", + "\n", + "\n", + "toe_cts_compLasso <- ggplot(table_toe, aes(x=FeatureIndex, y=compLasso, color=as.factor(FeatureTrue))) + \n", + " geom_point() + scale_color_manual(values=c('black', 'red')) + \n", + " theme(legend.position=\"top\") + labs(color =\"True Feature\") +\n", + " labs(title='Compositional Lasso (Toeplitz 0.9)', x='Feature Index', y='Selection Prob') +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8)) + xlim(1, 15) + ylim(0, 1)\n", + "\n", + "\n", + "toe_cts_RF <- ggplot(table_toe, aes(x=FeatureIndex, y=RF, color=as.factor(FeatureTrue))) + \n", + " geom_point() + scale_color_manual(values=c('black', 'red')) + \n", + " theme(legend.position=\"top\") + labs(color =\"True Feature\") +\n", + " labs(title='Random Forests (Toeplitz 0.9)', x='Feature Index', y='Selection Prob') +\n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " panel.background = element_blank(), axis.line = element_line(colour = \"black\"),\n", + " legend.text = element_text(size = 8)) + xlim(1, 15) + ylim(0, 1)\n", + " \n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message:\n", + "“Removed 985 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 985 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 985 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 985 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 985 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 985 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 985 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 985 rows containing missing values (geom_point).”\n", + "Warning message:\n", + "“Removed 985 rows containing missing values (geom_point).”\n" + ] + } + ], + "source": [ + "figS4_combined <- ggarrange(ind_cts_Lasso, toe_cts_Lasso, \n", + " ind_cts_Elnet, toe_cts_Elnet,\n", + " ind_cts_compLasso, toe_cts_compLasso,\n", + " ind_cts_RF, toe_cts_RF, \n", + " nrow=4, ncol = 2, align = \"hv\", labels = \"AUTO\", \n", + " common.legend = T, legend = \"bottom\")\n", + "\n", + "\n", + "ggsave(\"../figures_combined/figS4_combined.png\", figS4_combined, dpi = 300, width = 6.5, height = 8)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Supplementary Figure 5: number of features (continuous, selected case)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nqQL4umgYyeDrwNdRG0S9ePFiwsm88soro0ePXrdu3enTp81m86BBgxISEt5+++133nmHLBgp\nqqqqvv322/vuu09Ko9ayZcvBgwd/8sknDMN0797dq1Rubu68efMOHTr0xRdf7Nu3r127dk8/\n/XR+fv6HH35YWVmp0WhKSkrWrVv3+OOPd+jQgSB7/PjxMWPGVFRUKBEMROHGYhB/ZaPWICiA\nCx3lBqHuookZBHwd+DrwdQ3Pqwl8tQPvotEZRCawEwShrq7ut99+Ky0tRQht3LjxtddeO336\ntCAIer2+rq6uWbNm7s9LRopLly4hhDQaTatWrQ4dOvTjjz8OHjyY4zj835iYGK1Wu2/fvvvu\nu6+h7NWrVxcuXLho0aLp06cPHz68srJyw4YN5eXlL7zwQqdOnQ4fPvzFF1/89NNPo0ePvv/+\n+2VlN2/e3LFjxyeffPLYsWMEQQkKhf2ySdu2bSNrEOWyUWsQr+el8EJHv0GC9a1p7AYBXwe+\nDnyd1/Nq7F9tdBP6OvJdYYmnn34aIbR06dJHH33UZDK5t7Bu3TqFjYQIu92emZn51ltv4cPL\nly9PnDhx2rRp58+fl+rs3r17zpw5XsVld3Mm3NcnyxIEq6qqjhw5UlJSIgiCvworwd0m0WMQ\ngmw0G0T2vBq7QcRgD5JQGER0s0lpaWnQDSIBvo5CFnydctloNojseTV2g4g3h6+TWbFbs2bN\nu+++W1b2/9m78/Aoivx/4DU9dyYHObgJBELAcBggmHCJCKiAoIAHRNclCCyHXHIsLsohIPIV\nUMPl7oICCkF0FWSD4HIY5JL7SFCQcAQSIIYQckwmyRz9+6N+tsMk09NTcyXD+/Xw8GR6urpq\namo+U9NdXZV77Nix69ev79u3Lykp6Zdffjl//vz3338fGxsbEhLSqVMntuWx3WXjxo2//vrr\n7Nmz6enKwMDAnj17uvFsp8h1ffG0bdq0qTaVi6dnna2TmlMh9tLW8Apx+LrsvdG1pUKIuz81\nbq8Q4vJ1QIcQ6xDr3FghNeSjjVhHHspY56Bj95///GflypU7d+6kY/3S0tLOnTt39uzZ27dv\nr1+/vlevXsOGDfNtpMvIyPjkk0+mT5/esmXLzMzMVatWffPNNzk5OSNHjmzfvr2nT/96+WoI\nc53s3LmzadOmvXr1+vXXX1EhzlaIK3VSWyrEa58atoSuXwd0CLHuIfxoo0LcWCe1pUIeilgn\n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\nc8eMGZORkREREdG+fXt6SjIqKqpv3772koCXOejY9ejR48yZM4SQo0eP3rhxo2nTpjY7TJs2\nbe3atYSQqKgoe50/qO2q/l6kDAYD/ePSpUvCxh07dtAAl5SU1Lp1a3oBghCSm5tLg53RaPz4\n44/LyspCQ0MnT558+fLlwsJCQkhpaendu3fpBa+TJ09u2LCBENKxY8dnnnmG5/lTp04RQqKj\no+mcScKWli1b0i2kuqBcUlIyYMCAQ4cOEUJeffXVjRs32psOgCorK6N/5OXl0T+2b99Oz70l\nJSUJFyysDRo0iO5w6tQpOib1woULND727duXjoOB2i4nJ4de+SLenagWvAyxjtiPdVu2bDly\n5AghZNasWU8//TQh5Jtvvjl8+DAh5N133xXPDrxKfAgefc+ov/zlLzb3vNy+fVsYd1L1znDw\nG9Y/HK235+bm0g+zTCabPXt2WlrarFmz6HiOoKCgrKwsnuc//fRTmjYmJmbr1q2bN28WBp1s\n3LiR5/mNGzcKbaxv375paWnvv/++cLHjxx9/5HleWJKYDi7meV74lrW+rYf+8OA47vTp08XF\nxXq9XrhO0aFDh3379qX/Qbily8Yvv/xC91epVCNHjpw1a1ZISAghJCws7Pfff+d5/syZMw0a\nNGjQoEG/fv1oksGDB9MkHTt2nDt37vjx42lMDA4OvnTpktvfC/AQ8Zsnpk2bJjx76tQpn5QQ\nvACxTiTW/f3vfxdi3bx584YPH04XaBk4cCDuh61RHK88YX1+9bnnnjt58mRFRUVZWdkPP/wg\njBslhOzfv98LxQXvq6iooJ9elUpVUVFh8ywdUGwjIiLip59+ojuYzWa6JIM1juM++OADusP4\n8ePpRuEqAxUQEPDll1/Sfb744gu6cfny5XTL559/brOF53nh5ywh5NChQ//73/+qlo0aNGiQ\nvddbdaRIeHj4zz//TJ9ds2YN3Th+/Hi6Zf/+/VWvd0RERNjcUgc1nL2O3Y0bN2bOnCk81b17\ndx8WEjwKsU481p0/f77qfRhPPvmkMEUf1BCOO3Y3b960GVOiUCiEmXioMWPGeKGs4BPW5/yr\n3WHr1q3dunULDQ0NCgpq377922+/bTPHh8FgeOedd9q1a6fValu0aPGXv/zl5MmTwrP01rOg\noKDbt28nJSU1aNAgLCzs+eeft54QW1jGUYihVbfwPL927dqGDRtqtdrY2Fi9Xr9w4UJ7wW7R\n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\nFwe8TeoZO4PB0L9//wMHDghbFi1alJKSsm/fvqAgsVkRrl69+vPPP+/du9dm9kgsjA0gDneK\n+QRzrAMAqAmkduwWL1584MABrVYbFhaWm5tLCAkNDT169OjSpUsXLFggkvDu3btFRUUxMTF3\n794VNhoMBraFsR+qxSsBwPuYYx3Aw6AGDikDG1I7dqmpqSqVKiMj45///OeyZcsIIdu2bYuM\njNy6dat4sEtISEhISMjKyjp69Kiw0eHC2NeuXUtLSxP279evX5MmTaS/KvGZbN2YViaTMedF\nV41kSyuXy51Ny5yXswm1Wi3b2j7WS2oy8FqFuOs4nn6xqBA2zLEOAKAmkNqxu3PnTmRkJF1j\nh6pfv350dPSNGzcYcr179674wtg3b97cuHGj8LBz584xMTGEkAoiiVarZSgVW1rmvJRKJfMa\ntXK5nKatmDX5gSfs/35iLqezCZmXHJXL5b594yS2LhfzdT2hkNZ6yVHXj+8HFcK2SLEN98Y6\nAAAvk9qxa9269ZkzZ44f/3MJ0czMzCtXrrRt25YhV4cLYz/66KNr1qwRHkZGRtJp3yV2GVxZ\nD8OptDzPFxcXs2VUXl5ufTdJVSIXpk0mE11UW3ofqurr0iye8+cD+z1CZyuzpKSE7fuVLqkp\nsoP4lXpny1lNhTiVnjVf1xMKaRUKhUJh9yP8EFYIx3GuD4Nzb6wDgJrPz0Z5Se3YJSUlnTlz\npkuXLmFhYYSQ+Pj4c+fOmc3mF198kSFXhwtj16lThw6/o4qKiuhasRK/aRwuLOvGtMx5WSwW\n19NK/+qtmpcnKtNmQgqn5o5xpUKIO944tn4Mc5ldf7Hia94/hBUil8uZjyBwb6wDf+VKrPM5\njJPzb1I7dtOnTz937tzmzZvpBdPTp08TQoYOHTpr1iyGXH2yMLYnmrL18sC164PtxxCzwBXu\njXVQE4jEBO3Pp4S/EcPBP0jt2HEct2nTpvHjx6enp2dnZ0dGRvbs2fOJJ55gyzUgIAALY4MN\nzdGTwt+IsG6Enq5T3BvrnKVQKByed5TJZOIjWZULZ//54MF3nHlcL3Fh+KxCoWBOy3GclLQa\njYbtni2bg3gnrVwu91peDPu7/Tiuv1iOE5tzt5ZWyAOfUyI1ONO04pdrnFh5ghDSvXv37t27\nO5XEHrcsjA0A4AlujHVOEY/Xwj5SdquW9c+n0sc6OJWWOVNX0kp8sa6UTeQgigX/eOCx/a9e\n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\nzi96ZUl1N27coA1+5JFHuI1Hjx6l/7Cehsrmtbz77rtLly6lZdu1axcfH799+3ZCyIsvvsgT\nH/A5mO4EalRPch2nqKjoxo0bhJDevXvbqwK8Fu6KBfG4XEPP+VujfxcSQpo2bWq9J73Cg/uV\nn14OzPnmm28IIRKJ5LHHHsvKyqIbW7duze1QVVVVVlZWVlZGc9avv/5Kt7/88su9e/cmhOTl\n5f3000/2Gnzt2jX6Dy7ZsSy7bds2QkhgYOCzzz5rr+CiRYvy8/MPHDhw7ty5y5cv5+fnE0Ja\ntmw5ZMgQe0UAwG/Un1xH0dN1BDPY+SYM7EA8e8kuIyPjwoULhJCmTZvGxsayLHvu3DlCSGxs\nLJ3+TafT0T3pROrUnj176FoOiYmJ7du356YCLi8vp//Q6XQ9evQICwtr3769wWAoLCykf+b2\n79//iy++GDNmDN1t8+bN9hrMTS5w9+5d+o9du3bRHywSExO5Hyysbd++ffr06dOnTzebzUOH\nDu3Ro8eePXvofKTvvvuuU/O/A4CPqg+5zho3sKODSPAtQn+KBaiOS3Y///wzPW9vsVjy8/N3\n7tzJsiwh5OOPPyaEXL16taysjFhd2BEfHy+VSs1m8549exYsWNCvX79jx44lJyebzebg4OCl\nS5cSq78U165d26JFC6VSuXHjRnqZy4IFC1QqFVf7kCFDGIYZNWrU3LlzCSHffffd+vXra7wu\niruu5euvv5bL5Q0bNvznP/9JCImIiKCXv2RkZAwbNowQ0q1bN3q1ckZGBr3t/5dffhk+fHhO\nTg69SvrZZ5/9y1/+UvsxBQDvUx9ynbXTp0/Tf2Bg55N4bqywvis2LCyskR3vvvuu+2/yAK/z\n4MEDnn4llUrffvttuueXX35JN65evZorTi8othEVFfXzzz9z+7zyyivV95k+fTp9lrtZdf/+\n/XRLt27d6JZNmzbZa3b1q+IiIyO52ctSUlLoxilTptAtly5dolO3W3viiSdKSkpqL5bgSZjH\nDvjVk1xnjc7G0rp1a9ciB57h6nQnhJA5c+bUWXPBe/znP/+p3hnUanVcXNyLL7547tw5bs8Z\nM2bQZ60TGcuyO3bs6NevX3h4eHBwcJcuXRYsWHD//n3rHSwWS3Jycnx8fHBwcOPGjYcOHXrg\nwAHu2aFDh9LDcqXon7+EkMcee8xes3U63YIFC9q1a6dSqdq3bz9r1izr1Xi49Lp582Zu44kT\n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\n", + "text/plain": [ + "plot without title" + ] + }, + "metadata": { + "image/png": { + "height": 420, + "width": 420 + }, + "text/plain": { + "height": 420, + "width": 420 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "ind_num_select <- ggplot(ind_cts, aes(fill=method, y=num_select, x=as.factor(N))) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Independent\") + xlab(\"Number of Samples\") + ylab(\"# Selected Features\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\", \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both)\n", + "\n", + "toe1_num_select <- ggplot(toe_cts[toe_cts$Corr %in% 0.1,], aes(fill=method, y=num_select, x=as.factor(N))) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Toeplitz 0.1\") + xlab(\"Number of Samples\") + ylab(\"# Selected Features\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\", \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both)\n", + "\n", + "toe5_num_select <- ggplot(toe_cts[toe_cts$Corr %in% 0.5,], aes(fill=method, y=num_select, x=as.factor(N))) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Toeplitz 0.5\") + xlab(\"Number of Samples\") + ylab(\"# Selected Features\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\", \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both)\n", + "\n", + "toe9_num_select <- ggplot(toe_cts[toe_cts$Corr %in% 0.9,], aes(fill=method, y=num_select, x=as.factor(N))) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Toeplitz 0.9\") + xlab(\"Number of Samples\") + ylab(\"# Selected Features\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\", \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both)\n", + "\n", + "block9_num_select <- ggplot(block_cts[block_cts$Corr %in% 0.9,], aes(fill=method, y=num_select, x=as.factor(N))) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Block 0.9\") + xlab(\"Number of Samples\") + ylab(\"# Selected Features\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\", \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both)\n", + "\n", + "block1_num_select <- ggplot(block_cts[block_cts$Corr %in% 0.1,], aes(fill=method, y=num_select, x=as.factor(N))) + \n", + " geom_bar(position=\"dodge\", stat=\"identity\") + \n", + " ggtitle(\"Block 0.1\") + xlab(\"Number of Samples\") + ylab(\"# Selected Features\") + \n", + " theme(plot.title = element_text(hjust = 0.5, size=12, face=\"bold.italic\"), \n", + " legend.position=\"top\", \n", + " axis.title.x = element_text(size=10, face=\"bold\"),\n", + " axis.title.y = element_text(size=10, face=\"bold\"),\n", + " axis.text.x = element_text(angle = 55)) + \n", + " facet_grid(~P, labeller = label_both)\n", + "\n", + "fig_cts_num_select <- ggarrange(ind_num_select, toe1_num_select, \n", + " toe5_num_select, toe9_num_select, \n", + " block9_num_select, block1_num_select, \n", + " nrow=3, ncol = 2, align = \"hv\", labels = \"AUTO\", \n", + " common.legend = T, legend = \"bottom\") \n", + "fig_cts_num_select\n", + "ggsave(\"../figures_combined/fig_cts_num_select.png\", fig_cts_num_select, dpi = 300, width = 6.5, height = 8)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_cts/.ipynb_checkpoints/0.1_sim_indepdent_lasso-checkpoint.ipynb b/simulations/notebooks_sim_cts/.ipynb_checkpoints/0.1_sim_indepdent_lasso-checkpoint.ipynb new file mode 100755 index 0000000..84c4b66 --- /dev/null +++ b/simulations/notebooks_sim_cts/.ipynb_checkpoints/0.1_sim_indepdent_lasso-checkpoint.ipynb @@ -0,0 +1,345 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize lasso results on Independent Simulation Scenarios for continuous outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'\n", + "\n", + "load(paste0(dir, '/independent_Lasso.RData'))" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "files = NULL\n", + "for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_independent_', paste('P', p, 'N', n, sep='_'), '.RData'))\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "avg_FDR = NULL\n", + "for (i in 1:length(files)){\n", + " sim_file = files[i]\n", + " load(sim_file, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_ind_lasso[[i]]$Stab.table\n", + " \n", + " FDR = NULL\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}\n" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "table_ind = NULL\n", + "tmp_num_select = rep(0, length(results_ind_lasso))\n", + "for (i in 1:length(results_ind_lasso)){\n", + " table_ind = rbind(table_ind, results_ind_lasso[[i]][c('n', 'p', 'rou', 'FP', 'FN', 'MSE', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_ind_lasso[[i]]$Stab.table))\n", + " \n", + "}\n", + "table_ind = as.data.frame(table_ind)\n", + "table_ind$num_select = tmp_num_select\n", + "table_ind$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
nprouFPFNMSEStabnum_selectFDR
50 50 0 8.36 ( 0.45 )0.02 ( 0.01 )0.54 ( 0.03 )0.37 13.34 0.51
100 50 0 5.5 ( 0.42 ) 0 ( 0 ) 0.36 ( 0.01 )0.51 10.50 0.37
500 50 0 2.33 ( 0.14 )0 ( 0 ) 0.28 ( 0 ) 0.79 7.33 0.15
1000 50 0 1.82 ( 0.13 )0 ( 0 ) 0.26 ( 0 ) 0.86 6.82 0.10
50 100 0 11.1 ( 0.38 )0.08 ( 0.03 )0.66 ( 0.04 )0.32 16.02 0.61
100 100 0 7.23 ( 0.4 ) 0 ( 0 ) 0.41 ( 0.01 )0.46 12.23 0.46
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllll}\n", + " n & p & rou & FP & FN & MSE & Stab & num\\_select & FDR\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0 & 8.36 ( 0.45 ) & 0.02 ( 0.01 ) & 0.54 ( 0.03 ) & 0.37 & 13.34 & 0.51 \\\\\n", + "\t 100 & 50 & 0 & 5.5 ( 0.42 ) & 0 ( 0 ) & 0.36 ( 0.01 ) & 0.51 & 10.50 & 0.37 \\\\\n", + "\t 500 & 50 & 0 & 2.33 ( 0.14 ) & 0 ( 0 ) & 0.28 ( 0 ) & 0.79 & 7.33 & 0.15 \\\\\n", + "\t 1000 & 50 & 0 & 1.82 ( 0.13 ) & 0 ( 0 ) & 0.26 ( 0 ) & 0.86 & 6.82 & 0.10 \\\\\n", + "\t 50 & 100 & 0 & 11.1 ( 0.38 ) & 0.08 ( 0.03 ) & 0.66 ( 0.04 ) & 0.32 & 16.02 & 0.61 \\\\\n", + "\t 100 & 100 & 0 & 7.23 ( 0.4 ) & 0 ( 0 ) & 0.41 ( 0.01 ) & 0.46 & 12.23 & 0.46 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| n | p | rou | FP | FN | MSE | Stab | num_select | FDR |\n", + "|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0 | 8.36 ( 0.45 ) | 0.02 ( 0.01 ) | 0.54 ( 0.03 ) | 0.37 | 13.34 | 0.51 |\n", + "| 100 | 50 | 0 | 5.5 ( 0.42 ) | 0 ( 0 ) | 0.36 ( 0.01 ) | 0.51 | 10.50 | 0.37 |\n", + "| 500 | 50 | 0 | 2.33 ( 0.14 ) | 0 ( 0 ) | 0.28 ( 0 ) | 0.79 | 7.33 | 0.15 |\n", + "| 1000 | 50 | 0 | 1.82 ( 0.13 ) | 0 ( 0 ) | 0.26 ( 0 ) | 0.86 | 6.82 | 0.10 |\n", + "| 50 | 100 | 0 | 11.1 ( 0.38 ) | 0.08 ( 0.03 ) | 0.66 ( 0.04 ) | 0.32 | 16.02 | 0.61 |\n", + "| 100 | 100 | 0 | 7.23 ( 0.4 ) | 0 ( 0 ) | 0.41 ( 0.01 ) | 0.46 | 12.23 | 0.46 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN MSE Stab num_select FDR \n", + "1 50 50 0 8.36 ( 0.45 ) 0.02 ( 0.01 ) 0.54 ( 0.03 ) 0.37 13.34 0.51\n", + "2 100 50 0 5.5 ( 0.42 ) 0 ( 0 ) 0.36 ( 0.01 ) 0.51 10.50 0.37\n", + "3 500 50 0 2.33 ( 0.14 ) 0 ( 0 ) 0.28 ( 0 ) 0.79 7.33 0.15\n", + "4 1000 50 0 1.82 ( 0.13 ) 0 ( 0 ) 0.26 ( 0 ) 0.86 6.82 0.10\n", + "5 50 100 0 11.1 ( 0.38 ) 0.08 ( 0.03 ) 0.66 ( 0.04 ) 0.32 16.02 0.61\n", + "6 100 100 0 7.23 ( 0.4 ) 0 ( 0 ) 0.41 ( 0.01 ) 0.46 12.23 0.46" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_ind)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_ind <- apply(table_ind,2,as.character)\n", + "rownames(result.table_ind) = rownames(table_ind)\n", + "result.table_ind = as.data.frame(result.table_ind)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_ind$n = tidyr::extract_numeric(result.table_ind$n)\n", + "result.table_ind$p = tidyr::extract_numeric(result.table_ind$p)\n", + "result.table_ind$ratio = result.table_ind$p / result.table_ind$n\n", + "\n", + "result.table_ind = result.table_ind[c('n', 'p', 'ratio', 'Stab', 'MSE', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_ind)[1:3] = c('N', 'P', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”" + ] + } + ], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_ind$Stab = as.numeric(as.character(result.table_ind$Stab))\n", + "result.table_ind$MSE_mean = as.numeric(substr(result.table_ind$MSE, start=1, stop=4))\n", + "result.table_ind$FP_mean = as.numeric(substr(result.table_ind$FP, start=1, stop=4))\n", + "result.table_ind$FN_mean = as.numeric(substr(result.table_ind$FN, start=1, stop=4))\n", + "result.table_ind$FN_mean[is.na(result.table_ind$FN_mean)] = 0\n", + "result.table_ind$num_select = as.numeric(as.character(result.table_ind$num_select))" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
50 50 1.00 0.37 0.54 ( 0.03 ) 8.36 ( 0.45 ) 0.02 ( 0.01 ) 13.34 0.51 0.54 8.36 0.02
100 50 0.50 0.51 0.36 ( 0.01 ) 5.5 ( 0.42 ) 0 ( 0 ) 10.50 0.37 0.36 5.50 0.00
500 50 0.10 0.79 0.28 ( 0 ) 2.33 ( 0.14 ) 0 ( 0 ) 7.33 0.15 0.28 2.33 0.00
1000 50 0.05 0.86 0.26 ( 0 ) 1.82 ( 0.13 ) 0 ( 0 ) 6.82 0.1 0.26 1.82 0.00
50 100 2.00 0.32 0.66 ( 0.04 ) 11.1 ( 0.38 ) 0.08 ( 0.03 ) 16.02 0.61 0.66 11.10 0.08
100 100 1.00 0.46 0.41 ( 0.01 ) 7.23 ( 0.4 ) 0 ( 0 ) 12.23 0.46 0.41 7.23 0.00
500 100 0.20 0.71 0.29 ( 0 ) 3.26 ( 0.25 ) 0 ( 0 ) 8.26 0.22 0.29 3.26 0.00
1000 100 0.10 0.82 0.27 ( 0 ) 2.25 ( 0.15 ) 0 ( 0 ) 7.25 0.15 0.27 2.25 0.00
50 500 10.00 0.19 1.41 ( 0.11 ) 19.89 ( 0.38 )0.64 ( 0.08 ) 24.25 0.77 1.41 19.80 0.64
100 500 5.00 0.30 0.48 ( 0.02 ) 14.71 ( 0.7 ) 0 ( 0 ) 19.71 0.66 0.48 14.70 0.00
500 500 1.00 0.61 0.28 ( 0 ) 4.82 ( 0.34 ) 0 ( 0 ) 9.82 0.32 0.28 4.82 0.00
1000 500 0.50 0.72 0.27 ( 0 ) 3.35 ( 0.32 ) 0 ( 0 ) 8.35 0.21 0.27 3.35 0.00
50 1000 20.00 0.14 2.24 ( 0.19 ) 23.95 ( 0.37 )1.19 ( 0.09 ) 27.76 0.82 2.24 23.90 1.19
100 1000 10.00 0.25 0.53 ( 0.02 ) 18.53 ( 0.59 )0 ( 0 ) 23.53 0.73 0.53 18.50 0.00
500 1000 2.00 0.52 0.29 ( 0 ) 6.51 ( 0.45 ) 0 ( 0 ) 11.51 0.4 0.29 6.51 0.00
1000 1000 1.00 0.64 0.27 ( 0 ) 4.39 ( 0.56 ) 0 ( 0 ) 9.39 0.26 0.27 4.39 0.00
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|llllllllllll}\n", + " N & P & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t 50 & 50 & 1.00 & 0.37 & 0.54 ( 0.03 ) & 8.36 ( 0.45 ) & 0.02 ( 0.01 ) & 13.34 & 0.51 & 0.54 & 8.36 & 0.02 \\\\\n", + "\t 100 & 50 & 0.50 & 0.51 & 0.36 ( 0.01 ) & 5.5 ( 0.42 ) & 0 ( 0 ) & 10.50 & 0.37 & 0.36 & 5.50 & 0.00 \\\\\n", + "\t 500 & 50 & 0.10 & 0.79 & 0.28 ( 0 ) & 2.33 ( 0.14 ) & 0 ( 0 ) & 7.33 & 0.15 & 0.28 & 2.33 & 0.00 \\\\\n", + "\t 1000 & 50 & 0.05 & 0.86 & 0.26 ( 0 ) & 1.82 ( 0.13 ) & 0 ( 0 ) & 6.82 & 0.1 & 0.26 & 1.82 & 0.00 \\\\\n", + "\t 50 & 100 & 2.00 & 0.32 & 0.66 ( 0.04 ) & 11.1 ( 0.38 ) & 0.08 ( 0.03 ) & 16.02 & 0.61 & 0.66 & 11.10 & 0.08 \\\\\n", + "\t 100 & 100 & 1.00 & 0.46 & 0.41 ( 0.01 ) & 7.23 ( 0.4 ) & 0 ( 0 ) & 12.23 & 0.46 & 0.41 & 7.23 & 0.00 \\\\\n", + "\t 500 & 100 & 0.20 & 0.71 & 0.29 ( 0 ) & 3.26 ( 0.25 ) & 0 ( 0 ) & 8.26 & 0.22 & 0.29 & 3.26 & 0.00 \\\\\n", + "\t 1000 & 100 & 0.10 & 0.82 & 0.27 ( 0 ) & 2.25 ( 0.15 ) & 0 ( 0 ) & 7.25 & 0.15 & 0.27 & 2.25 & 0.00 \\\\\n", + "\t 50 & 500 & 10.00 & 0.19 & 1.41 ( 0.11 ) & 19.89 ( 0.38 ) & 0.64 ( 0.08 ) & 24.25 & 0.77 & 1.41 & 19.80 & 0.64 \\\\\n", + "\t 100 & 500 & 5.00 & 0.30 & 0.48 ( 0.02 ) & 14.71 ( 0.7 ) & 0 ( 0 ) & 19.71 & 0.66 & 0.48 & 14.70 & 0.00 \\\\\n", + "\t 500 & 500 & 1.00 & 0.61 & 0.28 ( 0 ) & 4.82 ( 0.34 ) & 0 ( 0 ) & 9.82 & 0.32 & 0.28 & 4.82 & 0.00 \\\\\n", + "\t 1000 & 500 & 0.50 & 0.72 & 0.27 ( 0 ) & 3.35 ( 0.32 ) & 0 ( 0 ) & 8.35 & 0.21 & 0.27 & 3.35 & 0.00 \\\\\n", + "\t 50 & 1000 & 20.00 & 0.14 & 2.24 ( 0.19 ) & 23.95 ( 0.37 ) & 1.19 ( 0.09 ) & 27.76 & 0.82 & 2.24 & 23.90 & 1.19 \\\\\n", + "\t 100 & 1000 & 10.00 & 0.25 & 0.53 ( 0.02 ) & 18.53 ( 0.59 ) & 0 ( 0 ) & 23.53 & 0.73 & 0.53 & 18.50 & 0.00 \\\\\n", + "\t 500 & 1000 & 2.00 & 0.52 & 0.29 ( 0 ) & 6.51 ( 0.45 ) & 0 ( 0 ) & 11.51 & 0.4 & 0.29 & 6.51 & 0.00 \\\\\n", + "\t 1000 & 1000 & 1.00 & 0.64 & 0.27 ( 0 ) & 4.39 ( 0.56 ) & 0 ( 0 ) & 9.39 & 0.26 & 0.27 & 4.39 & 0.00 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| N | P | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 1.00 | 0.37 | 0.54 ( 0.03 ) | 8.36 ( 0.45 ) | 0.02 ( 0.01 ) | 13.34 | 0.51 | 0.54 | 8.36 | 0.02 |\n", + "| 100 | 50 | 0.50 | 0.51 | 0.36 ( 0.01 ) | 5.5 ( 0.42 ) | 0 ( 0 ) | 10.50 | 0.37 | 0.36 | 5.50 | 0.00 |\n", + "| 500 | 50 | 0.10 | 0.79 | 0.28 ( 0 ) | 2.33 ( 0.14 ) | 0 ( 0 ) | 7.33 | 0.15 | 0.28 | 2.33 | 0.00 |\n", + "| 1000 | 50 | 0.05 | 0.86 | 0.26 ( 0 ) | 1.82 ( 0.13 ) | 0 ( 0 ) | 6.82 | 0.1 | 0.26 | 1.82 | 0.00 |\n", + "| 50 | 100 | 2.00 | 0.32 | 0.66 ( 0.04 ) | 11.1 ( 0.38 ) | 0.08 ( 0.03 ) | 16.02 | 0.61 | 0.66 | 11.10 | 0.08 |\n", + "| 100 | 100 | 1.00 | 0.46 | 0.41 ( 0.01 ) | 7.23 ( 0.4 ) | 0 ( 0 ) | 12.23 | 0.46 | 0.41 | 7.23 | 0.00 |\n", + "| 500 | 100 | 0.20 | 0.71 | 0.29 ( 0 ) | 3.26 ( 0.25 ) | 0 ( 0 ) | 8.26 | 0.22 | 0.29 | 3.26 | 0.00 |\n", + "| 1000 | 100 | 0.10 | 0.82 | 0.27 ( 0 ) | 2.25 ( 0.15 ) | 0 ( 0 ) | 7.25 | 0.15 | 0.27 | 2.25 | 0.00 |\n", + "| 50 | 500 | 10.00 | 0.19 | 1.41 ( 0.11 ) | 19.89 ( 0.38 ) | 0.64 ( 0.08 ) | 24.25 | 0.77 | 1.41 | 19.80 | 0.64 |\n", + "| 100 | 500 | 5.00 | 0.30 | 0.48 ( 0.02 ) | 14.71 ( 0.7 ) | 0 ( 0 ) | 19.71 | 0.66 | 0.48 | 14.70 | 0.00 |\n", + "| 500 | 500 | 1.00 | 0.61 | 0.28 ( 0 ) | 4.82 ( 0.34 ) | 0 ( 0 ) | 9.82 | 0.32 | 0.28 | 4.82 | 0.00 |\n", + "| 1000 | 500 | 0.50 | 0.72 | 0.27 ( 0 ) | 3.35 ( 0.32 ) | 0 ( 0 ) | 8.35 | 0.21 | 0.27 | 3.35 | 0.00 |\n", + "| 50 | 1000 | 20.00 | 0.14 | 2.24 ( 0.19 ) | 23.95 ( 0.37 ) | 1.19 ( 0.09 ) | 27.76 | 0.82 | 2.24 | 23.90 | 1.19 |\n", + "| 100 | 1000 | 10.00 | 0.25 | 0.53 ( 0.02 ) | 18.53 ( 0.59 ) | 0 ( 0 ) | 23.53 | 0.73 | 0.53 | 18.50 | 0.00 |\n", + "| 500 | 1000 | 2.00 | 0.52 | 0.29 ( 0 ) | 6.51 ( 0.45 ) | 0 ( 0 ) | 11.51 | 0.4 | 0.29 | 6.51 | 0.00 |\n", + "| 1000 | 1000 | 1.00 | 0.64 | 0.27 ( 0 ) | 4.39 ( 0.56 ) | 0 ( 0 ) | 9.39 | 0.26 | 0.27 | 4.39 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Ratio Stab MSE FP FN num_select\n", + "1 50 50 1.00 0.37 0.54 ( 0.03 ) 8.36 ( 0.45 ) 0.02 ( 0.01 ) 13.34 \n", + "2 100 50 0.50 0.51 0.36 ( 0.01 ) 5.5 ( 0.42 ) 0 ( 0 ) 10.50 \n", + "3 500 50 0.10 0.79 0.28 ( 0 ) 2.33 ( 0.14 ) 0 ( 0 ) 7.33 \n", + "4 1000 50 0.05 0.86 0.26 ( 0 ) 1.82 ( 0.13 ) 0 ( 0 ) 6.82 \n", + "5 50 100 2.00 0.32 0.66 ( 0.04 ) 11.1 ( 0.38 ) 0.08 ( 0.03 ) 16.02 \n", + "6 100 100 1.00 0.46 0.41 ( 0.01 ) 7.23 ( 0.4 ) 0 ( 0 ) 12.23 \n", + "7 500 100 0.20 0.71 0.29 ( 0 ) 3.26 ( 0.25 ) 0 ( 0 ) 8.26 \n", + "8 1000 100 0.10 0.82 0.27 ( 0 ) 2.25 ( 0.15 ) 0 ( 0 ) 7.25 \n", + "9 50 500 10.00 0.19 1.41 ( 0.11 ) 19.89 ( 0.38 ) 0.64 ( 0.08 ) 24.25 \n", + "10 100 500 5.00 0.30 0.48 ( 0.02 ) 14.71 ( 0.7 ) 0 ( 0 ) 19.71 \n", + "11 500 500 1.00 0.61 0.28 ( 0 ) 4.82 ( 0.34 ) 0 ( 0 ) 9.82 \n", + "12 1000 500 0.50 0.72 0.27 ( 0 ) 3.35 ( 0.32 ) 0 ( 0 ) 8.35 \n", + "13 50 1000 20.00 0.14 2.24 ( 0.19 ) 23.95 ( 0.37 ) 1.19 ( 0.09 ) 27.76 \n", + "14 100 1000 10.00 0.25 0.53 ( 0.02 ) 18.53 ( 0.59 ) 0 ( 0 ) 23.53 \n", + "15 500 1000 2.00 0.52 0.29 ( 0 ) 6.51 ( 0.45 ) 0 ( 0 ) 11.51 \n", + "16 1000 1000 1.00 0.64 0.27 ( 0 ) 4.39 ( 0.56 ) 0 ( 0 ) 9.39 \n", + " FDR MSE_mean FP_mean FN_mean\n", + "1 0.51 0.54 8.36 0.02 \n", + "2 0.37 0.36 5.50 0.00 \n", + "3 0.15 0.28 2.33 0.00 \n", + "4 0.1 0.26 1.82 0.00 \n", + "5 0.61 0.66 11.10 0.08 \n", + "6 0.46 0.41 7.23 0.00 \n", + "7 0.22 0.29 3.26 0.00 \n", + "8 0.15 0.27 2.25 0.00 \n", + "9 0.77 1.41 19.80 0.64 \n", + "10 0.66 0.48 14.70 0.00 \n", + "11 0.32 0.28 4.82 0.00 \n", + "12 0.21 0.27 3.35 0.00 \n", + "13 0.82 2.24 23.90 1.19 \n", + "14 0.73 0.53 18.50 0.00 \n", + "15 0.4 0.29 6.51 0.00 \n", + "16 0.26 0.27 4.39 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_ind\n", + "\n", + "## export\n", + "write.table(result.table_ind, '../results_summary_cts/sim_ind_lasso.txt', sep='\\t', row.names=F)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_cts/.ipynb_checkpoints/0.2_sim_indepdent_elnet_cts-checkpoint.ipynb b/simulations/notebooks_sim_cts/.ipynb_checkpoints/0.2_sim_indepdent_elnet_cts-checkpoint.ipynb new file mode 100755 index 0000000..0db1fc6 --- /dev/null +++ b/simulations/notebooks_sim_cts/.ipynb_checkpoints/0.2_sim_indepdent_elnet_cts-checkpoint.ipynb @@ -0,0 +1,345 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize elastic net results on Independent Simulation Scenarios for continuous outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'\n", + "\n", + "load(paste0(dir, '/independent_Elnet.RData'))" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "files = NULL\n", + "for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_independent_', paste('P', p, 'N', n, sep='_'), '.RData'))\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "avg_FDR = NULL\n", + "for (i in 1:length(files)){\n", + " sim_file = files[i]\n", + " load(sim_file, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_ind_elnet[[i]]$Stab.table\n", + " \n", + " FDR = NULL\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "table_ind = NULL\n", + "tmp_num_select = rep(0, length(results_ind_elnet))\n", + "for (i in 1:length(results_ind_elnet)){\n", + " table_ind = rbind(table_ind, results_ind_elnet[[i]][c('n', 'p', 'rou', 'FP', 'FN', 'MSE', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_ind_elnet[[i]]$Stab.table))\n", + " \n", + "}\n", + "table_ind = as.data.frame(table_ind)\n", + "table_ind$num_select = tmp_num_select\n", + "table_ind$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
nprouFPFNMSEStabnum_selectFDR
50 50 0 14.99 ( 0.59 )0 ( 0 ) 0.53 ( 0.03 ) 0.2 19.99 0.67
100 50 0 13.46 ( 0.55 )0 ( 0 ) 0.34 ( 0.01 ) 0.23 18.46 0.65
500 50 0 13.65 ( 0.56 )0 ( 0 ) 0.26 ( 0 ) 0.23 18.65 0.64
1000 50 0 11.76 ( 0.53 )0 ( 0 ) 0.25 ( 0 ) 0.27 16.76 0.60
50 100 0 19.45 ( 0.66 )0.04 ( 0.02 ) 0.74 ( 0.06 ) 0.19 24.41 0.74
100 100 0 19.2 ( 1.02 )0 ( 0 ) 0.38 ( 0.01 )0.2 24.20 0.71
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllll}\n", + " n & p & rou & FP & FN & MSE & Stab & num\\_select & FDR\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0 & 14.99 ( 0.59 ) & 0 ( 0 ) & 0.53 ( 0.03 ) & 0.2 & 19.99 & 0.67 \\\\\n", + "\t 100 & 50 & 0 & 13.46 ( 0.55 ) & 0 ( 0 ) & 0.34 ( 0.01 ) & 0.23 & 18.46 & 0.65 \\\\\n", + "\t 500 & 50 & 0 & 13.65 ( 0.56 ) & 0 ( 0 ) & 0.26 ( 0 ) & 0.23 & 18.65 & 0.64 \\\\\n", + "\t 1000 & 50 & 0 & 11.76 ( 0.53 ) & 0 ( 0 ) & 0.25 ( 0 ) & 0.27 & 16.76 & 0.60 \\\\\n", + "\t 50 & 100 & 0 & 19.45 ( 0.66 ) & 0.04 ( 0.02 ) & 0.74 ( 0.06 ) & 0.19 & 24.41 & 0.74 \\\\\n", + "\t 100 & 100 & 0 & 19.2 ( 1.02 ) & 0 ( 0 ) & 0.38 ( 0.01 ) & 0.2 & 24.20 & 0.71 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| n | p | rou | FP | FN | MSE | Stab | num_select | FDR |\n", + "|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0 | 14.99 ( 0.59 ) | 0 ( 0 ) | 0.53 ( 0.03 ) | 0.2 | 19.99 | 0.67 |\n", + "| 100 | 50 | 0 | 13.46 ( 0.55 ) | 0 ( 0 ) | 0.34 ( 0.01 ) | 0.23 | 18.46 | 0.65 |\n", + "| 500 | 50 | 0 | 13.65 ( 0.56 ) | 0 ( 0 ) | 0.26 ( 0 ) | 0.23 | 18.65 | 0.64 |\n", + "| 1000 | 50 | 0 | 11.76 ( 0.53 ) | 0 ( 0 ) | 0.25 ( 0 ) | 0.27 | 16.76 | 0.60 |\n", + "| 50 | 100 | 0 | 19.45 ( 0.66 ) | 0.04 ( 0.02 ) | 0.74 ( 0.06 ) | 0.19 | 24.41 | 0.74 |\n", + "| 100 | 100 | 0 | 19.2 ( 1.02 ) | 0 ( 0 ) | 0.38 ( 0.01 ) | 0.2 | 24.20 | 0.71 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN MSE Stab num_select FDR \n", + "1 50 50 0 14.99 ( 0.59 ) 0 ( 0 ) 0.53 ( 0.03 ) 0.2 19.99 0.67\n", + "2 100 50 0 13.46 ( 0.55 ) 0 ( 0 ) 0.34 ( 0.01 ) 0.23 18.46 0.65\n", + "3 500 50 0 13.65 ( 0.56 ) 0 ( 0 ) 0.26 ( 0 ) 0.23 18.65 0.64\n", + "4 1000 50 0 11.76 ( 0.53 ) 0 ( 0 ) 0.25 ( 0 ) 0.27 16.76 0.60\n", + "5 50 100 0 19.45 ( 0.66 ) 0.04 ( 0.02 ) 0.74 ( 0.06 ) 0.19 24.41 0.74\n", + "6 100 100 0 19.2 ( 1.02 ) 0 ( 0 ) 0.38 ( 0.01 ) 0.2 24.20 0.71" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_ind)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_ind <- apply(table_ind,2,as.character)\n", + "rownames(result.table_ind) = rownames(table_ind)\n", + "result.table_ind = as.data.frame(result.table_ind)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_ind$n = tidyr::extract_numeric(result.table_ind$n)\n", + "result.table_ind$p = tidyr::extract_numeric(result.table_ind$p)\n", + "result.table_ind$ratio = result.table_ind$p / result.table_ind$n\n", + "\n", + "result.table_ind = result.table_ind[c('n', 'p', 'ratio', 'Stab', 'MSE', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_ind)[1:3] = c('N', 'P', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”" + ] + } + ], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_ind$Stab = as.numeric(as.character(result.table_ind$Stab))\n", + "result.table_ind$MSE_mean = as.numeric(substr(result.table_ind$MSE, start=1, stop=4))\n", + "result.table_ind$FP_mean = as.numeric(substr(result.table_ind$FP, start=1, stop=4))\n", + "result.table_ind$FN_mean = as.numeric(substr(result.table_ind$FN, start=1, stop=4))\n", + "result.table_ind$FN_mean[is.na(result.table_ind$FN_mean)] = 0\n", + "result.table_ind$num_select = as.numeric(as.character(result.table_ind$num_select))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
50 50 1.00 0.20 0.53 ( 0.03 ) 14.99 ( 0.59 )0 ( 0 ) 19.99 0.67 0.53 14.9 0.00
100 50 0.50 0.23 0.34 ( 0.01 ) 13.46 ( 0.55 )0 ( 0 ) 18.46 0.65 0.34 13.4 0.00
500 50 0.10 0.23 0.26 ( 0 ) 13.65 ( 0.56 )0 ( 0 ) 18.65 0.64 0.26 13.6 0.00
1000 50 0.05 0.27 0.25 ( 0 ) 11.76 ( 0.53 )0 ( 0 ) 16.76 0.6 0.25 11.7 0.00
50 100 2.00 0.19 0.74 ( 0.06 ) 19.45 ( 0.66 )0.04 ( 0.02 ) 24.41 0.74 0.74 19.4 0.04
100 100 1.00 0.20 0.38 ( 0.01 ) 19.2 ( 1.02 ) 0 ( 0 ) 24.20 0.71 0.38 19.2 0.00
500 100 0.20 0.23 0.27 ( 0 ) 16.28 ( 0.78 )0 ( 0 ) 21.28 0.67 0.27 16.2 0.00
1000 100 0.10 0.23 0.26 ( 0 ) 17.05 ( 0.76 )0 ( 0 ) 22.05 0.69 0.26 17.0 0.00
50 500 10.00 0.13 1.65 ( 0.13 ) 30.38 ( 1.24 )0.58 ( 0.08 ) 34.80 0.83 1.65 30.3 0.58
100 500 5.00 0.15 0.5 ( 0.02 ) 32.18 ( 1.44 )0 ( 0 ) 37.18 0.81 0.50 32.1 0.00
500 500 1.00 0.16 0.28 ( 0 ) 29.79 ( 1.73 )0 ( 0 ) 34.79 0.78 0.28 29.7 0.00
1000 500 0.50 0.18 0.26 ( 0 ) 27.21 ( 1.58 )0 ( 0 ) 32.21 0.77 0.26 27.2 0.00
50 1000 20.00 0.10 2.5 ( 0.22 ) 36.6 ( 2.03 ) 1.12 ( 0.09 ) 40.48 0.86 2.50 36.6 1.12
100 1000 10.00 0.13 0.56 ( 0.02 ) 40.61 ( 1.71 )0 ( 0 ) 45.61 0.85 0.56 40.6 0.00
500 1000 2.00 0.14 0.27 ( 0 ) 35.98 ( 2.2 ) 0 ( 0 ) 40.98 0.8 0.27 35.9 0.00
1000 1000 1.00 0.15 0.27 ( 0 ) 34.65 ( 2.02 )0 ( 0 ) 39.65 0.79 0.27 34.6 0.00
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|llllllllllll}\n", + " N & P & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t 50 & 50 & 1.00 & 0.20 & 0.53 ( 0.03 ) & 14.99 ( 0.59 ) & 0 ( 0 ) & 19.99 & 0.67 & 0.53 & 14.9 & 0.00 \\\\\n", + "\t 100 & 50 & 0.50 & 0.23 & 0.34 ( 0.01 ) & 13.46 ( 0.55 ) & 0 ( 0 ) & 18.46 & 0.65 & 0.34 & 13.4 & 0.00 \\\\\n", + "\t 500 & 50 & 0.10 & 0.23 & 0.26 ( 0 ) & 13.65 ( 0.56 ) & 0 ( 0 ) & 18.65 & 0.64 & 0.26 & 13.6 & 0.00 \\\\\n", + "\t 1000 & 50 & 0.05 & 0.27 & 0.25 ( 0 ) & 11.76 ( 0.53 ) & 0 ( 0 ) & 16.76 & 0.6 & 0.25 & 11.7 & 0.00 \\\\\n", + "\t 50 & 100 & 2.00 & 0.19 & 0.74 ( 0.06 ) & 19.45 ( 0.66 ) & 0.04 ( 0.02 ) & 24.41 & 0.74 & 0.74 & 19.4 & 0.04 \\\\\n", + "\t 100 & 100 & 1.00 & 0.20 & 0.38 ( 0.01 ) & 19.2 ( 1.02 ) & 0 ( 0 ) & 24.20 & 0.71 & 0.38 & 19.2 & 0.00 \\\\\n", + "\t 500 & 100 & 0.20 & 0.23 & 0.27 ( 0 ) & 16.28 ( 0.78 ) & 0 ( 0 ) & 21.28 & 0.67 & 0.27 & 16.2 & 0.00 \\\\\n", + "\t 1000 & 100 & 0.10 & 0.23 & 0.26 ( 0 ) & 17.05 ( 0.76 ) & 0 ( 0 ) & 22.05 & 0.69 & 0.26 & 17.0 & 0.00 \\\\\n", + "\t 50 & 500 & 10.00 & 0.13 & 1.65 ( 0.13 ) & 30.38 ( 1.24 ) & 0.58 ( 0.08 ) & 34.80 & 0.83 & 1.65 & 30.3 & 0.58 \\\\\n", + "\t 100 & 500 & 5.00 & 0.15 & 0.5 ( 0.02 ) & 32.18 ( 1.44 ) & 0 ( 0 ) & 37.18 & 0.81 & 0.50 & 32.1 & 0.00 \\\\\n", + "\t 500 & 500 & 1.00 & 0.16 & 0.28 ( 0 ) & 29.79 ( 1.73 ) & 0 ( 0 ) & 34.79 & 0.78 & 0.28 & 29.7 & 0.00 \\\\\n", + "\t 1000 & 500 & 0.50 & 0.18 & 0.26 ( 0 ) & 27.21 ( 1.58 ) & 0 ( 0 ) & 32.21 & 0.77 & 0.26 & 27.2 & 0.00 \\\\\n", + "\t 50 & 1000 & 20.00 & 0.10 & 2.5 ( 0.22 ) & 36.6 ( 2.03 ) & 1.12 ( 0.09 ) & 40.48 & 0.86 & 2.50 & 36.6 & 1.12 \\\\\n", + "\t 100 & 1000 & 10.00 & 0.13 & 0.56 ( 0.02 ) & 40.61 ( 1.71 ) & 0 ( 0 ) & 45.61 & 0.85 & 0.56 & 40.6 & 0.00 \\\\\n", + "\t 500 & 1000 & 2.00 & 0.14 & 0.27 ( 0 ) & 35.98 ( 2.2 ) & 0 ( 0 ) & 40.98 & 0.8 & 0.27 & 35.9 & 0.00 \\\\\n", + "\t 1000 & 1000 & 1.00 & 0.15 & 0.27 ( 0 ) & 34.65 ( 2.02 ) & 0 ( 0 ) & 39.65 & 0.79 & 0.27 & 34.6 & 0.00 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| N | P | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 1.00 | 0.20 | 0.53 ( 0.03 ) | 14.99 ( 0.59 ) | 0 ( 0 ) | 19.99 | 0.67 | 0.53 | 14.9 | 0.00 |\n", + "| 100 | 50 | 0.50 | 0.23 | 0.34 ( 0.01 ) | 13.46 ( 0.55 ) | 0 ( 0 ) | 18.46 | 0.65 | 0.34 | 13.4 | 0.00 |\n", + "| 500 | 50 | 0.10 | 0.23 | 0.26 ( 0 ) | 13.65 ( 0.56 ) | 0 ( 0 ) | 18.65 | 0.64 | 0.26 | 13.6 | 0.00 |\n", + "| 1000 | 50 | 0.05 | 0.27 | 0.25 ( 0 ) | 11.76 ( 0.53 ) | 0 ( 0 ) | 16.76 | 0.6 | 0.25 | 11.7 | 0.00 |\n", + "| 50 | 100 | 2.00 | 0.19 | 0.74 ( 0.06 ) | 19.45 ( 0.66 ) | 0.04 ( 0.02 ) | 24.41 | 0.74 | 0.74 | 19.4 | 0.04 |\n", + "| 100 | 100 | 1.00 | 0.20 | 0.38 ( 0.01 ) | 19.2 ( 1.02 ) | 0 ( 0 ) | 24.20 | 0.71 | 0.38 | 19.2 | 0.00 |\n", + "| 500 | 100 | 0.20 | 0.23 | 0.27 ( 0 ) | 16.28 ( 0.78 ) | 0 ( 0 ) | 21.28 | 0.67 | 0.27 | 16.2 | 0.00 |\n", + "| 1000 | 100 | 0.10 | 0.23 | 0.26 ( 0 ) | 17.05 ( 0.76 ) | 0 ( 0 ) | 22.05 | 0.69 | 0.26 | 17.0 | 0.00 |\n", + "| 50 | 500 | 10.00 | 0.13 | 1.65 ( 0.13 ) | 30.38 ( 1.24 ) | 0.58 ( 0.08 ) | 34.80 | 0.83 | 1.65 | 30.3 | 0.58 |\n", + "| 100 | 500 | 5.00 | 0.15 | 0.5 ( 0.02 ) | 32.18 ( 1.44 ) | 0 ( 0 ) | 37.18 | 0.81 | 0.50 | 32.1 | 0.00 |\n", + "| 500 | 500 | 1.00 | 0.16 | 0.28 ( 0 ) | 29.79 ( 1.73 ) | 0 ( 0 ) | 34.79 | 0.78 | 0.28 | 29.7 | 0.00 |\n", + "| 1000 | 500 | 0.50 | 0.18 | 0.26 ( 0 ) | 27.21 ( 1.58 ) | 0 ( 0 ) | 32.21 | 0.77 | 0.26 | 27.2 | 0.00 |\n", + "| 50 | 1000 | 20.00 | 0.10 | 2.5 ( 0.22 ) | 36.6 ( 2.03 ) | 1.12 ( 0.09 ) | 40.48 | 0.86 | 2.50 | 36.6 | 1.12 |\n", + "| 100 | 1000 | 10.00 | 0.13 | 0.56 ( 0.02 ) | 40.61 ( 1.71 ) | 0 ( 0 ) | 45.61 | 0.85 | 0.56 | 40.6 | 0.00 |\n", + "| 500 | 1000 | 2.00 | 0.14 | 0.27 ( 0 ) | 35.98 ( 2.2 ) | 0 ( 0 ) | 40.98 | 0.8 | 0.27 | 35.9 | 0.00 |\n", + "| 1000 | 1000 | 1.00 | 0.15 | 0.27 ( 0 ) | 34.65 ( 2.02 ) | 0 ( 0 ) | 39.65 | 0.79 | 0.27 | 34.6 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Ratio Stab MSE FP FN num_select\n", + "1 50 50 1.00 0.20 0.53 ( 0.03 ) 14.99 ( 0.59 ) 0 ( 0 ) 19.99 \n", + "2 100 50 0.50 0.23 0.34 ( 0.01 ) 13.46 ( 0.55 ) 0 ( 0 ) 18.46 \n", + "3 500 50 0.10 0.23 0.26 ( 0 ) 13.65 ( 0.56 ) 0 ( 0 ) 18.65 \n", + "4 1000 50 0.05 0.27 0.25 ( 0 ) 11.76 ( 0.53 ) 0 ( 0 ) 16.76 \n", + "5 50 100 2.00 0.19 0.74 ( 0.06 ) 19.45 ( 0.66 ) 0.04 ( 0.02 ) 24.41 \n", + "6 100 100 1.00 0.20 0.38 ( 0.01 ) 19.2 ( 1.02 ) 0 ( 0 ) 24.20 \n", + "7 500 100 0.20 0.23 0.27 ( 0 ) 16.28 ( 0.78 ) 0 ( 0 ) 21.28 \n", + "8 1000 100 0.10 0.23 0.26 ( 0 ) 17.05 ( 0.76 ) 0 ( 0 ) 22.05 \n", + "9 50 500 10.00 0.13 1.65 ( 0.13 ) 30.38 ( 1.24 ) 0.58 ( 0.08 ) 34.80 \n", + "10 100 500 5.00 0.15 0.5 ( 0.02 ) 32.18 ( 1.44 ) 0 ( 0 ) 37.18 \n", + "11 500 500 1.00 0.16 0.28 ( 0 ) 29.79 ( 1.73 ) 0 ( 0 ) 34.79 \n", + "12 1000 500 0.50 0.18 0.26 ( 0 ) 27.21 ( 1.58 ) 0 ( 0 ) 32.21 \n", + "13 50 1000 20.00 0.10 2.5 ( 0.22 ) 36.6 ( 2.03 ) 1.12 ( 0.09 ) 40.48 \n", + "14 100 1000 10.00 0.13 0.56 ( 0.02 ) 40.61 ( 1.71 ) 0 ( 0 ) 45.61 \n", + "15 500 1000 2.00 0.14 0.27 ( 0 ) 35.98 ( 2.2 ) 0 ( 0 ) 40.98 \n", + "16 1000 1000 1.00 0.15 0.27 ( 0 ) 34.65 ( 2.02 ) 0 ( 0 ) 39.65 \n", + " FDR MSE_mean FP_mean FN_mean\n", + "1 0.67 0.53 14.9 0.00 \n", + "2 0.65 0.34 13.4 0.00 \n", + "3 0.64 0.26 13.6 0.00 \n", + "4 0.6 0.25 11.7 0.00 \n", + "5 0.74 0.74 19.4 0.04 \n", + "6 0.71 0.38 19.2 0.00 \n", + "7 0.67 0.27 16.2 0.00 \n", + "8 0.69 0.26 17.0 0.00 \n", + "9 0.83 1.65 30.3 0.58 \n", + "10 0.81 0.50 32.1 0.00 \n", + "11 0.78 0.28 29.7 0.00 \n", + "12 0.77 0.26 27.2 0.00 \n", + "13 0.86 2.50 36.6 1.12 \n", + "14 0.85 0.56 40.6 0.00 \n", + "15 0.8 0.27 35.9 0.00 \n", + "16 0.79 0.27 34.6 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_ind\n", + "\n", + "## export\n", + "write.table(result.table_ind, '../results_summary_cts/sim_ind_elnet.txt', sep='\\t', row.names=F)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_cts/.ipynb_checkpoints/0.3_sim_indepdent_rf_cts-checkpoint.ipynb b/simulations/notebooks_sim_cts/.ipynb_checkpoints/0.3_sim_indepdent_rf_cts-checkpoint.ipynb new file mode 100755 index 0000000..337fe47 --- /dev/null +++ b/simulations/notebooks_sim_cts/.ipynb_checkpoints/0.3_sim_indepdent_rf_cts-checkpoint.ipynb @@ -0,0 +1,517 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize random forests results on Independent Simulation Scenarios for continuous outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'\n", + "\n", + "load(paste0(dir, '/independent_RF.RData'))" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "files = NULL\n", + "for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_independent_', paste('P', p, 'N', n, sep='_'), '.RData'))\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "avg_FDR = NULL\n", + "for (i in 1:length(files)){\n", + " sim_file = files[i]\n", + " load(sim_file, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_ind_rf[[i]]$Stab.table\n", + " \n", + " FDR = NULL\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [], + "source": [ + "table_ind = NULL\n", + "tmp_num_select = rep(0, length(results_ind_rf))\n", + "for (i in 1:length(results_ind_rf)){\n", + " results_ind_rf[[i]]$OOB = paste(round(mean(results_ind_rf[[i]]$OOB.list, na.rm=T),2),\n", + " '(', round(FSA::se(results_ind_rf[[i]]$OOB.list, na.rm=T),2), ')')\n", + " table_ind = rbind(table_ind, results_ind_rf[[i]][c('n', 'p', 'rou', 'FP', 'FN', 'MSE', 'Stab', 'OOB')])\n", + " tmp_num_select[i] = mean(rowSums(results_ind_rf[[i]]$Stab.table))\n", + "}\n", + "table_ind = as.data.frame(table_ind)\n", + "table_ind$num_select = tmp_num_select\n", + "table_ind$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
nprouFPFNMSEStabOOBnum_selectFDR
50 50 0 1 ( 0 ) 6 ( 0 ) 1.31 ( 0.06 )NaN 2.09 ( 0.02 )0.00 NaN
100 50 0 1.85 ( 0.11 )4.11 ( 0.1 ) 0.85 ( 0.02 )0.18 1.79 ( 0.01 )3.74 0.48
500 50 0 0.3 ( 0.05 ) 1.61 ( 0.08 )0.47 ( 0.01 )0.8 1.31 ( 0 ) 4.69 0.05
1000 50 0 0.07 ( 0.03 )0.78 ( 0.07 )0.35 ( 0 ) 0.88 1.17 ( 0 ) 5.29 0.01
50 100 0 1 ( 0 ) 6 ( 0 ) 1.32 ( 0.05 )NaN 2.23 ( 0.02 )0.00 NaN
100 100 0 4.33 ( 0.22 )4.45 ( 0.09 )0.91 ( 0.03 )0.08 2.02 ( 0.01 )5.88 0.72
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|llllllllll}\n", + " n & p & rou & FP & FN & MSE & Stab & OOB & num\\_select & FDR\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0 & 1 ( 0 ) & 6 ( 0 ) & 1.31 ( 0.06 ) & NaN & 2.09 ( 0.02 ) & 0.00 & NaN \\\\\n", + "\t 100 & 50 & 0 & 1.85 ( 0.11 ) & 4.11 ( 0.1 ) & 0.85 ( 0.02 ) & 0.18 & 1.79 ( 0.01 ) & 3.74 & 0.48 \\\\\n", + "\t 500 & 50 & 0 & 0.3 ( 0.05 ) & 1.61 ( 0.08 ) & 0.47 ( 0.01 ) & 0.8 & 1.31 ( 0 ) & 4.69 & 0.05 \\\\\n", + "\t 1000 & 50 & 0 & 0.07 ( 0.03 ) & 0.78 ( 0.07 ) & 0.35 ( 0 ) & 0.88 & 1.17 ( 0 ) & 5.29 & 0.01 \\\\\n", + "\t 50 & 100 & 0 & 1 ( 0 ) & 6 ( 0 ) & 1.32 ( 0.05 ) & NaN & 2.23 ( 0.02 ) & 0.00 & NaN \\\\\n", + "\t 100 & 100 & 0 & 4.33 ( 0.22 ) & 4.45 ( 0.09 ) & 0.91 ( 0.03 ) & 0.08 & 2.02 ( 0.01 ) & 5.88 & 0.72 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| n | p | rou | FP | FN | MSE | Stab | OOB | num_select | FDR |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0 | 1 ( 0 ) | 6 ( 0 ) | 1.31 ( 0.06 ) | NaN | 2.09 ( 0.02 ) | 0.00 | NaN |\n", + "| 100 | 50 | 0 | 1.85 ( 0.11 ) | 4.11 ( 0.1 ) | 0.85 ( 0.02 ) | 0.18 | 1.79 ( 0.01 ) | 3.74 | 0.48 |\n", + "| 500 | 50 | 0 | 0.3 ( 0.05 ) | 1.61 ( 0.08 ) | 0.47 ( 0.01 ) | 0.8 | 1.31 ( 0 ) | 4.69 | 0.05 |\n", + "| 1000 | 50 | 0 | 0.07 ( 0.03 ) | 0.78 ( 0.07 ) | 0.35 ( 0 ) | 0.88 | 1.17 ( 0 ) | 5.29 | 0.01 |\n", + "| 50 | 100 | 0 | 1 ( 0 ) | 6 ( 0 ) | 1.32 ( 0.05 ) | NaN | 2.23 ( 0.02 ) | 0.00 | NaN |\n", + "| 100 | 100 | 0 | 4.33 ( 0.22 ) | 4.45 ( 0.09 ) | 0.91 ( 0.03 ) | 0.08 | 2.02 ( 0.01 ) | 5.88 | 0.72 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN MSE Stab OOB \n", + "1 50 50 0 1 ( 0 ) 6 ( 0 ) 1.31 ( 0.06 ) NaN 2.09 ( 0.02 )\n", + "2 100 50 0 1.85 ( 0.11 ) 4.11 ( 0.1 ) 0.85 ( 0.02 ) 0.18 1.79 ( 0.01 )\n", + "3 500 50 0 0.3 ( 0.05 ) 1.61 ( 0.08 ) 0.47 ( 0.01 ) 0.8 1.31 ( 0 ) \n", + "4 1000 50 0 0.07 ( 0.03 ) 0.78 ( 0.07 ) 0.35 ( 0 ) 0.88 1.17 ( 0 ) \n", + "5 50 100 0 1 ( 0 ) 6 ( 0 ) 1.32 ( 0.05 ) NaN 2.23 ( 0.02 )\n", + "6 100 100 0 4.33 ( 0.22 ) 4.45 ( 0.09 ) 0.91 ( 0.03 ) 0.08 2.02 ( 0.01 )\n", + " num_select FDR \n", + "1 0.00 NaN\n", + "2 3.74 0.48\n", + "3 4.69 0.05\n", + "4 5.29 0.01\n", + "5 0.00 NaN\n", + "6 5.88 0.72" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_ind)" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_ind <- apply(table_ind,2,as.character)\n", + "rownames(result.table_ind) = rownames(table_ind)\n", + "result.table_ind = as.data.frame(result.table_ind)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_ind$n = tidyr::extract_numeric(result.table_ind$n)\n", + "result.table_ind$p = tidyr::extract_numeric(result.table_ind$p)\n", + "result.table_ind$ratio = result.table_ind$p / result.table_ind$n\n", + "\n", + "result.table_ind = result.table_ind[c('n', 'p', 'ratio', 'Stab', 'MSE', 'FP', 'FN', 'OOB', 'num_select', 'FDR')]\n", + "colnames(result.table_ind)[1:3] = c('N', 'P', 'Ratio')\n", + "result.table_ind$Index = seq(1, length(results_ind_rf), 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”" + ] + } + ], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_ind$Stab = as.numeric(as.character(result.table_ind$Stab))\n", + "result.table_ind$MSE_mean = as.numeric(substr(result.table_ind$MSE, start=1, stop=4))\n", + "result.table_ind$FP_mean = as.numeric(substr(result.table_ind$FP, start=1, stop=4))\n", + "result.table_ind$FN_mean = as.numeric(substr(result.table_ind$FN, start=1, stop=4))\n", + "result.table_ind$OOB_mean = as.numeric(substr(result.table_ind$OOB, start=1, stop=4))\n", + "result.table_ind$num_select = as.numeric(as.character(result.table_ind$num_select))\n", + "#result.table_ind$FDR = as.numeric(as.character(result.table_ind$FDR))" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPRatioStabMSEFPFNOOBnum_selectFDRIndexMSE_meanFP_meanFN_meanOOB_mean
50 50 1.00 NaN 1.31 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) 2.09 ( 0.02 ) 0.00 NaN 1 1.31 NA NA 2.09
100 50 0.50 0.18 0.85 ( 0.02 ) 1.85 ( 0.11 ) 4.11 ( 0.1 ) 1.79 ( 0.01 ) 3.74 0.48 2 0.85 1.85 4.11 1.79
500 50 0.10 0.80 0.47 ( 0.01 ) 0.3 ( 0.05 ) 1.61 ( 0.08 ) 1.31 ( 0 ) 4.69 0.05 3 0.47 0.30 1.61 1.31
1000 50 0.05 0.88 0.35 ( 0 ) 0.07 ( 0.03 ) 0.78 ( 0.07 ) 1.17 ( 0 ) 5.29 0.01 4 0.35 0.07 0.78 1.17
50 100 2.00 NaN 1.32 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 2.23 ( 0.02 ) 0.00 NaN 5 1.32 NA NA 2.23
100 100 1.00 0.08 0.91 ( 0.03 ) 4.33 ( 0.22 ) 4.45 ( 0.09 ) 2.02 ( 0.01 ) 5.88 0.72 6 0.91 4.33 4.45 2.02
500 100 0.20 0.60 0.59 ( 0.01 ) 1.91 ( 0.15 ) 1.41 ( 0.07 ) 1.54 ( 0 ) 6.50 0.27 7 0.59 1.91 1.41 1.54
1000 100 0.10 0.81 0.47 ( 0 ) 0.71 ( 0.09 ) 0.53 ( 0.06 ) 1.39 ( 0 ) 6.18 0.1 8 0.47 0.71 0.53 1.39
50 500 10.00 NaN 1.33 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 2.48 ( 0.03 ) 0.00 NaN 9 1.33 NA NA 2.48
100 500 5.00 0.02 1.07 ( 0.03 ) 23.8 ( 0.52 ) 4.26 ( 0.1 ) 2.43 ( 0.02 ) 25.54 0.93 10 1.07 23.80 4.26 2.43
500 500 1.00 0.14 0.84 ( 0.01 ) 19.92 ( 0.41 )1.71 ( 0.08 ) 2.14 ( 0.01 ) 24.21 0.82 11 0.84 19.90 1.71 2.14
1000 500 0.50 0.19 0.78 ( 0.01 ) 18.73 ( 0.42 )0.84 ( 0.06 ) 2.06 ( 0 ) 23.89 0.78 12 0.78 18.70 0.84 2.06
50 1000 20.00 NaN 1.31 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 2.48 ( 0.03 ) 0.00 NaN 13 1.31 NA NA 2.48
100 1000 10.00 0.01 1.06 ( 0.03 ) 48.48 ( 0.63 )4.33 ( 0.1 ) 2.43 ( 0.02 ) 50.15 0.97 14 1.06 48.40 4.33 2.43
500 1000 2.00 0.06 0.89 ( 0.01 ) 44.77 ( 0.71 )1.81 ( 0.1 ) 2.3 ( 0.01 ) 48.96 0.91 15 0.89 44.70 1.81 2.30
1000 1000 1.00 0.09 0.85 ( 0.01 ) 41.77 ( 0.68 )0.99 ( 0.07 ) 2.25 ( 0.01 ) 46.78 0.89 16 0.85 41.70 0.99 2.25
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllllll}\n", + " N & P & Ratio & Stab & MSE & FP & FN & OOB & num\\_select & FDR & Index & MSE\\_mean & FP\\_mean & FN\\_mean & OOB\\_mean\\\\\n", + "\\hline\n", + "\t 50 & 50 & 1.00 & NaN & 1.31 ( 0.06 ) & 1 ( 0 ) & 6 ( 0 ) & 2.09 ( 0.02 ) & 0.00 & NaN & 1 & 1.31 & NA & NA & 2.09 \\\\\n", + "\t 100 & 50 & 0.50 & 0.18 & 0.85 ( 0.02 ) & 1.85 ( 0.11 ) & 4.11 ( 0.1 ) & 1.79 ( 0.01 ) & 3.74 & 0.48 & 2 & 0.85 & 1.85 & 4.11 & 1.79 \\\\\n", + "\t 500 & 50 & 0.10 & 0.80 & 0.47 ( 0.01 ) & 0.3 ( 0.05 ) & 1.61 ( 0.08 ) & 1.31 ( 0 ) & 4.69 & 0.05 & 3 & 0.47 & 0.30 & 1.61 & 1.31 \\\\\n", + "\t 1000 & 50 & 0.05 & 0.88 & 0.35 ( 0 ) & 0.07 ( 0.03 ) & 0.78 ( 0.07 ) & 1.17 ( 0 ) & 5.29 & 0.01 & 4 & 0.35 & 0.07 & 0.78 & 1.17 \\\\\n", + "\t 50 & 100 & 2.00 & NaN & 1.32 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.23 ( 0.02 ) & 0.00 & NaN & 5 & 1.32 & NA & NA & 2.23 \\\\\n", + "\t 100 & 100 & 1.00 & 0.08 & 0.91 ( 0.03 ) & 4.33 ( 0.22 ) & 4.45 ( 0.09 ) & 2.02 ( 0.01 ) & 5.88 & 0.72 & 6 & 0.91 & 4.33 & 4.45 & 2.02 \\\\\n", + "\t 500 & 100 & 0.20 & 0.60 & 0.59 ( 0.01 ) & 1.91 ( 0.15 ) & 1.41 ( 0.07 ) & 1.54 ( 0 ) & 6.50 & 0.27 & 7 & 0.59 & 1.91 & 1.41 & 1.54 \\\\\n", + "\t 1000 & 100 & 0.10 & 0.81 & 0.47 ( 0 ) & 0.71 ( 0.09 ) & 0.53 ( 0.06 ) & 1.39 ( 0 ) & 6.18 & 0.1 & 8 & 0.47 & 0.71 & 0.53 & 1.39 \\\\\n", + "\t 50 & 500 & 10.00 & NaN & 1.33 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.48 ( 0.03 ) & 0.00 & NaN & 9 & 1.33 & NA & NA & 2.48 \\\\\n", + "\t 100 & 500 & 5.00 & 0.02 & 1.07 ( 0.03 ) & 23.8 ( 0.52 ) & 4.26 ( 0.1 ) & 2.43 ( 0.02 ) & 25.54 & 0.93 & 10 & 1.07 & 23.80 & 4.26 & 2.43 \\\\\n", + "\t 500 & 500 & 1.00 & 0.14 & 0.84 ( 0.01 ) & 19.92 ( 0.41 ) & 1.71 ( 0.08 ) & 2.14 ( 0.01 ) & 24.21 & 0.82 & 11 & 0.84 & 19.90 & 1.71 & 2.14 \\\\\n", + "\t 1000 & 500 & 0.50 & 0.19 & 0.78 ( 0.01 ) & 18.73 ( 0.42 ) & 0.84 ( 0.06 ) & 2.06 ( 0 ) & 23.89 & 0.78 & 12 & 0.78 & 18.70 & 0.84 & 2.06 \\\\\n", + "\t 50 & 1000 & 20.00 & NaN & 1.31 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.48 ( 0.03 ) & 0.00 & NaN & 13 & 1.31 & NA & NA & 2.48 \\\\\n", + "\t 100 & 1000 & 10.00 & 0.01 & 1.06 ( 0.03 ) & 48.48 ( 0.63 ) & 4.33 ( 0.1 ) & 2.43 ( 0.02 ) & 50.15 & 0.97 & 14 & 1.06 & 48.40 & 4.33 & 2.43 \\\\\n", + "\t 500 & 1000 & 2.00 & 0.06 & 0.89 ( 0.01 ) & 44.77 ( 0.71 ) & 1.81 ( 0.1 ) & 2.3 ( 0.01 ) & 48.96 & 0.91 & 15 & 0.89 & 44.70 & 1.81 & 2.30 \\\\\n", + "\t 1000 & 1000 & 1.00 & 0.09 & 0.85 ( 0.01 ) & 41.77 ( 0.68 ) & 0.99 ( 0.07 ) & 2.25 ( 0.01 ) & 46.78 & 0.89 & 16 & 0.85 & 41.70 & 0.99 & 2.25 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| N | P | Ratio | Stab | MSE | FP | FN | OOB | num_select | FDR | Index | MSE_mean | FP_mean | FN_mean | OOB_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 1.00 | NaN | 1.31 ( 0.06 ) | 1 ( 0 ) | 6 ( 0 ) | 2.09 ( 0.02 ) | 0.00 | NaN | 1 | 1.31 | NA | NA | 2.09 |\n", + "| 100 | 50 | 0.50 | 0.18 | 0.85 ( 0.02 ) | 1.85 ( 0.11 ) | 4.11 ( 0.1 ) | 1.79 ( 0.01 ) | 3.74 | 0.48 | 2 | 0.85 | 1.85 | 4.11 | 1.79 |\n", + "| 500 | 50 | 0.10 | 0.80 | 0.47 ( 0.01 ) | 0.3 ( 0.05 ) | 1.61 ( 0.08 ) | 1.31 ( 0 ) | 4.69 | 0.05 | 3 | 0.47 | 0.30 | 1.61 | 1.31 |\n", + "| 1000 | 50 | 0.05 | 0.88 | 0.35 ( 0 ) | 0.07 ( 0.03 ) | 0.78 ( 0.07 ) | 1.17 ( 0 ) | 5.29 | 0.01 | 4 | 0.35 | 0.07 | 0.78 | 1.17 |\n", + "| 50 | 100 | 2.00 | NaN | 1.32 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.23 ( 0.02 ) | 0.00 | NaN | 5 | 1.32 | NA | NA | 2.23 |\n", + "| 100 | 100 | 1.00 | 0.08 | 0.91 ( 0.03 ) | 4.33 ( 0.22 ) | 4.45 ( 0.09 ) | 2.02 ( 0.01 ) | 5.88 | 0.72 | 6 | 0.91 | 4.33 | 4.45 | 2.02 |\n", + "| 500 | 100 | 0.20 | 0.60 | 0.59 ( 0.01 ) | 1.91 ( 0.15 ) | 1.41 ( 0.07 ) | 1.54 ( 0 ) | 6.50 | 0.27 | 7 | 0.59 | 1.91 | 1.41 | 1.54 |\n", + "| 1000 | 100 | 0.10 | 0.81 | 0.47 ( 0 ) | 0.71 ( 0.09 ) | 0.53 ( 0.06 ) | 1.39 ( 0 ) | 6.18 | 0.1 | 8 | 0.47 | 0.71 | 0.53 | 1.39 |\n", + "| 50 | 500 | 10.00 | NaN | 1.33 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.48 ( 0.03 ) | 0.00 | NaN | 9 | 1.33 | NA | NA | 2.48 |\n", + "| 100 | 500 | 5.00 | 0.02 | 1.07 ( 0.03 ) | 23.8 ( 0.52 ) | 4.26 ( 0.1 ) | 2.43 ( 0.02 ) | 25.54 | 0.93 | 10 | 1.07 | 23.80 | 4.26 | 2.43 |\n", + "| 500 | 500 | 1.00 | 0.14 | 0.84 ( 0.01 ) | 19.92 ( 0.41 ) | 1.71 ( 0.08 ) | 2.14 ( 0.01 ) | 24.21 | 0.82 | 11 | 0.84 | 19.90 | 1.71 | 2.14 |\n", + "| 1000 | 500 | 0.50 | 0.19 | 0.78 ( 0.01 ) | 18.73 ( 0.42 ) | 0.84 ( 0.06 ) | 2.06 ( 0 ) | 23.89 | 0.78 | 12 | 0.78 | 18.70 | 0.84 | 2.06 |\n", + "| 50 | 1000 | 20.00 | NaN | 1.31 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.48 ( 0.03 ) | 0.00 | NaN | 13 | 1.31 | NA | NA | 2.48 |\n", + "| 100 | 1000 | 10.00 | 0.01 | 1.06 ( 0.03 ) | 48.48 ( 0.63 ) | 4.33 ( 0.1 ) | 2.43 ( 0.02 ) | 50.15 | 0.97 | 14 | 1.06 | 48.40 | 4.33 | 2.43 |\n", + "| 500 | 1000 | 2.00 | 0.06 | 0.89 ( 0.01 ) | 44.77 ( 0.71 ) | 1.81 ( 0.1 ) | 2.3 ( 0.01 ) | 48.96 | 0.91 | 15 | 0.89 | 44.70 | 1.81 | 2.30 |\n", + "| 1000 | 1000 | 1.00 | 0.09 | 0.85 ( 0.01 ) | 41.77 ( 0.68 ) | 0.99 ( 0.07 ) | 2.25 ( 0.01 ) | 46.78 | 0.89 | 16 | 0.85 | 41.70 | 0.99 | 2.25 |\n", + "\n" + ], + "text/plain": [ + " N P Ratio Stab MSE FP FN \n", + "1 50 50 1.00 NaN 1.31 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) \n", + "2 100 50 0.50 0.18 0.85 ( 0.02 ) 1.85 ( 0.11 ) 4.11 ( 0.1 ) \n", + "3 500 50 0.10 0.80 0.47 ( 0.01 ) 0.3 ( 0.05 ) 1.61 ( 0.08 )\n", + "4 1000 50 0.05 0.88 0.35 ( 0 ) 0.07 ( 0.03 ) 0.78 ( 0.07 )\n", + "5 50 100 2.00 NaN 1.32 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "6 100 100 1.00 0.08 0.91 ( 0.03 ) 4.33 ( 0.22 ) 4.45 ( 0.09 )\n", + "7 500 100 0.20 0.60 0.59 ( 0.01 ) 1.91 ( 0.15 ) 1.41 ( 0.07 )\n", + "8 1000 100 0.10 0.81 0.47 ( 0 ) 0.71 ( 0.09 ) 0.53 ( 0.06 )\n", + "9 50 500 10.00 NaN 1.33 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "10 100 500 5.00 0.02 1.07 ( 0.03 ) 23.8 ( 0.52 ) 4.26 ( 0.1 ) \n", + "11 500 500 1.00 0.14 0.84 ( 0.01 ) 19.92 ( 0.41 ) 1.71 ( 0.08 )\n", + "12 1000 500 0.50 0.19 0.78 ( 0.01 ) 18.73 ( 0.42 ) 0.84 ( 0.06 )\n", + "13 50 1000 20.00 NaN 1.31 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "14 100 1000 10.00 0.01 1.06 ( 0.03 ) 48.48 ( 0.63 ) 4.33 ( 0.1 ) \n", + "15 500 1000 2.00 0.06 0.89 ( 0.01 ) 44.77 ( 0.71 ) 1.81 ( 0.1 ) \n", + "16 1000 1000 1.00 0.09 0.85 ( 0.01 ) 41.77 ( 0.68 ) 0.99 ( 0.07 )\n", + " OOB num_select FDR Index MSE_mean FP_mean FN_mean OOB_mean\n", + "1 2.09 ( 0.02 ) 0.00 NaN 1 1.31 NA NA 2.09 \n", + "2 1.79 ( 0.01 ) 3.74 0.48 2 0.85 1.85 4.11 1.79 \n", + "3 1.31 ( 0 ) 4.69 0.05 3 0.47 0.30 1.61 1.31 \n", + "4 1.17 ( 0 ) 5.29 0.01 4 0.35 0.07 0.78 1.17 \n", + "5 2.23 ( 0.02 ) 0.00 NaN 5 1.32 NA NA 2.23 \n", + "6 2.02 ( 0.01 ) 5.88 0.72 6 0.91 4.33 4.45 2.02 \n", + "7 1.54 ( 0 ) 6.50 0.27 7 0.59 1.91 1.41 1.54 \n", + "8 1.39 ( 0 ) 6.18 0.1 8 0.47 0.71 0.53 1.39 \n", + "9 2.48 ( 0.03 ) 0.00 NaN 9 1.33 NA NA 2.48 \n", + "10 2.43 ( 0.02 ) 25.54 0.93 10 1.07 23.80 4.26 2.43 \n", + "11 2.14 ( 0.01 ) 24.21 0.82 11 0.84 19.90 1.71 2.14 \n", + "12 2.06 ( 0 ) 23.89 0.78 12 0.78 18.70 0.84 2.06 \n", + "13 2.48 ( 0.03 ) 0.00 NaN 13 1.31 NA NA 2.48 \n", + "14 2.43 ( 0.02 ) 50.15 0.97 14 1.06 48.40 4.33 2.43 \n", + "15 2.3 ( 0.01 ) 48.96 0.91 15 0.89 44.70 1.81 2.30 \n", + "16 2.25 ( 0.01 ) 46.78 0.89 16 0.85 41.70 0.99 2.25 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_ind" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1] 0\n", + "[1] 0\n", + "[1] 0\n", + "[1] 0\n" + ] + } + ], + "source": [ + "## nothing was selected when Stab is NaN\n", + "for (i in c(1,5,9,13)){\n", + " print(sum(results_ind_rf[[i]]$Stab.table))\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPRatioStabMSEFPFNOOBnum_selectFDRIndexMSE_meanFP_meanFN_meanOOB_mean
50 50 1.00 0.00 1.31 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) 2.09 ( 0.02 ) 0.00 NaN 1 1.31 1.00 6.00 2.09
100 50 0.50 0.18 0.85 ( 0.02 ) 1.85 ( 0.11 ) 4.11 ( 0.1 ) 1.79 ( 0.01 ) 3.74 0.48 2 0.85 1.85 4.11 1.79
500 50 0.10 0.80 0.47 ( 0.01 ) 0.3 ( 0.05 ) 1.61 ( 0.08 ) 1.31 ( 0 ) 4.69 0.05 3 0.47 0.30 1.61 1.31
1000 50 0.05 0.88 0.35 ( 0 ) 0.07 ( 0.03 ) 0.78 ( 0.07 ) 1.17 ( 0 ) 5.29 0.01 4 0.35 0.07 0.78 1.17
50 100 2.00 0.00 1.32 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 2.23 ( 0.02 ) 0.00 NaN 5 1.32 1.00 6.00 2.23
100 100 1.00 0.08 0.91 ( 0.03 ) 4.33 ( 0.22 ) 4.45 ( 0.09 ) 2.02 ( 0.01 ) 5.88 0.72 6 0.91 4.33 4.45 2.02
500 100 0.20 0.60 0.59 ( 0.01 ) 1.91 ( 0.15 ) 1.41 ( 0.07 ) 1.54 ( 0 ) 6.50 0.27 7 0.59 1.91 1.41 1.54
1000 100 0.10 0.81 0.47 ( 0 ) 0.71 ( 0.09 ) 0.53 ( 0.06 ) 1.39 ( 0 ) 6.18 0.1 8 0.47 0.71 0.53 1.39
50 500 10.00 0.00 1.33 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 2.48 ( 0.03 ) 0.00 NaN 9 1.33 1.00 6.00 2.48
100 500 5.00 0.02 1.07 ( 0.03 ) 23.8 ( 0.52 ) 4.26 ( 0.1 ) 2.43 ( 0.02 ) 25.54 0.93 10 1.07 23.80 4.26 2.43
500 500 1.00 0.14 0.84 ( 0.01 ) 19.92 ( 0.41 )1.71 ( 0.08 ) 2.14 ( 0.01 ) 24.21 0.82 11 0.84 19.90 1.71 2.14
1000 500 0.50 0.19 0.78 ( 0.01 ) 18.73 ( 0.42 )0.84 ( 0.06 ) 2.06 ( 0 ) 23.89 0.78 12 0.78 18.70 0.84 2.06
50 1000 20.00 0.00 1.31 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 2.48 ( 0.03 ) 0.00 NaN 13 1.31 1.00 6.00 2.48
100 1000 10.00 0.01 1.06 ( 0.03 ) 48.48 ( 0.63 )4.33 ( 0.1 ) 2.43 ( 0.02 ) 50.15 0.97 14 1.06 48.40 4.33 2.43
500 1000 2.00 0.06 0.89 ( 0.01 ) 44.77 ( 0.71 )1.81 ( 0.1 ) 2.3 ( 0.01 ) 48.96 0.91 15 0.89 44.70 1.81 2.30
1000 1000 1.00 0.09 0.85 ( 0.01 ) 41.77 ( 0.68 )0.99 ( 0.07 ) 2.25 ( 0.01 ) 46.78 0.89 16 0.85 41.70 0.99 2.25
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllllll}\n", + " N & P & Ratio & Stab & MSE & FP & FN & OOB & num\\_select & FDR & Index & MSE\\_mean & FP\\_mean & FN\\_mean & OOB\\_mean\\\\\n", + "\\hline\n", + "\t 50 & 50 & 1.00 & 0.00 & 1.31 ( 0.06 ) & 1 ( 0 ) & 6 ( 0 ) & 2.09 ( 0.02 ) & 0.00 & NaN & 1 & 1.31 & 1.00 & 6.00 & 2.09 \\\\\n", + "\t 100 & 50 & 0.50 & 0.18 & 0.85 ( 0.02 ) & 1.85 ( 0.11 ) & 4.11 ( 0.1 ) & 1.79 ( 0.01 ) & 3.74 & 0.48 & 2 & 0.85 & 1.85 & 4.11 & 1.79 \\\\\n", + "\t 500 & 50 & 0.10 & 0.80 & 0.47 ( 0.01 ) & 0.3 ( 0.05 ) & 1.61 ( 0.08 ) & 1.31 ( 0 ) & 4.69 & 0.05 & 3 & 0.47 & 0.30 & 1.61 & 1.31 \\\\\n", + "\t 1000 & 50 & 0.05 & 0.88 & 0.35 ( 0 ) & 0.07 ( 0.03 ) & 0.78 ( 0.07 ) & 1.17 ( 0 ) & 5.29 & 0.01 & 4 & 0.35 & 0.07 & 0.78 & 1.17 \\\\\n", + "\t 50 & 100 & 2.00 & 0.00 & 1.32 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.23 ( 0.02 ) & 0.00 & NaN & 5 & 1.32 & 1.00 & 6.00 & 2.23 \\\\\n", + "\t 100 & 100 & 1.00 & 0.08 & 0.91 ( 0.03 ) & 4.33 ( 0.22 ) & 4.45 ( 0.09 ) & 2.02 ( 0.01 ) & 5.88 & 0.72 & 6 & 0.91 & 4.33 & 4.45 & 2.02 \\\\\n", + "\t 500 & 100 & 0.20 & 0.60 & 0.59 ( 0.01 ) & 1.91 ( 0.15 ) & 1.41 ( 0.07 ) & 1.54 ( 0 ) & 6.50 & 0.27 & 7 & 0.59 & 1.91 & 1.41 & 1.54 \\\\\n", + "\t 1000 & 100 & 0.10 & 0.81 & 0.47 ( 0 ) & 0.71 ( 0.09 ) & 0.53 ( 0.06 ) & 1.39 ( 0 ) & 6.18 & 0.1 & 8 & 0.47 & 0.71 & 0.53 & 1.39 \\\\\n", + "\t 50 & 500 & 10.00 & 0.00 & 1.33 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.48 ( 0.03 ) & 0.00 & NaN & 9 & 1.33 & 1.00 & 6.00 & 2.48 \\\\\n", + "\t 100 & 500 & 5.00 & 0.02 & 1.07 ( 0.03 ) & 23.8 ( 0.52 ) & 4.26 ( 0.1 ) & 2.43 ( 0.02 ) & 25.54 & 0.93 & 10 & 1.07 & 23.80 & 4.26 & 2.43 \\\\\n", + "\t 500 & 500 & 1.00 & 0.14 & 0.84 ( 0.01 ) & 19.92 ( 0.41 ) & 1.71 ( 0.08 ) & 2.14 ( 0.01 ) & 24.21 & 0.82 & 11 & 0.84 & 19.90 & 1.71 & 2.14 \\\\\n", + "\t 1000 & 500 & 0.50 & 0.19 & 0.78 ( 0.01 ) & 18.73 ( 0.42 ) & 0.84 ( 0.06 ) & 2.06 ( 0 ) & 23.89 & 0.78 & 12 & 0.78 & 18.70 & 0.84 & 2.06 \\\\\n", + "\t 50 & 1000 & 20.00 & 0.00 & 1.31 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.48 ( 0.03 ) & 0.00 & NaN & 13 & 1.31 & 1.00 & 6.00 & 2.48 \\\\\n", + "\t 100 & 1000 & 10.00 & 0.01 & 1.06 ( 0.03 ) & 48.48 ( 0.63 ) & 4.33 ( 0.1 ) & 2.43 ( 0.02 ) & 50.15 & 0.97 & 14 & 1.06 & 48.40 & 4.33 & 2.43 \\\\\n", + "\t 500 & 1000 & 2.00 & 0.06 & 0.89 ( 0.01 ) & 44.77 ( 0.71 ) & 1.81 ( 0.1 ) & 2.3 ( 0.01 ) & 48.96 & 0.91 & 15 & 0.89 & 44.70 & 1.81 & 2.30 \\\\\n", + "\t 1000 & 1000 & 1.00 & 0.09 & 0.85 ( 0.01 ) & 41.77 ( 0.68 ) & 0.99 ( 0.07 ) & 2.25 ( 0.01 ) & 46.78 & 0.89 & 16 & 0.85 & 41.70 & 0.99 & 2.25 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| N | P | Ratio | Stab | MSE | FP | FN | OOB | num_select | FDR | Index | MSE_mean | FP_mean | FN_mean | OOB_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 1.00 | 0.00 | 1.31 ( 0.06 ) | 1 ( 0 ) | 6 ( 0 ) | 2.09 ( 0.02 ) | 0.00 | NaN | 1 | 1.31 | 1.00 | 6.00 | 2.09 |\n", + "| 100 | 50 | 0.50 | 0.18 | 0.85 ( 0.02 ) | 1.85 ( 0.11 ) | 4.11 ( 0.1 ) | 1.79 ( 0.01 ) | 3.74 | 0.48 | 2 | 0.85 | 1.85 | 4.11 | 1.79 |\n", + "| 500 | 50 | 0.10 | 0.80 | 0.47 ( 0.01 ) | 0.3 ( 0.05 ) | 1.61 ( 0.08 ) | 1.31 ( 0 ) | 4.69 | 0.05 | 3 | 0.47 | 0.30 | 1.61 | 1.31 |\n", + "| 1000 | 50 | 0.05 | 0.88 | 0.35 ( 0 ) | 0.07 ( 0.03 ) | 0.78 ( 0.07 ) | 1.17 ( 0 ) | 5.29 | 0.01 | 4 | 0.35 | 0.07 | 0.78 | 1.17 |\n", + "| 50 | 100 | 2.00 | 0.00 | 1.32 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.23 ( 0.02 ) | 0.00 | NaN | 5 | 1.32 | 1.00 | 6.00 | 2.23 |\n", + "| 100 | 100 | 1.00 | 0.08 | 0.91 ( 0.03 ) | 4.33 ( 0.22 ) | 4.45 ( 0.09 ) | 2.02 ( 0.01 ) | 5.88 | 0.72 | 6 | 0.91 | 4.33 | 4.45 | 2.02 |\n", + "| 500 | 100 | 0.20 | 0.60 | 0.59 ( 0.01 ) | 1.91 ( 0.15 ) | 1.41 ( 0.07 ) | 1.54 ( 0 ) | 6.50 | 0.27 | 7 | 0.59 | 1.91 | 1.41 | 1.54 |\n", + "| 1000 | 100 | 0.10 | 0.81 | 0.47 ( 0 ) | 0.71 ( 0.09 ) | 0.53 ( 0.06 ) | 1.39 ( 0 ) | 6.18 | 0.1 | 8 | 0.47 | 0.71 | 0.53 | 1.39 |\n", + "| 50 | 500 | 10.00 | 0.00 | 1.33 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.48 ( 0.03 ) | 0.00 | NaN | 9 | 1.33 | 1.00 | 6.00 | 2.48 |\n", + "| 100 | 500 | 5.00 | 0.02 | 1.07 ( 0.03 ) | 23.8 ( 0.52 ) | 4.26 ( 0.1 ) | 2.43 ( 0.02 ) | 25.54 | 0.93 | 10 | 1.07 | 23.80 | 4.26 | 2.43 |\n", + "| 500 | 500 | 1.00 | 0.14 | 0.84 ( 0.01 ) | 19.92 ( 0.41 ) | 1.71 ( 0.08 ) | 2.14 ( 0.01 ) | 24.21 | 0.82 | 11 | 0.84 | 19.90 | 1.71 | 2.14 |\n", + "| 1000 | 500 | 0.50 | 0.19 | 0.78 ( 0.01 ) | 18.73 ( 0.42 ) | 0.84 ( 0.06 ) | 2.06 ( 0 ) | 23.89 | 0.78 | 12 | 0.78 | 18.70 | 0.84 | 2.06 |\n", + "| 50 | 1000 | 20.00 | 0.00 | 1.31 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.48 ( 0.03 ) | 0.00 | NaN | 13 | 1.31 | 1.00 | 6.00 | 2.48 |\n", + "| 100 | 1000 | 10.00 | 0.01 | 1.06 ( 0.03 ) | 48.48 ( 0.63 ) | 4.33 ( 0.1 ) | 2.43 ( 0.02 ) | 50.15 | 0.97 | 14 | 1.06 | 48.40 | 4.33 | 2.43 |\n", + "| 500 | 1000 | 2.00 | 0.06 | 0.89 ( 0.01 ) | 44.77 ( 0.71 ) | 1.81 ( 0.1 ) | 2.3 ( 0.01 ) | 48.96 | 0.91 | 15 | 0.89 | 44.70 | 1.81 | 2.30 |\n", + "| 1000 | 1000 | 1.00 | 0.09 | 0.85 ( 0.01 ) | 41.77 ( 0.68 ) | 0.99 ( 0.07 ) | 2.25 ( 0.01 ) | 46.78 | 0.89 | 16 | 0.85 | 41.70 | 0.99 | 2.25 |\n", + "\n" + ], + "text/plain": [ + " N P Ratio Stab MSE FP FN \n", + "1 50 50 1.00 0.00 1.31 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) \n", + "2 100 50 0.50 0.18 0.85 ( 0.02 ) 1.85 ( 0.11 ) 4.11 ( 0.1 ) \n", + "3 500 50 0.10 0.80 0.47 ( 0.01 ) 0.3 ( 0.05 ) 1.61 ( 0.08 )\n", + "4 1000 50 0.05 0.88 0.35 ( 0 ) 0.07 ( 0.03 ) 0.78 ( 0.07 )\n", + "5 50 100 2.00 0.00 1.32 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "6 100 100 1.00 0.08 0.91 ( 0.03 ) 4.33 ( 0.22 ) 4.45 ( 0.09 )\n", + "7 500 100 0.20 0.60 0.59 ( 0.01 ) 1.91 ( 0.15 ) 1.41 ( 0.07 )\n", + "8 1000 100 0.10 0.81 0.47 ( 0 ) 0.71 ( 0.09 ) 0.53 ( 0.06 )\n", + "9 50 500 10.00 0.00 1.33 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "10 100 500 5.00 0.02 1.07 ( 0.03 ) 23.8 ( 0.52 ) 4.26 ( 0.1 ) \n", + "11 500 500 1.00 0.14 0.84 ( 0.01 ) 19.92 ( 0.41 ) 1.71 ( 0.08 )\n", + "12 1000 500 0.50 0.19 0.78 ( 0.01 ) 18.73 ( 0.42 ) 0.84 ( 0.06 )\n", + "13 50 1000 20.00 0.00 1.31 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "14 100 1000 10.00 0.01 1.06 ( 0.03 ) 48.48 ( 0.63 ) 4.33 ( 0.1 ) \n", + "15 500 1000 2.00 0.06 0.89 ( 0.01 ) 44.77 ( 0.71 ) 1.81 ( 0.1 ) \n", + "16 1000 1000 1.00 0.09 0.85 ( 0.01 ) 41.77 ( 0.68 ) 0.99 ( 0.07 )\n", + " OOB num_select FDR Index MSE_mean FP_mean FN_mean OOB_mean\n", + "1 2.09 ( 0.02 ) 0.00 NaN 1 1.31 1.00 6.00 2.09 \n", + "2 1.79 ( 0.01 ) 3.74 0.48 2 0.85 1.85 4.11 1.79 \n", + "3 1.31 ( 0 ) 4.69 0.05 3 0.47 0.30 1.61 1.31 \n", + "4 1.17 ( 0 ) 5.29 0.01 4 0.35 0.07 0.78 1.17 \n", + "5 2.23 ( 0.02 ) 0.00 NaN 5 1.32 1.00 6.00 2.23 \n", + "6 2.02 ( 0.01 ) 5.88 0.72 6 0.91 4.33 4.45 2.02 \n", + "7 1.54 ( 0 ) 6.50 0.27 7 0.59 1.91 1.41 1.54 \n", + "8 1.39 ( 0 ) 6.18 0.1 8 0.47 0.71 0.53 1.39 \n", + "9 2.48 ( 0.03 ) 0.00 NaN 9 1.33 1.00 6.00 2.48 \n", + "10 2.43 ( 0.02 ) 25.54 0.93 10 1.07 23.80 4.26 2.43 \n", + "11 2.14 ( 0.01 ) 24.21 0.82 11 0.84 19.90 1.71 2.14 \n", + "12 2.06 ( 0 ) 23.89 0.78 12 0.78 18.70 0.84 2.06 \n", + "13 2.48 ( 0.03 ) 0.00 NaN 13 1.31 1.00 6.00 2.48 \n", + "14 2.43 ( 0.02 ) 50.15 0.97 14 1.06 48.40 4.33 2.43 \n", + "15 2.3 ( 0.01 ) 48.96 0.91 15 0.89 44.70 1.81 2.30 \n", + "16 2.25 ( 0.01 ) 46.78 0.89 16 0.85 41.70 0.99 2.25 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "## assign zero values to NA Stab; also recover missing FP values (1 in this case); missing FN values (6 in this case)\n", + "result.table_ind$Stab[is.na(result.table_ind$Stab)] = 0\n", + "result.table_ind$FP_mean[is.na(result.table_ind$FP_mean)] = 1\n", + "result.table_ind$FN_mean[is.na(result.table_ind$FN_mean)] = 6\n", + "#result.table_ind$FDR[is.na(result.table_ind$FDR)] = 0\n", + "result.table_ind\n", + "\n", + "## export\n", + "write.table(result.table_ind, '../results_summary_cts/sim_ind_rf.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_cts/.ipynb_checkpoints/0.4_sim_indepdent_compLasso_cts-checkpoint.ipynb b/simulations/notebooks_sim_cts/.ipynb_checkpoints/0.4_sim_indepdent_compLasso_cts-checkpoint.ipynb new file mode 100755 index 0000000..9304d4e --- /dev/null +++ b/simulations/notebooks_sim_cts/.ipynb_checkpoints/0.4_sim_indepdent_compLasso_cts-checkpoint.ipynb @@ -0,0 +1,362 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize compositional lasso results on Independent Simulation Scenarios for continuous outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'\n", + "\n", + "load(paste0(dir, '/independent_compLasso.RData'))" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "files = NULL\n", + "for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_independent_', paste('P', p, 'N', n, sep='_'), '.RData'))\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "avg_FDR = NULL\n", + "for (i in 1:length(files)){\n", + " sim_file = files[i]\n", + " load(sim_file, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_ind_compLasso[[i]]$Stab.table\n", + " \n", + " FDR = NULL\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "table_ind = NULL\n", + "tmp_num_select = rep(0, length(results_ind_compLasso))\n", + "for (i in 1:length(results_ind_compLasso)){\n", + " table_ind = rbind(table_ind, results_ind_compLasso[[i]][c('n', 'p', 'rou', 'FP', 'FN', 'MSE', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_ind_compLasso[[i]]$Stab.table))\n", + " \n", + "}\n", + "table_ind = as.data.frame(table_ind)\n", + "table_ind$num_select = tmp_num_select\n", + "table_ind$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
nprouFPFNMSEStabnum_selectFDR
50 50 0 2.99 ( 0.27 )0.05 ( 0.02 )0.8 ( 0.05 ) 0.61 8.94 0.28
100 50 0 0.79 ( 0.15 )0 ( 0 ) 0.98 ( 0.06 )0.87 6.79 0.09
500 50 0 0.51 ( 0.11 )0 ( 0 ) 1.08 ( 0.05 )0.91 6.51 0.06
1000 50 0 0.39 ( 0.15 )0 ( 0 ) 1.18 ( 0.04 )0.93 6.39 0.04
50 100 0 4.3 ( 0.31 ) 0.24 ( 0.05 )1.05 ( 0.07 )0.52 10.06 0.37
100 100 0 1.02 ( 0.19 )0 ( 0 ) 0.94 ( 0.04 )0.85 7.02 0.11
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllll}\n", + " n & p & rou & FP & FN & MSE & Stab & num\\_select & FDR\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0 & 2.99 ( 0.27 ) & 0.05 ( 0.02 ) & 0.8 ( 0.05 ) & 0.61 & 8.94 & 0.28 \\\\\n", + "\t 100 & 50 & 0 & 0.79 ( 0.15 ) & 0 ( 0 ) & 0.98 ( 0.06 ) & 0.87 & 6.79 & 0.09 \\\\\n", + "\t 500 & 50 & 0 & 0.51 ( 0.11 ) & 0 ( 0 ) & 1.08 ( 0.05 ) & 0.91 & 6.51 & 0.06 \\\\\n", + "\t 1000 & 50 & 0 & 0.39 ( 0.15 ) & 0 ( 0 ) & 1.18 ( 0.04 ) & 0.93 & 6.39 & 0.04 \\\\\n", + "\t 50 & 100 & 0 & 4.3 ( 0.31 ) & 0.24 ( 0.05 ) & 1.05 ( 0.07 ) & 0.52 & 10.06 & 0.37 \\\\\n", + "\t 100 & 100 & 0 & 1.02 ( 0.19 ) & 0 ( 0 ) & 0.94 ( 0.04 ) & 0.85 & 7.02 & 0.11 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| n | p | rou | FP | FN | MSE | Stab | num_select | FDR |\n", + "|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0 | 2.99 ( 0.27 ) | 0.05 ( 0.02 ) | 0.8 ( 0.05 ) | 0.61 | 8.94 | 0.28 |\n", + "| 100 | 50 | 0 | 0.79 ( 0.15 ) | 0 ( 0 ) | 0.98 ( 0.06 ) | 0.87 | 6.79 | 0.09 |\n", + "| 500 | 50 | 0 | 0.51 ( 0.11 ) | 0 ( 0 ) | 1.08 ( 0.05 ) | 0.91 | 6.51 | 0.06 |\n", + "| 1000 | 50 | 0 | 0.39 ( 0.15 ) | 0 ( 0 ) | 1.18 ( 0.04 ) | 0.93 | 6.39 | 0.04 |\n", + "| 50 | 100 | 0 | 4.3 ( 0.31 ) | 0.24 ( 0.05 ) | 1.05 ( 0.07 ) | 0.52 | 10.06 | 0.37 |\n", + "| 100 | 100 | 0 | 1.02 ( 0.19 ) | 0 ( 0 ) | 0.94 ( 0.04 ) | 0.85 | 7.02 | 0.11 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN MSE Stab num_select FDR \n", + "1 50 50 0 2.99 ( 0.27 ) 0.05 ( 0.02 ) 0.8 ( 0.05 ) 0.61 8.94 0.28\n", + "2 100 50 0 0.79 ( 0.15 ) 0 ( 0 ) 0.98 ( 0.06 ) 0.87 6.79 0.09\n", + "3 500 50 0 0.51 ( 0.11 ) 0 ( 0 ) 1.08 ( 0.05 ) 0.91 6.51 0.06\n", + "4 1000 50 0 0.39 ( 0.15 ) 0 ( 0 ) 1.18 ( 0.04 ) 0.93 6.39 0.04\n", + "5 50 100 0 4.3 ( 0.31 ) 0.24 ( 0.05 ) 1.05 ( 0.07 ) 0.52 10.06 0.37\n", + "6 100 100 0 1.02 ( 0.19 ) 0 ( 0 ) 0.94 ( 0.04 ) 0.85 7.02 0.11" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_ind)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_ind <- apply(table_ind,2,as.character)\n", + "rownames(result.table_ind) = rownames(table_ind)\n", + "result.table_ind = as.data.frame(result.table_ind)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_ind$n = tidyr::extract_numeric(result.table_ind$n)\n", + "result.table_ind$p = tidyr::extract_numeric(result.table_ind$p)\n", + "result.table_ind$ratio = result.table_ind$p / result.table_ind$n\n", + "\n", + "result.table_ind = result.table_ind[c('n', 'p', 'ratio', 'Stab', 'MSE', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_ind)[1:3] = c('N', 'P', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”" + ] + } + ], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_ind$Stab = as.numeric(as.character(result.table_ind$Stab))\n", + "result.table_ind$MSE_mean = as.numeric(substr(result.table_ind$MSE, start=1, stop=4))\n", + "result.table_ind$FP_mean = as.numeric(substr(result.table_ind$FP, start=1, stop=4))\n", + "result.table_ind$FN_mean = as.numeric(substr(result.table_ind$FN, start=1, stop=4))\n", + "result.table_ind$FN_mean[is.na(result.table_ind$FN_mean)] = 0\n", + "result.table_ind$num_select = as.numeric(as.character(result.table_ind$num_select))" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
50 50 1.00 0.61 0.8 ( 0.05 ) 2.99 ( 0.27 )0.05 ( 0.02 ) 8.94 0.28 0.80 2.99 0.05
100 50 0.50 0.87 0.98 ( 0.06 )0.79 ( 0.15 )0 ( 0 ) 6.79 0.09 0.98 0.79 0.00
500 50 0.10 0.91 1.08 ( 0.05 )0.51 ( 0.11 )0 ( 0 ) 6.51 0.06 1.08 0.51 0.00
1000 50 0.05 0.93 1.18 ( 0.04 )0.39 ( 0.15 )0 ( 0 ) 6.39 0.04 1.18 0.39 0.00
50 100 2.00 0.52 1.05 ( 0.07 )4.3 ( 0.31 ) 0.24 ( 0.05 )10.06 0.37 1.05 4.30 0.24
100 100 1.00 0.85 0.94 ( 0.04 )1.02 ( 0.19 )0 ( 0 ) 7.02 0.11 0.94 1.02 0.00
500 100 0.20 0.96 1.16 ( 0.04 )0.25 ( 0.09 )0 ( 0 ) 6.25 0.03 1.16 0.25 0.00
1000 100 0.10 0.89 1.04 ( 0.05 )0.71 ( 0.15 )0 ( 0 ) 6.71 0.08 1.04 0.71 0.00
50 500 10.00 0.38 2.18 ( 0.13 )5.53 ( 0.36 )1.27 ( 0.11 )10.26 0.48 2.18 5.53 1.27
100 500 5.00 0.75 1 ( 0.05 ) 1.9 ( 0.29 ) 0.03 ( 0.02 ) 7.87 0.18 1.00 1.90 0.03
500 500 1.00 0.96 1.18 ( 0.04 )0.27 ( 0.13 )0 ( 0 ) 6.27 0.03 1.18 0.27 0.00
1000 500 0.50 0.96 1.24 ( 0.04 )0.25 ( 0.1 ) 0 ( 0 ) 6.25 0.03 1.24 0.25 0.00
50 1000 20.00 0.32 3.09 ( 0.23 )5.56 ( 0.36 )1.95 ( 0.14 ) 9.61 0.51 3.09 5.56 1.95
100 1000 10.00 0.67 1.1 ( 0.07 ) 2.8 ( 0.37 ) 0.04 ( 0.02 ) 8.76 0.24 1.10 2.80 0.04
500 1000 2.00 0.96 1.12 ( 0.04 )0.27 ( 0.08 )0 ( 0 ) 6.27 0.03 1.12 0.27 0.00
1000 1000 1.00 0.96 1.16 ( 0.04 )0.24 ( 0.07 )0 ( 0 ) 6.24 0.03 1.16 0.24 0.00
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|llllllllllll}\n", + " N & P & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t 50 & 50 & 1.00 & 0.61 & 0.8 ( 0.05 ) & 2.99 ( 0.27 ) & 0.05 ( 0.02 ) & 8.94 & 0.28 & 0.80 & 2.99 & 0.05 \\\\\n", + "\t 100 & 50 & 0.50 & 0.87 & 0.98 ( 0.06 ) & 0.79 ( 0.15 ) & 0 ( 0 ) & 6.79 & 0.09 & 0.98 & 0.79 & 0.00 \\\\\n", + "\t 500 & 50 & 0.10 & 0.91 & 1.08 ( 0.05 ) & 0.51 ( 0.11 ) & 0 ( 0 ) & 6.51 & 0.06 & 1.08 & 0.51 & 0.00 \\\\\n", + "\t 1000 & 50 & 0.05 & 0.93 & 1.18 ( 0.04 ) & 0.39 ( 0.15 ) & 0 ( 0 ) & 6.39 & 0.04 & 1.18 & 0.39 & 0.00 \\\\\n", + "\t 50 & 100 & 2.00 & 0.52 & 1.05 ( 0.07 ) & 4.3 ( 0.31 ) & 0.24 ( 0.05 ) & 10.06 & 0.37 & 1.05 & 4.30 & 0.24 \\\\\n", + "\t 100 & 100 & 1.00 & 0.85 & 0.94 ( 0.04 ) & 1.02 ( 0.19 ) & 0 ( 0 ) & 7.02 & 0.11 & 0.94 & 1.02 & 0.00 \\\\\n", + "\t 500 & 100 & 0.20 & 0.96 & 1.16 ( 0.04 ) & 0.25 ( 0.09 ) & 0 ( 0 ) & 6.25 & 0.03 & 1.16 & 0.25 & 0.00 \\\\\n", + "\t 1000 & 100 & 0.10 & 0.89 & 1.04 ( 0.05 ) & 0.71 ( 0.15 ) & 0 ( 0 ) & 6.71 & 0.08 & 1.04 & 0.71 & 0.00 \\\\\n", + "\t 50 & 500 & 10.00 & 0.38 & 2.18 ( 0.13 ) & 5.53 ( 0.36 ) & 1.27 ( 0.11 ) & 10.26 & 0.48 & 2.18 & 5.53 & 1.27 \\\\\n", + "\t 100 & 500 & 5.00 & 0.75 & 1 ( 0.05 ) & 1.9 ( 0.29 ) & 0.03 ( 0.02 ) & 7.87 & 0.18 & 1.00 & 1.90 & 0.03 \\\\\n", + "\t 500 & 500 & 1.00 & 0.96 & 1.18 ( 0.04 ) & 0.27 ( 0.13 ) & 0 ( 0 ) & 6.27 & 0.03 & 1.18 & 0.27 & 0.00 \\\\\n", + "\t 1000 & 500 & 0.50 & 0.96 & 1.24 ( 0.04 ) & 0.25 ( 0.1 ) & 0 ( 0 ) & 6.25 & 0.03 & 1.24 & 0.25 & 0.00 \\\\\n", + "\t 50 & 1000 & 20.00 & 0.32 & 3.09 ( 0.23 ) & 5.56 ( 0.36 ) & 1.95 ( 0.14 ) & 9.61 & 0.51 & 3.09 & 5.56 & 1.95 \\\\\n", + "\t 100 & 1000 & 10.00 & 0.67 & 1.1 ( 0.07 ) & 2.8 ( 0.37 ) & 0.04 ( 0.02 ) & 8.76 & 0.24 & 1.10 & 2.80 & 0.04 \\\\\n", + "\t 500 & 1000 & 2.00 & 0.96 & 1.12 ( 0.04 ) & 0.27 ( 0.08 ) & 0 ( 0 ) & 6.27 & 0.03 & 1.12 & 0.27 & 0.00 \\\\\n", + "\t 1000 & 1000 & 1.00 & 0.96 & 1.16 ( 0.04 ) & 0.24 ( 0.07 ) & 0 ( 0 ) & 6.24 & 0.03 & 1.16 & 0.24 & 0.00 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| N | P | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 1.00 | 0.61 | 0.8 ( 0.05 ) | 2.99 ( 0.27 ) | 0.05 ( 0.02 ) | 8.94 | 0.28 | 0.80 | 2.99 | 0.05 |\n", + "| 100 | 50 | 0.50 | 0.87 | 0.98 ( 0.06 ) | 0.79 ( 0.15 ) | 0 ( 0 ) | 6.79 | 0.09 | 0.98 | 0.79 | 0.00 |\n", + "| 500 | 50 | 0.10 | 0.91 | 1.08 ( 0.05 ) | 0.51 ( 0.11 ) | 0 ( 0 ) | 6.51 | 0.06 | 1.08 | 0.51 | 0.00 |\n", + "| 1000 | 50 | 0.05 | 0.93 | 1.18 ( 0.04 ) | 0.39 ( 0.15 ) | 0 ( 0 ) | 6.39 | 0.04 | 1.18 | 0.39 | 0.00 |\n", + "| 50 | 100 | 2.00 | 0.52 | 1.05 ( 0.07 ) | 4.3 ( 0.31 ) | 0.24 ( 0.05 ) | 10.06 | 0.37 | 1.05 | 4.30 | 0.24 |\n", + "| 100 | 100 | 1.00 | 0.85 | 0.94 ( 0.04 ) | 1.02 ( 0.19 ) | 0 ( 0 ) | 7.02 | 0.11 | 0.94 | 1.02 | 0.00 |\n", + "| 500 | 100 | 0.20 | 0.96 | 1.16 ( 0.04 ) | 0.25 ( 0.09 ) | 0 ( 0 ) | 6.25 | 0.03 | 1.16 | 0.25 | 0.00 |\n", + "| 1000 | 100 | 0.10 | 0.89 | 1.04 ( 0.05 ) | 0.71 ( 0.15 ) | 0 ( 0 ) | 6.71 | 0.08 | 1.04 | 0.71 | 0.00 |\n", + "| 50 | 500 | 10.00 | 0.38 | 2.18 ( 0.13 ) | 5.53 ( 0.36 ) | 1.27 ( 0.11 ) | 10.26 | 0.48 | 2.18 | 5.53 | 1.27 |\n", + "| 100 | 500 | 5.00 | 0.75 | 1 ( 0.05 ) | 1.9 ( 0.29 ) | 0.03 ( 0.02 ) | 7.87 | 0.18 | 1.00 | 1.90 | 0.03 |\n", + "| 500 | 500 | 1.00 | 0.96 | 1.18 ( 0.04 ) | 0.27 ( 0.13 ) | 0 ( 0 ) | 6.27 | 0.03 | 1.18 | 0.27 | 0.00 |\n", + "| 1000 | 500 | 0.50 | 0.96 | 1.24 ( 0.04 ) | 0.25 ( 0.1 ) | 0 ( 0 ) | 6.25 | 0.03 | 1.24 | 0.25 | 0.00 |\n", + "| 50 | 1000 | 20.00 | 0.32 | 3.09 ( 0.23 ) | 5.56 ( 0.36 ) | 1.95 ( 0.14 ) | 9.61 | 0.51 | 3.09 | 5.56 | 1.95 |\n", + "| 100 | 1000 | 10.00 | 0.67 | 1.1 ( 0.07 ) | 2.8 ( 0.37 ) | 0.04 ( 0.02 ) | 8.76 | 0.24 | 1.10 | 2.80 | 0.04 |\n", + "| 500 | 1000 | 2.00 | 0.96 | 1.12 ( 0.04 ) | 0.27 ( 0.08 ) | 0 ( 0 ) | 6.27 | 0.03 | 1.12 | 0.27 | 0.00 |\n", + "| 1000 | 1000 | 1.00 | 0.96 | 1.16 ( 0.04 ) | 0.24 ( 0.07 ) | 0 ( 0 ) | 6.24 | 0.03 | 1.16 | 0.24 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Ratio Stab MSE FP FN num_select\n", + "1 50 50 1.00 0.61 0.8 ( 0.05 ) 2.99 ( 0.27 ) 0.05 ( 0.02 ) 8.94 \n", + "2 100 50 0.50 0.87 0.98 ( 0.06 ) 0.79 ( 0.15 ) 0 ( 0 ) 6.79 \n", + "3 500 50 0.10 0.91 1.08 ( 0.05 ) 0.51 ( 0.11 ) 0 ( 0 ) 6.51 \n", + "4 1000 50 0.05 0.93 1.18 ( 0.04 ) 0.39 ( 0.15 ) 0 ( 0 ) 6.39 \n", + "5 50 100 2.00 0.52 1.05 ( 0.07 ) 4.3 ( 0.31 ) 0.24 ( 0.05 ) 10.06 \n", + "6 100 100 1.00 0.85 0.94 ( 0.04 ) 1.02 ( 0.19 ) 0 ( 0 ) 7.02 \n", + "7 500 100 0.20 0.96 1.16 ( 0.04 ) 0.25 ( 0.09 ) 0 ( 0 ) 6.25 \n", + "8 1000 100 0.10 0.89 1.04 ( 0.05 ) 0.71 ( 0.15 ) 0 ( 0 ) 6.71 \n", + "9 50 500 10.00 0.38 2.18 ( 0.13 ) 5.53 ( 0.36 ) 1.27 ( 0.11 ) 10.26 \n", + "10 100 500 5.00 0.75 1 ( 0.05 ) 1.9 ( 0.29 ) 0.03 ( 0.02 ) 7.87 \n", + "11 500 500 1.00 0.96 1.18 ( 0.04 ) 0.27 ( 0.13 ) 0 ( 0 ) 6.27 \n", + "12 1000 500 0.50 0.96 1.24 ( 0.04 ) 0.25 ( 0.1 ) 0 ( 0 ) 6.25 \n", + "13 50 1000 20.00 0.32 3.09 ( 0.23 ) 5.56 ( 0.36 ) 1.95 ( 0.14 ) 9.61 \n", + "14 100 1000 10.00 0.67 1.1 ( 0.07 ) 2.8 ( 0.37 ) 0.04 ( 0.02 ) 8.76 \n", + "15 500 1000 2.00 0.96 1.12 ( 0.04 ) 0.27 ( 0.08 ) 0 ( 0 ) 6.27 \n", + "16 1000 1000 1.00 0.96 1.16 ( 0.04 ) 0.24 ( 0.07 ) 0 ( 0 ) 6.24 \n", + " FDR MSE_mean FP_mean FN_mean\n", + "1 0.28 0.80 2.99 0.05 \n", + "2 0.09 0.98 0.79 0.00 \n", + "3 0.06 1.08 0.51 0.00 \n", + "4 0.04 1.18 0.39 0.00 \n", + "5 0.37 1.05 4.30 0.24 \n", + "6 0.11 0.94 1.02 0.00 \n", + "7 0.03 1.16 0.25 0.00 \n", + "8 0.08 1.04 0.71 0.00 \n", + "9 0.48 2.18 5.53 1.27 \n", + "10 0.18 1.00 1.90 0.03 \n", + "11 0.03 1.18 0.27 0.00 \n", + "12 0.03 1.24 0.25 0.00 \n", + "13 0.51 3.09 5.56 1.95 \n", + "14 0.24 1.10 2.80 0.04 \n", + "15 0.03 1.12 0.27 0.00 \n", + "16 0.03 1.16 0.24 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# fix missing values\n", + "result.table_ind$MSE_mean[is.na(result.table_ind$MSE_mean)] = 1\n", + "result.table_ind" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "## export\n", + "write.table(result.table_ind, '../results_summary_cts/sim_ind_compLasso.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_cts/.ipynb_checkpoints/1.1_sim_toe_lasso_cts-checkpoint.ipynb b/simulations/notebooks_sim_cts/.ipynb_checkpoints/1.1_sim_toe_lasso_cts-checkpoint.ipynb new file mode 100755 index 0000000..231c1a8 --- /dev/null +++ b/simulations/notebooks_sim_cts/.ipynb_checkpoints/1.1_sim_toe_lasso_cts-checkpoint.ipynb @@ -0,0 +1,819 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize lasso results on Toeplitz Simulation Scenarios for continuous outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'\n", + "\n", + "load(paste0(dir, '/toe_Lasso.RData'))" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "rou.list = seq(0.1, 0.9, 0.2)\n", + "\n", + "files = NULL\n", + "for (rou in rou.list){\n", + " for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_toeplitz_corr', rou, paste('P', p, 'N', n, sep='_'), '.RData', sep=''))\n", + " }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "avg_FDR = NULL\n", + "for (i in 1:length(files)){\n", + " sim_file = files[i]\n", + " load(sim_file, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_toe_lasso[[i]]$Stab.table\n", + " \n", + " FDR = NULL\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "table_toe = NULL\n", + "tmp_num_select = rep(0, length(results_toe_lasso))\n", + "for (i in 1:length(results_toe_lasso)){\n", + " table_toe = rbind(table_toe, results_toe_lasso[[i]][c('n', 'p', 'rou', 'FP', 'FN', 'MSE', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_toe_lasso[[i]]$Stab.table))\n", + " \n", + "}\n", + "table_toe = as.data.frame(table_toe)\n", + "table_toe$num_select = tmp_num_select\n", + "table_toe$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
nprouFPFNMSEStabnum_selectFDR
50 50 0.1 8.59 ( 0.46 )0.02 ( 0.01 )0.62 ( 0.04 )0.36 13.57 0.51
100 50 0.1 6.3 ( 0.43 ) 0 ( 0 ) 0.37 ( 0.01 )0.47 11.30 0.40
500 50 0.1 2.88 ( 0.21 )0 ( 0 ) 0.28 ( 0 ) 0.73 7.88 0.20
1000 50 0.1 1.66 ( 0.11 )0 ( 0 ) 0.27 ( 0 ) 0.89 6.66 0.08
50 100 0.1 11.84 ( 0.4 )0 ( 0 ) 0.67 ( 0.05 )0.32 16.84 0.62
100 100 0.1 7.71 ( 0.56 )0 ( 0 ) 0.4 ( 0.01 ) 0.44 12.71 0.46
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllll}\n", + " n & p & rou & FP & FN & MSE & Stab & num\\_select & FDR\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0.1 & 8.59 ( 0.46 ) & 0.02 ( 0.01 ) & 0.62 ( 0.04 ) & 0.36 & 13.57 & 0.51 \\\\\n", + "\t 100 & 50 & 0.1 & 6.3 ( 0.43 ) & 0 ( 0 ) & 0.37 ( 0.01 ) & 0.47 & 11.30 & 0.40 \\\\\n", + "\t 500 & 50 & 0.1 & 2.88 ( 0.21 ) & 0 ( 0 ) & 0.28 ( 0 ) & 0.73 & 7.88 & 0.20 \\\\\n", + "\t 1000 & 50 & 0.1 & 1.66 ( 0.11 ) & 0 ( 0 ) & 0.27 ( 0 ) & 0.89 & 6.66 & 0.08 \\\\\n", + "\t 50 & 100 & 0.1 & 11.84 ( 0.4 ) & 0 ( 0 ) & 0.67 ( 0.05 ) & 0.32 & 16.84 & 0.62 \\\\\n", + "\t 100 & 100 & 0.1 & 7.71 ( 0.56 ) & 0 ( 0 ) & 0.4 ( 0.01 ) & 0.44 & 12.71 & 0.46 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| n | p | rou | FP | FN | MSE | Stab | num_select | FDR |\n", + "|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0.1 | 8.59 ( 0.46 ) | 0.02 ( 0.01 ) | 0.62 ( 0.04 ) | 0.36 | 13.57 | 0.51 |\n", + "| 100 | 50 | 0.1 | 6.3 ( 0.43 ) | 0 ( 0 ) | 0.37 ( 0.01 ) | 0.47 | 11.30 | 0.40 |\n", + "| 500 | 50 | 0.1 | 2.88 ( 0.21 ) | 0 ( 0 ) | 0.28 ( 0 ) | 0.73 | 7.88 | 0.20 |\n", + "| 1000 | 50 | 0.1 | 1.66 ( 0.11 ) | 0 ( 0 ) | 0.27 ( 0 ) | 0.89 | 6.66 | 0.08 |\n", + "| 50 | 100 | 0.1 | 11.84 ( 0.4 ) | 0 ( 0 ) | 0.67 ( 0.05 ) | 0.32 | 16.84 | 0.62 |\n", + "| 100 | 100 | 0.1 | 7.71 ( 0.56 ) | 0 ( 0 ) | 0.4 ( 0.01 ) | 0.44 | 12.71 | 0.46 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN MSE Stab num_select FDR \n", + "1 50 50 0.1 8.59 ( 0.46 ) 0.02 ( 0.01 ) 0.62 ( 0.04 ) 0.36 13.57 0.51\n", + "2 100 50 0.1 6.3 ( 0.43 ) 0 ( 0 ) 0.37 ( 0.01 ) 0.47 11.30 0.40\n", + "3 500 50 0.1 2.88 ( 0.21 ) 0 ( 0 ) 0.28 ( 0 ) 0.73 7.88 0.20\n", + "4 1000 50 0.1 1.66 ( 0.11 ) 0 ( 0 ) 0.27 ( 0 ) 0.89 6.66 0.08\n", + "5 50 100 0.1 11.84 ( 0.4 ) 0 ( 0 ) 0.67 ( 0.05 ) 0.32 16.84 0.62\n", + "6 100 100 0.1 7.71 ( 0.56 ) 0 ( 0 ) 0.4 ( 0.01 ) 0.44 12.71 0.46" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_toe <- apply(table_toe,2,as.character)\n", + "rownames(result.table_toe) = rownames(table_toe)\n", + "result.table_toe = as.data.frame(result.table_toe)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_toe$n = tidyr::extract_numeric(result.table_toe$n)\n", + "result.table_toe$p = tidyr::extract_numeric(result.table_toe$p)\n", + "result.table_toe$ratio = result.table_toe$p / result.table_toe$n\n", + "\n", + "result.table_toe = result.table_toe[c('n', 'p', 'rou', 'ratio', 'Stab', 'MSE', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_toe)[1:4] = c('N', 'P', 'Corr', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”" + ] + } + ], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_toe$Stab = as.numeric(as.character(result.table_toe$Stab))\n", + "result.table_toe$MSE_mean = as.numeric(substr(result.table_toe$MSE, start=1, stop=4))\n", + "result.table_toe$FP_mean = as.numeric(substr(result.table_toe$FP, start=1, stop=4))\n", + "result.table_toe$FN_mean = as.numeric(substr(result.table_toe$FN, start=1, stop=4))\n", + "result.table_toe$FN_mean[is.na(result.table_toe$FN_mean)] = 0\n", + "result.table_toe$num_select = as.numeric(as.character(result.table_toe$num_select))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
38100 100 0.5 1 0.36 0.44 ( 0.02 )10 ( 0.48 ) 0.02 ( 0.01 )14.98 0.56 0.44 NA 0.02
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t38 & 100 & 100 & 0.5 & 1 & 0.36 & 0.44 ( 0.02 ) & 10 ( 0.48 ) & 0.02 ( 0.01 ) & 14.98 & 0.56 & 0.44 & NA & 0.02 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 38 | 100 | 100 | 0.5 | 1 | 0.36 | 0.44 ( 0.02 ) | 10 ( 0.48 ) | 0.02 ( 0.01 ) | 14.98 | 0.56 | 0.44 | NA | 0.02 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN num_select\n", + "38 100 100 0.5 1 0.36 0.44 ( 0.02 ) 10 ( 0.48 ) 0.02 ( 0.01 ) 14.98 \n", + " FDR MSE_mean FP_mean FN_mean\n", + "38 0.56 0.44 NA 0.02 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check whether missing values exists\n", + "result.table_toe[rowSums(is.na(result.table_toe)) > 0,]" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "# recover values\n", + "result.table_toe$FP_mean[is.na(result.table_toe$FP_mean)] = 10" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
38100 100 0.5 1 0.36 0.44 ( 0.02 )10 ( 0.48 ) 0.02 ( 0.01 )14.98 0.56 0.44 10 0.02
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t38 & 100 & 100 & 0.5 & 1 & 0.36 & 0.44 ( 0.02 ) & 10 ( 0.48 ) & 0.02 ( 0.01 ) & 14.98 & 0.56 & 0.44 & 10 & 0.02 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 38 | 100 | 100 | 0.5 | 1 | 0.36 | 0.44 ( 0.02 ) | 10 ( 0.48 ) | 0.02 ( 0.01 ) | 14.98 | 0.56 | 0.44 | 10 | 0.02 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN num_select\n", + "38 100 100 0.5 1 0.36 0.44 ( 0.02 ) 10 ( 0.48 ) 0.02 ( 0.01 ) 14.98 \n", + " FDR MSE_mean FP_mean FN_mean\n", + "38 0.56 0.44 10 0.02 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_toe[38, ]" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
50 50 0.1 1.00 0.36 0.62 ( 0.04 )8.59 ( 0.46 )0.02 ( 0.01 )13.57 0.51 0.62 8.59 0.02
100 50 0.1 0.50 0.47 0.37 ( 0.01 )6.3 ( 0.43 ) 0 ( 0 ) 11.30 0.4 0.37 6.30 0.00
500 50 0.1 0.10 0.73 0.28 ( 0 ) 2.88 ( 0.21 )0 ( 0 ) 7.88 0.2 0.28 2.88 0.00
1000 50 0.1 0.05 0.89 0.27 ( 0 ) 1.66 ( 0.11 )0 ( 0 ) 6.66 0.08 0.27 1.66 0.00
50 100 0.1 2.00 0.32 0.67 ( 0.05 )11.84 ( 0.4 )0 ( 0 ) 16.84 0.62 0.67 11.80 0.00
100 100 0.1 1.00 0.44 0.4 ( 0.01 ) 7.71 ( 0.56 )0 ( 0 ) 12.71 0.46 0.40 7.71 0.00
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0.1 & 1.00 & 0.36 & 0.62 ( 0.04 ) & 8.59 ( 0.46 ) & 0.02 ( 0.01 ) & 13.57 & 0.51 & 0.62 & 8.59 & 0.02 \\\\\n", + "\t 100 & 50 & 0.1 & 0.50 & 0.47 & 0.37 ( 0.01 ) & 6.3 ( 0.43 ) & 0 ( 0 ) & 11.30 & 0.4 & 0.37 & 6.30 & 0.00 \\\\\n", + "\t 500 & 50 & 0.1 & 0.10 & 0.73 & 0.28 ( 0 ) & 2.88 ( 0.21 ) & 0 ( 0 ) & 7.88 & 0.2 & 0.28 & 2.88 & 0.00 \\\\\n", + "\t 1000 & 50 & 0.1 & 0.05 & 0.89 & 0.27 ( 0 ) & 1.66 ( 0.11 ) & 0 ( 0 ) & 6.66 & 0.08 & 0.27 & 1.66 & 0.00 \\\\\n", + "\t 50 & 100 & 0.1 & 2.00 & 0.32 & 0.67 ( 0.05 ) & 11.84 ( 0.4 ) & 0 ( 0 ) & 16.84 & 0.62 & 0.67 & 11.80 & 0.00 \\\\\n", + "\t 100 & 100 & 0.1 & 1.00 & 0.44 & 0.4 ( 0.01 ) & 7.71 ( 0.56 ) & 0 ( 0 ) & 12.71 & 0.46 & 0.40 & 7.71 & 0.00 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0.1 | 1.00 | 0.36 | 0.62 ( 0.04 ) | 8.59 ( 0.46 ) | 0.02 ( 0.01 ) | 13.57 | 0.51 | 0.62 | 8.59 | 0.02 |\n", + "| 100 | 50 | 0.1 | 0.50 | 0.47 | 0.37 ( 0.01 ) | 6.3 ( 0.43 ) | 0 ( 0 ) | 11.30 | 0.4 | 0.37 | 6.30 | 0.00 |\n", + "| 500 | 50 | 0.1 | 0.10 | 0.73 | 0.28 ( 0 ) | 2.88 ( 0.21 ) | 0 ( 0 ) | 7.88 | 0.2 | 0.28 | 2.88 | 0.00 |\n", + "| 1000 | 50 | 0.1 | 0.05 | 0.89 | 0.27 ( 0 ) | 1.66 ( 0.11 ) | 0 ( 0 ) | 6.66 | 0.08 | 0.27 | 1.66 | 0.00 |\n", + "| 50 | 100 | 0.1 | 2.00 | 0.32 | 0.67 ( 0.05 ) | 11.84 ( 0.4 ) | 0 ( 0 ) | 16.84 | 0.62 | 0.67 | 11.80 | 0.00 |\n", + "| 100 | 100 | 0.1 | 1.00 | 0.44 | 0.4 ( 0.01 ) | 7.71 ( 0.56 ) | 0 ( 0 ) | 12.71 | 0.46 | 0.40 | 7.71 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN num_select\n", + "1 50 50 0.1 1.00 0.36 0.62 ( 0.04 ) 8.59 ( 0.46 ) 0.02 ( 0.01 ) 13.57 \n", + "2 100 50 0.1 0.50 0.47 0.37 ( 0.01 ) 6.3 ( 0.43 ) 0 ( 0 ) 11.30 \n", + "3 500 50 0.1 0.10 0.73 0.28 ( 0 ) 2.88 ( 0.21 ) 0 ( 0 ) 7.88 \n", + "4 1000 50 0.1 0.05 0.89 0.27 ( 0 ) 1.66 ( 0.11 ) 0 ( 0 ) 6.66 \n", + "5 50 100 0.1 2.00 0.32 0.67 ( 0.05 ) 11.84 ( 0.4 ) 0 ( 0 ) 16.84 \n", + "6 100 100 0.1 1.00 0.44 0.4 ( 0.01 ) 7.71 ( 0.56 ) 0 ( 0 ) 12.71 \n", + " FDR MSE_mean FP_mean FN_mean\n", + "1 0.51 0.62 8.59 0.02 \n", + "2 0.4 0.37 6.30 0.00 \n", + "3 0.2 0.28 2.88 0.00 \n", + "4 0.08 0.27 1.66 0.00 \n", + "5 0.62 0.67 11.80 0.00 \n", + "6 0.46 0.40 7.71 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
75 500 500 0.9 1.0 0.25 0.3 ( 0 ) 18.18 ( 0.69 )0.03 ( 0.02 ) 23.15 0.72 0.30 18.1 0.03
761000 500 0.9 0.5 0.33 0.28 ( 0 ) 12.68 ( 0.57 )0 ( 0 ) 17.68 0.63 0.28 12.6 0.00
77 50 1000 0.9 20.0 0.08 0.9 ( 0.05 ) 18.15 ( 0.34 )3.92 ( 0.08 ) 19.23 0.89 0.90 18.1 3.92
78 100 1000 0.9 10.0 0.16 0.59 ( 0.02 ) 15.99 ( 0.66 )2.88 ( 0.06 ) 18.11 0.81 0.59 15.9 2.88
79 500 1000 0.9 2.0 0.20 0.31 ( 0 ) 24.62 ( 1.01 )0.05 ( 0.02 ) 29.57 0.77 0.31 24.6 0.05
801000 1000 0.9 1.0 0.25 0.28 ( 0 ) 18.51 ( 0.86 )0 ( 0 ) 23.51 0.71 0.28 18.5 0.00
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 1.0 & 0.25 & 0.3 ( 0 ) & 18.18 ( 0.69 ) & 0.03 ( 0.02 ) & 23.15 & 0.72 & 0.30 & 18.1 & 0.03 \\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.5 & 0.33 & 0.28 ( 0 ) & 12.68 ( 0.57 ) & 0 ( 0 ) & 17.68 & 0.63 & 0.28 & 12.6 & 0.00 \\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.0 & 0.08 & 0.9 ( 0.05 ) & 18.15 ( 0.34 ) & 3.92 ( 0.08 ) & 19.23 & 0.89 & 0.90 & 18.1 & 3.92 \\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.0 & 0.16 & 0.59 ( 0.02 ) & 15.99 ( 0.66 ) & 2.88 ( 0.06 ) & 18.11 & 0.81 & 0.59 & 15.9 & 2.88 \\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.0 & 0.20 & 0.31 ( 0 ) & 24.62 ( 1.01 ) & 0.05 ( 0.02 ) & 29.57 & 0.77 & 0.31 & 24.6 & 0.05 \\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.0 & 0.25 & 0.28 ( 0 ) & 18.51 ( 0.86 ) & 0 ( 0 ) & 23.51 & 0.71 & 0.28 & 18.5 & 0.00 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 1.0 | 0.25 | 0.3 ( 0 ) | 18.18 ( 0.69 ) | 0.03 ( 0.02 ) | 23.15 | 0.72 | 0.30 | 18.1 | 0.03 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.5 | 0.33 | 0.28 ( 0 ) | 12.68 ( 0.57 ) | 0 ( 0 ) | 17.68 | 0.63 | 0.28 | 12.6 | 0.00 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.0 | 0.08 | 0.9 ( 0.05 ) | 18.15 ( 0.34 ) | 3.92 ( 0.08 ) | 19.23 | 0.89 | 0.90 | 18.1 | 3.92 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.0 | 0.16 | 0.59 ( 0.02 ) | 15.99 ( 0.66 ) | 2.88 ( 0.06 ) | 18.11 | 0.81 | 0.59 | 15.9 | 2.88 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.0 | 0.20 | 0.31 ( 0 ) | 24.62 ( 1.01 ) | 0.05 ( 0.02 ) | 29.57 | 0.77 | 0.31 | 24.6 | 0.05 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.0 | 0.25 | 0.28 ( 0 ) | 18.51 ( 0.86 ) | 0 ( 0 ) | 23.51 | 0.71 | 0.28 | 18.5 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN \n", + "75 500 500 0.9 1.0 0.25 0.3 ( 0 ) 18.18 ( 0.69 ) 0.03 ( 0.02 )\n", + "76 1000 500 0.9 0.5 0.33 0.28 ( 0 ) 12.68 ( 0.57 ) 0 ( 0 ) \n", + "77 50 1000 0.9 20.0 0.08 0.9 ( 0.05 ) 18.15 ( 0.34 ) 3.92 ( 0.08 )\n", + "78 100 1000 0.9 10.0 0.16 0.59 ( 0.02 ) 15.99 ( 0.66 ) 2.88 ( 0.06 )\n", + "79 500 1000 0.9 2.0 0.20 0.31 ( 0 ) 24.62 ( 1.01 ) 0.05 ( 0.02 )\n", + "80 1000 1000 0.9 1.0 0.25 0.28 ( 0 ) 18.51 ( 0.86 ) 0 ( 0 ) \n", + " num_select FDR MSE_mean FP_mean FN_mean\n", + "75 23.15 0.72 0.30 18.1 0.03 \n", + "76 17.68 0.63 0.28 12.6 0.00 \n", + "77 19.23 0.89 0.90 18.1 3.92 \n", + "78 18.11 0.81 0.59 15.9 2.88 \n", + "79 29.57 0.77 0.31 24.6 0.05 \n", + "80 23.51 0.71 0.28 18.5 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
50 50 0.1 1.00 0.36 0.62 ( 0.04 ) 8.59 ( 0.46 ) 0.02 ( 0.01 ) 13.57 0.51 0.62 8.59 0.02
100 50 0.1 0.50 0.47 0.37 ( 0.01 ) 6.3 ( 0.43 ) 0 ( 0 ) 11.30 0.4 0.37 6.30 0.00
500 50 0.1 0.10 0.73 0.28 ( 0 ) 2.88 ( 0.21 ) 0 ( 0 ) 7.88 0.2 0.28 2.88 0.00
1000 50 0.1 0.05 0.89 0.27 ( 0 ) 1.66 ( 0.11 ) 0 ( 0 ) 6.66 0.08 0.27 1.66 0.00
50 100 0.1 2.00 0.32 0.67 ( 0.05 ) 11.84 ( 0.4 ) 0 ( 0 ) 16.84 0.62 0.67 11.80 0.00
100 100 0.1 1.00 0.44 0.4 ( 0.01 ) 7.71 ( 0.56 ) 0 ( 0 ) 12.71 0.46 0.40 7.71 0.00
500 100 0.1 0.20 0.70 0.27 ( 0 ) 3.35 ( 0.22 ) 0 ( 0 ) 8.35 0.23 0.27 3.35 0.00
1000 100 0.1 0.10 0.81 0.27 ( 0 ) 2.29 ( 0.23 ) 0 ( 0 ) 7.29 0.13 0.27 2.29 0.00
50 500 0.1 10.00 0.18 1.61 ( 0.1 ) 20.85 ( 0.38 )0.69 ( 0.08 ) 25.16 0.78 1.61 20.80 0.69
100 500 0.1 5.00 0.30 0.53 ( 0.02 ) 14.69 ( 0.7 ) 0 ( 0 ) 19.69 0.66 0.53 14.60 0.00
500 500 0.1 1.00 0.55 0.28 ( 0 ) 5.86 ( 0.51 ) 0 ( 0 ) 10.86 0.36 0.28 5.86 0.00
1000 500 0.1 0.50 0.78 0.28 ( 0 ) 2.69 ( 0.21 ) 0 ( 0 ) 7.69 0.17 0.28 2.69 0.00
50 1000 0.1 20.00 0.13 2.23 ( 0.14 ) 24.37 ( 0.39 )1.36 ( 0.1 ) 28.01 0.83 2.23 24.30 1.36
100 1000 0.1 10.00 0.25 0.57 ( 0.03 ) 18.79 ( 0.7 ) 0 ( 0 ) 23.79 0.73 0.57 18.70 0.00
500 1000 0.1 2.00 0.49 0.28 ( 0 ) 7.08 ( 0.53 ) 0 ( 0 ) 12.08 0.41 0.28 7.08 0.00
1000 1000 0.1 1.00 0.70 0.27 ( 0 ) 3.59 ( 0.33 ) 0 ( 0 ) 8.59 0.23 0.27 3.59 0.00
50 50 0.3 1.00 0.35 0.57 ( 0.03 ) 8.86 ( 0.42 ) 0.05 ( 0.02 ) 13.81 0.53 0.57 8.86 0.05
100 50 0.3 0.50 0.47 0.36 ( 0.01 ) 6.18 ( 0.36 ) 0 ( 0 ) 11.18 0.41 0.36 6.18 0.00
500 50 0.3 0.10 0.70 0.28 ( 0 ) 3.14 ( 0.21 ) 0 ( 0 ) 8.14 0.22 0.28 3.14 0.00
1000 50 0.3 0.05 0.86 0.27 ( 0 ) 1.86 ( 0.11 ) 0 ( 0 ) 6.86 0.11 0.27 1.86 0.00
50 100 0.3 2.00 0.31 0.76 ( 0.04 ) 11.12 ( 0.37 )0.17 ( 0.04 ) 15.95 0.62 0.76 11.10 0.17
100 100 0.3 1.00 0.38 0.41 ( 0.01 ) 9.43 ( 0.53 ) 0 ( 0 ) 14.43 0.54 0.41 9.43 0.00
500 100 0.3 0.20 0.63 0.27 ( 0 ) 4.16 ( 0.27 ) 0 ( 0 ) 9.16 0.29 0.27 4.16 0.00
1000 100 0.3 0.10 0.80 0.27 ( 0 ) 2.36 ( 0.17 ) 0 ( 0 ) 7.36 0.15 0.27 2.36 0.00
50 500 0.3 10.00 0.14 1.78 ( 0.11 ) 21.4 ( 0.41 ) 1.39 ( 0.1 ) 25.01 0.81 1.78 21.40 1.39
100 500 0.3 5.00 0.26 0.53 ( 0.02 ) 16.81 ( 0.77 )0.02 ( 0.01 ) 21.79 0.7 0.53 16.80 0.02
500 500 0.3 1.00 0.55 0.29 ( 0 ) 5.89 ( 0.51 ) 0 ( 0 ) 10.89 0.36 0.29 5.89 0.00
1000 500 0.3 0.50 0.69 0.27 ( 0 ) 3.68 ( 0.32 ) 0 ( 0 ) 8.68 0.25 0.27 3.68 0.00
50 1000 0.3 20.00 0.11 2.21 ( 0.15 ) 25.14 ( 0.35 )1.87 ( 0.1 ) 28.27 0.85 2.21 25.10 1.87
100 1000 0.3 10.00 0.22 0.61 ( 0.03 ) 21.11 ( 0.75 )0.02 ( 0.01 ) 26.09 0.75 0.61 21.10 0.02
.......................................
500 50 0.7 0.10 0.60 0.27 ( 0 ) 4.38 ( 0.21 ) 0 ( 0 ) 9.38 0.33 0.27 4.38 0.00
1000 50 0.7 0.05 0.74 0.27 ( 0 ) 2.84 ( 0.14 ) 0 ( 0 ) 7.84 0.21 0.27 2.84 0.00
50 100 0.7 2.00 0.23 0.8 ( 0.04 ) 11.57 ( 0.53 )1.26 ( 0.1 ) 15.31 0.66 0.80 11.50 1.26
100 100 0.7 1.00 0.31 0.39 ( 0.01 ) 11.68 ( 0.51 )0.1 ( 0.04 ) 16.58 0.61 0.39 11.60 0.10
500 100 0.7 0.20 0.49 0.28 ( 0 ) 6.56 ( 0.32 ) 0 ( 0 ) 11.56 0.44 0.28 6.56 0.00
1000 100 0.7 0.10 0.63 0.27 ( 0 ) 4.24 ( 0.26 ) 0 ( 0 ) 9.24 0.3 0.27 4.24 0.00
50 500 0.7 10.00 0.12 1.37 ( 0.08 ) 19.8 ( 0.33 ) 2.78 ( 0.08 ) 22.02 0.85 1.37 19.80 2.78
100 500 0.7 5.00 0.19 0.62 ( 0.03 ) 18.58 ( 0.85 )0.88 ( 0.08 ) 22.70 0.75 0.62 18.50 0.88
500 500 0.7 1.00 0.36 0.3 ( 0 ) 11.31 ( 0.6 ) 0 ( 0 ) 16.31 0.58 0.30 11.30 0.00
1000 500 0.7 0.50 0.46 0.27 ( 0 ) 7.93 ( 0.49 ) 0 ( 0 ) 12.93 0.47 0.27 7.93 0.00
50 1000 0.7 20.00 0.09 1.5 ( 0.08 ) 22.99 ( 0.35 )3.2 ( 0.09 ) 24.79 0.88 1.50 22.90 3.20
100 1000 0.7 10.00 0.14 0.77 ( 0.04 ) 22.43 ( 0.68 )1.45 ( 0.1 ) 25.98 0.82 0.77 22.40 1.45
500 1000 0.7 2.00 0.30 0.31 ( 0 ) 14.7 ( 0.84 ) 0 ( 0 ) 19.70 0.65 0.31 14.70 0.00
1000 1000 0.7 1.00 0.41 0.28 ( 0 ) 9.63 ( 0.54 ) 0 ( 0 ) 14.63 0.53 0.28 9.63 0.00
50 50 0.9 1.00 0.31 0.55 ( 0.03 ) 5.65 ( 0.29 ) 2.17 ( 0.13 ) 8.48 0.51 0.55 5.65 2.17
100 50 0.9 0.50 0.38 0.38 ( 0.02 ) 5.85 ( 0.3 ) 1.03 ( 0.11 ) 9.82 0.45 0.38 5.85 1.03
500 50 0.9 0.10 0.61 0.28 ( 0 ) 4.34 ( 0.19 ) 0.01 ( 0.01 ) 9.33 0.33 0.28 4.34 0.01
1000 50 0.9 0.05 0.76 0.27 ( 0 ) 2.71 ( 0.12 ) 0 ( 0 ) 7.71 0.2 0.27 2.71 0.00
50 100 0.9 2.00 0.26 0.6 ( 0.03 ) 7.26 ( 0.35 ) 2.69 ( 0.1 ) 9.57 0.62 0.60 7.26 2.69
100 100 0.9 1.00 0.31 0.44 ( 0.01 ) 7.79 ( 0.39 ) 1.51 ( 0.11 ) 11.28 0.57 0.44 7.79 1.51
500 100 0.9 0.20 0.51 0.29 ( 0 ) 6.45 ( 0.27 ) 0 ( 0 ) 11.45 0.45 0.29 6.45 0.00
1000 100 0.9 0.10 0.61 0.27 ( 0 ) 4.72 ( 0.21 ) 0 ( 0 ) 9.72 0.35 0.27 4.72 0.00
50 500 0.9 10.00 0.13 0.81 ( 0.04 ) 13.78 ( 0.36 )3.54 ( 0.08 ) 15.24 0.83 0.81 13.70 3.54
100 500 0.9 5.00 0.18 0.54 ( 0.02 ) 13.78 ( 0.72 )2.58 ( 0.08 ) 16.20 0.76 0.54 13.70 2.58
500 500 0.9 1.00 0.25 0.3 ( 0 ) 18.18 ( 0.69 )0.03 ( 0.02 ) 23.15 0.72 0.30 18.10 0.03
1000 500 0.9 0.50 0.33 0.28 ( 0 ) 12.68 ( 0.57 )0 ( 0 ) 17.68 0.63 0.28 12.60 0.00
50 1000 0.9 20.00 0.08 0.9 ( 0.05 ) 18.15 ( 0.34 )3.92 ( 0.08 ) 19.23 0.89 0.90 18.10 3.92
100 1000 0.9 10.00 0.16 0.59 ( 0.02 ) 15.99 ( 0.66 )2.88 ( 0.06 ) 18.11 0.81 0.59 15.90 2.88
500 1000 0.9 2.00 0.20 0.31 ( 0 ) 24.62 ( 1.01 )0.05 ( 0.02 ) 29.57 0.77 0.31 24.60 0.05
1000 1000 0.9 1.00 0.25 0.28 ( 0 ) 18.51 ( 0.86 )0 ( 0 ) 23.51 0.71 0.28 18.50 0.00
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0.1 & 1.00 & 0.36 & 0.62 ( 0.04 ) & 8.59 ( 0.46 ) & 0.02 ( 0.01 ) & 13.57 & 0.51 & 0.62 & 8.59 & 0.02 \\\\\n", + "\t 100 & 50 & 0.1 & 0.50 & 0.47 & 0.37 ( 0.01 ) & 6.3 ( 0.43 ) & 0 ( 0 ) & 11.30 & 0.4 & 0.37 & 6.30 & 0.00 \\\\\n", + "\t 500 & 50 & 0.1 & 0.10 & 0.73 & 0.28 ( 0 ) & 2.88 ( 0.21 ) & 0 ( 0 ) & 7.88 & 0.2 & 0.28 & 2.88 & 0.00 \\\\\n", + "\t 1000 & 50 & 0.1 & 0.05 & 0.89 & 0.27 ( 0 ) & 1.66 ( 0.11 ) & 0 ( 0 ) & 6.66 & 0.08 & 0.27 & 1.66 & 0.00 \\\\\n", + "\t 50 & 100 & 0.1 & 2.00 & 0.32 & 0.67 ( 0.05 ) & 11.84 ( 0.4 ) & 0 ( 0 ) & 16.84 & 0.62 & 0.67 & 11.80 & 0.00 \\\\\n", + "\t 100 & 100 & 0.1 & 1.00 & 0.44 & 0.4 ( 0.01 ) & 7.71 ( 0.56 ) & 0 ( 0 ) & 12.71 & 0.46 & 0.40 & 7.71 & 0.00 \\\\\n", + "\t 500 & 100 & 0.1 & 0.20 & 0.70 & 0.27 ( 0 ) & 3.35 ( 0.22 ) & 0 ( 0 ) & 8.35 & 0.23 & 0.27 & 3.35 & 0.00 \\\\\n", + "\t 1000 & 100 & 0.1 & 0.10 & 0.81 & 0.27 ( 0 ) & 2.29 ( 0.23 ) & 0 ( 0 ) & 7.29 & 0.13 & 0.27 & 2.29 & 0.00 \\\\\n", + "\t 50 & 500 & 0.1 & 10.00 & 0.18 & 1.61 ( 0.1 ) & 20.85 ( 0.38 ) & 0.69 ( 0.08 ) & 25.16 & 0.78 & 1.61 & 20.80 & 0.69 \\\\\n", + "\t 100 & 500 & 0.1 & 5.00 & 0.30 & 0.53 ( 0.02 ) & 14.69 ( 0.7 ) & 0 ( 0 ) & 19.69 & 0.66 & 0.53 & 14.60 & 0.00 \\\\\n", + "\t 500 & 500 & 0.1 & 1.00 & 0.55 & 0.28 ( 0 ) & 5.86 ( 0.51 ) & 0 ( 0 ) & 10.86 & 0.36 & 0.28 & 5.86 & 0.00 \\\\\n", + "\t 1000 & 500 & 0.1 & 0.50 & 0.78 & 0.28 ( 0 ) & 2.69 ( 0.21 ) & 0 ( 0 ) & 7.69 & 0.17 & 0.28 & 2.69 & 0.00 \\\\\n", + "\t 50 & 1000 & 0.1 & 20.00 & 0.13 & 2.23 ( 0.14 ) & 24.37 ( 0.39 ) & 1.36 ( 0.1 ) & 28.01 & 0.83 & 2.23 & 24.30 & 1.36 \\\\\n", + "\t 100 & 1000 & 0.1 & 10.00 & 0.25 & 0.57 ( 0.03 ) & 18.79 ( 0.7 ) & 0 ( 0 ) & 23.79 & 0.73 & 0.57 & 18.70 & 0.00 \\\\\n", + "\t 500 & 1000 & 0.1 & 2.00 & 0.49 & 0.28 ( 0 ) & 7.08 ( 0.53 ) & 0 ( 0 ) & 12.08 & 0.41 & 0.28 & 7.08 & 0.00 \\\\\n", + "\t 1000 & 1000 & 0.1 & 1.00 & 0.70 & 0.27 ( 0 ) & 3.59 ( 0.33 ) & 0 ( 0 ) & 8.59 & 0.23 & 0.27 & 3.59 & 0.00 \\\\\n", + "\t 50 & 50 & 0.3 & 1.00 & 0.35 & 0.57 ( 0.03 ) & 8.86 ( 0.42 ) & 0.05 ( 0.02 ) & 13.81 & 0.53 & 0.57 & 8.86 & 0.05 \\\\\n", + "\t 100 & 50 & 0.3 & 0.50 & 0.47 & 0.36 ( 0.01 ) & 6.18 ( 0.36 ) & 0 ( 0 ) & 11.18 & 0.41 & 0.36 & 6.18 & 0.00 \\\\\n", + "\t 500 & 50 & 0.3 & 0.10 & 0.70 & 0.28 ( 0 ) & 3.14 ( 0.21 ) & 0 ( 0 ) & 8.14 & 0.22 & 0.28 & 3.14 & 0.00 \\\\\n", + "\t 1000 & 50 & 0.3 & 0.05 & 0.86 & 0.27 ( 0 ) & 1.86 ( 0.11 ) & 0 ( 0 ) & 6.86 & 0.11 & 0.27 & 1.86 & 0.00 \\\\\n", + "\t 50 & 100 & 0.3 & 2.00 & 0.31 & 0.76 ( 0.04 ) & 11.12 ( 0.37 ) & 0.17 ( 0.04 ) & 15.95 & 0.62 & 0.76 & 11.10 & 0.17 \\\\\n", + "\t 100 & 100 & 0.3 & 1.00 & 0.38 & 0.41 ( 0.01 ) & 9.43 ( 0.53 ) & 0 ( 0 ) & 14.43 & 0.54 & 0.41 & 9.43 & 0.00 \\\\\n", + "\t 500 & 100 & 0.3 & 0.20 & 0.63 & 0.27 ( 0 ) & 4.16 ( 0.27 ) & 0 ( 0 ) & 9.16 & 0.29 & 0.27 & 4.16 & 0.00 \\\\\n", + "\t 1000 & 100 & 0.3 & 0.10 & 0.80 & 0.27 ( 0 ) & 2.36 ( 0.17 ) & 0 ( 0 ) & 7.36 & 0.15 & 0.27 & 2.36 & 0.00 \\\\\n", + "\t 50 & 500 & 0.3 & 10.00 & 0.14 & 1.78 ( 0.11 ) & 21.4 ( 0.41 ) & 1.39 ( 0.1 ) & 25.01 & 0.81 & 1.78 & 21.40 & 1.39 \\\\\n", + "\t 100 & 500 & 0.3 & 5.00 & 0.26 & 0.53 ( 0.02 ) & 16.81 ( 0.77 ) & 0.02 ( 0.01 ) & 21.79 & 0.7 & 0.53 & 16.80 & 0.02 \\\\\n", + "\t 500 & 500 & 0.3 & 1.00 & 0.55 & 0.29 ( 0 ) & 5.89 ( 0.51 ) & 0 ( 0 ) & 10.89 & 0.36 & 0.29 & 5.89 & 0.00 \\\\\n", + "\t 1000 & 500 & 0.3 & 0.50 & 0.69 & 0.27 ( 0 ) & 3.68 ( 0.32 ) & 0 ( 0 ) & 8.68 & 0.25 & 0.27 & 3.68 & 0.00 \\\\\n", + "\t 50 & 1000 & 0.3 & 20.00 & 0.11 & 2.21 ( 0.15 ) & 25.14 ( 0.35 ) & 1.87 ( 0.1 ) & 28.27 & 0.85 & 2.21 & 25.10 & 1.87 \\\\\n", + "\t 100 & 1000 & 0.3 & 10.00 & 0.22 & 0.61 ( 0.03 ) & 21.11 ( 0.75 ) & 0.02 ( 0.01 ) & 26.09 & 0.75 & 0.61 & 21.10 & 0.02 \\\\\n", + "\t ... & ... & ... & ... & ... & ... & ... & ... & ... & ... & ... & ... & ...\\\\\n", + "\t 500 & 50 & 0.7 & 0.10 & 0.60 & 0.27 ( 0 ) & 4.38 ( 0.21 ) & 0 ( 0 ) & 9.38 & 0.33 & 0.27 & 4.38 & 0.00 \\\\\n", + "\t 1000 & 50 & 0.7 & 0.05 & 0.74 & 0.27 ( 0 ) & 2.84 ( 0.14 ) & 0 ( 0 ) & 7.84 & 0.21 & 0.27 & 2.84 & 0.00 \\\\\n", + "\t 50 & 100 & 0.7 & 2.00 & 0.23 & 0.8 ( 0.04 ) & 11.57 ( 0.53 ) & 1.26 ( 0.1 ) & 15.31 & 0.66 & 0.80 & 11.50 & 1.26 \\\\\n", + "\t 100 & 100 & 0.7 & 1.00 & 0.31 & 0.39 ( 0.01 ) & 11.68 ( 0.51 ) & 0.1 ( 0.04 ) & 16.58 & 0.61 & 0.39 & 11.60 & 0.10 \\\\\n", + "\t 500 & 100 & 0.7 & 0.20 & 0.49 & 0.28 ( 0 ) & 6.56 ( 0.32 ) & 0 ( 0 ) & 11.56 & 0.44 & 0.28 & 6.56 & 0.00 \\\\\n", + "\t 1000 & 100 & 0.7 & 0.10 & 0.63 & 0.27 ( 0 ) & 4.24 ( 0.26 ) & 0 ( 0 ) & 9.24 & 0.3 & 0.27 & 4.24 & 0.00 \\\\\n", + "\t 50 & 500 & 0.7 & 10.00 & 0.12 & 1.37 ( 0.08 ) & 19.8 ( 0.33 ) & 2.78 ( 0.08 ) & 22.02 & 0.85 & 1.37 & 19.80 & 2.78 \\\\\n", + "\t 100 & 500 & 0.7 & 5.00 & 0.19 & 0.62 ( 0.03 ) & 18.58 ( 0.85 ) & 0.88 ( 0.08 ) & 22.70 & 0.75 & 0.62 & 18.50 & 0.88 \\\\\n", + "\t 500 & 500 & 0.7 & 1.00 & 0.36 & 0.3 ( 0 ) & 11.31 ( 0.6 ) & 0 ( 0 ) & 16.31 & 0.58 & 0.30 & 11.30 & 0.00 \\\\\n", + "\t 1000 & 500 & 0.7 & 0.50 & 0.46 & 0.27 ( 0 ) & 7.93 ( 0.49 ) & 0 ( 0 ) & 12.93 & 0.47 & 0.27 & 7.93 & 0.00 \\\\\n", + "\t 50 & 1000 & 0.7 & 20.00 & 0.09 & 1.5 ( 0.08 ) & 22.99 ( 0.35 ) & 3.2 ( 0.09 ) & 24.79 & 0.88 & 1.50 & 22.90 & 3.20 \\\\\n", + "\t 100 & 1000 & 0.7 & 10.00 & 0.14 & 0.77 ( 0.04 ) & 22.43 ( 0.68 ) & 1.45 ( 0.1 ) & 25.98 & 0.82 & 0.77 & 22.40 & 1.45 \\\\\n", + "\t 500 & 1000 & 0.7 & 2.00 & 0.30 & 0.31 ( 0 ) & 14.7 ( 0.84 ) & 0 ( 0 ) & 19.70 & 0.65 & 0.31 & 14.70 & 0.00 \\\\\n", + "\t 1000 & 1000 & 0.7 & 1.00 & 0.41 & 0.28 ( 0 ) & 9.63 ( 0.54 ) & 0 ( 0 ) & 14.63 & 0.53 & 0.28 & 9.63 & 0.00 \\\\\n", + "\t 50 & 50 & 0.9 & 1.00 & 0.31 & 0.55 ( 0.03 ) & 5.65 ( 0.29 ) & 2.17 ( 0.13 ) & 8.48 & 0.51 & 0.55 & 5.65 & 2.17 \\\\\n", + "\t 100 & 50 & 0.9 & 0.50 & 0.38 & 0.38 ( 0.02 ) & 5.85 ( 0.3 ) & 1.03 ( 0.11 ) & 9.82 & 0.45 & 0.38 & 5.85 & 1.03 \\\\\n", + "\t 500 & 50 & 0.9 & 0.10 & 0.61 & 0.28 ( 0 ) & 4.34 ( 0.19 ) & 0.01 ( 0.01 ) & 9.33 & 0.33 & 0.28 & 4.34 & 0.01 \\\\\n", + "\t 1000 & 50 & 0.9 & 0.05 & 0.76 & 0.27 ( 0 ) & 2.71 ( 0.12 ) & 0 ( 0 ) & 7.71 & 0.2 & 0.27 & 2.71 & 0.00 \\\\\n", + "\t 50 & 100 & 0.9 & 2.00 & 0.26 & 0.6 ( 0.03 ) & 7.26 ( 0.35 ) & 2.69 ( 0.1 ) & 9.57 & 0.62 & 0.60 & 7.26 & 2.69 \\\\\n", + "\t 100 & 100 & 0.9 & 1.00 & 0.31 & 0.44 ( 0.01 ) & 7.79 ( 0.39 ) & 1.51 ( 0.11 ) & 11.28 & 0.57 & 0.44 & 7.79 & 1.51 \\\\\n", + "\t 500 & 100 & 0.9 & 0.20 & 0.51 & 0.29 ( 0 ) & 6.45 ( 0.27 ) & 0 ( 0 ) & 11.45 & 0.45 & 0.29 & 6.45 & 0.00 \\\\\n", + "\t 1000 & 100 & 0.9 & 0.10 & 0.61 & 0.27 ( 0 ) & 4.72 ( 0.21 ) & 0 ( 0 ) & 9.72 & 0.35 & 0.27 & 4.72 & 0.00 \\\\\n", + "\t 50 & 500 & 0.9 & 10.00 & 0.13 & 0.81 ( 0.04 ) & 13.78 ( 0.36 ) & 3.54 ( 0.08 ) & 15.24 & 0.83 & 0.81 & 13.70 & 3.54 \\\\\n", + "\t 100 & 500 & 0.9 & 5.00 & 0.18 & 0.54 ( 0.02 ) & 13.78 ( 0.72 ) & 2.58 ( 0.08 ) & 16.20 & 0.76 & 0.54 & 13.70 & 2.58 \\\\\n", + "\t 500 & 500 & 0.9 & 1.00 & 0.25 & 0.3 ( 0 ) & 18.18 ( 0.69 ) & 0.03 ( 0.02 ) & 23.15 & 0.72 & 0.30 & 18.10 & 0.03 \\\\\n", + "\t 1000 & 500 & 0.9 & 0.50 & 0.33 & 0.28 ( 0 ) & 12.68 ( 0.57 ) & 0 ( 0 ) & 17.68 & 0.63 & 0.28 & 12.60 & 0.00 \\\\\n", + "\t 50 & 1000 & 0.9 & 20.00 & 0.08 & 0.9 ( 0.05 ) & 18.15 ( 0.34 ) & 3.92 ( 0.08 ) & 19.23 & 0.89 & 0.90 & 18.10 & 3.92 \\\\\n", + "\t 100 & 1000 & 0.9 & 10.00 & 0.16 & 0.59 ( 0.02 ) & 15.99 ( 0.66 ) & 2.88 ( 0.06 ) & 18.11 & 0.81 & 0.59 & 15.90 & 2.88 \\\\\n", + "\t 500 & 1000 & 0.9 & 2.00 & 0.20 & 0.31 ( 0 ) & 24.62 ( 1.01 ) & 0.05 ( 0.02 ) & 29.57 & 0.77 & 0.31 & 24.60 & 0.05 \\\\\n", + "\t 1000 & 1000 & 0.9 & 1.00 & 0.25 & 0.28 ( 0 ) & 18.51 ( 0.86 ) & 0 ( 0 ) & 23.51 & 0.71 & 0.28 & 18.50 & 0.00 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0.1 | 1.00 | 0.36 | 0.62 ( 0.04 ) | 8.59 ( 0.46 ) | 0.02 ( 0.01 ) | 13.57 | 0.51 | 0.62 | 8.59 | 0.02 |\n", + "| 100 | 50 | 0.1 | 0.50 | 0.47 | 0.37 ( 0.01 ) | 6.3 ( 0.43 ) | 0 ( 0 ) | 11.30 | 0.4 | 0.37 | 6.30 | 0.00 |\n", + "| 500 | 50 | 0.1 | 0.10 | 0.73 | 0.28 ( 0 ) | 2.88 ( 0.21 ) | 0 ( 0 ) | 7.88 | 0.2 | 0.28 | 2.88 | 0.00 |\n", + "| 1000 | 50 | 0.1 | 0.05 | 0.89 | 0.27 ( 0 ) | 1.66 ( 0.11 ) | 0 ( 0 ) | 6.66 | 0.08 | 0.27 | 1.66 | 0.00 |\n", + "| 50 | 100 | 0.1 | 2.00 | 0.32 | 0.67 ( 0.05 ) | 11.84 ( 0.4 ) | 0 ( 0 ) | 16.84 | 0.62 | 0.67 | 11.80 | 0.00 |\n", + "| 100 | 100 | 0.1 | 1.00 | 0.44 | 0.4 ( 0.01 ) | 7.71 ( 0.56 ) | 0 ( 0 ) | 12.71 | 0.46 | 0.40 | 7.71 | 0.00 |\n", + "| 500 | 100 | 0.1 | 0.20 | 0.70 | 0.27 ( 0 ) | 3.35 ( 0.22 ) | 0 ( 0 ) | 8.35 | 0.23 | 0.27 | 3.35 | 0.00 |\n", + "| 1000 | 100 | 0.1 | 0.10 | 0.81 | 0.27 ( 0 ) | 2.29 ( 0.23 ) | 0 ( 0 ) | 7.29 | 0.13 | 0.27 | 2.29 | 0.00 |\n", + "| 50 | 500 | 0.1 | 10.00 | 0.18 | 1.61 ( 0.1 ) | 20.85 ( 0.38 ) | 0.69 ( 0.08 ) | 25.16 | 0.78 | 1.61 | 20.80 | 0.69 |\n", + "| 100 | 500 | 0.1 | 5.00 | 0.30 | 0.53 ( 0.02 ) | 14.69 ( 0.7 ) | 0 ( 0 ) | 19.69 | 0.66 | 0.53 | 14.60 | 0.00 |\n", + "| 500 | 500 | 0.1 | 1.00 | 0.55 | 0.28 ( 0 ) | 5.86 ( 0.51 ) | 0 ( 0 ) | 10.86 | 0.36 | 0.28 | 5.86 | 0.00 |\n", + "| 1000 | 500 | 0.1 | 0.50 | 0.78 | 0.28 ( 0 ) | 2.69 ( 0.21 ) | 0 ( 0 ) | 7.69 | 0.17 | 0.28 | 2.69 | 0.00 |\n", + "| 50 | 1000 | 0.1 | 20.00 | 0.13 | 2.23 ( 0.14 ) | 24.37 ( 0.39 ) | 1.36 ( 0.1 ) | 28.01 | 0.83 | 2.23 | 24.30 | 1.36 |\n", + "| 100 | 1000 | 0.1 | 10.00 | 0.25 | 0.57 ( 0.03 ) | 18.79 ( 0.7 ) | 0 ( 0 ) | 23.79 | 0.73 | 0.57 | 18.70 | 0.00 |\n", + "| 500 | 1000 | 0.1 | 2.00 | 0.49 | 0.28 ( 0 ) | 7.08 ( 0.53 ) | 0 ( 0 ) | 12.08 | 0.41 | 0.28 | 7.08 | 0.00 |\n", + "| 1000 | 1000 | 0.1 | 1.00 | 0.70 | 0.27 ( 0 ) | 3.59 ( 0.33 ) | 0 ( 0 ) | 8.59 | 0.23 | 0.27 | 3.59 | 0.00 |\n", + "| 50 | 50 | 0.3 | 1.00 | 0.35 | 0.57 ( 0.03 ) | 8.86 ( 0.42 ) | 0.05 ( 0.02 ) | 13.81 | 0.53 | 0.57 | 8.86 | 0.05 |\n", + "| 100 | 50 | 0.3 | 0.50 | 0.47 | 0.36 ( 0.01 ) | 6.18 ( 0.36 ) | 0 ( 0 ) | 11.18 | 0.41 | 0.36 | 6.18 | 0.00 |\n", + "| 500 | 50 | 0.3 | 0.10 | 0.70 | 0.28 ( 0 ) | 3.14 ( 0.21 ) | 0 ( 0 ) | 8.14 | 0.22 | 0.28 | 3.14 | 0.00 |\n", + "| 1000 | 50 | 0.3 | 0.05 | 0.86 | 0.27 ( 0 ) | 1.86 ( 0.11 ) | 0 ( 0 ) | 6.86 | 0.11 | 0.27 | 1.86 | 0.00 |\n", + "| 50 | 100 | 0.3 | 2.00 | 0.31 | 0.76 ( 0.04 ) | 11.12 ( 0.37 ) | 0.17 ( 0.04 ) | 15.95 | 0.62 | 0.76 | 11.10 | 0.17 |\n", + "| 100 | 100 | 0.3 | 1.00 | 0.38 | 0.41 ( 0.01 ) | 9.43 ( 0.53 ) | 0 ( 0 ) | 14.43 | 0.54 | 0.41 | 9.43 | 0.00 |\n", + "| 500 | 100 | 0.3 | 0.20 | 0.63 | 0.27 ( 0 ) | 4.16 ( 0.27 ) | 0 ( 0 ) | 9.16 | 0.29 | 0.27 | 4.16 | 0.00 |\n", + "| 1000 | 100 | 0.3 | 0.10 | 0.80 | 0.27 ( 0 ) | 2.36 ( 0.17 ) | 0 ( 0 ) | 7.36 | 0.15 | 0.27 | 2.36 | 0.00 |\n", + "| 50 | 500 | 0.3 | 10.00 | 0.14 | 1.78 ( 0.11 ) | 21.4 ( 0.41 ) | 1.39 ( 0.1 ) | 25.01 | 0.81 | 1.78 | 21.40 | 1.39 |\n", + "| 100 | 500 | 0.3 | 5.00 | 0.26 | 0.53 ( 0.02 ) | 16.81 ( 0.77 ) | 0.02 ( 0.01 ) | 21.79 | 0.7 | 0.53 | 16.80 | 0.02 |\n", + "| 500 | 500 | 0.3 | 1.00 | 0.55 | 0.29 ( 0 ) | 5.89 ( 0.51 ) | 0 ( 0 ) | 10.89 | 0.36 | 0.29 | 5.89 | 0.00 |\n", + "| 1000 | 500 | 0.3 | 0.50 | 0.69 | 0.27 ( 0 ) | 3.68 ( 0.32 ) | 0 ( 0 ) | 8.68 | 0.25 | 0.27 | 3.68 | 0.00 |\n", + "| 50 | 1000 | 0.3 | 20.00 | 0.11 | 2.21 ( 0.15 ) | 25.14 ( 0.35 ) | 1.87 ( 0.1 ) | 28.27 | 0.85 | 2.21 | 25.10 | 1.87 |\n", + "| 100 | 1000 | 0.3 | 10.00 | 0.22 | 0.61 ( 0.03 ) | 21.11 ( 0.75 ) | 0.02 ( 0.01 ) | 26.09 | 0.75 | 0.61 | 21.10 | 0.02 |\n", + "| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |\n", + "| 500 | 50 | 0.7 | 0.10 | 0.60 | 0.27 ( 0 ) | 4.38 ( 0.21 ) | 0 ( 0 ) | 9.38 | 0.33 | 0.27 | 4.38 | 0.00 |\n", + "| 1000 | 50 | 0.7 | 0.05 | 0.74 | 0.27 ( 0 ) | 2.84 ( 0.14 ) | 0 ( 0 ) | 7.84 | 0.21 | 0.27 | 2.84 | 0.00 |\n", + "| 50 | 100 | 0.7 | 2.00 | 0.23 | 0.8 ( 0.04 ) | 11.57 ( 0.53 ) | 1.26 ( 0.1 ) | 15.31 | 0.66 | 0.80 | 11.50 | 1.26 |\n", + "| 100 | 100 | 0.7 | 1.00 | 0.31 | 0.39 ( 0.01 ) | 11.68 ( 0.51 ) | 0.1 ( 0.04 ) | 16.58 | 0.61 | 0.39 | 11.60 | 0.10 |\n", + "| 500 | 100 | 0.7 | 0.20 | 0.49 | 0.28 ( 0 ) | 6.56 ( 0.32 ) | 0 ( 0 ) | 11.56 | 0.44 | 0.28 | 6.56 | 0.00 |\n", + "| 1000 | 100 | 0.7 | 0.10 | 0.63 | 0.27 ( 0 ) | 4.24 ( 0.26 ) | 0 ( 0 ) | 9.24 | 0.3 | 0.27 | 4.24 | 0.00 |\n", + "| 50 | 500 | 0.7 | 10.00 | 0.12 | 1.37 ( 0.08 ) | 19.8 ( 0.33 ) | 2.78 ( 0.08 ) | 22.02 | 0.85 | 1.37 | 19.80 | 2.78 |\n", + "| 100 | 500 | 0.7 | 5.00 | 0.19 | 0.62 ( 0.03 ) | 18.58 ( 0.85 ) | 0.88 ( 0.08 ) | 22.70 | 0.75 | 0.62 | 18.50 | 0.88 |\n", + "| 500 | 500 | 0.7 | 1.00 | 0.36 | 0.3 ( 0 ) | 11.31 ( 0.6 ) | 0 ( 0 ) | 16.31 | 0.58 | 0.30 | 11.30 | 0.00 |\n", + "| 1000 | 500 | 0.7 | 0.50 | 0.46 | 0.27 ( 0 ) | 7.93 ( 0.49 ) | 0 ( 0 ) | 12.93 | 0.47 | 0.27 | 7.93 | 0.00 |\n", + "| 50 | 1000 | 0.7 | 20.00 | 0.09 | 1.5 ( 0.08 ) | 22.99 ( 0.35 ) | 3.2 ( 0.09 ) | 24.79 | 0.88 | 1.50 | 22.90 | 3.20 |\n", + "| 100 | 1000 | 0.7 | 10.00 | 0.14 | 0.77 ( 0.04 ) | 22.43 ( 0.68 ) | 1.45 ( 0.1 ) | 25.98 | 0.82 | 0.77 | 22.40 | 1.45 |\n", + "| 500 | 1000 | 0.7 | 2.00 | 0.30 | 0.31 ( 0 ) | 14.7 ( 0.84 ) | 0 ( 0 ) | 19.70 | 0.65 | 0.31 | 14.70 | 0.00 |\n", + "| 1000 | 1000 | 0.7 | 1.00 | 0.41 | 0.28 ( 0 ) | 9.63 ( 0.54 ) | 0 ( 0 ) | 14.63 | 0.53 | 0.28 | 9.63 | 0.00 |\n", + "| 50 | 50 | 0.9 | 1.00 | 0.31 | 0.55 ( 0.03 ) | 5.65 ( 0.29 ) | 2.17 ( 0.13 ) | 8.48 | 0.51 | 0.55 | 5.65 | 2.17 |\n", + "| 100 | 50 | 0.9 | 0.50 | 0.38 | 0.38 ( 0.02 ) | 5.85 ( 0.3 ) | 1.03 ( 0.11 ) | 9.82 | 0.45 | 0.38 | 5.85 | 1.03 |\n", + "| 500 | 50 | 0.9 | 0.10 | 0.61 | 0.28 ( 0 ) | 4.34 ( 0.19 ) | 0.01 ( 0.01 ) | 9.33 | 0.33 | 0.28 | 4.34 | 0.01 |\n", + "| 1000 | 50 | 0.9 | 0.05 | 0.76 | 0.27 ( 0 ) | 2.71 ( 0.12 ) | 0 ( 0 ) | 7.71 | 0.2 | 0.27 | 2.71 | 0.00 |\n", + "| 50 | 100 | 0.9 | 2.00 | 0.26 | 0.6 ( 0.03 ) | 7.26 ( 0.35 ) | 2.69 ( 0.1 ) | 9.57 | 0.62 | 0.60 | 7.26 | 2.69 |\n", + "| 100 | 100 | 0.9 | 1.00 | 0.31 | 0.44 ( 0.01 ) | 7.79 ( 0.39 ) | 1.51 ( 0.11 ) | 11.28 | 0.57 | 0.44 | 7.79 | 1.51 |\n", + "| 500 | 100 | 0.9 | 0.20 | 0.51 | 0.29 ( 0 ) | 6.45 ( 0.27 ) | 0 ( 0 ) | 11.45 | 0.45 | 0.29 | 6.45 | 0.00 |\n", + "| 1000 | 100 | 0.9 | 0.10 | 0.61 | 0.27 ( 0 ) | 4.72 ( 0.21 ) | 0 ( 0 ) | 9.72 | 0.35 | 0.27 | 4.72 | 0.00 |\n", + "| 50 | 500 | 0.9 | 10.00 | 0.13 | 0.81 ( 0.04 ) | 13.78 ( 0.36 ) | 3.54 ( 0.08 ) | 15.24 | 0.83 | 0.81 | 13.70 | 3.54 |\n", + "| 100 | 500 | 0.9 | 5.00 | 0.18 | 0.54 ( 0.02 ) | 13.78 ( 0.72 ) | 2.58 ( 0.08 ) | 16.20 | 0.76 | 0.54 | 13.70 | 2.58 |\n", + "| 500 | 500 | 0.9 | 1.00 | 0.25 | 0.3 ( 0 ) | 18.18 ( 0.69 ) | 0.03 ( 0.02 ) | 23.15 | 0.72 | 0.30 | 18.10 | 0.03 |\n", + "| 1000 | 500 | 0.9 | 0.50 | 0.33 | 0.28 ( 0 ) | 12.68 ( 0.57 ) | 0 ( 0 ) | 17.68 | 0.63 | 0.28 | 12.60 | 0.00 |\n", + "| 50 | 1000 | 0.9 | 20.00 | 0.08 | 0.9 ( 0.05 ) | 18.15 ( 0.34 ) | 3.92 ( 0.08 ) | 19.23 | 0.89 | 0.90 | 18.10 | 3.92 |\n", + "| 100 | 1000 | 0.9 | 10.00 | 0.16 | 0.59 ( 0.02 ) | 15.99 ( 0.66 ) | 2.88 ( 0.06 ) | 18.11 | 0.81 | 0.59 | 15.90 | 2.88 |\n", + "| 500 | 1000 | 0.9 | 2.00 | 0.20 | 0.31 ( 0 ) | 24.62 ( 1.01 ) | 0.05 ( 0.02 ) | 29.57 | 0.77 | 0.31 | 24.60 | 0.05 |\n", + "| 1000 | 1000 | 0.9 | 1.00 | 0.25 | 0.28 ( 0 ) | 18.51 ( 0.86 ) | 0 ( 0 ) | 23.51 | 0.71 | 0.28 | 18.50 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN \n", + "1 50 50 0.1 1.00 0.36 0.62 ( 0.04 ) 8.59 ( 0.46 ) 0.02 ( 0.01 )\n", + "2 100 50 0.1 0.50 0.47 0.37 ( 0.01 ) 6.3 ( 0.43 ) 0 ( 0 ) \n", + "3 500 50 0.1 0.10 0.73 0.28 ( 0 ) 2.88 ( 0.21 ) 0 ( 0 ) \n", + "4 1000 50 0.1 0.05 0.89 0.27 ( 0 ) 1.66 ( 0.11 ) 0 ( 0 ) \n", + "5 50 100 0.1 2.00 0.32 0.67 ( 0.05 ) 11.84 ( 0.4 ) 0 ( 0 ) \n", + "6 100 100 0.1 1.00 0.44 0.4 ( 0.01 ) 7.71 ( 0.56 ) 0 ( 0 ) \n", + "7 500 100 0.1 0.20 0.70 0.27 ( 0 ) 3.35 ( 0.22 ) 0 ( 0 ) \n", + "8 1000 100 0.1 0.10 0.81 0.27 ( 0 ) 2.29 ( 0.23 ) 0 ( 0 ) \n", + "9 50 500 0.1 10.00 0.18 1.61 ( 0.1 ) 20.85 ( 0.38 ) 0.69 ( 0.08 )\n", + "10 100 500 0.1 5.00 0.30 0.53 ( 0.02 ) 14.69 ( 0.7 ) 0 ( 0 ) \n", + "11 500 500 0.1 1.00 0.55 0.28 ( 0 ) 5.86 ( 0.51 ) 0 ( 0 ) \n", + "12 1000 500 0.1 0.50 0.78 0.28 ( 0 ) 2.69 ( 0.21 ) 0 ( 0 ) \n", + "13 50 1000 0.1 20.00 0.13 2.23 ( 0.14 ) 24.37 ( 0.39 ) 1.36 ( 0.1 ) \n", + "14 100 1000 0.1 10.00 0.25 0.57 ( 0.03 ) 18.79 ( 0.7 ) 0 ( 0 ) \n", + "15 500 1000 0.1 2.00 0.49 0.28 ( 0 ) 7.08 ( 0.53 ) 0 ( 0 ) \n", + "16 1000 1000 0.1 1.00 0.70 0.27 ( 0 ) 3.59 ( 0.33 ) 0 ( 0 ) \n", + "17 50 50 0.3 1.00 0.35 0.57 ( 0.03 ) 8.86 ( 0.42 ) 0.05 ( 0.02 )\n", + "18 100 50 0.3 0.50 0.47 0.36 ( 0.01 ) 6.18 ( 0.36 ) 0 ( 0 ) \n", + "19 500 50 0.3 0.10 0.70 0.28 ( 0 ) 3.14 ( 0.21 ) 0 ( 0 ) \n", + "20 1000 50 0.3 0.05 0.86 0.27 ( 0 ) 1.86 ( 0.11 ) 0 ( 0 ) \n", + "21 50 100 0.3 2.00 0.31 0.76 ( 0.04 ) 11.12 ( 0.37 ) 0.17 ( 0.04 )\n", + "22 100 100 0.3 1.00 0.38 0.41 ( 0.01 ) 9.43 ( 0.53 ) 0 ( 0 ) \n", + "23 500 100 0.3 0.20 0.63 0.27 ( 0 ) 4.16 ( 0.27 ) 0 ( 0 ) \n", + "24 1000 100 0.3 0.10 0.80 0.27 ( 0 ) 2.36 ( 0.17 ) 0 ( 0 ) \n", + "25 50 500 0.3 10.00 0.14 1.78 ( 0.11 ) 21.4 ( 0.41 ) 1.39 ( 0.1 ) \n", + "26 100 500 0.3 5.00 0.26 0.53 ( 0.02 ) 16.81 ( 0.77 ) 0.02 ( 0.01 )\n", + "27 500 500 0.3 1.00 0.55 0.29 ( 0 ) 5.89 ( 0.51 ) 0 ( 0 ) \n", + "28 1000 500 0.3 0.50 0.69 0.27 ( 0 ) 3.68 ( 0.32 ) 0 ( 0 ) \n", + "29 50 1000 0.3 20.00 0.11 2.21 ( 0.15 ) 25.14 ( 0.35 ) 1.87 ( 0.1 ) \n", + "30 100 1000 0.3 10.00 0.22 0.61 ( 0.03 ) 21.11 ( 0.75 ) 0.02 ( 0.01 )\n", + "... ... ... ... ... ... ... ... ... \n", + "51 500 50 0.7 0.10 0.60 0.27 ( 0 ) 4.38 ( 0.21 ) 0 ( 0 ) \n", + "52 1000 50 0.7 0.05 0.74 0.27 ( 0 ) 2.84 ( 0.14 ) 0 ( 0 ) \n", + "53 50 100 0.7 2.00 0.23 0.8 ( 0.04 ) 11.57 ( 0.53 ) 1.26 ( 0.1 ) \n", + "54 100 100 0.7 1.00 0.31 0.39 ( 0.01 ) 11.68 ( 0.51 ) 0.1 ( 0.04 ) \n", + "55 500 100 0.7 0.20 0.49 0.28 ( 0 ) 6.56 ( 0.32 ) 0 ( 0 ) \n", + "56 1000 100 0.7 0.10 0.63 0.27 ( 0 ) 4.24 ( 0.26 ) 0 ( 0 ) \n", + "57 50 500 0.7 10.00 0.12 1.37 ( 0.08 ) 19.8 ( 0.33 ) 2.78 ( 0.08 )\n", + "58 100 500 0.7 5.00 0.19 0.62 ( 0.03 ) 18.58 ( 0.85 ) 0.88 ( 0.08 )\n", + "59 500 500 0.7 1.00 0.36 0.3 ( 0 ) 11.31 ( 0.6 ) 0 ( 0 ) \n", + "60 1000 500 0.7 0.50 0.46 0.27 ( 0 ) 7.93 ( 0.49 ) 0 ( 0 ) \n", + "61 50 1000 0.7 20.00 0.09 1.5 ( 0.08 ) 22.99 ( 0.35 ) 3.2 ( 0.09 ) \n", + "62 100 1000 0.7 10.00 0.14 0.77 ( 0.04 ) 22.43 ( 0.68 ) 1.45 ( 0.1 ) \n", + "63 500 1000 0.7 2.00 0.30 0.31 ( 0 ) 14.7 ( 0.84 ) 0 ( 0 ) \n", + "64 1000 1000 0.7 1.00 0.41 0.28 ( 0 ) 9.63 ( 0.54 ) 0 ( 0 ) \n", + "65 50 50 0.9 1.00 0.31 0.55 ( 0.03 ) 5.65 ( 0.29 ) 2.17 ( 0.13 )\n", + "66 100 50 0.9 0.50 0.38 0.38 ( 0.02 ) 5.85 ( 0.3 ) 1.03 ( 0.11 )\n", + "67 500 50 0.9 0.10 0.61 0.28 ( 0 ) 4.34 ( 0.19 ) 0.01 ( 0.01 )\n", + "68 1000 50 0.9 0.05 0.76 0.27 ( 0 ) 2.71 ( 0.12 ) 0 ( 0 ) \n", + "69 50 100 0.9 2.00 0.26 0.6 ( 0.03 ) 7.26 ( 0.35 ) 2.69 ( 0.1 ) \n", + "70 100 100 0.9 1.00 0.31 0.44 ( 0.01 ) 7.79 ( 0.39 ) 1.51 ( 0.11 )\n", + "71 500 100 0.9 0.20 0.51 0.29 ( 0 ) 6.45 ( 0.27 ) 0 ( 0 ) \n", + "72 1000 100 0.9 0.10 0.61 0.27 ( 0 ) 4.72 ( 0.21 ) 0 ( 0 ) \n", + "73 50 500 0.9 10.00 0.13 0.81 ( 0.04 ) 13.78 ( 0.36 ) 3.54 ( 0.08 )\n", + "74 100 500 0.9 5.00 0.18 0.54 ( 0.02 ) 13.78 ( 0.72 ) 2.58 ( 0.08 )\n", + "75 500 500 0.9 1.00 0.25 0.3 ( 0 ) 18.18 ( 0.69 ) 0.03 ( 0.02 )\n", + "76 1000 500 0.9 0.50 0.33 0.28 ( 0 ) 12.68 ( 0.57 ) 0 ( 0 ) \n", + "77 50 1000 0.9 20.00 0.08 0.9 ( 0.05 ) 18.15 ( 0.34 ) 3.92 ( 0.08 )\n", + "78 100 1000 0.9 10.00 0.16 0.59 ( 0.02 ) 15.99 ( 0.66 ) 2.88 ( 0.06 )\n", + "79 500 1000 0.9 2.00 0.20 0.31 ( 0 ) 24.62 ( 1.01 ) 0.05 ( 0.02 )\n", + "80 1000 1000 0.9 1.00 0.25 0.28 ( 0 ) 18.51 ( 0.86 ) 0 ( 0 ) \n", + " num_select FDR MSE_mean FP_mean FN_mean\n", + "1 13.57 0.51 0.62 8.59 0.02 \n", + "2 11.30 0.4 0.37 6.30 0.00 \n", + "3 7.88 0.2 0.28 2.88 0.00 \n", + "4 6.66 0.08 0.27 1.66 0.00 \n", + "5 16.84 0.62 0.67 11.80 0.00 \n", + "6 12.71 0.46 0.40 7.71 0.00 \n", + "7 8.35 0.23 0.27 3.35 0.00 \n", + "8 7.29 0.13 0.27 2.29 0.00 \n", + "9 25.16 0.78 1.61 20.80 0.69 \n", + "10 19.69 0.66 0.53 14.60 0.00 \n", + "11 10.86 0.36 0.28 5.86 0.00 \n", + "12 7.69 0.17 0.28 2.69 0.00 \n", + "13 28.01 0.83 2.23 24.30 1.36 \n", + "14 23.79 0.73 0.57 18.70 0.00 \n", + "15 12.08 0.41 0.28 7.08 0.00 \n", + "16 8.59 0.23 0.27 3.59 0.00 \n", + "17 13.81 0.53 0.57 8.86 0.05 \n", + "18 11.18 0.41 0.36 6.18 0.00 \n", + "19 8.14 0.22 0.28 3.14 0.00 \n", + "20 6.86 0.11 0.27 1.86 0.00 \n", + "21 15.95 0.62 0.76 11.10 0.17 \n", + "22 14.43 0.54 0.41 9.43 0.00 \n", + "23 9.16 0.29 0.27 4.16 0.00 \n", + "24 7.36 0.15 0.27 2.36 0.00 \n", + "25 25.01 0.81 1.78 21.40 1.39 \n", + "26 21.79 0.7 0.53 16.80 0.02 \n", + "27 10.89 0.36 0.29 5.89 0.00 \n", + "28 8.68 0.25 0.27 3.68 0.00 \n", + "29 28.27 0.85 2.21 25.10 1.87 \n", + "30 26.09 0.75 0.61 21.10 0.02 \n", + "... ... ... ... ... ... \n", + "51 9.38 0.33 0.27 4.38 0.00 \n", + "52 7.84 0.21 0.27 2.84 0.00 \n", + "53 15.31 0.66 0.80 11.50 1.26 \n", + "54 16.58 0.61 0.39 11.60 0.10 \n", + "55 11.56 0.44 0.28 6.56 0.00 \n", + "56 9.24 0.3 0.27 4.24 0.00 \n", + "57 22.02 0.85 1.37 19.80 2.78 \n", + "58 22.70 0.75 0.62 18.50 0.88 \n", + "59 16.31 0.58 0.30 11.30 0.00 \n", + "60 12.93 0.47 0.27 7.93 0.00 \n", + "61 24.79 0.88 1.50 22.90 3.20 \n", + "62 25.98 0.82 0.77 22.40 1.45 \n", + "63 19.70 0.65 0.31 14.70 0.00 \n", + "64 14.63 0.53 0.28 9.63 0.00 \n", + "65 8.48 0.51 0.55 5.65 2.17 \n", + "66 9.82 0.45 0.38 5.85 1.03 \n", + "67 9.33 0.33 0.28 4.34 0.01 \n", + "68 7.71 0.2 0.27 2.71 0.00 \n", + "69 9.57 0.62 0.60 7.26 2.69 \n", + "70 11.28 0.57 0.44 7.79 1.51 \n", + "71 11.45 0.45 0.29 6.45 0.00 \n", + "72 9.72 0.35 0.27 4.72 0.00 \n", + "73 15.24 0.83 0.81 13.70 3.54 \n", + "74 16.20 0.76 0.54 13.70 2.58 \n", + "75 23.15 0.72 0.30 18.10 0.03 \n", + "76 17.68 0.63 0.28 12.60 0.00 \n", + "77 19.23 0.89 0.90 18.10 3.92 \n", + "78 18.11 0.81 0.59 15.90 2.88 \n", + "79 29.57 0.77 0.31 24.60 0.05 \n", + "80 23.51 0.71 0.28 18.50 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_toe\n", + "\n", + "## export\n", + "write.table(result.table_toe, '../results_summary_cts/sim_toe_lasso.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_cts/.ipynb_checkpoints/1.2_sim_toe_elnet_cts-checkpoint.ipynb b/simulations/notebooks_sim_cts/.ipynb_checkpoints/1.2_sim_toe_elnet_cts-checkpoint.ipynb new file mode 100755 index 0000000..445c6b6 --- /dev/null +++ b/simulations/notebooks_sim_cts/.ipynb_checkpoints/1.2_sim_toe_elnet_cts-checkpoint.ipynb @@ -0,0 +1,493 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize elastic net results on Toeplitz Simulation Scenarios for continuous outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'\n", + "\n", + "load(paste0(dir, '/toe_Elnet.RData'))" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "rou.list = seq(0.1, 0.9, 0.2)\n", + "\n", + "files = NULL\n", + "for (rou in rou.list){\n", + " for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_toeplitz_corr', rou, paste('P', p, 'N', n, sep='_'), '.RData', sep=''))\n", + " }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "avg_FDR = NULL\n", + "for (i in 1:length(files)){\n", + " sim_file = files[i]\n", + " load(sim_file, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_toe_elnet[[i]]$Stab.table\n", + " \n", + " FDR = NULL\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "table_toe = NULL\n", + "tmp_num_select = rep(0, length(results_toe_elnet))\n", + "for (i in 1:length(results_toe_elnet)){\n", + " table_toe = rbind(table_toe, results_toe_elnet[[i]][c('n', 'p', 'rou', 'FP', 'FN', 'MSE', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_toe_elnet[[i]]$Stab.table))\n", + " \n", + "}\n", + "table_toe = as.data.frame(table_toe)\n", + "table_toe$num_select = tmp_num_select\n", + "table_toe$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
nprouFPFNMSEStabnum_selectFDR
50 50 0.1 14.72 ( 0.57 )0.01 ( 0.01 ) 0.6 ( 0.03 ) 0.21 19.71 0.67
100 50 0.1 13.7 ( 0.66 )0 ( 0 ) 0.34 ( 0.01 )0.23 18.70 0.64
500 50 0.1 13.59 ( 0.55 )0 ( 0 ) 0.26 ( 0 ) 0.23 18.59 0.65
1000 50 0.1 12.64 ( 0.54 )0 ( 0 ) 0.26 ( 0 ) 0.25 17.64 0.63
50 100 0.1 19.33 ( 0.67 )0 ( 0 ) 0.69 ( 0.05 ) 0.2 24.33 0.73
100 100 0.1 17.77 ( 0.8 )0 ( 0 ) 0.38 ( 0.01 )0.22 22.77 0.70
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllll}\n", + " n & p & rou & FP & FN & MSE & Stab & num\\_select & FDR\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0.1 & 14.72 ( 0.57 ) & 0.01 ( 0.01 ) & 0.6 ( 0.03 ) & 0.21 & 19.71 & 0.67 \\\\\n", + "\t 100 & 50 & 0.1 & 13.7 ( 0.66 ) & 0 ( 0 ) & 0.34 ( 0.01 ) & 0.23 & 18.70 & 0.64 \\\\\n", + "\t 500 & 50 & 0.1 & 13.59 ( 0.55 ) & 0 ( 0 ) & 0.26 ( 0 ) & 0.23 & 18.59 & 0.65 \\\\\n", + "\t 1000 & 50 & 0.1 & 12.64 ( 0.54 ) & 0 ( 0 ) & 0.26 ( 0 ) & 0.25 & 17.64 & 0.63 \\\\\n", + "\t 50 & 100 & 0.1 & 19.33 ( 0.67 ) & 0 ( 0 ) & 0.69 ( 0.05 ) & 0.2 & 24.33 & 0.73 \\\\\n", + "\t 100 & 100 & 0.1 & 17.77 ( 0.8 ) & 0 ( 0 ) & 0.38 ( 0.01 ) & 0.22 & 22.77 & 0.70 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| n | p | rou | FP | FN | MSE | Stab | num_select | FDR |\n", + "|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0.1 | 14.72 ( 0.57 ) | 0.01 ( 0.01 ) | 0.6 ( 0.03 ) | 0.21 | 19.71 | 0.67 |\n", + "| 100 | 50 | 0.1 | 13.7 ( 0.66 ) | 0 ( 0 ) | 0.34 ( 0.01 ) | 0.23 | 18.70 | 0.64 |\n", + "| 500 | 50 | 0.1 | 13.59 ( 0.55 ) | 0 ( 0 ) | 0.26 ( 0 ) | 0.23 | 18.59 | 0.65 |\n", + "| 1000 | 50 | 0.1 | 12.64 ( 0.54 ) | 0 ( 0 ) | 0.26 ( 0 ) | 0.25 | 17.64 | 0.63 |\n", + "| 50 | 100 | 0.1 | 19.33 ( 0.67 ) | 0 ( 0 ) | 0.69 ( 0.05 ) | 0.2 | 24.33 | 0.73 |\n", + "| 100 | 100 | 0.1 | 17.77 ( 0.8 ) | 0 ( 0 ) | 0.38 ( 0.01 ) | 0.22 | 22.77 | 0.70 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN MSE Stab num_select FDR \n", + "1 50 50 0.1 14.72 ( 0.57 ) 0.01 ( 0.01 ) 0.6 ( 0.03 ) 0.21 19.71 0.67\n", + "2 100 50 0.1 13.7 ( 0.66 ) 0 ( 0 ) 0.34 ( 0.01 ) 0.23 18.70 0.64\n", + "3 500 50 0.1 13.59 ( 0.55 ) 0 ( 0 ) 0.26 ( 0 ) 0.23 18.59 0.65\n", + "4 1000 50 0.1 12.64 ( 0.54 ) 0 ( 0 ) 0.26 ( 0 ) 0.25 17.64 0.63\n", + "5 50 100 0.1 19.33 ( 0.67 ) 0 ( 0 ) 0.69 ( 0.05 ) 0.2 24.33 0.73\n", + "6 100 100 0.1 17.77 ( 0.8 ) 0 ( 0 ) 0.38 ( 0.01 ) 0.22 22.77 0.70" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_toe <- apply(table_toe,2,as.character)\n", + "rownames(result.table_toe) = rownames(table_toe)\n", + "result.table_toe = as.data.frame(result.table_toe)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_toe$n = tidyr::extract_numeric(result.table_toe$n)\n", + "result.table_toe$p = tidyr::extract_numeric(result.table_toe$p)\n", + "result.table_toe$ratio = result.table_toe$p / result.table_toe$n\n", + "\n", + "result.table_toe = result.table_toe[c('n', 'p', 'rou', 'ratio', 'Stab', 'MSE', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_toe)[1:4] = c('N', 'P', 'Corr', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”" + ] + } + ], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_toe$Stab = as.numeric(as.character(result.table_toe$Stab))\n", + "result.table_toe$MSE_mean = as.numeric(substr(result.table_toe$MSE, start=1, stop=4))\n", + "result.table_toe$FP_mean = as.numeric(substr(result.table_toe$FP, start=1, stop=4))\n", + "result.table_toe$FN_mean = as.numeric(substr(result.table_toe$FN, start=1, stop=4))\n", + "result.table_toe$FN_mean[is.na(result.table_toe$FN_mean)] = 0\n", + "result.table_toe$num_select = as.numeric(as.character(result.table_toe$num_select))" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
241000 100 0.3 0.1 0.20 0.26 ( 0 ) 19 ( 0.86 ) 0 ( 0 ) 24.00 0.71 0.26 NA 0.00
66 100 50 0.9 0.5 0.21 0.35 ( 0.01 )14 ( 0.69 ) 0.27 ( 0.06 )18.73 0.66 0.35 NA 0.27
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t24 & 1000 & 100 & 0.3 & 0.1 & 0.20 & 0.26 ( 0 ) & 19 ( 0.86 ) & 0 ( 0 ) & 24.00 & 0.71 & 0.26 & NA & 0.00 \\\\\n", + "\t66 & 100 & 50 & 0.9 & 0.5 & 0.21 & 0.35 ( 0.01 ) & 14 ( 0.69 ) & 0.27 ( 0.06 ) & 18.73 & 0.66 & 0.35 & NA & 0.27 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 24 | 1000 | 100 | 0.3 | 0.1 | 0.20 | 0.26 ( 0 ) | 19 ( 0.86 ) | 0 ( 0 ) | 24.00 | 0.71 | 0.26 | NA | 0.00 |\n", + "| 66 | 100 | 50 | 0.9 | 0.5 | 0.21 | 0.35 ( 0.01 ) | 14 ( 0.69 ) | 0.27 ( 0.06 ) | 18.73 | 0.66 | 0.35 | NA | 0.27 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN num_select\n", + "24 1000 100 0.3 0.1 0.20 0.26 ( 0 ) 19 ( 0.86 ) 0 ( 0 ) 24.00 \n", + "66 100 50 0.9 0.5 0.21 0.35 ( 0.01 ) 14 ( 0.69 ) 0.27 ( 0.06 ) 18.73 \n", + " FDR MSE_mean FP_mean FN_mean\n", + "24 0.71 0.26 NA 0.00 \n", + "66 0.66 0.35 NA 0.27 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check whether missing values exists\n", + "result.table_toe[rowSums(is.na(result.table_toe)) > 0,]" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "# recover values\n", + "result.table_toe$FP_mean[24] = 19\n", + "result.table_toe$FP_mean[66] = 14" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
241000 100 0.3 0.1 0.20 0.26 ( 0 ) 19 ( 0.86 ) 0 ( 0 ) 24.00 0.71 0.26 19 0.00
66 100 50 0.9 0.5 0.21 0.35 ( 0.01 )14 ( 0.69 ) 0.27 ( 0.06 )18.73 0.66 0.35 14 0.27
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t24 & 1000 & 100 & 0.3 & 0.1 & 0.20 & 0.26 ( 0 ) & 19 ( 0.86 ) & 0 ( 0 ) & 24.00 & 0.71 & 0.26 & 19 & 0.00 \\\\\n", + "\t66 & 100 & 50 & 0.9 & 0.5 & 0.21 & 0.35 ( 0.01 ) & 14 ( 0.69 ) & 0.27 ( 0.06 ) & 18.73 & 0.66 & 0.35 & 14 & 0.27 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 24 | 1000 | 100 | 0.3 | 0.1 | 0.20 | 0.26 ( 0 ) | 19 ( 0.86 ) | 0 ( 0 ) | 24.00 | 0.71 | 0.26 | 19 | 0.00 |\n", + "| 66 | 100 | 50 | 0.9 | 0.5 | 0.21 | 0.35 ( 0.01 ) | 14 ( 0.69 ) | 0.27 ( 0.06 ) | 18.73 | 0.66 | 0.35 | 14 | 0.27 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN num_select\n", + "24 1000 100 0.3 0.1 0.20 0.26 ( 0 ) 19 ( 0.86 ) 0 ( 0 ) 24.00 \n", + "66 100 50 0.9 0.5 0.21 0.35 ( 0.01 ) 14 ( 0.69 ) 0.27 ( 0.06 ) 18.73 \n", + " FDR MSE_mean FP_mean FN_mean\n", + "24 0.71 0.26 19 0.00 \n", + "66 0.66 0.35 14 0.27 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_toe[c(24, 66), ]" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
50 50 0.1 1.00 0.21 0.6 ( 0.03 ) 14.72 ( 0.57 )0.01 ( 0.01 ) 19.71 0.67 0.60 14.7 0.01
100 50 0.1 0.50 0.23 0.34 ( 0.01 ) 13.7 ( 0.66 ) 0 ( 0 ) 18.70 0.64 0.34 13.7 0.00
500 50 0.1 0.10 0.23 0.26 ( 0 ) 13.59 ( 0.55 )0 ( 0 ) 18.59 0.65 0.26 13.5 0.00
1000 50 0.1 0.05 0.25 0.26 ( 0 ) 12.64 ( 0.54 )0 ( 0 ) 17.64 0.63 0.26 12.6 0.00
50 100 0.1 2.00 0.20 0.69 ( 0.05 ) 19.33 ( 0.67 )0 ( 0 ) 24.33 0.73 0.69 19.3 0.00
100 100 0.1 1.00 0.22 0.38 ( 0.01 ) 17.77 ( 0.8 ) 0 ( 0 ) 22.77 0.7 0.38 17.7 0.00
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0.1 & 1.00 & 0.21 & 0.6 ( 0.03 ) & 14.72 ( 0.57 ) & 0.01 ( 0.01 ) & 19.71 & 0.67 & 0.60 & 14.7 & 0.01 \\\\\n", + "\t 100 & 50 & 0.1 & 0.50 & 0.23 & 0.34 ( 0.01 ) & 13.7 ( 0.66 ) & 0 ( 0 ) & 18.70 & 0.64 & 0.34 & 13.7 & 0.00 \\\\\n", + "\t 500 & 50 & 0.1 & 0.10 & 0.23 & 0.26 ( 0 ) & 13.59 ( 0.55 ) & 0 ( 0 ) & 18.59 & 0.65 & 0.26 & 13.5 & 0.00 \\\\\n", + "\t 1000 & 50 & 0.1 & 0.05 & 0.25 & 0.26 ( 0 ) & 12.64 ( 0.54 ) & 0 ( 0 ) & 17.64 & 0.63 & 0.26 & 12.6 & 0.00 \\\\\n", + "\t 50 & 100 & 0.1 & 2.00 & 0.20 & 0.69 ( 0.05 ) & 19.33 ( 0.67 ) & 0 ( 0 ) & 24.33 & 0.73 & 0.69 & 19.3 & 0.00 \\\\\n", + "\t 100 & 100 & 0.1 & 1.00 & 0.22 & 0.38 ( 0.01 ) & 17.77 ( 0.8 ) & 0 ( 0 ) & 22.77 & 0.7 & 0.38 & 17.7 & 0.00 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0.1 | 1.00 | 0.21 | 0.6 ( 0.03 ) | 14.72 ( 0.57 ) | 0.01 ( 0.01 ) | 19.71 | 0.67 | 0.60 | 14.7 | 0.01 |\n", + "| 100 | 50 | 0.1 | 0.50 | 0.23 | 0.34 ( 0.01 ) | 13.7 ( 0.66 ) | 0 ( 0 ) | 18.70 | 0.64 | 0.34 | 13.7 | 0.00 |\n", + "| 500 | 50 | 0.1 | 0.10 | 0.23 | 0.26 ( 0 ) | 13.59 ( 0.55 ) | 0 ( 0 ) | 18.59 | 0.65 | 0.26 | 13.5 | 0.00 |\n", + "| 1000 | 50 | 0.1 | 0.05 | 0.25 | 0.26 ( 0 ) | 12.64 ( 0.54 ) | 0 ( 0 ) | 17.64 | 0.63 | 0.26 | 12.6 | 0.00 |\n", + "| 50 | 100 | 0.1 | 2.00 | 0.20 | 0.69 ( 0.05 ) | 19.33 ( 0.67 ) | 0 ( 0 ) | 24.33 | 0.73 | 0.69 | 19.3 | 0.00 |\n", + "| 100 | 100 | 0.1 | 1.00 | 0.22 | 0.38 ( 0.01 ) | 17.77 ( 0.8 ) | 0 ( 0 ) | 22.77 | 0.7 | 0.38 | 17.7 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN \n", + "1 50 50 0.1 1.00 0.21 0.6 ( 0.03 ) 14.72 ( 0.57 ) 0.01 ( 0.01 )\n", + "2 100 50 0.1 0.50 0.23 0.34 ( 0.01 ) 13.7 ( 0.66 ) 0 ( 0 ) \n", + "3 500 50 0.1 0.10 0.23 0.26 ( 0 ) 13.59 ( 0.55 ) 0 ( 0 ) \n", + "4 1000 50 0.1 0.05 0.25 0.26 ( 0 ) 12.64 ( 0.54 ) 0 ( 0 ) \n", + "5 50 100 0.1 2.00 0.20 0.69 ( 0.05 ) 19.33 ( 0.67 ) 0 ( 0 ) \n", + "6 100 100 0.1 1.00 0.22 0.38 ( 0.01 ) 17.77 ( 0.8 ) 0 ( 0 ) \n", + " num_select FDR MSE_mean FP_mean FN_mean\n", + "1 19.71 0.67 0.60 14.7 0.01 \n", + "2 18.70 0.64 0.34 13.7 0.00 \n", + "3 18.59 0.65 0.26 13.5 0.00 \n", + "4 17.64 0.63 0.26 12.6 0.00 \n", + "5 24.33 0.73 0.69 19.3 0.00 \n", + "6 22.77 0.7 0.38 17.7 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
75 500 500 0.9 1.0 0.12 0.29 ( 0 ) 41.14 ( 1.02 )0 ( 0 ) 46.14 0.86 0.29 41.1 0.00
761000 500 0.9 0.5 0.13 0.27 ( 0 ) 39.21 ( 0.84 )0 ( 0 ) 44.21 0.86 0.27 39.2 0.00
77 50 1000 0.9 20.0 0.04 0.94 ( 0.05 ) 36.59 ( 3.6 ) 3.72 ( 0.08 ) 37.87 0.92 0.94 36.5 3.72
78 100 1000 0.9 10.0 0.09 0.59 ( 0.02 ) 32.05 ( 1.85 )2.59 ( 0.06 ) 34.46 0.88 0.59 32.0 2.59
79 500 1000 0.9 2.0 0.09 0.3 ( 0 ) 57.69 ( 1.57 )0 ( 0 ) 62.69 0.9 0.30 57.6 0.00
801000 1000 0.9 1.0 0.10 0.27 ( 0 ) 52.35 ( 1.6 ) 0 ( 0 ) 57.35 0.89 0.27 52.3 0.00
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 1.0 & 0.12 & 0.29 ( 0 ) & 41.14 ( 1.02 ) & 0 ( 0 ) & 46.14 & 0.86 & 0.29 & 41.1 & 0.00 \\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.5 & 0.13 & 0.27 ( 0 ) & 39.21 ( 0.84 ) & 0 ( 0 ) & 44.21 & 0.86 & 0.27 & 39.2 & 0.00 \\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.0 & 0.04 & 0.94 ( 0.05 ) & 36.59 ( 3.6 ) & 3.72 ( 0.08 ) & 37.87 & 0.92 & 0.94 & 36.5 & 3.72 \\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.0 & 0.09 & 0.59 ( 0.02 ) & 32.05 ( 1.85 ) & 2.59 ( 0.06 ) & 34.46 & 0.88 & 0.59 & 32.0 & 2.59 \\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.0 & 0.09 & 0.3 ( 0 ) & 57.69 ( 1.57 ) & 0 ( 0 ) & 62.69 & 0.9 & 0.30 & 57.6 & 0.00 \\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.0 & 0.10 & 0.27 ( 0 ) & 52.35 ( 1.6 ) & 0 ( 0 ) & 57.35 & 0.89 & 0.27 & 52.3 & 0.00 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 1.0 | 0.12 | 0.29 ( 0 ) | 41.14 ( 1.02 ) | 0 ( 0 ) | 46.14 | 0.86 | 0.29 | 41.1 | 0.00 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.5 | 0.13 | 0.27 ( 0 ) | 39.21 ( 0.84 ) | 0 ( 0 ) | 44.21 | 0.86 | 0.27 | 39.2 | 0.00 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.0 | 0.04 | 0.94 ( 0.05 ) | 36.59 ( 3.6 ) | 3.72 ( 0.08 ) | 37.87 | 0.92 | 0.94 | 36.5 | 3.72 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.0 | 0.09 | 0.59 ( 0.02 ) | 32.05 ( 1.85 ) | 2.59 ( 0.06 ) | 34.46 | 0.88 | 0.59 | 32.0 | 2.59 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.0 | 0.09 | 0.3 ( 0 ) | 57.69 ( 1.57 ) | 0 ( 0 ) | 62.69 | 0.9 | 0.30 | 57.6 | 0.00 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.0 | 0.10 | 0.27 ( 0 ) | 52.35 ( 1.6 ) | 0 ( 0 ) | 57.35 | 0.89 | 0.27 | 52.3 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN \n", + "75 500 500 0.9 1.0 0.12 0.29 ( 0 ) 41.14 ( 1.02 ) 0 ( 0 ) \n", + "76 1000 500 0.9 0.5 0.13 0.27 ( 0 ) 39.21 ( 0.84 ) 0 ( 0 ) \n", + "77 50 1000 0.9 20.0 0.04 0.94 ( 0.05 ) 36.59 ( 3.6 ) 3.72 ( 0.08 )\n", + "78 100 1000 0.9 10.0 0.09 0.59 ( 0.02 ) 32.05 ( 1.85 ) 2.59 ( 0.06 )\n", + "79 500 1000 0.9 2.0 0.09 0.3 ( 0 ) 57.69 ( 1.57 ) 0 ( 0 ) \n", + "80 1000 1000 0.9 1.0 0.10 0.27 ( 0 ) 52.35 ( 1.6 ) 0 ( 0 ) \n", + " num_select FDR MSE_mean FP_mean FN_mean\n", + "75 46.14 0.86 0.29 41.1 0.00 \n", + "76 44.21 0.86 0.27 39.2 0.00 \n", + "77 37.87 0.92 0.94 36.5 3.72 \n", + "78 34.46 0.88 0.59 32.0 2.59 \n", + "79 62.69 0.9 0.30 57.6 0.00 \n", + "80 57.35 0.89 0.27 52.3 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "## export\n", + "write.table(result.table_toe, '../results_summary_cts/sim_toe_elnet.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_cts/.ipynb_checkpoints/1.3_sim_toe_rf_cts-checkpoint.ipynb b/simulations/notebooks_sim_cts/.ipynb_checkpoints/1.3_sim_toe_rf_cts-checkpoint.ipynb new file mode 100755 index 0000000..38b3c7f --- /dev/null +++ b/simulations/notebooks_sim_cts/.ipynb_checkpoints/1.3_sim_toe_rf_cts-checkpoint.ipynb @@ -0,0 +1,766 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize random forests results on Toeplitz Simulation Scenarios for continuous outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'\n", + "\n", + "load(paste0(dir, '/toe_RF.RData'))" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "rou.list = seq(0.1, 0.9, 0.2)\n", + "\n", + "files = NULL\n", + "for (rou in rou.list){\n", + " for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_toeplitz_corr', rou, paste('P', p, 'N', n, sep='_'), '.RData', sep=''))\n", + " }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "avg_FDR = NULL\n", + "for (i in 1:length(files)){\n", + " sim_file = files[i]\n", + " load(sim_file, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_toe_rf[[i]]$Stab.table\n", + " \n", + " FDR = NULL\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "table_toe = NULL\n", + "tmp_num_select = rep(0, length(results_toe_rf))\n", + "for (i in 1:length(results_toe_rf)){\n", + " results_toe_rf[[i]]$OOB = paste(round(mean(results_toe_rf[[i]]$OOB.list, na.rm=T),2),\n", + " '(', round(FSA::se(results_toe_rf[[i]]$OOB.list, na.rm=T),2), ')')\n", + " table_toe = rbind(table_toe, results_toe_rf[[i]][c('n', 'p', 'rou', 'FP', 'FN', 'MSE', 'Stab', 'OOB')])\n", + " tmp_num_select[i] = mean(rowSums(results_toe_rf[[i]]$Stab.table))\n", + "}\n", + "table_toe = as.data.frame(table_toe)\n", + "table_toe$num_select = tmp_num_select\n", + "table_toe$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
nprouFPFNMSEStabOOBnum_selectFDR
50 50 0.1 1 ( 0 ) 6 ( 0 ) 1.4 ( 0.06 ) NaN 1.98 ( 0.02 )0.00 NaN
100 50 0.1 1.87 ( 0.14 )4.25 ( 0.09 )0.86 ( 0.03 )0.19 1.76 ( 0.01 )3.62 0.48
500 50 0.1 0.32 ( 0.05 )1.81 ( 0.07 )0.44 ( 0.01 )0.77 1.29 ( 0 ) 4.51 0.06
1000 50 0.1 0.15 ( 0.04 )0.93 ( 0.07 )0.34 ( 0 ) 0.86 1.15 ( 0 ) 5.22 0.02
50 100 0.1 1 ( 0 ) 6 ( 0 ) 1.36 ( 0.06 )NaN 2.19 ( 0.02 )0.00 NaN
100 100 0.1 4.11 ( 0.18 )4.17 ( 0.1 ) 0.93 ( 0.03 )0.12 1.99 ( 0.01 )5.93 0.68
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|llllllllll}\n", + " n & p & rou & FP & FN & MSE & Stab & OOB & num\\_select & FDR\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0.1 & 1 ( 0 ) & 6 ( 0 ) & 1.4 ( 0.06 ) & NaN & 1.98 ( 0.02 ) & 0.00 & NaN \\\\\n", + "\t 100 & 50 & 0.1 & 1.87 ( 0.14 ) & 4.25 ( 0.09 ) & 0.86 ( 0.03 ) & 0.19 & 1.76 ( 0.01 ) & 3.62 & 0.48 \\\\\n", + "\t 500 & 50 & 0.1 & 0.32 ( 0.05 ) & 1.81 ( 0.07 ) & 0.44 ( 0.01 ) & 0.77 & 1.29 ( 0 ) & 4.51 & 0.06 \\\\\n", + "\t 1000 & 50 & 0.1 & 0.15 ( 0.04 ) & 0.93 ( 0.07 ) & 0.34 ( 0 ) & 0.86 & 1.15 ( 0 ) & 5.22 & 0.02 \\\\\n", + "\t 50 & 100 & 0.1 & 1 ( 0 ) & 6 ( 0 ) & 1.36 ( 0.06 ) & NaN & 2.19 ( 0.02 ) & 0.00 & NaN \\\\\n", + "\t 100 & 100 & 0.1 & 4.11 ( 0.18 ) & 4.17 ( 0.1 ) & 0.93 ( 0.03 ) & 0.12 & 1.99 ( 0.01 ) & 5.93 & 0.68 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| n | p | rou | FP | FN | MSE | Stab | OOB | num_select | FDR |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0.1 | 1 ( 0 ) | 6 ( 0 ) | 1.4 ( 0.06 ) | NaN | 1.98 ( 0.02 ) | 0.00 | NaN |\n", + "| 100 | 50 | 0.1 | 1.87 ( 0.14 ) | 4.25 ( 0.09 ) | 0.86 ( 0.03 ) | 0.19 | 1.76 ( 0.01 ) | 3.62 | 0.48 |\n", + "| 500 | 50 | 0.1 | 0.32 ( 0.05 ) | 1.81 ( 0.07 ) | 0.44 ( 0.01 ) | 0.77 | 1.29 ( 0 ) | 4.51 | 0.06 |\n", + "| 1000 | 50 | 0.1 | 0.15 ( 0.04 ) | 0.93 ( 0.07 ) | 0.34 ( 0 ) | 0.86 | 1.15 ( 0 ) | 5.22 | 0.02 |\n", + "| 50 | 100 | 0.1 | 1 ( 0 ) | 6 ( 0 ) | 1.36 ( 0.06 ) | NaN | 2.19 ( 0.02 ) | 0.00 | NaN |\n", + "| 100 | 100 | 0.1 | 4.11 ( 0.18 ) | 4.17 ( 0.1 ) | 0.93 ( 0.03 ) | 0.12 | 1.99 ( 0.01 ) | 5.93 | 0.68 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN MSE Stab OOB \n", + "1 50 50 0.1 1 ( 0 ) 6 ( 0 ) 1.4 ( 0.06 ) NaN 1.98 ( 0.02 )\n", + "2 100 50 0.1 1.87 ( 0.14 ) 4.25 ( 0.09 ) 0.86 ( 0.03 ) 0.19 1.76 ( 0.01 )\n", + "3 500 50 0.1 0.32 ( 0.05 ) 1.81 ( 0.07 ) 0.44 ( 0.01 ) 0.77 1.29 ( 0 ) \n", + "4 1000 50 0.1 0.15 ( 0.04 ) 0.93 ( 0.07 ) 0.34 ( 0 ) 0.86 1.15 ( 0 ) \n", + "5 50 100 0.1 1 ( 0 ) 6 ( 0 ) 1.36 ( 0.06 ) NaN 2.19 ( 0.02 )\n", + "6 100 100 0.1 4.11 ( 0.18 ) 4.17 ( 0.1 ) 0.93 ( 0.03 ) 0.12 1.99 ( 0.01 )\n", + " num_select FDR \n", + "1 0.00 NaN\n", + "2 3.62 0.48\n", + "3 4.51 0.06\n", + "4 5.22 0.02\n", + "5 0.00 NaN\n", + "6 5.93 0.68" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_toe <- apply(table_toe,2,as.character)\n", + "rownames(result.table_toe) = rownames(table_toe)\n", + "result.table_toe = as.data.frame(result.table_toe)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_toe$n = tidyr::extract_numeric(result.table_toe$n)\n", + "result.table_toe$p = tidyr::extract_numeric(result.table_toe$p)\n", + "result.table_toe$ratio = result.table_toe$p / result.table_toe$n\n", + "\n", + "result.table_toe = result.table_toe[c('n', 'p', 'rou', 'ratio', 'Stab', 'MSE', 'FP', 'FN', 'OOB', 'num_select', 'FDR')]\n", + "colnames(result.table_toe)[1:4] = c('N', 'P', 'Corr', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNOOBnum_selectFDR
50 50 0.1 1.00 NaN 1.4 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) 1.98 ( 0.02 )0 NaN
100 50 0.1 0.50 0.19 0.86 ( 0.03 )1.87 ( 0.14 )4.25 ( 0.09 )1.76 ( 0.01 )3.62 0.48
500 50 0.1 0.10 0.77 0.44 ( 0.01 )0.32 ( 0.05 )1.81 ( 0.07 )1.29 ( 0 ) 4.51 0.06
1000 50 0.1 0.05 0.86 0.34 ( 0 ) 0.15 ( 0.04 )0.93 ( 0.07 )1.15 ( 0 ) 5.22 0.02
50 100 0.1 2.00 NaN 1.36 ( 0.06 )1 ( 0 ) 6 ( 0 ) 2.19 ( 0.02 )0 NaN
100 100 0.1 1.00 0.12 0.93 ( 0.03 )4.11 ( 0.18 )4.17 ( 0.1 ) 1.99 ( 0.01 )5.93 0.68
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllll}\n", + " N & P & Corr & Ratio & Stab & MSE & FP & FN & OOB & num\\_select & FDR\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0.1 & 1.00 & NaN & 1.4 ( 0.06 ) & 1 ( 0 ) & 6 ( 0 ) & 1.98 ( 0.02 ) & 0 & NaN \\\\\n", + "\t 100 & 50 & 0.1 & 0.50 & 0.19 & 0.86 ( 0.03 ) & 1.87 ( 0.14 ) & 4.25 ( 0.09 ) & 1.76 ( 0.01 ) & 3.62 & 0.48 \\\\\n", + "\t 500 & 50 & 0.1 & 0.10 & 0.77 & 0.44 ( 0.01 ) & 0.32 ( 0.05 ) & 1.81 ( 0.07 ) & 1.29 ( 0 ) & 4.51 & 0.06 \\\\\n", + "\t 1000 & 50 & 0.1 & 0.05 & 0.86 & 0.34 ( 0 ) & 0.15 ( 0.04 ) & 0.93 ( 0.07 ) & 1.15 ( 0 ) & 5.22 & 0.02 \\\\\n", + "\t 50 & 100 & 0.1 & 2.00 & NaN & 1.36 ( 0.06 ) & 1 ( 0 ) & 6 ( 0 ) & 2.19 ( 0.02 ) & 0 & NaN \\\\\n", + "\t 100 & 100 & 0.1 & 1.00 & 0.12 & 0.93 ( 0.03 ) & 4.11 ( 0.18 ) & 4.17 ( 0.1 ) & 1.99 ( 0.01 ) & 5.93 & 0.68 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| N | P | Corr | Ratio | Stab | MSE | FP | FN | OOB | num_select | FDR |\n", + "|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0.1 | 1.00 | NaN | 1.4 ( 0.06 ) | 1 ( 0 ) | 6 ( 0 ) | 1.98 ( 0.02 ) | 0 | NaN |\n", + "| 100 | 50 | 0.1 | 0.50 | 0.19 | 0.86 ( 0.03 ) | 1.87 ( 0.14 ) | 4.25 ( 0.09 ) | 1.76 ( 0.01 ) | 3.62 | 0.48 |\n", + "| 500 | 50 | 0.1 | 0.10 | 0.77 | 0.44 ( 0.01 ) | 0.32 ( 0.05 ) | 1.81 ( 0.07 ) | 1.29 ( 0 ) | 4.51 | 0.06 |\n", + "| 1000 | 50 | 0.1 | 0.05 | 0.86 | 0.34 ( 0 ) | 0.15 ( 0.04 ) | 0.93 ( 0.07 ) | 1.15 ( 0 ) | 5.22 | 0.02 |\n", + "| 50 | 100 | 0.1 | 2.00 | NaN | 1.36 ( 0.06 ) | 1 ( 0 ) | 6 ( 0 ) | 2.19 ( 0.02 ) | 0 | NaN |\n", + "| 100 | 100 | 0.1 | 1.00 | 0.12 | 0.93 ( 0.03 ) | 4.11 ( 0.18 ) | 4.17 ( 0.1 ) | 1.99 ( 0.01 ) | 5.93 | 0.68 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN \n", + "1 50 50 0.1 1.00 NaN 1.4 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) \n", + "2 100 50 0.1 0.50 0.19 0.86 ( 0.03 ) 1.87 ( 0.14 ) 4.25 ( 0.09 )\n", + "3 500 50 0.1 0.10 0.77 0.44 ( 0.01 ) 0.32 ( 0.05 ) 1.81 ( 0.07 )\n", + "4 1000 50 0.1 0.05 0.86 0.34 ( 0 ) 0.15 ( 0.04 ) 0.93 ( 0.07 )\n", + "5 50 100 0.1 2.00 NaN 1.36 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) \n", + "6 100 100 0.1 1.00 0.12 0.93 ( 0.03 ) 4.11 ( 0.18 ) 4.17 ( 0.1 ) \n", + " OOB num_select FDR \n", + "1 1.98 ( 0.02 ) 0 NaN \n", + "2 1.76 ( 0.01 ) 3.62 0.48\n", + "3 1.29 ( 0 ) 4.51 0.06\n", + "4 1.15 ( 0 ) 5.22 0.02\n", + "5 2.19 ( 0.02 ) 0 NaN \n", + "6 1.99 ( 0.01 ) 5.93 0.68" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”" + ] + } + ], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_toe$Stab = as.numeric(as.character(result.table_toe$Stab))\n", + "result.table_toe$MSE_mean = as.numeric(substr(result.table_toe$MSE, start=1, stop=4))\n", + "result.table_toe$FP_mean = as.numeric(substr(result.table_toe$FP, start=1, stop=4))\n", + "result.table_toe$FN_mean = as.numeric(substr(result.table_toe$FN, start=1, stop=4))\n", + "result.table_toe$FN_mean[is.na(result.table_toe$FN_mean)] = 0\n", + "result.table_toe$OOB_mean = as.numeric(substr(result.table_toe$OOB, start=1, stop=4))\n", + "result.table_toe$num_select = as.numeric(as.character(result.table_toe$num_select))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNOOBnum_selectFDRMSE_meanFP_meanFN_meanOOB_mean
1 50 50 0.1 1 NaN 1.4 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) 1.98 ( 0.02 ) 0.00 NaN 1.40 NA 0.00 1.98
5 50 100 0.1 2 NaN 1.36 ( 0.06 )1 ( 0 ) 6 ( 0 ) 2.19 ( 0.02 ) 0.00 NaN 1.36 NA 0.00 2.19
9 50 500 0.1 10 NaN 1.29 ( 0.05 )1 ( 0 ) 6 ( 0 ) 2.39 ( 0.02 ) 0.00 NaN 1.29 NA 0.00 2.39
13 50 1000 0.1 20 NaN 1.35 ( 0.06 )1 ( 0 ) 6 ( 0 ) 2.42 ( 0.02 ) 0.00 NaN 1.35 NA 0.00 2.42
14100 1000 0.1 10 0.01 1 ( 0.03 ) 49.42 ( 0.7 )4.71 ( 0.09 )2.39 ( 0.02 )50.71 0.97 NA 49.4 4.71 2.39
17 50 50 0.3 1 NaN 1.22 ( 0.05 )1 ( 0 ) 6 ( 0 ) 1.87 ( 0.02 ) 0.00 NaN 1.22 NA 0.00 1.87
21 50 100 0.3 2 NaN 1.15 ( 0.05 )1 ( 0 ) 6 ( 0 ) 2.03 ( 0.02 ) 0.00 NaN 1.15 NA 0.00 2.03
25 50 500 0.3 10 NaN 1.14 ( 0.05 )1 ( 0 ) 6 ( 0 ) 2.24 ( 0.02 ) 0.00 NaN 1.14 NA 0.00 2.24
29 50 1000 0.3 20 NaN 1.2 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 2.29 ( 0.02 ) 0.00 NaN 1.20 NA 0.00 2.29
33 50 50 0.5 1 NaN 0.99 ( 0.05 )1 ( 0 ) 6 ( 0 ) 1.68 ( 0.02 ) 0.00 NaN 0.99 NA 0.00 1.68
37 50 100 0.5 2 NaN 0.91 ( 0.04 )1 ( 0 ) 6 ( 0 ) 1.84 ( 0.02 ) 0.00 NaN 0.91 NA 0.00 1.84
41 50 500 0.5 10 NaN 0.95 ( 0.04 )1 ( 0 ) 6 ( 0 ) 2.04 ( 0.02 ) 0.00 NaN 0.95 NA 0.00 2.04
45 50 1000 0.5 20 NaN 0.94 ( 0.04 )1 ( 0 ) 6 ( 0 ) 2.04 ( 0.02 ) 0.00 NaN 0.94 NA 0.00 2.04
49 50 50 0.7 1 NaN 0.66 ( 0.03 )1 ( 0 ) 6 ( 0 ) 1.44 ( 0.01 ) 0.00 NaN 0.66 NA 0.00 1.44
53 50 100 0.7 2 NaN 0.67 ( 0.03 )1 ( 0 ) 6 ( 0 ) 1.5 ( 0.02 ) 0.00 NaN 0.67 NA 0.00 1.50
57 50 500 0.7 10 NaN 0.7 ( 0.03 ) 1 ( 0 ) 6 ( 0 ) 1.68 ( 0.02 ) 0.00 NaN 0.70 NA 0.00 1.68
61 50 1000 0.7 20 NaN 0.74 ( 0.03 )1 ( 0 ) 6 ( 0 ) 1.69 ( 0.02 ) 0.00 NaN 0.74 NA 0.00 1.69
65 50 50 0.9 1 NaN 0.27 ( 0.01 )1 ( 0 ) 6 ( 0 ) 0.96 ( 0.01 ) 0.00 NaN 0.27 NA 0.00 0.96
69 50 100 0.9 2 NaN 0.3 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) 1 ( 0.01 ) 0.00 NaN 0.30 NA 0.00 NA
73 50 500 0.9 10 NaN 0.29 ( 0.01 )1 ( 0 ) 6 ( 0 ) 1.1 ( 0.01 ) 0.00 NaN 0.29 NA 0.00 1.10
77 50 1000 0.9 20 NaN 0.29 ( 0.01 )1 ( 0 ) 6 ( 0 ) 1.11 ( 0.01 ) 0.00 NaN 0.29 NA 0.00 1.11
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & OOB & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean & OOB\\_mean\\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1 & NaN & 1.4 ( 0.06 ) & 1 ( 0 ) & 6 ( 0 ) & 1.98 ( 0.02 ) & 0.00 & NaN & 1.40 & NA & 0.00 & 1.98 \\\\\n", + "\t5 & 50 & 100 & 0.1 & 2 & NaN & 1.36 ( 0.06 ) & 1 ( 0 ) & 6 ( 0 ) & 2.19 ( 0.02 ) & 0.00 & NaN & 1.36 & NA & 0.00 & 2.19 \\\\\n", + "\t9 & 50 & 500 & 0.1 & 10 & NaN & 1.29 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.39 ( 0.02 ) & 0.00 & NaN & 1.29 & NA & 0.00 & 2.39 \\\\\n", + "\t13 & 50 & 1000 & 0.1 & 20 & NaN & 1.35 ( 0.06 ) & 1 ( 0 ) & 6 ( 0 ) & 2.42 ( 0.02 ) & 0.00 & NaN & 1.35 & NA & 0.00 & 2.42 \\\\\n", + "\t14 & 100 & 1000 & 0.1 & 10 & 0.01 & 1 ( 0.03 ) & 49.42 ( 0.7 ) & 4.71 ( 0.09 ) & 2.39 ( 0.02 ) & 50.71 & 0.97 & NA & 49.4 & 4.71 & 2.39 \\\\\n", + "\t17 & 50 & 50 & 0.3 & 1 & NaN & 1.22 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 1.87 ( 0.02 ) & 0.00 & NaN & 1.22 & NA & 0.00 & 1.87 \\\\\n", + "\t21 & 50 & 100 & 0.3 & 2 & NaN & 1.15 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.03 ( 0.02 ) & 0.00 & NaN & 1.15 & NA & 0.00 & 2.03 \\\\\n", + "\t25 & 50 & 500 & 0.3 & 10 & NaN & 1.14 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.24 ( 0.02 ) & 0.00 & NaN & 1.14 & NA & 0.00 & 2.24 \\\\\n", + "\t29 & 50 & 1000 & 0.3 & 20 & NaN & 1.2 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.29 ( 0.02 ) & 0.00 & NaN & 1.20 & NA & 0.00 & 2.29 \\\\\n", + "\t33 & 50 & 50 & 0.5 & 1 & NaN & 0.99 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 1.68 ( 0.02 ) & 0.00 & NaN & 0.99 & NA & 0.00 & 1.68 \\\\\n", + "\t37 & 50 & 100 & 0.5 & 2 & NaN & 0.91 ( 0.04 ) & 1 ( 0 ) & 6 ( 0 ) & 1.84 ( 0.02 ) & 0.00 & NaN & 0.91 & NA & 0.00 & 1.84 \\\\\n", + "\t41 & 50 & 500 & 0.5 & 10 & NaN & 0.95 ( 0.04 ) & 1 ( 0 ) & 6 ( 0 ) & 2.04 ( 0.02 ) & 0.00 & NaN & 0.95 & NA & 0.00 & 2.04 \\\\\n", + "\t45 & 50 & 1000 & 0.5 & 20 & NaN & 0.94 ( 0.04 ) & 1 ( 0 ) & 6 ( 0 ) & 2.04 ( 0.02 ) & 0.00 & NaN & 0.94 & NA & 0.00 & 2.04 \\\\\n", + "\t49 & 50 & 50 & 0.7 & 1 & NaN & 0.66 ( 0.03 ) & 1 ( 0 ) & 6 ( 0 ) & 1.44 ( 0.01 ) & 0.00 & NaN & 0.66 & NA & 0.00 & 1.44 \\\\\n", + "\t53 & 50 & 100 & 0.7 & 2 & NaN & 0.67 ( 0.03 ) & 1 ( 0 ) & 6 ( 0 ) & 1.5 ( 0.02 ) & 0.00 & NaN & 0.67 & NA & 0.00 & 1.50 \\\\\n", + "\t57 & 50 & 500 & 0.7 & 10 & NaN & 0.7 ( 0.03 ) & 1 ( 0 ) & 6 ( 0 ) & 1.68 ( 0.02 ) & 0.00 & NaN & 0.70 & NA & 0.00 & 1.68 \\\\\n", + "\t61 & 50 & 1000 & 0.7 & 20 & NaN & 0.74 ( 0.03 ) & 1 ( 0 ) & 6 ( 0 ) & 1.69 ( 0.02 ) & 0.00 & NaN & 0.74 & NA & 0.00 & 1.69 \\\\\n", + "\t65 & 50 & 50 & 0.9 & 1 & NaN & 0.27 ( 0.01 ) & 1 ( 0 ) & 6 ( 0 ) & 0.96 ( 0.01 ) & 0.00 & NaN & 0.27 & NA & 0.00 & 0.96 \\\\\n", + "\t69 & 50 & 100 & 0.9 & 2 & NaN & 0.3 ( 0.01 ) & 1 ( 0 ) & 6 ( 0 ) & 1 ( 0.01 ) & 0.00 & NaN & 0.30 & NA & 0.00 & NA \\\\\n", + "\t73 & 50 & 500 & 0.9 & 10 & NaN & 0.29 ( 0.01 ) & 1 ( 0 ) & 6 ( 0 ) & 1.1 ( 0.01 ) & 0.00 & NaN & 0.29 & NA & 0.00 & 1.10 \\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20 & NaN & 0.29 ( 0.01 ) & 1 ( 0 ) & 6 ( 0 ) & 1.11 ( 0.01 ) & 0.00 & NaN & 0.29 & NA & 0.00 & 1.11 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | OOB | num_select | FDR | MSE_mean | FP_mean | FN_mean | OOB_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1 | NaN | 1.4 ( 0.06 ) | 1 ( 0 ) | 6 ( 0 ) | 1.98 ( 0.02 ) | 0.00 | NaN | 1.40 | NA | 0.00 | 1.98 |\n", + "| 5 | 50 | 100 | 0.1 | 2 | NaN | 1.36 ( 0.06 ) | 1 ( 0 ) | 6 ( 0 ) | 2.19 ( 0.02 ) | 0.00 | NaN | 1.36 | NA | 0.00 | 2.19 |\n", + "| 9 | 50 | 500 | 0.1 | 10 | NaN | 1.29 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.39 ( 0.02 ) | 0.00 | NaN | 1.29 | NA | 0.00 | 2.39 |\n", + "| 13 | 50 | 1000 | 0.1 | 20 | NaN | 1.35 ( 0.06 ) | 1 ( 0 ) | 6 ( 0 ) | 2.42 ( 0.02 ) | 0.00 | NaN | 1.35 | NA | 0.00 | 2.42 |\n", + "| 14 | 100 | 1000 | 0.1 | 10 | 0.01 | 1 ( 0.03 ) | 49.42 ( 0.7 ) | 4.71 ( 0.09 ) | 2.39 ( 0.02 ) | 50.71 | 0.97 | NA | 49.4 | 4.71 | 2.39 |\n", + "| 17 | 50 | 50 | 0.3 | 1 | NaN | 1.22 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 1.87 ( 0.02 ) | 0.00 | NaN | 1.22 | NA | 0.00 | 1.87 |\n", + "| 21 | 50 | 100 | 0.3 | 2 | NaN | 1.15 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.03 ( 0.02 ) | 0.00 | NaN | 1.15 | NA | 0.00 | 2.03 |\n", + "| 25 | 50 | 500 | 0.3 | 10 | NaN | 1.14 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.24 ( 0.02 ) | 0.00 | NaN | 1.14 | NA | 0.00 | 2.24 |\n", + "| 29 | 50 | 1000 | 0.3 | 20 | NaN | 1.2 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.29 ( 0.02 ) | 0.00 | NaN | 1.20 | NA | 0.00 | 2.29 |\n", + "| 33 | 50 | 50 | 0.5 | 1 | NaN | 0.99 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 1.68 ( 0.02 ) | 0.00 | NaN | 0.99 | NA | 0.00 | 1.68 |\n", + "| 37 | 50 | 100 | 0.5 | 2 | NaN | 0.91 ( 0.04 ) | 1 ( 0 ) | 6 ( 0 ) | 1.84 ( 0.02 ) | 0.00 | NaN | 0.91 | NA | 0.00 | 1.84 |\n", + "| 41 | 50 | 500 | 0.5 | 10 | NaN | 0.95 ( 0.04 ) | 1 ( 0 ) | 6 ( 0 ) | 2.04 ( 0.02 ) | 0.00 | NaN | 0.95 | NA | 0.00 | 2.04 |\n", + "| 45 | 50 | 1000 | 0.5 | 20 | NaN | 0.94 ( 0.04 ) | 1 ( 0 ) | 6 ( 0 ) | 2.04 ( 0.02 ) | 0.00 | NaN | 0.94 | NA | 0.00 | 2.04 |\n", + "| 49 | 50 | 50 | 0.7 | 1 | NaN | 0.66 ( 0.03 ) | 1 ( 0 ) | 6 ( 0 ) | 1.44 ( 0.01 ) | 0.00 | NaN | 0.66 | NA | 0.00 | 1.44 |\n", + "| 53 | 50 | 100 | 0.7 | 2 | NaN | 0.67 ( 0.03 ) | 1 ( 0 ) | 6 ( 0 ) | 1.5 ( 0.02 ) | 0.00 | NaN | 0.67 | NA | 0.00 | 1.50 |\n", + "| 57 | 50 | 500 | 0.7 | 10 | NaN | 0.7 ( 0.03 ) | 1 ( 0 ) | 6 ( 0 ) | 1.68 ( 0.02 ) | 0.00 | NaN | 0.70 | NA | 0.00 | 1.68 |\n", + "| 61 | 50 | 1000 | 0.7 | 20 | NaN | 0.74 ( 0.03 ) | 1 ( 0 ) | 6 ( 0 ) | 1.69 ( 0.02 ) | 0.00 | NaN | 0.74 | NA | 0.00 | 1.69 |\n", + "| 65 | 50 | 50 | 0.9 | 1 | NaN | 0.27 ( 0.01 ) | 1 ( 0 ) | 6 ( 0 ) | 0.96 ( 0.01 ) | 0.00 | NaN | 0.27 | NA | 0.00 | 0.96 |\n", + "| 69 | 50 | 100 | 0.9 | 2 | NaN | 0.3 ( 0.01 ) | 1 ( 0 ) | 6 ( 0 ) | 1 ( 0.01 ) | 0.00 | NaN | 0.30 | NA | 0.00 | NA |\n", + "| 73 | 50 | 500 | 0.9 | 10 | NaN | 0.29 ( 0.01 ) | 1 ( 0 ) | 6 ( 0 ) | 1.1 ( 0.01 ) | 0.00 | NaN | 0.29 | NA | 0.00 | 1.10 |\n", + "| 77 | 50 | 1000 | 0.9 | 20 | NaN | 0.29 ( 0.01 ) | 1 ( 0 ) | 6 ( 0 ) | 1.11 ( 0.01 ) | 0.00 | NaN | 0.29 | NA | 0.00 | 1.11 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN \n", + "1 50 50 0.1 1 NaN 1.4 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) \n", + "5 50 100 0.1 2 NaN 1.36 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) \n", + "9 50 500 0.1 10 NaN 1.29 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "13 50 1000 0.1 20 NaN 1.35 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) \n", + "14 100 1000 0.1 10 0.01 1 ( 0.03 ) 49.42 ( 0.7 ) 4.71 ( 0.09 )\n", + "17 50 50 0.3 1 NaN 1.22 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "21 50 100 0.3 2 NaN 1.15 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "25 50 500 0.3 10 NaN 1.14 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "29 50 1000 0.3 20 NaN 1.2 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "33 50 50 0.5 1 NaN 0.99 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "37 50 100 0.5 2 NaN 0.91 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) \n", + "41 50 500 0.5 10 NaN 0.95 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) \n", + "45 50 1000 0.5 20 NaN 0.94 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) \n", + "49 50 50 0.7 1 NaN 0.66 ( 0.03 ) 1 ( 0 ) 6 ( 0 ) \n", + "53 50 100 0.7 2 NaN 0.67 ( 0.03 ) 1 ( 0 ) 6 ( 0 ) \n", + "57 50 500 0.7 10 NaN 0.7 ( 0.03 ) 1 ( 0 ) 6 ( 0 ) \n", + "61 50 1000 0.7 20 NaN 0.74 ( 0.03 ) 1 ( 0 ) 6 ( 0 ) \n", + "65 50 50 0.9 1 NaN 0.27 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) \n", + "69 50 100 0.9 2 NaN 0.3 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) \n", + "73 50 500 0.9 10 NaN 0.29 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) \n", + "77 50 1000 0.9 20 NaN 0.29 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) \n", + " OOB num_select FDR MSE_mean FP_mean FN_mean OOB_mean\n", + "1 1.98 ( 0.02 ) 0.00 NaN 1.40 NA 0.00 1.98 \n", + "5 2.19 ( 0.02 ) 0.00 NaN 1.36 NA 0.00 2.19 \n", + "9 2.39 ( 0.02 ) 0.00 NaN 1.29 NA 0.00 2.39 \n", + "13 2.42 ( 0.02 ) 0.00 NaN 1.35 NA 0.00 2.42 \n", + "14 2.39 ( 0.02 ) 50.71 0.97 NA 49.4 4.71 2.39 \n", + "17 1.87 ( 0.02 ) 0.00 NaN 1.22 NA 0.00 1.87 \n", + "21 2.03 ( 0.02 ) 0.00 NaN 1.15 NA 0.00 2.03 \n", + "25 2.24 ( 0.02 ) 0.00 NaN 1.14 NA 0.00 2.24 \n", + "29 2.29 ( 0.02 ) 0.00 NaN 1.20 NA 0.00 2.29 \n", + "33 1.68 ( 0.02 ) 0.00 NaN 0.99 NA 0.00 1.68 \n", + "37 1.84 ( 0.02 ) 0.00 NaN 0.91 NA 0.00 1.84 \n", + "41 2.04 ( 0.02 ) 0.00 NaN 0.95 NA 0.00 2.04 \n", + "45 2.04 ( 0.02 ) 0.00 NaN 0.94 NA 0.00 2.04 \n", + "49 1.44 ( 0.01 ) 0.00 NaN 0.66 NA 0.00 1.44 \n", + "53 1.5 ( 0.02 ) 0.00 NaN 0.67 NA 0.00 1.50 \n", + "57 1.68 ( 0.02 ) 0.00 NaN 0.70 NA 0.00 1.68 \n", + "61 1.69 ( 0.02 ) 0.00 NaN 0.74 NA 0.00 1.69 \n", + "65 0.96 ( 0.01 ) 0.00 NaN 0.27 NA 0.00 0.96 \n", + "69 1 ( 0.01 ) 0.00 NaN 0.30 NA 0.00 NA \n", + "73 1.1 ( 0.01 ) 0.00 NaN 0.29 NA 0.00 1.10 \n", + "77 1.11 ( 0.01 ) 0.00 NaN 0.29 NA 0.00 1.11 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check whether missing values exists\n", + "result.table_toe[rowSums(is.na(result.table_toe)) > 0,]" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "# recover values\n", + "result.table_toe$Stab[is.na(result.table_toe$Stab)] = 0\n", + "result.table_toe$MSE_mean[is.na(result.table_toe$MSE_mean)] = 1\n", + "result.table_toe$FP_mean[is.na(result.table_toe$FP_mean)] = 1\n", + "result.table_toe$FN_mean[result.table_toe$num_select == 0] = 6\n", + "result.table_toe$OOB_mean[is.na(result.table_toe$OOB_mean)] = 1" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNOOBnum_selectFDRMSE_meanFP_meanFN_meanOOB_mean
1 50 50 0.1 1 0.00 1.4 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) 1.98 ( 0.02 ) 0.00 NaN 1.40 1.0 6.00 1.98
5 50 100 0.1 2 0.00 1.36 ( 0.06 )1 ( 0 ) 6 ( 0 ) 2.19 ( 0.02 ) 0.00 NaN 1.36 1.0 6.00 2.19
9 50 500 0.1 10 0.00 1.29 ( 0.05 )1 ( 0 ) 6 ( 0 ) 2.39 ( 0.02 ) 0.00 NaN 1.29 1.0 6.00 2.39
13 50 1000 0.1 20 0.00 1.35 ( 0.06 )1 ( 0 ) 6 ( 0 ) 2.42 ( 0.02 ) 0.00 NaN 1.35 1.0 6.00 2.42
14100 1000 0.1 10 0.01 1 ( 0.03 ) 49.42 ( 0.7 )4.71 ( 0.09 )2.39 ( 0.02 )50.71 0.97 1.00 49.4 4.71 2.39
17 50 50 0.3 1 0.00 1.22 ( 0.05 )1 ( 0 ) 6 ( 0 ) 1.87 ( 0.02 ) 0.00 NaN 1.22 1.0 6.00 1.87
21 50 100 0.3 2 0.00 1.15 ( 0.05 )1 ( 0 ) 6 ( 0 ) 2.03 ( 0.02 ) 0.00 NaN 1.15 1.0 6.00 2.03
25 50 500 0.3 10 0.00 1.14 ( 0.05 )1 ( 0 ) 6 ( 0 ) 2.24 ( 0.02 ) 0.00 NaN 1.14 1.0 6.00 2.24
29 50 1000 0.3 20 0.00 1.2 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 2.29 ( 0.02 ) 0.00 NaN 1.20 1.0 6.00 2.29
33 50 50 0.5 1 0.00 0.99 ( 0.05 )1 ( 0 ) 6 ( 0 ) 1.68 ( 0.02 ) 0.00 NaN 0.99 1.0 6.00 1.68
37 50 100 0.5 2 0.00 0.91 ( 0.04 )1 ( 0 ) 6 ( 0 ) 1.84 ( 0.02 ) 0.00 NaN 0.91 1.0 6.00 1.84
41 50 500 0.5 10 0.00 0.95 ( 0.04 )1 ( 0 ) 6 ( 0 ) 2.04 ( 0.02 ) 0.00 NaN 0.95 1.0 6.00 2.04
45 50 1000 0.5 20 0.00 0.94 ( 0.04 )1 ( 0 ) 6 ( 0 ) 2.04 ( 0.02 ) 0.00 NaN 0.94 1.0 6.00 2.04
49 50 50 0.7 1 0.00 0.66 ( 0.03 )1 ( 0 ) 6 ( 0 ) 1.44 ( 0.01 ) 0.00 NaN 0.66 1.0 6.00 1.44
53 50 100 0.7 2 0.00 0.67 ( 0.03 )1 ( 0 ) 6 ( 0 ) 1.5 ( 0.02 ) 0.00 NaN 0.67 1.0 6.00 1.50
57 50 500 0.7 10 0.00 0.7 ( 0.03 ) 1 ( 0 ) 6 ( 0 ) 1.68 ( 0.02 ) 0.00 NaN 0.70 1.0 6.00 1.68
61 50 1000 0.7 20 0.00 0.74 ( 0.03 )1 ( 0 ) 6 ( 0 ) 1.69 ( 0.02 ) 0.00 NaN 0.74 1.0 6.00 1.69
65 50 50 0.9 1 0.00 0.27 ( 0.01 )1 ( 0 ) 6 ( 0 ) 0.96 ( 0.01 ) 0.00 NaN 0.27 1.0 6.00 0.96
69 50 100 0.9 2 0.00 0.3 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) 1 ( 0.01 ) 0.00 NaN 0.30 1.0 6.00 1.00
73 50 500 0.9 10 0.00 0.29 ( 0.01 )1 ( 0 ) 6 ( 0 ) 1.1 ( 0.01 ) 0.00 NaN 0.29 1.0 6.00 1.10
77 50 1000 0.9 20 0.00 0.29 ( 0.01 )1 ( 0 ) 6 ( 0 ) 1.11 ( 0.01 ) 0.00 NaN 0.29 1.0 6.00 1.11
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & OOB & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean & OOB\\_mean\\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1 & 0.00 & 1.4 ( 0.06 ) & 1 ( 0 ) & 6 ( 0 ) & 1.98 ( 0.02 ) & 0.00 & NaN & 1.40 & 1.0 & 6.00 & 1.98 \\\\\n", + "\t5 & 50 & 100 & 0.1 & 2 & 0.00 & 1.36 ( 0.06 ) & 1 ( 0 ) & 6 ( 0 ) & 2.19 ( 0.02 ) & 0.00 & NaN & 1.36 & 1.0 & 6.00 & 2.19 \\\\\n", + "\t9 & 50 & 500 & 0.1 & 10 & 0.00 & 1.29 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.39 ( 0.02 ) & 0.00 & NaN & 1.29 & 1.0 & 6.00 & 2.39 \\\\\n", + "\t13 & 50 & 1000 & 0.1 & 20 & 0.00 & 1.35 ( 0.06 ) & 1 ( 0 ) & 6 ( 0 ) & 2.42 ( 0.02 ) & 0.00 & NaN & 1.35 & 1.0 & 6.00 & 2.42 \\\\\n", + "\t14 & 100 & 1000 & 0.1 & 10 & 0.01 & 1 ( 0.03 ) & 49.42 ( 0.7 ) & 4.71 ( 0.09 ) & 2.39 ( 0.02 ) & 50.71 & 0.97 & 1.00 & 49.4 & 4.71 & 2.39 \\\\\n", + "\t17 & 50 & 50 & 0.3 & 1 & 0.00 & 1.22 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 1.87 ( 0.02 ) & 0.00 & NaN & 1.22 & 1.0 & 6.00 & 1.87 \\\\\n", + "\t21 & 50 & 100 & 0.3 & 2 & 0.00 & 1.15 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.03 ( 0.02 ) & 0.00 & NaN & 1.15 & 1.0 & 6.00 & 2.03 \\\\\n", + "\t25 & 50 & 500 & 0.3 & 10 & 0.00 & 1.14 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.24 ( 0.02 ) & 0.00 & NaN & 1.14 & 1.0 & 6.00 & 2.24 \\\\\n", + "\t29 & 50 & 1000 & 0.3 & 20 & 0.00 & 1.2 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.29 ( 0.02 ) & 0.00 & NaN & 1.20 & 1.0 & 6.00 & 2.29 \\\\\n", + "\t33 & 50 & 50 & 0.5 & 1 & 0.00 & 0.99 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 1.68 ( 0.02 ) & 0.00 & NaN & 0.99 & 1.0 & 6.00 & 1.68 \\\\\n", + "\t37 & 50 & 100 & 0.5 & 2 & 0.00 & 0.91 ( 0.04 ) & 1 ( 0 ) & 6 ( 0 ) & 1.84 ( 0.02 ) & 0.00 & NaN & 0.91 & 1.0 & 6.00 & 1.84 \\\\\n", + "\t41 & 50 & 500 & 0.5 & 10 & 0.00 & 0.95 ( 0.04 ) & 1 ( 0 ) & 6 ( 0 ) & 2.04 ( 0.02 ) & 0.00 & NaN & 0.95 & 1.0 & 6.00 & 2.04 \\\\\n", + "\t45 & 50 & 1000 & 0.5 & 20 & 0.00 & 0.94 ( 0.04 ) & 1 ( 0 ) & 6 ( 0 ) & 2.04 ( 0.02 ) & 0.00 & NaN & 0.94 & 1.0 & 6.00 & 2.04 \\\\\n", + "\t49 & 50 & 50 & 0.7 & 1 & 0.00 & 0.66 ( 0.03 ) & 1 ( 0 ) & 6 ( 0 ) & 1.44 ( 0.01 ) & 0.00 & NaN & 0.66 & 1.0 & 6.00 & 1.44 \\\\\n", + "\t53 & 50 & 100 & 0.7 & 2 & 0.00 & 0.67 ( 0.03 ) & 1 ( 0 ) & 6 ( 0 ) & 1.5 ( 0.02 ) & 0.00 & NaN & 0.67 & 1.0 & 6.00 & 1.50 \\\\\n", + "\t57 & 50 & 500 & 0.7 & 10 & 0.00 & 0.7 ( 0.03 ) & 1 ( 0 ) & 6 ( 0 ) & 1.68 ( 0.02 ) & 0.00 & NaN & 0.70 & 1.0 & 6.00 & 1.68 \\\\\n", + "\t61 & 50 & 1000 & 0.7 & 20 & 0.00 & 0.74 ( 0.03 ) & 1 ( 0 ) & 6 ( 0 ) & 1.69 ( 0.02 ) & 0.00 & NaN & 0.74 & 1.0 & 6.00 & 1.69 \\\\\n", + "\t65 & 50 & 50 & 0.9 & 1 & 0.00 & 0.27 ( 0.01 ) & 1 ( 0 ) & 6 ( 0 ) & 0.96 ( 0.01 ) & 0.00 & NaN & 0.27 & 1.0 & 6.00 & 0.96 \\\\\n", + "\t69 & 50 & 100 & 0.9 & 2 & 0.00 & 0.3 ( 0.01 ) & 1 ( 0 ) & 6 ( 0 ) & 1 ( 0.01 ) & 0.00 & NaN & 0.30 & 1.0 & 6.00 & 1.00 \\\\\n", + "\t73 & 50 & 500 & 0.9 & 10 & 0.00 & 0.29 ( 0.01 ) & 1 ( 0 ) & 6 ( 0 ) & 1.1 ( 0.01 ) & 0.00 & NaN & 0.29 & 1.0 & 6.00 & 1.10 \\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20 & 0.00 & 0.29 ( 0.01 ) & 1 ( 0 ) & 6 ( 0 ) & 1.11 ( 0.01 ) & 0.00 & NaN & 0.29 & 1.0 & 6.00 & 1.11 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | OOB | num_select | FDR | MSE_mean | FP_mean | FN_mean | OOB_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1 | 0.00 | 1.4 ( 0.06 ) | 1 ( 0 ) | 6 ( 0 ) | 1.98 ( 0.02 ) | 0.00 | NaN | 1.40 | 1.0 | 6.00 | 1.98 |\n", + "| 5 | 50 | 100 | 0.1 | 2 | 0.00 | 1.36 ( 0.06 ) | 1 ( 0 ) | 6 ( 0 ) | 2.19 ( 0.02 ) | 0.00 | NaN | 1.36 | 1.0 | 6.00 | 2.19 |\n", + "| 9 | 50 | 500 | 0.1 | 10 | 0.00 | 1.29 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.39 ( 0.02 ) | 0.00 | NaN | 1.29 | 1.0 | 6.00 | 2.39 |\n", + "| 13 | 50 | 1000 | 0.1 | 20 | 0.00 | 1.35 ( 0.06 ) | 1 ( 0 ) | 6 ( 0 ) | 2.42 ( 0.02 ) | 0.00 | NaN | 1.35 | 1.0 | 6.00 | 2.42 |\n", + "| 14 | 100 | 1000 | 0.1 | 10 | 0.01 | 1 ( 0.03 ) | 49.42 ( 0.7 ) | 4.71 ( 0.09 ) | 2.39 ( 0.02 ) | 50.71 | 0.97 | 1.00 | 49.4 | 4.71 | 2.39 |\n", + "| 17 | 50 | 50 | 0.3 | 1 | 0.00 | 1.22 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 1.87 ( 0.02 ) | 0.00 | NaN | 1.22 | 1.0 | 6.00 | 1.87 |\n", + "| 21 | 50 | 100 | 0.3 | 2 | 0.00 | 1.15 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.03 ( 0.02 ) | 0.00 | NaN | 1.15 | 1.0 | 6.00 | 2.03 |\n", + "| 25 | 50 | 500 | 0.3 | 10 | 0.00 | 1.14 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.24 ( 0.02 ) | 0.00 | NaN | 1.14 | 1.0 | 6.00 | 2.24 |\n", + "| 29 | 50 | 1000 | 0.3 | 20 | 0.00 | 1.2 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.29 ( 0.02 ) | 0.00 | NaN | 1.20 | 1.0 | 6.00 | 2.29 |\n", + "| 33 | 50 | 50 | 0.5 | 1 | 0.00 | 0.99 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 1.68 ( 0.02 ) | 0.00 | NaN | 0.99 | 1.0 | 6.00 | 1.68 |\n", + "| 37 | 50 | 100 | 0.5 | 2 | 0.00 | 0.91 ( 0.04 ) | 1 ( 0 ) | 6 ( 0 ) | 1.84 ( 0.02 ) | 0.00 | NaN | 0.91 | 1.0 | 6.00 | 1.84 |\n", + "| 41 | 50 | 500 | 0.5 | 10 | 0.00 | 0.95 ( 0.04 ) | 1 ( 0 ) | 6 ( 0 ) | 2.04 ( 0.02 ) | 0.00 | NaN | 0.95 | 1.0 | 6.00 | 2.04 |\n", + "| 45 | 50 | 1000 | 0.5 | 20 | 0.00 | 0.94 ( 0.04 ) | 1 ( 0 ) | 6 ( 0 ) | 2.04 ( 0.02 ) | 0.00 | NaN | 0.94 | 1.0 | 6.00 | 2.04 |\n", + "| 49 | 50 | 50 | 0.7 | 1 | 0.00 | 0.66 ( 0.03 ) | 1 ( 0 ) | 6 ( 0 ) | 1.44 ( 0.01 ) | 0.00 | NaN | 0.66 | 1.0 | 6.00 | 1.44 |\n", + "| 53 | 50 | 100 | 0.7 | 2 | 0.00 | 0.67 ( 0.03 ) | 1 ( 0 ) | 6 ( 0 ) | 1.5 ( 0.02 ) | 0.00 | NaN | 0.67 | 1.0 | 6.00 | 1.50 |\n", + "| 57 | 50 | 500 | 0.7 | 10 | 0.00 | 0.7 ( 0.03 ) | 1 ( 0 ) | 6 ( 0 ) | 1.68 ( 0.02 ) | 0.00 | NaN | 0.70 | 1.0 | 6.00 | 1.68 |\n", + "| 61 | 50 | 1000 | 0.7 | 20 | 0.00 | 0.74 ( 0.03 ) | 1 ( 0 ) | 6 ( 0 ) | 1.69 ( 0.02 ) | 0.00 | NaN | 0.74 | 1.0 | 6.00 | 1.69 |\n", + "| 65 | 50 | 50 | 0.9 | 1 | 0.00 | 0.27 ( 0.01 ) | 1 ( 0 ) | 6 ( 0 ) | 0.96 ( 0.01 ) | 0.00 | NaN | 0.27 | 1.0 | 6.00 | 0.96 |\n", + "| 69 | 50 | 100 | 0.9 | 2 | 0.00 | 0.3 ( 0.01 ) | 1 ( 0 ) | 6 ( 0 ) | 1 ( 0.01 ) | 0.00 | NaN | 0.30 | 1.0 | 6.00 | 1.00 |\n", + "| 73 | 50 | 500 | 0.9 | 10 | 0.00 | 0.29 ( 0.01 ) | 1 ( 0 ) | 6 ( 0 ) | 1.1 ( 0.01 ) | 0.00 | NaN | 0.29 | 1.0 | 6.00 | 1.10 |\n", + "| 77 | 50 | 1000 | 0.9 | 20 | 0.00 | 0.29 ( 0.01 ) | 1 ( 0 ) | 6 ( 0 ) | 1.11 ( 0.01 ) | 0.00 | NaN | 0.29 | 1.0 | 6.00 | 1.11 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN \n", + "1 50 50 0.1 1 0.00 1.4 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) \n", + "5 50 100 0.1 2 0.00 1.36 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) \n", + "9 50 500 0.1 10 0.00 1.29 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "13 50 1000 0.1 20 0.00 1.35 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) \n", + "14 100 1000 0.1 10 0.01 1 ( 0.03 ) 49.42 ( 0.7 ) 4.71 ( 0.09 )\n", + "17 50 50 0.3 1 0.00 1.22 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "21 50 100 0.3 2 0.00 1.15 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "25 50 500 0.3 10 0.00 1.14 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "29 50 1000 0.3 20 0.00 1.2 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "33 50 50 0.5 1 0.00 0.99 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "37 50 100 0.5 2 0.00 0.91 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) \n", + "41 50 500 0.5 10 0.00 0.95 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) \n", + "45 50 1000 0.5 20 0.00 0.94 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) \n", + "49 50 50 0.7 1 0.00 0.66 ( 0.03 ) 1 ( 0 ) 6 ( 0 ) \n", + "53 50 100 0.7 2 0.00 0.67 ( 0.03 ) 1 ( 0 ) 6 ( 0 ) \n", + "57 50 500 0.7 10 0.00 0.7 ( 0.03 ) 1 ( 0 ) 6 ( 0 ) \n", + "61 50 1000 0.7 20 0.00 0.74 ( 0.03 ) 1 ( 0 ) 6 ( 0 ) \n", + "65 50 50 0.9 1 0.00 0.27 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) \n", + "69 50 100 0.9 2 0.00 0.3 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) \n", + "73 50 500 0.9 10 0.00 0.29 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) \n", + "77 50 1000 0.9 20 0.00 0.29 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) \n", + " OOB num_select FDR MSE_mean FP_mean FN_mean OOB_mean\n", + "1 1.98 ( 0.02 ) 0.00 NaN 1.40 1.0 6.00 1.98 \n", + "5 2.19 ( 0.02 ) 0.00 NaN 1.36 1.0 6.00 2.19 \n", + "9 2.39 ( 0.02 ) 0.00 NaN 1.29 1.0 6.00 2.39 \n", + "13 2.42 ( 0.02 ) 0.00 NaN 1.35 1.0 6.00 2.42 \n", + "14 2.39 ( 0.02 ) 50.71 0.97 1.00 49.4 4.71 2.39 \n", + "17 1.87 ( 0.02 ) 0.00 NaN 1.22 1.0 6.00 1.87 \n", + "21 2.03 ( 0.02 ) 0.00 NaN 1.15 1.0 6.00 2.03 \n", + "25 2.24 ( 0.02 ) 0.00 NaN 1.14 1.0 6.00 2.24 \n", + "29 2.29 ( 0.02 ) 0.00 NaN 1.20 1.0 6.00 2.29 \n", + "33 1.68 ( 0.02 ) 0.00 NaN 0.99 1.0 6.00 1.68 \n", + "37 1.84 ( 0.02 ) 0.00 NaN 0.91 1.0 6.00 1.84 \n", + "41 2.04 ( 0.02 ) 0.00 NaN 0.95 1.0 6.00 2.04 \n", + "45 2.04 ( 0.02 ) 0.00 NaN 0.94 1.0 6.00 2.04 \n", + "49 1.44 ( 0.01 ) 0.00 NaN 0.66 1.0 6.00 1.44 \n", + "53 1.5 ( 0.02 ) 0.00 NaN 0.67 1.0 6.00 1.50 \n", + "57 1.68 ( 0.02 ) 0.00 NaN 0.70 1.0 6.00 1.68 \n", + "61 1.69 ( 0.02 ) 0.00 NaN 0.74 1.0 6.00 1.69 \n", + "65 0.96 ( 0.01 ) 0.00 NaN 0.27 1.0 6.00 0.96 \n", + "69 1 ( 0.01 ) 0.00 NaN 0.30 1.0 6.00 1.00 \n", + "73 1.1 ( 0.01 ) 0.00 NaN 0.29 1.0 6.00 1.10 \n", + "77 1.11 ( 0.01 ) 0.00 NaN 0.29 1.0 6.00 1.11 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_toe[c(1,5,9,13,14,17,21,25,29,33,37,41,45,49,53,57,61,65,69,73,77), ]" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNOOBnum_selectFDRMSE_meanFP_meanFN_meanOOB_mean
50 50 0.1 1.00 0.00 1.4 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) 1.98 ( 0.02 )0.00 NaN 1.40 1.00 6.00 1.98
100 50 0.1 0.50 0.19 0.86 ( 0.03 )1.87 ( 0.14 )4.25 ( 0.09 )1.76 ( 0.01 )3.62 0.48 0.86 1.87 4.25 1.76
500 50 0.1 0.10 0.77 0.44 ( 0.01 )0.32 ( 0.05 )1.81 ( 0.07 )1.29 ( 0 ) 4.51 0.06 0.44 0.32 1.81 1.29
1000 50 0.1 0.05 0.86 0.34 ( 0 ) 0.15 ( 0.04 )0.93 ( 0.07 )1.15 ( 0 ) 5.22 0.02 0.34 0.15 0.93 1.15
50 100 0.1 2.00 0.00 1.36 ( 0.06 )1 ( 0 ) 6 ( 0 ) 2.19 ( 0.02 )0.00 NaN 1.36 1.00 6.00 2.19
100 100 0.1 1.00 0.12 0.93 ( 0.03 )4.11 ( 0.18 )4.17 ( 0.1 ) 1.99 ( 0.01 )5.93 0.68 0.93 4.11 4.17 1.99
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllllll}\n", + " N & P & Corr & Ratio & Stab & MSE & FP & FN & OOB & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean & OOB\\_mean\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0.1 & 1.00 & 0.00 & 1.4 ( 0.06 ) & 1 ( 0 ) & 6 ( 0 ) & 1.98 ( 0.02 ) & 0.00 & NaN & 1.40 & 1.00 & 6.00 & 1.98 \\\\\n", + "\t 100 & 50 & 0.1 & 0.50 & 0.19 & 0.86 ( 0.03 ) & 1.87 ( 0.14 ) & 4.25 ( 0.09 ) & 1.76 ( 0.01 ) & 3.62 & 0.48 & 0.86 & 1.87 & 4.25 & 1.76 \\\\\n", + "\t 500 & 50 & 0.1 & 0.10 & 0.77 & 0.44 ( 0.01 ) & 0.32 ( 0.05 ) & 1.81 ( 0.07 ) & 1.29 ( 0 ) & 4.51 & 0.06 & 0.44 & 0.32 & 1.81 & 1.29 \\\\\n", + "\t 1000 & 50 & 0.1 & 0.05 & 0.86 & 0.34 ( 0 ) & 0.15 ( 0.04 ) & 0.93 ( 0.07 ) & 1.15 ( 0 ) & 5.22 & 0.02 & 0.34 & 0.15 & 0.93 & 1.15 \\\\\n", + "\t 50 & 100 & 0.1 & 2.00 & 0.00 & 1.36 ( 0.06 ) & 1 ( 0 ) & 6 ( 0 ) & 2.19 ( 0.02 ) & 0.00 & NaN & 1.36 & 1.00 & 6.00 & 2.19 \\\\\n", + "\t 100 & 100 & 0.1 & 1.00 & 0.12 & 0.93 ( 0.03 ) & 4.11 ( 0.18 ) & 4.17 ( 0.1 ) & 1.99 ( 0.01 ) & 5.93 & 0.68 & 0.93 & 4.11 & 4.17 & 1.99 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| N | P | Corr | Ratio | Stab | MSE | FP | FN | OOB | num_select | FDR | MSE_mean | FP_mean | FN_mean | OOB_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0.1 | 1.00 | 0.00 | 1.4 ( 0.06 ) | 1 ( 0 ) | 6 ( 0 ) | 1.98 ( 0.02 ) | 0.00 | NaN | 1.40 | 1.00 | 6.00 | 1.98 |\n", + "| 100 | 50 | 0.1 | 0.50 | 0.19 | 0.86 ( 0.03 ) | 1.87 ( 0.14 ) | 4.25 ( 0.09 ) | 1.76 ( 0.01 ) | 3.62 | 0.48 | 0.86 | 1.87 | 4.25 | 1.76 |\n", + "| 500 | 50 | 0.1 | 0.10 | 0.77 | 0.44 ( 0.01 ) | 0.32 ( 0.05 ) | 1.81 ( 0.07 ) | 1.29 ( 0 ) | 4.51 | 0.06 | 0.44 | 0.32 | 1.81 | 1.29 |\n", + "| 1000 | 50 | 0.1 | 0.05 | 0.86 | 0.34 ( 0 ) | 0.15 ( 0.04 ) | 0.93 ( 0.07 ) | 1.15 ( 0 ) | 5.22 | 0.02 | 0.34 | 0.15 | 0.93 | 1.15 |\n", + "| 50 | 100 | 0.1 | 2.00 | 0.00 | 1.36 ( 0.06 ) | 1 ( 0 ) | 6 ( 0 ) | 2.19 ( 0.02 ) | 0.00 | NaN | 1.36 | 1.00 | 6.00 | 2.19 |\n", + "| 100 | 100 | 0.1 | 1.00 | 0.12 | 0.93 ( 0.03 ) | 4.11 ( 0.18 ) | 4.17 ( 0.1 ) | 1.99 ( 0.01 ) | 5.93 | 0.68 | 0.93 | 4.11 | 4.17 | 1.99 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN \n", + "1 50 50 0.1 1.00 0.00 1.4 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) \n", + "2 100 50 0.1 0.50 0.19 0.86 ( 0.03 ) 1.87 ( 0.14 ) 4.25 ( 0.09 )\n", + "3 500 50 0.1 0.10 0.77 0.44 ( 0.01 ) 0.32 ( 0.05 ) 1.81 ( 0.07 )\n", + "4 1000 50 0.1 0.05 0.86 0.34 ( 0 ) 0.15 ( 0.04 ) 0.93 ( 0.07 )\n", + "5 50 100 0.1 2.00 0.00 1.36 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) \n", + "6 100 100 0.1 1.00 0.12 0.93 ( 0.03 ) 4.11 ( 0.18 ) 4.17 ( 0.1 ) \n", + " OOB num_select FDR MSE_mean FP_mean FN_mean OOB_mean\n", + "1 1.98 ( 0.02 ) 0.00 NaN 1.40 1.00 6.00 1.98 \n", + "2 1.76 ( 0.01 ) 3.62 0.48 0.86 1.87 4.25 1.76 \n", + "3 1.29 ( 0 ) 4.51 0.06 0.44 0.32 1.81 1.29 \n", + "4 1.15 ( 0 ) 5.22 0.02 0.34 0.15 0.93 1.15 \n", + "5 2.19 ( 0.02 ) 0.00 NaN 1.36 1.00 6.00 2.19 \n", + "6 1.99 ( 0.01 ) 5.93 0.68 0.93 4.11 4.17 1.99 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNOOBnum_selectFDRMSE_meanFP_meanFN_meanOOB_mean
75 500 500 0.9 1.0 0.14 0.17 ( 0 ) 21.38 ( 0.6 ) 3 ( 0.07 ) 0.99 ( 0 ) 24.38 0.87 0.17 21.3 0.00 0.99
761000 500 0.9 0.5 0.20 0.16 ( 0 ) 18.68 ( 0.53 )2.35 ( 0.06 ) 0.96 ( 0 ) 22.33 0.83 0.16 18.6 2.35 0.96
77 50 1000 0.9 20.0 0.00 0.29 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) 1.11 ( 0.01 ) 0.00 NaN 0.29 1.0 6.00 1.11
78 100 1000 0.9 10.0 0.01 0.2 ( 0.01 ) 49.91 ( 0.83 )4.99 ( 0.09 ) 1.09 ( 0.01 ) 50.92 0.98 0.20 49.9 4.99 1.09
79 500 1000 0.9 2.0 0.06 0.19 ( 0 ) 46.34 ( 0.86 )3.13 ( 0.08 ) 1.04 ( 0 ) 49.21 0.94 0.19 46.3 3.13 1.04
801000 1000 0.9 1.0 0.09 0.18 ( 0 ) 43.52 ( 0.89 )2.7 ( 0.07 ) 1.02 ( 0 ) 46.82 0.93 0.18 43.5 2.70 1.02
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & OOB & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean & OOB\\_mean\\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 1.0 & 0.14 & 0.17 ( 0 ) & 21.38 ( 0.6 ) & 3 ( 0.07 ) & 0.99 ( 0 ) & 24.38 & 0.87 & 0.17 & 21.3 & 0.00 & 0.99 \\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.5 & 0.20 & 0.16 ( 0 ) & 18.68 ( 0.53 ) & 2.35 ( 0.06 ) & 0.96 ( 0 ) & 22.33 & 0.83 & 0.16 & 18.6 & 2.35 & 0.96 \\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.0 & 0.00 & 0.29 ( 0.01 ) & 1 ( 0 ) & 6 ( 0 ) & 1.11 ( 0.01 ) & 0.00 & NaN & 0.29 & 1.0 & 6.00 & 1.11 \\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.0 & 0.01 & 0.2 ( 0.01 ) & 49.91 ( 0.83 ) & 4.99 ( 0.09 ) & 1.09 ( 0.01 ) & 50.92 & 0.98 & 0.20 & 49.9 & 4.99 & 1.09 \\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.0 & 0.06 & 0.19 ( 0 ) & 46.34 ( 0.86 ) & 3.13 ( 0.08 ) & 1.04 ( 0 ) & 49.21 & 0.94 & 0.19 & 46.3 & 3.13 & 1.04 \\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.0 & 0.09 & 0.18 ( 0 ) & 43.52 ( 0.89 ) & 2.7 ( 0.07 ) & 1.02 ( 0 ) & 46.82 & 0.93 & 0.18 & 43.5 & 2.70 & 1.02 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | OOB | num_select | FDR | MSE_mean | FP_mean | FN_mean | OOB_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 1.0 | 0.14 | 0.17 ( 0 ) | 21.38 ( 0.6 ) | 3 ( 0.07 ) | 0.99 ( 0 ) | 24.38 | 0.87 | 0.17 | 21.3 | 0.00 | 0.99 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.5 | 0.20 | 0.16 ( 0 ) | 18.68 ( 0.53 ) | 2.35 ( 0.06 ) | 0.96 ( 0 ) | 22.33 | 0.83 | 0.16 | 18.6 | 2.35 | 0.96 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.0 | 0.00 | 0.29 ( 0.01 ) | 1 ( 0 ) | 6 ( 0 ) | 1.11 ( 0.01 ) | 0.00 | NaN | 0.29 | 1.0 | 6.00 | 1.11 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.0 | 0.01 | 0.2 ( 0.01 ) | 49.91 ( 0.83 ) | 4.99 ( 0.09 ) | 1.09 ( 0.01 ) | 50.92 | 0.98 | 0.20 | 49.9 | 4.99 | 1.09 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.0 | 0.06 | 0.19 ( 0 ) | 46.34 ( 0.86 ) | 3.13 ( 0.08 ) | 1.04 ( 0 ) | 49.21 | 0.94 | 0.19 | 46.3 | 3.13 | 1.04 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.0 | 0.09 | 0.18 ( 0 ) | 43.52 ( 0.89 ) | 2.7 ( 0.07 ) | 1.02 ( 0 ) | 46.82 | 0.93 | 0.18 | 43.5 | 2.70 | 1.02 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN \n", + "75 500 500 0.9 1.0 0.14 0.17 ( 0 ) 21.38 ( 0.6 ) 3 ( 0.07 ) \n", + "76 1000 500 0.9 0.5 0.20 0.16 ( 0 ) 18.68 ( 0.53 ) 2.35 ( 0.06 )\n", + "77 50 1000 0.9 20.0 0.00 0.29 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) \n", + "78 100 1000 0.9 10.0 0.01 0.2 ( 0.01 ) 49.91 ( 0.83 ) 4.99 ( 0.09 )\n", + "79 500 1000 0.9 2.0 0.06 0.19 ( 0 ) 46.34 ( 0.86 ) 3.13 ( 0.08 )\n", + "80 1000 1000 0.9 1.0 0.09 0.18 ( 0 ) 43.52 ( 0.89 ) 2.7 ( 0.07 ) \n", + " OOB num_select FDR MSE_mean FP_mean FN_mean OOB_mean\n", + "75 0.99 ( 0 ) 24.38 0.87 0.17 21.3 0.00 0.99 \n", + "76 0.96 ( 0 ) 22.33 0.83 0.16 18.6 2.35 0.96 \n", + "77 1.11 ( 0.01 ) 0.00 NaN 0.29 1.0 6.00 1.11 \n", + "78 1.09 ( 0.01 ) 50.92 0.98 0.20 49.9 4.99 1.09 \n", + "79 1.04 ( 0 ) 49.21 0.94 0.19 46.3 3.13 1.04 \n", + "80 1.02 ( 0 ) 46.82 0.93 0.18 43.5 2.70 1.02 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "## export\n", + "write.table(result.table_toe, '../results_summary_cts/sim_toe_rf.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_cts/.ipynb_checkpoints/1.4_sim_toe_compLasso_cts-checkpoint.ipynb b/simulations/notebooks_sim_cts/.ipynb_checkpoints/1.4_sim_toe_compLasso_cts-checkpoint.ipynb new file mode 100755 index 0000000..a071ca2 --- /dev/null +++ b/simulations/notebooks_sim_cts/.ipynb_checkpoints/1.4_sim_toe_compLasso_cts-checkpoint.ipynb @@ -0,0 +1,421 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize compositional lasso results on Toeplitz Simulation Scenarios for continuous outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'\n", + "\n", + "load(paste0(dir, '/toe_compLasso.RData'))" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "rou.list = seq(0.1, 0.9, 0.2)\n", + "\n", + "files = NULL\n", + "for (rou in rou.list){\n", + " for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_toeplitz_corr', rou, paste('P', p, 'N', n, sep='_'), '.RData', sep=''))\n", + " }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "avg_FDR = NULL\n", + "for (i in 1:length(files)){\n", + " sim_file = files[i]\n", + " load(sim_file, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_toe_compLasso[[i]]$Stab.table\n", + " \n", + " FDR = NULL\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "table_toe = NULL\n", + "tmp_num_select = rep(0, length(results_toe_compLasso))\n", + "for (i in 1:length(results_toe_compLasso)){\n", + " table_toe = rbind(table_toe, results_toe_compLasso[[i]][c('n', 'p', 'rou', 'FP', 'FN', 'MSE', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_toe_compLasso[[i]]$Stab.table))\n", + " \n", + "}\n", + "table_toe = as.data.frame(table_toe)\n", + "table_toe$num_select = tmp_num_select\n", + "table_toe$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
nprouFPFNMSEStabnum_selectFDR
50 50 0.1 3.68 ( 0.29 )0.06 ( 0.03 )0.88 ( 0.05 )0.56 9.62 0.33
100 50 0.1 1.51 ( 0.35 )0 ( 0 ) 0.87 ( 0.05 )0.77 7.51 0.12
500 50 0.1 0.73 ( 0.19 )0 ( 0 ) 0.99 ( 0.05 )0.88 6.73 0.07
1000 50 0.1 0.55 ( 0.17 )0 ( 0 ) 1.09 ( 0.04 )0.9 6.55 0.05
50 100 0.1 4.24 ( 0.3 ) 0.23 ( 0.06 )1.12 ( 0.1 ) 0.53 10.01 0.37
100 100 0.1 1.51 ( 0.34 )0 ( 0 ) 0.85 ( 0.04 )0.79 7.51 0.13
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllll}\n", + " n & p & rou & FP & FN & MSE & Stab & num\\_select & FDR\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0.1 & 3.68 ( 0.29 ) & 0.06 ( 0.03 ) & 0.88 ( 0.05 ) & 0.56 & 9.62 & 0.33 \\\\\n", + "\t 100 & 50 & 0.1 & 1.51 ( 0.35 ) & 0 ( 0 ) & 0.87 ( 0.05 ) & 0.77 & 7.51 & 0.12 \\\\\n", + "\t 500 & 50 & 0.1 & 0.73 ( 0.19 ) & 0 ( 0 ) & 0.99 ( 0.05 ) & 0.88 & 6.73 & 0.07 \\\\\n", + "\t 1000 & 50 & 0.1 & 0.55 ( 0.17 ) & 0 ( 0 ) & 1.09 ( 0.04 ) & 0.9 & 6.55 & 0.05 \\\\\n", + "\t 50 & 100 & 0.1 & 4.24 ( 0.3 ) & 0.23 ( 0.06 ) & 1.12 ( 0.1 ) & 0.53 & 10.01 & 0.37 \\\\\n", + "\t 100 & 100 & 0.1 & 1.51 ( 0.34 ) & 0 ( 0 ) & 0.85 ( 0.04 ) & 0.79 & 7.51 & 0.13 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| n | p | rou | FP | FN | MSE | Stab | num_select | FDR |\n", + "|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0.1 | 3.68 ( 0.29 ) | 0.06 ( 0.03 ) | 0.88 ( 0.05 ) | 0.56 | 9.62 | 0.33 |\n", + "| 100 | 50 | 0.1 | 1.51 ( 0.35 ) | 0 ( 0 ) | 0.87 ( 0.05 ) | 0.77 | 7.51 | 0.12 |\n", + "| 500 | 50 | 0.1 | 0.73 ( 0.19 ) | 0 ( 0 ) | 0.99 ( 0.05 ) | 0.88 | 6.73 | 0.07 |\n", + "| 1000 | 50 | 0.1 | 0.55 ( 0.17 ) | 0 ( 0 ) | 1.09 ( 0.04 ) | 0.9 | 6.55 | 0.05 |\n", + "| 50 | 100 | 0.1 | 4.24 ( 0.3 ) | 0.23 ( 0.06 ) | 1.12 ( 0.1 ) | 0.53 | 10.01 | 0.37 |\n", + "| 100 | 100 | 0.1 | 1.51 ( 0.34 ) | 0 ( 0 ) | 0.85 ( 0.04 ) | 0.79 | 7.51 | 0.13 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN MSE Stab num_select FDR \n", + "1 50 50 0.1 3.68 ( 0.29 ) 0.06 ( 0.03 ) 0.88 ( 0.05 ) 0.56 9.62 0.33\n", + "2 100 50 0.1 1.51 ( 0.35 ) 0 ( 0 ) 0.87 ( 0.05 ) 0.77 7.51 0.12\n", + "3 500 50 0.1 0.73 ( 0.19 ) 0 ( 0 ) 0.99 ( 0.05 ) 0.88 6.73 0.07\n", + "4 1000 50 0.1 0.55 ( 0.17 ) 0 ( 0 ) 1.09 ( 0.04 ) 0.9 6.55 0.05\n", + "5 50 100 0.1 4.24 ( 0.3 ) 0.23 ( 0.06 ) 1.12 ( 0.1 ) 0.53 10.01 0.37\n", + "6 100 100 0.1 1.51 ( 0.34 ) 0 ( 0 ) 0.85 ( 0.04 ) 0.79 7.51 0.13" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_toe <- apply(table_toe,2,as.character)\n", + "rownames(result.table_toe) = rownames(table_toe)\n", + "result.table_toe = as.data.frame(result.table_toe)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_toe$n = tidyr::extract_numeric(result.table_toe$n)\n", + "result.table_toe$p = tidyr::extract_numeric(result.table_toe$p)\n", + "result.table_toe$ratio = result.table_toe$p / result.table_toe$n\n", + "\n", + "result.table_toe = result.table_toe[c('n', 'p', 'rou', 'ratio', 'Stab', 'MSE', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_toe)[1:4] = c('N', 'P', 'Corr', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”" + ] + } + ], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_toe$Stab = as.numeric(as.character(result.table_toe$Stab))\n", + "result.table_toe$MSE_mean = as.numeric(substr(result.table_toe$MSE, start=1, stop=4))\n", + "result.table_toe$FP_mean = as.numeric(substr(result.table_toe$FP, start=1, stop=4))\n", + "result.table_toe$FN_mean = as.numeric(substr(result.table_toe$FN, start=1, stop=4))\n", + "result.table_toe$FN_mean[is.na(result.table_toe$FN_mean)] = 0\n", + "result.table_toe$num_select = as.numeric(as.character(result.table_toe$num_select))" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN num_select FDR MSE_mean FP_mean FN_mean" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check whether missing values exists\n", + "result.table_toe[rowSums(is.na(result.table_toe)) > 0,]" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
50 50 0.1 1.00 0.56 0.88 ( 0.05 )3.68 ( 0.29 )0.06 ( 0.03 ) 9.62 0.33 0.88 3.68 0.06
100 50 0.1 0.50 0.77 0.87 ( 0.05 )1.51 ( 0.35 )0 ( 0 ) 7.51 0.12 0.87 1.51 0.00
500 50 0.1 0.10 0.88 0.99 ( 0.05 )0.73 ( 0.19 )0 ( 0 ) 6.73 0.07 0.99 0.73 0.00
1000 50 0.1 0.05 0.90 1.09 ( 0.04 )0.55 ( 0.17 )0 ( 0 ) 6.55 0.05 1.09 0.55 0.00
50 100 0.1 2.00 0.53 1.12 ( 0.1 ) 4.24 ( 0.3 ) 0.23 ( 0.06 )10.01 0.37 1.12 4.24 0.23
100 100 0.1 1.00 0.79 0.85 ( 0.04 )1.51 ( 0.34 )0 ( 0 ) 7.51 0.13 0.85 1.51 0.00
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0.1 & 1.00 & 0.56 & 0.88 ( 0.05 ) & 3.68 ( 0.29 ) & 0.06 ( 0.03 ) & 9.62 & 0.33 & 0.88 & 3.68 & 0.06 \\\\\n", + "\t 100 & 50 & 0.1 & 0.50 & 0.77 & 0.87 ( 0.05 ) & 1.51 ( 0.35 ) & 0 ( 0 ) & 7.51 & 0.12 & 0.87 & 1.51 & 0.00 \\\\\n", + "\t 500 & 50 & 0.1 & 0.10 & 0.88 & 0.99 ( 0.05 ) & 0.73 ( 0.19 ) & 0 ( 0 ) & 6.73 & 0.07 & 0.99 & 0.73 & 0.00 \\\\\n", + "\t 1000 & 50 & 0.1 & 0.05 & 0.90 & 1.09 ( 0.04 ) & 0.55 ( 0.17 ) & 0 ( 0 ) & 6.55 & 0.05 & 1.09 & 0.55 & 0.00 \\\\\n", + "\t 50 & 100 & 0.1 & 2.00 & 0.53 & 1.12 ( 0.1 ) & 4.24 ( 0.3 ) & 0.23 ( 0.06 ) & 10.01 & 0.37 & 1.12 & 4.24 & 0.23 \\\\\n", + "\t 100 & 100 & 0.1 & 1.00 & 0.79 & 0.85 ( 0.04 ) & 1.51 ( 0.34 ) & 0 ( 0 ) & 7.51 & 0.13 & 0.85 & 1.51 & 0.00 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0.1 | 1.00 | 0.56 | 0.88 ( 0.05 ) | 3.68 ( 0.29 ) | 0.06 ( 0.03 ) | 9.62 | 0.33 | 0.88 | 3.68 | 0.06 |\n", + "| 100 | 50 | 0.1 | 0.50 | 0.77 | 0.87 ( 0.05 ) | 1.51 ( 0.35 ) | 0 ( 0 ) | 7.51 | 0.12 | 0.87 | 1.51 | 0.00 |\n", + "| 500 | 50 | 0.1 | 0.10 | 0.88 | 0.99 ( 0.05 ) | 0.73 ( 0.19 ) | 0 ( 0 ) | 6.73 | 0.07 | 0.99 | 0.73 | 0.00 |\n", + "| 1000 | 50 | 0.1 | 0.05 | 0.90 | 1.09 ( 0.04 ) | 0.55 ( 0.17 ) | 0 ( 0 ) | 6.55 | 0.05 | 1.09 | 0.55 | 0.00 |\n", + "| 50 | 100 | 0.1 | 2.00 | 0.53 | 1.12 ( 0.1 ) | 4.24 ( 0.3 ) | 0.23 ( 0.06 ) | 10.01 | 0.37 | 1.12 | 4.24 | 0.23 |\n", + "| 100 | 100 | 0.1 | 1.00 | 0.79 | 0.85 ( 0.04 ) | 1.51 ( 0.34 ) | 0 ( 0 ) | 7.51 | 0.13 | 0.85 | 1.51 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN num_select\n", + "1 50 50 0.1 1.00 0.56 0.88 ( 0.05 ) 3.68 ( 0.29 ) 0.06 ( 0.03 ) 9.62 \n", + "2 100 50 0.1 0.50 0.77 0.87 ( 0.05 ) 1.51 ( 0.35 ) 0 ( 0 ) 7.51 \n", + "3 500 50 0.1 0.10 0.88 0.99 ( 0.05 ) 0.73 ( 0.19 ) 0 ( 0 ) 6.73 \n", + "4 1000 50 0.1 0.05 0.90 1.09 ( 0.04 ) 0.55 ( 0.17 ) 0 ( 0 ) 6.55 \n", + "5 50 100 0.1 2.00 0.53 1.12 ( 0.1 ) 4.24 ( 0.3 ) 0.23 ( 0.06 ) 10.01 \n", + "6 100 100 0.1 1.00 0.79 0.85 ( 0.04 ) 1.51 ( 0.34 ) 0 ( 0 ) 7.51 \n", + " FDR MSE_mean FP_mean FN_mean\n", + "1 0.33 0.88 3.68 0.06 \n", + "2 0.12 0.87 1.51 0.00 \n", + "3 0.07 0.99 0.73 0.00 \n", + "4 0.05 1.09 0.55 0.00 \n", + "5 0.37 1.12 4.24 0.23 \n", + "6 0.13 0.85 1.51 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
75 500 500 0.9 1.0 0.41 0.34 ( 0.01 ) 8.17 ( 0.48 ) 0.17 ( 0.04 ) 14.00 0.54 0.34 8.17 0.17
761000 500 0.9 0.5 0.58 0.32 ( 0 ) 4.24 ( 0.3 ) 0.01 ( 0.01 ) 10.23 0.37 0.32 4.24 0.01
77 50 1000 0.9 20.0 0.19 1.04 ( 0.06 ) 5.24 ( 0.46 ) 4.23 ( 0.08 ) 7.01 0.6 1.04 5.24 4.23
78 100 1000 0.9 10.0 0.22 0.67 ( 0.02 ) 9.03 ( 0.73 ) 3.02 ( 0.07 ) 12.01 0.66 0.67 9.03 3.02
79 500 1000 0.9 2.0 0.34 0.35 ( 0.01 ) 10.52 ( 0.68 )0.32 ( 0.05 ) 16.20 0.59 0.35 10.50 0.32
801000 1000 0.9 1.0 0.57 0.33 ( 0 ) 4.48 ( 0.3 ) 0.01 ( 0.01 ) 10.47 0.39 0.33 4.48 0.01
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 1.0 & 0.41 & 0.34 ( 0.01 ) & 8.17 ( 0.48 ) & 0.17 ( 0.04 ) & 14.00 & 0.54 & 0.34 & 8.17 & 0.17 \\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.5 & 0.58 & 0.32 ( 0 ) & 4.24 ( 0.3 ) & 0.01 ( 0.01 ) & 10.23 & 0.37 & 0.32 & 4.24 & 0.01 \\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.0 & 0.19 & 1.04 ( 0.06 ) & 5.24 ( 0.46 ) & 4.23 ( 0.08 ) & 7.01 & 0.6 & 1.04 & 5.24 & 4.23 \\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.0 & 0.22 & 0.67 ( 0.02 ) & 9.03 ( 0.73 ) & 3.02 ( 0.07 ) & 12.01 & 0.66 & 0.67 & 9.03 & 3.02 \\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.0 & 0.34 & 0.35 ( 0.01 ) & 10.52 ( 0.68 ) & 0.32 ( 0.05 ) & 16.20 & 0.59 & 0.35 & 10.50 & 0.32 \\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.0 & 0.57 & 0.33 ( 0 ) & 4.48 ( 0.3 ) & 0.01 ( 0.01 ) & 10.47 & 0.39 & 0.33 & 4.48 & 0.01 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 1.0 | 0.41 | 0.34 ( 0.01 ) | 8.17 ( 0.48 ) | 0.17 ( 0.04 ) | 14.00 | 0.54 | 0.34 | 8.17 | 0.17 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.5 | 0.58 | 0.32 ( 0 ) | 4.24 ( 0.3 ) | 0.01 ( 0.01 ) | 10.23 | 0.37 | 0.32 | 4.24 | 0.01 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.0 | 0.19 | 1.04 ( 0.06 ) | 5.24 ( 0.46 ) | 4.23 ( 0.08 ) | 7.01 | 0.6 | 1.04 | 5.24 | 4.23 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.0 | 0.22 | 0.67 ( 0.02 ) | 9.03 ( 0.73 ) | 3.02 ( 0.07 ) | 12.01 | 0.66 | 0.67 | 9.03 | 3.02 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.0 | 0.34 | 0.35 ( 0.01 ) | 10.52 ( 0.68 ) | 0.32 ( 0.05 ) | 16.20 | 0.59 | 0.35 | 10.50 | 0.32 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.0 | 0.57 | 0.33 ( 0 ) | 4.48 ( 0.3 ) | 0.01 ( 0.01 ) | 10.47 | 0.39 | 0.33 | 4.48 | 0.01 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN \n", + "75 500 500 0.9 1.0 0.41 0.34 ( 0.01 ) 8.17 ( 0.48 ) 0.17 ( 0.04 )\n", + "76 1000 500 0.9 0.5 0.58 0.32 ( 0 ) 4.24 ( 0.3 ) 0.01 ( 0.01 )\n", + "77 50 1000 0.9 20.0 0.19 1.04 ( 0.06 ) 5.24 ( 0.46 ) 4.23 ( 0.08 )\n", + "78 100 1000 0.9 10.0 0.22 0.67 ( 0.02 ) 9.03 ( 0.73 ) 3.02 ( 0.07 )\n", + "79 500 1000 0.9 2.0 0.34 0.35 ( 0.01 ) 10.52 ( 0.68 ) 0.32 ( 0.05 )\n", + "80 1000 1000 0.9 1.0 0.57 0.33 ( 0 ) 4.48 ( 0.3 ) 0.01 ( 0.01 )\n", + " num_select FDR MSE_mean FP_mean FN_mean\n", + "75 14.00 0.54 0.34 8.17 0.17 \n", + "76 10.23 0.37 0.32 4.24 0.01 \n", + "77 7.01 0.6 1.04 5.24 4.23 \n", + "78 12.01 0.66 0.67 9.03 3.02 \n", + "79 16.20 0.59 0.35 10.50 0.32 \n", + "80 10.47 0.39 0.33 4.48 0.01 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "## export\n", + "write.table(result.table_toe, '../results_summary_cts/sim_toe_compLasso.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_cts/.ipynb_checkpoints/2.1_sim_block_lasso_cts-checkpoint.ipynb b/simulations/notebooks_sim_cts/.ipynb_checkpoints/2.1_sim_block_lasso_cts-checkpoint.ipynb new file mode 100755 index 0000000..427211a --- /dev/null +++ b/simulations/notebooks_sim_cts/.ipynb_checkpoints/2.1_sim_block_lasso_cts-checkpoint.ipynb @@ -0,0 +1,482 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize lasso results on Block Simulation Scenarios for continuous outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'\n", + "\n", + "load(paste0(dir, '/block_Lasso.RData'))" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "rou.list = seq(0.1, 0.9, 0.2)\n", + "\n", + "files = NULL\n", + "for (rou in rou.list){\n", + " for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_block_corr', rou, paste('P', p, 'N', n, sep='_'), '.RData', sep=''))\n", + " }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "avg_FDR = NULL\n", + "for (i in 1:length(files)){\n", + " sim_file = files[i]\n", + " load(sim_file, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_block_lasso[[i]]$Stab.table\n", + " \n", + " FDR = NULL\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "table_block = NULL\n", + "tmp_num_select = rep(0, length(results_block_lasso))\n", + "for (i in 1:length(results_block_lasso)){\n", + " table_block = rbind(table_block, results_block_lasso[[i]][c('n', 'p', 'rou', 'FP', 'FN', 'MSE', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_block_lasso[[i]]$Stab.table))\n", + " \n", + "}\n", + "table_block = as.data.frame(table_block)\n", + "table_block$num_select = tmp_num_select\n", + "table_block$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
nprouFPFNMSEStabnum_selectFDR
50 50 0.1 3.52 ( 0.22 )4.92 ( 0.08 )0.36 ( 0.01 )0.05 3.60 0.65
100 50 0.1 2.71 ( 0.25 )4.4 ( 0.1 ) 0.31 ( 0.01 )0.18 3.31 0.42
500 50 0.1 5.42 ( 0.25 )1.97 ( 0.11 )0.29 ( 0 ) 0.35 8.45 0.48
1000 50 0.1 4.91 ( 0.2 ) 1.57 ( 0.09 )0.28 ( 0 ) 0.44 8.34 0.44
50 100 0.1 4.73 ( 0.22 )4.79 ( 0.08 )0.37 ( 0.02 )0.06 4.94 0.72
100 100 0.1 3 ( 0.15 ) 4.75 ( 0.09 )0.34 ( 0.01 )0.13 3.25 0.57
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllll}\n", + " n & p & rou & FP & FN & MSE & Stab & num\\_select & FDR\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0.1 & 3.52 ( 0.22 ) & 4.92 ( 0.08 ) & 0.36 ( 0.01 ) & 0.05 & 3.60 & 0.65 \\\\\n", + "\t 100 & 50 & 0.1 & 2.71 ( 0.25 ) & 4.4 ( 0.1 ) & 0.31 ( 0.01 ) & 0.18 & 3.31 & 0.42 \\\\\n", + "\t 500 & 50 & 0.1 & 5.42 ( 0.25 ) & 1.97 ( 0.11 ) & 0.29 ( 0 ) & 0.35 & 8.45 & 0.48 \\\\\n", + "\t 1000 & 50 & 0.1 & 4.91 ( 0.2 ) & 1.57 ( 0.09 ) & 0.28 ( 0 ) & 0.44 & 8.34 & 0.44 \\\\\n", + "\t 50 & 100 & 0.1 & 4.73 ( 0.22 ) & 4.79 ( 0.08 ) & 0.37 ( 0.02 ) & 0.06 & 4.94 & 0.72 \\\\\n", + "\t 100 & 100 & 0.1 & 3 ( 0.15 ) & 4.75 ( 0.09 ) & 0.34 ( 0.01 ) & 0.13 & 3.25 & 0.57 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| n | p | rou | FP | FN | MSE | Stab | num_select | FDR |\n", + "|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0.1 | 3.52 ( 0.22 ) | 4.92 ( 0.08 ) | 0.36 ( 0.01 ) | 0.05 | 3.60 | 0.65 |\n", + "| 100 | 50 | 0.1 | 2.71 ( 0.25 ) | 4.4 ( 0.1 ) | 0.31 ( 0.01 ) | 0.18 | 3.31 | 0.42 |\n", + "| 500 | 50 | 0.1 | 5.42 ( 0.25 ) | 1.97 ( 0.11 ) | 0.29 ( 0 ) | 0.35 | 8.45 | 0.48 |\n", + "| 1000 | 50 | 0.1 | 4.91 ( 0.2 ) | 1.57 ( 0.09 ) | 0.28 ( 0 ) | 0.44 | 8.34 | 0.44 |\n", + "| 50 | 100 | 0.1 | 4.73 ( 0.22 ) | 4.79 ( 0.08 ) | 0.37 ( 0.02 ) | 0.06 | 4.94 | 0.72 |\n", + "| 100 | 100 | 0.1 | 3 ( 0.15 ) | 4.75 ( 0.09 ) | 0.34 ( 0.01 ) | 0.13 | 3.25 | 0.57 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN MSE Stab num_select FDR \n", + "1 50 50 0.1 3.52 ( 0.22 ) 4.92 ( 0.08 ) 0.36 ( 0.01 ) 0.05 3.60 0.65\n", + "2 100 50 0.1 2.71 ( 0.25 ) 4.4 ( 0.1 ) 0.31 ( 0.01 ) 0.18 3.31 0.42\n", + "3 500 50 0.1 5.42 ( 0.25 ) 1.97 ( 0.11 ) 0.29 ( 0 ) 0.35 8.45 0.48\n", + "4 1000 50 0.1 4.91 ( 0.2 ) 1.57 ( 0.09 ) 0.28 ( 0 ) 0.44 8.34 0.44\n", + "5 50 100 0.1 4.73 ( 0.22 ) 4.79 ( 0.08 ) 0.37 ( 0.02 ) 0.06 4.94 0.72\n", + "6 100 100 0.1 3 ( 0.15 ) 4.75 ( 0.09 ) 0.34 ( 0.01 ) 0.13 3.25 0.57" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_block <- apply(table_block,2,as.character)\n", + "rownames(result.table_block) = rownames(table_block)\n", + "result.table_block = as.data.frame(result.table_block)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_block$n = tidyr::extract_numeric(result.table_block$n)\n", + "result.table_block$p = tidyr::extract_numeric(result.table_block$p)\n", + "result.table_block$ratio = result.table_block$p / result.table_block$n\n", + "\n", + "result.table_block = result.table_block[c('n', 'p', 'rou', 'ratio', 'Stab', 'MSE', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_block)[1:4] = c('N', 'P', 'Corr', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”" + ] + } + ], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_block$Stab = as.numeric(as.character(result.table_block$Stab))\n", + "result.table_block$MSE_mean = as.numeric(substr(result.table_block$MSE, start=1, stop=4))\n", + "result.table_block$FP_mean = as.numeric(substr(result.table_block$FP, start=1, stop=4))\n", + "result.table_block$FN_mean = as.numeric(substr(result.table_block$FN, start=1, stop=4))\n", + "result.table_block$FN_mean[is.na(result.table_block$FN_mean)] = 0\n", + "result.table_block$num_select = as.numeric(as.character(result.table_block$num_select))" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
6100 100 0.1 1 0.13 0.34 ( 0.01 )3 ( 0.15 ) 4.75 ( 0.09 )3.25 0.57 0.34 NA 4.75
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t6 & 100 & 100 & 0.1 & 1 & 0.13 & 0.34 ( 0.01 ) & 3 ( 0.15 ) & 4.75 ( 0.09 ) & 3.25 & 0.57 & 0.34 & NA & 4.75 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 6 | 100 | 100 | 0.1 | 1 | 0.13 | 0.34 ( 0.01 ) | 3 ( 0.15 ) | 4.75 ( 0.09 ) | 3.25 | 0.57 | 0.34 | NA | 4.75 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN num_select\n", + "6 100 100 0.1 1 0.13 0.34 ( 0.01 ) 3 ( 0.15 ) 4.75 ( 0.09 ) 3.25 \n", + " FDR MSE_mean FP_mean FN_mean\n", + "6 0.57 0.34 NA 4.75 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check whether missing values exists\n", + "result.table_block[rowSums(is.na(result.table_block)) > 0,]" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "# recover values\n", + "result.table_block$FP_mean[is.na(result.table_block$FP_mean)] = 3" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
6100 100 0.1 1 0.13 0.34 ( 0.01 )3 ( 0.15 ) 4.75 ( 0.09 )3.25 0.57 0.34 3 4.75
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t6 & 100 & 100 & 0.1 & 1 & 0.13 & 0.34 ( 0.01 ) & 3 ( 0.15 ) & 4.75 ( 0.09 ) & 3.25 & 0.57 & 0.34 & 3 & 4.75 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 6 | 100 | 100 | 0.1 | 1 | 0.13 | 0.34 ( 0.01 ) | 3 ( 0.15 ) | 4.75 ( 0.09 ) | 3.25 | 0.57 | 0.34 | 3 | 4.75 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN num_select\n", + "6 100 100 0.1 1 0.13 0.34 ( 0.01 ) 3 ( 0.15 ) 4.75 ( 0.09 ) 3.25 \n", + " FDR MSE_mean FP_mean FN_mean\n", + "6 0.57 0.34 3 4.75 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_block[6, ]" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
50 50 0.1 1.00 0.05 0.36 ( 0.01 )3.52 ( 0.22 )4.92 ( 0.08 )3.60 0.65 0.36 3.52 4.92
100 50 0.1 0.50 0.18 0.31 ( 0.01 )2.71 ( 0.25 )4.4 ( 0.1 ) 3.31 0.42 0.31 2.71 4.40
500 50 0.1 0.10 0.35 0.29 ( 0 ) 5.42 ( 0.25 )1.97 ( 0.11 )8.45 0.48 0.29 5.42 1.97
1000 50 0.1 0.05 0.44 0.28 ( 0 ) 4.91 ( 0.2 ) 1.57 ( 0.09 )8.34 0.44 0.28 4.91 1.57
50 100 0.1 2.00 0.06 0.37 ( 0.02 )4.73 ( 0.22 )4.79 ( 0.08 )4.94 0.72 0.37 4.73 4.79
100 100 0.1 1.00 0.13 0.34 ( 0.01 )3 ( 0.15 ) 4.75 ( 0.09 )3.25 0.57 0.34 3.00 4.75
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0.1 & 1.00 & 0.05 & 0.36 ( 0.01 ) & 3.52 ( 0.22 ) & 4.92 ( 0.08 ) & 3.60 & 0.65 & 0.36 & 3.52 & 4.92 \\\\\n", + "\t 100 & 50 & 0.1 & 0.50 & 0.18 & 0.31 ( 0.01 ) & 2.71 ( 0.25 ) & 4.4 ( 0.1 ) & 3.31 & 0.42 & 0.31 & 2.71 & 4.40 \\\\\n", + "\t 500 & 50 & 0.1 & 0.10 & 0.35 & 0.29 ( 0 ) & 5.42 ( 0.25 ) & 1.97 ( 0.11 ) & 8.45 & 0.48 & 0.29 & 5.42 & 1.97 \\\\\n", + "\t 1000 & 50 & 0.1 & 0.05 & 0.44 & 0.28 ( 0 ) & 4.91 ( 0.2 ) & 1.57 ( 0.09 ) & 8.34 & 0.44 & 0.28 & 4.91 & 1.57 \\\\\n", + "\t 50 & 100 & 0.1 & 2.00 & 0.06 & 0.37 ( 0.02 ) & 4.73 ( 0.22 ) & 4.79 ( 0.08 ) & 4.94 & 0.72 & 0.37 & 4.73 & 4.79 \\\\\n", + "\t 100 & 100 & 0.1 & 1.00 & 0.13 & 0.34 ( 0.01 ) & 3 ( 0.15 ) & 4.75 ( 0.09 ) & 3.25 & 0.57 & 0.34 & 3.00 & 4.75 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0.1 | 1.00 | 0.05 | 0.36 ( 0.01 ) | 3.52 ( 0.22 ) | 4.92 ( 0.08 ) | 3.60 | 0.65 | 0.36 | 3.52 | 4.92 |\n", + "| 100 | 50 | 0.1 | 0.50 | 0.18 | 0.31 ( 0.01 ) | 2.71 ( 0.25 ) | 4.4 ( 0.1 ) | 3.31 | 0.42 | 0.31 | 2.71 | 4.40 |\n", + "| 500 | 50 | 0.1 | 0.10 | 0.35 | 0.29 ( 0 ) | 5.42 ( 0.25 ) | 1.97 ( 0.11 ) | 8.45 | 0.48 | 0.29 | 5.42 | 1.97 |\n", + "| 1000 | 50 | 0.1 | 0.05 | 0.44 | 0.28 ( 0 ) | 4.91 ( 0.2 ) | 1.57 ( 0.09 ) | 8.34 | 0.44 | 0.28 | 4.91 | 1.57 |\n", + "| 50 | 100 | 0.1 | 2.00 | 0.06 | 0.37 ( 0.02 ) | 4.73 ( 0.22 ) | 4.79 ( 0.08 ) | 4.94 | 0.72 | 0.37 | 4.73 | 4.79 |\n", + "| 100 | 100 | 0.1 | 1.00 | 0.13 | 0.34 ( 0.01 ) | 3 ( 0.15 ) | 4.75 ( 0.09 ) | 3.25 | 0.57 | 0.34 | 3.00 | 4.75 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN num_select\n", + "1 50 50 0.1 1.00 0.05 0.36 ( 0.01 ) 3.52 ( 0.22 ) 4.92 ( 0.08 ) 3.60 \n", + "2 100 50 0.1 0.50 0.18 0.31 ( 0.01 ) 2.71 ( 0.25 ) 4.4 ( 0.1 ) 3.31 \n", + "3 500 50 0.1 0.10 0.35 0.29 ( 0 ) 5.42 ( 0.25 ) 1.97 ( 0.11 ) 8.45 \n", + "4 1000 50 0.1 0.05 0.44 0.28 ( 0 ) 4.91 ( 0.2 ) 1.57 ( 0.09 ) 8.34 \n", + "5 50 100 0.1 2.00 0.06 0.37 ( 0.02 ) 4.73 ( 0.22 ) 4.79 ( 0.08 ) 4.94 \n", + "6 100 100 0.1 1.00 0.13 0.34 ( 0.01 ) 3 ( 0.15 ) 4.75 ( 0.09 ) 3.25 \n", + " FDR MSE_mean FP_mean FN_mean\n", + "1 0.65 0.36 3.52 4.92 \n", + "2 0.42 0.31 2.71 4.40 \n", + "3 0.48 0.29 5.42 1.97 \n", + "4 0.44 0.28 4.91 1.57 \n", + "5 0.72 0.37 4.73 4.79 \n", + "6 0.57 0.34 3.00 4.75 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
75 500 500 0.9 1.0 0.50 0.29 ( 0 ) 6.87 ( 0.54 ) 0 ( 0 ) 11.87 0.41 0.29 6.87 0.00
761000 500 0.9 0.5 0.71 0.27 ( 0 ) 3.37 ( 0.27 ) 0 ( 0 ) 8.37 0.23 0.27 3.37 0.00
77 50 1000 0.9 20.0 0.11 2.46 ( 0.16 ) 25.37 ( 0.35 )1.73 ( 0.12 ) 28.64 0.85 2.46 25.30 1.73
78 100 1000 0.9 10.0 0.22 0.62 ( 0.03 ) 21.43 ( 0.62 )0 ( 0 ) 26.43 0.76 0.62 21.40 0.00
79 500 1000 0.9 2.0 0.46 0.3 ( 0 ) 7.99 ( 0.79 ) 0 ( 0 ) 12.99 0.42 0.30 7.99 0.00
801000 1000 0.9 1.0 0.60 0.28 ( 0 ) 4.93 ( 0.43 ) 0 ( 0 ) 9.93 0.31 0.28 4.93 0.00
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 1.0 & 0.50 & 0.29 ( 0 ) & 6.87 ( 0.54 ) & 0 ( 0 ) & 11.87 & 0.41 & 0.29 & 6.87 & 0.00 \\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.5 & 0.71 & 0.27 ( 0 ) & 3.37 ( 0.27 ) & 0 ( 0 ) & 8.37 & 0.23 & 0.27 & 3.37 & 0.00 \\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.0 & 0.11 & 2.46 ( 0.16 ) & 25.37 ( 0.35 ) & 1.73 ( 0.12 ) & 28.64 & 0.85 & 2.46 & 25.30 & 1.73 \\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.0 & 0.22 & 0.62 ( 0.03 ) & 21.43 ( 0.62 ) & 0 ( 0 ) & 26.43 & 0.76 & 0.62 & 21.40 & 0.00 \\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.0 & 0.46 & 0.3 ( 0 ) & 7.99 ( 0.79 ) & 0 ( 0 ) & 12.99 & 0.42 & 0.30 & 7.99 & 0.00 \\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.0 & 0.60 & 0.28 ( 0 ) & 4.93 ( 0.43 ) & 0 ( 0 ) & 9.93 & 0.31 & 0.28 & 4.93 & 0.00 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 1.0 | 0.50 | 0.29 ( 0 ) | 6.87 ( 0.54 ) | 0 ( 0 ) | 11.87 | 0.41 | 0.29 | 6.87 | 0.00 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.5 | 0.71 | 0.27 ( 0 ) | 3.37 ( 0.27 ) | 0 ( 0 ) | 8.37 | 0.23 | 0.27 | 3.37 | 0.00 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.0 | 0.11 | 2.46 ( 0.16 ) | 25.37 ( 0.35 ) | 1.73 ( 0.12 ) | 28.64 | 0.85 | 2.46 | 25.30 | 1.73 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.0 | 0.22 | 0.62 ( 0.03 ) | 21.43 ( 0.62 ) | 0 ( 0 ) | 26.43 | 0.76 | 0.62 | 21.40 | 0.00 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.0 | 0.46 | 0.3 ( 0 ) | 7.99 ( 0.79 ) | 0 ( 0 ) | 12.99 | 0.42 | 0.30 | 7.99 | 0.00 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.0 | 0.60 | 0.28 ( 0 ) | 4.93 ( 0.43 ) | 0 ( 0 ) | 9.93 | 0.31 | 0.28 | 4.93 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN \n", + "75 500 500 0.9 1.0 0.50 0.29 ( 0 ) 6.87 ( 0.54 ) 0 ( 0 ) \n", + "76 1000 500 0.9 0.5 0.71 0.27 ( 0 ) 3.37 ( 0.27 ) 0 ( 0 ) \n", + "77 50 1000 0.9 20.0 0.11 2.46 ( 0.16 ) 25.37 ( 0.35 ) 1.73 ( 0.12 )\n", + "78 100 1000 0.9 10.0 0.22 0.62 ( 0.03 ) 21.43 ( 0.62 ) 0 ( 0 ) \n", + "79 500 1000 0.9 2.0 0.46 0.3 ( 0 ) 7.99 ( 0.79 ) 0 ( 0 ) \n", + "80 1000 1000 0.9 1.0 0.60 0.28 ( 0 ) 4.93 ( 0.43 ) 0 ( 0 ) \n", + " num_select FDR MSE_mean FP_mean FN_mean\n", + "75 11.87 0.41 0.29 6.87 0.00 \n", + "76 8.37 0.23 0.27 3.37 0.00 \n", + "77 28.64 0.85 2.46 25.30 1.73 \n", + "78 26.43 0.76 0.62 21.40 0.00 \n", + "79 12.99 0.42 0.30 7.99 0.00 \n", + "80 9.93 0.31 0.28 4.93 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(result.table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "## export\n", + "write.table(result.table_block, '../results_summary_cts/sim_block_lasso.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_cts/.ipynb_checkpoints/2.2_sim_block_elnet_cts-checkpoint.ipynb b/simulations/notebooks_sim_cts/.ipynb_checkpoints/2.2_sim_block_elnet_cts-checkpoint.ipynb new file mode 100755 index 0000000..c718e78 --- /dev/null +++ b/simulations/notebooks_sim_cts/.ipynb_checkpoints/2.2_sim_block_elnet_cts-checkpoint.ipynb @@ -0,0 +1,482 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize elastic net results on Block Simulation Scenarios for continuous outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'\n", + "\n", + "load(paste0(dir, '/block_Elnet.RData'))" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "rou.list = seq(0.1, 0.9, 0.2)\n", + "\n", + "files = NULL\n", + "for (rou in rou.list){\n", + " for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_block_corr', rou, paste('P', p, 'N', n, sep='_'), '.RData', sep=''))\n", + " }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "avg_FDR = NULL\n", + "for (i in 1:length(files)){\n", + " sim_file = files[i]\n", + " load(sim_file, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_block_elnet[[i]]$Stab.table\n", + " \n", + " FDR = NULL\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "table_block = NULL\n", + "tmp_num_select = rep(0, length(results_block_elnet))\n", + "for (i in 1:length(results_block_elnet)){\n", + " table_block = rbind(table_block, results_block_elnet[[i]][c('n', 'p', 'rou', 'FP', 'FN', 'MSE', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_block_elnet[[i]]$Stab.table))\n", + " \n", + "}\n", + "table_block = as.data.frame(table_block)\n", + "table_block$num_select = tmp_num_select\n", + "table_block$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
nprouFPFNMSEStabnum_selectFDR
50 50 0.1 10.9 ( 0.97 )3.91 ( 0.15 )0.38 ( 0.02 )0.02 11.99 0.77
100 50 0.1 13.39 ( 1.06 )2.45 ( 0.16 ) 0.34 ( 0.01 ) 0.06 15.94 0.68
500 50 0.1 19.21 ( 0.81 )0.14 ( 0.04 ) 0.27 ( 0 ) 0.13 24.07 0.73
1000 50 0.1 18.76 ( 0.63 )0.02 ( 0.01 ) 0.26 ( 0 ) 0.15 23.74 0.73
50 100 0.1 9.27 ( 0.76 )4.63 ( 0.09 )0.41 ( 0.02 )0.03 9.64 0.82
100 100 0.1 10.1 ( 1.04 )3.87 ( 0.13 )0.34 ( 0.01 )0.07 11.23 0.70
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllll}\n", + " n & p & rou & FP & FN & MSE & Stab & num\\_select & FDR\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0.1 & 10.9 ( 0.97 ) & 3.91 ( 0.15 ) & 0.38 ( 0.02 ) & 0.02 & 11.99 & 0.77 \\\\\n", + "\t 100 & 50 & 0.1 & 13.39 ( 1.06 ) & 2.45 ( 0.16 ) & 0.34 ( 0.01 ) & 0.06 & 15.94 & 0.68 \\\\\n", + "\t 500 & 50 & 0.1 & 19.21 ( 0.81 ) & 0.14 ( 0.04 ) & 0.27 ( 0 ) & 0.13 & 24.07 & 0.73 \\\\\n", + "\t 1000 & 50 & 0.1 & 18.76 ( 0.63 ) & 0.02 ( 0.01 ) & 0.26 ( 0 ) & 0.15 & 23.74 & 0.73 \\\\\n", + "\t 50 & 100 & 0.1 & 9.27 ( 0.76 ) & 4.63 ( 0.09 ) & 0.41 ( 0.02 ) & 0.03 & 9.64 & 0.82 \\\\\n", + "\t 100 & 100 & 0.1 & 10.1 ( 1.04 ) & 3.87 ( 0.13 ) & 0.34 ( 0.01 ) & 0.07 & 11.23 & 0.70 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| n | p | rou | FP | FN | MSE | Stab | num_select | FDR |\n", + "|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0.1 | 10.9 ( 0.97 ) | 3.91 ( 0.15 ) | 0.38 ( 0.02 ) | 0.02 | 11.99 | 0.77 |\n", + "| 100 | 50 | 0.1 | 13.39 ( 1.06 ) | 2.45 ( 0.16 ) | 0.34 ( 0.01 ) | 0.06 | 15.94 | 0.68 |\n", + "| 500 | 50 | 0.1 | 19.21 ( 0.81 ) | 0.14 ( 0.04 ) | 0.27 ( 0 ) | 0.13 | 24.07 | 0.73 |\n", + "| 1000 | 50 | 0.1 | 18.76 ( 0.63 ) | 0.02 ( 0.01 ) | 0.26 ( 0 ) | 0.15 | 23.74 | 0.73 |\n", + "| 50 | 100 | 0.1 | 9.27 ( 0.76 ) | 4.63 ( 0.09 ) | 0.41 ( 0.02 ) | 0.03 | 9.64 | 0.82 |\n", + "| 100 | 100 | 0.1 | 10.1 ( 1.04 ) | 3.87 ( 0.13 ) | 0.34 ( 0.01 ) | 0.07 | 11.23 | 0.70 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN MSE Stab num_select FDR \n", + "1 50 50 0.1 10.9 ( 0.97 ) 3.91 ( 0.15 ) 0.38 ( 0.02 ) 0.02 11.99 0.77\n", + "2 100 50 0.1 13.39 ( 1.06 ) 2.45 ( 0.16 ) 0.34 ( 0.01 ) 0.06 15.94 0.68\n", + "3 500 50 0.1 19.21 ( 0.81 ) 0.14 ( 0.04 ) 0.27 ( 0 ) 0.13 24.07 0.73\n", + "4 1000 50 0.1 18.76 ( 0.63 ) 0.02 ( 0.01 ) 0.26 ( 0 ) 0.15 23.74 0.73\n", + "5 50 100 0.1 9.27 ( 0.76 ) 4.63 ( 0.09 ) 0.41 ( 0.02 ) 0.03 9.64 0.82\n", + "6 100 100 0.1 10.1 ( 1.04 ) 3.87 ( 0.13 ) 0.34 ( 0.01 ) 0.07 11.23 0.70" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_block <- apply(table_block,2,as.character)\n", + "rownames(result.table_block) = rownames(table_block)\n", + "result.table_block = as.data.frame(result.table_block)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_block$n = tidyr::extract_numeric(result.table_block$n)\n", + "result.table_block$p = tidyr::extract_numeric(result.table_block$p)\n", + "result.table_block$ratio = result.table_block$p / result.table_block$n\n", + "\n", + "result.table_block = result.table_block[c('n', 'p', 'rou', 'ratio', 'Stab', 'MSE', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_block)[1:4] = c('N', 'P', 'Corr', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”" + ] + } + ], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_block$Stab = as.numeric(as.character(result.table_block$Stab))\n", + "result.table_block$MSE_mean = as.numeric(substr(result.table_block$MSE, start=1, stop=4))\n", + "result.table_block$FP_mean = as.numeric(substr(result.table_block$FP, start=1, stop=4))\n", + "result.table_block$FN_mean = as.numeric(substr(result.table_block$FN, start=1, stop=4))\n", + "result.table_block$FN_mean[is.na(result.table_block$FN_mean)] = 0\n", + "result.table_block$num_select = as.numeric(as.character(result.table_block$num_select))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
4550 1000 0.5 20 0.04 2 ( 0.1 ) 52.83 ( 3.84 )2.29 ( 0.1 ) 55.54 0.91 NA 52.8 2.29
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t45 & 50 & 1000 & 0.5 & 20 & 0.04 & 2 ( 0.1 ) & 52.83 ( 3.84 ) & 2.29 ( 0.1 ) & 55.54 & 0.91 & NA & 52.8 & 2.29 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 45 | 50 | 1000 | 0.5 | 20 | 0.04 | 2 ( 0.1 ) | 52.83 ( 3.84 ) | 2.29 ( 0.1 ) | 55.54 | 0.91 | NA | 52.8 | 2.29 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN num_select\n", + "45 50 1000 0.5 20 0.04 2 ( 0.1 ) 52.83 ( 3.84 ) 2.29 ( 0.1 ) 55.54 \n", + " FDR MSE_mean FP_mean FN_mean\n", + "45 0.91 NA 52.8 2.29 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check whether missing values exists\n", + "result.table_block[rowSums(is.na(result.table_block)) > 0,]" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "# recover values\n", + "result.table_block$MSE_mean[45] = 2" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
4550 1000 0.5 20 0.04 2 ( 0.1 ) 52.83 ( 3.84 )2.29 ( 0.1 ) 55.54 0.91 2 52.8 2.29
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t45 & 50 & 1000 & 0.5 & 20 & 0.04 & 2 ( 0.1 ) & 52.83 ( 3.84 ) & 2.29 ( 0.1 ) & 55.54 & 0.91 & 2 & 52.8 & 2.29 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 45 | 50 | 1000 | 0.5 | 20 | 0.04 | 2 ( 0.1 ) | 52.83 ( 3.84 ) | 2.29 ( 0.1 ) | 55.54 | 0.91 | 2 | 52.8 | 2.29 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN num_select\n", + "45 50 1000 0.5 20 0.04 2 ( 0.1 ) 52.83 ( 3.84 ) 2.29 ( 0.1 ) 55.54 \n", + " FDR MSE_mean FP_mean FN_mean\n", + "45 0.91 2 52.8 2.29 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_block[45, ]" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
50 50 0.1 1.00 0.02 0.38 ( 0.02 ) 10.9 ( 0.97 ) 3.91 ( 0.15 ) 11.99 0.77 0.38 10.90 3.91
100 50 0.1 0.50 0.06 0.34 ( 0.01 ) 13.39 ( 1.06 )2.45 ( 0.16 ) 15.94 0.68 0.34 13.30 2.45
500 50 0.1 0.10 0.13 0.27 ( 0 ) 19.21 ( 0.81 )0.14 ( 0.04 ) 24.07 0.73 0.27 19.20 0.14
1000 50 0.1 0.05 0.15 0.26 ( 0 ) 18.76 ( 0.63 )0.02 ( 0.01 ) 23.74 0.73 0.26 18.70 0.02
50 100 0.1 2.00 0.03 0.41 ( 0.02 ) 9.27 ( 0.76 ) 4.63 ( 0.09 ) 9.64 0.82 0.41 9.27 4.63
100 100 0.1 1.00 0.07 0.34 ( 0.01 ) 10.1 ( 1.04 ) 3.87 ( 0.13 ) 11.23 0.7 0.34 10.10 3.87
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0.1 & 1.00 & 0.02 & 0.38 ( 0.02 ) & 10.9 ( 0.97 ) & 3.91 ( 0.15 ) & 11.99 & 0.77 & 0.38 & 10.90 & 3.91 \\\\\n", + "\t 100 & 50 & 0.1 & 0.50 & 0.06 & 0.34 ( 0.01 ) & 13.39 ( 1.06 ) & 2.45 ( 0.16 ) & 15.94 & 0.68 & 0.34 & 13.30 & 2.45 \\\\\n", + "\t 500 & 50 & 0.1 & 0.10 & 0.13 & 0.27 ( 0 ) & 19.21 ( 0.81 ) & 0.14 ( 0.04 ) & 24.07 & 0.73 & 0.27 & 19.20 & 0.14 \\\\\n", + "\t 1000 & 50 & 0.1 & 0.05 & 0.15 & 0.26 ( 0 ) & 18.76 ( 0.63 ) & 0.02 ( 0.01 ) & 23.74 & 0.73 & 0.26 & 18.70 & 0.02 \\\\\n", + "\t 50 & 100 & 0.1 & 2.00 & 0.03 & 0.41 ( 0.02 ) & 9.27 ( 0.76 ) & 4.63 ( 0.09 ) & 9.64 & 0.82 & 0.41 & 9.27 & 4.63 \\\\\n", + "\t 100 & 100 & 0.1 & 1.00 & 0.07 & 0.34 ( 0.01 ) & 10.1 ( 1.04 ) & 3.87 ( 0.13 ) & 11.23 & 0.7 & 0.34 & 10.10 & 3.87 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0.1 | 1.00 | 0.02 | 0.38 ( 0.02 ) | 10.9 ( 0.97 ) | 3.91 ( 0.15 ) | 11.99 | 0.77 | 0.38 | 10.90 | 3.91 |\n", + "| 100 | 50 | 0.1 | 0.50 | 0.06 | 0.34 ( 0.01 ) | 13.39 ( 1.06 ) | 2.45 ( 0.16 ) | 15.94 | 0.68 | 0.34 | 13.30 | 2.45 |\n", + "| 500 | 50 | 0.1 | 0.10 | 0.13 | 0.27 ( 0 ) | 19.21 ( 0.81 ) | 0.14 ( 0.04 ) | 24.07 | 0.73 | 0.27 | 19.20 | 0.14 |\n", + "| 1000 | 50 | 0.1 | 0.05 | 0.15 | 0.26 ( 0 ) | 18.76 ( 0.63 ) | 0.02 ( 0.01 ) | 23.74 | 0.73 | 0.26 | 18.70 | 0.02 |\n", + "| 50 | 100 | 0.1 | 2.00 | 0.03 | 0.41 ( 0.02 ) | 9.27 ( 0.76 ) | 4.63 ( 0.09 ) | 9.64 | 0.82 | 0.41 | 9.27 | 4.63 |\n", + "| 100 | 100 | 0.1 | 1.00 | 0.07 | 0.34 ( 0.01 ) | 10.1 ( 1.04 ) | 3.87 ( 0.13 ) | 11.23 | 0.7 | 0.34 | 10.10 | 3.87 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN \n", + "1 50 50 0.1 1.00 0.02 0.38 ( 0.02 ) 10.9 ( 0.97 ) 3.91 ( 0.15 )\n", + "2 100 50 0.1 0.50 0.06 0.34 ( 0.01 ) 13.39 ( 1.06 ) 2.45 ( 0.16 )\n", + "3 500 50 0.1 0.10 0.13 0.27 ( 0 ) 19.21 ( 0.81 ) 0.14 ( 0.04 )\n", + "4 1000 50 0.1 0.05 0.15 0.26 ( 0 ) 18.76 ( 0.63 ) 0.02 ( 0.01 )\n", + "5 50 100 0.1 2.00 0.03 0.41 ( 0.02 ) 9.27 ( 0.76 ) 4.63 ( 0.09 )\n", + "6 100 100 0.1 1.00 0.07 0.34 ( 0.01 ) 10.1 ( 1.04 ) 3.87 ( 0.13 )\n", + " num_select FDR MSE_mean FP_mean FN_mean\n", + "1 11.99 0.77 0.38 10.90 3.91 \n", + "2 15.94 0.68 0.34 13.30 2.45 \n", + "3 24.07 0.73 0.27 19.20 0.14 \n", + "4 23.74 0.73 0.26 18.70 0.02 \n", + "5 9.64 0.82 0.41 9.27 4.63 \n", + "6 11.23 0.7 0.34 10.10 3.87 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
75 500 500 0.9 1.0 0.15 0.28 ( 0 ) 32.6 ( 1.76 ) 0 ( 0 ) 37.60 0.81 0.28 32.6 0.00
761000 500 0.9 0.5 0.16 0.26 ( 0 ) 30.4 ( 1.66 ) 0 ( 0 ) 35.40 0.79 0.26 30.4 0.00
77 50 1000 0.9 20.0 0.07 3.06 ( 0.18 ) 43.09 ( 2.82 )1.57 ( 0.1 ) 46.52 0.88 3.06 43.0 1.57
78 100 1000 0.9 10.0 0.12 0.59 ( 0.03 ) 43.91 ( 1.31 )0 ( 0 ) 48.91 0.87 0.59 43.9 0.00
79 500 1000 0.9 2.0 0.12 0.29 ( 0 ) 41.57 ( 2.28 )0 ( 0 ) 46.57 0.84 0.29 41.5 0.00
801000 1000 0.9 1.0 0.13 0.27 ( 0 ) 38.76 ( 2.16 )0 ( 0 ) 43.76 0.82 0.27 38.7 0.00
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 1.0 & 0.15 & 0.28 ( 0 ) & 32.6 ( 1.76 ) & 0 ( 0 ) & 37.60 & 0.81 & 0.28 & 32.6 & 0.00 \\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.5 & 0.16 & 0.26 ( 0 ) & 30.4 ( 1.66 ) & 0 ( 0 ) & 35.40 & 0.79 & 0.26 & 30.4 & 0.00 \\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.0 & 0.07 & 3.06 ( 0.18 ) & 43.09 ( 2.82 ) & 1.57 ( 0.1 ) & 46.52 & 0.88 & 3.06 & 43.0 & 1.57 \\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.0 & 0.12 & 0.59 ( 0.03 ) & 43.91 ( 1.31 ) & 0 ( 0 ) & 48.91 & 0.87 & 0.59 & 43.9 & 0.00 \\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.0 & 0.12 & 0.29 ( 0 ) & 41.57 ( 2.28 ) & 0 ( 0 ) & 46.57 & 0.84 & 0.29 & 41.5 & 0.00 \\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.0 & 0.13 & 0.27 ( 0 ) & 38.76 ( 2.16 ) & 0 ( 0 ) & 43.76 & 0.82 & 0.27 & 38.7 & 0.00 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 1.0 | 0.15 | 0.28 ( 0 ) | 32.6 ( 1.76 ) | 0 ( 0 ) | 37.60 | 0.81 | 0.28 | 32.6 | 0.00 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.5 | 0.16 | 0.26 ( 0 ) | 30.4 ( 1.66 ) | 0 ( 0 ) | 35.40 | 0.79 | 0.26 | 30.4 | 0.00 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.0 | 0.07 | 3.06 ( 0.18 ) | 43.09 ( 2.82 ) | 1.57 ( 0.1 ) | 46.52 | 0.88 | 3.06 | 43.0 | 1.57 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.0 | 0.12 | 0.59 ( 0.03 ) | 43.91 ( 1.31 ) | 0 ( 0 ) | 48.91 | 0.87 | 0.59 | 43.9 | 0.00 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.0 | 0.12 | 0.29 ( 0 ) | 41.57 ( 2.28 ) | 0 ( 0 ) | 46.57 | 0.84 | 0.29 | 41.5 | 0.00 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.0 | 0.13 | 0.27 ( 0 ) | 38.76 ( 2.16 ) | 0 ( 0 ) | 43.76 | 0.82 | 0.27 | 38.7 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN \n", + "75 500 500 0.9 1.0 0.15 0.28 ( 0 ) 32.6 ( 1.76 ) 0 ( 0 ) \n", + "76 1000 500 0.9 0.5 0.16 0.26 ( 0 ) 30.4 ( 1.66 ) 0 ( 0 ) \n", + "77 50 1000 0.9 20.0 0.07 3.06 ( 0.18 ) 43.09 ( 2.82 ) 1.57 ( 0.1 )\n", + "78 100 1000 0.9 10.0 0.12 0.59 ( 0.03 ) 43.91 ( 1.31 ) 0 ( 0 ) \n", + "79 500 1000 0.9 2.0 0.12 0.29 ( 0 ) 41.57 ( 2.28 ) 0 ( 0 ) \n", + "80 1000 1000 0.9 1.0 0.13 0.27 ( 0 ) 38.76 ( 2.16 ) 0 ( 0 ) \n", + " num_select FDR MSE_mean FP_mean FN_mean\n", + "75 37.60 0.81 0.28 32.6 0.00 \n", + "76 35.40 0.79 0.26 30.4 0.00 \n", + "77 46.52 0.88 3.06 43.0 1.57 \n", + "78 48.91 0.87 0.59 43.9 0.00 \n", + "79 46.57 0.84 0.29 41.5 0.00 \n", + "80 43.76 0.82 0.27 38.7 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(result.table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "## export\n", + "write.table(result.table_block, '../results_summary_cts/sim_block_elnet.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_cts/.ipynb_checkpoints/2.3_sim_block_rf_cts-checkpoint.ipynb b/simulations/notebooks_sim_cts/.ipynb_checkpoints/2.3_sim_block_rf_cts-checkpoint.ipynb new file mode 100755 index 0000000..669d0af --- /dev/null +++ b/simulations/notebooks_sim_cts/.ipynb_checkpoints/2.3_sim_block_rf_cts-checkpoint.ipynb @@ -0,0 +1,690 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize random forests results on Block Simulation Scenarios for continuous outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'\n", + "\n", + "load(paste0(dir, '/block_RF.RData'))" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "rou.list = seq(0.1, 0.9, 0.2)\n", + "\n", + "files = NULL\n", + "for (rou in rou.list){\n", + " for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_block_corr', rou, paste('P', p, 'N', n, sep='_'), '.RData', sep=''))\n", + " }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "avg_FDR = NULL\n", + "for (i in 1:length(files)){\n", + " sim_file = files[i]\n", + " load(sim_file, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_block_rf[[i]]$Stab.table\n", + " \n", + " FDR = NULL\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "table_block = NULL\n", + "tmp_num_select = rep(0, length(results_block_rf))\n", + "for (i in 1:length(results_block_rf)){\n", + " results_block_rf[[i]]$OOB = paste(round(mean(results_block_rf[[i]]$OOB.list, na.rm=T),2),\n", + " '(', round(FSA::se(results_block_rf[[i]]$OOB.list, na.rm=T),2), ')')\n", + " table_block = rbind(table_block, results_block_rf[[i]][c('n', 'p', 'rou', 'FP', 'FN', 'MSE', 'Stab', 'OOB')])\n", + " tmp_num_select[i] = mean(rowSums(results_block_rf[[i]]$Stab.table))\n", + "}\n", + "table_block = as.data.frame(table_block)\n", + "table_block$num_select = tmp_num_select\n", + "table_block$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
nprouFPFNMSEStabOOBnum_selectFDR
50 50 0.1 1 ( 0 ) 6 ( 0 ) 0.08 ( 0 ) NaN 0.59 ( 0.01 )0.00 NaN
100 50 0.1 2.26 ( 0.17 )5.06 ( 0.12 )0.07 ( 0 ) 0.03 0.58 ( 0 ) 3.04 0.70
500 50 0.1 2.34 ( 0.16 )3.77 ( 0.14 )0.05 ( 0 ) 0.23 0.56 ( 0 ) 4.56 0.49
1000 50 0.1 2.37 ( 0.16 )2.54 ( 0.11 )0.05 ( 0 ) 0.51 0.55 ( 0 ) 5.83 0.38
50 100 0.1 1 ( 0 ) 6 ( 0 ) 0.08 ( 0 ) NaN 0.6 ( 0.01 )0.00 NaN
100 100 0.1 4.76 ( 0.27 )5.51 ( 0.09 )0.07 ( 0 ) 0.01 0.58 ( 0 ) 5.24 0.91
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|llllllllll}\n", + " n & p & rou & FP & FN & MSE & Stab & OOB & num\\_select & FDR\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0.1 & 1 ( 0 ) & 6 ( 0 ) & 0.08 ( 0 ) & NaN & 0.59 ( 0.01 ) & 0.00 & NaN \\\\\n", + "\t 100 & 50 & 0.1 & 2.26 ( 0.17 ) & 5.06 ( 0.12 ) & 0.07 ( 0 ) & 0.03 & 0.58 ( 0 ) & 3.04 & 0.70 \\\\\n", + "\t 500 & 50 & 0.1 & 2.34 ( 0.16 ) & 3.77 ( 0.14 ) & 0.05 ( 0 ) & 0.23 & 0.56 ( 0 ) & 4.56 & 0.49 \\\\\n", + "\t 1000 & 50 & 0.1 & 2.37 ( 0.16 ) & 2.54 ( 0.11 ) & 0.05 ( 0 ) & 0.51 & 0.55 ( 0 ) & 5.83 & 0.38 \\\\\n", + "\t 50 & 100 & 0.1 & 1 ( 0 ) & 6 ( 0 ) & 0.08 ( 0 ) & NaN & 0.6 ( 0.01 ) & 0.00 & NaN \\\\\n", + "\t 100 & 100 & 0.1 & 4.76 ( 0.27 ) & 5.51 ( 0.09 ) & 0.07 ( 0 ) & 0.01 & 0.58 ( 0 ) & 5.24 & 0.91 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| n | p | rou | FP | FN | MSE | Stab | OOB | num_select | FDR |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0.1 | 1 ( 0 ) | 6 ( 0 ) | 0.08 ( 0 ) | NaN | 0.59 ( 0.01 ) | 0.00 | NaN |\n", + "| 100 | 50 | 0.1 | 2.26 ( 0.17 ) | 5.06 ( 0.12 ) | 0.07 ( 0 ) | 0.03 | 0.58 ( 0 ) | 3.04 | 0.70 |\n", + "| 500 | 50 | 0.1 | 2.34 ( 0.16 ) | 3.77 ( 0.14 ) | 0.05 ( 0 ) | 0.23 | 0.56 ( 0 ) | 4.56 | 0.49 |\n", + "| 1000 | 50 | 0.1 | 2.37 ( 0.16 ) | 2.54 ( 0.11 ) | 0.05 ( 0 ) | 0.51 | 0.55 ( 0 ) | 5.83 | 0.38 |\n", + "| 50 | 100 | 0.1 | 1 ( 0 ) | 6 ( 0 ) | 0.08 ( 0 ) | NaN | 0.6 ( 0.01 ) | 0.00 | NaN |\n", + "| 100 | 100 | 0.1 | 4.76 ( 0.27 ) | 5.51 ( 0.09 ) | 0.07 ( 0 ) | 0.01 | 0.58 ( 0 ) | 5.24 | 0.91 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN MSE Stab OOB \n", + "1 50 50 0.1 1 ( 0 ) 6 ( 0 ) 0.08 ( 0 ) NaN 0.59 ( 0.01 )\n", + "2 100 50 0.1 2.26 ( 0.17 ) 5.06 ( 0.12 ) 0.07 ( 0 ) 0.03 0.58 ( 0 ) \n", + "3 500 50 0.1 2.34 ( 0.16 ) 3.77 ( 0.14 ) 0.05 ( 0 ) 0.23 0.56 ( 0 ) \n", + "4 1000 50 0.1 2.37 ( 0.16 ) 2.54 ( 0.11 ) 0.05 ( 0 ) 0.51 0.55 ( 0 ) \n", + "5 50 100 0.1 1 ( 0 ) 6 ( 0 ) 0.08 ( 0 ) NaN 0.6 ( 0.01 ) \n", + "6 100 100 0.1 4.76 ( 0.27 ) 5.51 ( 0.09 ) 0.07 ( 0 ) 0.01 0.58 ( 0 ) \n", + " num_select FDR \n", + "1 0.00 NaN\n", + "2 3.04 0.70\n", + "3 4.56 0.49\n", + "4 5.83 0.38\n", + "5 0.00 NaN\n", + "6 5.24 0.91" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_block <- apply(table_block,2,as.character)\n", + "rownames(result.table_block) = rownames(table_block)\n", + "result.table_block = as.data.frame(result.table_block)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_block$n = tidyr::extract_numeric(result.table_block$n)\n", + "result.table_block$p = tidyr::extract_numeric(result.table_block$p)\n", + "result.table_block$ratio = result.table_block$p / result.table_block$n\n", + "\n", + "result.table_block = result.table_block[c('n', 'p', 'rou', 'ratio', 'Stab', 'MSE', 'FP', 'FN', 'OOB', 'num_select', 'FDR')]\n", + "colnames(result.table_block)[1:4] = c('N', 'P', 'Corr', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”" + ] + } + ], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_block$Stab = as.numeric(as.character(result.table_block$Stab))\n", + "result.table_block$MSE_mean = as.numeric(substr(result.table_block$MSE, start=1, stop=4))\n", + "result.table_block$FP_mean = as.numeric(substr(result.table_block$FP, start=1, stop=4))\n", + "result.table_block$FN_mean = as.numeric(substr(result.table_block$FN, start=1, stop=4))\n", + "result.table_block$FN_mean[is.na(result.table_block$FN_mean)] = 0\n", + "result.table_block$OOB_mean = as.numeric(substr(result.table_block$OOB, start=1, stop=4))\n", + "result.table_block$num_select = as.numeric(as.character(result.table_block$num_select))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNOOBnum_selectFDRMSE_meanFP_meanFN_meanOOB_mean
1 50 50 0.1 1 NaN 0.08 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.59 ( 0.01 ) 0.00 NaN 0.08 NA 0.00 0.59
5 50 100 0.1 2 NaN 0.08 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.6 ( 0.01 ) 0.00 NaN 0.08 NA 0.00 0.60
9 50 500 0.1 10 NaN 0.08 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.59 ( 0.01 ) 0.00 NaN 0.08 NA 0.00 0.59
13 50 1000 0.1 20 NaN 0.08 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.59 ( 0.01 ) 0.00 NaN 0.08 NA 0.00 0.59
17 50 50 0.3 1 NaN 0.31 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) 1.14 ( 0.01 ) 0.00 NaN 0.31 NA 0.00 1.14
21 50 100 0.3 2 NaN 0.32 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) 1.2 ( 0.01 ) 0.00 NaN 0.32 NA 0.00 1.20
25 50 500 0.3 10 NaN 0.36 ( 0.02 ) 1 ( 0 ) 6 ( 0 ) 1.23 ( 0.01 ) 0.00 NaN 0.36 NA 0.00 1.23
29 50 1000 0.3 20 NaN 0.34 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) 1.26 ( 0.01 ) 0.00 NaN 0.34 NA 0.00 1.26
33 50 50 0.5 1 NaN 0.6 ( 0.03 ) 1 ( 0 ) 6 ( 0 ) 1.46 ( 0.01 ) 0.00 NaN 0.60 NA 0.00 1.46
37 50 100 0.5 2 NaN 0.6 ( 0.02 ) 1 ( 0 ) 6 ( 0 ) 1.56 ( 0.01 ) 0.00 NaN 0.60 NA 0.00 1.56
41 50 500 0.5 10 NaN 0.58 ( 0.02 ) 1 ( 0 ) 6 ( 0 ) 1.64 ( 0.02 ) 0.00 NaN 0.58 NA 0.00 1.64
45 50 1000 0.5 20 NaN 0.57 ( 0.02 ) 1 ( 0 ) 6 ( 0 ) 1.64 ( 0.02 ) 0.00 NaN 0.57 NA 0.00 1.64
49 50 50 0.7 1 NaN 0.8 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) 1.72 ( 0.02 ) 0.00 NaN 0.80 NA 0.00 1.72
53 50 100 0.7 2 NaN 0.92 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) 1.85 ( 0.02 ) 0.00 NaN 0.92 NA 0.00 1.85
57 50 500 0.7 10 NaN 0.91 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) 2 ( 0.02 ) 0.00 NaN 0.91 NA 0.00 NA
61 50 1000 0.7 20 NaN 0.91 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) 1.98 ( 0.02 ) 0.00 NaN 0.91 NA 0.00 1.98
65 50 50 0.9 1 NaN 1.1 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) 1.99 ( 0.02 ) 0.00 NaN 1.10 NA 0.00 1.99
69 50 100 0.9 2 NaN 1.11 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 2.06 ( 0.02 ) 0.00 NaN 1.11 NA 0.00 2.06
73 50 500 0.9 10 NaN 1.18 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 2.2 ( 0.02 ) 0.00 NaN 1.18 NA 0.00 2.20
75500 500 0.9 1 0.12 0.73 ( 0.01 ) 20.83 ( 0.45 )2.04 ( 0.09 ) 2 ( 0.01 ) 24.79 0.84 0.73 20.8 2.04 NA
77 50 1000 0.9 20 NaN 1.22 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 2.3 ( 0.03 ) 0.00 NaN 1.22 NA 0.00 2.30
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & OOB & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean & OOB\\_mean\\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1 & NaN & 0.08 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.59 ( 0.01 ) & 0.00 & NaN & 0.08 & NA & 0.00 & 0.59 \\\\\n", + "\t5 & 50 & 100 & 0.1 & 2 & NaN & 0.08 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.6 ( 0.01 ) & 0.00 & NaN & 0.08 & NA & 0.00 & 0.60 \\\\\n", + "\t9 & 50 & 500 & 0.1 & 10 & NaN & 0.08 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.59 ( 0.01 ) & 0.00 & NaN & 0.08 & NA & 0.00 & 0.59 \\\\\n", + "\t13 & 50 & 1000 & 0.1 & 20 & NaN & 0.08 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.59 ( 0.01 ) & 0.00 & NaN & 0.08 & NA & 0.00 & 0.59 \\\\\n", + "\t17 & 50 & 50 & 0.3 & 1 & NaN & 0.31 ( 0.01 ) & 1 ( 0 ) & 6 ( 0 ) & 1.14 ( 0.01 ) & 0.00 & NaN & 0.31 & NA & 0.00 & 1.14 \\\\\n", + "\t21 & 50 & 100 & 0.3 & 2 & NaN & 0.32 ( 0.01 ) & 1 ( 0 ) & 6 ( 0 ) & 1.2 ( 0.01 ) & 0.00 & NaN & 0.32 & NA & 0.00 & 1.20 \\\\\n", + "\t25 & 50 & 500 & 0.3 & 10 & NaN & 0.36 ( 0.02 ) & 1 ( 0 ) & 6 ( 0 ) & 1.23 ( 0.01 ) & 0.00 & NaN & 0.36 & NA & 0.00 & 1.23 \\\\\n", + "\t29 & 50 & 1000 & 0.3 & 20 & NaN & 0.34 ( 0.01 ) & 1 ( 0 ) & 6 ( 0 ) & 1.26 ( 0.01 ) & 0.00 & NaN & 0.34 & NA & 0.00 & 1.26 \\\\\n", + "\t33 & 50 & 50 & 0.5 & 1 & NaN & 0.6 ( 0.03 ) & 1 ( 0 ) & 6 ( 0 ) & 1.46 ( 0.01 ) & 0.00 & NaN & 0.60 & NA & 0.00 & 1.46 \\\\\n", + "\t37 & 50 & 100 & 0.5 & 2 & NaN & 0.6 ( 0.02 ) & 1 ( 0 ) & 6 ( 0 ) & 1.56 ( 0.01 ) & 0.00 & NaN & 0.60 & NA & 0.00 & 1.56 \\\\\n", + "\t41 & 50 & 500 & 0.5 & 10 & NaN & 0.58 ( 0.02 ) & 1 ( 0 ) & 6 ( 0 ) & 1.64 ( 0.02 ) & 0.00 & NaN & 0.58 & NA & 0.00 & 1.64 \\\\\n", + "\t45 & 50 & 1000 & 0.5 & 20 & NaN & 0.57 ( 0.02 ) & 1 ( 0 ) & 6 ( 0 ) & 1.64 ( 0.02 ) & 0.00 & NaN & 0.57 & NA & 0.00 & 1.64 \\\\\n", + "\t49 & 50 & 50 & 0.7 & 1 & NaN & 0.8 ( 0.04 ) & 1 ( 0 ) & 6 ( 0 ) & 1.72 ( 0.02 ) & 0.00 & NaN & 0.80 & NA & 0.00 & 1.72 \\\\\n", + "\t53 & 50 & 100 & 0.7 & 2 & NaN & 0.92 ( 0.04 ) & 1 ( 0 ) & 6 ( 0 ) & 1.85 ( 0.02 ) & 0.00 & NaN & 0.92 & NA & 0.00 & 1.85 \\\\\n", + "\t57 & 50 & 500 & 0.7 & 10 & NaN & 0.91 ( 0.04 ) & 1 ( 0 ) & 6 ( 0 ) & 2 ( 0.02 ) & 0.00 & NaN & 0.91 & NA & 0.00 & NA \\\\\n", + "\t61 & 50 & 1000 & 0.7 & 20 & NaN & 0.91 ( 0.04 ) & 1 ( 0 ) & 6 ( 0 ) & 1.98 ( 0.02 ) & 0.00 & NaN & 0.91 & NA & 0.00 & 1.98 \\\\\n", + "\t65 & 50 & 50 & 0.9 & 1 & NaN & 1.1 ( 0.04 ) & 1 ( 0 ) & 6 ( 0 ) & 1.99 ( 0.02 ) & 0.00 & NaN & 1.10 & NA & 0.00 & 1.99 \\\\\n", + "\t69 & 50 & 100 & 0.9 & 2 & NaN & 1.11 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.06 ( 0.02 ) & 0.00 & NaN & 1.11 & NA & 0.00 & 2.06 \\\\\n", + "\t73 & 50 & 500 & 0.9 & 10 & NaN & 1.18 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.2 ( 0.02 ) & 0.00 & NaN & 1.18 & NA & 0.00 & 2.20 \\\\\n", + "\t75 & 500 & 500 & 0.9 & 1 & 0.12 & 0.73 ( 0.01 ) & 20.83 ( 0.45 ) & 2.04 ( 0.09 ) & 2 ( 0.01 ) & 24.79 & 0.84 & 0.73 & 20.8 & 2.04 & NA \\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20 & NaN & 1.22 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.3 ( 0.03 ) & 0.00 & NaN & 1.22 & NA & 0.00 & 2.30 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | OOB | num_select | FDR | MSE_mean | FP_mean | FN_mean | OOB_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1 | NaN | 0.08 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.59 ( 0.01 ) | 0.00 | NaN | 0.08 | NA | 0.00 | 0.59 |\n", + "| 5 | 50 | 100 | 0.1 | 2 | NaN | 0.08 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.6 ( 0.01 ) | 0.00 | NaN | 0.08 | NA | 0.00 | 0.60 |\n", + "| 9 | 50 | 500 | 0.1 | 10 | NaN | 0.08 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.59 ( 0.01 ) | 0.00 | NaN | 0.08 | NA | 0.00 | 0.59 |\n", + "| 13 | 50 | 1000 | 0.1 | 20 | NaN | 0.08 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.59 ( 0.01 ) | 0.00 | NaN | 0.08 | NA | 0.00 | 0.59 |\n", + "| 17 | 50 | 50 | 0.3 | 1 | NaN | 0.31 ( 0.01 ) | 1 ( 0 ) | 6 ( 0 ) | 1.14 ( 0.01 ) | 0.00 | NaN | 0.31 | NA | 0.00 | 1.14 |\n", + "| 21 | 50 | 100 | 0.3 | 2 | NaN | 0.32 ( 0.01 ) | 1 ( 0 ) | 6 ( 0 ) | 1.2 ( 0.01 ) | 0.00 | NaN | 0.32 | NA | 0.00 | 1.20 |\n", + "| 25 | 50 | 500 | 0.3 | 10 | NaN | 0.36 ( 0.02 ) | 1 ( 0 ) | 6 ( 0 ) | 1.23 ( 0.01 ) | 0.00 | NaN | 0.36 | NA | 0.00 | 1.23 |\n", + "| 29 | 50 | 1000 | 0.3 | 20 | NaN | 0.34 ( 0.01 ) | 1 ( 0 ) | 6 ( 0 ) | 1.26 ( 0.01 ) | 0.00 | NaN | 0.34 | NA | 0.00 | 1.26 |\n", + "| 33 | 50 | 50 | 0.5 | 1 | NaN | 0.6 ( 0.03 ) | 1 ( 0 ) | 6 ( 0 ) | 1.46 ( 0.01 ) | 0.00 | NaN | 0.60 | NA | 0.00 | 1.46 |\n", + "| 37 | 50 | 100 | 0.5 | 2 | NaN | 0.6 ( 0.02 ) | 1 ( 0 ) | 6 ( 0 ) | 1.56 ( 0.01 ) | 0.00 | NaN | 0.60 | NA | 0.00 | 1.56 |\n", + "| 41 | 50 | 500 | 0.5 | 10 | NaN | 0.58 ( 0.02 ) | 1 ( 0 ) | 6 ( 0 ) | 1.64 ( 0.02 ) | 0.00 | NaN | 0.58 | NA | 0.00 | 1.64 |\n", + "| 45 | 50 | 1000 | 0.5 | 20 | NaN | 0.57 ( 0.02 ) | 1 ( 0 ) | 6 ( 0 ) | 1.64 ( 0.02 ) | 0.00 | NaN | 0.57 | NA | 0.00 | 1.64 |\n", + "| 49 | 50 | 50 | 0.7 | 1 | NaN | 0.8 ( 0.04 ) | 1 ( 0 ) | 6 ( 0 ) | 1.72 ( 0.02 ) | 0.00 | NaN | 0.80 | NA | 0.00 | 1.72 |\n", + "| 53 | 50 | 100 | 0.7 | 2 | NaN | 0.92 ( 0.04 ) | 1 ( 0 ) | 6 ( 0 ) | 1.85 ( 0.02 ) | 0.00 | NaN | 0.92 | NA | 0.00 | 1.85 |\n", + "| 57 | 50 | 500 | 0.7 | 10 | NaN | 0.91 ( 0.04 ) | 1 ( 0 ) | 6 ( 0 ) | 2 ( 0.02 ) | 0.00 | NaN | 0.91 | NA | 0.00 | NA |\n", + "| 61 | 50 | 1000 | 0.7 | 20 | NaN | 0.91 ( 0.04 ) | 1 ( 0 ) | 6 ( 0 ) | 1.98 ( 0.02 ) | 0.00 | NaN | 0.91 | NA | 0.00 | 1.98 |\n", + "| 65 | 50 | 50 | 0.9 | 1 | NaN | 1.1 ( 0.04 ) | 1 ( 0 ) | 6 ( 0 ) | 1.99 ( 0.02 ) | 0.00 | NaN | 1.10 | NA | 0.00 | 1.99 |\n", + "| 69 | 50 | 100 | 0.9 | 2 | NaN | 1.11 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.06 ( 0.02 ) | 0.00 | NaN | 1.11 | NA | 0.00 | 2.06 |\n", + "| 73 | 50 | 500 | 0.9 | 10 | NaN | 1.18 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.2 ( 0.02 ) | 0.00 | NaN | 1.18 | NA | 0.00 | 2.20 |\n", + "| 75 | 500 | 500 | 0.9 | 1 | 0.12 | 0.73 ( 0.01 ) | 20.83 ( 0.45 ) | 2.04 ( 0.09 ) | 2 ( 0.01 ) | 24.79 | 0.84 | 0.73 | 20.8 | 2.04 | NA |\n", + "| 77 | 50 | 1000 | 0.9 | 20 | NaN | 1.22 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.3 ( 0.03 ) | 0.00 | NaN | 1.22 | NA | 0.00 | 2.30 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN \n", + "1 50 50 0.1 1 NaN 0.08 ( 0 ) 1 ( 0 ) 6 ( 0 ) \n", + "5 50 100 0.1 2 NaN 0.08 ( 0 ) 1 ( 0 ) 6 ( 0 ) \n", + "9 50 500 0.1 10 NaN 0.08 ( 0 ) 1 ( 0 ) 6 ( 0 ) \n", + "13 50 1000 0.1 20 NaN 0.08 ( 0 ) 1 ( 0 ) 6 ( 0 ) \n", + "17 50 50 0.3 1 NaN 0.31 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) \n", + "21 50 100 0.3 2 NaN 0.32 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) \n", + "25 50 500 0.3 10 NaN 0.36 ( 0.02 ) 1 ( 0 ) 6 ( 0 ) \n", + "29 50 1000 0.3 20 NaN 0.34 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) \n", + "33 50 50 0.5 1 NaN 0.6 ( 0.03 ) 1 ( 0 ) 6 ( 0 ) \n", + "37 50 100 0.5 2 NaN 0.6 ( 0.02 ) 1 ( 0 ) 6 ( 0 ) \n", + "41 50 500 0.5 10 NaN 0.58 ( 0.02 ) 1 ( 0 ) 6 ( 0 ) \n", + "45 50 1000 0.5 20 NaN 0.57 ( 0.02 ) 1 ( 0 ) 6 ( 0 ) \n", + "49 50 50 0.7 1 NaN 0.8 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) \n", + "53 50 100 0.7 2 NaN 0.92 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) \n", + "57 50 500 0.7 10 NaN 0.91 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) \n", + "61 50 1000 0.7 20 NaN 0.91 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) \n", + "65 50 50 0.9 1 NaN 1.1 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) \n", + "69 50 100 0.9 2 NaN 1.11 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "73 50 500 0.9 10 NaN 1.18 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "75 500 500 0.9 1 0.12 0.73 ( 0.01 ) 20.83 ( 0.45 ) 2.04 ( 0.09 )\n", + "77 50 1000 0.9 20 NaN 1.22 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + " OOB num_select FDR MSE_mean FP_mean FN_mean OOB_mean\n", + "1 0.59 ( 0.01 ) 0.00 NaN 0.08 NA 0.00 0.59 \n", + "5 0.6 ( 0.01 ) 0.00 NaN 0.08 NA 0.00 0.60 \n", + "9 0.59 ( 0.01 ) 0.00 NaN 0.08 NA 0.00 0.59 \n", + "13 0.59 ( 0.01 ) 0.00 NaN 0.08 NA 0.00 0.59 \n", + "17 1.14 ( 0.01 ) 0.00 NaN 0.31 NA 0.00 1.14 \n", + "21 1.2 ( 0.01 ) 0.00 NaN 0.32 NA 0.00 1.20 \n", + "25 1.23 ( 0.01 ) 0.00 NaN 0.36 NA 0.00 1.23 \n", + "29 1.26 ( 0.01 ) 0.00 NaN 0.34 NA 0.00 1.26 \n", + "33 1.46 ( 0.01 ) 0.00 NaN 0.60 NA 0.00 1.46 \n", + "37 1.56 ( 0.01 ) 0.00 NaN 0.60 NA 0.00 1.56 \n", + "41 1.64 ( 0.02 ) 0.00 NaN 0.58 NA 0.00 1.64 \n", + "45 1.64 ( 0.02 ) 0.00 NaN 0.57 NA 0.00 1.64 \n", + "49 1.72 ( 0.02 ) 0.00 NaN 0.80 NA 0.00 1.72 \n", + "53 1.85 ( 0.02 ) 0.00 NaN 0.92 NA 0.00 1.85 \n", + "57 2 ( 0.02 ) 0.00 NaN 0.91 NA 0.00 NA \n", + "61 1.98 ( 0.02 ) 0.00 NaN 0.91 NA 0.00 1.98 \n", + "65 1.99 ( 0.02 ) 0.00 NaN 1.10 NA 0.00 1.99 \n", + "69 2.06 ( 0.02 ) 0.00 NaN 1.11 NA 0.00 2.06 \n", + "73 2.2 ( 0.02 ) 0.00 NaN 1.18 NA 0.00 2.20 \n", + "75 2 ( 0.01 ) 24.79 0.84 0.73 20.8 2.04 NA \n", + "77 2.3 ( 0.03 ) 0.00 NaN 1.22 NA 0.00 2.30 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check whether missing values exists\n", + "result.table_block[rowSums(is.na(result.table_block)) > 0,]" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "# recover values\n", + "result.table_block$Stab[is.na(result.table_block$Stab)] = 0\n", + "result.table_block$FP_mean[is.na(result.table_block$FP_mean)] = 1\n", + "result.table_block$OOB_mean[is.na(result.table_block$OOB_mean)] = 2\n", + "result.table_block$FN_mean[result.table_block$num_select == 0] = 6" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNOOBnum_selectFDRMSE_meanFP_meanFN_meanOOB_mean
150 50 0.1 1 0 0.08 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.59 ( 0.01 )0 NaN 0.08 1 6 0.59
550 100 0.1 2 0 0.08 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.6 ( 0.01 ) 0 NaN 0.08 1 6 0.60
950 500 0.1 10 0 0.08 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.59 ( 0.01 )0 NaN 0.08 1 6 0.59
1350 1000 0.1 20 0 0.08 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.59 ( 0.01 )0 NaN 0.08 1 6 0.59
1750 50 0.3 1 0 0.31 ( 0.01 )1 ( 0 ) 6 ( 0 ) 1.14 ( 0.01 )0 NaN 0.31 1 6 1.14
2150 100 0.3 2 0 0.32 ( 0.01 )1 ( 0 ) 6 ( 0 ) 1.2 ( 0.01 ) 0 NaN 0.32 1 6 1.20
2550 500 0.3 10 0 0.36 ( 0.02 )1 ( 0 ) 6 ( 0 ) 1.23 ( 0.01 )0 NaN 0.36 1 6 1.23
2950 1000 0.3 20 0 0.34 ( 0.01 )1 ( 0 ) 6 ( 0 ) 1.26 ( 0.01 )0 NaN 0.34 1 6 1.26
3350 50 0.5 1 0 0.6 ( 0.03 ) 1 ( 0 ) 6 ( 0 ) 1.46 ( 0.01 )0 NaN 0.60 1 6 1.46
3750 100 0.5 2 0 0.6 ( 0.02 ) 1 ( 0 ) 6 ( 0 ) 1.56 ( 0.01 )0 NaN 0.60 1 6 1.56
4150 500 0.5 10 0 0.58 ( 0.02 )1 ( 0 ) 6 ( 0 ) 1.64 ( 0.02 )0 NaN 0.58 1 6 1.64
4550 1000 0.5 20 0 0.57 ( 0.02 )1 ( 0 ) 6 ( 0 ) 1.64 ( 0.02 )0 NaN 0.57 1 6 1.64
4950 50 0.7 1 0 0.8 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) 1.72 ( 0.02 )0 NaN 0.80 1 6 1.72
5350 100 0.7 2 0 0.92 ( 0.04 )1 ( 0 ) 6 ( 0 ) 1.85 ( 0.02 )0 NaN 0.92 1 6 1.85
5750 500 0.7 10 0 0.91 ( 0.04 )1 ( 0 ) 6 ( 0 ) 2 ( 0.02 ) 0 NaN 0.91 1 6 2.00
6150 1000 0.7 20 0 0.91 ( 0.04 )1 ( 0 ) 6 ( 0 ) 1.98 ( 0.02 )0 NaN 0.91 1 6 1.98
6550 50 0.9 1 0 1.1 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) 1.99 ( 0.02 )0 NaN 1.10 1 6 1.99
6950 100 0.9 2 0 1.11 ( 0.05 )1 ( 0 ) 6 ( 0 ) 2.06 ( 0.02 )0 NaN 1.11 1 6 2.06
7350 500 0.9 10 0 1.18 ( 0.05 )1 ( 0 ) 6 ( 0 ) 2.2 ( 0.02 ) 0 NaN 1.18 1 6 2.20
7750 1000 0.9 20 0 1.22 ( 0.05 )1 ( 0 ) 6 ( 0 ) 2.3 ( 0.03 ) 0 NaN 1.22 1 6 2.30
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & OOB & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean & OOB\\_mean\\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1 & 0 & 0.08 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.59 ( 0.01 ) & 0 & NaN & 0.08 & 1 & 6 & 0.59 \\\\\n", + "\t5 & 50 & 100 & 0.1 & 2 & 0 & 0.08 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.6 ( 0.01 ) & 0 & NaN & 0.08 & 1 & 6 & 0.60 \\\\\n", + "\t9 & 50 & 500 & 0.1 & 10 & 0 & 0.08 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.59 ( 0.01 ) & 0 & NaN & 0.08 & 1 & 6 & 0.59 \\\\\n", + "\t13 & 50 & 1000 & 0.1 & 20 & 0 & 0.08 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.59 ( 0.01 ) & 0 & NaN & 0.08 & 1 & 6 & 0.59 \\\\\n", + "\t17 & 50 & 50 & 0.3 & 1 & 0 & 0.31 ( 0.01 ) & 1 ( 0 ) & 6 ( 0 ) & 1.14 ( 0.01 ) & 0 & NaN & 0.31 & 1 & 6 & 1.14 \\\\\n", + "\t21 & 50 & 100 & 0.3 & 2 & 0 & 0.32 ( 0.01 ) & 1 ( 0 ) & 6 ( 0 ) & 1.2 ( 0.01 ) & 0 & NaN & 0.32 & 1 & 6 & 1.20 \\\\\n", + "\t25 & 50 & 500 & 0.3 & 10 & 0 & 0.36 ( 0.02 ) & 1 ( 0 ) & 6 ( 0 ) & 1.23 ( 0.01 ) & 0 & NaN & 0.36 & 1 & 6 & 1.23 \\\\\n", + "\t29 & 50 & 1000 & 0.3 & 20 & 0 & 0.34 ( 0.01 ) & 1 ( 0 ) & 6 ( 0 ) & 1.26 ( 0.01 ) & 0 & NaN & 0.34 & 1 & 6 & 1.26 \\\\\n", + "\t33 & 50 & 50 & 0.5 & 1 & 0 & 0.6 ( 0.03 ) & 1 ( 0 ) & 6 ( 0 ) & 1.46 ( 0.01 ) & 0 & NaN & 0.60 & 1 & 6 & 1.46 \\\\\n", + "\t37 & 50 & 100 & 0.5 & 2 & 0 & 0.6 ( 0.02 ) & 1 ( 0 ) & 6 ( 0 ) & 1.56 ( 0.01 ) & 0 & NaN & 0.60 & 1 & 6 & 1.56 \\\\\n", + "\t41 & 50 & 500 & 0.5 & 10 & 0 & 0.58 ( 0.02 ) & 1 ( 0 ) & 6 ( 0 ) & 1.64 ( 0.02 ) & 0 & NaN & 0.58 & 1 & 6 & 1.64 \\\\\n", + "\t45 & 50 & 1000 & 0.5 & 20 & 0 & 0.57 ( 0.02 ) & 1 ( 0 ) & 6 ( 0 ) & 1.64 ( 0.02 ) & 0 & NaN & 0.57 & 1 & 6 & 1.64 \\\\\n", + "\t49 & 50 & 50 & 0.7 & 1 & 0 & 0.8 ( 0.04 ) & 1 ( 0 ) & 6 ( 0 ) & 1.72 ( 0.02 ) & 0 & NaN & 0.80 & 1 & 6 & 1.72 \\\\\n", + "\t53 & 50 & 100 & 0.7 & 2 & 0 & 0.92 ( 0.04 ) & 1 ( 0 ) & 6 ( 0 ) & 1.85 ( 0.02 ) & 0 & NaN & 0.92 & 1 & 6 & 1.85 \\\\\n", + "\t57 & 50 & 500 & 0.7 & 10 & 0 & 0.91 ( 0.04 ) & 1 ( 0 ) & 6 ( 0 ) & 2 ( 0.02 ) & 0 & NaN & 0.91 & 1 & 6 & 2.00 \\\\\n", + "\t61 & 50 & 1000 & 0.7 & 20 & 0 & 0.91 ( 0.04 ) & 1 ( 0 ) & 6 ( 0 ) & 1.98 ( 0.02 ) & 0 & NaN & 0.91 & 1 & 6 & 1.98 \\\\\n", + "\t65 & 50 & 50 & 0.9 & 1 & 0 & 1.1 ( 0.04 ) & 1 ( 0 ) & 6 ( 0 ) & 1.99 ( 0.02 ) & 0 & NaN & 1.10 & 1 & 6 & 1.99 \\\\\n", + "\t69 & 50 & 100 & 0.9 & 2 & 0 & 1.11 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.06 ( 0.02 ) & 0 & NaN & 1.11 & 1 & 6 & 2.06 \\\\\n", + "\t73 & 50 & 500 & 0.9 & 10 & 0 & 1.18 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.2 ( 0.02 ) & 0 & NaN & 1.18 & 1 & 6 & 2.20 \\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20 & 0 & 1.22 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.3 ( 0.03 ) & 0 & NaN & 1.22 & 1 & 6 & 2.30 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | OOB | num_select | FDR | MSE_mean | FP_mean | FN_mean | OOB_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1 | 0 | 0.08 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.59 ( 0.01 ) | 0 | NaN | 0.08 | 1 | 6 | 0.59 |\n", + "| 5 | 50 | 100 | 0.1 | 2 | 0 | 0.08 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.6 ( 0.01 ) | 0 | NaN | 0.08 | 1 | 6 | 0.60 |\n", + "| 9 | 50 | 500 | 0.1 | 10 | 0 | 0.08 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.59 ( 0.01 ) | 0 | NaN | 0.08 | 1 | 6 | 0.59 |\n", + "| 13 | 50 | 1000 | 0.1 | 20 | 0 | 0.08 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.59 ( 0.01 ) | 0 | NaN | 0.08 | 1 | 6 | 0.59 |\n", + "| 17 | 50 | 50 | 0.3 | 1 | 0 | 0.31 ( 0.01 ) | 1 ( 0 ) | 6 ( 0 ) | 1.14 ( 0.01 ) | 0 | NaN | 0.31 | 1 | 6 | 1.14 |\n", + "| 21 | 50 | 100 | 0.3 | 2 | 0 | 0.32 ( 0.01 ) | 1 ( 0 ) | 6 ( 0 ) | 1.2 ( 0.01 ) | 0 | NaN | 0.32 | 1 | 6 | 1.20 |\n", + "| 25 | 50 | 500 | 0.3 | 10 | 0 | 0.36 ( 0.02 ) | 1 ( 0 ) | 6 ( 0 ) | 1.23 ( 0.01 ) | 0 | NaN | 0.36 | 1 | 6 | 1.23 |\n", + "| 29 | 50 | 1000 | 0.3 | 20 | 0 | 0.34 ( 0.01 ) | 1 ( 0 ) | 6 ( 0 ) | 1.26 ( 0.01 ) | 0 | NaN | 0.34 | 1 | 6 | 1.26 |\n", + "| 33 | 50 | 50 | 0.5 | 1 | 0 | 0.6 ( 0.03 ) | 1 ( 0 ) | 6 ( 0 ) | 1.46 ( 0.01 ) | 0 | NaN | 0.60 | 1 | 6 | 1.46 |\n", + "| 37 | 50 | 100 | 0.5 | 2 | 0 | 0.6 ( 0.02 ) | 1 ( 0 ) | 6 ( 0 ) | 1.56 ( 0.01 ) | 0 | NaN | 0.60 | 1 | 6 | 1.56 |\n", + "| 41 | 50 | 500 | 0.5 | 10 | 0 | 0.58 ( 0.02 ) | 1 ( 0 ) | 6 ( 0 ) | 1.64 ( 0.02 ) | 0 | NaN | 0.58 | 1 | 6 | 1.64 |\n", + "| 45 | 50 | 1000 | 0.5 | 20 | 0 | 0.57 ( 0.02 ) | 1 ( 0 ) | 6 ( 0 ) | 1.64 ( 0.02 ) | 0 | NaN | 0.57 | 1 | 6 | 1.64 |\n", + "| 49 | 50 | 50 | 0.7 | 1 | 0 | 0.8 ( 0.04 ) | 1 ( 0 ) | 6 ( 0 ) | 1.72 ( 0.02 ) | 0 | NaN | 0.80 | 1 | 6 | 1.72 |\n", + "| 53 | 50 | 100 | 0.7 | 2 | 0 | 0.92 ( 0.04 ) | 1 ( 0 ) | 6 ( 0 ) | 1.85 ( 0.02 ) | 0 | NaN | 0.92 | 1 | 6 | 1.85 |\n", + "| 57 | 50 | 500 | 0.7 | 10 | 0 | 0.91 ( 0.04 ) | 1 ( 0 ) | 6 ( 0 ) | 2 ( 0.02 ) | 0 | NaN | 0.91 | 1 | 6 | 2.00 |\n", + "| 61 | 50 | 1000 | 0.7 | 20 | 0 | 0.91 ( 0.04 ) | 1 ( 0 ) | 6 ( 0 ) | 1.98 ( 0.02 ) | 0 | NaN | 0.91 | 1 | 6 | 1.98 |\n", + "| 65 | 50 | 50 | 0.9 | 1 | 0 | 1.1 ( 0.04 ) | 1 ( 0 ) | 6 ( 0 ) | 1.99 ( 0.02 ) | 0 | NaN | 1.10 | 1 | 6 | 1.99 |\n", + "| 69 | 50 | 100 | 0.9 | 2 | 0 | 1.11 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.06 ( 0.02 ) | 0 | NaN | 1.11 | 1 | 6 | 2.06 |\n", + "| 73 | 50 | 500 | 0.9 | 10 | 0 | 1.18 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.2 ( 0.02 ) | 0 | NaN | 1.18 | 1 | 6 | 2.20 |\n", + "| 77 | 50 | 1000 | 0.9 | 20 | 0 | 1.22 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.3 ( 0.03 ) | 0 | NaN | 1.22 | 1 | 6 | 2.30 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN OOB \n", + "1 50 50 0.1 1 0 0.08 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.59 ( 0.01 )\n", + "5 50 100 0.1 2 0 0.08 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.6 ( 0.01 ) \n", + "9 50 500 0.1 10 0 0.08 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.59 ( 0.01 )\n", + "13 50 1000 0.1 20 0 0.08 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.59 ( 0.01 )\n", + "17 50 50 0.3 1 0 0.31 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) 1.14 ( 0.01 )\n", + "21 50 100 0.3 2 0 0.32 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) 1.2 ( 0.01 ) \n", + "25 50 500 0.3 10 0 0.36 ( 0.02 ) 1 ( 0 ) 6 ( 0 ) 1.23 ( 0.01 )\n", + "29 50 1000 0.3 20 0 0.34 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) 1.26 ( 0.01 )\n", + "33 50 50 0.5 1 0 0.6 ( 0.03 ) 1 ( 0 ) 6 ( 0 ) 1.46 ( 0.01 )\n", + "37 50 100 0.5 2 0 0.6 ( 0.02 ) 1 ( 0 ) 6 ( 0 ) 1.56 ( 0.01 )\n", + "41 50 500 0.5 10 0 0.58 ( 0.02 ) 1 ( 0 ) 6 ( 0 ) 1.64 ( 0.02 )\n", + "45 50 1000 0.5 20 0 0.57 ( 0.02 ) 1 ( 0 ) 6 ( 0 ) 1.64 ( 0.02 )\n", + "49 50 50 0.7 1 0 0.8 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) 1.72 ( 0.02 )\n", + "53 50 100 0.7 2 0 0.92 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) 1.85 ( 0.02 )\n", + "57 50 500 0.7 10 0 0.91 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) 2 ( 0.02 ) \n", + "61 50 1000 0.7 20 0 0.91 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) 1.98 ( 0.02 )\n", + "65 50 50 0.9 1 0 1.1 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) 1.99 ( 0.02 )\n", + "69 50 100 0.9 2 0 1.11 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 2.06 ( 0.02 )\n", + "73 50 500 0.9 10 0 1.18 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 2.2 ( 0.02 ) \n", + "77 50 1000 0.9 20 0 1.22 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 2.3 ( 0.03 ) \n", + " num_select FDR MSE_mean FP_mean FN_mean OOB_mean\n", + "1 0 NaN 0.08 1 6 0.59 \n", + "5 0 NaN 0.08 1 6 0.60 \n", + "9 0 NaN 0.08 1 6 0.59 \n", + "13 0 NaN 0.08 1 6 0.59 \n", + "17 0 NaN 0.31 1 6 1.14 \n", + "21 0 NaN 0.32 1 6 1.20 \n", + "25 0 NaN 0.36 1 6 1.23 \n", + "29 0 NaN 0.34 1 6 1.26 \n", + "33 0 NaN 0.60 1 6 1.46 \n", + "37 0 NaN 0.60 1 6 1.56 \n", + "41 0 NaN 0.58 1 6 1.64 \n", + "45 0 NaN 0.57 1 6 1.64 \n", + "49 0 NaN 0.80 1 6 1.72 \n", + "53 0 NaN 0.92 1 6 1.85 \n", + "57 0 NaN 0.91 1 6 2.00 \n", + "61 0 NaN 0.91 1 6 1.98 \n", + "65 0 NaN 1.10 1 6 1.99 \n", + "69 0 NaN 1.11 1 6 2.06 \n", + "73 0 NaN 1.18 1 6 2.20 \n", + "77 0 NaN 1.22 1 6 2.30 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_block[c(1,5,9,13,17,21,25,29,33,37,41,45,49,53,57,61,65,69,73,77), ]" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNOOBnum_selectFDRMSE_meanFP_meanFN_meanOOB_mean
50 50 0.1 1.00 0.00 0.08 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.59 ( 0.01 )0.00 NaN 0.08 1.00 6.00 0.59
100 50 0.1 0.50 0.03 0.07 ( 0 ) 2.26 ( 0.17 )5.06 ( 0.12 )0.58 ( 0 ) 3.04 0.7 0.07 2.26 5.06 0.58
500 50 0.1 0.10 0.23 0.05 ( 0 ) 2.34 ( 0.16 )3.77 ( 0.14 )0.56 ( 0 ) 4.56 0.49 0.05 2.34 3.77 0.56
1000 50 0.1 0.05 0.51 0.05 ( 0 ) 2.37 ( 0.16 )2.54 ( 0.11 )0.55 ( 0 ) 5.83 0.38 0.05 2.37 2.54 0.55
50 100 0.1 2.00 0.00 0.08 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.6 ( 0.01 ) 0.00 NaN 0.08 1.00 6.00 0.60
100 100 0.1 1.00 0.01 0.07 ( 0 ) 4.76 ( 0.27 )5.51 ( 0.09 )0.58 ( 0 ) 5.24 0.91 0.07 4.76 5.51 0.58
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllllll}\n", + " N & P & Corr & Ratio & Stab & MSE & FP & FN & OOB & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean & OOB\\_mean\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0.1 & 1.00 & 0.00 & 0.08 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.59 ( 0.01 ) & 0.00 & NaN & 0.08 & 1.00 & 6.00 & 0.59 \\\\\n", + "\t 100 & 50 & 0.1 & 0.50 & 0.03 & 0.07 ( 0 ) & 2.26 ( 0.17 ) & 5.06 ( 0.12 ) & 0.58 ( 0 ) & 3.04 & 0.7 & 0.07 & 2.26 & 5.06 & 0.58 \\\\\n", + "\t 500 & 50 & 0.1 & 0.10 & 0.23 & 0.05 ( 0 ) & 2.34 ( 0.16 ) & 3.77 ( 0.14 ) & 0.56 ( 0 ) & 4.56 & 0.49 & 0.05 & 2.34 & 3.77 & 0.56 \\\\\n", + "\t 1000 & 50 & 0.1 & 0.05 & 0.51 & 0.05 ( 0 ) & 2.37 ( 0.16 ) & 2.54 ( 0.11 ) & 0.55 ( 0 ) & 5.83 & 0.38 & 0.05 & 2.37 & 2.54 & 0.55 \\\\\n", + "\t 50 & 100 & 0.1 & 2.00 & 0.00 & 0.08 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.6 ( 0.01 ) & 0.00 & NaN & 0.08 & 1.00 & 6.00 & 0.60 \\\\\n", + "\t 100 & 100 & 0.1 & 1.00 & 0.01 & 0.07 ( 0 ) & 4.76 ( 0.27 ) & 5.51 ( 0.09 ) & 0.58 ( 0 ) & 5.24 & 0.91 & 0.07 & 4.76 & 5.51 & 0.58 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| N | P | Corr | Ratio | Stab | MSE | FP | FN | OOB | num_select | FDR | MSE_mean | FP_mean | FN_mean | OOB_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0.1 | 1.00 | 0.00 | 0.08 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.59 ( 0.01 ) | 0.00 | NaN | 0.08 | 1.00 | 6.00 | 0.59 |\n", + "| 100 | 50 | 0.1 | 0.50 | 0.03 | 0.07 ( 0 ) | 2.26 ( 0.17 ) | 5.06 ( 0.12 ) | 0.58 ( 0 ) | 3.04 | 0.7 | 0.07 | 2.26 | 5.06 | 0.58 |\n", + "| 500 | 50 | 0.1 | 0.10 | 0.23 | 0.05 ( 0 ) | 2.34 ( 0.16 ) | 3.77 ( 0.14 ) | 0.56 ( 0 ) | 4.56 | 0.49 | 0.05 | 2.34 | 3.77 | 0.56 |\n", + "| 1000 | 50 | 0.1 | 0.05 | 0.51 | 0.05 ( 0 ) | 2.37 ( 0.16 ) | 2.54 ( 0.11 ) | 0.55 ( 0 ) | 5.83 | 0.38 | 0.05 | 2.37 | 2.54 | 0.55 |\n", + "| 50 | 100 | 0.1 | 2.00 | 0.00 | 0.08 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.6 ( 0.01 ) | 0.00 | NaN | 0.08 | 1.00 | 6.00 | 0.60 |\n", + "| 100 | 100 | 0.1 | 1.00 | 0.01 | 0.07 ( 0 ) | 4.76 ( 0.27 ) | 5.51 ( 0.09 ) | 0.58 ( 0 ) | 5.24 | 0.91 | 0.07 | 4.76 | 5.51 | 0.58 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN OOB \n", + "1 50 50 0.1 1.00 0.00 0.08 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.59 ( 0.01 )\n", + "2 100 50 0.1 0.50 0.03 0.07 ( 0 ) 2.26 ( 0.17 ) 5.06 ( 0.12 ) 0.58 ( 0 ) \n", + "3 500 50 0.1 0.10 0.23 0.05 ( 0 ) 2.34 ( 0.16 ) 3.77 ( 0.14 ) 0.56 ( 0 ) \n", + "4 1000 50 0.1 0.05 0.51 0.05 ( 0 ) 2.37 ( 0.16 ) 2.54 ( 0.11 ) 0.55 ( 0 ) \n", + "5 50 100 0.1 2.00 0.00 0.08 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.6 ( 0.01 ) \n", + "6 100 100 0.1 1.00 0.01 0.07 ( 0 ) 4.76 ( 0.27 ) 5.51 ( 0.09 ) 0.58 ( 0 ) \n", + " num_select FDR MSE_mean FP_mean FN_mean OOB_mean\n", + "1 0.00 NaN 0.08 1.00 6.00 0.59 \n", + "2 3.04 0.7 0.07 2.26 5.06 0.58 \n", + "3 4.56 0.49 0.05 2.34 3.77 0.56 \n", + "4 5.83 0.38 0.05 2.37 2.54 0.55 \n", + "5 0.00 NaN 0.08 1.00 6.00 0.60 \n", + "6 5.24 0.91 0.07 4.76 5.51 0.58 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNOOBnum_selectFDRMSE_meanFP_meanFN_meanOOB_mean
75 500 500 0.9 1.0 0.12 0.73 ( 0.01 ) 20.83 ( 0.45 )2.04 ( 0.09 ) 2 ( 0.01 ) 24.79 0.84 0.73 20.8 2.04 2.00
761000 500 0.9 0.5 0.18 0.68 ( 0.01 ) 18.47 ( 0.43 )1 ( 0.07 ) 1.92 ( 0 ) 23.47 0.78 0.68 18.4 0.00 1.92
77 50 1000 0.9 20.0 0.00 1.22 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 2.3 ( 0.03 ) 0.00 NaN 1.22 1.0 6.00 2.30
78 100 1000 0.9 10.0 0.01 0.93 ( 0.02 ) 49.18 ( 0.69 )4.67 ( 0.09 ) 2.22 ( 0.02 ) 50.51 0.97 0.93 49.1 4.67 2.22
79 500 1000 0.9 2.0 0.06 0.78 ( 0.01 ) 46.01 ( 0.7 ) 2.14 ( 0.09 ) 2.12 ( 0.01 ) 49.87 0.92 0.78 46.0 2.14 2.12
801000 1000 0.9 1.0 0.08 0.74 ( 0.01 ) 43.05 ( 0.72 )1.17 ( 0.08 ) 2.07 ( 0 ) 47.88 0.9 0.74 43.0 1.17 2.07
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & OOB & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean & OOB\\_mean\\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 1.0 & 0.12 & 0.73 ( 0.01 ) & 20.83 ( 0.45 ) & 2.04 ( 0.09 ) & 2 ( 0.01 ) & 24.79 & 0.84 & 0.73 & 20.8 & 2.04 & 2.00 \\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.5 & 0.18 & 0.68 ( 0.01 ) & 18.47 ( 0.43 ) & 1 ( 0.07 ) & 1.92 ( 0 ) & 23.47 & 0.78 & 0.68 & 18.4 & 0.00 & 1.92 \\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.0 & 0.00 & 1.22 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.3 ( 0.03 ) & 0.00 & NaN & 1.22 & 1.0 & 6.00 & 2.30 \\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.0 & 0.01 & 0.93 ( 0.02 ) & 49.18 ( 0.69 ) & 4.67 ( 0.09 ) & 2.22 ( 0.02 ) & 50.51 & 0.97 & 0.93 & 49.1 & 4.67 & 2.22 \\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.0 & 0.06 & 0.78 ( 0.01 ) & 46.01 ( 0.7 ) & 2.14 ( 0.09 ) & 2.12 ( 0.01 ) & 49.87 & 0.92 & 0.78 & 46.0 & 2.14 & 2.12 \\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.0 & 0.08 & 0.74 ( 0.01 ) & 43.05 ( 0.72 ) & 1.17 ( 0.08 ) & 2.07 ( 0 ) & 47.88 & 0.9 & 0.74 & 43.0 & 1.17 & 2.07 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | OOB | num_select | FDR | MSE_mean | FP_mean | FN_mean | OOB_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 1.0 | 0.12 | 0.73 ( 0.01 ) | 20.83 ( 0.45 ) | 2.04 ( 0.09 ) | 2 ( 0.01 ) | 24.79 | 0.84 | 0.73 | 20.8 | 2.04 | 2.00 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.5 | 0.18 | 0.68 ( 0.01 ) | 18.47 ( 0.43 ) | 1 ( 0.07 ) | 1.92 ( 0 ) | 23.47 | 0.78 | 0.68 | 18.4 | 0.00 | 1.92 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.0 | 0.00 | 1.22 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.3 ( 0.03 ) | 0.00 | NaN | 1.22 | 1.0 | 6.00 | 2.30 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.0 | 0.01 | 0.93 ( 0.02 ) | 49.18 ( 0.69 ) | 4.67 ( 0.09 ) | 2.22 ( 0.02 ) | 50.51 | 0.97 | 0.93 | 49.1 | 4.67 | 2.22 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.0 | 0.06 | 0.78 ( 0.01 ) | 46.01 ( 0.7 ) | 2.14 ( 0.09 ) | 2.12 ( 0.01 ) | 49.87 | 0.92 | 0.78 | 46.0 | 2.14 | 2.12 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.0 | 0.08 | 0.74 ( 0.01 ) | 43.05 ( 0.72 ) | 1.17 ( 0.08 ) | 2.07 ( 0 ) | 47.88 | 0.9 | 0.74 | 43.0 | 1.17 | 2.07 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN \n", + "75 500 500 0.9 1.0 0.12 0.73 ( 0.01 ) 20.83 ( 0.45 ) 2.04 ( 0.09 )\n", + "76 1000 500 0.9 0.5 0.18 0.68 ( 0.01 ) 18.47 ( 0.43 ) 1 ( 0.07 ) \n", + "77 50 1000 0.9 20.0 0.00 1.22 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "78 100 1000 0.9 10.0 0.01 0.93 ( 0.02 ) 49.18 ( 0.69 ) 4.67 ( 0.09 )\n", + "79 500 1000 0.9 2.0 0.06 0.78 ( 0.01 ) 46.01 ( 0.7 ) 2.14 ( 0.09 )\n", + "80 1000 1000 0.9 1.0 0.08 0.74 ( 0.01 ) 43.05 ( 0.72 ) 1.17 ( 0.08 )\n", + " OOB num_select FDR MSE_mean FP_mean FN_mean OOB_mean\n", + "75 2 ( 0.01 ) 24.79 0.84 0.73 20.8 2.04 2.00 \n", + "76 1.92 ( 0 ) 23.47 0.78 0.68 18.4 0.00 1.92 \n", + "77 2.3 ( 0.03 ) 0.00 NaN 1.22 1.0 6.00 2.30 \n", + "78 2.22 ( 0.02 ) 50.51 0.97 0.93 49.1 4.67 2.22 \n", + "79 2.12 ( 0.01 ) 49.87 0.92 0.78 46.0 2.14 2.12 \n", + "80 2.07 ( 0 ) 47.88 0.9 0.74 43.0 1.17 2.07 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(result.table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "## export\n", + "write.table(result.table_block, '../results_summary_cts/sim_block_rf.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_cts/.ipynb_checkpoints/2.4_sim_block_compLasso_cts-checkpoint.ipynb b/simulations/notebooks_sim_cts/.ipynb_checkpoints/2.4_sim_block_compLasso_cts-checkpoint.ipynb new file mode 100755 index 0000000..a50b32e --- /dev/null +++ b/simulations/notebooks_sim_cts/.ipynb_checkpoints/2.4_sim_block_compLasso_cts-checkpoint.ipynb @@ -0,0 +1,504 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize compositional lasso results on Block Simulation Scenarios for continuous outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'\n", + "\n", + "load(paste0(dir, '/block_compLasso.RData'))" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "rou.list = seq(0.1, 0.9, 0.2)\n", + "\n", + "files = NULL\n", + "for (rou in rou.list){\n", + " for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_block_corr', rou, paste('P', p, 'N', n, sep='_'), '.RData', sep=''))\n", + " }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "avg_FDR = NULL\n", + "for (i in 1:length(files)){\n", + " sim_file = files[i]\n", + " load(sim_file, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_block_compLasso[[i]]$Stab.table\n", + " \n", + " FDR = NULL\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "table_block = NULL\n", + "tmp_num_select = rep(0, length(results_block_compLasso))\n", + "for (i in 1:length(results_block_compLasso)){\n", + " table_block = rbind(table_block, results_block_compLasso[[i]][c('n', 'p', 'rou', 'FP', 'FN', 'MSE', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_block_compLasso[[i]]$Stab.table))\n", + " \n", + "}\n", + "table_block = as.data.frame(table_block)\n", + "table_block$num_select = tmp_num_select\n", + "table_block$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
nprouFPFNMSEStabnum_selectFDR
50 50 0.1 2.8 ( 0.36 ) 5.01 ( 0.09 )0.36 ( 0.01 )0.03 3.79 0.62
100 50 0.1 4.96 ( 0.55 )3.77 ( 0.14 )0.32 ( 0.01 )0.1 7.19 0.55
500 50 0.1 8.81 ( 0.4 ) 0.78 ( 0.08 )0.28 ( 0 ) 0.26 14.03 0.60
1000 50 0.1 8.37 ( 0.37 )0.24 ( 0.06 )0.27 ( 0 ) 0.31 14.13 0.56
50 100 0.1 2.54 ( 0.37 )5.22 ( 0.08 )0.37 ( 0.02 )0.04 3.32 0.63
100 100 0.1 3.99 ( 0.57 )4.63 ( 0.1 ) 0.35 ( 0.01 )0.07 5.36 0.56
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllll}\n", + " n & p & rou & FP & FN & MSE & Stab & num\\_select & FDR\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0.1 & 2.8 ( 0.36 ) & 5.01 ( 0.09 ) & 0.36 ( 0.01 ) & 0.03 & 3.79 & 0.62 \\\\\n", + "\t 100 & 50 & 0.1 & 4.96 ( 0.55 ) & 3.77 ( 0.14 ) & 0.32 ( 0.01 ) & 0.1 & 7.19 & 0.55 \\\\\n", + "\t 500 & 50 & 0.1 & 8.81 ( 0.4 ) & 0.78 ( 0.08 ) & 0.28 ( 0 ) & 0.26 & 14.03 & 0.60 \\\\\n", + "\t 1000 & 50 & 0.1 & 8.37 ( 0.37 ) & 0.24 ( 0.06 ) & 0.27 ( 0 ) & 0.31 & 14.13 & 0.56 \\\\\n", + "\t 50 & 100 & 0.1 & 2.54 ( 0.37 ) & 5.22 ( 0.08 ) & 0.37 ( 0.02 ) & 0.04 & 3.32 & 0.63 \\\\\n", + "\t 100 & 100 & 0.1 & 3.99 ( 0.57 ) & 4.63 ( 0.1 ) & 0.35 ( 0.01 ) & 0.07 & 5.36 & 0.56 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| n | p | rou | FP | FN | MSE | Stab | num_select | FDR |\n", + "|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0.1 | 2.8 ( 0.36 ) | 5.01 ( 0.09 ) | 0.36 ( 0.01 ) | 0.03 | 3.79 | 0.62 |\n", + "| 100 | 50 | 0.1 | 4.96 ( 0.55 ) | 3.77 ( 0.14 ) | 0.32 ( 0.01 ) | 0.1 | 7.19 | 0.55 |\n", + "| 500 | 50 | 0.1 | 8.81 ( 0.4 ) | 0.78 ( 0.08 ) | 0.28 ( 0 ) | 0.26 | 14.03 | 0.60 |\n", + "| 1000 | 50 | 0.1 | 8.37 ( 0.37 ) | 0.24 ( 0.06 ) | 0.27 ( 0 ) | 0.31 | 14.13 | 0.56 |\n", + "| 50 | 100 | 0.1 | 2.54 ( 0.37 ) | 5.22 ( 0.08 ) | 0.37 ( 0.02 ) | 0.04 | 3.32 | 0.63 |\n", + "| 100 | 100 | 0.1 | 3.99 ( 0.57 ) | 4.63 ( 0.1 ) | 0.35 ( 0.01 ) | 0.07 | 5.36 | 0.56 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN MSE Stab num_select FDR \n", + "1 50 50 0.1 2.8 ( 0.36 ) 5.01 ( 0.09 ) 0.36 ( 0.01 ) 0.03 3.79 0.62\n", + "2 100 50 0.1 4.96 ( 0.55 ) 3.77 ( 0.14 ) 0.32 ( 0.01 ) 0.1 7.19 0.55\n", + "3 500 50 0.1 8.81 ( 0.4 ) 0.78 ( 0.08 ) 0.28 ( 0 ) 0.26 14.03 0.60\n", + "4 1000 50 0.1 8.37 ( 0.37 ) 0.24 ( 0.06 ) 0.27 ( 0 ) 0.31 14.13 0.56\n", + "5 50 100 0.1 2.54 ( 0.37 ) 5.22 ( 0.08 ) 0.37 ( 0.02 ) 0.04 3.32 0.63\n", + "6 100 100 0.1 3.99 ( 0.57 ) 4.63 ( 0.1 ) 0.35 ( 0.01 ) 0.07 5.36 0.56" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_block <- apply(table_block,2,as.character)\n", + "rownames(result.table_block) = rownames(table_block)\n", + "result.table_block = as.data.frame(result.table_block)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_block$n = tidyr::extract_numeric(result.table_block$n)\n", + "result.table_block$p = tidyr::extract_numeric(result.table_block$p)\n", + "result.table_block$ratio = result.table_block$p / result.table_block$n\n", + "\n", + "result.table_block = result.table_block[c('n', 'p', 'rou', 'ratio', 'Stab', 'MSE', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_block)[1:4] = c('N', 'P', 'Corr', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”" + ] + } + ], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_block$Stab = as.numeric(as.character(result.table_block$Stab))\n", + "result.table_block$MSE_mean = as.numeric(substr(result.table_block$MSE, start=1, stop=4))\n", + "result.table_block$FP_mean = as.numeric(substr(result.table_block$FP, start=1, stop=4))\n", + "result.table_block$FN_mean = as.numeric(substr(result.table_block$FN, start=1, stop=4))\n", + "result.table_block$FN_mean[is.na(result.table_block$FN_mean)] = 0\n", + "result.table_block$num_select = as.numeric(as.character(result.table_block$num_select))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
21 50 100 0.3 2.0 0.27 0.94 ( 0.05 )6 ( 0.34 ) 1.93 ( 0.14 )10.07 0.54 0.94 NA 1.93
26100 500 0.3 5.0 0.30 0.73 ( 0.03 )9 ( 0.76 ) 0.99 ( 0.12 )14.01 0.52 0.73 NA 0.99
51500 50 0.7 0.1 0.90 1 ( 0.04 ) 0.58 ( 0.19 )0 ( 0 ) 6.58 0.06 NA 0.58 0.00
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t21 & 50 & 100 & 0.3 & 2.0 & 0.27 & 0.94 ( 0.05 ) & 6 ( 0.34 ) & 1.93 ( 0.14 ) & 10.07 & 0.54 & 0.94 & NA & 1.93 \\\\\n", + "\t26 & 100 & 500 & 0.3 & 5.0 & 0.30 & 0.73 ( 0.03 ) & 9 ( 0.76 ) & 0.99 ( 0.12 ) & 14.01 & 0.52 & 0.73 & NA & 0.99 \\\\\n", + "\t51 & 500 & 50 & 0.7 & 0.1 & 0.90 & 1 ( 0.04 ) & 0.58 ( 0.19 ) & 0 ( 0 ) & 6.58 & 0.06 & NA & 0.58 & 0.00 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 21 | 50 | 100 | 0.3 | 2.0 | 0.27 | 0.94 ( 0.05 ) | 6 ( 0.34 ) | 1.93 ( 0.14 ) | 10.07 | 0.54 | 0.94 | NA | 1.93 |\n", + "| 26 | 100 | 500 | 0.3 | 5.0 | 0.30 | 0.73 ( 0.03 ) | 9 ( 0.76 ) | 0.99 ( 0.12 ) | 14.01 | 0.52 | 0.73 | NA | 0.99 |\n", + "| 51 | 500 | 50 | 0.7 | 0.1 | 0.90 | 1 ( 0.04 ) | 0.58 ( 0.19 ) | 0 ( 0 ) | 6.58 | 0.06 | NA | 0.58 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN num_select\n", + "21 50 100 0.3 2.0 0.27 0.94 ( 0.05 ) 6 ( 0.34 ) 1.93 ( 0.14 ) 10.07 \n", + "26 100 500 0.3 5.0 0.30 0.73 ( 0.03 ) 9 ( 0.76 ) 0.99 ( 0.12 ) 14.01 \n", + "51 500 50 0.7 0.1 0.90 1 ( 0.04 ) 0.58 ( 0.19 ) 0 ( 0 ) 6.58 \n", + " FDR MSE_mean FP_mean FN_mean\n", + "21 0.54 0.94 NA 1.93 \n", + "26 0.52 0.73 NA 0.99 \n", + "51 0.06 NA 0.58 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check whether missing values exists\n", + "result.table_block[rowSums(is.na(result.table_block)) > 0,]" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "# recover values\n", + "result.table_block$FP_mean[is.na(result.table_block$FP_mean)] = 6\n", + "result.table_block$MSE_mean[is.na(result.table_block$MSE_mean)] = 1" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
21 50 100 0.3 2.0 0.27 0.94 ( 0.05 )6 ( 0.34 ) 1.93 ( 0.14 )10.07 0.54 0.94 6.00 1.93
26100 500 0.3 5.0 0.30 0.73 ( 0.03 )9 ( 0.76 ) 0.99 ( 0.12 )14.01 0.52 0.73 6.00 0.99
51500 50 0.7 0.1 0.90 1 ( 0.04 ) 0.58 ( 0.19 )0 ( 0 ) 6.58 0.06 1.00 0.58 0.00
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t21 & 50 & 100 & 0.3 & 2.0 & 0.27 & 0.94 ( 0.05 ) & 6 ( 0.34 ) & 1.93 ( 0.14 ) & 10.07 & 0.54 & 0.94 & 6.00 & 1.93 \\\\\n", + "\t26 & 100 & 500 & 0.3 & 5.0 & 0.30 & 0.73 ( 0.03 ) & 9 ( 0.76 ) & 0.99 ( 0.12 ) & 14.01 & 0.52 & 0.73 & 6.00 & 0.99 \\\\\n", + "\t51 & 500 & 50 & 0.7 & 0.1 & 0.90 & 1 ( 0.04 ) & 0.58 ( 0.19 ) & 0 ( 0 ) & 6.58 & 0.06 & 1.00 & 0.58 & 0.00 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 21 | 50 | 100 | 0.3 | 2.0 | 0.27 | 0.94 ( 0.05 ) | 6 ( 0.34 ) | 1.93 ( 0.14 ) | 10.07 | 0.54 | 0.94 | 6.00 | 1.93 |\n", + "| 26 | 100 | 500 | 0.3 | 5.0 | 0.30 | 0.73 ( 0.03 ) | 9 ( 0.76 ) | 0.99 ( 0.12 ) | 14.01 | 0.52 | 0.73 | 6.00 | 0.99 |\n", + "| 51 | 500 | 50 | 0.7 | 0.1 | 0.90 | 1 ( 0.04 ) | 0.58 ( 0.19 ) | 0 ( 0 ) | 6.58 | 0.06 | 1.00 | 0.58 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN num_select\n", + "21 50 100 0.3 2.0 0.27 0.94 ( 0.05 ) 6 ( 0.34 ) 1.93 ( 0.14 ) 10.07 \n", + "26 100 500 0.3 5.0 0.30 0.73 ( 0.03 ) 9 ( 0.76 ) 0.99 ( 0.12 ) 14.01 \n", + "51 500 50 0.7 0.1 0.90 1 ( 0.04 ) 0.58 ( 0.19 ) 0 ( 0 ) 6.58 \n", + " FDR MSE_mean FP_mean FN_mean\n", + "21 0.54 0.94 6.00 1.93 \n", + "26 0.52 0.73 6.00 0.99 \n", + "51 0.06 1.00 0.58 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_block[c(21,26,51), ]" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
50 50 0.1 1.00 0.03 0.36 ( 0.01 )2.8 ( 0.36 ) 5.01 ( 0.09 ) 3.79 0.62 0.36 2.80 5.01
100 50 0.1 0.50 0.10 0.32 ( 0.01 )4.96 ( 0.55 )3.77 ( 0.14 ) 7.19 0.55 0.32 4.96 3.77
500 50 0.1 0.10 0.26 0.28 ( 0 ) 8.81 ( 0.4 ) 0.78 ( 0.08 )14.03 0.6 0.28 8.81 0.78
1000 50 0.1 0.05 0.31 0.27 ( 0 ) 8.37 ( 0.37 )0.24 ( 0.06 )14.13 0.56 0.27 8.37 0.24
50 100 0.1 2.00 0.04 0.37 ( 0.02 )2.54 ( 0.37 )5.22 ( 0.08 ) 3.32 0.63 0.37 2.54 5.22
100 100 0.1 1.00 0.07 0.35 ( 0.01 )3.99 ( 0.57 )4.63 ( 0.1 ) 5.36 0.56 0.35 3.99 4.63
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0.1 & 1.00 & 0.03 & 0.36 ( 0.01 ) & 2.8 ( 0.36 ) & 5.01 ( 0.09 ) & 3.79 & 0.62 & 0.36 & 2.80 & 5.01 \\\\\n", + "\t 100 & 50 & 0.1 & 0.50 & 0.10 & 0.32 ( 0.01 ) & 4.96 ( 0.55 ) & 3.77 ( 0.14 ) & 7.19 & 0.55 & 0.32 & 4.96 & 3.77 \\\\\n", + "\t 500 & 50 & 0.1 & 0.10 & 0.26 & 0.28 ( 0 ) & 8.81 ( 0.4 ) & 0.78 ( 0.08 ) & 14.03 & 0.6 & 0.28 & 8.81 & 0.78 \\\\\n", + "\t 1000 & 50 & 0.1 & 0.05 & 0.31 & 0.27 ( 0 ) & 8.37 ( 0.37 ) & 0.24 ( 0.06 ) & 14.13 & 0.56 & 0.27 & 8.37 & 0.24 \\\\\n", + "\t 50 & 100 & 0.1 & 2.00 & 0.04 & 0.37 ( 0.02 ) & 2.54 ( 0.37 ) & 5.22 ( 0.08 ) & 3.32 & 0.63 & 0.37 & 2.54 & 5.22 \\\\\n", + "\t 100 & 100 & 0.1 & 1.00 & 0.07 & 0.35 ( 0.01 ) & 3.99 ( 0.57 ) & 4.63 ( 0.1 ) & 5.36 & 0.56 & 0.35 & 3.99 & 4.63 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0.1 | 1.00 | 0.03 | 0.36 ( 0.01 ) | 2.8 ( 0.36 ) | 5.01 ( 0.09 ) | 3.79 | 0.62 | 0.36 | 2.80 | 5.01 |\n", + "| 100 | 50 | 0.1 | 0.50 | 0.10 | 0.32 ( 0.01 ) | 4.96 ( 0.55 ) | 3.77 ( 0.14 ) | 7.19 | 0.55 | 0.32 | 4.96 | 3.77 |\n", + "| 500 | 50 | 0.1 | 0.10 | 0.26 | 0.28 ( 0 ) | 8.81 ( 0.4 ) | 0.78 ( 0.08 ) | 14.03 | 0.6 | 0.28 | 8.81 | 0.78 |\n", + "| 1000 | 50 | 0.1 | 0.05 | 0.31 | 0.27 ( 0 ) | 8.37 ( 0.37 ) | 0.24 ( 0.06 ) | 14.13 | 0.56 | 0.27 | 8.37 | 0.24 |\n", + "| 50 | 100 | 0.1 | 2.00 | 0.04 | 0.37 ( 0.02 ) | 2.54 ( 0.37 ) | 5.22 ( 0.08 ) | 3.32 | 0.63 | 0.37 | 2.54 | 5.22 |\n", + "| 100 | 100 | 0.1 | 1.00 | 0.07 | 0.35 ( 0.01 ) | 3.99 ( 0.57 ) | 4.63 ( 0.1 ) | 5.36 | 0.56 | 0.35 | 3.99 | 4.63 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN num_select\n", + "1 50 50 0.1 1.00 0.03 0.36 ( 0.01 ) 2.8 ( 0.36 ) 5.01 ( 0.09 ) 3.79 \n", + "2 100 50 0.1 0.50 0.10 0.32 ( 0.01 ) 4.96 ( 0.55 ) 3.77 ( 0.14 ) 7.19 \n", + "3 500 50 0.1 0.10 0.26 0.28 ( 0 ) 8.81 ( 0.4 ) 0.78 ( 0.08 ) 14.03 \n", + "4 1000 50 0.1 0.05 0.31 0.27 ( 0 ) 8.37 ( 0.37 ) 0.24 ( 0.06 ) 14.13 \n", + "5 50 100 0.1 2.00 0.04 0.37 ( 0.02 ) 2.54 ( 0.37 ) 5.22 ( 0.08 ) 3.32 \n", + "6 100 100 0.1 1.00 0.07 0.35 ( 0.01 ) 3.99 ( 0.57 ) 4.63 ( 0.1 ) 5.36 \n", + " FDR MSE_mean FP_mean FN_mean\n", + "1 0.62 0.36 2.80 5.01 \n", + "2 0.55 0.32 4.96 3.77 \n", + "3 0.6 0.28 8.81 0.78 \n", + "4 0.56 0.27 8.37 0.24 \n", + "5 0.63 0.37 2.54 5.22 \n", + "6 0.56 0.35 3.99 4.63 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
75 500 500 0.9 1.0 0.93 1.27 ( 0.05 )0.44 ( 0.18 )0 ( 0 ) 6.44 0.04 1.27 0.44 0.00
761000 500 0.9 0.5 0.96 1.31 ( 0.05 )0.23 ( 0.06 )0 ( 0 ) 6.23 0.03 1.31 0.23 0.00
77 50 1000 0.9 20.0 0.23 3.37 ( 0.19 )5.29 ( 0.41 )3.13 ( 0.15 ) 8.16 0.57 3.37 5.29 3.13
78 100 1000 0.9 10.0 0.56 1.14 ( 0.05 )4.56 ( 0.38 )0.07 ( 0.03 )10.49 0.37 1.14 4.56 0.07
79 500 1000 0.9 2.0 0.96 1.28 ( 0.04 )0.27 ( 0.11 )0 ( 0 ) 6.27 0.03 1.28 0.27 0.00
801000 1000 0.9 1.0 0.95 1.35 ( 0.05 )0.29 ( 0.09 )0 ( 0 ) 6.29 0.03 1.35 0.29 0.00
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 1.0 & 0.93 & 1.27 ( 0.05 ) & 0.44 ( 0.18 ) & 0 ( 0 ) & 6.44 & 0.04 & 1.27 & 0.44 & 0.00 \\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.5 & 0.96 & 1.31 ( 0.05 ) & 0.23 ( 0.06 ) & 0 ( 0 ) & 6.23 & 0.03 & 1.31 & 0.23 & 0.00 \\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.0 & 0.23 & 3.37 ( 0.19 ) & 5.29 ( 0.41 ) & 3.13 ( 0.15 ) & 8.16 & 0.57 & 3.37 & 5.29 & 3.13 \\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.0 & 0.56 & 1.14 ( 0.05 ) & 4.56 ( 0.38 ) & 0.07 ( 0.03 ) & 10.49 & 0.37 & 1.14 & 4.56 & 0.07 \\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.0 & 0.96 & 1.28 ( 0.04 ) & 0.27 ( 0.11 ) & 0 ( 0 ) & 6.27 & 0.03 & 1.28 & 0.27 & 0.00 \\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.0 & 0.95 & 1.35 ( 0.05 ) & 0.29 ( 0.09 ) & 0 ( 0 ) & 6.29 & 0.03 & 1.35 & 0.29 & 0.00 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 1.0 | 0.93 | 1.27 ( 0.05 ) | 0.44 ( 0.18 ) | 0 ( 0 ) | 6.44 | 0.04 | 1.27 | 0.44 | 0.00 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.5 | 0.96 | 1.31 ( 0.05 ) | 0.23 ( 0.06 ) | 0 ( 0 ) | 6.23 | 0.03 | 1.31 | 0.23 | 0.00 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.0 | 0.23 | 3.37 ( 0.19 ) | 5.29 ( 0.41 ) | 3.13 ( 0.15 ) | 8.16 | 0.57 | 3.37 | 5.29 | 3.13 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.0 | 0.56 | 1.14 ( 0.05 ) | 4.56 ( 0.38 ) | 0.07 ( 0.03 ) | 10.49 | 0.37 | 1.14 | 4.56 | 0.07 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.0 | 0.96 | 1.28 ( 0.04 ) | 0.27 ( 0.11 ) | 0 ( 0 ) | 6.27 | 0.03 | 1.28 | 0.27 | 0.00 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.0 | 0.95 | 1.35 ( 0.05 ) | 0.29 ( 0.09 ) | 0 ( 0 ) | 6.29 | 0.03 | 1.35 | 0.29 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN \n", + "75 500 500 0.9 1.0 0.93 1.27 ( 0.05 ) 0.44 ( 0.18 ) 0 ( 0 ) \n", + "76 1000 500 0.9 0.5 0.96 1.31 ( 0.05 ) 0.23 ( 0.06 ) 0 ( 0 ) \n", + "77 50 1000 0.9 20.0 0.23 3.37 ( 0.19 ) 5.29 ( 0.41 ) 3.13 ( 0.15 )\n", + "78 100 1000 0.9 10.0 0.56 1.14 ( 0.05 ) 4.56 ( 0.38 ) 0.07 ( 0.03 )\n", + "79 500 1000 0.9 2.0 0.96 1.28 ( 0.04 ) 0.27 ( 0.11 ) 0 ( 0 ) \n", + "80 1000 1000 0.9 1.0 0.95 1.35 ( 0.05 ) 0.29 ( 0.09 ) 0 ( 0 ) \n", + " num_select FDR MSE_mean FP_mean FN_mean\n", + "75 6.44 0.04 1.27 0.44 0.00 \n", + "76 6.23 0.03 1.31 0.23 0.00 \n", + "77 8.16 0.57 3.37 5.29 3.13 \n", + "78 10.49 0.37 1.14 4.56 0.07 \n", + "79 6.27 0.03 1.28 0.27 0.00 \n", + "80 6.29 0.03 1.35 0.29 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(result.table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "## export\n", + "write.table(result.table_block, '../results_summary_cts/sim_block_compLasso.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_cts/.ipynb_checkpoints/3_sim_cts_summary-checkpoint.ipynb b/simulations/notebooks_sim_cts/.ipynb_checkpoints/3_sim_cts_summary-checkpoint.ipynb new file mode 100755 index 0000000..5487719 --- /dev/null +++ b/simulations/notebooks_sim_cts/.ipynb_checkpoints/3_sim_cts_summary-checkpoint.ipynb @@ -0,0 +1,998 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize method comparison results across 4 feature selection methods in different simulation scenarios" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1. Independent Design" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "ind_lasso = read.csv('../results_summary_cts/sim_ind_lasso.txt', sep='\\t')\n", + "ind_elnet = read.csv('../results_summary_cts/sim_ind_elnet.txt', sep='\\t')\n", + "ind_rf = read.csv('../results_summary_cts/sim_ind_rf.txt', sep='\\t')\n", + "ind_compLasso = read.csv('../results_summary_cts/sim_ind_compLasso.txt', sep='\\t')\n", + "\n", + "ind_lasso$method = rep('lasso', dim(ind_lasso)[1])\n", + "ind_elnet$method = rep('elnet', dim(ind_elnet)[1])\n", + "ind_rf$method = rep('rf', dim(ind_rf)[1])\n", + "ind_compLasso$method = rep('compLasso', dim(ind_compLasso)[1])" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 16
  2. \n", + "\t
  3. 13
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 16\n", + "\\item 13\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 16\n", + "2. 13\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 16 13" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 16
  2. \n", + "\t
  3. 13
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 16\n", + "\\item 13\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 16\n", + "2. 13\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 16 13" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 16
  2. \n", + "\t
  3. 16
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 16\n", + "\\item 16\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 16\n", + "2. 16\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 16 16" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 16
  2. \n", + "\t
  3. 13
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 16\n", + "\\item 13\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 16\n", + "2. 13\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 16 13" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "dim(ind_lasso)\n", + "dim(ind_elnet)\n", + "dim(ind_rf)\n", + "dim(ind_compLasso)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 16
  2. \n", + "\t
  3. 13
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 16\n", + "\\item 13\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 16\n", + "2. 13\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 16 13" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ind_rf = ind_rf[!names(ind_rf)%in% c('OOB', 'OOB_mean', 'Index')]\n", + "dim(ind_rf)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 64
  2. \n", + "\t
  3. 13
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 64\n", + "\\item 13\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 64\n", + "2. 13\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 64 13" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ind = rbind(ind_lasso, ind_elnet)\n", + "ind = rbind(ind, ind_rf)\n", + "ind = rbind(ind, ind_compLasso)\n", + "dim(ind)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# fix false positives: when nothing was selected, then fp should be zero\n", + "# fp is now 1 due to length(setdiff(0/NA)) = 1 when actually should be 0 (in cv_sim_apply.R)\n", + "ind$FP_mean[ind$num_select ==0] = 0" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "write.table(ind, '../results_summary_cts/table_ind_all.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPmethodStabMSE_meanFP_meanFN_meannum_selectFDR
161000 1000 lasso 0.64 0.27 4.39 0.00 9.39 0.26
321000 1000 elnet 0.15 0.27 34.60 0.00 39.65 0.79
481000 1000 rf 0.09 0.85 41.70 0.99 46.78 0.89
641000 1000 compLasso0.96 1.16 0.24 0.00 6.24 0.03
121000 500 lasso 0.72 0.27 3.35 0.00 8.35 0.21
281000 500 elnet 0.18 0.26 27.20 0.00 32.21 0.77
441000 500 rf 0.19 0.78 18.70 0.84 23.89 0.78
601000 500 compLasso0.96 1.24 0.25 0.00 6.25 0.03
81000 100 lasso 0.82 0.27 2.25 0.00 7.25 0.15
241000 100 elnet 0.23 0.26 17.00 0.00 22.05 0.69
401000 100 rf 0.81 0.47 0.71 0.53 6.18 0.10
561000 100 compLasso0.89 1.04 0.71 0.00 6.71 0.08
41000 50 lasso 0.86 0.26 1.82 0.00 6.82 0.10
201000 50 elnet 0.27 0.25 11.70 0.00 16.76 0.60
361000 50 rf 0.88 0.35 0.07 0.78 5.29 0.01
521000 50 compLasso0.93 1.18 0.39 0.00 6.39 0.04
15 500 1000 lasso 0.52 0.29 6.51 0.00 11.51 0.40
31 500 1000 elnet 0.14 0.27 35.90 0.00 40.98 0.80
47 500 1000 rf 0.06 0.89 44.70 1.81 48.96 0.91
63 500 1000 compLasso0.96 1.12 0.27 0.00 6.27 0.03
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllll}\n", + " & N & P & method & Stab & MSE\\_mean & FP\\_mean & FN\\_mean & num\\_select & FDR\\\\\n", + "\\hline\n", + "\t16 & 1000 & 1000 & lasso & 0.64 & 0.27 & 4.39 & 0.00 & 9.39 & 0.26 \\\\\n", + "\t32 & 1000 & 1000 & elnet & 0.15 & 0.27 & 34.60 & 0.00 & 39.65 & 0.79 \\\\\n", + "\t48 & 1000 & 1000 & rf & 0.09 & 0.85 & 41.70 & 0.99 & 46.78 & 0.89 \\\\\n", + "\t64 & 1000 & 1000 & compLasso & 0.96 & 1.16 & 0.24 & 0.00 & 6.24 & 0.03 \\\\\n", + "\t12 & 1000 & 500 & lasso & 0.72 & 0.27 & 3.35 & 0.00 & 8.35 & 0.21 \\\\\n", + "\t28 & 1000 & 500 & elnet & 0.18 & 0.26 & 27.20 & 0.00 & 32.21 & 0.77 \\\\\n", + "\t44 & 1000 & 500 & rf & 0.19 & 0.78 & 18.70 & 0.84 & 23.89 & 0.78 \\\\\n", + "\t60 & 1000 & 500 & compLasso & 0.96 & 1.24 & 0.25 & 0.00 & 6.25 & 0.03 \\\\\n", + "\t8 & 1000 & 100 & lasso & 0.82 & 0.27 & 2.25 & 0.00 & 7.25 & 0.15 \\\\\n", + "\t24 & 1000 & 100 & elnet & 0.23 & 0.26 & 17.00 & 0.00 & 22.05 & 0.69 \\\\\n", + "\t40 & 1000 & 100 & rf & 0.81 & 0.47 & 0.71 & 0.53 & 6.18 & 0.10 \\\\\n", + "\t56 & 1000 & 100 & compLasso & 0.89 & 1.04 & 0.71 & 0.00 & 6.71 & 0.08 \\\\\n", + "\t4 & 1000 & 50 & lasso & 0.86 & 0.26 & 1.82 & 0.00 & 6.82 & 0.10 \\\\\n", + "\t20 & 1000 & 50 & elnet & 0.27 & 0.25 & 11.70 & 0.00 & 16.76 & 0.60 \\\\\n", + "\t36 & 1000 & 50 & rf & 0.88 & 0.35 & 0.07 & 0.78 & 5.29 & 0.01 \\\\\n", + "\t52 & 1000 & 50 & compLasso & 0.93 & 1.18 & 0.39 & 0.00 & 6.39 & 0.04 \\\\\n", + "\t15 & 500 & 1000 & lasso & 0.52 & 0.29 & 6.51 & 0.00 & 11.51 & 0.40 \\\\\n", + "\t31 & 500 & 1000 & elnet & 0.14 & 0.27 & 35.90 & 0.00 & 40.98 & 0.80 \\\\\n", + "\t47 & 500 & 1000 & rf & 0.06 & 0.89 & 44.70 & 1.81 & 48.96 & 0.91 \\\\\n", + "\t63 & 500 & 1000 & compLasso & 0.96 & 1.12 & 0.27 & 0.00 & 6.27 & 0.03 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | method | Stab | MSE_mean | FP_mean | FN_mean | num_select | FDR |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 16 | 1000 | 1000 | lasso | 0.64 | 0.27 | 4.39 | 0.00 | 9.39 | 0.26 |\n", + "| 32 | 1000 | 1000 | elnet | 0.15 | 0.27 | 34.60 | 0.00 | 39.65 | 0.79 |\n", + "| 48 | 1000 | 1000 | rf | 0.09 | 0.85 | 41.70 | 0.99 | 46.78 | 0.89 |\n", + "| 64 | 1000 | 1000 | compLasso | 0.96 | 1.16 | 0.24 | 0.00 | 6.24 | 0.03 |\n", + "| 12 | 1000 | 500 | lasso | 0.72 | 0.27 | 3.35 | 0.00 | 8.35 | 0.21 |\n", + "| 28 | 1000 | 500 | elnet | 0.18 | 0.26 | 27.20 | 0.00 | 32.21 | 0.77 |\n", + "| 44 | 1000 | 500 | rf | 0.19 | 0.78 | 18.70 | 0.84 | 23.89 | 0.78 |\n", + "| 60 | 1000 | 500 | compLasso | 0.96 | 1.24 | 0.25 | 0.00 | 6.25 | 0.03 |\n", + "| 8 | 1000 | 100 | lasso | 0.82 | 0.27 | 2.25 | 0.00 | 7.25 | 0.15 |\n", + "| 24 | 1000 | 100 | elnet | 0.23 | 0.26 | 17.00 | 0.00 | 22.05 | 0.69 |\n", + "| 40 | 1000 | 100 | rf | 0.81 | 0.47 | 0.71 | 0.53 | 6.18 | 0.10 |\n", + "| 56 | 1000 | 100 | compLasso | 0.89 | 1.04 | 0.71 | 0.00 | 6.71 | 0.08 |\n", + "| 4 | 1000 | 50 | lasso | 0.86 | 0.26 | 1.82 | 0.00 | 6.82 | 0.10 |\n", + "| 20 | 1000 | 50 | elnet | 0.27 | 0.25 | 11.70 | 0.00 | 16.76 | 0.60 |\n", + "| 36 | 1000 | 50 | rf | 0.88 | 0.35 | 0.07 | 0.78 | 5.29 | 0.01 |\n", + "| 52 | 1000 | 50 | compLasso | 0.93 | 1.18 | 0.39 | 0.00 | 6.39 | 0.04 |\n", + "| 15 | 500 | 1000 | lasso | 0.52 | 0.29 | 6.51 | 0.00 | 11.51 | 0.40 |\n", + "| 31 | 500 | 1000 | elnet | 0.14 | 0.27 | 35.90 | 0.00 | 40.98 | 0.80 |\n", + "| 47 | 500 | 1000 | rf | 0.06 | 0.89 | 44.70 | 1.81 | 48.96 | 0.91 |\n", + "| 63 | 500 | 1000 | compLasso | 0.96 | 1.12 | 0.27 | 0.00 | 6.27 | 0.03 |\n", + "\n" + ], + "text/plain": [ + " N P method Stab MSE_mean FP_mean FN_mean num_select FDR \n", + "16 1000 1000 lasso 0.64 0.27 4.39 0.00 9.39 0.26\n", + "32 1000 1000 elnet 0.15 0.27 34.60 0.00 39.65 0.79\n", + "48 1000 1000 rf 0.09 0.85 41.70 0.99 46.78 0.89\n", + "64 1000 1000 compLasso 0.96 1.16 0.24 0.00 6.24 0.03\n", + "12 1000 500 lasso 0.72 0.27 3.35 0.00 8.35 0.21\n", + "28 1000 500 elnet 0.18 0.26 27.20 0.00 32.21 0.77\n", + "44 1000 500 rf 0.19 0.78 18.70 0.84 23.89 0.78\n", + "60 1000 500 compLasso 0.96 1.24 0.25 0.00 6.25 0.03\n", + "8 1000 100 lasso 0.82 0.27 2.25 0.00 7.25 0.15\n", + "24 1000 100 elnet 0.23 0.26 17.00 0.00 22.05 0.69\n", + "40 1000 100 rf 0.81 0.47 0.71 0.53 6.18 0.10\n", + "56 1000 100 compLasso 0.89 1.04 0.71 0.00 6.71 0.08\n", + "4 1000 50 lasso 0.86 0.26 1.82 0.00 6.82 0.10\n", + "20 1000 50 elnet 0.27 0.25 11.70 0.00 16.76 0.60\n", + "36 1000 50 rf 0.88 0.35 0.07 0.78 5.29 0.01\n", + "52 1000 50 compLasso 0.93 1.18 0.39 0.00 6.39 0.04\n", + "15 500 1000 lasso 0.52 0.29 6.51 0.00 11.51 0.40\n", + "31 500 1000 elnet 0.14 0.27 35.90 0.00 40.98 0.80\n", + "47 500 1000 rf 0.06 0.89 44.70 1.81 48.96 0.91\n", + "63 500 1000 compLasso 0.96 1.12 0.27 0.00 6.27 0.03" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ind[order(ind$N, ind$P, decreasing=T), c('N', 'P', 'method', 'Stab', 'MSE_mean', 'FP_mean', 'FN_mean', 'num_select', 'FDR')][1:20, ]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2. Toeplitz Design" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "toe_lasso = read.csv('../results_summary_cts/sim_toe_lasso.txt', sep='\\t')\n", + "toe_elnet = read.csv('../results_summary_cts/sim_toe_elnet.txt', sep='\\t')\n", + "toe_rf = read.csv('../results_summary_cts/sim_toe_rf.txt', sep='\\t')\n", + "toe_compLasso = read.csv('../results_summary_cts/sim_toe_compLasso.txt', sep='\\t')\n", + "\n", + "toe_lasso$method = rep('lasso', dim(toe_lasso)[1])\n", + "toe_elnet$method = rep('elnet', dim(toe_elnet)[1])\n", + "toe_rf$method = rep('rf', dim(toe_rf)[1])\n", + "toe_compLasso$method = rep('compLasso', dim(toe_compLasso)[1])" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 80
  2. \n", + "\t
  3. 14
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 80\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 80\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 80 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 80
  2. \n", + "\t
  3. 14
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 80\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 80\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 80 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 80
  2. \n", + "\t
  3. 16
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 80\n", + "\\item 16\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 80\n", + "2. 16\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 80 16" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 80
  2. \n", + "\t
  3. 14
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 80\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 80\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 80 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "dim(toe_lasso)\n", + "dim(toe_elnet)\n", + "dim(toe_rf)\n", + "dim(toe_compLasso)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 80
  2. \n", + "\t
  3. 14
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 80\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 80\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 80 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "toe_rf = toe_rf[!names(toe_rf)%in% c('OOB', 'OOB_mean', 'toeex')]\n", + "dim(toe_rf)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 320
  2. \n", + "\t
  3. 14
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 320\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 320\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 320 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "toe = rbind(toe_lasso, toe_elnet)\n", + "toe = rbind(toe, toe_rf)\n", + "toe = rbind(toe, toe_compLasso)\n", + "dim(toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_meanmethod
16150 50 0.1 1 0 1.4 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.40 1 6 rf
16550 100 0.1 2 0 1.36 ( 0.06 )1 ( 0 ) 6 ( 0 ) 0 NaN 1.36 1 6 rf
16950 500 0.1 10 0 1.29 ( 0.05 )1 ( 0 ) 6 ( 0 ) 0 NaN 1.29 1 6 rf
17350 1000 0.1 20 0 1.35 ( 0.06 )1 ( 0 ) 6 ( 0 ) 0 NaN 1.35 1 6 rf
17750 50 0.3 1 0 1.22 ( 0.05 )1 ( 0 ) 6 ( 0 ) 0 NaN 1.22 1 6 rf
18150 100 0.3 2 0 1.15 ( 0.05 )1 ( 0 ) 6 ( 0 ) 0 NaN 1.15 1 6 rf
18550 500 0.3 10 0 1.14 ( 0.05 )1 ( 0 ) 6 ( 0 ) 0 NaN 1.14 1 6 rf
18950 1000 0.3 20 0 1.2 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.20 1 6 rf
19350 50 0.5 1 0 0.99 ( 0.05 )1 ( 0 ) 6 ( 0 ) 0 NaN 0.99 1 6 rf
19750 100 0.5 2 0 0.91 ( 0.04 )1 ( 0 ) 6 ( 0 ) 0 NaN 0.91 1 6 rf
20150 500 0.5 10 0 0.95 ( 0.04 )1 ( 0 ) 6 ( 0 ) 0 NaN 0.95 1 6 rf
20550 1000 0.5 20 0 0.94 ( 0.04 )1 ( 0 ) 6 ( 0 ) 0 NaN 0.94 1 6 rf
20950 50 0.7 1 0 0.66 ( 0.03 )1 ( 0 ) 6 ( 0 ) 0 NaN 0.66 1 6 rf
21350 100 0.7 2 0 0.67 ( 0.03 )1 ( 0 ) 6 ( 0 ) 0 NaN 0.67 1 6 rf
21750 500 0.7 10 0 0.7 ( 0.03 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 0.70 1 6 rf
22150 1000 0.7 20 0 0.74 ( 0.03 )1 ( 0 ) 6 ( 0 ) 0 NaN 0.74 1 6 rf
22550 50 0.9 1 0 0.27 ( 0.01 )1 ( 0 ) 6 ( 0 ) 0 NaN 0.27 1 6 rf
22950 100 0.9 2 0 0.3 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 0.30 1 6 rf
23350 500 0.9 10 0 0.29 ( 0.01 )1 ( 0 ) 6 ( 0 ) 0 NaN 0.29 1 6 rf
23750 1000 0.9 20 0 0.29 ( 0.01 )1 ( 0 ) 6 ( 0 ) 0 NaN 0.29 1 6 rf
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|llllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean & method\\\\\n", + "\\hline\n", + "\t161 & 50 & 50 & 0.1 & 1 & 0 & 1.4 ( 0.06 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.40 & 1 & 6 & rf \\\\\n", + "\t165 & 50 & 100 & 0.1 & 2 & 0 & 1.36 ( 0.06 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.36 & 1 & 6 & rf \\\\\n", + "\t169 & 50 & 500 & 0.1 & 10 & 0 & 1.29 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.29 & 1 & 6 & rf \\\\\n", + "\t173 & 50 & 1000 & 0.1 & 20 & 0 & 1.35 ( 0.06 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.35 & 1 & 6 & rf \\\\\n", + "\t177 & 50 & 50 & 0.3 & 1 & 0 & 1.22 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.22 & 1 & 6 & rf \\\\\n", + "\t181 & 50 & 100 & 0.3 & 2 & 0 & 1.15 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.15 & 1 & 6 & rf \\\\\n", + "\t185 & 50 & 500 & 0.3 & 10 & 0 & 1.14 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.14 & 1 & 6 & rf \\\\\n", + "\t189 & 50 & 1000 & 0.3 & 20 & 0 & 1.2 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.20 & 1 & 6 & rf \\\\\n", + "\t193 & 50 & 50 & 0.5 & 1 & 0 & 0.99 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.99 & 1 & 6 & rf \\\\\n", + "\t197 & 50 & 100 & 0.5 & 2 & 0 & 0.91 ( 0.04 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.91 & 1 & 6 & rf \\\\\n", + "\t201 & 50 & 500 & 0.5 & 10 & 0 & 0.95 ( 0.04 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.95 & 1 & 6 & rf \\\\\n", + "\t205 & 50 & 1000 & 0.5 & 20 & 0 & 0.94 ( 0.04 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.94 & 1 & 6 & rf \\\\\n", + "\t209 & 50 & 50 & 0.7 & 1 & 0 & 0.66 ( 0.03 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.66 & 1 & 6 & rf \\\\\n", + "\t213 & 50 & 100 & 0.7 & 2 & 0 & 0.67 ( 0.03 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.67 & 1 & 6 & rf \\\\\n", + "\t217 & 50 & 500 & 0.7 & 10 & 0 & 0.7 ( 0.03 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.70 & 1 & 6 & rf \\\\\n", + "\t221 & 50 & 1000 & 0.7 & 20 & 0 & 0.74 ( 0.03 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.74 & 1 & 6 & rf \\\\\n", + "\t225 & 50 & 50 & 0.9 & 1 & 0 & 0.27 ( 0.01 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.27 & 1 & 6 & rf \\\\\n", + "\t229 & 50 & 100 & 0.9 & 2 & 0 & 0.3 ( 0.01 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.30 & 1 & 6 & rf \\\\\n", + "\t233 & 50 & 500 & 0.9 & 10 & 0 & 0.29 ( 0.01 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.29 & 1 & 6 & rf \\\\\n", + "\t237 & 50 & 1000 & 0.9 & 20 & 0 & 0.29 ( 0.01 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.29 & 1 & 6 & rf \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean | method |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 161 | 50 | 50 | 0.1 | 1 | 0 | 1.4 ( 0.06 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.40 | 1 | 6 | rf |\n", + "| 165 | 50 | 100 | 0.1 | 2 | 0 | 1.36 ( 0.06 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.36 | 1 | 6 | rf |\n", + "| 169 | 50 | 500 | 0.1 | 10 | 0 | 1.29 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.29 | 1 | 6 | rf |\n", + "| 173 | 50 | 1000 | 0.1 | 20 | 0 | 1.35 ( 0.06 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.35 | 1 | 6 | rf |\n", + "| 177 | 50 | 50 | 0.3 | 1 | 0 | 1.22 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.22 | 1 | 6 | rf |\n", + "| 181 | 50 | 100 | 0.3 | 2 | 0 | 1.15 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.15 | 1 | 6 | rf |\n", + "| 185 | 50 | 500 | 0.3 | 10 | 0 | 1.14 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.14 | 1 | 6 | rf |\n", + "| 189 | 50 | 1000 | 0.3 | 20 | 0 | 1.2 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.20 | 1 | 6 | rf |\n", + "| 193 | 50 | 50 | 0.5 | 1 | 0 | 0.99 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.99 | 1 | 6 | rf |\n", + "| 197 | 50 | 100 | 0.5 | 2 | 0 | 0.91 ( 0.04 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.91 | 1 | 6 | rf |\n", + "| 201 | 50 | 500 | 0.5 | 10 | 0 | 0.95 ( 0.04 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.95 | 1 | 6 | rf |\n", + "| 205 | 50 | 1000 | 0.5 | 20 | 0 | 0.94 ( 0.04 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.94 | 1 | 6 | rf |\n", + "| 209 | 50 | 50 | 0.7 | 1 | 0 | 0.66 ( 0.03 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.66 | 1 | 6 | rf |\n", + "| 213 | 50 | 100 | 0.7 | 2 | 0 | 0.67 ( 0.03 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.67 | 1 | 6 | rf |\n", + "| 217 | 50 | 500 | 0.7 | 10 | 0 | 0.7 ( 0.03 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.70 | 1 | 6 | rf |\n", + "| 221 | 50 | 1000 | 0.7 | 20 | 0 | 0.74 ( 0.03 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.74 | 1 | 6 | rf |\n", + "| 225 | 50 | 50 | 0.9 | 1 | 0 | 0.27 ( 0.01 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.27 | 1 | 6 | rf |\n", + "| 229 | 50 | 100 | 0.9 | 2 | 0 | 0.3 ( 0.01 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.30 | 1 | 6 | rf |\n", + "| 233 | 50 | 500 | 0.9 | 10 | 0 | 0.29 ( 0.01 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.29 | 1 | 6 | rf |\n", + "| 237 | 50 | 1000 | 0.9 | 20 | 0 | 0.29 ( 0.01 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.29 | 1 | 6 | rf |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN num_select FDR\n", + "161 50 50 0.1 1 0 1.4 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) 0 NaN\n", + "165 50 100 0.1 2 0 1.36 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) 0 NaN\n", + "169 50 500 0.1 10 0 1.29 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 0 NaN\n", + "173 50 1000 0.1 20 0 1.35 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) 0 NaN\n", + "177 50 50 0.3 1 0 1.22 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 0 NaN\n", + "181 50 100 0.3 2 0 1.15 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 0 NaN\n", + "185 50 500 0.3 10 0 1.14 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 0 NaN\n", + "189 50 1000 0.3 20 0 1.2 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 0 NaN\n", + "193 50 50 0.5 1 0 0.99 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 0 NaN\n", + "197 50 100 0.5 2 0 0.91 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) 0 NaN\n", + "201 50 500 0.5 10 0 0.95 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) 0 NaN\n", + "205 50 1000 0.5 20 0 0.94 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) 0 NaN\n", + "209 50 50 0.7 1 0 0.66 ( 0.03 ) 1 ( 0 ) 6 ( 0 ) 0 NaN\n", + "213 50 100 0.7 2 0 0.67 ( 0.03 ) 1 ( 0 ) 6 ( 0 ) 0 NaN\n", + "217 50 500 0.7 10 0 0.7 ( 0.03 ) 1 ( 0 ) 6 ( 0 ) 0 NaN\n", + "221 50 1000 0.7 20 0 0.74 ( 0.03 ) 1 ( 0 ) 6 ( 0 ) 0 NaN\n", + "225 50 50 0.9 1 0 0.27 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) 0 NaN\n", + "229 50 100 0.9 2 0 0.3 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) 0 NaN\n", + "233 50 500 0.9 10 0 0.29 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) 0 NaN\n", + "237 50 1000 0.9 20 0 0.29 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) 0 NaN\n", + " MSE_mean FP_mean FN_mean method\n", + "161 1.40 1 6 rf \n", + "165 1.36 1 6 rf \n", + "169 1.29 1 6 rf \n", + "173 1.35 1 6 rf \n", + "177 1.22 1 6 rf \n", + "181 1.15 1 6 rf \n", + "185 1.14 1 6 rf \n", + "189 1.20 1 6 rf \n", + "193 0.99 1 6 rf \n", + "197 0.91 1 6 rf \n", + "201 0.95 1 6 rf \n", + "205 0.94 1 6 rf \n", + "209 0.66 1 6 rf \n", + "213 0.67 1 6 rf \n", + "217 0.70 1 6 rf \n", + "221 0.74 1 6 rf \n", + "225 0.27 1 6 rf \n", + "229 0.30 1 6 rf \n", + "233 0.29 1 6 rf \n", + "237 0.29 1 6 rf " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "toe[toe$num_select == 0, ]" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "# fix false positives: when nothing was selected, then fp should be zero\n", + "# fp is now 1 due to length(setdiff(0/NA)) = 1 when actually should be 0 (in cv_sim_apply.R)\n", + "toe$FP_mean[toe$num_select ==0] = 0\n", + "write.table(toe, '../results_summary_cts/table_toe_all.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3. Block Design" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "block_lasso = read.csv('../results_summary_cts/sim_block_lasso.txt', sep='\\t')\n", + "block_elnet = read.csv('../results_summary_cts/sim_block_elnet.txt', sep='\\t')\n", + "block_rf = read.csv('../results_summary_cts/sim_block_rf.txt', sep='\\t')\n", + "block_compLasso = read.csv('../results_summary_cts/sim_block_compLasso.txt', sep='\\t')\n", + "\n", + "block_lasso$method = rep('lasso', dim(block_lasso)[1])\n", + "block_elnet$method = rep('elnet', dim(block_elnet)[1])\n", + "block_rf$method = rep('rf', dim(block_rf)[1])\n", + "block_compLasso$method = rep('compLasso', dim(block_compLasso)[1])" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 80
  2. \n", + "\t
  3. 14
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 80\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 80\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 80 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 80
  2. \n", + "\t
  3. 14
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 80\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 80\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 80 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 80
  2. \n", + "\t
  3. 16
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 80\n", + "\\item 16\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 80\n", + "2. 16\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 80 16" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 80
  2. \n", + "\t
  3. 14
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 80\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 80\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 80 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "dim(block_lasso)\n", + "dim(block_elnet)\n", + "dim(block_rf)\n", + "dim(block_compLasso)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 80
  2. \n", + "\t
  3. 14
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 80\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 80\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 80 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "block_rf = block_rf[!names(block_rf)%in% c('OOB', 'OOB_mean', 'blockex')]\n", + "dim(block_rf)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 320
  2. \n", + "\t
  3. 14
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 320\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 320\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 320 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "block = rbind(block_lasso, block_elnet)\n", + "block = rbind(block, block_rf)\n", + "block = rbind(block, block_compLasso)\n", + "dim(block)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "# fix false positives: when nothing was selected, then fp should be zero\n", + "# fp is now 1 due to length(setdiff(0/NA)) = 1 when actually should be 0 (in cv_sim_apply.R)\n", + "block$FP_mean[block$num_select ==0] = 0\n", + "write.table(block, '../results_summary_cts/table_block_all.txt', sep='\\t', row.names=F)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_cts/.ipynb_checkpoints/4_sim_cts_bootstrap_testing-checkpoint.ipynb b/simulations/notebooks_sim_cts/.ipynb_checkpoints/4_sim_cts_bootstrap_testing-checkpoint.ipynb new file mode 100755 index 0000000..6ed9920 --- /dev/null +++ b/simulations/notebooks_sim_cts/.ipynb_checkpoints/4_sim_cts_bootstrap_testing-checkpoint.ipynb @@ -0,0 +1,636 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Hypothesis testing based on boostrap for selected simulation scenario" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "load(paste0(dir, '/boot_toe_RF.RData'))\n", + "load(paste0(dir, '/boot_block_RF.RData'))\n", + "load(paste0(dir, '/boot_toe_compLasso.RData'))\n", + "load(paste0(dir, '/boot_block_compLasso.RData'))" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
toe_rftoe_linblock_rfblock_lin
0.010.250.010.26
0.010.230.010.23
0.010.280.000.20
0.010.250.010.26
0.010.230.010.25
0.010.230.000.26
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|llll}\n", + " toe\\_rf & toe\\_lin & block\\_rf & block\\_lin\\\\\n", + "\\hline\n", + "\t 0.01 & 0.25 & 0.01 & 0.26\\\\\n", + "\t 0.01 & 0.23 & 0.01 & 0.23\\\\\n", + "\t 0.01 & 0.28 & 0.00 & 0.20\\\\\n", + "\t 0.01 & 0.25 & 0.01 & 0.26\\\\\n", + "\t 0.01 & 0.23 & 0.01 & 0.25\\\\\n", + "\t 0.01 & 0.23 & 0.00 & 0.26\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| toe_rf | toe_lin | block_rf | block_lin |\n", + "|---|---|---|---|\n", + "| 0.01 | 0.25 | 0.01 | 0.26 |\n", + "| 0.01 | 0.23 | 0.01 | 0.23 |\n", + "| 0.01 | 0.28 | 0.00 | 0.20 |\n", + "| 0.01 | 0.25 | 0.01 | 0.26 |\n", + "| 0.01 | 0.23 | 0.01 | 0.25 |\n", + "| 0.01 | 0.23 | 0.00 | 0.26 |\n", + "\n" + ], + "text/plain": [ + " toe_rf toe_lin block_rf block_lin\n", + "1 0.01 0.25 0.01 0.26 \n", + "2 0.01 0.23 0.01 0.23 \n", + "3 0.01 0.28 0.00 0.20 \n", + "4 0.01 0.25 0.01 0.26 \n", + "5 0.01 0.23 0.01 0.25 \n", + "6 0.01 0.23 0.00 0.26 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "table = as.data.frame(cbind(toe_rf$stab_index, toe_lin$stab_index, block_rf$stab_index, block_lin$stab_index))\n", + "colnames(table) = c('toe_rf', 'toe_lin', 'block_rf', 'block_lin')\n", + "head(table)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Two sample test based on Bootstrap" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "## interpretation: if confidence interval doesn't contain zero, then significant\n", + "## ref: correct intrepretation of confidence intervals: https://journals.sagepub.com/doi/pdf/10.1177/201010581001900316" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "0.2247" + ], + "text/latex": [ + "0.2247" + ], + "text/markdown": [ + "0.2247" + ], + "text/plain": [ + "[1] 0.2247" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\t
2.5%
\n", + "\t\t
0.19
\n", + "\t
97.5%
\n", + "\t\t
0.28
\n", + "
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[2.5\\textbackslash{}\\%] 0.19\n", + "\\item[97.5\\textbackslash{}\\%] 0.28\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "2.5%\n", + ": 0.1997.5%\n", + ": 0.28\n", + "\n" + ], + "text/plain": [ + " 2.5% 97.5% \n", + " 0.19 0.28 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "diff_toe = (table$toe_lin - table$toe_rf)\n", + "mean(diff_toe)\n", + "quantile(diff_toe, probs = c(0.025, 0.975))" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "0.2289" + ], + "text/latex": [ + "0.2289" + ], + "text/markdown": [ + "0.2289" + ], + "text/plain": [ + "[1] 0.2289" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\t
2.5%
\n", + "\t\t
0.17475
\n", + "\t
97.5%
\n", + "\t\t
0.28525
\n", + "
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[2.5\\textbackslash{}\\%] 0.17475\n", + "\\item[97.5\\textbackslash{}\\%] 0.28525\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "2.5%\n", + ": 0.1747597.5%\n", + ": 0.28525\n", + "\n" + ], + "text/plain": [ + " 2.5% 97.5% \n", + "0.17475 0.28525 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "diff_block = (table$block_lin - table$block_rf)\n", + "mean(diff_block)\n", + "quantile(diff_block, probs = c(0.025, 0.975))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Compare based on MSE" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### block 0.5" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\n", + "
nprouMSEMSE.list
46100 1000 0.5 0.47 ( 0.01 ) 0.4923079, 0.5236572, 0.3049313, 0.4022395, 0.4116445, 0.4457436, 0.5321101, 0.3994759, 0.3889622, 0.4957112, 0.2661450, 0.5383919, 0.4251333, 0.5020789, 0.5774619, 0.3274016, 0.5765174, 0.4136176, 0.5066335, 0.7475691, 0.7385966, 0.3141407, 0.4786586, 0.4811622, 0.4128133, 0.6605431, 0.5315163, 0.4400826, 0.8595558, 0.3382323, 0.4297301, 0.4961741, 0.5237057, 0.6787550, 0.4064282, 0.4305124, 0.3051361, 0.4404218, 0.4208728, 0.5967023, 0.5111793, 0.5062338, 0.2653858, 0.5910289, 0.3166639, 0.4614773, 0.4315483, 0.6846844, 0.4522860, 0.2785640, 0.6029796, 0.4161780, 0.5801175, 0.4112313, 0.5364697, 0.4318882, 0.3655746, 0.4455715, 0.3465285, 0.7532535, 0.3877135, 0.5023844, 0.2049257, 0.4338186, 0.3111033, 0.4220746, 0.5432892, 0.7013340, 0.5247176, 0.3747088, 0.3819685, 0.4208868, 0.2586503, 0.5655622, 0.5948446, 0.3660124, 0.4598678, 0.6435442, 0.3349638, 0.4052510, 0.6205234, 0.4349098, 0.6964996, 0.4033935, 0.4308613, 0.5466399, 0.3565571, 0.5507224, 0.3275157, 0.4857403, 0.3745229, 0.4944044, 0.4354932, 0.4055464, 0.4792593, 0.5230589, 0.2415968, 0.3994462, 0.6382857, 0.5929313
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllll}\n", + " & n & p & rou & MSE & MSE.list\\\\\n", + "\\hline\n", + "\t46 & 100 & 1000 & 0.5 & 0.47 ( 0.01 ) & 0.4923079, 0.5236572, 0.3049313, 0.4022395, 0.4116445, 0.4457436, 0.5321101, 0.3994759, 0.3889622, 0.4957112, 0.2661450, 0.5383919, 0.4251333, 0.5020789, 0.5774619, 0.3274016, 0.5765174, 0.4136176, 0.5066335, 0.7475691, 0.7385966, 0.3141407, 0.4786586, 0.4811622, 0.4128133, 0.6605431, 0.5315163, 0.4400826, 0.8595558, 0.3382323, 0.4297301, 0.4961741, 0.5237057, 0.6787550, 0.4064282, 0.4305124, 0.3051361, 0.4404218, 0.4208728, 0.5967023, 0.5111793, 0.5062338, 0.2653858, 0.5910289, 0.3166639, 0.4614773, 0.4315483, 0.6846844, 0.4522860, 0.2785640, 0.6029796, 0.4161780, 0.5801175, 0.4112313, 0.5364697, 0.4318882, 0.3655746, 0.4455715, 0.3465285, 0.7532535, 0.3877135, 0.5023844, 0.2049257, 0.4338186, 0.3111033, 0.4220746, 0.5432892, 0.7013340, 0.5247176, 0.3747088, 0.3819685, 0.4208868, 0.2586503, 0.5655622, 0.5948446, 0.3660124, 0.4598678, 0.6435442, 0.3349638, 0.4052510, 0.6205234, 0.4349098, 0.6964996, 0.4033935, 0.4308613, 0.5466399, 0.3565571, 0.5507224, 0.3275157, 0.4857403, 0.3745229, 0.4944044, 0.4354932, 0.4055464, 0.4792593, 0.5230589, 0.2415968, 0.3994462, 0.6382857, 0.5929313\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | n | p | rou | MSE | MSE.list |\n", + "|---|---|---|---|---|---|\n", + "| 46 | 100 | 1000 | 0.5 | 0.47 ( 0.01 ) | 0.4923079, 0.5236572, 0.3049313, 0.4022395, 0.4116445, 0.4457436, 0.5321101, 0.3994759, 0.3889622, 0.4957112, 0.2661450, 0.5383919, 0.4251333, 0.5020789, 0.5774619, 0.3274016, 0.5765174, 0.4136176, 0.5066335, 0.7475691, 0.7385966, 0.3141407, 0.4786586, 0.4811622, 0.4128133, 0.6605431, 0.5315163, 0.4400826, 0.8595558, 0.3382323, 0.4297301, 0.4961741, 0.5237057, 0.6787550, 0.4064282, 0.4305124, 0.3051361, 0.4404218, 0.4208728, 0.5967023, 0.5111793, 0.5062338, 0.2653858, 0.5910289, 0.3166639, 0.4614773, 0.4315483, 0.6846844, 0.4522860, 0.2785640, 0.6029796, 0.4161780, 0.5801175, 0.4112313, 0.5364697, 0.4318882, 0.3655746, 0.4455715, 0.3465285, 0.7532535, 0.3877135, 0.5023844, 0.2049257, 0.4338186, 0.3111033, 0.4220746, 0.5432892, 0.7013340, 0.5247176, 0.3747088, 0.3819685, 0.4208868, 0.2586503, 0.5655622, 0.5948446, 0.3660124, 0.4598678, 0.6435442, 0.3349638, 0.4052510, 0.6205234, 0.4349098, 0.6964996, 0.4033935, 0.4308613, 0.5466399, 0.3565571, 0.5507224, 0.3275157, 0.4857403, 0.3745229, 0.4944044, 0.4354932, 0.4055464, 0.4792593, 0.5230589, 0.2415968, 0.3994462, 0.6382857, 0.5929313 |\n", + "\n" + ], + "text/plain": [ + " n p rou MSE \n", + "46 100 1000 0.5 0.47 ( 0.01 )\n", + " MSE.list \n", + "46 0.4923079, 0.5236572, 0.3049313, 0.4022395, 0.4116445, 0.4457436, 0.5321101, 0.3994759, 0.3889622, 0.4957112, 0.2661450, 0.5383919, 0.4251333, 0.5020789, 0.5774619, 0.3274016, 0.5765174, 0.4136176, 0.5066335, 0.7475691, 0.7385966, 0.3141407, 0.4786586, 0.4811622, 0.4128133, 0.6605431, 0.5315163, 0.4400826, 0.8595558, 0.3382323, 0.4297301, 0.4961741, 0.5237057, 0.6787550, 0.4064282, 0.4305124, 0.3051361, 0.4404218, 0.4208728, 0.5967023, 0.5111793, 0.5062338, 0.2653858, 0.5910289, 0.3166639, 0.4614773, 0.4315483, 0.6846844, 0.4522860, 0.2785640, 0.6029796, 0.4161780, 0.5801175, 0.4112313, 0.5364697, 0.4318882, 0.3655746, 0.4455715, 0.3465285, 0.7532535, 0.3877135, 0.5023844, 0.2049257, 0.4338186, 0.3111033, 0.4220746, 0.5432892, 0.7013340, 0.5247176, 0.3747088, 0.3819685, 0.4208868, 0.2586503, 0.5655622, 0.5948446, 0.3660124, 0.4598678, 0.6435442, 0.3349638, 0.4052510, 0.6205234, 0.4349098, 0.6964996, 0.4033935, 0.4308613, 0.5466399, 0.3565571, 0.5507224, 0.3275157, 0.4857403, 0.3745229, 0.4944044, 0.4354932, 0.4055464, 0.4792593, 0.5230589, 0.2415968, 0.3994462, 0.6382857, 0.5929313" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "table_block_rf = NULL\n", + "for (i in 1:length(results_block_rf)){\n", + " table_block_rf = rbind(table_block_rf, results_block_rf[[i]][c('n', 'p', 'rou', 'MSE', 'MSE.list')])\n", + "}\n", + "table_block_rf = as.data.frame(table_block_rf)\n", + "rf_block5_rf= table_block_rf[table_block_rf$n == 100 & table_block_rf$p == 1000 & table_block_rf$rou == 0.5, ]\n", + "rf_block5_rf" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\n", + "
nprouMSEMSE.list
46100 1000 0.5 0.91 ( 0.04 ) 1.1101125, 0.6519860, 0.7398478, 1.1498738, 0.9619897, 0.6013746, 1.3625092, 0.3473651, 1.1450087, 0.6678814, 0.2637982, 1.1272821, 0.5100440, 1.1207711, 0.6858812, 0.4732182, 0.4877071, 1.3858793, 0.9285002, 0.8910513, 0.4041991, 0.3094465, 0.7791739, 0.9177788, 1.3679422, 0.3555295, 0.6004392, 0.9110635, 0.6472957, 0.9988893, 2.1903274, 2.5255804, 0.9870283, 1.2731291, 0.6370381, 0.9076340, 0.8604679, 0.7195767, 0.8129923, 0.8024248, 0.9105749, 1.5656134, 0.4518466, 0.5868373, 0.7896528, 1.1223770, 0.2244172, 0.4527471, 1.0980113, 0.8810156, 0.9874237, 1.6133751, 1.7549198, 0.8114664, 0.6056103, 1.2937025, 0.5187529, 0.4362994, 1.0523983, 0.4049739, 0.6115282, 0.7411138, 1.0011934, 0.3509803, 0.5946993, 0.8179413, 0.8536523, 0.5527882, 0.9707325, 1.2802410, 0.9099143, 0.8149918, 1.0858406, 0.8915861, 1.1319847, 0.9534063, 1.8160839, 1.0257458, 0.9344737, 0.6119914, 0.5159076, 0.7852905, 0.4582427, 0.8083787, 1.2116205, 0.5323257, 1.1506337, 0.9291959, 1.6839768, 1.1023322, 1.4818658, 0.7335560, 1.3694255, 0.6343668, 0.5388556, 0.8552869, 2.0695142, 0.5429316, 0.7798566, 1.5607776
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllll}\n", + " & n & p & rou & MSE & MSE.list\\\\\n", + "\\hline\n", + "\t46 & 100 & 1000 & 0.5 & 0.91 ( 0.04 ) & 1.1101125, 0.6519860, 0.7398478, 1.1498738, 0.9619897, 0.6013746, 1.3625092, 0.3473651, 1.1450087, 0.6678814, 0.2637982, 1.1272821, 0.5100440, 1.1207711, 0.6858812, 0.4732182, 0.4877071, 1.3858793, 0.9285002, 0.8910513, 0.4041991, 0.3094465, 0.7791739, 0.9177788, 1.3679422, 0.3555295, 0.6004392, 0.9110635, 0.6472957, 0.9988893, 2.1903274, 2.5255804, 0.9870283, 1.2731291, 0.6370381, 0.9076340, 0.8604679, 0.7195767, 0.8129923, 0.8024248, 0.9105749, 1.5656134, 0.4518466, 0.5868373, 0.7896528, 1.1223770, 0.2244172, 0.4527471, 1.0980113, 0.8810156, 0.9874237, 1.6133751, 1.7549198, 0.8114664, 0.6056103, 1.2937025, 0.5187529, 0.4362994, 1.0523983, 0.4049739, 0.6115282, 0.7411138, 1.0011934, 0.3509803, 0.5946993, 0.8179413, 0.8536523, 0.5527882, 0.9707325, 1.2802410, 0.9099143, 0.8149918, 1.0858406, 0.8915861, 1.1319847, 0.9534063, 1.8160839, 1.0257458, 0.9344737, 0.6119914, 0.5159076, 0.7852905, 0.4582427, 0.8083787, 1.2116205, 0.5323257, 1.1506337, 0.9291959, 1.6839768, 1.1023322, 1.4818658, 0.7335560, 1.3694255, 0.6343668, 0.5388556, 0.8552869, 2.0695142, 0.5429316, 0.7798566, 1.5607776\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | n | p | rou | MSE | MSE.list |\n", + "|---|---|---|---|---|---|\n", + "| 46 | 100 | 1000 | 0.5 | 0.91 ( 0.04 ) | 1.1101125, 0.6519860, 0.7398478, 1.1498738, 0.9619897, 0.6013746, 1.3625092, 0.3473651, 1.1450087, 0.6678814, 0.2637982, 1.1272821, 0.5100440, 1.1207711, 0.6858812, 0.4732182, 0.4877071, 1.3858793, 0.9285002, 0.8910513, 0.4041991, 0.3094465, 0.7791739, 0.9177788, 1.3679422, 0.3555295, 0.6004392, 0.9110635, 0.6472957, 0.9988893, 2.1903274, 2.5255804, 0.9870283, 1.2731291, 0.6370381, 0.9076340, 0.8604679, 0.7195767, 0.8129923, 0.8024248, 0.9105749, 1.5656134, 0.4518466, 0.5868373, 0.7896528, 1.1223770, 0.2244172, 0.4527471, 1.0980113, 0.8810156, 0.9874237, 1.6133751, 1.7549198, 0.8114664, 0.6056103, 1.2937025, 0.5187529, 0.4362994, 1.0523983, 0.4049739, 0.6115282, 0.7411138, 1.0011934, 0.3509803, 0.5946993, 0.8179413, 0.8536523, 0.5527882, 0.9707325, 1.2802410, 0.9099143, 0.8149918, 1.0858406, 0.8915861, 1.1319847, 0.9534063, 1.8160839, 1.0257458, 0.9344737, 0.6119914, 0.5159076, 0.7852905, 0.4582427, 0.8083787, 1.2116205, 0.5323257, 1.1506337, 0.9291959, 1.6839768, 1.1023322, 1.4818658, 0.7335560, 1.3694255, 0.6343668, 0.5388556, 0.8552869, 2.0695142, 0.5429316, 0.7798566, 1.5607776 |\n", + "\n" + ], + "text/plain": [ + " n p rou MSE \n", + "46 100 1000 0.5 0.91 ( 0.04 )\n", + " MSE.list \n", + "46 1.1101125, 0.6519860, 0.7398478, 1.1498738, 0.9619897, 0.6013746, 1.3625092, 0.3473651, 1.1450087, 0.6678814, 0.2637982, 1.1272821, 0.5100440, 1.1207711, 0.6858812, 0.4732182, 0.4877071, 1.3858793, 0.9285002, 0.8910513, 0.4041991, 0.3094465, 0.7791739, 0.9177788, 1.3679422, 0.3555295, 0.6004392, 0.9110635, 0.6472957, 0.9988893, 2.1903274, 2.5255804, 0.9870283, 1.2731291, 0.6370381, 0.9076340, 0.8604679, 0.7195767, 0.8129923, 0.8024248, 0.9105749, 1.5656134, 0.4518466, 0.5868373, 0.7896528, 1.1223770, 0.2244172, 0.4527471, 1.0980113, 0.8810156, 0.9874237, 1.6133751, 1.7549198, 0.8114664, 0.6056103, 1.2937025, 0.5187529, 0.4362994, 1.0523983, 0.4049739, 0.6115282, 0.7411138, 1.0011934, 0.3509803, 0.5946993, 0.8179413, 0.8536523, 0.5527882, 0.9707325, 1.2802410, 0.9099143, 0.8149918, 1.0858406, 0.8915861, 1.1319847, 0.9534063, 1.8160839, 1.0257458, 0.9344737, 0.6119914, 0.5159076, 0.7852905, 0.4582427, 0.8083787, 1.2116205, 0.5323257, 1.1506337, 0.9291959, 1.6839768, 1.1023322, 1.4818658, 0.7335560, 1.3694255, 0.6343668, 0.5388556, 0.8552869, 2.0695142, 0.5429316, 0.7798566, 1.5607776" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "table_block_compLasso = NULL\n", + "for (i in 1:length(results_block_compLasso)){\n", + " table_block_compLasso = rbind(table_block_compLasso, results_block_compLasso[[i]][c('n', 'p', 'rou', 'MSE', 'MSE.list')])\n", + "}\n", + "table_block_compLasso = as.data.frame(table_block_compLasso)\n", + "rf_block5_compLasso= table_block_compLasso[table_block_compLasso$n == 100 & table_block_compLasso$p == 1000 & table_block_compLasso$rou == 0.5, ]\n", + "rf_block5_compLasso" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "0.439514359427722" + ], + "text/latex": [ + "0.439514359427722" + ], + "text/markdown": [ + "0.439514359427722" + ], + "text/plain": [ + "[1] 0.4395144" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "0.454598954212658" + ], + "text/latex": [ + "0.454598954212658" + ], + "text/markdown": [ + "0.454598954212658" + ], + "text/plain": [ + "[1] 0.454599" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\t
2.5%
\n", + "\t\t
-0.273304180160457
\n", + "\t
97.5%
\n", + "\t\t
1.56863259003766
\n", + "
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[2.5\\textbackslash{}\\%] -0.273304180160457\n", + "\\item[97.5\\textbackslash{}\\%] 1.56863259003766\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "2.5%\n", + ": -0.27330418016045797.5%\n", + ": 1.56863259003766\n", + "\n" + ], + "text/plain": [ + " 2.5% 97.5% \n", + "-0.2733042 1.5686326 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "diff_block = (unlist(rf_block5_compLasso$MSE.list) - unlist(rf_block5_rf$MSE.list))\n", + "mean(diff_block)\n", + "sd(diff_block)\n", + "quantile(diff_block, probs = c(0.025, 0.975))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Toeplitz 0.5" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\n", + "
nprouMSEMSE.list
46100 1000 0.5 0.72 ( 0.02 ) 0.5480701, 0.5456622, 0.6046593, 0.7802792, 0.5564160, 0.8468460, 0.4962066, 0.6002301, 0.7197087, 0.8322002, 0.8370241, 0.7042491, 0.7296914, 0.7883332, 0.7773170, 0.8004030, 0.5738099, 0.7080895, 0.4735798, 0.8907030, 0.4745488, 0.6972922, 0.8183826, 0.5698736, 0.6296879, 0.6939117, 0.8883939, 0.5428835, 1.1874869, 0.6937746, 0.4956598, 0.5523018, 0.8295625, 0.8923571, 1.0726882, 0.6509979, 0.5781111, 0.9521210, 0.5251293, 0.7952157, 0.7322116, 0.6871817, 0.7204011, 1.1810854, 1.1751481, 0.7082380, 0.6971877, 1.0196209, 0.7037824, 0.8105835, 1.1165501, 0.5775225, 0.5665563, 0.7273973, 1.3113648, 0.6025675, 0.8935835, 0.6165939, 0.3838047, 0.6833741, 0.5721250, 0.5478751, 0.5123701, 0.7706215, 1.0321326, 0.7021128, 0.5282792, 0.5642605, 0.7610716, 0.6069513, 0.6572387, 0.8830648, 0.7969348, 0.9412556, 0.5570120, 0.6591877, 0.6899799, 0.5051250, 0.8911872, 0.5656055, 1.0006875, 0.8468315, 0.9820390, 0.6041058, 0.9307259, 0.7710037, 0.5545953, 0.4067023, 0.5719611, 0.4234005, 0.8979186, 0.9248135, 0.5666418, 0.7263402, 0.9324326, 0.4342892, 0.7020636, 0.8808153, 0.6929102, 0.6299956
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllll}\n", + " & n & p & rou & MSE & MSE.list\\\\\n", + "\\hline\n", + "\t46 & 100 & 1000 & 0.5 & 0.72 ( 0.02 ) & 0.5480701, 0.5456622, 0.6046593, 0.7802792, 0.5564160, 0.8468460, 0.4962066, 0.6002301, 0.7197087, 0.8322002, 0.8370241, 0.7042491, 0.7296914, 0.7883332, 0.7773170, 0.8004030, 0.5738099, 0.7080895, 0.4735798, 0.8907030, 0.4745488, 0.6972922, 0.8183826, 0.5698736, 0.6296879, 0.6939117, 0.8883939, 0.5428835, 1.1874869, 0.6937746, 0.4956598, 0.5523018, 0.8295625, 0.8923571, 1.0726882, 0.6509979, 0.5781111, 0.9521210, 0.5251293, 0.7952157, 0.7322116, 0.6871817, 0.7204011, 1.1810854, 1.1751481, 0.7082380, 0.6971877, 1.0196209, 0.7037824, 0.8105835, 1.1165501, 0.5775225, 0.5665563, 0.7273973, 1.3113648, 0.6025675, 0.8935835, 0.6165939, 0.3838047, 0.6833741, 0.5721250, 0.5478751, 0.5123701, 0.7706215, 1.0321326, 0.7021128, 0.5282792, 0.5642605, 0.7610716, 0.6069513, 0.6572387, 0.8830648, 0.7969348, 0.9412556, 0.5570120, 0.6591877, 0.6899799, 0.5051250, 0.8911872, 0.5656055, 1.0006875, 0.8468315, 0.9820390, 0.6041058, 0.9307259, 0.7710037, 0.5545953, 0.4067023, 0.5719611, 0.4234005, 0.8979186, 0.9248135, 0.5666418, 0.7263402, 0.9324326, 0.4342892, 0.7020636, 0.8808153, 0.6929102, 0.6299956\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | n | p | rou | MSE | MSE.list |\n", + "|---|---|---|---|---|---|\n", + "| 46 | 100 | 1000 | 0.5 | 0.72 ( 0.02 ) | 0.5480701, 0.5456622, 0.6046593, 0.7802792, 0.5564160, 0.8468460, 0.4962066, 0.6002301, 0.7197087, 0.8322002, 0.8370241, 0.7042491, 0.7296914, 0.7883332, 0.7773170, 0.8004030, 0.5738099, 0.7080895, 0.4735798, 0.8907030, 0.4745488, 0.6972922, 0.8183826, 0.5698736, 0.6296879, 0.6939117, 0.8883939, 0.5428835, 1.1874869, 0.6937746, 0.4956598, 0.5523018, 0.8295625, 0.8923571, 1.0726882, 0.6509979, 0.5781111, 0.9521210, 0.5251293, 0.7952157, 0.7322116, 0.6871817, 0.7204011, 1.1810854, 1.1751481, 0.7082380, 0.6971877, 1.0196209, 0.7037824, 0.8105835, 1.1165501, 0.5775225, 0.5665563, 0.7273973, 1.3113648, 0.6025675, 0.8935835, 0.6165939, 0.3838047, 0.6833741, 0.5721250, 0.5478751, 0.5123701, 0.7706215, 1.0321326, 0.7021128, 0.5282792, 0.5642605, 0.7610716, 0.6069513, 0.6572387, 0.8830648, 0.7969348, 0.9412556, 0.5570120, 0.6591877, 0.6899799, 0.5051250, 0.8911872, 0.5656055, 1.0006875, 0.8468315, 0.9820390, 0.6041058, 0.9307259, 0.7710037, 0.5545953, 0.4067023, 0.5719611, 0.4234005, 0.8979186, 0.9248135, 0.5666418, 0.7263402, 0.9324326, 0.4342892, 0.7020636, 0.8808153, 0.6929102, 0.6299956 |\n", + "\n" + ], + "text/plain": [ + " n p rou MSE \n", + "46 100 1000 0.5 0.72 ( 0.02 )\n", + " MSE.list \n", + "46 0.5480701, 0.5456622, 0.6046593, 0.7802792, 0.5564160, 0.8468460, 0.4962066, 0.6002301, 0.7197087, 0.8322002, 0.8370241, 0.7042491, 0.7296914, 0.7883332, 0.7773170, 0.8004030, 0.5738099, 0.7080895, 0.4735798, 0.8907030, 0.4745488, 0.6972922, 0.8183826, 0.5698736, 0.6296879, 0.6939117, 0.8883939, 0.5428835, 1.1874869, 0.6937746, 0.4956598, 0.5523018, 0.8295625, 0.8923571, 1.0726882, 0.6509979, 0.5781111, 0.9521210, 0.5251293, 0.7952157, 0.7322116, 0.6871817, 0.7204011, 1.1810854, 1.1751481, 0.7082380, 0.6971877, 1.0196209, 0.7037824, 0.8105835, 1.1165501, 0.5775225, 0.5665563, 0.7273973, 1.3113648, 0.6025675, 0.8935835, 0.6165939, 0.3838047, 0.6833741, 0.5721250, 0.5478751, 0.5123701, 0.7706215, 1.0321326, 0.7021128, 0.5282792, 0.5642605, 0.7610716, 0.6069513, 0.6572387, 0.8830648, 0.7969348, 0.9412556, 0.5570120, 0.6591877, 0.6899799, 0.5051250, 0.8911872, 0.5656055, 1.0006875, 0.8468315, 0.9820390, 0.6041058, 0.9307259, 0.7710037, 0.5545953, 0.4067023, 0.5719611, 0.4234005, 0.8979186, 0.9248135, 0.5666418, 0.7263402, 0.9324326, 0.4342892, 0.7020636, 0.8808153, 0.6929102, 0.6299956" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "table_toe_rf = NULL\n", + "for (i in 1:length(results_toe_rf)){\n", + " table_toe_rf = rbind(table_toe_rf, results_toe_rf[[i]][c('n', 'p', 'rou', 'MSE', 'MSE.list')])\n", + "}\n", + "table_toe_rf = as.data.frame(table_toe_rf)\n", + "rf_toe5_rf= table_toe_rf[table_toe_rf$n == 100 & table_toe_rf$p == 1000 & table_toe_rf$rou == 0.5, ]\n", + "rf_toe5_rf" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\n", + "
nprouMSEMSE.list
46100 1000 0.5 0.96 ( 0.05 ) 1.1333219, 1.2739089, 0.6735451, 0.7455676, 0.8084525, 0.9115262, 1.1253772, 0.7718239, 0.7704166, 0.9337895, 0.6251795, 1.2304850, 0.9825552, 0.6256884, 0.8465868, 0.8928493, 0.6841306, 0.7445355, 1.0251240, 1.0109804, 0.6584266, 0.6574249, 0.8796538, 0.5822056, 1.8200702, 0.3513984, 0.7348276, 1.9856867, 0.5293853, 1.2169509, 0.4462136, 1.0628981, 1.0927890, 0.7534512, 0.3504197, 0.6451335, 0.7688543, 0.4767431, 1.7155647, 1.6765981, 0.5145321, 0.4758315, 1.9340790, 0.3082418, 0.8707792, 0.8961984, 0.6985983, 1.4072453, 0.3051685, 0.5767318, 0.8742455, 1.1188925, 1.0622541, 1.1897730, 0.7308046, 1.1798550, 0.5843354, 0.6606599, 1.0553048, 1.0076178, 0.6620472, 0.5932031, 1.5098887, 0.9258426, 0.5178589, 0.8255029, 0.7817222, 1.9833525, 0.8742543, 1.0785289, 0.9291164, 0.5450408, 0.9975609, 0.8724312, 0.5304621, 1.0475676, 1.5424944, 1.3738204, 2.1881127, 1.7968121, 0.7707653, 0.5582550, 1.4977663, 0.8136983, 0.5509221, 0.5157933, 1.1241994, 0.5044806, 1.1753270, 0.4650944, 1.0019032, 0.7552821, 0.8536905, 3.1389767, 0.8944839, 0.8503332, 0.9161472, 1.7568389, 0.9580790, 1.2403539
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllll}\n", + " & n & p & rou & MSE & MSE.list\\\\\n", + "\\hline\n", + "\t46 & 100 & 1000 & 0.5 & 0.96 ( 0.05 ) & 1.1333219, 1.2739089, 0.6735451, 0.7455676, 0.8084525, 0.9115262, 1.1253772, 0.7718239, 0.7704166, 0.9337895, 0.6251795, 1.2304850, 0.9825552, 0.6256884, 0.8465868, 0.8928493, 0.6841306, 0.7445355, 1.0251240, 1.0109804, 0.6584266, 0.6574249, 0.8796538, 0.5822056, 1.8200702, 0.3513984, 0.7348276, 1.9856867, 0.5293853, 1.2169509, 0.4462136, 1.0628981, 1.0927890, 0.7534512, 0.3504197, 0.6451335, 0.7688543, 0.4767431, 1.7155647, 1.6765981, 0.5145321, 0.4758315, 1.9340790, 0.3082418, 0.8707792, 0.8961984, 0.6985983, 1.4072453, 0.3051685, 0.5767318, 0.8742455, 1.1188925, 1.0622541, 1.1897730, 0.7308046, 1.1798550, 0.5843354, 0.6606599, 1.0553048, 1.0076178, 0.6620472, 0.5932031, 1.5098887, 0.9258426, 0.5178589, 0.8255029, 0.7817222, 1.9833525, 0.8742543, 1.0785289, 0.9291164, 0.5450408, 0.9975609, 0.8724312, 0.5304621, 1.0475676, 1.5424944, 1.3738204, 2.1881127, 1.7968121, 0.7707653, 0.5582550, 1.4977663, 0.8136983, 0.5509221, 0.5157933, 1.1241994, 0.5044806, 1.1753270, 0.4650944, 1.0019032, 0.7552821, 0.8536905, 3.1389767, 0.8944839, 0.8503332, 0.9161472, 1.7568389, 0.9580790, 1.2403539\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | n | p | rou | MSE | MSE.list |\n", + "|---|---|---|---|---|---|\n", + "| 46 | 100 | 1000 | 0.5 | 0.96 ( 0.05 ) | 1.1333219, 1.2739089, 0.6735451, 0.7455676, 0.8084525, 0.9115262, 1.1253772, 0.7718239, 0.7704166, 0.9337895, 0.6251795, 1.2304850, 0.9825552, 0.6256884, 0.8465868, 0.8928493, 0.6841306, 0.7445355, 1.0251240, 1.0109804, 0.6584266, 0.6574249, 0.8796538, 0.5822056, 1.8200702, 0.3513984, 0.7348276, 1.9856867, 0.5293853, 1.2169509, 0.4462136, 1.0628981, 1.0927890, 0.7534512, 0.3504197, 0.6451335, 0.7688543, 0.4767431, 1.7155647, 1.6765981, 0.5145321, 0.4758315, 1.9340790, 0.3082418, 0.8707792, 0.8961984, 0.6985983, 1.4072453, 0.3051685, 0.5767318, 0.8742455, 1.1188925, 1.0622541, 1.1897730, 0.7308046, 1.1798550, 0.5843354, 0.6606599, 1.0553048, 1.0076178, 0.6620472, 0.5932031, 1.5098887, 0.9258426, 0.5178589, 0.8255029, 0.7817222, 1.9833525, 0.8742543, 1.0785289, 0.9291164, 0.5450408, 0.9975609, 0.8724312, 0.5304621, 1.0475676, 1.5424944, 1.3738204, 2.1881127, 1.7968121, 0.7707653, 0.5582550, 1.4977663, 0.8136983, 0.5509221, 0.5157933, 1.1241994, 0.5044806, 1.1753270, 0.4650944, 1.0019032, 0.7552821, 0.8536905, 3.1389767, 0.8944839, 0.8503332, 0.9161472, 1.7568389, 0.9580790, 1.2403539 |\n", + "\n" + ], + "text/plain": [ + " n p rou MSE \n", + "46 100 1000 0.5 0.96 ( 0.05 )\n", + " MSE.list \n", + "46 1.1333219, 1.2739089, 0.6735451, 0.7455676, 0.8084525, 0.9115262, 1.1253772, 0.7718239, 0.7704166, 0.9337895, 0.6251795, 1.2304850, 0.9825552, 0.6256884, 0.8465868, 0.8928493, 0.6841306, 0.7445355, 1.0251240, 1.0109804, 0.6584266, 0.6574249, 0.8796538, 0.5822056, 1.8200702, 0.3513984, 0.7348276, 1.9856867, 0.5293853, 1.2169509, 0.4462136, 1.0628981, 1.0927890, 0.7534512, 0.3504197, 0.6451335, 0.7688543, 0.4767431, 1.7155647, 1.6765981, 0.5145321, 0.4758315, 1.9340790, 0.3082418, 0.8707792, 0.8961984, 0.6985983, 1.4072453, 0.3051685, 0.5767318, 0.8742455, 1.1188925, 1.0622541, 1.1897730, 0.7308046, 1.1798550, 0.5843354, 0.6606599, 1.0553048, 1.0076178, 0.6620472, 0.5932031, 1.5098887, 0.9258426, 0.5178589, 0.8255029, 0.7817222, 1.9833525, 0.8742543, 1.0785289, 0.9291164, 0.5450408, 0.9975609, 0.8724312, 0.5304621, 1.0475676, 1.5424944, 1.3738204, 2.1881127, 1.7968121, 0.7707653, 0.5582550, 1.4977663, 0.8136983, 0.5509221, 0.5157933, 1.1241994, 0.5044806, 1.1753270, 0.4650944, 1.0019032, 0.7552821, 0.8536905, 3.1389767, 0.8944839, 0.8503332, 0.9161472, 1.7568389, 0.9580790, 1.2403539" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "table_toe_compLasso = NULL\n", + "for (i in 1:length(results_toe_compLasso)){\n", + " table_toe_compLasso = rbind(table_toe_compLasso, results_toe_compLasso[[i]][c('n', 'p', 'rou', 'MSE', 'MSE.list')])\n", + "}\n", + "table_toe_compLasso = as.data.frame(table_toe_compLasso)\n", + "rf_toe5_compLasso= table_toe_compLasso[table_toe_compLasso$n == 100 & table_toe_compLasso$p == 1000 & table_toe_compLasso$rou == 0.5, ]\n", + "rf_toe5_compLasso" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "0.23096420572779" + ], + "text/latex": [ + "0.23096420572779" + ], + "text/markdown": [ + "0.23096420572779" + ], + "text/plain": [ + "[1] 0.2309642" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "0.521190219773319" + ], + "text/latex": [ + "0.521190219773319" + ], + "text/markdown": [ + "0.521190219773319" + ], + "text/plain": [ + "[1] 0.5211902" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\t
2.5%
\n", + "\t\t
-0.621269466414493
\n", + "\t
97.5%
\n", + "\t\t
1.36106289789273
\n", + "
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[2.5\\textbackslash{}\\%] -0.621269466414493\n", + "\\item[97.5\\textbackslash{}\\%] 1.36106289789273\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "2.5%\n", + ": -0.62126946641449397.5%\n", + ": 1.36106289789273\n", + "\n" + ], + "text/plain": [ + " 2.5% 97.5% \n", + "-0.6212695 1.3610629 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "diff_toe = (unlist(rf_toe5_compLasso$MSE.list) - unlist(rf_toe5_rf$MSE.list))\n", + "mean(diff_toe)\n", + "sd(diff_toe)\n", + "quantile(diff_toe, probs = c(0.025, 0.975))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_cts/0.1_sim_indepdent_lasso.ipynb b/simulations/notebooks_sim_cts/0.1_sim_indepdent_lasso.ipynb new file mode 100755 index 0000000..84c4b66 --- /dev/null +++ b/simulations/notebooks_sim_cts/0.1_sim_indepdent_lasso.ipynb @@ -0,0 +1,345 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize lasso results on Independent Simulation Scenarios for continuous outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'\n", + "\n", + "load(paste0(dir, '/independent_Lasso.RData'))" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "files = NULL\n", + "for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_independent_', paste('P', p, 'N', n, sep='_'), '.RData'))\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "avg_FDR = NULL\n", + "for (i in 1:length(files)){\n", + " sim_file = files[i]\n", + " load(sim_file, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_ind_lasso[[i]]$Stab.table\n", + " \n", + " FDR = NULL\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}\n" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "table_ind = NULL\n", + "tmp_num_select = rep(0, length(results_ind_lasso))\n", + "for (i in 1:length(results_ind_lasso)){\n", + " table_ind = rbind(table_ind, results_ind_lasso[[i]][c('n', 'p', 'rou', 'FP', 'FN', 'MSE', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_ind_lasso[[i]]$Stab.table))\n", + " \n", + "}\n", + "table_ind = as.data.frame(table_ind)\n", + "table_ind$num_select = tmp_num_select\n", + "table_ind$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
nprouFPFNMSEStabnum_selectFDR
50 50 0 8.36 ( 0.45 )0.02 ( 0.01 )0.54 ( 0.03 )0.37 13.34 0.51
100 50 0 5.5 ( 0.42 ) 0 ( 0 ) 0.36 ( 0.01 )0.51 10.50 0.37
500 50 0 2.33 ( 0.14 )0 ( 0 ) 0.28 ( 0 ) 0.79 7.33 0.15
1000 50 0 1.82 ( 0.13 )0 ( 0 ) 0.26 ( 0 ) 0.86 6.82 0.10
50 100 0 11.1 ( 0.38 )0.08 ( 0.03 )0.66 ( 0.04 )0.32 16.02 0.61
100 100 0 7.23 ( 0.4 ) 0 ( 0 ) 0.41 ( 0.01 )0.46 12.23 0.46
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllll}\n", + " n & p & rou & FP & FN & MSE & Stab & num\\_select & FDR\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0 & 8.36 ( 0.45 ) & 0.02 ( 0.01 ) & 0.54 ( 0.03 ) & 0.37 & 13.34 & 0.51 \\\\\n", + "\t 100 & 50 & 0 & 5.5 ( 0.42 ) & 0 ( 0 ) & 0.36 ( 0.01 ) & 0.51 & 10.50 & 0.37 \\\\\n", + "\t 500 & 50 & 0 & 2.33 ( 0.14 ) & 0 ( 0 ) & 0.28 ( 0 ) & 0.79 & 7.33 & 0.15 \\\\\n", + "\t 1000 & 50 & 0 & 1.82 ( 0.13 ) & 0 ( 0 ) & 0.26 ( 0 ) & 0.86 & 6.82 & 0.10 \\\\\n", + "\t 50 & 100 & 0 & 11.1 ( 0.38 ) & 0.08 ( 0.03 ) & 0.66 ( 0.04 ) & 0.32 & 16.02 & 0.61 \\\\\n", + "\t 100 & 100 & 0 & 7.23 ( 0.4 ) & 0 ( 0 ) & 0.41 ( 0.01 ) & 0.46 & 12.23 & 0.46 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| n | p | rou | FP | FN | MSE | Stab | num_select | FDR |\n", + "|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0 | 8.36 ( 0.45 ) | 0.02 ( 0.01 ) | 0.54 ( 0.03 ) | 0.37 | 13.34 | 0.51 |\n", + "| 100 | 50 | 0 | 5.5 ( 0.42 ) | 0 ( 0 ) | 0.36 ( 0.01 ) | 0.51 | 10.50 | 0.37 |\n", + "| 500 | 50 | 0 | 2.33 ( 0.14 ) | 0 ( 0 ) | 0.28 ( 0 ) | 0.79 | 7.33 | 0.15 |\n", + "| 1000 | 50 | 0 | 1.82 ( 0.13 ) | 0 ( 0 ) | 0.26 ( 0 ) | 0.86 | 6.82 | 0.10 |\n", + "| 50 | 100 | 0 | 11.1 ( 0.38 ) | 0.08 ( 0.03 ) | 0.66 ( 0.04 ) | 0.32 | 16.02 | 0.61 |\n", + "| 100 | 100 | 0 | 7.23 ( 0.4 ) | 0 ( 0 ) | 0.41 ( 0.01 ) | 0.46 | 12.23 | 0.46 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN MSE Stab num_select FDR \n", + "1 50 50 0 8.36 ( 0.45 ) 0.02 ( 0.01 ) 0.54 ( 0.03 ) 0.37 13.34 0.51\n", + "2 100 50 0 5.5 ( 0.42 ) 0 ( 0 ) 0.36 ( 0.01 ) 0.51 10.50 0.37\n", + "3 500 50 0 2.33 ( 0.14 ) 0 ( 0 ) 0.28 ( 0 ) 0.79 7.33 0.15\n", + "4 1000 50 0 1.82 ( 0.13 ) 0 ( 0 ) 0.26 ( 0 ) 0.86 6.82 0.10\n", + "5 50 100 0 11.1 ( 0.38 ) 0.08 ( 0.03 ) 0.66 ( 0.04 ) 0.32 16.02 0.61\n", + "6 100 100 0 7.23 ( 0.4 ) 0 ( 0 ) 0.41 ( 0.01 ) 0.46 12.23 0.46" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_ind)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_ind <- apply(table_ind,2,as.character)\n", + "rownames(result.table_ind) = rownames(table_ind)\n", + "result.table_ind = as.data.frame(result.table_ind)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_ind$n = tidyr::extract_numeric(result.table_ind$n)\n", + "result.table_ind$p = tidyr::extract_numeric(result.table_ind$p)\n", + "result.table_ind$ratio = result.table_ind$p / result.table_ind$n\n", + "\n", + "result.table_ind = result.table_ind[c('n', 'p', 'ratio', 'Stab', 'MSE', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_ind)[1:3] = c('N', 'P', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”" + ] + } + ], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_ind$Stab = as.numeric(as.character(result.table_ind$Stab))\n", + "result.table_ind$MSE_mean = as.numeric(substr(result.table_ind$MSE, start=1, stop=4))\n", + "result.table_ind$FP_mean = as.numeric(substr(result.table_ind$FP, start=1, stop=4))\n", + "result.table_ind$FN_mean = as.numeric(substr(result.table_ind$FN, start=1, stop=4))\n", + "result.table_ind$FN_mean[is.na(result.table_ind$FN_mean)] = 0\n", + "result.table_ind$num_select = as.numeric(as.character(result.table_ind$num_select))" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
50 50 1.00 0.37 0.54 ( 0.03 ) 8.36 ( 0.45 ) 0.02 ( 0.01 ) 13.34 0.51 0.54 8.36 0.02
100 50 0.50 0.51 0.36 ( 0.01 ) 5.5 ( 0.42 ) 0 ( 0 ) 10.50 0.37 0.36 5.50 0.00
500 50 0.10 0.79 0.28 ( 0 ) 2.33 ( 0.14 ) 0 ( 0 ) 7.33 0.15 0.28 2.33 0.00
1000 50 0.05 0.86 0.26 ( 0 ) 1.82 ( 0.13 ) 0 ( 0 ) 6.82 0.1 0.26 1.82 0.00
50 100 2.00 0.32 0.66 ( 0.04 ) 11.1 ( 0.38 ) 0.08 ( 0.03 ) 16.02 0.61 0.66 11.10 0.08
100 100 1.00 0.46 0.41 ( 0.01 ) 7.23 ( 0.4 ) 0 ( 0 ) 12.23 0.46 0.41 7.23 0.00
500 100 0.20 0.71 0.29 ( 0 ) 3.26 ( 0.25 ) 0 ( 0 ) 8.26 0.22 0.29 3.26 0.00
1000 100 0.10 0.82 0.27 ( 0 ) 2.25 ( 0.15 ) 0 ( 0 ) 7.25 0.15 0.27 2.25 0.00
50 500 10.00 0.19 1.41 ( 0.11 ) 19.89 ( 0.38 )0.64 ( 0.08 ) 24.25 0.77 1.41 19.80 0.64
100 500 5.00 0.30 0.48 ( 0.02 ) 14.71 ( 0.7 ) 0 ( 0 ) 19.71 0.66 0.48 14.70 0.00
500 500 1.00 0.61 0.28 ( 0 ) 4.82 ( 0.34 ) 0 ( 0 ) 9.82 0.32 0.28 4.82 0.00
1000 500 0.50 0.72 0.27 ( 0 ) 3.35 ( 0.32 ) 0 ( 0 ) 8.35 0.21 0.27 3.35 0.00
50 1000 20.00 0.14 2.24 ( 0.19 ) 23.95 ( 0.37 )1.19 ( 0.09 ) 27.76 0.82 2.24 23.90 1.19
100 1000 10.00 0.25 0.53 ( 0.02 ) 18.53 ( 0.59 )0 ( 0 ) 23.53 0.73 0.53 18.50 0.00
500 1000 2.00 0.52 0.29 ( 0 ) 6.51 ( 0.45 ) 0 ( 0 ) 11.51 0.4 0.29 6.51 0.00
1000 1000 1.00 0.64 0.27 ( 0 ) 4.39 ( 0.56 ) 0 ( 0 ) 9.39 0.26 0.27 4.39 0.00
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|llllllllllll}\n", + " N & P & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t 50 & 50 & 1.00 & 0.37 & 0.54 ( 0.03 ) & 8.36 ( 0.45 ) & 0.02 ( 0.01 ) & 13.34 & 0.51 & 0.54 & 8.36 & 0.02 \\\\\n", + "\t 100 & 50 & 0.50 & 0.51 & 0.36 ( 0.01 ) & 5.5 ( 0.42 ) & 0 ( 0 ) & 10.50 & 0.37 & 0.36 & 5.50 & 0.00 \\\\\n", + "\t 500 & 50 & 0.10 & 0.79 & 0.28 ( 0 ) & 2.33 ( 0.14 ) & 0 ( 0 ) & 7.33 & 0.15 & 0.28 & 2.33 & 0.00 \\\\\n", + "\t 1000 & 50 & 0.05 & 0.86 & 0.26 ( 0 ) & 1.82 ( 0.13 ) & 0 ( 0 ) & 6.82 & 0.1 & 0.26 & 1.82 & 0.00 \\\\\n", + "\t 50 & 100 & 2.00 & 0.32 & 0.66 ( 0.04 ) & 11.1 ( 0.38 ) & 0.08 ( 0.03 ) & 16.02 & 0.61 & 0.66 & 11.10 & 0.08 \\\\\n", + "\t 100 & 100 & 1.00 & 0.46 & 0.41 ( 0.01 ) & 7.23 ( 0.4 ) & 0 ( 0 ) & 12.23 & 0.46 & 0.41 & 7.23 & 0.00 \\\\\n", + "\t 500 & 100 & 0.20 & 0.71 & 0.29 ( 0 ) & 3.26 ( 0.25 ) & 0 ( 0 ) & 8.26 & 0.22 & 0.29 & 3.26 & 0.00 \\\\\n", + "\t 1000 & 100 & 0.10 & 0.82 & 0.27 ( 0 ) & 2.25 ( 0.15 ) & 0 ( 0 ) & 7.25 & 0.15 & 0.27 & 2.25 & 0.00 \\\\\n", + "\t 50 & 500 & 10.00 & 0.19 & 1.41 ( 0.11 ) & 19.89 ( 0.38 ) & 0.64 ( 0.08 ) & 24.25 & 0.77 & 1.41 & 19.80 & 0.64 \\\\\n", + "\t 100 & 500 & 5.00 & 0.30 & 0.48 ( 0.02 ) & 14.71 ( 0.7 ) & 0 ( 0 ) & 19.71 & 0.66 & 0.48 & 14.70 & 0.00 \\\\\n", + "\t 500 & 500 & 1.00 & 0.61 & 0.28 ( 0 ) & 4.82 ( 0.34 ) & 0 ( 0 ) & 9.82 & 0.32 & 0.28 & 4.82 & 0.00 \\\\\n", + "\t 1000 & 500 & 0.50 & 0.72 & 0.27 ( 0 ) & 3.35 ( 0.32 ) & 0 ( 0 ) & 8.35 & 0.21 & 0.27 & 3.35 & 0.00 \\\\\n", + "\t 50 & 1000 & 20.00 & 0.14 & 2.24 ( 0.19 ) & 23.95 ( 0.37 ) & 1.19 ( 0.09 ) & 27.76 & 0.82 & 2.24 & 23.90 & 1.19 \\\\\n", + "\t 100 & 1000 & 10.00 & 0.25 & 0.53 ( 0.02 ) & 18.53 ( 0.59 ) & 0 ( 0 ) & 23.53 & 0.73 & 0.53 & 18.50 & 0.00 \\\\\n", + "\t 500 & 1000 & 2.00 & 0.52 & 0.29 ( 0 ) & 6.51 ( 0.45 ) & 0 ( 0 ) & 11.51 & 0.4 & 0.29 & 6.51 & 0.00 \\\\\n", + "\t 1000 & 1000 & 1.00 & 0.64 & 0.27 ( 0 ) & 4.39 ( 0.56 ) & 0 ( 0 ) & 9.39 & 0.26 & 0.27 & 4.39 & 0.00 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| N | P | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 1.00 | 0.37 | 0.54 ( 0.03 ) | 8.36 ( 0.45 ) | 0.02 ( 0.01 ) | 13.34 | 0.51 | 0.54 | 8.36 | 0.02 |\n", + "| 100 | 50 | 0.50 | 0.51 | 0.36 ( 0.01 ) | 5.5 ( 0.42 ) | 0 ( 0 ) | 10.50 | 0.37 | 0.36 | 5.50 | 0.00 |\n", + "| 500 | 50 | 0.10 | 0.79 | 0.28 ( 0 ) | 2.33 ( 0.14 ) | 0 ( 0 ) | 7.33 | 0.15 | 0.28 | 2.33 | 0.00 |\n", + "| 1000 | 50 | 0.05 | 0.86 | 0.26 ( 0 ) | 1.82 ( 0.13 ) | 0 ( 0 ) | 6.82 | 0.1 | 0.26 | 1.82 | 0.00 |\n", + "| 50 | 100 | 2.00 | 0.32 | 0.66 ( 0.04 ) | 11.1 ( 0.38 ) | 0.08 ( 0.03 ) | 16.02 | 0.61 | 0.66 | 11.10 | 0.08 |\n", + "| 100 | 100 | 1.00 | 0.46 | 0.41 ( 0.01 ) | 7.23 ( 0.4 ) | 0 ( 0 ) | 12.23 | 0.46 | 0.41 | 7.23 | 0.00 |\n", + "| 500 | 100 | 0.20 | 0.71 | 0.29 ( 0 ) | 3.26 ( 0.25 ) | 0 ( 0 ) | 8.26 | 0.22 | 0.29 | 3.26 | 0.00 |\n", + "| 1000 | 100 | 0.10 | 0.82 | 0.27 ( 0 ) | 2.25 ( 0.15 ) | 0 ( 0 ) | 7.25 | 0.15 | 0.27 | 2.25 | 0.00 |\n", + "| 50 | 500 | 10.00 | 0.19 | 1.41 ( 0.11 ) | 19.89 ( 0.38 ) | 0.64 ( 0.08 ) | 24.25 | 0.77 | 1.41 | 19.80 | 0.64 |\n", + "| 100 | 500 | 5.00 | 0.30 | 0.48 ( 0.02 ) | 14.71 ( 0.7 ) | 0 ( 0 ) | 19.71 | 0.66 | 0.48 | 14.70 | 0.00 |\n", + "| 500 | 500 | 1.00 | 0.61 | 0.28 ( 0 ) | 4.82 ( 0.34 ) | 0 ( 0 ) | 9.82 | 0.32 | 0.28 | 4.82 | 0.00 |\n", + "| 1000 | 500 | 0.50 | 0.72 | 0.27 ( 0 ) | 3.35 ( 0.32 ) | 0 ( 0 ) | 8.35 | 0.21 | 0.27 | 3.35 | 0.00 |\n", + "| 50 | 1000 | 20.00 | 0.14 | 2.24 ( 0.19 ) | 23.95 ( 0.37 ) | 1.19 ( 0.09 ) | 27.76 | 0.82 | 2.24 | 23.90 | 1.19 |\n", + "| 100 | 1000 | 10.00 | 0.25 | 0.53 ( 0.02 ) | 18.53 ( 0.59 ) | 0 ( 0 ) | 23.53 | 0.73 | 0.53 | 18.50 | 0.00 |\n", + "| 500 | 1000 | 2.00 | 0.52 | 0.29 ( 0 ) | 6.51 ( 0.45 ) | 0 ( 0 ) | 11.51 | 0.4 | 0.29 | 6.51 | 0.00 |\n", + "| 1000 | 1000 | 1.00 | 0.64 | 0.27 ( 0 ) | 4.39 ( 0.56 ) | 0 ( 0 ) | 9.39 | 0.26 | 0.27 | 4.39 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Ratio Stab MSE FP FN num_select\n", + "1 50 50 1.00 0.37 0.54 ( 0.03 ) 8.36 ( 0.45 ) 0.02 ( 0.01 ) 13.34 \n", + "2 100 50 0.50 0.51 0.36 ( 0.01 ) 5.5 ( 0.42 ) 0 ( 0 ) 10.50 \n", + "3 500 50 0.10 0.79 0.28 ( 0 ) 2.33 ( 0.14 ) 0 ( 0 ) 7.33 \n", + "4 1000 50 0.05 0.86 0.26 ( 0 ) 1.82 ( 0.13 ) 0 ( 0 ) 6.82 \n", + "5 50 100 2.00 0.32 0.66 ( 0.04 ) 11.1 ( 0.38 ) 0.08 ( 0.03 ) 16.02 \n", + "6 100 100 1.00 0.46 0.41 ( 0.01 ) 7.23 ( 0.4 ) 0 ( 0 ) 12.23 \n", + "7 500 100 0.20 0.71 0.29 ( 0 ) 3.26 ( 0.25 ) 0 ( 0 ) 8.26 \n", + "8 1000 100 0.10 0.82 0.27 ( 0 ) 2.25 ( 0.15 ) 0 ( 0 ) 7.25 \n", + "9 50 500 10.00 0.19 1.41 ( 0.11 ) 19.89 ( 0.38 ) 0.64 ( 0.08 ) 24.25 \n", + "10 100 500 5.00 0.30 0.48 ( 0.02 ) 14.71 ( 0.7 ) 0 ( 0 ) 19.71 \n", + "11 500 500 1.00 0.61 0.28 ( 0 ) 4.82 ( 0.34 ) 0 ( 0 ) 9.82 \n", + "12 1000 500 0.50 0.72 0.27 ( 0 ) 3.35 ( 0.32 ) 0 ( 0 ) 8.35 \n", + "13 50 1000 20.00 0.14 2.24 ( 0.19 ) 23.95 ( 0.37 ) 1.19 ( 0.09 ) 27.76 \n", + "14 100 1000 10.00 0.25 0.53 ( 0.02 ) 18.53 ( 0.59 ) 0 ( 0 ) 23.53 \n", + "15 500 1000 2.00 0.52 0.29 ( 0 ) 6.51 ( 0.45 ) 0 ( 0 ) 11.51 \n", + "16 1000 1000 1.00 0.64 0.27 ( 0 ) 4.39 ( 0.56 ) 0 ( 0 ) 9.39 \n", + " FDR MSE_mean FP_mean FN_mean\n", + "1 0.51 0.54 8.36 0.02 \n", + "2 0.37 0.36 5.50 0.00 \n", + "3 0.15 0.28 2.33 0.00 \n", + "4 0.1 0.26 1.82 0.00 \n", + "5 0.61 0.66 11.10 0.08 \n", + "6 0.46 0.41 7.23 0.00 \n", + "7 0.22 0.29 3.26 0.00 \n", + "8 0.15 0.27 2.25 0.00 \n", + "9 0.77 1.41 19.80 0.64 \n", + "10 0.66 0.48 14.70 0.00 \n", + "11 0.32 0.28 4.82 0.00 \n", + "12 0.21 0.27 3.35 0.00 \n", + "13 0.82 2.24 23.90 1.19 \n", + "14 0.73 0.53 18.50 0.00 \n", + "15 0.4 0.29 6.51 0.00 \n", + "16 0.26 0.27 4.39 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_ind\n", + "\n", + "## export\n", + "write.table(result.table_ind, '../results_summary_cts/sim_ind_lasso.txt', sep='\\t', row.names=F)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_cts/0.2_sim_indepdent_elnet_cts.ipynb b/simulations/notebooks_sim_cts/0.2_sim_indepdent_elnet_cts.ipynb new file mode 100755 index 0000000..0db1fc6 --- /dev/null +++ b/simulations/notebooks_sim_cts/0.2_sim_indepdent_elnet_cts.ipynb @@ -0,0 +1,345 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize elastic net results on Independent Simulation Scenarios for continuous outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'\n", + "\n", + "load(paste0(dir, '/independent_Elnet.RData'))" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "files = NULL\n", + "for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_independent_', paste('P', p, 'N', n, sep='_'), '.RData'))\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "avg_FDR = NULL\n", + "for (i in 1:length(files)){\n", + " sim_file = files[i]\n", + " load(sim_file, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_ind_elnet[[i]]$Stab.table\n", + " \n", + " FDR = NULL\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "table_ind = NULL\n", + "tmp_num_select = rep(0, length(results_ind_elnet))\n", + "for (i in 1:length(results_ind_elnet)){\n", + " table_ind = rbind(table_ind, results_ind_elnet[[i]][c('n', 'p', 'rou', 'FP', 'FN', 'MSE', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_ind_elnet[[i]]$Stab.table))\n", + " \n", + "}\n", + "table_ind = as.data.frame(table_ind)\n", + "table_ind$num_select = tmp_num_select\n", + "table_ind$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
nprouFPFNMSEStabnum_selectFDR
50 50 0 14.99 ( 0.59 )0 ( 0 ) 0.53 ( 0.03 ) 0.2 19.99 0.67
100 50 0 13.46 ( 0.55 )0 ( 0 ) 0.34 ( 0.01 ) 0.23 18.46 0.65
500 50 0 13.65 ( 0.56 )0 ( 0 ) 0.26 ( 0 ) 0.23 18.65 0.64
1000 50 0 11.76 ( 0.53 )0 ( 0 ) 0.25 ( 0 ) 0.27 16.76 0.60
50 100 0 19.45 ( 0.66 )0.04 ( 0.02 ) 0.74 ( 0.06 ) 0.19 24.41 0.74
100 100 0 19.2 ( 1.02 )0 ( 0 ) 0.38 ( 0.01 )0.2 24.20 0.71
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllll}\n", + " n & p & rou & FP & FN & MSE & Stab & num\\_select & FDR\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0 & 14.99 ( 0.59 ) & 0 ( 0 ) & 0.53 ( 0.03 ) & 0.2 & 19.99 & 0.67 \\\\\n", + "\t 100 & 50 & 0 & 13.46 ( 0.55 ) & 0 ( 0 ) & 0.34 ( 0.01 ) & 0.23 & 18.46 & 0.65 \\\\\n", + "\t 500 & 50 & 0 & 13.65 ( 0.56 ) & 0 ( 0 ) & 0.26 ( 0 ) & 0.23 & 18.65 & 0.64 \\\\\n", + "\t 1000 & 50 & 0 & 11.76 ( 0.53 ) & 0 ( 0 ) & 0.25 ( 0 ) & 0.27 & 16.76 & 0.60 \\\\\n", + "\t 50 & 100 & 0 & 19.45 ( 0.66 ) & 0.04 ( 0.02 ) & 0.74 ( 0.06 ) & 0.19 & 24.41 & 0.74 \\\\\n", + "\t 100 & 100 & 0 & 19.2 ( 1.02 ) & 0 ( 0 ) & 0.38 ( 0.01 ) & 0.2 & 24.20 & 0.71 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| n | p | rou | FP | FN | MSE | Stab | num_select | FDR |\n", + "|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0 | 14.99 ( 0.59 ) | 0 ( 0 ) | 0.53 ( 0.03 ) | 0.2 | 19.99 | 0.67 |\n", + "| 100 | 50 | 0 | 13.46 ( 0.55 ) | 0 ( 0 ) | 0.34 ( 0.01 ) | 0.23 | 18.46 | 0.65 |\n", + "| 500 | 50 | 0 | 13.65 ( 0.56 ) | 0 ( 0 ) | 0.26 ( 0 ) | 0.23 | 18.65 | 0.64 |\n", + "| 1000 | 50 | 0 | 11.76 ( 0.53 ) | 0 ( 0 ) | 0.25 ( 0 ) | 0.27 | 16.76 | 0.60 |\n", + "| 50 | 100 | 0 | 19.45 ( 0.66 ) | 0.04 ( 0.02 ) | 0.74 ( 0.06 ) | 0.19 | 24.41 | 0.74 |\n", + "| 100 | 100 | 0 | 19.2 ( 1.02 ) | 0 ( 0 ) | 0.38 ( 0.01 ) | 0.2 | 24.20 | 0.71 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN MSE Stab num_select FDR \n", + "1 50 50 0 14.99 ( 0.59 ) 0 ( 0 ) 0.53 ( 0.03 ) 0.2 19.99 0.67\n", + "2 100 50 0 13.46 ( 0.55 ) 0 ( 0 ) 0.34 ( 0.01 ) 0.23 18.46 0.65\n", + "3 500 50 0 13.65 ( 0.56 ) 0 ( 0 ) 0.26 ( 0 ) 0.23 18.65 0.64\n", + "4 1000 50 0 11.76 ( 0.53 ) 0 ( 0 ) 0.25 ( 0 ) 0.27 16.76 0.60\n", + "5 50 100 0 19.45 ( 0.66 ) 0.04 ( 0.02 ) 0.74 ( 0.06 ) 0.19 24.41 0.74\n", + "6 100 100 0 19.2 ( 1.02 ) 0 ( 0 ) 0.38 ( 0.01 ) 0.2 24.20 0.71" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_ind)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_ind <- apply(table_ind,2,as.character)\n", + "rownames(result.table_ind) = rownames(table_ind)\n", + "result.table_ind = as.data.frame(result.table_ind)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_ind$n = tidyr::extract_numeric(result.table_ind$n)\n", + "result.table_ind$p = tidyr::extract_numeric(result.table_ind$p)\n", + "result.table_ind$ratio = result.table_ind$p / result.table_ind$n\n", + "\n", + "result.table_ind = result.table_ind[c('n', 'p', 'ratio', 'Stab', 'MSE', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_ind)[1:3] = c('N', 'P', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”" + ] + } + ], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_ind$Stab = as.numeric(as.character(result.table_ind$Stab))\n", + "result.table_ind$MSE_mean = as.numeric(substr(result.table_ind$MSE, start=1, stop=4))\n", + "result.table_ind$FP_mean = as.numeric(substr(result.table_ind$FP, start=1, stop=4))\n", + "result.table_ind$FN_mean = as.numeric(substr(result.table_ind$FN, start=1, stop=4))\n", + "result.table_ind$FN_mean[is.na(result.table_ind$FN_mean)] = 0\n", + "result.table_ind$num_select = as.numeric(as.character(result.table_ind$num_select))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
50 50 1.00 0.20 0.53 ( 0.03 ) 14.99 ( 0.59 )0 ( 0 ) 19.99 0.67 0.53 14.9 0.00
100 50 0.50 0.23 0.34 ( 0.01 ) 13.46 ( 0.55 )0 ( 0 ) 18.46 0.65 0.34 13.4 0.00
500 50 0.10 0.23 0.26 ( 0 ) 13.65 ( 0.56 )0 ( 0 ) 18.65 0.64 0.26 13.6 0.00
1000 50 0.05 0.27 0.25 ( 0 ) 11.76 ( 0.53 )0 ( 0 ) 16.76 0.6 0.25 11.7 0.00
50 100 2.00 0.19 0.74 ( 0.06 ) 19.45 ( 0.66 )0.04 ( 0.02 ) 24.41 0.74 0.74 19.4 0.04
100 100 1.00 0.20 0.38 ( 0.01 ) 19.2 ( 1.02 ) 0 ( 0 ) 24.20 0.71 0.38 19.2 0.00
500 100 0.20 0.23 0.27 ( 0 ) 16.28 ( 0.78 )0 ( 0 ) 21.28 0.67 0.27 16.2 0.00
1000 100 0.10 0.23 0.26 ( 0 ) 17.05 ( 0.76 )0 ( 0 ) 22.05 0.69 0.26 17.0 0.00
50 500 10.00 0.13 1.65 ( 0.13 ) 30.38 ( 1.24 )0.58 ( 0.08 ) 34.80 0.83 1.65 30.3 0.58
100 500 5.00 0.15 0.5 ( 0.02 ) 32.18 ( 1.44 )0 ( 0 ) 37.18 0.81 0.50 32.1 0.00
500 500 1.00 0.16 0.28 ( 0 ) 29.79 ( 1.73 )0 ( 0 ) 34.79 0.78 0.28 29.7 0.00
1000 500 0.50 0.18 0.26 ( 0 ) 27.21 ( 1.58 )0 ( 0 ) 32.21 0.77 0.26 27.2 0.00
50 1000 20.00 0.10 2.5 ( 0.22 ) 36.6 ( 2.03 ) 1.12 ( 0.09 ) 40.48 0.86 2.50 36.6 1.12
100 1000 10.00 0.13 0.56 ( 0.02 ) 40.61 ( 1.71 )0 ( 0 ) 45.61 0.85 0.56 40.6 0.00
500 1000 2.00 0.14 0.27 ( 0 ) 35.98 ( 2.2 ) 0 ( 0 ) 40.98 0.8 0.27 35.9 0.00
1000 1000 1.00 0.15 0.27 ( 0 ) 34.65 ( 2.02 )0 ( 0 ) 39.65 0.79 0.27 34.6 0.00
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|llllllllllll}\n", + " N & P & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t 50 & 50 & 1.00 & 0.20 & 0.53 ( 0.03 ) & 14.99 ( 0.59 ) & 0 ( 0 ) & 19.99 & 0.67 & 0.53 & 14.9 & 0.00 \\\\\n", + "\t 100 & 50 & 0.50 & 0.23 & 0.34 ( 0.01 ) & 13.46 ( 0.55 ) & 0 ( 0 ) & 18.46 & 0.65 & 0.34 & 13.4 & 0.00 \\\\\n", + "\t 500 & 50 & 0.10 & 0.23 & 0.26 ( 0 ) & 13.65 ( 0.56 ) & 0 ( 0 ) & 18.65 & 0.64 & 0.26 & 13.6 & 0.00 \\\\\n", + "\t 1000 & 50 & 0.05 & 0.27 & 0.25 ( 0 ) & 11.76 ( 0.53 ) & 0 ( 0 ) & 16.76 & 0.6 & 0.25 & 11.7 & 0.00 \\\\\n", + "\t 50 & 100 & 2.00 & 0.19 & 0.74 ( 0.06 ) & 19.45 ( 0.66 ) & 0.04 ( 0.02 ) & 24.41 & 0.74 & 0.74 & 19.4 & 0.04 \\\\\n", + "\t 100 & 100 & 1.00 & 0.20 & 0.38 ( 0.01 ) & 19.2 ( 1.02 ) & 0 ( 0 ) & 24.20 & 0.71 & 0.38 & 19.2 & 0.00 \\\\\n", + "\t 500 & 100 & 0.20 & 0.23 & 0.27 ( 0 ) & 16.28 ( 0.78 ) & 0 ( 0 ) & 21.28 & 0.67 & 0.27 & 16.2 & 0.00 \\\\\n", + "\t 1000 & 100 & 0.10 & 0.23 & 0.26 ( 0 ) & 17.05 ( 0.76 ) & 0 ( 0 ) & 22.05 & 0.69 & 0.26 & 17.0 & 0.00 \\\\\n", + "\t 50 & 500 & 10.00 & 0.13 & 1.65 ( 0.13 ) & 30.38 ( 1.24 ) & 0.58 ( 0.08 ) & 34.80 & 0.83 & 1.65 & 30.3 & 0.58 \\\\\n", + "\t 100 & 500 & 5.00 & 0.15 & 0.5 ( 0.02 ) & 32.18 ( 1.44 ) & 0 ( 0 ) & 37.18 & 0.81 & 0.50 & 32.1 & 0.00 \\\\\n", + "\t 500 & 500 & 1.00 & 0.16 & 0.28 ( 0 ) & 29.79 ( 1.73 ) & 0 ( 0 ) & 34.79 & 0.78 & 0.28 & 29.7 & 0.00 \\\\\n", + "\t 1000 & 500 & 0.50 & 0.18 & 0.26 ( 0 ) & 27.21 ( 1.58 ) & 0 ( 0 ) & 32.21 & 0.77 & 0.26 & 27.2 & 0.00 \\\\\n", + "\t 50 & 1000 & 20.00 & 0.10 & 2.5 ( 0.22 ) & 36.6 ( 2.03 ) & 1.12 ( 0.09 ) & 40.48 & 0.86 & 2.50 & 36.6 & 1.12 \\\\\n", + "\t 100 & 1000 & 10.00 & 0.13 & 0.56 ( 0.02 ) & 40.61 ( 1.71 ) & 0 ( 0 ) & 45.61 & 0.85 & 0.56 & 40.6 & 0.00 \\\\\n", + "\t 500 & 1000 & 2.00 & 0.14 & 0.27 ( 0 ) & 35.98 ( 2.2 ) & 0 ( 0 ) & 40.98 & 0.8 & 0.27 & 35.9 & 0.00 \\\\\n", + "\t 1000 & 1000 & 1.00 & 0.15 & 0.27 ( 0 ) & 34.65 ( 2.02 ) & 0 ( 0 ) & 39.65 & 0.79 & 0.27 & 34.6 & 0.00 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| N | P | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 1.00 | 0.20 | 0.53 ( 0.03 ) | 14.99 ( 0.59 ) | 0 ( 0 ) | 19.99 | 0.67 | 0.53 | 14.9 | 0.00 |\n", + "| 100 | 50 | 0.50 | 0.23 | 0.34 ( 0.01 ) | 13.46 ( 0.55 ) | 0 ( 0 ) | 18.46 | 0.65 | 0.34 | 13.4 | 0.00 |\n", + "| 500 | 50 | 0.10 | 0.23 | 0.26 ( 0 ) | 13.65 ( 0.56 ) | 0 ( 0 ) | 18.65 | 0.64 | 0.26 | 13.6 | 0.00 |\n", + "| 1000 | 50 | 0.05 | 0.27 | 0.25 ( 0 ) | 11.76 ( 0.53 ) | 0 ( 0 ) | 16.76 | 0.6 | 0.25 | 11.7 | 0.00 |\n", + "| 50 | 100 | 2.00 | 0.19 | 0.74 ( 0.06 ) | 19.45 ( 0.66 ) | 0.04 ( 0.02 ) | 24.41 | 0.74 | 0.74 | 19.4 | 0.04 |\n", + "| 100 | 100 | 1.00 | 0.20 | 0.38 ( 0.01 ) | 19.2 ( 1.02 ) | 0 ( 0 ) | 24.20 | 0.71 | 0.38 | 19.2 | 0.00 |\n", + "| 500 | 100 | 0.20 | 0.23 | 0.27 ( 0 ) | 16.28 ( 0.78 ) | 0 ( 0 ) | 21.28 | 0.67 | 0.27 | 16.2 | 0.00 |\n", + "| 1000 | 100 | 0.10 | 0.23 | 0.26 ( 0 ) | 17.05 ( 0.76 ) | 0 ( 0 ) | 22.05 | 0.69 | 0.26 | 17.0 | 0.00 |\n", + "| 50 | 500 | 10.00 | 0.13 | 1.65 ( 0.13 ) | 30.38 ( 1.24 ) | 0.58 ( 0.08 ) | 34.80 | 0.83 | 1.65 | 30.3 | 0.58 |\n", + "| 100 | 500 | 5.00 | 0.15 | 0.5 ( 0.02 ) | 32.18 ( 1.44 ) | 0 ( 0 ) | 37.18 | 0.81 | 0.50 | 32.1 | 0.00 |\n", + "| 500 | 500 | 1.00 | 0.16 | 0.28 ( 0 ) | 29.79 ( 1.73 ) | 0 ( 0 ) | 34.79 | 0.78 | 0.28 | 29.7 | 0.00 |\n", + "| 1000 | 500 | 0.50 | 0.18 | 0.26 ( 0 ) | 27.21 ( 1.58 ) | 0 ( 0 ) | 32.21 | 0.77 | 0.26 | 27.2 | 0.00 |\n", + "| 50 | 1000 | 20.00 | 0.10 | 2.5 ( 0.22 ) | 36.6 ( 2.03 ) | 1.12 ( 0.09 ) | 40.48 | 0.86 | 2.50 | 36.6 | 1.12 |\n", + "| 100 | 1000 | 10.00 | 0.13 | 0.56 ( 0.02 ) | 40.61 ( 1.71 ) | 0 ( 0 ) | 45.61 | 0.85 | 0.56 | 40.6 | 0.00 |\n", + "| 500 | 1000 | 2.00 | 0.14 | 0.27 ( 0 ) | 35.98 ( 2.2 ) | 0 ( 0 ) | 40.98 | 0.8 | 0.27 | 35.9 | 0.00 |\n", + "| 1000 | 1000 | 1.00 | 0.15 | 0.27 ( 0 ) | 34.65 ( 2.02 ) | 0 ( 0 ) | 39.65 | 0.79 | 0.27 | 34.6 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Ratio Stab MSE FP FN num_select\n", + "1 50 50 1.00 0.20 0.53 ( 0.03 ) 14.99 ( 0.59 ) 0 ( 0 ) 19.99 \n", + "2 100 50 0.50 0.23 0.34 ( 0.01 ) 13.46 ( 0.55 ) 0 ( 0 ) 18.46 \n", + "3 500 50 0.10 0.23 0.26 ( 0 ) 13.65 ( 0.56 ) 0 ( 0 ) 18.65 \n", + "4 1000 50 0.05 0.27 0.25 ( 0 ) 11.76 ( 0.53 ) 0 ( 0 ) 16.76 \n", + "5 50 100 2.00 0.19 0.74 ( 0.06 ) 19.45 ( 0.66 ) 0.04 ( 0.02 ) 24.41 \n", + "6 100 100 1.00 0.20 0.38 ( 0.01 ) 19.2 ( 1.02 ) 0 ( 0 ) 24.20 \n", + "7 500 100 0.20 0.23 0.27 ( 0 ) 16.28 ( 0.78 ) 0 ( 0 ) 21.28 \n", + "8 1000 100 0.10 0.23 0.26 ( 0 ) 17.05 ( 0.76 ) 0 ( 0 ) 22.05 \n", + "9 50 500 10.00 0.13 1.65 ( 0.13 ) 30.38 ( 1.24 ) 0.58 ( 0.08 ) 34.80 \n", + "10 100 500 5.00 0.15 0.5 ( 0.02 ) 32.18 ( 1.44 ) 0 ( 0 ) 37.18 \n", + "11 500 500 1.00 0.16 0.28 ( 0 ) 29.79 ( 1.73 ) 0 ( 0 ) 34.79 \n", + "12 1000 500 0.50 0.18 0.26 ( 0 ) 27.21 ( 1.58 ) 0 ( 0 ) 32.21 \n", + "13 50 1000 20.00 0.10 2.5 ( 0.22 ) 36.6 ( 2.03 ) 1.12 ( 0.09 ) 40.48 \n", + "14 100 1000 10.00 0.13 0.56 ( 0.02 ) 40.61 ( 1.71 ) 0 ( 0 ) 45.61 \n", + "15 500 1000 2.00 0.14 0.27 ( 0 ) 35.98 ( 2.2 ) 0 ( 0 ) 40.98 \n", + "16 1000 1000 1.00 0.15 0.27 ( 0 ) 34.65 ( 2.02 ) 0 ( 0 ) 39.65 \n", + " FDR MSE_mean FP_mean FN_mean\n", + "1 0.67 0.53 14.9 0.00 \n", + "2 0.65 0.34 13.4 0.00 \n", + "3 0.64 0.26 13.6 0.00 \n", + "4 0.6 0.25 11.7 0.00 \n", + "5 0.74 0.74 19.4 0.04 \n", + "6 0.71 0.38 19.2 0.00 \n", + "7 0.67 0.27 16.2 0.00 \n", + "8 0.69 0.26 17.0 0.00 \n", + "9 0.83 1.65 30.3 0.58 \n", + "10 0.81 0.50 32.1 0.00 \n", + "11 0.78 0.28 29.7 0.00 \n", + "12 0.77 0.26 27.2 0.00 \n", + "13 0.86 2.50 36.6 1.12 \n", + "14 0.85 0.56 40.6 0.00 \n", + "15 0.8 0.27 35.9 0.00 \n", + "16 0.79 0.27 34.6 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_ind\n", + "\n", + "## export\n", + "write.table(result.table_ind, '../results_summary_cts/sim_ind_elnet.txt', sep='\\t', row.names=F)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_cts/0.3_sim_indepdent_rf_cts.ipynb b/simulations/notebooks_sim_cts/0.3_sim_indepdent_rf_cts.ipynb new file mode 100755 index 0000000..337fe47 --- /dev/null +++ b/simulations/notebooks_sim_cts/0.3_sim_indepdent_rf_cts.ipynb @@ -0,0 +1,517 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize random forests results on Independent Simulation Scenarios for continuous outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'\n", + "\n", + "load(paste0(dir, '/independent_RF.RData'))" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "files = NULL\n", + "for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_independent_', paste('P', p, 'N', n, sep='_'), '.RData'))\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "avg_FDR = NULL\n", + "for (i in 1:length(files)){\n", + " sim_file = files[i]\n", + " load(sim_file, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_ind_rf[[i]]$Stab.table\n", + " \n", + " FDR = NULL\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [], + "source": [ + "table_ind = NULL\n", + "tmp_num_select = rep(0, length(results_ind_rf))\n", + "for (i in 1:length(results_ind_rf)){\n", + " results_ind_rf[[i]]$OOB = paste(round(mean(results_ind_rf[[i]]$OOB.list, na.rm=T),2),\n", + " '(', round(FSA::se(results_ind_rf[[i]]$OOB.list, na.rm=T),2), ')')\n", + " table_ind = rbind(table_ind, results_ind_rf[[i]][c('n', 'p', 'rou', 'FP', 'FN', 'MSE', 'Stab', 'OOB')])\n", + " tmp_num_select[i] = mean(rowSums(results_ind_rf[[i]]$Stab.table))\n", + "}\n", + "table_ind = as.data.frame(table_ind)\n", + "table_ind$num_select = tmp_num_select\n", + "table_ind$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
nprouFPFNMSEStabOOBnum_selectFDR
50 50 0 1 ( 0 ) 6 ( 0 ) 1.31 ( 0.06 )NaN 2.09 ( 0.02 )0.00 NaN
100 50 0 1.85 ( 0.11 )4.11 ( 0.1 ) 0.85 ( 0.02 )0.18 1.79 ( 0.01 )3.74 0.48
500 50 0 0.3 ( 0.05 ) 1.61 ( 0.08 )0.47 ( 0.01 )0.8 1.31 ( 0 ) 4.69 0.05
1000 50 0 0.07 ( 0.03 )0.78 ( 0.07 )0.35 ( 0 ) 0.88 1.17 ( 0 ) 5.29 0.01
50 100 0 1 ( 0 ) 6 ( 0 ) 1.32 ( 0.05 )NaN 2.23 ( 0.02 )0.00 NaN
100 100 0 4.33 ( 0.22 )4.45 ( 0.09 )0.91 ( 0.03 )0.08 2.02 ( 0.01 )5.88 0.72
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|llllllllll}\n", + " n & p & rou & FP & FN & MSE & Stab & OOB & num\\_select & FDR\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0 & 1 ( 0 ) & 6 ( 0 ) & 1.31 ( 0.06 ) & NaN & 2.09 ( 0.02 ) & 0.00 & NaN \\\\\n", + "\t 100 & 50 & 0 & 1.85 ( 0.11 ) & 4.11 ( 0.1 ) & 0.85 ( 0.02 ) & 0.18 & 1.79 ( 0.01 ) & 3.74 & 0.48 \\\\\n", + "\t 500 & 50 & 0 & 0.3 ( 0.05 ) & 1.61 ( 0.08 ) & 0.47 ( 0.01 ) & 0.8 & 1.31 ( 0 ) & 4.69 & 0.05 \\\\\n", + "\t 1000 & 50 & 0 & 0.07 ( 0.03 ) & 0.78 ( 0.07 ) & 0.35 ( 0 ) & 0.88 & 1.17 ( 0 ) & 5.29 & 0.01 \\\\\n", + "\t 50 & 100 & 0 & 1 ( 0 ) & 6 ( 0 ) & 1.32 ( 0.05 ) & NaN & 2.23 ( 0.02 ) & 0.00 & NaN \\\\\n", + "\t 100 & 100 & 0 & 4.33 ( 0.22 ) & 4.45 ( 0.09 ) & 0.91 ( 0.03 ) & 0.08 & 2.02 ( 0.01 ) & 5.88 & 0.72 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| n | p | rou | FP | FN | MSE | Stab | OOB | num_select | FDR |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0 | 1 ( 0 ) | 6 ( 0 ) | 1.31 ( 0.06 ) | NaN | 2.09 ( 0.02 ) | 0.00 | NaN |\n", + "| 100 | 50 | 0 | 1.85 ( 0.11 ) | 4.11 ( 0.1 ) | 0.85 ( 0.02 ) | 0.18 | 1.79 ( 0.01 ) | 3.74 | 0.48 |\n", + "| 500 | 50 | 0 | 0.3 ( 0.05 ) | 1.61 ( 0.08 ) | 0.47 ( 0.01 ) | 0.8 | 1.31 ( 0 ) | 4.69 | 0.05 |\n", + "| 1000 | 50 | 0 | 0.07 ( 0.03 ) | 0.78 ( 0.07 ) | 0.35 ( 0 ) | 0.88 | 1.17 ( 0 ) | 5.29 | 0.01 |\n", + "| 50 | 100 | 0 | 1 ( 0 ) | 6 ( 0 ) | 1.32 ( 0.05 ) | NaN | 2.23 ( 0.02 ) | 0.00 | NaN |\n", + "| 100 | 100 | 0 | 4.33 ( 0.22 ) | 4.45 ( 0.09 ) | 0.91 ( 0.03 ) | 0.08 | 2.02 ( 0.01 ) | 5.88 | 0.72 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN MSE Stab OOB \n", + "1 50 50 0 1 ( 0 ) 6 ( 0 ) 1.31 ( 0.06 ) NaN 2.09 ( 0.02 )\n", + "2 100 50 0 1.85 ( 0.11 ) 4.11 ( 0.1 ) 0.85 ( 0.02 ) 0.18 1.79 ( 0.01 )\n", + "3 500 50 0 0.3 ( 0.05 ) 1.61 ( 0.08 ) 0.47 ( 0.01 ) 0.8 1.31 ( 0 ) \n", + "4 1000 50 0 0.07 ( 0.03 ) 0.78 ( 0.07 ) 0.35 ( 0 ) 0.88 1.17 ( 0 ) \n", + "5 50 100 0 1 ( 0 ) 6 ( 0 ) 1.32 ( 0.05 ) NaN 2.23 ( 0.02 )\n", + "6 100 100 0 4.33 ( 0.22 ) 4.45 ( 0.09 ) 0.91 ( 0.03 ) 0.08 2.02 ( 0.01 )\n", + " num_select FDR \n", + "1 0.00 NaN\n", + "2 3.74 0.48\n", + "3 4.69 0.05\n", + "4 5.29 0.01\n", + "5 0.00 NaN\n", + "6 5.88 0.72" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_ind)" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_ind <- apply(table_ind,2,as.character)\n", + "rownames(result.table_ind) = rownames(table_ind)\n", + "result.table_ind = as.data.frame(result.table_ind)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_ind$n = tidyr::extract_numeric(result.table_ind$n)\n", + "result.table_ind$p = tidyr::extract_numeric(result.table_ind$p)\n", + "result.table_ind$ratio = result.table_ind$p / result.table_ind$n\n", + "\n", + "result.table_ind = result.table_ind[c('n', 'p', 'ratio', 'Stab', 'MSE', 'FP', 'FN', 'OOB', 'num_select', 'FDR')]\n", + "colnames(result.table_ind)[1:3] = c('N', 'P', 'Ratio')\n", + "result.table_ind$Index = seq(1, length(results_ind_rf), 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”" + ] + } + ], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_ind$Stab = as.numeric(as.character(result.table_ind$Stab))\n", + "result.table_ind$MSE_mean = as.numeric(substr(result.table_ind$MSE, start=1, stop=4))\n", + "result.table_ind$FP_mean = as.numeric(substr(result.table_ind$FP, start=1, stop=4))\n", + "result.table_ind$FN_mean = as.numeric(substr(result.table_ind$FN, start=1, stop=4))\n", + "result.table_ind$OOB_mean = as.numeric(substr(result.table_ind$OOB, start=1, stop=4))\n", + "result.table_ind$num_select = as.numeric(as.character(result.table_ind$num_select))\n", + "#result.table_ind$FDR = as.numeric(as.character(result.table_ind$FDR))" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPRatioStabMSEFPFNOOBnum_selectFDRIndexMSE_meanFP_meanFN_meanOOB_mean
50 50 1.00 NaN 1.31 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) 2.09 ( 0.02 ) 0.00 NaN 1 1.31 NA NA 2.09
100 50 0.50 0.18 0.85 ( 0.02 ) 1.85 ( 0.11 ) 4.11 ( 0.1 ) 1.79 ( 0.01 ) 3.74 0.48 2 0.85 1.85 4.11 1.79
500 50 0.10 0.80 0.47 ( 0.01 ) 0.3 ( 0.05 ) 1.61 ( 0.08 ) 1.31 ( 0 ) 4.69 0.05 3 0.47 0.30 1.61 1.31
1000 50 0.05 0.88 0.35 ( 0 ) 0.07 ( 0.03 ) 0.78 ( 0.07 ) 1.17 ( 0 ) 5.29 0.01 4 0.35 0.07 0.78 1.17
50 100 2.00 NaN 1.32 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 2.23 ( 0.02 ) 0.00 NaN 5 1.32 NA NA 2.23
100 100 1.00 0.08 0.91 ( 0.03 ) 4.33 ( 0.22 ) 4.45 ( 0.09 ) 2.02 ( 0.01 ) 5.88 0.72 6 0.91 4.33 4.45 2.02
500 100 0.20 0.60 0.59 ( 0.01 ) 1.91 ( 0.15 ) 1.41 ( 0.07 ) 1.54 ( 0 ) 6.50 0.27 7 0.59 1.91 1.41 1.54
1000 100 0.10 0.81 0.47 ( 0 ) 0.71 ( 0.09 ) 0.53 ( 0.06 ) 1.39 ( 0 ) 6.18 0.1 8 0.47 0.71 0.53 1.39
50 500 10.00 NaN 1.33 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 2.48 ( 0.03 ) 0.00 NaN 9 1.33 NA NA 2.48
100 500 5.00 0.02 1.07 ( 0.03 ) 23.8 ( 0.52 ) 4.26 ( 0.1 ) 2.43 ( 0.02 ) 25.54 0.93 10 1.07 23.80 4.26 2.43
500 500 1.00 0.14 0.84 ( 0.01 ) 19.92 ( 0.41 )1.71 ( 0.08 ) 2.14 ( 0.01 ) 24.21 0.82 11 0.84 19.90 1.71 2.14
1000 500 0.50 0.19 0.78 ( 0.01 ) 18.73 ( 0.42 )0.84 ( 0.06 ) 2.06 ( 0 ) 23.89 0.78 12 0.78 18.70 0.84 2.06
50 1000 20.00 NaN 1.31 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 2.48 ( 0.03 ) 0.00 NaN 13 1.31 NA NA 2.48
100 1000 10.00 0.01 1.06 ( 0.03 ) 48.48 ( 0.63 )4.33 ( 0.1 ) 2.43 ( 0.02 ) 50.15 0.97 14 1.06 48.40 4.33 2.43
500 1000 2.00 0.06 0.89 ( 0.01 ) 44.77 ( 0.71 )1.81 ( 0.1 ) 2.3 ( 0.01 ) 48.96 0.91 15 0.89 44.70 1.81 2.30
1000 1000 1.00 0.09 0.85 ( 0.01 ) 41.77 ( 0.68 )0.99 ( 0.07 ) 2.25 ( 0.01 ) 46.78 0.89 16 0.85 41.70 0.99 2.25
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllllll}\n", + " N & P & Ratio & Stab & MSE & FP & FN & OOB & num\\_select & FDR & Index & MSE\\_mean & FP\\_mean & FN\\_mean & OOB\\_mean\\\\\n", + "\\hline\n", + "\t 50 & 50 & 1.00 & NaN & 1.31 ( 0.06 ) & 1 ( 0 ) & 6 ( 0 ) & 2.09 ( 0.02 ) & 0.00 & NaN & 1 & 1.31 & NA & NA & 2.09 \\\\\n", + "\t 100 & 50 & 0.50 & 0.18 & 0.85 ( 0.02 ) & 1.85 ( 0.11 ) & 4.11 ( 0.1 ) & 1.79 ( 0.01 ) & 3.74 & 0.48 & 2 & 0.85 & 1.85 & 4.11 & 1.79 \\\\\n", + "\t 500 & 50 & 0.10 & 0.80 & 0.47 ( 0.01 ) & 0.3 ( 0.05 ) & 1.61 ( 0.08 ) & 1.31 ( 0 ) & 4.69 & 0.05 & 3 & 0.47 & 0.30 & 1.61 & 1.31 \\\\\n", + "\t 1000 & 50 & 0.05 & 0.88 & 0.35 ( 0 ) & 0.07 ( 0.03 ) & 0.78 ( 0.07 ) & 1.17 ( 0 ) & 5.29 & 0.01 & 4 & 0.35 & 0.07 & 0.78 & 1.17 \\\\\n", + "\t 50 & 100 & 2.00 & NaN & 1.32 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.23 ( 0.02 ) & 0.00 & NaN & 5 & 1.32 & NA & NA & 2.23 \\\\\n", + "\t 100 & 100 & 1.00 & 0.08 & 0.91 ( 0.03 ) & 4.33 ( 0.22 ) & 4.45 ( 0.09 ) & 2.02 ( 0.01 ) & 5.88 & 0.72 & 6 & 0.91 & 4.33 & 4.45 & 2.02 \\\\\n", + "\t 500 & 100 & 0.20 & 0.60 & 0.59 ( 0.01 ) & 1.91 ( 0.15 ) & 1.41 ( 0.07 ) & 1.54 ( 0 ) & 6.50 & 0.27 & 7 & 0.59 & 1.91 & 1.41 & 1.54 \\\\\n", + "\t 1000 & 100 & 0.10 & 0.81 & 0.47 ( 0 ) & 0.71 ( 0.09 ) & 0.53 ( 0.06 ) & 1.39 ( 0 ) & 6.18 & 0.1 & 8 & 0.47 & 0.71 & 0.53 & 1.39 \\\\\n", + "\t 50 & 500 & 10.00 & NaN & 1.33 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.48 ( 0.03 ) & 0.00 & NaN & 9 & 1.33 & NA & NA & 2.48 \\\\\n", + "\t 100 & 500 & 5.00 & 0.02 & 1.07 ( 0.03 ) & 23.8 ( 0.52 ) & 4.26 ( 0.1 ) & 2.43 ( 0.02 ) & 25.54 & 0.93 & 10 & 1.07 & 23.80 & 4.26 & 2.43 \\\\\n", + "\t 500 & 500 & 1.00 & 0.14 & 0.84 ( 0.01 ) & 19.92 ( 0.41 ) & 1.71 ( 0.08 ) & 2.14 ( 0.01 ) & 24.21 & 0.82 & 11 & 0.84 & 19.90 & 1.71 & 2.14 \\\\\n", + "\t 1000 & 500 & 0.50 & 0.19 & 0.78 ( 0.01 ) & 18.73 ( 0.42 ) & 0.84 ( 0.06 ) & 2.06 ( 0 ) & 23.89 & 0.78 & 12 & 0.78 & 18.70 & 0.84 & 2.06 \\\\\n", + "\t 50 & 1000 & 20.00 & NaN & 1.31 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.48 ( 0.03 ) & 0.00 & NaN & 13 & 1.31 & NA & NA & 2.48 \\\\\n", + "\t 100 & 1000 & 10.00 & 0.01 & 1.06 ( 0.03 ) & 48.48 ( 0.63 ) & 4.33 ( 0.1 ) & 2.43 ( 0.02 ) & 50.15 & 0.97 & 14 & 1.06 & 48.40 & 4.33 & 2.43 \\\\\n", + "\t 500 & 1000 & 2.00 & 0.06 & 0.89 ( 0.01 ) & 44.77 ( 0.71 ) & 1.81 ( 0.1 ) & 2.3 ( 0.01 ) & 48.96 & 0.91 & 15 & 0.89 & 44.70 & 1.81 & 2.30 \\\\\n", + "\t 1000 & 1000 & 1.00 & 0.09 & 0.85 ( 0.01 ) & 41.77 ( 0.68 ) & 0.99 ( 0.07 ) & 2.25 ( 0.01 ) & 46.78 & 0.89 & 16 & 0.85 & 41.70 & 0.99 & 2.25 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| N | P | Ratio | Stab | MSE | FP | FN | OOB | num_select | FDR | Index | MSE_mean | FP_mean | FN_mean | OOB_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 1.00 | NaN | 1.31 ( 0.06 ) | 1 ( 0 ) | 6 ( 0 ) | 2.09 ( 0.02 ) | 0.00 | NaN | 1 | 1.31 | NA | NA | 2.09 |\n", + "| 100 | 50 | 0.50 | 0.18 | 0.85 ( 0.02 ) | 1.85 ( 0.11 ) | 4.11 ( 0.1 ) | 1.79 ( 0.01 ) | 3.74 | 0.48 | 2 | 0.85 | 1.85 | 4.11 | 1.79 |\n", + "| 500 | 50 | 0.10 | 0.80 | 0.47 ( 0.01 ) | 0.3 ( 0.05 ) | 1.61 ( 0.08 ) | 1.31 ( 0 ) | 4.69 | 0.05 | 3 | 0.47 | 0.30 | 1.61 | 1.31 |\n", + "| 1000 | 50 | 0.05 | 0.88 | 0.35 ( 0 ) | 0.07 ( 0.03 ) | 0.78 ( 0.07 ) | 1.17 ( 0 ) | 5.29 | 0.01 | 4 | 0.35 | 0.07 | 0.78 | 1.17 |\n", + "| 50 | 100 | 2.00 | NaN | 1.32 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.23 ( 0.02 ) | 0.00 | NaN | 5 | 1.32 | NA | NA | 2.23 |\n", + "| 100 | 100 | 1.00 | 0.08 | 0.91 ( 0.03 ) | 4.33 ( 0.22 ) | 4.45 ( 0.09 ) | 2.02 ( 0.01 ) | 5.88 | 0.72 | 6 | 0.91 | 4.33 | 4.45 | 2.02 |\n", + "| 500 | 100 | 0.20 | 0.60 | 0.59 ( 0.01 ) | 1.91 ( 0.15 ) | 1.41 ( 0.07 ) | 1.54 ( 0 ) | 6.50 | 0.27 | 7 | 0.59 | 1.91 | 1.41 | 1.54 |\n", + "| 1000 | 100 | 0.10 | 0.81 | 0.47 ( 0 ) | 0.71 ( 0.09 ) | 0.53 ( 0.06 ) | 1.39 ( 0 ) | 6.18 | 0.1 | 8 | 0.47 | 0.71 | 0.53 | 1.39 |\n", + "| 50 | 500 | 10.00 | NaN | 1.33 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.48 ( 0.03 ) | 0.00 | NaN | 9 | 1.33 | NA | NA | 2.48 |\n", + "| 100 | 500 | 5.00 | 0.02 | 1.07 ( 0.03 ) | 23.8 ( 0.52 ) | 4.26 ( 0.1 ) | 2.43 ( 0.02 ) | 25.54 | 0.93 | 10 | 1.07 | 23.80 | 4.26 | 2.43 |\n", + "| 500 | 500 | 1.00 | 0.14 | 0.84 ( 0.01 ) | 19.92 ( 0.41 ) | 1.71 ( 0.08 ) | 2.14 ( 0.01 ) | 24.21 | 0.82 | 11 | 0.84 | 19.90 | 1.71 | 2.14 |\n", + "| 1000 | 500 | 0.50 | 0.19 | 0.78 ( 0.01 ) | 18.73 ( 0.42 ) | 0.84 ( 0.06 ) | 2.06 ( 0 ) | 23.89 | 0.78 | 12 | 0.78 | 18.70 | 0.84 | 2.06 |\n", + "| 50 | 1000 | 20.00 | NaN | 1.31 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.48 ( 0.03 ) | 0.00 | NaN | 13 | 1.31 | NA | NA | 2.48 |\n", + "| 100 | 1000 | 10.00 | 0.01 | 1.06 ( 0.03 ) | 48.48 ( 0.63 ) | 4.33 ( 0.1 ) | 2.43 ( 0.02 ) | 50.15 | 0.97 | 14 | 1.06 | 48.40 | 4.33 | 2.43 |\n", + "| 500 | 1000 | 2.00 | 0.06 | 0.89 ( 0.01 ) | 44.77 ( 0.71 ) | 1.81 ( 0.1 ) | 2.3 ( 0.01 ) | 48.96 | 0.91 | 15 | 0.89 | 44.70 | 1.81 | 2.30 |\n", + "| 1000 | 1000 | 1.00 | 0.09 | 0.85 ( 0.01 ) | 41.77 ( 0.68 ) | 0.99 ( 0.07 ) | 2.25 ( 0.01 ) | 46.78 | 0.89 | 16 | 0.85 | 41.70 | 0.99 | 2.25 |\n", + "\n" + ], + "text/plain": [ + " N P Ratio Stab MSE FP FN \n", + "1 50 50 1.00 NaN 1.31 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) \n", + "2 100 50 0.50 0.18 0.85 ( 0.02 ) 1.85 ( 0.11 ) 4.11 ( 0.1 ) \n", + "3 500 50 0.10 0.80 0.47 ( 0.01 ) 0.3 ( 0.05 ) 1.61 ( 0.08 )\n", + "4 1000 50 0.05 0.88 0.35 ( 0 ) 0.07 ( 0.03 ) 0.78 ( 0.07 )\n", + "5 50 100 2.00 NaN 1.32 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "6 100 100 1.00 0.08 0.91 ( 0.03 ) 4.33 ( 0.22 ) 4.45 ( 0.09 )\n", + "7 500 100 0.20 0.60 0.59 ( 0.01 ) 1.91 ( 0.15 ) 1.41 ( 0.07 )\n", + "8 1000 100 0.10 0.81 0.47 ( 0 ) 0.71 ( 0.09 ) 0.53 ( 0.06 )\n", + "9 50 500 10.00 NaN 1.33 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "10 100 500 5.00 0.02 1.07 ( 0.03 ) 23.8 ( 0.52 ) 4.26 ( 0.1 ) \n", + "11 500 500 1.00 0.14 0.84 ( 0.01 ) 19.92 ( 0.41 ) 1.71 ( 0.08 )\n", + "12 1000 500 0.50 0.19 0.78 ( 0.01 ) 18.73 ( 0.42 ) 0.84 ( 0.06 )\n", + "13 50 1000 20.00 NaN 1.31 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "14 100 1000 10.00 0.01 1.06 ( 0.03 ) 48.48 ( 0.63 ) 4.33 ( 0.1 ) \n", + "15 500 1000 2.00 0.06 0.89 ( 0.01 ) 44.77 ( 0.71 ) 1.81 ( 0.1 ) \n", + "16 1000 1000 1.00 0.09 0.85 ( 0.01 ) 41.77 ( 0.68 ) 0.99 ( 0.07 )\n", + " OOB num_select FDR Index MSE_mean FP_mean FN_mean OOB_mean\n", + "1 2.09 ( 0.02 ) 0.00 NaN 1 1.31 NA NA 2.09 \n", + "2 1.79 ( 0.01 ) 3.74 0.48 2 0.85 1.85 4.11 1.79 \n", + "3 1.31 ( 0 ) 4.69 0.05 3 0.47 0.30 1.61 1.31 \n", + "4 1.17 ( 0 ) 5.29 0.01 4 0.35 0.07 0.78 1.17 \n", + "5 2.23 ( 0.02 ) 0.00 NaN 5 1.32 NA NA 2.23 \n", + "6 2.02 ( 0.01 ) 5.88 0.72 6 0.91 4.33 4.45 2.02 \n", + "7 1.54 ( 0 ) 6.50 0.27 7 0.59 1.91 1.41 1.54 \n", + "8 1.39 ( 0 ) 6.18 0.1 8 0.47 0.71 0.53 1.39 \n", + "9 2.48 ( 0.03 ) 0.00 NaN 9 1.33 NA NA 2.48 \n", + "10 2.43 ( 0.02 ) 25.54 0.93 10 1.07 23.80 4.26 2.43 \n", + "11 2.14 ( 0.01 ) 24.21 0.82 11 0.84 19.90 1.71 2.14 \n", + "12 2.06 ( 0 ) 23.89 0.78 12 0.78 18.70 0.84 2.06 \n", + "13 2.48 ( 0.03 ) 0.00 NaN 13 1.31 NA NA 2.48 \n", + "14 2.43 ( 0.02 ) 50.15 0.97 14 1.06 48.40 4.33 2.43 \n", + "15 2.3 ( 0.01 ) 48.96 0.91 15 0.89 44.70 1.81 2.30 \n", + "16 2.25 ( 0.01 ) 46.78 0.89 16 0.85 41.70 0.99 2.25 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_ind" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1] 0\n", + "[1] 0\n", + "[1] 0\n", + "[1] 0\n" + ] + } + ], + "source": [ + "## nothing was selected when Stab is NaN\n", + "for (i in c(1,5,9,13)){\n", + " print(sum(results_ind_rf[[i]]$Stab.table))\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPRatioStabMSEFPFNOOBnum_selectFDRIndexMSE_meanFP_meanFN_meanOOB_mean
50 50 1.00 0.00 1.31 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) 2.09 ( 0.02 ) 0.00 NaN 1 1.31 1.00 6.00 2.09
100 50 0.50 0.18 0.85 ( 0.02 ) 1.85 ( 0.11 ) 4.11 ( 0.1 ) 1.79 ( 0.01 ) 3.74 0.48 2 0.85 1.85 4.11 1.79
500 50 0.10 0.80 0.47 ( 0.01 ) 0.3 ( 0.05 ) 1.61 ( 0.08 ) 1.31 ( 0 ) 4.69 0.05 3 0.47 0.30 1.61 1.31
1000 50 0.05 0.88 0.35 ( 0 ) 0.07 ( 0.03 ) 0.78 ( 0.07 ) 1.17 ( 0 ) 5.29 0.01 4 0.35 0.07 0.78 1.17
50 100 2.00 0.00 1.32 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 2.23 ( 0.02 ) 0.00 NaN 5 1.32 1.00 6.00 2.23
100 100 1.00 0.08 0.91 ( 0.03 ) 4.33 ( 0.22 ) 4.45 ( 0.09 ) 2.02 ( 0.01 ) 5.88 0.72 6 0.91 4.33 4.45 2.02
500 100 0.20 0.60 0.59 ( 0.01 ) 1.91 ( 0.15 ) 1.41 ( 0.07 ) 1.54 ( 0 ) 6.50 0.27 7 0.59 1.91 1.41 1.54
1000 100 0.10 0.81 0.47 ( 0 ) 0.71 ( 0.09 ) 0.53 ( 0.06 ) 1.39 ( 0 ) 6.18 0.1 8 0.47 0.71 0.53 1.39
50 500 10.00 0.00 1.33 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 2.48 ( 0.03 ) 0.00 NaN 9 1.33 1.00 6.00 2.48
100 500 5.00 0.02 1.07 ( 0.03 ) 23.8 ( 0.52 ) 4.26 ( 0.1 ) 2.43 ( 0.02 ) 25.54 0.93 10 1.07 23.80 4.26 2.43
500 500 1.00 0.14 0.84 ( 0.01 ) 19.92 ( 0.41 )1.71 ( 0.08 ) 2.14 ( 0.01 ) 24.21 0.82 11 0.84 19.90 1.71 2.14
1000 500 0.50 0.19 0.78 ( 0.01 ) 18.73 ( 0.42 )0.84 ( 0.06 ) 2.06 ( 0 ) 23.89 0.78 12 0.78 18.70 0.84 2.06
50 1000 20.00 0.00 1.31 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 2.48 ( 0.03 ) 0.00 NaN 13 1.31 1.00 6.00 2.48
100 1000 10.00 0.01 1.06 ( 0.03 ) 48.48 ( 0.63 )4.33 ( 0.1 ) 2.43 ( 0.02 ) 50.15 0.97 14 1.06 48.40 4.33 2.43
500 1000 2.00 0.06 0.89 ( 0.01 ) 44.77 ( 0.71 )1.81 ( 0.1 ) 2.3 ( 0.01 ) 48.96 0.91 15 0.89 44.70 1.81 2.30
1000 1000 1.00 0.09 0.85 ( 0.01 ) 41.77 ( 0.68 )0.99 ( 0.07 ) 2.25 ( 0.01 ) 46.78 0.89 16 0.85 41.70 0.99 2.25
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllllll}\n", + " N & P & Ratio & Stab & MSE & FP & FN & OOB & num\\_select & FDR & Index & MSE\\_mean & FP\\_mean & FN\\_mean & OOB\\_mean\\\\\n", + "\\hline\n", + "\t 50 & 50 & 1.00 & 0.00 & 1.31 ( 0.06 ) & 1 ( 0 ) & 6 ( 0 ) & 2.09 ( 0.02 ) & 0.00 & NaN & 1 & 1.31 & 1.00 & 6.00 & 2.09 \\\\\n", + "\t 100 & 50 & 0.50 & 0.18 & 0.85 ( 0.02 ) & 1.85 ( 0.11 ) & 4.11 ( 0.1 ) & 1.79 ( 0.01 ) & 3.74 & 0.48 & 2 & 0.85 & 1.85 & 4.11 & 1.79 \\\\\n", + "\t 500 & 50 & 0.10 & 0.80 & 0.47 ( 0.01 ) & 0.3 ( 0.05 ) & 1.61 ( 0.08 ) & 1.31 ( 0 ) & 4.69 & 0.05 & 3 & 0.47 & 0.30 & 1.61 & 1.31 \\\\\n", + "\t 1000 & 50 & 0.05 & 0.88 & 0.35 ( 0 ) & 0.07 ( 0.03 ) & 0.78 ( 0.07 ) & 1.17 ( 0 ) & 5.29 & 0.01 & 4 & 0.35 & 0.07 & 0.78 & 1.17 \\\\\n", + "\t 50 & 100 & 2.00 & 0.00 & 1.32 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.23 ( 0.02 ) & 0.00 & NaN & 5 & 1.32 & 1.00 & 6.00 & 2.23 \\\\\n", + "\t 100 & 100 & 1.00 & 0.08 & 0.91 ( 0.03 ) & 4.33 ( 0.22 ) & 4.45 ( 0.09 ) & 2.02 ( 0.01 ) & 5.88 & 0.72 & 6 & 0.91 & 4.33 & 4.45 & 2.02 \\\\\n", + "\t 500 & 100 & 0.20 & 0.60 & 0.59 ( 0.01 ) & 1.91 ( 0.15 ) & 1.41 ( 0.07 ) & 1.54 ( 0 ) & 6.50 & 0.27 & 7 & 0.59 & 1.91 & 1.41 & 1.54 \\\\\n", + "\t 1000 & 100 & 0.10 & 0.81 & 0.47 ( 0 ) & 0.71 ( 0.09 ) & 0.53 ( 0.06 ) & 1.39 ( 0 ) & 6.18 & 0.1 & 8 & 0.47 & 0.71 & 0.53 & 1.39 \\\\\n", + "\t 50 & 500 & 10.00 & 0.00 & 1.33 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.48 ( 0.03 ) & 0.00 & NaN & 9 & 1.33 & 1.00 & 6.00 & 2.48 \\\\\n", + "\t 100 & 500 & 5.00 & 0.02 & 1.07 ( 0.03 ) & 23.8 ( 0.52 ) & 4.26 ( 0.1 ) & 2.43 ( 0.02 ) & 25.54 & 0.93 & 10 & 1.07 & 23.80 & 4.26 & 2.43 \\\\\n", + "\t 500 & 500 & 1.00 & 0.14 & 0.84 ( 0.01 ) & 19.92 ( 0.41 ) & 1.71 ( 0.08 ) & 2.14 ( 0.01 ) & 24.21 & 0.82 & 11 & 0.84 & 19.90 & 1.71 & 2.14 \\\\\n", + "\t 1000 & 500 & 0.50 & 0.19 & 0.78 ( 0.01 ) & 18.73 ( 0.42 ) & 0.84 ( 0.06 ) & 2.06 ( 0 ) & 23.89 & 0.78 & 12 & 0.78 & 18.70 & 0.84 & 2.06 \\\\\n", + "\t 50 & 1000 & 20.00 & 0.00 & 1.31 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.48 ( 0.03 ) & 0.00 & NaN & 13 & 1.31 & 1.00 & 6.00 & 2.48 \\\\\n", + "\t 100 & 1000 & 10.00 & 0.01 & 1.06 ( 0.03 ) & 48.48 ( 0.63 ) & 4.33 ( 0.1 ) & 2.43 ( 0.02 ) & 50.15 & 0.97 & 14 & 1.06 & 48.40 & 4.33 & 2.43 \\\\\n", + "\t 500 & 1000 & 2.00 & 0.06 & 0.89 ( 0.01 ) & 44.77 ( 0.71 ) & 1.81 ( 0.1 ) & 2.3 ( 0.01 ) & 48.96 & 0.91 & 15 & 0.89 & 44.70 & 1.81 & 2.30 \\\\\n", + "\t 1000 & 1000 & 1.00 & 0.09 & 0.85 ( 0.01 ) & 41.77 ( 0.68 ) & 0.99 ( 0.07 ) & 2.25 ( 0.01 ) & 46.78 & 0.89 & 16 & 0.85 & 41.70 & 0.99 & 2.25 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| N | P | Ratio | Stab | MSE | FP | FN | OOB | num_select | FDR | Index | MSE_mean | FP_mean | FN_mean | OOB_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 1.00 | 0.00 | 1.31 ( 0.06 ) | 1 ( 0 ) | 6 ( 0 ) | 2.09 ( 0.02 ) | 0.00 | NaN | 1 | 1.31 | 1.00 | 6.00 | 2.09 |\n", + "| 100 | 50 | 0.50 | 0.18 | 0.85 ( 0.02 ) | 1.85 ( 0.11 ) | 4.11 ( 0.1 ) | 1.79 ( 0.01 ) | 3.74 | 0.48 | 2 | 0.85 | 1.85 | 4.11 | 1.79 |\n", + "| 500 | 50 | 0.10 | 0.80 | 0.47 ( 0.01 ) | 0.3 ( 0.05 ) | 1.61 ( 0.08 ) | 1.31 ( 0 ) | 4.69 | 0.05 | 3 | 0.47 | 0.30 | 1.61 | 1.31 |\n", + "| 1000 | 50 | 0.05 | 0.88 | 0.35 ( 0 ) | 0.07 ( 0.03 ) | 0.78 ( 0.07 ) | 1.17 ( 0 ) | 5.29 | 0.01 | 4 | 0.35 | 0.07 | 0.78 | 1.17 |\n", + "| 50 | 100 | 2.00 | 0.00 | 1.32 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.23 ( 0.02 ) | 0.00 | NaN | 5 | 1.32 | 1.00 | 6.00 | 2.23 |\n", + "| 100 | 100 | 1.00 | 0.08 | 0.91 ( 0.03 ) | 4.33 ( 0.22 ) | 4.45 ( 0.09 ) | 2.02 ( 0.01 ) | 5.88 | 0.72 | 6 | 0.91 | 4.33 | 4.45 | 2.02 |\n", + "| 500 | 100 | 0.20 | 0.60 | 0.59 ( 0.01 ) | 1.91 ( 0.15 ) | 1.41 ( 0.07 ) | 1.54 ( 0 ) | 6.50 | 0.27 | 7 | 0.59 | 1.91 | 1.41 | 1.54 |\n", + "| 1000 | 100 | 0.10 | 0.81 | 0.47 ( 0 ) | 0.71 ( 0.09 ) | 0.53 ( 0.06 ) | 1.39 ( 0 ) | 6.18 | 0.1 | 8 | 0.47 | 0.71 | 0.53 | 1.39 |\n", + "| 50 | 500 | 10.00 | 0.00 | 1.33 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.48 ( 0.03 ) | 0.00 | NaN | 9 | 1.33 | 1.00 | 6.00 | 2.48 |\n", + "| 100 | 500 | 5.00 | 0.02 | 1.07 ( 0.03 ) | 23.8 ( 0.52 ) | 4.26 ( 0.1 ) | 2.43 ( 0.02 ) | 25.54 | 0.93 | 10 | 1.07 | 23.80 | 4.26 | 2.43 |\n", + "| 500 | 500 | 1.00 | 0.14 | 0.84 ( 0.01 ) | 19.92 ( 0.41 ) | 1.71 ( 0.08 ) | 2.14 ( 0.01 ) | 24.21 | 0.82 | 11 | 0.84 | 19.90 | 1.71 | 2.14 |\n", + "| 1000 | 500 | 0.50 | 0.19 | 0.78 ( 0.01 ) | 18.73 ( 0.42 ) | 0.84 ( 0.06 ) | 2.06 ( 0 ) | 23.89 | 0.78 | 12 | 0.78 | 18.70 | 0.84 | 2.06 |\n", + "| 50 | 1000 | 20.00 | 0.00 | 1.31 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.48 ( 0.03 ) | 0.00 | NaN | 13 | 1.31 | 1.00 | 6.00 | 2.48 |\n", + "| 100 | 1000 | 10.00 | 0.01 | 1.06 ( 0.03 ) | 48.48 ( 0.63 ) | 4.33 ( 0.1 ) | 2.43 ( 0.02 ) | 50.15 | 0.97 | 14 | 1.06 | 48.40 | 4.33 | 2.43 |\n", + "| 500 | 1000 | 2.00 | 0.06 | 0.89 ( 0.01 ) | 44.77 ( 0.71 ) | 1.81 ( 0.1 ) | 2.3 ( 0.01 ) | 48.96 | 0.91 | 15 | 0.89 | 44.70 | 1.81 | 2.30 |\n", + "| 1000 | 1000 | 1.00 | 0.09 | 0.85 ( 0.01 ) | 41.77 ( 0.68 ) | 0.99 ( 0.07 ) | 2.25 ( 0.01 ) | 46.78 | 0.89 | 16 | 0.85 | 41.70 | 0.99 | 2.25 |\n", + "\n" + ], + "text/plain": [ + " N P Ratio Stab MSE FP FN \n", + "1 50 50 1.00 0.00 1.31 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) \n", + "2 100 50 0.50 0.18 0.85 ( 0.02 ) 1.85 ( 0.11 ) 4.11 ( 0.1 ) \n", + "3 500 50 0.10 0.80 0.47 ( 0.01 ) 0.3 ( 0.05 ) 1.61 ( 0.08 )\n", + "4 1000 50 0.05 0.88 0.35 ( 0 ) 0.07 ( 0.03 ) 0.78 ( 0.07 )\n", + "5 50 100 2.00 0.00 1.32 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "6 100 100 1.00 0.08 0.91 ( 0.03 ) 4.33 ( 0.22 ) 4.45 ( 0.09 )\n", + "7 500 100 0.20 0.60 0.59 ( 0.01 ) 1.91 ( 0.15 ) 1.41 ( 0.07 )\n", + "8 1000 100 0.10 0.81 0.47 ( 0 ) 0.71 ( 0.09 ) 0.53 ( 0.06 )\n", + "9 50 500 10.00 0.00 1.33 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "10 100 500 5.00 0.02 1.07 ( 0.03 ) 23.8 ( 0.52 ) 4.26 ( 0.1 ) \n", + "11 500 500 1.00 0.14 0.84 ( 0.01 ) 19.92 ( 0.41 ) 1.71 ( 0.08 )\n", + "12 1000 500 0.50 0.19 0.78 ( 0.01 ) 18.73 ( 0.42 ) 0.84 ( 0.06 )\n", + "13 50 1000 20.00 0.00 1.31 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "14 100 1000 10.00 0.01 1.06 ( 0.03 ) 48.48 ( 0.63 ) 4.33 ( 0.1 ) \n", + "15 500 1000 2.00 0.06 0.89 ( 0.01 ) 44.77 ( 0.71 ) 1.81 ( 0.1 ) \n", + "16 1000 1000 1.00 0.09 0.85 ( 0.01 ) 41.77 ( 0.68 ) 0.99 ( 0.07 )\n", + " OOB num_select FDR Index MSE_mean FP_mean FN_mean OOB_mean\n", + "1 2.09 ( 0.02 ) 0.00 NaN 1 1.31 1.00 6.00 2.09 \n", + "2 1.79 ( 0.01 ) 3.74 0.48 2 0.85 1.85 4.11 1.79 \n", + "3 1.31 ( 0 ) 4.69 0.05 3 0.47 0.30 1.61 1.31 \n", + "4 1.17 ( 0 ) 5.29 0.01 4 0.35 0.07 0.78 1.17 \n", + "5 2.23 ( 0.02 ) 0.00 NaN 5 1.32 1.00 6.00 2.23 \n", + "6 2.02 ( 0.01 ) 5.88 0.72 6 0.91 4.33 4.45 2.02 \n", + "7 1.54 ( 0 ) 6.50 0.27 7 0.59 1.91 1.41 1.54 \n", + "8 1.39 ( 0 ) 6.18 0.1 8 0.47 0.71 0.53 1.39 \n", + "9 2.48 ( 0.03 ) 0.00 NaN 9 1.33 1.00 6.00 2.48 \n", + "10 2.43 ( 0.02 ) 25.54 0.93 10 1.07 23.80 4.26 2.43 \n", + "11 2.14 ( 0.01 ) 24.21 0.82 11 0.84 19.90 1.71 2.14 \n", + "12 2.06 ( 0 ) 23.89 0.78 12 0.78 18.70 0.84 2.06 \n", + "13 2.48 ( 0.03 ) 0.00 NaN 13 1.31 1.00 6.00 2.48 \n", + "14 2.43 ( 0.02 ) 50.15 0.97 14 1.06 48.40 4.33 2.43 \n", + "15 2.3 ( 0.01 ) 48.96 0.91 15 0.89 44.70 1.81 2.30 \n", + "16 2.25 ( 0.01 ) 46.78 0.89 16 0.85 41.70 0.99 2.25 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "## assign zero values to NA Stab; also recover missing FP values (1 in this case); missing FN values (6 in this case)\n", + "result.table_ind$Stab[is.na(result.table_ind$Stab)] = 0\n", + "result.table_ind$FP_mean[is.na(result.table_ind$FP_mean)] = 1\n", + "result.table_ind$FN_mean[is.na(result.table_ind$FN_mean)] = 6\n", + "#result.table_ind$FDR[is.na(result.table_ind$FDR)] = 0\n", + "result.table_ind\n", + "\n", + "## export\n", + "write.table(result.table_ind, '../results_summary_cts/sim_ind_rf.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_cts/0.4_sim_indepdent_compLasso_cts.ipynb b/simulations/notebooks_sim_cts/0.4_sim_indepdent_compLasso_cts.ipynb new file mode 100755 index 0000000..9304d4e --- /dev/null +++ b/simulations/notebooks_sim_cts/0.4_sim_indepdent_compLasso_cts.ipynb @@ -0,0 +1,362 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize compositional lasso results on Independent Simulation Scenarios for continuous outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'\n", + "\n", + "load(paste0(dir, '/independent_compLasso.RData'))" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "files = NULL\n", + "for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_independent_', paste('P', p, 'N', n, sep='_'), '.RData'))\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "avg_FDR = NULL\n", + "for (i in 1:length(files)){\n", + " sim_file = files[i]\n", + " load(sim_file, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_ind_compLasso[[i]]$Stab.table\n", + " \n", + " FDR = NULL\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "table_ind = NULL\n", + "tmp_num_select = rep(0, length(results_ind_compLasso))\n", + "for (i in 1:length(results_ind_compLasso)){\n", + " table_ind = rbind(table_ind, results_ind_compLasso[[i]][c('n', 'p', 'rou', 'FP', 'FN', 'MSE', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_ind_compLasso[[i]]$Stab.table))\n", + " \n", + "}\n", + "table_ind = as.data.frame(table_ind)\n", + "table_ind$num_select = tmp_num_select\n", + "table_ind$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
nprouFPFNMSEStabnum_selectFDR
50 50 0 2.99 ( 0.27 )0.05 ( 0.02 )0.8 ( 0.05 ) 0.61 8.94 0.28
100 50 0 0.79 ( 0.15 )0 ( 0 ) 0.98 ( 0.06 )0.87 6.79 0.09
500 50 0 0.51 ( 0.11 )0 ( 0 ) 1.08 ( 0.05 )0.91 6.51 0.06
1000 50 0 0.39 ( 0.15 )0 ( 0 ) 1.18 ( 0.04 )0.93 6.39 0.04
50 100 0 4.3 ( 0.31 ) 0.24 ( 0.05 )1.05 ( 0.07 )0.52 10.06 0.37
100 100 0 1.02 ( 0.19 )0 ( 0 ) 0.94 ( 0.04 )0.85 7.02 0.11
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllll}\n", + " n & p & rou & FP & FN & MSE & Stab & num\\_select & FDR\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0 & 2.99 ( 0.27 ) & 0.05 ( 0.02 ) & 0.8 ( 0.05 ) & 0.61 & 8.94 & 0.28 \\\\\n", + "\t 100 & 50 & 0 & 0.79 ( 0.15 ) & 0 ( 0 ) & 0.98 ( 0.06 ) & 0.87 & 6.79 & 0.09 \\\\\n", + "\t 500 & 50 & 0 & 0.51 ( 0.11 ) & 0 ( 0 ) & 1.08 ( 0.05 ) & 0.91 & 6.51 & 0.06 \\\\\n", + "\t 1000 & 50 & 0 & 0.39 ( 0.15 ) & 0 ( 0 ) & 1.18 ( 0.04 ) & 0.93 & 6.39 & 0.04 \\\\\n", + "\t 50 & 100 & 0 & 4.3 ( 0.31 ) & 0.24 ( 0.05 ) & 1.05 ( 0.07 ) & 0.52 & 10.06 & 0.37 \\\\\n", + "\t 100 & 100 & 0 & 1.02 ( 0.19 ) & 0 ( 0 ) & 0.94 ( 0.04 ) & 0.85 & 7.02 & 0.11 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| n | p | rou | FP | FN | MSE | Stab | num_select | FDR |\n", + "|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0 | 2.99 ( 0.27 ) | 0.05 ( 0.02 ) | 0.8 ( 0.05 ) | 0.61 | 8.94 | 0.28 |\n", + "| 100 | 50 | 0 | 0.79 ( 0.15 ) | 0 ( 0 ) | 0.98 ( 0.06 ) | 0.87 | 6.79 | 0.09 |\n", + "| 500 | 50 | 0 | 0.51 ( 0.11 ) | 0 ( 0 ) | 1.08 ( 0.05 ) | 0.91 | 6.51 | 0.06 |\n", + "| 1000 | 50 | 0 | 0.39 ( 0.15 ) | 0 ( 0 ) | 1.18 ( 0.04 ) | 0.93 | 6.39 | 0.04 |\n", + "| 50 | 100 | 0 | 4.3 ( 0.31 ) | 0.24 ( 0.05 ) | 1.05 ( 0.07 ) | 0.52 | 10.06 | 0.37 |\n", + "| 100 | 100 | 0 | 1.02 ( 0.19 ) | 0 ( 0 ) | 0.94 ( 0.04 ) | 0.85 | 7.02 | 0.11 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN MSE Stab num_select FDR \n", + "1 50 50 0 2.99 ( 0.27 ) 0.05 ( 0.02 ) 0.8 ( 0.05 ) 0.61 8.94 0.28\n", + "2 100 50 0 0.79 ( 0.15 ) 0 ( 0 ) 0.98 ( 0.06 ) 0.87 6.79 0.09\n", + "3 500 50 0 0.51 ( 0.11 ) 0 ( 0 ) 1.08 ( 0.05 ) 0.91 6.51 0.06\n", + "4 1000 50 0 0.39 ( 0.15 ) 0 ( 0 ) 1.18 ( 0.04 ) 0.93 6.39 0.04\n", + "5 50 100 0 4.3 ( 0.31 ) 0.24 ( 0.05 ) 1.05 ( 0.07 ) 0.52 10.06 0.37\n", + "6 100 100 0 1.02 ( 0.19 ) 0 ( 0 ) 0.94 ( 0.04 ) 0.85 7.02 0.11" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_ind)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_ind <- apply(table_ind,2,as.character)\n", + "rownames(result.table_ind) = rownames(table_ind)\n", + "result.table_ind = as.data.frame(result.table_ind)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_ind$n = tidyr::extract_numeric(result.table_ind$n)\n", + "result.table_ind$p = tidyr::extract_numeric(result.table_ind$p)\n", + "result.table_ind$ratio = result.table_ind$p / result.table_ind$n\n", + "\n", + "result.table_ind = result.table_ind[c('n', 'p', 'ratio', 'Stab', 'MSE', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_ind)[1:3] = c('N', 'P', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”" + ] + } + ], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_ind$Stab = as.numeric(as.character(result.table_ind$Stab))\n", + "result.table_ind$MSE_mean = as.numeric(substr(result.table_ind$MSE, start=1, stop=4))\n", + "result.table_ind$FP_mean = as.numeric(substr(result.table_ind$FP, start=1, stop=4))\n", + "result.table_ind$FN_mean = as.numeric(substr(result.table_ind$FN, start=1, stop=4))\n", + "result.table_ind$FN_mean[is.na(result.table_ind$FN_mean)] = 0\n", + "result.table_ind$num_select = as.numeric(as.character(result.table_ind$num_select))" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
50 50 1.00 0.61 0.8 ( 0.05 ) 2.99 ( 0.27 )0.05 ( 0.02 ) 8.94 0.28 0.80 2.99 0.05
100 50 0.50 0.87 0.98 ( 0.06 )0.79 ( 0.15 )0 ( 0 ) 6.79 0.09 0.98 0.79 0.00
500 50 0.10 0.91 1.08 ( 0.05 )0.51 ( 0.11 )0 ( 0 ) 6.51 0.06 1.08 0.51 0.00
1000 50 0.05 0.93 1.18 ( 0.04 )0.39 ( 0.15 )0 ( 0 ) 6.39 0.04 1.18 0.39 0.00
50 100 2.00 0.52 1.05 ( 0.07 )4.3 ( 0.31 ) 0.24 ( 0.05 )10.06 0.37 1.05 4.30 0.24
100 100 1.00 0.85 0.94 ( 0.04 )1.02 ( 0.19 )0 ( 0 ) 7.02 0.11 0.94 1.02 0.00
500 100 0.20 0.96 1.16 ( 0.04 )0.25 ( 0.09 )0 ( 0 ) 6.25 0.03 1.16 0.25 0.00
1000 100 0.10 0.89 1.04 ( 0.05 )0.71 ( 0.15 )0 ( 0 ) 6.71 0.08 1.04 0.71 0.00
50 500 10.00 0.38 2.18 ( 0.13 )5.53 ( 0.36 )1.27 ( 0.11 )10.26 0.48 2.18 5.53 1.27
100 500 5.00 0.75 1 ( 0.05 ) 1.9 ( 0.29 ) 0.03 ( 0.02 ) 7.87 0.18 1.00 1.90 0.03
500 500 1.00 0.96 1.18 ( 0.04 )0.27 ( 0.13 )0 ( 0 ) 6.27 0.03 1.18 0.27 0.00
1000 500 0.50 0.96 1.24 ( 0.04 )0.25 ( 0.1 ) 0 ( 0 ) 6.25 0.03 1.24 0.25 0.00
50 1000 20.00 0.32 3.09 ( 0.23 )5.56 ( 0.36 )1.95 ( 0.14 ) 9.61 0.51 3.09 5.56 1.95
100 1000 10.00 0.67 1.1 ( 0.07 ) 2.8 ( 0.37 ) 0.04 ( 0.02 ) 8.76 0.24 1.10 2.80 0.04
500 1000 2.00 0.96 1.12 ( 0.04 )0.27 ( 0.08 )0 ( 0 ) 6.27 0.03 1.12 0.27 0.00
1000 1000 1.00 0.96 1.16 ( 0.04 )0.24 ( 0.07 )0 ( 0 ) 6.24 0.03 1.16 0.24 0.00
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|llllllllllll}\n", + " N & P & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t 50 & 50 & 1.00 & 0.61 & 0.8 ( 0.05 ) & 2.99 ( 0.27 ) & 0.05 ( 0.02 ) & 8.94 & 0.28 & 0.80 & 2.99 & 0.05 \\\\\n", + "\t 100 & 50 & 0.50 & 0.87 & 0.98 ( 0.06 ) & 0.79 ( 0.15 ) & 0 ( 0 ) & 6.79 & 0.09 & 0.98 & 0.79 & 0.00 \\\\\n", + "\t 500 & 50 & 0.10 & 0.91 & 1.08 ( 0.05 ) & 0.51 ( 0.11 ) & 0 ( 0 ) & 6.51 & 0.06 & 1.08 & 0.51 & 0.00 \\\\\n", + "\t 1000 & 50 & 0.05 & 0.93 & 1.18 ( 0.04 ) & 0.39 ( 0.15 ) & 0 ( 0 ) & 6.39 & 0.04 & 1.18 & 0.39 & 0.00 \\\\\n", + "\t 50 & 100 & 2.00 & 0.52 & 1.05 ( 0.07 ) & 4.3 ( 0.31 ) & 0.24 ( 0.05 ) & 10.06 & 0.37 & 1.05 & 4.30 & 0.24 \\\\\n", + "\t 100 & 100 & 1.00 & 0.85 & 0.94 ( 0.04 ) & 1.02 ( 0.19 ) & 0 ( 0 ) & 7.02 & 0.11 & 0.94 & 1.02 & 0.00 \\\\\n", + "\t 500 & 100 & 0.20 & 0.96 & 1.16 ( 0.04 ) & 0.25 ( 0.09 ) & 0 ( 0 ) & 6.25 & 0.03 & 1.16 & 0.25 & 0.00 \\\\\n", + "\t 1000 & 100 & 0.10 & 0.89 & 1.04 ( 0.05 ) & 0.71 ( 0.15 ) & 0 ( 0 ) & 6.71 & 0.08 & 1.04 & 0.71 & 0.00 \\\\\n", + "\t 50 & 500 & 10.00 & 0.38 & 2.18 ( 0.13 ) & 5.53 ( 0.36 ) & 1.27 ( 0.11 ) & 10.26 & 0.48 & 2.18 & 5.53 & 1.27 \\\\\n", + "\t 100 & 500 & 5.00 & 0.75 & 1 ( 0.05 ) & 1.9 ( 0.29 ) & 0.03 ( 0.02 ) & 7.87 & 0.18 & 1.00 & 1.90 & 0.03 \\\\\n", + "\t 500 & 500 & 1.00 & 0.96 & 1.18 ( 0.04 ) & 0.27 ( 0.13 ) & 0 ( 0 ) & 6.27 & 0.03 & 1.18 & 0.27 & 0.00 \\\\\n", + "\t 1000 & 500 & 0.50 & 0.96 & 1.24 ( 0.04 ) & 0.25 ( 0.1 ) & 0 ( 0 ) & 6.25 & 0.03 & 1.24 & 0.25 & 0.00 \\\\\n", + "\t 50 & 1000 & 20.00 & 0.32 & 3.09 ( 0.23 ) & 5.56 ( 0.36 ) & 1.95 ( 0.14 ) & 9.61 & 0.51 & 3.09 & 5.56 & 1.95 \\\\\n", + "\t 100 & 1000 & 10.00 & 0.67 & 1.1 ( 0.07 ) & 2.8 ( 0.37 ) & 0.04 ( 0.02 ) & 8.76 & 0.24 & 1.10 & 2.80 & 0.04 \\\\\n", + "\t 500 & 1000 & 2.00 & 0.96 & 1.12 ( 0.04 ) & 0.27 ( 0.08 ) & 0 ( 0 ) & 6.27 & 0.03 & 1.12 & 0.27 & 0.00 \\\\\n", + "\t 1000 & 1000 & 1.00 & 0.96 & 1.16 ( 0.04 ) & 0.24 ( 0.07 ) & 0 ( 0 ) & 6.24 & 0.03 & 1.16 & 0.24 & 0.00 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| N | P | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 1.00 | 0.61 | 0.8 ( 0.05 ) | 2.99 ( 0.27 ) | 0.05 ( 0.02 ) | 8.94 | 0.28 | 0.80 | 2.99 | 0.05 |\n", + "| 100 | 50 | 0.50 | 0.87 | 0.98 ( 0.06 ) | 0.79 ( 0.15 ) | 0 ( 0 ) | 6.79 | 0.09 | 0.98 | 0.79 | 0.00 |\n", + "| 500 | 50 | 0.10 | 0.91 | 1.08 ( 0.05 ) | 0.51 ( 0.11 ) | 0 ( 0 ) | 6.51 | 0.06 | 1.08 | 0.51 | 0.00 |\n", + "| 1000 | 50 | 0.05 | 0.93 | 1.18 ( 0.04 ) | 0.39 ( 0.15 ) | 0 ( 0 ) | 6.39 | 0.04 | 1.18 | 0.39 | 0.00 |\n", + "| 50 | 100 | 2.00 | 0.52 | 1.05 ( 0.07 ) | 4.3 ( 0.31 ) | 0.24 ( 0.05 ) | 10.06 | 0.37 | 1.05 | 4.30 | 0.24 |\n", + "| 100 | 100 | 1.00 | 0.85 | 0.94 ( 0.04 ) | 1.02 ( 0.19 ) | 0 ( 0 ) | 7.02 | 0.11 | 0.94 | 1.02 | 0.00 |\n", + "| 500 | 100 | 0.20 | 0.96 | 1.16 ( 0.04 ) | 0.25 ( 0.09 ) | 0 ( 0 ) | 6.25 | 0.03 | 1.16 | 0.25 | 0.00 |\n", + "| 1000 | 100 | 0.10 | 0.89 | 1.04 ( 0.05 ) | 0.71 ( 0.15 ) | 0 ( 0 ) | 6.71 | 0.08 | 1.04 | 0.71 | 0.00 |\n", + "| 50 | 500 | 10.00 | 0.38 | 2.18 ( 0.13 ) | 5.53 ( 0.36 ) | 1.27 ( 0.11 ) | 10.26 | 0.48 | 2.18 | 5.53 | 1.27 |\n", + "| 100 | 500 | 5.00 | 0.75 | 1 ( 0.05 ) | 1.9 ( 0.29 ) | 0.03 ( 0.02 ) | 7.87 | 0.18 | 1.00 | 1.90 | 0.03 |\n", + "| 500 | 500 | 1.00 | 0.96 | 1.18 ( 0.04 ) | 0.27 ( 0.13 ) | 0 ( 0 ) | 6.27 | 0.03 | 1.18 | 0.27 | 0.00 |\n", + "| 1000 | 500 | 0.50 | 0.96 | 1.24 ( 0.04 ) | 0.25 ( 0.1 ) | 0 ( 0 ) | 6.25 | 0.03 | 1.24 | 0.25 | 0.00 |\n", + "| 50 | 1000 | 20.00 | 0.32 | 3.09 ( 0.23 ) | 5.56 ( 0.36 ) | 1.95 ( 0.14 ) | 9.61 | 0.51 | 3.09 | 5.56 | 1.95 |\n", + "| 100 | 1000 | 10.00 | 0.67 | 1.1 ( 0.07 ) | 2.8 ( 0.37 ) | 0.04 ( 0.02 ) | 8.76 | 0.24 | 1.10 | 2.80 | 0.04 |\n", + "| 500 | 1000 | 2.00 | 0.96 | 1.12 ( 0.04 ) | 0.27 ( 0.08 ) | 0 ( 0 ) | 6.27 | 0.03 | 1.12 | 0.27 | 0.00 |\n", + "| 1000 | 1000 | 1.00 | 0.96 | 1.16 ( 0.04 ) | 0.24 ( 0.07 ) | 0 ( 0 ) | 6.24 | 0.03 | 1.16 | 0.24 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Ratio Stab MSE FP FN num_select\n", + "1 50 50 1.00 0.61 0.8 ( 0.05 ) 2.99 ( 0.27 ) 0.05 ( 0.02 ) 8.94 \n", + "2 100 50 0.50 0.87 0.98 ( 0.06 ) 0.79 ( 0.15 ) 0 ( 0 ) 6.79 \n", + "3 500 50 0.10 0.91 1.08 ( 0.05 ) 0.51 ( 0.11 ) 0 ( 0 ) 6.51 \n", + "4 1000 50 0.05 0.93 1.18 ( 0.04 ) 0.39 ( 0.15 ) 0 ( 0 ) 6.39 \n", + "5 50 100 2.00 0.52 1.05 ( 0.07 ) 4.3 ( 0.31 ) 0.24 ( 0.05 ) 10.06 \n", + "6 100 100 1.00 0.85 0.94 ( 0.04 ) 1.02 ( 0.19 ) 0 ( 0 ) 7.02 \n", + "7 500 100 0.20 0.96 1.16 ( 0.04 ) 0.25 ( 0.09 ) 0 ( 0 ) 6.25 \n", + "8 1000 100 0.10 0.89 1.04 ( 0.05 ) 0.71 ( 0.15 ) 0 ( 0 ) 6.71 \n", + "9 50 500 10.00 0.38 2.18 ( 0.13 ) 5.53 ( 0.36 ) 1.27 ( 0.11 ) 10.26 \n", + "10 100 500 5.00 0.75 1 ( 0.05 ) 1.9 ( 0.29 ) 0.03 ( 0.02 ) 7.87 \n", + "11 500 500 1.00 0.96 1.18 ( 0.04 ) 0.27 ( 0.13 ) 0 ( 0 ) 6.27 \n", + "12 1000 500 0.50 0.96 1.24 ( 0.04 ) 0.25 ( 0.1 ) 0 ( 0 ) 6.25 \n", + "13 50 1000 20.00 0.32 3.09 ( 0.23 ) 5.56 ( 0.36 ) 1.95 ( 0.14 ) 9.61 \n", + "14 100 1000 10.00 0.67 1.1 ( 0.07 ) 2.8 ( 0.37 ) 0.04 ( 0.02 ) 8.76 \n", + "15 500 1000 2.00 0.96 1.12 ( 0.04 ) 0.27 ( 0.08 ) 0 ( 0 ) 6.27 \n", + "16 1000 1000 1.00 0.96 1.16 ( 0.04 ) 0.24 ( 0.07 ) 0 ( 0 ) 6.24 \n", + " FDR MSE_mean FP_mean FN_mean\n", + "1 0.28 0.80 2.99 0.05 \n", + "2 0.09 0.98 0.79 0.00 \n", + "3 0.06 1.08 0.51 0.00 \n", + "4 0.04 1.18 0.39 0.00 \n", + "5 0.37 1.05 4.30 0.24 \n", + "6 0.11 0.94 1.02 0.00 \n", + "7 0.03 1.16 0.25 0.00 \n", + "8 0.08 1.04 0.71 0.00 \n", + "9 0.48 2.18 5.53 1.27 \n", + "10 0.18 1.00 1.90 0.03 \n", + "11 0.03 1.18 0.27 0.00 \n", + "12 0.03 1.24 0.25 0.00 \n", + "13 0.51 3.09 5.56 1.95 \n", + "14 0.24 1.10 2.80 0.04 \n", + "15 0.03 1.12 0.27 0.00 \n", + "16 0.03 1.16 0.24 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# fix missing values\n", + "result.table_ind$MSE_mean[is.na(result.table_ind$MSE_mean)] = 1\n", + "result.table_ind" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "## export\n", + "write.table(result.table_ind, '../results_summary_cts/sim_ind_compLasso.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_cts/1.1_sim_toe_lasso_cts.ipynb b/simulations/notebooks_sim_cts/1.1_sim_toe_lasso_cts.ipynb new file mode 100755 index 0000000..231c1a8 --- /dev/null +++ b/simulations/notebooks_sim_cts/1.1_sim_toe_lasso_cts.ipynb @@ -0,0 +1,819 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize lasso results on Toeplitz Simulation Scenarios for continuous outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'\n", + "\n", + "load(paste0(dir, '/toe_Lasso.RData'))" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "rou.list = seq(0.1, 0.9, 0.2)\n", + "\n", + "files = NULL\n", + "for (rou in rou.list){\n", + " for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_toeplitz_corr', rou, paste('P', p, 'N', n, sep='_'), '.RData', sep=''))\n", + " }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "avg_FDR = NULL\n", + "for (i in 1:length(files)){\n", + " sim_file = files[i]\n", + " load(sim_file, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_toe_lasso[[i]]$Stab.table\n", + " \n", + " FDR = NULL\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "table_toe = NULL\n", + "tmp_num_select = rep(0, length(results_toe_lasso))\n", + "for (i in 1:length(results_toe_lasso)){\n", + " table_toe = rbind(table_toe, results_toe_lasso[[i]][c('n', 'p', 'rou', 'FP', 'FN', 'MSE', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_toe_lasso[[i]]$Stab.table))\n", + " \n", + "}\n", + "table_toe = as.data.frame(table_toe)\n", + "table_toe$num_select = tmp_num_select\n", + "table_toe$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
nprouFPFNMSEStabnum_selectFDR
50 50 0.1 8.59 ( 0.46 )0.02 ( 0.01 )0.62 ( 0.04 )0.36 13.57 0.51
100 50 0.1 6.3 ( 0.43 ) 0 ( 0 ) 0.37 ( 0.01 )0.47 11.30 0.40
500 50 0.1 2.88 ( 0.21 )0 ( 0 ) 0.28 ( 0 ) 0.73 7.88 0.20
1000 50 0.1 1.66 ( 0.11 )0 ( 0 ) 0.27 ( 0 ) 0.89 6.66 0.08
50 100 0.1 11.84 ( 0.4 )0 ( 0 ) 0.67 ( 0.05 )0.32 16.84 0.62
100 100 0.1 7.71 ( 0.56 )0 ( 0 ) 0.4 ( 0.01 ) 0.44 12.71 0.46
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllll}\n", + " n & p & rou & FP & FN & MSE & Stab & num\\_select & FDR\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0.1 & 8.59 ( 0.46 ) & 0.02 ( 0.01 ) & 0.62 ( 0.04 ) & 0.36 & 13.57 & 0.51 \\\\\n", + "\t 100 & 50 & 0.1 & 6.3 ( 0.43 ) & 0 ( 0 ) & 0.37 ( 0.01 ) & 0.47 & 11.30 & 0.40 \\\\\n", + "\t 500 & 50 & 0.1 & 2.88 ( 0.21 ) & 0 ( 0 ) & 0.28 ( 0 ) & 0.73 & 7.88 & 0.20 \\\\\n", + "\t 1000 & 50 & 0.1 & 1.66 ( 0.11 ) & 0 ( 0 ) & 0.27 ( 0 ) & 0.89 & 6.66 & 0.08 \\\\\n", + "\t 50 & 100 & 0.1 & 11.84 ( 0.4 ) & 0 ( 0 ) & 0.67 ( 0.05 ) & 0.32 & 16.84 & 0.62 \\\\\n", + "\t 100 & 100 & 0.1 & 7.71 ( 0.56 ) & 0 ( 0 ) & 0.4 ( 0.01 ) & 0.44 & 12.71 & 0.46 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| n | p | rou | FP | FN | MSE | Stab | num_select | FDR |\n", + "|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0.1 | 8.59 ( 0.46 ) | 0.02 ( 0.01 ) | 0.62 ( 0.04 ) | 0.36 | 13.57 | 0.51 |\n", + "| 100 | 50 | 0.1 | 6.3 ( 0.43 ) | 0 ( 0 ) | 0.37 ( 0.01 ) | 0.47 | 11.30 | 0.40 |\n", + "| 500 | 50 | 0.1 | 2.88 ( 0.21 ) | 0 ( 0 ) | 0.28 ( 0 ) | 0.73 | 7.88 | 0.20 |\n", + "| 1000 | 50 | 0.1 | 1.66 ( 0.11 ) | 0 ( 0 ) | 0.27 ( 0 ) | 0.89 | 6.66 | 0.08 |\n", + "| 50 | 100 | 0.1 | 11.84 ( 0.4 ) | 0 ( 0 ) | 0.67 ( 0.05 ) | 0.32 | 16.84 | 0.62 |\n", + "| 100 | 100 | 0.1 | 7.71 ( 0.56 ) | 0 ( 0 ) | 0.4 ( 0.01 ) | 0.44 | 12.71 | 0.46 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN MSE Stab num_select FDR \n", + "1 50 50 0.1 8.59 ( 0.46 ) 0.02 ( 0.01 ) 0.62 ( 0.04 ) 0.36 13.57 0.51\n", + "2 100 50 0.1 6.3 ( 0.43 ) 0 ( 0 ) 0.37 ( 0.01 ) 0.47 11.30 0.40\n", + "3 500 50 0.1 2.88 ( 0.21 ) 0 ( 0 ) 0.28 ( 0 ) 0.73 7.88 0.20\n", + "4 1000 50 0.1 1.66 ( 0.11 ) 0 ( 0 ) 0.27 ( 0 ) 0.89 6.66 0.08\n", + "5 50 100 0.1 11.84 ( 0.4 ) 0 ( 0 ) 0.67 ( 0.05 ) 0.32 16.84 0.62\n", + "6 100 100 0.1 7.71 ( 0.56 ) 0 ( 0 ) 0.4 ( 0.01 ) 0.44 12.71 0.46" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_toe <- apply(table_toe,2,as.character)\n", + "rownames(result.table_toe) = rownames(table_toe)\n", + "result.table_toe = as.data.frame(result.table_toe)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_toe$n = tidyr::extract_numeric(result.table_toe$n)\n", + "result.table_toe$p = tidyr::extract_numeric(result.table_toe$p)\n", + "result.table_toe$ratio = result.table_toe$p / result.table_toe$n\n", + "\n", + "result.table_toe = result.table_toe[c('n', 'p', 'rou', 'ratio', 'Stab', 'MSE', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_toe)[1:4] = c('N', 'P', 'Corr', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”" + ] + } + ], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_toe$Stab = as.numeric(as.character(result.table_toe$Stab))\n", + "result.table_toe$MSE_mean = as.numeric(substr(result.table_toe$MSE, start=1, stop=4))\n", + "result.table_toe$FP_mean = as.numeric(substr(result.table_toe$FP, start=1, stop=4))\n", + "result.table_toe$FN_mean = as.numeric(substr(result.table_toe$FN, start=1, stop=4))\n", + "result.table_toe$FN_mean[is.na(result.table_toe$FN_mean)] = 0\n", + "result.table_toe$num_select = as.numeric(as.character(result.table_toe$num_select))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
38100 100 0.5 1 0.36 0.44 ( 0.02 )10 ( 0.48 ) 0.02 ( 0.01 )14.98 0.56 0.44 NA 0.02
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t38 & 100 & 100 & 0.5 & 1 & 0.36 & 0.44 ( 0.02 ) & 10 ( 0.48 ) & 0.02 ( 0.01 ) & 14.98 & 0.56 & 0.44 & NA & 0.02 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 38 | 100 | 100 | 0.5 | 1 | 0.36 | 0.44 ( 0.02 ) | 10 ( 0.48 ) | 0.02 ( 0.01 ) | 14.98 | 0.56 | 0.44 | NA | 0.02 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN num_select\n", + "38 100 100 0.5 1 0.36 0.44 ( 0.02 ) 10 ( 0.48 ) 0.02 ( 0.01 ) 14.98 \n", + " FDR MSE_mean FP_mean FN_mean\n", + "38 0.56 0.44 NA 0.02 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check whether missing values exists\n", + "result.table_toe[rowSums(is.na(result.table_toe)) > 0,]" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "# recover values\n", + "result.table_toe$FP_mean[is.na(result.table_toe$FP_mean)] = 10" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
38100 100 0.5 1 0.36 0.44 ( 0.02 )10 ( 0.48 ) 0.02 ( 0.01 )14.98 0.56 0.44 10 0.02
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t38 & 100 & 100 & 0.5 & 1 & 0.36 & 0.44 ( 0.02 ) & 10 ( 0.48 ) & 0.02 ( 0.01 ) & 14.98 & 0.56 & 0.44 & 10 & 0.02 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 38 | 100 | 100 | 0.5 | 1 | 0.36 | 0.44 ( 0.02 ) | 10 ( 0.48 ) | 0.02 ( 0.01 ) | 14.98 | 0.56 | 0.44 | 10 | 0.02 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN num_select\n", + "38 100 100 0.5 1 0.36 0.44 ( 0.02 ) 10 ( 0.48 ) 0.02 ( 0.01 ) 14.98 \n", + " FDR MSE_mean FP_mean FN_mean\n", + "38 0.56 0.44 10 0.02 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_toe[38, ]" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
50 50 0.1 1.00 0.36 0.62 ( 0.04 )8.59 ( 0.46 )0.02 ( 0.01 )13.57 0.51 0.62 8.59 0.02
100 50 0.1 0.50 0.47 0.37 ( 0.01 )6.3 ( 0.43 ) 0 ( 0 ) 11.30 0.4 0.37 6.30 0.00
500 50 0.1 0.10 0.73 0.28 ( 0 ) 2.88 ( 0.21 )0 ( 0 ) 7.88 0.2 0.28 2.88 0.00
1000 50 0.1 0.05 0.89 0.27 ( 0 ) 1.66 ( 0.11 )0 ( 0 ) 6.66 0.08 0.27 1.66 0.00
50 100 0.1 2.00 0.32 0.67 ( 0.05 )11.84 ( 0.4 )0 ( 0 ) 16.84 0.62 0.67 11.80 0.00
100 100 0.1 1.00 0.44 0.4 ( 0.01 ) 7.71 ( 0.56 )0 ( 0 ) 12.71 0.46 0.40 7.71 0.00
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0.1 & 1.00 & 0.36 & 0.62 ( 0.04 ) & 8.59 ( 0.46 ) & 0.02 ( 0.01 ) & 13.57 & 0.51 & 0.62 & 8.59 & 0.02 \\\\\n", + "\t 100 & 50 & 0.1 & 0.50 & 0.47 & 0.37 ( 0.01 ) & 6.3 ( 0.43 ) & 0 ( 0 ) & 11.30 & 0.4 & 0.37 & 6.30 & 0.00 \\\\\n", + "\t 500 & 50 & 0.1 & 0.10 & 0.73 & 0.28 ( 0 ) & 2.88 ( 0.21 ) & 0 ( 0 ) & 7.88 & 0.2 & 0.28 & 2.88 & 0.00 \\\\\n", + "\t 1000 & 50 & 0.1 & 0.05 & 0.89 & 0.27 ( 0 ) & 1.66 ( 0.11 ) & 0 ( 0 ) & 6.66 & 0.08 & 0.27 & 1.66 & 0.00 \\\\\n", + "\t 50 & 100 & 0.1 & 2.00 & 0.32 & 0.67 ( 0.05 ) & 11.84 ( 0.4 ) & 0 ( 0 ) & 16.84 & 0.62 & 0.67 & 11.80 & 0.00 \\\\\n", + "\t 100 & 100 & 0.1 & 1.00 & 0.44 & 0.4 ( 0.01 ) & 7.71 ( 0.56 ) & 0 ( 0 ) & 12.71 & 0.46 & 0.40 & 7.71 & 0.00 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0.1 | 1.00 | 0.36 | 0.62 ( 0.04 ) | 8.59 ( 0.46 ) | 0.02 ( 0.01 ) | 13.57 | 0.51 | 0.62 | 8.59 | 0.02 |\n", + "| 100 | 50 | 0.1 | 0.50 | 0.47 | 0.37 ( 0.01 ) | 6.3 ( 0.43 ) | 0 ( 0 ) | 11.30 | 0.4 | 0.37 | 6.30 | 0.00 |\n", + "| 500 | 50 | 0.1 | 0.10 | 0.73 | 0.28 ( 0 ) | 2.88 ( 0.21 ) | 0 ( 0 ) | 7.88 | 0.2 | 0.28 | 2.88 | 0.00 |\n", + "| 1000 | 50 | 0.1 | 0.05 | 0.89 | 0.27 ( 0 ) | 1.66 ( 0.11 ) | 0 ( 0 ) | 6.66 | 0.08 | 0.27 | 1.66 | 0.00 |\n", + "| 50 | 100 | 0.1 | 2.00 | 0.32 | 0.67 ( 0.05 ) | 11.84 ( 0.4 ) | 0 ( 0 ) | 16.84 | 0.62 | 0.67 | 11.80 | 0.00 |\n", + "| 100 | 100 | 0.1 | 1.00 | 0.44 | 0.4 ( 0.01 ) | 7.71 ( 0.56 ) | 0 ( 0 ) | 12.71 | 0.46 | 0.40 | 7.71 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN num_select\n", + "1 50 50 0.1 1.00 0.36 0.62 ( 0.04 ) 8.59 ( 0.46 ) 0.02 ( 0.01 ) 13.57 \n", + "2 100 50 0.1 0.50 0.47 0.37 ( 0.01 ) 6.3 ( 0.43 ) 0 ( 0 ) 11.30 \n", + "3 500 50 0.1 0.10 0.73 0.28 ( 0 ) 2.88 ( 0.21 ) 0 ( 0 ) 7.88 \n", + "4 1000 50 0.1 0.05 0.89 0.27 ( 0 ) 1.66 ( 0.11 ) 0 ( 0 ) 6.66 \n", + "5 50 100 0.1 2.00 0.32 0.67 ( 0.05 ) 11.84 ( 0.4 ) 0 ( 0 ) 16.84 \n", + "6 100 100 0.1 1.00 0.44 0.4 ( 0.01 ) 7.71 ( 0.56 ) 0 ( 0 ) 12.71 \n", + " FDR MSE_mean FP_mean FN_mean\n", + "1 0.51 0.62 8.59 0.02 \n", + "2 0.4 0.37 6.30 0.00 \n", + "3 0.2 0.28 2.88 0.00 \n", + "4 0.08 0.27 1.66 0.00 \n", + "5 0.62 0.67 11.80 0.00 \n", + "6 0.46 0.40 7.71 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
75 500 500 0.9 1.0 0.25 0.3 ( 0 ) 18.18 ( 0.69 )0.03 ( 0.02 ) 23.15 0.72 0.30 18.1 0.03
761000 500 0.9 0.5 0.33 0.28 ( 0 ) 12.68 ( 0.57 )0 ( 0 ) 17.68 0.63 0.28 12.6 0.00
77 50 1000 0.9 20.0 0.08 0.9 ( 0.05 ) 18.15 ( 0.34 )3.92 ( 0.08 ) 19.23 0.89 0.90 18.1 3.92
78 100 1000 0.9 10.0 0.16 0.59 ( 0.02 ) 15.99 ( 0.66 )2.88 ( 0.06 ) 18.11 0.81 0.59 15.9 2.88
79 500 1000 0.9 2.0 0.20 0.31 ( 0 ) 24.62 ( 1.01 )0.05 ( 0.02 ) 29.57 0.77 0.31 24.6 0.05
801000 1000 0.9 1.0 0.25 0.28 ( 0 ) 18.51 ( 0.86 )0 ( 0 ) 23.51 0.71 0.28 18.5 0.00
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 1.0 & 0.25 & 0.3 ( 0 ) & 18.18 ( 0.69 ) & 0.03 ( 0.02 ) & 23.15 & 0.72 & 0.30 & 18.1 & 0.03 \\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.5 & 0.33 & 0.28 ( 0 ) & 12.68 ( 0.57 ) & 0 ( 0 ) & 17.68 & 0.63 & 0.28 & 12.6 & 0.00 \\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.0 & 0.08 & 0.9 ( 0.05 ) & 18.15 ( 0.34 ) & 3.92 ( 0.08 ) & 19.23 & 0.89 & 0.90 & 18.1 & 3.92 \\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.0 & 0.16 & 0.59 ( 0.02 ) & 15.99 ( 0.66 ) & 2.88 ( 0.06 ) & 18.11 & 0.81 & 0.59 & 15.9 & 2.88 \\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.0 & 0.20 & 0.31 ( 0 ) & 24.62 ( 1.01 ) & 0.05 ( 0.02 ) & 29.57 & 0.77 & 0.31 & 24.6 & 0.05 \\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.0 & 0.25 & 0.28 ( 0 ) & 18.51 ( 0.86 ) & 0 ( 0 ) & 23.51 & 0.71 & 0.28 & 18.5 & 0.00 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 1.0 | 0.25 | 0.3 ( 0 ) | 18.18 ( 0.69 ) | 0.03 ( 0.02 ) | 23.15 | 0.72 | 0.30 | 18.1 | 0.03 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.5 | 0.33 | 0.28 ( 0 ) | 12.68 ( 0.57 ) | 0 ( 0 ) | 17.68 | 0.63 | 0.28 | 12.6 | 0.00 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.0 | 0.08 | 0.9 ( 0.05 ) | 18.15 ( 0.34 ) | 3.92 ( 0.08 ) | 19.23 | 0.89 | 0.90 | 18.1 | 3.92 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.0 | 0.16 | 0.59 ( 0.02 ) | 15.99 ( 0.66 ) | 2.88 ( 0.06 ) | 18.11 | 0.81 | 0.59 | 15.9 | 2.88 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.0 | 0.20 | 0.31 ( 0 ) | 24.62 ( 1.01 ) | 0.05 ( 0.02 ) | 29.57 | 0.77 | 0.31 | 24.6 | 0.05 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.0 | 0.25 | 0.28 ( 0 ) | 18.51 ( 0.86 ) | 0 ( 0 ) | 23.51 | 0.71 | 0.28 | 18.5 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN \n", + "75 500 500 0.9 1.0 0.25 0.3 ( 0 ) 18.18 ( 0.69 ) 0.03 ( 0.02 )\n", + "76 1000 500 0.9 0.5 0.33 0.28 ( 0 ) 12.68 ( 0.57 ) 0 ( 0 ) \n", + "77 50 1000 0.9 20.0 0.08 0.9 ( 0.05 ) 18.15 ( 0.34 ) 3.92 ( 0.08 )\n", + "78 100 1000 0.9 10.0 0.16 0.59 ( 0.02 ) 15.99 ( 0.66 ) 2.88 ( 0.06 )\n", + "79 500 1000 0.9 2.0 0.20 0.31 ( 0 ) 24.62 ( 1.01 ) 0.05 ( 0.02 )\n", + "80 1000 1000 0.9 1.0 0.25 0.28 ( 0 ) 18.51 ( 0.86 ) 0 ( 0 ) \n", + " num_select FDR MSE_mean FP_mean FN_mean\n", + "75 23.15 0.72 0.30 18.1 0.03 \n", + "76 17.68 0.63 0.28 12.6 0.00 \n", + "77 19.23 0.89 0.90 18.1 3.92 \n", + "78 18.11 0.81 0.59 15.9 2.88 \n", + "79 29.57 0.77 0.31 24.6 0.05 \n", + "80 23.51 0.71 0.28 18.5 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
50 50 0.1 1.00 0.36 0.62 ( 0.04 ) 8.59 ( 0.46 ) 0.02 ( 0.01 ) 13.57 0.51 0.62 8.59 0.02
100 50 0.1 0.50 0.47 0.37 ( 0.01 ) 6.3 ( 0.43 ) 0 ( 0 ) 11.30 0.4 0.37 6.30 0.00
500 50 0.1 0.10 0.73 0.28 ( 0 ) 2.88 ( 0.21 ) 0 ( 0 ) 7.88 0.2 0.28 2.88 0.00
1000 50 0.1 0.05 0.89 0.27 ( 0 ) 1.66 ( 0.11 ) 0 ( 0 ) 6.66 0.08 0.27 1.66 0.00
50 100 0.1 2.00 0.32 0.67 ( 0.05 ) 11.84 ( 0.4 ) 0 ( 0 ) 16.84 0.62 0.67 11.80 0.00
100 100 0.1 1.00 0.44 0.4 ( 0.01 ) 7.71 ( 0.56 ) 0 ( 0 ) 12.71 0.46 0.40 7.71 0.00
500 100 0.1 0.20 0.70 0.27 ( 0 ) 3.35 ( 0.22 ) 0 ( 0 ) 8.35 0.23 0.27 3.35 0.00
1000 100 0.1 0.10 0.81 0.27 ( 0 ) 2.29 ( 0.23 ) 0 ( 0 ) 7.29 0.13 0.27 2.29 0.00
50 500 0.1 10.00 0.18 1.61 ( 0.1 ) 20.85 ( 0.38 )0.69 ( 0.08 ) 25.16 0.78 1.61 20.80 0.69
100 500 0.1 5.00 0.30 0.53 ( 0.02 ) 14.69 ( 0.7 ) 0 ( 0 ) 19.69 0.66 0.53 14.60 0.00
500 500 0.1 1.00 0.55 0.28 ( 0 ) 5.86 ( 0.51 ) 0 ( 0 ) 10.86 0.36 0.28 5.86 0.00
1000 500 0.1 0.50 0.78 0.28 ( 0 ) 2.69 ( 0.21 ) 0 ( 0 ) 7.69 0.17 0.28 2.69 0.00
50 1000 0.1 20.00 0.13 2.23 ( 0.14 ) 24.37 ( 0.39 )1.36 ( 0.1 ) 28.01 0.83 2.23 24.30 1.36
100 1000 0.1 10.00 0.25 0.57 ( 0.03 ) 18.79 ( 0.7 ) 0 ( 0 ) 23.79 0.73 0.57 18.70 0.00
500 1000 0.1 2.00 0.49 0.28 ( 0 ) 7.08 ( 0.53 ) 0 ( 0 ) 12.08 0.41 0.28 7.08 0.00
1000 1000 0.1 1.00 0.70 0.27 ( 0 ) 3.59 ( 0.33 ) 0 ( 0 ) 8.59 0.23 0.27 3.59 0.00
50 50 0.3 1.00 0.35 0.57 ( 0.03 ) 8.86 ( 0.42 ) 0.05 ( 0.02 ) 13.81 0.53 0.57 8.86 0.05
100 50 0.3 0.50 0.47 0.36 ( 0.01 ) 6.18 ( 0.36 ) 0 ( 0 ) 11.18 0.41 0.36 6.18 0.00
500 50 0.3 0.10 0.70 0.28 ( 0 ) 3.14 ( 0.21 ) 0 ( 0 ) 8.14 0.22 0.28 3.14 0.00
1000 50 0.3 0.05 0.86 0.27 ( 0 ) 1.86 ( 0.11 ) 0 ( 0 ) 6.86 0.11 0.27 1.86 0.00
50 100 0.3 2.00 0.31 0.76 ( 0.04 ) 11.12 ( 0.37 )0.17 ( 0.04 ) 15.95 0.62 0.76 11.10 0.17
100 100 0.3 1.00 0.38 0.41 ( 0.01 ) 9.43 ( 0.53 ) 0 ( 0 ) 14.43 0.54 0.41 9.43 0.00
500 100 0.3 0.20 0.63 0.27 ( 0 ) 4.16 ( 0.27 ) 0 ( 0 ) 9.16 0.29 0.27 4.16 0.00
1000 100 0.3 0.10 0.80 0.27 ( 0 ) 2.36 ( 0.17 ) 0 ( 0 ) 7.36 0.15 0.27 2.36 0.00
50 500 0.3 10.00 0.14 1.78 ( 0.11 ) 21.4 ( 0.41 ) 1.39 ( 0.1 ) 25.01 0.81 1.78 21.40 1.39
100 500 0.3 5.00 0.26 0.53 ( 0.02 ) 16.81 ( 0.77 )0.02 ( 0.01 ) 21.79 0.7 0.53 16.80 0.02
500 500 0.3 1.00 0.55 0.29 ( 0 ) 5.89 ( 0.51 ) 0 ( 0 ) 10.89 0.36 0.29 5.89 0.00
1000 500 0.3 0.50 0.69 0.27 ( 0 ) 3.68 ( 0.32 ) 0 ( 0 ) 8.68 0.25 0.27 3.68 0.00
50 1000 0.3 20.00 0.11 2.21 ( 0.15 ) 25.14 ( 0.35 )1.87 ( 0.1 ) 28.27 0.85 2.21 25.10 1.87
100 1000 0.3 10.00 0.22 0.61 ( 0.03 ) 21.11 ( 0.75 )0.02 ( 0.01 ) 26.09 0.75 0.61 21.10 0.02
.......................................
500 50 0.7 0.10 0.60 0.27 ( 0 ) 4.38 ( 0.21 ) 0 ( 0 ) 9.38 0.33 0.27 4.38 0.00
1000 50 0.7 0.05 0.74 0.27 ( 0 ) 2.84 ( 0.14 ) 0 ( 0 ) 7.84 0.21 0.27 2.84 0.00
50 100 0.7 2.00 0.23 0.8 ( 0.04 ) 11.57 ( 0.53 )1.26 ( 0.1 ) 15.31 0.66 0.80 11.50 1.26
100 100 0.7 1.00 0.31 0.39 ( 0.01 ) 11.68 ( 0.51 )0.1 ( 0.04 ) 16.58 0.61 0.39 11.60 0.10
500 100 0.7 0.20 0.49 0.28 ( 0 ) 6.56 ( 0.32 ) 0 ( 0 ) 11.56 0.44 0.28 6.56 0.00
1000 100 0.7 0.10 0.63 0.27 ( 0 ) 4.24 ( 0.26 ) 0 ( 0 ) 9.24 0.3 0.27 4.24 0.00
50 500 0.7 10.00 0.12 1.37 ( 0.08 ) 19.8 ( 0.33 ) 2.78 ( 0.08 ) 22.02 0.85 1.37 19.80 2.78
100 500 0.7 5.00 0.19 0.62 ( 0.03 ) 18.58 ( 0.85 )0.88 ( 0.08 ) 22.70 0.75 0.62 18.50 0.88
500 500 0.7 1.00 0.36 0.3 ( 0 ) 11.31 ( 0.6 ) 0 ( 0 ) 16.31 0.58 0.30 11.30 0.00
1000 500 0.7 0.50 0.46 0.27 ( 0 ) 7.93 ( 0.49 ) 0 ( 0 ) 12.93 0.47 0.27 7.93 0.00
50 1000 0.7 20.00 0.09 1.5 ( 0.08 ) 22.99 ( 0.35 )3.2 ( 0.09 ) 24.79 0.88 1.50 22.90 3.20
100 1000 0.7 10.00 0.14 0.77 ( 0.04 ) 22.43 ( 0.68 )1.45 ( 0.1 ) 25.98 0.82 0.77 22.40 1.45
500 1000 0.7 2.00 0.30 0.31 ( 0 ) 14.7 ( 0.84 ) 0 ( 0 ) 19.70 0.65 0.31 14.70 0.00
1000 1000 0.7 1.00 0.41 0.28 ( 0 ) 9.63 ( 0.54 ) 0 ( 0 ) 14.63 0.53 0.28 9.63 0.00
50 50 0.9 1.00 0.31 0.55 ( 0.03 ) 5.65 ( 0.29 ) 2.17 ( 0.13 ) 8.48 0.51 0.55 5.65 2.17
100 50 0.9 0.50 0.38 0.38 ( 0.02 ) 5.85 ( 0.3 ) 1.03 ( 0.11 ) 9.82 0.45 0.38 5.85 1.03
500 50 0.9 0.10 0.61 0.28 ( 0 ) 4.34 ( 0.19 ) 0.01 ( 0.01 ) 9.33 0.33 0.28 4.34 0.01
1000 50 0.9 0.05 0.76 0.27 ( 0 ) 2.71 ( 0.12 ) 0 ( 0 ) 7.71 0.2 0.27 2.71 0.00
50 100 0.9 2.00 0.26 0.6 ( 0.03 ) 7.26 ( 0.35 ) 2.69 ( 0.1 ) 9.57 0.62 0.60 7.26 2.69
100 100 0.9 1.00 0.31 0.44 ( 0.01 ) 7.79 ( 0.39 ) 1.51 ( 0.11 ) 11.28 0.57 0.44 7.79 1.51
500 100 0.9 0.20 0.51 0.29 ( 0 ) 6.45 ( 0.27 ) 0 ( 0 ) 11.45 0.45 0.29 6.45 0.00
1000 100 0.9 0.10 0.61 0.27 ( 0 ) 4.72 ( 0.21 ) 0 ( 0 ) 9.72 0.35 0.27 4.72 0.00
50 500 0.9 10.00 0.13 0.81 ( 0.04 ) 13.78 ( 0.36 )3.54 ( 0.08 ) 15.24 0.83 0.81 13.70 3.54
100 500 0.9 5.00 0.18 0.54 ( 0.02 ) 13.78 ( 0.72 )2.58 ( 0.08 ) 16.20 0.76 0.54 13.70 2.58
500 500 0.9 1.00 0.25 0.3 ( 0 ) 18.18 ( 0.69 )0.03 ( 0.02 ) 23.15 0.72 0.30 18.10 0.03
1000 500 0.9 0.50 0.33 0.28 ( 0 ) 12.68 ( 0.57 )0 ( 0 ) 17.68 0.63 0.28 12.60 0.00
50 1000 0.9 20.00 0.08 0.9 ( 0.05 ) 18.15 ( 0.34 )3.92 ( 0.08 ) 19.23 0.89 0.90 18.10 3.92
100 1000 0.9 10.00 0.16 0.59 ( 0.02 ) 15.99 ( 0.66 )2.88 ( 0.06 ) 18.11 0.81 0.59 15.90 2.88
500 1000 0.9 2.00 0.20 0.31 ( 0 ) 24.62 ( 1.01 )0.05 ( 0.02 ) 29.57 0.77 0.31 24.60 0.05
1000 1000 0.9 1.00 0.25 0.28 ( 0 ) 18.51 ( 0.86 )0 ( 0 ) 23.51 0.71 0.28 18.50 0.00
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0.1 & 1.00 & 0.36 & 0.62 ( 0.04 ) & 8.59 ( 0.46 ) & 0.02 ( 0.01 ) & 13.57 & 0.51 & 0.62 & 8.59 & 0.02 \\\\\n", + "\t 100 & 50 & 0.1 & 0.50 & 0.47 & 0.37 ( 0.01 ) & 6.3 ( 0.43 ) & 0 ( 0 ) & 11.30 & 0.4 & 0.37 & 6.30 & 0.00 \\\\\n", + "\t 500 & 50 & 0.1 & 0.10 & 0.73 & 0.28 ( 0 ) & 2.88 ( 0.21 ) & 0 ( 0 ) & 7.88 & 0.2 & 0.28 & 2.88 & 0.00 \\\\\n", + "\t 1000 & 50 & 0.1 & 0.05 & 0.89 & 0.27 ( 0 ) & 1.66 ( 0.11 ) & 0 ( 0 ) & 6.66 & 0.08 & 0.27 & 1.66 & 0.00 \\\\\n", + "\t 50 & 100 & 0.1 & 2.00 & 0.32 & 0.67 ( 0.05 ) & 11.84 ( 0.4 ) & 0 ( 0 ) & 16.84 & 0.62 & 0.67 & 11.80 & 0.00 \\\\\n", + "\t 100 & 100 & 0.1 & 1.00 & 0.44 & 0.4 ( 0.01 ) & 7.71 ( 0.56 ) & 0 ( 0 ) & 12.71 & 0.46 & 0.40 & 7.71 & 0.00 \\\\\n", + "\t 500 & 100 & 0.1 & 0.20 & 0.70 & 0.27 ( 0 ) & 3.35 ( 0.22 ) & 0 ( 0 ) & 8.35 & 0.23 & 0.27 & 3.35 & 0.00 \\\\\n", + "\t 1000 & 100 & 0.1 & 0.10 & 0.81 & 0.27 ( 0 ) & 2.29 ( 0.23 ) & 0 ( 0 ) & 7.29 & 0.13 & 0.27 & 2.29 & 0.00 \\\\\n", + "\t 50 & 500 & 0.1 & 10.00 & 0.18 & 1.61 ( 0.1 ) & 20.85 ( 0.38 ) & 0.69 ( 0.08 ) & 25.16 & 0.78 & 1.61 & 20.80 & 0.69 \\\\\n", + "\t 100 & 500 & 0.1 & 5.00 & 0.30 & 0.53 ( 0.02 ) & 14.69 ( 0.7 ) & 0 ( 0 ) & 19.69 & 0.66 & 0.53 & 14.60 & 0.00 \\\\\n", + "\t 500 & 500 & 0.1 & 1.00 & 0.55 & 0.28 ( 0 ) & 5.86 ( 0.51 ) & 0 ( 0 ) & 10.86 & 0.36 & 0.28 & 5.86 & 0.00 \\\\\n", + "\t 1000 & 500 & 0.1 & 0.50 & 0.78 & 0.28 ( 0 ) & 2.69 ( 0.21 ) & 0 ( 0 ) & 7.69 & 0.17 & 0.28 & 2.69 & 0.00 \\\\\n", + "\t 50 & 1000 & 0.1 & 20.00 & 0.13 & 2.23 ( 0.14 ) & 24.37 ( 0.39 ) & 1.36 ( 0.1 ) & 28.01 & 0.83 & 2.23 & 24.30 & 1.36 \\\\\n", + "\t 100 & 1000 & 0.1 & 10.00 & 0.25 & 0.57 ( 0.03 ) & 18.79 ( 0.7 ) & 0 ( 0 ) & 23.79 & 0.73 & 0.57 & 18.70 & 0.00 \\\\\n", + "\t 500 & 1000 & 0.1 & 2.00 & 0.49 & 0.28 ( 0 ) & 7.08 ( 0.53 ) & 0 ( 0 ) & 12.08 & 0.41 & 0.28 & 7.08 & 0.00 \\\\\n", + "\t 1000 & 1000 & 0.1 & 1.00 & 0.70 & 0.27 ( 0 ) & 3.59 ( 0.33 ) & 0 ( 0 ) & 8.59 & 0.23 & 0.27 & 3.59 & 0.00 \\\\\n", + "\t 50 & 50 & 0.3 & 1.00 & 0.35 & 0.57 ( 0.03 ) & 8.86 ( 0.42 ) & 0.05 ( 0.02 ) & 13.81 & 0.53 & 0.57 & 8.86 & 0.05 \\\\\n", + "\t 100 & 50 & 0.3 & 0.50 & 0.47 & 0.36 ( 0.01 ) & 6.18 ( 0.36 ) & 0 ( 0 ) & 11.18 & 0.41 & 0.36 & 6.18 & 0.00 \\\\\n", + "\t 500 & 50 & 0.3 & 0.10 & 0.70 & 0.28 ( 0 ) & 3.14 ( 0.21 ) & 0 ( 0 ) & 8.14 & 0.22 & 0.28 & 3.14 & 0.00 \\\\\n", + "\t 1000 & 50 & 0.3 & 0.05 & 0.86 & 0.27 ( 0 ) & 1.86 ( 0.11 ) & 0 ( 0 ) & 6.86 & 0.11 & 0.27 & 1.86 & 0.00 \\\\\n", + "\t 50 & 100 & 0.3 & 2.00 & 0.31 & 0.76 ( 0.04 ) & 11.12 ( 0.37 ) & 0.17 ( 0.04 ) & 15.95 & 0.62 & 0.76 & 11.10 & 0.17 \\\\\n", + "\t 100 & 100 & 0.3 & 1.00 & 0.38 & 0.41 ( 0.01 ) & 9.43 ( 0.53 ) & 0 ( 0 ) & 14.43 & 0.54 & 0.41 & 9.43 & 0.00 \\\\\n", + "\t 500 & 100 & 0.3 & 0.20 & 0.63 & 0.27 ( 0 ) & 4.16 ( 0.27 ) & 0 ( 0 ) & 9.16 & 0.29 & 0.27 & 4.16 & 0.00 \\\\\n", + "\t 1000 & 100 & 0.3 & 0.10 & 0.80 & 0.27 ( 0 ) & 2.36 ( 0.17 ) & 0 ( 0 ) & 7.36 & 0.15 & 0.27 & 2.36 & 0.00 \\\\\n", + "\t 50 & 500 & 0.3 & 10.00 & 0.14 & 1.78 ( 0.11 ) & 21.4 ( 0.41 ) & 1.39 ( 0.1 ) & 25.01 & 0.81 & 1.78 & 21.40 & 1.39 \\\\\n", + "\t 100 & 500 & 0.3 & 5.00 & 0.26 & 0.53 ( 0.02 ) & 16.81 ( 0.77 ) & 0.02 ( 0.01 ) & 21.79 & 0.7 & 0.53 & 16.80 & 0.02 \\\\\n", + "\t 500 & 500 & 0.3 & 1.00 & 0.55 & 0.29 ( 0 ) & 5.89 ( 0.51 ) & 0 ( 0 ) & 10.89 & 0.36 & 0.29 & 5.89 & 0.00 \\\\\n", + "\t 1000 & 500 & 0.3 & 0.50 & 0.69 & 0.27 ( 0 ) & 3.68 ( 0.32 ) & 0 ( 0 ) & 8.68 & 0.25 & 0.27 & 3.68 & 0.00 \\\\\n", + "\t 50 & 1000 & 0.3 & 20.00 & 0.11 & 2.21 ( 0.15 ) & 25.14 ( 0.35 ) & 1.87 ( 0.1 ) & 28.27 & 0.85 & 2.21 & 25.10 & 1.87 \\\\\n", + "\t 100 & 1000 & 0.3 & 10.00 & 0.22 & 0.61 ( 0.03 ) & 21.11 ( 0.75 ) & 0.02 ( 0.01 ) & 26.09 & 0.75 & 0.61 & 21.10 & 0.02 \\\\\n", + "\t ... & ... & ... & ... & ... & ... & ... & ... & ... & ... & ... & ... & ...\\\\\n", + "\t 500 & 50 & 0.7 & 0.10 & 0.60 & 0.27 ( 0 ) & 4.38 ( 0.21 ) & 0 ( 0 ) & 9.38 & 0.33 & 0.27 & 4.38 & 0.00 \\\\\n", + "\t 1000 & 50 & 0.7 & 0.05 & 0.74 & 0.27 ( 0 ) & 2.84 ( 0.14 ) & 0 ( 0 ) & 7.84 & 0.21 & 0.27 & 2.84 & 0.00 \\\\\n", + "\t 50 & 100 & 0.7 & 2.00 & 0.23 & 0.8 ( 0.04 ) & 11.57 ( 0.53 ) & 1.26 ( 0.1 ) & 15.31 & 0.66 & 0.80 & 11.50 & 1.26 \\\\\n", + "\t 100 & 100 & 0.7 & 1.00 & 0.31 & 0.39 ( 0.01 ) & 11.68 ( 0.51 ) & 0.1 ( 0.04 ) & 16.58 & 0.61 & 0.39 & 11.60 & 0.10 \\\\\n", + "\t 500 & 100 & 0.7 & 0.20 & 0.49 & 0.28 ( 0 ) & 6.56 ( 0.32 ) & 0 ( 0 ) & 11.56 & 0.44 & 0.28 & 6.56 & 0.00 \\\\\n", + "\t 1000 & 100 & 0.7 & 0.10 & 0.63 & 0.27 ( 0 ) & 4.24 ( 0.26 ) & 0 ( 0 ) & 9.24 & 0.3 & 0.27 & 4.24 & 0.00 \\\\\n", + "\t 50 & 500 & 0.7 & 10.00 & 0.12 & 1.37 ( 0.08 ) & 19.8 ( 0.33 ) & 2.78 ( 0.08 ) & 22.02 & 0.85 & 1.37 & 19.80 & 2.78 \\\\\n", + "\t 100 & 500 & 0.7 & 5.00 & 0.19 & 0.62 ( 0.03 ) & 18.58 ( 0.85 ) & 0.88 ( 0.08 ) & 22.70 & 0.75 & 0.62 & 18.50 & 0.88 \\\\\n", + "\t 500 & 500 & 0.7 & 1.00 & 0.36 & 0.3 ( 0 ) & 11.31 ( 0.6 ) & 0 ( 0 ) & 16.31 & 0.58 & 0.30 & 11.30 & 0.00 \\\\\n", + "\t 1000 & 500 & 0.7 & 0.50 & 0.46 & 0.27 ( 0 ) & 7.93 ( 0.49 ) & 0 ( 0 ) & 12.93 & 0.47 & 0.27 & 7.93 & 0.00 \\\\\n", + "\t 50 & 1000 & 0.7 & 20.00 & 0.09 & 1.5 ( 0.08 ) & 22.99 ( 0.35 ) & 3.2 ( 0.09 ) & 24.79 & 0.88 & 1.50 & 22.90 & 3.20 \\\\\n", + "\t 100 & 1000 & 0.7 & 10.00 & 0.14 & 0.77 ( 0.04 ) & 22.43 ( 0.68 ) & 1.45 ( 0.1 ) & 25.98 & 0.82 & 0.77 & 22.40 & 1.45 \\\\\n", + "\t 500 & 1000 & 0.7 & 2.00 & 0.30 & 0.31 ( 0 ) & 14.7 ( 0.84 ) & 0 ( 0 ) & 19.70 & 0.65 & 0.31 & 14.70 & 0.00 \\\\\n", + "\t 1000 & 1000 & 0.7 & 1.00 & 0.41 & 0.28 ( 0 ) & 9.63 ( 0.54 ) & 0 ( 0 ) & 14.63 & 0.53 & 0.28 & 9.63 & 0.00 \\\\\n", + "\t 50 & 50 & 0.9 & 1.00 & 0.31 & 0.55 ( 0.03 ) & 5.65 ( 0.29 ) & 2.17 ( 0.13 ) & 8.48 & 0.51 & 0.55 & 5.65 & 2.17 \\\\\n", + "\t 100 & 50 & 0.9 & 0.50 & 0.38 & 0.38 ( 0.02 ) & 5.85 ( 0.3 ) & 1.03 ( 0.11 ) & 9.82 & 0.45 & 0.38 & 5.85 & 1.03 \\\\\n", + "\t 500 & 50 & 0.9 & 0.10 & 0.61 & 0.28 ( 0 ) & 4.34 ( 0.19 ) & 0.01 ( 0.01 ) & 9.33 & 0.33 & 0.28 & 4.34 & 0.01 \\\\\n", + "\t 1000 & 50 & 0.9 & 0.05 & 0.76 & 0.27 ( 0 ) & 2.71 ( 0.12 ) & 0 ( 0 ) & 7.71 & 0.2 & 0.27 & 2.71 & 0.00 \\\\\n", + "\t 50 & 100 & 0.9 & 2.00 & 0.26 & 0.6 ( 0.03 ) & 7.26 ( 0.35 ) & 2.69 ( 0.1 ) & 9.57 & 0.62 & 0.60 & 7.26 & 2.69 \\\\\n", + "\t 100 & 100 & 0.9 & 1.00 & 0.31 & 0.44 ( 0.01 ) & 7.79 ( 0.39 ) & 1.51 ( 0.11 ) & 11.28 & 0.57 & 0.44 & 7.79 & 1.51 \\\\\n", + "\t 500 & 100 & 0.9 & 0.20 & 0.51 & 0.29 ( 0 ) & 6.45 ( 0.27 ) & 0 ( 0 ) & 11.45 & 0.45 & 0.29 & 6.45 & 0.00 \\\\\n", + "\t 1000 & 100 & 0.9 & 0.10 & 0.61 & 0.27 ( 0 ) & 4.72 ( 0.21 ) & 0 ( 0 ) & 9.72 & 0.35 & 0.27 & 4.72 & 0.00 \\\\\n", + "\t 50 & 500 & 0.9 & 10.00 & 0.13 & 0.81 ( 0.04 ) & 13.78 ( 0.36 ) & 3.54 ( 0.08 ) & 15.24 & 0.83 & 0.81 & 13.70 & 3.54 \\\\\n", + "\t 100 & 500 & 0.9 & 5.00 & 0.18 & 0.54 ( 0.02 ) & 13.78 ( 0.72 ) & 2.58 ( 0.08 ) & 16.20 & 0.76 & 0.54 & 13.70 & 2.58 \\\\\n", + "\t 500 & 500 & 0.9 & 1.00 & 0.25 & 0.3 ( 0 ) & 18.18 ( 0.69 ) & 0.03 ( 0.02 ) & 23.15 & 0.72 & 0.30 & 18.10 & 0.03 \\\\\n", + "\t 1000 & 500 & 0.9 & 0.50 & 0.33 & 0.28 ( 0 ) & 12.68 ( 0.57 ) & 0 ( 0 ) & 17.68 & 0.63 & 0.28 & 12.60 & 0.00 \\\\\n", + "\t 50 & 1000 & 0.9 & 20.00 & 0.08 & 0.9 ( 0.05 ) & 18.15 ( 0.34 ) & 3.92 ( 0.08 ) & 19.23 & 0.89 & 0.90 & 18.10 & 3.92 \\\\\n", + "\t 100 & 1000 & 0.9 & 10.00 & 0.16 & 0.59 ( 0.02 ) & 15.99 ( 0.66 ) & 2.88 ( 0.06 ) & 18.11 & 0.81 & 0.59 & 15.90 & 2.88 \\\\\n", + "\t 500 & 1000 & 0.9 & 2.00 & 0.20 & 0.31 ( 0 ) & 24.62 ( 1.01 ) & 0.05 ( 0.02 ) & 29.57 & 0.77 & 0.31 & 24.60 & 0.05 \\\\\n", + "\t 1000 & 1000 & 0.9 & 1.00 & 0.25 & 0.28 ( 0 ) & 18.51 ( 0.86 ) & 0 ( 0 ) & 23.51 & 0.71 & 0.28 & 18.50 & 0.00 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0.1 | 1.00 | 0.36 | 0.62 ( 0.04 ) | 8.59 ( 0.46 ) | 0.02 ( 0.01 ) | 13.57 | 0.51 | 0.62 | 8.59 | 0.02 |\n", + "| 100 | 50 | 0.1 | 0.50 | 0.47 | 0.37 ( 0.01 ) | 6.3 ( 0.43 ) | 0 ( 0 ) | 11.30 | 0.4 | 0.37 | 6.30 | 0.00 |\n", + "| 500 | 50 | 0.1 | 0.10 | 0.73 | 0.28 ( 0 ) | 2.88 ( 0.21 ) | 0 ( 0 ) | 7.88 | 0.2 | 0.28 | 2.88 | 0.00 |\n", + "| 1000 | 50 | 0.1 | 0.05 | 0.89 | 0.27 ( 0 ) | 1.66 ( 0.11 ) | 0 ( 0 ) | 6.66 | 0.08 | 0.27 | 1.66 | 0.00 |\n", + "| 50 | 100 | 0.1 | 2.00 | 0.32 | 0.67 ( 0.05 ) | 11.84 ( 0.4 ) | 0 ( 0 ) | 16.84 | 0.62 | 0.67 | 11.80 | 0.00 |\n", + "| 100 | 100 | 0.1 | 1.00 | 0.44 | 0.4 ( 0.01 ) | 7.71 ( 0.56 ) | 0 ( 0 ) | 12.71 | 0.46 | 0.40 | 7.71 | 0.00 |\n", + "| 500 | 100 | 0.1 | 0.20 | 0.70 | 0.27 ( 0 ) | 3.35 ( 0.22 ) | 0 ( 0 ) | 8.35 | 0.23 | 0.27 | 3.35 | 0.00 |\n", + "| 1000 | 100 | 0.1 | 0.10 | 0.81 | 0.27 ( 0 ) | 2.29 ( 0.23 ) | 0 ( 0 ) | 7.29 | 0.13 | 0.27 | 2.29 | 0.00 |\n", + "| 50 | 500 | 0.1 | 10.00 | 0.18 | 1.61 ( 0.1 ) | 20.85 ( 0.38 ) | 0.69 ( 0.08 ) | 25.16 | 0.78 | 1.61 | 20.80 | 0.69 |\n", + "| 100 | 500 | 0.1 | 5.00 | 0.30 | 0.53 ( 0.02 ) | 14.69 ( 0.7 ) | 0 ( 0 ) | 19.69 | 0.66 | 0.53 | 14.60 | 0.00 |\n", + "| 500 | 500 | 0.1 | 1.00 | 0.55 | 0.28 ( 0 ) | 5.86 ( 0.51 ) | 0 ( 0 ) | 10.86 | 0.36 | 0.28 | 5.86 | 0.00 |\n", + "| 1000 | 500 | 0.1 | 0.50 | 0.78 | 0.28 ( 0 ) | 2.69 ( 0.21 ) | 0 ( 0 ) | 7.69 | 0.17 | 0.28 | 2.69 | 0.00 |\n", + "| 50 | 1000 | 0.1 | 20.00 | 0.13 | 2.23 ( 0.14 ) | 24.37 ( 0.39 ) | 1.36 ( 0.1 ) | 28.01 | 0.83 | 2.23 | 24.30 | 1.36 |\n", + "| 100 | 1000 | 0.1 | 10.00 | 0.25 | 0.57 ( 0.03 ) | 18.79 ( 0.7 ) | 0 ( 0 ) | 23.79 | 0.73 | 0.57 | 18.70 | 0.00 |\n", + "| 500 | 1000 | 0.1 | 2.00 | 0.49 | 0.28 ( 0 ) | 7.08 ( 0.53 ) | 0 ( 0 ) | 12.08 | 0.41 | 0.28 | 7.08 | 0.00 |\n", + "| 1000 | 1000 | 0.1 | 1.00 | 0.70 | 0.27 ( 0 ) | 3.59 ( 0.33 ) | 0 ( 0 ) | 8.59 | 0.23 | 0.27 | 3.59 | 0.00 |\n", + "| 50 | 50 | 0.3 | 1.00 | 0.35 | 0.57 ( 0.03 ) | 8.86 ( 0.42 ) | 0.05 ( 0.02 ) | 13.81 | 0.53 | 0.57 | 8.86 | 0.05 |\n", + "| 100 | 50 | 0.3 | 0.50 | 0.47 | 0.36 ( 0.01 ) | 6.18 ( 0.36 ) | 0 ( 0 ) | 11.18 | 0.41 | 0.36 | 6.18 | 0.00 |\n", + "| 500 | 50 | 0.3 | 0.10 | 0.70 | 0.28 ( 0 ) | 3.14 ( 0.21 ) | 0 ( 0 ) | 8.14 | 0.22 | 0.28 | 3.14 | 0.00 |\n", + "| 1000 | 50 | 0.3 | 0.05 | 0.86 | 0.27 ( 0 ) | 1.86 ( 0.11 ) | 0 ( 0 ) | 6.86 | 0.11 | 0.27 | 1.86 | 0.00 |\n", + "| 50 | 100 | 0.3 | 2.00 | 0.31 | 0.76 ( 0.04 ) | 11.12 ( 0.37 ) | 0.17 ( 0.04 ) | 15.95 | 0.62 | 0.76 | 11.10 | 0.17 |\n", + "| 100 | 100 | 0.3 | 1.00 | 0.38 | 0.41 ( 0.01 ) | 9.43 ( 0.53 ) | 0 ( 0 ) | 14.43 | 0.54 | 0.41 | 9.43 | 0.00 |\n", + "| 500 | 100 | 0.3 | 0.20 | 0.63 | 0.27 ( 0 ) | 4.16 ( 0.27 ) | 0 ( 0 ) | 9.16 | 0.29 | 0.27 | 4.16 | 0.00 |\n", + "| 1000 | 100 | 0.3 | 0.10 | 0.80 | 0.27 ( 0 ) | 2.36 ( 0.17 ) | 0 ( 0 ) | 7.36 | 0.15 | 0.27 | 2.36 | 0.00 |\n", + "| 50 | 500 | 0.3 | 10.00 | 0.14 | 1.78 ( 0.11 ) | 21.4 ( 0.41 ) | 1.39 ( 0.1 ) | 25.01 | 0.81 | 1.78 | 21.40 | 1.39 |\n", + "| 100 | 500 | 0.3 | 5.00 | 0.26 | 0.53 ( 0.02 ) | 16.81 ( 0.77 ) | 0.02 ( 0.01 ) | 21.79 | 0.7 | 0.53 | 16.80 | 0.02 |\n", + "| 500 | 500 | 0.3 | 1.00 | 0.55 | 0.29 ( 0 ) | 5.89 ( 0.51 ) | 0 ( 0 ) | 10.89 | 0.36 | 0.29 | 5.89 | 0.00 |\n", + "| 1000 | 500 | 0.3 | 0.50 | 0.69 | 0.27 ( 0 ) | 3.68 ( 0.32 ) | 0 ( 0 ) | 8.68 | 0.25 | 0.27 | 3.68 | 0.00 |\n", + "| 50 | 1000 | 0.3 | 20.00 | 0.11 | 2.21 ( 0.15 ) | 25.14 ( 0.35 ) | 1.87 ( 0.1 ) | 28.27 | 0.85 | 2.21 | 25.10 | 1.87 |\n", + "| 100 | 1000 | 0.3 | 10.00 | 0.22 | 0.61 ( 0.03 ) | 21.11 ( 0.75 ) | 0.02 ( 0.01 ) | 26.09 | 0.75 | 0.61 | 21.10 | 0.02 |\n", + "| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |\n", + "| 500 | 50 | 0.7 | 0.10 | 0.60 | 0.27 ( 0 ) | 4.38 ( 0.21 ) | 0 ( 0 ) | 9.38 | 0.33 | 0.27 | 4.38 | 0.00 |\n", + "| 1000 | 50 | 0.7 | 0.05 | 0.74 | 0.27 ( 0 ) | 2.84 ( 0.14 ) | 0 ( 0 ) | 7.84 | 0.21 | 0.27 | 2.84 | 0.00 |\n", + "| 50 | 100 | 0.7 | 2.00 | 0.23 | 0.8 ( 0.04 ) | 11.57 ( 0.53 ) | 1.26 ( 0.1 ) | 15.31 | 0.66 | 0.80 | 11.50 | 1.26 |\n", + "| 100 | 100 | 0.7 | 1.00 | 0.31 | 0.39 ( 0.01 ) | 11.68 ( 0.51 ) | 0.1 ( 0.04 ) | 16.58 | 0.61 | 0.39 | 11.60 | 0.10 |\n", + "| 500 | 100 | 0.7 | 0.20 | 0.49 | 0.28 ( 0 ) | 6.56 ( 0.32 ) | 0 ( 0 ) | 11.56 | 0.44 | 0.28 | 6.56 | 0.00 |\n", + "| 1000 | 100 | 0.7 | 0.10 | 0.63 | 0.27 ( 0 ) | 4.24 ( 0.26 ) | 0 ( 0 ) | 9.24 | 0.3 | 0.27 | 4.24 | 0.00 |\n", + "| 50 | 500 | 0.7 | 10.00 | 0.12 | 1.37 ( 0.08 ) | 19.8 ( 0.33 ) | 2.78 ( 0.08 ) | 22.02 | 0.85 | 1.37 | 19.80 | 2.78 |\n", + "| 100 | 500 | 0.7 | 5.00 | 0.19 | 0.62 ( 0.03 ) | 18.58 ( 0.85 ) | 0.88 ( 0.08 ) | 22.70 | 0.75 | 0.62 | 18.50 | 0.88 |\n", + "| 500 | 500 | 0.7 | 1.00 | 0.36 | 0.3 ( 0 ) | 11.31 ( 0.6 ) | 0 ( 0 ) | 16.31 | 0.58 | 0.30 | 11.30 | 0.00 |\n", + "| 1000 | 500 | 0.7 | 0.50 | 0.46 | 0.27 ( 0 ) | 7.93 ( 0.49 ) | 0 ( 0 ) | 12.93 | 0.47 | 0.27 | 7.93 | 0.00 |\n", + "| 50 | 1000 | 0.7 | 20.00 | 0.09 | 1.5 ( 0.08 ) | 22.99 ( 0.35 ) | 3.2 ( 0.09 ) | 24.79 | 0.88 | 1.50 | 22.90 | 3.20 |\n", + "| 100 | 1000 | 0.7 | 10.00 | 0.14 | 0.77 ( 0.04 ) | 22.43 ( 0.68 ) | 1.45 ( 0.1 ) | 25.98 | 0.82 | 0.77 | 22.40 | 1.45 |\n", + "| 500 | 1000 | 0.7 | 2.00 | 0.30 | 0.31 ( 0 ) | 14.7 ( 0.84 ) | 0 ( 0 ) | 19.70 | 0.65 | 0.31 | 14.70 | 0.00 |\n", + "| 1000 | 1000 | 0.7 | 1.00 | 0.41 | 0.28 ( 0 ) | 9.63 ( 0.54 ) | 0 ( 0 ) | 14.63 | 0.53 | 0.28 | 9.63 | 0.00 |\n", + "| 50 | 50 | 0.9 | 1.00 | 0.31 | 0.55 ( 0.03 ) | 5.65 ( 0.29 ) | 2.17 ( 0.13 ) | 8.48 | 0.51 | 0.55 | 5.65 | 2.17 |\n", + "| 100 | 50 | 0.9 | 0.50 | 0.38 | 0.38 ( 0.02 ) | 5.85 ( 0.3 ) | 1.03 ( 0.11 ) | 9.82 | 0.45 | 0.38 | 5.85 | 1.03 |\n", + "| 500 | 50 | 0.9 | 0.10 | 0.61 | 0.28 ( 0 ) | 4.34 ( 0.19 ) | 0.01 ( 0.01 ) | 9.33 | 0.33 | 0.28 | 4.34 | 0.01 |\n", + "| 1000 | 50 | 0.9 | 0.05 | 0.76 | 0.27 ( 0 ) | 2.71 ( 0.12 ) | 0 ( 0 ) | 7.71 | 0.2 | 0.27 | 2.71 | 0.00 |\n", + "| 50 | 100 | 0.9 | 2.00 | 0.26 | 0.6 ( 0.03 ) | 7.26 ( 0.35 ) | 2.69 ( 0.1 ) | 9.57 | 0.62 | 0.60 | 7.26 | 2.69 |\n", + "| 100 | 100 | 0.9 | 1.00 | 0.31 | 0.44 ( 0.01 ) | 7.79 ( 0.39 ) | 1.51 ( 0.11 ) | 11.28 | 0.57 | 0.44 | 7.79 | 1.51 |\n", + "| 500 | 100 | 0.9 | 0.20 | 0.51 | 0.29 ( 0 ) | 6.45 ( 0.27 ) | 0 ( 0 ) | 11.45 | 0.45 | 0.29 | 6.45 | 0.00 |\n", + "| 1000 | 100 | 0.9 | 0.10 | 0.61 | 0.27 ( 0 ) | 4.72 ( 0.21 ) | 0 ( 0 ) | 9.72 | 0.35 | 0.27 | 4.72 | 0.00 |\n", + "| 50 | 500 | 0.9 | 10.00 | 0.13 | 0.81 ( 0.04 ) | 13.78 ( 0.36 ) | 3.54 ( 0.08 ) | 15.24 | 0.83 | 0.81 | 13.70 | 3.54 |\n", + "| 100 | 500 | 0.9 | 5.00 | 0.18 | 0.54 ( 0.02 ) | 13.78 ( 0.72 ) | 2.58 ( 0.08 ) | 16.20 | 0.76 | 0.54 | 13.70 | 2.58 |\n", + "| 500 | 500 | 0.9 | 1.00 | 0.25 | 0.3 ( 0 ) | 18.18 ( 0.69 ) | 0.03 ( 0.02 ) | 23.15 | 0.72 | 0.30 | 18.10 | 0.03 |\n", + "| 1000 | 500 | 0.9 | 0.50 | 0.33 | 0.28 ( 0 ) | 12.68 ( 0.57 ) | 0 ( 0 ) | 17.68 | 0.63 | 0.28 | 12.60 | 0.00 |\n", + "| 50 | 1000 | 0.9 | 20.00 | 0.08 | 0.9 ( 0.05 ) | 18.15 ( 0.34 ) | 3.92 ( 0.08 ) | 19.23 | 0.89 | 0.90 | 18.10 | 3.92 |\n", + "| 100 | 1000 | 0.9 | 10.00 | 0.16 | 0.59 ( 0.02 ) | 15.99 ( 0.66 ) | 2.88 ( 0.06 ) | 18.11 | 0.81 | 0.59 | 15.90 | 2.88 |\n", + "| 500 | 1000 | 0.9 | 2.00 | 0.20 | 0.31 ( 0 ) | 24.62 ( 1.01 ) | 0.05 ( 0.02 ) | 29.57 | 0.77 | 0.31 | 24.60 | 0.05 |\n", + "| 1000 | 1000 | 0.9 | 1.00 | 0.25 | 0.28 ( 0 ) | 18.51 ( 0.86 ) | 0 ( 0 ) | 23.51 | 0.71 | 0.28 | 18.50 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN \n", + "1 50 50 0.1 1.00 0.36 0.62 ( 0.04 ) 8.59 ( 0.46 ) 0.02 ( 0.01 )\n", + "2 100 50 0.1 0.50 0.47 0.37 ( 0.01 ) 6.3 ( 0.43 ) 0 ( 0 ) \n", + "3 500 50 0.1 0.10 0.73 0.28 ( 0 ) 2.88 ( 0.21 ) 0 ( 0 ) \n", + "4 1000 50 0.1 0.05 0.89 0.27 ( 0 ) 1.66 ( 0.11 ) 0 ( 0 ) \n", + "5 50 100 0.1 2.00 0.32 0.67 ( 0.05 ) 11.84 ( 0.4 ) 0 ( 0 ) \n", + "6 100 100 0.1 1.00 0.44 0.4 ( 0.01 ) 7.71 ( 0.56 ) 0 ( 0 ) \n", + "7 500 100 0.1 0.20 0.70 0.27 ( 0 ) 3.35 ( 0.22 ) 0 ( 0 ) \n", + "8 1000 100 0.1 0.10 0.81 0.27 ( 0 ) 2.29 ( 0.23 ) 0 ( 0 ) \n", + "9 50 500 0.1 10.00 0.18 1.61 ( 0.1 ) 20.85 ( 0.38 ) 0.69 ( 0.08 )\n", + "10 100 500 0.1 5.00 0.30 0.53 ( 0.02 ) 14.69 ( 0.7 ) 0 ( 0 ) \n", + "11 500 500 0.1 1.00 0.55 0.28 ( 0 ) 5.86 ( 0.51 ) 0 ( 0 ) \n", + "12 1000 500 0.1 0.50 0.78 0.28 ( 0 ) 2.69 ( 0.21 ) 0 ( 0 ) \n", + "13 50 1000 0.1 20.00 0.13 2.23 ( 0.14 ) 24.37 ( 0.39 ) 1.36 ( 0.1 ) \n", + "14 100 1000 0.1 10.00 0.25 0.57 ( 0.03 ) 18.79 ( 0.7 ) 0 ( 0 ) \n", + "15 500 1000 0.1 2.00 0.49 0.28 ( 0 ) 7.08 ( 0.53 ) 0 ( 0 ) \n", + "16 1000 1000 0.1 1.00 0.70 0.27 ( 0 ) 3.59 ( 0.33 ) 0 ( 0 ) \n", + "17 50 50 0.3 1.00 0.35 0.57 ( 0.03 ) 8.86 ( 0.42 ) 0.05 ( 0.02 )\n", + "18 100 50 0.3 0.50 0.47 0.36 ( 0.01 ) 6.18 ( 0.36 ) 0 ( 0 ) \n", + "19 500 50 0.3 0.10 0.70 0.28 ( 0 ) 3.14 ( 0.21 ) 0 ( 0 ) \n", + "20 1000 50 0.3 0.05 0.86 0.27 ( 0 ) 1.86 ( 0.11 ) 0 ( 0 ) \n", + "21 50 100 0.3 2.00 0.31 0.76 ( 0.04 ) 11.12 ( 0.37 ) 0.17 ( 0.04 )\n", + "22 100 100 0.3 1.00 0.38 0.41 ( 0.01 ) 9.43 ( 0.53 ) 0 ( 0 ) \n", + "23 500 100 0.3 0.20 0.63 0.27 ( 0 ) 4.16 ( 0.27 ) 0 ( 0 ) \n", + "24 1000 100 0.3 0.10 0.80 0.27 ( 0 ) 2.36 ( 0.17 ) 0 ( 0 ) \n", + "25 50 500 0.3 10.00 0.14 1.78 ( 0.11 ) 21.4 ( 0.41 ) 1.39 ( 0.1 ) \n", + "26 100 500 0.3 5.00 0.26 0.53 ( 0.02 ) 16.81 ( 0.77 ) 0.02 ( 0.01 )\n", + "27 500 500 0.3 1.00 0.55 0.29 ( 0 ) 5.89 ( 0.51 ) 0 ( 0 ) \n", + "28 1000 500 0.3 0.50 0.69 0.27 ( 0 ) 3.68 ( 0.32 ) 0 ( 0 ) \n", + "29 50 1000 0.3 20.00 0.11 2.21 ( 0.15 ) 25.14 ( 0.35 ) 1.87 ( 0.1 ) \n", + "30 100 1000 0.3 10.00 0.22 0.61 ( 0.03 ) 21.11 ( 0.75 ) 0.02 ( 0.01 )\n", + "... ... ... ... ... ... ... ... ... \n", + "51 500 50 0.7 0.10 0.60 0.27 ( 0 ) 4.38 ( 0.21 ) 0 ( 0 ) \n", + "52 1000 50 0.7 0.05 0.74 0.27 ( 0 ) 2.84 ( 0.14 ) 0 ( 0 ) \n", + "53 50 100 0.7 2.00 0.23 0.8 ( 0.04 ) 11.57 ( 0.53 ) 1.26 ( 0.1 ) \n", + "54 100 100 0.7 1.00 0.31 0.39 ( 0.01 ) 11.68 ( 0.51 ) 0.1 ( 0.04 ) \n", + "55 500 100 0.7 0.20 0.49 0.28 ( 0 ) 6.56 ( 0.32 ) 0 ( 0 ) \n", + "56 1000 100 0.7 0.10 0.63 0.27 ( 0 ) 4.24 ( 0.26 ) 0 ( 0 ) \n", + "57 50 500 0.7 10.00 0.12 1.37 ( 0.08 ) 19.8 ( 0.33 ) 2.78 ( 0.08 )\n", + "58 100 500 0.7 5.00 0.19 0.62 ( 0.03 ) 18.58 ( 0.85 ) 0.88 ( 0.08 )\n", + "59 500 500 0.7 1.00 0.36 0.3 ( 0 ) 11.31 ( 0.6 ) 0 ( 0 ) \n", + "60 1000 500 0.7 0.50 0.46 0.27 ( 0 ) 7.93 ( 0.49 ) 0 ( 0 ) \n", + "61 50 1000 0.7 20.00 0.09 1.5 ( 0.08 ) 22.99 ( 0.35 ) 3.2 ( 0.09 ) \n", + "62 100 1000 0.7 10.00 0.14 0.77 ( 0.04 ) 22.43 ( 0.68 ) 1.45 ( 0.1 ) \n", + "63 500 1000 0.7 2.00 0.30 0.31 ( 0 ) 14.7 ( 0.84 ) 0 ( 0 ) \n", + "64 1000 1000 0.7 1.00 0.41 0.28 ( 0 ) 9.63 ( 0.54 ) 0 ( 0 ) \n", + "65 50 50 0.9 1.00 0.31 0.55 ( 0.03 ) 5.65 ( 0.29 ) 2.17 ( 0.13 )\n", + "66 100 50 0.9 0.50 0.38 0.38 ( 0.02 ) 5.85 ( 0.3 ) 1.03 ( 0.11 )\n", + "67 500 50 0.9 0.10 0.61 0.28 ( 0 ) 4.34 ( 0.19 ) 0.01 ( 0.01 )\n", + "68 1000 50 0.9 0.05 0.76 0.27 ( 0 ) 2.71 ( 0.12 ) 0 ( 0 ) \n", + "69 50 100 0.9 2.00 0.26 0.6 ( 0.03 ) 7.26 ( 0.35 ) 2.69 ( 0.1 ) \n", + "70 100 100 0.9 1.00 0.31 0.44 ( 0.01 ) 7.79 ( 0.39 ) 1.51 ( 0.11 )\n", + "71 500 100 0.9 0.20 0.51 0.29 ( 0 ) 6.45 ( 0.27 ) 0 ( 0 ) \n", + "72 1000 100 0.9 0.10 0.61 0.27 ( 0 ) 4.72 ( 0.21 ) 0 ( 0 ) \n", + "73 50 500 0.9 10.00 0.13 0.81 ( 0.04 ) 13.78 ( 0.36 ) 3.54 ( 0.08 )\n", + "74 100 500 0.9 5.00 0.18 0.54 ( 0.02 ) 13.78 ( 0.72 ) 2.58 ( 0.08 )\n", + "75 500 500 0.9 1.00 0.25 0.3 ( 0 ) 18.18 ( 0.69 ) 0.03 ( 0.02 )\n", + "76 1000 500 0.9 0.50 0.33 0.28 ( 0 ) 12.68 ( 0.57 ) 0 ( 0 ) \n", + "77 50 1000 0.9 20.00 0.08 0.9 ( 0.05 ) 18.15 ( 0.34 ) 3.92 ( 0.08 )\n", + "78 100 1000 0.9 10.00 0.16 0.59 ( 0.02 ) 15.99 ( 0.66 ) 2.88 ( 0.06 )\n", + "79 500 1000 0.9 2.00 0.20 0.31 ( 0 ) 24.62 ( 1.01 ) 0.05 ( 0.02 )\n", + "80 1000 1000 0.9 1.00 0.25 0.28 ( 0 ) 18.51 ( 0.86 ) 0 ( 0 ) \n", + " num_select FDR MSE_mean FP_mean FN_mean\n", + "1 13.57 0.51 0.62 8.59 0.02 \n", + "2 11.30 0.4 0.37 6.30 0.00 \n", + "3 7.88 0.2 0.28 2.88 0.00 \n", + "4 6.66 0.08 0.27 1.66 0.00 \n", + "5 16.84 0.62 0.67 11.80 0.00 \n", + "6 12.71 0.46 0.40 7.71 0.00 \n", + "7 8.35 0.23 0.27 3.35 0.00 \n", + "8 7.29 0.13 0.27 2.29 0.00 \n", + "9 25.16 0.78 1.61 20.80 0.69 \n", + "10 19.69 0.66 0.53 14.60 0.00 \n", + "11 10.86 0.36 0.28 5.86 0.00 \n", + "12 7.69 0.17 0.28 2.69 0.00 \n", + "13 28.01 0.83 2.23 24.30 1.36 \n", + "14 23.79 0.73 0.57 18.70 0.00 \n", + "15 12.08 0.41 0.28 7.08 0.00 \n", + "16 8.59 0.23 0.27 3.59 0.00 \n", + "17 13.81 0.53 0.57 8.86 0.05 \n", + "18 11.18 0.41 0.36 6.18 0.00 \n", + "19 8.14 0.22 0.28 3.14 0.00 \n", + "20 6.86 0.11 0.27 1.86 0.00 \n", + "21 15.95 0.62 0.76 11.10 0.17 \n", + "22 14.43 0.54 0.41 9.43 0.00 \n", + "23 9.16 0.29 0.27 4.16 0.00 \n", + "24 7.36 0.15 0.27 2.36 0.00 \n", + "25 25.01 0.81 1.78 21.40 1.39 \n", + "26 21.79 0.7 0.53 16.80 0.02 \n", + "27 10.89 0.36 0.29 5.89 0.00 \n", + "28 8.68 0.25 0.27 3.68 0.00 \n", + "29 28.27 0.85 2.21 25.10 1.87 \n", + "30 26.09 0.75 0.61 21.10 0.02 \n", + "... ... ... ... ... ... \n", + "51 9.38 0.33 0.27 4.38 0.00 \n", + "52 7.84 0.21 0.27 2.84 0.00 \n", + "53 15.31 0.66 0.80 11.50 1.26 \n", + "54 16.58 0.61 0.39 11.60 0.10 \n", + "55 11.56 0.44 0.28 6.56 0.00 \n", + "56 9.24 0.3 0.27 4.24 0.00 \n", + "57 22.02 0.85 1.37 19.80 2.78 \n", + "58 22.70 0.75 0.62 18.50 0.88 \n", + "59 16.31 0.58 0.30 11.30 0.00 \n", + "60 12.93 0.47 0.27 7.93 0.00 \n", + "61 24.79 0.88 1.50 22.90 3.20 \n", + "62 25.98 0.82 0.77 22.40 1.45 \n", + "63 19.70 0.65 0.31 14.70 0.00 \n", + "64 14.63 0.53 0.28 9.63 0.00 \n", + "65 8.48 0.51 0.55 5.65 2.17 \n", + "66 9.82 0.45 0.38 5.85 1.03 \n", + "67 9.33 0.33 0.28 4.34 0.01 \n", + "68 7.71 0.2 0.27 2.71 0.00 \n", + "69 9.57 0.62 0.60 7.26 2.69 \n", + "70 11.28 0.57 0.44 7.79 1.51 \n", + "71 11.45 0.45 0.29 6.45 0.00 \n", + "72 9.72 0.35 0.27 4.72 0.00 \n", + "73 15.24 0.83 0.81 13.70 3.54 \n", + "74 16.20 0.76 0.54 13.70 2.58 \n", + "75 23.15 0.72 0.30 18.10 0.03 \n", + "76 17.68 0.63 0.28 12.60 0.00 \n", + "77 19.23 0.89 0.90 18.10 3.92 \n", + "78 18.11 0.81 0.59 15.90 2.88 \n", + "79 29.57 0.77 0.31 24.60 0.05 \n", + "80 23.51 0.71 0.28 18.50 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_toe\n", + "\n", + "## export\n", + "write.table(result.table_toe, '../results_summary_cts/sim_toe_lasso.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_cts/1.2_sim_toe_elnet_cts.ipynb b/simulations/notebooks_sim_cts/1.2_sim_toe_elnet_cts.ipynb new file mode 100755 index 0000000..445c6b6 --- /dev/null +++ b/simulations/notebooks_sim_cts/1.2_sim_toe_elnet_cts.ipynb @@ -0,0 +1,493 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize elastic net results on Toeplitz Simulation Scenarios for continuous outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'\n", + "\n", + "load(paste0(dir, '/toe_Elnet.RData'))" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "rou.list = seq(0.1, 0.9, 0.2)\n", + "\n", + "files = NULL\n", + "for (rou in rou.list){\n", + " for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_toeplitz_corr', rou, paste('P', p, 'N', n, sep='_'), '.RData', sep=''))\n", + " }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "avg_FDR = NULL\n", + "for (i in 1:length(files)){\n", + " sim_file = files[i]\n", + " load(sim_file, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_toe_elnet[[i]]$Stab.table\n", + " \n", + " FDR = NULL\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "table_toe = NULL\n", + "tmp_num_select = rep(0, length(results_toe_elnet))\n", + "for (i in 1:length(results_toe_elnet)){\n", + " table_toe = rbind(table_toe, results_toe_elnet[[i]][c('n', 'p', 'rou', 'FP', 'FN', 'MSE', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_toe_elnet[[i]]$Stab.table))\n", + " \n", + "}\n", + "table_toe = as.data.frame(table_toe)\n", + "table_toe$num_select = tmp_num_select\n", + "table_toe$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
nprouFPFNMSEStabnum_selectFDR
50 50 0.1 14.72 ( 0.57 )0.01 ( 0.01 ) 0.6 ( 0.03 ) 0.21 19.71 0.67
100 50 0.1 13.7 ( 0.66 )0 ( 0 ) 0.34 ( 0.01 )0.23 18.70 0.64
500 50 0.1 13.59 ( 0.55 )0 ( 0 ) 0.26 ( 0 ) 0.23 18.59 0.65
1000 50 0.1 12.64 ( 0.54 )0 ( 0 ) 0.26 ( 0 ) 0.25 17.64 0.63
50 100 0.1 19.33 ( 0.67 )0 ( 0 ) 0.69 ( 0.05 ) 0.2 24.33 0.73
100 100 0.1 17.77 ( 0.8 )0 ( 0 ) 0.38 ( 0.01 )0.22 22.77 0.70
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllll}\n", + " n & p & rou & FP & FN & MSE & Stab & num\\_select & FDR\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0.1 & 14.72 ( 0.57 ) & 0.01 ( 0.01 ) & 0.6 ( 0.03 ) & 0.21 & 19.71 & 0.67 \\\\\n", + "\t 100 & 50 & 0.1 & 13.7 ( 0.66 ) & 0 ( 0 ) & 0.34 ( 0.01 ) & 0.23 & 18.70 & 0.64 \\\\\n", + "\t 500 & 50 & 0.1 & 13.59 ( 0.55 ) & 0 ( 0 ) & 0.26 ( 0 ) & 0.23 & 18.59 & 0.65 \\\\\n", + "\t 1000 & 50 & 0.1 & 12.64 ( 0.54 ) & 0 ( 0 ) & 0.26 ( 0 ) & 0.25 & 17.64 & 0.63 \\\\\n", + "\t 50 & 100 & 0.1 & 19.33 ( 0.67 ) & 0 ( 0 ) & 0.69 ( 0.05 ) & 0.2 & 24.33 & 0.73 \\\\\n", + "\t 100 & 100 & 0.1 & 17.77 ( 0.8 ) & 0 ( 0 ) & 0.38 ( 0.01 ) & 0.22 & 22.77 & 0.70 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| n | p | rou | FP | FN | MSE | Stab | num_select | FDR |\n", + "|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0.1 | 14.72 ( 0.57 ) | 0.01 ( 0.01 ) | 0.6 ( 0.03 ) | 0.21 | 19.71 | 0.67 |\n", + "| 100 | 50 | 0.1 | 13.7 ( 0.66 ) | 0 ( 0 ) | 0.34 ( 0.01 ) | 0.23 | 18.70 | 0.64 |\n", + "| 500 | 50 | 0.1 | 13.59 ( 0.55 ) | 0 ( 0 ) | 0.26 ( 0 ) | 0.23 | 18.59 | 0.65 |\n", + "| 1000 | 50 | 0.1 | 12.64 ( 0.54 ) | 0 ( 0 ) | 0.26 ( 0 ) | 0.25 | 17.64 | 0.63 |\n", + "| 50 | 100 | 0.1 | 19.33 ( 0.67 ) | 0 ( 0 ) | 0.69 ( 0.05 ) | 0.2 | 24.33 | 0.73 |\n", + "| 100 | 100 | 0.1 | 17.77 ( 0.8 ) | 0 ( 0 ) | 0.38 ( 0.01 ) | 0.22 | 22.77 | 0.70 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN MSE Stab num_select FDR \n", + "1 50 50 0.1 14.72 ( 0.57 ) 0.01 ( 0.01 ) 0.6 ( 0.03 ) 0.21 19.71 0.67\n", + "2 100 50 0.1 13.7 ( 0.66 ) 0 ( 0 ) 0.34 ( 0.01 ) 0.23 18.70 0.64\n", + "3 500 50 0.1 13.59 ( 0.55 ) 0 ( 0 ) 0.26 ( 0 ) 0.23 18.59 0.65\n", + "4 1000 50 0.1 12.64 ( 0.54 ) 0 ( 0 ) 0.26 ( 0 ) 0.25 17.64 0.63\n", + "5 50 100 0.1 19.33 ( 0.67 ) 0 ( 0 ) 0.69 ( 0.05 ) 0.2 24.33 0.73\n", + "6 100 100 0.1 17.77 ( 0.8 ) 0 ( 0 ) 0.38 ( 0.01 ) 0.22 22.77 0.70" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_toe <- apply(table_toe,2,as.character)\n", + "rownames(result.table_toe) = rownames(table_toe)\n", + "result.table_toe = as.data.frame(result.table_toe)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_toe$n = tidyr::extract_numeric(result.table_toe$n)\n", + "result.table_toe$p = tidyr::extract_numeric(result.table_toe$p)\n", + "result.table_toe$ratio = result.table_toe$p / result.table_toe$n\n", + "\n", + "result.table_toe = result.table_toe[c('n', 'p', 'rou', 'ratio', 'Stab', 'MSE', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_toe)[1:4] = c('N', 'P', 'Corr', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”" + ] + } + ], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_toe$Stab = as.numeric(as.character(result.table_toe$Stab))\n", + "result.table_toe$MSE_mean = as.numeric(substr(result.table_toe$MSE, start=1, stop=4))\n", + "result.table_toe$FP_mean = as.numeric(substr(result.table_toe$FP, start=1, stop=4))\n", + "result.table_toe$FN_mean = as.numeric(substr(result.table_toe$FN, start=1, stop=4))\n", + "result.table_toe$FN_mean[is.na(result.table_toe$FN_mean)] = 0\n", + "result.table_toe$num_select = as.numeric(as.character(result.table_toe$num_select))" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
241000 100 0.3 0.1 0.20 0.26 ( 0 ) 19 ( 0.86 ) 0 ( 0 ) 24.00 0.71 0.26 NA 0.00
66 100 50 0.9 0.5 0.21 0.35 ( 0.01 )14 ( 0.69 ) 0.27 ( 0.06 )18.73 0.66 0.35 NA 0.27
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t24 & 1000 & 100 & 0.3 & 0.1 & 0.20 & 0.26 ( 0 ) & 19 ( 0.86 ) & 0 ( 0 ) & 24.00 & 0.71 & 0.26 & NA & 0.00 \\\\\n", + "\t66 & 100 & 50 & 0.9 & 0.5 & 0.21 & 0.35 ( 0.01 ) & 14 ( 0.69 ) & 0.27 ( 0.06 ) & 18.73 & 0.66 & 0.35 & NA & 0.27 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 24 | 1000 | 100 | 0.3 | 0.1 | 0.20 | 0.26 ( 0 ) | 19 ( 0.86 ) | 0 ( 0 ) | 24.00 | 0.71 | 0.26 | NA | 0.00 |\n", + "| 66 | 100 | 50 | 0.9 | 0.5 | 0.21 | 0.35 ( 0.01 ) | 14 ( 0.69 ) | 0.27 ( 0.06 ) | 18.73 | 0.66 | 0.35 | NA | 0.27 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN num_select\n", + "24 1000 100 0.3 0.1 0.20 0.26 ( 0 ) 19 ( 0.86 ) 0 ( 0 ) 24.00 \n", + "66 100 50 0.9 0.5 0.21 0.35 ( 0.01 ) 14 ( 0.69 ) 0.27 ( 0.06 ) 18.73 \n", + " FDR MSE_mean FP_mean FN_mean\n", + "24 0.71 0.26 NA 0.00 \n", + "66 0.66 0.35 NA 0.27 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check whether missing values exists\n", + "result.table_toe[rowSums(is.na(result.table_toe)) > 0,]" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "# recover values\n", + "result.table_toe$FP_mean[24] = 19\n", + "result.table_toe$FP_mean[66] = 14" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
241000 100 0.3 0.1 0.20 0.26 ( 0 ) 19 ( 0.86 ) 0 ( 0 ) 24.00 0.71 0.26 19 0.00
66 100 50 0.9 0.5 0.21 0.35 ( 0.01 )14 ( 0.69 ) 0.27 ( 0.06 )18.73 0.66 0.35 14 0.27
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t24 & 1000 & 100 & 0.3 & 0.1 & 0.20 & 0.26 ( 0 ) & 19 ( 0.86 ) & 0 ( 0 ) & 24.00 & 0.71 & 0.26 & 19 & 0.00 \\\\\n", + "\t66 & 100 & 50 & 0.9 & 0.5 & 0.21 & 0.35 ( 0.01 ) & 14 ( 0.69 ) & 0.27 ( 0.06 ) & 18.73 & 0.66 & 0.35 & 14 & 0.27 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 24 | 1000 | 100 | 0.3 | 0.1 | 0.20 | 0.26 ( 0 ) | 19 ( 0.86 ) | 0 ( 0 ) | 24.00 | 0.71 | 0.26 | 19 | 0.00 |\n", + "| 66 | 100 | 50 | 0.9 | 0.5 | 0.21 | 0.35 ( 0.01 ) | 14 ( 0.69 ) | 0.27 ( 0.06 ) | 18.73 | 0.66 | 0.35 | 14 | 0.27 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN num_select\n", + "24 1000 100 0.3 0.1 0.20 0.26 ( 0 ) 19 ( 0.86 ) 0 ( 0 ) 24.00 \n", + "66 100 50 0.9 0.5 0.21 0.35 ( 0.01 ) 14 ( 0.69 ) 0.27 ( 0.06 ) 18.73 \n", + " FDR MSE_mean FP_mean FN_mean\n", + "24 0.71 0.26 19 0.00 \n", + "66 0.66 0.35 14 0.27 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_toe[c(24, 66), ]" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
50 50 0.1 1.00 0.21 0.6 ( 0.03 ) 14.72 ( 0.57 )0.01 ( 0.01 ) 19.71 0.67 0.60 14.7 0.01
100 50 0.1 0.50 0.23 0.34 ( 0.01 ) 13.7 ( 0.66 ) 0 ( 0 ) 18.70 0.64 0.34 13.7 0.00
500 50 0.1 0.10 0.23 0.26 ( 0 ) 13.59 ( 0.55 )0 ( 0 ) 18.59 0.65 0.26 13.5 0.00
1000 50 0.1 0.05 0.25 0.26 ( 0 ) 12.64 ( 0.54 )0 ( 0 ) 17.64 0.63 0.26 12.6 0.00
50 100 0.1 2.00 0.20 0.69 ( 0.05 ) 19.33 ( 0.67 )0 ( 0 ) 24.33 0.73 0.69 19.3 0.00
100 100 0.1 1.00 0.22 0.38 ( 0.01 ) 17.77 ( 0.8 ) 0 ( 0 ) 22.77 0.7 0.38 17.7 0.00
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0.1 & 1.00 & 0.21 & 0.6 ( 0.03 ) & 14.72 ( 0.57 ) & 0.01 ( 0.01 ) & 19.71 & 0.67 & 0.60 & 14.7 & 0.01 \\\\\n", + "\t 100 & 50 & 0.1 & 0.50 & 0.23 & 0.34 ( 0.01 ) & 13.7 ( 0.66 ) & 0 ( 0 ) & 18.70 & 0.64 & 0.34 & 13.7 & 0.00 \\\\\n", + "\t 500 & 50 & 0.1 & 0.10 & 0.23 & 0.26 ( 0 ) & 13.59 ( 0.55 ) & 0 ( 0 ) & 18.59 & 0.65 & 0.26 & 13.5 & 0.00 \\\\\n", + "\t 1000 & 50 & 0.1 & 0.05 & 0.25 & 0.26 ( 0 ) & 12.64 ( 0.54 ) & 0 ( 0 ) & 17.64 & 0.63 & 0.26 & 12.6 & 0.00 \\\\\n", + "\t 50 & 100 & 0.1 & 2.00 & 0.20 & 0.69 ( 0.05 ) & 19.33 ( 0.67 ) & 0 ( 0 ) & 24.33 & 0.73 & 0.69 & 19.3 & 0.00 \\\\\n", + "\t 100 & 100 & 0.1 & 1.00 & 0.22 & 0.38 ( 0.01 ) & 17.77 ( 0.8 ) & 0 ( 0 ) & 22.77 & 0.7 & 0.38 & 17.7 & 0.00 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0.1 | 1.00 | 0.21 | 0.6 ( 0.03 ) | 14.72 ( 0.57 ) | 0.01 ( 0.01 ) | 19.71 | 0.67 | 0.60 | 14.7 | 0.01 |\n", + "| 100 | 50 | 0.1 | 0.50 | 0.23 | 0.34 ( 0.01 ) | 13.7 ( 0.66 ) | 0 ( 0 ) | 18.70 | 0.64 | 0.34 | 13.7 | 0.00 |\n", + "| 500 | 50 | 0.1 | 0.10 | 0.23 | 0.26 ( 0 ) | 13.59 ( 0.55 ) | 0 ( 0 ) | 18.59 | 0.65 | 0.26 | 13.5 | 0.00 |\n", + "| 1000 | 50 | 0.1 | 0.05 | 0.25 | 0.26 ( 0 ) | 12.64 ( 0.54 ) | 0 ( 0 ) | 17.64 | 0.63 | 0.26 | 12.6 | 0.00 |\n", + "| 50 | 100 | 0.1 | 2.00 | 0.20 | 0.69 ( 0.05 ) | 19.33 ( 0.67 ) | 0 ( 0 ) | 24.33 | 0.73 | 0.69 | 19.3 | 0.00 |\n", + "| 100 | 100 | 0.1 | 1.00 | 0.22 | 0.38 ( 0.01 ) | 17.77 ( 0.8 ) | 0 ( 0 ) | 22.77 | 0.7 | 0.38 | 17.7 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN \n", + "1 50 50 0.1 1.00 0.21 0.6 ( 0.03 ) 14.72 ( 0.57 ) 0.01 ( 0.01 )\n", + "2 100 50 0.1 0.50 0.23 0.34 ( 0.01 ) 13.7 ( 0.66 ) 0 ( 0 ) \n", + "3 500 50 0.1 0.10 0.23 0.26 ( 0 ) 13.59 ( 0.55 ) 0 ( 0 ) \n", + "4 1000 50 0.1 0.05 0.25 0.26 ( 0 ) 12.64 ( 0.54 ) 0 ( 0 ) \n", + "5 50 100 0.1 2.00 0.20 0.69 ( 0.05 ) 19.33 ( 0.67 ) 0 ( 0 ) \n", + "6 100 100 0.1 1.00 0.22 0.38 ( 0.01 ) 17.77 ( 0.8 ) 0 ( 0 ) \n", + " num_select FDR MSE_mean FP_mean FN_mean\n", + "1 19.71 0.67 0.60 14.7 0.01 \n", + "2 18.70 0.64 0.34 13.7 0.00 \n", + "3 18.59 0.65 0.26 13.5 0.00 \n", + "4 17.64 0.63 0.26 12.6 0.00 \n", + "5 24.33 0.73 0.69 19.3 0.00 \n", + "6 22.77 0.7 0.38 17.7 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
75 500 500 0.9 1.0 0.12 0.29 ( 0 ) 41.14 ( 1.02 )0 ( 0 ) 46.14 0.86 0.29 41.1 0.00
761000 500 0.9 0.5 0.13 0.27 ( 0 ) 39.21 ( 0.84 )0 ( 0 ) 44.21 0.86 0.27 39.2 0.00
77 50 1000 0.9 20.0 0.04 0.94 ( 0.05 ) 36.59 ( 3.6 ) 3.72 ( 0.08 ) 37.87 0.92 0.94 36.5 3.72
78 100 1000 0.9 10.0 0.09 0.59 ( 0.02 ) 32.05 ( 1.85 )2.59 ( 0.06 ) 34.46 0.88 0.59 32.0 2.59
79 500 1000 0.9 2.0 0.09 0.3 ( 0 ) 57.69 ( 1.57 )0 ( 0 ) 62.69 0.9 0.30 57.6 0.00
801000 1000 0.9 1.0 0.10 0.27 ( 0 ) 52.35 ( 1.6 ) 0 ( 0 ) 57.35 0.89 0.27 52.3 0.00
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 1.0 & 0.12 & 0.29 ( 0 ) & 41.14 ( 1.02 ) & 0 ( 0 ) & 46.14 & 0.86 & 0.29 & 41.1 & 0.00 \\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.5 & 0.13 & 0.27 ( 0 ) & 39.21 ( 0.84 ) & 0 ( 0 ) & 44.21 & 0.86 & 0.27 & 39.2 & 0.00 \\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.0 & 0.04 & 0.94 ( 0.05 ) & 36.59 ( 3.6 ) & 3.72 ( 0.08 ) & 37.87 & 0.92 & 0.94 & 36.5 & 3.72 \\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.0 & 0.09 & 0.59 ( 0.02 ) & 32.05 ( 1.85 ) & 2.59 ( 0.06 ) & 34.46 & 0.88 & 0.59 & 32.0 & 2.59 \\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.0 & 0.09 & 0.3 ( 0 ) & 57.69 ( 1.57 ) & 0 ( 0 ) & 62.69 & 0.9 & 0.30 & 57.6 & 0.00 \\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.0 & 0.10 & 0.27 ( 0 ) & 52.35 ( 1.6 ) & 0 ( 0 ) & 57.35 & 0.89 & 0.27 & 52.3 & 0.00 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 1.0 | 0.12 | 0.29 ( 0 ) | 41.14 ( 1.02 ) | 0 ( 0 ) | 46.14 | 0.86 | 0.29 | 41.1 | 0.00 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.5 | 0.13 | 0.27 ( 0 ) | 39.21 ( 0.84 ) | 0 ( 0 ) | 44.21 | 0.86 | 0.27 | 39.2 | 0.00 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.0 | 0.04 | 0.94 ( 0.05 ) | 36.59 ( 3.6 ) | 3.72 ( 0.08 ) | 37.87 | 0.92 | 0.94 | 36.5 | 3.72 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.0 | 0.09 | 0.59 ( 0.02 ) | 32.05 ( 1.85 ) | 2.59 ( 0.06 ) | 34.46 | 0.88 | 0.59 | 32.0 | 2.59 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.0 | 0.09 | 0.3 ( 0 ) | 57.69 ( 1.57 ) | 0 ( 0 ) | 62.69 | 0.9 | 0.30 | 57.6 | 0.00 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.0 | 0.10 | 0.27 ( 0 ) | 52.35 ( 1.6 ) | 0 ( 0 ) | 57.35 | 0.89 | 0.27 | 52.3 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN \n", + "75 500 500 0.9 1.0 0.12 0.29 ( 0 ) 41.14 ( 1.02 ) 0 ( 0 ) \n", + "76 1000 500 0.9 0.5 0.13 0.27 ( 0 ) 39.21 ( 0.84 ) 0 ( 0 ) \n", + "77 50 1000 0.9 20.0 0.04 0.94 ( 0.05 ) 36.59 ( 3.6 ) 3.72 ( 0.08 )\n", + "78 100 1000 0.9 10.0 0.09 0.59 ( 0.02 ) 32.05 ( 1.85 ) 2.59 ( 0.06 )\n", + "79 500 1000 0.9 2.0 0.09 0.3 ( 0 ) 57.69 ( 1.57 ) 0 ( 0 ) \n", + "80 1000 1000 0.9 1.0 0.10 0.27 ( 0 ) 52.35 ( 1.6 ) 0 ( 0 ) \n", + " num_select FDR MSE_mean FP_mean FN_mean\n", + "75 46.14 0.86 0.29 41.1 0.00 \n", + "76 44.21 0.86 0.27 39.2 0.00 \n", + "77 37.87 0.92 0.94 36.5 3.72 \n", + "78 34.46 0.88 0.59 32.0 2.59 \n", + "79 62.69 0.9 0.30 57.6 0.00 \n", + "80 57.35 0.89 0.27 52.3 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "## export\n", + "write.table(result.table_toe, '../results_summary_cts/sim_toe_elnet.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_cts/1.3_sim_toe_rf_cts.ipynb b/simulations/notebooks_sim_cts/1.3_sim_toe_rf_cts.ipynb new file mode 100755 index 0000000..38b3c7f --- /dev/null +++ b/simulations/notebooks_sim_cts/1.3_sim_toe_rf_cts.ipynb @@ -0,0 +1,766 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize random forests results on Toeplitz Simulation Scenarios for continuous outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'\n", + "\n", + "load(paste0(dir, '/toe_RF.RData'))" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "rou.list = seq(0.1, 0.9, 0.2)\n", + "\n", + "files = NULL\n", + "for (rou in rou.list){\n", + " for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_toeplitz_corr', rou, paste('P', p, 'N', n, sep='_'), '.RData', sep=''))\n", + " }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "avg_FDR = NULL\n", + "for (i in 1:length(files)){\n", + " sim_file = files[i]\n", + " load(sim_file, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_toe_rf[[i]]$Stab.table\n", + " \n", + " FDR = NULL\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "table_toe = NULL\n", + "tmp_num_select = rep(0, length(results_toe_rf))\n", + "for (i in 1:length(results_toe_rf)){\n", + " results_toe_rf[[i]]$OOB = paste(round(mean(results_toe_rf[[i]]$OOB.list, na.rm=T),2),\n", + " '(', round(FSA::se(results_toe_rf[[i]]$OOB.list, na.rm=T),2), ')')\n", + " table_toe = rbind(table_toe, results_toe_rf[[i]][c('n', 'p', 'rou', 'FP', 'FN', 'MSE', 'Stab', 'OOB')])\n", + " tmp_num_select[i] = mean(rowSums(results_toe_rf[[i]]$Stab.table))\n", + "}\n", + "table_toe = as.data.frame(table_toe)\n", + "table_toe$num_select = tmp_num_select\n", + "table_toe$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
nprouFPFNMSEStabOOBnum_selectFDR
50 50 0.1 1 ( 0 ) 6 ( 0 ) 1.4 ( 0.06 ) NaN 1.98 ( 0.02 )0.00 NaN
100 50 0.1 1.87 ( 0.14 )4.25 ( 0.09 )0.86 ( 0.03 )0.19 1.76 ( 0.01 )3.62 0.48
500 50 0.1 0.32 ( 0.05 )1.81 ( 0.07 )0.44 ( 0.01 )0.77 1.29 ( 0 ) 4.51 0.06
1000 50 0.1 0.15 ( 0.04 )0.93 ( 0.07 )0.34 ( 0 ) 0.86 1.15 ( 0 ) 5.22 0.02
50 100 0.1 1 ( 0 ) 6 ( 0 ) 1.36 ( 0.06 )NaN 2.19 ( 0.02 )0.00 NaN
100 100 0.1 4.11 ( 0.18 )4.17 ( 0.1 ) 0.93 ( 0.03 )0.12 1.99 ( 0.01 )5.93 0.68
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|llllllllll}\n", + " n & p & rou & FP & FN & MSE & Stab & OOB & num\\_select & FDR\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0.1 & 1 ( 0 ) & 6 ( 0 ) & 1.4 ( 0.06 ) & NaN & 1.98 ( 0.02 ) & 0.00 & NaN \\\\\n", + "\t 100 & 50 & 0.1 & 1.87 ( 0.14 ) & 4.25 ( 0.09 ) & 0.86 ( 0.03 ) & 0.19 & 1.76 ( 0.01 ) & 3.62 & 0.48 \\\\\n", + "\t 500 & 50 & 0.1 & 0.32 ( 0.05 ) & 1.81 ( 0.07 ) & 0.44 ( 0.01 ) & 0.77 & 1.29 ( 0 ) & 4.51 & 0.06 \\\\\n", + "\t 1000 & 50 & 0.1 & 0.15 ( 0.04 ) & 0.93 ( 0.07 ) & 0.34 ( 0 ) & 0.86 & 1.15 ( 0 ) & 5.22 & 0.02 \\\\\n", + "\t 50 & 100 & 0.1 & 1 ( 0 ) & 6 ( 0 ) & 1.36 ( 0.06 ) & NaN & 2.19 ( 0.02 ) & 0.00 & NaN \\\\\n", + "\t 100 & 100 & 0.1 & 4.11 ( 0.18 ) & 4.17 ( 0.1 ) & 0.93 ( 0.03 ) & 0.12 & 1.99 ( 0.01 ) & 5.93 & 0.68 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| n | p | rou | FP | FN | MSE | Stab | OOB | num_select | FDR |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0.1 | 1 ( 0 ) | 6 ( 0 ) | 1.4 ( 0.06 ) | NaN | 1.98 ( 0.02 ) | 0.00 | NaN |\n", + "| 100 | 50 | 0.1 | 1.87 ( 0.14 ) | 4.25 ( 0.09 ) | 0.86 ( 0.03 ) | 0.19 | 1.76 ( 0.01 ) | 3.62 | 0.48 |\n", + "| 500 | 50 | 0.1 | 0.32 ( 0.05 ) | 1.81 ( 0.07 ) | 0.44 ( 0.01 ) | 0.77 | 1.29 ( 0 ) | 4.51 | 0.06 |\n", + "| 1000 | 50 | 0.1 | 0.15 ( 0.04 ) | 0.93 ( 0.07 ) | 0.34 ( 0 ) | 0.86 | 1.15 ( 0 ) | 5.22 | 0.02 |\n", + "| 50 | 100 | 0.1 | 1 ( 0 ) | 6 ( 0 ) | 1.36 ( 0.06 ) | NaN | 2.19 ( 0.02 ) | 0.00 | NaN |\n", + "| 100 | 100 | 0.1 | 4.11 ( 0.18 ) | 4.17 ( 0.1 ) | 0.93 ( 0.03 ) | 0.12 | 1.99 ( 0.01 ) | 5.93 | 0.68 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN MSE Stab OOB \n", + "1 50 50 0.1 1 ( 0 ) 6 ( 0 ) 1.4 ( 0.06 ) NaN 1.98 ( 0.02 )\n", + "2 100 50 0.1 1.87 ( 0.14 ) 4.25 ( 0.09 ) 0.86 ( 0.03 ) 0.19 1.76 ( 0.01 )\n", + "3 500 50 0.1 0.32 ( 0.05 ) 1.81 ( 0.07 ) 0.44 ( 0.01 ) 0.77 1.29 ( 0 ) \n", + "4 1000 50 0.1 0.15 ( 0.04 ) 0.93 ( 0.07 ) 0.34 ( 0 ) 0.86 1.15 ( 0 ) \n", + "5 50 100 0.1 1 ( 0 ) 6 ( 0 ) 1.36 ( 0.06 ) NaN 2.19 ( 0.02 )\n", + "6 100 100 0.1 4.11 ( 0.18 ) 4.17 ( 0.1 ) 0.93 ( 0.03 ) 0.12 1.99 ( 0.01 )\n", + " num_select FDR \n", + "1 0.00 NaN\n", + "2 3.62 0.48\n", + "3 4.51 0.06\n", + "4 5.22 0.02\n", + "5 0.00 NaN\n", + "6 5.93 0.68" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_toe <- apply(table_toe,2,as.character)\n", + "rownames(result.table_toe) = rownames(table_toe)\n", + "result.table_toe = as.data.frame(result.table_toe)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_toe$n = tidyr::extract_numeric(result.table_toe$n)\n", + "result.table_toe$p = tidyr::extract_numeric(result.table_toe$p)\n", + "result.table_toe$ratio = result.table_toe$p / result.table_toe$n\n", + "\n", + "result.table_toe = result.table_toe[c('n', 'p', 'rou', 'ratio', 'Stab', 'MSE', 'FP', 'FN', 'OOB', 'num_select', 'FDR')]\n", + "colnames(result.table_toe)[1:4] = c('N', 'P', 'Corr', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNOOBnum_selectFDR
50 50 0.1 1.00 NaN 1.4 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) 1.98 ( 0.02 )0 NaN
100 50 0.1 0.50 0.19 0.86 ( 0.03 )1.87 ( 0.14 )4.25 ( 0.09 )1.76 ( 0.01 )3.62 0.48
500 50 0.1 0.10 0.77 0.44 ( 0.01 )0.32 ( 0.05 )1.81 ( 0.07 )1.29 ( 0 ) 4.51 0.06
1000 50 0.1 0.05 0.86 0.34 ( 0 ) 0.15 ( 0.04 )0.93 ( 0.07 )1.15 ( 0 ) 5.22 0.02
50 100 0.1 2.00 NaN 1.36 ( 0.06 )1 ( 0 ) 6 ( 0 ) 2.19 ( 0.02 )0 NaN
100 100 0.1 1.00 0.12 0.93 ( 0.03 )4.11 ( 0.18 )4.17 ( 0.1 ) 1.99 ( 0.01 )5.93 0.68
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllll}\n", + " N & P & Corr & Ratio & Stab & MSE & FP & FN & OOB & num\\_select & FDR\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0.1 & 1.00 & NaN & 1.4 ( 0.06 ) & 1 ( 0 ) & 6 ( 0 ) & 1.98 ( 0.02 ) & 0 & NaN \\\\\n", + "\t 100 & 50 & 0.1 & 0.50 & 0.19 & 0.86 ( 0.03 ) & 1.87 ( 0.14 ) & 4.25 ( 0.09 ) & 1.76 ( 0.01 ) & 3.62 & 0.48 \\\\\n", + "\t 500 & 50 & 0.1 & 0.10 & 0.77 & 0.44 ( 0.01 ) & 0.32 ( 0.05 ) & 1.81 ( 0.07 ) & 1.29 ( 0 ) & 4.51 & 0.06 \\\\\n", + "\t 1000 & 50 & 0.1 & 0.05 & 0.86 & 0.34 ( 0 ) & 0.15 ( 0.04 ) & 0.93 ( 0.07 ) & 1.15 ( 0 ) & 5.22 & 0.02 \\\\\n", + "\t 50 & 100 & 0.1 & 2.00 & NaN & 1.36 ( 0.06 ) & 1 ( 0 ) & 6 ( 0 ) & 2.19 ( 0.02 ) & 0 & NaN \\\\\n", + "\t 100 & 100 & 0.1 & 1.00 & 0.12 & 0.93 ( 0.03 ) & 4.11 ( 0.18 ) & 4.17 ( 0.1 ) & 1.99 ( 0.01 ) & 5.93 & 0.68 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| N | P | Corr | Ratio | Stab | MSE | FP | FN | OOB | num_select | FDR |\n", + "|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0.1 | 1.00 | NaN | 1.4 ( 0.06 ) | 1 ( 0 ) | 6 ( 0 ) | 1.98 ( 0.02 ) | 0 | NaN |\n", + "| 100 | 50 | 0.1 | 0.50 | 0.19 | 0.86 ( 0.03 ) | 1.87 ( 0.14 ) | 4.25 ( 0.09 ) | 1.76 ( 0.01 ) | 3.62 | 0.48 |\n", + "| 500 | 50 | 0.1 | 0.10 | 0.77 | 0.44 ( 0.01 ) | 0.32 ( 0.05 ) | 1.81 ( 0.07 ) | 1.29 ( 0 ) | 4.51 | 0.06 |\n", + "| 1000 | 50 | 0.1 | 0.05 | 0.86 | 0.34 ( 0 ) | 0.15 ( 0.04 ) | 0.93 ( 0.07 ) | 1.15 ( 0 ) | 5.22 | 0.02 |\n", + "| 50 | 100 | 0.1 | 2.00 | NaN | 1.36 ( 0.06 ) | 1 ( 0 ) | 6 ( 0 ) | 2.19 ( 0.02 ) | 0 | NaN |\n", + "| 100 | 100 | 0.1 | 1.00 | 0.12 | 0.93 ( 0.03 ) | 4.11 ( 0.18 ) | 4.17 ( 0.1 ) | 1.99 ( 0.01 ) | 5.93 | 0.68 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN \n", + "1 50 50 0.1 1.00 NaN 1.4 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) \n", + "2 100 50 0.1 0.50 0.19 0.86 ( 0.03 ) 1.87 ( 0.14 ) 4.25 ( 0.09 )\n", + "3 500 50 0.1 0.10 0.77 0.44 ( 0.01 ) 0.32 ( 0.05 ) 1.81 ( 0.07 )\n", + "4 1000 50 0.1 0.05 0.86 0.34 ( 0 ) 0.15 ( 0.04 ) 0.93 ( 0.07 )\n", + "5 50 100 0.1 2.00 NaN 1.36 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) \n", + "6 100 100 0.1 1.00 0.12 0.93 ( 0.03 ) 4.11 ( 0.18 ) 4.17 ( 0.1 ) \n", + " OOB num_select FDR \n", + "1 1.98 ( 0.02 ) 0 NaN \n", + "2 1.76 ( 0.01 ) 3.62 0.48\n", + "3 1.29 ( 0 ) 4.51 0.06\n", + "4 1.15 ( 0 ) 5.22 0.02\n", + "5 2.19 ( 0.02 ) 0 NaN \n", + "6 1.99 ( 0.01 ) 5.93 0.68" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”" + ] + } + ], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_toe$Stab = as.numeric(as.character(result.table_toe$Stab))\n", + "result.table_toe$MSE_mean = as.numeric(substr(result.table_toe$MSE, start=1, stop=4))\n", + "result.table_toe$FP_mean = as.numeric(substr(result.table_toe$FP, start=1, stop=4))\n", + "result.table_toe$FN_mean = as.numeric(substr(result.table_toe$FN, start=1, stop=4))\n", + "result.table_toe$FN_mean[is.na(result.table_toe$FN_mean)] = 0\n", + "result.table_toe$OOB_mean = as.numeric(substr(result.table_toe$OOB, start=1, stop=4))\n", + "result.table_toe$num_select = as.numeric(as.character(result.table_toe$num_select))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNOOBnum_selectFDRMSE_meanFP_meanFN_meanOOB_mean
1 50 50 0.1 1 NaN 1.4 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) 1.98 ( 0.02 ) 0.00 NaN 1.40 NA 0.00 1.98
5 50 100 0.1 2 NaN 1.36 ( 0.06 )1 ( 0 ) 6 ( 0 ) 2.19 ( 0.02 ) 0.00 NaN 1.36 NA 0.00 2.19
9 50 500 0.1 10 NaN 1.29 ( 0.05 )1 ( 0 ) 6 ( 0 ) 2.39 ( 0.02 ) 0.00 NaN 1.29 NA 0.00 2.39
13 50 1000 0.1 20 NaN 1.35 ( 0.06 )1 ( 0 ) 6 ( 0 ) 2.42 ( 0.02 ) 0.00 NaN 1.35 NA 0.00 2.42
14100 1000 0.1 10 0.01 1 ( 0.03 ) 49.42 ( 0.7 )4.71 ( 0.09 )2.39 ( 0.02 )50.71 0.97 NA 49.4 4.71 2.39
17 50 50 0.3 1 NaN 1.22 ( 0.05 )1 ( 0 ) 6 ( 0 ) 1.87 ( 0.02 ) 0.00 NaN 1.22 NA 0.00 1.87
21 50 100 0.3 2 NaN 1.15 ( 0.05 )1 ( 0 ) 6 ( 0 ) 2.03 ( 0.02 ) 0.00 NaN 1.15 NA 0.00 2.03
25 50 500 0.3 10 NaN 1.14 ( 0.05 )1 ( 0 ) 6 ( 0 ) 2.24 ( 0.02 ) 0.00 NaN 1.14 NA 0.00 2.24
29 50 1000 0.3 20 NaN 1.2 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 2.29 ( 0.02 ) 0.00 NaN 1.20 NA 0.00 2.29
33 50 50 0.5 1 NaN 0.99 ( 0.05 )1 ( 0 ) 6 ( 0 ) 1.68 ( 0.02 ) 0.00 NaN 0.99 NA 0.00 1.68
37 50 100 0.5 2 NaN 0.91 ( 0.04 )1 ( 0 ) 6 ( 0 ) 1.84 ( 0.02 ) 0.00 NaN 0.91 NA 0.00 1.84
41 50 500 0.5 10 NaN 0.95 ( 0.04 )1 ( 0 ) 6 ( 0 ) 2.04 ( 0.02 ) 0.00 NaN 0.95 NA 0.00 2.04
45 50 1000 0.5 20 NaN 0.94 ( 0.04 )1 ( 0 ) 6 ( 0 ) 2.04 ( 0.02 ) 0.00 NaN 0.94 NA 0.00 2.04
49 50 50 0.7 1 NaN 0.66 ( 0.03 )1 ( 0 ) 6 ( 0 ) 1.44 ( 0.01 ) 0.00 NaN 0.66 NA 0.00 1.44
53 50 100 0.7 2 NaN 0.67 ( 0.03 )1 ( 0 ) 6 ( 0 ) 1.5 ( 0.02 ) 0.00 NaN 0.67 NA 0.00 1.50
57 50 500 0.7 10 NaN 0.7 ( 0.03 ) 1 ( 0 ) 6 ( 0 ) 1.68 ( 0.02 ) 0.00 NaN 0.70 NA 0.00 1.68
61 50 1000 0.7 20 NaN 0.74 ( 0.03 )1 ( 0 ) 6 ( 0 ) 1.69 ( 0.02 ) 0.00 NaN 0.74 NA 0.00 1.69
65 50 50 0.9 1 NaN 0.27 ( 0.01 )1 ( 0 ) 6 ( 0 ) 0.96 ( 0.01 ) 0.00 NaN 0.27 NA 0.00 0.96
69 50 100 0.9 2 NaN 0.3 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) 1 ( 0.01 ) 0.00 NaN 0.30 NA 0.00 NA
73 50 500 0.9 10 NaN 0.29 ( 0.01 )1 ( 0 ) 6 ( 0 ) 1.1 ( 0.01 ) 0.00 NaN 0.29 NA 0.00 1.10
77 50 1000 0.9 20 NaN 0.29 ( 0.01 )1 ( 0 ) 6 ( 0 ) 1.11 ( 0.01 ) 0.00 NaN 0.29 NA 0.00 1.11
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & OOB & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean & OOB\\_mean\\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1 & NaN & 1.4 ( 0.06 ) & 1 ( 0 ) & 6 ( 0 ) & 1.98 ( 0.02 ) & 0.00 & NaN & 1.40 & NA & 0.00 & 1.98 \\\\\n", + "\t5 & 50 & 100 & 0.1 & 2 & NaN & 1.36 ( 0.06 ) & 1 ( 0 ) & 6 ( 0 ) & 2.19 ( 0.02 ) & 0.00 & NaN & 1.36 & NA & 0.00 & 2.19 \\\\\n", + "\t9 & 50 & 500 & 0.1 & 10 & NaN & 1.29 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.39 ( 0.02 ) & 0.00 & NaN & 1.29 & NA & 0.00 & 2.39 \\\\\n", + "\t13 & 50 & 1000 & 0.1 & 20 & NaN & 1.35 ( 0.06 ) & 1 ( 0 ) & 6 ( 0 ) & 2.42 ( 0.02 ) & 0.00 & NaN & 1.35 & NA & 0.00 & 2.42 \\\\\n", + "\t14 & 100 & 1000 & 0.1 & 10 & 0.01 & 1 ( 0.03 ) & 49.42 ( 0.7 ) & 4.71 ( 0.09 ) & 2.39 ( 0.02 ) & 50.71 & 0.97 & NA & 49.4 & 4.71 & 2.39 \\\\\n", + "\t17 & 50 & 50 & 0.3 & 1 & NaN & 1.22 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 1.87 ( 0.02 ) & 0.00 & NaN & 1.22 & NA & 0.00 & 1.87 \\\\\n", + "\t21 & 50 & 100 & 0.3 & 2 & NaN & 1.15 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.03 ( 0.02 ) & 0.00 & NaN & 1.15 & NA & 0.00 & 2.03 \\\\\n", + "\t25 & 50 & 500 & 0.3 & 10 & NaN & 1.14 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.24 ( 0.02 ) & 0.00 & NaN & 1.14 & NA & 0.00 & 2.24 \\\\\n", + "\t29 & 50 & 1000 & 0.3 & 20 & NaN & 1.2 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.29 ( 0.02 ) & 0.00 & NaN & 1.20 & NA & 0.00 & 2.29 \\\\\n", + "\t33 & 50 & 50 & 0.5 & 1 & NaN & 0.99 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 1.68 ( 0.02 ) & 0.00 & NaN & 0.99 & NA & 0.00 & 1.68 \\\\\n", + "\t37 & 50 & 100 & 0.5 & 2 & NaN & 0.91 ( 0.04 ) & 1 ( 0 ) & 6 ( 0 ) & 1.84 ( 0.02 ) & 0.00 & NaN & 0.91 & NA & 0.00 & 1.84 \\\\\n", + "\t41 & 50 & 500 & 0.5 & 10 & NaN & 0.95 ( 0.04 ) & 1 ( 0 ) & 6 ( 0 ) & 2.04 ( 0.02 ) & 0.00 & NaN & 0.95 & NA & 0.00 & 2.04 \\\\\n", + "\t45 & 50 & 1000 & 0.5 & 20 & NaN & 0.94 ( 0.04 ) & 1 ( 0 ) & 6 ( 0 ) & 2.04 ( 0.02 ) & 0.00 & NaN & 0.94 & NA & 0.00 & 2.04 \\\\\n", + "\t49 & 50 & 50 & 0.7 & 1 & NaN & 0.66 ( 0.03 ) & 1 ( 0 ) & 6 ( 0 ) & 1.44 ( 0.01 ) & 0.00 & NaN & 0.66 & NA & 0.00 & 1.44 \\\\\n", + "\t53 & 50 & 100 & 0.7 & 2 & NaN & 0.67 ( 0.03 ) & 1 ( 0 ) & 6 ( 0 ) & 1.5 ( 0.02 ) & 0.00 & NaN & 0.67 & NA & 0.00 & 1.50 \\\\\n", + "\t57 & 50 & 500 & 0.7 & 10 & NaN & 0.7 ( 0.03 ) & 1 ( 0 ) & 6 ( 0 ) & 1.68 ( 0.02 ) & 0.00 & NaN & 0.70 & NA & 0.00 & 1.68 \\\\\n", + "\t61 & 50 & 1000 & 0.7 & 20 & NaN & 0.74 ( 0.03 ) & 1 ( 0 ) & 6 ( 0 ) & 1.69 ( 0.02 ) & 0.00 & NaN & 0.74 & NA & 0.00 & 1.69 \\\\\n", + "\t65 & 50 & 50 & 0.9 & 1 & NaN & 0.27 ( 0.01 ) & 1 ( 0 ) & 6 ( 0 ) & 0.96 ( 0.01 ) & 0.00 & NaN & 0.27 & NA & 0.00 & 0.96 \\\\\n", + "\t69 & 50 & 100 & 0.9 & 2 & NaN & 0.3 ( 0.01 ) & 1 ( 0 ) & 6 ( 0 ) & 1 ( 0.01 ) & 0.00 & NaN & 0.30 & NA & 0.00 & NA \\\\\n", + "\t73 & 50 & 500 & 0.9 & 10 & NaN & 0.29 ( 0.01 ) & 1 ( 0 ) & 6 ( 0 ) & 1.1 ( 0.01 ) & 0.00 & NaN & 0.29 & NA & 0.00 & 1.10 \\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20 & NaN & 0.29 ( 0.01 ) & 1 ( 0 ) & 6 ( 0 ) & 1.11 ( 0.01 ) & 0.00 & NaN & 0.29 & NA & 0.00 & 1.11 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | OOB | num_select | FDR | MSE_mean | FP_mean | FN_mean | OOB_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1 | NaN | 1.4 ( 0.06 ) | 1 ( 0 ) | 6 ( 0 ) | 1.98 ( 0.02 ) | 0.00 | NaN | 1.40 | NA | 0.00 | 1.98 |\n", + "| 5 | 50 | 100 | 0.1 | 2 | NaN | 1.36 ( 0.06 ) | 1 ( 0 ) | 6 ( 0 ) | 2.19 ( 0.02 ) | 0.00 | NaN | 1.36 | NA | 0.00 | 2.19 |\n", + "| 9 | 50 | 500 | 0.1 | 10 | NaN | 1.29 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.39 ( 0.02 ) | 0.00 | NaN | 1.29 | NA | 0.00 | 2.39 |\n", + "| 13 | 50 | 1000 | 0.1 | 20 | NaN | 1.35 ( 0.06 ) | 1 ( 0 ) | 6 ( 0 ) | 2.42 ( 0.02 ) | 0.00 | NaN | 1.35 | NA | 0.00 | 2.42 |\n", + "| 14 | 100 | 1000 | 0.1 | 10 | 0.01 | 1 ( 0.03 ) | 49.42 ( 0.7 ) | 4.71 ( 0.09 ) | 2.39 ( 0.02 ) | 50.71 | 0.97 | NA | 49.4 | 4.71 | 2.39 |\n", + "| 17 | 50 | 50 | 0.3 | 1 | NaN | 1.22 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 1.87 ( 0.02 ) | 0.00 | NaN | 1.22 | NA | 0.00 | 1.87 |\n", + "| 21 | 50 | 100 | 0.3 | 2 | NaN | 1.15 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.03 ( 0.02 ) | 0.00 | NaN | 1.15 | NA | 0.00 | 2.03 |\n", + "| 25 | 50 | 500 | 0.3 | 10 | NaN | 1.14 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.24 ( 0.02 ) | 0.00 | NaN | 1.14 | NA | 0.00 | 2.24 |\n", + "| 29 | 50 | 1000 | 0.3 | 20 | NaN | 1.2 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.29 ( 0.02 ) | 0.00 | NaN | 1.20 | NA | 0.00 | 2.29 |\n", + "| 33 | 50 | 50 | 0.5 | 1 | NaN | 0.99 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 1.68 ( 0.02 ) | 0.00 | NaN | 0.99 | NA | 0.00 | 1.68 |\n", + "| 37 | 50 | 100 | 0.5 | 2 | NaN | 0.91 ( 0.04 ) | 1 ( 0 ) | 6 ( 0 ) | 1.84 ( 0.02 ) | 0.00 | NaN | 0.91 | NA | 0.00 | 1.84 |\n", + "| 41 | 50 | 500 | 0.5 | 10 | NaN | 0.95 ( 0.04 ) | 1 ( 0 ) | 6 ( 0 ) | 2.04 ( 0.02 ) | 0.00 | NaN | 0.95 | NA | 0.00 | 2.04 |\n", + "| 45 | 50 | 1000 | 0.5 | 20 | NaN | 0.94 ( 0.04 ) | 1 ( 0 ) | 6 ( 0 ) | 2.04 ( 0.02 ) | 0.00 | NaN | 0.94 | NA | 0.00 | 2.04 |\n", + "| 49 | 50 | 50 | 0.7 | 1 | NaN | 0.66 ( 0.03 ) | 1 ( 0 ) | 6 ( 0 ) | 1.44 ( 0.01 ) | 0.00 | NaN | 0.66 | NA | 0.00 | 1.44 |\n", + "| 53 | 50 | 100 | 0.7 | 2 | NaN | 0.67 ( 0.03 ) | 1 ( 0 ) | 6 ( 0 ) | 1.5 ( 0.02 ) | 0.00 | NaN | 0.67 | NA | 0.00 | 1.50 |\n", + "| 57 | 50 | 500 | 0.7 | 10 | NaN | 0.7 ( 0.03 ) | 1 ( 0 ) | 6 ( 0 ) | 1.68 ( 0.02 ) | 0.00 | NaN | 0.70 | NA | 0.00 | 1.68 |\n", + "| 61 | 50 | 1000 | 0.7 | 20 | NaN | 0.74 ( 0.03 ) | 1 ( 0 ) | 6 ( 0 ) | 1.69 ( 0.02 ) | 0.00 | NaN | 0.74 | NA | 0.00 | 1.69 |\n", + "| 65 | 50 | 50 | 0.9 | 1 | NaN | 0.27 ( 0.01 ) | 1 ( 0 ) | 6 ( 0 ) | 0.96 ( 0.01 ) | 0.00 | NaN | 0.27 | NA | 0.00 | 0.96 |\n", + "| 69 | 50 | 100 | 0.9 | 2 | NaN | 0.3 ( 0.01 ) | 1 ( 0 ) | 6 ( 0 ) | 1 ( 0.01 ) | 0.00 | NaN | 0.30 | NA | 0.00 | NA |\n", + "| 73 | 50 | 500 | 0.9 | 10 | NaN | 0.29 ( 0.01 ) | 1 ( 0 ) | 6 ( 0 ) | 1.1 ( 0.01 ) | 0.00 | NaN | 0.29 | NA | 0.00 | 1.10 |\n", + "| 77 | 50 | 1000 | 0.9 | 20 | NaN | 0.29 ( 0.01 ) | 1 ( 0 ) | 6 ( 0 ) | 1.11 ( 0.01 ) | 0.00 | NaN | 0.29 | NA | 0.00 | 1.11 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN \n", + "1 50 50 0.1 1 NaN 1.4 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) \n", + "5 50 100 0.1 2 NaN 1.36 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) \n", + "9 50 500 0.1 10 NaN 1.29 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "13 50 1000 0.1 20 NaN 1.35 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) \n", + "14 100 1000 0.1 10 0.01 1 ( 0.03 ) 49.42 ( 0.7 ) 4.71 ( 0.09 )\n", + "17 50 50 0.3 1 NaN 1.22 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "21 50 100 0.3 2 NaN 1.15 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "25 50 500 0.3 10 NaN 1.14 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "29 50 1000 0.3 20 NaN 1.2 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "33 50 50 0.5 1 NaN 0.99 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "37 50 100 0.5 2 NaN 0.91 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) \n", + "41 50 500 0.5 10 NaN 0.95 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) \n", + "45 50 1000 0.5 20 NaN 0.94 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) \n", + "49 50 50 0.7 1 NaN 0.66 ( 0.03 ) 1 ( 0 ) 6 ( 0 ) \n", + "53 50 100 0.7 2 NaN 0.67 ( 0.03 ) 1 ( 0 ) 6 ( 0 ) \n", + "57 50 500 0.7 10 NaN 0.7 ( 0.03 ) 1 ( 0 ) 6 ( 0 ) \n", + "61 50 1000 0.7 20 NaN 0.74 ( 0.03 ) 1 ( 0 ) 6 ( 0 ) \n", + "65 50 50 0.9 1 NaN 0.27 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) \n", + "69 50 100 0.9 2 NaN 0.3 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) \n", + "73 50 500 0.9 10 NaN 0.29 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) \n", + "77 50 1000 0.9 20 NaN 0.29 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) \n", + " OOB num_select FDR MSE_mean FP_mean FN_mean OOB_mean\n", + "1 1.98 ( 0.02 ) 0.00 NaN 1.40 NA 0.00 1.98 \n", + "5 2.19 ( 0.02 ) 0.00 NaN 1.36 NA 0.00 2.19 \n", + "9 2.39 ( 0.02 ) 0.00 NaN 1.29 NA 0.00 2.39 \n", + "13 2.42 ( 0.02 ) 0.00 NaN 1.35 NA 0.00 2.42 \n", + "14 2.39 ( 0.02 ) 50.71 0.97 NA 49.4 4.71 2.39 \n", + "17 1.87 ( 0.02 ) 0.00 NaN 1.22 NA 0.00 1.87 \n", + "21 2.03 ( 0.02 ) 0.00 NaN 1.15 NA 0.00 2.03 \n", + "25 2.24 ( 0.02 ) 0.00 NaN 1.14 NA 0.00 2.24 \n", + "29 2.29 ( 0.02 ) 0.00 NaN 1.20 NA 0.00 2.29 \n", + "33 1.68 ( 0.02 ) 0.00 NaN 0.99 NA 0.00 1.68 \n", + "37 1.84 ( 0.02 ) 0.00 NaN 0.91 NA 0.00 1.84 \n", + "41 2.04 ( 0.02 ) 0.00 NaN 0.95 NA 0.00 2.04 \n", + "45 2.04 ( 0.02 ) 0.00 NaN 0.94 NA 0.00 2.04 \n", + "49 1.44 ( 0.01 ) 0.00 NaN 0.66 NA 0.00 1.44 \n", + "53 1.5 ( 0.02 ) 0.00 NaN 0.67 NA 0.00 1.50 \n", + "57 1.68 ( 0.02 ) 0.00 NaN 0.70 NA 0.00 1.68 \n", + "61 1.69 ( 0.02 ) 0.00 NaN 0.74 NA 0.00 1.69 \n", + "65 0.96 ( 0.01 ) 0.00 NaN 0.27 NA 0.00 0.96 \n", + "69 1 ( 0.01 ) 0.00 NaN 0.30 NA 0.00 NA \n", + "73 1.1 ( 0.01 ) 0.00 NaN 0.29 NA 0.00 1.10 \n", + "77 1.11 ( 0.01 ) 0.00 NaN 0.29 NA 0.00 1.11 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check whether missing values exists\n", + "result.table_toe[rowSums(is.na(result.table_toe)) > 0,]" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "# recover values\n", + "result.table_toe$Stab[is.na(result.table_toe$Stab)] = 0\n", + "result.table_toe$MSE_mean[is.na(result.table_toe$MSE_mean)] = 1\n", + "result.table_toe$FP_mean[is.na(result.table_toe$FP_mean)] = 1\n", + "result.table_toe$FN_mean[result.table_toe$num_select == 0] = 6\n", + "result.table_toe$OOB_mean[is.na(result.table_toe$OOB_mean)] = 1" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNOOBnum_selectFDRMSE_meanFP_meanFN_meanOOB_mean
1 50 50 0.1 1 0.00 1.4 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) 1.98 ( 0.02 ) 0.00 NaN 1.40 1.0 6.00 1.98
5 50 100 0.1 2 0.00 1.36 ( 0.06 )1 ( 0 ) 6 ( 0 ) 2.19 ( 0.02 ) 0.00 NaN 1.36 1.0 6.00 2.19
9 50 500 0.1 10 0.00 1.29 ( 0.05 )1 ( 0 ) 6 ( 0 ) 2.39 ( 0.02 ) 0.00 NaN 1.29 1.0 6.00 2.39
13 50 1000 0.1 20 0.00 1.35 ( 0.06 )1 ( 0 ) 6 ( 0 ) 2.42 ( 0.02 ) 0.00 NaN 1.35 1.0 6.00 2.42
14100 1000 0.1 10 0.01 1 ( 0.03 ) 49.42 ( 0.7 )4.71 ( 0.09 )2.39 ( 0.02 )50.71 0.97 1.00 49.4 4.71 2.39
17 50 50 0.3 1 0.00 1.22 ( 0.05 )1 ( 0 ) 6 ( 0 ) 1.87 ( 0.02 ) 0.00 NaN 1.22 1.0 6.00 1.87
21 50 100 0.3 2 0.00 1.15 ( 0.05 )1 ( 0 ) 6 ( 0 ) 2.03 ( 0.02 ) 0.00 NaN 1.15 1.0 6.00 2.03
25 50 500 0.3 10 0.00 1.14 ( 0.05 )1 ( 0 ) 6 ( 0 ) 2.24 ( 0.02 ) 0.00 NaN 1.14 1.0 6.00 2.24
29 50 1000 0.3 20 0.00 1.2 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 2.29 ( 0.02 ) 0.00 NaN 1.20 1.0 6.00 2.29
33 50 50 0.5 1 0.00 0.99 ( 0.05 )1 ( 0 ) 6 ( 0 ) 1.68 ( 0.02 ) 0.00 NaN 0.99 1.0 6.00 1.68
37 50 100 0.5 2 0.00 0.91 ( 0.04 )1 ( 0 ) 6 ( 0 ) 1.84 ( 0.02 ) 0.00 NaN 0.91 1.0 6.00 1.84
41 50 500 0.5 10 0.00 0.95 ( 0.04 )1 ( 0 ) 6 ( 0 ) 2.04 ( 0.02 ) 0.00 NaN 0.95 1.0 6.00 2.04
45 50 1000 0.5 20 0.00 0.94 ( 0.04 )1 ( 0 ) 6 ( 0 ) 2.04 ( 0.02 ) 0.00 NaN 0.94 1.0 6.00 2.04
49 50 50 0.7 1 0.00 0.66 ( 0.03 )1 ( 0 ) 6 ( 0 ) 1.44 ( 0.01 ) 0.00 NaN 0.66 1.0 6.00 1.44
53 50 100 0.7 2 0.00 0.67 ( 0.03 )1 ( 0 ) 6 ( 0 ) 1.5 ( 0.02 ) 0.00 NaN 0.67 1.0 6.00 1.50
57 50 500 0.7 10 0.00 0.7 ( 0.03 ) 1 ( 0 ) 6 ( 0 ) 1.68 ( 0.02 ) 0.00 NaN 0.70 1.0 6.00 1.68
61 50 1000 0.7 20 0.00 0.74 ( 0.03 )1 ( 0 ) 6 ( 0 ) 1.69 ( 0.02 ) 0.00 NaN 0.74 1.0 6.00 1.69
65 50 50 0.9 1 0.00 0.27 ( 0.01 )1 ( 0 ) 6 ( 0 ) 0.96 ( 0.01 ) 0.00 NaN 0.27 1.0 6.00 0.96
69 50 100 0.9 2 0.00 0.3 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) 1 ( 0.01 ) 0.00 NaN 0.30 1.0 6.00 1.00
73 50 500 0.9 10 0.00 0.29 ( 0.01 )1 ( 0 ) 6 ( 0 ) 1.1 ( 0.01 ) 0.00 NaN 0.29 1.0 6.00 1.10
77 50 1000 0.9 20 0.00 0.29 ( 0.01 )1 ( 0 ) 6 ( 0 ) 1.11 ( 0.01 ) 0.00 NaN 0.29 1.0 6.00 1.11
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & OOB & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean & OOB\\_mean\\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1 & 0.00 & 1.4 ( 0.06 ) & 1 ( 0 ) & 6 ( 0 ) & 1.98 ( 0.02 ) & 0.00 & NaN & 1.40 & 1.0 & 6.00 & 1.98 \\\\\n", + "\t5 & 50 & 100 & 0.1 & 2 & 0.00 & 1.36 ( 0.06 ) & 1 ( 0 ) & 6 ( 0 ) & 2.19 ( 0.02 ) & 0.00 & NaN & 1.36 & 1.0 & 6.00 & 2.19 \\\\\n", + "\t9 & 50 & 500 & 0.1 & 10 & 0.00 & 1.29 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.39 ( 0.02 ) & 0.00 & NaN & 1.29 & 1.0 & 6.00 & 2.39 \\\\\n", + "\t13 & 50 & 1000 & 0.1 & 20 & 0.00 & 1.35 ( 0.06 ) & 1 ( 0 ) & 6 ( 0 ) & 2.42 ( 0.02 ) & 0.00 & NaN & 1.35 & 1.0 & 6.00 & 2.42 \\\\\n", + "\t14 & 100 & 1000 & 0.1 & 10 & 0.01 & 1 ( 0.03 ) & 49.42 ( 0.7 ) & 4.71 ( 0.09 ) & 2.39 ( 0.02 ) & 50.71 & 0.97 & 1.00 & 49.4 & 4.71 & 2.39 \\\\\n", + "\t17 & 50 & 50 & 0.3 & 1 & 0.00 & 1.22 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 1.87 ( 0.02 ) & 0.00 & NaN & 1.22 & 1.0 & 6.00 & 1.87 \\\\\n", + "\t21 & 50 & 100 & 0.3 & 2 & 0.00 & 1.15 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.03 ( 0.02 ) & 0.00 & NaN & 1.15 & 1.0 & 6.00 & 2.03 \\\\\n", + "\t25 & 50 & 500 & 0.3 & 10 & 0.00 & 1.14 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.24 ( 0.02 ) & 0.00 & NaN & 1.14 & 1.0 & 6.00 & 2.24 \\\\\n", + "\t29 & 50 & 1000 & 0.3 & 20 & 0.00 & 1.2 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.29 ( 0.02 ) & 0.00 & NaN & 1.20 & 1.0 & 6.00 & 2.29 \\\\\n", + "\t33 & 50 & 50 & 0.5 & 1 & 0.00 & 0.99 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 1.68 ( 0.02 ) & 0.00 & NaN & 0.99 & 1.0 & 6.00 & 1.68 \\\\\n", + "\t37 & 50 & 100 & 0.5 & 2 & 0.00 & 0.91 ( 0.04 ) & 1 ( 0 ) & 6 ( 0 ) & 1.84 ( 0.02 ) & 0.00 & NaN & 0.91 & 1.0 & 6.00 & 1.84 \\\\\n", + "\t41 & 50 & 500 & 0.5 & 10 & 0.00 & 0.95 ( 0.04 ) & 1 ( 0 ) & 6 ( 0 ) & 2.04 ( 0.02 ) & 0.00 & NaN & 0.95 & 1.0 & 6.00 & 2.04 \\\\\n", + "\t45 & 50 & 1000 & 0.5 & 20 & 0.00 & 0.94 ( 0.04 ) & 1 ( 0 ) & 6 ( 0 ) & 2.04 ( 0.02 ) & 0.00 & NaN & 0.94 & 1.0 & 6.00 & 2.04 \\\\\n", + "\t49 & 50 & 50 & 0.7 & 1 & 0.00 & 0.66 ( 0.03 ) & 1 ( 0 ) & 6 ( 0 ) & 1.44 ( 0.01 ) & 0.00 & NaN & 0.66 & 1.0 & 6.00 & 1.44 \\\\\n", + "\t53 & 50 & 100 & 0.7 & 2 & 0.00 & 0.67 ( 0.03 ) & 1 ( 0 ) & 6 ( 0 ) & 1.5 ( 0.02 ) & 0.00 & NaN & 0.67 & 1.0 & 6.00 & 1.50 \\\\\n", + "\t57 & 50 & 500 & 0.7 & 10 & 0.00 & 0.7 ( 0.03 ) & 1 ( 0 ) & 6 ( 0 ) & 1.68 ( 0.02 ) & 0.00 & NaN & 0.70 & 1.0 & 6.00 & 1.68 \\\\\n", + "\t61 & 50 & 1000 & 0.7 & 20 & 0.00 & 0.74 ( 0.03 ) & 1 ( 0 ) & 6 ( 0 ) & 1.69 ( 0.02 ) & 0.00 & NaN & 0.74 & 1.0 & 6.00 & 1.69 \\\\\n", + "\t65 & 50 & 50 & 0.9 & 1 & 0.00 & 0.27 ( 0.01 ) & 1 ( 0 ) & 6 ( 0 ) & 0.96 ( 0.01 ) & 0.00 & NaN & 0.27 & 1.0 & 6.00 & 0.96 \\\\\n", + "\t69 & 50 & 100 & 0.9 & 2 & 0.00 & 0.3 ( 0.01 ) & 1 ( 0 ) & 6 ( 0 ) & 1 ( 0.01 ) & 0.00 & NaN & 0.30 & 1.0 & 6.00 & 1.00 \\\\\n", + "\t73 & 50 & 500 & 0.9 & 10 & 0.00 & 0.29 ( 0.01 ) & 1 ( 0 ) & 6 ( 0 ) & 1.1 ( 0.01 ) & 0.00 & NaN & 0.29 & 1.0 & 6.00 & 1.10 \\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20 & 0.00 & 0.29 ( 0.01 ) & 1 ( 0 ) & 6 ( 0 ) & 1.11 ( 0.01 ) & 0.00 & NaN & 0.29 & 1.0 & 6.00 & 1.11 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | OOB | num_select | FDR | MSE_mean | FP_mean | FN_mean | OOB_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1 | 0.00 | 1.4 ( 0.06 ) | 1 ( 0 ) | 6 ( 0 ) | 1.98 ( 0.02 ) | 0.00 | NaN | 1.40 | 1.0 | 6.00 | 1.98 |\n", + "| 5 | 50 | 100 | 0.1 | 2 | 0.00 | 1.36 ( 0.06 ) | 1 ( 0 ) | 6 ( 0 ) | 2.19 ( 0.02 ) | 0.00 | NaN | 1.36 | 1.0 | 6.00 | 2.19 |\n", + "| 9 | 50 | 500 | 0.1 | 10 | 0.00 | 1.29 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.39 ( 0.02 ) | 0.00 | NaN | 1.29 | 1.0 | 6.00 | 2.39 |\n", + "| 13 | 50 | 1000 | 0.1 | 20 | 0.00 | 1.35 ( 0.06 ) | 1 ( 0 ) | 6 ( 0 ) | 2.42 ( 0.02 ) | 0.00 | NaN | 1.35 | 1.0 | 6.00 | 2.42 |\n", + "| 14 | 100 | 1000 | 0.1 | 10 | 0.01 | 1 ( 0.03 ) | 49.42 ( 0.7 ) | 4.71 ( 0.09 ) | 2.39 ( 0.02 ) | 50.71 | 0.97 | 1.00 | 49.4 | 4.71 | 2.39 |\n", + "| 17 | 50 | 50 | 0.3 | 1 | 0.00 | 1.22 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 1.87 ( 0.02 ) | 0.00 | NaN | 1.22 | 1.0 | 6.00 | 1.87 |\n", + "| 21 | 50 | 100 | 0.3 | 2 | 0.00 | 1.15 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.03 ( 0.02 ) | 0.00 | NaN | 1.15 | 1.0 | 6.00 | 2.03 |\n", + "| 25 | 50 | 500 | 0.3 | 10 | 0.00 | 1.14 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.24 ( 0.02 ) | 0.00 | NaN | 1.14 | 1.0 | 6.00 | 2.24 |\n", + "| 29 | 50 | 1000 | 0.3 | 20 | 0.00 | 1.2 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.29 ( 0.02 ) | 0.00 | NaN | 1.20 | 1.0 | 6.00 | 2.29 |\n", + "| 33 | 50 | 50 | 0.5 | 1 | 0.00 | 0.99 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 1.68 ( 0.02 ) | 0.00 | NaN | 0.99 | 1.0 | 6.00 | 1.68 |\n", + "| 37 | 50 | 100 | 0.5 | 2 | 0.00 | 0.91 ( 0.04 ) | 1 ( 0 ) | 6 ( 0 ) | 1.84 ( 0.02 ) | 0.00 | NaN | 0.91 | 1.0 | 6.00 | 1.84 |\n", + "| 41 | 50 | 500 | 0.5 | 10 | 0.00 | 0.95 ( 0.04 ) | 1 ( 0 ) | 6 ( 0 ) | 2.04 ( 0.02 ) | 0.00 | NaN | 0.95 | 1.0 | 6.00 | 2.04 |\n", + "| 45 | 50 | 1000 | 0.5 | 20 | 0.00 | 0.94 ( 0.04 ) | 1 ( 0 ) | 6 ( 0 ) | 2.04 ( 0.02 ) | 0.00 | NaN | 0.94 | 1.0 | 6.00 | 2.04 |\n", + "| 49 | 50 | 50 | 0.7 | 1 | 0.00 | 0.66 ( 0.03 ) | 1 ( 0 ) | 6 ( 0 ) | 1.44 ( 0.01 ) | 0.00 | NaN | 0.66 | 1.0 | 6.00 | 1.44 |\n", + "| 53 | 50 | 100 | 0.7 | 2 | 0.00 | 0.67 ( 0.03 ) | 1 ( 0 ) | 6 ( 0 ) | 1.5 ( 0.02 ) | 0.00 | NaN | 0.67 | 1.0 | 6.00 | 1.50 |\n", + "| 57 | 50 | 500 | 0.7 | 10 | 0.00 | 0.7 ( 0.03 ) | 1 ( 0 ) | 6 ( 0 ) | 1.68 ( 0.02 ) | 0.00 | NaN | 0.70 | 1.0 | 6.00 | 1.68 |\n", + "| 61 | 50 | 1000 | 0.7 | 20 | 0.00 | 0.74 ( 0.03 ) | 1 ( 0 ) | 6 ( 0 ) | 1.69 ( 0.02 ) | 0.00 | NaN | 0.74 | 1.0 | 6.00 | 1.69 |\n", + "| 65 | 50 | 50 | 0.9 | 1 | 0.00 | 0.27 ( 0.01 ) | 1 ( 0 ) | 6 ( 0 ) | 0.96 ( 0.01 ) | 0.00 | NaN | 0.27 | 1.0 | 6.00 | 0.96 |\n", + "| 69 | 50 | 100 | 0.9 | 2 | 0.00 | 0.3 ( 0.01 ) | 1 ( 0 ) | 6 ( 0 ) | 1 ( 0.01 ) | 0.00 | NaN | 0.30 | 1.0 | 6.00 | 1.00 |\n", + "| 73 | 50 | 500 | 0.9 | 10 | 0.00 | 0.29 ( 0.01 ) | 1 ( 0 ) | 6 ( 0 ) | 1.1 ( 0.01 ) | 0.00 | NaN | 0.29 | 1.0 | 6.00 | 1.10 |\n", + "| 77 | 50 | 1000 | 0.9 | 20 | 0.00 | 0.29 ( 0.01 ) | 1 ( 0 ) | 6 ( 0 ) | 1.11 ( 0.01 ) | 0.00 | NaN | 0.29 | 1.0 | 6.00 | 1.11 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN \n", + "1 50 50 0.1 1 0.00 1.4 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) \n", + "5 50 100 0.1 2 0.00 1.36 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) \n", + "9 50 500 0.1 10 0.00 1.29 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "13 50 1000 0.1 20 0.00 1.35 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) \n", + "14 100 1000 0.1 10 0.01 1 ( 0.03 ) 49.42 ( 0.7 ) 4.71 ( 0.09 )\n", + "17 50 50 0.3 1 0.00 1.22 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "21 50 100 0.3 2 0.00 1.15 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "25 50 500 0.3 10 0.00 1.14 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "29 50 1000 0.3 20 0.00 1.2 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "33 50 50 0.5 1 0.00 0.99 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "37 50 100 0.5 2 0.00 0.91 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) \n", + "41 50 500 0.5 10 0.00 0.95 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) \n", + "45 50 1000 0.5 20 0.00 0.94 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) \n", + "49 50 50 0.7 1 0.00 0.66 ( 0.03 ) 1 ( 0 ) 6 ( 0 ) \n", + "53 50 100 0.7 2 0.00 0.67 ( 0.03 ) 1 ( 0 ) 6 ( 0 ) \n", + "57 50 500 0.7 10 0.00 0.7 ( 0.03 ) 1 ( 0 ) 6 ( 0 ) \n", + "61 50 1000 0.7 20 0.00 0.74 ( 0.03 ) 1 ( 0 ) 6 ( 0 ) \n", + "65 50 50 0.9 1 0.00 0.27 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) \n", + "69 50 100 0.9 2 0.00 0.3 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) \n", + "73 50 500 0.9 10 0.00 0.29 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) \n", + "77 50 1000 0.9 20 0.00 0.29 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) \n", + " OOB num_select FDR MSE_mean FP_mean FN_mean OOB_mean\n", + "1 1.98 ( 0.02 ) 0.00 NaN 1.40 1.0 6.00 1.98 \n", + "5 2.19 ( 0.02 ) 0.00 NaN 1.36 1.0 6.00 2.19 \n", + "9 2.39 ( 0.02 ) 0.00 NaN 1.29 1.0 6.00 2.39 \n", + "13 2.42 ( 0.02 ) 0.00 NaN 1.35 1.0 6.00 2.42 \n", + "14 2.39 ( 0.02 ) 50.71 0.97 1.00 49.4 4.71 2.39 \n", + "17 1.87 ( 0.02 ) 0.00 NaN 1.22 1.0 6.00 1.87 \n", + "21 2.03 ( 0.02 ) 0.00 NaN 1.15 1.0 6.00 2.03 \n", + "25 2.24 ( 0.02 ) 0.00 NaN 1.14 1.0 6.00 2.24 \n", + "29 2.29 ( 0.02 ) 0.00 NaN 1.20 1.0 6.00 2.29 \n", + "33 1.68 ( 0.02 ) 0.00 NaN 0.99 1.0 6.00 1.68 \n", + "37 1.84 ( 0.02 ) 0.00 NaN 0.91 1.0 6.00 1.84 \n", + "41 2.04 ( 0.02 ) 0.00 NaN 0.95 1.0 6.00 2.04 \n", + "45 2.04 ( 0.02 ) 0.00 NaN 0.94 1.0 6.00 2.04 \n", + "49 1.44 ( 0.01 ) 0.00 NaN 0.66 1.0 6.00 1.44 \n", + "53 1.5 ( 0.02 ) 0.00 NaN 0.67 1.0 6.00 1.50 \n", + "57 1.68 ( 0.02 ) 0.00 NaN 0.70 1.0 6.00 1.68 \n", + "61 1.69 ( 0.02 ) 0.00 NaN 0.74 1.0 6.00 1.69 \n", + "65 0.96 ( 0.01 ) 0.00 NaN 0.27 1.0 6.00 0.96 \n", + "69 1 ( 0.01 ) 0.00 NaN 0.30 1.0 6.00 1.00 \n", + "73 1.1 ( 0.01 ) 0.00 NaN 0.29 1.0 6.00 1.10 \n", + "77 1.11 ( 0.01 ) 0.00 NaN 0.29 1.0 6.00 1.11 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_toe[c(1,5,9,13,14,17,21,25,29,33,37,41,45,49,53,57,61,65,69,73,77), ]" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNOOBnum_selectFDRMSE_meanFP_meanFN_meanOOB_mean
50 50 0.1 1.00 0.00 1.4 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) 1.98 ( 0.02 )0.00 NaN 1.40 1.00 6.00 1.98
100 50 0.1 0.50 0.19 0.86 ( 0.03 )1.87 ( 0.14 )4.25 ( 0.09 )1.76 ( 0.01 )3.62 0.48 0.86 1.87 4.25 1.76
500 50 0.1 0.10 0.77 0.44 ( 0.01 )0.32 ( 0.05 )1.81 ( 0.07 )1.29 ( 0 ) 4.51 0.06 0.44 0.32 1.81 1.29
1000 50 0.1 0.05 0.86 0.34 ( 0 ) 0.15 ( 0.04 )0.93 ( 0.07 )1.15 ( 0 ) 5.22 0.02 0.34 0.15 0.93 1.15
50 100 0.1 2.00 0.00 1.36 ( 0.06 )1 ( 0 ) 6 ( 0 ) 2.19 ( 0.02 )0.00 NaN 1.36 1.00 6.00 2.19
100 100 0.1 1.00 0.12 0.93 ( 0.03 )4.11 ( 0.18 )4.17 ( 0.1 ) 1.99 ( 0.01 )5.93 0.68 0.93 4.11 4.17 1.99
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllllll}\n", + " N & P & Corr & Ratio & Stab & MSE & FP & FN & OOB & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean & OOB\\_mean\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0.1 & 1.00 & 0.00 & 1.4 ( 0.06 ) & 1 ( 0 ) & 6 ( 0 ) & 1.98 ( 0.02 ) & 0.00 & NaN & 1.40 & 1.00 & 6.00 & 1.98 \\\\\n", + "\t 100 & 50 & 0.1 & 0.50 & 0.19 & 0.86 ( 0.03 ) & 1.87 ( 0.14 ) & 4.25 ( 0.09 ) & 1.76 ( 0.01 ) & 3.62 & 0.48 & 0.86 & 1.87 & 4.25 & 1.76 \\\\\n", + "\t 500 & 50 & 0.1 & 0.10 & 0.77 & 0.44 ( 0.01 ) & 0.32 ( 0.05 ) & 1.81 ( 0.07 ) & 1.29 ( 0 ) & 4.51 & 0.06 & 0.44 & 0.32 & 1.81 & 1.29 \\\\\n", + "\t 1000 & 50 & 0.1 & 0.05 & 0.86 & 0.34 ( 0 ) & 0.15 ( 0.04 ) & 0.93 ( 0.07 ) & 1.15 ( 0 ) & 5.22 & 0.02 & 0.34 & 0.15 & 0.93 & 1.15 \\\\\n", + "\t 50 & 100 & 0.1 & 2.00 & 0.00 & 1.36 ( 0.06 ) & 1 ( 0 ) & 6 ( 0 ) & 2.19 ( 0.02 ) & 0.00 & NaN & 1.36 & 1.00 & 6.00 & 2.19 \\\\\n", + "\t 100 & 100 & 0.1 & 1.00 & 0.12 & 0.93 ( 0.03 ) & 4.11 ( 0.18 ) & 4.17 ( 0.1 ) & 1.99 ( 0.01 ) & 5.93 & 0.68 & 0.93 & 4.11 & 4.17 & 1.99 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| N | P | Corr | Ratio | Stab | MSE | FP | FN | OOB | num_select | FDR | MSE_mean | FP_mean | FN_mean | OOB_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0.1 | 1.00 | 0.00 | 1.4 ( 0.06 ) | 1 ( 0 ) | 6 ( 0 ) | 1.98 ( 0.02 ) | 0.00 | NaN | 1.40 | 1.00 | 6.00 | 1.98 |\n", + "| 100 | 50 | 0.1 | 0.50 | 0.19 | 0.86 ( 0.03 ) | 1.87 ( 0.14 ) | 4.25 ( 0.09 ) | 1.76 ( 0.01 ) | 3.62 | 0.48 | 0.86 | 1.87 | 4.25 | 1.76 |\n", + "| 500 | 50 | 0.1 | 0.10 | 0.77 | 0.44 ( 0.01 ) | 0.32 ( 0.05 ) | 1.81 ( 0.07 ) | 1.29 ( 0 ) | 4.51 | 0.06 | 0.44 | 0.32 | 1.81 | 1.29 |\n", + "| 1000 | 50 | 0.1 | 0.05 | 0.86 | 0.34 ( 0 ) | 0.15 ( 0.04 ) | 0.93 ( 0.07 ) | 1.15 ( 0 ) | 5.22 | 0.02 | 0.34 | 0.15 | 0.93 | 1.15 |\n", + "| 50 | 100 | 0.1 | 2.00 | 0.00 | 1.36 ( 0.06 ) | 1 ( 0 ) | 6 ( 0 ) | 2.19 ( 0.02 ) | 0.00 | NaN | 1.36 | 1.00 | 6.00 | 2.19 |\n", + "| 100 | 100 | 0.1 | 1.00 | 0.12 | 0.93 ( 0.03 ) | 4.11 ( 0.18 ) | 4.17 ( 0.1 ) | 1.99 ( 0.01 ) | 5.93 | 0.68 | 0.93 | 4.11 | 4.17 | 1.99 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN \n", + "1 50 50 0.1 1.00 0.00 1.4 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) \n", + "2 100 50 0.1 0.50 0.19 0.86 ( 0.03 ) 1.87 ( 0.14 ) 4.25 ( 0.09 )\n", + "3 500 50 0.1 0.10 0.77 0.44 ( 0.01 ) 0.32 ( 0.05 ) 1.81 ( 0.07 )\n", + "4 1000 50 0.1 0.05 0.86 0.34 ( 0 ) 0.15 ( 0.04 ) 0.93 ( 0.07 )\n", + "5 50 100 0.1 2.00 0.00 1.36 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) \n", + "6 100 100 0.1 1.00 0.12 0.93 ( 0.03 ) 4.11 ( 0.18 ) 4.17 ( 0.1 ) \n", + " OOB num_select FDR MSE_mean FP_mean FN_mean OOB_mean\n", + "1 1.98 ( 0.02 ) 0.00 NaN 1.40 1.00 6.00 1.98 \n", + "2 1.76 ( 0.01 ) 3.62 0.48 0.86 1.87 4.25 1.76 \n", + "3 1.29 ( 0 ) 4.51 0.06 0.44 0.32 1.81 1.29 \n", + "4 1.15 ( 0 ) 5.22 0.02 0.34 0.15 0.93 1.15 \n", + "5 2.19 ( 0.02 ) 0.00 NaN 1.36 1.00 6.00 2.19 \n", + "6 1.99 ( 0.01 ) 5.93 0.68 0.93 4.11 4.17 1.99 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNOOBnum_selectFDRMSE_meanFP_meanFN_meanOOB_mean
75 500 500 0.9 1.0 0.14 0.17 ( 0 ) 21.38 ( 0.6 ) 3 ( 0.07 ) 0.99 ( 0 ) 24.38 0.87 0.17 21.3 0.00 0.99
761000 500 0.9 0.5 0.20 0.16 ( 0 ) 18.68 ( 0.53 )2.35 ( 0.06 ) 0.96 ( 0 ) 22.33 0.83 0.16 18.6 2.35 0.96
77 50 1000 0.9 20.0 0.00 0.29 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) 1.11 ( 0.01 ) 0.00 NaN 0.29 1.0 6.00 1.11
78 100 1000 0.9 10.0 0.01 0.2 ( 0.01 ) 49.91 ( 0.83 )4.99 ( 0.09 ) 1.09 ( 0.01 ) 50.92 0.98 0.20 49.9 4.99 1.09
79 500 1000 0.9 2.0 0.06 0.19 ( 0 ) 46.34 ( 0.86 )3.13 ( 0.08 ) 1.04 ( 0 ) 49.21 0.94 0.19 46.3 3.13 1.04
801000 1000 0.9 1.0 0.09 0.18 ( 0 ) 43.52 ( 0.89 )2.7 ( 0.07 ) 1.02 ( 0 ) 46.82 0.93 0.18 43.5 2.70 1.02
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & OOB & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean & OOB\\_mean\\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 1.0 & 0.14 & 0.17 ( 0 ) & 21.38 ( 0.6 ) & 3 ( 0.07 ) & 0.99 ( 0 ) & 24.38 & 0.87 & 0.17 & 21.3 & 0.00 & 0.99 \\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.5 & 0.20 & 0.16 ( 0 ) & 18.68 ( 0.53 ) & 2.35 ( 0.06 ) & 0.96 ( 0 ) & 22.33 & 0.83 & 0.16 & 18.6 & 2.35 & 0.96 \\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.0 & 0.00 & 0.29 ( 0.01 ) & 1 ( 0 ) & 6 ( 0 ) & 1.11 ( 0.01 ) & 0.00 & NaN & 0.29 & 1.0 & 6.00 & 1.11 \\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.0 & 0.01 & 0.2 ( 0.01 ) & 49.91 ( 0.83 ) & 4.99 ( 0.09 ) & 1.09 ( 0.01 ) & 50.92 & 0.98 & 0.20 & 49.9 & 4.99 & 1.09 \\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.0 & 0.06 & 0.19 ( 0 ) & 46.34 ( 0.86 ) & 3.13 ( 0.08 ) & 1.04 ( 0 ) & 49.21 & 0.94 & 0.19 & 46.3 & 3.13 & 1.04 \\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.0 & 0.09 & 0.18 ( 0 ) & 43.52 ( 0.89 ) & 2.7 ( 0.07 ) & 1.02 ( 0 ) & 46.82 & 0.93 & 0.18 & 43.5 & 2.70 & 1.02 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | OOB | num_select | FDR | MSE_mean | FP_mean | FN_mean | OOB_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 1.0 | 0.14 | 0.17 ( 0 ) | 21.38 ( 0.6 ) | 3 ( 0.07 ) | 0.99 ( 0 ) | 24.38 | 0.87 | 0.17 | 21.3 | 0.00 | 0.99 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.5 | 0.20 | 0.16 ( 0 ) | 18.68 ( 0.53 ) | 2.35 ( 0.06 ) | 0.96 ( 0 ) | 22.33 | 0.83 | 0.16 | 18.6 | 2.35 | 0.96 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.0 | 0.00 | 0.29 ( 0.01 ) | 1 ( 0 ) | 6 ( 0 ) | 1.11 ( 0.01 ) | 0.00 | NaN | 0.29 | 1.0 | 6.00 | 1.11 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.0 | 0.01 | 0.2 ( 0.01 ) | 49.91 ( 0.83 ) | 4.99 ( 0.09 ) | 1.09 ( 0.01 ) | 50.92 | 0.98 | 0.20 | 49.9 | 4.99 | 1.09 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.0 | 0.06 | 0.19 ( 0 ) | 46.34 ( 0.86 ) | 3.13 ( 0.08 ) | 1.04 ( 0 ) | 49.21 | 0.94 | 0.19 | 46.3 | 3.13 | 1.04 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.0 | 0.09 | 0.18 ( 0 ) | 43.52 ( 0.89 ) | 2.7 ( 0.07 ) | 1.02 ( 0 ) | 46.82 | 0.93 | 0.18 | 43.5 | 2.70 | 1.02 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN \n", + "75 500 500 0.9 1.0 0.14 0.17 ( 0 ) 21.38 ( 0.6 ) 3 ( 0.07 ) \n", + "76 1000 500 0.9 0.5 0.20 0.16 ( 0 ) 18.68 ( 0.53 ) 2.35 ( 0.06 )\n", + "77 50 1000 0.9 20.0 0.00 0.29 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) \n", + "78 100 1000 0.9 10.0 0.01 0.2 ( 0.01 ) 49.91 ( 0.83 ) 4.99 ( 0.09 )\n", + "79 500 1000 0.9 2.0 0.06 0.19 ( 0 ) 46.34 ( 0.86 ) 3.13 ( 0.08 )\n", + "80 1000 1000 0.9 1.0 0.09 0.18 ( 0 ) 43.52 ( 0.89 ) 2.7 ( 0.07 ) \n", + " OOB num_select FDR MSE_mean FP_mean FN_mean OOB_mean\n", + "75 0.99 ( 0 ) 24.38 0.87 0.17 21.3 0.00 0.99 \n", + "76 0.96 ( 0 ) 22.33 0.83 0.16 18.6 2.35 0.96 \n", + "77 1.11 ( 0.01 ) 0.00 NaN 0.29 1.0 6.00 1.11 \n", + "78 1.09 ( 0.01 ) 50.92 0.98 0.20 49.9 4.99 1.09 \n", + "79 1.04 ( 0 ) 49.21 0.94 0.19 46.3 3.13 1.04 \n", + "80 1.02 ( 0 ) 46.82 0.93 0.18 43.5 2.70 1.02 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "## export\n", + "write.table(result.table_toe, '../results_summary_cts/sim_toe_rf.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_cts/1.4_sim_toe_compLasso_cts.ipynb b/simulations/notebooks_sim_cts/1.4_sim_toe_compLasso_cts.ipynb new file mode 100755 index 0000000..a071ca2 --- /dev/null +++ b/simulations/notebooks_sim_cts/1.4_sim_toe_compLasso_cts.ipynb @@ -0,0 +1,421 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize compositional lasso results on Toeplitz Simulation Scenarios for continuous outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'\n", + "\n", + "load(paste0(dir, '/toe_compLasso.RData'))" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "rou.list = seq(0.1, 0.9, 0.2)\n", + "\n", + "files = NULL\n", + "for (rou in rou.list){\n", + " for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_toeplitz_corr', rou, paste('P', p, 'N', n, sep='_'), '.RData', sep=''))\n", + " }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "avg_FDR = NULL\n", + "for (i in 1:length(files)){\n", + " sim_file = files[i]\n", + " load(sim_file, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_toe_compLasso[[i]]$Stab.table\n", + " \n", + " FDR = NULL\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "table_toe = NULL\n", + "tmp_num_select = rep(0, length(results_toe_compLasso))\n", + "for (i in 1:length(results_toe_compLasso)){\n", + " table_toe = rbind(table_toe, results_toe_compLasso[[i]][c('n', 'p', 'rou', 'FP', 'FN', 'MSE', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_toe_compLasso[[i]]$Stab.table))\n", + " \n", + "}\n", + "table_toe = as.data.frame(table_toe)\n", + "table_toe$num_select = tmp_num_select\n", + "table_toe$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
nprouFPFNMSEStabnum_selectFDR
50 50 0.1 3.68 ( 0.29 )0.06 ( 0.03 )0.88 ( 0.05 )0.56 9.62 0.33
100 50 0.1 1.51 ( 0.35 )0 ( 0 ) 0.87 ( 0.05 )0.77 7.51 0.12
500 50 0.1 0.73 ( 0.19 )0 ( 0 ) 0.99 ( 0.05 )0.88 6.73 0.07
1000 50 0.1 0.55 ( 0.17 )0 ( 0 ) 1.09 ( 0.04 )0.9 6.55 0.05
50 100 0.1 4.24 ( 0.3 ) 0.23 ( 0.06 )1.12 ( 0.1 ) 0.53 10.01 0.37
100 100 0.1 1.51 ( 0.34 )0 ( 0 ) 0.85 ( 0.04 )0.79 7.51 0.13
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllll}\n", + " n & p & rou & FP & FN & MSE & Stab & num\\_select & FDR\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0.1 & 3.68 ( 0.29 ) & 0.06 ( 0.03 ) & 0.88 ( 0.05 ) & 0.56 & 9.62 & 0.33 \\\\\n", + "\t 100 & 50 & 0.1 & 1.51 ( 0.35 ) & 0 ( 0 ) & 0.87 ( 0.05 ) & 0.77 & 7.51 & 0.12 \\\\\n", + "\t 500 & 50 & 0.1 & 0.73 ( 0.19 ) & 0 ( 0 ) & 0.99 ( 0.05 ) & 0.88 & 6.73 & 0.07 \\\\\n", + "\t 1000 & 50 & 0.1 & 0.55 ( 0.17 ) & 0 ( 0 ) & 1.09 ( 0.04 ) & 0.9 & 6.55 & 0.05 \\\\\n", + "\t 50 & 100 & 0.1 & 4.24 ( 0.3 ) & 0.23 ( 0.06 ) & 1.12 ( 0.1 ) & 0.53 & 10.01 & 0.37 \\\\\n", + "\t 100 & 100 & 0.1 & 1.51 ( 0.34 ) & 0 ( 0 ) & 0.85 ( 0.04 ) & 0.79 & 7.51 & 0.13 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| n | p | rou | FP | FN | MSE | Stab | num_select | FDR |\n", + "|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0.1 | 3.68 ( 0.29 ) | 0.06 ( 0.03 ) | 0.88 ( 0.05 ) | 0.56 | 9.62 | 0.33 |\n", + "| 100 | 50 | 0.1 | 1.51 ( 0.35 ) | 0 ( 0 ) | 0.87 ( 0.05 ) | 0.77 | 7.51 | 0.12 |\n", + "| 500 | 50 | 0.1 | 0.73 ( 0.19 ) | 0 ( 0 ) | 0.99 ( 0.05 ) | 0.88 | 6.73 | 0.07 |\n", + "| 1000 | 50 | 0.1 | 0.55 ( 0.17 ) | 0 ( 0 ) | 1.09 ( 0.04 ) | 0.9 | 6.55 | 0.05 |\n", + "| 50 | 100 | 0.1 | 4.24 ( 0.3 ) | 0.23 ( 0.06 ) | 1.12 ( 0.1 ) | 0.53 | 10.01 | 0.37 |\n", + "| 100 | 100 | 0.1 | 1.51 ( 0.34 ) | 0 ( 0 ) | 0.85 ( 0.04 ) | 0.79 | 7.51 | 0.13 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN MSE Stab num_select FDR \n", + "1 50 50 0.1 3.68 ( 0.29 ) 0.06 ( 0.03 ) 0.88 ( 0.05 ) 0.56 9.62 0.33\n", + "2 100 50 0.1 1.51 ( 0.35 ) 0 ( 0 ) 0.87 ( 0.05 ) 0.77 7.51 0.12\n", + "3 500 50 0.1 0.73 ( 0.19 ) 0 ( 0 ) 0.99 ( 0.05 ) 0.88 6.73 0.07\n", + "4 1000 50 0.1 0.55 ( 0.17 ) 0 ( 0 ) 1.09 ( 0.04 ) 0.9 6.55 0.05\n", + "5 50 100 0.1 4.24 ( 0.3 ) 0.23 ( 0.06 ) 1.12 ( 0.1 ) 0.53 10.01 0.37\n", + "6 100 100 0.1 1.51 ( 0.34 ) 0 ( 0 ) 0.85 ( 0.04 ) 0.79 7.51 0.13" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_toe <- apply(table_toe,2,as.character)\n", + "rownames(result.table_toe) = rownames(table_toe)\n", + "result.table_toe = as.data.frame(result.table_toe)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_toe$n = tidyr::extract_numeric(result.table_toe$n)\n", + "result.table_toe$p = tidyr::extract_numeric(result.table_toe$p)\n", + "result.table_toe$ratio = result.table_toe$p / result.table_toe$n\n", + "\n", + "result.table_toe = result.table_toe[c('n', 'p', 'rou', 'ratio', 'Stab', 'MSE', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_toe)[1:4] = c('N', 'P', 'Corr', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”" + ] + } + ], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_toe$Stab = as.numeric(as.character(result.table_toe$Stab))\n", + "result.table_toe$MSE_mean = as.numeric(substr(result.table_toe$MSE, start=1, stop=4))\n", + "result.table_toe$FP_mean = as.numeric(substr(result.table_toe$FP, start=1, stop=4))\n", + "result.table_toe$FN_mean = as.numeric(substr(result.table_toe$FN, start=1, stop=4))\n", + "result.table_toe$FN_mean[is.na(result.table_toe$FN_mean)] = 0\n", + "result.table_toe$num_select = as.numeric(as.character(result.table_toe$num_select))" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN num_select FDR MSE_mean FP_mean FN_mean" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check whether missing values exists\n", + "result.table_toe[rowSums(is.na(result.table_toe)) > 0,]" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
50 50 0.1 1.00 0.56 0.88 ( 0.05 )3.68 ( 0.29 )0.06 ( 0.03 ) 9.62 0.33 0.88 3.68 0.06
100 50 0.1 0.50 0.77 0.87 ( 0.05 )1.51 ( 0.35 )0 ( 0 ) 7.51 0.12 0.87 1.51 0.00
500 50 0.1 0.10 0.88 0.99 ( 0.05 )0.73 ( 0.19 )0 ( 0 ) 6.73 0.07 0.99 0.73 0.00
1000 50 0.1 0.05 0.90 1.09 ( 0.04 )0.55 ( 0.17 )0 ( 0 ) 6.55 0.05 1.09 0.55 0.00
50 100 0.1 2.00 0.53 1.12 ( 0.1 ) 4.24 ( 0.3 ) 0.23 ( 0.06 )10.01 0.37 1.12 4.24 0.23
100 100 0.1 1.00 0.79 0.85 ( 0.04 )1.51 ( 0.34 )0 ( 0 ) 7.51 0.13 0.85 1.51 0.00
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0.1 & 1.00 & 0.56 & 0.88 ( 0.05 ) & 3.68 ( 0.29 ) & 0.06 ( 0.03 ) & 9.62 & 0.33 & 0.88 & 3.68 & 0.06 \\\\\n", + "\t 100 & 50 & 0.1 & 0.50 & 0.77 & 0.87 ( 0.05 ) & 1.51 ( 0.35 ) & 0 ( 0 ) & 7.51 & 0.12 & 0.87 & 1.51 & 0.00 \\\\\n", + "\t 500 & 50 & 0.1 & 0.10 & 0.88 & 0.99 ( 0.05 ) & 0.73 ( 0.19 ) & 0 ( 0 ) & 6.73 & 0.07 & 0.99 & 0.73 & 0.00 \\\\\n", + "\t 1000 & 50 & 0.1 & 0.05 & 0.90 & 1.09 ( 0.04 ) & 0.55 ( 0.17 ) & 0 ( 0 ) & 6.55 & 0.05 & 1.09 & 0.55 & 0.00 \\\\\n", + "\t 50 & 100 & 0.1 & 2.00 & 0.53 & 1.12 ( 0.1 ) & 4.24 ( 0.3 ) & 0.23 ( 0.06 ) & 10.01 & 0.37 & 1.12 & 4.24 & 0.23 \\\\\n", + "\t 100 & 100 & 0.1 & 1.00 & 0.79 & 0.85 ( 0.04 ) & 1.51 ( 0.34 ) & 0 ( 0 ) & 7.51 & 0.13 & 0.85 & 1.51 & 0.00 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0.1 | 1.00 | 0.56 | 0.88 ( 0.05 ) | 3.68 ( 0.29 ) | 0.06 ( 0.03 ) | 9.62 | 0.33 | 0.88 | 3.68 | 0.06 |\n", + "| 100 | 50 | 0.1 | 0.50 | 0.77 | 0.87 ( 0.05 ) | 1.51 ( 0.35 ) | 0 ( 0 ) | 7.51 | 0.12 | 0.87 | 1.51 | 0.00 |\n", + "| 500 | 50 | 0.1 | 0.10 | 0.88 | 0.99 ( 0.05 ) | 0.73 ( 0.19 ) | 0 ( 0 ) | 6.73 | 0.07 | 0.99 | 0.73 | 0.00 |\n", + "| 1000 | 50 | 0.1 | 0.05 | 0.90 | 1.09 ( 0.04 ) | 0.55 ( 0.17 ) | 0 ( 0 ) | 6.55 | 0.05 | 1.09 | 0.55 | 0.00 |\n", + "| 50 | 100 | 0.1 | 2.00 | 0.53 | 1.12 ( 0.1 ) | 4.24 ( 0.3 ) | 0.23 ( 0.06 ) | 10.01 | 0.37 | 1.12 | 4.24 | 0.23 |\n", + "| 100 | 100 | 0.1 | 1.00 | 0.79 | 0.85 ( 0.04 ) | 1.51 ( 0.34 ) | 0 ( 0 ) | 7.51 | 0.13 | 0.85 | 1.51 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN num_select\n", + "1 50 50 0.1 1.00 0.56 0.88 ( 0.05 ) 3.68 ( 0.29 ) 0.06 ( 0.03 ) 9.62 \n", + "2 100 50 0.1 0.50 0.77 0.87 ( 0.05 ) 1.51 ( 0.35 ) 0 ( 0 ) 7.51 \n", + "3 500 50 0.1 0.10 0.88 0.99 ( 0.05 ) 0.73 ( 0.19 ) 0 ( 0 ) 6.73 \n", + "4 1000 50 0.1 0.05 0.90 1.09 ( 0.04 ) 0.55 ( 0.17 ) 0 ( 0 ) 6.55 \n", + "5 50 100 0.1 2.00 0.53 1.12 ( 0.1 ) 4.24 ( 0.3 ) 0.23 ( 0.06 ) 10.01 \n", + "6 100 100 0.1 1.00 0.79 0.85 ( 0.04 ) 1.51 ( 0.34 ) 0 ( 0 ) 7.51 \n", + " FDR MSE_mean FP_mean FN_mean\n", + "1 0.33 0.88 3.68 0.06 \n", + "2 0.12 0.87 1.51 0.00 \n", + "3 0.07 0.99 0.73 0.00 \n", + "4 0.05 1.09 0.55 0.00 \n", + "5 0.37 1.12 4.24 0.23 \n", + "6 0.13 0.85 1.51 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
75 500 500 0.9 1.0 0.41 0.34 ( 0.01 ) 8.17 ( 0.48 ) 0.17 ( 0.04 ) 14.00 0.54 0.34 8.17 0.17
761000 500 0.9 0.5 0.58 0.32 ( 0 ) 4.24 ( 0.3 ) 0.01 ( 0.01 ) 10.23 0.37 0.32 4.24 0.01
77 50 1000 0.9 20.0 0.19 1.04 ( 0.06 ) 5.24 ( 0.46 ) 4.23 ( 0.08 ) 7.01 0.6 1.04 5.24 4.23
78 100 1000 0.9 10.0 0.22 0.67 ( 0.02 ) 9.03 ( 0.73 ) 3.02 ( 0.07 ) 12.01 0.66 0.67 9.03 3.02
79 500 1000 0.9 2.0 0.34 0.35 ( 0.01 ) 10.52 ( 0.68 )0.32 ( 0.05 ) 16.20 0.59 0.35 10.50 0.32
801000 1000 0.9 1.0 0.57 0.33 ( 0 ) 4.48 ( 0.3 ) 0.01 ( 0.01 ) 10.47 0.39 0.33 4.48 0.01
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 1.0 & 0.41 & 0.34 ( 0.01 ) & 8.17 ( 0.48 ) & 0.17 ( 0.04 ) & 14.00 & 0.54 & 0.34 & 8.17 & 0.17 \\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.5 & 0.58 & 0.32 ( 0 ) & 4.24 ( 0.3 ) & 0.01 ( 0.01 ) & 10.23 & 0.37 & 0.32 & 4.24 & 0.01 \\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.0 & 0.19 & 1.04 ( 0.06 ) & 5.24 ( 0.46 ) & 4.23 ( 0.08 ) & 7.01 & 0.6 & 1.04 & 5.24 & 4.23 \\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.0 & 0.22 & 0.67 ( 0.02 ) & 9.03 ( 0.73 ) & 3.02 ( 0.07 ) & 12.01 & 0.66 & 0.67 & 9.03 & 3.02 \\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.0 & 0.34 & 0.35 ( 0.01 ) & 10.52 ( 0.68 ) & 0.32 ( 0.05 ) & 16.20 & 0.59 & 0.35 & 10.50 & 0.32 \\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.0 & 0.57 & 0.33 ( 0 ) & 4.48 ( 0.3 ) & 0.01 ( 0.01 ) & 10.47 & 0.39 & 0.33 & 4.48 & 0.01 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 1.0 | 0.41 | 0.34 ( 0.01 ) | 8.17 ( 0.48 ) | 0.17 ( 0.04 ) | 14.00 | 0.54 | 0.34 | 8.17 | 0.17 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.5 | 0.58 | 0.32 ( 0 ) | 4.24 ( 0.3 ) | 0.01 ( 0.01 ) | 10.23 | 0.37 | 0.32 | 4.24 | 0.01 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.0 | 0.19 | 1.04 ( 0.06 ) | 5.24 ( 0.46 ) | 4.23 ( 0.08 ) | 7.01 | 0.6 | 1.04 | 5.24 | 4.23 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.0 | 0.22 | 0.67 ( 0.02 ) | 9.03 ( 0.73 ) | 3.02 ( 0.07 ) | 12.01 | 0.66 | 0.67 | 9.03 | 3.02 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.0 | 0.34 | 0.35 ( 0.01 ) | 10.52 ( 0.68 ) | 0.32 ( 0.05 ) | 16.20 | 0.59 | 0.35 | 10.50 | 0.32 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.0 | 0.57 | 0.33 ( 0 ) | 4.48 ( 0.3 ) | 0.01 ( 0.01 ) | 10.47 | 0.39 | 0.33 | 4.48 | 0.01 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN \n", + "75 500 500 0.9 1.0 0.41 0.34 ( 0.01 ) 8.17 ( 0.48 ) 0.17 ( 0.04 )\n", + "76 1000 500 0.9 0.5 0.58 0.32 ( 0 ) 4.24 ( 0.3 ) 0.01 ( 0.01 )\n", + "77 50 1000 0.9 20.0 0.19 1.04 ( 0.06 ) 5.24 ( 0.46 ) 4.23 ( 0.08 )\n", + "78 100 1000 0.9 10.0 0.22 0.67 ( 0.02 ) 9.03 ( 0.73 ) 3.02 ( 0.07 )\n", + "79 500 1000 0.9 2.0 0.34 0.35 ( 0.01 ) 10.52 ( 0.68 ) 0.32 ( 0.05 )\n", + "80 1000 1000 0.9 1.0 0.57 0.33 ( 0 ) 4.48 ( 0.3 ) 0.01 ( 0.01 )\n", + " num_select FDR MSE_mean FP_mean FN_mean\n", + "75 14.00 0.54 0.34 8.17 0.17 \n", + "76 10.23 0.37 0.32 4.24 0.01 \n", + "77 7.01 0.6 1.04 5.24 4.23 \n", + "78 12.01 0.66 0.67 9.03 3.02 \n", + "79 16.20 0.59 0.35 10.50 0.32 \n", + "80 10.47 0.39 0.33 4.48 0.01 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(result.table_toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "## export\n", + "write.table(result.table_toe, '../results_summary_cts/sim_toe_compLasso.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_cts/2.1_sim_block_lasso_cts.ipynb b/simulations/notebooks_sim_cts/2.1_sim_block_lasso_cts.ipynb new file mode 100755 index 0000000..427211a --- /dev/null +++ b/simulations/notebooks_sim_cts/2.1_sim_block_lasso_cts.ipynb @@ -0,0 +1,482 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize lasso results on Block Simulation Scenarios for continuous outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'\n", + "\n", + "load(paste0(dir, '/block_Lasso.RData'))" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "rou.list = seq(0.1, 0.9, 0.2)\n", + "\n", + "files = NULL\n", + "for (rou in rou.list){\n", + " for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_block_corr', rou, paste('P', p, 'N', n, sep='_'), '.RData', sep=''))\n", + " }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "avg_FDR = NULL\n", + "for (i in 1:length(files)){\n", + " sim_file = files[i]\n", + " load(sim_file, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_block_lasso[[i]]$Stab.table\n", + " \n", + " FDR = NULL\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "table_block = NULL\n", + "tmp_num_select = rep(0, length(results_block_lasso))\n", + "for (i in 1:length(results_block_lasso)){\n", + " table_block = rbind(table_block, results_block_lasso[[i]][c('n', 'p', 'rou', 'FP', 'FN', 'MSE', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_block_lasso[[i]]$Stab.table))\n", + " \n", + "}\n", + "table_block = as.data.frame(table_block)\n", + "table_block$num_select = tmp_num_select\n", + "table_block$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
nprouFPFNMSEStabnum_selectFDR
50 50 0.1 3.52 ( 0.22 )4.92 ( 0.08 )0.36 ( 0.01 )0.05 3.60 0.65
100 50 0.1 2.71 ( 0.25 )4.4 ( 0.1 ) 0.31 ( 0.01 )0.18 3.31 0.42
500 50 0.1 5.42 ( 0.25 )1.97 ( 0.11 )0.29 ( 0 ) 0.35 8.45 0.48
1000 50 0.1 4.91 ( 0.2 ) 1.57 ( 0.09 )0.28 ( 0 ) 0.44 8.34 0.44
50 100 0.1 4.73 ( 0.22 )4.79 ( 0.08 )0.37 ( 0.02 )0.06 4.94 0.72
100 100 0.1 3 ( 0.15 ) 4.75 ( 0.09 )0.34 ( 0.01 )0.13 3.25 0.57
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllll}\n", + " n & p & rou & FP & FN & MSE & Stab & num\\_select & FDR\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0.1 & 3.52 ( 0.22 ) & 4.92 ( 0.08 ) & 0.36 ( 0.01 ) & 0.05 & 3.60 & 0.65 \\\\\n", + "\t 100 & 50 & 0.1 & 2.71 ( 0.25 ) & 4.4 ( 0.1 ) & 0.31 ( 0.01 ) & 0.18 & 3.31 & 0.42 \\\\\n", + "\t 500 & 50 & 0.1 & 5.42 ( 0.25 ) & 1.97 ( 0.11 ) & 0.29 ( 0 ) & 0.35 & 8.45 & 0.48 \\\\\n", + "\t 1000 & 50 & 0.1 & 4.91 ( 0.2 ) & 1.57 ( 0.09 ) & 0.28 ( 0 ) & 0.44 & 8.34 & 0.44 \\\\\n", + "\t 50 & 100 & 0.1 & 4.73 ( 0.22 ) & 4.79 ( 0.08 ) & 0.37 ( 0.02 ) & 0.06 & 4.94 & 0.72 \\\\\n", + "\t 100 & 100 & 0.1 & 3 ( 0.15 ) & 4.75 ( 0.09 ) & 0.34 ( 0.01 ) & 0.13 & 3.25 & 0.57 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| n | p | rou | FP | FN | MSE | Stab | num_select | FDR |\n", + "|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0.1 | 3.52 ( 0.22 ) | 4.92 ( 0.08 ) | 0.36 ( 0.01 ) | 0.05 | 3.60 | 0.65 |\n", + "| 100 | 50 | 0.1 | 2.71 ( 0.25 ) | 4.4 ( 0.1 ) | 0.31 ( 0.01 ) | 0.18 | 3.31 | 0.42 |\n", + "| 500 | 50 | 0.1 | 5.42 ( 0.25 ) | 1.97 ( 0.11 ) | 0.29 ( 0 ) | 0.35 | 8.45 | 0.48 |\n", + "| 1000 | 50 | 0.1 | 4.91 ( 0.2 ) | 1.57 ( 0.09 ) | 0.28 ( 0 ) | 0.44 | 8.34 | 0.44 |\n", + "| 50 | 100 | 0.1 | 4.73 ( 0.22 ) | 4.79 ( 0.08 ) | 0.37 ( 0.02 ) | 0.06 | 4.94 | 0.72 |\n", + "| 100 | 100 | 0.1 | 3 ( 0.15 ) | 4.75 ( 0.09 ) | 0.34 ( 0.01 ) | 0.13 | 3.25 | 0.57 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN MSE Stab num_select FDR \n", + "1 50 50 0.1 3.52 ( 0.22 ) 4.92 ( 0.08 ) 0.36 ( 0.01 ) 0.05 3.60 0.65\n", + "2 100 50 0.1 2.71 ( 0.25 ) 4.4 ( 0.1 ) 0.31 ( 0.01 ) 0.18 3.31 0.42\n", + "3 500 50 0.1 5.42 ( 0.25 ) 1.97 ( 0.11 ) 0.29 ( 0 ) 0.35 8.45 0.48\n", + "4 1000 50 0.1 4.91 ( 0.2 ) 1.57 ( 0.09 ) 0.28 ( 0 ) 0.44 8.34 0.44\n", + "5 50 100 0.1 4.73 ( 0.22 ) 4.79 ( 0.08 ) 0.37 ( 0.02 ) 0.06 4.94 0.72\n", + "6 100 100 0.1 3 ( 0.15 ) 4.75 ( 0.09 ) 0.34 ( 0.01 ) 0.13 3.25 0.57" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_block <- apply(table_block,2,as.character)\n", + "rownames(result.table_block) = rownames(table_block)\n", + "result.table_block = as.data.frame(result.table_block)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_block$n = tidyr::extract_numeric(result.table_block$n)\n", + "result.table_block$p = tidyr::extract_numeric(result.table_block$p)\n", + "result.table_block$ratio = result.table_block$p / result.table_block$n\n", + "\n", + "result.table_block = result.table_block[c('n', 'p', 'rou', 'ratio', 'Stab', 'MSE', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_block)[1:4] = c('N', 'P', 'Corr', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”" + ] + } + ], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_block$Stab = as.numeric(as.character(result.table_block$Stab))\n", + "result.table_block$MSE_mean = as.numeric(substr(result.table_block$MSE, start=1, stop=4))\n", + "result.table_block$FP_mean = as.numeric(substr(result.table_block$FP, start=1, stop=4))\n", + "result.table_block$FN_mean = as.numeric(substr(result.table_block$FN, start=1, stop=4))\n", + "result.table_block$FN_mean[is.na(result.table_block$FN_mean)] = 0\n", + "result.table_block$num_select = as.numeric(as.character(result.table_block$num_select))" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
6100 100 0.1 1 0.13 0.34 ( 0.01 )3 ( 0.15 ) 4.75 ( 0.09 )3.25 0.57 0.34 NA 4.75
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t6 & 100 & 100 & 0.1 & 1 & 0.13 & 0.34 ( 0.01 ) & 3 ( 0.15 ) & 4.75 ( 0.09 ) & 3.25 & 0.57 & 0.34 & NA & 4.75 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 6 | 100 | 100 | 0.1 | 1 | 0.13 | 0.34 ( 0.01 ) | 3 ( 0.15 ) | 4.75 ( 0.09 ) | 3.25 | 0.57 | 0.34 | NA | 4.75 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN num_select\n", + "6 100 100 0.1 1 0.13 0.34 ( 0.01 ) 3 ( 0.15 ) 4.75 ( 0.09 ) 3.25 \n", + " FDR MSE_mean FP_mean FN_mean\n", + "6 0.57 0.34 NA 4.75 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check whether missing values exists\n", + "result.table_block[rowSums(is.na(result.table_block)) > 0,]" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "# recover values\n", + "result.table_block$FP_mean[is.na(result.table_block$FP_mean)] = 3" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
6100 100 0.1 1 0.13 0.34 ( 0.01 )3 ( 0.15 ) 4.75 ( 0.09 )3.25 0.57 0.34 3 4.75
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t6 & 100 & 100 & 0.1 & 1 & 0.13 & 0.34 ( 0.01 ) & 3 ( 0.15 ) & 4.75 ( 0.09 ) & 3.25 & 0.57 & 0.34 & 3 & 4.75 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 6 | 100 | 100 | 0.1 | 1 | 0.13 | 0.34 ( 0.01 ) | 3 ( 0.15 ) | 4.75 ( 0.09 ) | 3.25 | 0.57 | 0.34 | 3 | 4.75 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN num_select\n", + "6 100 100 0.1 1 0.13 0.34 ( 0.01 ) 3 ( 0.15 ) 4.75 ( 0.09 ) 3.25 \n", + " FDR MSE_mean FP_mean FN_mean\n", + "6 0.57 0.34 3 4.75 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_block[6, ]" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
50 50 0.1 1.00 0.05 0.36 ( 0.01 )3.52 ( 0.22 )4.92 ( 0.08 )3.60 0.65 0.36 3.52 4.92
100 50 0.1 0.50 0.18 0.31 ( 0.01 )2.71 ( 0.25 )4.4 ( 0.1 ) 3.31 0.42 0.31 2.71 4.40
500 50 0.1 0.10 0.35 0.29 ( 0 ) 5.42 ( 0.25 )1.97 ( 0.11 )8.45 0.48 0.29 5.42 1.97
1000 50 0.1 0.05 0.44 0.28 ( 0 ) 4.91 ( 0.2 ) 1.57 ( 0.09 )8.34 0.44 0.28 4.91 1.57
50 100 0.1 2.00 0.06 0.37 ( 0.02 )4.73 ( 0.22 )4.79 ( 0.08 )4.94 0.72 0.37 4.73 4.79
100 100 0.1 1.00 0.13 0.34 ( 0.01 )3 ( 0.15 ) 4.75 ( 0.09 )3.25 0.57 0.34 3.00 4.75
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0.1 & 1.00 & 0.05 & 0.36 ( 0.01 ) & 3.52 ( 0.22 ) & 4.92 ( 0.08 ) & 3.60 & 0.65 & 0.36 & 3.52 & 4.92 \\\\\n", + "\t 100 & 50 & 0.1 & 0.50 & 0.18 & 0.31 ( 0.01 ) & 2.71 ( 0.25 ) & 4.4 ( 0.1 ) & 3.31 & 0.42 & 0.31 & 2.71 & 4.40 \\\\\n", + "\t 500 & 50 & 0.1 & 0.10 & 0.35 & 0.29 ( 0 ) & 5.42 ( 0.25 ) & 1.97 ( 0.11 ) & 8.45 & 0.48 & 0.29 & 5.42 & 1.97 \\\\\n", + "\t 1000 & 50 & 0.1 & 0.05 & 0.44 & 0.28 ( 0 ) & 4.91 ( 0.2 ) & 1.57 ( 0.09 ) & 8.34 & 0.44 & 0.28 & 4.91 & 1.57 \\\\\n", + "\t 50 & 100 & 0.1 & 2.00 & 0.06 & 0.37 ( 0.02 ) & 4.73 ( 0.22 ) & 4.79 ( 0.08 ) & 4.94 & 0.72 & 0.37 & 4.73 & 4.79 \\\\\n", + "\t 100 & 100 & 0.1 & 1.00 & 0.13 & 0.34 ( 0.01 ) & 3 ( 0.15 ) & 4.75 ( 0.09 ) & 3.25 & 0.57 & 0.34 & 3.00 & 4.75 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0.1 | 1.00 | 0.05 | 0.36 ( 0.01 ) | 3.52 ( 0.22 ) | 4.92 ( 0.08 ) | 3.60 | 0.65 | 0.36 | 3.52 | 4.92 |\n", + "| 100 | 50 | 0.1 | 0.50 | 0.18 | 0.31 ( 0.01 ) | 2.71 ( 0.25 ) | 4.4 ( 0.1 ) | 3.31 | 0.42 | 0.31 | 2.71 | 4.40 |\n", + "| 500 | 50 | 0.1 | 0.10 | 0.35 | 0.29 ( 0 ) | 5.42 ( 0.25 ) | 1.97 ( 0.11 ) | 8.45 | 0.48 | 0.29 | 5.42 | 1.97 |\n", + "| 1000 | 50 | 0.1 | 0.05 | 0.44 | 0.28 ( 0 ) | 4.91 ( 0.2 ) | 1.57 ( 0.09 ) | 8.34 | 0.44 | 0.28 | 4.91 | 1.57 |\n", + "| 50 | 100 | 0.1 | 2.00 | 0.06 | 0.37 ( 0.02 ) | 4.73 ( 0.22 ) | 4.79 ( 0.08 ) | 4.94 | 0.72 | 0.37 | 4.73 | 4.79 |\n", + "| 100 | 100 | 0.1 | 1.00 | 0.13 | 0.34 ( 0.01 ) | 3 ( 0.15 ) | 4.75 ( 0.09 ) | 3.25 | 0.57 | 0.34 | 3.00 | 4.75 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN num_select\n", + "1 50 50 0.1 1.00 0.05 0.36 ( 0.01 ) 3.52 ( 0.22 ) 4.92 ( 0.08 ) 3.60 \n", + "2 100 50 0.1 0.50 0.18 0.31 ( 0.01 ) 2.71 ( 0.25 ) 4.4 ( 0.1 ) 3.31 \n", + "3 500 50 0.1 0.10 0.35 0.29 ( 0 ) 5.42 ( 0.25 ) 1.97 ( 0.11 ) 8.45 \n", + "4 1000 50 0.1 0.05 0.44 0.28 ( 0 ) 4.91 ( 0.2 ) 1.57 ( 0.09 ) 8.34 \n", + "5 50 100 0.1 2.00 0.06 0.37 ( 0.02 ) 4.73 ( 0.22 ) 4.79 ( 0.08 ) 4.94 \n", + "6 100 100 0.1 1.00 0.13 0.34 ( 0.01 ) 3 ( 0.15 ) 4.75 ( 0.09 ) 3.25 \n", + " FDR MSE_mean FP_mean FN_mean\n", + "1 0.65 0.36 3.52 4.92 \n", + "2 0.42 0.31 2.71 4.40 \n", + "3 0.48 0.29 5.42 1.97 \n", + "4 0.44 0.28 4.91 1.57 \n", + "5 0.72 0.37 4.73 4.79 \n", + "6 0.57 0.34 3.00 4.75 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
75 500 500 0.9 1.0 0.50 0.29 ( 0 ) 6.87 ( 0.54 ) 0 ( 0 ) 11.87 0.41 0.29 6.87 0.00
761000 500 0.9 0.5 0.71 0.27 ( 0 ) 3.37 ( 0.27 ) 0 ( 0 ) 8.37 0.23 0.27 3.37 0.00
77 50 1000 0.9 20.0 0.11 2.46 ( 0.16 ) 25.37 ( 0.35 )1.73 ( 0.12 ) 28.64 0.85 2.46 25.30 1.73
78 100 1000 0.9 10.0 0.22 0.62 ( 0.03 ) 21.43 ( 0.62 )0 ( 0 ) 26.43 0.76 0.62 21.40 0.00
79 500 1000 0.9 2.0 0.46 0.3 ( 0 ) 7.99 ( 0.79 ) 0 ( 0 ) 12.99 0.42 0.30 7.99 0.00
801000 1000 0.9 1.0 0.60 0.28 ( 0 ) 4.93 ( 0.43 ) 0 ( 0 ) 9.93 0.31 0.28 4.93 0.00
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 1.0 & 0.50 & 0.29 ( 0 ) & 6.87 ( 0.54 ) & 0 ( 0 ) & 11.87 & 0.41 & 0.29 & 6.87 & 0.00 \\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.5 & 0.71 & 0.27 ( 0 ) & 3.37 ( 0.27 ) & 0 ( 0 ) & 8.37 & 0.23 & 0.27 & 3.37 & 0.00 \\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.0 & 0.11 & 2.46 ( 0.16 ) & 25.37 ( 0.35 ) & 1.73 ( 0.12 ) & 28.64 & 0.85 & 2.46 & 25.30 & 1.73 \\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.0 & 0.22 & 0.62 ( 0.03 ) & 21.43 ( 0.62 ) & 0 ( 0 ) & 26.43 & 0.76 & 0.62 & 21.40 & 0.00 \\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.0 & 0.46 & 0.3 ( 0 ) & 7.99 ( 0.79 ) & 0 ( 0 ) & 12.99 & 0.42 & 0.30 & 7.99 & 0.00 \\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.0 & 0.60 & 0.28 ( 0 ) & 4.93 ( 0.43 ) & 0 ( 0 ) & 9.93 & 0.31 & 0.28 & 4.93 & 0.00 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 1.0 | 0.50 | 0.29 ( 0 ) | 6.87 ( 0.54 ) | 0 ( 0 ) | 11.87 | 0.41 | 0.29 | 6.87 | 0.00 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.5 | 0.71 | 0.27 ( 0 ) | 3.37 ( 0.27 ) | 0 ( 0 ) | 8.37 | 0.23 | 0.27 | 3.37 | 0.00 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.0 | 0.11 | 2.46 ( 0.16 ) | 25.37 ( 0.35 ) | 1.73 ( 0.12 ) | 28.64 | 0.85 | 2.46 | 25.30 | 1.73 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.0 | 0.22 | 0.62 ( 0.03 ) | 21.43 ( 0.62 ) | 0 ( 0 ) | 26.43 | 0.76 | 0.62 | 21.40 | 0.00 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.0 | 0.46 | 0.3 ( 0 ) | 7.99 ( 0.79 ) | 0 ( 0 ) | 12.99 | 0.42 | 0.30 | 7.99 | 0.00 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.0 | 0.60 | 0.28 ( 0 ) | 4.93 ( 0.43 ) | 0 ( 0 ) | 9.93 | 0.31 | 0.28 | 4.93 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN \n", + "75 500 500 0.9 1.0 0.50 0.29 ( 0 ) 6.87 ( 0.54 ) 0 ( 0 ) \n", + "76 1000 500 0.9 0.5 0.71 0.27 ( 0 ) 3.37 ( 0.27 ) 0 ( 0 ) \n", + "77 50 1000 0.9 20.0 0.11 2.46 ( 0.16 ) 25.37 ( 0.35 ) 1.73 ( 0.12 )\n", + "78 100 1000 0.9 10.0 0.22 0.62 ( 0.03 ) 21.43 ( 0.62 ) 0 ( 0 ) \n", + "79 500 1000 0.9 2.0 0.46 0.3 ( 0 ) 7.99 ( 0.79 ) 0 ( 0 ) \n", + "80 1000 1000 0.9 1.0 0.60 0.28 ( 0 ) 4.93 ( 0.43 ) 0 ( 0 ) \n", + " num_select FDR MSE_mean FP_mean FN_mean\n", + "75 11.87 0.41 0.29 6.87 0.00 \n", + "76 8.37 0.23 0.27 3.37 0.00 \n", + "77 28.64 0.85 2.46 25.30 1.73 \n", + "78 26.43 0.76 0.62 21.40 0.00 \n", + "79 12.99 0.42 0.30 7.99 0.00 \n", + "80 9.93 0.31 0.28 4.93 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(result.table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "## export\n", + "write.table(result.table_block, '../results_summary_cts/sim_block_lasso.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_cts/2.2_sim_block_elnet_cts.ipynb b/simulations/notebooks_sim_cts/2.2_sim_block_elnet_cts.ipynb new file mode 100755 index 0000000..c718e78 --- /dev/null +++ b/simulations/notebooks_sim_cts/2.2_sim_block_elnet_cts.ipynb @@ -0,0 +1,482 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize elastic net results on Block Simulation Scenarios for continuous outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'\n", + "\n", + "load(paste0(dir, '/block_Elnet.RData'))" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "rou.list = seq(0.1, 0.9, 0.2)\n", + "\n", + "files = NULL\n", + "for (rou in rou.list){\n", + " for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_block_corr', rou, paste('P', p, 'N', n, sep='_'), '.RData', sep=''))\n", + " }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "avg_FDR = NULL\n", + "for (i in 1:length(files)){\n", + " sim_file = files[i]\n", + " load(sim_file, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_block_elnet[[i]]$Stab.table\n", + " \n", + " FDR = NULL\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "table_block = NULL\n", + "tmp_num_select = rep(0, length(results_block_elnet))\n", + "for (i in 1:length(results_block_elnet)){\n", + " table_block = rbind(table_block, results_block_elnet[[i]][c('n', 'p', 'rou', 'FP', 'FN', 'MSE', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_block_elnet[[i]]$Stab.table))\n", + " \n", + "}\n", + "table_block = as.data.frame(table_block)\n", + "table_block$num_select = tmp_num_select\n", + "table_block$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
nprouFPFNMSEStabnum_selectFDR
50 50 0.1 10.9 ( 0.97 )3.91 ( 0.15 )0.38 ( 0.02 )0.02 11.99 0.77
100 50 0.1 13.39 ( 1.06 )2.45 ( 0.16 ) 0.34 ( 0.01 ) 0.06 15.94 0.68
500 50 0.1 19.21 ( 0.81 )0.14 ( 0.04 ) 0.27 ( 0 ) 0.13 24.07 0.73
1000 50 0.1 18.76 ( 0.63 )0.02 ( 0.01 ) 0.26 ( 0 ) 0.15 23.74 0.73
50 100 0.1 9.27 ( 0.76 )4.63 ( 0.09 )0.41 ( 0.02 )0.03 9.64 0.82
100 100 0.1 10.1 ( 1.04 )3.87 ( 0.13 )0.34 ( 0.01 )0.07 11.23 0.70
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllll}\n", + " n & p & rou & FP & FN & MSE & Stab & num\\_select & FDR\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0.1 & 10.9 ( 0.97 ) & 3.91 ( 0.15 ) & 0.38 ( 0.02 ) & 0.02 & 11.99 & 0.77 \\\\\n", + "\t 100 & 50 & 0.1 & 13.39 ( 1.06 ) & 2.45 ( 0.16 ) & 0.34 ( 0.01 ) & 0.06 & 15.94 & 0.68 \\\\\n", + "\t 500 & 50 & 0.1 & 19.21 ( 0.81 ) & 0.14 ( 0.04 ) & 0.27 ( 0 ) & 0.13 & 24.07 & 0.73 \\\\\n", + "\t 1000 & 50 & 0.1 & 18.76 ( 0.63 ) & 0.02 ( 0.01 ) & 0.26 ( 0 ) & 0.15 & 23.74 & 0.73 \\\\\n", + "\t 50 & 100 & 0.1 & 9.27 ( 0.76 ) & 4.63 ( 0.09 ) & 0.41 ( 0.02 ) & 0.03 & 9.64 & 0.82 \\\\\n", + "\t 100 & 100 & 0.1 & 10.1 ( 1.04 ) & 3.87 ( 0.13 ) & 0.34 ( 0.01 ) & 0.07 & 11.23 & 0.70 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| n | p | rou | FP | FN | MSE | Stab | num_select | FDR |\n", + "|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0.1 | 10.9 ( 0.97 ) | 3.91 ( 0.15 ) | 0.38 ( 0.02 ) | 0.02 | 11.99 | 0.77 |\n", + "| 100 | 50 | 0.1 | 13.39 ( 1.06 ) | 2.45 ( 0.16 ) | 0.34 ( 0.01 ) | 0.06 | 15.94 | 0.68 |\n", + "| 500 | 50 | 0.1 | 19.21 ( 0.81 ) | 0.14 ( 0.04 ) | 0.27 ( 0 ) | 0.13 | 24.07 | 0.73 |\n", + "| 1000 | 50 | 0.1 | 18.76 ( 0.63 ) | 0.02 ( 0.01 ) | 0.26 ( 0 ) | 0.15 | 23.74 | 0.73 |\n", + "| 50 | 100 | 0.1 | 9.27 ( 0.76 ) | 4.63 ( 0.09 ) | 0.41 ( 0.02 ) | 0.03 | 9.64 | 0.82 |\n", + "| 100 | 100 | 0.1 | 10.1 ( 1.04 ) | 3.87 ( 0.13 ) | 0.34 ( 0.01 ) | 0.07 | 11.23 | 0.70 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN MSE Stab num_select FDR \n", + "1 50 50 0.1 10.9 ( 0.97 ) 3.91 ( 0.15 ) 0.38 ( 0.02 ) 0.02 11.99 0.77\n", + "2 100 50 0.1 13.39 ( 1.06 ) 2.45 ( 0.16 ) 0.34 ( 0.01 ) 0.06 15.94 0.68\n", + "3 500 50 0.1 19.21 ( 0.81 ) 0.14 ( 0.04 ) 0.27 ( 0 ) 0.13 24.07 0.73\n", + "4 1000 50 0.1 18.76 ( 0.63 ) 0.02 ( 0.01 ) 0.26 ( 0 ) 0.15 23.74 0.73\n", + "5 50 100 0.1 9.27 ( 0.76 ) 4.63 ( 0.09 ) 0.41 ( 0.02 ) 0.03 9.64 0.82\n", + "6 100 100 0.1 10.1 ( 1.04 ) 3.87 ( 0.13 ) 0.34 ( 0.01 ) 0.07 11.23 0.70" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_block <- apply(table_block,2,as.character)\n", + "rownames(result.table_block) = rownames(table_block)\n", + "result.table_block = as.data.frame(result.table_block)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_block$n = tidyr::extract_numeric(result.table_block$n)\n", + "result.table_block$p = tidyr::extract_numeric(result.table_block$p)\n", + "result.table_block$ratio = result.table_block$p / result.table_block$n\n", + "\n", + "result.table_block = result.table_block[c('n', 'p', 'rou', 'ratio', 'Stab', 'MSE', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_block)[1:4] = c('N', 'P', 'Corr', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”" + ] + } + ], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_block$Stab = as.numeric(as.character(result.table_block$Stab))\n", + "result.table_block$MSE_mean = as.numeric(substr(result.table_block$MSE, start=1, stop=4))\n", + "result.table_block$FP_mean = as.numeric(substr(result.table_block$FP, start=1, stop=4))\n", + "result.table_block$FN_mean = as.numeric(substr(result.table_block$FN, start=1, stop=4))\n", + "result.table_block$FN_mean[is.na(result.table_block$FN_mean)] = 0\n", + "result.table_block$num_select = as.numeric(as.character(result.table_block$num_select))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
4550 1000 0.5 20 0.04 2 ( 0.1 ) 52.83 ( 3.84 )2.29 ( 0.1 ) 55.54 0.91 NA 52.8 2.29
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t45 & 50 & 1000 & 0.5 & 20 & 0.04 & 2 ( 0.1 ) & 52.83 ( 3.84 ) & 2.29 ( 0.1 ) & 55.54 & 0.91 & NA & 52.8 & 2.29 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 45 | 50 | 1000 | 0.5 | 20 | 0.04 | 2 ( 0.1 ) | 52.83 ( 3.84 ) | 2.29 ( 0.1 ) | 55.54 | 0.91 | NA | 52.8 | 2.29 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN num_select\n", + "45 50 1000 0.5 20 0.04 2 ( 0.1 ) 52.83 ( 3.84 ) 2.29 ( 0.1 ) 55.54 \n", + " FDR MSE_mean FP_mean FN_mean\n", + "45 0.91 NA 52.8 2.29 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check whether missing values exists\n", + "result.table_block[rowSums(is.na(result.table_block)) > 0,]" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "# recover values\n", + "result.table_block$MSE_mean[45] = 2" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
4550 1000 0.5 20 0.04 2 ( 0.1 ) 52.83 ( 3.84 )2.29 ( 0.1 ) 55.54 0.91 2 52.8 2.29
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t45 & 50 & 1000 & 0.5 & 20 & 0.04 & 2 ( 0.1 ) & 52.83 ( 3.84 ) & 2.29 ( 0.1 ) & 55.54 & 0.91 & 2 & 52.8 & 2.29 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 45 | 50 | 1000 | 0.5 | 20 | 0.04 | 2 ( 0.1 ) | 52.83 ( 3.84 ) | 2.29 ( 0.1 ) | 55.54 | 0.91 | 2 | 52.8 | 2.29 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN num_select\n", + "45 50 1000 0.5 20 0.04 2 ( 0.1 ) 52.83 ( 3.84 ) 2.29 ( 0.1 ) 55.54 \n", + " FDR MSE_mean FP_mean FN_mean\n", + "45 0.91 2 52.8 2.29 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_block[45, ]" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
50 50 0.1 1.00 0.02 0.38 ( 0.02 ) 10.9 ( 0.97 ) 3.91 ( 0.15 ) 11.99 0.77 0.38 10.90 3.91
100 50 0.1 0.50 0.06 0.34 ( 0.01 ) 13.39 ( 1.06 )2.45 ( 0.16 ) 15.94 0.68 0.34 13.30 2.45
500 50 0.1 0.10 0.13 0.27 ( 0 ) 19.21 ( 0.81 )0.14 ( 0.04 ) 24.07 0.73 0.27 19.20 0.14
1000 50 0.1 0.05 0.15 0.26 ( 0 ) 18.76 ( 0.63 )0.02 ( 0.01 ) 23.74 0.73 0.26 18.70 0.02
50 100 0.1 2.00 0.03 0.41 ( 0.02 ) 9.27 ( 0.76 ) 4.63 ( 0.09 ) 9.64 0.82 0.41 9.27 4.63
100 100 0.1 1.00 0.07 0.34 ( 0.01 ) 10.1 ( 1.04 ) 3.87 ( 0.13 ) 11.23 0.7 0.34 10.10 3.87
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0.1 & 1.00 & 0.02 & 0.38 ( 0.02 ) & 10.9 ( 0.97 ) & 3.91 ( 0.15 ) & 11.99 & 0.77 & 0.38 & 10.90 & 3.91 \\\\\n", + "\t 100 & 50 & 0.1 & 0.50 & 0.06 & 0.34 ( 0.01 ) & 13.39 ( 1.06 ) & 2.45 ( 0.16 ) & 15.94 & 0.68 & 0.34 & 13.30 & 2.45 \\\\\n", + "\t 500 & 50 & 0.1 & 0.10 & 0.13 & 0.27 ( 0 ) & 19.21 ( 0.81 ) & 0.14 ( 0.04 ) & 24.07 & 0.73 & 0.27 & 19.20 & 0.14 \\\\\n", + "\t 1000 & 50 & 0.1 & 0.05 & 0.15 & 0.26 ( 0 ) & 18.76 ( 0.63 ) & 0.02 ( 0.01 ) & 23.74 & 0.73 & 0.26 & 18.70 & 0.02 \\\\\n", + "\t 50 & 100 & 0.1 & 2.00 & 0.03 & 0.41 ( 0.02 ) & 9.27 ( 0.76 ) & 4.63 ( 0.09 ) & 9.64 & 0.82 & 0.41 & 9.27 & 4.63 \\\\\n", + "\t 100 & 100 & 0.1 & 1.00 & 0.07 & 0.34 ( 0.01 ) & 10.1 ( 1.04 ) & 3.87 ( 0.13 ) & 11.23 & 0.7 & 0.34 & 10.10 & 3.87 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0.1 | 1.00 | 0.02 | 0.38 ( 0.02 ) | 10.9 ( 0.97 ) | 3.91 ( 0.15 ) | 11.99 | 0.77 | 0.38 | 10.90 | 3.91 |\n", + "| 100 | 50 | 0.1 | 0.50 | 0.06 | 0.34 ( 0.01 ) | 13.39 ( 1.06 ) | 2.45 ( 0.16 ) | 15.94 | 0.68 | 0.34 | 13.30 | 2.45 |\n", + "| 500 | 50 | 0.1 | 0.10 | 0.13 | 0.27 ( 0 ) | 19.21 ( 0.81 ) | 0.14 ( 0.04 ) | 24.07 | 0.73 | 0.27 | 19.20 | 0.14 |\n", + "| 1000 | 50 | 0.1 | 0.05 | 0.15 | 0.26 ( 0 ) | 18.76 ( 0.63 ) | 0.02 ( 0.01 ) | 23.74 | 0.73 | 0.26 | 18.70 | 0.02 |\n", + "| 50 | 100 | 0.1 | 2.00 | 0.03 | 0.41 ( 0.02 ) | 9.27 ( 0.76 ) | 4.63 ( 0.09 ) | 9.64 | 0.82 | 0.41 | 9.27 | 4.63 |\n", + "| 100 | 100 | 0.1 | 1.00 | 0.07 | 0.34 ( 0.01 ) | 10.1 ( 1.04 ) | 3.87 ( 0.13 ) | 11.23 | 0.7 | 0.34 | 10.10 | 3.87 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN \n", + "1 50 50 0.1 1.00 0.02 0.38 ( 0.02 ) 10.9 ( 0.97 ) 3.91 ( 0.15 )\n", + "2 100 50 0.1 0.50 0.06 0.34 ( 0.01 ) 13.39 ( 1.06 ) 2.45 ( 0.16 )\n", + "3 500 50 0.1 0.10 0.13 0.27 ( 0 ) 19.21 ( 0.81 ) 0.14 ( 0.04 )\n", + "4 1000 50 0.1 0.05 0.15 0.26 ( 0 ) 18.76 ( 0.63 ) 0.02 ( 0.01 )\n", + "5 50 100 0.1 2.00 0.03 0.41 ( 0.02 ) 9.27 ( 0.76 ) 4.63 ( 0.09 )\n", + "6 100 100 0.1 1.00 0.07 0.34 ( 0.01 ) 10.1 ( 1.04 ) 3.87 ( 0.13 )\n", + " num_select FDR MSE_mean FP_mean FN_mean\n", + "1 11.99 0.77 0.38 10.90 3.91 \n", + "2 15.94 0.68 0.34 13.30 2.45 \n", + "3 24.07 0.73 0.27 19.20 0.14 \n", + "4 23.74 0.73 0.26 18.70 0.02 \n", + "5 9.64 0.82 0.41 9.27 4.63 \n", + "6 11.23 0.7 0.34 10.10 3.87 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
75 500 500 0.9 1.0 0.15 0.28 ( 0 ) 32.6 ( 1.76 ) 0 ( 0 ) 37.60 0.81 0.28 32.6 0.00
761000 500 0.9 0.5 0.16 0.26 ( 0 ) 30.4 ( 1.66 ) 0 ( 0 ) 35.40 0.79 0.26 30.4 0.00
77 50 1000 0.9 20.0 0.07 3.06 ( 0.18 ) 43.09 ( 2.82 )1.57 ( 0.1 ) 46.52 0.88 3.06 43.0 1.57
78 100 1000 0.9 10.0 0.12 0.59 ( 0.03 ) 43.91 ( 1.31 )0 ( 0 ) 48.91 0.87 0.59 43.9 0.00
79 500 1000 0.9 2.0 0.12 0.29 ( 0 ) 41.57 ( 2.28 )0 ( 0 ) 46.57 0.84 0.29 41.5 0.00
801000 1000 0.9 1.0 0.13 0.27 ( 0 ) 38.76 ( 2.16 )0 ( 0 ) 43.76 0.82 0.27 38.7 0.00
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 1.0 & 0.15 & 0.28 ( 0 ) & 32.6 ( 1.76 ) & 0 ( 0 ) & 37.60 & 0.81 & 0.28 & 32.6 & 0.00 \\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.5 & 0.16 & 0.26 ( 0 ) & 30.4 ( 1.66 ) & 0 ( 0 ) & 35.40 & 0.79 & 0.26 & 30.4 & 0.00 \\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.0 & 0.07 & 3.06 ( 0.18 ) & 43.09 ( 2.82 ) & 1.57 ( 0.1 ) & 46.52 & 0.88 & 3.06 & 43.0 & 1.57 \\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.0 & 0.12 & 0.59 ( 0.03 ) & 43.91 ( 1.31 ) & 0 ( 0 ) & 48.91 & 0.87 & 0.59 & 43.9 & 0.00 \\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.0 & 0.12 & 0.29 ( 0 ) & 41.57 ( 2.28 ) & 0 ( 0 ) & 46.57 & 0.84 & 0.29 & 41.5 & 0.00 \\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.0 & 0.13 & 0.27 ( 0 ) & 38.76 ( 2.16 ) & 0 ( 0 ) & 43.76 & 0.82 & 0.27 & 38.7 & 0.00 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 1.0 | 0.15 | 0.28 ( 0 ) | 32.6 ( 1.76 ) | 0 ( 0 ) | 37.60 | 0.81 | 0.28 | 32.6 | 0.00 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.5 | 0.16 | 0.26 ( 0 ) | 30.4 ( 1.66 ) | 0 ( 0 ) | 35.40 | 0.79 | 0.26 | 30.4 | 0.00 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.0 | 0.07 | 3.06 ( 0.18 ) | 43.09 ( 2.82 ) | 1.57 ( 0.1 ) | 46.52 | 0.88 | 3.06 | 43.0 | 1.57 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.0 | 0.12 | 0.59 ( 0.03 ) | 43.91 ( 1.31 ) | 0 ( 0 ) | 48.91 | 0.87 | 0.59 | 43.9 | 0.00 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.0 | 0.12 | 0.29 ( 0 ) | 41.57 ( 2.28 ) | 0 ( 0 ) | 46.57 | 0.84 | 0.29 | 41.5 | 0.00 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.0 | 0.13 | 0.27 ( 0 ) | 38.76 ( 2.16 ) | 0 ( 0 ) | 43.76 | 0.82 | 0.27 | 38.7 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN \n", + "75 500 500 0.9 1.0 0.15 0.28 ( 0 ) 32.6 ( 1.76 ) 0 ( 0 ) \n", + "76 1000 500 0.9 0.5 0.16 0.26 ( 0 ) 30.4 ( 1.66 ) 0 ( 0 ) \n", + "77 50 1000 0.9 20.0 0.07 3.06 ( 0.18 ) 43.09 ( 2.82 ) 1.57 ( 0.1 )\n", + "78 100 1000 0.9 10.0 0.12 0.59 ( 0.03 ) 43.91 ( 1.31 ) 0 ( 0 ) \n", + "79 500 1000 0.9 2.0 0.12 0.29 ( 0 ) 41.57 ( 2.28 ) 0 ( 0 ) \n", + "80 1000 1000 0.9 1.0 0.13 0.27 ( 0 ) 38.76 ( 2.16 ) 0 ( 0 ) \n", + " num_select FDR MSE_mean FP_mean FN_mean\n", + "75 37.60 0.81 0.28 32.6 0.00 \n", + "76 35.40 0.79 0.26 30.4 0.00 \n", + "77 46.52 0.88 3.06 43.0 1.57 \n", + "78 48.91 0.87 0.59 43.9 0.00 \n", + "79 46.57 0.84 0.29 41.5 0.00 \n", + "80 43.76 0.82 0.27 38.7 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(result.table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "## export\n", + "write.table(result.table_block, '../results_summary_cts/sim_block_elnet.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_cts/2.3_sim_block_rf_cts.ipynb b/simulations/notebooks_sim_cts/2.3_sim_block_rf_cts.ipynb new file mode 100755 index 0000000..669d0af --- /dev/null +++ b/simulations/notebooks_sim_cts/2.3_sim_block_rf_cts.ipynb @@ -0,0 +1,690 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize random forests results on Block Simulation Scenarios for continuous outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'\n", + "\n", + "load(paste0(dir, '/block_RF.RData'))" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "rou.list = seq(0.1, 0.9, 0.2)\n", + "\n", + "files = NULL\n", + "for (rou in rou.list){\n", + " for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_block_corr', rou, paste('P', p, 'N', n, sep='_'), '.RData', sep=''))\n", + " }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "avg_FDR = NULL\n", + "for (i in 1:length(files)){\n", + " sim_file = files[i]\n", + " load(sim_file, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_block_rf[[i]]$Stab.table\n", + " \n", + " FDR = NULL\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "table_block = NULL\n", + "tmp_num_select = rep(0, length(results_block_rf))\n", + "for (i in 1:length(results_block_rf)){\n", + " results_block_rf[[i]]$OOB = paste(round(mean(results_block_rf[[i]]$OOB.list, na.rm=T),2),\n", + " '(', round(FSA::se(results_block_rf[[i]]$OOB.list, na.rm=T),2), ')')\n", + " table_block = rbind(table_block, results_block_rf[[i]][c('n', 'p', 'rou', 'FP', 'FN', 'MSE', 'Stab', 'OOB')])\n", + " tmp_num_select[i] = mean(rowSums(results_block_rf[[i]]$Stab.table))\n", + "}\n", + "table_block = as.data.frame(table_block)\n", + "table_block$num_select = tmp_num_select\n", + "table_block$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
nprouFPFNMSEStabOOBnum_selectFDR
50 50 0.1 1 ( 0 ) 6 ( 0 ) 0.08 ( 0 ) NaN 0.59 ( 0.01 )0.00 NaN
100 50 0.1 2.26 ( 0.17 )5.06 ( 0.12 )0.07 ( 0 ) 0.03 0.58 ( 0 ) 3.04 0.70
500 50 0.1 2.34 ( 0.16 )3.77 ( 0.14 )0.05 ( 0 ) 0.23 0.56 ( 0 ) 4.56 0.49
1000 50 0.1 2.37 ( 0.16 )2.54 ( 0.11 )0.05 ( 0 ) 0.51 0.55 ( 0 ) 5.83 0.38
50 100 0.1 1 ( 0 ) 6 ( 0 ) 0.08 ( 0 ) NaN 0.6 ( 0.01 )0.00 NaN
100 100 0.1 4.76 ( 0.27 )5.51 ( 0.09 )0.07 ( 0 ) 0.01 0.58 ( 0 ) 5.24 0.91
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|llllllllll}\n", + " n & p & rou & FP & FN & MSE & Stab & OOB & num\\_select & FDR\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0.1 & 1 ( 0 ) & 6 ( 0 ) & 0.08 ( 0 ) & NaN & 0.59 ( 0.01 ) & 0.00 & NaN \\\\\n", + "\t 100 & 50 & 0.1 & 2.26 ( 0.17 ) & 5.06 ( 0.12 ) & 0.07 ( 0 ) & 0.03 & 0.58 ( 0 ) & 3.04 & 0.70 \\\\\n", + "\t 500 & 50 & 0.1 & 2.34 ( 0.16 ) & 3.77 ( 0.14 ) & 0.05 ( 0 ) & 0.23 & 0.56 ( 0 ) & 4.56 & 0.49 \\\\\n", + "\t 1000 & 50 & 0.1 & 2.37 ( 0.16 ) & 2.54 ( 0.11 ) & 0.05 ( 0 ) & 0.51 & 0.55 ( 0 ) & 5.83 & 0.38 \\\\\n", + "\t 50 & 100 & 0.1 & 1 ( 0 ) & 6 ( 0 ) & 0.08 ( 0 ) & NaN & 0.6 ( 0.01 ) & 0.00 & NaN \\\\\n", + "\t 100 & 100 & 0.1 & 4.76 ( 0.27 ) & 5.51 ( 0.09 ) & 0.07 ( 0 ) & 0.01 & 0.58 ( 0 ) & 5.24 & 0.91 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| n | p | rou | FP | FN | MSE | Stab | OOB | num_select | FDR |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0.1 | 1 ( 0 ) | 6 ( 0 ) | 0.08 ( 0 ) | NaN | 0.59 ( 0.01 ) | 0.00 | NaN |\n", + "| 100 | 50 | 0.1 | 2.26 ( 0.17 ) | 5.06 ( 0.12 ) | 0.07 ( 0 ) | 0.03 | 0.58 ( 0 ) | 3.04 | 0.70 |\n", + "| 500 | 50 | 0.1 | 2.34 ( 0.16 ) | 3.77 ( 0.14 ) | 0.05 ( 0 ) | 0.23 | 0.56 ( 0 ) | 4.56 | 0.49 |\n", + "| 1000 | 50 | 0.1 | 2.37 ( 0.16 ) | 2.54 ( 0.11 ) | 0.05 ( 0 ) | 0.51 | 0.55 ( 0 ) | 5.83 | 0.38 |\n", + "| 50 | 100 | 0.1 | 1 ( 0 ) | 6 ( 0 ) | 0.08 ( 0 ) | NaN | 0.6 ( 0.01 ) | 0.00 | NaN |\n", + "| 100 | 100 | 0.1 | 4.76 ( 0.27 ) | 5.51 ( 0.09 ) | 0.07 ( 0 ) | 0.01 | 0.58 ( 0 ) | 5.24 | 0.91 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN MSE Stab OOB \n", + "1 50 50 0.1 1 ( 0 ) 6 ( 0 ) 0.08 ( 0 ) NaN 0.59 ( 0.01 )\n", + "2 100 50 0.1 2.26 ( 0.17 ) 5.06 ( 0.12 ) 0.07 ( 0 ) 0.03 0.58 ( 0 ) \n", + "3 500 50 0.1 2.34 ( 0.16 ) 3.77 ( 0.14 ) 0.05 ( 0 ) 0.23 0.56 ( 0 ) \n", + "4 1000 50 0.1 2.37 ( 0.16 ) 2.54 ( 0.11 ) 0.05 ( 0 ) 0.51 0.55 ( 0 ) \n", + "5 50 100 0.1 1 ( 0 ) 6 ( 0 ) 0.08 ( 0 ) NaN 0.6 ( 0.01 ) \n", + "6 100 100 0.1 4.76 ( 0.27 ) 5.51 ( 0.09 ) 0.07 ( 0 ) 0.01 0.58 ( 0 ) \n", + " num_select FDR \n", + "1 0.00 NaN\n", + "2 3.04 0.70\n", + "3 4.56 0.49\n", + "4 5.83 0.38\n", + "5 0.00 NaN\n", + "6 5.24 0.91" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_block <- apply(table_block,2,as.character)\n", + "rownames(result.table_block) = rownames(table_block)\n", + "result.table_block = as.data.frame(result.table_block)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_block$n = tidyr::extract_numeric(result.table_block$n)\n", + "result.table_block$p = tidyr::extract_numeric(result.table_block$p)\n", + "result.table_block$ratio = result.table_block$p / result.table_block$n\n", + "\n", + "result.table_block = result.table_block[c('n', 'p', 'rou', 'ratio', 'Stab', 'MSE', 'FP', 'FN', 'OOB', 'num_select', 'FDR')]\n", + "colnames(result.table_block)[1:4] = c('N', 'P', 'Corr', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”" + ] + } + ], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_block$Stab = as.numeric(as.character(result.table_block$Stab))\n", + "result.table_block$MSE_mean = as.numeric(substr(result.table_block$MSE, start=1, stop=4))\n", + "result.table_block$FP_mean = as.numeric(substr(result.table_block$FP, start=1, stop=4))\n", + "result.table_block$FN_mean = as.numeric(substr(result.table_block$FN, start=1, stop=4))\n", + "result.table_block$FN_mean[is.na(result.table_block$FN_mean)] = 0\n", + "result.table_block$OOB_mean = as.numeric(substr(result.table_block$OOB, start=1, stop=4))\n", + "result.table_block$num_select = as.numeric(as.character(result.table_block$num_select))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNOOBnum_selectFDRMSE_meanFP_meanFN_meanOOB_mean
1 50 50 0.1 1 NaN 0.08 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.59 ( 0.01 ) 0.00 NaN 0.08 NA 0.00 0.59
5 50 100 0.1 2 NaN 0.08 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.6 ( 0.01 ) 0.00 NaN 0.08 NA 0.00 0.60
9 50 500 0.1 10 NaN 0.08 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.59 ( 0.01 ) 0.00 NaN 0.08 NA 0.00 0.59
13 50 1000 0.1 20 NaN 0.08 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.59 ( 0.01 ) 0.00 NaN 0.08 NA 0.00 0.59
17 50 50 0.3 1 NaN 0.31 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) 1.14 ( 0.01 ) 0.00 NaN 0.31 NA 0.00 1.14
21 50 100 0.3 2 NaN 0.32 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) 1.2 ( 0.01 ) 0.00 NaN 0.32 NA 0.00 1.20
25 50 500 0.3 10 NaN 0.36 ( 0.02 ) 1 ( 0 ) 6 ( 0 ) 1.23 ( 0.01 ) 0.00 NaN 0.36 NA 0.00 1.23
29 50 1000 0.3 20 NaN 0.34 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) 1.26 ( 0.01 ) 0.00 NaN 0.34 NA 0.00 1.26
33 50 50 0.5 1 NaN 0.6 ( 0.03 ) 1 ( 0 ) 6 ( 0 ) 1.46 ( 0.01 ) 0.00 NaN 0.60 NA 0.00 1.46
37 50 100 0.5 2 NaN 0.6 ( 0.02 ) 1 ( 0 ) 6 ( 0 ) 1.56 ( 0.01 ) 0.00 NaN 0.60 NA 0.00 1.56
41 50 500 0.5 10 NaN 0.58 ( 0.02 ) 1 ( 0 ) 6 ( 0 ) 1.64 ( 0.02 ) 0.00 NaN 0.58 NA 0.00 1.64
45 50 1000 0.5 20 NaN 0.57 ( 0.02 ) 1 ( 0 ) 6 ( 0 ) 1.64 ( 0.02 ) 0.00 NaN 0.57 NA 0.00 1.64
49 50 50 0.7 1 NaN 0.8 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) 1.72 ( 0.02 ) 0.00 NaN 0.80 NA 0.00 1.72
53 50 100 0.7 2 NaN 0.92 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) 1.85 ( 0.02 ) 0.00 NaN 0.92 NA 0.00 1.85
57 50 500 0.7 10 NaN 0.91 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) 2 ( 0.02 ) 0.00 NaN 0.91 NA 0.00 NA
61 50 1000 0.7 20 NaN 0.91 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) 1.98 ( 0.02 ) 0.00 NaN 0.91 NA 0.00 1.98
65 50 50 0.9 1 NaN 1.1 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) 1.99 ( 0.02 ) 0.00 NaN 1.10 NA 0.00 1.99
69 50 100 0.9 2 NaN 1.11 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 2.06 ( 0.02 ) 0.00 NaN 1.11 NA 0.00 2.06
73 50 500 0.9 10 NaN 1.18 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 2.2 ( 0.02 ) 0.00 NaN 1.18 NA 0.00 2.20
75500 500 0.9 1 0.12 0.73 ( 0.01 ) 20.83 ( 0.45 )2.04 ( 0.09 ) 2 ( 0.01 ) 24.79 0.84 0.73 20.8 2.04 NA
77 50 1000 0.9 20 NaN 1.22 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 2.3 ( 0.03 ) 0.00 NaN 1.22 NA 0.00 2.30
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & OOB & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean & OOB\\_mean\\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1 & NaN & 0.08 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.59 ( 0.01 ) & 0.00 & NaN & 0.08 & NA & 0.00 & 0.59 \\\\\n", + "\t5 & 50 & 100 & 0.1 & 2 & NaN & 0.08 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.6 ( 0.01 ) & 0.00 & NaN & 0.08 & NA & 0.00 & 0.60 \\\\\n", + "\t9 & 50 & 500 & 0.1 & 10 & NaN & 0.08 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.59 ( 0.01 ) & 0.00 & NaN & 0.08 & NA & 0.00 & 0.59 \\\\\n", + "\t13 & 50 & 1000 & 0.1 & 20 & NaN & 0.08 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.59 ( 0.01 ) & 0.00 & NaN & 0.08 & NA & 0.00 & 0.59 \\\\\n", + "\t17 & 50 & 50 & 0.3 & 1 & NaN & 0.31 ( 0.01 ) & 1 ( 0 ) & 6 ( 0 ) & 1.14 ( 0.01 ) & 0.00 & NaN & 0.31 & NA & 0.00 & 1.14 \\\\\n", + "\t21 & 50 & 100 & 0.3 & 2 & NaN & 0.32 ( 0.01 ) & 1 ( 0 ) & 6 ( 0 ) & 1.2 ( 0.01 ) & 0.00 & NaN & 0.32 & NA & 0.00 & 1.20 \\\\\n", + "\t25 & 50 & 500 & 0.3 & 10 & NaN & 0.36 ( 0.02 ) & 1 ( 0 ) & 6 ( 0 ) & 1.23 ( 0.01 ) & 0.00 & NaN & 0.36 & NA & 0.00 & 1.23 \\\\\n", + "\t29 & 50 & 1000 & 0.3 & 20 & NaN & 0.34 ( 0.01 ) & 1 ( 0 ) & 6 ( 0 ) & 1.26 ( 0.01 ) & 0.00 & NaN & 0.34 & NA & 0.00 & 1.26 \\\\\n", + "\t33 & 50 & 50 & 0.5 & 1 & NaN & 0.6 ( 0.03 ) & 1 ( 0 ) & 6 ( 0 ) & 1.46 ( 0.01 ) & 0.00 & NaN & 0.60 & NA & 0.00 & 1.46 \\\\\n", + "\t37 & 50 & 100 & 0.5 & 2 & NaN & 0.6 ( 0.02 ) & 1 ( 0 ) & 6 ( 0 ) & 1.56 ( 0.01 ) & 0.00 & NaN & 0.60 & NA & 0.00 & 1.56 \\\\\n", + "\t41 & 50 & 500 & 0.5 & 10 & NaN & 0.58 ( 0.02 ) & 1 ( 0 ) & 6 ( 0 ) & 1.64 ( 0.02 ) & 0.00 & NaN & 0.58 & NA & 0.00 & 1.64 \\\\\n", + "\t45 & 50 & 1000 & 0.5 & 20 & NaN & 0.57 ( 0.02 ) & 1 ( 0 ) & 6 ( 0 ) & 1.64 ( 0.02 ) & 0.00 & NaN & 0.57 & NA & 0.00 & 1.64 \\\\\n", + "\t49 & 50 & 50 & 0.7 & 1 & NaN & 0.8 ( 0.04 ) & 1 ( 0 ) & 6 ( 0 ) & 1.72 ( 0.02 ) & 0.00 & NaN & 0.80 & NA & 0.00 & 1.72 \\\\\n", + "\t53 & 50 & 100 & 0.7 & 2 & NaN & 0.92 ( 0.04 ) & 1 ( 0 ) & 6 ( 0 ) & 1.85 ( 0.02 ) & 0.00 & NaN & 0.92 & NA & 0.00 & 1.85 \\\\\n", + "\t57 & 50 & 500 & 0.7 & 10 & NaN & 0.91 ( 0.04 ) & 1 ( 0 ) & 6 ( 0 ) & 2 ( 0.02 ) & 0.00 & NaN & 0.91 & NA & 0.00 & NA \\\\\n", + "\t61 & 50 & 1000 & 0.7 & 20 & NaN & 0.91 ( 0.04 ) & 1 ( 0 ) & 6 ( 0 ) & 1.98 ( 0.02 ) & 0.00 & NaN & 0.91 & NA & 0.00 & 1.98 \\\\\n", + "\t65 & 50 & 50 & 0.9 & 1 & NaN & 1.1 ( 0.04 ) & 1 ( 0 ) & 6 ( 0 ) & 1.99 ( 0.02 ) & 0.00 & NaN & 1.10 & NA & 0.00 & 1.99 \\\\\n", + "\t69 & 50 & 100 & 0.9 & 2 & NaN & 1.11 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.06 ( 0.02 ) & 0.00 & NaN & 1.11 & NA & 0.00 & 2.06 \\\\\n", + "\t73 & 50 & 500 & 0.9 & 10 & NaN & 1.18 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.2 ( 0.02 ) & 0.00 & NaN & 1.18 & NA & 0.00 & 2.20 \\\\\n", + "\t75 & 500 & 500 & 0.9 & 1 & 0.12 & 0.73 ( 0.01 ) & 20.83 ( 0.45 ) & 2.04 ( 0.09 ) & 2 ( 0.01 ) & 24.79 & 0.84 & 0.73 & 20.8 & 2.04 & NA \\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20 & NaN & 1.22 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.3 ( 0.03 ) & 0.00 & NaN & 1.22 & NA & 0.00 & 2.30 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | OOB | num_select | FDR | MSE_mean | FP_mean | FN_mean | OOB_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1 | NaN | 0.08 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.59 ( 0.01 ) | 0.00 | NaN | 0.08 | NA | 0.00 | 0.59 |\n", + "| 5 | 50 | 100 | 0.1 | 2 | NaN | 0.08 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.6 ( 0.01 ) | 0.00 | NaN | 0.08 | NA | 0.00 | 0.60 |\n", + "| 9 | 50 | 500 | 0.1 | 10 | NaN | 0.08 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.59 ( 0.01 ) | 0.00 | NaN | 0.08 | NA | 0.00 | 0.59 |\n", + "| 13 | 50 | 1000 | 0.1 | 20 | NaN | 0.08 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.59 ( 0.01 ) | 0.00 | NaN | 0.08 | NA | 0.00 | 0.59 |\n", + "| 17 | 50 | 50 | 0.3 | 1 | NaN | 0.31 ( 0.01 ) | 1 ( 0 ) | 6 ( 0 ) | 1.14 ( 0.01 ) | 0.00 | NaN | 0.31 | NA | 0.00 | 1.14 |\n", + "| 21 | 50 | 100 | 0.3 | 2 | NaN | 0.32 ( 0.01 ) | 1 ( 0 ) | 6 ( 0 ) | 1.2 ( 0.01 ) | 0.00 | NaN | 0.32 | NA | 0.00 | 1.20 |\n", + "| 25 | 50 | 500 | 0.3 | 10 | NaN | 0.36 ( 0.02 ) | 1 ( 0 ) | 6 ( 0 ) | 1.23 ( 0.01 ) | 0.00 | NaN | 0.36 | NA | 0.00 | 1.23 |\n", + "| 29 | 50 | 1000 | 0.3 | 20 | NaN | 0.34 ( 0.01 ) | 1 ( 0 ) | 6 ( 0 ) | 1.26 ( 0.01 ) | 0.00 | NaN | 0.34 | NA | 0.00 | 1.26 |\n", + "| 33 | 50 | 50 | 0.5 | 1 | NaN | 0.6 ( 0.03 ) | 1 ( 0 ) | 6 ( 0 ) | 1.46 ( 0.01 ) | 0.00 | NaN | 0.60 | NA | 0.00 | 1.46 |\n", + "| 37 | 50 | 100 | 0.5 | 2 | NaN | 0.6 ( 0.02 ) | 1 ( 0 ) | 6 ( 0 ) | 1.56 ( 0.01 ) | 0.00 | NaN | 0.60 | NA | 0.00 | 1.56 |\n", + "| 41 | 50 | 500 | 0.5 | 10 | NaN | 0.58 ( 0.02 ) | 1 ( 0 ) | 6 ( 0 ) | 1.64 ( 0.02 ) | 0.00 | NaN | 0.58 | NA | 0.00 | 1.64 |\n", + "| 45 | 50 | 1000 | 0.5 | 20 | NaN | 0.57 ( 0.02 ) | 1 ( 0 ) | 6 ( 0 ) | 1.64 ( 0.02 ) | 0.00 | NaN | 0.57 | NA | 0.00 | 1.64 |\n", + "| 49 | 50 | 50 | 0.7 | 1 | NaN | 0.8 ( 0.04 ) | 1 ( 0 ) | 6 ( 0 ) | 1.72 ( 0.02 ) | 0.00 | NaN | 0.80 | NA | 0.00 | 1.72 |\n", + "| 53 | 50 | 100 | 0.7 | 2 | NaN | 0.92 ( 0.04 ) | 1 ( 0 ) | 6 ( 0 ) | 1.85 ( 0.02 ) | 0.00 | NaN | 0.92 | NA | 0.00 | 1.85 |\n", + "| 57 | 50 | 500 | 0.7 | 10 | NaN | 0.91 ( 0.04 ) | 1 ( 0 ) | 6 ( 0 ) | 2 ( 0.02 ) | 0.00 | NaN | 0.91 | NA | 0.00 | NA |\n", + "| 61 | 50 | 1000 | 0.7 | 20 | NaN | 0.91 ( 0.04 ) | 1 ( 0 ) | 6 ( 0 ) | 1.98 ( 0.02 ) | 0.00 | NaN | 0.91 | NA | 0.00 | 1.98 |\n", + "| 65 | 50 | 50 | 0.9 | 1 | NaN | 1.1 ( 0.04 ) | 1 ( 0 ) | 6 ( 0 ) | 1.99 ( 0.02 ) | 0.00 | NaN | 1.10 | NA | 0.00 | 1.99 |\n", + "| 69 | 50 | 100 | 0.9 | 2 | NaN | 1.11 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.06 ( 0.02 ) | 0.00 | NaN | 1.11 | NA | 0.00 | 2.06 |\n", + "| 73 | 50 | 500 | 0.9 | 10 | NaN | 1.18 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.2 ( 0.02 ) | 0.00 | NaN | 1.18 | NA | 0.00 | 2.20 |\n", + "| 75 | 500 | 500 | 0.9 | 1 | 0.12 | 0.73 ( 0.01 ) | 20.83 ( 0.45 ) | 2.04 ( 0.09 ) | 2 ( 0.01 ) | 24.79 | 0.84 | 0.73 | 20.8 | 2.04 | NA |\n", + "| 77 | 50 | 1000 | 0.9 | 20 | NaN | 1.22 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.3 ( 0.03 ) | 0.00 | NaN | 1.22 | NA | 0.00 | 2.30 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN \n", + "1 50 50 0.1 1 NaN 0.08 ( 0 ) 1 ( 0 ) 6 ( 0 ) \n", + "5 50 100 0.1 2 NaN 0.08 ( 0 ) 1 ( 0 ) 6 ( 0 ) \n", + "9 50 500 0.1 10 NaN 0.08 ( 0 ) 1 ( 0 ) 6 ( 0 ) \n", + "13 50 1000 0.1 20 NaN 0.08 ( 0 ) 1 ( 0 ) 6 ( 0 ) \n", + "17 50 50 0.3 1 NaN 0.31 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) \n", + "21 50 100 0.3 2 NaN 0.32 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) \n", + "25 50 500 0.3 10 NaN 0.36 ( 0.02 ) 1 ( 0 ) 6 ( 0 ) \n", + "29 50 1000 0.3 20 NaN 0.34 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) \n", + "33 50 50 0.5 1 NaN 0.6 ( 0.03 ) 1 ( 0 ) 6 ( 0 ) \n", + "37 50 100 0.5 2 NaN 0.6 ( 0.02 ) 1 ( 0 ) 6 ( 0 ) \n", + "41 50 500 0.5 10 NaN 0.58 ( 0.02 ) 1 ( 0 ) 6 ( 0 ) \n", + "45 50 1000 0.5 20 NaN 0.57 ( 0.02 ) 1 ( 0 ) 6 ( 0 ) \n", + "49 50 50 0.7 1 NaN 0.8 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) \n", + "53 50 100 0.7 2 NaN 0.92 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) \n", + "57 50 500 0.7 10 NaN 0.91 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) \n", + "61 50 1000 0.7 20 NaN 0.91 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) \n", + "65 50 50 0.9 1 NaN 1.1 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) \n", + "69 50 100 0.9 2 NaN 1.11 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "73 50 500 0.9 10 NaN 1.18 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "75 500 500 0.9 1 0.12 0.73 ( 0.01 ) 20.83 ( 0.45 ) 2.04 ( 0.09 )\n", + "77 50 1000 0.9 20 NaN 1.22 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + " OOB num_select FDR MSE_mean FP_mean FN_mean OOB_mean\n", + "1 0.59 ( 0.01 ) 0.00 NaN 0.08 NA 0.00 0.59 \n", + "5 0.6 ( 0.01 ) 0.00 NaN 0.08 NA 0.00 0.60 \n", + "9 0.59 ( 0.01 ) 0.00 NaN 0.08 NA 0.00 0.59 \n", + "13 0.59 ( 0.01 ) 0.00 NaN 0.08 NA 0.00 0.59 \n", + "17 1.14 ( 0.01 ) 0.00 NaN 0.31 NA 0.00 1.14 \n", + "21 1.2 ( 0.01 ) 0.00 NaN 0.32 NA 0.00 1.20 \n", + "25 1.23 ( 0.01 ) 0.00 NaN 0.36 NA 0.00 1.23 \n", + "29 1.26 ( 0.01 ) 0.00 NaN 0.34 NA 0.00 1.26 \n", + "33 1.46 ( 0.01 ) 0.00 NaN 0.60 NA 0.00 1.46 \n", + "37 1.56 ( 0.01 ) 0.00 NaN 0.60 NA 0.00 1.56 \n", + "41 1.64 ( 0.02 ) 0.00 NaN 0.58 NA 0.00 1.64 \n", + "45 1.64 ( 0.02 ) 0.00 NaN 0.57 NA 0.00 1.64 \n", + "49 1.72 ( 0.02 ) 0.00 NaN 0.80 NA 0.00 1.72 \n", + "53 1.85 ( 0.02 ) 0.00 NaN 0.92 NA 0.00 1.85 \n", + "57 2 ( 0.02 ) 0.00 NaN 0.91 NA 0.00 NA \n", + "61 1.98 ( 0.02 ) 0.00 NaN 0.91 NA 0.00 1.98 \n", + "65 1.99 ( 0.02 ) 0.00 NaN 1.10 NA 0.00 1.99 \n", + "69 2.06 ( 0.02 ) 0.00 NaN 1.11 NA 0.00 2.06 \n", + "73 2.2 ( 0.02 ) 0.00 NaN 1.18 NA 0.00 2.20 \n", + "75 2 ( 0.01 ) 24.79 0.84 0.73 20.8 2.04 NA \n", + "77 2.3 ( 0.03 ) 0.00 NaN 1.22 NA 0.00 2.30 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check whether missing values exists\n", + "result.table_block[rowSums(is.na(result.table_block)) > 0,]" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "# recover values\n", + "result.table_block$Stab[is.na(result.table_block$Stab)] = 0\n", + "result.table_block$FP_mean[is.na(result.table_block$FP_mean)] = 1\n", + "result.table_block$OOB_mean[is.na(result.table_block$OOB_mean)] = 2\n", + "result.table_block$FN_mean[result.table_block$num_select == 0] = 6" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNOOBnum_selectFDRMSE_meanFP_meanFN_meanOOB_mean
150 50 0.1 1 0 0.08 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.59 ( 0.01 )0 NaN 0.08 1 6 0.59
550 100 0.1 2 0 0.08 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.6 ( 0.01 ) 0 NaN 0.08 1 6 0.60
950 500 0.1 10 0 0.08 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.59 ( 0.01 )0 NaN 0.08 1 6 0.59
1350 1000 0.1 20 0 0.08 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.59 ( 0.01 )0 NaN 0.08 1 6 0.59
1750 50 0.3 1 0 0.31 ( 0.01 )1 ( 0 ) 6 ( 0 ) 1.14 ( 0.01 )0 NaN 0.31 1 6 1.14
2150 100 0.3 2 0 0.32 ( 0.01 )1 ( 0 ) 6 ( 0 ) 1.2 ( 0.01 ) 0 NaN 0.32 1 6 1.20
2550 500 0.3 10 0 0.36 ( 0.02 )1 ( 0 ) 6 ( 0 ) 1.23 ( 0.01 )0 NaN 0.36 1 6 1.23
2950 1000 0.3 20 0 0.34 ( 0.01 )1 ( 0 ) 6 ( 0 ) 1.26 ( 0.01 )0 NaN 0.34 1 6 1.26
3350 50 0.5 1 0 0.6 ( 0.03 ) 1 ( 0 ) 6 ( 0 ) 1.46 ( 0.01 )0 NaN 0.60 1 6 1.46
3750 100 0.5 2 0 0.6 ( 0.02 ) 1 ( 0 ) 6 ( 0 ) 1.56 ( 0.01 )0 NaN 0.60 1 6 1.56
4150 500 0.5 10 0 0.58 ( 0.02 )1 ( 0 ) 6 ( 0 ) 1.64 ( 0.02 )0 NaN 0.58 1 6 1.64
4550 1000 0.5 20 0 0.57 ( 0.02 )1 ( 0 ) 6 ( 0 ) 1.64 ( 0.02 )0 NaN 0.57 1 6 1.64
4950 50 0.7 1 0 0.8 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) 1.72 ( 0.02 )0 NaN 0.80 1 6 1.72
5350 100 0.7 2 0 0.92 ( 0.04 )1 ( 0 ) 6 ( 0 ) 1.85 ( 0.02 )0 NaN 0.92 1 6 1.85
5750 500 0.7 10 0 0.91 ( 0.04 )1 ( 0 ) 6 ( 0 ) 2 ( 0.02 ) 0 NaN 0.91 1 6 2.00
6150 1000 0.7 20 0 0.91 ( 0.04 )1 ( 0 ) 6 ( 0 ) 1.98 ( 0.02 )0 NaN 0.91 1 6 1.98
6550 50 0.9 1 0 1.1 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) 1.99 ( 0.02 )0 NaN 1.10 1 6 1.99
6950 100 0.9 2 0 1.11 ( 0.05 )1 ( 0 ) 6 ( 0 ) 2.06 ( 0.02 )0 NaN 1.11 1 6 2.06
7350 500 0.9 10 0 1.18 ( 0.05 )1 ( 0 ) 6 ( 0 ) 2.2 ( 0.02 ) 0 NaN 1.18 1 6 2.20
7750 1000 0.9 20 0 1.22 ( 0.05 )1 ( 0 ) 6 ( 0 ) 2.3 ( 0.03 ) 0 NaN 1.22 1 6 2.30
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & OOB & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean & OOB\\_mean\\\\\n", + "\\hline\n", + "\t1 & 50 & 50 & 0.1 & 1 & 0 & 0.08 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.59 ( 0.01 ) & 0 & NaN & 0.08 & 1 & 6 & 0.59 \\\\\n", + "\t5 & 50 & 100 & 0.1 & 2 & 0 & 0.08 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.6 ( 0.01 ) & 0 & NaN & 0.08 & 1 & 6 & 0.60 \\\\\n", + "\t9 & 50 & 500 & 0.1 & 10 & 0 & 0.08 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.59 ( 0.01 ) & 0 & NaN & 0.08 & 1 & 6 & 0.59 \\\\\n", + "\t13 & 50 & 1000 & 0.1 & 20 & 0 & 0.08 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.59 ( 0.01 ) & 0 & NaN & 0.08 & 1 & 6 & 0.59 \\\\\n", + "\t17 & 50 & 50 & 0.3 & 1 & 0 & 0.31 ( 0.01 ) & 1 ( 0 ) & 6 ( 0 ) & 1.14 ( 0.01 ) & 0 & NaN & 0.31 & 1 & 6 & 1.14 \\\\\n", + "\t21 & 50 & 100 & 0.3 & 2 & 0 & 0.32 ( 0.01 ) & 1 ( 0 ) & 6 ( 0 ) & 1.2 ( 0.01 ) & 0 & NaN & 0.32 & 1 & 6 & 1.20 \\\\\n", + "\t25 & 50 & 500 & 0.3 & 10 & 0 & 0.36 ( 0.02 ) & 1 ( 0 ) & 6 ( 0 ) & 1.23 ( 0.01 ) & 0 & NaN & 0.36 & 1 & 6 & 1.23 \\\\\n", + "\t29 & 50 & 1000 & 0.3 & 20 & 0 & 0.34 ( 0.01 ) & 1 ( 0 ) & 6 ( 0 ) & 1.26 ( 0.01 ) & 0 & NaN & 0.34 & 1 & 6 & 1.26 \\\\\n", + "\t33 & 50 & 50 & 0.5 & 1 & 0 & 0.6 ( 0.03 ) & 1 ( 0 ) & 6 ( 0 ) & 1.46 ( 0.01 ) & 0 & NaN & 0.60 & 1 & 6 & 1.46 \\\\\n", + "\t37 & 50 & 100 & 0.5 & 2 & 0 & 0.6 ( 0.02 ) & 1 ( 0 ) & 6 ( 0 ) & 1.56 ( 0.01 ) & 0 & NaN & 0.60 & 1 & 6 & 1.56 \\\\\n", + "\t41 & 50 & 500 & 0.5 & 10 & 0 & 0.58 ( 0.02 ) & 1 ( 0 ) & 6 ( 0 ) & 1.64 ( 0.02 ) & 0 & NaN & 0.58 & 1 & 6 & 1.64 \\\\\n", + "\t45 & 50 & 1000 & 0.5 & 20 & 0 & 0.57 ( 0.02 ) & 1 ( 0 ) & 6 ( 0 ) & 1.64 ( 0.02 ) & 0 & NaN & 0.57 & 1 & 6 & 1.64 \\\\\n", + "\t49 & 50 & 50 & 0.7 & 1 & 0 & 0.8 ( 0.04 ) & 1 ( 0 ) & 6 ( 0 ) & 1.72 ( 0.02 ) & 0 & NaN & 0.80 & 1 & 6 & 1.72 \\\\\n", + "\t53 & 50 & 100 & 0.7 & 2 & 0 & 0.92 ( 0.04 ) & 1 ( 0 ) & 6 ( 0 ) & 1.85 ( 0.02 ) & 0 & NaN & 0.92 & 1 & 6 & 1.85 \\\\\n", + "\t57 & 50 & 500 & 0.7 & 10 & 0 & 0.91 ( 0.04 ) & 1 ( 0 ) & 6 ( 0 ) & 2 ( 0.02 ) & 0 & NaN & 0.91 & 1 & 6 & 2.00 \\\\\n", + "\t61 & 50 & 1000 & 0.7 & 20 & 0 & 0.91 ( 0.04 ) & 1 ( 0 ) & 6 ( 0 ) & 1.98 ( 0.02 ) & 0 & NaN & 0.91 & 1 & 6 & 1.98 \\\\\n", + "\t65 & 50 & 50 & 0.9 & 1 & 0 & 1.1 ( 0.04 ) & 1 ( 0 ) & 6 ( 0 ) & 1.99 ( 0.02 ) & 0 & NaN & 1.10 & 1 & 6 & 1.99 \\\\\n", + "\t69 & 50 & 100 & 0.9 & 2 & 0 & 1.11 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.06 ( 0.02 ) & 0 & NaN & 1.11 & 1 & 6 & 2.06 \\\\\n", + "\t73 & 50 & 500 & 0.9 & 10 & 0 & 1.18 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.2 ( 0.02 ) & 0 & NaN & 1.18 & 1 & 6 & 2.20 \\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20 & 0 & 1.22 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.3 ( 0.03 ) & 0 & NaN & 1.22 & 1 & 6 & 2.30 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | OOB | num_select | FDR | MSE_mean | FP_mean | FN_mean | OOB_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 1 | 50 | 50 | 0.1 | 1 | 0 | 0.08 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.59 ( 0.01 ) | 0 | NaN | 0.08 | 1 | 6 | 0.59 |\n", + "| 5 | 50 | 100 | 0.1 | 2 | 0 | 0.08 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.6 ( 0.01 ) | 0 | NaN | 0.08 | 1 | 6 | 0.60 |\n", + "| 9 | 50 | 500 | 0.1 | 10 | 0 | 0.08 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.59 ( 0.01 ) | 0 | NaN | 0.08 | 1 | 6 | 0.59 |\n", + "| 13 | 50 | 1000 | 0.1 | 20 | 0 | 0.08 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.59 ( 0.01 ) | 0 | NaN | 0.08 | 1 | 6 | 0.59 |\n", + "| 17 | 50 | 50 | 0.3 | 1 | 0 | 0.31 ( 0.01 ) | 1 ( 0 ) | 6 ( 0 ) | 1.14 ( 0.01 ) | 0 | NaN | 0.31 | 1 | 6 | 1.14 |\n", + "| 21 | 50 | 100 | 0.3 | 2 | 0 | 0.32 ( 0.01 ) | 1 ( 0 ) | 6 ( 0 ) | 1.2 ( 0.01 ) | 0 | NaN | 0.32 | 1 | 6 | 1.20 |\n", + "| 25 | 50 | 500 | 0.3 | 10 | 0 | 0.36 ( 0.02 ) | 1 ( 0 ) | 6 ( 0 ) | 1.23 ( 0.01 ) | 0 | NaN | 0.36 | 1 | 6 | 1.23 |\n", + "| 29 | 50 | 1000 | 0.3 | 20 | 0 | 0.34 ( 0.01 ) | 1 ( 0 ) | 6 ( 0 ) | 1.26 ( 0.01 ) | 0 | NaN | 0.34 | 1 | 6 | 1.26 |\n", + "| 33 | 50 | 50 | 0.5 | 1 | 0 | 0.6 ( 0.03 ) | 1 ( 0 ) | 6 ( 0 ) | 1.46 ( 0.01 ) | 0 | NaN | 0.60 | 1 | 6 | 1.46 |\n", + "| 37 | 50 | 100 | 0.5 | 2 | 0 | 0.6 ( 0.02 ) | 1 ( 0 ) | 6 ( 0 ) | 1.56 ( 0.01 ) | 0 | NaN | 0.60 | 1 | 6 | 1.56 |\n", + "| 41 | 50 | 500 | 0.5 | 10 | 0 | 0.58 ( 0.02 ) | 1 ( 0 ) | 6 ( 0 ) | 1.64 ( 0.02 ) | 0 | NaN | 0.58 | 1 | 6 | 1.64 |\n", + "| 45 | 50 | 1000 | 0.5 | 20 | 0 | 0.57 ( 0.02 ) | 1 ( 0 ) | 6 ( 0 ) | 1.64 ( 0.02 ) | 0 | NaN | 0.57 | 1 | 6 | 1.64 |\n", + "| 49 | 50 | 50 | 0.7 | 1 | 0 | 0.8 ( 0.04 ) | 1 ( 0 ) | 6 ( 0 ) | 1.72 ( 0.02 ) | 0 | NaN | 0.80 | 1 | 6 | 1.72 |\n", + "| 53 | 50 | 100 | 0.7 | 2 | 0 | 0.92 ( 0.04 ) | 1 ( 0 ) | 6 ( 0 ) | 1.85 ( 0.02 ) | 0 | NaN | 0.92 | 1 | 6 | 1.85 |\n", + "| 57 | 50 | 500 | 0.7 | 10 | 0 | 0.91 ( 0.04 ) | 1 ( 0 ) | 6 ( 0 ) | 2 ( 0.02 ) | 0 | NaN | 0.91 | 1 | 6 | 2.00 |\n", + "| 61 | 50 | 1000 | 0.7 | 20 | 0 | 0.91 ( 0.04 ) | 1 ( 0 ) | 6 ( 0 ) | 1.98 ( 0.02 ) | 0 | NaN | 0.91 | 1 | 6 | 1.98 |\n", + "| 65 | 50 | 50 | 0.9 | 1 | 0 | 1.1 ( 0.04 ) | 1 ( 0 ) | 6 ( 0 ) | 1.99 ( 0.02 ) | 0 | NaN | 1.10 | 1 | 6 | 1.99 |\n", + "| 69 | 50 | 100 | 0.9 | 2 | 0 | 1.11 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.06 ( 0.02 ) | 0 | NaN | 1.11 | 1 | 6 | 2.06 |\n", + "| 73 | 50 | 500 | 0.9 | 10 | 0 | 1.18 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.2 ( 0.02 ) | 0 | NaN | 1.18 | 1 | 6 | 2.20 |\n", + "| 77 | 50 | 1000 | 0.9 | 20 | 0 | 1.22 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.3 ( 0.03 ) | 0 | NaN | 1.22 | 1 | 6 | 2.30 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN OOB \n", + "1 50 50 0.1 1 0 0.08 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.59 ( 0.01 )\n", + "5 50 100 0.1 2 0 0.08 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.6 ( 0.01 ) \n", + "9 50 500 0.1 10 0 0.08 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.59 ( 0.01 )\n", + "13 50 1000 0.1 20 0 0.08 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.59 ( 0.01 )\n", + "17 50 50 0.3 1 0 0.31 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) 1.14 ( 0.01 )\n", + "21 50 100 0.3 2 0 0.32 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) 1.2 ( 0.01 ) \n", + "25 50 500 0.3 10 0 0.36 ( 0.02 ) 1 ( 0 ) 6 ( 0 ) 1.23 ( 0.01 )\n", + "29 50 1000 0.3 20 0 0.34 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) 1.26 ( 0.01 )\n", + "33 50 50 0.5 1 0 0.6 ( 0.03 ) 1 ( 0 ) 6 ( 0 ) 1.46 ( 0.01 )\n", + "37 50 100 0.5 2 0 0.6 ( 0.02 ) 1 ( 0 ) 6 ( 0 ) 1.56 ( 0.01 )\n", + "41 50 500 0.5 10 0 0.58 ( 0.02 ) 1 ( 0 ) 6 ( 0 ) 1.64 ( 0.02 )\n", + "45 50 1000 0.5 20 0 0.57 ( 0.02 ) 1 ( 0 ) 6 ( 0 ) 1.64 ( 0.02 )\n", + "49 50 50 0.7 1 0 0.8 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) 1.72 ( 0.02 )\n", + "53 50 100 0.7 2 0 0.92 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) 1.85 ( 0.02 )\n", + "57 50 500 0.7 10 0 0.91 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) 2 ( 0.02 ) \n", + "61 50 1000 0.7 20 0 0.91 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) 1.98 ( 0.02 )\n", + "65 50 50 0.9 1 0 1.1 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) 1.99 ( 0.02 )\n", + "69 50 100 0.9 2 0 1.11 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 2.06 ( 0.02 )\n", + "73 50 500 0.9 10 0 1.18 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 2.2 ( 0.02 ) \n", + "77 50 1000 0.9 20 0 1.22 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 2.3 ( 0.03 ) \n", + " num_select FDR MSE_mean FP_mean FN_mean OOB_mean\n", + "1 0 NaN 0.08 1 6 0.59 \n", + "5 0 NaN 0.08 1 6 0.60 \n", + "9 0 NaN 0.08 1 6 0.59 \n", + "13 0 NaN 0.08 1 6 0.59 \n", + "17 0 NaN 0.31 1 6 1.14 \n", + "21 0 NaN 0.32 1 6 1.20 \n", + "25 0 NaN 0.36 1 6 1.23 \n", + "29 0 NaN 0.34 1 6 1.26 \n", + "33 0 NaN 0.60 1 6 1.46 \n", + "37 0 NaN 0.60 1 6 1.56 \n", + "41 0 NaN 0.58 1 6 1.64 \n", + "45 0 NaN 0.57 1 6 1.64 \n", + "49 0 NaN 0.80 1 6 1.72 \n", + "53 0 NaN 0.92 1 6 1.85 \n", + "57 0 NaN 0.91 1 6 2.00 \n", + "61 0 NaN 0.91 1 6 1.98 \n", + "65 0 NaN 1.10 1 6 1.99 \n", + "69 0 NaN 1.11 1 6 2.06 \n", + "73 0 NaN 1.18 1 6 2.20 \n", + "77 0 NaN 1.22 1 6 2.30 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_block[c(1,5,9,13,17,21,25,29,33,37,41,45,49,53,57,61,65,69,73,77), ]" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNOOBnum_selectFDRMSE_meanFP_meanFN_meanOOB_mean
50 50 0.1 1.00 0.00 0.08 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.59 ( 0.01 )0.00 NaN 0.08 1.00 6.00 0.59
100 50 0.1 0.50 0.03 0.07 ( 0 ) 2.26 ( 0.17 )5.06 ( 0.12 )0.58 ( 0 ) 3.04 0.7 0.07 2.26 5.06 0.58
500 50 0.1 0.10 0.23 0.05 ( 0 ) 2.34 ( 0.16 )3.77 ( 0.14 )0.56 ( 0 ) 4.56 0.49 0.05 2.34 3.77 0.56
1000 50 0.1 0.05 0.51 0.05 ( 0 ) 2.37 ( 0.16 )2.54 ( 0.11 )0.55 ( 0 ) 5.83 0.38 0.05 2.37 2.54 0.55
50 100 0.1 2.00 0.00 0.08 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.6 ( 0.01 ) 0.00 NaN 0.08 1.00 6.00 0.60
100 100 0.1 1.00 0.01 0.07 ( 0 ) 4.76 ( 0.27 )5.51 ( 0.09 )0.58 ( 0 ) 5.24 0.91 0.07 4.76 5.51 0.58
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllllll}\n", + " N & P & Corr & Ratio & Stab & MSE & FP & FN & OOB & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean & OOB\\_mean\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0.1 & 1.00 & 0.00 & 0.08 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.59 ( 0.01 ) & 0.00 & NaN & 0.08 & 1.00 & 6.00 & 0.59 \\\\\n", + "\t 100 & 50 & 0.1 & 0.50 & 0.03 & 0.07 ( 0 ) & 2.26 ( 0.17 ) & 5.06 ( 0.12 ) & 0.58 ( 0 ) & 3.04 & 0.7 & 0.07 & 2.26 & 5.06 & 0.58 \\\\\n", + "\t 500 & 50 & 0.1 & 0.10 & 0.23 & 0.05 ( 0 ) & 2.34 ( 0.16 ) & 3.77 ( 0.14 ) & 0.56 ( 0 ) & 4.56 & 0.49 & 0.05 & 2.34 & 3.77 & 0.56 \\\\\n", + "\t 1000 & 50 & 0.1 & 0.05 & 0.51 & 0.05 ( 0 ) & 2.37 ( 0.16 ) & 2.54 ( 0.11 ) & 0.55 ( 0 ) & 5.83 & 0.38 & 0.05 & 2.37 & 2.54 & 0.55 \\\\\n", + "\t 50 & 100 & 0.1 & 2.00 & 0.00 & 0.08 ( 0 ) & 1 ( 0 ) & 6 ( 0 ) & 0.6 ( 0.01 ) & 0.00 & NaN & 0.08 & 1.00 & 6.00 & 0.60 \\\\\n", + "\t 100 & 100 & 0.1 & 1.00 & 0.01 & 0.07 ( 0 ) & 4.76 ( 0.27 ) & 5.51 ( 0.09 ) & 0.58 ( 0 ) & 5.24 & 0.91 & 0.07 & 4.76 & 5.51 & 0.58 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| N | P | Corr | Ratio | Stab | MSE | FP | FN | OOB | num_select | FDR | MSE_mean | FP_mean | FN_mean | OOB_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0.1 | 1.00 | 0.00 | 0.08 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.59 ( 0.01 ) | 0.00 | NaN | 0.08 | 1.00 | 6.00 | 0.59 |\n", + "| 100 | 50 | 0.1 | 0.50 | 0.03 | 0.07 ( 0 ) | 2.26 ( 0.17 ) | 5.06 ( 0.12 ) | 0.58 ( 0 ) | 3.04 | 0.7 | 0.07 | 2.26 | 5.06 | 0.58 |\n", + "| 500 | 50 | 0.1 | 0.10 | 0.23 | 0.05 ( 0 ) | 2.34 ( 0.16 ) | 3.77 ( 0.14 ) | 0.56 ( 0 ) | 4.56 | 0.49 | 0.05 | 2.34 | 3.77 | 0.56 |\n", + "| 1000 | 50 | 0.1 | 0.05 | 0.51 | 0.05 ( 0 ) | 2.37 ( 0.16 ) | 2.54 ( 0.11 ) | 0.55 ( 0 ) | 5.83 | 0.38 | 0.05 | 2.37 | 2.54 | 0.55 |\n", + "| 50 | 100 | 0.1 | 2.00 | 0.00 | 0.08 ( 0 ) | 1 ( 0 ) | 6 ( 0 ) | 0.6 ( 0.01 ) | 0.00 | NaN | 0.08 | 1.00 | 6.00 | 0.60 |\n", + "| 100 | 100 | 0.1 | 1.00 | 0.01 | 0.07 ( 0 ) | 4.76 ( 0.27 ) | 5.51 ( 0.09 ) | 0.58 ( 0 ) | 5.24 | 0.91 | 0.07 | 4.76 | 5.51 | 0.58 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN OOB \n", + "1 50 50 0.1 1.00 0.00 0.08 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.59 ( 0.01 )\n", + "2 100 50 0.1 0.50 0.03 0.07 ( 0 ) 2.26 ( 0.17 ) 5.06 ( 0.12 ) 0.58 ( 0 ) \n", + "3 500 50 0.1 0.10 0.23 0.05 ( 0 ) 2.34 ( 0.16 ) 3.77 ( 0.14 ) 0.56 ( 0 ) \n", + "4 1000 50 0.1 0.05 0.51 0.05 ( 0 ) 2.37 ( 0.16 ) 2.54 ( 0.11 ) 0.55 ( 0 ) \n", + "5 50 100 0.1 2.00 0.00 0.08 ( 0 ) 1 ( 0 ) 6 ( 0 ) 0.6 ( 0.01 ) \n", + "6 100 100 0.1 1.00 0.01 0.07 ( 0 ) 4.76 ( 0.27 ) 5.51 ( 0.09 ) 0.58 ( 0 ) \n", + " num_select FDR MSE_mean FP_mean FN_mean OOB_mean\n", + "1 0.00 NaN 0.08 1.00 6.00 0.59 \n", + "2 3.04 0.7 0.07 2.26 5.06 0.58 \n", + "3 4.56 0.49 0.05 2.34 3.77 0.56 \n", + "4 5.83 0.38 0.05 2.37 2.54 0.55 \n", + "5 0.00 NaN 0.08 1.00 6.00 0.60 \n", + "6 5.24 0.91 0.07 4.76 5.51 0.58 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNOOBnum_selectFDRMSE_meanFP_meanFN_meanOOB_mean
75 500 500 0.9 1.0 0.12 0.73 ( 0.01 ) 20.83 ( 0.45 )2.04 ( 0.09 ) 2 ( 0.01 ) 24.79 0.84 0.73 20.8 2.04 2.00
761000 500 0.9 0.5 0.18 0.68 ( 0.01 ) 18.47 ( 0.43 )1 ( 0.07 ) 1.92 ( 0 ) 23.47 0.78 0.68 18.4 0.00 1.92
77 50 1000 0.9 20.0 0.00 1.22 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 2.3 ( 0.03 ) 0.00 NaN 1.22 1.0 6.00 2.30
78 100 1000 0.9 10.0 0.01 0.93 ( 0.02 ) 49.18 ( 0.69 )4.67 ( 0.09 ) 2.22 ( 0.02 ) 50.51 0.97 0.93 49.1 4.67 2.22
79 500 1000 0.9 2.0 0.06 0.78 ( 0.01 ) 46.01 ( 0.7 ) 2.14 ( 0.09 ) 2.12 ( 0.01 ) 49.87 0.92 0.78 46.0 2.14 2.12
801000 1000 0.9 1.0 0.08 0.74 ( 0.01 ) 43.05 ( 0.72 )1.17 ( 0.08 ) 2.07 ( 0 ) 47.88 0.9 0.74 43.0 1.17 2.07
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & OOB & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean & OOB\\_mean\\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 1.0 & 0.12 & 0.73 ( 0.01 ) & 20.83 ( 0.45 ) & 2.04 ( 0.09 ) & 2 ( 0.01 ) & 24.79 & 0.84 & 0.73 & 20.8 & 2.04 & 2.00 \\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.5 & 0.18 & 0.68 ( 0.01 ) & 18.47 ( 0.43 ) & 1 ( 0.07 ) & 1.92 ( 0 ) & 23.47 & 0.78 & 0.68 & 18.4 & 0.00 & 1.92 \\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.0 & 0.00 & 1.22 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 2.3 ( 0.03 ) & 0.00 & NaN & 1.22 & 1.0 & 6.00 & 2.30 \\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.0 & 0.01 & 0.93 ( 0.02 ) & 49.18 ( 0.69 ) & 4.67 ( 0.09 ) & 2.22 ( 0.02 ) & 50.51 & 0.97 & 0.93 & 49.1 & 4.67 & 2.22 \\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.0 & 0.06 & 0.78 ( 0.01 ) & 46.01 ( 0.7 ) & 2.14 ( 0.09 ) & 2.12 ( 0.01 ) & 49.87 & 0.92 & 0.78 & 46.0 & 2.14 & 2.12 \\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.0 & 0.08 & 0.74 ( 0.01 ) & 43.05 ( 0.72 ) & 1.17 ( 0.08 ) & 2.07 ( 0 ) & 47.88 & 0.9 & 0.74 & 43.0 & 1.17 & 2.07 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | OOB | num_select | FDR | MSE_mean | FP_mean | FN_mean | OOB_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 1.0 | 0.12 | 0.73 ( 0.01 ) | 20.83 ( 0.45 ) | 2.04 ( 0.09 ) | 2 ( 0.01 ) | 24.79 | 0.84 | 0.73 | 20.8 | 2.04 | 2.00 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.5 | 0.18 | 0.68 ( 0.01 ) | 18.47 ( 0.43 ) | 1 ( 0.07 ) | 1.92 ( 0 ) | 23.47 | 0.78 | 0.68 | 18.4 | 0.00 | 1.92 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.0 | 0.00 | 1.22 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 2.3 ( 0.03 ) | 0.00 | NaN | 1.22 | 1.0 | 6.00 | 2.30 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.0 | 0.01 | 0.93 ( 0.02 ) | 49.18 ( 0.69 ) | 4.67 ( 0.09 ) | 2.22 ( 0.02 ) | 50.51 | 0.97 | 0.93 | 49.1 | 4.67 | 2.22 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.0 | 0.06 | 0.78 ( 0.01 ) | 46.01 ( 0.7 ) | 2.14 ( 0.09 ) | 2.12 ( 0.01 ) | 49.87 | 0.92 | 0.78 | 46.0 | 2.14 | 2.12 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.0 | 0.08 | 0.74 ( 0.01 ) | 43.05 ( 0.72 ) | 1.17 ( 0.08 ) | 2.07 ( 0 ) | 47.88 | 0.9 | 0.74 | 43.0 | 1.17 | 2.07 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN \n", + "75 500 500 0.9 1.0 0.12 0.73 ( 0.01 ) 20.83 ( 0.45 ) 2.04 ( 0.09 )\n", + "76 1000 500 0.9 0.5 0.18 0.68 ( 0.01 ) 18.47 ( 0.43 ) 1 ( 0.07 ) \n", + "77 50 1000 0.9 20.0 0.00 1.22 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) \n", + "78 100 1000 0.9 10.0 0.01 0.93 ( 0.02 ) 49.18 ( 0.69 ) 4.67 ( 0.09 )\n", + "79 500 1000 0.9 2.0 0.06 0.78 ( 0.01 ) 46.01 ( 0.7 ) 2.14 ( 0.09 )\n", + "80 1000 1000 0.9 1.0 0.08 0.74 ( 0.01 ) 43.05 ( 0.72 ) 1.17 ( 0.08 )\n", + " OOB num_select FDR MSE_mean FP_mean FN_mean OOB_mean\n", + "75 2 ( 0.01 ) 24.79 0.84 0.73 20.8 2.04 2.00 \n", + "76 1.92 ( 0 ) 23.47 0.78 0.68 18.4 0.00 1.92 \n", + "77 2.3 ( 0.03 ) 0.00 NaN 1.22 1.0 6.00 2.30 \n", + "78 2.22 ( 0.02 ) 50.51 0.97 0.93 49.1 4.67 2.22 \n", + "79 2.12 ( 0.01 ) 49.87 0.92 0.78 46.0 2.14 2.12 \n", + "80 2.07 ( 0 ) 47.88 0.9 0.74 43.0 1.17 2.07 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(result.table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "## export\n", + "write.table(result.table_block, '../results_summary_cts/sim_block_rf.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_cts/2.4_sim_block_compLasso_cts.ipynb b/simulations/notebooks_sim_cts/2.4_sim_block_compLasso_cts.ipynb new file mode 100755 index 0000000..a50b32e --- /dev/null +++ b/simulations/notebooks_sim_cts/2.4_sim_block_compLasso_cts.ipynb @@ -0,0 +1,504 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize compositional lasso results on Block Simulation Scenarios for continuous outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'\n", + "\n", + "load(paste0(dir, '/block_compLasso.RData'))" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "dim.list = list()\n", + "size = c(50, 100, 500, 1000)\n", + "idx = 0\n", + "for (P in size){\n", + " for (N in size){\n", + " idx = idx + 1\n", + " dim.list[[idx]] = c(P=P, N=N)\n", + " }\n", + "}\n", + "\n", + "rou.list = seq(0.1, 0.9, 0.2)\n", + "\n", + "files = NULL\n", + "for (rou in rou.list){\n", + " for (dim in dim.list){\n", + " p = dim[1]\n", + " n = dim[2]\n", + " files = cbind(files, paste0(dir, '/sim_block_corr', rou, paste('P', p, 'N', n, sep='_'), '.RData', sep=''))\n", + " }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "avg_FDR = NULL\n", + "for (i in 1:length(files)){\n", + " sim_file = files[i]\n", + " load(sim_file, dat <- new.env())\n", + " sub = dat$sim_array[[i]]\n", + " p = sub$p # take true values from 1st replicate of each simulated data\n", + " coef = sub$beta\n", + " coef.true = which(coef != 0)\n", + " \n", + " tt = results_block_compLasso[[i]]$Stab.table\n", + " \n", + " FDR = NULL\n", + " for (r in 1:nrow(tt)){\n", + " FDR = c(FDR, length(setdiff(which(tt[r, ] !=0), coef.true))/sum(tt[r, ]))\n", + "\n", + " }\n", + " \n", + " avg_FDR = c(avg_FDR, mean(FDR, na.rm=T))\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "table_block = NULL\n", + "tmp_num_select = rep(0, length(results_block_compLasso))\n", + "for (i in 1:length(results_block_compLasso)){\n", + " table_block = rbind(table_block, results_block_compLasso[[i]][c('n', 'p', 'rou', 'FP', 'FN', 'MSE', 'Stab')])\n", + " tmp_num_select[i] = mean(rowSums(results_block_compLasso[[i]]$Stab.table))\n", + " \n", + "}\n", + "table_block = as.data.frame(table_block)\n", + "table_block$num_select = tmp_num_select\n", + "table_block$FDR = round(avg_FDR,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
nprouFPFNMSEStabnum_selectFDR
50 50 0.1 2.8 ( 0.36 ) 5.01 ( 0.09 )0.36 ( 0.01 )0.03 3.79 0.62
100 50 0.1 4.96 ( 0.55 )3.77 ( 0.14 )0.32 ( 0.01 )0.1 7.19 0.55
500 50 0.1 8.81 ( 0.4 ) 0.78 ( 0.08 )0.28 ( 0 ) 0.26 14.03 0.60
1000 50 0.1 8.37 ( 0.37 )0.24 ( 0.06 )0.27 ( 0 ) 0.31 14.13 0.56
50 100 0.1 2.54 ( 0.37 )5.22 ( 0.08 )0.37 ( 0.02 )0.04 3.32 0.63
100 100 0.1 3.99 ( 0.57 )4.63 ( 0.1 ) 0.35 ( 0.01 )0.07 5.36 0.56
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllll}\n", + " n & p & rou & FP & FN & MSE & Stab & num\\_select & FDR\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0.1 & 2.8 ( 0.36 ) & 5.01 ( 0.09 ) & 0.36 ( 0.01 ) & 0.03 & 3.79 & 0.62 \\\\\n", + "\t 100 & 50 & 0.1 & 4.96 ( 0.55 ) & 3.77 ( 0.14 ) & 0.32 ( 0.01 ) & 0.1 & 7.19 & 0.55 \\\\\n", + "\t 500 & 50 & 0.1 & 8.81 ( 0.4 ) & 0.78 ( 0.08 ) & 0.28 ( 0 ) & 0.26 & 14.03 & 0.60 \\\\\n", + "\t 1000 & 50 & 0.1 & 8.37 ( 0.37 ) & 0.24 ( 0.06 ) & 0.27 ( 0 ) & 0.31 & 14.13 & 0.56 \\\\\n", + "\t 50 & 100 & 0.1 & 2.54 ( 0.37 ) & 5.22 ( 0.08 ) & 0.37 ( 0.02 ) & 0.04 & 3.32 & 0.63 \\\\\n", + "\t 100 & 100 & 0.1 & 3.99 ( 0.57 ) & 4.63 ( 0.1 ) & 0.35 ( 0.01 ) & 0.07 & 5.36 & 0.56 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| n | p | rou | FP | FN | MSE | Stab | num_select | FDR |\n", + "|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0.1 | 2.8 ( 0.36 ) | 5.01 ( 0.09 ) | 0.36 ( 0.01 ) | 0.03 | 3.79 | 0.62 |\n", + "| 100 | 50 | 0.1 | 4.96 ( 0.55 ) | 3.77 ( 0.14 ) | 0.32 ( 0.01 ) | 0.1 | 7.19 | 0.55 |\n", + "| 500 | 50 | 0.1 | 8.81 ( 0.4 ) | 0.78 ( 0.08 ) | 0.28 ( 0 ) | 0.26 | 14.03 | 0.60 |\n", + "| 1000 | 50 | 0.1 | 8.37 ( 0.37 ) | 0.24 ( 0.06 ) | 0.27 ( 0 ) | 0.31 | 14.13 | 0.56 |\n", + "| 50 | 100 | 0.1 | 2.54 ( 0.37 ) | 5.22 ( 0.08 ) | 0.37 ( 0.02 ) | 0.04 | 3.32 | 0.63 |\n", + "| 100 | 100 | 0.1 | 3.99 ( 0.57 ) | 4.63 ( 0.1 ) | 0.35 ( 0.01 ) | 0.07 | 5.36 | 0.56 |\n", + "\n" + ], + "text/plain": [ + " n p rou FP FN MSE Stab num_select FDR \n", + "1 50 50 0.1 2.8 ( 0.36 ) 5.01 ( 0.09 ) 0.36 ( 0.01 ) 0.03 3.79 0.62\n", + "2 100 50 0.1 4.96 ( 0.55 ) 3.77 ( 0.14 ) 0.32 ( 0.01 ) 0.1 7.19 0.55\n", + "3 500 50 0.1 8.81 ( 0.4 ) 0.78 ( 0.08 ) 0.28 ( 0 ) 0.26 14.03 0.60\n", + "4 1000 50 0.1 8.37 ( 0.37 ) 0.24 ( 0.06 ) 0.27 ( 0 ) 0.31 14.13 0.56\n", + "5 50 100 0.1 2.54 ( 0.37 ) 5.22 ( 0.08 ) 0.37 ( 0.02 ) 0.04 3.32 0.63\n", + "6 100 100 0.1 3.99 ( 0.57 ) 4.63 ( 0.1 ) 0.35 ( 0.01 ) 0.07 5.36 0.56" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "extract_numeric() is deprecated: please use readr::parse_number() instead\n", + "extract_numeric() is deprecated: please use readr::parse_number() instead\n" + ] + } + ], + "source": [ + "# export result\n", + "result.table_block <- apply(table_block,2,as.character)\n", + "rownames(result.table_block) = rownames(table_block)\n", + "result.table_block = as.data.frame(result.table_block)\n", + "\n", + "# extract numbers only for 'n' & 'p'\n", + "result.table_block$n = tidyr::extract_numeric(result.table_block$n)\n", + "result.table_block$p = tidyr::extract_numeric(result.table_block$p)\n", + "result.table_block$ratio = result.table_block$p / result.table_block$n\n", + "\n", + "result.table_block = result.table_block[c('n', 'p', 'rou', 'ratio', 'Stab', 'MSE', 'FP', 'FN', 'num_select', 'FDR')]\n", + "colnames(result.table_block)[1:4] = c('N', 'P', 'Corr', 'Ratio')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”Warning message in eval(expr, envir, enclos):\n", + "“NAs introduced by coercion”" + ] + } + ], + "source": [ + "# convert interested measurements to be numeric\n", + "result.table_block$Stab = as.numeric(as.character(result.table_block$Stab))\n", + "result.table_block$MSE_mean = as.numeric(substr(result.table_block$MSE, start=1, stop=4))\n", + "result.table_block$FP_mean = as.numeric(substr(result.table_block$FP, start=1, stop=4))\n", + "result.table_block$FN_mean = as.numeric(substr(result.table_block$FN, start=1, stop=4))\n", + "result.table_block$FN_mean[is.na(result.table_block$FN_mean)] = 0\n", + "result.table_block$num_select = as.numeric(as.character(result.table_block$num_select))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
21 50 100 0.3 2.0 0.27 0.94 ( 0.05 )6 ( 0.34 ) 1.93 ( 0.14 )10.07 0.54 0.94 NA 1.93
26100 500 0.3 5.0 0.30 0.73 ( 0.03 )9 ( 0.76 ) 0.99 ( 0.12 )14.01 0.52 0.73 NA 0.99
51500 50 0.7 0.1 0.90 1 ( 0.04 ) 0.58 ( 0.19 )0 ( 0 ) 6.58 0.06 NA 0.58 0.00
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t21 & 50 & 100 & 0.3 & 2.0 & 0.27 & 0.94 ( 0.05 ) & 6 ( 0.34 ) & 1.93 ( 0.14 ) & 10.07 & 0.54 & 0.94 & NA & 1.93 \\\\\n", + "\t26 & 100 & 500 & 0.3 & 5.0 & 0.30 & 0.73 ( 0.03 ) & 9 ( 0.76 ) & 0.99 ( 0.12 ) & 14.01 & 0.52 & 0.73 & NA & 0.99 \\\\\n", + "\t51 & 500 & 50 & 0.7 & 0.1 & 0.90 & 1 ( 0.04 ) & 0.58 ( 0.19 ) & 0 ( 0 ) & 6.58 & 0.06 & NA & 0.58 & 0.00 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 21 | 50 | 100 | 0.3 | 2.0 | 0.27 | 0.94 ( 0.05 ) | 6 ( 0.34 ) | 1.93 ( 0.14 ) | 10.07 | 0.54 | 0.94 | NA | 1.93 |\n", + "| 26 | 100 | 500 | 0.3 | 5.0 | 0.30 | 0.73 ( 0.03 ) | 9 ( 0.76 ) | 0.99 ( 0.12 ) | 14.01 | 0.52 | 0.73 | NA | 0.99 |\n", + "| 51 | 500 | 50 | 0.7 | 0.1 | 0.90 | 1 ( 0.04 ) | 0.58 ( 0.19 ) | 0 ( 0 ) | 6.58 | 0.06 | NA | 0.58 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN num_select\n", + "21 50 100 0.3 2.0 0.27 0.94 ( 0.05 ) 6 ( 0.34 ) 1.93 ( 0.14 ) 10.07 \n", + "26 100 500 0.3 5.0 0.30 0.73 ( 0.03 ) 9 ( 0.76 ) 0.99 ( 0.12 ) 14.01 \n", + "51 500 50 0.7 0.1 0.90 1 ( 0.04 ) 0.58 ( 0.19 ) 0 ( 0 ) 6.58 \n", + " FDR MSE_mean FP_mean FN_mean\n", + "21 0.54 0.94 NA 1.93 \n", + "26 0.52 0.73 NA 0.99 \n", + "51 0.06 NA 0.58 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# check whether missing values exists\n", + "result.table_block[rowSums(is.na(result.table_block)) > 0,]" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "# recover values\n", + "result.table_block$FP_mean[is.na(result.table_block$FP_mean)] = 6\n", + "result.table_block$MSE_mean[is.na(result.table_block$MSE_mean)] = 1" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
21 50 100 0.3 2.0 0.27 0.94 ( 0.05 )6 ( 0.34 ) 1.93 ( 0.14 )10.07 0.54 0.94 6.00 1.93
26100 500 0.3 5.0 0.30 0.73 ( 0.03 )9 ( 0.76 ) 0.99 ( 0.12 )14.01 0.52 0.73 6.00 0.99
51500 50 0.7 0.1 0.90 1 ( 0.04 ) 0.58 ( 0.19 )0 ( 0 ) 6.58 0.06 1.00 0.58 0.00
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t21 & 50 & 100 & 0.3 & 2.0 & 0.27 & 0.94 ( 0.05 ) & 6 ( 0.34 ) & 1.93 ( 0.14 ) & 10.07 & 0.54 & 0.94 & 6.00 & 1.93 \\\\\n", + "\t26 & 100 & 500 & 0.3 & 5.0 & 0.30 & 0.73 ( 0.03 ) & 9 ( 0.76 ) & 0.99 ( 0.12 ) & 14.01 & 0.52 & 0.73 & 6.00 & 0.99 \\\\\n", + "\t51 & 500 & 50 & 0.7 & 0.1 & 0.90 & 1 ( 0.04 ) & 0.58 ( 0.19 ) & 0 ( 0 ) & 6.58 & 0.06 & 1.00 & 0.58 & 0.00 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 21 | 50 | 100 | 0.3 | 2.0 | 0.27 | 0.94 ( 0.05 ) | 6 ( 0.34 ) | 1.93 ( 0.14 ) | 10.07 | 0.54 | 0.94 | 6.00 | 1.93 |\n", + "| 26 | 100 | 500 | 0.3 | 5.0 | 0.30 | 0.73 ( 0.03 ) | 9 ( 0.76 ) | 0.99 ( 0.12 ) | 14.01 | 0.52 | 0.73 | 6.00 | 0.99 |\n", + "| 51 | 500 | 50 | 0.7 | 0.1 | 0.90 | 1 ( 0.04 ) | 0.58 ( 0.19 ) | 0 ( 0 ) | 6.58 | 0.06 | 1.00 | 0.58 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN num_select\n", + "21 50 100 0.3 2.0 0.27 0.94 ( 0.05 ) 6 ( 0.34 ) 1.93 ( 0.14 ) 10.07 \n", + "26 100 500 0.3 5.0 0.30 0.73 ( 0.03 ) 9 ( 0.76 ) 0.99 ( 0.12 ) 14.01 \n", + "51 500 50 0.7 0.1 0.90 1 ( 0.04 ) 0.58 ( 0.19 ) 0 ( 0 ) 6.58 \n", + " FDR MSE_mean FP_mean FN_mean\n", + "21 0.54 0.94 6.00 1.93 \n", + "26 0.52 0.73 6.00 0.99 \n", + "51 0.06 1.00 0.58 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.table_block[c(21,26,51), ]" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
50 50 0.1 1.00 0.03 0.36 ( 0.01 )2.8 ( 0.36 ) 5.01 ( 0.09 ) 3.79 0.62 0.36 2.80 5.01
100 50 0.1 0.50 0.10 0.32 ( 0.01 )4.96 ( 0.55 )3.77 ( 0.14 ) 7.19 0.55 0.32 4.96 3.77
500 50 0.1 0.10 0.26 0.28 ( 0 ) 8.81 ( 0.4 ) 0.78 ( 0.08 )14.03 0.6 0.28 8.81 0.78
1000 50 0.1 0.05 0.31 0.27 ( 0 ) 8.37 ( 0.37 )0.24 ( 0.06 )14.13 0.56 0.27 8.37 0.24
50 100 0.1 2.00 0.04 0.37 ( 0.02 )2.54 ( 0.37 )5.22 ( 0.08 ) 3.32 0.63 0.37 2.54 5.22
100 100 0.1 1.00 0.07 0.35 ( 0.01 )3.99 ( 0.57 )4.63 ( 0.1 ) 5.36 0.56 0.35 3.99 4.63
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t 50 & 50 & 0.1 & 1.00 & 0.03 & 0.36 ( 0.01 ) & 2.8 ( 0.36 ) & 5.01 ( 0.09 ) & 3.79 & 0.62 & 0.36 & 2.80 & 5.01 \\\\\n", + "\t 100 & 50 & 0.1 & 0.50 & 0.10 & 0.32 ( 0.01 ) & 4.96 ( 0.55 ) & 3.77 ( 0.14 ) & 7.19 & 0.55 & 0.32 & 4.96 & 3.77 \\\\\n", + "\t 500 & 50 & 0.1 & 0.10 & 0.26 & 0.28 ( 0 ) & 8.81 ( 0.4 ) & 0.78 ( 0.08 ) & 14.03 & 0.6 & 0.28 & 8.81 & 0.78 \\\\\n", + "\t 1000 & 50 & 0.1 & 0.05 & 0.31 & 0.27 ( 0 ) & 8.37 ( 0.37 ) & 0.24 ( 0.06 ) & 14.13 & 0.56 & 0.27 & 8.37 & 0.24 \\\\\n", + "\t 50 & 100 & 0.1 & 2.00 & 0.04 & 0.37 ( 0.02 ) & 2.54 ( 0.37 ) & 5.22 ( 0.08 ) & 3.32 & 0.63 & 0.37 & 2.54 & 5.22 \\\\\n", + "\t 100 & 100 & 0.1 & 1.00 & 0.07 & 0.35 ( 0.01 ) & 3.99 ( 0.57 ) & 4.63 ( 0.1 ) & 5.36 & 0.56 & 0.35 & 3.99 & 4.63 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 50 | 50 | 0.1 | 1.00 | 0.03 | 0.36 ( 0.01 ) | 2.8 ( 0.36 ) | 5.01 ( 0.09 ) | 3.79 | 0.62 | 0.36 | 2.80 | 5.01 |\n", + "| 100 | 50 | 0.1 | 0.50 | 0.10 | 0.32 ( 0.01 ) | 4.96 ( 0.55 ) | 3.77 ( 0.14 ) | 7.19 | 0.55 | 0.32 | 4.96 | 3.77 |\n", + "| 500 | 50 | 0.1 | 0.10 | 0.26 | 0.28 ( 0 ) | 8.81 ( 0.4 ) | 0.78 ( 0.08 ) | 14.03 | 0.6 | 0.28 | 8.81 | 0.78 |\n", + "| 1000 | 50 | 0.1 | 0.05 | 0.31 | 0.27 ( 0 ) | 8.37 ( 0.37 ) | 0.24 ( 0.06 ) | 14.13 | 0.56 | 0.27 | 8.37 | 0.24 |\n", + "| 50 | 100 | 0.1 | 2.00 | 0.04 | 0.37 ( 0.02 ) | 2.54 ( 0.37 ) | 5.22 ( 0.08 ) | 3.32 | 0.63 | 0.37 | 2.54 | 5.22 |\n", + "| 100 | 100 | 0.1 | 1.00 | 0.07 | 0.35 ( 0.01 ) | 3.99 ( 0.57 ) | 4.63 ( 0.1 ) | 5.36 | 0.56 | 0.35 | 3.99 | 4.63 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN num_select\n", + "1 50 50 0.1 1.00 0.03 0.36 ( 0.01 ) 2.8 ( 0.36 ) 5.01 ( 0.09 ) 3.79 \n", + "2 100 50 0.1 0.50 0.10 0.32 ( 0.01 ) 4.96 ( 0.55 ) 3.77 ( 0.14 ) 7.19 \n", + "3 500 50 0.1 0.10 0.26 0.28 ( 0 ) 8.81 ( 0.4 ) 0.78 ( 0.08 ) 14.03 \n", + "4 1000 50 0.1 0.05 0.31 0.27 ( 0 ) 8.37 ( 0.37 ) 0.24 ( 0.06 ) 14.13 \n", + "5 50 100 0.1 2.00 0.04 0.37 ( 0.02 ) 2.54 ( 0.37 ) 5.22 ( 0.08 ) 3.32 \n", + "6 100 100 0.1 1.00 0.07 0.35 ( 0.01 ) 3.99 ( 0.57 ) 4.63 ( 0.1 ) 5.36 \n", + " FDR MSE_mean FP_mean FN_mean\n", + "1 0.62 0.36 2.80 5.01 \n", + "2 0.55 0.32 4.96 3.77 \n", + "3 0.6 0.28 8.81 0.78 \n", + "4 0.56 0.27 8.37 0.24 \n", + "5 0.63 0.37 2.54 5.22 \n", + "6 0.56 0.35 3.99 4.63 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(result.table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_mean
75 500 500 0.9 1.0 0.93 1.27 ( 0.05 )0.44 ( 0.18 )0 ( 0 ) 6.44 0.04 1.27 0.44 0.00
761000 500 0.9 0.5 0.96 1.31 ( 0.05 )0.23 ( 0.06 )0 ( 0 ) 6.23 0.03 1.31 0.23 0.00
77 50 1000 0.9 20.0 0.23 3.37 ( 0.19 )5.29 ( 0.41 )3.13 ( 0.15 ) 8.16 0.57 3.37 5.29 3.13
78 100 1000 0.9 10.0 0.56 1.14 ( 0.05 )4.56 ( 0.38 )0.07 ( 0.03 )10.49 0.37 1.14 4.56 0.07
79 500 1000 0.9 2.0 0.96 1.28 ( 0.04 )0.27 ( 0.11 )0 ( 0 ) 6.27 0.03 1.28 0.27 0.00
801000 1000 0.9 1.0 0.95 1.35 ( 0.05 )0.29 ( 0.09 )0 ( 0 ) 6.29 0.03 1.35 0.29 0.00
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean\\\\\n", + "\\hline\n", + "\t75 & 500 & 500 & 0.9 & 1.0 & 0.93 & 1.27 ( 0.05 ) & 0.44 ( 0.18 ) & 0 ( 0 ) & 6.44 & 0.04 & 1.27 & 0.44 & 0.00 \\\\\n", + "\t76 & 1000 & 500 & 0.9 & 0.5 & 0.96 & 1.31 ( 0.05 ) & 0.23 ( 0.06 ) & 0 ( 0 ) & 6.23 & 0.03 & 1.31 & 0.23 & 0.00 \\\\\n", + "\t77 & 50 & 1000 & 0.9 & 20.0 & 0.23 & 3.37 ( 0.19 ) & 5.29 ( 0.41 ) & 3.13 ( 0.15 ) & 8.16 & 0.57 & 3.37 & 5.29 & 3.13 \\\\\n", + "\t78 & 100 & 1000 & 0.9 & 10.0 & 0.56 & 1.14 ( 0.05 ) & 4.56 ( 0.38 ) & 0.07 ( 0.03 ) & 10.49 & 0.37 & 1.14 & 4.56 & 0.07 \\\\\n", + "\t79 & 500 & 1000 & 0.9 & 2.0 & 0.96 & 1.28 ( 0.04 ) & 0.27 ( 0.11 ) & 0 ( 0 ) & 6.27 & 0.03 & 1.28 & 0.27 & 0.00 \\\\\n", + "\t80 & 1000 & 1000 & 0.9 & 1.0 & 0.95 & 1.35 ( 0.05 ) & 0.29 ( 0.09 ) & 0 ( 0 ) & 6.29 & 0.03 & 1.35 & 0.29 & 0.00 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 75 | 500 | 500 | 0.9 | 1.0 | 0.93 | 1.27 ( 0.05 ) | 0.44 ( 0.18 ) | 0 ( 0 ) | 6.44 | 0.04 | 1.27 | 0.44 | 0.00 |\n", + "| 76 | 1000 | 500 | 0.9 | 0.5 | 0.96 | 1.31 ( 0.05 ) | 0.23 ( 0.06 ) | 0 ( 0 ) | 6.23 | 0.03 | 1.31 | 0.23 | 0.00 |\n", + "| 77 | 50 | 1000 | 0.9 | 20.0 | 0.23 | 3.37 ( 0.19 ) | 5.29 ( 0.41 ) | 3.13 ( 0.15 ) | 8.16 | 0.57 | 3.37 | 5.29 | 3.13 |\n", + "| 78 | 100 | 1000 | 0.9 | 10.0 | 0.56 | 1.14 ( 0.05 ) | 4.56 ( 0.38 ) | 0.07 ( 0.03 ) | 10.49 | 0.37 | 1.14 | 4.56 | 0.07 |\n", + "| 79 | 500 | 1000 | 0.9 | 2.0 | 0.96 | 1.28 ( 0.04 ) | 0.27 ( 0.11 ) | 0 ( 0 ) | 6.27 | 0.03 | 1.28 | 0.27 | 0.00 |\n", + "| 80 | 1000 | 1000 | 0.9 | 1.0 | 0.95 | 1.35 ( 0.05 ) | 0.29 ( 0.09 ) | 0 ( 0 ) | 6.29 | 0.03 | 1.35 | 0.29 | 0.00 |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN \n", + "75 500 500 0.9 1.0 0.93 1.27 ( 0.05 ) 0.44 ( 0.18 ) 0 ( 0 ) \n", + "76 1000 500 0.9 0.5 0.96 1.31 ( 0.05 ) 0.23 ( 0.06 ) 0 ( 0 ) \n", + "77 50 1000 0.9 20.0 0.23 3.37 ( 0.19 ) 5.29 ( 0.41 ) 3.13 ( 0.15 )\n", + "78 100 1000 0.9 10.0 0.56 1.14 ( 0.05 ) 4.56 ( 0.38 ) 0.07 ( 0.03 )\n", + "79 500 1000 0.9 2.0 0.96 1.28 ( 0.04 ) 0.27 ( 0.11 ) 0 ( 0 ) \n", + "80 1000 1000 0.9 1.0 0.95 1.35 ( 0.05 ) 0.29 ( 0.09 ) 0 ( 0 ) \n", + " num_select FDR MSE_mean FP_mean FN_mean\n", + "75 6.44 0.04 1.27 0.44 0.00 \n", + "76 6.23 0.03 1.31 0.23 0.00 \n", + "77 8.16 0.57 3.37 5.29 3.13 \n", + "78 10.49 0.37 1.14 4.56 0.07 \n", + "79 6.27 0.03 1.28 0.27 0.00 \n", + "80 6.29 0.03 1.35 0.29 0.00 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tail(result.table_block)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "## export\n", + "write.table(result.table_block, '../results_summary_cts/sim_block_compLasso.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_cts/3_sim_cts_summary.ipynb b/simulations/notebooks_sim_cts/3_sim_cts_summary.ipynb new file mode 100755 index 0000000..5487719 --- /dev/null +++ b/simulations/notebooks_sim_cts/3_sim_cts_summary.ipynb @@ -0,0 +1,998 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### summarize method comparison results across 4 feature selection methods in different simulation scenarios" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1. Independent Design" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "ind_lasso = read.csv('../results_summary_cts/sim_ind_lasso.txt', sep='\\t')\n", + "ind_elnet = read.csv('../results_summary_cts/sim_ind_elnet.txt', sep='\\t')\n", + "ind_rf = read.csv('../results_summary_cts/sim_ind_rf.txt', sep='\\t')\n", + "ind_compLasso = read.csv('../results_summary_cts/sim_ind_compLasso.txt', sep='\\t')\n", + "\n", + "ind_lasso$method = rep('lasso', dim(ind_lasso)[1])\n", + "ind_elnet$method = rep('elnet', dim(ind_elnet)[1])\n", + "ind_rf$method = rep('rf', dim(ind_rf)[1])\n", + "ind_compLasso$method = rep('compLasso', dim(ind_compLasso)[1])" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 16
  2. \n", + "\t
  3. 13
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 16\n", + "\\item 13\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 16\n", + "2. 13\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 16 13" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 16
  2. \n", + "\t
  3. 13
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 16\n", + "\\item 13\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 16\n", + "2. 13\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 16 13" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 16
  2. \n", + "\t
  3. 16
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 16\n", + "\\item 16\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 16\n", + "2. 16\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 16 16" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 16
  2. \n", + "\t
  3. 13
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 16\n", + "\\item 13\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 16\n", + "2. 13\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 16 13" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "dim(ind_lasso)\n", + "dim(ind_elnet)\n", + "dim(ind_rf)\n", + "dim(ind_compLasso)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 16
  2. \n", + "\t
  3. 13
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 16\n", + "\\item 13\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 16\n", + "2. 13\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 16 13" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ind_rf = ind_rf[!names(ind_rf)%in% c('OOB', 'OOB_mean', 'Index')]\n", + "dim(ind_rf)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 64
  2. \n", + "\t
  3. 13
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 64\n", + "\\item 13\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 64\n", + "2. 13\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 64 13" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ind = rbind(ind_lasso, ind_elnet)\n", + "ind = rbind(ind, ind_rf)\n", + "ind = rbind(ind, ind_compLasso)\n", + "dim(ind)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# fix false positives: when nothing was selected, then fp should be zero\n", + "# fp is now 1 due to length(setdiff(0/NA)) = 1 when actually should be 0 (in cv_sim_apply.R)\n", + "ind$FP_mean[ind$num_select ==0] = 0" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "write.table(ind, '../results_summary_cts/table_ind_all.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPmethodStabMSE_meanFP_meanFN_meannum_selectFDR
161000 1000 lasso 0.64 0.27 4.39 0.00 9.39 0.26
321000 1000 elnet 0.15 0.27 34.60 0.00 39.65 0.79
481000 1000 rf 0.09 0.85 41.70 0.99 46.78 0.89
641000 1000 compLasso0.96 1.16 0.24 0.00 6.24 0.03
121000 500 lasso 0.72 0.27 3.35 0.00 8.35 0.21
281000 500 elnet 0.18 0.26 27.20 0.00 32.21 0.77
441000 500 rf 0.19 0.78 18.70 0.84 23.89 0.78
601000 500 compLasso0.96 1.24 0.25 0.00 6.25 0.03
81000 100 lasso 0.82 0.27 2.25 0.00 7.25 0.15
241000 100 elnet 0.23 0.26 17.00 0.00 22.05 0.69
401000 100 rf 0.81 0.47 0.71 0.53 6.18 0.10
561000 100 compLasso0.89 1.04 0.71 0.00 6.71 0.08
41000 50 lasso 0.86 0.26 1.82 0.00 6.82 0.10
201000 50 elnet 0.27 0.25 11.70 0.00 16.76 0.60
361000 50 rf 0.88 0.35 0.07 0.78 5.29 0.01
521000 50 compLasso0.93 1.18 0.39 0.00 6.39 0.04
15 500 1000 lasso 0.52 0.29 6.51 0.00 11.51 0.40
31 500 1000 elnet 0.14 0.27 35.90 0.00 40.98 0.80
47 500 1000 rf 0.06 0.89 44.70 1.81 48.96 0.91
63 500 1000 compLasso0.96 1.12 0.27 0.00 6.27 0.03
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllllllll}\n", + " & N & P & method & Stab & MSE\\_mean & FP\\_mean & FN\\_mean & num\\_select & FDR\\\\\n", + "\\hline\n", + "\t16 & 1000 & 1000 & lasso & 0.64 & 0.27 & 4.39 & 0.00 & 9.39 & 0.26 \\\\\n", + "\t32 & 1000 & 1000 & elnet & 0.15 & 0.27 & 34.60 & 0.00 & 39.65 & 0.79 \\\\\n", + "\t48 & 1000 & 1000 & rf & 0.09 & 0.85 & 41.70 & 0.99 & 46.78 & 0.89 \\\\\n", + "\t64 & 1000 & 1000 & compLasso & 0.96 & 1.16 & 0.24 & 0.00 & 6.24 & 0.03 \\\\\n", + "\t12 & 1000 & 500 & lasso & 0.72 & 0.27 & 3.35 & 0.00 & 8.35 & 0.21 \\\\\n", + "\t28 & 1000 & 500 & elnet & 0.18 & 0.26 & 27.20 & 0.00 & 32.21 & 0.77 \\\\\n", + "\t44 & 1000 & 500 & rf & 0.19 & 0.78 & 18.70 & 0.84 & 23.89 & 0.78 \\\\\n", + "\t60 & 1000 & 500 & compLasso & 0.96 & 1.24 & 0.25 & 0.00 & 6.25 & 0.03 \\\\\n", + "\t8 & 1000 & 100 & lasso & 0.82 & 0.27 & 2.25 & 0.00 & 7.25 & 0.15 \\\\\n", + "\t24 & 1000 & 100 & elnet & 0.23 & 0.26 & 17.00 & 0.00 & 22.05 & 0.69 \\\\\n", + "\t40 & 1000 & 100 & rf & 0.81 & 0.47 & 0.71 & 0.53 & 6.18 & 0.10 \\\\\n", + "\t56 & 1000 & 100 & compLasso & 0.89 & 1.04 & 0.71 & 0.00 & 6.71 & 0.08 \\\\\n", + "\t4 & 1000 & 50 & lasso & 0.86 & 0.26 & 1.82 & 0.00 & 6.82 & 0.10 \\\\\n", + "\t20 & 1000 & 50 & elnet & 0.27 & 0.25 & 11.70 & 0.00 & 16.76 & 0.60 \\\\\n", + "\t36 & 1000 & 50 & rf & 0.88 & 0.35 & 0.07 & 0.78 & 5.29 & 0.01 \\\\\n", + "\t52 & 1000 & 50 & compLasso & 0.93 & 1.18 & 0.39 & 0.00 & 6.39 & 0.04 \\\\\n", + "\t15 & 500 & 1000 & lasso & 0.52 & 0.29 & 6.51 & 0.00 & 11.51 & 0.40 \\\\\n", + "\t31 & 500 & 1000 & elnet & 0.14 & 0.27 & 35.90 & 0.00 & 40.98 & 0.80 \\\\\n", + "\t47 & 500 & 1000 & rf & 0.06 & 0.89 & 44.70 & 1.81 & 48.96 & 0.91 \\\\\n", + "\t63 & 500 & 1000 & compLasso & 0.96 & 1.12 & 0.27 & 0.00 & 6.27 & 0.03 \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | method | Stab | MSE_mean | FP_mean | FN_mean | num_select | FDR |\n", + "|---|---|---|---|---|---|---|---|---|---|\n", + "| 16 | 1000 | 1000 | lasso | 0.64 | 0.27 | 4.39 | 0.00 | 9.39 | 0.26 |\n", + "| 32 | 1000 | 1000 | elnet | 0.15 | 0.27 | 34.60 | 0.00 | 39.65 | 0.79 |\n", + "| 48 | 1000 | 1000 | rf | 0.09 | 0.85 | 41.70 | 0.99 | 46.78 | 0.89 |\n", + "| 64 | 1000 | 1000 | compLasso | 0.96 | 1.16 | 0.24 | 0.00 | 6.24 | 0.03 |\n", + "| 12 | 1000 | 500 | lasso | 0.72 | 0.27 | 3.35 | 0.00 | 8.35 | 0.21 |\n", + "| 28 | 1000 | 500 | elnet | 0.18 | 0.26 | 27.20 | 0.00 | 32.21 | 0.77 |\n", + "| 44 | 1000 | 500 | rf | 0.19 | 0.78 | 18.70 | 0.84 | 23.89 | 0.78 |\n", + "| 60 | 1000 | 500 | compLasso | 0.96 | 1.24 | 0.25 | 0.00 | 6.25 | 0.03 |\n", + "| 8 | 1000 | 100 | lasso | 0.82 | 0.27 | 2.25 | 0.00 | 7.25 | 0.15 |\n", + "| 24 | 1000 | 100 | elnet | 0.23 | 0.26 | 17.00 | 0.00 | 22.05 | 0.69 |\n", + "| 40 | 1000 | 100 | rf | 0.81 | 0.47 | 0.71 | 0.53 | 6.18 | 0.10 |\n", + "| 56 | 1000 | 100 | compLasso | 0.89 | 1.04 | 0.71 | 0.00 | 6.71 | 0.08 |\n", + "| 4 | 1000 | 50 | lasso | 0.86 | 0.26 | 1.82 | 0.00 | 6.82 | 0.10 |\n", + "| 20 | 1000 | 50 | elnet | 0.27 | 0.25 | 11.70 | 0.00 | 16.76 | 0.60 |\n", + "| 36 | 1000 | 50 | rf | 0.88 | 0.35 | 0.07 | 0.78 | 5.29 | 0.01 |\n", + "| 52 | 1000 | 50 | compLasso | 0.93 | 1.18 | 0.39 | 0.00 | 6.39 | 0.04 |\n", + "| 15 | 500 | 1000 | lasso | 0.52 | 0.29 | 6.51 | 0.00 | 11.51 | 0.40 |\n", + "| 31 | 500 | 1000 | elnet | 0.14 | 0.27 | 35.90 | 0.00 | 40.98 | 0.80 |\n", + "| 47 | 500 | 1000 | rf | 0.06 | 0.89 | 44.70 | 1.81 | 48.96 | 0.91 |\n", + "| 63 | 500 | 1000 | compLasso | 0.96 | 1.12 | 0.27 | 0.00 | 6.27 | 0.03 |\n", + "\n" + ], + "text/plain": [ + " N P method Stab MSE_mean FP_mean FN_mean num_select FDR \n", + "16 1000 1000 lasso 0.64 0.27 4.39 0.00 9.39 0.26\n", + "32 1000 1000 elnet 0.15 0.27 34.60 0.00 39.65 0.79\n", + "48 1000 1000 rf 0.09 0.85 41.70 0.99 46.78 0.89\n", + "64 1000 1000 compLasso 0.96 1.16 0.24 0.00 6.24 0.03\n", + "12 1000 500 lasso 0.72 0.27 3.35 0.00 8.35 0.21\n", + "28 1000 500 elnet 0.18 0.26 27.20 0.00 32.21 0.77\n", + "44 1000 500 rf 0.19 0.78 18.70 0.84 23.89 0.78\n", + "60 1000 500 compLasso 0.96 1.24 0.25 0.00 6.25 0.03\n", + "8 1000 100 lasso 0.82 0.27 2.25 0.00 7.25 0.15\n", + "24 1000 100 elnet 0.23 0.26 17.00 0.00 22.05 0.69\n", + "40 1000 100 rf 0.81 0.47 0.71 0.53 6.18 0.10\n", + "56 1000 100 compLasso 0.89 1.04 0.71 0.00 6.71 0.08\n", + "4 1000 50 lasso 0.86 0.26 1.82 0.00 6.82 0.10\n", + "20 1000 50 elnet 0.27 0.25 11.70 0.00 16.76 0.60\n", + "36 1000 50 rf 0.88 0.35 0.07 0.78 5.29 0.01\n", + "52 1000 50 compLasso 0.93 1.18 0.39 0.00 6.39 0.04\n", + "15 500 1000 lasso 0.52 0.29 6.51 0.00 11.51 0.40\n", + "31 500 1000 elnet 0.14 0.27 35.90 0.00 40.98 0.80\n", + "47 500 1000 rf 0.06 0.89 44.70 1.81 48.96 0.91\n", + "63 500 1000 compLasso 0.96 1.12 0.27 0.00 6.27 0.03" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ind[order(ind$N, ind$P, decreasing=T), c('N', 'P', 'method', 'Stab', 'MSE_mean', 'FP_mean', 'FN_mean', 'num_select', 'FDR')][1:20, ]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2. Toeplitz Design" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "toe_lasso = read.csv('../results_summary_cts/sim_toe_lasso.txt', sep='\\t')\n", + "toe_elnet = read.csv('../results_summary_cts/sim_toe_elnet.txt', sep='\\t')\n", + "toe_rf = read.csv('../results_summary_cts/sim_toe_rf.txt', sep='\\t')\n", + "toe_compLasso = read.csv('../results_summary_cts/sim_toe_compLasso.txt', sep='\\t')\n", + "\n", + "toe_lasso$method = rep('lasso', dim(toe_lasso)[1])\n", + "toe_elnet$method = rep('elnet', dim(toe_elnet)[1])\n", + "toe_rf$method = rep('rf', dim(toe_rf)[1])\n", + "toe_compLasso$method = rep('compLasso', dim(toe_compLasso)[1])" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 80
  2. \n", + "\t
  3. 14
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 80\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 80\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 80 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 80
  2. \n", + "\t
  3. 14
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 80\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 80\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 80 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 80
  2. \n", + "\t
  3. 16
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 80\n", + "\\item 16\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 80\n", + "2. 16\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 80 16" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 80
  2. \n", + "\t
  3. 14
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 80\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 80\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 80 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "dim(toe_lasso)\n", + "dim(toe_elnet)\n", + "dim(toe_rf)\n", + "dim(toe_compLasso)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 80
  2. \n", + "\t
  3. 14
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 80\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 80\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 80 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "toe_rf = toe_rf[!names(toe_rf)%in% c('OOB', 'OOB_mean', 'toeex')]\n", + "dim(toe_rf)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 320
  2. \n", + "\t
  3. 14
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 320\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 320\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 320 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "toe = rbind(toe_lasso, toe_elnet)\n", + "toe = rbind(toe, toe_rf)\n", + "toe = rbind(toe, toe_compLasso)\n", + "dim(toe)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
NPCorrRatioStabMSEFPFNnum_selectFDRMSE_meanFP_meanFN_meanmethod
16150 50 0.1 1 0 1.4 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.40 1 6 rf
16550 100 0.1 2 0 1.36 ( 0.06 )1 ( 0 ) 6 ( 0 ) 0 NaN 1.36 1 6 rf
16950 500 0.1 10 0 1.29 ( 0.05 )1 ( 0 ) 6 ( 0 ) 0 NaN 1.29 1 6 rf
17350 1000 0.1 20 0 1.35 ( 0.06 )1 ( 0 ) 6 ( 0 ) 0 NaN 1.35 1 6 rf
17750 50 0.3 1 0 1.22 ( 0.05 )1 ( 0 ) 6 ( 0 ) 0 NaN 1.22 1 6 rf
18150 100 0.3 2 0 1.15 ( 0.05 )1 ( 0 ) 6 ( 0 ) 0 NaN 1.15 1 6 rf
18550 500 0.3 10 0 1.14 ( 0.05 )1 ( 0 ) 6 ( 0 ) 0 NaN 1.14 1 6 rf
18950 1000 0.3 20 0 1.2 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 1.20 1 6 rf
19350 50 0.5 1 0 0.99 ( 0.05 )1 ( 0 ) 6 ( 0 ) 0 NaN 0.99 1 6 rf
19750 100 0.5 2 0 0.91 ( 0.04 )1 ( 0 ) 6 ( 0 ) 0 NaN 0.91 1 6 rf
20150 500 0.5 10 0 0.95 ( 0.04 )1 ( 0 ) 6 ( 0 ) 0 NaN 0.95 1 6 rf
20550 1000 0.5 20 0 0.94 ( 0.04 )1 ( 0 ) 6 ( 0 ) 0 NaN 0.94 1 6 rf
20950 50 0.7 1 0 0.66 ( 0.03 )1 ( 0 ) 6 ( 0 ) 0 NaN 0.66 1 6 rf
21350 100 0.7 2 0 0.67 ( 0.03 )1 ( 0 ) 6 ( 0 ) 0 NaN 0.67 1 6 rf
21750 500 0.7 10 0 0.7 ( 0.03 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 0.70 1 6 rf
22150 1000 0.7 20 0 0.74 ( 0.03 )1 ( 0 ) 6 ( 0 ) 0 NaN 0.74 1 6 rf
22550 50 0.9 1 0 0.27 ( 0.01 )1 ( 0 ) 6 ( 0 ) 0 NaN 0.27 1 6 rf
22950 100 0.9 2 0 0.3 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) 0 NaN 0.30 1 6 rf
23350 500 0.9 10 0 0.29 ( 0.01 )1 ( 0 ) 6 ( 0 ) 0 NaN 0.29 1 6 rf
23750 1000 0.9 20 0 0.29 ( 0.01 )1 ( 0 ) 6 ( 0 ) 0 NaN 0.29 1 6 rf
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|llllllllllllll}\n", + " & N & P & Corr & Ratio & Stab & MSE & FP & FN & num\\_select & FDR & MSE\\_mean & FP\\_mean & FN\\_mean & method\\\\\n", + "\\hline\n", + "\t161 & 50 & 50 & 0.1 & 1 & 0 & 1.4 ( 0.06 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.40 & 1 & 6 & rf \\\\\n", + "\t165 & 50 & 100 & 0.1 & 2 & 0 & 1.36 ( 0.06 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.36 & 1 & 6 & rf \\\\\n", + "\t169 & 50 & 500 & 0.1 & 10 & 0 & 1.29 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.29 & 1 & 6 & rf \\\\\n", + "\t173 & 50 & 1000 & 0.1 & 20 & 0 & 1.35 ( 0.06 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.35 & 1 & 6 & rf \\\\\n", + "\t177 & 50 & 50 & 0.3 & 1 & 0 & 1.22 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.22 & 1 & 6 & rf \\\\\n", + "\t181 & 50 & 100 & 0.3 & 2 & 0 & 1.15 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.15 & 1 & 6 & rf \\\\\n", + "\t185 & 50 & 500 & 0.3 & 10 & 0 & 1.14 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.14 & 1 & 6 & rf \\\\\n", + "\t189 & 50 & 1000 & 0.3 & 20 & 0 & 1.2 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 1.20 & 1 & 6 & rf \\\\\n", + "\t193 & 50 & 50 & 0.5 & 1 & 0 & 0.99 ( 0.05 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.99 & 1 & 6 & rf \\\\\n", + "\t197 & 50 & 100 & 0.5 & 2 & 0 & 0.91 ( 0.04 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.91 & 1 & 6 & rf \\\\\n", + "\t201 & 50 & 500 & 0.5 & 10 & 0 & 0.95 ( 0.04 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.95 & 1 & 6 & rf \\\\\n", + "\t205 & 50 & 1000 & 0.5 & 20 & 0 & 0.94 ( 0.04 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.94 & 1 & 6 & rf \\\\\n", + "\t209 & 50 & 50 & 0.7 & 1 & 0 & 0.66 ( 0.03 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.66 & 1 & 6 & rf \\\\\n", + "\t213 & 50 & 100 & 0.7 & 2 & 0 & 0.67 ( 0.03 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.67 & 1 & 6 & rf \\\\\n", + "\t217 & 50 & 500 & 0.7 & 10 & 0 & 0.7 ( 0.03 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.70 & 1 & 6 & rf \\\\\n", + "\t221 & 50 & 1000 & 0.7 & 20 & 0 & 0.74 ( 0.03 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.74 & 1 & 6 & rf \\\\\n", + "\t225 & 50 & 50 & 0.9 & 1 & 0 & 0.27 ( 0.01 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.27 & 1 & 6 & rf \\\\\n", + "\t229 & 50 & 100 & 0.9 & 2 & 0 & 0.3 ( 0.01 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.30 & 1 & 6 & rf \\\\\n", + "\t233 & 50 & 500 & 0.9 & 10 & 0 & 0.29 ( 0.01 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.29 & 1 & 6 & rf \\\\\n", + "\t237 & 50 & 1000 & 0.9 & 20 & 0 & 0.29 ( 0.01 ) & 1 ( 0 ) & 6 ( 0 ) & 0 & NaN & 0.29 & 1 & 6 & rf \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | N | P | Corr | Ratio | Stab | MSE | FP | FN | num_select | FDR | MSE_mean | FP_mean | FN_mean | method |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| 161 | 50 | 50 | 0.1 | 1 | 0 | 1.4 ( 0.06 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.40 | 1 | 6 | rf |\n", + "| 165 | 50 | 100 | 0.1 | 2 | 0 | 1.36 ( 0.06 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.36 | 1 | 6 | rf |\n", + "| 169 | 50 | 500 | 0.1 | 10 | 0 | 1.29 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.29 | 1 | 6 | rf |\n", + "| 173 | 50 | 1000 | 0.1 | 20 | 0 | 1.35 ( 0.06 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.35 | 1 | 6 | rf |\n", + "| 177 | 50 | 50 | 0.3 | 1 | 0 | 1.22 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.22 | 1 | 6 | rf |\n", + "| 181 | 50 | 100 | 0.3 | 2 | 0 | 1.15 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.15 | 1 | 6 | rf |\n", + "| 185 | 50 | 500 | 0.3 | 10 | 0 | 1.14 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.14 | 1 | 6 | rf |\n", + "| 189 | 50 | 1000 | 0.3 | 20 | 0 | 1.2 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 1.20 | 1 | 6 | rf |\n", + "| 193 | 50 | 50 | 0.5 | 1 | 0 | 0.99 ( 0.05 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.99 | 1 | 6 | rf |\n", + "| 197 | 50 | 100 | 0.5 | 2 | 0 | 0.91 ( 0.04 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.91 | 1 | 6 | rf |\n", + "| 201 | 50 | 500 | 0.5 | 10 | 0 | 0.95 ( 0.04 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.95 | 1 | 6 | rf |\n", + "| 205 | 50 | 1000 | 0.5 | 20 | 0 | 0.94 ( 0.04 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.94 | 1 | 6 | rf |\n", + "| 209 | 50 | 50 | 0.7 | 1 | 0 | 0.66 ( 0.03 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.66 | 1 | 6 | rf |\n", + "| 213 | 50 | 100 | 0.7 | 2 | 0 | 0.67 ( 0.03 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.67 | 1 | 6 | rf |\n", + "| 217 | 50 | 500 | 0.7 | 10 | 0 | 0.7 ( 0.03 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.70 | 1 | 6 | rf |\n", + "| 221 | 50 | 1000 | 0.7 | 20 | 0 | 0.74 ( 0.03 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.74 | 1 | 6 | rf |\n", + "| 225 | 50 | 50 | 0.9 | 1 | 0 | 0.27 ( 0.01 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.27 | 1 | 6 | rf |\n", + "| 229 | 50 | 100 | 0.9 | 2 | 0 | 0.3 ( 0.01 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.30 | 1 | 6 | rf |\n", + "| 233 | 50 | 500 | 0.9 | 10 | 0 | 0.29 ( 0.01 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.29 | 1 | 6 | rf |\n", + "| 237 | 50 | 1000 | 0.9 | 20 | 0 | 0.29 ( 0.01 ) | 1 ( 0 ) | 6 ( 0 ) | 0 | NaN | 0.29 | 1 | 6 | rf |\n", + "\n" + ], + "text/plain": [ + " N P Corr Ratio Stab MSE FP FN num_select FDR\n", + "161 50 50 0.1 1 0 1.4 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) 0 NaN\n", + "165 50 100 0.1 2 0 1.36 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) 0 NaN\n", + "169 50 500 0.1 10 0 1.29 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 0 NaN\n", + "173 50 1000 0.1 20 0 1.35 ( 0.06 ) 1 ( 0 ) 6 ( 0 ) 0 NaN\n", + "177 50 50 0.3 1 0 1.22 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 0 NaN\n", + "181 50 100 0.3 2 0 1.15 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 0 NaN\n", + "185 50 500 0.3 10 0 1.14 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 0 NaN\n", + "189 50 1000 0.3 20 0 1.2 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 0 NaN\n", + "193 50 50 0.5 1 0 0.99 ( 0.05 ) 1 ( 0 ) 6 ( 0 ) 0 NaN\n", + "197 50 100 0.5 2 0 0.91 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) 0 NaN\n", + "201 50 500 0.5 10 0 0.95 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) 0 NaN\n", + "205 50 1000 0.5 20 0 0.94 ( 0.04 ) 1 ( 0 ) 6 ( 0 ) 0 NaN\n", + "209 50 50 0.7 1 0 0.66 ( 0.03 ) 1 ( 0 ) 6 ( 0 ) 0 NaN\n", + "213 50 100 0.7 2 0 0.67 ( 0.03 ) 1 ( 0 ) 6 ( 0 ) 0 NaN\n", + "217 50 500 0.7 10 0 0.7 ( 0.03 ) 1 ( 0 ) 6 ( 0 ) 0 NaN\n", + "221 50 1000 0.7 20 0 0.74 ( 0.03 ) 1 ( 0 ) 6 ( 0 ) 0 NaN\n", + "225 50 50 0.9 1 0 0.27 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) 0 NaN\n", + "229 50 100 0.9 2 0 0.3 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) 0 NaN\n", + "233 50 500 0.9 10 0 0.29 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) 0 NaN\n", + "237 50 1000 0.9 20 0 0.29 ( 0.01 ) 1 ( 0 ) 6 ( 0 ) 0 NaN\n", + " MSE_mean FP_mean FN_mean method\n", + "161 1.40 1 6 rf \n", + "165 1.36 1 6 rf \n", + "169 1.29 1 6 rf \n", + "173 1.35 1 6 rf \n", + "177 1.22 1 6 rf \n", + "181 1.15 1 6 rf \n", + "185 1.14 1 6 rf \n", + "189 1.20 1 6 rf \n", + "193 0.99 1 6 rf \n", + "197 0.91 1 6 rf \n", + "201 0.95 1 6 rf \n", + "205 0.94 1 6 rf \n", + "209 0.66 1 6 rf \n", + "213 0.67 1 6 rf \n", + "217 0.70 1 6 rf \n", + "221 0.74 1 6 rf \n", + "225 0.27 1 6 rf \n", + "229 0.30 1 6 rf \n", + "233 0.29 1 6 rf \n", + "237 0.29 1 6 rf " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "toe[toe$num_select == 0, ]" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "# fix false positives: when nothing was selected, then fp should be zero\n", + "# fp is now 1 due to length(setdiff(0/NA)) = 1 when actually should be 0 (in cv_sim_apply.R)\n", + "toe$FP_mean[toe$num_select ==0] = 0\n", + "write.table(toe, '../results_summary_cts/table_toe_all.txt', sep='\\t', row.names=F)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3. Block Design" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "block_lasso = read.csv('../results_summary_cts/sim_block_lasso.txt', sep='\\t')\n", + "block_elnet = read.csv('../results_summary_cts/sim_block_elnet.txt', sep='\\t')\n", + "block_rf = read.csv('../results_summary_cts/sim_block_rf.txt', sep='\\t')\n", + "block_compLasso = read.csv('../results_summary_cts/sim_block_compLasso.txt', sep='\\t')\n", + "\n", + "block_lasso$method = rep('lasso', dim(block_lasso)[1])\n", + "block_elnet$method = rep('elnet', dim(block_elnet)[1])\n", + "block_rf$method = rep('rf', dim(block_rf)[1])\n", + "block_compLasso$method = rep('compLasso', dim(block_compLasso)[1])" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 80
  2. \n", + "\t
  3. 14
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 80\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 80\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 80 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 80
  2. \n", + "\t
  3. 14
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 80\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 80\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 80 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 80
  2. \n", + "\t
  3. 16
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 80\n", + "\\item 16\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 80\n", + "2. 16\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 80 16" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 80
  2. \n", + "\t
  3. 14
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 80\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 80\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 80 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "dim(block_lasso)\n", + "dim(block_elnet)\n", + "dim(block_rf)\n", + "dim(block_compLasso)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 80
  2. \n", + "\t
  3. 14
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 80\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 80\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 80 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "block_rf = block_rf[!names(block_rf)%in% c('OOB', 'OOB_mean', 'blockex')]\n", + "dim(block_rf)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. 320
  2. \n", + "\t
  3. 14
  4. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 320\n", + "\\item 14\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 320\n", + "2. 14\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 320 14" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "block = rbind(block_lasso, block_elnet)\n", + "block = rbind(block, block_rf)\n", + "block = rbind(block, block_compLasso)\n", + "dim(block)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "# fix false positives: when nothing was selected, then fp should be zero\n", + "# fp is now 1 due to length(setdiff(0/NA)) = 1 when actually should be 0 (in cv_sim_apply.R)\n", + "block$FP_mean[block$num_select ==0] = 0\n", + "write.table(block, '../results_summary_cts/table_block_all.txt', sep='\\t', row.names=F)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/notebooks_sim_cts/4_sim_cts_bootstrap_testing.ipynb b/simulations/notebooks_sim_cts/4_sim_cts_bootstrap_testing.ipynb new file mode 100755 index 0000000..6ed9920 --- /dev/null +++ b/simulations/notebooks_sim_cts/4_sim_cts_bootstrap_testing.ipynb @@ -0,0 +1,636 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Hypothesis testing based on boostrap for selected simulation scenario" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "dir = '/panfs/panfs1.ucsd.edu/panscratch/lij014/Stability_2020/sim_data'" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "load(paste0(dir, '/boot_toe_RF.RData'))\n", + "load(paste0(dir, '/boot_block_RF.RData'))\n", + "load(paste0(dir, '/boot_toe_compLasso.RData'))\n", + "load(paste0(dir, '/boot_block_compLasso.RData'))" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
toe_rftoe_linblock_rfblock_lin
0.010.250.010.26
0.010.230.010.23
0.010.280.000.20
0.010.250.010.26
0.010.230.010.25
0.010.230.000.26
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|llll}\n", + " toe\\_rf & toe\\_lin & block\\_rf & block\\_lin\\\\\n", + "\\hline\n", + "\t 0.01 & 0.25 & 0.01 & 0.26\\\\\n", + "\t 0.01 & 0.23 & 0.01 & 0.23\\\\\n", + "\t 0.01 & 0.28 & 0.00 & 0.20\\\\\n", + "\t 0.01 & 0.25 & 0.01 & 0.26\\\\\n", + "\t 0.01 & 0.23 & 0.01 & 0.25\\\\\n", + "\t 0.01 & 0.23 & 0.00 & 0.26\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| toe_rf | toe_lin | block_rf | block_lin |\n", + "|---|---|---|---|\n", + "| 0.01 | 0.25 | 0.01 | 0.26 |\n", + "| 0.01 | 0.23 | 0.01 | 0.23 |\n", + "| 0.01 | 0.28 | 0.00 | 0.20 |\n", + "| 0.01 | 0.25 | 0.01 | 0.26 |\n", + "| 0.01 | 0.23 | 0.01 | 0.25 |\n", + "| 0.01 | 0.23 | 0.00 | 0.26 |\n", + "\n" + ], + "text/plain": [ + " toe_rf toe_lin block_rf block_lin\n", + "1 0.01 0.25 0.01 0.26 \n", + "2 0.01 0.23 0.01 0.23 \n", + "3 0.01 0.28 0.00 0.20 \n", + "4 0.01 0.25 0.01 0.26 \n", + "5 0.01 0.23 0.01 0.25 \n", + "6 0.01 0.23 0.00 0.26 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "table = as.data.frame(cbind(toe_rf$stab_index, toe_lin$stab_index, block_rf$stab_index, block_lin$stab_index))\n", + "colnames(table) = c('toe_rf', 'toe_lin', 'block_rf', 'block_lin')\n", + "head(table)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Two sample test based on Bootstrap" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "## interpretation: if confidence interval doesn't contain zero, then significant\n", + "## ref: correct intrepretation of confidence intervals: https://journals.sagepub.com/doi/pdf/10.1177/201010581001900316" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "0.2247" + ], + "text/latex": [ + "0.2247" + ], + "text/markdown": [ + "0.2247" + ], + "text/plain": [ + "[1] 0.2247" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\t
2.5%
\n", + "\t\t
0.19
\n", + "\t
97.5%
\n", + "\t\t
0.28
\n", + "
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[2.5\\textbackslash{}\\%] 0.19\n", + "\\item[97.5\\textbackslash{}\\%] 0.28\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "2.5%\n", + ": 0.1997.5%\n", + ": 0.28\n", + "\n" + ], + "text/plain": [ + " 2.5% 97.5% \n", + " 0.19 0.28 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "diff_toe = (table$toe_lin - table$toe_rf)\n", + "mean(diff_toe)\n", + "quantile(diff_toe, probs = c(0.025, 0.975))" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "0.2289" + ], + "text/latex": [ + "0.2289" + ], + "text/markdown": [ + "0.2289" + ], + "text/plain": [ + "[1] 0.2289" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\t
2.5%
\n", + "\t\t
0.17475
\n", + "\t
97.5%
\n", + "\t\t
0.28525
\n", + "
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[2.5\\textbackslash{}\\%] 0.17475\n", + "\\item[97.5\\textbackslash{}\\%] 0.28525\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "2.5%\n", + ": 0.1747597.5%\n", + ": 0.28525\n", + "\n" + ], + "text/plain": [ + " 2.5% 97.5% \n", + "0.17475 0.28525 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "diff_block = (table$block_lin - table$block_rf)\n", + "mean(diff_block)\n", + "quantile(diff_block, probs = c(0.025, 0.975))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Compare based on MSE" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### block 0.5" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\n", + "
nprouMSEMSE.list
46100 1000 0.5 0.47 ( 0.01 ) 0.4923079, 0.5236572, 0.3049313, 0.4022395, 0.4116445, 0.4457436, 0.5321101, 0.3994759, 0.3889622, 0.4957112, 0.2661450, 0.5383919, 0.4251333, 0.5020789, 0.5774619, 0.3274016, 0.5765174, 0.4136176, 0.5066335, 0.7475691, 0.7385966, 0.3141407, 0.4786586, 0.4811622, 0.4128133, 0.6605431, 0.5315163, 0.4400826, 0.8595558, 0.3382323, 0.4297301, 0.4961741, 0.5237057, 0.6787550, 0.4064282, 0.4305124, 0.3051361, 0.4404218, 0.4208728, 0.5967023, 0.5111793, 0.5062338, 0.2653858, 0.5910289, 0.3166639, 0.4614773, 0.4315483, 0.6846844, 0.4522860, 0.2785640, 0.6029796, 0.4161780, 0.5801175, 0.4112313, 0.5364697, 0.4318882, 0.3655746, 0.4455715, 0.3465285, 0.7532535, 0.3877135, 0.5023844, 0.2049257, 0.4338186, 0.3111033, 0.4220746, 0.5432892, 0.7013340, 0.5247176, 0.3747088, 0.3819685, 0.4208868, 0.2586503, 0.5655622, 0.5948446, 0.3660124, 0.4598678, 0.6435442, 0.3349638, 0.4052510, 0.6205234, 0.4349098, 0.6964996, 0.4033935, 0.4308613, 0.5466399, 0.3565571, 0.5507224, 0.3275157, 0.4857403, 0.3745229, 0.4944044, 0.4354932, 0.4055464, 0.4792593, 0.5230589, 0.2415968, 0.3994462, 0.6382857, 0.5929313
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllll}\n", + " & n & p & rou & MSE & MSE.list\\\\\n", + "\\hline\n", + "\t46 & 100 & 1000 & 0.5 & 0.47 ( 0.01 ) & 0.4923079, 0.5236572, 0.3049313, 0.4022395, 0.4116445, 0.4457436, 0.5321101, 0.3994759, 0.3889622, 0.4957112, 0.2661450, 0.5383919, 0.4251333, 0.5020789, 0.5774619, 0.3274016, 0.5765174, 0.4136176, 0.5066335, 0.7475691, 0.7385966, 0.3141407, 0.4786586, 0.4811622, 0.4128133, 0.6605431, 0.5315163, 0.4400826, 0.8595558, 0.3382323, 0.4297301, 0.4961741, 0.5237057, 0.6787550, 0.4064282, 0.4305124, 0.3051361, 0.4404218, 0.4208728, 0.5967023, 0.5111793, 0.5062338, 0.2653858, 0.5910289, 0.3166639, 0.4614773, 0.4315483, 0.6846844, 0.4522860, 0.2785640, 0.6029796, 0.4161780, 0.5801175, 0.4112313, 0.5364697, 0.4318882, 0.3655746, 0.4455715, 0.3465285, 0.7532535, 0.3877135, 0.5023844, 0.2049257, 0.4338186, 0.3111033, 0.4220746, 0.5432892, 0.7013340, 0.5247176, 0.3747088, 0.3819685, 0.4208868, 0.2586503, 0.5655622, 0.5948446, 0.3660124, 0.4598678, 0.6435442, 0.3349638, 0.4052510, 0.6205234, 0.4349098, 0.6964996, 0.4033935, 0.4308613, 0.5466399, 0.3565571, 0.5507224, 0.3275157, 0.4857403, 0.3745229, 0.4944044, 0.4354932, 0.4055464, 0.4792593, 0.5230589, 0.2415968, 0.3994462, 0.6382857, 0.5929313\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | n | p | rou | MSE | MSE.list |\n", + "|---|---|---|---|---|---|\n", + "| 46 | 100 | 1000 | 0.5 | 0.47 ( 0.01 ) | 0.4923079, 0.5236572, 0.3049313, 0.4022395, 0.4116445, 0.4457436, 0.5321101, 0.3994759, 0.3889622, 0.4957112, 0.2661450, 0.5383919, 0.4251333, 0.5020789, 0.5774619, 0.3274016, 0.5765174, 0.4136176, 0.5066335, 0.7475691, 0.7385966, 0.3141407, 0.4786586, 0.4811622, 0.4128133, 0.6605431, 0.5315163, 0.4400826, 0.8595558, 0.3382323, 0.4297301, 0.4961741, 0.5237057, 0.6787550, 0.4064282, 0.4305124, 0.3051361, 0.4404218, 0.4208728, 0.5967023, 0.5111793, 0.5062338, 0.2653858, 0.5910289, 0.3166639, 0.4614773, 0.4315483, 0.6846844, 0.4522860, 0.2785640, 0.6029796, 0.4161780, 0.5801175, 0.4112313, 0.5364697, 0.4318882, 0.3655746, 0.4455715, 0.3465285, 0.7532535, 0.3877135, 0.5023844, 0.2049257, 0.4338186, 0.3111033, 0.4220746, 0.5432892, 0.7013340, 0.5247176, 0.3747088, 0.3819685, 0.4208868, 0.2586503, 0.5655622, 0.5948446, 0.3660124, 0.4598678, 0.6435442, 0.3349638, 0.4052510, 0.6205234, 0.4349098, 0.6964996, 0.4033935, 0.4308613, 0.5466399, 0.3565571, 0.5507224, 0.3275157, 0.4857403, 0.3745229, 0.4944044, 0.4354932, 0.4055464, 0.4792593, 0.5230589, 0.2415968, 0.3994462, 0.6382857, 0.5929313 |\n", + "\n" + ], + "text/plain": [ + " n p rou MSE \n", + "46 100 1000 0.5 0.47 ( 0.01 )\n", + " MSE.list \n", + "46 0.4923079, 0.5236572, 0.3049313, 0.4022395, 0.4116445, 0.4457436, 0.5321101, 0.3994759, 0.3889622, 0.4957112, 0.2661450, 0.5383919, 0.4251333, 0.5020789, 0.5774619, 0.3274016, 0.5765174, 0.4136176, 0.5066335, 0.7475691, 0.7385966, 0.3141407, 0.4786586, 0.4811622, 0.4128133, 0.6605431, 0.5315163, 0.4400826, 0.8595558, 0.3382323, 0.4297301, 0.4961741, 0.5237057, 0.6787550, 0.4064282, 0.4305124, 0.3051361, 0.4404218, 0.4208728, 0.5967023, 0.5111793, 0.5062338, 0.2653858, 0.5910289, 0.3166639, 0.4614773, 0.4315483, 0.6846844, 0.4522860, 0.2785640, 0.6029796, 0.4161780, 0.5801175, 0.4112313, 0.5364697, 0.4318882, 0.3655746, 0.4455715, 0.3465285, 0.7532535, 0.3877135, 0.5023844, 0.2049257, 0.4338186, 0.3111033, 0.4220746, 0.5432892, 0.7013340, 0.5247176, 0.3747088, 0.3819685, 0.4208868, 0.2586503, 0.5655622, 0.5948446, 0.3660124, 0.4598678, 0.6435442, 0.3349638, 0.4052510, 0.6205234, 0.4349098, 0.6964996, 0.4033935, 0.4308613, 0.5466399, 0.3565571, 0.5507224, 0.3275157, 0.4857403, 0.3745229, 0.4944044, 0.4354932, 0.4055464, 0.4792593, 0.5230589, 0.2415968, 0.3994462, 0.6382857, 0.5929313" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "table_block_rf = NULL\n", + "for (i in 1:length(results_block_rf)){\n", + " table_block_rf = rbind(table_block_rf, results_block_rf[[i]][c('n', 'p', 'rou', 'MSE', 'MSE.list')])\n", + "}\n", + "table_block_rf = as.data.frame(table_block_rf)\n", + "rf_block5_rf= table_block_rf[table_block_rf$n == 100 & table_block_rf$p == 1000 & table_block_rf$rou == 0.5, ]\n", + "rf_block5_rf" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\n", + "
nprouMSEMSE.list
46100 1000 0.5 0.91 ( 0.04 ) 1.1101125, 0.6519860, 0.7398478, 1.1498738, 0.9619897, 0.6013746, 1.3625092, 0.3473651, 1.1450087, 0.6678814, 0.2637982, 1.1272821, 0.5100440, 1.1207711, 0.6858812, 0.4732182, 0.4877071, 1.3858793, 0.9285002, 0.8910513, 0.4041991, 0.3094465, 0.7791739, 0.9177788, 1.3679422, 0.3555295, 0.6004392, 0.9110635, 0.6472957, 0.9988893, 2.1903274, 2.5255804, 0.9870283, 1.2731291, 0.6370381, 0.9076340, 0.8604679, 0.7195767, 0.8129923, 0.8024248, 0.9105749, 1.5656134, 0.4518466, 0.5868373, 0.7896528, 1.1223770, 0.2244172, 0.4527471, 1.0980113, 0.8810156, 0.9874237, 1.6133751, 1.7549198, 0.8114664, 0.6056103, 1.2937025, 0.5187529, 0.4362994, 1.0523983, 0.4049739, 0.6115282, 0.7411138, 1.0011934, 0.3509803, 0.5946993, 0.8179413, 0.8536523, 0.5527882, 0.9707325, 1.2802410, 0.9099143, 0.8149918, 1.0858406, 0.8915861, 1.1319847, 0.9534063, 1.8160839, 1.0257458, 0.9344737, 0.6119914, 0.5159076, 0.7852905, 0.4582427, 0.8083787, 1.2116205, 0.5323257, 1.1506337, 0.9291959, 1.6839768, 1.1023322, 1.4818658, 0.7335560, 1.3694255, 0.6343668, 0.5388556, 0.8552869, 2.0695142, 0.5429316, 0.7798566, 1.5607776
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllll}\n", + " & n & p & rou & MSE & MSE.list\\\\\n", + "\\hline\n", + "\t46 & 100 & 1000 & 0.5 & 0.91 ( 0.04 ) & 1.1101125, 0.6519860, 0.7398478, 1.1498738, 0.9619897, 0.6013746, 1.3625092, 0.3473651, 1.1450087, 0.6678814, 0.2637982, 1.1272821, 0.5100440, 1.1207711, 0.6858812, 0.4732182, 0.4877071, 1.3858793, 0.9285002, 0.8910513, 0.4041991, 0.3094465, 0.7791739, 0.9177788, 1.3679422, 0.3555295, 0.6004392, 0.9110635, 0.6472957, 0.9988893, 2.1903274, 2.5255804, 0.9870283, 1.2731291, 0.6370381, 0.9076340, 0.8604679, 0.7195767, 0.8129923, 0.8024248, 0.9105749, 1.5656134, 0.4518466, 0.5868373, 0.7896528, 1.1223770, 0.2244172, 0.4527471, 1.0980113, 0.8810156, 0.9874237, 1.6133751, 1.7549198, 0.8114664, 0.6056103, 1.2937025, 0.5187529, 0.4362994, 1.0523983, 0.4049739, 0.6115282, 0.7411138, 1.0011934, 0.3509803, 0.5946993, 0.8179413, 0.8536523, 0.5527882, 0.9707325, 1.2802410, 0.9099143, 0.8149918, 1.0858406, 0.8915861, 1.1319847, 0.9534063, 1.8160839, 1.0257458, 0.9344737, 0.6119914, 0.5159076, 0.7852905, 0.4582427, 0.8083787, 1.2116205, 0.5323257, 1.1506337, 0.9291959, 1.6839768, 1.1023322, 1.4818658, 0.7335560, 1.3694255, 0.6343668, 0.5388556, 0.8552869, 2.0695142, 0.5429316, 0.7798566, 1.5607776\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | n | p | rou | MSE | MSE.list |\n", + "|---|---|---|---|---|---|\n", + "| 46 | 100 | 1000 | 0.5 | 0.91 ( 0.04 ) | 1.1101125, 0.6519860, 0.7398478, 1.1498738, 0.9619897, 0.6013746, 1.3625092, 0.3473651, 1.1450087, 0.6678814, 0.2637982, 1.1272821, 0.5100440, 1.1207711, 0.6858812, 0.4732182, 0.4877071, 1.3858793, 0.9285002, 0.8910513, 0.4041991, 0.3094465, 0.7791739, 0.9177788, 1.3679422, 0.3555295, 0.6004392, 0.9110635, 0.6472957, 0.9988893, 2.1903274, 2.5255804, 0.9870283, 1.2731291, 0.6370381, 0.9076340, 0.8604679, 0.7195767, 0.8129923, 0.8024248, 0.9105749, 1.5656134, 0.4518466, 0.5868373, 0.7896528, 1.1223770, 0.2244172, 0.4527471, 1.0980113, 0.8810156, 0.9874237, 1.6133751, 1.7549198, 0.8114664, 0.6056103, 1.2937025, 0.5187529, 0.4362994, 1.0523983, 0.4049739, 0.6115282, 0.7411138, 1.0011934, 0.3509803, 0.5946993, 0.8179413, 0.8536523, 0.5527882, 0.9707325, 1.2802410, 0.9099143, 0.8149918, 1.0858406, 0.8915861, 1.1319847, 0.9534063, 1.8160839, 1.0257458, 0.9344737, 0.6119914, 0.5159076, 0.7852905, 0.4582427, 0.8083787, 1.2116205, 0.5323257, 1.1506337, 0.9291959, 1.6839768, 1.1023322, 1.4818658, 0.7335560, 1.3694255, 0.6343668, 0.5388556, 0.8552869, 2.0695142, 0.5429316, 0.7798566, 1.5607776 |\n", + "\n" + ], + "text/plain": [ + " n p rou MSE \n", + "46 100 1000 0.5 0.91 ( 0.04 )\n", + " MSE.list \n", + "46 1.1101125, 0.6519860, 0.7398478, 1.1498738, 0.9619897, 0.6013746, 1.3625092, 0.3473651, 1.1450087, 0.6678814, 0.2637982, 1.1272821, 0.5100440, 1.1207711, 0.6858812, 0.4732182, 0.4877071, 1.3858793, 0.9285002, 0.8910513, 0.4041991, 0.3094465, 0.7791739, 0.9177788, 1.3679422, 0.3555295, 0.6004392, 0.9110635, 0.6472957, 0.9988893, 2.1903274, 2.5255804, 0.9870283, 1.2731291, 0.6370381, 0.9076340, 0.8604679, 0.7195767, 0.8129923, 0.8024248, 0.9105749, 1.5656134, 0.4518466, 0.5868373, 0.7896528, 1.1223770, 0.2244172, 0.4527471, 1.0980113, 0.8810156, 0.9874237, 1.6133751, 1.7549198, 0.8114664, 0.6056103, 1.2937025, 0.5187529, 0.4362994, 1.0523983, 0.4049739, 0.6115282, 0.7411138, 1.0011934, 0.3509803, 0.5946993, 0.8179413, 0.8536523, 0.5527882, 0.9707325, 1.2802410, 0.9099143, 0.8149918, 1.0858406, 0.8915861, 1.1319847, 0.9534063, 1.8160839, 1.0257458, 0.9344737, 0.6119914, 0.5159076, 0.7852905, 0.4582427, 0.8083787, 1.2116205, 0.5323257, 1.1506337, 0.9291959, 1.6839768, 1.1023322, 1.4818658, 0.7335560, 1.3694255, 0.6343668, 0.5388556, 0.8552869, 2.0695142, 0.5429316, 0.7798566, 1.5607776" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "table_block_compLasso = NULL\n", + "for (i in 1:length(results_block_compLasso)){\n", + " table_block_compLasso = rbind(table_block_compLasso, results_block_compLasso[[i]][c('n', 'p', 'rou', 'MSE', 'MSE.list')])\n", + "}\n", + "table_block_compLasso = as.data.frame(table_block_compLasso)\n", + "rf_block5_compLasso= table_block_compLasso[table_block_compLasso$n == 100 & table_block_compLasso$p == 1000 & table_block_compLasso$rou == 0.5, ]\n", + "rf_block5_compLasso" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "0.439514359427722" + ], + "text/latex": [ + "0.439514359427722" + ], + "text/markdown": [ + "0.439514359427722" + ], + "text/plain": [ + "[1] 0.4395144" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "0.454598954212658" + ], + "text/latex": [ + "0.454598954212658" + ], + "text/markdown": [ + "0.454598954212658" + ], + "text/plain": [ + "[1] 0.454599" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\t
2.5%
\n", + "\t\t
-0.273304180160457
\n", + "\t
97.5%
\n", + "\t\t
1.56863259003766
\n", + "
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[2.5\\textbackslash{}\\%] -0.273304180160457\n", + "\\item[97.5\\textbackslash{}\\%] 1.56863259003766\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "2.5%\n", + ": -0.27330418016045797.5%\n", + ": 1.56863259003766\n", + "\n" + ], + "text/plain": [ + " 2.5% 97.5% \n", + "-0.2733042 1.5686326 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "diff_block = (unlist(rf_block5_compLasso$MSE.list) - unlist(rf_block5_rf$MSE.list))\n", + "mean(diff_block)\n", + "sd(diff_block)\n", + "quantile(diff_block, probs = c(0.025, 0.975))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Toeplitz 0.5" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\n", + "
nprouMSEMSE.list
46100 1000 0.5 0.72 ( 0.02 ) 0.5480701, 0.5456622, 0.6046593, 0.7802792, 0.5564160, 0.8468460, 0.4962066, 0.6002301, 0.7197087, 0.8322002, 0.8370241, 0.7042491, 0.7296914, 0.7883332, 0.7773170, 0.8004030, 0.5738099, 0.7080895, 0.4735798, 0.8907030, 0.4745488, 0.6972922, 0.8183826, 0.5698736, 0.6296879, 0.6939117, 0.8883939, 0.5428835, 1.1874869, 0.6937746, 0.4956598, 0.5523018, 0.8295625, 0.8923571, 1.0726882, 0.6509979, 0.5781111, 0.9521210, 0.5251293, 0.7952157, 0.7322116, 0.6871817, 0.7204011, 1.1810854, 1.1751481, 0.7082380, 0.6971877, 1.0196209, 0.7037824, 0.8105835, 1.1165501, 0.5775225, 0.5665563, 0.7273973, 1.3113648, 0.6025675, 0.8935835, 0.6165939, 0.3838047, 0.6833741, 0.5721250, 0.5478751, 0.5123701, 0.7706215, 1.0321326, 0.7021128, 0.5282792, 0.5642605, 0.7610716, 0.6069513, 0.6572387, 0.8830648, 0.7969348, 0.9412556, 0.5570120, 0.6591877, 0.6899799, 0.5051250, 0.8911872, 0.5656055, 1.0006875, 0.8468315, 0.9820390, 0.6041058, 0.9307259, 0.7710037, 0.5545953, 0.4067023, 0.5719611, 0.4234005, 0.8979186, 0.9248135, 0.5666418, 0.7263402, 0.9324326, 0.4342892, 0.7020636, 0.8808153, 0.6929102, 0.6299956
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllll}\n", + " & n & p & rou & MSE & MSE.list\\\\\n", + "\\hline\n", + "\t46 & 100 & 1000 & 0.5 & 0.72 ( 0.02 ) & 0.5480701, 0.5456622, 0.6046593, 0.7802792, 0.5564160, 0.8468460, 0.4962066, 0.6002301, 0.7197087, 0.8322002, 0.8370241, 0.7042491, 0.7296914, 0.7883332, 0.7773170, 0.8004030, 0.5738099, 0.7080895, 0.4735798, 0.8907030, 0.4745488, 0.6972922, 0.8183826, 0.5698736, 0.6296879, 0.6939117, 0.8883939, 0.5428835, 1.1874869, 0.6937746, 0.4956598, 0.5523018, 0.8295625, 0.8923571, 1.0726882, 0.6509979, 0.5781111, 0.9521210, 0.5251293, 0.7952157, 0.7322116, 0.6871817, 0.7204011, 1.1810854, 1.1751481, 0.7082380, 0.6971877, 1.0196209, 0.7037824, 0.8105835, 1.1165501, 0.5775225, 0.5665563, 0.7273973, 1.3113648, 0.6025675, 0.8935835, 0.6165939, 0.3838047, 0.6833741, 0.5721250, 0.5478751, 0.5123701, 0.7706215, 1.0321326, 0.7021128, 0.5282792, 0.5642605, 0.7610716, 0.6069513, 0.6572387, 0.8830648, 0.7969348, 0.9412556, 0.5570120, 0.6591877, 0.6899799, 0.5051250, 0.8911872, 0.5656055, 1.0006875, 0.8468315, 0.9820390, 0.6041058, 0.9307259, 0.7710037, 0.5545953, 0.4067023, 0.5719611, 0.4234005, 0.8979186, 0.9248135, 0.5666418, 0.7263402, 0.9324326, 0.4342892, 0.7020636, 0.8808153, 0.6929102, 0.6299956\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | n | p | rou | MSE | MSE.list |\n", + "|---|---|---|---|---|---|\n", + "| 46 | 100 | 1000 | 0.5 | 0.72 ( 0.02 ) | 0.5480701, 0.5456622, 0.6046593, 0.7802792, 0.5564160, 0.8468460, 0.4962066, 0.6002301, 0.7197087, 0.8322002, 0.8370241, 0.7042491, 0.7296914, 0.7883332, 0.7773170, 0.8004030, 0.5738099, 0.7080895, 0.4735798, 0.8907030, 0.4745488, 0.6972922, 0.8183826, 0.5698736, 0.6296879, 0.6939117, 0.8883939, 0.5428835, 1.1874869, 0.6937746, 0.4956598, 0.5523018, 0.8295625, 0.8923571, 1.0726882, 0.6509979, 0.5781111, 0.9521210, 0.5251293, 0.7952157, 0.7322116, 0.6871817, 0.7204011, 1.1810854, 1.1751481, 0.7082380, 0.6971877, 1.0196209, 0.7037824, 0.8105835, 1.1165501, 0.5775225, 0.5665563, 0.7273973, 1.3113648, 0.6025675, 0.8935835, 0.6165939, 0.3838047, 0.6833741, 0.5721250, 0.5478751, 0.5123701, 0.7706215, 1.0321326, 0.7021128, 0.5282792, 0.5642605, 0.7610716, 0.6069513, 0.6572387, 0.8830648, 0.7969348, 0.9412556, 0.5570120, 0.6591877, 0.6899799, 0.5051250, 0.8911872, 0.5656055, 1.0006875, 0.8468315, 0.9820390, 0.6041058, 0.9307259, 0.7710037, 0.5545953, 0.4067023, 0.5719611, 0.4234005, 0.8979186, 0.9248135, 0.5666418, 0.7263402, 0.9324326, 0.4342892, 0.7020636, 0.8808153, 0.6929102, 0.6299956 |\n", + "\n" + ], + "text/plain": [ + " n p rou MSE \n", + "46 100 1000 0.5 0.72 ( 0.02 )\n", + " MSE.list \n", + "46 0.5480701, 0.5456622, 0.6046593, 0.7802792, 0.5564160, 0.8468460, 0.4962066, 0.6002301, 0.7197087, 0.8322002, 0.8370241, 0.7042491, 0.7296914, 0.7883332, 0.7773170, 0.8004030, 0.5738099, 0.7080895, 0.4735798, 0.8907030, 0.4745488, 0.6972922, 0.8183826, 0.5698736, 0.6296879, 0.6939117, 0.8883939, 0.5428835, 1.1874869, 0.6937746, 0.4956598, 0.5523018, 0.8295625, 0.8923571, 1.0726882, 0.6509979, 0.5781111, 0.9521210, 0.5251293, 0.7952157, 0.7322116, 0.6871817, 0.7204011, 1.1810854, 1.1751481, 0.7082380, 0.6971877, 1.0196209, 0.7037824, 0.8105835, 1.1165501, 0.5775225, 0.5665563, 0.7273973, 1.3113648, 0.6025675, 0.8935835, 0.6165939, 0.3838047, 0.6833741, 0.5721250, 0.5478751, 0.5123701, 0.7706215, 1.0321326, 0.7021128, 0.5282792, 0.5642605, 0.7610716, 0.6069513, 0.6572387, 0.8830648, 0.7969348, 0.9412556, 0.5570120, 0.6591877, 0.6899799, 0.5051250, 0.8911872, 0.5656055, 1.0006875, 0.8468315, 0.9820390, 0.6041058, 0.9307259, 0.7710037, 0.5545953, 0.4067023, 0.5719611, 0.4234005, 0.8979186, 0.9248135, 0.5666418, 0.7263402, 0.9324326, 0.4342892, 0.7020636, 0.8808153, 0.6929102, 0.6299956" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "table_toe_rf = NULL\n", + "for (i in 1:length(results_toe_rf)){\n", + " table_toe_rf = rbind(table_toe_rf, results_toe_rf[[i]][c('n', 'p', 'rou', 'MSE', 'MSE.list')])\n", + "}\n", + "table_toe_rf = as.data.frame(table_toe_rf)\n", + "rf_toe5_rf= table_toe_rf[table_toe_rf$n == 100 & table_toe_rf$p == 1000 & table_toe_rf$rou == 0.5, ]\n", + "rf_toe5_rf" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\n", + "
nprouMSEMSE.list
46100 1000 0.5 0.96 ( 0.05 ) 1.1333219, 1.2739089, 0.6735451, 0.7455676, 0.8084525, 0.9115262, 1.1253772, 0.7718239, 0.7704166, 0.9337895, 0.6251795, 1.2304850, 0.9825552, 0.6256884, 0.8465868, 0.8928493, 0.6841306, 0.7445355, 1.0251240, 1.0109804, 0.6584266, 0.6574249, 0.8796538, 0.5822056, 1.8200702, 0.3513984, 0.7348276, 1.9856867, 0.5293853, 1.2169509, 0.4462136, 1.0628981, 1.0927890, 0.7534512, 0.3504197, 0.6451335, 0.7688543, 0.4767431, 1.7155647, 1.6765981, 0.5145321, 0.4758315, 1.9340790, 0.3082418, 0.8707792, 0.8961984, 0.6985983, 1.4072453, 0.3051685, 0.5767318, 0.8742455, 1.1188925, 1.0622541, 1.1897730, 0.7308046, 1.1798550, 0.5843354, 0.6606599, 1.0553048, 1.0076178, 0.6620472, 0.5932031, 1.5098887, 0.9258426, 0.5178589, 0.8255029, 0.7817222, 1.9833525, 0.8742543, 1.0785289, 0.9291164, 0.5450408, 0.9975609, 0.8724312, 0.5304621, 1.0475676, 1.5424944, 1.3738204, 2.1881127, 1.7968121, 0.7707653, 0.5582550, 1.4977663, 0.8136983, 0.5509221, 0.5157933, 1.1241994, 0.5044806, 1.1753270, 0.4650944, 1.0019032, 0.7552821, 0.8536905, 3.1389767, 0.8944839, 0.8503332, 0.9161472, 1.7568389, 0.9580790, 1.2403539
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllll}\n", + " & n & p & rou & MSE & MSE.list\\\\\n", + "\\hline\n", + "\t46 & 100 & 1000 & 0.5 & 0.96 ( 0.05 ) & 1.1333219, 1.2739089, 0.6735451, 0.7455676, 0.8084525, 0.9115262, 1.1253772, 0.7718239, 0.7704166, 0.9337895, 0.6251795, 1.2304850, 0.9825552, 0.6256884, 0.8465868, 0.8928493, 0.6841306, 0.7445355, 1.0251240, 1.0109804, 0.6584266, 0.6574249, 0.8796538, 0.5822056, 1.8200702, 0.3513984, 0.7348276, 1.9856867, 0.5293853, 1.2169509, 0.4462136, 1.0628981, 1.0927890, 0.7534512, 0.3504197, 0.6451335, 0.7688543, 0.4767431, 1.7155647, 1.6765981, 0.5145321, 0.4758315, 1.9340790, 0.3082418, 0.8707792, 0.8961984, 0.6985983, 1.4072453, 0.3051685, 0.5767318, 0.8742455, 1.1188925, 1.0622541, 1.1897730, 0.7308046, 1.1798550, 0.5843354, 0.6606599, 1.0553048, 1.0076178, 0.6620472, 0.5932031, 1.5098887, 0.9258426, 0.5178589, 0.8255029, 0.7817222, 1.9833525, 0.8742543, 1.0785289, 0.9291164, 0.5450408, 0.9975609, 0.8724312, 0.5304621, 1.0475676, 1.5424944, 1.3738204, 2.1881127, 1.7968121, 0.7707653, 0.5582550, 1.4977663, 0.8136983, 0.5509221, 0.5157933, 1.1241994, 0.5044806, 1.1753270, 0.4650944, 1.0019032, 0.7552821, 0.8536905, 3.1389767, 0.8944839, 0.8503332, 0.9161472, 1.7568389, 0.9580790, 1.2403539\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | n | p | rou | MSE | MSE.list |\n", + "|---|---|---|---|---|---|\n", + "| 46 | 100 | 1000 | 0.5 | 0.96 ( 0.05 ) | 1.1333219, 1.2739089, 0.6735451, 0.7455676, 0.8084525, 0.9115262, 1.1253772, 0.7718239, 0.7704166, 0.9337895, 0.6251795, 1.2304850, 0.9825552, 0.6256884, 0.8465868, 0.8928493, 0.6841306, 0.7445355, 1.0251240, 1.0109804, 0.6584266, 0.6574249, 0.8796538, 0.5822056, 1.8200702, 0.3513984, 0.7348276, 1.9856867, 0.5293853, 1.2169509, 0.4462136, 1.0628981, 1.0927890, 0.7534512, 0.3504197, 0.6451335, 0.7688543, 0.4767431, 1.7155647, 1.6765981, 0.5145321, 0.4758315, 1.9340790, 0.3082418, 0.8707792, 0.8961984, 0.6985983, 1.4072453, 0.3051685, 0.5767318, 0.8742455, 1.1188925, 1.0622541, 1.1897730, 0.7308046, 1.1798550, 0.5843354, 0.6606599, 1.0553048, 1.0076178, 0.6620472, 0.5932031, 1.5098887, 0.9258426, 0.5178589, 0.8255029, 0.7817222, 1.9833525, 0.8742543, 1.0785289, 0.9291164, 0.5450408, 0.9975609, 0.8724312, 0.5304621, 1.0475676, 1.5424944, 1.3738204, 2.1881127, 1.7968121, 0.7707653, 0.5582550, 1.4977663, 0.8136983, 0.5509221, 0.5157933, 1.1241994, 0.5044806, 1.1753270, 0.4650944, 1.0019032, 0.7552821, 0.8536905, 3.1389767, 0.8944839, 0.8503332, 0.9161472, 1.7568389, 0.9580790, 1.2403539 |\n", + "\n" + ], + "text/plain": [ + " n p rou MSE \n", + "46 100 1000 0.5 0.96 ( 0.05 )\n", + " MSE.list \n", + "46 1.1333219, 1.2739089, 0.6735451, 0.7455676, 0.8084525, 0.9115262, 1.1253772, 0.7718239, 0.7704166, 0.9337895, 0.6251795, 1.2304850, 0.9825552, 0.6256884, 0.8465868, 0.8928493, 0.6841306, 0.7445355, 1.0251240, 1.0109804, 0.6584266, 0.6574249, 0.8796538, 0.5822056, 1.8200702, 0.3513984, 0.7348276, 1.9856867, 0.5293853, 1.2169509, 0.4462136, 1.0628981, 1.0927890, 0.7534512, 0.3504197, 0.6451335, 0.7688543, 0.4767431, 1.7155647, 1.6765981, 0.5145321, 0.4758315, 1.9340790, 0.3082418, 0.8707792, 0.8961984, 0.6985983, 1.4072453, 0.3051685, 0.5767318, 0.8742455, 1.1188925, 1.0622541, 1.1897730, 0.7308046, 1.1798550, 0.5843354, 0.6606599, 1.0553048, 1.0076178, 0.6620472, 0.5932031, 1.5098887, 0.9258426, 0.5178589, 0.8255029, 0.7817222, 1.9833525, 0.8742543, 1.0785289, 0.9291164, 0.5450408, 0.9975609, 0.8724312, 0.5304621, 1.0475676, 1.5424944, 1.3738204, 2.1881127, 1.7968121, 0.7707653, 0.5582550, 1.4977663, 0.8136983, 0.5509221, 0.5157933, 1.1241994, 0.5044806, 1.1753270, 0.4650944, 1.0019032, 0.7552821, 0.8536905, 3.1389767, 0.8944839, 0.8503332, 0.9161472, 1.7568389, 0.9580790, 1.2403539" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "table_toe_compLasso = NULL\n", + "for (i in 1:length(results_toe_compLasso)){\n", + " table_toe_compLasso = rbind(table_toe_compLasso, results_toe_compLasso[[i]][c('n', 'p', 'rou', 'MSE', 'MSE.list')])\n", + "}\n", + "table_toe_compLasso = as.data.frame(table_toe_compLasso)\n", + "rf_toe5_compLasso= table_toe_compLasso[table_toe_compLasso$n == 100 & table_toe_compLasso$p == 1000 & table_toe_compLasso$rou == 0.5, ]\n", + "rf_toe5_compLasso" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "0.23096420572779" + ], + "text/latex": [ + "0.23096420572779" + ], + "text/markdown": [ + "0.23096420572779" + ], + "text/plain": [ + "[1] 0.2309642" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "0.521190219773319" + ], + "text/latex": [ + "0.521190219773319" + ], + "text/markdown": [ + "0.521190219773319" + ], + "text/plain": [ + "[1] 0.5211902" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\t
2.5%
\n", + "\t\t
-0.621269466414493
\n", + "\t
97.5%
\n", + "\t\t
1.36106289789273
\n", + "
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[2.5\\textbackslash{}\\%] -0.621269466414493\n", + "\\item[97.5\\textbackslash{}\\%] 1.36106289789273\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "2.5%\n", + ": -0.62126946641449397.5%\n", + ": 1.36106289789273\n", + "\n" + ], + "text/plain": [ + " 2.5% 97.5% \n", + "-0.6212695 1.3610629 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "diff_toe = (unlist(rf_toe5_compLasso$MSE.list) - unlist(rf_toe5_rf$MSE.list))\n", + "mean(diff_toe)\n", + "sd(diff_toe)\n", + "quantile(diff_toe, probs = c(0.025, 0.975))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simulations/results_summary/.DS_Store b/simulations/results_summary/.DS_Store deleted file mode 100755 index b271dc6..0000000 Binary files a/simulations/results_summary/.DS_Store and /dev/null differ diff --git a/simulations/results_summary_bin/sim_block_Elnet_binary.txt b/simulations/results_summary_bin/sim_block_Elnet_binary.txt new file mode 100644 index 0000000..d0d4d27 --- /dev/null +++ b/simulations/results_summary_bin/sim_block_Elnet_binary.txt @@ -0,0 +1,81 @@ +"N" "P" "Corr" "Ratio" "Stab" "ROC" "FP" "FN" "num_select" "FDR" "ROC_mean" "FP_mean" "FN_mean" +50 50 "0.1" 1 0.01 "0.61 ( 0.01 )" "17.05 ( 1.31 )" "3.17 ( 0.19 )" 18.88 "0.8" 0.61 17.05 3.17 +100 50 "0.1" 0.5 0.04 "0.59 ( 0.01 )" "13.62 ( 1.31 )" "2.9 ( 0.17 )" 15.72 "0.64" 0.59 13.62 2.9 +500 50 "0.1" 0.1 0.11 "0.64 ( 0 )" "16.89 ( 1.14 )" "1.1 ( 0.13 )" 20.79 "0.68" 0.64 16.89 1.1 +1000 50 "0.1" 0.05 0.12 "0.66 ( 0 )" "19.43 ( 1.02 )" "0.42 ( 0.08 )" 24.01 "0.71" 0.66 19.43 0.42 +50 100 "0.1" 2 0.01 "0.63 ( 0.01 )" "27.39 ( 2.11 )" "3.38 ( 0.17 )" 29.01 "0.87" 0.63 27.39 3.38 +100 100 "0.1" 1 0.02 "0.59 ( 0.01 )" "26.17 ( 2.4 )" "3.34 ( 0.16 )" 27.83 "0.84" 0.59 26.17 3.34 +500 100 "0.1" 0.2 0.09 "0.62 ( 0 )" "22.75 ( 1.87 )" "1.61 ( 0.13 )" 26.14 "0.69" 0.62 22.75 1.61 +1000 100 "0.1" 0.1 0.1 "0.64 ( 0 )" "28.32 ( 1.88 )" "0.66 ( 0.1 )" 32.66 "0.77" 0.64 28.32 0.66 +50 500 "0.1" 10 0 "0.61 ( 0.01 )" "69.03 ( 7.45 )" "4.13 ( 0.19 )" 69.9 "0.96" 0.61 69.03 4.13 +100 500 "0.1" 5 0 "0.57 ( 0.01 )" "70.64 ( 9.13 )" "3.91 ( 0.17 )" 71.73 "0.91" 0.57 70.64 3.91 +500 500 "0.1" 1 0.1 "0.61 ( 0.01 )" "20.55 ( 4.33 )" "3.15 ( 0.1 )" 22.4 "0.62" 0.61 20.55 3.15 +1000 500 "0.1" 0.5 0.12 "0.63 ( 0 )" "26.03 ( 3.45 )" "2.38 ( 0.11 )" 28.65 "0.62" 0.63 26.03 2.38 +50 1000 "0.1" 20 0 "0.59 ( 0.01 )" "103.61 ( 10.54 )" "4.34 ( 0.18 )" 104.27 "0.98" 0.59 103.61 4.34 +100 1000 "0.1" 10 0 "0.56 ( 0.01 )" "103.21 ( 12.75 )" "4.15 ( 0.17 )" 104.06 "0.95" 0.56 103.21 4.15 +500 1000 "0.1" 2 0.07 "0.61 ( 0 )" "29.41 ( 7.4 )" "3.25 ( 0.09 )" 31.16 "0.62" 0.61 29.41 3.25 +1000 1000 "0.1" 1 0.18 "0.62 ( 0 )" "16.15 ( 2.77 )" "2.73 ( 0.09 )" 18.42 "0.53" 0.62 16.15 2.73 +50 50 "0.3" 1 0.08 "0.68 ( 0.01 )" "14.8 ( 1.01 )" "1.73 ( 0.15 )" 18.07 "0.69" 0.68 14.8 1.73 +100 50 "0.3" 0.5 0.15 "0.77 ( 0.01 )" "15.15 ( 1 )" "0.64 ( 0.09 )" 19.51 "0.65" 0.77 15.15 0.64 +500 50 "0.3" 0.1 0.35 "0.85 ( 0 )" "8.95 ( 0.69 )" "0 ( 0 )" 13.95 "0.46" 0.85 8.95 0 +1000 50 "0.3" 0.05 0.33 "0.86 ( 0 )" "9.66 ( 0.93 )" "0 ( 0 )" 14.66 "0.44" 0.86 9.66 0 +50 100 "0.3" 2 0.05 "0.67 ( 0.01 )" "23.92 ( 2 )" "2.13 ( 0.15 )" 26.79 "0.77" 0.67 23.92 2.13 +100 100 "0.3" 1 0.14 "0.74 ( 0.01 )" "17.75 ( 1.51 )" "1.13 ( 0.11 )" 21.62 "0.67" 0.74 17.75 1.13 +500 100 "0.3" 0.2 0.32 "0.86 ( 0 )" "11.53 ( 1.02 )" "0.01 ( 0.01 )" 16.52 "0.51" 0.86 11.53 0.01 +1000 100 "0.3" 0.1 0.33 "0.86 ( 0 )" "11.15 ( 1.03 )" "0 ( 0 )" 16.15 "0.49" 0.86 11.15 0 +50 500 "0.3" 10 0.01 "0.6 ( 0.01 )" "81.07 ( 6.91 )" "2.92 ( 0.14 )" 83.15 "0.93" 0.6 81.07 2.92 +100 500 "0.3" 5 0.06 "0.66 ( 0.01 )" "38.14 ( 5.11 )" "2.16 ( 0.13 )" 40.98 "0.78" 0.66 38.14 2.16 +500 500 "0.3" 1 0.22 "0.84 ( 0 )" "20.87 ( 1.93 )" "0.02 ( 0.01 )" 25.85 "0.63" 0.84 20.87 0.02 +1000 500 "0.3" 0.5 0.29 "0.86 ( 0 )" "15.35 ( 1.6 )" "0 ( 0 )" 20.35 "0.53" 0.86 15.35 0 +50 1000 "0.3" 20 0.01 "0.63 ( 0.01 )" "104.78 ( 9.53 )" "3.37 ( 0.14 )" 106.41 "0.96" 0.63 104.78 3.37 +100 1000 "0.3" 10 0.04 "0.64 ( 0.01 )" "55.95 ( 7.57 )" "2.5 ( 0.13 )" 58.45 "0.85" 0.64 55.95 2.5 +500 1000 "0.3" 2 0.23 "0.85 ( 0 )" "20.69 ( 1.82 )" "0.05 ( 0.02 )" 25.64 "0.64" 0.85 20.69 0.05 +1000 1000 "0.3" 1 0.29 "0.86 ( 0 )" "15.19 ( 1.67 )" "0 ( 0 )" 20.19 "0.51" 0.86 15.19 0 +50 50 "0.5" 1 0.11 "0.7 ( 0.01 )" "13.99 ( 0.96 )" "1.59 ( 0.12 )" 17.4 "0.68" 0.7 13.99 1.59 +100 50 "0.5" 0.5 0.21 "0.8 ( 0.01 )" "11.28 ( 0.76 )" "0.81 ( 0.1 )" 15.47 "0.57" 0.8 11.28 0.81 +500 50 "0.5" 0.1 0.35 "0.88 ( 0 )" "9.06 ( 0.77 )" "0 ( 0 )" 14.06 "0.46" 0.88 9.06 0 +1000 50 "0.5" 0.05 0.39 "0.9 ( 0 )" "8.03 ( 0.81 )" "0 ( 0 )" 13.03 "0.4" 0.9 8.03 0 +50 100 "0.5" 2 0.06 "0.68 ( 0.01 )" "25.61 ( 2.1 )" "1.79 ( 0.12 )" 28.82 "0.77" 0.68 25.61 1.79 +100 100 "0.5" 1 0.18 "0.79 ( 0.01 )" "13.99 ( 1.21 )" "1.12 ( 0.1 )" 17.87 "0.6" 0.79 13.99 1.12 +500 100 "0.5" 0.2 0.32 "0.89 ( 0 )" "11.65 ( 1.03 )" "0 ( 0 )" 16.65 "0.52" 0.89 11.65 0 +1000 100 "0.5" 0.1 0.38 "0.89 ( 0 )" "9.51 ( 0.97 )" "0 ( 0 )" 14.51 "0.43" 0.89 9.51 0 +50 500 "0.5" 10 0.02 "0.61 ( 0.01 )" "72.53 ( 6.75 )" "2.72 ( 0.13 )" 74.81 "0.92" 0.61 72.53 2.72 +100 500 "0.5" 5 0.08 "0.7 ( 0.01 )" "32.65 ( 4.21 )" "1.9 ( 0.11 )" 35.75 "0.76" 0.7 32.65 1.9 +500 500 "0.5" 1 0.23 "0.88 ( 0 )" "20.07 ( 1.75 )" "0 ( 0 )" 25.07 "0.63" 0.88 20.07 0 +1000 500 "0.5" 0.5 0.3 "0.89 ( 0 )" "14.5 ( 1.43 )" "0 ( 0 )" 19.5 "0.53" 0.89 14.5 0 +50 1000 "0.5" 20 0.01 "0.62 ( 0.01 )" "85.83 ( 8.57 )" "3.31 ( 0.12 )" 87.52 "0.94" 0.62 85.83 3.31 +100 1000 "0.5" 10 0.05 "0.67 ( 0.01 )" "51.72 ( 6.91 )" "2.12 ( 0.12 )" 54.6 "0.83" 0.67 51.72 2.12 +500 1000 "0.5" 2 0.24 "0.88 ( 0 )" "19.39 ( 1.85 )" "0.02 ( 0.01 )" 24.37 "0.59" 0.88 19.39 0.02 +1000 1000 "0.5" 1 0.27 "0.89 ( 0 )" "17.02 ( 1.92 )" "0 ( 0 )" 22.02 "0.54" 0.89 17.02 0 +50 50 "0.7" 1 0.13 "0.73 ( 0.01 )" "12.65 ( 0.97 )" "1.61 ( 0.12 )" 16.04 "0.63" 0.73 12.65 1.61 +100 50 "0.7" 0.5 0.22 "0.81 ( 0.01 )" "11.53 ( 0.67 )" "0.54 ( 0.09 )" 15.99 "0.58" 0.81 11.53 0.54 +500 50 "0.7" 0.1 0.34 "0.91 ( 0 )" "9.34 ( 0.72 )" "0 ( 0 )" 14.34 "0.48" 0.91 9.34 0 +1000 50 "0.7" 0.05 0.36 "0.91 ( 0 )" "8.58 ( 0.78 )" "0 ( 0 )" 13.58 "0.42" 0.91 8.58 0 +50 100 "0.7" 2 0.07 "0.69 ( 0.01 )" "24.95 ( 1.99 )" "1.47 ( 0.1 )" 28.48 "0.76" 0.69 24.95 1.47 +100 100 "0.7" 1 0.17 "0.79 ( 0.01 )" "15.63 ( 1.26 )" "0.96 ( 0.11 )" 19.67 "0.63" 0.79 15.63 0.96 +500 100 "0.7" 0.2 0.34 "0.9 ( 0 )" "10.78 ( 0.81 )" "0.01 ( 0.01 )" 15.77 "0.5" 0.9 10.78 0.01 +1000 100 "0.7" 0.1 0.38 "0.91 ( 0 )" "9.42 ( 0.9 )" "0 ( 0 )" 14.42 "0.44" 0.91 9.42 0 +50 500 "0.7" 10 0.02 "0.62 ( 0.01 )" "66.01 ( 6.05 )" "2.75 ( 0.12 )" 68.26 "0.92" 0.62 66.01 2.75 +100 500 "0.7" 5 0.1 "0.74 ( 0.01 )" "25.15 ( 2.8 )" "1.84 ( 0.12 )" 28.31 "0.71" 0.74 25.15 1.84 +500 500 "0.7" 1 0.25 "0.9 ( 0 )" "17.68 ( 1.71 )" "0 ( 0 )" 22.68 "0.59" 0.9 17.68 0 +1000 500 "0.7" 0.5 0.31 "0.91 ( 0 )" "13.6 ( 1.43 )" "0 ( 0 )" 18.6 "0.51" 0.91 13.6 0 +50 1000 "0.7" 20 0.01 "0.62 ( 0.01 )" "86.38 ( 8.91 )" "3.09 ( 0.13 )" 88.29 "0.93" 0.62 86.38 3.09 +100 1000 "0.7" 10 0.06 "0.69 ( 0.01 )" "44.56 ( 6.27 )" "2.12 ( 0.11 )" 47.44 "0.82" 0.69 44.56 2.12 +500 1000 "0.7" 2 0.23 "0.9 ( 0 )" "20.2 ( 1.89 )" "0.03 ( 0.02 )" 25.17 "0.62" 0.9 20.2 0.03 +1000 1000 "0.7" 1 0.27 "0.91 ( 0 )" "16.62 ( 1.81 )" "0 ( 0 )" 21.62 "0.54" 0.91 16.62 0 +50 50 "0.9" 1 0.14 "0.74 ( 0.01 )" "12.38 ( 0.9 )" "1.46 ( 0.1 )" 15.92 "0.63" 0.74 12.38 1.46 +100 50 "0.9" 0.5 0.21 "0.84 ( 0.01 )" "12.36 ( 0.84 )" "0.46 ( 0.08 )" 16.9 "0.58" 0.84 12.36 0.46 +500 50 "0.9" 0.1 0.39 "0.92 ( 0 )" "7.89 ( 0.68 )" "0 ( 0 )" 12.89 "0.42" 0.92 7.89 0 +1000 50 "0.9" 0.05 0.41 "0.92 ( 0 )" "7.38 ( 0.78 )" "0 ( 0 )" 12.38 "0.38" 0.92 7.38 0 +50 100 "0.9" 2 0.09 "0.7 ( 0.01 )" "19.37 ( 1.75 )" "2.08 ( 0.13 )" 22.29 "0.75" 0.7 19.37 2.08 +100 100 "0.9" 1 0.2 "0.81 ( 0.01 )" "14.28 ( 1.07 )" "0.93 ( 0.09 )" 18.35 "0.61" 0.81 14.28 0.93 +500 100 "0.9" 0.2 0.36 "0.92 ( 0 )" "10.15 ( 0.82 )" "0 ( 0 )" 15.15 "0.48" 0.92 10.15 0 +1000 100 "0.9" 0.1 0.38 "0.93 ( 0 )" "9.4 ( 1.07 )" "0 ( 0 )" 14.4 "0.42" 0.93 9.4 0 +50 500 "0.9" 10 0.02 "0.62 ( 0.01 )" "62.39 ( 5.92 )" "2.69 ( 0.14 )" 64.7 "0.9" 0.62 62.39 2.69 +100 500 "0.9" 5 0.12 "0.74 ( 0.01 )" "21.21 ( 2.91 )" "2.02 ( 0.12 )" 24.19 "0.69" 0.74 21.21 2.02 +500 500 "0.9" 1 0.28 "0.91 ( 0 )" "15.52 ( 1.4 )" "0 ( 0 )" 20.52 "0.57" 0.91 15.52 0 +1000 500 "0.9" 0.5 0.29 "0.92 ( 0 )" "14.84 ( 1.41 )" "0 ( 0 )" 19.84 "0.56" 0.92 14.84 0 +50 1000 "0.9" 20 0.02 "0.63 ( 0.01 )" "78.65 ( 8.46 )" "3.08 ( 0.12 )" 80.57 "0.92" 0.63 78.65 3.08 +100 1000 "0.9" 10 0.06 "0.74 ( 0.01 )" "43.94 ( 6.95 )" "2.01 ( 0.11 )" 46.93 "0.79" 0.74 43.94 2.01 +500 1000 "0.9" 2 0.25 "0.91 ( 0 )" "18.95 ( 1.93 )" "0 ( 0 )" 23.95 "0.6" 0.91 18.95 0 +1000 1000 "0.9" 1 0.29 "0.92 ( 0 )" "15.24 ( 1.68 )" "0 ( 0 )" 20.24 "0.52" 0.92 15.24 0 diff --git a/simulations/results_summary_bin/sim_block_GenCompLasso_binary.txt b/simulations/results_summary_bin/sim_block_GenCompLasso_binary.txt new file mode 100644 index 0000000..83deb58 --- /dev/null +++ b/simulations/results_summary_bin/sim_block_GenCompLasso_binary.txt @@ -0,0 +1,81 @@ +"N" "P" "Corr" "Ratio" "Stab" "ROC" "FP" "FN" "num_select" "FDR" "ROC_mean" "FP_mean" "FN_mean" +50 50 "0.1" 1 0.02 "0.58 ( 0.01 )" "1.68 ( 0.53 )" "5.42 ( 0.1 )" 2.26 "0.58" 0.58 1.68 5.42 +100 50 "0.1" 0.5 0.06 "0.51 ( 0 )" "0.08 ( 0.04 )" "5.65 ( 0.08 )" 0.43 "0.18" 0.51 0.08 5.65 +500 50 "0.1" 0.1 NA "0.5 ( 0 )" "0 ( 0 )" "6 ( 0 )" 0 "NaN" 0.5 0 6 +1000 50 "0.1" 0.05 NA "0.5 ( 0 )" "0 ( 0 )" "6 ( 0 )" 0 "NaN" 0.5 0 6 +50 100 "0.1" 2 0.04 "0.61 ( 0.01 )" "3.43 ( 0.63 )" "5.23 ( 0.1 )" 4.2 "0.71" 0.61 3.43 5.23 +100 100 "0.1" 1 0.03 "0.51 ( 0 )" "0.31 ( 0.1 )" "5.8 ( 0.05 )" 0.51 "0.53" 0.51 0.31 5.8 +500 100 "0.1" 0.2 NA "0.5 ( 0 )" "0 ( 0 )" "6 ( 0 )" 0 "NaN" 0.5 0 6 +1000 100 "0.1" 0.1 NA "0.5 ( 0 )" "0 ( 0 )" "6 ( 0 )" 0 "NaN" 0.5 0 6 +50 500 "0.1" 10 0 "0.73 ( 0.01 )" "29.62 ( 7.94 )" "5.17 ( 0.13 )" 30.45 "0.9" 0.73 29.62 5.17 +100 500 "0.1" 5 0.04 "0.53 ( 0.01 )" "0.53 ( 0.1 )" "5.63 ( 0.08 )" 0.9 "0.57" 0.53 0.53 5.63 +500 500 "0.1" 1 NA "0.5 ( 0 )" "0 ( 0 )" "6 ( 0 )" 0 "NaN" 0.5 0 6 +1000 500 "0.1" 0.5 NA "0.5 ( 0 )" "0 ( 0 )" "6 ( 0 )" 0 "NaN" 0.5 0 6 +50 1000 "0.1" 20 0.01 "0.83 ( 0.01 )" "17.45 ( 2.89 )" "5.37 ( 0.1 )" 18.08 "0.94" 0.83 17.45 5.37 +100 1000 "0.1" 10 0.03 "0.56 ( 0.01 )" "1.27 ( 0.25 )" "5.59 ( 0.08 )" 1.68 "0.73" 0.56 1.27 5.59 +500 1000 "0.1" 2 0 "0.5 ( 0 )" "0 ( 0 )" "5.98 ( 0.02 )" 0.02 "0" 0.5 0 5.98 +1000 1000 "0.1" 1 NA "0.5 ( 0 )" "0 ( 0 )" "6 ( 0 )" 0 "NaN" 0.5 0 6 +50 50 "0.3" 1 0.14 "0.86 ( 0.01 )" "9.81 ( 1.05 )" "1.78 ( 0.11 )" 14.03 "0.6" 0.86 9.81 1.78 +100 50 "0.3" 0.5 0.37 "0.83 ( 0.01 )" "3.64 ( 0.75 )" "1.7 ( 0.09 )" 7.94 "0.27" 0.83 3.64 1.7 +500 50 "0.3" 0.1 0.81 "0.81 ( 0 )" "0.02 ( 0.01 )" "1.75 ( 0.09 )" 4.27 "0" 0.81 0.02 1.75 +1000 50 "0.3" 0.05 0.81 "0.8 ( 0 )" "0.06 ( 0.05 )" "1.7 ( 0.09 )" 4.36 "0.01" 0.8 0.06 1.7 +50 100 "0.3" 2 0.1 "0.9 ( 0 )" "16.32 ( 1.58 )" "2.2 ( 0.11 )" 20.12 "0.74" 0.9 16.32 2.2 +100 100 "0.3" 1 0.31 "0.84 ( 0 )" "5.71 ( 1.02 )" "1.72 ( 0.1 )" 9.99 "0.41" 0.84 5.71 1.72 +500 100 "0.3" 0.2 0.8 "0.81 ( 0 )" "0.12 ( 0.06 )" "1.7 ( 0.09 )" 4.42 "0.01" 0.81 0.12 1.7 +1000 100 "0.3" 0.1 0.74 "0.8 ( 0 )" "0.49 ( 0.26 )" "2.05 ( 0.08 )" 4.44 "0.04" 0.8 0.49 2.05 +50 500 "0.3" 10 0.02 "1 ( 0 )" "105.94 ( 7.57 )" "2.04 ( 0.11 )" 109.9 "0.95" 1 105.94 2.04 +100 500 "0.3" 5 0.12 "0.88 ( 0.01 )" "23.82 ( 3.36 )" "1.9 ( 0.09 )" 27.92 "0.75" 0.88 23.82 1.9 +500 500 "0.3" 1 0.79 "0.8 ( 0 )" "0.24 ( 0.08 )" "1.86 ( 0.09 )" 4.38 "0.03" 0.8 0.24 1.86 +1000 500 "0.3" 0.5 0.73 "0.8 ( 0 )" "0.63 ( 0.15 )" "1.85 ( 0.09 )" 4.78 "0.08" 0.8 0.63 1.85 +50 1000 "0.3" 20 0.02 "1 ( 0 )" "154.21 ( 5.09 )" "2.09 ( 0.1 )" 158.12 "0.97" 1 154.21 2.09 +100 1000 "0.3" 10 0.07 "0.91 ( 0 )" "36.7 ( 6.19 )" "2.26 ( 0.1 )" 40.44 "0.84" 0.91 36.7 2.26 +500 1000 "0.3" 2 0.74 "0.81 ( 0 )" "0.57 ( 0.15 )" "1.66 ( 0.09 )" 4.91 "0.07" 0.81 0.57 1.66 +1000 1000 "0.3" 1 0.73 "0.8 ( 0 )" "0.7 ( 0.15 )" "1.84 ( 0.09 )" 4.86 "0.09" 0.8 0.7 1.84 +50 50 "0.5" 1 0.2 "0.92 ( 0 )" "9.67 ( 0.64 )" "1.26 ( 0.09 )" 14.41 "0.63" 0.92 9.67 1.26 +100 50 "0.5" 0.5 0.38 "0.89 ( 0 )" "5.16 ( 0.81 )" "0.81 ( 0.08 )" 10.35 "0.36" 0.89 5.16 0.81 +500 50 "0.5" 0.1 0.95 "0.87 ( 0 )" "0.15 ( 0.1 )" "0.15 ( 0.04 )" 6 "0.01" 0.87 0.15 0.15 +1000 50 "0.5" 0.05 0.96 "0.87 ( 0 )" "0.13 ( 0.07 )" "0.09 ( 0.03 )" 6.04 "0.01" 0.87 0.13 0.09 +50 100 "0.5" 2 0.09 "0.96 ( 0.01 )" "25 ( 2.25 )" "1.32 ( 0.09 )" 29.68 "0.77" 0.96 25 1.32 +100 100 "0.5" 1 0.31 "0.9 ( 0 )" "7.65 ( 0.74 )" "1.01 ( 0.08 )" 12.64 "0.51" 0.9 7.65 1.01 +500 100 "0.5" 0.2 0.93 "0.87 ( 0 )" "0.14 ( 0.07 )" "0.28 ( 0.05 )" 5.86 "0.02" 0.87 0.14 0.28 +1000 100 "0.5" 0.1 0.92 "0.87 ( 0 )" "0.34 ( 0.17 )" "0.12 ( 0.03 )" 6.22 "0.03" 0.87 0.34 0.12 +50 500 "0.5" 10 0.02 "1 ( 0 )" "157.13 ( 6.78 )" "1.35 ( 0.1 )" 161.78 "0.97" 1 157.13 1.35 +100 500 "0.5" 5 0.1 "0.95 ( 0 )" "33.42 ( 3.83 )" "1.3 ( 0.09 )" 38.12 "0.82" 0.95 33.42 1.3 +500 500 "0.5" 1 0.86 "0.87 ( 0 )" "0.67 ( 0.16 )" "0.3 ( 0.05 )" 6.37 "0.07" 0.87 0.67 0.3 +1000 500 "0.5" 0.5 0.98 "0.87 ( 0 )" "0.03 ( 0.02 )" "0.09 ( 0.03 )" 5.94 "0" 0.87 0.03 0.09 +50 1000 "0.5" 20 0.01 "1 ( 0 )" "246.84 ( 6.66 )" "1.53 ( 0.09 )" 251.31 "0.98" 1 246.84 1.53 +100 1000 "0.5" 10 0.04 "0.98 ( 0 )" "96.92 ( 8.19 )" "1.31 ( 0.09 )" 101.61 "0.92" 0.98 96.92 1.31 +500 1000 "0.5" 2 0.87 "0.87 ( 0 )" "0.53 ( 0.2 )" "0.35 ( 0.06 )" 6.18 "0.04" 0.87 0.53 0.35 +1000 1000 "0.5" 1 0.93 "0.87 ( 0 )" "0.35 ( 0.12 )" "0.11 ( 0.03 )" 6.24 "0.03" 0.87 0.35 0.11 +50 50 "0.7" 1 0.15 "0.95 ( 0 )" "12.8 ( 0.96 )" "1 ( 0.09 )" 17.8 "0.66" 0.95 12.8 1 +100 50 "0.7" 0.5 0.41 "0.91 ( 0 )" "5.79 ( 0.7 )" "0.31 ( 0.05 )" 11.48 "0.4" 0.91 5.79 0.31 +500 50 "0.7" 0.1 0.96 "0.9 ( 0 )" "0.17 ( 0.08 )" "0.04 ( 0.02 )" 6.13 "0.02" 0.9 0.17 0.04 +1000 50 "0.7" 0.05 0.98 "0.89 ( 0 )" "0.1 ( 0.06 )" "0 ( 0 )" 6.1 "0.01" 0.89 0.1 0 +50 100 "0.7" 2 0.06 "0.99 ( 0 )" "35.59 ( 2.41 )" "0.94 ( 0.09 )" 40.65 "0.83" 0.99 35.59 0.94 +100 100 "0.7" 1 0.26 "0.92 ( 0 )" "11.64 ( 1.38 )" "0.53 ( 0.06 )" 17.11 "0.57" 0.92 11.64 0.53 +500 100 "0.7" 0.2 0.97 "0.9 ( 0 )" "0.15 ( 0.07 )" "0.05 ( 0.02 )" 6.1 "0.02" 0.9 0.15 0.05 +1000 100 "0.7" 0.1 0.93 "0.9 ( 0 )" "0.41 ( 0.14 )" "0.03 ( 0.02 )" 6.38 "0.04" 0.9 0.41 0.03 +50 500 "0.7" 10 0.02 "1 ( 0 )" "171.29 ( 6.32 )" "1.12 ( 0.09 )" 176.17 "0.97" 1 171.29 1.12 +100 500 "0.7" 5 0.06 "0.98 ( 0 )" "68.31 ( 6.57 )" "0.98 ( 0.09 )" 73.33 "0.87" 0.98 68.31 0.98 +500 500 "0.7" 1 0.93 "0.89 ( 0 )" "0.37 ( 0.12 )" "0.06 ( 0.02 )" 6.31 "0.04" 0.89 0.37 0.06 +1000 500 "0.7" 0.5 0.98 "0.9 ( 0 )" "0.13 ( 0.07 )" "0.01 ( 0.01 )" 6.12 "0.01" 0.9 0.13 0.01 +50 1000 "0.7" 20 0.01 "1 ( 0 )" "275.88 ( 8.89 )" "1.39 ( 0.09 )" 280.49 "0.98" 1 275.88 1.39 +100 1000 "0.7" 10 0.03 "1 ( 0 )" "155.38 ( 7.45 )" "0.93 ( 0.08 )" 160.45 "0.95" 1 155.38 0.93 +500 1000 "0.7" 2 0.84 "0.9 ( 0 )" "1.07 ( 0.26 )" "0.1 ( 0.03 )" 6.97 "0.09" 0.9 1.07 0.1 +1000 1000 "0.7" 1 0.95 "0.9 ( 0 )" "0.3 ( 0.11 )" "0.02 ( 0.01 )" 6.28 "0.03" 0.9 0.3 0.02 +50 50 "0.9" 1 0.13 "0.97 ( 0 )" "15.75 ( 1.04 )" "0.71 ( 0.07 )" 21.04 "0.7" 0.97 15.75 0.71 +100 50 "0.9" 0.5 0.44 "0.93 ( 0 )" "5.06 ( 0.38 )" "0.34 ( 0.05 )" 10.72 "0.42" 0.93 5.06 0.34 +500 50 "0.9" 0.1 0.98 "0.91 ( 0 )" "0.07 ( 0.04 )" "0.03 ( 0.02 )" 6.04 "0.01" 0.91 0.07 0.03 +1000 50 "0.9" 0.05 1 "0.91 ( 0 )" "0 ( 0 )" "0 ( 0 )" 6 "0" 0.91 0 0 +50 100 "0.9" 2 0.06 "0.99 ( 0 )" "37.69 ( 2.33 )" "0.96 ( 0.09 )" 42.73 "0.84" 0.99 37.69 0.96 +100 100 "0.9" 1 0.26 "0.94 ( 0 )" "11.53 ( 1.15 )" "0.52 ( 0.06 )" 17.01 "0.61" 0.94 11.53 0.52 +500 100 "0.9" 0.2 0.96 "0.91 ( 0 )" "0.18 ( 0.06 )" "0.03 ( 0.02 )" 6.15 "0.02" 0.91 0.18 0.03 +1000 100 "0.9" 0.1 0.97 "0.91 ( 0 )" "0.17 ( 0.09 )" "0 ( 0 )" 6.17 "0.02" 0.91 0.17 0 +50 500 "0.9" 10 0.01 "1 ( 0 )" "189.13 ( 6.24 )" "0.91 ( 0.1 )" 194.22 "0.97" 1 189.13 0.91 +100 500 "0.9" 5 0.05 "0.99 ( 0 )" "88.92 ( 5.92 )" "0.68 ( 0.07 )" 94.24 "0.92" 0.99 88.92 0.68 +500 500 "0.9" 1 0.85 "0.91 ( 0 )" "1.08 ( 0.33 )" "0.01 ( 0.01 )" 7.07 "0.08" 0.91 1.08 0.01 +1000 500 "0.9" 0.5 0.98 "0.91 ( 0 )" "0.14 ( 0.07 )" "0 ( 0 )" 6.14 "0.02" 0.91 0.14 0 +50 1000 "0.9" 20 0.01 "1 ( 0 )" "330.51 ( 8.59 )" "0.97 ( 0.08 )" 335.54 "0.98" 1 330.51 0.97 +100 1000 "0.9" 10 0.02 "1 ( 0 )" "217.74 ( 6.88 )" "0.67 ( 0.07 )" 223.07 "0.97" 1 217.74 0.67 +500 1000 "0.9" 2 0.76 "0.91 ( 0 )" "1.91 ( 0.48 )" "0.02 ( 0.01 )" 7.89 "0.12" 0.91 1.91 0.02 +1000 1000 "0.9" 1 0.95 "0.91 ( 0 )" "0.27 ( 0.11 )" "0.02 ( 0.01 )" 6.25 "0.03" 0.91 0.27 0.02 diff --git a/simulations/results_summary_bin/sim_block_RF_binary.txt b/simulations/results_summary_bin/sim_block_RF_binary.txt new file mode 100644 index 0000000..40a4b03 --- /dev/null +++ b/simulations/results_summary_bin/sim_block_RF_binary.txt @@ -0,0 +1,81 @@ +"N" "P" "Corr" "Ratio" "Stab" "ROC" "FP" "FN" "num_select" "FDR" "ROC_mean" "FP_mean" "FN_mean" +50 50 "0.1" 1 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 50 "0.1" 0.5 0.01 "1 ( 0 )" "2.4 ( 0.16 )" "5.3 ( 0.11 )" 3 "0.78" 1 2.4 5.3 +500 50 "0.1" 0.1 0.12 "1 ( 0 )" "2.96 ( 0.21 )" "4.29 ( 0.15 )" 4.63 "0.62" 1 2.96 4.29 +1000 50 "0.1" 0.05 0.33 "1 ( 0 )" "3.28 ( 0.21 )" "3.04 ( 0.12 )" 6.24 "0.49" 1 3.28 3.04 +50 100 "0.1" 2 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 100 "0.1" 1 0 "1 ( 0 )" "5.09 ( 0.21 )" "5.6 ( 0.09 )" 5.48 "0.93" 1 5.09 5.6 +500 100 "0.1" 0.2 0.1 "1 ( 0 )" "5.39 ( 0.29 )" "4.05 ( 0.16 )" 7.34 "0.72" 1 5.39 4.05 +1000 100 "0.1" 0.1 0.25 "1 ( 0 )" "5.43 ( 0.26 )" "2.89 ( 0.14 )" 8.54 "0.62" 1 5.43 2.89 +50 500 "0.1" 10 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 500 "0.1" 5 0 "1 ( 0 )" "24.14 ( 0.56 )" "5.35 ( 0.11 )" 24.79 "0.97" 1 24.14 5.35 +500 500 "0.1" 1 0.03 "1 ( 0 )" "24.48 ( 0.54 )" "4.25 ( 0.16 )" 26.23 "0.93" 1 24.48 4.25 +1000 500 "0.1" 0.5 0.07 "1 ( 0 )" "24.08 ( 0.54 )" "3.1 ( 0.16 )" 26.98 "0.89" 1 24.08 3.1 +50 1000 "0.1" 20 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 1000 "0.1" 10 0 "1 ( 0 )" "48.22 ( 0.62 )" "5.53 ( 0.09 )" 48.69 "0.99" 1 48.22 5.53 +500 1000 "0.1" 2 0.01 "1 ( 0 )" "50.18 ( 0.78 )" "4.63 ( 0.12 )" 51.55 "0.97" 1 50.18 4.63 +1000 1000 "0.1" 1 0.04 "1 ( 0 )" "49.43 ( 0.66 )" "3.23 ( 0.14 )" 52.2 "0.95" 1 49.43 3.23 +50 50 "0.3" 1 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 50 "0.3" 0.5 0.02 "1 ( 0 )" "2.13 ( 0.12 )" "5.14 ( 0.08 )" 2.96 "0.71" 1 2.13 5.14 +500 50 "0.3" 0.1 0.46 "1 ( 0 )" "1.43 ( 0.11 )" "2.59 ( 0.11 )" 4.84 "0.27" 1 1.43 2.59 +1000 50 "0.3" 0.05 0.6 "1 ( 0 )" "1.44 ( 0.13 )" "1.35 ( 0.08 )" 6.09 "0.21" 1 1.44 1.35 +50 100 "0.3" 2 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 100 "0.3" 1 0.01 "1 ( 0 )" "4.84 ( 0.18 )" "5.1 ( 0.08 )" 5.73 "0.84" 1 4.84 5.1 +500 100 "0.3" 0.2 0.28 "1 ( 0 )" "3.77 ( 0.17 )" "2.76 ( 0.1 )" 7.01 "0.52" 1 3.77 2.76 +1000 100 "0.3" 0.1 0.44 "1 ( 0 )" "3.43 ( 0.18 )" "1.5 ( 0.09 )" 7.93 "0.41" 1 3.43 1.5 +50 500 "0.3" 10 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 500 "0.3" 5 0 "1 ( 0 )" "24.49 ( 0.47 )" "5.11 ( 0.08 )" 25.38 "0.96" 1 24.49 5.11 +500 500 "0.3" 1 0.06 "1 ( 0 )" "23.05 ( 0.49 )" "3.15 ( 0.09 )" 25.9 "0.89" 1 23.05 3.15 +1000 500 "0.3" 0.5 0.11 "1 ( 0 )" "22.18 ( 0.49 )" "1.91 ( 0.09 )" 26.27 "0.84" 1 22.18 1.91 +50 1000 "0.3" 20 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 1000 "0.3" 10 0 "1 ( 0 )" "46.96 ( 0.66 )" "5.18 ( 0.08 )" 47.78 "0.98" 1 46.96 5.18 +500 1000 "0.3" 2 0.02 "1 ( 0 )" "48.39 ( 0.72 )" "3.64 ( 0.1 )" 50.75 "0.95" 1 48.39 3.64 +1000 1000 "0.3" 1 0.06 "1 ( 0 )" "47.08 ( 0.59 )" "2.05 ( 0.09 )" 51.03 "0.92" 1 47.08 2.05 +50 50 "0.5" 1 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 50 "0.5" 0.5 0.04 "1 ( 0 )" "2.2 ( 0.13 )" "5.06 ( 0.08 )" 3.12 "0.67" 1 2.2 5.06 +500 50 "0.5" 0.1 0.49 "1 ( 0 )" "1.41 ( 0.12 )" "2.45 ( 0.08 )" 4.96 "0.25" 1 1.41 2.45 +1000 50 "0.5" 0.05 0.61 "1 ( 0 )" "1.24 ( 0.11 )" "1.46 ( 0.09 )" 5.78 "0.19" 1 1.24 1.46 +50 100 "0.5" 2 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 100 "0.5" 1 0.02 "1 ( 0 )" "4.57 ( 0.17 )" "4.99 ( 0.08 )" 5.58 "0.82" 1 4.57 4.99 +500 100 "0.5" 0.2 0.35 "1 ( 0 )" "3.49 ( 0.17 )" "2.37 ( 0.09 )" 7.12 "0.46" 1 3.49 2.37 +1000 100 "0.5" 0.1 0.51 "1 ( 0 )" "2.74 ( 0.15 )" "1.23 ( 0.08 )" 7.51 "0.34" 1 2.74 1.23 +50 500 "0.5" 10 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 500 "0.5" 5 0.01 "1 ( 0 )" "23.18 ( 0.51 )" "5.07 ( 0.08 )" 24.11 "0.96" 1 23.18 5.07 +500 500 "0.5" 1 0.08 "1 ( 0 )" "23.59 ( 0.47 )" "2.72 ( 0.09 )" 26.87 "0.88" 1 23.59 2.72 +1000 500 "0.5" 0.5 0.13 "1 ( 0 )" "22.56 ( 0.46 )" "1.56 ( 0.1 )" 27 "0.83" 1 22.56 1.56 +50 1000 "0.5" 20 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 1000 "0.5" 10 0 "1 ( 0 )" "47.59 ( 0.62 )" "5.2 ( 0.08 )" 48.39 "0.98" 1 47.59 5.2 +500 1000 "0.5" 2 0.03 "1 ( 0 )" "47.63 ( 0.72 )" "3.12 ( 0.11 )" 50.51 "0.94" 1 47.63 3.12 +1000 1000 "0.5" 1 0.06 "1 ( 0 )" "48.12 ( 0.7 )" "1.83 ( 0.08 )" 52.29 "0.92" 1 48.12 1.83 +50 50 "0.7" 1 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 50 "0.7" 0.5 0.05 "1 ( 0 )" "2.01 ( 0.13 )" "5 ( 0.08 )" 2.99 "0.65" 1 2.01 5 +500 50 "0.7" 0.1 0.53 "1 ( 0 )" "1.29 ( 0.11 )" "2.25 ( 0.08 )" 5.04 "0.23" 1 1.29 2.25 +1000 50 "0.7" 0.05 0.63 "1 ( 0 )" "1.29 ( 0.11 )" "1.3 ( 0.08 )" 5.99 "0.19" 1 1.29 1.3 +50 100 "0.7" 2 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 100 "0.7" 1 0.03 "1 ( 0 )" "4.35 ( 0.18 )" "4.98 ( 0.07 )" 5.37 "0.8" 1 4.35 4.98 +500 100 "0.7" 0.2 0.34 "1 ( 0 )" "3.46 ( 0.18 )" "2.53 ( 0.09 )" 6.93 "0.47" 1 3.46 2.53 +1000 100 "0.7" 0.1 0.48 "1 ( 0 )" "3.04 ( 0.15 )" "1.27 ( 0.08 )" 7.77 "0.37" 1 3.04 1.27 +50 500 "0.7" 10 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 500 "0.7" 5 0.01 "1 ( 0 )" "23.78 ( 0.44 )" "4.93 ( 0.08 )" 24.85 "0.96" 1 23.78 4.93 +500 500 "0.7" 1 0.08 "1 ( 0 )" "23.14 ( 0.52 )" "2.73 ( 0.09 )" 26.41 "0.87" 1 23.14 2.73 +1000 500 "0.7" 0.5 0.13 "1 ( 0 )" "21.58 ( 0.49 )" "1.57 ( 0.08 )" 26.01 "0.82" 1 21.58 1.57 +50 1000 "0.7" 20 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 1000 "0.7" 10 0 "1 ( 0 )" "47.84 ( 0.72 )" "5 ( 0.09 )" 48.84 "0.98" 1 47.84 5 +500 1000 "0.7" 2 0.04 "1 ( 0 )" "47.31 ( 0.68 )" "2.9 ( 0.1 )" 50.41 "0.94" 1 47.31 2.9 +1000 1000 "0.7" 1 0.06 "1 ( 0 )" "46.57 ( 0.73 )" "1.71 ( 0.08 )" 50.86 "0.91" 1 46.57 1.71 +50 50 "0.9" 1 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 50 "0.9" 0.5 0.05 "1 ( 0 )" "2.2 ( 0.13 )" "5 ( 0.08 )" 3.19 "0.66" 1 2.2 5 +500 50 "0.9" 0.1 0.53 "1 ( 0 )" "1.28 ( 0.1 )" "2.32 ( 0.08 )" 4.96 "0.23" 1 1.28 2.32 +1000 50 "0.9" 0.05 0.67 "1 ( 0 )" "0.93 ( 0.09 )" "1.31 ( 0.09 )" 5.62 "0.15" 1 0.93 1.31 +50 100 "0.9" 2 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 100 "0.9" 1 0.04 "1 ( 0 )" "4.24 ( 0.16 )" "4.83 ( 0.09 )" 5.4 "0.79" 1 4.24 4.83 +500 100 "0.9" 0.2 0.36 "1 ( 0 )" "3.54 ( 0.19 )" "2.29 ( 0.09 )" 7.25 "0.46" 1 3.54 2.29 +1000 100 "0.9" 0.1 0.53 "1 ( 0 )" "2.53 ( 0.14 )" "1.31 ( 0.08 )" 7.22 "0.33" 1 2.53 1.31 +50 500 "0.9" 10 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 500 "0.9" 5 0.01 "1 ( 0 )" "23.63 ( 0.45 )" "5.04 ( 0.08 )" 24.59 "0.96" 1 23.63 5.04 +500 500 "0.9" 1 0.07 "1 ( 0 )" "24.29 ( 0.42 )" "2.65 ( 0.09 )" 27.64 "0.88" 1 24.29 2.65 +1000 500 "0.9" 0.5 0.13 "1 ( 0 )" "21.42 ( 0.42 )" "1.49 ( 0.08 )" 25.93 "0.82" 1 21.42 1.49 +50 1000 "0.9" 20 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 1000 "0.9" 10 0 "1 ( 0 )" "47.48 ( 0.72 )" "4.95 ( 0.08 )" 48.53 "0.98" 1 47.48 4.95 +500 1000 "0.9" 2 0.04 "1 ( 0 )" "48.09 ( 0.7 )" "2.94 ( 0.09 )" 51.15 "0.94" 1 48.09 2.94 +1000 1000 "0.9" 1 0.07 "1 ( 0 )" "45.6 ( 0.72 )" "1.63 ( 0.08 )" 49.97 "0.91" 1 45.6 1.63 diff --git a/simulations/results_summary_bin/sim_block_lasso_binary.txt b/simulations/results_summary_bin/sim_block_lasso_binary.txt new file mode 100644 index 0000000..505ffb4 --- /dev/null +++ b/simulations/results_summary_bin/sim_block_lasso_binary.txt @@ -0,0 +1,81 @@ +"N" "P" "Corr" "Ratio" "Stab" "ROC" "FP" "FN" "num_select" "FDR" "ROC_mean" "FP_mean" "FN_mean" +50 50 "0.1" 1 0.03 "0.59 ( 0.01 )" "2.69 ( 0.14 )" "5.3 ( 0.07 )" 2.39 "0.67" 0.59 2.69 5.3 +100 50 "0.1" 0.5 0.11 "0.56 ( 0.01 )" "2.02 ( 0.15 )" "5.02 ( 0.08 )" 2 "0.39" 0.56 2.02 5.02 +500 50 "0.1" 0.1 0.28 "0.63 ( 0 )" "4.52 ( 0.29 )" "3 ( 0.11 )" 6.52 "0.45" 0.63 4.52 3 +1000 50 "0.1" 0.05 0.39 "0.64 ( 0 )" "4.74 ( 0.22 )" "2.1 ( 0.09 )" 7.64 "0.44" 0.64 4.74 2.1 +50 100 "0.1" 2 0.02 "0.62 ( 0.01 )" "3.82 ( 0.16 )" "5.34 ( 0.07 )" 3.48 "0.78" 0.62 3.82 5.34 +100 100 "0.1" 1 0.07 "0.56 ( 0.01 )" "2.29 ( 0.19 )" "5.27 ( 0.08 )" 2.02 "0.57" 0.56 2.29 5.27 +500 100 "0.1" 0.2 0.23 "0.61 ( 0 )" "5.54 ( 0.52 )" "3.27 ( 0.12 )" 7.27 "0.47" 0.61 5.54 3.27 +1000 100 "0.1" 0.1 0.27 "0.64 ( 0 )" "7.69 ( 0.42 )" "2.25 ( 0.1 )" 10.44 "0.56" 0.64 7.69 2.25 +50 500 "0.1" 10 0.01 "0.6 ( 0.01 )" "8.69 ( 0.24 )" "5.55 ( 0.06 )" 8.14 "0.94" 0.6 8.69 5.55 +100 500 "0.1" 5 0.03 "0.56 ( 0.01 )" "4.39 ( 0.34 )" "5.4 ( 0.07 )" 3.99 "0.82" 0.56 4.39 5.4 +500 500 "0.1" 1 0.27 "0.61 ( 0.01 )" "3.84 ( 0.28 )" "3.93 ( 0.08 )" 4.91 "0.47" 0.61 3.84 3.93 +1000 500 "0.1" 0.5 0.2 "0.63 ( 0 )" "9.87 ( 1.4 )" "3.18 ( 0.09 )" 11.69 "0.49" 0.63 9.87 3.18 +50 1000 "0.1" 20 0 "0.62 ( 0.01 )" "10.42 ( 0.22 )" "5.56 ( 0.06 )" 9.86 "0.95" 0.62 10.42 5.56 +100 1000 "0.1" 10 0.01 "0.56 ( 0.01 )" "5.93 ( 0.28 )" "5.53 ( 0.06 )" 5.4 "0.9" 0.56 5.93 5.53 +500 1000 "0.1" 2 0.24 "0.62 ( 0.01 )" "4.22 ( 0.48 )" "4.05 ( 0.09 )" 5.17 "0.46" 0.62 4.22 4.05 +1000 1000 "0.1" 1 0.33 "0.63 ( 0 )" "5.03 ( 0.78 )" "3.35 ( 0.06 )" 6.68 "0.42" 0.63 5.03 3.35 +50 50 "0.3" 1 0.17 "0.65 ( 0.01 )" "3.87 ( 0.23 )" "3.68 ( 0.12 )" 5.19 "0.5" 0.65 3.87 3.68 +100 50 "0.3" 0.5 0.32 "0.78 ( 0.01 )" "6.48 ( 0.32 )" "1.13 ( 0.11 )" 10.35 "0.49" 0.78 6.48 1.13 +500 50 "0.3" 0.1 0.44 "0.85 ( 0 )" "6.84 ( 0.26 )" "0 ( 0 )" 11.84 "0.47" 0.85 6.84 0 +1000 50 "0.3" 0.05 0.65 "0.86 ( 0 )" "3.69 ( 0.19 )" "0 ( 0 )" 8.69 "0.28" 0.86 3.69 0 +50 100 "0.3" 2 0.14 "0.63 ( 0.01 )" "5.12 ( 0.25 )" "3.91 ( 0.1 )" 6.21 "0.63" 0.63 5.12 3.91 +100 100 "0.3" 1 0.26 "0.74 ( 0.01 )" "7.62 ( 0.48 )" "1.8 ( 0.12 )" 10.82 "0.53" 0.74 7.62 1.8 +500 100 "0.3" 0.2 0.36 "0.86 ( 0 )" "10.19 ( 0.4 )" "0 ( 0 )" 15.19 "0.57" 0.86 10.19 0 +1000 100 "0.3" 0.1 0.52 "0.86 ( 0 )" "6 ( 0.27 )" "0 ( 0 )" 11 "0.42" 0.86 6 0 +50 500 "0.3" 10 0.03 "0.61 ( 0.01 )" "10.46 ( 0.31 )" "4.69 ( 0.08 )" 10.77 "0.87" 0.61 10.46 4.69 +100 500 "0.3" 5 0.17 "0.66 ( 0.01 )" "8.6 ( 0.65 )" "3.19 ( 0.12 )" 10.41 "0.64" 0.66 8.6 3.19 +500 500 "0.3" 1 0.19 "0.85 ( 0 )" "25.12 ( 1.08 )" "0 ( 0 )" 30.12 "0.77" 0.85 25.12 0 +1000 500 "0.3" 0.5 0.25 "0.86 ( 0 )" "18.48 ( 0.73 )" "0 ( 0 )" 23.48 "0.72" 0.86 18.48 0 +50 1000 "0.3" 20 0.02 "0.6 ( 0.01 )" "12.08 ( 0.26 )" "4.97 ( 0.08 )" 12.11 "0.91" 0.6 12.08 4.97 +100 1000 "0.3" 10 0.13 "0.65 ( 0.01 )" "9 ( 0.66 )" "3.58 ( 0.12 )" 10.42 "0.72" 0.65 9 3.58 +500 1000 "0.3" 2 0.16 "0.85 ( 0 )" "31.41 ( 1.51 )" "0 ( 0 )" 36.41 "0.8" 0.85 31.41 0 +1000 1000 "0.3" 1 0.17 "0.86 ( 0 )" "28.41 ( 1.2 )" "0 ( 0 )" 33.41 "0.79" 0.86 28.41 0 +50 50 "0.5" 1 0.24 "0.69 ( 0.01 )" "4.53 ( 0.29 )" "2.89 ( 0.13 )" 6.64 "0.48" 0.69 4.53 2.89 +100 50 "0.5" 0.5 0.32 "0.82 ( 0.01 )" "7.11 ( 0.4 )" "0.91 ( 0.09 )" 11.2 "0.48" 0.82 7.11 0.91 +500 50 "0.5" 0.1 0.5 "0.89 ( 0 )" "5.76 ( 0.24 )" "0 ( 0 )" 10.76 "0.41" 0.89 5.76 0 +1000 50 "0.5" 0.05 0.68 "0.9 ( 0 )" "3.3 ( 0.16 )" "0 ( 0 )" 8.3 "0.25" 0.9 3.3 0 +50 100 "0.5" 2 0.19 "0.68 ( 0.01 )" "5.12 ( 0.25 )" "3.35 ( 0.1 )" 6.77 "0.57" 0.68 5.12 3.35 +100 100 "0.5" 1 0.29 "0.8 ( 0.01 )" "8.11 ( 0.47 )" "1.32 ( 0.1 )" 11.79 "0.54" 0.8 8.11 1.32 +500 100 "0.5" 0.2 0.34 "0.89 ( 0 )" "10.67 ( 0.37 )" "0 ( 0 )" 15.67 "0.59" 0.89 10.67 0 +1000 100 "0.5" 0.1 0.55 "0.9 ( 0 )" "5.3 ( 0.23 )" "0 ( 0 )" 10.3 "0.38" 0.9 5.3 0 +50 500 "0.5" 10 0.06 "0.63 ( 0.01 )" "9.49 ( 0.26 )" "4.45 ( 0.08 )" 10.04 "0.84" 0.63 9.49 4.45 +100 500 "0.5" 5 0.2 "0.72 ( 0.01 )" "9.62 ( 0.69 )" "2.61 ( 0.12 )" 12.01 "0.63" 0.72 9.62 2.61 +500 500 "0.5" 1 0.18 "0.89 ( 0 )" "27.04 ( 0.99 )" "0 ( 0 )" 32.04 "0.79" 0.89 27.04 0 +1000 500 "0.5" 0.5 0.25 "0.9 ( 0 )" "17.99 ( 0.68 )" "0 ( 0 )" 22.99 "0.71" 0.9 17.99 0 +50 1000 "0.5" 20 0.05 "0.63 ( 0.01 )" "11.31 ( 0.3 )" "4.54 ( 0.09 )" 11.77 "0.87" 0.63 11.31 4.54 +100 1000 "0.5" 10 0.16 "0.7 ( 0.01 )" "10.35 ( 0.82 )" "3.02 ( 0.12 )" 12.33 "0.68" 0.7 10.35 3.02 +500 1000 "0.5" 2 0.15 "0.88 ( 0 )" "34.48 ( 1.42 )" "0 ( 0 )" 39.48 "0.82" 0.88 34.48 0 +1000 1000 "0.5" 1 0.19 "0.89 ( 0 )" "25.24 ( 1.1 )" "0 ( 0 )" 30.24 "0.77" 0.89 25.24 0 +50 50 "0.7" 1 0.27 "0.72 ( 0.01 )" "3.87 ( 0.24 )" "2.98 ( 0.11 )" 5.89 "0.42" 0.72 3.87 2.98 +100 50 "0.7" 0.5 0.34 "0.82 ( 0.01 )" "7.43 ( 0.37 )" "0.6 ( 0.08 )" 11.83 "0.49" 0.82 7.43 0.6 +500 50 "0.7" 0.1 0.49 "0.91 ( 0 )" "5.84 ( 0.26 )" "0 ( 0 )" 10.84 "0.42" 0.91 5.84 0 +1000 50 "0.7" 0.05 0.71 "0.92 ( 0 )" "3.03 ( 0.15 )" "0 ( 0 )" 8.03 "0.23" 0.92 3.03 0 +50 100 "0.7" 2 0.21 "0.69 ( 0.01 )" "5.07 ( 0.25 )" "3.13 ( 0.1 )" 6.94 "0.55" 0.69 5.07 3.13 +100 100 "0.7" 1 0.28 "0.82 ( 0.01 )" "9.65 ( 0.48 )" "0.97 ( 0.1 )" 13.68 "0.59" 0.82 9.65 0.97 +500 100 "0.7" 0.2 0.36 "0.91 ( 0 )" "10.19 ( 0.37 )" "0 ( 0 )" 15.19 "0.58" 0.91 10.19 0 +1000 100 "0.7" 0.1 0.59 "0.92 ( 0 )" "4.81 ( 0.19 )" "0 ( 0 )" 9.81 "0.37" 0.92 4.81 0 +50 500 "0.7" 10 0.09 "0.66 ( 0.01 )" "9.13 ( 0.25 )" "4.14 ( 0.08 )" 9.99 "0.81" 0.66 9.13 4.14 +100 500 "0.7" 5 0.21 "0.75 ( 0.01 )" "9.59 ( 0.72 )" "2.44 ( 0.11 )" 12.15 "0.61" 0.75 9.59 2.44 +500 500 "0.7" 1 0.18 "0.9 ( 0 )" "26.2 ( 0.86 )" "0 ( 0 )" 31.2 "0.79" 0.9 26.2 0 +1000 500 "0.7" 0.5 0.28 "0.91 ( 0 )" "15.6 ( 0.55 )" "0 ( 0 )" 20.6 "0.68" 0.91 15.6 0 +50 1000 "0.7" 20 0.05 "0.64 ( 0.01 )" "11.44 ( 0.28 )" "4.51 ( 0.08 )" 11.93 "0.87" 0.64 11.44 4.51 +100 1000 "0.7" 10 0.18 "0.71 ( 0.01 )" "10.03 ( 0.71 )" "2.95 ( 0.1 )" 12.08 "0.65" 0.71 10.03 2.95 +500 1000 "0.7" 2 0.14 "0.9 ( 0 )" "34.85 ( 1.14 )" "0 ( 0 )" 39.85 "0.83" 0.9 34.85 0 +1000 1000 "0.7" 1 0.2 "0.91 ( 0 )" "24.83 ( 0.82 )" "0 ( 0 )" 29.83 "0.78" 0.91 24.83 0 +50 50 "0.9" 1 0.3 "0.73 ( 0.01 )" "4.4 ( 0.26 )" "2.55 ( 0.11 )" 6.85 "0.44" 0.73 4.4 2.55 +100 50 "0.9" 0.5 0.33 "0.85 ( 0.01 )" "8.14 ( 0.35 )" "0.42 ( 0.06 )" 12.72 "0.53" 0.85 8.14 0.42 +500 50 "0.9" 0.1 0.54 "0.92 ( 0 )" "5.15 ( 0.22 )" "0 ( 0 )" 10.15 "0.38" 0.92 5.15 0 +1000 50 "0.9" 0.05 0.76 "0.92 ( 0 )" "2.61 ( 0.13 )" "0 ( 0 )" 7.61 "0.19" 0.92 2.61 0 +50 100 "0.9" 2 0.23 "0.7 ( 0.01 )" "4.84 ( 0.24 )" "3.3 ( 0.09 )" 6.54 "0.54" 0.7 4.84 3.3 +100 100 "0.9" 1 0.28 "0.81 ( 0.01 )" "9.92 ( 0.51 )" "0.87 ( 0.08 )" 14.05 "0.57" 0.81 9.92 0.87 +500 100 "0.9" 0.2 0.37 "0.92 ( 0 )" "9.65 ( 0.35 )" "0 ( 0 )" 14.65 "0.57" 0.92 9.65 0 +1000 100 "0.9" 0.1 0.62 "0.93 ( 0 )" "4.29 ( 0.18 )" "0 ( 0 )" 9.29 "0.33" 0.93 4.29 0 +50 500 "0.9" 10 0.08 "0.62 ( 0.01 )" "8.99 ( 0.26 )" "4.13 ( 0.09 )" 9.86 "0.8" 0.62 8.99 4.13 +100 500 "0.9" 5 0.23 "0.74 ( 0.01 )" "8.85 ( 0.62 )" "2.4 ( 0.12 )" 11.45 "0.6" 0.74 8.85 2.4 +500 500 "0.9" 1 0.19 "0.91 ( 0 )" "24.91 ( 0.78 )" "0 ( 0 )" 29.91 "0.78" 0.91 24.91 0 +1000 500 "0.9" 0.5 0.31 "0.92 ( 0 )" "14.12 ( 0.43 )" "0 ( 0 )" 19.12 "0.67" 0.92 14.12 0 +50 1000 "0.9" 20 0.07 "0.64 ( 0.01 )" "10.81 ( 0.29 )" "4.22 ( 0.08 )" 11.59 "0.84" 0.64 10.81 4.22 +100 1000 "0.9" 10 0.19 "0.74 ( 0.01 )" "11.15 ( 0.75 )" "2.44 ( 0.11 )" 13.71 "0.65" 0.74 11.15 2.44 +500 1000 "0.9" 2 0.14 "0.91 ( 0 )" "34.98 ( 1.04 )" "0 ( 0 )" 39.98 "0.83" 0.91 34.98 0 +1000 1000 "0.9" 1 0.22 "0.92 ( 0 )" "22.21 ( 0.73 )" "0 ( 0 )" 27.21 "0.76" 0.92 22.21 0 diff --git a/simulations/results_summary_bin/sim_ind_Elnet_binary.txt b/simulations/results_summary_bin/sim_ind_Elnet_binary.txt new file mode 100644 index 0000000..3b36f18 --- /dev/null +++ b/simulations/results_summary_bin/sim_ind_Elnet_binary.txt @@ -0,0 +1,17 @@ +"N" "P" "Corr" "Ratio" "Stab" "ROC" "FP" "FN" "num_select" "FDR" "ROC_mean" "FP_mean" "FN_mean" +50 50 "0" 1 0.15 "0.76 ( 0.01 )" "12.04 ( 0.89 )" "1.42 ( 0.11 )" 15.62 "0.61" 0.76 12.04 1.42 +100 50 "0" 0.5 0.23 "0.84 ( 0.01 )" "11.44 ( 0.76 )" "0.46 ( 0.07 )" 15.98 "0.56" 0.84 11.44 0.46 +500 50 "0" 0.1 0.36 "0.92 ( 0 )" "8.74 ( 0.72 )" "0 ( 0 )" 13.74 "0.45" 0.92 8.74 0 +1000 50 "0" 0.05 0.41 "0.93 ( 0 )" "7.56 ( 0.72 )" "0 ( 0 )" 12.56 "0.4" 0.93 7.56 0 +50 100 "0" 2 0.1 "0.72 ( 0.01 )" "18.92 ( 1.7 )" "1.81 ( 0.12 )" 22.11 "0.72" 0.72 18.92 1.81 +100 100 "0" 1 0.22 "0.82 ( 0.01 )" "12.48 ( 0.9 )" "0.96 ( 0.09 )" 16.52 "0.58" 0.82 12.48 0.96 +500 100 "0" 0.2 0.32 "0.92 ( 0 )" "11.78 ( 0.99 )" "0 ( 0 )" 16.78 "0.52" 0.92 11.78 0 +1000 100 "0" 0.1 0.34 "0.93 ( 0 )" "10.71 ( 1.03 )" "0 ( 0 )" 15.71 "0.47" 0.93 10.71 0 +50 500 "0" 10 0.03 "0.68 ( 0.01 )" "57.17 ( 5.72 )" "2.27 ( 0.13 )" 59.9 "0.88" 0.68 57.17 2.27 +100 500 "0" 5 0.15 "0.77 ( 0.01 )" "20.84 ( 2.08 )" "1.49 ( 0.1 )" 24.35 "0.69" 0.77 20.84 1.49 +500 500 "0" 1 0.27 "0.92 ( 0 )" "16.79 ( 1.47 )" "0 ( 0 )" 21.79 "0.61" 0.92 16.79 0 +1000 500 "0" 0.5 0.36 "0.93 ( 0 )" "11.47 ( 1.14 )" "0 ( 0 )" 16.47 "0.48" 0.93 11.47 0 +50 1000 "0" 20 0.02 "0.67 ( 0.01 )" "72.88 ( 8.55 )" "2.89 ( 0.13 )" 74.99 "0.91" 0.67 72.88 2.89 +100 1000 "0" 10 0.09 "0.76 ( 0.01 )" "29.95 ( 4.05 )" "2 ( 0.1 )" 32.95 "0.77" 0.76 29.95 2 +500 1000 "0" 2 0.24 "0.91 ( 0 )" "19.47 ( 1.76 )" "0 ( 0 )" 24.47 "0.62" 0.91 19.47 0 +1000 1000 "0" 1 0.25 "0.93 ( 0 )" "18.47 ( 1.76 )" "0 ( 0 )" 23.47 "0.58" 0.93 18.47 0 diff --git a/simulations/results_summary_bin/sim_ind_GencompLasso_binary.txt b/simulations/results_summary_bin/sim_ind_GencompLasso_binary.txt new file mode 100644 index 0000000..8ba39e0 --- /dev/null +++ b/simulations/results_summary_bin/sim_ind_GencompLasso_binary.txt @@ -0,0 +1,17 @@ +"N" "P" "Corr" "Ratio" "Stab" "ROC" "FP" "FN" "num_select" "FDR" "ROC_mean" "FP_mean" "FN_mean" +50 50 "0" 1 0.13 "0.98 ( 0 )" "16.38 ( 0.96 )" "0.61 ( 0.06 )" 21.77 "0.71" 0.98 16.38 0.61 +100 50 "0" 0.5 0.32 "0.93 ( 0 )" "7.94 ( 0.54 )" "0.34 ( 0.06 )" 13.6 "0.54" 0.93 7.94 0.34 +500 50 "0" 0.1 0.63 "0.91 ( 0 )" "2.67 ( 0.6 )" "0.1 ( 0.03 )" 8.57 "0.19" 0.91 2.67 0.1 +1000 50 "0" 0.05 0.75 "0.91 ( 0 )" "1.61 ( 0.48 )" "0.04 ( 0.02 )" 7.57 "0.09" 0.91 1.61 0.04 +50 100 "0" 2 0.06 "0.99 ( 0 )" "39.18 ( 2.14 )" "0.63 ( 0.07 )" 44.55 "0.85" 0.99 39.18 0.63 +100 100 "0" 1 0.2 "0.94 ( 0 )" "16.29 ( 1.16 )" "0.47 ( 0.06 )" 21.82 "0.7" 0.94 16.29 0.47 +500 100 "0" 0.2 0.47 "0.91 ( 0 )" "5.63 ( 0.84 )" "0.13 ( 0.03 )" 11.5 "0.3" 0.91 5.63 0.13 +1000 100 "0" 0.1 0.43 "0.91 ( 0 )" "6.87 ( 1.8 )" "0 ( 0 )" 12.87 "0.17" 0.91 6.87 0 +50 500 "0" 10 0.01 "1 ( 0 )" "251.02 ( 6.8 )" "0.36 ( 0.06 )" 256.66 "0.98" 1 251.02 0.36 +100 500 "0" 5 0.03 "1 ( 0 )" "134.32 ( 6.63 )" "0.33 ( 0.05 )" 139.99 "0.95" 1 134.32 0.33 +500 500 "0" 1 0.43 "0.91 ( 0 )" "8.32 ( 1.15 )" "0.1 ( 0.03 )" 14.22 "0.41" 0.91 8.32 0.1 +1000 500 "0" 0.5 0.6 "0.91 ( 0 )" "4.63 ( 1.57 )" "0 ( 0 )" 10.63 "0.21" 0.91 4.63 0 +50 1000 "0" 20 0.01 "1 ( 0 )" "406.32 ( 7.33 )" "0.73 ( 0.07 )" 411.59 "0.99" 1 406.32 0.73 +100 1000 "0" 10 0.02 "1 ( 0 )" "283.24 ( 7.31 )" "0.49 ( 0.06 )" 288.75 "0.98" 1 283.24 0.49 +500 1000 "0" 2 0.4 "0.91 ( 0 )" "9.4 ( 1.07 )" "0.07 ( 0.03 )" 15.33 "0.47" 0.91 9.4 0.07 +1000 1000 "0" 1 0.82 "0.91 ( 0 )" "1.91 ( 0.29 )" "0.01 ( 0.01 )" 7.9 "0.18" 0.91 1.91 0.01 diff --git a/simulations/results_summary_bin/sim_ind_RF_binary.txt b/simulations/results_summary_bin/sim_ind_RF_binary.txt new file mode 100644 index 0000000..d18c003 --- /dev/null +++ b/simulations/results_summary_bin/sim_ind_RF_binary.txt @@ -0,0 +1,17 @@ +"N" "P" "Corr" "Ratio" "Stab" "ROC" "FP" "FN" "num_select" "FDR" "ROC_mean" "FP_mean" "FN_mean" +50 50 "0" 1 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 50 "0" 0.5 0.1 "1 ( 0 )" "1.97 ( 0.13 )" "4.62 ( 0.08 )" 3.34 "0.55" 1 1.97 4.62 +500 50 "0" 0.1 0.54 "1 ( 0 )" "1.26 ( 0.12 )" "2.19 ( 0.08 )" 5.07 "0.22" 1 1.26 2.19 +1000 50 "0" 0.05 0.73 "1 ( 0 )" "0.86 ( 0.09 )" "1.12 ( 0.08 )" 5.74 "0.13" 1 0.86 1.12 +50 100 "0" 2 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 100 "0" 1 0.05 "1 ( 0 )" "4.29 ( 0.17 )" "4.79 ( 0.09 )" 5.5 "0.77" 1 4.29 4.79 +500 100 "0" 0.2 0.4 "1 ( 0 )" "3.42 ( 0.16 )" "2.01 ( 0.09 )" 7.41 "0.44" 1 3.42 2.01 +1000 100 "0" 0.1 0.49 "1 ( 0 )" "3.39 ( 0.19 )" "1.14 ( 0.07 )" 8.25 "0.38" 1 3.39 1.14 +50 500 "0" 10 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 500 "0" 5 0.01 "1 ( 0 )" "24.68 ( 0.48 )" "4.5 ( 0.09 )" 26.18 "0.94" 1 24.68 4.5 +500 500 "0" 1 0.09 "1 ( 0 )" "23.08 ( 0.51 )" "2.34 ( 0.1 )" 26.74 "0.86" 1 23.08 2.34 +1000 500 "0" 0.5 0.14 "1 ( 0 )" "22.72 ( 0.46 )" "1.34 ( 0.08 )" 27.38 "0.83" 1 22.72 1.34 +50 1000 "0" 20 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 1000 "0" 10 0.01 "1 ( 0 )" "46.76 ( 0.67 )" "4.86 ( 0.09 )" 47.9 "0.98" 1 46.76 4.86 +500 1000 "0" 2 0.04 "1 ( 0 )" "47.82 ( 0.66 )" "2.5 ( 0.1 )" 51.32 "0.93" 1 47.82 2.5 +1000 1000 "0" 1 0.07 "1 ( 0 )" "47.14 ( 0.77 )" "1.46 ( 0.08 )" 51.68 "0.91" 1 47.14 1.46 diff --git a/simulations/results_summary_bin/sim_ind_lasso_binary.txt b/simulations/results_summary_bin/sim_ind_lasso_binary.txt new file mode 100644 index 0000000..be7c40a --- /dev/null +++ b/simulations/results_summary_bin/sim_ind_lasso_binary.txt @@ -0,0 +1,17 @@ +"N" "P" "Corr" "Ratio" "Stab" "ROC" "FP" "FN" "num_select" "FDR" "ROC_mean" "FP_mean" "FN_mean" +50 50 "0" 1 0.33 "0.74 ( 0.01 )" "3.69 ( 0.25 )" "2.5 ( 0.12 )" 6.19 "0.37" 0.74 3.69 2.5 +100 50 "0" 0.5 0.35 "0.85 ( 0.01 )" "7.16 ( 0.37 )" "0.64 ( 0.08 )" 11.52 "0.48" 0.85 7.16 0.64 +500 50 "0" 0.1 0.53 "0.93 ( 0 )" "5.21 ( 0.21 )" "0 ( 0 )" 10.21 "0.39" 0.93 5.21 0 +1000 50 "0" 0.05 0.8 "0.93 ( 0 )" "2.25 ( 0.11 )" "0 ( 0 )" 7.25 "0.15" 0.93 2.25 0 +50 100 "0" 2 0.25 "0.73 ( 0.01 )" "5.13 ( 0.34 )" "2.93 ( 0.1 )" 7.2 "0.5" 0.73 5.13 2.93 +100 100 "0" 1 0.32 "0.83 ( 0.01 )" "8.22 ( 0.44 )" "1.03 ( 0.09 )" 12.19 "0.54" 0.83 8.22 1.03 +500 100 "0" 0.2 0.4 "0.92 ( 0 )" "8.89 ( 0.29 )" "0 ( 0 )" 13.89 "0.55" 0.92 8.89 0 +1000 100 "0" 0.1 0.69 "0.93 ( 0 )" "3.53 ( 0.16 )" "0 ( 0 )" 8.53 "0.27" 0.93 3.53 0 +50 500 "0" 10 0.13 "0.7 ( 0.01 )" "8.05 ( 0.28 )" "3.74 ( 0.09 )" 9.31 "0.74" 0.7 8.05 3.74 +100 500 "0" 5 0.24 "0.79 ( 0.01 )" "11.14 ( 0.64 )" "1.71 ( 0.1 )" 14.43 "0.63" 0.79 11.14 1.71 +500 500 "0" 1 0.2 "0.92 ( 0 )" "23.83 ( 0.69 )" "0 ( 0 )" 28.83 "0.78" 0.92 23.83 0 +1000 500 "0" 0.5 0.36 "0.93 ( 0 )" "11.38 ( 0.41 )" "0 ( 0 )" 16.38 "0.6" 0.93 11.38 0 +50 1000 "0" 20 0.09 "0.67 ( 0.01 )" "9.77 ( 0.24 )" "4.03 ( 0.08 )" 10.74 "0.81" 0.67 9.77 4.03 +100 1000 "0" 10 0.2 "0.78 ( 0.01 )" "11.91 ( 0.8 )" "2.32 ( 0.1 )" 14.59 "0.66" 0.78 11.91 2.32 +500 1000 "0" 2 0.16 "0.91 ( 0 )" "30.84 ( 0.92 )" "0 ( 0 )" 35.84 "0.82" 0.91 30.84 0 +1000 1000 "0" 1 0.24 "0.93 ( 0 )" "19.96 ( 0.61 )" "0 ( 0 )" 24.96 "0.74" 0.93 19.96 0 diff --git a/simulations/results_summary_bin/sim_toe_Elnet_binary.txt b/simulations/results_summary_bin/sim_toe_Elnet_binary.txt new file mode 100644 index 0000000..aea74dc --- /dev/null +++ b/simulations/results_summary_bin/sim_toe_Elnet_binary.txt @@ -0,0 +1,81 @@ +"N" "P" "Corr" "Ratio" "Stab" "ROC" "FP" "FN" "num_select" "FDR" "ROC_mean" "FP_mean" "FN_mean" +50 50 "0.1" 1 0.13 "0.77 ( 0.01 )" "13.02 ( 1.02 )" "1.51 ( 0.11 )" 16.51 "0.63" 0.77 13.02 1.51 +100 50 "0.1" 0.5 0.24 "0.85 ( 0.01 )" "10.71 ( 0.62 )" "0.56 ( 0.07 )" 15.15 "0.57" 0.85 10.71 0.56 +500 50 "0.1" 0.1 0.41 "0.92 ( 0 )" "7.43 ( 0.6 )" "0.02 ( 0.01 )" 12.41 "0.42" 0.92 7.43 0.02 +1000 50 "0.1" 0.05 0.39 "0.92 ( 0 )" "7.82 ( 0.76 )" "0 ( 0 )" 12.82 "0.4" 0.92 7.82 0 +50 100 "0.1" 2 0.09 "0.73 ( 0.01 )" "21.55 ( 1.94 )" "1.64 ( 0.11 )" 24.91 "0.73" 0.73 21.55 1.64 +100 100 "0.1" 1 0.18 "0.83 ( 0.01 )" "15.59 ( 1.32 )" "0.84 ( 0.1 )" 19.75 "0.62" 0.83 15.59 0.84 +500 100 "0.1" 0.2 0.32 "0.92 ( 0 )" "11.5 ( 0.9 )" "0 ( 0 )" 16.5 "0.54" 0.92 11.5 0 +1000 100 "0.1" 0.1 0.34 "0.92 ( 0 )" "11.02 ( 1.05 )" "0 ( 0 )" 16.02 "0.49" 0.92 11.02 0 +50 500 "0.1" 10 0.03 "0.66 ( 0.01 )" "58.7 ( 5.86 )" "2.64 ( 0.12 )" 61.06 "0.89" 0.66 58.7 2.64 +100 500 "0.1" 5 0.14 "0.78 ( 0.01 )" "19.29 ( 1.92 )" "1.76 ( 0.1 )" 22.53 "0.68" 0.78 19.29 1.76 +500 500 "0.1" 1 0.26 "0.91 ( 0 )" "17.05 ( 1.43 )" "0 ( 0 )" 22.05 "0.62" 0.91 17.05 0 +1000 500 "0.1" 0.5 0.29 "0.93 ( 0 )" "15.14 ( 1.39 )" "0 ( 0 )" 20.14 "0.54" 0.93 15.14 0 +50 1000 "0.1" 20 0.02 "0.65 ( 0.01 )" "85.97 ( 9 )" "3.03 ( 0.13 )" 87.94 "0.92" 0.65 85.97 3.03 +100 1000 "0.1" 10 0.12 "0.76 ( 0.01 )" "22.02 ( 1.97 )" "2.07 ( 0.1 )" 24.95 "0.75" 0.76 22.02 2.07 +500 1000 "0.1" 2 0.23 "0.91 ( 0 )" "21.07 ( 1.75 )" "0 ( 0 )" 26.07 "0.66" 0.91 21.07 0 +1000 1000 "0.1" 1 0.24 "0.92 ( 0 )" "19.56 ( 2.29 )" "0 ( 0 )" 24.56 "0.57" 0.92 19.56 0 +50 50 "0.3" 1 0.13 "0.76 ( 0.01 )" "11.32 ( 0.99 )" "1.87 ( 0.14 )" 14.45 "0.59" 0.76 11.32 1.87 +100 50 "0.3" 0.5 0.18 "0.83 ( 0.01 )" "12.96 ( 0.86 )" "0.75 ( 0.09 )" 17.21 "0.61" 0.83 12.96 0.75 +500 50 "0.3" 0.1 0.33 "0.91 ( 0 )" "9.89 ( 0.75 )" "0 ( 0 )" 14.89 "0.51" 0.91 9.89 0 +1000 50 "0.3" 0.05 0.38 "0.92 ( 0 )" "8.56 ( 0.69 )" "0 ( 0 )" 13.56 "0.44" 0.92 8.56 0 +50 100 "0.3" 2 0.08 "0.74 ( 0.01 )" "17.99 ( 1.78 )" "2.32 ( 0.14 )" 20.67 "0.72" 0.74 17.99 2.32 +100 100 "0.3" 1 0.17 "0.82 ( 0.01 )" "14.36 ( 1.25 )" "1.36 ( 0.12 )" 18 "0.6" 0.82 14.36 1.36 +500 100 "0.3" 0.2 0.29 "0.91 ( 0 )" "13.08 ( 1 )" "0 ( 0 )" 18.08 "0.56" 0.91 13.08 0 +1000 100 "0.3" 0.1 0.38 "0.92 ( 0 )" "9.67 ( 0.76 )" "0 ( 0 )" 14.67 "0.49" 0.92 9.67 0 +50 500 "0.3" 10 0.03 "0.66 ( 0.01 )" "49.2 ( 5.65 )" "3.15 ( 0.13 )" 51.05 "0.89" 0.66 49.2 3.15 +100 500 "0.3" 5 0.11 "0.77 ( 0.01 )" "23.84 ( 2.37 )" "2.05 ( 0.11 )" 26.79 "0.73" 0.77 23.84 2.05 +500 500 "0.3" 1 0.19 "0.91 ( 0 )" "25.04 ( 1.69 )" "0 ( 0 )" 30.04 "0.72" 0.91 25.04 0 +1000 500 "0.3" 0.5 0.25 "0.92 ( 0 )" "18.51 ( 1.25 )" "0 ( 0 )" 23.51 "0.66" 0.92 18.51 0 +50 1000 "0.3" 20 0.02 "0.67 ( 0.01 )" "54.74 ( 6.8 )" "3.54 ( 0.12 )" 56.2 "0.91" 0.67 54.74 3.54 +100 1000 "0.3" 10 0.08 "0.75 ( 0.01 )" "28.55 ( 5.11 )" "2.58 ( 0.11 )" 30.97 "0.75" 0.75 28.55 2.58 +500 1000 "0.3" 2 0.17 "0.9 ( 0 )" "29.91 ( 1.92 )" "0 ( 0 )" 34.91 "0.76" 0.9 29.91 0 +1000 1000 "0.3" 1 0.19 "0.92 ( 0 )" "25.69 ( 2.26 )" "0 ( 0 )" 30.69 "0.66" 0.92 25.69 0 +50 50 "0.5" 1 0.12 "0.74 ( 0.01 )" "11.42 ( 0.91 )" "2.04 ( 0.13 )" 14.38 "0.64" 0.74 11.42 2.04 +100 50 "0.5" 0.5 0.19 "0.83 ( 0.01 )" "11.74 ( 0.82 )" "1.01 ( 0.11 )" 15.73 "0.6" 0.83 11.74 1.01 +500 50 "0.5" 0.1 0.31 "0.91 ( 0 )" "10.82 ( 0.72 )" "0 ( 0 )" 15.82 "0.54" 0.91 10.82 0 +1000 50 "0.5" 0.05 0.36 "0.91 ( 0 )" "9.23 ( 0.76 )" "0 ( 0 )" 14.23 "0.46" 0.91 9.23 0 +50 100 "0.5" 2 0.08 "0.72 ( 0.01 )" "18.36 ( 1.76 )" "2.53 ( 0.12 )" 20.83 "0.72" 0.72 18.36 2.53 +100 100 "0.5" 1 0.16 "0.81 ( 0.01 )" "15.05 ( 1.14 )" "1.47 ( 0.12 )" 18.58 "0.67" 0.81 15.05 1.47 +500 100 "0.5" 0.2 0.27 "0.91 ( 0 )" "14.93 ( 0.96 )" "0 ( 0 )" 19.93 "0.64" 0.91 14.93 0 +1000 100 "0.5" 0.1 0.38 "0.91 ( 0 )" "10.11 ( 0.76 )" "0 ( 0 )" 15.11 "0.52" 0.91 10.11 0 +50 500 "0.5" 10 0.03 "0.69 ( 0.01 )" "40.87 ( 5.37 )" "3.42 ( 0.13 )" 42.45 "0.87" 0.69 40.87 3.42 +100 500 "0.5" 5 0.09 "0.76 ( 0.01 )" "22.4 ( 3.42 )" "2.91 ( 0.1 )" 24.49 "0.72" 0.76 22.4 2.91 +500 500 "0.5" 1 0.19 "0.89 ( 0 )" "26.07 ( 1.56 )" "0.01 ( 0.01 )" 31.06 "0.74" 0.89 26.07 0.01 +1000 500 "0.5" 0.5 0.21 "0.91 ( 0 )" "22.64 ( 1.75 )" "0 ( 0 )" 27.64 "0.69" 0.91 22.64 0 +50 1000 "0.5" 20 0.02 "0.66 ( 0.01 )" "61.74 ( 7.68 )" "3.7 ( 0.11 )" 63.04 "0.91" 0.66 61.74 3.7 +100 1000 "0.5" 10 0.07 "0.75 ( 0.01 )" "27.52 ( 4.1 )" "3.1 ( 0.09 )" 29.42 "0.8" 0.75 27.52 3.1 +500 1000 "0.5" 2 0.16 "0.89 ( 0 )" "31.54 ( 2.49 )" "0.05 ( 0.03 )" 36.49 "0.74" 0.89 31.54 0.05 +1000 1000 "0.5" 1 0.17 "0.91 ( 0 )" "29.65 ( 2.06 )" "0 ( 0 )" 34.65 "0.75" 0.91 29.65 0 +50 50 "0.7" 1 0.1 "0.75 ( 0.01 )" "12.33 ( 0.98 )" "2.23 ( 0.15 )" 15.1 "0.64" 0.75 12.33 2.23 +100 50 "0.7" 0.5 0.18 "0.81 ( 0.01 )" "11.18 ( 0.86 )" "1.42 ( 0.12 )" 14.76 "0.59" 0.81 11.18 1.42 +500 50 "0.7" 0.1 0.31 "0.89 ( 0 )" "11.14 ( 0.74 )" "0.02 ( 0.02 )" 16.12 "0.56" 0.89 11.14 0.02 +1000 50 "0.7" 0.05 0.37 "0.89 ( 0 )" "9.65 ( 0.77 )" "0 ( 0 )" 14.65 "0.49" 0.89 9.65 0 +50 100 "0.7" 2 0.08 "0.71 ( 0.01 )" "17.76 ( 1.65 )" "2.81 ( 0.14 )" 19.95 "0.74" 0.71 17.76 2.81 +100 100 "0.7" 1 0.13 "0.79 ( 0.01 )" "16.43 ( 1.31 )" "1.79 ( 0.13 )" 19.64 "0.68" 0.79 16.43 1.79 +500 100 "0.7" 0.2 0.25 "0.89 ( 0 )" "16.01 ( 0.82 )" "0.03 ( 0.03 )" 20.98 "0.67" 0.89 16.01 0.03 +1000 100 "0.7" 0.1 0.33 "0.89 ( 0 )" "12.77 ( 0.94 )" "0 ( 0 )" 17.77 "0.58" 0.89 12.77 0 +50 500 "0.7" 10 0.03 "0.67 ( 0.01 )" "43.83 ( 5.17 )" "3.75 ( 0.12 )" 45.08 "0.9" 0.67 43.83 3.75 +100 500 "0.7" 5 0.1 "0.74 ( 0.01 )" "19.1 ( 1.88 )" "3.08 ( 0.1 )" 21.02 "0.73" 0.74 19.1 3.08 +500 500 "0.7" 1 0.15 "0.87 ( 0 )" "31.23 ( 1.88 )" "0.17 ( 0.04 )" 36.06 "0.78" 0.87 31.23 0.17 +1000 500 "0.7" 0.5 0.22 "0.89 ( 0 )" "22.46 ( 1.45 )" "0 ( 0 )" 27.46 "0.71" 0.89 22.46 0 +50 1000 "0.7" 20 0.02 "0.64 ( 0.01 )" "47.17 ( 5.85 )" "4.12 ( 0.09 )" 48.05 "0.92" 0.64 47.17 4.12 +100 1000 "0.7" 10 0.08 "0.75 ( 0.01 )" "20.86 ( 2.56 )" "3.59 ( 0.09 )" 22.27 "0.77" 0.75 20.86 3.59 +500 1000 "0.7" 2 0.13 "0.87 ( 0 )" "36.32 ( 2.18 )" "0.23 ( 0.05 )" 41.09 "0.81" 0.87 36.32 0.23 +1000 1000 "0.7" 1 0.16 "0.89 ( 0 )" "32.22 ( 2.11 )" "0.01 ( 0.01 )" 37.21 "0.8" 0.89 32.22 0.01 +50 50 "0.9" 1 0.09 "0.71 ( 0.01 )" "14.15 ( 1 )" "2.3 ( 0.14 )" 16.85 "0.68" 0.71 14.15 2.3 +100 50 "0.9" 0.5 0.15 "0.77 ( 0.01 )" "11.74 ( 0.88 )" "1.74 ( 0.13 )" 15 "0.64" 0.77 11.74 1.74 +500 50 "0.9" 0.1 0.27 "0.83 ( 0 )" "12.28 ( 0.9 )" "0.18 ( 0.06 )" 17.1 "0.57" 0.83 12.28 0.18 +1000 50 "0.9" 0.05 0.39 "0.84 ( 0 )" "9.58 ( 0.68 )" "0.01 ( 0.01 )" 14.57 "0.51" 0.84 9.58 0.01 +50 100 "0.9" 2 0.08 "0.7 ( 0.01 )" "15.1 ( 1.65 )" "3.16 ( 0.13 )" 16.94 "0.7" 0.7 15.1 3.16 +100 100 "0.9" 1 0.15 "0.75 ( 0.01 )" "14.19 ( 1.38 )" "2.23 ( 0.13 )" 16.96 "0.64" 0.75 14.19 2.23 +500 100 "0.9" 0.2 0.25 "0.83 ( 0 )" "16.33 ( 1.01 )" "0.2 ( 0.06 )" 21.13 "0.67" 0.83 16.33 0.2 +1000 100 "0.9" 0.1 0.32 "0.84 ( 0 )" "13.82 ( 1.17 )" "0.03 ( 0.02 )" 18.79 "0.6" 0.84 13.82 0.03 +50 500 "0.9" 10 0.05 "0.66 ( 0.02 )" "28.64 ( 3.14 )" "4.13 ( 0.07 )" 29.51 "0.88" 0.66 28.64 4.13 +100 500 "0.9" 5 0.07 "0.7 ( 0.01 )" "25.71 ( 4.03 )" "3.42 ( 0.1 )" 27.29 "0.78" 0.7 25.71 3.42 +500 500 "0.9" 1 0.14 "0.81 ( 0 )" "25.68 ( 1.61 )" "1.07 ( 0.11 )" 29.61 "0.76" 0.81 25.68 1.07 +1000 500 "0.9" 0.5 0.21 "0.83 ( 0 )" "23.49 ( 1.26 )" "0.15 ( 0.05 )" 28.34 "0.75" 0.83 23.49 0.15 +50 1000 "0.9" 20 0.02 "0.65 ( 0.01 )" "49.08 ( 6.86 )" "4.29 ( 0.09 )" 49.79 "0.93" 0.65 49.08 4.29 +100 1000 "0.9" 10 0.05 "0.66 ( 0.01 )" "32.99 ( 5.22 )" "3.81 ( 0.09 )" 34.18 "0.8" 0.66 32.99 3.81 +500 1000 "0.9" 2 0.11 "0.8 ( 0 )" "30.91 ( 2.22 )" "1.52 ( 0.12 )" 34.39 "0.78" 0.8 30.91 1.52 +1000 1000 "0.9" 1 0.14 "0.83 ( 0 )" "35.66 ( 1.98 )" "0.23 ( 0.06 )" 40.43 "0.82" 0.83 35.66 0.23 diff --git a/simulations/results_summary_bin/sim_toe_GencompLasso_binary.txt b/simulations/results_summary_bin/sim_toe_GencompLasso_binary.txt new file mode 100644 index 0000000..5cb08ae --- /dev/null +++ b/simulations/results_summary_bin/sim_toe_GencompLasso_binary.txt @@ -0,0 +1,81 @@ +"N" "P" "Corr" "Ratio" "Stab" "ROC" "FP" "FN" "num_select" "FDR" "ROC_mean" "FP_mean" "FN_mean" +50 50 "0.1" 1 0.13 "0.97 ( 0 )" "14.84 ( 0.9 )" "0.93 ( 0.09 )" 19.91 "0.7" 0.97 14.84 0.93 +100 50 "0.1" 0.5 0.33 "0.93 ( 0 )" "7.19 ( 0.43 )" "0.49 ( 0.07 )" 12.7 "0.53" 0.93 7.19 0.49 +500 50 "0.1" 0.1 0.7 "0.9 ( 0 )" "1.93 ( 0.34 )" "0.16 ( 0.04 )" 7.77 "0.16" 0.9 1.93 0.16 +1000 50 "0.1" 0.05 0.79 "0.9 ( 0 )" "1.37 ( 0.42 )" "0.01 ( 0.01 )" 7.36 "0.1" 0.9 1.37 0.01 +50 100 "0.1" 2 0.07 "0.99 ( 0 )" "36.64 ( 2.16 )" "0.65 ( 0.07 )" 41.99 "0.84" 0.99 36.64 0.65 +100 100 "0.1" 1 0.2 "0.94 ( 0 )" "16.16 ( 1.22 )" "0.47 ( 0.06 )" 21.69 "0.7" 0.94 16.16 0.47 +500 100 "0.1" 0.2 0.36 "0.9 ( 0 )" "8.64 ( 1.35 )" "0.08 ( 0.03 )" 14.56 "0.37" 0.9 8.64 0.08 +1000 100 "0.1" 0.1 0.47 "0.9 ( 0 )" "5.83 ( 1.4 )" "0.02 ( 0.01 )" 11.81 "0.22" 0.9 5.83 0.02 +50 500 "0.1" 10 0.01 "1 ( 0 )" "248.06 ( 7.56 )" "0.56 ( 0.07 )" 253.5 "0.98" 1 248.06 0.56 +100 500 "0.1" 5 0.03 "1 ( 0 )" "132.04 ( 7.47 )" "0.33 ( 0.05 )" 137.71 "0.95" 1 132.04 0.33 +500 500 "0.1" 1 0.34 "0.91 ( 0 )" "12.55 ( 1.81 )" "0.04 ( 0.02 )" 18.51 "0.52" 0.91 12.55 0.04 +1000 500 "0.1" 0.5 0.69 "0.9 ( 0 )" "3.02 ( 0.6 )" "0.01 ( 0.01 )" 9.01 "0.22" 0.9 3.02 0.01 +50 1000 "0.1" 20 0.01 "1 ( 0 )" "398.98 ( 6.9 )" "0.8 ( 0.08 )" 404.18 "0.99" 1 398.98 0.8 +100 1000 "0.1" 10 0.02 "1 ( 0 )" "296.19 ( 8.29 )" "0.35 ( 0.05 )" 301.84 "0.98" 1 296.19 0.35 +500 1000 "0.1" 2 0.39 "0.9 ( 0 )" "10.2 ( 0.98 )" "0.1 ( 0.03 )" 16.1 "0.52" 0.9 10.2 0.1 +1000 1000 "0.1" 1 0.83 "0.9 ( 0 )" "1.76 ( 0.26 )" "0.02 ( 0.01 )" 7.74 "0.18" 0.9 1.76 0.02 +50 50 "0.3" 1 0.14 "0.96 ( 0 )" "13.96 ( 0.83 )" "1.01 ( 0.09 )" 18.95 "0.7" 0.96 13.96 1.01 +100 50 "0.3" 0.5 0.25 "0.92 ( 0 )" "9.38 ( 0.67 )" "0.68 ( 0.07 )" 14.7 "0.58" 0.92 9.38 0.68 +500 50 "0.3" 0.1 0.44 "0.89 ( 0 )" "5.43 ( 0.9 )" "0.14 ( 0.03 )" 11.29 "0.3" 0.89 5.43 0.14 +1000 50 "0.3" 0.05 0.48 "0.88 ( 0 )" "5.03 ( 1 )" "0.09 ( 0.03 )" 10.94 "0.23" 0.88 5.03 0.09 +50 100 "0.3" 2 0.06 "0.99 ( 0 )" "36.33 ( 2.24 )" "0.9 ( 0.09 )" 41.43 "0.85" 0.99 36.33 0.9 +100 100 "0.3" 1 0.19 "0.93 ( 0 )" "16.08 ( 0.95 )" "0.75 ( 0.07 )" 21.33 "0.72" 0.93 16.08 0.75 +500 100 "0.3" 0.2 0.37 "0.89 ( 0 )" "8.66 ( 1.15 )" "0.11 ( 0.03 )" 14.55 "0.42" 0.89 8.66 0.11 +1000 100 "0.3" 0.1 0.39 "0.88 ( 0 )" "8.45 ( 1.17 )" "0.12 ( 0.03 )" 14.33 "0.39" 0.88 8.45 0.12 +50 500 "0.3" 10 0.01 "1 ( 0 )" "228.37 ( 7.07 )" "0.6 ( 0.08 )" 233.77 "0.97" 1 228.37 0.6 +100 500 "0.3" 5 0.04 "0.99 ( 0 )" "114.53 ( 5.78 )" "0.43 ( 0.06 )" 120.1 "0.94" 0.99 114.53 0.43 +500 500 "0.3" 1 0.31 "0.89 ( 0 )" "13.64 ( 2.08 )" "0.2 ( 0.04 )" 19.44 "0.57" 0.89 13.64 0.2 +1000 500 "0.3" 0.5 0.54 "0.88 ( 0 )" "6.3 ( 1.15 )" "0.09 ( 0.04 )" 12.21 "0.38" 0.88 6.3 0.09 +50 1000 "0.3" 20 0.01 "1 ( 0 )" "412.73 ( 7.91 )" "0.88 ( 0.1 )" 417.85 "0.99" 1 412.73 0.88 +100 1000 "0.3" 10 0.02 "1 ( 0 )" "279.68 ( 7.94 )" "0.45 ( 0.07 )" 285.23 "0.98" 1 279.68 0.45 +500 1000 "0.3" 2 0.3 "0.89 ( 0 )" "14.7 ( 1.84 )" "0.26 ( 0.05 )" 20.44 "0.6" 0.89 14.7 0.26 +1000 1000 "0.3" 1 0.73 "0.88 ( 0 )" "3.45 ( 0.41 )" "0.18 ( 0.04 )" 9.27 "0.3" 0.88 3.45 0.18 +50 50 "0.5" 1 0.13 "0.94 ( 0 )" "12.95 ( 0.79 )" "1.38 ( 0.1 )" 17.57 "0.7" 0.94 12.95 1.38 +100 50 "0.5" 0.5 0.23 "0.9 ( 0 )" "8.65 ( 0.57 )" "1.15 ( 0.08 )" 13.5 "0.59" 0.9 8.65 1.15 +500 50 "0.5" 0.1 0.39 "0.86 ( 0 )" "4.81 ( 0.77 )" "1.01 ( 0.1 )" 9.8 "0.3" 0.86 4.81 1.01 +1000 50 "0.5" 0.05 0.37 "0.86 ( 0 )" "4.69 ( 1.01 )" "1.17 ( 0.11 )" 9.52 "0.22" 0.86 4.69 1.17 +50 100 "0.5" 2 0.07 "0.98 ( 0 )" "30.24 ( 1.94 )" "1.32 ( 0.11 )" 34.92 "0.84" 0.98 30.24 1.32 +100 100 "0.5" 1 0.17 "0.91 ( 0 )" "15.59 ( 1.05 )" "1.24 ( 0.08 )" 20.35 "0.73" 0.91 15.59 1.24 +500 100 "0.5" 0.2 0.34 "0.87 ( 0 )" "6.45 ( 1.28 )" "1.24 ( 0.1 )" 11.21 "0.29" 0.87 6.45 1.24 +1000 100 "0.5" 0.1 0.28 "0.86 ( 0 )" "8.33 ( 1.58 )" "1.21 ( 0.1 )" 13.12 "0.3" 0.86 8.33 1.21 +50 500 "0.5" 10 0.01 "1 ( 0 )" "211.18 ( 7.59 )" "0.85 ( 0.09 )" 216.33 "0.97" 1 211.18 0.85 +100 500 "0.5" 5 0.05 "0.98 ( 0 )" "84.58 ( 6.44 )" "0.94 ( 0.1 )" 89.64 "0.93" 0.98 84.58 0.94 +500 500 "0.5" 1 0.27 "0.86 ( 0 )" "13.6 ( 1.48 )" "0.91 ( 0.09 )" 18.69 "0.58" 0.86 13.6 0.91 +1000 500 "0.5" 0.5 0.51 "0.86 ( 0 )" "3.77 ( 0.58 )" "1.52 ( 0.12 )" 8.25 "0.28" 0.86 3.77 1.52 +50 1000 "0.5" 20 0.01 "1 ( 0 )" "394.36 ( 8.82 )" "1.1 ( 0.1 )" 399.26 "0.99" 1 394.36 1.1 +100 1000 "0.5" 10 0.02 "1 ( 0 )" "223.93 ( 9.26 )" "0.61 ( 0.08 )" 229.32 "0.97" 1 223.93 0.61 +500 1000 "0.5" 2 0.3 "0.87 ( 0 )" "12.27 ( 1.53 )" "0.94 ( 0.1 )" 17.33 "0.54" 0.87 12.27 0.94 +1000 1000 "0.5" 1 0.59 "0.86 ( 0 )" "3.92 ( 0.7 )" "1.07 ( 0.11 )" 8.85 "0.3" 0.86 3.92 1.07 +50 50 "0.7" 1 0.16 "0.92 ( 0 )" "10.22 ( 0.71 )" "1.97 ( 0.1 )" 14.25 "0.68" 0.92 10.22 1.97 +100 50 "0.7" 0.5 0.23 "0.88 ( 0 )" "7.69 ( 0.73 )" "2.02 ( 0.08 )" 11.67 "0.58" 0.88 7.69 2.02 +500 50 "0.7" 0.1 0.67 "0.86 ( 0 )" "1.32 ( 0.25 )" "2.42 ( 0.06 )" 4.9 "0.19" 0.86 1.32 2.42 +1000 50 "0.7" 0.05 0.74 "0.85 ( 0 )" "0.84 ( 0.14 )" "2.48 ( 0.06 )" 4.36 "0.13" 0.85 0.84 2.48 +50 100 "0.7" 2 0.07 "0.96 ( 0 )" "24.54 ( 1.62 )" "2.08 ( 0.11 )" 28.46 "0.84" 0.96 24.54 2.08 +100 100 "0.7" 1 0.16 "0.89 ( 0 )" "14.69 ( 1.28 )" "1.85 ( 0.08 )" 18.84 "0.71" 0.89 14.69 1.85 +500 100 "0.7" 0.2 0.55 "0.86 ( 0 )" "2.19 ( 0.64 )" "2.33 ( 0.07 )" 5.86 "0.18" 0.86 2.19 2.33 +1000 100 "0.7" 0.1 0.81 "0.85 ( 0 )" "0.51 ( 0.1 )" "2.56 ( 0.05 )" 3.95 "0.09" 0.85 0.51 2.56 +50 500 "0.7" 10 0.02 "1 ( 0 )" "161.23 ( 7.83 )" "1.29 ( 0.1 )" 165.94 "0.96" 1 161.23 1.29 +100 500 "0.7" 5 0.06 "0.96 ( 0 )" "60.05 ( 4.29 )" "1.63 ( 0.12 )" 64.42 "0.92" 0.96 60.05 1.63 +500 500 "0.7" 1 0.5 "0.85 ( 0 )" "3.12 ( 1.31 )" "2.68 ( 0.07 )" 6.44 "0.19" 0.85 3.12 2.68 +1000 500 "0.7" 0.5 0.89 "0.85 ( 0 )" "0.39 ( 0.06 )" "2.88 ( 0.04 )" 3.51 "0.09" 0.85 0.39 2.88 +50 1000 "0.7" 20 0.01 "1 ( 0 )" "363.91 ( 11.45 )" "1.39 ( 0.1 )" 368.52 "0.99" 1 363.91 1.39 +100 1000 "0.7" 10 0.03 "0.99 ( 0 )" "145.9 ( 7.62 )" "1.24 ( 0.11 )" 150.66 "0.96" 0.99 145.9 1.24 +500 1000 "0.7" 2 0.61 "0.85 ( 0 )" "2.38 ( 0.4 )" "2.7 ( 0.06 )" 5.68 "0.27" 0.85 2.38 2.7 +1000 1000 "0.7" 1 0.87 "0.85 ( 0 )" "0.65 ( 0.08 )" "2.87 ( 0.04 )" 3.78 "0.14" 0.85 0.65 2.87 +50 50 "0.9" 1 0.14 "0.84 ( 0.01 )" "9.98 ( 0.78 )" "2.68 ( 0.11 )" 13.3 "0.7" 0.84 9.98 2.68 +100 50 "0.9" 0.5 0.25 "0.8 ( 0 )" "6.57 ( 0.7 )" "2.73 ( 0.09 )" 9.84 "0.58" 0.8 6.57 2.73 +500 50 "0.9" 0.1 0.52 "0.8 ( 0 )" "2.9 ( 0.5 )" "2.75 ( 0.07 )" 6.15 "0.33" 0.8 2.9 2.75 +1000 50 "0.9" 0.05 0.7 "0.8 ( 0 )" "1.88 ( 0.19 )" "2.79 ( 0.05 )" 5.09 "0.3" 0.8 1.88 2.79 +50 100 "0.9" 2 0.1 "0.87 ( 0.01 )" "15.93 ( 1 )" "2.88 ( 0.1 )" 19.05 "0.81" 0.87 15.93 2.88 +100 100 "0.9" 1 0.14 "0.81 ( 0 )" "14.34 ( 1.4 )" "2.75 ( 0.1 )" 17.59 "0.73" 0.81 14.34 2.75 +500 100 "0.9" 0.2 0.56 "0.8 ( 0 )" "3.51 ( 0.44 )" "2.86 ( 0.04 )" 6.65 "0.4" 0.8 3.51 2.86 +1000 100 "0.9" 0.1 0.57 "0.8 ( 0 )" "3.18 ( 0.59 )" "2.86 ( 0.04 )" 6.32 "0.34" 0.8 3.18 2.86 +50 500 "0.9" 10 0.02 "0.99 ( 0 )" "95.52 ( 6.42 )" "2.37 ( 0.15 )" 99.15 "0.95" 0.99 95.52 2.37 +100 500 "0.9" 5 0.04 "0.88 ( 0 )" "53.08 ( 3.93 )" "2.8 ( 0.12 )" 56.28 "0.93" 0.88 53.08 2.8 +500 500 "0.9" 1 0.4 "0.79 ( 0 )" "6.75 ( 0.73 )" "2.76 ( 0.07 )" 9.99 "0.56" 0.79 6.75 2.76 +1000 500 "0.9" 0.5 0.73 "0.8 ( 0 )" "2.48 ( 0.28 )" "2.79 ( 0.05 )" 5.69 "0.37" 0.8 2.48 2.79 +50 1000 "0.9" 20 0.01 "1 ( 0 )" "201.98 ( 10.15 )" "2.34 ( 0.16 )" 205.64 "0.98" 1 201.98 2.34 +100 1000 "0.9" 10 0.03 "0.95 ( 0 )" "70.81 ( 4.4 )" "3.05 ( 0.12 )" 73.76 "0.96" 0.95 70.81 3.05 +500 1000 "0.9" 2 0.38 "0.79 ( 0 )" "7.71 ( 1.09 )" "2.85 ( 0.06 )" 10.86 "0.59" 0.79 7.71 2.85 +1000 1000 "0.9" 1 0.76 "0.8 ( 0 )" "2.41 ( 0.17 )" "2.77 ( 0.07 )" 5.64 "0.39" 0.8 2.41 2.77 diff --git a/simulations/results_summary_bin/sim_toe_RF_binary.txt b/simulations/results_summary_bin/sim_toe_RF_binary.txt new file mode 100644 index 0000000..8cd0e12 --- /dev/null +++ b/simulations/results_summary_bin/sim_toe_RF_binary.txt @@ -0,0 +1,81 @@ +"N" "P" "Corr" "Ratio" "Stab" "ROC" "FP" "FN" "num_select" "FDR" "ROC_mean" "FP_mean" "FN_mean" +50 50 "0.1" 1 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 50 "0.1" 0.5 0.1 "1 ( 0 )" "2.05 ( 0.14 )" "4.71 ( 0.08 )" 3.31 "0.56" 1 2.05 4.71 +500 50 "0.1" 0.1 0.5 "1 ( 0 )" "1.4 ( 0.12 )" "2.4 ( 0.08 )" 5 "0.25" 1 1.4 2.4 +1000 50 "0.1" 0.05 0.69 "1 ( 0 )" "0.98 ( 0.09 )" "1.2 ( 0.08 )" 5.78 "0.15" 1 0.98 1.2 +50 100 "0.1" 2 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 100 "0.1" 1 0.06 "1 ( 0 )" "3.95 ( 0.21 )" "4.66 ( 0.08 )" 5.29 "0.72" 1 3.95 4.66 +500 100 "0.1" 0.2 0.35 "1 ( 0 )" "3.91 ( 0.21 )" "2.17 ( 0.08 )" 7.74 "0.48" 1 3.91 2.17 +1000 100 "0.1" 0.1 0.51 "1 ( 0 )" "2.97 ( 0.15 )" "1.29 ( 0.07 )" 7.68 "0.36" 1 2.97 1.29 +50 500 "0.1" 10 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 500 "0.1" 5 0.01 "1 ( 0 )" "24.57 ( 0.55 )" "4.72 ( 0.08 )" 25.85 "0.95" 1 24.57 4.72 +500 500 "0.1" 1 0.09 "1 ( 0 )" "23.57 ( 0.51 )" "2.43 ( 0.1 )" 27.14 "0.86" 1 23.57 2.43 +1000 500 "0.1" 0.5 0.14 "1 ( 0 )" "22.61 ( 0.5 )" "1.31 ( 0.08 )" 27.3 "0.82" 1 22.61 1.31 +50 1000 "0.1" 20 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 1000 "0.1" 10 0.01 "1 ( 0 )" "48.35 ( 0.66 )" "4.88 ( 0.08 )" 49.47 "0.98" 1 48.35 4.88 +500 1000 "0.1" 2 0.04 "1 ( 0 )" "48.59 ( 0.73 )" "2.71 ( 0.1 )" 51.88 "0.94" 1 48.59 2.71 +1000 1000 "0.1" 1 0.06 "1 ( 0 )" "46.74 ( 0.64 )" "1.75 ( 0.09 )" 50.99 "0.92" 1 46.74 1.75 +50 50 "0.3" 1 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 50 "0.3" 0.5 0.1 "1 ( 0 )" "1.68 ( 0.12 )" "4.86 ( 0.08 )" 2.81 "0.54" 1 1.68 4.86 +500 50 "0.3" 0.1 0.44 "1 ( 0 )" "1.57 ( 0.12 )" "2.74 ( 0.08 )" 4.83 "0.3" 1 1.57 2.74 +1000 50 "0.3" 0.05 0.62 "1 ( 0 )" "1.33 ( 0.1 )" "1.44 ( 0.08 )" 5.89 "0.21" 1 1.33 1.44 +50 100 "0.3" 2 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 100 "0.3" 1 0.05 "1 ( 0 )" "4.45 ( 0.2 )" "4.85 ( 0.08 )" 5.6 "0.78" 1 4.45 4.85 +500 100 "0.3" 0.2 0.33 "1 ( 0 )" "3.36 ( 0.19 )" "2.57 ( 0.09 )" 6.79 "0.46" 1 3.36 2.57 +1000 100 "0.3" 0.1 0.47 "1 ( 0 )" "3.43 ( 0.17 )" "1.61 ( 0.09 )" 7.82 "0.41" 1 3.43 1.61 +50 500 "0.3" 10 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 500 "0.3" 5 0.01 "1 ( 0 )" "23.69 ( 0.53 )" "4.87 ( 0.08 )" 24.82 "0.95" 1 23.69 4.87 +500 500 "0.3" 1 0.07 "1 ( 0 )" "22.84 ( 0.44 )" "3.11 ( 0.09 )" 25.73 "0.89" 1 22.84 3.11 +1000 500 "0.3" 0.5 0.13 "1 ( 0 )" "22.24 ( 0.43 )" "1.77 ( 0.09 )" 26.47 "0.84" 1 22.24 1.77 +50 1000 "0.3" 20 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 1000 "0.3" 10 0.01 "1 ( 0 )" "48.06 ( 0.76 )" "5.02 ( 0.08 )" 49.04 "0.98" 1 48.06 5.02 +500 1000 "0.3" 2 0.04 "1 ( 0 )" "47.71 ( 0.73 )" "2.98 ( 0.09 )" 50.73 "0.94" 1 47.71 2.98 +1000 1000 "0.3" 1 0.06 "1 ( 0 )" "47.11 ( 0.84 )" "2.03 ( 0.09 )" 51.08 "0.92" 1 47.11 2.03 +50 50 "0.5" 1 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 50 "0.5" 0.5 0.15 "1 ( 0 )" "1.88 ( 0.15 )" "4.77 ( 0.08 )" 3.1 "0.54" 1 1.88 4.77 +500 50 "0.5" 0.1 0.44 "1 ( 0 )" "1.83 ( 0.11 )" "2.9 ( 0.09 )" 4.93 "0.35" 1 1.83 2.9 +1000 50 "0.5" 0.05 0.61 "1 ( 0 )" "1.9 ( 0.11 )" "2.06 ( 0.08 )" 5.84 "0.31" 1 1.9 2.06 +50 100 "0.5" 2 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 100 "0.5" 1 0.08 "1 ( 0 )" "4.6 ( 0.23 )" "4.71 ( 0.07 )" 5.89 "0.75" 1 4.6 4.71 +500 100 "0.5" 0.2 0.31 "1 ( 0 )" "4.2 ( 0.22 )" "3.01 ( 0.08 )" 7.19 "0.55" 1 4.2 3.01 +1000 100 "0.5" 0.1 0.5 "1 ( 0 )" "3.78 ( 0.18 )" "1.84 ( 0.08 )" 7.94 "0.46" 1 3.78 1.84 +50 500 "0.5" 10 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 500 "0.5" 5 0.01 "1 ( 0 )" "23.59 ( 0.56 )" "4.98 ( 0.08 )" 24.61 "0.96" 1 23.59 4.98 +500 500 "0.5" 1 0.07 "1 ( 0 )" "23.16 ( 0.45 )" "3.28 ( 0.08 )" 25.88 "0.89" 1 23.16 3.28 +1000 500 "0.5" 0.5 0.13 "1 ( 0 )" "22.83 ( 0.49 )" "2.29 ( 0.08 )" 26.54 "0.86" 1 22.83 2.29 +50 1000 "0.5" 20 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 1000 "0.5" 10 0.01 "1 ( 0 )" "46.65 ( 0.77 )" "4.98 ( 0.09 )" 47.67 "0.98" 1 46.65 4.98 +500 1000 "0.5" 2 0.04 "1 ( 0 )" "47.46 ( 0.83 )" "3.51 ( 0.08 )" 49.95 "0.95" 1 47.46 3.51 +1000 1000 "0.5" 1 0.06 "1 ( 0 )" "47.83 ( 0.8 )" "2.59 ( 0.08 )" 51.24 "0.93" 1 47.83 2.59 +50 50 "0.7" 1 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 50 "0.7" 0.5 0.16 "1 ( 0 )" "1.87 ( 0.14 )" "4.88 ( 0.08 )" 2.96 "0.57" 1 1.87 4.88 +500 50 "0.7" 0.1 0.45 "1 ( 0 )" "2.14 ( 0.13 )" "3.36 ( 0.08 )" 4.78 "0.43" 1 2.14 3.36 +1000 50 "0.7" 0.05 0.6 "1 ( 0 )" "2.66 ( 0.14 )" "2.27 ( 0.08 )" 6.39 "0.39" 1 2.66 2.27 +50 100 "0.7" 2 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 100 "0.7" 1 0.08 "1 ( 0 )" "4.36 ( 0.22 )" "4.8 ( 0.09 )" 5.56 "0.77" 1 4.36 4.8 +500 100 "0.7" 0.2 0.38 "1 ( 0 )" "4.03 ( 0.18 )" "3.1 ( 0.09 )" 6.93 "0.56" 1 4.03 3.1 +1000 100 "0.7" 0.1 0.5 "1 ( 0 )" "4.65 ( 0.22 )" "2 ( 0.07 )" 8.65 "0.51" 1 4.65 2 +50 500 "0.7" 10 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 500 "0.7" 5 0.02 "1 ( 0 )" "23.58 ( 0.53 )" "4.72 ( 0.09 )" 24.86 "0.95" 1 23.58 4.72 +500 500 "0.7" 1 0.1 "1 ( 0 )" "23.09 ( 0.56 )" "3.38 ( 0.09 )" 25.71 "0.89" 1 23.09 3.38 +1000 500 "0.7" 0.5 0.14 "1 ( 0 )" "23.33 ( 0.53 )" "2.58 ( 0.07 )" 26.75 "0.87" 1 23.33 2.58 +50 1000 "0.7" 20 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 1000 "0.7" 10 0.01 "1 ( 0 )" "46.8 ( 0.69 )" "5.13 ( 0.07 )" 47.67 "0.98" 1 46.8 5.13 +500 1000 "0.7" 2 0.05 "1 ( 0 )" "48.68 ( 0.77 )" "3.54 ( 0.08 )" 51.14 "0.95" 1 48.68 3.54 +1000 1000 "0.7" 1 0.07 "1 ( 0 )" "47.14 ( 0.7 )" "2.73 ( 0.07 )" 50.41 "0.93" 1 47.14 2.73 +50 50 "0.9" 1 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 50 "0.9" 0.5 0.12 "1 ( 0 )" "2.09 ( 0.16 )" "4.98 ( 0.09 )" 3.06 "0.62" 1 2.09 4.98 +500 50 "0.9" 0.1 0.45 "1 ( 0 )" "2.6 ( 0.13 )" "3.33 ( 0.08 )" 5.27 "0.47" 1 2.6 3.33 +1000 50 "0.9" 0.05 0.51 "1 ( 0 )" "3.48 ( 0.17 )" "2.35 ( 0.08 )" 7.13 "0.47" 1 3.48 2.35 +50 100 "0.9" 2 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 100 "0.9" 1 0.07 "1 ( 0 )" "4.4 ( 0.23 )" "4.96 ( 0.09 )" 5.43 "0.81" 1 4.4 4.96 +500 100 "0.9" 0.2 0.35 "1 ( 0 )" "4.57 ( 0.24 )" "3.5 ( 0.08 )" 7.07 "0.62" 1 4.57 3.5 +1000 100 "0.9" 0.1 0.37 "1 ( 0 )" "6.43 ( 0.28 )" "2.57 ( 0.08 )" 9.86 "0.63" 1 6.43 2.57 +50 500 "0.9" 10 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 500 "0.9" 5 0.01 "1 ( 0 )" "24.58 ( 0.66 )" "5.1 ( 0.09 )" 25.48 "0.96" 1 24.58 5.1 +500 500 "0.9" 1 0.08 "1 ( 0 )" "24.91 ( 0.57 )" "3.53 ( 0.09 )" 27.38 "0.91" 1 24.91 3.53 +1000 500 "0.9" 0.5 0.13 "1 ( 0 )" "24.53 ( 0.53 )" "2.84 ( 0.08 )" 27.69 "0.88" 1 24.53 2.84 +50 1000 "0.9" 20 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 "NaN" 1 1 6 +100 1000 "0.9" 10 0 "1 ( 0 )" "47.19 ( 0.96 )" "5.2 ( 0.08 )" 47.99 "0.98" 1 47.19 5.2 +500 1000 "0.9" 2 0.04 "1 ( 0 )" "48.11 ( 0.92 )" "3.78 ( 0.08 )" 50.33 "0.95" 1 48.11 3.78 +1000 1000 "0.9" 1 0.07 "1 ( 0 )" "49.47 ( 0.78 )" "2.97 ( 0.07 )" 52.5 "0.94" 1 49.47 2.97 diff --git a/simulations/results_summary_bin/sim_toe_lasso_binary.txt b/simulations/results_summary_bin/sim_toe_lasso_binary.txt new file mode 100644 index 0000000..b18a769 --- /dev/null +++ b/simulations/results_summary_bin/sim_toe_lasso_binary.txt @@ -0,0 +1,81 @@ +"N" "P" "Corr" "Ratio" "Stab" "ROC" "FP" "FN" "num_select" "FDR" "ROC_mean" "FP_mean" "FN_mean" +50 50 "0.1" 1 0.32 "0.78 ( 0.01 )" "3.65 ( 0.23 )" "2.83 ( 0.11 )" 5.82 "0.39" 0.78 3.65 2.83 +100 50 "0.1" 0.5 0.34 "0.85 ( 0.01 )" "7.35 ( 0.34 )" "0.68 ( 0.09 )" 11.67 "0.5" 0.85 7.35 0.68 +500 50 "0.1" 0.1 0.55 "0.92 ( 0 )" "4.99 ( 0.22 )" "0 ( 0 )" 9.99 "0.37" 0.92 4.99 0 +1000 50 "0.1" 0.05 0.78 "0.93 ( 0 )" "2.42 ( 0.12 )" "0 ( 0 )" 7.42 "0.17" 0.93 2.42 0 +50 100 "0.1" 2 0.26 "0.74 ( 0.01 )" "4.65 ( 0.29 )" "2.93 ( 0.12 )" 6.72 "0.48" 0.74 4.65 2.93 +100 100 "0.1" 1 0.33 "0.85 ( 0.01 )" "8.11 ( 0.41 )" "0.86 ( 0.09 )" 12.25 "0.52" 0.85 8.11 0.86 +500 100 "0.1" 0.2 0.4 "0.92 ( 0 )" "8.63 ( 0.29 )" "0 ( 0 )" 13.63 "0.54" 0.92 8.63 0 +1000 100 "0.1" 0.1 0.64 "0.92 ( 0 )" "4.02 ( 0.18 )" "0 ( 0 )" 9.02 "0.31" 0.92 4.02 0 +50 500 "0.1" 10 0.12 "0.71 ( 0.01 )" "8.29 ( 0.25 )" "3.89 ( 0.1 )" 9.4 "0.77" 0.71 8.29 3.89 +100 500 "0.1" 5 0.24 "0.8 ( 0.01 )" "8.84 ( 0.61 )" "2.19 ( 0.12 )" 11.65 "0.57" 0.8 8.84 2.19 +500 500 "0.1" 1 0.21 "0.92 ( 0 )" "22.86 ( 0.75 )" "0 ( 0 )" 27.86 "0.77" 0.92 22.86 0 +1000 500 "0.1" 0.5 0.33 "0.93 ( 0 )" "12.73 ( 0.35 )" "0 ( 0 )" 17.73 "0.65" 0.93 12.73 0 +50 1000 "0.1" 20 0.09 "0.68 ( 0.01 )" "10.35 ( 0.33 )" "4.14 ( 0.09 )" 11.21 "0.82" 0.68 10.35 4.14 +100 1000 "0.1" 10 0.19 "0.77 ( 0.01 )" "10.84 ( 0.75 )" "2.46 ( 0.1 )" 13.38 "0.63" 0.77 10.84 2.46 +500 1000 "0.1" 2 0.16 "0.92 ( 0 )" "30.83 ( 1.05 )" "0 ( 0 )" 35.83 "0.81" 0.92 30.83 0 +1000 1000 "0.1" 1 0.23 "0.93 ( 0 )" "20.39 ( 0.59 )" "0 ( 0 )" 25.39 "0.75" 0.93 20.39 0 +50 50 "0.3" 1 0.28 "0.75 ( 0.01 )" "3.69 ( 0.22 )" "3.04 ( 0.1 )" 5.65 "0.4" 0.75 3.69 3.04 +100 50 "0.3" 0.5 0.32 "0.84 ( 0.01 )" "7.11 ( 0.33 )" "0.93 ( 0.1 )" 11.18 "0.5" 0.84 7.11 0.93 +500 50 "0.3" 0.1 0.51 "0.92 ( 0 )" "5.67 ( 0.22 )" "0 ( 0 )" 10.67 "0.41" 0.92 5.67 0 +1000 50 "0.3" 0.05 0.78 "0.92 ( 0 )" "2.48 ( 0.13 )" "0 ( 0 )" 7.48 "0.18" 0.92 2.48 0 +50 100 "0.3" 2 0.26 "0.75 ( 0.01 )" "4.41 ( 0.27 )" "3.47 ( 0.09 )" 5.94 "0.49" 0.75 4.41 3.47 +100 100 "0.3" 1 0.28 "0.82 ( 0.01 )" "8.16 ( 0.53 )" "1.46 ( 0.11 )" 11.7 "0.52" 0.82 8.16 1.46 +500 100 "0.3" 0.2 0.41 "0.92 ( 0 )" "8.48 ( 0.34 )" "0 ( 0 )" 13.48 "0.53" 0.92 8.48 0 +1000 100 "0.3" 0.1 0.67 "0.92 ( 0 )" "3.71 ( 0.15 )" "0 ( 0 )" 8.71 "0.29" 0.92 3.71 0 +50 500 "0.3" 10 0.13 "0.69 ( 0.01 )" "7.94 ( 0.3 )" "4.11 ( 0.08 )" 8.83 "0.77" 0.69 7.94 4.11 +100 500 "0.3" 5 0.2 "0.78 ( 0.01 )" "10.16 ( 0.68 )" "2.49 ( 0.11 )" 12.67 "0.63" 0.78 10.16 2.49 +500 500 "0.3" 1 0.2 "0.91 ( 0 )" "23.65 ( 0.7 )" "0 ( 0 )" 28.65 "0.78" 0.91 23.65 0 +1000 500 "0.3" 0.5 0.34 "0.92 ( 0 )" "12.28 ( 0.34 )" "0 ( 0 )" 17.28 "0.64" 0.92 12.28 0 +50 1000 "0.3" 20 0.1 "0.68 ( 0.01 )" "9.77 ( 0.31 )" "4.3 ( 0.06 )" 10.47 "0.83" 0.68 9.77 4.3 +100 1000 "0.3" 10 0.17 "0.77 ( 0.01 )" "10.68 ( 0.8 )" "3.02 ( 0.11 )" 12.66 "0.67" 0.77 10.68 3.02 +500 1000 "0.3" 2 0.17 "0.9 ( 0 )" "30.07 ( 1.09 )" "0 ( 0 )" 35.07 "0.81" 0.9 30.07 0 +1000 1000 "0.3" 1 0.24 "0.92 ( 0 )" "19.7 ( 0.7 )" "0 ( 0 )" 24.7 "0.73" 0.92 19.7 0 +50 50 "0.5" 1 0.25 "0.76 ( 0.01 )" "3.86 ( 0.22 )" "3.4 ( 0.12 )" 5.46 "0.47" 0.76 3.86 3.4 +100 50 "0.5" 0.5 0.31 "0.84 ( 0.01 )" "6.67 ( 0.32 )" "1.32 ( 0.1 )" 10.35 "0.51" 0.84 6.67 1.32 +500 50 "0.5" 0.1 0.55 "0.91 ( 0 )" "4.95 ( 0.22 )" "0 ( 0 )" 9.95 "0.37" 0.91 4.95 0 +1000 50 "0.5" 0.05 0.77 "0.91 ( 0 )" "2.5 ( 0.14 )" "0 ( 0 )" 7.5 "0.17" 0.91 2.5 0 +50 100 "0.5" 2 0.25 "0.72 ( 0.01 )" "4.08 ( 0.28 )" "3.81 ( 0.08 )" 5.27 "0.49" 0.72 4.08 3.81 +100 100 "0.5" 1 0.26 "0.8 ( 0.01 )" "7.61 ( 0.43 )" "2.03 ( 0.12 )" 10.58 "0.55" 0.8 7.61 2.03 +500 100 "0.5" 0.2 0.43 "0.91 ( 0 )" "8.05 ( 0.31 )" "0 ( 0 )" 13.05 "0.51" 0.91 8.05 0 +1000 100 "0.5" 0.1 0.65 "0.91 ( 0 )" "3.9 ( 0.16 )" "0 ( 0 )" 8.9 "0.3" 0.91 3.9 0 +50 500 "0.5" 10 0.14 "0.7 ( 0.01 )" "7.23 ( 0.28 )" "4.26 ( 0.07 )" 7.97 "0.76" 0.7 7.23 4.26 +100 500 "0.5" 5 0.18 "0.77 ( 0.01 )" "8.77 ( 0.71 )" "3.31 ( 0.1 )" 10.46 "0.61" 0.77 8.77 3.31 +500 500 "0.5" 1 0.2 "0.9 ( 0 )" "23.13 ( 0.75 )" "0.01 ( 0.01 )" 28.12 "0.77" 0.9 23.13 0.01 +1000 500 "0.5" 0.5 0.32 "0.91 ( 0 )" "13.23 ( 0.36 )" "0.01 ( 0.01 )" 18.22 "0.66" 0.91 13.23 0.01 +50 1000 "0.5" 20 0.11 "0.68 ( 0.01 )" "9.13 ( 0.25 )" "4.4 ( 0.06 )" 9.73 "0.83" 0.68 9.13 4.4 +100 1000 "0.5" 10 0.19 "0.77 ( 0.01 )" "8.39 ( 0.65 )" "3.48 ( 0.08 )" 9.91 "0.64" 0.77 8.39 3.48 +500 1000 "0.5" 2 0.16 "0.89 ( 0 )" "30.97 ( 0.97 )" "0 ( 0 )" 35.97 "0.82" 0.89 30.97 0 +1000 1000 "0.5" 1 0.23 "0.91 ( 0 )" "21.03 ( 0.66 )" "0 ( 0 )" 26.03 "0.75" 0.91 21.03 0 +50 50 "0.7" 1 0.28 "0.77 ( 0.01 )" "3.76 ( 0.26 )" "3.51 ( 0.11 )" 5.25 "0.42" 0.77 3.76 3.51 +100 50 "0.7" 0.5 0.33 "0.81 ( 0.01 )" "5.27 ( 0.32 )" "2.04 ( 0.12 )" 8.23 "0.44" 0.81 5.27 2.04 +500 50 "0.7" 0.1 0.57 "0.89 ( 0 )" "4.61 ( 0.17 )" "0.04 ( 0.02 )" 9.57 "0.36" 0.89 4.61 0.04 +1000 50 "0.7" 0.05 0.74 "0.89 ( 0 )" "2.8 ( 0.15 )" "0 ( 0 )" 7.8 "0.21" 0.89 2.8 0 +50 100 "0.7" 2 0.24 "0.71 ( 0.01 )" "4.31 ( 0.28 )" "4.05 ( 0.09 )" 5.26 "0.55" 0.71 4.31 4.05 +100 100 "0.7" 1 0.27 "0.79 ( 0.01 )" "6.34 ( 0.4 )" "2.67 ( 0.12 )" 8.67 "0.53" 0.79 6.34 2.67 +500 100 "0.7" 0.2 0.43 "0.89 ( 0 )" "7.92 ( 0.24 )" "0.04 ( 0.02 )" 12.88 "0.52" 0.89 7.92 0.04 +1000 100 "0.7" 0.1 0.66 "0.9 ( 0 )" "3.85 ( 0.16 )" "0 ( 0 )" 8.85 "0.3" 0.9 3.85 0 +50 500 "0.7" 10 0.14 "0.7 ( 0.01 )" "6.5 ( 0.24 )" "4.63 ( 0.06 )" 6.87 "0.77" 0.7 6.5 4.63 +100 500 "0.7" 5 0.21 "0.76 ( 0.01 )" "6.98 ( 0.58 )" "3.65 ( 0.08 )" 8.33 "0.56" 0.76 6.98 3.65 +500 500 "0.7" 1 0.2 "0.88 ( 0 )" "22.04 ( 0.74 )" "0.14 ( 0.04 )" 26.9 "0.76" 0.88 22.04 0.14 +1000 500 "0.7" 0.5 0.33 "0.89 ( 0 )" "13.15 ( 0.38 )" "0 ( 0 )" 18.15 "0.65" 0.89 13.15 0 +50 1000 "0.7" 20 0.1 "0.66 ( 0.01 )" "8.82 ( 0.28 )" "4.72 ( 0.05 )" 9.1 "0.85" 0.66 8.82 4.72 +100 1000 "0.7" 10 0.18 "0.76 ( 0.01 )" "6.93 ( 0.59 )" "4 ( 0.08 )" 7.93 "0.62" 0.76 6.93 4 +500 1000 "0.7" 2 0.16 "0.87 ( 0 )" "29.07 ( 1 )" "0.16 ( 0.04 )" 33.91 "0.81" 0.87 29.07 0.16 +1000 1000 "0.7" 1 0.22 "0.89 ( 0 )" "21.8 ( 0.63 )" "0 ( 0 )" 26.8 "0.76" 0.89 21.8 0 +50 50 "0.9" 1 0.3 "0.69 ( 0.01 )" "2.9 ( 0.2 )" "4.22 ( 0.09 )" 3.68 "0.41" 0.69 2.9 4.22 +100 50 "0.9" 0.5 0.37 "0.76 ( 0.01 )" "3.93 ( 0.21 )" "2.74 ( 0.11 )" 6.19 "0.41" 0.76 3.93 2.74 +500 50 "0.9" 0.1 0.57 "0.83 ( 0 )" "3.65 ( 0.16 )" "0.56 ( 0.08 )" 8.09 "0.31" 0.83 3.65 0.56 +1000 50 "0.9" 0.05 0.76 "0.83 ( 0 )" "2.41 ( 0.12 )" "0.23 ( 0.04 )" 7.18 "0.18" 0.83 2.41 0.23 +50 100 "0.9" 2 0.26 "0.7 ( 0.01 )" "3.29 ( 0.23 )" "4.29 ( 0.09 )" 4 "0.45" 0.7 3.29 4.29 +100 100 "0.9" 1 0.32 "0.76 ( 0.01 )" "4.77 ( 0.33 )" "3.26 ( 0.09 )" 6.51 "0.46" 0.76 4.77 3.26 +500 100 "0.9" 0.2 0.45 "0.82 ( 0 )" "5.65 ( 0.21 )" "0.92 ( 0.09 )" 9.73 "0.45" 0.82 5.65 0.92 +1000 100 "0.9" 0.1 0.63 "0.83 ( 0 )" "3.87 ( 0.18 )" "0.24 ( 0.05 )" 8.63 "0.3" 0.83 3.87 0.24 +50 500 "0.9" 10 0.15 "0.66 ( 0.01 )" "5.8 ( 0.24 )" "4.65 ( 0.07 )" 6.15 "0.75" 0.66 5.8 4.65 +100 500 "0.9" 5 0.21 "0.7 ( 0.01 )" "5.55 ( 0.55 )" "4.14 ( 0.09 )" 6.41 "0.51" 0.7 5.55 4.14 +500 500 "0.9" 1 0.19 "0.81 ( 0 )" "15.93 ( 0.73 )" "1.42 ( 0.1 )" 19.51 "0.73" 0.81 15.93 1.42 +1000 500 "0.9" 0.5 0.31 "0.83 ( 0 )" "11.96 ( 0.46 )" "0.42 ( 0.06 )" 16.54 "0.63" 0.83 11.96 0.42 +50 1000 "0.9" 20 0.08 "0.66 ( 0.01 )" "8.02 ( 0.28 )" "4.9 ( 0.07 )" 8.12 "0.85" 0.66 8.02 4.9 +100 1000 "0.9" 10 0.18 "0.69 ( 0.01 )" "5.85 ( 0.58 )" "4.37 ( 0.07 )" 6.48 "0.61" 0.69 5.85 4.37 +500 1000 "0.9" 2 0.16 "0.8 ( 0 )" "18.7 ( 0.93 )" "1.88 ( 0.1 )" 21.82 "0.77" 0.8 18.7 1.88 +1000 1000 "0.9" 1 0.21 "0.83 ( 0 )" "20.07 ( 0.72 )" "0.41 ( 0.05 )" 24.66 "0.75" 0.83 20.07 0.41 diff --git a/simulations/results_summary_bin/table_block_binary_all.txt b/simulations/results_summary_bin/table_block_binary_all.txt new file mode 100644 index 0000000..957463e --- /dev/null +++ b/simulations/results_summary_bin/table_block_binary_all.txt @@ -0,0 +1,321 @@ +"N" "P" "Corr" "Ratio" "Stab" "ROC" "FP" "FN" "num_select" "FDR" "ROC_mean" "FP_mean" "FN_mean" "method" +50 50 0.1 1 0.03 "0.59 ( 0.01 )" "2.69 ( 0.14 )" "5.3 ( 0.07 )" 2.39 0.67 0.59 2.69 5.3 "lasso" +100 50 0.1 0.5 0.11 "0.56 ( 0.01 )" "2.02 ( 0.15 )" "5.02 ( 0.08 )" 2 0.39 0.56 2.02 5.02 "lasso" +500 50 0.1 0.1 0.28 "0.63 ( 0 )" "4.52 ( 0.29 )" "3 ( 0.11 )" 6.52 0.45 0.63 4.52 3 "lasso" +1000 50 0.1 0.05 0.39 "0.64 ( 0 )" "4.74 ( 0.22 )" "2.1 ( 0.09 )" 7.64 0.44 0.64 4.74 2.1 "lasso" +50 100 0.1 2 0.02 "0.62 ( 0.01 )" "3.82 ( 0.16 )" "5.34 ( 0.07 )" 3.48 0.78 0.62 3.82 5.34 "lasso" +100 100 0.1 1 0.07 "0.56 ( 0.01 )" "2.29 ( 0.19 )" "5.27 ( 0.08 )" 2.02 0.57 0.56 2.29 5.27 "lasso" +500 100 0.1 0.2 0.23 "0.61 ( 0 )" "5.54 ( 0.52 )" "3.27 ( 0.12 )" 7.27 0.47 0.61 5.54 3.27 "lasso" +1000 100 0.1 0.1 0.27 "0.64 ( 0 )" "7.69 ( 0.42 )" "2.25 ( 0.1 )" 10.44 0.56 0.64 7.69 2.25 "lasso" +50 500 0.1 10 0.01 "0.6 ( 0.01 )" "8.69 ( 0.24 )" "5.55 ( 0.06 )" 8.14 0.94 0.6 8.69 5.55 "lasso" +100 500 0.1 5 0.03 "0.56 ( 0.01 )" "4.39 ( 0.34 )" "5.4 ( 0.07 )" 3.99 0.82 0.56 4.39 5.4 "lasso" +500 500 0.1 1 0.27 "0.61 ( 0.01 )" "3.84 ( 0.28 )" "3.93 ( 0.08 )" 4.91 0.47 0.61 3.84 3.93 "lasso" +1000 500 0.1 0.5 0.2 "0.63 ( 0 )" "9.87 ( 1.4 )" "3.18 ( 0.09 )" 11.69 0.49 0.63 9.87 3.18 "lasso" +50 1000 0.1 20 0 "0.62 ( 0.01 )" "10.42 ( 0.22 )" "5.56 ( 0.06 )" 9.86 0.95 0.62 10.42 5.56 "lasso" +100 1000 0.1 10 0.01 "0.56 ( 0.01 )" "5.93 ( 0.28 )" "5.53 ( 0.06 )" 5.4 0.9 0.56 5.93 5.53 "lasso" +500 1000 0.1 2 0.24 "0.62 ( 0.01 )" "4.22 ( 0.48 )" "4.05 ( 0.09 )" 5.17 0.46 0.62 4.22 4.05 "lasso" +1000 1000 0.1 1 0.33 "0.63 ( 0 )" "5.03 ( 0.78 )" "3.35 ( 0.06 )" 6.68 0.42 0.63 5.03 3.35 "lasso" +50 50 0.3 1 0.17 "0.65 ( 0.01 )" "3.87 ( 0.23 )" "3.68 ( 0.12 )" 5.19 0.5 0.65 3.87 3.68 "lasso" +100 50 0.3 0.5 0.32 "0.78 ( 0.01 )" "6.48 ( 0.32 )" "1.13 ( 0.11 )" 10.35 0.49 0.78 6.48 1.13 "lasso" +500 50 0.3 0.1 0.44 "0.85 ( 0 )" "6.84 ( 0.26 )" "0 ( 0 )" 11.84 0.47 0.85 6.84 0 "lasso" +1000 50 0.3 0.05 0.65 "0.86 ( 0 )" "3.69 ( 0.19 )" "0 ( 0 )" 8.69 0.28 0.86 3.69 0 "lasso" +50 100 0.3 2 0.14 "0.63 ( 0.01 )" "5.12 ( 0.25 )" "3.91 ( 0.1 )" 6.21 0.63 0.63 5.12 3.91 "lasso" +100 100 0.3 1 0.26 "0.74 ( 0.01 )" "7.62 ( 0.48 )" "1.8 ( 0.12 )" 10.82 0.53 0.74 7.62 1.8 "lasso" +500 100 0.3 0.2 0.36 "0.86 ( 0 )" "10.19 ( 0.4 )" "0 ( 0 )" 15.19 0.57 0.86 10.19 0 "lasso" +1000 100 0.3 0.1 0.52 "0.86 ( 0 )" "6 ( 0.27 )" "0 ( 0 )" 11 0.42 0.86 6 0 "lasso" +50 500 0.3 10 0.03 "0.61 ( 0.01 )" "10.46 ( 0.31 )" "4.69 ( 0.08 )" 10.77 0.87 0.61 10.46 4.69 "lasso" +100 500 0.3 5 0.17 "0.66 ( 0.01 )" "8.6 ( 0.65 )" "3.19 ( 0.12 )" 10.41 0.64 0.66 8.6 3.19 "lasso" +500 500 0.3 1 0.19 "0.85 ( 0 )" "25.12 ( 1.08 )" "0 ( 0 )" 30.12 0.77 0.85 25.12 0 "lasso" +1000 500 0.3 0.5 0.25 "0.86 ( 0 )" "18.48 ( 0.73 )" "0 ( 0 )" 23.48 0.72 0.86 18.48 0 "lasso" +50 1000 0.3 20 0.02 "0.6 ( 0.01 )" "12.08 ( 0.26 )" "4.97 ( 0.08 )" 12.11 0.91 0.6 12.08 4.97 "lasso" +100 1000 0.3 10 0.13 "0.65 ( 0.01 )" "9 ( 0.66 )" "3.58 ( 0.12 )" 10.42 0.72 0.65 9 3.58 "lasso" +500 1000 0.3 2 0.16 "0.85 ( 0 )" "31.41 ( 1.51 )" "0 ( 0 )" 36.41 0.8 0.85 31.41 0 "lasso" +1000 1000 0.3 1 0.17 "0.86 ( 0 )" "28.41 ( 1.2 )" "0 ( 0 )" 33.41 0.79 0.86 28.41 0 "lasso" +50 50 0.5 1 0.24 "0.69 ( 0.01 )" "4.53 ( 0.29 )" "2.89 ( 0.13 )" 6.64 0.48 0.69 4.53 2.89 "lasso" +100 50 0.5 0.5 0.32 "0.82 ( 0.01 )" "7.11 ( 0.4 )" "0.91 ( 0.09 )" 11.2 0.48 0.82 7.11 0.91 "lasso" +500 50 0.5 0.1 0.5 "0.89 ( 0 )" "5.76 ( 0.24 )" "0 ( 0 )" 10.76 0.41 0.89 5.76 0 "lasso" +1000 50 0.5 0.05 0.68 "0.9 ( 0 )" "3.3 ( 0.16 )" "0 ( 0 )" 8.3 0.25 0.9 3.3 0 "lasso" +50 100 0.5 2 0.19 "0.68 ( 0.01 )" "5.12 ( 0.25 )" "3.35 ( 0.1 )" 6.77 0.57 0.68 5.12 3.35 "lasso" +100 100 0.5 1 0.29 "0.8 ( 0.01 )" "8.11 ( 0.47 )" "1.32 ( 0.1 )" 11.79 0.54 0.8 8.11 1.32 "lasso" +500 100 0.5 0.2 0.34 "0.89 ( 0 )" "10.67 ( 0.37 )" "0 ( 0 )" 15.67 0.59 0.89 10.67 0 "lasso" +1000 100 0.5 0.1 0.55 "0.9 ( 0 )" "5.3 ( 0.23 )" "0 ( 0 )" 10.3 0.38 0.9 5.3 0 "lasso" +50 500 0.5 10 0.06 "0.63 ( 0.01 )" "9.49 ( 0.26 )" "4.45 ( 0.08 )" 10.04 0.84 0.63 9.49 4.45 "lasso" +100 500 0.5 5 0.2 "0.72 ( 0.01 )" "9.62 ( 0.69 )" "2.61 ( 0.12 )" 12.01 0.63 0.72 9.62 2.61 "lasso" +500 500 0.5 1 0.18 "0.89 ( 0 )" "27.04 ( 0.99 )" "0 ( 0 )" 32.04 0.79 0.89 27.04 0 "lasso" +1000 500 0.5 0.5 0.25 "0.9 ( 0 )" "17.99 ( 0.68 )" "0 ( 0 )" 22.99 0.71 0.9 17.99 0 "lasso" +50 1000 0.5 20 0.05 "0.63 ( 0.01 )" "11.31 ( 0.3 )" "4.54 ( 0.09 )" 11.77 0.87 0.63 11.31 4.54 "lasso" +100 1000 0.5 10 0.16 "0.7 ( 0.01 )" "10.35 ( 0.82 )" "3.02 ( 0.12 )" 12.33 0.68 0.7 10.35 3.02 "lasso" +500 1000 0.5 2 0.15 "0.88 ( 0 )" "34.48 ( 1.42 )" "0 ( 0 )" 39.48 0.82 0.88 34.48 0 "lasso" +1000 1000 0.5 1 0.19 "0.89 ( 0 )" "25.24 ( 1.1 )" "0 ( 0 )" 30.24 0.77 0.89 25.24 0 "lasso" +50 50 0.7 1 0.27 "0.72 ( 0.01 )" "3.87 ( 0.24 )" "2.98 ( 0.11 )" 5.89 0.42 0.72 3.87 2.98 "lasso" +100 50 0.7 0.5 0.34 "0.82 ( 0.01 )" "7.43 ( 0.37 )" "0.6 ( 0.08 )" 11.83 0.49 0.82 7.43 0.6 "lasso" +500 50 0.7 0.1 0.49 "0.91 ( 0 )" "5.84 ( 0.26 )" "0 ( 0 )" 10.84 0.42 0.91 5.84 0 "lasso" +1000 50 0.7 0.05 0.71 "0.92 ( 0 )" "3.03 ( 0.15 )" "0 ( 0 )" 8.03 0.23 0.92 3.03 0 "lasso" +50 100 0.7 2 0.21 "0.69 ( 0.01 )" "5.07 ( 0.25 )" "3.13 ( 0.1 )" 6.94 0.55 0.69 5.07 3.13 "lasso" +100 100 0.7 1 0.28 "0.82 ( 0.01 )" "9.65 ( 0.48 )" "0.97 ( 0.1 )" 13.68 0.59 0.82 9.65 0.97 "lasso" +500 100 0.7 0.2 0.36 "0.91 ( 0 )" "10.19 ( 0.37 )" "0 ( 0 )" 15.19 0.58 0.91 10.19 0 "lasso" +1000 100 0.7 0.1 0.59 "0.92 ( 0 )" "4.81 ( 0.19 )" "0 ( 0 )" 9.81 0.37 0.92 4.81 0 "lasso" +50 500 0.7 10 0.09 "0.66 ( 0.01 )" "9.13 ( 0.25 )" "4.14 ( 0.08 )" 9.99 0.81 0.66 9.13 4.14 "lasso" +100 500 0.7 5 0.21 "0.75 ( 0.01 )" "9.59 ( 0.72 )" "2.44 ( 0.11 )" 12.15 0.61 0.75 9.59 2.44 "lasso" +500 500 0.7 1 0.18 "0.9 ( 0 )" "26.2 ( 0.86 )" "0 ( 0 )" 31.2 0.79 0.9 26.2 0 "lasso" +1000 500 0.7 0.5 0.28 "0.91 ( 0 )" "15.6 ( 0.55 )" "0 ( 0 )" 20.6 0.68 0.91 15.6 0 "lasso" +50 1000 0.7 20 0.05 "0.64 ( 0.01 )" "11.44 ( 0.28 )" "4.51 ( 0.08 )" 11.93 0.87 0.64 11.44 4.51 "lasso" +100 1000 0.7 10 0.18 "0.71 ( 0.01 )" "10.03 ( 0.71 )" "2.95 ( 0.1 )" 12.08 0.65 0.71 10.03 2.95 "lasso" +500 1000 0.7 2 0.14 "0.9 ( 0 )" "34.85 ( 1.14 )" "0 ( 0 )" 39.85 0.83 0.9 34.85 0 "lasso" +1000 1000 0.7 1 0.2 "0.91 ( 0 )" "24.83 ( 0.82 )" "0 ( 0 )" 29.83 0.78 0.91 24.83 0 "lasso" +50 50 0.9 1 0.3 "0.73 ( 0.01 )" "4.4 ( 0.26 )" "2.55 ( 0.11 )" 6.85 0.44 0.73 4.4 2.55 "lasso" +100 50 0.9 0.5 0.33 "0.85 ( 0.01 )" "8.14 ( 0.35 )" "0.42 ( 0.06 )" 12.72 0.53 0.85 8.14 0.42 "lasso" +500 50 0.9 0.1 0.54 "0.92 ( 0 )" "5.15 ( 0.22 )" "0 ( 0 )" 10.15 0.38 0.92 5.15 0 "lasso" +1000 50 0.9 0.05 0.76 "0.92 ( 0 )" "2.61 ( 0.13 )" "0 ( 0 )" 7.61 0.19 0.92 2.61 0 "lasso" +50 100 0.9 2 0.23 "0.7 ( 0.01 )" "4.84 ( 0.24 )" "3.3 ( 0.09 )" 6.54 0.54 0.7 4.84 3.3 "lasso" +100 100 0.9 1 0.28 "0.81 ( 0.01 )" "9.92 ( 0.51 )" "0.87 ( 0.08 )" 14.05 0.57 0.81 9.92 0.87 "lasso" +500 100 0.9 0.2 0.37 "0.92 ( 0 )" "9.65 ( 0.35 )" "0 ( 0 )" 14.65 0.57 0.92 9.65 0 "lasso" +1000 100 0.9 0.1 0.62 "0.93 ( 0 )" "4.29 ( 0.18 )" "0 ( 0 )" 9.29 0.33 0.93 4.29 0 "lasso" +50 500 0.9 10 0.08 "0.62 ( 0.01 )" "8.99 ( 0.26 )" "4.13 ( 0.09 )" 9.86 0.8 0.62 8.99 4.13 "lasso" +100 500 0.9 5 0.23 "0.74 ( 0.01 )" "8.85 ( 0.62 )" "2.4 ( 0.12 )" 11.45 0.6 0.74 8.85 2.4 "lasso" +500 500 0.9 1 0.19 "0.91 ( 0 )" "24.91 ( 0.78 )" "0 ( 0 )" 29.91 0.78 0.91 24.91 0 "lasso" +1000 500 0.9 0.5 0.31 "0.92 ( 0 )" "14.12 ( 0.43 )" "0 ( 0 )" 19.12 0.67 0.92 14.12 0 "lasso" +50 1000 0.9 20 0.07 "0.64 ( 0.01 )" "10.81 ( 0.29 )" "4.22 ( 0.08 )" 11.59 0.84 0.64 10.81 4.22 "lasso" +100 1000 0.9 10 0.19 "0.74 ( 0.01 )" "11.15 ( 0.75 )" "2.44 ( 0.11 )" 13.71 0.65 0.74 11.15 2.44 "lasso" +500 1000 0.9 2 0.14 "0.91 ( 0 )" "34.98 ( 1.04 )" "0 ( 0 )" 39.98 0.83 0.91 34.98 0 "lasso" +1000 1000 0.9 1 0.22 "0.92 ( 0 )" "22.21 ( 0.73 )" "0 ( 0 )" 27.21 0.76 0.92 22.21 0 "lasso" +50 50 0.1 1 0.01 "0.61 ( 0.01 )" "17.05 ( 1.31 )" "3.17 ( 0.19 )" 18.88 0.8 0.61 17.05 3.17 "elnet" +100 50 0.1 0.5 0.04 "0.59 ( 0.01 )" "13.62 ( 1.31 )" "2.9 ( 0.17 )" 15.72 0.64 0.59 13.62 2.9 "elnet" +500 50 0.1 0.1 0.11 "0.64 ( 0 )" "16.89 ( 1.14 )" "1.1 ( 0.13 )" 20.79 0.68 0.64 16.89 1.1 "elnet" +1000 50 0.1 0.05 0.12 "0.66 ( 0 )" "19.43 ( 1.02 )" "0.42 ( 0.08 )" 24.01 0.71 0.66 19.43 0.42 "elnet" +50 100 0.1 2 0.01 "0.63 ( 0.01 )" "27.39 ( 2.11 )" "3.38 ( 0.17 )" 29.01 0.87 0.63 27.39 3.38 "elnet" +100 100 0.1 1 0.02 "0.59 ( 0.01 )" "26.17 ( 2.4 )" "3.34 ( 0.16 )" 27.83 0.84 0.59 26.17 3.34 "elnet" +500 100 0.1 0.2 0.09 "0.62 ( 0 )" "22.75 ( 1.87 )" "1.61 ( 0.13 )" 26.14 0.69 0.62 22.75 1.61 "elnet" +1000 100 0.1 0.1 0.1 "0.64 ( 0 )" "28.32 ( 1.88 )" "0.66 ( 0.1 )" 32.66 0.77 0.64 28.32 0.66 "elnet" +50 500 0.1 10 0 "0.61 ( 0.01 )" "69.03 ( 7.45 )" "4.13 ( 0.19 )" 69.9 0.96 0.61 69.03 4.13 "elnet" +100 500 0.1 5 0 "0.57 ( 0.01 )" "70.64 ( 9.13 )" "3.91 ( 0.17 )" 71.73 0.91 0.57 70.64 3.91 "elnet" +500 500 0.1 1 0.1 "0.61 ( 0.01 )" "20.55 ( 4.33 )" "3.15 ( 0.1 )" 22.4 0.62 0.61 20.55 3.15 "elnet" +1000 500 0.1 0.5 0.12 "0.63 ( 0 )" "26.03 ( 3.45 )" "2.38 ( 0.11 )" 28.65 0.62 0.63 26.03 2.38 "elnet" +50 1000 0.1 20 0 "0.59 ( 0.01 )" "103.61 ( 10.54 )" "4.34 ( 0.18 )" 104.27 0.98 0.59 103.61 4.34 "elnet" +100 1000 0.1 10 0 "0.56 ( 0.01 )" "103.21 ( 12.75 )" "4.15 ( 0.17 )" 104.06 0.95 0.56 103.21 4.15 "elnet" +500 1000 0.1 2 0.07 "0.61 ( 0 )" "29.41 ( 7.4 )" "3.25 ( 0.09 )" 31.16 0.62 0.61 29.41 3.25 "elnet" +1000 1000 0.1 1 0.18 "0.62 ( 0 )" "16.15 ( 2.77 )" "2.73 ( 0.09 )" 18.42 0.53 0.62 16.15 2.73 "elnet" +50 50 0.3 1 0.08 "0.68 ( 0.01 )" "14.8 ( 1.01 )" "1.73 ( 0.15 )" 18.07 0.69 0.68 14.8 1.73 "elnet" +100 50 0.3 0.5 0.15 "0.77 ( 0.01 )" "15.15 ( 1 )" "0.64 ( 0.09 )" 19.51 0.65 0.77 15.15 0.64 "elnet" +500 50 0.3 0.1 0.35 "0.85 ( 0 )" "8.95 ( 0.69 )" "0 ( 0 )" 13.95 0.46 0.85 8.95 0 "elnet" +1000 50 0.3 0.05 0.33 "0.86 ( 0 )" "9.66 ( 0.93 )" "0 ( 0 )" 14.66 0.44 0.86 9.66 0 "elnet" +50 100 0.3 2 0.05 "0.67 ( 0.01 )" "23.92 ( 2 )" "2.13 ( 0.15 )" 26.79 0.77 0.67 23.92 2.13 "elnet" +100 100 0.3 1 0.14 "0.74 ( 0.01 )" "17.75 ( 1.51 )" "1.13 ( 0.11 )" 21.62 0.67 0.74 17.75 1.13 "elnet" +500 100 0.3 0.2 0.32 "0.86 ( 0 )" "11.53 ( 1.02 )" "0.01 ( 0.01 )" 16.52 0.51 0.86 11.53 0.01 "elnet" +1000 100 0.3 0.1 0.33 "0.86 ( 0 )" "11.15 ( 1.03 )" "0 ( 0 )" 16.15 0.49 0.86 11.15 0 "elnet" +50 500 0.3 10 0.01 "0.6 ( 0.01 )" "81.07 ( 6.91 )" "2.92 ( 0.14 )" 83.15 0.93 0.6 81.07 2.92 "elnet" +100 500 0.3 5 0.06 "0.66 ( 0.01 )" "38.14 ( 5.11 )" "2.16 ( 0.13 )" 40.98 0.78 0.66 38.14 2.16 "elnet" +500 500 0.3 1 0.22 "0.84 ( 0 )" "20.87 ( 1.93 )" "0.02 ( 0.01 )" 25.85 0.63 0.84 20.87 0.02 "elnet" +1000 500 0.3 0.5 0.29 "0.86 ( 0 )" "15.35 ( 1.6 )" "0 ( 0 )" 20.35 0.53 0.86 15.35 0 "elnet" +50 1000 0.3 20 0.01 "0.63 ( 0.01 )" "104.78 ( 9.53 )" "3.37 ( 0.14 )" 106.41 0.96 0.63 104.78 3.37 "elnet" +100 1000 0.3 10 0.04 "0.64 ( 0.01 )" "55.95 ( 7.57 )" "2.5 ( 0.13 )" 58.45 0.85 0.64 55.95 2.5 "elnet" +500 1000 0.3 2 0.23 "0.85 ( 0 )" "20.69 ( 1.82 )" "0.05 ( 0.02 )" 25.64 0.64 0.85 20.69 0.05 "elnet" +1000 1000 0.3 1 0.29 "0.86 ( 0 )" "15.19 ( 1.67 )" "0 ( 0 )" 20.19 0.51 0.86 15.19 0 "elnet" +50 50 0.5 1 0.11 "0.7 ( 0.01 )" "13.99 ( 0.96 )" "1.59 ( 0.12 )" 17.4 0.68 0.7 13.99 1.59 "elnet" +100 50 0.5 0.5 0.21 "0.8 ( 0.01 )" "11.28 ( 0.76 )" "0.81 ( 0.1 )" 15.47 0.57 0.8 11.28 0.81 "elnet" +500 50 0.5 0.1 0.35 "0.88 ( 0 )" "9.06 ( 0.77 )" "0 ( 0 )" 14.06 0.46 0.88 9.06 0 "elnet" +1000 50 0.5 0.05 0.39 "0.9 ( 0 )" "8.03 ( 0.81 )" "0 ( 0 )" 13.03 0.4 0.9 8.03 0 "elnet" +50 100 0.5 2 0.06 "0.68 ( 0.01 )" "25.61 ( 2.1 )" "1.79 ( 0.12 )" 28.82 0.77 0.68 25.61 1.79 "elnet" +100 100 0.5 1 0.18 "0.79 ( 0.01 )" "13.99 ( 1.21 )" "1.12 ( 0.1 )" 17.87 0.6 0.79 13.99 1.12 "elnet" +500 100 0.5 0.2 0.32 "0.89 ( 0 )" "11.65 ( 1.03 )" "0 ( 0 )" 16.65 0.52 0.89 11.65 0 "elnet" +1000 100 0.5 0.1 0.38 "0.89 ( 0 )" "9.51 ( 0.97 )" "0 ( 0 )" 14.51 0.43 0.89 9.51 0 "elnet" +50 500 0.5 10 0.02 "0.61 ( 0.01 )" "72.53 ( 6.75 )" "2.72 ( 0.13 )" 74.81 0.92 0.61 72.53 2.72 "elnet" +100 500 0.5 5 0.08 "0.7 ( 0.01 )" "32.65 ( 4.21 )" "1.9 ( 0.11 )" 35.75 0.76 0.7 32.65 1.9 "elnet" +500 500 0.5 1 0.23 "0.88 ( 0 )" "20.07 ( 1.75 )" "0 ( 0 )" 25.07 0.63 0.88 20.07 0 "elnet" +1000 500 0.5 0.5 0.3 "0.89 ( 0 )" "14.5 ( 1.43 )" "0 ( 0 )" 19.5 0.53 0.89 14.5 0 "elnet" +50 1000 0.5 20 0.01 "0.62 ( 0.01 )" "85.83 ( 8.57 )" "3.31 ( 0.12 )" 87.52 0.94 0.62 85.83 3.31 "elnet" +100 1000 0.5 10 0.05 "0.67 ( 0.01 )" "51.72 ( 6.91 )" "2.12 ( 0.12 )" 54.6 0.83 0.67 51.72 2.12 "elnet" +500 1000 0.5 2 0.24 "0.88 ( 0 )" "19.39 ( 1.85 )" "0.02 ( 0.01 )" 24.37 0.59 0.88 19.39 0.02 "elnet" +1000 1000 0.5 1 0.27 "0.89 ( 0 )" "17.02 ( 1.92 )" "0 ( 0 )" 22.02 0.54 0.89 17.02 0 "elnet" +50 50 0.7 1 0.13 "0.73 ( 0.01 )" "12.65 ( 0.97 )" "1.61 ( 0.12 )" 16.04 0.63 0.73 12.65 1.61 "elnet" +100 50 0.7 0.5 0.22 "0.81 ( 0.01 )" "11.53 ( 0.67 )" "0.54 ( 0.09 )" 15.99 0.58 0.81 11.53 0.54 "elnet" +500 50 0.7 0.1 0.34 "0.91 ( 0 )" "9.34 ( 0.72 )" "0 ( 0 )" 14.34 0.48 0.91 9.34 0 "elnet" +1000 50 0.7 0.05 0.36 "0.91 ( 0 )" "8.58 ( 0.78 )" "0 ( 0 )" 13.58 0.42 0.91 8.58 0 "elnet" +50 100 0.7 2 0.07 "0.69 ( 0.01 )" "24.95 ( 1.99 )" "1.47 ( 0.1 )" 28.48 0.76 0.69 24.95 1.47 "elnet" +100 100 0.7 1 0.17 "0.79 ( 0.01 )" "15.63 ( 1.26 )" "0.96 ( 0.11 )" 19.67 0.63 0.79 15.63 0.96 "elnet" +500 100 0.7 0.2 0.34 "0.9 ( 0 )" "10.78 ( 0.81 )" "0.01 ( 0.01 )" 15.77 0.5 0.9 10.78 0.01 "elnet" +1000 100 0.7 0.1 0.38 "0.91 ( 0 )" "9.42 ( 0.9 )" "0 ( 0 )" 14.42 0.44 0.91 9.42 0 "elnet" +50 500 0.7 10 0.02 "0.62 ( 0.01 )" "66.01 ( 6.05 )" "2.75 ( 0.12 )" 68.26 0.92 0.62 66.01 2.75 "elnet" +100 500 0.7 5 0.1 "0.74 ( 0.01 )" "25.15 ( 2.8 )" "1.84 ( 0.12 )" 28.31 0.71 0.74 25.15 1.84 "elnet" +500 500 0.7 1 0.25 "0.9 ( 0 )" "17.68 ( 1.71 )" "0 ( 0 )" 22.68 0.59 0.9 17.68 0 "elnet" +1000 500 0.7 0.5 0.31 "0.91 ( 0 )" "13.6 ( 1.43 )" "0 ( 0 )" 18.6 0.51 0.91 13.6 0 "elnet" +50 1000 0.7 20 0.01 "0.62 ( 0.01 )" "86.38 ( 8.91 )" "3.09 ( 0.13 )" 88.29 0.93 0.62 86.38 3.09 "elnet" +100 1000 0.7 10 0.06 "0.69 ( 0.01 )" "44.56 ( 6.27 )" "2.12 ( 0.11 )" 47.44 0.82 0.69 44.56 2.12 "elnet" +500 1000 0.7 2 0.23 "0.9 ( 0 )" "20.2 ( 1.89 )" "0.03 ( 0.02 )" 25.17 0.62 0.9 20.2 0.03 "elnet" +1000 1000 0.7 1 0.27 "0.91 ( 0 )" "16.62 ( 1.81 )" "0 ( 0 )" 21.62 0.54 0.91 16.62 0 "elnet" +50 50 0.9 1 0.14 "0.74 ( 0.01 )" "12.38 ( 0.9 )" "1.46 ( 0.1 )" 15.92 0.63 0.74 12.38 1.46 "elnet" +100 50 0.9 0.5 0.21 "0.84 ( 0.01 )" "12.36 ( 0.84 )" "0.46 ( 0.08 )" 16.9 0.58 0.84 12.36 0.46 "elnet" +500 50 0.9 0.1 0.39 "0.92 ( 0 )" "7.89 ( 0.68 )" "0 ( 0 )" 12.89 0.42 0.92 7.89 0 "elnet" +1000 50 0.9 0.05 0.41 "0.92 ( 0 )" "7.38 ( 0.78 )" "0 ( 0 )" 12.38 0.38 0.92 7.38 0 "elnet" +50 100 0.9 2 0.09 "0.7 ( 0.01 )" "19.37 ( 1.75 )" "2.08 ( 0.13 )" 22.29 0.75 0.7 19.37 2.08 "elnet" +100 100 0.9 1 0.2 "0.81 ( 0.01 )" "14.28 ( 1.07 )" "0.93 ( 0.09 )" 18.35 0.61 0.81 14.28 0.93 "elnet" +500 100 0.9 0.2 0.36 "0.92 ( 0 )" "10.15 ( 0.82 )" "0 ( 0 )" 15.15 0.48 0.92 10.15 0 "elnet" +1000 100 0.9 0.1 0.38 "0.93 ( 0 )" "9.4 ( 1.07 )" "0 ( 0 )" 14.4 0.42 0.93 9.4 0 "elnet" +50 500 0.9 10 0.02 "0.62 ( 0.01 )" "62.39 ( 5.92 )" "2.69 ( 0.14 )" 64.7 0.9 0.62 62.39 2.69 "elnet" +100 500 0.9 5 0.12 "0.74 ( 0.01 )" "21.21 ( 2.91 )" "2.02 ( 0.12 )" 24.19 0.69 0.74 21.21 2.02 "elnet" +500 500 0.9 1 0.28 "0.91 ( 0 )" "15.52 ( 1.4 )" "0 ( 0 )" 20.52 0.57 0.91 15.52 0 "elnet" +1000 500 0.9 0.5 0.29 "0.92 ( 0 )" "14.84 ( 1.41 )" "0 ( 0 )" 19.84 0.56 0.92 14.84 0 "elnet" +50 1000 0.9 20 0.02 "0.63 ( 0.01 )" "78.65 ( 8.46 )" "3.08 ( 0.12 )" 80.57 0.92 0.63 78.65 3.08 "elnet" +100 1000 0.9 10 0.06 "0.74 ( 0.01 )" "43.94 ( 6.95 )" "2.01 ( 0.11 )" 46.93 0.79 0.74 43.94 2.01 "elnet" +500 1000 0.9 2 0.25 "0.91 ( 0 )" "18.95 ( 1.93 )" "0 ( 0 )" 23.95 0.6 0.91 18.95 0 "elnet" +1000 1000 0.9 1 0.29 "0.92 ( 0 )" "15.24 ( 1.68 )" "0 ( 0 )" 20.24 0.52 0.92 15.24 0 "elnet" +50 50 0.1 1 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 50 0.1 0.5 0.01 "1 ( 0 )" "2.4 ( 0.16 )" "5.3 ( 0.11 )" 3 0.78 1 2.4 5.3 "rf" +500 50 0.1 0.1 0.12 "1 ( 0 )" "2.96 ( 0.21 )" "4.29 ( 0.15 )" 4.63 0.62 1 2.96 4.29 "rf" +1000 50 0.1 0.05 0.33 "1 ( 0 )" "3.28 ( 0.21 )" "3.04 ( 0.12 )" 6.24 0.49 1 3.28 3.04 "rf" +50 100 0.1 2 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 100 0.1 1 0 "1 ( 0 )" "5.09 ( 0.21 )" "5.6 ( 0.09 )" 5.48 0.93 1 5.09 5.6 "rf" +500 100 0.1 0.2 0.1 "1 ( 0 )" "5.39 ( 0.29 )" "4.05 ( 0.16 )" 7.34 0.72 1 5.39 4.05 "rf" +1000 100 0.1 0.1 0.25 "1 ( 0 )" "5.43 ( 0.26 )" "2.89 ( 0.14 )" 8.54 0.62 1 5.43 2.89 "rf" +50 500 0.1 10 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 500 0.1 5 0 "1 ( 0 )" "24.14 ( 0.56 )" "5.35 ( 0.11 )" 24.79 0.97 1 24.14 5.35 "rf" +500 500 0.1 1 0.03 "1 ( 0 )" "24.48 ( 0.54 )" "4.25 ( 0.16 )" 26.23 0.93 1 24.48 4.25 "rf" +1000 500 0.1 0.5 0.07 "1 ( 0 )" "24.08 ( 0.54 )" "3.1 ( 0.16 )" 26.98 0.89 1 24.08 3.1 "rf" +50 1000 0.1 20 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 1000 0.1 10 0 "1 ( 0 )" "48.22 ( 0.62 )" "5.53 ( 0.09 )" 48.69 0.99 1 48.22 5.53 "rf" +500 1000 0.1 2 0.01 "1 ( 0 )" "50.18 ( 0.78 )" "4.63 ( 0.12 )" 51.55 0.97 1 50.18 4.63 "rf" +1000 1000 0.1 1 0.04 "1 ( 0 )" "49.43 ( 0.66 )" "3.23 ( 0.14 )" 52.2 0.95 1 49.43 3.23 "rf" +50 50 0.3 1 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 50 0.3 0.5 0.02 "1 ( 0 )" "2.13 ( 0.12 )" "5.14 ( 0.08 )" 2.96 0.71 1 2.13 5.14 "rf" +500 50 0.3 0.1 0.46 "1 ( 0 )" "1.43 ( 0.11 )" "2.59 ( 0.11 )" 4.84 0.27 1 1.43 2.59 "rf" +1000 50 0.3 0.05 0.6 "1 ( 0 )" "1.44 ( 0.13 )" "1.35 ( 0.08 )" 6.09 0.21 1 1.44 1.35 "rf" +50 100 0.3 2 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 100 0.3 1 0.01 "1 ( 0 )" "4.84 ( 0.18 )" "5.1 ( 0.08 )" 5.73 0.84 1 4.84 5.1 "rf" +500 100 0.3 0.2 0.28 "1 ( 0 )" "3.77 ( 0.17 )" "2.76 ( 0.1 )" 7.01 0.52 1 3.77 2.76 "rf" +1000 100 0.3 0.1 0.44 "1 ( 0 )" "3.43 ( 0.18 )" "1.5 ( 0.09 )" 7.93 0.41 1 3.43 1.5 "rf" +50 500 0.3 10 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 500 0.3 5 0 "1 ( 0 )" "24.49 ( 0.47 )" "5.11 ( 0.08 )" 25.38 0.96 1 24.49 5.11 "rf" +500 500 0.3 1 0.06 "1 ( 0 )" "23.05 ( 0.49 )" "3.15 ( 0.09 )" 25.9 0.89 1 23.05 3.15 "rf" +1000 500 0.3 0.5 0.11 "1 ( 0 )" "22.18 ( 0.49 )" "1.91 ( 0.09 )" 26.27 0.84 1 22.18 1.91 "rf" +50 1000 0.3 20 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 1000 0.3 10 0 "1 ( 0 )" "46.96 ( 0.66 )" "5.18 ( 0.08 )" 47.78 0.98 1 46.96 5.18 "rf" +500 1000 0.3 2 0.02 "1 ( 0 )" "48.39 ( 0.72 )" "3.64 ( 0.1 )" 50.75 0.95 1 48.39 3.64 "rf" +1000 1000 0.3 1 0.06 "1 ( 0 )" "47.08 ( 0.59 )" "2.05 ( 0.09 )" 51.03 0.92 1 47.08 2.05 "rf" +50 50 0.5 1 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 50 0.5 0.5 0.04 "1 ( 0 )" "2.2 ( 0.13 )" "5.06 ( 0.08 )" 3.12 0.67 1 2.2 5.06 "rf" +500 50 0.5 0.1 0.49 "1 ( 0 )" "1.41 ( 0.12 )" "2.45 ( 0.08 )" 4.96 0.25 1 1.41 2.45 "rf" +1000 50 0.5 0.05 0.61 "1 ( 0 )" "1.24 ( 0.11 )" "1.46 ( 0.09 )" 5.78 0.19 1 1.24 1.46 "rf" +50 100 0.5 2 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 100 0.5 1 0.02 "1 ( 0 )" "4.57 ( 0.17 )" "4.99 ( 0.08 )" 5.58 0.82 1 4.57 4.99 "rf" +500 100 0.5 0.2 0.35 "1 ( 0 )" "3.49 ( 0.17 )" "2.37 ( 0.09 )" 7.12 0.46 1 3.49 2.37 "rf" +1000 100 0.5 0.1 0.51 "1 ( 0 )" "2.74 ( 0.15 )" "1.23 ( 0.08 )" 7.51 0.34 1 2.74 1.23 "rf" +50 500 0.5 10 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 500 0.5 5 0.01 "1 ( 0 )" "23.18 ( 0.51 )" "5.07 ( 0.08 )" 24.11 0.96 1 23.18 5.07 "rf" +500 500 0.5 1 0.08 "1 ( 0 )" "23.59 ( 0.47 )" "2.72 ( 0.09 )" 26.87 0.88 1 23.59 2.72 "rf" +1000 500 0.5 0.5 0.13 "1 ( 0 )" "22.56 ( 0.46 )" "1.56 ( 0.1 )" 27 0.83 1 22.56 1.56 "rf" +50 1000 0.5 20 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 1000 0.5 10 0 "1 ( 0 )" "47.59 ( 0.62 )" "5.2 ( 0.08 )" 48.39 0.98 1 47.59 5.2 "rf" +500 1000 0.5 2 0.03 "1 ( 0 )" "47.63 ( 0.72 )" "3.12 ( 0.11 )" 50.51 0.94 1 47.63 3.12 "rf" +1000 1000 0.5 1 0.06 "1 ( 0 )" "48.12 ( 0.7 )" "1.83 ( 0.08 )" 52.29 0.92 1 48.12 1.83 "rf" +50 50 0.7 1 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 50 0.7 0.5 0.05 "1 ( 0 )" "2.01 ( 0.13 )" "5 ( 0.08 )" 2.99 0.65 1 2.01 5 "rf" +500 50 0.7 0.1 0.53 "1 ( 0 )" "1.29 ( 0.11 )" "2.25 ( 0.08 )" 5.04 0.23 1 1.29 2.25 "rf" +1000 50 0.7 0.05 0.63 "1 ( 0 )" "1.29 ( 0.11 )" "1.3 ( 0.08 )" 5.99 0.19 1 1.29 1.3 "rf" +50 100 0.7 2 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 100 0.7 1 0.03 "1 ( 0 )" "4.35 ( 0.18 )" "4.98 ( 0.07 )" 5.37 0.8 1 4.35 4.98 "rf" +500 100 0.7 0.2 0.34 "1 ( 0 )" "3.46 ( 0.18 )" "2.53 ( 0.09 )" 6.93 0.47 1 3.46 2.53 "rf" +1000 100 0.7 0.1 0.48 "1 ( 0 )" "3.04 ( 0.15 )" "1.27 ( 0.08 )" 7.77 0.37 1 3.04 1.27 "rf" +50 500 0.7 10 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 500 0.7 5 0.01 "1 ( 0 )" "23.78 ( 0.44 )" "4.93 ( 0.08 )" 24.85 0.96 1 23.78 4.93 "rf" +500 500 0.7 1 0.08 "1 ( 0 )" "23.14 ( 0.52 )" "2.73 ( 0.09 )" 26.41 0.87 1 23.14 2.73 "rf" +1000 500 0.7 0.5 0.13 "1 ( 0 )" "21.58 ( 0.49 )" "1.57 ( 0.08 )" 26.01 0.82 1 21.58 1.57 "rf" +50 1000 0.7 20 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 1000 0.7 10 0 "1 ( 0 )" "47.84 ( 0.72 )" "5 ( 0.09 )" 48.84 0.98 1 47.84 5 "rf" +500 1000 0.7 2 0.04 "1 ( 0 )" "47.31 ( 0.68 )" "2.9 ( 0.1 )" 50.41 0.94 1 47.31 2.9 "rf" +1000 1000 0.7 1 0.06 "1 ( 0 )" "46.57 ( 0.73 )" "1.71 ( 0.08 )" 50.86 0.91 1 46.57 1.71 "rf" +50 50 0.9 1 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 50 0.9 0.5 0.05 "1 ( 0 )" "2.2 ( 0.13 )" "5 ( 0.08 )" 3.19 0.66 1 2.2 5 "rf" +500 50 0.9 0.1 0.53 "1 ( 0 )" "1.28 ( 0.1 )" "2.32 ( 0.08 )" 4.96 0.23 1 1.28 2.32 "rf" +1000 50 0.9 0.05 0.67 "1 ( 0 )" "0.93 ( 0.09 )" "1.31 ( 0.09 )" 5.62 0.15 1 0.93 1.31 "rf" +50 100 0.9 2 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 100 0.9 1 0.04 "1 ( 0 )" "4.24 ( 0.16 )" "4.83 ( 0.09 )" 5.4 0.79 1 4.24 4.83 "rf" +500 100 0.9 0.2 0.36 "1 ( 0 )" "3.54 ( 0.19 )" "2.29 ( 0.09 )" 7.25 0.46 1 3.54 2.29 "rf" +1000 100 0.9 0.1 0.53 "1 ( 0 )" "2.53 ( 0.14 )" "1.31 ( 0.08 )" 7.22 0.33 1 2.53 1.31 "rf" +50 500 0.9 10 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 500 0.9 5 0.01 "1 ( 0 )" "23.63 ( 0.45 )" "5.04 ( 0.08 )" 24.59 0.96 1 23.63 5.04 "rf" +500 500 0.9 1 0.07 "1 ( 0 )" "24.29 ( 0.42 )" "2.65 ( 0.09 )" 27.64 0.88 1 24.29 2.65 "rf" +1000 500 0.9 0.5 0.13 "1 ( 0 )" "21.42 ( 0.42 )" "1.49 ( 0.08 )" 25.93 0.82 1 21.42 1.49 "rf" +50 1000 0.9 20 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 1000 0.9 10 0 "1 ( 0 )" "47.48 ( 0.72 )" "4.95 ( 0.08 )" 48.53 0.98 1 47.48 4.95 "rf" +500 1000 0.9 2 0.04 "1 ( 0 )" "48.09 ( 0.7 )" "2.94 ( 0.09 )" 51.15 0.94 1 48.09 2.94 "rf" +1000 1000 0.9 1 0.07 "1 ( 0 )" "45.6 ( 0.72 )" "1.63 ( 0.08 )" 49.97 0.91 1 45.6 1.63 "rf" +50 50 0.1 1 0.02 "0.58 ( 0.01 )" "1.68 ( 0.53 )" "5.42 ( 0.1 )" 2.26 0.58 0.58 1.68 5.42 "compLasso" +100 50 0.1 0.5 0.06 "0.51 ( 0 )" "0.08 ( 0.04 )" "5.65 ( 0.08 )" 0.43 0.18 0.51 0.08 5.65 "compLasso" +500 50 0.1 0.1 NA "0.5 ( 0 )" "0 ( 0 )" "6 ( 0 )" 0 NA 0.5 0 6 "compLasso" +1000 50 0.1 0.05 NA "0.5 ( 0 )" "0 ( 0 )" "6 ( 0 )" 0 NA 0.5 0 6 "compLasso" +50 100 0.1 2 0.04 "0.61 ( 0.01 )" "3.43 ( 0.63 )" "5.23 ( 0.1 )" 4.2 0.71 0.61 3.43 5.23 "compLasso" +100 100 0.1 1 0.03 "0.51 ( 0 )" "0.31 ( 0.1 )" "5.8 ( 0.05 )" 0.51 0.53 0.51 0.31 5.8 "compLasso" +500 100 0.1 0.2 NA "0.5 ( 0 )" "0 ( 0 )" "6 ( 0 )" 0 NA 0.5 0 6 "compLasso" +1000 100 0.1 0.1 NA "0.5 ( 0 )" "0 ( 0 )" "6 ( 0 )" 0 NA 0.5 0 6 "compLasso" +50 500 0.1 10 0 "0.73 ( 0.01 )" "29.62 ( 7.94 )" "5.17 ( 0.13 )" 30.45 0.9 0.73 29.62 5.17 "compLasso" +100 500 0.1 5 0.04 "0.53 ( 0.01 )" "0.53 ( 0.1 )" "5.63 ( 0.08 )" 0.9 0.57 0.53 0.53 5.63 "compLasso" +500 500 0.1 1 NA "0.5 ( 0 )" "0 ( 0 )" "6 ( 0 )" 0 NA 0.5 0 6 "compLasso" +1000 500 0.1 0.5 NA "0.5 ( 0 )" "0 ( 0 )" "6 ( 0 )" 0 NA 0.5 0 6 "compLasso" +50 1000 0.1 20 0.01 "0.83 ( 0.01 )" "17.45 ( 2.89 )" "5.37 ( 0.1 )" 18.08 0.94 0.83 17.45 5.37 "compLasso" +100 1000 0.1 10 0.03 "0.56 ( 0.01 )" "1.27 ( 0.25 )" "5.59 ( 0.08 )" 1.68 0.73 0.56 1.27 5.59 "compLasso" +500 1000 0.1 2 0 "0.5 ( 0 )" "0 ( 0 )" "5.98 ( 0.02 )" 0.02 0 0.5 0 5.98 "compLasso" +1000 1000 0.1 1 NA "0.5 ( 0 )" "0 ( 0 )" "6 ( 0 )" 0 NA 0.5 0 6 "compLasso" +50 50 0.3 1 0.14 "0.86 ( 0.01 )" "9.81 ( 1.05 )" "1.78 ( 0.11 )" 14.03 0.6 0.86 9.81 1.78 "compLasso" +100 50 0.3 0.5 0.37 "0.83 ( 0.01 )" "3.64 ( 0.75 )" "1.7 ( 0.09 )" 7.94 0.27 0.83 3.64 1.7 "compLasso" +500 50 0.3 0.1 0.81 "0.81 ( 0 )" "0.02 ( 0.01 )" "1.75 ( 0.09 )" 4.27 0 0.81 0.02 1.75 "compLasso" +1000 50 0.3 0.05 0.81 "0.8 ( 0 )" "0.06 ( 0.05 )" "1.7 ( 0.09 )" 4.36 0.01 0.8 0.06 1.7 "compLasso" +50 100 0.3 2 0.1 "0.9 ( 0 )" "16.32 ( 1.58 )" "2.2 ( 0.11 )" 20.12 0.74 0.9 16.32 2.2 "compLasso" +100 100 0.3 1 0.31 "0.84 ( 0 )" "5.71 ( 1.02 )" "1.72 ( 0.1 )" 9.99 0.41 0.84 5.71 1.72 "compLasso" +500 100 0.3 0.2 0.8 "0.81 ( 0 )" "0.12 ( 0.06 )" "1.7 ( 0.09 )" 4.42 0.01 0.81 0.12 1.7 "compLasso" +1000 100 0.3 0.1 0.74 "0.8 ( 0 )" "0.49 ( 0.26 )" "2.05 ( 0.08 )" 4.44 0.04 0.8 0.49 2.05 "compLasso" +50 500 0.3 10 0.02 "1 ( 0 )" "105.94 ( 7.57 )" "2.04 ( 0.11 )" 109.9 0.95 1 105.94 2.04 "compLasso" +100 500 0.3 5 0.12 "0.88 ( 0.01 )" "23.82 ( 3.36 )" "1.9 ( 0.09 )" 27.92 0.75 0.88 23.82 1.9 "compLasso" +500 500 0.3 1 0.79 "0.8 ( 0 )" "0.24 ( 0.08 )" "1.86 ( 0.09 )" 4.38 0.03 0.8 0.24 1.86 "compLasso" +1000 500 0.3 0.5 0.73 "0.8 ( 0 )" "0.63 ( 0.15 )" "1.85 ( 0.09 )" 4.78 0.08 0.8 0.63 1.85 "compLasso" +50 1000 0.3 20 0.02 "1 ( 0 )" "154.21 ( 5.09 )" "2.09 ( 0.1 )" 158.12 0.97 1 154.21 2.09 "compLasso" +100 1000 0.3 10 0.07 "0.91 ( 0 )" "36.7 ( 6.19 )" "2.26 ( 0.1 )" 40.44 0.84 0.91 36.7 2.26 "compLasso" +500 1000 0.3 2 0.74 "0.81 ( 0 )" "0.57 ( 0.15 )" "1.66 ( 0.09 )" 4.91 0.07 0.81 0.57 1.66 "compLasso" +1000 1000 0.3 1 0.73 "0.8 ( 0 )" "0.7 ( 0.15 )" "1.84 ( 0.09 )" 4.86 0.09 0.8 0.7 1.84 "compLasso" +50 50 0.5 1 0.2 "0.92 ( 0 )" "9.67 ( 0.64 )" "1.26 ( 0.09 )" 14.41 0.63 0.92 9.67 1.26 "compLasso" +100 50 0.5 0.5 0.38 "0.89 ( 0 )" "5.16 ( 0.81 )" "0.81 ( 0.08 )" 10.35 0.36 0.89 5.16 0.81 "compLasso" +500 50 0.5 0.1 0.95 "0.87 ( 0 )" "0.15 ( 0.1 )" "0.15 ( 0.04 )" 6 0.01 0.87 0.15 0.15 "compLasso" +1000 50 0.5 0.05 0.96 "0.87 ( 0 )" "0.13 ( 0.07 )" "0.09 ( 0.03 )" 6.04 0.01 0.87 0.13 0.09 "compLasso" +50 100 0.5 2 0.09 "0.96 ( 0.01 )" "25 ( 2.25 )" "1.32 ( 0.09 )" 29.68 0.77 0.96 25 1.32 "compLasso" +100 100 0.5 1 0.31 "0.9 ( 0 )" "7.65 ( 0.74 )" "1.01 ( 0.08 )" 12.64 0.51 0.9 7.65 1.01 "compLasso" +500 100 0.5 0.2 0.93 "0.87 ( 0 )" "0.14 ( 0.07 )" "0.28 ( 0.05 )" 5.86 0.02 0.87 0.14 0.28 "compLasso" +1000 100 0.5 0.1 0.92 "0.87 ( 0 )" "0.34 ( 0.17 )" "0.12 ( 0.03 )" 6.22 0.03 0.87 0.34 0.12 "compLasso" +50 500 0.5 10 0.02 "1 ( 0 )" "157.13 ( 6.78 )" "1.35 ( 0.1 )" 161.78 0.97 1 157.13 1.35 "compLasso" +100 500 0.5 5 0.1 "0.95 ( 0 )" "33.42 ( 3.83 )" "1.3 ( 0.09 )" 38.12 0.82 0.95 33.42 1.3 "compLasso" +500 500 0.5 1 0.86 "0.87 ( 0 )" "0.67 ( 0.16 )" "0.3 ( 0.05 )" 6.37 0.07 0.87 0.67 0.3 "compLasso" +1000 500 0.5 0.5 0.98 "0.87 ( 0 )" "0.03 ( 0.02 )" "0.09 ( 0.03 )" 5.94 0 0.87 0.03 0.09 "compLasso" +50 1000 0.5 20 0.01 "1 ( 0 )" "246.84 ( 6.66 )" "1.53 ( 0.09 )" 251.31 0.98 1 246.84 1.53 "compLasso" +100 1000 0.5 10 0.04 "0.98 ( 0 )" "96.92 ( 8.19 )" "1.31 ( 0.09 )" 101.61 0.92 0.98 96.92 1.31 "compLasso" +500 1000 0.5 2 0.87 "0.87 ( 0 )" "0.53 ( 0.2 )" "0.35 ( 0.06 )" 6.18 0.04 0.87 0.53 0.35 "compLasso" +1000 1000 0.5 1 0.93 "0.87 ( 0 )" "0.35 ( 0.12 )" "0.11 ( 0.03 )" 6.24 0.03 0.87 0.35 0.11 "compLasso" +50 50 0.7 1 0.15 "0.95 ( 0 )" "12.8 ( 0.96 )" "1 ( 0.09 )" 17.8 0.66 0.95 12.8 1 "compLasso" +100 50 0.7 0.5 0.41 "0.91 ( 0 )" "5.79 ( 0.7 )" "0.31 ( 0.05 )" 11.48 0.4 0.91 5.79 0.31 "compLasso" +500 50 0.7 0.1 0.96 "0.9 ( 0 )" "0.17 ( 0.08 )" "0.04 ( 0.02 )" 6.13 0.02 0.9 0.17 0.04 "compLasso" +1000 50 0.7 0.05 0.98 "0.89 ( 0 )" "0.1 ( 0.06 )" "0 ( 0 )" 6.1 0.01 0.89 0.1 0 "compLasso" +50 100 0.7 2 0.06 "0.99 ( 0 )" "35.59 ( 2.41 )" "0.94 ( 0.09 )" 40.65 0.83 0.99 35.59 0.94 "compLasso" +100 100 0.7 1 0.26 "0.92 ( 0 )" "11.64 ( 1.38 )" "0.53 ( 0.06 )" 17.11 0.57 0.92 11.64 0.53 "compLasso" +500 100 0.7 0.2 0.97 "0.9 ( 0 )" "0.15 ( 0.07 )" "0.05 ( 0.02 )" 6.1 0.02 0.9 0.15 0.05 "compLasso" +1000 100 0.7 0.1 0.93 "0.9 ( 0 )" "0.41 ( 0.14 )" "0.03 ( 0.02 )" 6.38 0.04 0.9 0.41 0.03 "compLasso" +50 500 0.7 10 0.02 "1 ( 0 )" "171.29 ( 6.32 )" "1.12 ( 0.09 )" 176.17 0.97 1 171.29 1.12 "compLasso" +100 500 0.7 5 0.06 "0.98 ( 0 )" "68.31 ( 6.57 )" "0.98 ( 0.09 )" 73.33 0.87 0.98 68.31 0.98 "compLasso" +500 500 0.7 1 0.93 "0.89 ( 0 )" "0.37 ( 0.12 )" "0.06 ( 0.02 )" 6.31 0.04 0.89 0.37 0.06 "compLasso" +1000 500 0.7 0.5 0.98 "0.9 ( 0 )" "0.13 ( 0.07 )" "0.01 ( 0.01 )" 6.12 0.01 0.9 0.13 0.01 "compLasso" +50 1000 0.7 20 0.01 "1 ( 0 )" "275.88 ( 8.89 )" "1.39 ( 0.09 )" 280.49 0.98 1 275.88 1.39 "compLasso" +100 1000 0.7 10 0.03 "1 ( 0 )" "155.38 ( 7.45 )" "0.93 ( 0.08 )" 160.45 0.95 1 155.38 0.93 "compLasso" +500 1000 0.7 2 0.84 "0.9 ( 0 )" "1.07 ( 0.26 )" "0.1 ( 0.03 )" 6.97 0.09 0.9 1.07 0.1 "compLasso" +1000 1000 0.7 1 0.95 "0.9 ( 0 )" "0.3 ( 0.11 )" "0.02 ( 0.01 )" 6.28 0.03 0.9 0.3 0.02 "compLasso" +50 50 0.9 1 0.13 "0.97 ( 0 )" "15.75 ( 1.04 )" "0.71 ( 0.07 )" 21.04 0.7 0.97 15.75 0.71 "compLasso" +100 50 0.9 0.5 0.44 "0.93 ( 0 )" "5.06 ( 0.38 )" "0.34 ( 0.05 )" 10.72 0.42 0.93 5.06 0.34 "compLasso" +500 50 0.9 0.1 0.98 "0.91 ( 0 )" "0.07 ( 0.04 )" "0.03 ( 0.02 )" 6.04 0.01 0.91 0.07 0.03 "compLasso" +1000 50 0.9 0.05 1 "0.91 ( 0 )" "0 ( 0 )" "0 ( 0 )" 6 0 0.91 0 0 "compLasso" +50 100 0.9 2 0.06 "0.99 ( 0 )" "37.69 ( 2.33 )" "0.96 ( 0.09 )" 42.73 0.84 0.99 37.69 0.96 "compLasso" +100 100 0.9 1 0.26 "0.94 ( 0 )" "11.53 ( 1.15 )" "0.52 ( 0.06 )" 17.01 0.61 0.94 11.53 0.52 "compLasso" +500 100 0.9 0.2 0.96 "0.91 ( 0 )" "0.18 ( 0.06 )" "0.03 ( 0.02 )" 6.15 0.02 0.91 0.18 0.03 "compLasso" +1000 100 0.9 0.1 0.97 "0.91 ( 0 )" "0.17 ( 0.09 )" "0 ( 0 )" 6.17 0.02 0.91 0.17 0 "compLasso" +50 500 0.9 10 0.01 "1 ( 0 )" "189.13 ( 6.24 )" "0.91 ( 0.1 )" 194.22 0.97 1 189.13 0.91 "compLasso" +100 500 0.9 5 0.05 "0.99 ( 0 )" "88.92 ( 5.92 )" "0.68 ( 0.07 )" 94.24 0.92 0.99 88.92 0.68 "compLasso" +500 500 0.9 1 0.85 "0.91 ( 0 )" "1.08 ( 0.33 )" "0.01 ( 0.01 )" 7.07 0.08 0.91 1.08 0.01 "compLasso" +1000 500 0.9 0.5 0.98 "0.91 ( 0 )" "0.14 ( 0.07 )" "0 ( 0 )" 6.14 0.02 0.91 0.14 0 "compLasso" +50 1000 0.9 20 0.01 "1 ( 0 )" "330.51 ( 8.59 )" "0.97 ( 0.08 )" 335.54 0.98 1 330.51 0.97 "compLasso" +100 1000 0.9 10 0.02 "1 ( 0 )" "217.74 ( 6.88 )" "0.67 ( 0.07 )" 223.07 0.97 1 217.74 0.67 "compLasso" +500 1000 0.9 2 0.76 "0.91 ( 0 )" "1.91 ( 0.48 )" "0.02 ( 0.01 )" 7.89 0.12 0.91 1.91 0.02 "compLasso" +1000 1000 0.9 1 0.95 "0.91 ( 0 )" "0.27 ( 0.11 )" "0.02 ( 0.01 )" 6.25 0.03 0.91 0.27 0.02 "compLasso" diff --git a/simulations/results_summary_bin/table_ind_binary_all.txt b/simulations/results_summary_bin/table_ind_binary_all.txt new file mode 100644 index 0000000..9ba1348 --- /dev/null +++ b/simulations/results_summary_bin/table_ind_binary_all.txt @@ -0,0 +1,65 @@ +"N" "P" "Corr" "Ratio" "Stab" "ROC" "FP" "FN" "num_select" "FDR" "ROC_mean" "FP_mean" "FN_mean" "method" +50 50 0 1 0.33 "0.74 ( 0.01 )" "3.69 ( 0.25 )" "2.5 ( 0.12 )" 6.19 0.37 0.74 3.69 2.5 "lasso" +100 50 0 0.5 0.35 "0.85 ( 0.01 )" "7.16 ( 0.37 )" "0.64 ( 0.08 )" 11.52 0.48 0.85 7.16 0.64 "lasso" +500 50 0 0.1 0.53 "0.93 ( 0 )" "5.21 ( 0.21 )" "0 ( 0 )" 10.21 0.39 0.93 5.21 0 "lasso" +1000 50 0 0.05 0.8 "0.93 ( 0 )" "2.25 ( 0.11 )" "0 ( 0 )" 7.25 0.15 0.93 2.25 0 "lasso" +50 100 0 2 0.25 "0.73 ( 0.01 )" "5.13 ( 0.34 )" "2.93 ( 0.1 )" 7.2 0.5 0.73 5.13 2.93 "lasso" +100 100 0 1 0.32 "0.83 ( 0.01 )" "8.22 ( 0.44 )" "1.03 ( 0.09 )" 12.19 0.54 0.83 8.22 1.03 "lasso" +500 100 0 0.2 0.4 "0.92 ( 0 )" "8.89 ( 0.29 )" "0 ( 0 )" 13.89 0.55 0.92 8.89 0 "lasso" +1000 100 0 0.1 0.69 "0.93 ( 0 )" "3.53 ( 0.16 )" "0 ( 0 )" 8.53 0.27 0.93 3.53 0 "lasso" +50 500 0 10 0.13 "0.7 ( 0.01 )" "8.05 ( 0.28 )" "3.74 ( 0.09 )" 9.31 0.74 0.7 8.05 3.74 "lasso" +100 500 0 5 0.24 "0.79 ( 0.01 )" "11.14 ( 0.64 )" "1.71 ( 0.1 )" 14.43 0.63 0.79 11.14 1.71 "lasso" +500 500 0 1 0.2 "0.92 ( 0 )" "23.83 ( 0.69 )" "0 ( 0 )" 28.83 0.78 0.92 23.83 0 "lasso" +1000 500 0 0.5 0.36 "0.93 ( 0 )" "11.38 ( 0.41 )" "0 ( 0 )" 16.38 0.6 0.93 11.38 0 "lasso" +50 1000 0 20 0.09 "0.67 ( 0.01 )" "9.77 ( 0.24 )" "4.03 ( 0.08 )" 10.74 0.81 0.67 9.77 4.03 "lasso" +100 1000 0 10 0.2 "0.78 ( 0.01 )" "11.91 ( 0.8 )" "2.32 ( 0.1 )" 14.59 0.66 0.78 11.91 2.32 "lasso" +500 1000 0 2 0.16 "0.91 ( 0 )" "30.84 ( 0.92 )" "0 ( 0 )" 35.84 0.82 0.91 30.84 0 "lasso" +1000 1000 0 1 0.24 "0.93 ( 0 )" "19.96 ( 0.61 )" "0 ( 0 )" 24.96 0.74 0.93 19.96 0 "lasso" +50 50 0 1 0.15 "0.76 ( 0.01 )" "12.04 ( 0.89 )" "1.42 ( 0.11 )" 15.62 0.61 0.76 12.04 1.42 "elnet" +100 50 0 0.5 0.23 "0.84 ( 0.01 )" "11.44 ( 0.76 )" "0.46 ( 0.07 )" 15.98 0.56 0.84 11.44 0.46 "elnet" +500 50 0 0.1 0.36 "0.92 ( 0 )" "8.74 ( 0.72 )" "0 ( 0 )" 13.74 0.45 0.92 8.74 0 "elnet" +1000 50 0 0.05 0.41 "0.93 ( 0 )" "7.56 ( 0.72 )" "0 ( 0 )" 12.56 0.4 0.93 7.56 0 "elnet" +50 100 0 2 0.1 "0.72 ( 0.01 )" "18.92 ( 1.7 )" "1.81 ( 0.12 )" 22.11 0.72 0.72 18.92 1.81 "elnet" +100 100 0 1 0.22 "0.82 ( 0.01 )" "12.48 ( 0.9 )" "0.96 ( 0.09 )" 16.52 0.58 0.82 12.48 0.96 "elnet" +500 100 0 0.2 0.32 "0.92 ( 0 )" "11.78 ( 0.99 )" "0 ( 0 )" 16.78 0.52 0.92 11.78 0 "elnet" +1000 100 0 0.1 0.34 "0.93 ( 0 )" "10.71 ( 1.03 )" "0 ( 0 )" 15.71 0.47 0.93 10.71 0 "elnet" +50 500 0 10 0.03 "0.68 ( 0.01 )" "57.17 ( 5.72 )" "2.27 ( 0.13 )" 59.9 0.88 0.68 57.17 2.27 "elnet" +100 500 0 5 0.15 "0.77 ( 0.01 )" "20.84 ( 2.08 )" "1.49 ( 0.1 )" 24.35 0.69 0.77 20.84 1.49 "elnet" +500 500 0 1 0.27 "0.92 ( 0 )" "16.79 ( 1.47 )" "0 ( 0 )" 21.79 0.61 0.92 16.79 0 "elnet" +1000 500 0 0.5 0.36 "0.93 ( 0 )" "11.47 ( 1.14 )" "0 ( 0 )" 16.47 0.48 0.93 11.47 0 "elnet" +50 1000 0 20 0.02 "0.67 ( 0.01 )" "72.88 ( 8.55 )" "2.89 ( 0.13 )" 74.99 0.91 0.67 72.88 2.89 "elnet" +100 1000 0 10 0.09 "0.76 ( 0.01 )" "29.95 ( 4.05 )" "2 ( 0.1 )" 32.95 0.77 0.76 29.95 2 "elnet" +500 1000 0 2 0.24 "0.91 ( 0 )" "19.47 ( 1.76 )" "0 ( 0 )" 24.47 0.62 0.91 19.47 0 "elnet" +1000 1000 0 1 0.25 "0.93 ( 0 )" "18.47 ( 1.76 )" "0 ( 0 )" 23.47 0.58 0.93 18.47 0 "elnet" +50 50 0 1 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 50 0 0.5 0.1 "1 ( 0 )" "1.97 ( 0.13 )" "4.62 ( 0.08 )" 3.34 0.55 1 1.97 4.62 "rf" +500 50 0 0.1 0.54 "1 ( 0 )" "1.26 ( 0.12 )" "2.19 ( 0.08 )" 5.07 0.22 1 1.26 2.19 "rf" +1000 50 0 0.05 0.73 "1 ( 0 )" "0.86 ( 0.09 )" "1.12 ( 0.08 )" 5.74 0.13 1 0.86 1.12 "rf" +50 100 0 2 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 100 0 1 0.05 "1 ( 0 )" "4.29 ( 0.17 )" "4.79 ( 0.09 )" 5.5 0.77 1 4.29 4.79 "rf" +500 100 0 0.2 0.4 "1 ( 0 )" "3.42 ( 0.16 )" "2.01 ( 0.09 )" 7.41 0.44 1 3.42 2.01 "rf" +1000 100 0 0.1 0.49 "1 ( 0 )" "3.39 ( 0.19 )" "1.14 ( 0.07 )" 8.25 0.38 1 3.39 1.14 "rf" +50 500 0 10 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 500 0 5 0.01 "1 ( 0 )" "24.68 ( 0.48 )" "4.5 ( 0.09 )" 26.18 0.94 1 24.68 4.5 "rf" +500 500 0 1 0.09 "1 ( 0 )" "23.08 ( 0.51 )" "2.34 ( 0.1 )" 26.74 0.86 1 23.08 2.34 "rf" +1000 500 0 0.5 0.14 "1 ( 0 )" "22.72 ( 0.46 )" "1.34 ( 0.08 )" 27.38 0.83 1 22.72 1.34 "rf" +50 1000 0 20 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 1000 0 10 0.01 "1 ( 0 )" "46.76 ( 0.67 )" "4.86 ( 0.09 )" 47.9 0.98 1 46.76 4.86 "rf" +500 1000 0 2 0.04 "1 ( 0 )" "47.82 ( 0.66 )" "2.5 ( 0.1 )" 51.32 0.93 1 47.82 2.5 "rf" +1000 1000 0 1 0.07 "1 ( 0 )" "47.14 ( 0.77 )" "1.46 ( 0.08 )" 51.68 0.91 1 47.14 1.46 "rf" +50 50 0 1 0.13 "0.98 ( 0 )" "16.38 ( 0.96 )" "0.61 ( 0.06 )" 21.77 0.71 0.98 16.38 0.61 "compLasso" +100 50 0 0.5 0.32 "0.93 ( 0 )" "7.94 ( 0.54 )" "0.34 ( 0.06 )" 13.6 0.54 0.93 7.94 0.34 "compLasso" +500 50 0 0.1 0.63 "0.91 ( 0 )" "2.67 ( 0.6 )" "0.1 ( 0.03 )" 8.57 0.19 0.91 2.67 0.1 "compLasso" +1000 50 0 0.05 0.75 "0.91 ( 0 )" "1.61 ( 0.48 )" "0.04 ( 0.02 )" 7.57 0.09 0.91 1.61 0.04 "compLasso" +50 100 0 2 0.06 "0.99 ( 0 )" "39.18 ( 2.14 )" "0.63 ( 0.07 )" 44.55 0.85 0.99 39.18 0.63 "compLasso" +100 100 0 1 0.2 "0.94 ( 0 )" "16.29 ( 1.16 )" "0.47 ( 0.06 )" 21.82 0.7 0.94 16.29 0.47 "compLasso" +500 100 0 0.2 0.47 "0.91 ( 0 )" "5.63 ( 0.84 )" "0.13 ( 0.03 )" 11.5 0.3 0.91 5.63 0.13 "compLasso" +1000 100 0 0.1 0.43 "0.91 ( 0 )" "6.87 ( 1.8 )" "0 ( 0 )" 12.87 0.17 0.91 6.87 0 "compLasso" +50 500 0 10 0.01 "1 ( 0 )" "251.02 ( 6.8 )" "0.36 ( 0.06 )" 256.66 0.98 1 251.02 0.36 "compLasso" +100 500 0 5 0.03 "1 ( 0 )" "134.32 ( 6.63 )" "0.33 ( 0.05 )" 139.99 0.95 1 134.32 0.33 "compLasso" +500 500 0 1 0.43 "0.91 ( 0 )" "8.32 ( 1.15 )" "0.1 ( 0.03 )" 14.22 0.41 0.91 8.32 0.1 "compLasso" +1000 500 0 0.5 0.6 "0.91 ( 0 )" "4.63 ( 1.57 )" "0 ( 0 )" 10.63 0.21 0.91 4.63 0 "compLasso" +50 1000 0 20 0.01 "1 ( 0 )" "406.32 ( 7.33 )" "0.73 ( 0.07 )" 411.59 0.99 1 406.32 0.73 "compLasso" +100 1000 0 10 0.02 "1 ( 0 )" "283.24 ( 7.31 )" "0.49 ( 0.06 )" 288.75 0.98 1 283.24 0.49 "compLasso" +500 1000 0 2 0.4 "0.91 ( 0 )" "9.4 ( 1.07 )" "0.07 ( 0.03 )" 15.33 0.47 0.91 9.4 0.07 "compLasso" +1000 1000 0 1 0.82 "0.91 ( 0 )" "1.91 ( 0.29 )" "0.01 ( 0.01 )" 7.9 0.18 0.91 1.91 0.01 "compLasso" diff --git a/simulations/results_summary_bin/table_toe_binary_all.txt b/simulations/results_summary_bin/table_toe_binary_all.txt new file mode 100644 index 0000000..870f214 --- /dev/null +++ b/simulations/results_summary_bin/table_toe_binary_all.txt @@ -0,0 +1,321 @@ +"N" "P" "Corr" "Ratio" "Stab" "ROC" "FP" "FN" "num_select" "FDR" "ROC_mean" "FP_mean" "FN_mean" "method" +50 50 0.1 1 0.32 "0.78 ( 0.01 )" "3.65 ( 0.23 )" "2.83 ( 0.11 )" 5.82 0.39 0.78 3.65 2.83 "lasso" +100 50 0.1 0.5 0.34 "0.85 ( 0.01 )" "7.35 ( 0.34 )" "0.68 ( 0.09 )" 11.67 0.5 0.85 7.35 0.68 "lasso" +500 50 0.1 0.1 0.55 "0.92 ( 0 )" "4.99 ( 0.22 )" "0 ( 0 )" 9.99 0.37 0.92 4.99 0 "lasso" +1000 50 0.1 0.05 0.78 "0.93 ( 0 )" "2.42 ( 0.12 )" "0 ( 0 )" 7.42 0.17 0.93 2.42 0 "lasso" +50 100 0.1 2 0.26 "0.74 ( 0.01 )" "4.65 ( 0.29 )" "2.93 ( 0.12 )" 6.72 0.48 0.74 4.65 2.93 "lasso" +100 100 0.1 1 0.33 "0.85 ( 0.01 )" "8.11 ( 0.41 )" "0.86 ( 0.09 )" 12.25 0.52 0.85 8.11 0.86 "lasso" +500 100 0.1 0.2 0.4 "0.92 ( 0 )" "8.63 ( 0.29 )" "0 ( 0 )" 13.63 0.54 0.92 8.63 0 "lasso" +1000 100 0.1 0.1 0.64 "0.92 ( 0 )" "4.02 ( 0.18 )" "0 ( 0 )" 9.02 0.31 0.92 4.02 0 "lasso" +50 500 0.1 10 0.12 "0.71 ( 0.01 )" "8.29 ( 0.25 )" "3.89 ( 0.1 )" 9.4 0.77 0.71 8.29 3.89 "lasso" +100 500 0.1 5 0.24 "0.8 ( 0.01 )" "8.84 ( 0.61 )" "2.19 ( 0.12 )" 11.65 0.57 0.8 8.84 2.19 "lasso" +500 500 0.1 1 0.21 "0.92 ( 0 )" "22.86 ( 0.75 )" "0 ( 0 )" 27.86 0.77 0.92 22.86 0 "lasso" +1000 500 0.1 0.5 0.33 "0.93 ( 0 )" "12.73 ( 0.35 )" "0 ( 0 )" 17.73 0.65 0.93 12.73 0 "lasso" +50 1000 0.1 20 0.09 "0.68 ( 0.01 )" "10.35 ( 0.33 )" "4.14 ( 0.09 )" 11.21 0.82 0.68 10.35 4.14 "lasso" +100 1000 0.1 10 0.19 "0.77 ( 0.01 )" "10.84 ( 0.75 )" "2.46 ( 0.1 )" 13.38 0.63 0.77 10.84 2.46 "lasso" +500 1000 0.1 2 0.16 "0.92 ( 0 )" "30.83 ( 1.05 )" "0 ( 0 )" 35.83 0.81 0.92 30.83 0 "lasso" +1000 1000 0.1 1 0.23 "0.93 ( 0 )" "20.39 ( 0.59 )" "0 ( 0 )" 25.39 0.75 0.93 20.39 0 "lasso" +50 50 0.3 1 0.28 "0.75 ( 0.01 )" "3.69 ( 0.22 )" "3.04 ( 0.1 )" 5.65 0.4 0.75 3.69 3.04 "lasso" +100 50 0.3 0.5 0.32 "0.84 ( 0.01 )" "7.11 ( 0.33 )" "0.93 ( 0.1 )" 11.18 0.5 0.84 7.11 0.93 "lasso" +500 50 0.3 0.1 0.51 "0.92 ( 0 )" "5.67 ( 0.22 )" "0 ( 0 )" 10.67 0.41 0.92 5.67 0 "lasso" +1000 50 0.3 0.05 0.78 "0.92 ( 0 )" "2.48 ( 0.13 )" "0 ( 0 )" 7.48 0.18 0.92 2.48 0 "lasso" +50 100 0.3 2 0.26 "0.75 ( 0.01 )" "4.41 ( 0.27 )" "3.47 ( 0.09 )" 5.94 0.49 0.75 4.41 3.47 "lasso" +100 100 0.3 1 0.28 "0.82 ( 0.01 )" "8.16 ( 0.53 )" "1.46 ( 0.11 )" 11.7 0.52 0.82 8.16 1.46 "lasso" +500 100 0.3 0.2 0.41 "0.92 ( 0 )" "8.48 ( 0.34 )" "0 ( 0 )" 13.48 0.53 0.92 8.48 0 "lasso" +1000 100 0.3 0.1 0.67 "0.92 ( 0 )" "3.71 ( 0.15 )" "0 ( 0 )" 8.71 0.29 0.92 3.71 0 "lasso" +50 500 0.3 10 0.13 "0.69 ( 0.01 )" "7.94 ( 0.3 )" "4.11 ( 0.08 )" 8.83 0.77 0.69 7.94 4.11 "lasso" +100 500 0.3 5 0.2 "0.78 ( 0.01 )" "10.16 ( 0.68 )" "2.49 ( 0.11 )" 12.67 0.63 0.78 10.16 2.49 "lasso" +500 500 0.3 1 0.2 "0.91 ( 0 )" "23.65 ( 0.7 )" "0 ( 0 )" 28.65 0.78 0.91 23.65 0 "lasso" +1000 500 0.3 0.5 0.34 "0.92 ( 0 )" "12.28 ( 0.34 )" "0 ( 0 )" 17.28 0.64 0.92 12.28 0 "lasso" +50 1000 0.3 20 0.1 "0.68 ( 0.01 )" "9.77 ( 0.31 )" "4.3 ( 0.06 )" 10.47 0.83 0.68 9.77 4.3 "lasso" +100 1000 0.3 10 0.17 "0.77 ( 0.01 )" "10.68 ( 0.8 )" "3.02 ( 0.11 )" 12.66 0.67 0.77 10.68 3.02 "lasso" +500 1000 0.3 2 0.17 "0.9 ( 0 )" "30.07 ( 1.09 )" "0 ( 0 )" 35.07 0.81 0.9 30.07 0 "lasso" +1000 1000 0.3 1 0.24 "0.92 ( 0 )" "19.7 ( 0.7 )" "0 ( 0 )" 24.7 0.73 0.92 19.7 0 "lasso" +50 50 0.5 1 0.25 "0.76 ( 0.01 )" "3.86 ( 0.22 )" "3.4 ( 0.12 )" 5.46 0.47 0.76 3.86 3.4 "lasso" +100 50 0.5 0.5 0.31 "0.84 ( 0.01 )" "6.67 ( 0.32 )" "1.32 ( 0.1 )" 10.35 0.51 0.84 6.67 1.32 "lasso" +500 50 0.5 0.1 0.55 "0.91 ( 0 )" "4.95 ( 0.22 )" "0 ( 0 )" 9.95 0.37 0.91 4.95 0 "lasso" +1000 50 0.5 0.05 0.77 "0.91 ( 0 )" "2.5 ( 0.14 )" "0 ( 0 )" 7.5 0.17 0.91 2.5 0 "lasso" +50 100 0.5 2 0.25 "0.72 ( 0.01 )" "4.08 ( 0.28 )" "3.81 ( 0.08 )" 5.27 0.49 0.72 4.08 3.81 "lasso" +100 100 0.5 1 0.26 "0.8 ( 0.01 )" "7.61 ( 0.43 )" "2.03 ( 0.12 )" 10.58 0.55 0.8 7.61 2.03 "lasso" +500 100 0.5 0.2 0.43 "0.91 ( 0 )" "8.05 ( 0.31 )" "0 ( 0 )" 13.05 0.51 0.91 8.05 0 "lasso" +1000 100 0.5 0.1 0.65 "0.91 ( 0 )" "3.9 ( 0.16 )" "0 ( 0 )" 8.9 0.3 0.91 3.9 0 "lasso" +50 500 0.5 10 0.14 "0.7 ( 0.01 )" "7.23 ( 0.28 )" "4.26 ( 0.07 )" 7.97 0.76 0.7 7.23 4.26 "lasso" +100 500 0.5 5 0.18 "0.77 ( 0.01 )" "8.77 ( 0.71 )" "3.31 ( 0.1 )" 10.46 0.61 0.77 8.77 3.31 "lasso" +500 500 0.5 1 0.2 "0.9 ( 0 )" "23.13 ( 0.75 )" "0.01 ( 0.01 )" 28.12 0.77 0.9 23.13 0.01 "lasso" +1000 500 0.5 0.5 0.32 "0.91 ( 0 )" "13.23 ( 0.36 )" "0.01 ( 0.01 )" 18.22 0.66 0.91 13.23 0.01 "lasso" +50 1000 0.5 20 0.11 "0.68 ( 0.01 )" "9.13 ( 0.25 )" "4.4 ( 0.06 )" 9.73 0.83 0.68 9.13 4.4 "lasso" +100 1000 0.5 10 0.19 "0.77 ( 0.01 )" "8.39 ( 0.65 )" "3.48 ( 0.08 )" 9.91 0.64 0.77 8.39 3.48 "lasso" +500 1000 0.5 2 0.16 "0.89 ( 0 )" "30.97 ( 0.97 )" "0 ( 0 )" 35.97 0.82 0.89 30.97 0 "lasso" +1000 1000 0.5 1 0.23 "0.91 ( 0 )" "21.03 ( 0.66 )" "0 ( 0 )" 26.03 0.75 0.91 21.03 0 "lasso" +50 50 0.7 1 0.28 "0.77 ( 0.01 )" "3.76 ( 0.26 )" "3.51 ( 0.11 )" 5.25 0.42 0.77 3.76 3.51 "lasso" +100 50 0.7 0.5 0.33 "0.81 ( 0.01 )" "5.27 ( 0.32 )" "2.04 ( 0.12 )" 8.23 0.44 0.81 5.27 2.04 "lasso" +500 50 0.7 0.1 0.57 "0.89 ( 0 )" "4.61 ( 0.17 )" "0.04 ( 0.02 )" 9.57 0.36 0.89 4.61 0.04 "lasso" +1000 50 0.7 0.05 0.74 "0.89 ( 0 )" "2.8 ( 0.15 )" "0 ( 0 )" 7.8 0.21 0.89 2.8 0 "lasso" +50 100 0.7 2 0.24 "0.71 ( 0.01 )" "4.31 ( 0.28 )" "4.05 ( 0.09 )" 5.26 0.55 0.71 4.31 4.05 "lasso" +100 100 0.7 1 0.27 "0.79 ( 0.01 )" "6.34 ( 0.4 )" "2.67 ( 0.12 )" 8.67 0.53 0.79 6.34 2.67 "lasso" +500 100 0.7 0.2 0.43 "0.89 ( 0 )" "7.92 ( 0.24 )" "0.04 ( 0.02 )" 12.88 0.52 0.89 7.92 0.04 "lasso" +1000 100 0.7 0.1 0.66 "0.9 ( 0 )" "3.85 ( 0.16 )" "0 ( 0 )" 8.85 0.3 0.9 3.85 0 "lasso" +50 500 0.7 10 0.14 "0.7 ( 0.01 )" "6.5 ( 0.24 )" "4.63 ( 0.06 )" 6.87 0.77 0.7 6.5 4.63 "lasso" +100 500 0.7 5 0.21 "0.76 ( 0.01 )" "6.98 ( 0.58 )" "3.65 ( 0.08 )" 8.33 0.56 0.76 6.98 3.65 "lasso" +500 500 0.7 1 0.2 "0.88 ( 0 )" "22.04 ( 0.74 )" "0.14 ( 0.04 )" 26.9 0.76 0.88 22.04 0.14 "lasso" +1000 500 0.7 0.5 0.33 "0.89 ( 0 )" "13.15 ( 0.38 )" "0 ( 0 )" 18.15 0.65 0.89 13.15 0 "lasso" +50 1000 0.7 20 0.1 "0.66 ( 0.01 )" "8.82 ( 0.28 )" "4.72 ( 0.05 )" 9.1 0.85 0.66 8.82 4.72 "lasso" +100 1000 0.7 10 0.18 "0.76 ( 0.01 )" "6.93 ( 0.59 )" "4 ( 0.08 )" 7.93 0.62 0.76 6.93 4 "lasso" +500 1000 0.7 2 0.16 "0.87 ( 0 )" "29.07 ( 1 )" "0.16 ( 0.04 )" 33.91 0.81 0.87 29.07 0.16 "lasso" +1000 1000 0.7 1 0.22 "0.89 ( 0 )" "21.8 ( 0.63 )" "0 ( 0 )" 26.8 0.76 0.89 21.8 0 "lasso" +50 50 0.9 1 0.3 "0.69 ( 0.01 )" "2.9 ( 0.2 )" "4.22 ( 0.09 )" 3.68 0.41 0.69 2.9 4.22 "lasso" +100 50 0.9 0.5 0.37 "0.76 ( 0.01 )" "3.93 ( 0.21 )" "2.74 ( 0.11 )" 6.19 0.41 0.76 3.93 2.74 "lasso" +500 50 0.9 0.1 0.57 "0.83 ( 0 )" "3.65 ( 0.16 )" "0.56 ( 0.08 )" 8.09 0.31 0.83 3.65 0.56 "lasso" +1000 50 0.9 0.05 0.76 "0.83 ( 0 )" "2.41 ( 0.12 )" "0.23 ( 0.04 )" 7.18 0.18 0.83 2.41 0.23 "lasso" +50 100 0.9 2 0.26 "0.7 ( 0.01 )" "3.29 ( 0.23 )" "4.29 ( 0.09 )" 4 0.45 0.7 3.29 4.29 "lasso" +100 100 0.9 1 0.32 "0.76 ( 0.01 )" "4.77 ( 0.33 )" "3.26 ( 0.09 )" 6.51 0.46 0.76 4.77 3.26 "lasso" +500 100 0.9 0.2 0.45 "0.82 ( 0 )" "5.65 ( 0.21 )" "0.92 ( 0.09 )" 9.73 0.45 0.82 5.65 0.92 "lasso" +1000 100 0.9 0.1 0.63 "0.83 ( 0 )" "3.87 ( 0.18 )" "0.24 ( 0.05 )" 8.63 0.3 0.83 3.87 0.24 "lasso" +50 500 0.9 10 0.15 "0.66 ( 0.01 )" "5.8 ( 0.24 )" "4.65 ( 0.07 )" 6.15 0.75 0.66 5.8 4.65 "lasso" +100 500 0.9 5 0.21 "0.7 ( 0.01 )" "5.55 ( 0.55 )" "4.14 ( 0.09 )" 6.41 0.51 0.7 5.55 4.14 "lasso" +500 500 0.9 1 0.19 "0.81 ( 0 )" "15.93 ( 0.73 )" "1.42 ( 0.1 )" 19.51 0.73 0.81 15.93 1.42 "lasso" +1000 500 0.9 0.5 0.31 "0.83 ( 0 )" "11.96 ( 0.46 )" "0.42 ( 0.06 )" 16.54 0.63 0.83 11.96 0.42 "lasso" +50 1000 0.9 20 0.08 "0.66 ( 0.01 )" "8.02 ( 0.28 )" "4.9 ( 0.07 )" 8.12 0.85 0.66 8.02 4.9 "lasso" +100 1000 0.9 10 0.18 "0.69 ( 0.01 )" "5.85 ( 0.58 )" "4.37 ( 0.07 )" 6.48 0.61 0.69 5.85 4.37 "lasso" +500 1000 0.9 2 0.16 "0.8 ( 0 )" "18.7 ( 0.93 )" "1.88 ( 0.1 )" 21.82 0.77 0.8 18.7 1.88 "lasso" +1000 1000 0.9 1 0.21 "0.83 ( 0 )" "20.07 ( 0.72 )" "0.41 ( 0.05 )" 24.66 0.75 0.83 20.07 0.41 "lasso" +50 50 0.1 1 0.13 "0.77 ( 0.01 )" "13.02 ( 1.02 )" "1.51 ( 0.11 )" 16.51 0.63 0.77 13.02 1.51 "elnet" +100 50 0.1 0.5 0.24 "0.85 ( 0.01 )" "10.71 ( 0.62 )" "0.56 ( 0.07 )" 15.15 0.57 0.85 10.71 0.56 "elnet" +500 50 0.1 0.1 0.41 "0.92 ( 0 )" "7.43 ( 0.6 )" "0.02 ( 0.01 )" 12.41 0.42 0.92 7.43 0.02 "elnet" +1000 50 0.1 0.05 0.39 "0.92 ( 0 )" "7.82 ( 0.76 )" "0 ( 0 )" 12.82 0.4 0.92 7.82 0 "elnet" +50 100 0.1 2 0.09 "0.73 ( 0.01 )" "21.55 ( 1.94 )" "1.64 ( 0.11 )" 24.91 0.73 0.73 21.55 1.64 "elnet" +100 100 0.1 1 0.18 "0.83 ( 0.01 )" "15.59 ( 1.32 )" "0.84 ( 0.1 )" 19.75 0.62 0.83 15.59 0.84 "elnet" +500 100 0.1 0.2 0.32 "0.92 ( 0 )" "11.5 ( 0.9 )" "0 ( 0 )" 16.5 0.54 0.92 11.5 0 "elnet" +1000 100 0.1 0.1 0.34 "0.92 ( 0 )" "11.02 ( 1.05 )" "0 ( 0 )" 16.02 0.49 0.92 11.02 0 "elnet" +50 500 0.1 10 0.03 "0.66 ( 0.01 )" "58.7 ( 5.86 )" "2.64 ( 0.12 )" 61.06 0.89 0.66 58.7 2.64 "elnet" +100 500 0.1 5 0.14 "0.78 ( 0.01 )" "19.29 ( 1.92 )" "1.76 ( 0.1 )" 22.53 0.68 0.78 19.29 1.76 "elnet" +500 500 0.1 1 0.26 "0.91 ( 0 )" "17.05 ( 1.43 )" "0 ( 0 )" 22.05 0.62 0.91 17.05 0 "elnet" +1000 500 0.1 0.5 0.29 "0.93 ( 0 )" "15.14 ( 1.39 )" "0 ( 0 )" 20.14 0.54 0.93 15.14 0 "elnet" +50 1000 0.1 20 0.02 "0.65 ( 0.01 )" "85.97 ( 9 )" "3.03 ( 0.13 )" 87.94 0.92 0.65 85.97 3.03 "elnet" +100 1000 0.1 10 0.12 "0.76 ( 0.01 )" "22.02 ( 1.97 )" "2.07 ( 0.1 )" 24.95 0.75 0.76 22.02 2.07 "elnet" +500 1000 0.1 2 0.23 "0.91 ( 0 )" "21.07 ( 1.75 )" "0 ( 0 )" 26.07 0.66 0.91 21.07 0 "elnet" +1000 1000 0.1 1 0.24 "0.92 ( 0 )" "19.56 ( 2.29 )" "0 ( 0 )" 24.56 0.57 0.92 19.56 0 "elnet" +50 50 0.3 1 0.13 "0.76 ( 0.01 )" "11.32 ( 0.99 )" "1.87 ( 0.14 )" 14.45 0.59 0.76 11.32 1.87 "elnet" +100 50 0.3 0.5 0.18 "0.83 ( 0.01 )" "12.96 ( 0.86 )" "0.75 ( 0.09 )" 17.21 0.61 0.83 12.96 0.75 "elnet" +500 50 0.3 0.1 0.33 "0.91 ( 0 )" "9.89 ( 0.75 )" "0 ( 0 )" 14.89 0.51 0.91 9.89 0 "elnet" +1000 50 0.3 0.05 0.38 "0.92 ( 0 )" "8.56 ( 0.69 )" "0 ( 0 )" 13.56 0.44 0.92 8.56 0 "elnet" +50 100 0.3 2 0.08 "0.74 ( 0.01 )" "17.99 ( 1.78 )" "2.32 ( 0.14 )" 20.67 0.72 0.74 17.99 2.32 "elnet" +100 100 0.3 1 0.17 "0.82 ( 0.01 )" "14.36 ( 1.25 )" "1.36 ( 0.12 )" 18 0.6 0.82 14.36 1.36 "elnet" +500 100 0.3 0.2 0.29 "0.91 ( 0 )" "13.08 ( 1 )" "0 ( 0 )" 18.08 0.56 0.91 13.08 0 "elnet" +1000 100 0.3 0.1 0.38 "0.92 ( 0 )" "9.67 ( 0.76 )" "0 ( 0 )" 14.67 0.49 0.92 9.67 0 "elnet" +50 500 0.3 10 0.03 "0.66 ( 0.01 )" "49.2 ( 5.65 )" "3.15 ( 0.13 )" 51.05 0.89 0.66 49.2 3.15 "elnet" +100 500 0.3 5 0.11 "0.77 ( 0.01 )" "23.84 ( 2.37 )" "2.05 ( 0.11 )" 26.79 0.73 0.77 23.84 2.05 "elnet" +500 500 0.3 1 0.19 "0.91 ( 0 )" "25.04 ( 1.69 )" "0 ( 0 )" 30.04 0.72 0.91 25.04 0 "elnet" +1000 500 0.3 0.5 0.25 "0.92 ( 0 )" "18.51 ( 1.25 )" "0 ( 0 )" 23.51 0.66 0.92 18.51 0 "elnet" +50 1000 0.3 20 0.02 "0.67 ( 0.01 )" "54.74 ( 6.8 )" "3.54 ( 0.12 )" 56.2 0.91 0.67 54.74 3.54 "elnet" +100 1000 0.3 10 0.08 "0.75 ( 0.01 )" "28.55 ( 5.11 )" "2.58 ( 0.11 )" 30.97 0.75 0.75 28.55 2.58 "elnet" +500 1000 0.3 2 0.17 "0.9 ( 0 )" "29.91 ( 1.92 )" "0 ( 0 )" 34.91 0.76 0.9 29.91 0 "elnet" +1000 1000 0.3 1 0.19 "0.92 ( 0 )" "25.69 ( 2.26 )" "0 ( 0 )" 30.69 0.66 0.92 25.69 0 "elnet" +50 50 0.5 1 0.12 "0.74 ( 0.01 )" "11.42 ( 0.91 )" "2.04 ( 0.13 )" 14.38 0.64 0.74 11.42 2.04 "elnet" +100 50 0.5 0.5 0.19 "0.83 ( 0.01 )" "11.74 ( 0.82 )" "1.01 ( 0.11 )" 15.73 0.6 0.83 11.74 1.01 "elnet" +500 50 0.5 0.1 0.31 "0.91 ( 0 )" "10.82 ( 0.72 )" "0 ( 0 )" 15.82 0.54 0.91 10.82 0 "elnet" +1000 50 0.5 0.05 0.36 "0.91 ( 0 )" "9.23 ( 0.76 )" "0 ( 0 )" 14.23 0.46 0.91 9.23 0 "elnet" +50 100 0.5 2 0.08 "0.72 ( 0.01 )" "18.36 ( 1.76 )" "2.53 ( 0.12 )" 20.83 0.72 0.72 18.36 2.53 "elnet" +100 100 0.5 1 0.16 "0.81 ( 0.01 )" "15.05 ( 1.14 )" "1.47 ( 0.12 )" 18.58 0.67 0.81 15.05 1.47 "elnet" +500 100 0.5 0.2 0.27 "0.91 ( 0 )" "14.93 ( 0.96 )" "0 ( 0 )" 19.93 0.64 0.91 14.93 0 "elnet" +1000 100 0.5 0.1 0.38 "0.91 ( 0 )" "10.11 ( 0.76 )" "0 ( 0 )" 15.11 0.52 0.91 10.11 0 "elnet" +50 500 0.5 10 0.03 "0.69 ( 0.01 )" "40.87 ( 5.37 )" "3.42 ( 0.13 )" 42.45 0.87 0.69 40.87 3.42 "elnet" +100 500 0.5 5 0.09 "0.76 ( 0.01 )" "22.4 ( 3.42 )" "2.91 ( 0.1 )" 24.49 0.72 0.76 22.4 2.91 "elnet" +500 500 0.5 1 0.19 "0.89 ( 0 )" "26.07 ( 1.56 )" "0.01 ( 0.01 )" 31.06 0.74 0.89 26.07 0.01 "elnet" +1000 500 0.5 0.5 0.21 "0.91 ( 0 )" "22.64 ( 1.75 )" "0 ( 0 )" 27.64 0.69 0.91 22.64 0 "elnet" +50 1000 0.5 20 0.02 "0.66 ( 0.01 )" "61.74 ( 7.68 )" "3.7 ( 0.11 )" 63.04 0.91 0.66 61.74 3.7 "elnet" +100 1000 0.5 10 0.07 "0.75 ( 0.01 )" "27.52 ( 4.1 )" "3.1 ( 0.09 )" 29.42 0.8 0.75 27.52 3.1 "elnet" +500 1000 0.5 2 0.16 "0.89 ( 0 )" "31.54 ( 2.49 )" "0.05 ( 0.03 )" 36.49 0.74 0.89 31.54 0.05 "elnet" +1000 1000 0.5 1 0.17 "0.91 ( 0 )" "29.65 ( 2.06 )" "0 ( 0 )" 34.65 0.75 0.91 29.65 0 "elnet" +50 50 0.7 1 0.1 "0.75 ( 0.01 )" "12.33 ( 0.98 )" "2.23 ( 0.15 )" 15.1 0.64 0.75 12.33 2.23 "elnet" +100 50 0.7 0.5 0.18 "0.81 ( 0.01 )" "11.18 ( 0.86 )" "1.42 ( 0.12 )" 14.76 0.59 0.81 11.18 1.42 "elnet" +500 50 0.7 0.1 0.31 "0.89 ( 0 )" "11.14 ( 0.74 )" "0.02 ( 0.02 )" 16.12 0.56 0.89 11.14 0.02 "elnet" +1000 50 0.7 0.05 0.37 "0.89 ( 0 )" "9.65 ( 0.77 )" "0 ( 0 )" 14.65 0.49 0.89 9.65 0 "elnet" +50 100 0.7 2 0.08 "0.71 ( 0.01 )" "17.76 ( 1.65 )" "2.81 ( 0.14 )" 19.95 0.74 0.71 17.76 2.81 "elnet" +100 100 0.7 1 0.13 "0.79 ( 0.01 )" "16.43 ( 1.31 )" "1.79 ( 0.13 )" 19.64 0.68 0.79 16.43 1.79 "elnet" +500 100 0.7 0.2 0.25 "0.89 ( 0 )" "16.01 ( 0.82 )" "0.03 ( 0.03 )" 20.98 0.67 0.89 16.01 0.03 "elnet" +1000 100 0.7 0.1 0.33 "0.89 ( 0 )" "12.77 ( 0.94 )" "0 ( 0 )" 17.77 0.58 0.89 12.77 0 "elnet" +50 500 0.7 10 0.03 "0.67 ( 0.01 )" "43.83 ( 5.17 )" "3.75 ( 0.12 )" 45.08 0.9 0.67 43.83 3.75 "elnet" +100 500 0.7 5 0.1 "0.74 ( 0.01 )" "19.1 ( 1.88 )" "3.08 ( 0.1 )" 21.02 0.73 0.74 19.1 3.08 "elnet" +500 500 0.7 1 0.15 "0.87 ( 0 )" "31.23 ( 1.88 )" "0.17 ( 0.04 )" 36.06 0.78 0.87 31.23 0.17 "elnet" +1000 500 0.7 0.5 0.22 "0.89 ( 0 )" "22.46 ( 1.45 )" "0 ( 0 )" 27.46 0.71 0.89 22.46 0 "elnet" +50 1000 0.7 20 0.02 "0.64 ( 0.01 )" "47.17 ( 5.85 )" "4.12 ( 0.09 )" 48.05 0.92 0.64 47.17 4.12 "elnet" +100 1000 0.7 10 0.08 "0.75 ( 0.01 )" "20.86 ( 2.56 )" "3.59 ( 0.09 )" 22.27 0.77 0.75 20.86 3.59 "elnet" +500 1000 0.7 2 0.13 "0.87 ( 0 )" "36.32 ( 2.18 )" "0.23 ( 0.05 )" 41.09 0.81 0.87 36.32 0.23 "elnet" +1000 1000 0.7 1 0.16 "0.89 ( 0 )" "32.22 ( 2.11 )" "0.01 ( 0.01 )" 37.21 0.8 0.89 32.22 0.01 "elnet" +50 50 0.9 1 0.09 "0.71 ( 0.01 )" "14.15 ( 1 )" "2.3 ( 0.14 )" 16.85 0.68 0.71 14.15 2.3 "elnet" +100 50 0.9 0.5 0.15 "0.77 ( 0.01 )" "11.74 ( 0.88 )" "1.74 ( 0.13 )" 15 0.64 0.77 11.74 1.74 "elnet" +500 50 0.9 0.1 0.27 "0.83 ( 0 )" "12.28 ( 0.9 )" "0.18 ( 0.06 )" 17.1 0.57 0.83 12.28 0.18 "elnet" +1000 50 0.9 0.05 0.39 "0.84 ( 0 )" "9.58 ( 0.68 )" "0.01 ( 0.01 )" 14.57 0.51 0.84 9.58 0.01 "elnet" +50 100 0.9 2 0.08 "0.7 ( 0.01 )" "15.1 ( 1.65 )" "3.16 ( 0.13 )" 16.94 0.7 0.7 15.1 3.16 "elnet" +100 100 0.9 1 0.15 "0.75 ( 0.01 )" "14.19 ( 1.38 )" "2.23 ( 0.13 )" 16.96 0.64 0.75 14.19 2.23 "elnet" +500 100 0.9 0.2 0.25 "0.83 ( 0 )" "16.33 ( 1.01 )" "0.2 ( 0.06 )" 21.13 0.67 0.83 16.33 0.2 "elnet" +1000 100 0.9 0.1 0.32 "0.84 ( 0 )" "13.82 ( 1.17 )" "0.03 ( 0.02 )" 18.79 0.6 0.84 13.82 0.03 "elnet" +50 500 0.9 10 0.05 "0.66 ( 0.02 )" "28.64 ( 3.14 )" "4.13 ( 0.07 )" 29.51 0.88 0.66 28.64 4.13 "elnet" +100 500 0.9 5 0.07 "0.7 ( 0.01 )" "25.71 ( 4.03 )" "3.42 ( 0.1 )" 27.29 0.78 0.7 25.71 3.42 "elnet" +500 500 0.9 1 0.14 "0.81 ( 0 )" "25.68 ( 1.61 )" "1.07 ( 0.11 )" 29.61 0.76 0.81 25.68 1.07 "elnet" +1000 500 0.9 0.5 0.21 "0.83 ( 0 )" "23.49 ( 1.26 )" "0.15 ( 0.05 )" 28.34 0.75 0.83 23.49 0.15 "elnet" +50 1000 0.9 20 0.02 "0.65 ( 0.01 )" "49.08 ( 6.86 )" "4.29 ( 0.09 )" 49.79 0.93 0.65 49.08 4.29 "elnet" +100 1000 0.9 10 0.05 "0.66 ( 0.01 )" "32.99 ( 5.22 )" "3.81 ( 0.09 )" 34.18 0.8 0.66 32.99 3.81 "elnet" +500 1000 0.9 2 0.11 "0.8 ( 0 )" "30.91 ( 2.22 )" "1.52 ( 0.12 )" 34.39 0.78 0.8 30.91 1.52 "elnet" +1000 1000 0.9 1 0.14 "0.83 ( 0 )" "35.66 ( 1.98 )" "0.23 ( 0.06 )" 40.43 0.82 0.83 35.66 0.23 "elnet" +50 50 0.1 1 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 50 0.1 0.5 0.1 "1 ( 0 )" "2.05 ( 0.14 )" "4.71 ( 0.08 )" 3.31 0.56 1 2.05 4.71 "rf" +500 50 0.1 0.1 0.5 "1 ( 0 )" "1.4 ( 0.12 )" "2.4 ( 0.08 )" 5 0.25 1 1.4 2.4 "rf" +1000 50 0.1 0.05 0.69 "1 ( 0 )" "0.98 ( 0.09 )" "1.2 ( 0.08 )" 5.78 0.15 1 0.98 1.2 "rf" +50 100 0.1 2 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 100 0.1 1 0.06 "1 ( 0 )" "3.95 ( 0.21 )" "4.66 ( 0.08 )" 5.29 0.72 1 3.95 4.66 "rf" +500 100 0.1 0.2 0.35 "1 ( 0 )" "3.91 ( 0.21 )" "2.17 ( 0.08 )" 7.74 0.48 1 3.91 2.17 "rf" +1000 100 0.1 0.1 0.51 "1 ( 0 )" "2.97 ( 0.15 )" "1.29 ( 0.07 )" 7.68 0.36 1 2.97 1.29 "rf" +50 500 0.1 10 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 500 0.1 5 0.01 "1 ( 0 )" "24.57 ( 0.55 )" "4.72 ( 0.08 )" 25.85 0.95 1 24.57 4.72 "rf" +500 500 0.1 1 0.09 "1 ( 0 )" "23.57 ( 0.51 )" "2.43 ( 0.1 )" 27.14 0.86 1 23.57 2.43 "rf" +1000 500 0.1 0.5 0.14 "1 ( 0 )" "22.61 ( 0.5 )" "1.31 ( 0.08 )" 27.3 0.82 1 22.61 1.31 "rf" +50 1000 0.1 20 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 1000 0.1 10 0.01 "1 ( 0 )" "48.35 ( 0.66 )" "4.88 ( 0.08 )" 49.47 0.98 1 48.35 4.88 "rf" +500 1000 0.1 2 0.04 "1 ( 0 )" "48.59 ( 0.73 )" "2.71 ( 0.1 )" 51.88 0.94 1 48.59 2.71 "rf" +1000 1000 0.1 1 0.06 "1 ( 0 )" "46.74 ( 0.64 )" "1.75 ( 0.09 )" 50.99 0.92 1 46.74 1.75 "rf" +50 50 0.3 1 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 50 0.3 0.5 0.1 "1 ( 0 )" "1.68 ( 0.12 )" "4.86 ( 0.08 )" 2.81 0.54 1 1.68 4.86 "rf" +500 50 0.3 0.1 0.44 "1 ( 0 )" "1.57 ( 0.12 )" "2.74 ( 0.08 )" 4.83 0.3 1 1.57 2.74 "rf" +1000 50 0.3 0.05 0.62 "1 ( 0 )" "1.33 ( 0.1 )" "1.44 ( 0.08 )" 5.89 0.21 1 1.33 1.44 "rf" +50 100 0.3 2 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 100 0.3 1 0.05 "1 ( 0 )" "4.45 ( 0.2 )" "4.85 ( 0.08 )" 5.6 0.78 1 4.45 4.85 "rf" +500 100 0.3 0.2 0.33 "1 ( 0 )" "3.36 ( 0.19 )" "2.57 ( 0.09 )" 6.79 0.46 1 3.36 2.57 "rf" +1000 100 0.3 0.1 0.47 "1 ( 0 )" "3.43 ( 0.17 )" "1.61 ( 0.09 )" 7.82 0.41 1 3.43 1.61 "rf" +50 500 0.3 10 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 500 0.3 5 0.01 "1 ( 0 )" "23.69 ( 0.53 )" "4.87 ( 0.08 )" 24.82 0.95 1 23.69 4.87 "rf" +500 500 0.3 1 0.07 "1 ( 0 )" "22.84 ( 0.44 )" "3.11 ( 0.09 )" 25.73 0.89 1 22.84 3.11 "rf" +1000 500 0.3 0.5 0.13 "1 ( 0 )" "22.24 ( 0.43 )" "1.77 ( 0.09 )" 26.47 0.84 1 22.24 1.77 "rf" +50 1000 0.3 20 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 1000 0.3 10 0.01 "1 ( 0 )" "48.06 ( 0.76 )" "5.02 ( 0.08 )" 49.04 0.98 1 48.06 5.02 "rf" +500 1000 0.3 2 0.04 "1 ( 0 )" "47.71 ( 0.73 )" "2.98 ( 0.09 )" 50.73 0.94 1 47.71 2.98 "rf" +1000 1000 0.3 1 0.06 "1 ( 0 )" "47.11 ( 0.84 )" "2.03 ( 0.09 )" 51.08 0.92 1 47.11 2.03 "rf" +50 50 0.5 1 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 50 0.5 0.5 0.15 "1 ( 0 )" "1.88 ( 0.15 )" "4.77 ( 0.08 )" 3.1 0.54 1 1.88 4.77 "rf" +500 50 0.5 0.1 0.44 "1 ( 0 )" "1.83 ( 0.11 )" "2.9 ( 0.09 )" 4.93 0.35 1 1.83 2.9 "rf" +1000 50 0.5 0.05 0.61 "1 ( 0 )" "1.9 ( 0.11 )" "2.06 ( 0.08 )" 5.84 0.31 1 1.9 2.06 "rf" +50 100 0.5 2 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 100 0.5 1 0.08 "1 ( 0 )" "4.6 ( 0.23 )" "4.71 ( 0.07 )" 5.89 0.75 1 4.6 4.71 "rf" +500 100 0.5 0.2 0.31 "1 ( 0 )" "4.2 ( 0.22 )" "3.01 ( 0.08 )" 7.19 0.55 1 4.2 3.01 "rf" +1000 100 0.5 0.1 0.5 "1 ( 0 )" "3.78 ( 0.18 )" "1.84 ( 0.08 )" 7.94 0.46 1 3.78 1.84 "rf" +50 500 0.5 10 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 500 0.5 5 0.01 "1 ( 0 )" "23.59 ( 0.56 )" "4.98 ( 0.08 )" 24.61 0.96 1 23.59 4.98 "rf" +500 500 0.5 1 0.07 "1 ( 0 )" "23.16 ( 0.45 )" "3.28 ( 0.08 )" 25.88 0.89 1 23.16 3.28 "rf" +1000 500 0.5 0.5 0.13 "1 ( 0 )" "22.83 ( 0.49 )" "2.29 ( 0.08 )" 26.54 0.86 1 22.83 2.29 "rf" +50 1000 0.5 20 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 1000 0.5 10 0.01 "1 ( 0 )" "46.65 ( 0.77 )" "4.98 ( 0.09 )" 47.67 0.98 1 46.65 4.98 "rf" +500 1000 0.5 2 0.04 "1 ( 0 )" "47.46 ( 0.83 )" "3.51 ( 0.08 )" 49.95 0.95 1 47.46 3.51 "rf" +1000 1000 0.5 1 0.06 "1 ( 0 )" "47.83 ( 0.8 )" "2.59 ( 0.08 )" 51.24 0.93 1 47.83 2.59 "rf" +50 50 0.7 1 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 50 0.7 0.5 0.16 "1 ( 0 )" "1.87 ( 0.14 )" "4.88 ( 0.08 )" 2.96 0.57 1 1.87 4.88 "rf" +500 50 0.7 0.1 0.45 "1 ( 0 )" "2.14 ( 0.13 )" "3.36 ( 0.08 )" 4.78 0.43 1 2.14 3.36 "rf" +1000 50 0.7 0.05 0.6 "1 ( 0 )" "2.66 ( 0.14 )" "2.27 ( 0.08 )" 6.39 0.39 1 2.66 2.27 "rf" +50 100 0.7 2 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 100 0.7 1 0.08 "1 ( 0 )" "4.36 ( 0.22 )" "4.8 ( 0.09 )" 5.56 0.77 1 4.36 4.8 "rf" +500 100 0.7 0.2 0.38 "1 ( 0 )" "4.03 ( 0.18 )" "3.1 ( 0.09 )" 6.93 0.56 1 4.03 3.1 "rf" +1000 100 0.7 0.1 0.5 "1 ( 0 )" "4.65 ( 0.22 )" "2 ( 0.07 )" 8.65 0.51 1 4.65 2 "rf" +50 500 0.7 10 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 500 0.7 5 0.02 "1 ( 0 )" "23.58 ( 0.53 )" "4.72 ( 0.09 )" 24.86 0.95 1 23.58 4.72 "rf" +500 500 0.7 1 0.1 "1 ( 0 )" "23.09 ( 0.56 )" "3.38 ( 0.09 )" 25.71 0.89 1 23.09 3.38 "rf" +1000 500 0.7 0.5 0.14 "1 ( 0 )" "23.33 ( 0.53 )" "2.58 ( 0.07 )" 26.75 0.87 1 23.33 2.58 "rf" +50 1000 0.7 20 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 1000 0.7 10 0.01 "1 ( 0 )" "46.8 ( 0.69 )" "5.13 ( 0.07 )" 47.67 0.98 1 46.8 5.13 "rf" +500 1000 0.7 2 0.05 "1 ( 0 )" "48.68 ( 0.77 )" "3.54 ( 0.08 )" 51.14 0.95 1 48.68 3.54 "rf" +1000 1000 0.7 1 0.07 "1 ( 0 )" "47.14 ( 0.7 )" "2.73 ( 0.07 )" 50.41 0.93 1 47.14 2.73 "rf" +50 50 0.9 1 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 50 0.9 0.5 0.12 "1 ( 0 )" "2.09 ( 0.16 )" "4.98 ( 0.09 )" 3.06 0.62 1 2.09 4.98 "rf" +500 50 0.9 0.1 0.45 "1 ( 0 )" "2.6 ( 0.13 )" "3.33 ( 0.08 )" 5.27 0.47 1 2.6 3.33 "rf" +1000 50 0.9 0.05 0.51 "1 ( 0 )" "3.48 ( 0.17 )" "2.35 ( 0.08 )" 7.13 0.47 1 3.48 2.35 "rf" +50 100 0.9 2 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 100 0.9 1 0.07 "1 ( 0 )" "4.4 ( 0.23 )" "4.96 ( 0.09 )" 5.43 0.81 1 4.4 4.96 "rf" +500 100 0.9 0.2 0.35 "1 ( 0 )" "4.57 ( 0.24 )" "3.5 ( 0.08 )" 7.07 0.62 1 4.57 3.5 "rf" +1000 100 0.9 0.1 0.37 "1 ( 0 )" "6.43 ( 0.28 )" "2.57 ( 0.08 )" 9.86 0.63 1 6.43 2.57 "rf" +50 500 0.9 10 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 500 0.9 5 0.01 "1 ( 0 )" "24.58 ( 0.66 )" "5.1 ( 0.09 )" 25.48 0.96 1 24.58 5.1 "rf" +500 500 0.9 1 0.08 "1 ( 0 )" "24.91 ( 0.57 )" "3.53 ( 0.09 )" 27.38 0.91 1 24.91 3.53 "rf" +1000 500 0.9 0.5 0.13 "1 ( 0 )" "24.53 ( 0.53 )" "2.84 ( 0.08 )" 27.69 0.88 1 24.53 2.84 "rf" +50 1000 0.9 20 NA "1 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1 0 6 "rf" +100 1000 0.9 10 0 "1 ( 0 )" "47.19 ( 0.96 )" "5.2 ( 0.08 )" 47.99 0.98 1 47.19 5.2 "rf" +500 1000 0.9 2 0.04 "1 ( 0 )" "48.11 ( 0.92 )" "3.78 ( 0.08 )" 50.33 0.95 1 48.11 3.78 "rf" +1000 1000 0.9 1 0.07 "1 ( 0 )" "49.47 ( 0.78 )" "2.97 ( 0.07 )" 52.5 0.94 1 49.47 2.97 "rf" +50 50 0.1 1 0.13 "0.97 ( 0 )" "14.84 ( 0.9 )" "0.93 ( 0.09 )" 19.91 0.7 0.97 14.84 0.93 "compLasso" +100 50 0.1 0.5 0.33 "0.93 ( 0 )" "7.19 ( 0.43 )" "0.49 ( 0.07 )" 12.7 0.53 0.93 7.19 0.49 "compLasso" +500 50 0.1 0.1 0.7 "0.9 ( 0 )" "1.93 ( 0.34 )" "0.16 ( 0.04 )" 7.77 0.16 0.9 1.93 0.16 "compLasso" +1000 50 0.1 0.05 0.79 "0.9 ( 0 )" "1.37 ( 0.42 )" "0.01 ( 0.01 )" 7.36 0.1 0.9 1.37 0.01 "compLasso" +50 100 0.1 2 0.07 "0.99 ( 0 )" "36.64 ( 2.16 )" "0.65 ( 0.07 )" 41.99 0.84 0.99 36.64 0.65 "compLasso" +100 100 0.1 1 0.2 "0.94 ( 0 )" "16.16 ( 1.22 )" "0.47 ( 0.06 )" 21.69 0.7 0.94 16.16 0.47 "compLasso" +500 100 0.1 0.2 0.36 "0.9 ( 0 )" "8.64 ( 1.35 )" "0.08 ( 0.03 )" 14.56 0.37 0.9 8.64 0.08 "compLasso" +1000 100 0.1 0.1 0.47 "0.9 ( 0 )" "5.83 ( 1.4 )" "0.02 ( 0.01 )" 11.81 0.22 0.9 5.83 0.02 "compLasso" +50 500 0.1 10 0.01 "1 ( 0 )" "248.06 ( 7.56 )" "0.56 ( 0.07 )" 253.5 0.98 1 248.06 0.56 "compLasso" +100 500 0.1 5 0.03 "1 ( 0 )" "132.04 ( 7.47 )" "0.33 ( 0.05 )" 137.71 0.95 1 132.04 0.33 "compLasso" +500 500 0.1 1 0.34 "0.91 ( 0 )" "12.55 ( 1.81 )" "0.04 ( 0.02 )" 18.51 0.52 0.91 12.55 0.04 "compLasso" +1000 500 0.1 0.5 0.69 "0.9 ( 0 )" "3.02 ( 0.6 )" "0.01 ( 0.01 )" 9.01 0.22 0.9 3.02 0.01 "compLasso" +50 1000 0.1 20 0.01 "1 ( 0 )" "398.98 ( 6.9 )" "0.8 ( 0.08 )" 404.18 0.99 1 398.98 0.8 "compLasso" +100 1000 0.1 10 0.02 "1 ( 0 )" "296.19 ( 8.29 )" "0.35 ( 0.05 )" 301.84 0.98 1 296.19 0.35 "compLasso" +500 1000 0.1 2 0.39 "0.9 ( 0 )" "10.2 ( 0.98 )" "0.1 ( 0.03 )" 16.1 0.52 0.9 10.2 0.1 "compLasso" +1000 1000 0.1 1 0.83 "0.9 ( 0 )" "1.76 ( 0.26 )" "0.02 ( 0.01 )" 7.74 0.18 0.9 1.76 0.02 "compLasso" +50 50 0.3 1 0.14 "0.96 ( 0 )" "13.96 ( 0.83 )" "1.01 ( 0.09 )" 18.95 0.7 0.96 13.96 1.01 "compLasso" +100 50 0.3 0.5 0.25 "0.92 ( 0 )" "9.38 ( 0.67 )" "0.68 ( 0.07 )" 14.7 0.58 0.92 9.38 0.68 "compLasso" +500 50 0.3 0.1 0.44 "0.89 ( 0 )" "5.43 ( 0.9 )" "0.14 ( 0.03 )" 11.29 0.3 0.89 5.43 0.14 "compLasso" +1000 50 0.3 0.05 0.48 "0.88 ( 0 )" "5.03 ( 1 )" "0.09 ( 0.03 )" 10.94 0.23 0.88 5.03 0.09 "compLasso" +50 100 0.3 2 0.06 "0.99 ( 0 )" "36.33 ( 2.24 )" "0.9 ( 0.09 )" 41.43 0.85 0.99 36.33 0.9 "compLasso" +100 100 0.3 1 0.19 "0.93 ( 0 )" "16.08 ( 0.95 )" "0.75 ( 0.07 )" 21.33 0.72 0.93 16.08 0.75 "compLasso" +500 100 0.3 0.2 0.37 "0.89 ( 0 )" "8.66 ( 1.15 )" "0.11 ( 0.03 )" 14.55 0.42 0.89 8.66 0.11 "compLasso" +1000 100 0.3 0.1 0.39 "0.88 ( 0 )" "8.45 ( 1.17 )" "0.12 ( 0.03 )" 14.33 0.39 0.88 8.45 0.12 "compLasso" +50 500 0.3 10 0.01 "1 ( 0 )" "228.37 ( 7.07 )" "0.6 ( 0.08 )" 233.77 0.97 1 228.37 0.6 "compLasso" +100 500 0.3 5 0.04 "0.99 ( 0 )" "114.53 ( 5.78 )" "0.43 ( 0.06 )" 120.1 0.94 0.99 114.53 0.43 "compLasso" +500 500 0.3 1 0.31 "0.89 ( 0 )" "13.64 ( 2.08 )" "0.2 ( 0.04 )" 19.44 0.57 0.89 13.64 0.2 "compLasso" +1000 500 0.3 0.5 0.54 "0.88 ( 0 )" "6.3 ( 1.15 )" "0.09 ( 0.04 )" 12.21 0.38 0.88 6.3 0.09 "compLasso" +50 1000 0.3 20 0.01 "1 ( 0 )" "412.73 ( 7.91 )" "0.88 ( 0.1 )" 417.85 0.99 1 412.73 0.88 "compLasso" +100 1000 0.3 10 0.02 "1 ( 0 )" "279.68 ( 7.94 )" "0.45 ( 0.07 )" 285.23 0.98 1 279.68 0.45 "compLasso" +500 1000 0.3 2 0.3 "0.89 ( 0 )" "14.7 ( 1.84 )" "0.26 ( 0.05 )" 20.44 0.6 0.89 14.7 0.26 "compLasso" +1000 1000 0.3 1 0.73 "0.88 ( 0 )" "3.45 ( 0.41 )" "0.18 ( 0.04 )" 9.27 0.3 0.88 3.45 0.18 "compLasso" +50 50 0.5 1 0.13 "0.94 ( 0 )" "12.95 ( 0.79 )" "1.38 ( 0.1 )" 17.57 0.7 0.94 12.95 1.38 "compLasso" +100 50 0.5 0.5 0.23 "0.9 ( 0 )" "8.65 ( 0.57 )" "1.15 ( 0.08 )" 13.5 0.59 0.9 8.65 1.15 "compLasso" +500 50 0.5 0.1 0.39 "0.86 ( 0 )" "4.81 ( 0.77 )" "1.01 ( 0.1 )" 9.8 0.3 0.86 4.81 1.01 "compLasso" +1000 50 0.5 0.05 0.37 "0.86 ( 0 )" "4.69 ( 1.01 )" "1.17 ( 0.11 )" 9.52 0.22 0.86 4.69 1.17 "compLasso" +50 100 0.5 2 0.07 "0.98 ( 0 )" "30.24 ( 1.94 )" "1.32 ( 0.11 )" 34.92 0.84 0.98 30.24 1.32 "compLasso" +100 100 0.5 1 0.17 "0.91 ( 0 )" "15.59 ( 1.05 )" "1.24 ( 0.08 )" 20.35 0.73 0.91 15.59 1.24 "compLasso" +500 100 0.5 0.2 0.34 "0.87 ( 0 )" "6.45 ( 1.28 )" "1.24 ( 0.1 )" 11.21 0.29 0.87 6.45 1.24 "compLasso" +1000 100 0.5 0.1 0.28 "0.86 ( 0 )" "8.33 ( 1.58 )" "1.21 ( 0.1 )" 13.12 0.3 0.86 8.33 1.21 "compLasso" +50 500 0.5 10 0.01 "1 ( 0 )" "211.18 ( 7.59 )" "0.85 ( 0.09 )" 216.33 0.97 1 211.18 0.85 "compLasso" +100 500 0.5 5 0.05 "0.98 ( 0 )" "84.58 ( 6.44 )" "0.94 ( 0.1 )" 89.64 0.93 0.98 84.58 0.94 "compLasso" +500 500 0.5 1 0.27 "0.86 ( 0 )" "13.6 ( 1.48 )" "0.91 ( 0.09 )" 18.69 0.58 0.86 13.6 0.91 "compLasso" +1000 500 0.5 0.5 0.51 "0.86 ( 0 )" "3.77 ( 0.58 )" "1.52 ( 0.12 )" 8.25 0.28 0.86 3.77 1.52 "compLasso" +50 1000 0.5 20 0.01 "1 ( 0 )" "394.36 ( 8.82 )" "1.1 ( 0.1 )" 399.26 0.99 1 394.36 1.1 "compLasso" +100 1000 0.5 10 0.02 "1 ( 0 )" "223.93 ( 9.26 )" "0.61 ( 0.08 )" 229.32 0.97 1 223.93 0.61 "compLasso" +500 1000 0.5 2 0.3 "0.87 ( 0 )" "12.27 ( 1.53 )" "0.94 ( 0.1 )" 17.33 0.54 0.87 12.27 0.94 "compLasso" +1000 1000 0.5 1 0.59 "0.86 ( 0 )" "3.92 ( 0.7 )" "1.07 ( 0.11 )" 8.85 0.3 0.86 3.92 1.07 "compLasso" +50 50 0.7 1 0.16 "0.92 ( 0 )" "10.22 ( 0.71 )" "1.97 ( 0.1 )" 14.25 0.68 0.92 10.22 1.97 "compLasso" +100 50 0.7 0.5 0.23 "0.88 ( 0 )" "7.69 ( 0.73 )" "2.02 ( 0.08 )" 11.67 0.58 0.88 7.69 2.02 "compLasso" +500 50 0.7 0.1 0.67 "0.86 ( 0 )" "1.32 ( 0.25 )" "2.42 ( 0.06 )" 4.9 0.19 0.86 1.32 2.42 "compLasso" +1000 50 0.7 0.05 0.74 "0.85 ( 0 )" "0.84 ( 0.14 )" "2.48 ( 0.06 )" 4.36 0.13 0.85 0.84 2.48 "compLasso" +50 100 0.7 2 0.07 "0.96 ( 0 )" "24.54 ( 1.62 )" "2.08 ( 0.11 )" 28.46 0.84 0.96 24.54 2.08 "compLasso" +100 100 0.7 1 0.16 "0.89 ( 0 )" "14.69 ( 1.28 )" "1.85 ( 0.08 )" 18.84 0.71 0.89 14.69 1.85 "compLasso" +500 100 0.7 0.2 0.55 "0.86 ( 0 )" "2.19 ( 0.64 )" "2.33 ( 0.07 )" 5.86 0.18 0.86 2.19 2.33 "compLasso" +1000 100 0.7 0.1 0.81 "0.85 ( 0 )" "0.51 ( 0.1 )" "2.56 ( 0.05 )" 3.95 0.09 0.85 0.51 2.56 "compLasso" +50 500 0.7 10 0.02 "1 ( 0 )" "161.23 ( 7.83 )" "1.29 ( 0.1 )" 165.94 0.96 1 161.23 1.29 "compLasso" +100 500 0.7 5 0.06 "0.96 ( 0 )" "60.05 ( 4.29 )" "1.63 ( 0.12 )" 64.42 0.92 0.96 60.05 1.63 "compLasso" +500 500 0.7 1 0.5 "0.85 ( 0 )" "3.12 ( 1.31 )" "2.68 ( 0.07 )" 6.44 0.19 0.85 3.12 2.68 "compLasso" +1000 500 0.7 0.5 0.89 "0.85 ( 0 )" "0.39 ( 0.06 )" "2.88 ( 0.04 )" 3.51 0.09 0.85 0.39 2.88 "compLasso" +50 1000 0.7 20 0.01 "1 ( 0 )" "363.91 ( 11.45 )" "1.39 ( 0.1 )" 368.52 0.99 1 363.91 1.39 "compLasso" +100 1000 0.7 10 0.03 "0.99 ( 0 )" "145.9 ( 7.62 )" "1.24 ( 0.11 )" 150.66 0.96 0.99 145.9 1.24 "compLasso" +500 1000 0.7 2 0.61 "0.85 ( 0 )" "2.38 ( 0.4 )" "2.7 ( 0.06 )" 5.68 0.27 0.85 2.38 2.7 "compLasso" +1000 1000 0.7 1 0.87 "0.85 ( 0 )" "0.65 ( 0.08 )" "2.87 ( 0.04 )" 3.78 0.14 0.85 0.65 2.87 "compLasso" +50 50 0.9 1 0.14 "0.84 ( 0.01 )" "9.98 ( 0.78 )" "2.68 ( 0.11 )" 13.3 0.7 0.84 9.98 2.68 "compLasso" +100 50 0.9 0.5 0.25 "0.8 ( 0 )" "6.57 ( 0.7 )" "2.73 ( 0.09 )" 9.84 0.58 0.8 6.57 2.73 "compLasso" +500 50 0.9 0.1 0.52 "0.8 ( 0 )" "2.9 ( 0.5 )" "2.75 ( 0.07 )" 6.15 0.33 0.8 2.9 2.75 "compLasso" +1000 50 0.9 0.05 0.7 "0.8 ( 0 )" "1.88 ( 0.19 )" "2.79 ( 0.05 )" 5.09 0.3 0.8 1.88 2.79 "compLasso" +50 100 0.9 2 0.1 "0.87 ( 0.01 )" "15.93 ( 1 )" "2.88 ( 0.1 )" 19.05 0.81 0.87 15.93 2.88 "compLasso" +100 100 0.9 1 0.14 "0.81 ( 0 )" "14.34 ( 1.4 )" "2.75 ( 0.1 )" 17.59 0.73 0.81 14.34 2.75 "compLasso" +500 100 0.9 0.2 0.56 "0.8 ( 0 )" "3.51 ( 0.44 )" "2.86 ( 0.04 )" 6.65 0.4 0.8 3.51 2.86 "compLasso" +1000 100 0.9 0.1 0.57 "0.8 ( 0 )" "3.18 ( 0.59 )" "2.86 ( 0.04 )" 6.32 0.34 0.8 3.18 2.86 "compLasso" +50 500 0.9 10 0.02 "0.99 ( 0 )" "95.52 ( 6.42 )" "2.37 ( 0.15 )" 99.15 0.95 0.99 95.52 2.37 "compLasso" +100 500 0.9 5 0.04 "0.88 ( 0 )" "53.08 ( 3.93 )" "2.8 ( 0.12 )" 56.28 0.93 0.88 53.08 2.8 "compLasso" +500 500 0.9 1 0.4 "0.79 ( 0 )" "6.75 ( 0.73 )" "2.76 ( 0.07 )" 9.99 0.56 0.79 6.75 2.76 "compLasso" +1000 500 0.9 0.5 0.73 "0.8 ( 0 )" "2.48 ( 0.28 )" "2.79 ( 0.05 )" 5.69 0.37 0.8 2.48 2.79 "compLasso" +50 1000 0.9 20 0.01 "1 ( 0 )" "201.98 ( 10.15 )" "2.34 ( 0.16 )" 205.64 0.98 1 201.98 2.34 "compLasso" +100 1000 0.9 10 0.03 "0.95 ( 0 )" "70.81 ( 4.4 )" "3.05 ( 0.12 )" 73.76 0.96 0.95 70.81 3.05 "compLasso" +500 1000 0.9 2 0.38 "0.79 ( 0 )" "7.71 ( 1.09 )" "2.85 ( 0.06 )" 10.86 0.59 0.79 7.71 2.85 "compLasso" +1000 1000 0.9 1 0.76 "0.8 ( 0 )" "2.41 ( 0.17 )" "2.77 ( 0.07 )" 5.64 0.39 0.8 2.41 2.77 "compLasso" diff --git a/simulations/results_summary_cts/sim_block_compLasso.txt b/simulations/results_summary_cts/sim_block_compLasso.txt new file mode 100755 index 0000000..72e2f9b --- /dev/null +++ b/simulations/results_summary_cts/sim_block_compLasso.txt @@ -0,0 +1,81 @@ +"N" "P" "Corr" "Ratio" "Stab" "MSE" "FP" "FN" "num_select" "FDR" "MSE_mean" "FP_mean" "FN_mean" +50 50 "0.1" 1 0.03 "0.36 ( 0.01 )" "2.8 ( 0.36 )" "5.01 ( 0.09 )" 3.79 "0.62" 0.36 2.8 5.01 +100 50 "0.1" 0.5 0.1 "0.32 ( 0.01 )" "4.96 ( 0.55 )" "3.77 ( 0.14 )" 7.19 "0.55" 0.32 4.96 3.77 +500 50 "0.1" 0.1 0.26 "0.28 ( 0 )" "8.81 ( 0.4 )" "0.78 ( 0.08 )" 14.03 "0.6" 0.28 8.81 0.78 +1000 50 "0.1" 0.05 0.31 "0.27 ( 0 )" "8.37 ( 0.37 )" "0.24 ( 0.06 )" 14.13 "0.56" 0.27 8.37 0.24 +50 100 "0.1" 2 0.04 "0.37 ( 0.02 )" "2.54 ( 0.37 )" "5.22 ( 0.08 )" 3.32 "0.63" 0.37 2.54 5.22 +100 100 "0.1" 1 0.07 "0.35 ( 0.01 )" "3.99 ( 0.57 )" "4.63 ( 0.1 )" 5.36 "0.56" 0.35 3.99 4.63 +500 100 "0.1" 0.2 0.18 "0.29 ( 0 )" "13.62 ( 0.62 )" "1.22 ( 0.11 )" 18.4 "0.69" 0.29 13.6 1.22 +1000 100 "0.1" 0.1 0.23 "0.28 ( 0 )" "13.35 ( 0.59 )" "0.47 ( 0.07 )" 18.88 "0.67" 0.28 13.3 0.47 +50 500 "0.1" 10 0.01 "0.36 ( 0.02 )" "3.53 ( 0.44 )" "5.62 ( 0.07 )" 3.91 "0.85" 0.36 3.53 5.62 +100 500 "0.1" 5 0.05 "0.36 ( 0.01 )" "2.58 ( 0.45 )" "5.29 ( 0.08 )" 3.29 "0.64" 0.36 2.58 5.29 +500 500 "0.1" 1 0.36 "0.32 ( 0.01 )" "2.42 ( 0.56 )" "3.74 ( 0.08 )" 4.68 "0.29" 0.32 2.42 3.74 +1000 500 "0.1" 0.5 0.14 "0.3 ( 0 )" "19.4 ( 1.74 )" "2.05 ( 0.12 )" 23.35 "0.66" 0.3 19.4 2.05 +50 1000 "0.1" 20 0 "0.37 ( 0.02 )" "4.53 ( 0.54 )" "5.71 ( 0.06 )" 4.82 "0.91" 0.37 4.53 5.71 +100 1000 "0.1" 10 0.02 "0.36 ( 0.01 )" "4.14 ( 0.72 )" "5.4 ( 0.08 )" 4.74 "0.78" 0.36 4.14 5.4 +500 1000 "0.1" 2 0.52 "0.34 ( 0 )" "0.93 ( 0.19 )" "3.83 ( 0.06 )" 3.1 "0.21" 0.34 0.93 3.83 +1000 1000 "0.1" 1 0.21 "0.31 ( 0 )" "8.59 ( 1.37 )" "2.96 ( 0.1 )" 11.63 "0.36" 0.31 8.59 2.96 +50 50 "0.3" 1 0.32 "0.8 ( 0.05 )" "5.34 ( 0.32 )" "1.21 ( 0.12 )" 10.13 "0.48" 0.8 5.34 1.21 +100 50 "0.3" 0.5 0.5 "0.52 ( 0.02 )" "4.42 ( 0.52 )" "0.1 ( 0.03 )" 10.32 "0.33" 0.52 4.42 0.1 +500 50 "0.3" 0.1 0.91 "0.55 ( 0.02 )" "0.53 ( 0.16 )" "0 ( 0 )" 6.53 "0.05" 0.55 0.53 0 +1000 50 "0.3" 0.05 0.89 "0.56 ( 0.02 )" "0.66 ( 0.18 )" "0 ( 0 )" 6.66 "0.06" 0.56 0.66 0 +50 100 "0.3" 2 0.27 "0.94 ( 0.05 )" "6 ( 0.34 )" "1.93 ( 0.14 )" 10.07 "0.54" 0.94 6 1.93 +100 100 "0.3" 1 0.47 "0.53 ( 0.02 )" "5.24 ( 0.45 )" "0.24 ( 0.06 )" 11 "0.4" 0.53 5.24 0.24 +500 100 "0.3" 0.2 0.91 "0.54 ( 0.02 )" "0.54 ( 0.15 )" "0 ( 0 )" 6.54 "0.06" 0.54 0.54 0 +1000 100 "0.3" 0.1 0.92 "0.55 ( 0.02 )" "0.51 ( 0.15 )" "0 ( 0 )" 6.51 "0.05" 0.55 0.51 0 +50 500 "0.3" 10 0.13 "1.31 ( 0.06 )" "5.44 ( 0.44 )" "3.96 ( 0.15 )" 7.48 "0.69" 1.31 5.44 3.96 +100 500 "0.3" 5 0.3 "0.73 ( 0.03 )" "9 ( 0.76 )" "0.99 ( 0.12 )" 14.01 "0.52" 0.73 6 0.99 +500 500 "0.3" 1 0.95 "0.55 ( 0.01 )" "0.31 ( 0.08 )" "0 ( 0 )" 6.31 "0.04" 0.55 0.31 0 +1000 500 "0.3" 0.5 0.92 "0.57 ( 0.02 )" "0.49 ( 0.14 )" "0 ( 0 )" 6.49 "0.05" 0.57 0.49 0 +50 1000 "0.3" 20 0.07 "1.55 ( 0.08 )" "3.96 ( 0.47 )" "4.74 ( 0.14 )" 5.22 "0.68" 1.55 3.96 4.74 +100 1000 "0.3" 10 0.25 "0.84 ( 0.03 )" "9.51 ( 0.77 )" "1.58 ( 0.11 )" 13.93 "0.58" 0.84 9.51 1.58 +500 1000 "0.3" 2 0.92 "0.56 ( 0.01 )" "0.52 ( 0.14 )" "0 ( 0 )" 6.52 "0.05" 0.56 0.52 0 +1000 1000 "0.3" 1 0.95 "0.56 ( 0.02 )" "0.29 ( 0.08 )" "0 ( 0 )" 6.29 "0.03" 0.56 0.29 0 +50 50 "0.5" 1 0.42 "0.77 ( 0.04 )" "5.49 ( 0.31 )" "0.25 ( 0.06 )" 11.24 "0.44" 0.77 5.49 0.25 +100 50 "0.5" 0.5 0.68 "0.6 ( 0.03 )" "2.34 ( 0.31 )" "0.01 ( 0.01 )" 8.33 "0.21" 0.6 2.34 0.01 +500 50 "0.5" 0.1 0.93 "0.8 ( 0.03 )" "0.42 ( 0.12 )" "0 ( 0 )" 6.42 "0.05" 0.8 0.42 0 +1000 50 "0.5" 0.05 0.88 "0.78 ( 0.03 )" "0.7 ( 0.21 )" "0 ( 0 )" 6.7 "0.07" 0.78 0.7 0 +50 100 "0.5" 2 0.36 "1.03 ( 0.07 )" "5.95 ( 0.33 )" "0.96 ( 0.11 )" 10.99 "0.49" 1.03 5.95 0.96 +100 100 "0.5" 1 0.65 "0.64 ( 0.03 )" "2.9 ( 0.32 )" "0.03 ( 0.02 )" 8.87 "0.27" 0.64 2.9 0.03 +500 100 "0.5" 0.2 0.91 "0.76 ( 0.03 )" "0.56 ( 0.19 )" "0 ( 0 )" 6.56 "0.05" 0.76 0.56 0 +1000 100 "0.5" 0.1 0.93 "0.8 ( 0.03 )" "0.4 ( 0.09 )" "0 ( 0 )" 6.4 "0.05" 0.8 0.4 0 +50 500 "0.5" 10 0.22 "1.93 ( 0.1 )" "5.08 ( 0.41 )" "3.23 ( 0.15 )" 7.85 "0.55" 1.93 5.08 3.23 +100 500 "0.5" 5 0.45 "0.79 ( 0.03 )" "6.21 ( 0.54 )" "0.33 ( 0.07 )" 11.88 "0.43" 0.79 6.21 0.33 +500 500 "0.5" 1 0.94 "0.83 ( 0.03 )" "0.36 ( 0.11 )" "0 ( 0 )" 6.36 "0.04" 0.83 0.36 0 +1000 500 "0.5" 0.5 0.97 "0.87 ( 0.03 )" "0.19 ( 0.06 )" "0 ( 0 )" 6.19 "0.02" 0.87 0.19 0 +50 1000 "0.5" 20 0.15 "2.1 ( 0.11 )" "5.84 ( 0.49 )" "3.77 ( 0.14 )" 8.07 "0.66" 2.1 5.84 3.77 +100 1000 "0.5" 10 0.35 "0.91 ( 0.04 )" "8.88 ( 0.73 )" "0.52 ( 0.09 )" 14.36 "0.51" 0.91 8.88 0.52 +500 1000 "0.5" 2 0.98 "0.86 ( 0.02 )" "0.13 ( 0.05 )" "0 ( 0 )" 6.13 "0.02" 0.86 0.13 0 +1000 1000 "0.5" 1 0.95 "0.85 ( 0.02 )" "0.3 ( 0.11 )" "0 ( 0 )" 6.3 "0.03" 0.85 0.3 0 +50 50 "0.7" 1 0.49 "0.8 ( 0.06 )" "4.27 ( 0.31 )" "0.24 ( 0.06 )" 10.03 "0.37" 0.8 4.27 0.24 +100 50 "0.7" 0.5 0.75 "0.75 ( 0.03 )" "1.71 ( 0.28 )" "0 ( 0 )" 7.71 "0.16" 0.75 1.71 0 +500 50 "0.7" 0.1 0.9 "1 ( 0.04 )" "0.58 ( 0.19 )" "0 ( 0 )" 6.58 "0.06" 1 0.58 0 +1000 50 "0.7" 0.05 0.92 "0.98 ( 0.04 )" "0.43 ( 0.09 )" "0 ( 0 )" 6.43 "0.05" 0.98 0.43 0 +50 100 "0.7" 2 0.42 "1.14 ( 0.08 )" "5.46 ( 0.32 )" "0.55 ( 0.09 )" 10.91 "0.46" 1.14 5.46 0.55 +100 100 "0.7" 1 0.69 "0.82 ( 0.04 )" "2.46 ( 0.41 )" "0 ( 0 )" 8.46 "0.21" 0.82 2.46 0 +500 100 "0.7" 0.2 0.89 "1.01 ( 0.04 )" "0.68 ( 0.23 )" "0 ( 0 )" 6.68 "0.06" 1.01 0.68 0 +1000 100 "0.7" 0.1 0.94 "1.08 ( 0.04 )" "0.36 ( 0.09 )" "0 ( 0 )" 6.36 "0.04" 1.08 0.36 0 +50 500 "0.7" 10 0.26 "2.76 ( 0.17 )" "5.16 ( 0.4 )" "2.65 ( 0.15 )" 8.51 "0.51" 2.76 5.16 2.65 +100 500 "0.7" 5 0.52 "0.87 ( 0.03 )" "5.39 ( 0.52 )" "0.04 ( 0.02 )" 11.35 "0.39" 0.87 5.39 0.04 +500 500 "0.7" 1 0.94 "1.05 ( 0.04 )" "0.35 ( 0.1 )" "0 ( 0 )" 6.35 "0.04" 1.05 0.35 0 +1000 500 "0.7" 0.5 0.98 "1.14 ( 0.04 )" "0.14 ( 0.04 )" "0 ( 0 )" 6.14 "0.02" 1.14 0.14 0 +50 1000 "0.7" 20 0.2 "3.02 ( 0.16 )" "5.41 ( 0.43 )" "3.39 ( 0.13 )" 8.02 "0.58" 3.02 5.41 3.39 +100 1000 "0.7" 10 0.45 "0.91 ( 0.04 )" "6.6 ( 0.53 )" "0.2 ( 0.05 )" 12.4 "0.45" 0.91 6.6 0.2 +500 1000 "0.7" 2 0.95 "1.04 ( 0.04 )" "0.31 ( 0.1 )" "0 ( 0 )" 6.31 "0.04" 1.04 0.31 0 +1000 1000 "0.7" 1 0.97 "1.13 ( 0.04 )" "0.21 ( 0.07 )" "0 ( 0 )" 6.21 "0.03" 1.13 0.21 0 +50 50 "0.9" 1 0.48 "0.92 ( 0.07 )" "4.7 ( 0.32 )" "0.14 ( 0.04 )" 10.56 "0.38" 0.92 4.7 0.14 +100 50 "0.9" 0.5 0.76 "0.94 ( 0.05 )" "1.59 ( 0.25 )" "0 ( 0 )" 7.59 "0.15" 0.94 1.59 0 +500 50 "0.9" 0.1 0.92 "1.15 ( 0.06 )" "0.47 ( 0.11 )" "0 ( 0 )" 6.47 "0.05" 1.15 0.47 0 +1000 50 "0.9" 0.05 0.89 "1.28 ( 0.05 )" "0.62 ( 0.19 )" "0 ( 0 )" 6.62 "0.06" 1.28 0.62 0 +50 100 "0.9" 2 0.42 "1.28 ( 0.08 )" "5.86 ( 0.29 )" "0.47 ( 0.09 )" 11.39 "0.48" 1.28 5.86 0.47 +100 100 "0.9" 1 0.81 "0.94 ( 0.04 )" "1.34 ( 0.23 )" "0 ( 0 )" 7.34 "0.14" 0.94 1.34 0 +500 100 "0.9" 0.2 0.93 "1.16 ( 0.05 )" "0.43 ( 0.13 )" "0 ( 0 )" 6.43 "0.05" 1.16 0.43 0 +1000 100 "0.9" 0.1 0.94 "1.32 ( 0.05 )" "0.34 ( 0.1 )" "0 ( 0 )" 6.34 "0.04" 1.32 0.34 0 +50 500 "0.9" 10 0.25 "3.06 ( 0.18 )" "5.42 ( 0.4 )" "2.69 ( 0.15 )" 8.73 "0.54" 3.06 5.42 2.69 +100 500 "0.9" 5 0.58 "0.97 ( 0.04 )" "4.2 ( 0.49 )" "0.02 ( 0.02 )" 10.18 "0.31" 0.97 4.2 0.02 +500 500 "0.9" 1 0.93 "1.27 ( 0.05 )" "0.44 ( 0.18 )" "0 ( 0 )" 6.44 "0.04" 1.27 0.44 0 +1000 500 "0.9" 0.5 0.96 "1.31 ( 0.05 )" "0.23 ( 0.06 )" "0 ( 0 )" 6.23 "0.03" 1.31 0.23 0 +50 1000 "0.9" 20 0.23 "3.37 ( 0.19 )" "5.29 ( 0.41 )" "3.13 ( 0.15 )" 8.16 "0.57" 3.37 5.29 3.13 +100 1000 "0.9" 10 0.56 "1.14 ( 0.05 )" "4.56 ( 0.38 )" "0.07 ( 0.03 )" 10.49 "0.37" 1.14 4.56 0.07 +500 1000 "0.9" 2 0.96 "1.28 ( 0.04 )" "0.27 ( 0.11 )" "0 ( 0 )" 6.27 "0.03" 1.28 0.27 0 +1000 1000 "0.9" 1 0.95 "1.35 ( 0.05 )" "0.29 ( 0.09 )" "0 ( 0 )" 6.29 "0.03" 1.35 0.29 0 diff --git a/simulations/results_summary_cts/sim_block_elnet.txt b/simulations/results_summary_cts/sim_block_elnet.txt new file mode 100755 index 0000000..92b3236 --- /dev/null +++ b/simulations/results_summary_cts/sim_block_elnet.txt @@ -0,0 +1,81 @@ +"N" "P" "Corr" "Ratio" "Stab" "MSE" "FP" "FN" "num_select" "FDR" "MSE_mean" "FP_mean" "FN_mean" +50 50 "0.1" 1 0.02 "0.38 ( 0.02 )" "10.9 ( 0.97 )" "3.91 ( 0.15 )" 11.99 "0.77" 0.38 10.9 3.91 +100 50 "0.1" 0.5 0.06 "0.34 ( 0.01 )" "13.39 ( 1.06 )" "2.45 ( 0.16 )" 15.94 "0.68" 0.34 13.3 2.45 +500 50 "0.1" 0.1 0.13 "0.27 ( 0 )" "19.21 ( 0.81 )" "0.14 ( 0.04 )" 24.07 "0.73" 0.27 19.2 0.14 +1000 50 "0.1" 0.05 0.15 "0.26 ( 0 )" "18.76 ( 0.63 )" "0.02 ( 0.01 )" 23.74 "0.73" 0.26 18.7 0.02 +50 100 "0.1" 2 0.03 "0.41 ( 0.02 )" "9.27 ( 0.76 )" "4.63 ( 0.09 )" 9.64 "0.82" 0.41 9.27 4.63 +100 100 "0.1" 1 0.07 "0.34 ( 0.01 )" "10.1 ( 1.04 )" "3.87 ( 0.13 )" 11.23 "0.7" 0.34 10.1 3.87 +500 100 "0.1" 0.2 0.13 "0.29 ( 0 )" "25.4 ( 0.81 )" "0.41 ( 0.06 )" 29.99 "0.8" 0.29 25.4 0.41 +1000 100 "0.1" 0.1 0.13 "0.27 ( 0 )" "28.36 ( 0.94 )" "0.06 ( 0.03 )" 33.3 "0.81" 0.27 28.3 0.06 +50 500 "0.1" 10 0.01 "0.41 ( 0.02 )" "30.9 ( 3.51 )" "4.65 ( 0.13 )" 31.25 "0.94" 0.41 30.9 4.65 +100 500 "0.1" 5 0.03 "0.36 ( 0.01 )" "20.83 ( 2.77 )" "4.43 ( 0.1 )" 21.4 "0.87" 0.36 20.8 4.43 +500 500 "0.1" 1 0.08 "0.32 ( 0 )" "29.71 ( 2.76 )" "2.55 ( 0.12 )" 32.16 "0.8" 0.32 29.7 2.55 +1000 500 "0.1" 0.5 0.07 "0.28 ( 0 )" "61.47 ( 1.31 )" "0.56 ( 0.07 )" 65.91 "0.91" 0.28 61.4 0.56 +50 1000 "0.1" 20 0 "0.41 ( 0.02 )" "38.1 ( 4.05 )" "5.01 ( 0.11 )" 38.09 "0.97" 0.41 38.1 5.01 +100 1000 "0.1" 10 0.02 "0.36 ( 0.01 )" "35.49 ( 4.37 )" "4.34 ( 0.14 )" 36.15 "0.93" 0.36 35.4 4.34 +500 1000 "0.1" 2 0.1 "0.3 ( 0 )" "20.28 ( 2.74 )" "3.25 ( 0.08 )" 22.03 "0.75" 0.3 20.2 3.25 +1000 1000 "0.1" 1 0.05 "0.29 ( 0 )" "71.65 ( 3.47 )" "1.5 ( 0.1 )" 75.15 "0.9" 0.29 71.6 1.5 +50 50 "0.3" 1 0.17 "0.56 ( 0.03 )" "15.98 ( 0.61 )" "0.26 ( 0.05 )" 20.72 "0.7" 0.56 15.9 0.26 +100 50 "0.3" 0.5 0.2 "0.34 ( 0.01 )" "15.16 ( 0.6 )" "0 ( 0 )" 20.16 "0.68" 0.34 15.1 0 +500 50 "0.3" 0.1 0.19 "0.27 ( 0 )" "15.78 ( 0.58 )" "0 ( 0 )" 20.78 "0.69" 0.27 15.7 0 +1000 50 "0.3" 0.05 0.22 "0.26 ( 0 )" "14.34 ( 0.49 )" "0 ( 0 )" 19.34 "0.67" 0.26 14.3 0 +50 100 "0.3" 2 0.13 "0.81 ( 0.05 )" "22.23 ( 1.04 )" "0.7 ( 0.08 )" 26.53 "0.78" 0.81 22.2 0.7 +100 100 "0.3" 1 0.16 "0.42 ( 0.02 )" "23.17 ( 0.94 )" "0.02 ( 0.01 )" 28.15 "0.77" 0.42 23.1 0.02 +500 100 "0.3" 0.2 0.18 "0.27 ( 0 )" "21.25 ( 0.84 )" "0 ( 0 )" 26.25 "0.74" 0.27 21.2 0 +1000 100 "0.3" 0.1 0.2 "0.26 ( 0 )" "19.57 ( 0.81 )" "0 ( 0 )" 24.57 "0.73" 0.26 19.5 0 +50 500 "0.3" 10 0.05 "1.29 ( 0.07 )" "43.56 ( 3.08 )" "2.15 ( 0.13 )" 46.41 "0.89" 1.29 43.5 2.15 +100 500 "0.3" 5 0.13 "0.54 ( 0.02 )" "35.33 ( 1.21 )" "0.19 ( 0.05 )" 40.14 "0.84" 0.54 35.3 0.19 +500 500 "0.3" 1 0.14 "0.28 ( 0 )" "35.68 ( 1.62 )" "0 ( 0 )" 40.68 "0.83" 0.28 35.6 0 +1000 500 "0.3" 0.5 0.14 "0.27 ( 0 )" "36.15 ( 1.61 )" "0 ( 0 )" 41.15 "0.83" 0.27 36.1 0 +50 1000 "0.3" 20 0.03 "1.3 ( 0.07 )" "61.12 ( 4.33 )" "2.56 ( 0.12 )" 63.56 "0.93" 1.3 61.1 2.56 +100 1000 "0.3" 10 0.1 "0.68 ( 0.03 )" "41.5 ( 1.64 )" "0.61 ( 0.08 )" 45.89 "0.87" 0.68 41.5 0.61 +500 1000 "0.3" 2 0.11 "0.29 ( 0 )" "46.27 ( 2.2 )" "0 ( 0 )" 51.27 "0.86" 0.29 46.2 0 +1000 1000 "0.3" 1 0.13 "0.27 ( 0 )" "39.23 ( 2 )" "0 ( 0 )" 44.23 "0.83" 0.27 39.2 0 +50 50 "0.5" 1 0.19 "0.65 ( 0.05 )" "15.43 ( 0.64 )" "0.1 ( 0.04 )" 20.33 "0.68" 0.65 15.4 0.1 +100 50 "0.5" 0.5 0.2 "0.34 ( 0.01 )" "14.94 ( 0.61 )" "0 ( 0 )" 19.94 "0.67" 0.34 14.9 0 +500 50 "0.5" 0.1 0.2 "0.27 ( 0 )" "15.76 ( 0.59 )" "0 ( 0 )" 20.76 "0.69" 0.27 15.7 0 +1000 50 "0.5" 0.05 0.25 "0.26 ( 0 )" "12.73 ( 0.5 )" "0 ( 0 )" 17.73 "0.63" 0.26 12.7 0 +50 100 "0.5" 2 0.16 "0.8 ( 0.05 )" "21.3 ( 0.83 )" "0.3 ( 0.06 )" 26 "0.76" 0.8 21.3 0.3 +100 100 "0.5" 1 0.18 "0.37 ( 0.01 )" "21.74 ( 0.84 )" "0 ( 0 )" 26.74 "0.75" 0.37 21.7 0 +500 100 "0.5" 0.2 0.19 "0.27 ( 0 )" "20.71 ( 0.8 )" "0 ( 0 )" 25.71 "0.74" 0.27 20.7 0 +1000 100 "0.5" 0.1 0.18 "0.26 ( 0 )" "20.53 ( 0.72 )" "0 ( 0 )" 25.53 "0.75" 0.26 20.5 0 +50 500 "0.5" 10 0.08 "1.61 ( 0.1 )" "36.33 ( 2.13 )" "1.58 ( 0.11 )" 39.75 "0.87" 1.61 36.3 1.58 +100 500 "0.5" 5 0.14 "0.53 ( 0.02 )" "34.91 ( 1.29 )" "0.02 ( 0.01 )" 39.89 "0.83" 0.53 34.9 0.02 +500 500 "0.5" 1 0.15 "0.28 ( 0 )" "32.67 ( 1.7 )" "0 ( 0 )" 37.67 "0.8" 0.28 32.6 0 +1000 500 "0.5" 0.5 0.14 "0.26 ( 0 )" "33.71 ( 1.97 )" "0 ( 0 )" 38.71 "0.8" 0.26 33.7 0 +50 1000 "0.5" 20 0.04 "2 ( 0.1 )" "52.83 ( 3.84 )" "2.29 ( 0.1 )" 55.54 "0.91" 2 52.8 2.29 +100 1000 "0.5" 10 0.11 "0.68 ( 0.03 )" "43.94 ( 1.56 )" "0.14 ( 0.03 )" 48.8 "0.87" 0.68 43.9 0.14 +500 1000 "0.5" 2 0.14 "0.28 ( 0 )" "37.63 ( 1.92 )" "0 ( 0 )" 42.63 "0.83" 0.28 37.6 0 +1000 1000 "0.5" 1 0.14 "0.27 ( 0 )" "35.42 ( 1.84 )" "0 ( 0 )" 40.42 "0.82" 0.27 35.4 0 +50 50 "0.7" 1 0.18 "0.63 ( 0.04 )" "16.71 ( 0.61 )" "0.04 ( 0.02 )" 21.67 "0.7" 0.63 16.7 0.04 +100 50 "0.7" 0.5 0.22 "0.33 ( 0.01 )" "14.2 ( 0.55 )" "0 ( 0 )" 19.2 "0.66" 0.33 14.2 0 +500 50 "0.7" 0.1 0.22 "0.26 ( 0 )" "13.96 ( 0.52 )" "0 ( 0 )" 18.96 "0.66" 0.26 13.9 0 +1000 50 "0.7" 0.05 0.25 "0.26 ( 0 )" "12.77 ( 0.52 )" "0 ( 0 )" 17.77 "0.63" 0.26 12.7 0 +50 100 "0.7" 2 0.18 "0.86 ( 0.07 )" "19.83 ( 0.86 )" "0.11 ( 0.03 )" 24.72 "0.74" 0.86 19.8 0.11 +100 100 "0.7" 1 0.17 "0.38 ( 0.01 )" "22.59 ( 1.11 )" "0 ( 0 )" 27.59 "0.75" 0.38 22.5 0 +500 100 "0.7" 0.2 0.21 "0.28 ( 0 )" "17.78 ( 0.8 )" "0 ( 0 )" 22.78 "0.7" 0.28 17.7 0 +1000 100 "0.7" 0.1 0.21 "0.26 ( 0 )" "18.55 ( 0.87 )" "0 ( 0 )" 23.55 "0.71" 0.26 18.5 0 +50 500 "0.7" 10 0.1 "2.19 ( 0.14 )" "33.13 ( 1.76 )" "1.25 ( 0.11 )" 36.88 "0.86" 2.19 33.1 1.25 +100 500 "0.7" 5 0.13 "0.51 ( 0.02 )" "37.39 ( 1.42 )" "0 ( 0 )" 42.39 "0.84" 0.51 37.3 0 +500 500 "0.7" 1 0.16 "0.28 ( 0 )" "30.18 ( 1.66 )" "0 ( 0 )" 35.18 "0.79" 0.28 30.1 0 +1000 500 "0.7" 0.5 0.15 "0.26 ( 0 )" "33.3 ( 1.59 )" "0 ( 0 )" 38.3 "0.81" 0.26 33.3 0 +50 1000 "0.7" 20 0.06 "2.43 ( 0.14 )" "41.11 ( 2.8 )" "1.98 ( 0.11 )" 44.13 "0.89" 2.43 41.1 1.98 +100 1000 "0.7" 10 0.12 "0.68 ( 0.03 )" "42.68 ( 1.53 )" "0.02 ( 0.01 )" 47.66 "0.86" 0.68 42.6 0.02 +500 1000 "0.7" 2 0.12 "0.29 ( 0 )" "42.75 ( 2.32 )" "0 ( 0 )" 47.75 "0.84" 0.29 42.7 0 +1000 1000 "0.7" 1 0.14 "0.27 ( 0 )" "36.88 ( 2.33 )" "0 ( 0 )" 41.88 "0.81" 0.27 36.8 0 +50 50 "0.9" 1 0.21 "0.56 ( 0.03 )" "14.5 ( 0.57 )" "0.03 ( 0.02 )" 19.47 "0.67" 0.56 14.5 0.03 +100 50 "0.9" 0.5 0.23 "0.33 ( 0.01 )" "13.9 ( 0.6 )" "0 ( 0 )" 18.9 "0.65" 0.33 13.9 0 +500 50 "0.9" 0.1 0.25 "0.26 ( 0 )" "12.75 ( 0.49 )" "0 ( 0 )" 17.75 "0.63" 0.26 12.7 0 +1000 50 "0.9" 0.05 0.25 "0.26 ( 0 )" "12.64 ( 0.49 )" "0 ( 0 )" 17.64 "0.63" 0.26 12.6 0 +50 100 "0.9" 2 0.18 "0.75 ( 0.04 )" "20.94 ( 0.7 )" "0.07 ( 0.03 )" 25.87 "0.75" 0.75 20.9 0.07 +100 100 "0.9" 1 0.18 "0.38 ( 0.01 )" "20.8 ( 0.95 )" "0 ( 0 )" 25.8 "0.73" 0.38 20.8 0 +500 100 "0.9" 0.2 0.2 "0.26 ( 0 )" "18.74 ( 0.84 )" "0 ( 0 )" 23.74 "0.72" 0.26 18.7 0 +1000 100 "0.9" 0.1 0.19 "0.26 ( 0 )" "19.91 ( 0.91 )" "0 ( 0 )" 24.91 "0.72" 0.26 19.9 0 +50 500 "0.9" 10 0.1 "2.21 ( 0.15 )" "35.26 ( 2.1 )" "0.98 ( 0.09 )" 39.28 "0.85" 2.21 35.2 0.98 +100 500 "0.9" 5 0.14 "0.5 ( 0.02 )" "35.7 ( 1.48 )" "0 ( 0 )" 40.7 "0.83" 0.5 35.7 0 +500 500 "0.9" 1 0.15 "0.28 ( 0 )" "32.6 ( 1.76 )" "0 ( 0 )" 37.6 "0.81" 0.28 32.6 0 +1000 500 "0.9" 0.5 0.16 "0.26 ( 0 )" "30.4 ( 1.66 )" "0 ( 0 )" 35.4 "0.79" 0.26 30.4 0 +50 1000 "0.9" 20 0.07 "3.06 ( 0.18 )" "43.09 ( 2.82 )" "1.57 ( 0.1 )" 46.52 "0.88" 3.06 43 1.57 +100 1000 "0.9" 10 0.12 "0.59 ( 0.03 )" "43.91 ( 1.31 )" "0 ( 0 )" 48.91 "0.87" 0.59 43.9 0 +500 1000 "0.9" 2 0.12 "0.29 ( 0 )" "41.57 ( 2.28 )" "0 ( 0 )" 46.57 "0.84" 0.29 41.5 0 +1000 1000 "0.9" 1 0.13 "0.27 ( 0 )" "38.76 ( 2.16 )" "0 ( 0 )" 43.76 "0.82" 0.27 38.7 0 diff --git a/simulations/results_summary_cts/sim_block_lasso.txt b/simulations/results_summary_cts/sim_block_lasso.txt new file mode 100755 index 0000000..0c68943 --- /dev/null +++ b/simulations/results_summary_cts/sim_block_lasso.txt @@ -0,0 +1,81 @@ +"N" "P" "Corr" "Ratio" "Stab" "MSE" "FP" "FN" "num_select" "FDR" "MSE_mean" "FP_mean" "FN_mean" +50 50 "0.1" 1 0.05 "0.36 ( 0.01 )" "3.52 ( 0.22 )" "4.92 ( 0.08 )" 3.6 "0.65" 0.36 3.52 4.92 +100 50 "0.1" 0.5 0.18 "0.31 ( 0.01 )" "2.71 ( 0.25 )" "4.4 ( 0.1 )" 3.31 "0.42" 0.31 2.71 4.4 +500 50 "0.1" 0.1 0.35 "0.29 ( 0 )" "5.42 ( 0.25 )" "1.97 ( 0.11 )" 8.45 "0.48" 0.29 5.42 1.97 +1000 50 "0.1" 0.05 0.44 "0.28 ( 0 )" "4.91 ( 0.2 )" "1.57 ( 0.09 )" 8.34 "0.44" 0.28 4.91 1.57 +50 100 "0.1" 2 0.06 "0.37 ( 0.02 )" "4.73 ( 0.22 )" "4.79 ( 0.08 )" 4.94 "0.72" 0.37 4.73 4.79 +100 100 "0.1" 1 0.13 "0.34 ( 0.01 )" "3 ( 0.15 )" "4.75 ( 0.09 )" 3.25 "0.57" 0.34 3 4.75 +500 100 "0.1" 0.2 0.24 "0.3 ( 0 )" "8.56 ( 0.5 )" "2.13 ( 0.12 )" 11.43 "0.57" 0.3 8.56 2.13 +1000 100 "0.1" 0.1 0.33 "0.29 ( 0 )" "7.77 ( 0.33 )" "1.44 ( 0.08 )" 11.33 "0.56" 0.29 7.77 1.44 +50 500 "0.1" 10 0.01 "0.37 ( 0.02 )" "10.58 ( 0.31 )" "5.25 ( 0.07 )" 10.33 "0.92" 0.37 10.5 5.25 +100 500 "0.1" 5 0.05 "0.35 ( 0.01 )" "6.23 ( 0.26 )" "4.94 ( 0.08 )" 6.29 "0.82" 0.35 6.23 4.94 +500 500 "0.1" 1 0.33 "0.32 ( 0.01 )" "3.77 ( 0.75 )" "3.69 ( 0.08 )" 5.08 "0.27" 0.32 3.77 3.69 +1000 500 "0.1" 0.5 0.14 "0.29 ( 0 )" "20.61 ( 1.39 )" "2.11 ( 0.1 )" 23.5 "0.69" 0.29 20.6 2.11 +50 1000 "0.1" 20 0.01 "0.39 ( 0.02 )" "13.99 ( 0.32 )" "5.31 ( 0.07 )" 13.68 "0.95" 0.39 13.9 5.31 +100 1000 "0.1" 10 0.03 "0.35 ( 0.01 )" "9.56 ( 0.33 )" "5.01 ( 0.08 )" 9.55 "0.89" 0.35 9.56 5.01 +500 1000 "0.1" 2 0.48 "0.33 ( 0 )" "1.83 ( 0.19 )" "3.97 ( 0.07 )" 2.86 "0.2" 0.33 1.83 3.97 +1000 1000 "0.1" 1 0.17 "0.3 ( 0 )" "13.42 ( 1.74 )" "2.77 ( 0.09 )" 15.65 "0.47" 0.3 13.4 2.77 +50 50 "0.3" 1 0.27 "0.72 ( 0.04 )" "8.7 ( 0.42 )" "0.79 ( 0.09 )" 12.91 "0.56" 0.72 8.7 0.79 +100 50 "0.3" 0.5 0.39 "0.4 ( 0.01 )" "7.91 ( 0.47 )" "0.01 ( 0.01 )" 12.9 "0.48" 0.4 7.91 0.01 +500 50 "0.3" 0.1 0.63 "0.28 ( 0 )" "3.86 ( 0.25 )" "0 ( 0 )" 8.86 "0.28" 0.28 3.86 0 +1000 50 "0.3" 0.05 0.78 "0.27 ( 0 )" "2.45 ( 0.14 )" "0 ( 0 )" 7.45 "0.17" 0.27 2.45 0 +50 100 "0.3" 2 0.21 "0.82 ( 0.05 )" "12.31 ( 0.43 )" "1.14 ( 0.1 )" 16.17 "0.68" 0.82 12.3 1.14 +100 100 "0.3" 1 0.34 "0.44 ( 0.01 )" "10.58 ( 0.62 )" "0.09 ( 0.03 )" 15.49 "0.56" 0.44 10.5 0.09 +500 100 "0.3" 0.2 0.61 "0.27 ( 0 )" "4.51 ( 0.29 )" "0 ( 0 )" 9.51 "0.32" 0.27 4.51 0 +1000 100 "0.3" 0.1 0.69 "0.27 ( 0 )" "3.46 ( 0.29 )" "0 ( 0 )" 8.46 "0.24" 0.27 3.46 0 +50 500 "0.3" 10 0.09 "1.25 ( 0.07 )" "20.71 ( 0.36 )" "2.63 ( 0.11 )" 23.08 "0.85" 1.25 20.7 2.63 +100 500 "0.3" 5 0.23 "0.59 ( 0.02 )" "18.01 ( 0.69 )" "0.35 ( 0.06 )" 22.66 "0.73" 0.59 18 0.35 +500 500 "0.3" 1 0.47 "0.29 ( 0 )" "7.7 ( 0.54 )" "0 ( 0 )" 12.7 "0.45" 0.29 7.7 0 +1000 500 "0.3" 0.5 0.53 "0.27 ( 0 )" "6.14 ( 0.57 )" "0 ( 0 )" 11.14 "0.36" 0.27 6.14 0 +50 1000 "0.3" 20 0.06 "1.51 ( 0.08 )" "24.06 ( 0.36 )" "3.21 ( 0.11 )" 25.85 "0.89" 1.51 24 3.21 +100 1000 "0.3" 10 0.17 "0.67 ( 0.03 )" "22.69 ( 0.61 )" "0.73 ( 0.08 )" 26.96 "0.8" 0.67 22.6 0.73 +500 1000 "0.3" 2 0.35 "0.29 ( 0 )" "11.72 ( 0.9 )" "0 ( 0 )" 16.72 "0.55" 0.29 11.7 0 +1000 1000 "0.3" 1 0.51 "0.27 ( 0 )" "6.69 ( 0.52 )" "0 ( 0 )" 11.69 "0.41" 0.27 6.69 0 +50 50 "0.5" 1 0.33 "0.64 ( 0.03 )" "9.36 ( 0.45 )" "0.12 ( 0.04 )" 14.24 "0.55" 0.64 9.36 0.12 +100 50 "0.5" 0.5 0.41 "0.36 ( 0.01 )" "7.39 ( 0.39 )" "0 ( 0 )" 12.39 "0.47" 0.36 7.39 0 +500 50 "0.5" 0.1 0.7 "0.28 ( 0 )" "3.18 ( 0.23 )" "0 ( 0 )" 8.18 "0.22" 0.28 3.18 0 +1000 50 "0.5" 0.05 0.82 "0.27 ( 0 )" "2.11 ( 0.13 )" "0 ( 0 )" 7.11 "0.13" 0.27 2.11 0 +50 100 "0.5" 2 0.28 "0.78 ( 0.05 )" "12.05 ( 0.47 )" "0.38 ( 0.07 )" 16.67 "0.64" 0.78 12 0.38 +100 100 "0.5" 1 0.37 "0.42 ( 0.02 )" "9.57 ( 0.58 )" "0 ( 0 )" 14.57 "0.54" 0.42 9.57 0 +500 100 "0.5" 0.2 0.59 "0.27 ( 0 )" "4.7 ( 0.3 )" "0 ( 0 )" 9.7 "0.33" 0.27 4.7 0 +1000 100 "0.5" 0.1 0.78 "0.27 ( 0 )" "2.58 ( 0.16 )" "0 ( 0 )" 7.58 "0.18" 0.27 2.58 0 +50 500 "0.5" 10 0.12 "1.64 ( 0.1 )" "21.8 ( 0.36 )" "1.82 ( 0.11 )" 24.98 "0.83" 1.64 21.8 1.82 +100 500 "0.5" 5 0.24 "0.55 ( 0.02 )" "18.37 ( 0.77 )" "0.04 ( 0.02 )" 23.33 "0.72" 0.55 18.3 0.04 +500 500 "0.5" 1 0.46 "0.3 ( 0 )" "7.82 ( 0.64 )" "0 ( 0 )" 12.82 "0.44" 0.3 7.82 0 +1000 500 "0.5" 0.5 0.65 "0.28 ( 0 )" "4.16 ( 0.33 )" "0 ( 0 )" 9.16 "0.28" 0.28 4.16 0 +50 1000 "0.5" 20 0.09 "1.84 ( 0.1 )" "24.67 ( 0.36 )" "2.56 ( 0.11 )" 27.11 "0.87" 1.84 24.6 2.56 +100 1000 "0.5" 10 0.21 "0.64 ( 0.03 )" "22.01 ( 0.65 )" "0.12 ( 0.03 )" 26.89 "0.77" 0.64 22 0.12 +500 1000 "0.5" 2 0.45 "0.29 ( 0 )" "8.22 ( 0.73 )" "0 ( 0 )" 13.22 "0.44" 0.29 8.22 0 +1000 1000 "0.5" 1 0.53 "0.27 ( 0 )" "6.36 ( 0.51 )" "0 ( 0 )" 11.36 "0.39" 0.27 6.36 0 +50 50 "0.7" 1 0.36 "0.57 ( 0.04 )" "8.63 ( 0.41 )" "0.06 ( 0.02 )" 13.57 "0.52" 0.57 8.63 0.06 +100 50 "0.7" 0.5 0.45 "0.37 ( 0.01 )" "6.73 ( 0.39 )" "0 ( 0 )" 11.73 "0.44" 0.37 6.73 0 +500 50 "0.7" 0.1 0.71 "0.28 ( 0 )" "3.01 ( 0.2 )" "0 ( 0 )" 8.01 "0.22" 0.28 3.01 0 +1000 50 "0.7" 0.05 0.85 "0.27 ( 0 )" "1.89 ( 0.12 )" "0 ( 0 )" 6.89 "0.11" 0.27 1.89 0 +50 100 "0.7" 2 0.3 "0.82 ( 0.05 )" "11.87 ( 0.44 )" "0.17 ( 0.05 )" 16.7 "0.63" 0.82 11.8 0.17 +100 100 "0.7" 1 0.37 "0.41 ( 0.02 )" "9.7 ( 0.63 )" "0 ( 0 )" 14.7 "0.53" 0.41 9.7 0 +500 100 "0.7" 0.2 0.66 "0.28 ( 0 )" "3.85 ( 0.3 )" "0 ( 0 )" 8.85 "0.26" 0.28 3.85 0 +1000 100 "0.7" 0.1 0.76 "0.27 ( 0 )" "2.71 ( 0.23 )" "0 ( 0 )" 7.71 "0.17" 0.27 2.71 0 +50 500 "0.7" 10 0.15 "2.03 ( 0.14 )" "21.53 ( 0.36 )" "1.18 ( 0.11 )" 25.35 "0.81" 2.03 21.5 1.18 +100 500 "0.7" 5 0.28 "0.54 ( 0.02 )" "16.11 ( 0.63 )" "0 ( 0 )" 21.11 "0.69" 0.54 16.1 0 +500 500 "0.7" 1 0.51 "0.29 ( 0 )" "6.69 ( 0.45 )" "0 ( 0 )" 11.69 "0.42" 0.29 6.69 0 +1000 500 "0.7" 0.5 0.62 "0.28 ( 0 )" "4.65 ( 0.37 )" "0 ( 0 )" 9.65 "0.3" 0.28 4.65 0 +50 1000 "0.7" 20 0.1 "2.51 ( 0.13 )" "25.24 ( 0.32 )" "2.11 ( 0.12 )" 28.13 "0.86" 2.51 25.2 2.11 +100 1000 "0.7" 10 0.22 "0.59 ( 0.02 )" "21.52 ( 0.68 )" "0.01 ( 0.01 )" 26.51 "0.76" 0.59 21.5 0.01 +500 1000 "0.7" 2 0.47 "0.3 ( 0 )" "7.81 ( 0.61 )" "0 ( 0 )" 12.81 "0.45" 0.3 7.81 0 +1000 1000 "0.7" 1 0.65 "0.28 ( 0 )" "4.14 ( 0.35 )" "0 ( 0 )" 9.14 "0.27" 0.28 4.14 0 +50 50 "0.9" 1 0.32 "0.61 ( 0.05 )" "9.61 ( 0.49 )" "0.07 ( 0.03 )" 14.54 "0.55" 0.61 9.61 0.07 +100 50 "0.9" 0.5 0.44 "0.37 ( 0.01 )" "6.82 ( 0.39 )" "0 ( 0 )" 11.82 "0.44" 0.37 6.82 0 +500 50 "0.9" 0.1 0.75 "0.27 ( 0 )" "2.68 ( 0.17 )" "0 ( 0 )" 7.68 "0.19" 0.27 2.68 0 +1000 50 "0.9" 0.05 0.87 "0.27 ( 0 )" "1.76 ( 0.11 )" "0 ( 0 )" 6.76 "0.09" 0.27 1.76 0 +50 100 "0.9" 2 0.29 "0.87 ( 0.05 )" "12.12 ( 0.37 )" "0.17 ( 0.05 )" 16.95 "0.64" 0.87 12.1 0.17 +100 100 "0.9" 1 0.4 "0.38 ( 0.01 )" "8.72 ( 0.53 )" "0 ( 0 )" 13.72 "0.51" 0.38 8.72 0 +500 100 "0.9" 0.2 0.67 "0.27 ( 0 )" "3.68 ( 0.28 )" "0 ( 0 )" 8.68 "0.25" 0.27 3.68 0 +1000 100 "0.9" 0.1 0.76 "0.27 ( 0 )" "2.72 ( 0.23 )" "0 ( 0 )" 7.72 "0.17" 0.27 2.72 0 +50 500 "0.9" 10 0.14 "2.29 ( 0.15 )" "23.7 ( 0.43 )" "1.18 ( 0.11 )" 27.52 "0.82" 2.29 23.7 1.18 +100 500 "0.9" 5 0.28 "0.51 ( 0.02 )" "16.13 ( 0.62 )" "0 ( 0 )" 21.13 "0.69" 0.51 16.1 0 +500 500 "0.9" 1 0.5 "0.29 ( 0 )" "6.87 ( 0.54 )" "0 ( 0 )" 11.87 "0.41" 0.29 6.87 0 +1000 500 "0.9" 0.5 0.71 "0.27 ( 0 )" "3.37 ( 0.27 )" "0 ( 0 )" 8.37 "0.23" 0.27 3.37 0 +50 1000 "0.9" 20 0.11 "2.46 ( 0.16 )" "25.37 ( 0.35 )" "1.73 ( 0.12 )" 28.64 "0.85" 2.46 25.3 1.73 +100 1000 "0.9" 10 0.22 "0.62 ( 0.03 )" "21.43 ( 0.62 )" "0 ( 0 )" 26.43 "0.76" 0.62 21.4 0 +500 1000 "0.9" 2 0.46 "0.3 ( 0 )" "7.99 ( 0.79 )" "0 ( 0 )" 12.99 "0.42" 0.3 7.99 0 +1000 1000 "0.9" 1 0.6 "0.28 ( 0 )" "4.93 ( 0.43 )" "0 ( 0 )" 9.93 "0.31" 0.28 4.93 0 diff --git a/simulations/results_summary_cts/sim_block_rf.txt b/simulations/results_summary_cts/sim_block_rf.txt new file mode 100755 index 0000000..badb16b --- /dev/null +++ b/simulations/results_summary_cts/sim_block_rf.txt @@ -0,0 +1,81 @@ +"N" "P" "Corr" "Ratio" "Stab" "MSE" "FP" "FN" "OOB" "num_select" "FDR" "MSE_mean" "FP_mean" "FN_mean" "OOB_mean" +50 50 "0.1" 1 0 "0.08 ( 0 )" "1 ( 0 )" "6 ( 0 )" "0.59 ( 0.01 )" 0 "NaN" 0.08 1 6 0.59 +100 50 "0.1" 0.5 0.03 "0.07 ( 0 )" "2.26 ( 0.17 )" "5.06 ( 0.12 )" "0.58 ( 0 )" 3.04 "0.7" 0.07 2.26 5.06 0.58 +500 50 "0.1" 0.1 0.23 "0.05 ( 0 )" "2.34 ( 0.16 )" "3.77 ( 0.14 )" "0.56 ( 0 )" 4.56 "0.49" 0.05 2.34 3.77 0.56 +1000 50 "0.1" 0.05 0.51 "0.05 ( 0 )" "2.37 ( 0.16 )" "2.54 ( 0.11 )" "0.55 ( 0 )" 5.83 "0.38" 0.05 2.37 2.54 0.55 +50 100 "0.1" 2 0 "0.08 ( 0 )" "1 ( 0 )" "6 ( 0 )" "0.6 ( 0.01 )" 0 "NaN" 0.08 1 6 0.6 +100 100 "0.1" 1 0.01 "0.07 ( 0 )" "4.76 ( 0.27 )" "5.51 ( 0.09 )" "0.58 ( 0 )" 5.24 "0.91" 0.07 4.76 5.51 0.58 +500 100 "0.1" 0.2 0.22 "0.05 ( 0 )" "4.86 ( 0.25 )" "3.36 ( 0.15 )" "0.57 ( 0 )" 7.5 "0.63" 0.05 4.86 3.36 0.57 +1000 100 "0.1" 0.1 0.52 "0.05 ( 0 )" "4.65 ( 0.2 )" "1.99 ( 0.13 )" "0.56 ( 0 )" 8.66 "0.52" 0.05 4.65 1.99 0.56 +50 500 "0.1" 10 0 "0.08 ( 0 )" "1 ( 0 )" "6 ( 0 )" "0.59 ( 0.01 )" 0 "NaN" 0.08 1 6 0.59 +100 500 "0.1" 5 0 "0.07 ( 0 )" "23.53 ( 0.53 )" "5.27 ( 0.11 )" "0.59 ( 0 )" 24.26 "0.97" 0.07 23.5 5.27 0.59 +500 500 "0.1" 1 0.07 "0.06 ( 0 )" "23.98 ( 0.51 )" "3.3 ( 0.16 )" "0.58 ( 0 )" 26.68 "0.9" 0.06 23.9 3.3 0.58 +1000 500 "0.1" 0.5 0.17 "0.05 ( 0 )" "23.6 ( 0.51 )" "1.93 ( 0.15 )" "0.57 ( 0 )" 27.67 "0.85" 0.05 23.6 1.93 0.57 +50 1000 "0.1" 20 0 "0.08 ( 0 )" "1 ( 0 )" "6 ( 0 )" "0.59 ( 0.01 )" 0 "NaN" 0.08 1 6 0.59 +100 1000 "0.1" 10 0 "0.06 ( 0 )" "48.27 ( 0.79 )" "5.46 ( 0.08 )" "0.59 ( 0 )" 48.81 "0.99" 0.06 48.2 5.46 0.59 +500 1000 "0.1" 2 0.02 "0.06 ( 0 )" "48.48 ( 0.7 )" "3.65 ( 0.16 )" "0.58 ( 0 )" 50.83 "0.95" 0.06 48.4 3.65 0.58 +1000 1000 "0.1" 1 0.07 "0.05 ( 0 )" "47.72 ( 0.68 )" "2.25 ( 0.14 )" "0.58 ( 0 )" 51.47 "0.93" 0.05 47.7 2.25 0.58 +50 50 "0.3" 1 0 "0.31 ( 0.01 )" "1 ( 0 )" "6 ( 0 )" "1.14 ( 0.01 )" 0 "NaN" 0.31 1 6 1.14 +100 50 "0.3" 0.5 0.05 "0.25 ( 0.01 )" "1.97 ( 0.13 )" "4.84 ( 0.08 )" "1.05 ( 0.01 )" 3.11 "0.59" 0.25 1.97 4.84 1.05 +500 50 "0.3" 0.1 0.65 "0.16 ( 0 )" "0.74 ( 0.08 )" "1.78 ( 0.08 )" "0.84 ( 0 )" 4.96 "0.14" 0.16 0.74 1.78 0.84 +1000 50 "0.3" 0.05 0.84 "0.13 ( 0 )" "0.3 ( 0.05 )" "0.69 ( 0.07 )" "0.77 ( 0 )" 5.61 "0.05" 0.13 0.3 0.69 0.77 +50 100 "0.3" 2 0 "0.32 ( 0.01 )" "1 ( 0 )" "6 ( 0 )" "1.2 ( 0.01 )" 0 "NaN" 0.32 1 6 1.2 +100 100 "0.3" 1 0.05 "0.25 ( 0.01 )" "4.14 ( 0.18 )" "4.63 ( 0.1 )" "1.14 ( 0.01 )" 5.51 "0.74" 0.25 4.14 4.63 1.14 +500 100 "0.3" 0.2 0.47 "0.19 ( 0 )" "2.7 ( 0.14 )" "1.77 ( 0.09 )" "0.93 ( 0 )" 6.93 "0.37" 0.19 2.7 1.77 0.93 +1000 100 "0.3" 0.1 0.66 "0.16 ( 0 )" "1.78 ( 0.13 )" "0.64 ( 0.07 )" "0.86 ( 0 )" 7.14 "0.23" 0.16 1.78 0.64 0.86 +50 500 "0.3" 10 0 "0.36 ( 0.02 )" "1 ( 0 )" "6 ( 0 )" "1.23 ( 0.01 )" 0 "NaN" 0.36 1 6 1.23 +100 500 "0.3" 5 0.01 "0.25 ( 0.01 )" "25.01 ( 0.53 )" "4.87 ( 0.09 )" "1.22 ( 0.01 )" 26.14 "0.96" 0.25 25 4.87 1.22 +500 500 "0.3" 1 0.09 "0.23 ( 0 )" "22.67 ( 0.44 )" "2.42 ( 0.09 )" "1.14 ( 0 )" 26.25 "0.86" 0.23 22.6 2.42 1.14 +1000 500 "0.3" 0.5 0.16 "0.22 ( 0 )" "19.38 ( 0.47 )" "1.14 ( 0.07 )" "1.11 ( 0 )" 24.24 "0.79" 0.22 19.3 1.14 1.11 +50 1000 "0.3" 20 0 "0.34 ( 0.01 )" "1 ( 0 )" "6 ( 0 )" "1.26 ( 0.01 )" 0 "NaN" 0.34 1 6 1.26 +100 1000 "0.3" 10 0 "0.26 ( 0.01 )" "48.76 ( 0.63 )" "5.22 ( 0.09 )" "1.21 ( 0.01 )" 49.54 "0.98" 0.26 48.7 5.22 1.21 +500 1000 "0.3" 2 0.04 "0.23 ( 0 )" "46.28 ( 0.69 )" "2.72 ( 0.1 )" "1.19 ( 0 )" 49.56 "0.93" 0.23 46.2 2.72 1.19 +1000 1000 "0.3" 1 0.07 "0.23 ( 0 )" "44.67 ( 0.68 )" "1.33 ( 0.08 )" "1.17 ( 0 )" 49.34 "0.9" 0.23 44.6 1.33 1.17 +50 50 "0.5" 1 0 "0.6 ( 0.03 )" "1 ( 0 )" "6 ( 0 )" "1.46 ( 0.01 )" 0 "NaN" 0.6 1 6 1.46 +100 50 "0.5" 0.5 0.09 "0.42 ( 0.01 )" "1.75 ( 0.14 )" "4.6 ( 0.09 )" "1.33 ( 0.01 )" 3.15 "0.5" 0.42 1.75 4.6 1.33 +500 50 "0.5" 0.1 0.71 "0.26 ( 0 )" "0.56 ( 0.07 )" "1.57 ( 0.08 )" "1.02 ( 0 )" 4.99 "0.1" 0.26 0.56 1.57 1.02 +1000 50 "0.5" 0.05 0.85 "0.2 ( 0 )" "0.24 ( 0.05 )" "0.73 ( 0.07 )" "0.93 ( 0 )" 5.51 "0.04" 0.2 0.24 0.73 0.93 +50 100 "0.5" 2 0 "0.6 ( 0.02 )" "1 ( 0 )" "6 ( 0 )" "1.56 ( 0.01 )" 0 "NaN" 0.6 1 6 1.56 +100 100 "0.5" 1 0.06 "0.47 ( 0.02 )" "4.15 ( 0.17 )" "4.61 ( 0.09 )" "1.45 ( 0.01 )" 5.54 "0.74" 0.47 4.15 4.61 1.45 +500 100 "0.5" 0.2 0.52 "0.32 ( 0 )" "2.32 ( 0.14 )" "1.5 ( 0.09 )" "1.16 ( 0 )" 6.82 "0.32" 0.32 2.32 1.5 1.16 +1000 100 "0.5" 0.1 0.73 "0.26 ( 0 )" "1.21 ( 0.1 )" "0.6 ( 0.07 )" "1.06 ( 0 )" 6.61 "0.17" 0.26 1.21 0.6 1.06 +50 500 "0.5" 10 0 "0.58 ( 0.02 )" "1 ( 0 )" "6 ( 0 )" "1.64 ( 0.02 )" 0 "NaN" 0.58 1 6 1.64 +100 500 "0.5" 5 0.01 "0.46 ( 0.01 )" "24.25 ( 0.46 )" "4.96 ( 0.09 )" "1.6 ( 0.01 )" 25.29 "0.96" 0.46 24.2 4.96 1.6 +500 500 "0.5" 1 0.11 "0.41 ( 0 )" "21.23 ( 0.42 )" "2.01 ( 0.1 )" "1.49 ( 0 )" 25.22 "0.84" 0.41 21.2 2.01 1.49 +1000 500 "0.5" 0.5 0.17 "0.37 ( 0 )" "18.91 ( 0.41 )" "0.96 ( 0.07 )" "1.44 ( 0 )" 23.95 "0.78" 0.37 18.9 0.96 1.44 +50 1000 "0.5" 20 0 "0.57 ( 0.02 )" "1 ( 0 )" "6 ( 0 )" "1.64 ( 0.02 )" 0 "NaN" 0.57 1 6 1.64 +100 1000 "0.5" 10 0 "0.47 ( 0.01 )" "49.88 ( 0.68 )" "5.13 ( 0.08 )" "1.62 ( 0.01 )" 50.75 "0.98" 0.47 49.8 5.13 1.62 +500 1000 "0.5" 2 0.05 "0.42 ( 0 )" "45.98 ( 0.68 )" "2.22 ( 0.09 )" "1.57 ( 0 )" 49.76 "0.92" 0.42 45.9 2.22 1.57 +1000 1000 "0.5" 1 0.08 "0.4 ( 0 )" "44.42 ( 0.63 )" "1.13 ( 0.07 )" "1.53 ( 0 )" 49.29 "0.9" 0.4 44.4 1.13 1.53 +50 50 "0.7" 1 0 "0.8 ( 0.04 )" "1 ( 0 )" "6 ( 0 )" "1.72 ( 0.02 )" 0 "NaN" 0.8 1 6 1.72 +100 50 "0.7" 0.5 0.11 "0.59 ( 0.02 )" "1.85 ( 0.14 )" "4.52 ( 0.08 )" "1.57 ( 0.01 )" 3.32 "0.51" 0.59 1.85 4.52 1.57 +500 50 "0.7" 0.1 0.71 "0.35 ( 0 )" "0.51 ( 0.07 )" "1.72 ( 0.09 )" "1.17 ( 0 )" 4.79 "0.1" 0.35 0.51 1.72 1.17 +1000 50 "0.7" 0.05 0.87 "0.27 ( 0 )" "0.18 ( 0.05 )" "0.72 ( 0.07 )" "1.06 ( 0 )" 5.46 "0.03" 0.27 0.18 0.72 1.06 +50 100 "0.7" 2 0 "0.92 ( 0.04 )" "1 ( 0 )" "6 ( 0 )" "1.85 ( 0.02 )" 0 "NaN" 0.92 1 6 1.85 +100 100 "0.7" 1 0.05 "0.63 ( 0.02 )" "4.69 ( 0.18 )" "4.65 ( 0.09 )" "1.7 ( 0.01 )" 6.04 "0.77" 0.63 4.69 4.65 1.7 +500 100 "0.7" 0.2 0.53 "0.43 ( 0 )" "2.27 ( 0.15 )" "1.46 ( 0.09 )" "1.36 ( 0 )" 6.81 "0.31" 0.43 2.27 1.46 1.36 +1000 100 "0.7" 0.1 0.71 "0.35 ( 0 )" "1.47 ( 0.13 )" "0.63 ( 0.06 )" "1.22 ( 0 )" 6.84 "0.19" 0.35 1.47 0.63 1.22 +50 500 "0.7" 10 0 "0.91 ( 0.04 )" "1 ( 0 )" "6 ( 0 )" "2 ( 0.02 )" 0 "NaN" 0.91 1 6 2 +100 500 "0.7" 5 0.01 "0.69 ( 0.02 )" "24.52 ( 0.45 )" "4.6 ( 0.09 )" "1.93 ( 0.01 )" 25.92 "0.95" 0.69 24.5 4.6 1.93 +500 500 "0.7" 1 0.12 "0.57 ( 0.01 )" "20.96 ( 0.41 )" "1.86 ( 0.09 )" "1.77 ( 0.01 )" 25.1 "0.83" 0.57 20.9 1.86 1.77 +1000 500 "0.7" 0.5 0.17 "0.52 ( 0 )" "18.88 ( 0.46 )" "1.01 ( 0.08 )" "1.7 ( 0 )" 23.87 "0.78" 0.52 18.8 1.01 1.7 +50 1000 "0.7" 20 0 "0.91 ( 0.04 )" "1 ( 0 )" "6 ( 0 )" "1.98 ( 0.02 )" 0 "NaN" 0.91 1 6 1.98 +100 1000 "0.7" 10 0.01 "0.66 ( 0.02 )" "49.65 ( 0.71 )" "4.89 ( 0.09 )" "1.93 ( 0.01 )" 50.76 "0.98" 0.66 49.6 4.89 1.93 +500 1000 "0.7" 2 0.05 "0.6 ( 0.01 )" "47.23 ( 0.73 )" "2.18 ( 0.1 )" "1.88 ( 0.01 )" 51.05 "0.92" 0.6 47.2 2.18 1.88 +1000 1000 "0.7" 1 0.08 "0.57 ( 0 )" "43.91 ( 0.67 )" "1.1 ( 0.08 )" "1.82 ( 0 )" 48.81 "0.9" 0.57 43.9 1.1 1.82 +50 50 "0.9" 1 0 "1.1 ( 0.04 )" "1 ( 0 )" "6 ( 0 )" "1.99 ( 0.02 )" 0 "NaN" 1.1 1 6 1.99 +100 50 "0.9" 0.5 0.16 "0.78 ( 0.02 )" "1.56 ( 0.11 )" "4.38 ( 0.09 )" "1.78 ( 0.01 )" 3.16 "0.46" 0.78 1.56 4.38 1.78 +500 50 "0.9" 0.1 0.74 "0.44 ( 0 )" "0.45 ( 0.06 )" "1.49 ( 0.08 )" "1.31 ( 0 )" 4.96 "0.08" 0.44 0.45 1.49 1.31 +1000 50 "0.9" 0.05 0.86 "0.34 ( 0 )" "0.14 ( 0.04 )" "0.86 ( 0.08 )" "1.17 ( 0 )" 5.28 "0.02" 0.34 0.14 0.86 1.17 +50 100 "0.9" 2 0 "1.11 ( 0.05 )" "1 ( 0 )" "6 ( 0 )" "2.06 ( 0.02 )" 0 "NaN" 1.11 1 6 2.06 +100 100 "0.9" 1 0.09 "0.84 ( 0.02 )" "3.94 ( 0.18 )" "4.32 ( 0.09 )" "1.95 ( 0.01 )" 5.62 "0.68" 0.84 3.94 4.32 1.95 +500 100 "0.9" 0.2 0.55 "0.54 ( 0.01 )" "2.11 ( 0.15 )" "1.47 ( 0.08 )" "1.51 ( 0 )" 6.64 "0.29" 0.54 2.11 1.47 1.51 +1000 100 "0.9" 0.1 0.76 "0.44 ( 0 )" "1.05 ( 0.11 )" "0.55 ( 0.06 )" "1.36 ( 0 )" 6.5 "0.14" 0.44 1.05 0.55 1.36 +50 500 "0.9" 10 0 "1.18 ( 0.05 )" "1 ( 0 )" "6 ( 0 )" "2.2 ( 0.02 )" 0 "NaN" 1.18 1 6 2.2 +100 500 "0.9" 5 0.01 "0.86 ( 0.02 )" "24.13 ( 0.47 )" "4.7 ( 0.09 )" "2.18 ( 0.02 )" 25.43 "0.95" 0.86 24.1 4.7 2.18 +500 500 "0.9" 1 0.12 "0.73 ( 0.01 )" "20.83 ( 0.45 )" "2.04 ( 0.09 )" "2 ( 0.01 )" 24.79 "0.84" 0.73 20.8 2.04 2 +1000 500 "0.9" 0.5 0.18 "0.68 ( 0.01 )" "18.47 ( 0.43 )" "1 ( 0.07 )" "1.92 ( 0 )" 23.47 "0.78" 0.68 18.4 0 1.92 +50 1000 "0.9" 20 0 "1.22 ( 0.05 )" "1 ( 0 )" "6 ( 0 )" "2.3 ( 0.03 )" 0 "NaN" 1.22 1 6 2.3 +100 1000 "0.9" 10 0.01 "0.93 ( 0.02 )" "49.18 ( 0.69 )" "4.67 ( 0.09 )" "2.22 ( 0.02 )" 50.51 "0.97" 0.93 49.1 4.67 2.22 +500 1000 "0.9" 2 0.06 "0.78 ( 0.01 )" "46.01 ( 0.7 )" "2.14 ( 0.09 )" "2.12 ( 0.01 )" 49.87 "0.92" 0.78 46 2.14 2.12 +1000 1000 "0.9" 1 0.08 "0.74 ( 0.01 )" "43.05 ( 0.72 )" "1.17 ( 0.08 )" "2.07 ( 0 )" 47.88 "0.9" 0.74 43 1.17 2.07 diff --git a/simulations/results_summary_cts/sim_ind_compLasso.txt b/simulations/results_summary_cts/sim_ind_compLasso.txt new file mode 100755 index 0000000..52ebf9a --- /dev/null +++ b/simulations/results_summary_cts/sim_ind_compLasso.txt @@ -0,0 +1,17 @@ +"N" "P" "Ratio" "Stab" "MSE" "FP" "FN" "num_select" "FDR" "MSE_mean" "FP_mean" "FN_mean" +50 50 1 0.61 "0.8 ( 0.05 )" "2.99 ( 0.27 )" "0.05 ( 0.02 )" 8.94 "0.28" 0.8 2.99 0.05 +100 50 0.5 0.87 "0.98 ( 0.06 )" "0.79 ( 0.15 )" "0 ( 0 )" 6.79 "0.09" 0.98 0.79 0 +500 50 0.1 0.91 "1.08 ( 0.05 )" "0.51 ( 0.11 )" "0 ( 0 )" 6.51 "0.06" 1.08 0.51 0 +1000 50 0.05 0.93 "1.18 ( 0.04 )" "0.39 ( 0.15 )" "0 ( 0 )" 6.39 "0.04" 1.18 0.39 0 +50 100 2 0.52 "1.05 ( 0.07 )" "4.3 ( 0.31 )" "0.24 ( 0.05 )" 10.06 "0.37" 1.05 4.3 0.24 +100 100 1 0.85 "0.94 ( 0.04 )" "1.02 ( 0.19 )" "0 ( 0 )" 7.02 "0.11" 0.94 1.02 0 +500 100 0.2 0.96 "1.16 ( 0.04 )" "0.25 ( 0.09 )" "0 ( 0 )" 6.25 "0.03" 1.16 0.25 0 +1000 100 0.1 0.89 "1.04 ( 0.05 )" "0.71 ( 0.15 )" "0 ( 0 )" 6.71 "0.08" 1.04 0.71 0 +50 500 10 0.38 "2.18 ( 0.13 )" "5.53 ( 0.36 )" "1.27 ( 0.11 )" 10.26 "0.48" 2.18 5.53 1.27 +100 500 5 0.75 "1 ( 0.05 )" "1.9 ( 0.29 )" "0.03 ( 0.02 )" 7.87 "0.18" 1 1.9 0.03 +500 500 1 0.96 "1.18 ( 0.04 )" "0.27 ( 0.13 )" "0 ( 0 )" 6.27 "0.03" 1.18 0.27 0 +1000 500 0.5 0.96 "1.24 ( 0.04 )" "0.25 ( 0.1 )" "0 ( 0 )" 6.25 "0.03" 1.24 0.25 0 +50 1000 20 0.32 "3.09 ( 0.23 )" "5.56 ( 0.36 )" "1.95 ( 0.14 )" 9.61 "0.51" 3.09 5.56 1.95 +100 1000 10 0.67 "1.1 ( 0.07 )" "2.8 ( 0.37 )" "0.04 ( 0.02 )" 8.76 "0.24" 1.1 2.8 0.04 +500 1000 2 0.96 "1.12 ( 0.04 )" "0.27 ( 0.08 )" "0 ( 0 )" 6.27 "0.03" 1.12 0.27 0 +1000 1000 1 0.96 "1.16 ( 0.04 )" "0.24 ( 0.07 )" "0 ( 0 )" 6.24 "0.03" 1.16 0.24 0 diff --git a/simulations/results_summary_cts/sim_ind_elnet.txt b/simulations/results_summary_cts/sim_ind_elnet.txt new file mode 100755 index 0000000..0273d31 --- /dev/null +++ b/simulations/results_summary_cts/sim_ind_elnet.txt @@ -0,0 +1,17 @@ +"N" "P" "Ratio" "Stab" "MSE" "FP" "FN" "num_select" "FDR" "MSE_mean" "FP_mean" "FN_mean" +50 50 1 0.2 "0.53 ( 0.03 )" "14.99 ( 0.59 )" "0 ( 0 )" 19.99 "0.67" 0.53 14.9 0 +100 50 0.5 0.23 "0.34 ( 0.01 )" "13.46 ( 0.55 )" "0 ( 0 )" 18.46 "0.65" 0.34 13.4 0 +500 50 0.1 0.23 "0.26 ( 0 )" "13.65 ( 0.56 )" "0 ( 0 )" 18.65 "0.64" 0.26 13.6 0 +1000 50 0.05 0.27 "0.25 ( 0 )" "11.76 ( 0.53 )" "0 ( 0 )" 16.76 "0.6" 0.25 11.7 0 +50 100 2 0.19 "0.74 ( 0.06 )" "19.45 ( 0.66 )" "0.04 ( 0.02 )" 24.41 "0.74" 0.74 19.4 0.04 +100 100 1 0.2 "0.38 ( 0.01 )" "19.2 ( 1.02 )" "0 ( 0 )" 24.2 "0.71" 0.38 19.2 0 +500 100 0.2 0.23 "0.27 ( 0 )" "16.28 ( 0.78 )" "0 ( 0 )" 21.28 "0.67" 0.27 16.2 0 +1000 100 0.1 0.23 "0.26 ( 0 )" "17.05 ( 0.76 )" "0 ( 0 )" 22.05 "0.69" 0.26 17 0 +50 500 10 0.13 "1.65 ( 0.13 )" "30.38 ( 1.24 )" "0.58 ( 0.08 )" 34.8 "0.83" 1.65 30.3 0.58 +100 500 5 0.15 "0.5 ( 0.02 )" "32.18 ( 1.44 )" "0 ( 0 )" 37.18 "0.81" 0.5 32.1 0 +500 500 1 0.16 "0.28 ( 0 )" "29.79 ( 1.73 )" "0 ( 0 )" 34.79 "0.78" 0.28 29.7 0 +1000 500 0.5 0.18 "0.26 ( 0 )" "27.21 ( 1.58 )" "0 ( 0 )" 32.21 "0.77" 0.26 27.2 0 +50 1000 20 0.1 "2.5 ( 0.22 )" "36.6 ( 2.03 )" "1.12 ( 0.09 )" 40.48 "0.86" 2.5 36.6 1.12 +100 1000 10 0.13 "0.56 ( 0.02 )" "40.61 ( 1.71 )" "0 ( 0 )" 45.61 "0.85" 0.56 40.6 0 +500 1000 2 0.14 "0.27 ( 0 )" "35.98 ( 2.2 )" "0 ( 0 )" 40.98 "0.8" 0.27 35.9 0 +1000 1000 1 0.15 "0.27 ( 0 )" "34.65 ( 2.02 )" "0 ( 0 )" 39.65 "0.79" 0.27 34.6 0 diff --git a/simulations/results_summary_cts/sim_ind_lasso.txt b/simulations/results_summary_cts/sim_ind_lasso.txt new file mode 100755 index 0000000..5321933 --- /dev/null +++ b/simulations/results_summary_cts/sim_ind_lasso.txt @@ -0,0 +1,17 @@ +"N" "P" "Ratio" "Stab" "MSE" "FP" "FN" "num_select" "FDR" "MSE_mean" "FP_mean" "FN_mean" +50 50 1 0.37 "0.54 ( 0.03 )" "8.36 ( 0.45 )" "0.02 ( 0.01 )" 13.34 "0.51" 0.54 8.36 0.02 +100 50 0.5 0.51 "0.36 ( 0.01 )" "5.5 ( 0.42 )" "0 ( 0 )" 10.5 "0.37" 0.36 5.5 0 +500 50 0.1 0.79 "0.28 ( 0 )" "2.33 ( 0.14 )" "0 ( 0 )" 7.33 "0.15" 0.28 2.33 0 +1000 50 0.05 0.86 "0.26 ( 0 )" "1.82 ( 0.13 )" "0 ( 0 )" 6.82 "0.1" 0.26 1.82 0 +50 100 2 0.32 "0.66 ( 0.04 )" "11.1 ( 0.38 )" "0.08 ( 0.03 )" 16.02 "0.61" 0.66 11.1 0.08 +100 100 1 0.46 "0.41 ( 0.01 )" "7.23 ( 0.4 )" "0 ( 0 )" 12.23 "0.46" 0.41 7.23 0 +500 100 0.2 0.71 "0.29 ( 0 )" "3.26 ( 0.25 )" "0 ( 0 )" 8.26 "0.22" 0.29 3.26 0 +1000 100 0.1 0.82 "0.27 ( 0 )" "2.25 ( 0.15 )" "0 ( 0 )" 7.25 "0.15" 0.27 2.25 0 +50 500 10 0.19 "1.41 ( 0.11 )" "19.89 ( 0.38 )" "0.64 ( 0.08 )" 24.25 "0.77" 1.41 19.8 0.64 +100 500 5 0.3 "0.48 ( 0.02 )" "14.71 ( 0.7 )" "0 ( 0 )" 19.71 "0.66" 0.48 14.7 0 +500 500 1 0.61 "0.28 ( 0 )" "4.82 ( 0.34 )" "0 ( 0 )" 9.82 "0.32" 0.28 4.82 0 +1000 500 0.5 0.72 "0.27 ( 0 )" "3.35 ( 0.32 )" "0 ( 0 )" 8.35 "0.21" 0.27 3.35 0 +50 1000 20 0.14 "2.24 ( 0.19 )" "23.95 ( 0.37 )" "1.19 ( 0.09 )" 27.76 "0.82" 2.24 23.9 1.19 +100 1000 10 0.25 "0.53 ( 0.02 )" "18.53 ( 0.59 )" "0 ( 0 )" 23.53 "0.73" 0.53 18.5 0 +500 1000 2 0.52 "0.29 ( 0 )" "6.51 ( 0.45 )" "0 ( 0 )" 11.51 "0.4" 0.29 6.51 0 +1000 1000 1 0.64 "0.27 ( 0 )" "4.39 ( 0.56 )" "0 ( 0 )" 9.39 "0.26" 0.27 4.39 0 diff --git a/simulations/results_summary_cts/sim_ind_rf.txt b/simulations/results_summary_cts/sim_ind_rf.txt new file mode 100755 index 0000000..a82ed1d --- /dev/null +++ b/simulations/results_summary_cts/sim_ind_rf.txt @@ -0,0 +1,17 @@ +"N" "P" "Ratio" "Stab" "MSE" "FP" "FN" "OOB" "num_select" "FDR" "Index" "MSE_mean" "FP_mean" "FN_mean" "OOB_mean" +50 50 1 0 "1.31 ( 0.06 )" "1 ( 0 )" "6 ( 0 )" "2.09 ( 0.02 )" 0 "NaN" 1 1.31 1 6 2.09 +100 50 0.5 0.18 "0.85 ( 0.02 )" "1.85 ( 0.11 )" "4.11 ( 0.1 )" "1.79 ( 0.01 )" 3.74 "0.48" 2 0.85 1.85 4.11 1.79 +500 50 0.1 0.8 "0.47 ( 0.01 )" "0.3 ( 0.05 )" "1.61 ( 0.08 )" "1.31 ( 0 )" 4.69 "0.05" 3 0.47 0.3 1.61 1.31 +1000 50 0.05 0.88 "0.35 ( 0 )" "0.07 ( 0.03 )" "0.78 ( 0.07 )" "1.17 ( 0 )" 5.29 "0.01" 4 0.35 0.07 0.78 1.17 +50 100 2 0 "1.32 ( 0.05 )" "1 ( 0 )" "6 ( 0 )" "2.23 ( 0.02 )" 0 "NaN" 5 1.32 1 6 2.23 +100 100 1 0.08 "0.91 ( 0.03 )" "4.33 ( 0.22 )" "4.45 ( 0.09 )" "2.02 ( 0.01 )" 5.88 "0.72" 6 0.91 4.33 4.45 2.02 +500 100 0.2 0.6 "0.59 ( 0.01 )" "1.91 ( 0.15 )" "1.41 ( 0.07 )" "1.54 ( 0 )" 6.5 "0.27" 7 0.59 1.91 1.41 1.54 +1000 100 0.1 0.81 "0.47 ( 0 )" "0.71 ( 0.09 )" "0.53 ( 0.06 )" "1.39 ( 0 )" 6.18 "0.1" 8 0.47 0.71 0.53 1.39 +50 500 10 0 "1.33 ( 0.05 )" "1 ( 0 )" "6 ( 0 )" "2.48 ( 0.03 )" 0 "NaN" 9 1.33 1 6 2.48 +100 500 5 0.02 "1.07 ( 0.03 )" "23.8 ( 0.52 )" "4.26 ( 0.1 )" "2.43 ( 0.02 )" 25.54 "0.93" 10 1.07 23.8 4.26 2.43 +500 500 1 0.14 "0.84 ( 0.01 )" "19.92 ( 0.41 )" "1.71 ( 0.08 )" "2.14 ( 0.01 )" 24.21 "0.82" 11 0.84 19.9 1.71 2.14 +1000 500 0.5 0.19 "0.78 ( 0.01 )" "18.73 ( 0.42 )" "0.84 ( 0.06 )" "2.06 ( 0 )" 23.89 "0.78" 12 0.78 18.7 0.84 2.06 +50 1000 20 0 "1.31 ( 0.05 )" "1 ( 0 )" "6 ( 0 )" "2.48 ( 0.03 )" 0 "NaN" 13 1.31 1 6 2.48 +100 1000 10 0.01 "1.06 ( 0.03 )" "48.48 ( 0.63 )" "4.33 ( 0.1 )" "2.43 ( 0.02 )" 50.15 "0.97" 14 1.06 48.4 4.33 2.43 +500 1000 2 0.06 "0.89 ( 0.01 )" "44.77 ( 0.71 )" "1.81 ( 0.1 )" "2.3 ( 0.01 )" 48.96 "0.91" 15 0.89 44.7 1.81 2.3 +1000 1000 1 0.09 "0.85 ( 0.01 )" "41.77 ( 0.68 )" "0.99 ( 0.07 )" "2.25 ( 0.01 )" 46.78 "0.89" 16 0.85 41.7 0.99 2.25 diff --git a/simulations/results_summary_cts/sim_toe_compLasso.txt b/simulations/results_summary_cts/sim_toe_compLasso.txt new file mode 100755 index 0000000..8394de1 --- /dev/null +++ b/simulations/results_summary_cts/sim_toe_compLasso.txt @@ -0,0 +1,81 @@ +"N" "P" "Corr" "Ratio" "Stab" "MSE" "FP" "FN" "num_select" "FDR" "MSE_mean" "FP_mean" "FN_mean" +50 50 "0.1" 1 0.56 "0.88 ( 0.05 )" "3.68 ( 0.29 )" "0.06 ( 0.03 )" 9.62 "0.33" 0.88 3.68 0.06 +100 50 "0.1" 0.5 0.77 "0.87 ( 0.05 )" "1.51 ( 0.35 )" "0 ( 0 )" 7.51 "0.12" 0.87 1.51 0 +500 50 "0.1" 0.1 0.88 "0.99 ( 0.05 )" "0.73 ( 0.19 )" "0 ( 0 )" 6.73 "0.07" 0.99 0.73 0 +1000 50 "0.1" 0.05 0.9 "1.09 ( 0.04 )" "0.55 ( 0.17 )" "0 ( 0 )" 6.55 "0.05" 1.09 0.55 0 +50 100 "0.1" 2 0.53 "1.12 ( 0.1 )" "4.24 ( 0.3 )" "0.23 ( 0.06 )" 10.01 "0.37" 1.12 4.24 0.23 +100 100 "0.1" 1 0.79 "0.85 ( 0.04 )" "1.51 ( 0.34 )" "0 ( 0 )" 7.51 "0.13" 0.85 1.51 0 +500 100 "0.1" 0.2 0.95 "1.13 ( 0.04 )" "0.29 ( 0.09 )" "0 ( 0 )" 6.29 "0.03" 1.13 0.29 0 +1000 100 "0.1" 0.1 0.93 "1.03 ( 0.04 )" "0.42 ( 0.12 )" "0 ( 0 )" 6.42 "0.05" 1.03 0.42 0 +50 500 "0.1" 10 0.36 "2.54 ( 0.18 )" "5.13 ( 0.35 )" "1.78 ( 0.12 )" 9.35 "0.48" 2.54 5.13 1.78 +100 500 "0.1" 5 0.71 "0.98 ( 0.04 )" "2.4 ( 0.35 )" "0 ( 0 )" 8.4 "0.21" 0.98 2.4 0 +500 500 "0.1" 1 0.96 "1.1 ( 0.04 )" "0.25 ( 0.08 )" "0 ( 0 )" 6.25 "0.03" 1.1 0.25 0 +1000 500 "0.1" 0.5 0.96 "1.18 ( 0.04 )" "0.24 ( 0.08 )" "0 ( 0 )" 6.24 "0.03" 1.18 0.24 0 +50 1000 "0.1" 20 0.29 "3.37 ( 0.2 )" "4.59 ( 0.36 )" "2.63 ( 0.15 )" 7.96 "0.5" 3.37 4.59 2.63 +100 1000 "0.1" 10 0.61 "1.03 ( 0.04 )" "3.82 ( 0.46 )" "0.01 ( 0.01 )" 9.81 "0.29" 1.03 3.82 0.01 +500 1000 "0.1" 2 0.96 "1.1 ( 0.03 )" "0.24 ( 0.1 )" "0 ( 0 )" 6.24 "0.03" 1.1 0.24 0 +1000 1000 "0.1" 1 0.97 "1.16 ( 0.03 )" "0.16 ( 0.06 )" "0 ( 0 )" 6.16 "0.02" 1.16 0.16 0 +50 50 "0.3" 1 0.5 "0.76 ( 0.05 )" "4.6 ( 0.27 )" "0.07 ( 0.03 )" 10.53 "0.4" 0.76 4.6 0.07 +100 50 "0.3" 0.5 0.75 "0.7 ( 0.04 )" "1.65 ( 0.28 )" "0 ( 0 )" 7.65 "0.16" 0.7 1.65 0 +500 50 "0.3" 0.1 0.93 "0.92 ( 0.04 )" "0.39 ( 0.12 )" "0 ( 0 )" 6.39 "0.04" 0.92 0.39 0 +1000 50 "0.3" 0.05 0.93 "0.92 ( 0.03 )" "0.38 ( 0.1 )" "0 ( 0 )" 6.38 "0.04" 0.92 0.38 0 +50 100 "0.3" 2 0.43 "1.12 ( 0.07 )" "5.19 ( 0.3 )" "0.63 ( 0.09 )" 10.56 "0.44" 1.12 5.19 0.63 +100 100 "0.3" 1 0.7 "0.73 ( 0.04 )" "2.38 ( 0.32 )" "0 ( 0 )" 8.38 "0.22" 0.73 2.38 0 +500 100 "0.3" 0.2 0.87 "0.82 ( 0.04 )" "0.84 ( 0.2 )" "0 ( 0 )" 6.84 "0.08" 0.82 0.84 0 +1000 100 "0.3" 0.1 0.93 "0.87 ( 0.04 )" "0.41 ( 0.08 )" "0 ( 0 )" 6.41 "0.05" 0.87 0.41 0 +50 500 "0.3" 10 0.29 "2.5 ( 0.14 )" "5.62 ( 0.34 )" "2.39 ( 0.12 )" 9.23 "0.55" 2.5 5.62 2.39 +100 500 "0.3" 5 0.52 "0.84 ( 0.04 )" "5.23 ( 0.57 )" "0.06 ( 0.02 )" 11.17 "0.37" 0.84 5.23 0.06 +500 500 "0.3" 1 0.96 "0.93 ( 0.03 )" "0.25 ( 0.08 )" "0 ( 0 )" 6.25 "0.03" 0.93 0.25 0 +1000 500 "0.3" 0.5 0.94 "0.9 ( 0.03 )" "0.38 ( 0.1 )" "0 ( 0 )" 6.38 "0.04" 0.9 0.38 0 +50 1000 "0.3" 20 0.28 "2.99 ( 0.17 )" "4.75 ( 0.36 )" "3 ( 0.13 )" 7.75 "0.53" 2.99 4.75 0 +100 1000 "0.3" 10 0.46 "0.93 ( 0.04 )" "6.63 ( 0.6 )" "0.1 ( 0.03 )" 12.53 "0.43" 0.93 6.63 0.1 +500 1000 "0.3" 2 0.96 "0.89 ( 0.03 )" "0.28 ( 0.09 )" "0 ( 0 )" 6.28 "0.03" 0.89 0.28 0 +1000 1000 "0.3" 1 0.95 "0.93 ( 0.03 )" "0.29 ( 0.09 )" "0 ( 0 )" 6.29 "0.03" 0.93 0.29 0 +50 50 "0.5" 1 0.44 "0.72 ( 0.05 )" "5.25 ( 0.31 )" "0.24 ( 0.06 )" 11.01 "0.43" 0.72 5.25 0.24 +100 50 "0.5" 0.5 0.62 "0.55 ( 0.02 )" "2.98 ( 0.3 )" "0 ( 0 )" 8.98 "0.27" 0.55 2.98 0 +500 50 "0.5" 0.1 0.9 "0.62 ( 0.02 )" "0.57 ( 0.13 )" "0 ( 0 )" 6.57 "0.06" 0.62 0.57 0 +1000 50 "0.5" 0.05 0.93 "0.67 ( 0.02 )" "0.39 ( 0.12 )" "0 ( 0 )" 6.39 "0.04" 0.67 0.39 0 +50 100 "0.5" 2 0.37 "1.15 ( 0.07 )" "5.35 ( 0.36 )" "1.25 ( 0.11 )" 10.1 "0.45" 1.15 5.35 1.25 +100 100 "0.5" 1 0.59 "0.68 ( 0.03 )" "3.57 ( 0.36 )" "0.06 ( 0.02 )" 9.51 "0.31" 0.68 3.57 0.06 +500 100 "0.5" 0.2 0.94 "0.68 ( 0.02 )" "0.34 ( 0.1 )" "0 ( 0 )" 6.34 "0.04" 0.68 0.34 0 +1000 100 "0.5" 0.1 0.95 "0.71 ( 0.02 )" "0.27 ( 0.09 )" "0 ( 0 )" 6.27 "0.03" 0.71 0.27 0 +50 500 "0.5" 10 0.29 "2.28 ( 0.14 )" "5.5 ( 0.38 )" "2.81 ( 0.1 )" 8.69 "0.55" 2.28 5.5 2.81 +100 500 "0.5" 5 0.38 "0.82 ( 0.04 )" "8.32 ( 0.64 )" "0.38 ( 0.07 )" 13.94 "0.51" 0.82 8.32 0.38 +500 500 "0.5" 1 0.93 "0.67 ( 0.02 )" "0.45 ( 0.12 )" "0 ( 0 )" 6.45 "0.05" 0.67 0.45 0 +1000 500 "0.5" 0.5 0.94 "0.69 ( 0.02 )" "0.35 ( 0.1 )" "0 ( 0 )" 6.35 "0.04" 0.69 0.35 0 +50 1000 "0.5" 20 0.23 "2.44 ( 0.13 )" "5.82 ( 0.36 )" "3.37 ( 0.1 )" 8.45 "0.63" 2.44 5.82 3.37 +100 1000 "0.5" 10 0.3 "0.96 ( 0.05 )" "10.94 ( 0.72 )" "0.61 ( 0.1 )" 16.33 "0.59" 0.96 10.9 0.61 +500 1000 "0.5" 2 0.96 "0.7 ( 0.02 )" "0.22 ( 0.06 )" "0 ( 0 )" 6.22 "0.03" 0.7 0.22 0 +1000 1000 "0.5" 1 0.95 "0.71 ( 0.02 )" "0.33 ( 0.13 )" "0 ( 0 )" 6.33 "0.03" 0.71 0.33 0 +50 50 "0.7" 1 0.36 "0.76 ( 0.05 )" "5.83 ( 0.31 )" "0.81 ( 0.1 )" 11.02 "0.48" 0.76 5.83 0.81 +100 50 "0.7" 0.5 0.48 "0.43 ( 0.02 )" "4.89 ( 0.38 )" "0.08 ( 0.03 )" 10.81 "0.4" 0.43 4.89 0.08 +500 50 "0.7" 0.1 0.81 "0.44 ( 0.01 )" "1.23 ( 0.22 )" "0 ( 0 )" 7.23 "0.12" 0.44 1.23 0 +1000 50 "0.7" 0.05 0.88 "0.45 ( 0.01 )" "0.74 ( 0.13 )" "0 ( 0 )" 6.74 "0.09" 0.45 0.74 0 +50 100 "0.7" 2 0.31 "0.99 ( 0.06 )" "5.89 ( 0.36 )" "1.88 ( 0.11 )" 10.01 "0.53" 0.99 5.89 1.88 +100 100 "0.7" 1 0.41 "0.48 ( 0.02 )" "6.91 ( 0.55 )" "0.22 ( 0.05 )" 12.69 "0.47" 0.48 6.91 0.22 +500 100 "0.7" 0.2 0.82 "0.45 ( 0.01 )" "1.24 ( 0.19 )" "0 ( 0 )" 7.24 "0.13" 0.45 1.24 0 +1000 100 "0.7" 0.1 0.92 "0.48 ( 0.01 )" "0.5 ( 0.14 )" "0 ( 0 )" 6.5 "0.05" 0.48 0.5 0 +50 500 "0.7" 10 0.27 "1.81 ( 0.09 )" "5.27 ( 0.39 )" "3.43 ( 0.09 )" 7.84 "0.56" 1.81 5.27 3.43 +100 500 "0.7" 5 0.27 "0.85 ( 0.05 )" "9.56 ( 0.73 )" "1.42 ( 0.12 )" 14.14 "0.59" 0.85 9.56 1.42 +500 500 "0.7" 1 0.74 "0.46 ( 0.01 )" "2.11 ( 0.26 )" "0 ( 0 )" 8.11 "0.2" 0.46 2.11 0 +1000 500 "0.7" 0.5 0.87 "0.46 ( 0.01 )" "0.93 ( 0.16 )" "0 ( 0 )" 6.93 "0.1" 0.46 0.93 0 +50 1000 "0.7" 20 0.21 "1.81 ( 0.08 )" "6.05 ( 0.39 )" "3.58 ( 0.1 )" 8.47 "0.64" 1.81 6.05 3.58 +100 1000 "0.7" 10 0.27 "1.1 ( 0.06 )" "8.36 ( 0.68 )" "2.1 ( 0.09 )" 12.26 "0.58" 1.1 8.36 2.1 +500 1000 "0.7" 2 0.69 "0.47 ( 0.01 )" "2.72 ( 0.33 )" "0 ( 0 )" 8.72 "0.24" 0.47 2.72 0 +1000 1000 "0.7" 1 0.91 "0.5 ( 0.01 )" "0.57 ( 0.16 )" "0 ( 0 )" 6.57 "0.06" 0.5 0.57 0 +50 50 "0.9" 1 0.32 "0.54 ( 0.03 )" "4.91 ( 0.32 )" "1.96 ( 0.11 )" 8.95 "0.49" 0.54 4.91 1.96 +100 50 "0.9" 0.5 0.35 "0.41 ( 0.02 )" "5.64 ( 0.41 )" "0.96 ( 0.11 )" 10.68 "0.46" 0.41 5.64 0.96 +500 50 "0.9" 0.1 0.67 "0.31 ( 0.01 )" "2.66 ( 0.22 )" "0.01 ( 0.01 )" 8.65 "0.27" 0.31 2.66 0.01 +1000 50 "0.9" 0.05 0.71 "0.3 ( 0 )" "2.18 ( 0.19 )" "0 ( 0 )" 8.18 "0.23" 0.3 2.18 0 +50 100 "0.9" 2 0.31 "0.66 ( 0.04 )" "4.9 ( 0.33 )" "2.83 ( 0.09 )" 8.07 "0.54" 0.66 4.9 2.83 +100 100 "0.9" 1 0.32 "0.47 ( 0.02 )" "6.56 ( 0.48 )" "1.45 ( 0.11 )" 11.11 "0.52" 0.47 6.56 1.45 +500 100 "0.9" 0.2 0.59 "0.32 ( 0.01 )" "4.04 ( 0.34 )" "0.01 ( 0.01 )" 10.03 "0.35" 0.32 4.04 0.01 +1000 100 "0.9" 0.1 0.67 "0.3 ( 0 )" "2.85 ( 0.24 )" "0 ( 0 )" 8.85 "0.28" 0.3 2.85 0 +50 500 "0.9" 10 0.23 "0.89 ( 0.05 )" "5.88 ( 0.44 )" "3.74 ( 0.07 )" 8.14 "0.62" 0.89 5.88 3.74 +100 500 "0.9" 5 0.24 "0.6 ( 0.02 )" "8.59 ( 0.65 )" "2.63 ( 0.08 )" 11.96 "0.64" 0.6 8.59 2.63 +500 500 "0.9" 1 0.41 "0.34 ( 0.01 )" "8.17 ( 0.48 )" "0.17 ( 0.04 )" 14 "0.54" 0.34 8.17 0.17 +1000 500 "0.9" 0.5 0.58 "0.32 ( 0 )" "4.24 ( 0.3 )" "0.01 ( 0.01 )" 10.23 "0.37" 0.32 4.24 0.01 +50 1000 "0.9" 20 0.19 "1.04 ( 0.06 )" "5.24 ( 0.46 )" "4.23 ( 0.08 )" 7.01 "0.6" 1.04 5.24 4.23 +100 1000 "0.9" 10 0.22 "0.67 ( 0.02 )" "9.03 ( 0.73 )" "3.02 ( 0.07 )" 12.01 "0.66" 0.67 9.03 3.02 +500 1000 "0.9" 2 0.34 "0.35 ( 0.01 )" "10.52 ( 0.68 )" "0.32 ( 0.05 )" 16.2 "0.59" 0.35 10.5 0.32 +1000 1000 "0.9" 1 0.57 "0.33 ( 0 )" "4.48 ( 0.3 )" "0.01 ( 0.01 )" 10.47 "0.39" 0.33 4.48 0.01 diff --git a/simulations/results_summary_cts/sim_toe_elnet.txt b/simulations/results_summary_cts/sim_toe_elnet.txt new file mode 100755 index 0000000..0fa8cef --- /dev/null +++ b/simulations/results_summary_cts/sim_toe_elnet.txt @@ -0,0 +1,81 @@ +"N" "P" "Corr" "Ratio" "Stab" "MSE" "FP" "FN" "num_select" "FDR" "MSE_mean" "FP_mean" "FN_mean" +50 50 "0.1" 1 0.21 "0.6 ( 0.03 )" "14.72 ( 0.57 )" "0.01 ( 0.01 )" 19.71 "0.67" 0.6 14.7 0.01 +100 50 "0.1" 0.5 0.23 "0.34 ( 0.01 )" "13.7 ( 0.66 )" "0 ( 0 )" 18.7 "0.64" 0.34 13.7 0 +500 50 "0.1" 0.1 0.23 "0.26 ( 0 )" "13.59 ( 0.55 )" "0 ( 0 )" 18.59 "0.65" 0.26 13.5 0 +1000 50 "0.1" 0.05 0.25 "0.26 ( 0 )" "12.64 ( 0.54 )" "0 ( 0 )" 17.64 "0.63" 0.26 12.6 0 +50 100 "0.1" 2 0.2 "0.69 ( 0.05 )" "19.33 ( 0.67 )" "0 ( 0 )" 24.33 "0.73" 0.69 19.3 0 +100 100 "0.1" 1 0.22 "0.38 ( 0.01 )" "17.77 ( 0.8 )" "0 ( 0 )" 22.77 "0.7" 0.38 17.7 0 +500 100 "0.1" 0.2 0.21 "0.26 ( 0 )" "18.57 ( 0.83 )" "0 ( 0 )" 23.57 "0.71" 0.26 18.5 0 +1000 100 "0.1" 0.1 0.22 "0.26 ( 0 )" "17.23 ( 0.72 )" "0 ( 0 )" 22.23 "0.7" 0.26 17.2 0 +50 500 "0.1" 10 0.13 "1.74 ( 0.11 )" "29.67 ( 1.23 )" "0.63 ( 0.07 )" 34.04 "0.83" 1.74 29.6 0.63 +100 500 "0.1" 5 0.16 "0.51 ( 0.02 )" "30.41 ( 1.35 )" "0 ( 0 )" 35.41 "0.81" 0.51 30.4 0 +500 500 "0.1" 1 0.16 "0.27 ( 0 )" "29.38 ( 1.53 )" "0 ( 0 )" 34.38 "0.79" 0.27 29.3 0 +1000 500 "0.1" 0.5 0.18 "0.27 ( 0 )" "26.73 ( 1.56 )" "0 ( 0 )" 31.73 "0.77" 0.27 26.7 0 +50 1000 "0.1" 20 0.09 "2.5 ( 0.16 )" "39.01 ( 2.7 )" "1.34 ( 0.1 )" 42.67 "0.87" 2.5 39 1.34 +100 1000 "0.1" 10 0.13 "0.57 ( 0.03 )" "39.81 ( 1.68 )" "0 ( 0 )" 44.81 "0.85" 0.57 39.8 0 +500 1000 "0.1" 2 0.14 "0.27 ( 0 )" "37.88 ( 2.19 )" "0 ( 0 )" 42.88 "0.82" 0.27 37.8 0 +1000 1000 "0.1" 1 0.16 "0.26 ( 0 )" "31.4 ( 1.69 )" "0 ( 0 )" 36.4 "0.8" 0.26 31.4 0 +50 50 "0.3" 1 0.21 "0.53 ( 0.03 )" "14.65 ( 0.58 )" "0.03 ( 0.02 )" 19.62 "0.67" 0.53 14.6 0.03 +100 50 "0.3" 0.5 0.2 "0.34 ( 0.01 )" "14.91 ( 0.58 )" "0 ( 0 )" 19.91 "0.67" 0.34 14.9 0 +500 50 "0.3" 0.1 0.23 "0.27 ( 0 )" "13.94 ( 0.57 )" "0 ( 0 )" 18.94 "0.65" 0.27 13.9 0 +1000 50 "0.3" 0.05 0.27 "0.26 ( 0 )" "11.94 ( 0.43 )" "0 ( 0 )" 16.94 "0.62" 0.26 11.9 0 +50 100 "0.3" 2 0.19 "0.72 ( 0.04 )" "19.67 ( 0.66 )" "0.08 ( 0.03 )" 24.59 "0.74" 0.72 19.6 0.08 +100 100 "0.3" 1 0.19 "0.38 ( 0.01 )" "20.48 ( 0.85 )" "0 ( 0 )" 25.48 "0.74" 0.38 20.4 0 +500 100 "0.3" 0.2 0.2 "0.26 ( 0 )" "19.3 ( 0.93 )" "0 ( 0 )" 24.3 "0.72" 0.26 19.3 0 +1000 100 "0.3" 0.1 0.2 "0.26 ( 0 )" "19 ( 0.86 )" "0 ( 0 )" 24 "0.71" 0.26 19 0 +50 500 "0.3" 10 0.1 "1.94 ( 0.12 )" "32.52 ( 1.94 )" "1.33 ( 0.1 )" 36.19 "0.85" 1.94 32.5 1.33 +100 500 "0.3" 5 0.14 "0.51 ( 0.02 )" "34.04 ( 1.37 )" "0.01 ( 0.01 )" 39.03 "0.83" 0.51 34 0.01 +500 500 "0.3" 1 0.16 "0.28 ( 0 )" "30.92 ( 1.44 )" "0 ( 0 )" 35.92 "0.8" 0.28 30.9 0 +1000 500 "0.3" 0.5 0.16 "0.26 ( 0 )" "30.61 ( 1.55 )" "0 ( 0 )" 35.61 "0.79" 0.26 30.6 0 +50 1000 "0.3" 20 0.08 "2.46 ( 0.17 )" "35.99 ( 1.99 )" "1.83 ( 0.1 )" 39.16 "0.88" 2.46 35.9 1.83 +100 1000 "0.3" 10 0.12 "0.6 ( 0.03 )" "43.92 ( 1.49 )" "0.01 ( 0.01 )" 48.91 "0.86" 0.6 43.9 0.01 +500 1000 "0.3" 2 0.13 "0.28 ( 0 )" "38.46 ( 2.16 )" "0 ( 0 )" 43.46 "0.84" 0.28 38.4 0 +1000 1000 "0.3" 1 0.13 "0.27 ( 0 )" "38.29 ( 2.09 )" "0 ( 0 )" 43.29 "0.83" 0.27 38.2 0 +50 50 "0.5" 1 0.2 "0.57 ( 0.04 )" "14.64 ( 0.66 )" "0.09 ( 0.03 )" 19.55 "0.66" 0.57 14.6 0.09 +100 50 "0.5" 0.5 0.21 "0.33 ( 0.01 )" "14.76 ( 0.55 )" "0 ( 0 )" 19.76 "0.67" 0.33 14.7 0 +500 50 "0.5" 0.1 0.23 "0.26 ( 0 )" "13.76 ( 0.51 )" "0 ( 0 )" 18.76 "0.66" 0.26 13.7 0 +1000 50 "0.5" 0.05 0.23 "0.26 ( 0 )" "13.4 ( 0.49 )" "0 ( 0 )" 18.4 "0.65" 0.26 13.4 0 +50 100 "0.5" 2 0.17 "0.8 ( 0.04 )" "20.05 ( 0.68 )" "0.34 ( 0.06 )" 24.71 "0.75" 0.8 20 0.34 +100 100 "0.5" 1 0.17 "0.41 ( 0.02 )" "21.92 ( 0.83 )" "0 ( 0 )" 26.92 "0.76" 0.41 21.9 0 +500 100 "0.5" 0.2 0.2 "0.27 ( 0 )" "18.97 ( 0.78 )" "0 ( 0 )" 23.97 "0.72" 0.27 18.9 0 +1000 100 "0.5" 0.1 0.2 "0.26 ( 0 )" "19.53 ( 0.66 )" "0 ( 0 )" 24.53 "0.74" 0.26 19.5 0 +50 500 "0.5" 10 0.09 "1.86 ( 0.11 )" "29.92 ( 1.25 )" "1.88 ( 0.1 )" 33.04 "0.86" 1.86 29.9 1.88 +100 500 "0.5" 5 0.13 "0.59 ( 0.02 )" "37.33 ( 1.25 )" "0.07 ( 0.03 )" 42.26 "0.85" 0.59 37.3 0.07 +500 500 "0.5" 1 0.13 "0.28 ( 0 )" "37.1 ( 1.54 )" "0 ( 0 )" 42.1 "0.83" 0.28 37.1 0 +1000 500 "0.5" 0.5 0.13 "0.27 ( 0 )" "36.71 ( 1.5 )" "0 ( 0 )" 41.71 "0.83" 0.27 36.7 0 +50 1000 "0.5" 20 0.07 "2.33 ( 0.14 )" "35.29 ( 1.69 )" "2.53 ( 0.1 )" 37.76 "0.9" 2.33 35.2 2.53 +100 1000 "0.5" 10 0.11 "0.73 ( 0.03 )" "44.83 ( 1.58 )" "0.18 ( 0.05 )" 49.65 "0.87" 0.73 44.8 0.18 +500 1000 "0.5" 2 0.12 "0.29 ( 0 )" "42.86 ( 2.28 )" "0 ( 0 )" 47.86 "0.85" 0.29 42.8 0 +1000 1000 "0.5" 1 0.13 "0.27 ( 0 )" "41.01 ( 1.99 )" "0 ( 0 )" 46.01 "0.84" 0.27 41 0 +50 50 "0.7" 1 0.18 "0.6 ( 0.04 )" "15.25 ( 0.54 )" "0.25 ( 0.05 )" 20 "0.69" 0.6 15.2 0.25 +100 50 "0.7" 0.5 0.2 "0.35 ( 0.01 )" "15.66 ( 0.62 )" "0 ( 0 )" 20.66 "0.69" 0.35 15.6 0 +500 50 "0.7" 0.1 0.24 "0.26 ( 0 )" "13.41 ( 0.46 )" "0 ( 0 )" 18.41 "0.65" 0.26 13.4 0 +1000 50 "0.7" 0.05 0.26 "0.26 ( 0 )" "12.18 ( 0.6 )" "0 ( 0 )" 17.18 "0.61" 0.26 12.1 0 +50 100 "0.7" 2 0.15 "0.81 ( 0.04 )" "19.25 ( 0.81 )" "0.79 ( 0.09 )" 23.46 "0.75" 0.81 19.2 0.79 +100 100 "0.7" 1 0.18 "0.36 ( 0.01 )" "21.79 ( 0.78 )" "0.01 ( 0.01 )" 26.78 "0.76" 0.36 21.7 0.01 +500 100 "0.7" 0.2 0.18 "0.27 ( 0 )" "21.43 ( 0.75 )" "0 ( 0 )" 26.43 "0.75" 0.27 21.4 0 +1000 100 "0.7" 0.1 0.21 "0.26 ( 0 )" "18.91 ( 0.6 )" "0 ( 0 )" 23.91 "0.73" 0.26 18.9 0 +50 500 "0.7" 10 0.09 "1.48 ( 0.09 )" "27.19 ( 0.95 )" "2.71 ( 0.08 )" 29.48 "0.88" 1.48 27.1 2.71 +100 500 "0.7" 5 0.11 "0.6 ( 0.02 )" "37.9 ( 1.54 )" "0.51 ( 0.07 )" 42.39 "0.86" 0.6 37.9 0.51 +500 500 "0.7" 1 0.13 "0.29 ( 0 )" "38.11 ( 1.41 )" "0 ( 0 )" 43.11 "0.84" 0.29 38.1 0 +1000 500 "0.7" 0.5 0.13 "0.27 ( 0 )" "38.16 ( 1.26 )" "0 ( 0 )" 43.16 "0.85" 0.27 38.1 0 +50 1000 "0.7" 20 0.06 "1.66 ( 0.09 )" "35.91 ( 1.86 )" "3.03 ( 0.09 )" 37.88 "0.91" 1.66 35.9 3.03 +100 1000 "0.7" 10 0.09 "0.78 ( 0.04 )" "39.69 ( 1.62 )" "1.11 ( 0.1 )" 43.58 "0.88" 0.78 39.6 1.11 +500 1000 "0.7" 2 0.11 "0.3 ( 0 )" "49.45 ( 1.98 )" "0 ( 0 )" 54.45 "0.87" 0.3 49.4 0 +1000 1000 "0.7" 1 0.11 "0.27 ( 0 )" "48.15 ( 1.76 )" "0 ( 0 )" 53.15 "0.87" 0.27 48.1 0 +50 50 "0.9" 1 0.16 "0.5 ( 0.02 )" "13.26 ( 0.77 )" "1.03 ( 0.11 )" 17.23 "0.66" 0.5 13.2 1.03 +100 50 "0.9" 0.5 0.21 "0.35 ( 0.01 )" "14 ( 0.69 )" "0.27 ( 0.06 )" 18.73 "0.66" 0.35 14 0.27 +500 50 "0.9" 0.1 0.29 "0.27 ( 0 )" "11.63 ( 0.41 )" "0 ( 0 )" 16.63 "0.62" 0.27 11.6 0 +1000 50 "0.9" 0.05 0.29 "0.26 ( 0 )" "12.06 ( 0.52 )" "0 ( 0 )" 17.06 "0.62" 0.26 12 0 +50 100 "0.9" 2 0.15 "0.56 ( 0.03 )" "15.35 ( 0.8 )" "1.83 ( 0.12 )" 18.52 "0.75" 0.56 15.3 1.83 +100 100 "0.9" 1 0.18 "0.4 ( 0.02 )" "18.69 ( 0.92 )" "0.41 ( 0.07 )" 23.28 "0.73" 0.4 18.6 0.41 +500 100 "0.9" 0.2 0.23 "0.27 ( 0 )" "17.36 ( 0.62 )" "0 ( 0 )" 22.36 "0.71" 0.27 17.3 0 +1000 100 "0.9" 0.1 0.26 "0.26 ( 0 )" "16.05 ( 0.62 )" "0 ( 0 )" 21.05 "0.69" 0.26 16 0 +50 500 "0.9" 10 0.08 "0.88 ( 0.04 )" "25.11 ( 1.93 )" "3.23 ( 0.08 )" 26.88 "0.87" 0.88 25.1 3.23 +100 500 "0.9" 5 0.1 "0.53 ( 0.02 )" "27.99 ( 1.26 )" "2.15 ( 0.1 )" 30.84 "0.86" 0.53 27.9 2.15 +500 500 "0.9" 1 0.12 "0.29 ( 0 )" "41.14 ( 1.02 )" "0 ( 0 )" 46.14 "0.86" 0.29 41.1 0 +1000 500 "0.9" 0.5 0.13 "0.27 ( 0 )" "39.21 ( 0.84 )" "0 ( 0 )" 44.21 "0.86" 0.27 39.2 0 +50 1000 "0.9" 20 0.04 "0.94 ( 0.05 )" "36.59 ( 3.6 )" "3.72 ( 0.08 )" 37.87 "0.92" 0.94 36.5 3.72 +100 1000 "0.9" 10 0.09 "0.59 ( 0.02 )" "32.05 ( 1.85 )" "2.59 ( 0.06 )" 34.46 "0.88" 0.59 32 2.59 +500 1000 "0.9" 2 0.09 "0.3 ( 0 )" "57.69 ( 1.57 )" "0 ( 0 )" 62.69 "0.9" 0.3 57.6 0 +1000 1000 "0.9" 1 0.1 "0.27 ( 0 )" "52.35 ( 1.6 )" "0 ( 0 )" 57.35 "0.89" 0.27 52.3 0 diff --git a/simulations/results_summary_cts/sim_toe_lasso.txt b/simulations/results_summary_cts/sim_toe_lasso.txt new file mode 100755 index 0000000..58c3971 --- /dev/null +++ b/simulations/results_summary_cts/sim_toe_lasso.txt @@ -0,0 +1,81 @@ +"N" "P" "Corr" "Ratio" "Stab" "MSE" "FP" "FN" "num_select" "FDR" "MSE_mean" "FP_mean" "FN_mean" +50 50 "0.1" 1 0.36 "0.62 ( 0.04 )" "8.59 ( 0.46 )" "0.02 ( 0.01 )" 13.57 "0.51" 0.62 8.59 0.02 +100 50 "0.1" 0.5 0.47 "0.37 ( 0.01 )" "6.3 ( 0.43 )" "0 ( 0 )" 11.3 "0.4" 0.37 6.3 0 +500 50 "0.1" 0.1 0.73 "0.28 ( 0 )" "2.88 ( 0.21 )" "0 ( 0 )" 7.88 "0.2" 0.28 2.88 0 +1000 50 "0.1" 0.05 0.89 "0.27 ( 0 )" "1.66 ( 0.11 )" "0 ( 0 )" 6.66 "0.08" 0.27 1.66 0 +50 100 "0.1" 2 0.32 "0.67 ( 0.05 )" "11.84 ( 0.4 )" "0 ( 0 )" 16.84 "0.62" 0.67 11.8 0 +100 100 "0.1" 1 0.44 "0.4 ( 0.01 )" "7.71 ( 0.56 )" "0 ( 0 )" 12.71 "0.46" 0.4 7.71 0 +500 100 "0.1" 0.2 0.7 "0.27 ( 0 )" "3.35 ( 0.22 )" "0 ( 0 )" 8.35 "0.23" 0.27 3.35 0 +1000 100 "0.1" 0.1 0.81 "0.27 ( 0 )" "2.29 ( 0.23 )" "0 ( 0 )" 7.29 "0.13" 0.27 2.29 0 +50 500 "0.1" 10 0.18 "1.61 ( 0.1 )" "20.85 ( 0.38 )" "0.69 ( 0.08 )" 25.16 "0.78" 1.61 20.8 0.69 +100 500 "0.1" 5 0.3 "0.53 ( 0.02 )" "14.69 ( 0.7 )" "0 ( 0 )" 19.69 "0.66" 0.53 14.6 0 +500 500 "0.1" 1 0.55 "0.28 ( 0 )" "5.86 ( 0.51 )" "0 ( 0 )" 10.86 "0.36" 0.28 5.86 0 +1000 500 "0.1" 0.5 0.78 "0.28 ( 0 )" "2.69 ( 0.21 )" "0 ( 0 )" 7.69 "0.17" 0.28 2.69 0 +50 1000 "0.1" 20 0.13 "2.23 ( 0.14 )" "24.37 ( 0.39 )" "1.36 ( 0.1 )" 28.01 "0.83" 2.23 24.3 1.36 +100 1000 "0.1" 10 0.25 "0.57 ( 0.03 )" "18.79 ( 0.7 )" "0 ( 0 )" 23.79 "0.73" 0.57 18.7 0 +500 1000 "0.1" 2 0.49 "0.28 ( 0 )" "7.08 ( 0.53 )" "0 ( 0 )" 12.08 "0.41" 0.28 7.08 0 +1000 1000 "0.1" 1 0.7 "0.27 ( 0 )" "3.59 ( 0.33 )" "0 ( 0 )" 8.59 "0.23" 0.27 3.59 0 +50 50 "0.3" 1 0.35 "0.57 ( 0.03 )" "8.86 ( 0.42 )" "0.05 ( 0.02 )" 13.81 "0.53" 0.57 8.86 0.05 +100 50 "0.3" 0.5 0.47 "0.36 ( 0.01 )" "6.18 ( 0.36 )" "0 ( 0 )" 11.18 "0.41" 0.36 6.18 0 +500 50 "0.3" 0.1 0.7 "0.28 ( 0 )" "3.14 ( 0.21 )" "0 ( 0 )" 8.14 "0.22" 0.28 3.14 0 +1000 50 "0.3" 0.05 0.86 "0.27 ( 0 )" "1.86 ( 0.11 )" "0 ( 0 )" 6.86 "0.11" 0.27 1.86 0 +50 100 "0.3" 2 0.31 "0.76 ( 0.04 )" "11.12 ( 0.37 )" "0.17 ( 0.04 )" 15.95 "0.62" 0.76 11.1 0.17 +100 100 "0.3" 1 0.38 "0.41 ( 0.01 )" "9.43 ( 0.53 )" "0 ( 0 )" 14.43 "0.54" 0.41 9.43 0 +500 100 "0.3" 0.2 0.63 "0.27 ( 0 )" "4.16 ( 0.27 )" "0 ( 0 )" 9.16 "0.29" 0.27 4.16 0 +1000 100 "0.3" 0.1 0.8 "0.27 ( 0 )" "2.36 ( 0.17 )" "0 ( 0 )" 7.36 "0.15" 0.27 2.36 0 +50 500 "0.3" 10 0.14 "1.78 ( 0.11 )" "21.4 ( 0.41 )" "1.39 ( 0.1 )" 25.01 "0.81" 1.78 21.4 1.39 +100 500 "0.3" 5 0.26 "0.53 ( 0.02 )" "16.81 ( 0.77 )" "0.02 ( 0.01 )" 21.79 "0.7" 0.53 16.8 0.02 +500 500 "0.3" 1 0.55 "0.29 ( 0 )" "5.89 ( 0.51 )" "0 ( 0 )" 10.89 "0.36" 0.29 5.89 0 +1000 500 "0.3" 0.5 0.69 "0.27 ( 0 )" "3.68 ( 0.32 )" "0 ( 0 )" 8.68 "0.25" 0.27 3.68 0 +50 1000 "0.3" 20 0.11 "2.21 ( 0.15 )" "25.14 ( 0.35 )" "1.87 ( 0.1 )" 28.27 "0.85" 2.21 25.1 1.87 +100 1000 "0.3" 10 0.22 "0.61 ( 0.03 )" "21.11 ( 0.75 )" "0.02 ( 0.01 )" 26.09 "0.75" 0.61 21.1 0.02 +500 1000 "0.3" 2 0.47 "0.28 ( 0 )" "7.69 ( 0.63 )" "0 ( 0 )" 12.69 "0.45" 0.28 7.69 0 +1000 1000 "0.3" 1 0.58 "0.27 ( 0 )" "5.27 ( 0.46 )" "0 ( 0 )" 10.27 "0.33" 0.27 5.27 0 +50 50 "0.5" 1 0.35 "0.63 ( 0.04 )" "8.51 ( 0.41 )" "0.17 ( 0.04 )" 13.34 "0.53" 0.63 8.51 0.17 +100 50 "0.5" 0.5 0.42 "0.37 ( 0.01 )" "7.21 ( 0.33 )" "0.01 ( 0.01 )" 12.2 "0.47" 0.37 7.21 0.01 +500 50 "0.5" 0.1 0.66 "0.27 ( 0 )" "3.64 ( 0.21 )" "0 ( 0 )" 8.64 "0.27" 0.27 3.64 0 +1000 50 "0.5" 0.05 0.78 "0.27 ( 0 )" "2.46 ( 0.15 )" "0 ( 0 )" 7.46 "0.17" 0.27 2.46 0 +50 100 "0.5" 2 0.24 "0.8 ( 0.05 )" "13.21 ( 0.46 )" "0.6 ( 0.07 )" 17.61 "0.68" 0.8 13.2 0.6 +100 100 "0.5" 1 0.36 "0.44 ( 0.02 )" "10 ( 0.48 )" "0.02 ( 0.01 )" 14.98 "0.56" 0.44 10 0.02 +500 100 "0.5" 0.2 0.62 "0.29 ( 0 )" "4.39 ( 0.28 )" "0 ( 0 )" 9.39 "0.31" 0.29 4.39 0 +1000 100 "0.5" 0.1 0.71 "0.27 ( 0 )" "3.24 ( 0.22 )" "0 ( 0 )" 8.24 "0.23" 0.27 3.24 0 +50 500 "0.5" 10 0.12 "1.73 ( 0.1 )" "21.69 ( 0.32 )" "1.93 ( 0.09 )" 24.76 "0.83" 1.73 21.6 1.93 +100 500 "0.5" 5 0.23 "0.62 ( 0.03 )" "19.6 ( 0.76 )" "0.16 ( 0.04 )" 24.44 "0.74" 0.62 19.6 0.16 +500 500 "0.5" 1 0.4 "0.29 ( 0 )" "9.79 ( 0.55 )" "0 ( 0 )" 14.79 "0.54" 0.29 9.79 0 +1000 500 "0.5" 0.5 0.51 "0.28 ( 0 )" "6.66 ( 0.64 )" "0 ( 0 )" 11.66 "0.38" 0.28 6.66 0 +50 1000 "0.5" 20 0.09 "2.17 ( 0.13 )" "25.13 ( 0.34 )" "2.69 ( 0.1 )" 27.44 "0.88" 2.17 25.1 2.69 +100 1000 "0.5" 10 0.19 "0.75 ( 0.03 )" "23.22 ( 0.79 )" "0.26 ( 0.05 )" 27.96 "0.78" 0.75 23.2 0.26 +500 1000 "0.5" 2 0.39 "0.3 ( 0 )" "10.46 ( 0.63 )" "0 ( 0 )" 15.46 "0.54" 0.3 10.4 0 +1000 1000 "0.5" 1 0.48 "0.28 ( 0 )" "7.42 ( 0.6 )" "0 ( 0 )" 12.42 "0.42" 0.28 7.42 0 +50 50 "0.7" 1 0.3 "0.66 ( 0.04 )" "9.27 ( 0.39 )" "0.47 ( 0.06 )" 13.8 "0.57" 0.66 9.27 0.47 +100 50 "0.7" 0.5 0.39 "0.37 ( 0.01 )" "7.9 ( 0.35 )" "0.05 ( 0.03 )" 12.85 "0.5" 0.37 7.9 0.05 +500 50 "0.7" 0.1 0.6 "0.27 ( 0 )" "4.38 ( 0.21 )" "0 ( 0 )" 9.38 "0.33" 0.27 4.38 0 +1000 50 "0.7" 0.05 0.74 "0.27 ( 0 )" "2.84 ( 0.14 )" "0 ( 0 )" 7.84 "0.21" 0.27 2.84 0 +50 100 "0.7" 2 0.23 "0.8 ( 0.04 )" "11.57 ( 0.53 )" "1.26 ( 0.1 )" 15.31 "0.66" 0.8 11.5 1.26 +100 100 "0.7" 1 0.31 "0.39 ( 0.01 )" "11.68 ( 0.51 )" "0.1 ( 0.04 )" 16.58 "0.61" 0.39 11.6 0.1 +500 100 "0.7" 0.2 0.49 "0.28 ( 0 )" "6.56 ( 0.32 )" "0 ( 0 )" 11.56 "0.44" 0.28 6.56 0 +1000 100 "0.7" 0.1 0.63 "0.27 ( 0 )" "4.24 ( 0.26 )" "0 ( 0 )" 9.24 "0.3" 0.27 4.24 0 +50 500 "0.7" 10 0.12 "1.37 ( 0.08 )" "19.8 ( 0.33 )" "2.78 ( 0.08 )" 22.02 "0.85" 1.37 19.8 2.78 +100 500 "0.7" 5 0.19 "0.62 ( 0.03 )" "18.58 ( 0.85 )" "0.88 ( 0.08 )" 22.7 "0.75" 0.62 18.5 0.88 +500 500 "0.7" 1 0.36 "0.3 ( 0 )" "11.31 ( 0.6 )" "0 ( 0 )" 16.31 "0.58" 0.3 11.3 0 +1000 500 "0.7" 0.5 0.46 "0.27 ( 0 )" "7.93 ( 0.49 )" "0 ( 0 )" 12.93 "0.47" 0.27 7.93 0 +50 1000 "0.7" 20 0.09 "1.5 ( 0.08 )" "22.99 ( 0.35 )" "3.2 ( 0.09 )" 24.79 "0.88" 1.5 22.9 3.2 +100 1000 "0.7" 10 0.14 "0.77 ( 0.04 )" "22.43 ( 0.68 )" "1.45 ( 0.1 )" 25.98 "0.82" 0.77 22.4 1.45 +500 1000 "0.7" 2 0.3 "0.31 ( 0 )" "14.7 ( 0.84 )" "0 ( 0 )" 19.7 "0.65" 0.31 14.7 0 +1000 1000 "0.7" 1 0.41 "0.28 ( 0 )" "9.63 ( 0.54 )" "0 ( 0 )" 14.63 "0.53" 0.28 9.63 0 +50 50 "0.9" 1 0.31 "0.55 ( 0.03 )" "5.65 ( 0.29 )" "2.17 ( 0.13 )" 8.48 "0.51" 0.55 5.65 2.17 +100 50 "0.9" 0.5 0.38 "0.38 ( 0.02 )" "5.85 ( 0.3 )" "1.03 ( 0.11 )" 9.82 "0.45" 0.38 5.85 1.03 +500 50 "0.9" 0.1 0.61 "0.28 ( 0 )" "4.34 ( 0.19 )" "0.01 ( 0.01 )" 9.33 "0.33" 0.28 4.34 0.01 +1000 50 "0.9" 0.05 0.76 "0.27 ( 0 )" "2.71 ( 0.12 )" "0 ( 0 )" 7.71 "0.2" 0.27 2.71 0 +50 100 "0.9" 2 0.26 "0.6 ( 0.03 )" "7.26 ( 0.35 )" "2.69 ( 0.1 )" 9.57 "0.62" 0.6 7.26 2.69 +100 100 "0.9" 1 0.31 "0.44 ( 0.01 )" "7.79 ( 0.39 )" "1.51 ( 0.11 )" 11.28 "0.57" 0.44 7.79 1.51 +500 100 "0.9" 0.2 0.51 "0.29 ( 0 )" "6.45 ( 0.27 )" "0 ( 0 )" 11.45 "0.45" 0.29 6.45 0 +1000 100 "0.9" 0.1 0.61 "0.27 ( 0 )" "4.72 ( 0.21 )" "0 ( 0 )" 9.72 "0.35" 0.27 4.72 0 +50 500 "0.9" 10 0.13 "0.81 ( 0.04 )" "13.78 ( 0.36 )" "3.54 ( 0.08 )" 15.24 "0.83" 0.81 13.7 3.54 +100 500 "0.9" 5 0.18 "0.54 ( 0.02 )" "13.78 ( 0.72 )" "2.58 ( 0.08 )" 16.2 "0.76" 0.54 13.7 2.58 +500 500 "0.9" 1 0.25 "0.3 ( 0 )" "18.18 ( 0.69 )" "0.03 ( 0.02 )" 23.15 "0.72" 0.3 18.1 0.03 +1000 500 "0.9" 0.5 0.33 "0.28 ( 0 )" "12.68 ( 0.57 )" "0 ( 0 )" 17.68 "0.63" 0.28 12.6 0 +50 1000 "0.9" 20 0.08 "0.9 ( 0.05 )" "18.15 ( 0.34 )" "3.92 ( 0.08 )" 19.23 "0.89" 0.9 18.1 3.92 +100 1000 "0.9" 10 0.16 "0.59 ( 0.02 )" "15.99 ( 0.66 )" "2.88 ( 0.06 )" 18.11 "0.81" 0.59 15.9 2.88 +500 1000 "0.9" 2 0.2 "0.31 ( 0 )" "24.62 ( 1.01 )" "0.05 ( 0.02 )" 29.57 "0.77" 0.31 24.6 0.05 +1000 1000 "0.9" 1 0.25 "0.28 ( 0 )" "18.51 ( 0.86 )" "0 ( 0 )" 23.51 "0.71" 0.28 18.5 0 diff --git a/simulations/results_summary_cts/sim_toe_rf.txt b/simulations/results_summary_cts/sim_toe_rf.txt new file mode 100755 index 0000000..65fd568 --- /dev/null +++ b/simulations/results_summary_cts/sim_toe_rf.txt @@ -0,0 +1,81 @@ +"N" "P" "Corr" "Ratio" "Stab" "MSE" "FP" "FN" "OOB" "num_select" "FDR" "MSE_mean" "FP_mean" "FN_mean" "OOB_mean" +50 50 "0.1" 1 0 "1.4 ( 0.06 )" "1 ( 0 )" "6 ( 0 )" "1.98 ( 0.02 )" 0 "NaN" 1.4 1 6 1.98 +100 50 "0.1" 0.5 0.19 "0.86 ( 0.03 )" "1.87 ( 0.14 )" "4.25 ( 0.09 )" "1.76 ( 0.01 )" 3.62 "0.48" 0.86 1.87 4.25 1.76 +500 50 "0.1" 0.1 0.77 "0.44 ( 0.01 )" "0.32 ( 0.05 )" "1.81 ( 0.07 )" "1.29 ( 0 )" 4.51 "0.06" 0.44 0.32 1.81 1.29 +1000 50 "0.1" 0.05 0.86 "0.34 ( 0 )" "0.15 ( 0.04 )" "0.93 ( 0.07 )" "1.15 ( 0 )" 5.22 "0.02" 0.34 0.15 0.93 1.15 +50 100 "0.1" 2 0 "1.36 ( 0.06 )" "1 ( 0 )" "6 ( 0 )" "2.19 ( 0.02 )" 0 "NaN" 1.36 1 6 2.19 +100 100 "0.1" 1 0.12 "0.93 ( 0.03 )" "4.11 ( 0.18 )" "4.17 ( 0.1 )" "1.99 ( 0.01 )" 5.93 "0.68" 0.93 4.11 4.17 1.99 +500 100 "0.1" 0.2 0.57 "0.56 ( 0.01 )" "2.08 ( 0.14 )" "1.52 ( 0.08 )" "1.51 ( 0 )" 6.56 "0.29" 0.56 2.08 1.52 1.51 +1000 100 "0.1" 0.1 0.74 "0.45 ( 0 )" "1.11 ( 0.1 )" "0.74 ( 0.07 )" "1.37 ( 0 )" 6.37 "0.16" 0.45 1.11 0.74 1.37 +50 500 "0.1" 10 0 "1.29 ( 0.05 )" "1 ( 0 )" "6 ( 0 )" "2.39 ( 0.02 )" 0 "NaN" 1.29 1 6 2.39 +100 500 "0.1" 5 0.02 "0.95 ( 0.02 )" "24.82 ( 0.56 )" "4.55 ( 0.09 )" "2.35 ( 0.02 )" 26.27 "0.94" 0.95 24.8 4.55 2.35 +500 500 "0.1" 1 0.13 "0.84 ( 0.01 )" "20.8 ( 0.48 )" "1.79 ( 0.1 )" "2.12 ( 0.01 )" 25.01 "0.83" 0.84 20.8 1.79 2.12 +1000 500 "0.1" 0.5 0.18 "0.76 ( 0.01 )" "18.72 ( 0.37 )" "0.91 ( 0.07 )" "2.02 ( 0 )" 23.81 "0.78" 0.76 18.7 0.91 2.02 +50 1000 "0.1" 20 0 "1.35 ( 0.06 )" "1 ( 0 )" "6 ( 0 )" "2.42 ( 0.02 )" 0 "NaN" 1.35 1 6 2.42 +100 1000 "0.1" 10 0.01 "1 ( 0.03 )" "49.42 ( 0.7 )" "4.71 ( 0.09 )" "2.39 ( 0.02 )" 50.71 "0.97" 1 49.4 4.71 2.39 +500 1000 "0.1" 2 0.06 "0.87 ( 0.01 )" "46.19 ( 0.64 )" "1.97 ( 0.09 )" "2.25 ( 0.01 )" 50.22 "0.92" 0.87 46.1 1.97 2.25 +1000 1000 "0.1" 1 0.09 "0.85 ( 0.01 )" "40.92 ( 0.66 )" "0.98 ( 0.07 )" "2.21 ( 0 )" 45.94 "0.89" 0.85 40.9 0.98 2.21 +50 50 "0.3" 1 0 "1.22 ( 0.05 )" "1 ( 0 )" "6 ( 0 )" "1.87 ( 0.02 )" 0 "NaN" 1.22 1 6 1.87 +100 50 "0.3" 0.5 0.23 "0.77 ( 0.02 )" "1.72 ( 0.11 )" "4.4 ( 0.08 )" "1.65 ( 0.01 )" 3.32 "0.48" 0.77 1.72 4.4 1.65 +500 50 "0.3" 0.1 0.7 "0.39 ( 0 )" "0.54 ( 0.06 )" "1.98 ( 0.08 )" "1.23 ( 0 )" 4.56 "0.11" 0.39 0.54 1.98 1.23 +1000 50 "0.3" 0.05 0.82 "0.31 ( 0 )" "0.3 ( 0.05 )" "1.19 ( 0.08 )" "1.1 ( 0 )" 5.11 "0.05" 0.31 0.3 1.19 1.1 +50 100 "0.3" 2 0 "1.15 ( 0.05 )" "1 ( 0 )" "6 ( 0 )" "2.03 ( 0.02 )" 0 "NaN" 1.15 1 6 2.03 +100 100 "0.3" 1 0.15 "0.81 ( 0.02 )" "3.77 ( 0.16 )" "4.28 ( 0.07 )" "1.87 ( 0.01 )" 5.49 "0.67" 0.81 3.77 4.28 1.87 +500 100 "0.3" 0.2 0.52 "0.51 ( 0.01 )" "2.21 ( 0.14 )" "1.94 ( 0.09 )" "1.45 ( 0 )" 6.27 "0.33" 0.51 2.21 1.94 1.45 +1000 100 "0.3" 0.1 0.75 "0.41 ( 0 )" "1.4 ( 0.1 )" "0.76 ( 0.07 )" "1.31 ( 0 )" 6.64 "0.2" 0.41 1.4 0.76 1.31 +50 500 "0.3" 10 0 "1.14 ( 0.05 )" "1 ( 0 )" "6 ( 0 )" "2.24 ( 0.02 )" 0 "NaN" 1.14 1 6 2.24 +100 500 "0.3" 5 0.02 "0.89 ( 0.03 )" "24.48 ( 0.46 )" "4.69 ( 0.08 )" "2.21 ( 0.01 )" 25.79 "0.95" 0.89 24.4 4.69 2.21 +500 500 "0.3" 1 0.12 "0.73 ( 0.01 )" "20.86 ( 0.41 )" "2.1 ( 0.09 )" "1.99 ( 0.01 )" 24.76 "0.84" 0.73 20.8 2.1 1.99 +1000 500 "0.3" 0.5 0.19 "0.68 ( 0.01 )" "18.71 ( 0.45 )" "1.13 ( 0.08 )" "1.91 ( 0 )" 23.58 "0.79" 0.68 18.7 1.13 1.91 +50 1000 "0.3" 20 0 "1.2 ( 0.05 )" "1 ( 0 )" "6 ( 0 )" "2.29 ( 0.02 )" 0 "NaN" 1.2 1 6 2.29 +100 1000 "0.3" 10 0.01 "0.92 ( 0.03 )" "48.8 ( 0.82 )" "4.79 ( 0.08 )" "2.23 ( 0.02 )" 50.01 "0.98" 0.92 48.8 4.79 2.23 +500 1000 "0.3" 2 0.05 "0.78 ( 0.01 )" "44.58 ( 0.68 )" "2.48 ( 0.09 )" "2.13 ( 0.01 )" 48.1 "0.93" 0.78 44.5 2.48 2.13 +1000 1000 "0.3" 1 0.08 "0.74 ( 0.01 )" "42.87 ( 0.73 )" "1.44 ( 0.09 )" "2.07 ( 0 )" 47.43 "0.9" 0.74 42.8 1.44 2.07 +50 50 "0.5" 1 0 "0.99 ( 0.05 )" "1 ( 0 )" "6 ( 0 )" "1.68 ( 0.02 )" 0 "NaN" 0.99 1 6 1.68 +100 50 "0.5" 0.5 0.24 "0.62 ( 0.02 )" "1.74 ( 0.13 )" "4.39 ( 0.08 )" "1.5 ( 0.01 )" 3.34 "0.47" 0.62 1.74 4.39 1.5 +500 50 "0.5" 0.1 0.7 "0.32 ( 0 )" "0.98 ( 0.09 )" "2.53 ( 0.08 )" "1.14 ( 0 )" 4.45 "0.2" 0.32 0.98 2.53 1.14 +1000 50 "0.5" 0.05 0.78 "0.26 ( 0 )" "0.91 ( 0.07 )" "1.71 ( 0.07 )" "1.03 ( 0 )" 5.2 "0.16" 0.26 0.91 1.71 1.03 +50 100 "0.5" 2 0 "0.91 ( 0.04 )" "1 ( 0 )" "6 ( 0 )" "1.84 ( 0.02 )" 0 "NaN" 0.91 1 6 1.84 +100 100 "0.5" 1 0.15 "0.68 ( 0.02 )" "3.72 ( 0.19 )" "4.42 ( 0.08 )" "1.69 ( 0.01 )" 5.3 "0.66" 0.68 3.72 4.42 1.69 +500 100 "0.5" 0.2 0.56 "0.4 ( 0 )" "2.59 ( 0.13 )" "2.1 ( 0.08 )" "1.32 ( 0 )" 6.49 "0.38" 0.4 2.59 2.1 1.32 +1000 100 "0.5" 0.1 0.76 "0.34 ( 0 )" "2.09 ( 0.1 )" "1.08 ( 0.07 )" "1.2 ( 0 )" 7.01 "0.29" 0.34 2.09 1.08 1.2 +50 500 "0.5" 10 0 "0.95 ( 0.04 )" "1 ( 0 )" "6 ( 0 )" "2.04 ( 0.02 )" 0 "NaN" 0.95 1 6 2.04 +100 500 "0.5" 5 0.03 "0.75 ( 0.02 )" "24.36 ( 0.56 )" "4.57 ( 0.07 )" "1.97 ( 0.01 )" 25.79 "0.94" 0.75 24.3 4.57 1.97 +500 500 "0.5" 1 0.13 "0.58 ( 0.01 )" "20.66 ( 0.49 )" "2.51 ( 0.07 )" "1.79 ( 0.01 )" 24.15 "0.85" 0.58 20.6 2.51 1.79 +1000 500 "0.5" 0.5 0.2 "0.55 ( 0 )" "18.4 ( 0.44 )" "1.77 ( 0.07 )" "1.72 ( 0 )" 22.63 "0.81" 0.55 18.4 1.77 1.72 +50 1000 "0.5" 20 0 "0.94 ( 0.04 )" "1 ( 0 )" "6 ( 0 )" "2.04 ( 0.02 )" 0 "NaN" 0.94 1 6 2.04 +100 1000 "0.5" 10 0.01 "0.72 ( 0.02 )" "48.5 ( 0.74 )" "4.75 ( 0.08 )" "2.03 ( 0.02 )" 49.75 "0.97" 0.72 48.5 4.75 2.03 +500 1000 "0.5" 2 0.05 "0.65 ( 0.01 )" "46.07 ( 0.71 )" "2.83 ( 0.09 )" "1.93 ( 0.01 )" 49.24 "0.93" 0.65 46 2.83 1.93 +1000 1000 "0.5" 1 0.09 "0.61 ( 0.01 )" "41.21 ( 0.68 )" "1.84 ( 0.08 )" "1.87 ( 0 )" 45.37 "0.91" 0.61 41.2 1.84 1.87 +50 50 "0.7" 1 0 "0.66 ( 0.03 )" "1 ( 0 )" "6 ( 0 )" "1.44 ( 0.01 )" 0 "NaN" 0.66 1 6 1.44 +100 50 "0.7" 0.5 0.28 "0.44 ( 0.01 )" "1.84 ( 0.14 )" "4.44 ( 0.08 )" "1.26 ( 0.01 )" 3.4 "0.48" 0.44 1.84 4.44 1.26 +500 50 "0.7" 0.1 0.74 "0.23 ( 0 )" "1.29 ( 0.07 )" "2.76 ( 0.07 )" "0.98 ( 0 )" 4.53 "0.27" 0.23 1.29 2.76 0.98 +1000 50 "0.7" 0.05 0.85 "0.19 ( 0 )" "1.57 ( 0.07 )" "2.29 ( 0.06 )" "0.9 ( 0 )" 5.28 "0.29" 0.19 1.57 2.29 0.9 +50 100 "0.7" 2 0 "0.67 ( 0.03 )" "1 ( 0 )" "6 ( 0 )" "1.5 ( 0.02 )" 0 "NaN" 0.67 1 6 1.5 +100 100 "0.7" 1 0.14 "0.47 ( 0.01 )" "4.64 ( 0.25 )" "4.32 ( 0.09 )" "1.4 ( 0.01 )" 6.32 "0.7" 0.47 4.64 4.32 1.4 +500 100 "0.7" 0.2 0.63 "0.28 ( 0 )" "2.64 ( 0.14 )" "2.52 ( 0.07 )" "1.14 ( 0 )" 6.12 "0.41" 0.28 2.64 2.52 1.14 +1000 100 "0.7" 0.1 0.8 "0.25 ( 0 )" "2.42 ( 0.1 )" "1.76 ( 0.05 )" "1.05 ( 0 )" 6.66 "0.35" 0.25 2.42 1.76 1.05 +50 500 "0.7" 10 0 "0.7 ( 0.03 )" "1 ( 0 )" "6 ( 0 )" "1.68 ( 0.02 )" 0 "NaN" 0.7 1 6 1.68 +100 500 "0.7" 5 0.03 "0.49 ( 0.02 )" "24.87 ( 0.57 )" "4.59 ( 0.09 )" "1.64 ( 0.01 )" 26.28 "0.94" 0.49 24.8 4.59 1.64 +500 500 "0.7" 1 0.13 "0.4 ( 0 )" "21.21 ( 0.55 )" "2.97 ( 0.08 )" "1.49 ( 0 )" 24.24 "0.87" 0.4 21.2 2.97 1.49 +1000 500 "0.7" 0.5 0.21 "0.38 ( 0 )" "17.4 ( 0.46 )" "1.98 ( 0.07 )" "1.43 ( 0 )" 21.42 "0.8" 0.38 17.4 1.98 1.43 +50 1000 "0.7" 20 0 "0.74 ( 0.03 )" "1 ( 0 )" "6 ( 0 )" "1.69 ( 0.02 )" 0 "NaN" 0.74 1 6 1.69 +100 1000 "0.7" 10 0.01 "0.5 ( 0.01 )" "49.02 ( 0.67 )" "4.84 ( 0.08 )" "1.69 ( 0.01 )" 50.18 "0.98" 0.5 49 4.84 1.69 +500 1000 "0.7" 2 0.07 "0.44 ( 0 )" "45.41 ( 0.68 )" "3.02 ( 0.07 )" "1.59 ( 0.01 )" 48.39 "0.94" 0.44 45.4 3.02 1.59 +1000 1000 "0.7" 1 0.09 "0.42 ( 0 )" "42.15 ( 0.71 )" "2.37 ( 0.07 )" "1.56 ( 0 )" 45.78 "0.92" 0.42 42.1 2.37 1.56 +50 50 "0.9" 1 0 "0.27 ( 0.01 )" "1 ( 0 )" "6 ( 0 )" "0.96 ( 0.01 )" 0 "NaN" 0.27 1 6 0.96 +100 50 "0.9" 0.5 0.19 "0.19 ( 0.01 )" "2.14 ( 0.17 )" "4.84 ( 0.08 )" "0.89 ( 0.01 )" 3.28 "0.58" 0.19 2.14 4.84 0.89 +500 50 "0.9" 0.1 0.67 "0.12 ( 0 )" "1.43 ( 0.09 )" "3.13 ( 0.08 )" "0.74 ( 0 )" 4.3 "0.32" 0.12 1.43 3.13 0.74 +1000 50 "0.9" 0.05 0.85 "0.1 ( 0 )" "1.5 ( 0.07 )" "2.46 ( 0.06 )" "0.7 ( 0 )" 5.04 "0.29" 0.1 1.5 2.46 0.7 +50 100 "0.9" 2 0 "0.3 ( 0.01 )" "1 ( 0 )" "6 ( 0 )" "1 ( 0.01 )" 0 "NaN" 0.3 1 6 1 +100 100 "0.9" 1 0.16 "0.19 ( 0.01 )" "4.23 ( 0.22 )" "4.48 ( 0.09 )" "0.98 ( 0.01 )" 5.74 "0.72" 0.19 4.23 4.48 0.98 +500 100 "0.9" 0.2 0.57 "0.14 ( 0 )" "2.86 ( 0.16 )" "2.89 ( 0.07 )" "0.82 ( 0 )" 5.97 "0.45" 0.14 2.86 2.89 0.82 +1000 100 "0.9" 0.1 0.8 "0.12 ( 0 )" "2.42 ( 0.11 )" "1.89 ( 0.05 )" "0.78 ( 0 )" 6.53 "0.36" 0.12 2.42 1.89 0.78 +50 500 "0.9" 10 0 "0.29 ( 0.01 )" "1 ( 0 )" "6 ( 0 )" "1.1 ( 0.01 )" 0 "NaN" 0.29 1 6 1.1 +100 500 "0.9" 5 0.02 "0.21 ( 0.01 )" "24.34 ( 0.71 )" "4.72 ( 0.09 )" "1.08 ( 0.01 )" 25.62 "0.95" 0.21 24.3 4.72 1.08 +500 500 "0.9" 1 0.14 "0.17 ( 0 )" "21.38 ( 0.6 )" "3 ( 0.07 )" "0.99 ( 0 )" 24.38 "0.87" 0.17 21.3 0 0.99 +1000 500 "0.9" 0.5 0.2 "0.16 ( 0 )" "18.68 ( 0.53 )" "2.35 ( 0.06 )" "0.96 ( 0 )" 22.33 "0.83" 0.16 18.6 2.35 0.96 +50 1000 "0.9" 20 0 "0.29 ( 0.01 )" "1 ( 0 )" "6 ( 0 )" "1.11 ( 0.01 )" 0 "NaN" 0.29 1 6 1.11 +100 1000 "0.9" 10 0.01 "0.2 ( 0.01 )" "49.91 ( 0.83 )" "4.99 ( 0.09 )" "1.09 ( 0.01 )" 50.92 "0.98" 0.2 49.9 4.99 1.09 +500 1000 "0.9" 2 0.06 "0.19 ( 0 )" "46.34 ( 0.86 )" "3.13 ( 0.08 )" "1.04 ( 0 )" 49.21 "0.94" 0.19 46.3 3.13 1.04 +1000 1000 "0.9" 1 0.09 "0.18 ( 0 )" "43.52 ( 0.89 )" "2.7 ( 0.07 )" "1.02 ( 0 )" 46.82 "0.93" 0.18 43.5 2.7 1.02 diff --git a/simulations/results_summary_cts/table_block_all.txt b/simulations/results_summary_cts/table_block_all.txt new file mode 100755 index 0000000..9819ec1 --- /dev/null +++ b/simulations/results_summary_cts/table_block_all.txt @@ -0,0 +1,321 @@ +"N" "P" "Corr" "Ratio" "Stab" "MSE" "FP" "FN" "num_select" "FDR" "MSE_mean" "FP_mean" "FN_mean" "method" +50 50 0.1 1 0.05 "0.36 ( 0.01 )" "3.52 ( 0.22 )" "4.92 ( 0.08 )" 3.6 0.65 0.36 3.52 4.92 "lasso" +100 50 0.1 0.5 0.18 "0.31 ( 0.01 )" "2.71 ( 0.25 )" "4.4 ( 0.1 )" 3.31 0.42 0.31 2.71 4.4 "lasso" +500 50 0.1 0.1 0.35 "0.29 ( 0 )" "5.42 ( 0.25 )" "1.97 ( 0.11 )" 8.45 0.48 0.29 5.42 1.97 "lasso" +1000 50 0.1 0.05 0.44 "0.28 ( 0 )" "4.91 ( 0.2 )" "1.57 ( 0.09 )" 8.34 0.44 0.28 4.91 1.57 "lasso" +50 100 0.1 2 0.06 "0.37 ( 0.02 )" "4.73 ( 0.22 )" "4.79 ( 0.08 )" 4.94 0.72 0.37 4.73 4.79 "lasso" +100 100 0.1 1 0.13 "0.34 ( 0.01 )" "3 ( 0.15 )" "4.75 ( 0.09 )" 3.25 0.57 0.34 3 4.75 "lasso" +500 100 0.1 0.2 0.24 "0.3 ( 0 )" "8.56 ( 0.5 )" "2.13 ( 0.12 )" 11.43 0.57 0.3 8.56 2.13 "lasso" +1000 100 0.1 0.1 0.33 "0.29 ( 0 )" "7.77 ( 0.33 )" "1.44 ( 0.08 )" 11.33 0.56 0.29 7.77 1.44 "lasso" +50 500 0.1 10 0.01 "0.37 ( 0.02 )" "10.58 ( 0.31 )" "5.25 ( 0.07 )" 10.33 0.92 0.37 10.5 5.25 "lasso" +100 500 0.1 5 0.05 "0.35 ( 0.01 )" "6.23 ( 0.26 )" "4.94 ( 0.08 )" 6.29 0.82 0.35 6.23 4.94 "lasso" +500 500 0.1 1 0.33 "0.32 ( 0.01 )" "3.77 ( 0.75 )" "3.69 ( 0.08 )" 5.08 0.27 0.32 3.77 3.69 "lasso" +1000 500 0.1 0.5 0.14 "0.29 ( 0 )" "20.61 ( 1.39 )" "2.11 ( 0.1 )" 23.5 0.69 0.29 20.6 2.11 "lasso" +50 1000 0.1 20 0.01 "0.39 ( 0.02 )" "13.99 ( 0.32 )" "5.31 ( 0.07 )" 13.68 0.95 0.39 13.9 5.31 "lasso" +100 1000 0.1 10 0.03 "0.35 ( 0.01 )" "9.56 ( 0.33 )" "5.01 ( 0.08 )" 9.55 0.89 0.35 9.56 5.01 "lasso" +500 1000 0.1 2 0.48 "0.33 ( 0 )" "1.83 ( 0.19 )" "3.97 ( 0.07 )" 2.86 0.2 0.33 1.83 3.97 "lasso" +1000 1000 0.1 1 0.17 "0.3 ( 0 )" "13.42 ( 1.74 )" "2.77 ( 0.09 )" 15.65 0.47 0.3 13.4 2.77 "lasso" +50 50 0.3 1 0.27 "0.72 ( 0.04 )" "8.7 ( 0.42 )" "0.79 ( 0.09 )" 12.91 0.56 0.72 8.7 0.79 "lasso" +100 50 0.3 0.5 0.39 "0.4 ( 0.01 )" "7.91 ( 0.47 )" "0.01 ( 0.01 )" 12.9 0.48 0.4 7.91 0.01 "lasso" +500 50 0.3 0.1 0.63 "0.28 ( 0 )" "3.86 ( 0.25 )" "0 ( 0 )" 8.86 0.28 0.28 3.86 0 "lasso" +1000 50 0.3 0.05 0.78 "0.27 ( 0 )" "2.45 ( 0.14 )" "0 ( 0 )" 7.45 0.17 0.27 2.45 0 "lasso" +50 100 0.3 2 0.21 "0.82 ( 0.05 )" "12.31 ( 0.43 )" "1.14 ( 0.1 )" 16.17 0.68 0.82 12.3 1.14 "lasso" +100 100 0.3 1 0.34 "0.44 ( 0.01 )" "10.58 ( 0.62 )" "0.09 ( 0.03 )" 15.49 0.56 0.44 10.5 0.09 "lasso" +500 100 0.3 0.2 0.61 "0.27 ( 0 )" "4.51 ( 0.29 )" "0 ( 0 )" 9.51 0.32 0.27 4.51 0 "lasso" +1000 100 0.3 0.1 0.69 "0.27 ( 0 )" "3.46 ( 0.29 )" "0 ( 0 )" 8.46 0.24 0.27 3.46 0 "lasso" +50 500 0.3 10 0.09 "1.25 ( 0.07 )" "20.71 ( 0.36 )" "2.63 ( 0.11 )" 23.08 0.85 1.25 20.7 2.63 "lasso" +100 500 0.3 5 0.23 "0.59 ( 0.02 )" "18.01 ( 0.69 )" "0.35 ( 0.06 )" 22.66 0.73 0.59 18 0.35 "lasso" +500 500 0.3 1 0.47 "0.29 ( 0 )" "7.7 ( 0.54 )" "0 ( 0 )" 12.7 0.45 0.29 7.7 0 "lasso" +1000 500 0.3 0.5 0.53 "0.27 ( 0 )" "6.14 ( 0.57 )" "0 ( 0 )" 11.14 0.36 0.27 6.14 0 "lasso" +50 1000 0.3 20 0.06 "1.51 ( 0.08 )" "24.06 ( 0.36 )" "3.21 ( 0.11 )" 25.85 0.89 1.51 24 3.21 "lasso" +100 1000 0.3 10 0.17 "0.67 ( 0.03 )" "22.69 ( 0.61 )" "0.73 ( 0.08 )" 26.96 0.8 0.67 22.6 0.73 "lasso" +500 1000 0.3 2 0.35 "0.29 ( 0 )" "11.72 ( 0.9 )" "0 ( 0 )" 16.72 0.55 0.29 11.7 0 "lasso" +1000 1000 0.3 1 0.51 "0.27 ( 0 )" "6.69 ( 0.52 )" "0 ( 0 )" 11.69 0.41 0.27 6.69 0 "lasso" +50 50 0.5 1 0.33 "0.64 ( 0.03 )" "9.36 ( 0.45 )" "0.12 ( 0.04 )" 14.24 0.55 0.64 9.36 0.12 "lasso" +100 50 0.5 0.5 0.41 "0.36 ( 0.01 )" "7.39 ( 0.39 )" "0 ( 0 )" 12.39 0.47 0.36 7.39 0 "lasso" +500 50 0.5 0.1 0.7 "0.28 ( 0 )" "3.18 ( 0.23 )" "0 ( 0 )" 8.18 0.22 0.28 3.18 0 "lasso" +1000 50 0.5 0.05 0.82 "0.27 ( 0 )" "2.11 ( 0.13 )" "0 ( 0 )" 7.11 0.13 0.27 2.11 0 "lasso" +50 100 0.5 2 0.28 "0.78 ( 0.05 )" "12.05 ( 0.47 )" "0.38 ( 0.07 )" 16.67 0.64 0.78 12 0.38 "lasso" +100 100 0.5 1 0.37 "0.42 ( 0.02 )" "9.57 ( 0.58 )" "0 ( 0 )" 14.57 0.54 0.42 9.57 0 "lasso" +500 100 0.5 0.2 0.59 "0.27 ( 0 )" "4.7 ( 0.3 )" "0 ( 0 )" 9.7 0.33 0.27 4.7 0 "lasso" +1000 100 0.5 0.1 0.78 "0.27 ( 0 )" "2.58 ( 0.16 )" "0 ( 0 )" 7.58 0.18 0.27 2.58 0 "lasso" +50 500 0.5 10 0.12 "1.64 ( 0.1 )" "21.8 ( 0.36 )" "1.82 ( 0.11 )" 24.98 0.83 1.64 21.8 1.82 "lasso" +100 500 0.5 5 0.24 "0.55 ( 0.02 )" "18.37 ( 0.77 )" "0.04 ( 0.02 )" 23.33 0.72 0.55 18.3 0.04 "lasso" +500 500 0.5 1 0.46 "0.3 ( 0 )" "7.82 ( 0.64 )" "0 ( 0 )" 12.82 0.44 0.3 7.82 0 "lasso" +1000 500 0.5 0.5 0.65 "0.28 ( 0 )" "4.16 ( 0.33 )" "0 ( 0 )" 9.16 0.28 0.28 4.16 0 "lasso" +50 1000 0.5 20 0.09 "1.84 ( 0.1 )" "24.67 ( 0.36 )" "2.56 ( 0.11 )" 27.11 0.87 1.84 24.6 2.56 "lasso" +100 1000 0.5 10 0.21 "0.64 ( 0.03 )" "22.01 ( 0.65 )" "0.12 ( 0.03 )" 26.89 0.77 0.64 22 0.12 "lasso" +500 1000 0.5 2 0.45 "0.29 ( 0 )" "8.22 ( 0.73 )" "0 ( 0 )" 13.22 0.44 0.29 8.22 0 "lasso" +1000 1000 0.5 1 0.53 "0.27 ( 0 )" "6.36 ( 0.51 )" "0 ( 0 )" 11.36 0.39 0.27 6.36 0 "lasso" +50 50 0.7 1 0.36 "0.57 ( 0.04 )" "8.63 ( 0.41 )" "0.06 ( 0.02 )" 13.57 0.52 0.57 8.63 0.06 "lasso" +100 50 0.7 0.5 0.45 "0.37 ( 0.01 )" "6.73 ( 0.39 )" "0 ( 0 )" 11.73 0.44 0.37 6.73 0 "lasso" +500 50 0.7 0.1 0.71 "0.28 ( 0 )" "3.01 ( 0.2 )" "0 ( 0 )" 8.01 0.22 0.28 3.01 0 "lasso" +1000 50 0.7 0.05 0.85 "0.27 ( 0 )" "1.89 ( 0.12 )" "0 ( 0 )" 6.89 0.11 0.27 1.89 0 "lasso" +50 100 0.7 2 0.3 "0.82 ( 0.05 )" "11.87 ( 0.44 )" "0.17 ( 0.05 )" 16.7 0.63 0.82 11.8 0.17 "lasso" +100 100 0.7 1 0.37 "0.41 ( 0.02 )" "9.7 ( 0.63 )" "0 ( 0 )" 14.7 0.53 0.41 9.7 0 "lasso" +500 100 0.7 0.2 0.66 "0.28 ( 0 )" "3.85 ( 0.3 )" "0 ( 0 )" 8.85 0.26 0.28 3.85 0 "lasso" +1000 100 0.7 0.1 0.76 "0.27 ( 0 )" "2.71 ( 0.23 )" "0 ( 0 )" 7.71 0.17 0.27 2.71 0 "lasso" +50 500 0.7 10 0.15 "2.03 ( 0.14 )" "21.53 ( 0.36 )" "1.18 ( 0.11 )" 25.35 0.81 2.03 21.5 1.18 "lasso" +100 500 0.7 5 0.28 "0.54 ( 0.02 )" "16.11 ( 0.63 )" "0 ( 0 )" 21.11 0.69 0.54 16.1 0 "lasso" +500 500 0.7 1 0.51 "0.29 ( 0 )" "6.69 ( 0.45 )" "0 ( 0 )" 11.69 0.42 0.29 6.69 0 "lasso" +1000 500 0.7 0.5 0.62 "0.28 ( 0 )" "4.65 ( 0.37 )" "0 ( 0 )" 9.65 0.3 0.28 4.65 0 "lasso" +50 1000 0.7 20 0.1 "2.51 ( 0.13 )" "25.24 ( 0.32 )" "2.11 ( 0.12 )" 28.13 0.86 2.51 25.2 2.11 "lasso" +100 1000 0.7 10 0.22 "0.59 ( 0.02 )" "21.52 ( 0.68 )" "0.01 ( 0.01 )" 26.51 0.76 0.59 21.5 0.01 "lasso" +500 1000 0.7 2 0.47 "0.3 ( 0 )" "7.81 ( 0.61 )" "0 ( 0 )" 12.81 0.45 0.3 7.81 0 "lasso" +1000 1000 0.7 1 0.65 "0.28 ( 0 )" "4.14 ( 0.35 )" "0 ( 0 )" 9.14 0.27 0.28 4.14 0 "lasso" +50 50 0.9 1 0.32 "0.61 ( 0.05 )" "9.61 ( 0.49 )" "0.07 ( 0.03 )" 14.54 0.55 0.61 9.61 0.07 "lasso" +100 50 0.9 0.5 0.44 "0.37 ( 0.01 )" "6.82 ( 0.39 )" "0 ( 0 )" 11.82 0.44 0.37 6.82 0 "lasso" +500 50 0.9 0.1 0.75 "0.27 ( 0 )" "2.68 ( 0.17 )" "0 ( 0 )" 7.68 0.19 0.27 2.68 0 "lasso" +1000 50 0.9 0.05 0.87 "0.27 ( 0 )" "1.76 ( 0.11 )" "0 ( 0 )" 6.76 0.09 0.27 1.76 0 "lasso" +50 100 0.9 2 0.29 "0.87 ( 0.05 )" "12.12 ( 0.37 )" "0.17 ( 0.05 )" 16.95 0.64 0.87 12.1 0.17 "lasso" +100 100 0.9 1 0.4 "0.38 ( 0.01 )" "8.72 ( 0.53 )" "0 ( 0 )" 13.72 0.51 0.38 8.72 0 "lasso" +500 100 0.9 0.2 0.67 "0.27 ( 0 )" "3.68 ( 0.28 )" "0 ( 0 )" 8.68 0.25 0.27 3.68 0 "lasso" +1000 100 0.9 0.1 0.76 "0.27 ( 0 )" "2.72 ( 0.23 )" "0 ( 0 )" 7.72 0.17 0.27 2.72 0 "lasso" +50 500 0.9 10 0.14 "2.29 ( 0.15 )" "23.7 ( 0.43 )" "1.18 ( 0.11 )" 27.52 0.82 2.29 23.7 1.18 "lasso" +100 500 0.9 5 0.28 "0.51 ( 0.02 )" "16.13 ( 0.62 )" "0 ( 0 )" 21.13 0.69 0.51 16.1 0 "lasso" +500 500 0.9 1 0.5 "0.29 ( 0 )" "6.87 ( 0.54 )" "0 ( 0 )" 11.87 0.41 0.29 6.87 0 "lasso" +1000 500 0.9 0.5 0.71 "0.27 ( 0 )" "3.37 ( 0.27 )" "0 ( 0 )" 8.37 0.23 0.27 3.37 0 "lasso" +50 1000 0.9 20 0.11 "2.46 ( 0.16 )" "25.37 ( 0.35 )" "1.73 ( 0.12 )" 28.64 0.85 2.46 25.3 1.73 "lasso" +100 1000 0.9 10 0.22 "0.62 ( 0.03 )" "21.43 ( 0.62 )" "0 ( 0 )" 26.43 0.76 0.62 21.4 0 "lasso" +500 1000 0.9 2 0.46 "0.3 ( 0 )" "7.99 ( 0.79 )" "0 ( 0 )" 12.99 0.42 0.3 7.99 0 "lasso" +1000 1000 0.9 1 0.6 "0.28 ( 0 )" "4.93 ( 0.43 )" "0 ( 0 )" 9.93 0.31 0.28 4.93 0 "lasso" +50 50 0.1 1 0.02 "0.38 ( 0.02 )" "10.9 ( 0.97 )" "3.91 ( 0.15 )" 11.99 0.77 0.38 10.9 3.91 "elnet" +100 50 0.1 0.5 0.06 "0.34 ( 0.01 )" "13.39 ( 1.06 )" "2.45 ( 0.16 )" 15.94 0.68 0.34 13.3 2.45 "elnet" +500 50 0.1 0.1 0.13 "0.27 ( 0 )" "19.21 ( 0.81 )" "0.14 ( 0.04 )" 24.07 0.73 0.27 19.2 0.14 "elnet" +1000 50 0.1 0.05 0.15 "0.26 ( 0 )" "18.76 ( 0.63 )" "0.02 ( 0.01 )" 23.74 0.73 0.26 18.7 0.02 "elnet" +50 100 0.1 2 0.03 "0.41 ( 0.02 )" "9.27 ( 0.76 )" "4.63 ( 0.09 )" 9.64 0.82 0.41 9.27 4.63 "elnet" +100 100 0.1 1 0.07 "0.34 ( 0.01 )" "10.1 ( 1.04 )" "3.87 ( 0.13 )" 11.23 0.7 0.34 10.1 3.87 "elnet" +500 100 0.1 0.2 0.13 "0.29 ( 0 )" "25.4 ( 0.81 )" "0.41 ( 0.06 )" 29.99 0.8 0.29 25.4 0.41 "elnet" +1000 100 0.1 0.1 0.13 "0.27 ( 0 )" "28.36 ( 0.94 )" "0.06 ( 0.03 )" 33.3 0.81 0.27 28.3 0.06 "elnet" +50 500 0.1 10 0.01 "0.41 ( 0.02 )" "30.9 ( 3.51 )" "4.65 ( 0.13 )" 31.25 0.94 0.41 30.9 4.65 "elnet" +100 500 0.1 5 0.03 "0.36 ( 0.01 )" "20.83 ( 2.77 )" "4.43 ( 0.1 )" 21.4 0.87 0.36 20.8 4.43 "elnet" +500 500 0.1 1 0.08 "0.32 ( 0 )" "29.71 ( 2.76 )" "2.55 ( 0.12 )" 32.16 0.8 0.32 29.7 2.55 "elnet" +1000 500 0.1 0.5 0.07 "0.28 ( 0 )" "61.47 ( 1.31 )" "0.56 ( 0.07 )" 65.91 0.91 0.28 61.4 0.56 "elnet" +50 1000 0.1 20 0 "0.41 ( 0.02 )" "38.1 ( 4.05 )" "5.01 ( 0.11 )" 38.09 0.97 0.41 38.1 5.01 "elnet" +100 1000 0.1 10 0.02 "0.36 ( 0.01 )" "35.49 ( 4.37 )" "4.34 ( 0.14 )" 36.15 0.93 0.36 35.4 4.34 "elnet" +500 1000 0.1 2 0.1 "0.3 ( 0 )" "20.28 ( 2.74 )" "3.25 ( 0.08 )" 22.03 0.75 0.3 20.2 3.25 "elnet" +1000 1000 0.1 1 0.05 "0.29 ( 0 )" "71.65 ( 3.47 )" "1.5 ( 0.1 )" 75.15 0.9 0.29 71.6 1.5 "elnet" +50 50 0.3 1 0.17 "0.56 ( 0.03 )" "15.98 ( 0.61 )" "0.26 ( 0.05 )" 20.72 0.7 0.56 15.9 0.26 "elnet" +100 50 0.3 0.5 0.2 "0.34 ( 0.01 )" "15.16 ( 0.6 )" "0 ( 0 )" 20.16 0.68 0.34 15.1 0 "elnet" +500 50 0.3 0.1 0.19 "0.27 ( 0 )" "15.78 ( 0.58 )" "0 ( 0 )" 20.78 0.69 0.27 15.7 0 "elnet" +1000 50 0.3 0.05 0.22 "0.26 ( 0 )" "14.34 ( 0.49 )" "0 ( 0 )" 19.34 0.67 0.26 14.3 0 "elnet" +50 100 0.3 2 0.13 "0.81 ( 0.05 )" "22.23 ( 1.04 )" "0.7 ( 0.08 )" 26.53 0.78 0.81 22.2 0.7 "elnet" +100 100 0.3 1 0.16 "0.42 ( 0.02 )" "23.17 ( 0.94 )" "0.02 ( 0.01 )" 28.15 0.77 0.42 23.1 0.02 "elnet" +500 100 0.3 0.2 0.18 "0.27 ( 0 )" "21.25 ( 0.84 )" "0 ( 0 )" 26.25 0.74 0.27 21.2 0 "elnet" +1000 100 0.3 0.1 0.2 "0.26 ( 0 )" "19.57 ( 0.81 )" "0 ( 0 )" 24.57 0.73 0.26 19.5 0 "elnet" +50 500 0.3 10 0.05 "1.29 ( 0.07 )" "43.56 ( 3.08 )" "2.15 ( 0.13 )" 46.41 0.89 1.29 43.5 2.15 "elnet" +100 500 0.3 5 0.13 "0.54 ( 0.02 )" "35.33 ( 1.21 )" "0.19 ( 0.05 )" 40.14 0.84 0.54 35.3 0.19 "elnet" +500 500 0.3 1 0.14 "0.28 ( 0 )" "35.68 ( 1.62 )" "0 ( 0 )" 40.68 0.83 0.28 35.6 0 "elnet" +1000 500 0.3 0.5 0.14 "0.27 ( 0 )" "36.15 ( 1.61 )" "0 ( 0 )" 41.15 0.83 0.27 36.1 0 "elnet" +50 1000 0.3 20 0.03 "1.3 ( 0.07 )" "61.12 ( 4.33 )" "2.56 ( 0.12 )" 63.56 0.93 1.3 61.1 2.56 "elnet" +100 1000 0.3 10 0.1 "0.68 ( 0.03 )" "41.5 ( 1.64 )" "0.61 ( 0.08 )" 45.89 0.87 0.68 41.5 0.61 "elnet" +500 1000 0.3 2 0.11 "0.29 ( 0 )" "46.27 ( 2.2 )" "0 ( 0 )" 51.27 0.86 0.29 46.2 0 "elnet" +1000 1000 0.3 1 0.13 "0.27 ( 0 )" "39.23 ( 2 )" "0 ( 0 )" 44.23 0.83 0.27 39.2 0 "elnet" +50 50 0.5 1 0.19 "0.65 ( 0.05 )" "15.43 ( 0.64 )" "0.1 ( 0.04 )" 20.33 0.68 0.65 15.4 0.1 "elnet" +100 50 0.5 0.5 0.2 "0.34 ( 0.01 )" "14.94 ( 0.61 )" "0 ( 0 )" 19.94 0.67 0.34 14.9 0 "elnet" +500 50 0.5 0.1 0.2 "0.27 ( 0 )" "15.76 ( 0.59 )" "0 ( 0 )" 20.76 0.69 0.27 15.7 0 "elnet" +1000 50 0.5 0.05 0.25 "0.26 ( 0 )" "12.73 ( 0.5 )" "0 ( 0 )" 17.73 0.63 0.26 12.7 0 "elnet" +50 100 0.5 2 0.16 "0.8 ( 0.05 )" "21.3 ( 0.83 )" "0.3 ( 0.06 )" 26 0.76 0.8 21.3 0.3 "elnet" +100 100 0.5 1 0.18 "0.37 ( 0.01 )" "21.74 ( 0.84 )" "0 ( 0 )" 26.74 0.75 0.37 21.7 0 "elnet" +500 100 0.5 0.2 0.19 "0.27 ( 0 )" "20.71 ( 0.8 )" "0 ( 0 )" 25.71 0.74 0.27 20.7 0 "elnet" +1000 100 0.5 0.1 0.18 "0.26 ( 0 )" "20.53 ( 0.72 )" "0 ( 0 )" 25.53 0.75 0.26 20.5 0 "elnet" +50 500 0.5 10 0.08 "1.61 ( 0.1 )" "36.33 ( 2.13 )" "1.58 ( 0.11 )" 39.75 0.87 1.61 36.3 1.58 "elnet" +100 500 0.5 5 0.14 "0.53 ( 0.02 )" "34.91 ( 1.29 )" "0.02 ( 0.01 )" 39.89 0.83 0.53 34.9 0.02 "elnet" +500 500 0.5 1 0.15 "0.28 ( 0 )" "32.67 ( 1.7 )" "0 ( 0 )" 37.67 0.8 0.28 32.6 0 "elnet" +1000 500 0.5 0.5 0.14 "0.26 ( 0 )" "33.71 ( 1.97 )" "0 ( 0 )" 38.71 0.8 0.26 33.7 0 "elnet" +50 1000 0.5 20 0.04 "2 ( 0.1 )" "52.83 ( 3.84 )" "2.29 ( 0.1 )" 55.54 0.91 2 52.8 2.29 "elnet" +100 1000 0.5 10 0.11 "0.68 ( 0.03 )" "43.94 ( 1.56 )" "0.14 ( 0.03 )" 48.8 0.87 0.68 43.9 0.14 "elnet" +500 1000 0.5 2 0.14 "0.28 ( 0 )" "37.63 ( 1.92 )" "0 ( 0 )" 42.63 0.83 0.28 37.6 0 "elnet" +1000 1000 0.5 1 0.14 "0.27 ( 0 )" "35.42 ( 1.84 )" "0 ( 0 )" 40.42 0.82 0.27 35.4 0 "elnet" +50 50 0.7 1 0.18 "0.63 ( 0.04 )" "16.71 ( 0.61 )" "0.04 ( 0.02 )" 21.67 0.7 0.63 16.7 0.04 "elnet" +100 50 0.7 0.5 0.22 "0.33 ( 0.01 )" "14.2 ( 0.55 )" "0 ( 0 )" 19.2 0.66 0.33 14.2 0 "elnet" +500 50 0.7 0.1 0.22 "0.26 ( 0 )" "13.96 ( 0.52 )" "0 ( 0 )" 18.96 0.66 0.26 13.9 0 "elnet" +1000 50 0.7 0.05 0.25 "0.26 ( 0 )" "12.77 ( 0.52 )" "0 ( 0 )" 17.77 0.63 0.26 12.7 0 "elnet" +50 100 0.7 2 0.18 "0.86 ( 0.07 )" "19.83 ( 0.86 )" "0.11 ( 0.03 )" 24.72 0.74 0.86 19.8 0.11 "elnet" +100 100 0.7 1 0.17 "0.38 ( 0.01 )" "22.59 ( 1.11 )" "0 ( 0 )" 27.59 0.75 0.38 22.5 0 "elnet" +500 100 0.7 0.2 0.21 "0.28 ( 0 )" "17.78 ( 0.8 )" "0 ( 0 )" 22.78 0.7 0.28 17.7 0 "elnet" +1000 100 0.7 0.1 0.21 "0.26 ( 0 )" "18.55 ( 0.87 )" "0 ( 0 )" 23.55 0.71 0.26 18.5 0 "elnet" +50 500 0.7 10 0.1 "2.19 ( 0.14 )" "33.13 ( 1.76 )" "1.25 ( 0.11 )" 36.88 0.86 2.19 33.1 1.25 "elnet" +100 500 0.7 5 0.13 "0.51 ( 0.02 )" "37.39 ( 1.42 )" "0 ( 0 )" 42.39 0.84 0.51 37.3 0 "elnet" +500 500 0.7 1 0.16 "0.28 ( 0 )" "30.18 ( 1.66 )" "0 ( 0 )" 35.18 0.79 0.28 30.1 0 "elnet" +1000 500 0.7 0.5 0.15 "0.26 ( 0 )" "33.3 ( 1.59 )" "0 ( 0 )" 38.3 0.81 0.26 33.3 0 "elnet" +50 1000 0.7 20 0.06 "2.43 ( 0.14 )" "41.11 ( 2.8 )" "1.98 ( 0.11 )" 44.13 0.89 2.43 41.1 1.98 "elnet" +100 1000 0.7 10 0.12 "0.68 ( 0.03 )" "42.68 ( 1.53 )" "0.02 ( 0.01 )" 47.66 0.86 0.68 42.6 0.02 "elnet" +500 1000 0.7 2 0.12 "0.29 ( 0 )" "42.75 ( 2.32 )" "0 ( 0 )" 47.75 0.84 0.29 42.7 0 "elnet" +1000 1000 0.7 1 0.14 "0.27 ( 0 )" "36.88 ( 2.33 )" "0 ( 0 )" 41.88 0.81 0.27 36.8 0 "elnet" +50 50 0.9 1 0.21 "0.56 ( 0.03 )" "14.5 ( 0.57 )" "0.03 ( 0.02 )" 19.47 0.67 0.56 14.5 0.03 "elnet" +100 50 0.9 0.5 0.23 "0.33 ( 0.01 )" "13.9 ( 0.6 )" "0 ( 0 )" 18.9 0.65 0.33 13.9 0 "elnet" +500 50 0.9 0.1 0.25 "0.26 ( 0 )" "12.75 ( 0.49 )" "0 ( 0 )" 17.75 0.63 0.26 12.7 0 "elnet" +1000 50 0.9 0.05 0.25 "0.26 ( 0 )" "12.64 ( 0.49 )" "0 ( 0 )" 17.64 0.63 0.26 12.6 0 "elnet" +50 100 0.9 2 0.18 "0.75 ( 0.04 )" "20.94 ( 0.7 )" "0.07 ( 0.03 )" 25.87 0.75 0.75 20.9 0.07 "elnet" +100 100 0.9 1 0.18 "0.38 ( 0.01 )" "20.8 ( 0.95 )" "0 ( 0 )" 25.8 0.73 0.38 20.8 0 "elnet" +500 100 0.9 0.2 0.2 "0.26 ( 0 )" "18.74 ( 0.84 )" "0 ( 0 )" 23.74 0.72 0.26 18.7 0 "elnet" +1000 100 0.9 0.1 0.19 "0.26 ( 0 )" "19.91 ( 0.91 )" "0 ( 0 )" 24.91 0.72 0.26 19.9 0 "elnet" +50 500 0.9 10 0.1 "2.21 ( 0.15 )" "35.26 ( 2.1 )" "0.98 ( 0.09 )" 39.28 0.85 2.21 35.2 0.98 "elnet" +100 500 0.9 5 0.14 "0.5 ( 0.02 )" "35.7 ( 1.48 )" "0 ( 0 )" 40.7 0.83 0.5 35.7 0 "elnet" +500 500 0.9 1 0.15 "0.28 ( 0 )" "32.6 ( 1.76 )" "0 ( 0 )" 37.6 0.81 0.28 32.6 0 "elnet" +1000 500 0.9 0.5 0.16 "0.26 ( 0 )" "30.4 ( 1.66 )" "0 ( 0 )" 35.4 0.79 0.26 30.4 0 "elnet" +50 1000 0.9 20 0.07 "3.06 ( 0.18 )" "43.09 ( 2.82 )" "1.57 ( 0.1 )" 46.52 0.88 3.06 43 1.57 "elnet" +100 1000 0.9 10 0.12 "0.59 ( 0.03 )" "43.91 ( 1.31 )" "0 ( 0 )" 48.91 0.87 0.59 43.9 0 "elnet" +500 1000 0.9 2 0.12 "0.29 ( 0 )" "41.57 ( 2.28 )" "0 ( 0 )" 46.57 0.84 0.29 41.5 0 "elnet" +1000 1000 0.9 1 0.13 "0.27 ( 0 )" "38.76 ( 2.16 )" "0 ( 0 )" 43.76 0.82 0.27 38.7 0 "elnet" +50 50 0.1 1 0 "0.08 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 0.08 0 6 "rf" +100 50 0.1 0.5 0.03 "0.07 ( 0 )" "2.26 ( 0.17 )" "5.06 ( 0.12 )" 3.04 0.7 0.07 2.26 5.06 "rf" +500 50 0.1 0.1 0.23 "0.05 ( 0 )" "2.34 ( 0.16 )" "3.77 ( 0.14 )" 4.56 0.49 0.05 2.34 3.77 "rf" +1000 50 0.1 0.05 0.51 "0.05 ( 0 )" "2.37 ( 0.16 )" "2.54 ( 0.11 )" 5.83 0.38 0.05 2.37 2.54 "rf" +50 100 0.1 2 0 "0.08 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 0.08 0 6 "rf" +100 100 0.1 1 0.01 "0.07 ( 0 )" "4.76 ( 0.27 )" "5.51 ( 0.09 )" 5.24 0.91 0.07 4.76 5.51 "rf" +500 100 0.1 0.2 0.22 "0.05 ( 0 )" "4.86 ( 0.25 )" "3.36 ( 0.15 )" 7.5 0.63 0.05 4.86 3.36 "rf" +1000 100 0.1 0.1 0.52 "0.05 ( 0 )" "4.65 ( 0.2 )" "1.99 ( 0.13 )" 8.66 0.52 0.05 4.65 1.99 "rf" +50 500 0.1 10 0 "0.08 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 0.08 0 6 "rf" +100 500 0.1 5 0 "0.07 ( 0 )" "23.53 ( 0.53 )" "5.27 ( 0.11 )" 24.26 0.97 0.07 23.5 5.27 "rf" +500 500 0.1 1 0.07 "0.06 ( 0 )" "23.98 ( 0.51 )" "3.3 ( 0.16 )" 26.68 0.9 0.06 23.9 3.3 "rf" +1000 500 0.1 0.5 0.17 "0.05 ( 0 )" "23.6 ( 0.51 )" "1.93 ( 0.15 )" 27.67 0.85 0.05 23.6 1.93 "rf" +50 1000 0.1 20 0 "0.08 ( 0 )" "1 ( 0 )" "6 ( 0 )" 0 NA 0.08 0 6 "rf" +100 1000 0.1 10 0 "0.06 ( 0 )" "48.27 ( 0.79 )" "5.46 ( 0.08 )" 48.81 0.99 0.06 48.2 5.46 "rf" +500 1000 0.1 2 0.02 "0.06 ( 0 )" "48.48 ( 0.7 )" "3.65 ( 0.16 )" 50.83 0.95 0.06 48.4 3.65 "rf" +1000 1000 0.1 1 0.07 "0.05 ( 0 )" "47.72 ( 0.68 )" "2.25 ( 0.14 )" 51.47 0.93 0.05 47.7 2.25 "rf" +50 50 0.3 1 0 "0.31 ( 0.01 )" "1 ( 0 )" "6 ( 0 )" 0 NA 0.31 0 6 "rf" +100 50 0.3 0.5 0.05 "0.25 ( 0.01 )" "1.97 ( 0.13 )" "4.84 ( 0.08 )" 3.11 0.59 0.25 1.97 4.84 "rf" +500 50 0.3 0.1 0.65 "0.16 ( 0 )" "0.74 ( 0.08 )" "1.78 ( 0.08 )" 4.96 0.14 0.16 0.74 1.78 "rf" +1000 50 0.3 0.05 0.84 "0.13 ( 0 )" "0.3 ( 0.05 )" "0.69 ( 0.07 )" 5.61 0.05 0.13 0.3 0.69 "rf" +50 100 0.3 2 0 "0.32 ( 0.01 )" "1 ( 0 )" "6 ( 0 )" 0 NA 0.32 0 6 "rf" +100 100 0.3 1 0.05 "0.25 ( 0.01 )" "4.14 ( 0.18 )" "4.63 ( 0.1 )" 5.51 0.74 0.25 4.14 4.63 "rf" +500 100 0.3 0.2 0.47 "0.19 ( 0 )" "2.7 ( 0.14 )" "1.77 ( 0.09 )" 6.93 0.37 0.19 2.7 1.77 "rf" +1000 100 0.3 0.1 0.66 "0.16 ( 0 )" "1.78 ( 0.13 )" "0.64 ( 0.07 )" 7.14 0.23 0.16 1.78 0.64 "rf" +50 500 0.3 10 0 "0.36 ( 0.02 )" "1 ( 0 )" "6 ( 0 )" 0 NA 0.36 0 6 "rf" +100 500 0.3 5 0.01 "0.25 ( 0.01 )" "25.01 ( 0.53 )" "4.87 ( 0.09 )" 26.14 0.96 0.25 25 4.87 "rf" +500 500 0.3 1 0.09 "0.23 ( 0 )" "22.67 ( 0.44 )" "2.42 ( 0.09 )" 26.25 0.86 0.23 22.6 2.42 "rf" +1000 500 0.3 0.5 0.16 "0.22 ( 0 )" "19.38 ( 0.47 )" "1.14 ( 0.07 )" 24.24 0.79 0.22 19.3 1.14 "rf" +50 1000 0.3 20 0 "0.34 ( 0.01 )" "1 ( 0 )" "6 ( 0 )" 0 NA 0.34 0 6 "rf" +100 1000 0.3 10 0 "0.26 ( 0.01 )" "48.76 ( 0.63 )" "5.22 ( 0.09 )" 49.54 0.98 0.26 48.7 5.22 "rf" +500 1000 0.3 2 0.04 "0.23 ( 0 )" "46.28 ( 0.69 )" "2.72 ( 0.1 )" 49.56 0.93 0.23 46.2 2.72 "rf" +1000 1000 0.3 1 0.07 "0.23 ( 0 )" "44.67 ( 0.68 )" "1.33 ( 0.08 )" 49.34 0.9 0.23 44.6 1.33 "rf" +50 50 0.5 1 0 "0.6 ( 0.03 )" "1 ( 0 )" "6 ( 0 )" 0 NA 0.6 0 6 "rf" +100 50 0.5 0.5 0.09 "0.42 ( 0.01 )" "1.75 ( 0.14 )" "4.6 ( 0.09 )" 3.15 0.5 0.42 1.75 4.6 "rf" +500 50 0.5 0.1 0.71 "0.26 ( 0 )" "0.56 ( 0.07 )" "1.57 ( 0.08 )" 4.99 0.1 0.26 0.56 1.57 "rf" +1000 50 0.5 0.05 0.85 "0.2 ( 0 )" "0.24 ( 0.05 )" "0.73 ( 0.07 )" 5.51 0.04 0.2 0.24 0.73 "rf" +50 100 0.5 2 0 "0.6 ( 0.02 )" "1 ( 0 )" "6 ( 0 )" 0 NA 0.6 0 6 "rf" +100 100 0.5 1 0.06 "0.47 ( 0.02 )" "4.15 ( 0.17 )" "4.61 ( 0.09 )" 5.54 0.74 0.47 4.15 4.61 "rf" +500 100 0.5 0.2 0.52 "0.32 ( 0 )" "2.32 ( 0.14 )" "1.5 ( 0.09 )" 6.82 0.32 0.32 2.32 1.5 "rf" +1000 100 0.5 0.1 0.73 "0.26 ( 0 )" "1.21 ( 0.1 )" "0.6 ( 0.07 )" 6.61 0.17 0.26 1.21 0.6 "rf" +50 500 0.5 10 0 "0.58 ( 0.02 )" "1 ( 0 )" "6 ( 0 )" 0 NA 0.58 0 6 "rf" +100 500 0.5 5 0.01 "0.46 ( 0.01 )" "24.25 ( 0.46 )" "4.96 ( 0.09 )" 25.29 0.96 0.46 24.2 4.96 "rf" +500 500 0.5 1 0.11 "0.41 ( 0 )" "21.23 ( 0.42 )" "2.01 ( 0.1 )" 25.22 0.84 0.41 21.2 2.01 "rf" +1000 500 0.5 0.5 0.17 "0.37 ( 0 )" "18.91 ( 0.41 )" "0.96 ( 0.07 )" 23.95 0.78 0.37 18.9 0.96 "rf" +50 1000 0.5 20 0 "0.57 ( 0.02 )" "1 ( 0 )" "6 ( 0 )" 0 NA 0.57 0 6 "rf" +100 1000 0.5 10 0 "0.47 ( 0.01 )" "49.88 ( 0.68 )" "5.13 ( 0.08 )" 50.75 0.98 0.47 49.8 5.13 "rf" +500 1000 0.5 2 0.05 "0.42 ( 0 )" "45.98 ( 0.68 )" "2.22 ( 0.09 )" 49.76 0.92 0.42 45.9 2.22 "rf" +1000 1000 0.5 1 0.08 "0.4 ( 0 )" "44.42 ( 0.63 )" "1.13 ( 0.07 )" 49.29 0.9 0.4 44.4 1.13 "rf" +50 50 0.7 1 0 "0.8 ( 0.04 )" "1 ( 0 )" "6 ( 0 )" 0 NA 0.8 0 6 "rf" +100 50 0.7 0.5 0.11 "0.59 ( 0.02 )" "1.85 ( 0.14 )" "4.52 ( 0.08 )" 3.32 0.51 0.59 1.85 4.52 "rf" +500 50 0.7 0.1 0.71 "0.35 ( 0 )" "0.51 ( 0.07 )" "1.72 ( 0.09 )" 4.79 0.1 0.35 0.51 1.72 "rf" +1000 50 0.7 0.05 0.87 "0.27 ( 0 )" "0.18 ( 0.05 )" "0.72 ( 0.07 )" 5.46 0.03 0.27 0.18 0.72 "rf" +50 100 0.7 2 0 "0.92 ( 0.04 )" "1 ( 0 )" "6 ( 0 )" 0 NA 0.92 0 6 "rf" +100 100 0.7 1 0.05 "0.63 ( 0.02 )" "4.69 ( 0.18 )" "4.65 ( 0.09 )" 6.04 0.77 0.63 4.69 4.65 "rf" +500 100 0.7 0.2 0.53 "0.43 ( 0 )" "2.27 ( 0.15 )" "1.46 ( 0.09 )" 6.81 0.31 0.43 2.27 1.46 "rf" +1000 100 0.7 0.1 0.71 "0.35 ( 0 )" "1.47 ( 0.13 )" "0.63 ( 0.06 )" 6.84 0.19 0.35 1.47 0.63 "rf" +50 500 0.7 10 0 "0.91 ( 0.04 )" "1 ( 0 )" "6 ( 0 )" 0 NA 0.91 0 6 "rf" +100 500 0.7 5 0.01 "0.69 ( 0.02 )" "24.52 ( 0.45 )" "4.6 ( 0.09 )" 25.92 0.95 0.69 24.5 4.6 "rf" +500 500 0.7 1 0.12 "0.57 ( 0.01 )" "20.96 ( 0.41 )" "1.86 ( 0.09 )" 25.1 0.83 0.57 20.9 1.86 "rf" +1000 500 0.7 0.5 0.17 "0.52 ( 0 )" "18.88 ( 0.46 )" "1.01 ( 0.08 )" 23.87 0.78 0.52 18.8 1.01 "rf" +50 1000 0.7 20 0 "0.91 ( 0.04 )" "1 ( 0 )" "6 ( 0 )" 0 NA 0.91 0 6 "rf" +100 1000 0.7 10 0.01 "0.66 ( 0.02 )" "49.65 ( 0.71 )" "4.89 ( 0.09 )" 50.76 0.98 0.66 49.6 4.89 "rf" +500 1000 0.7 2 0.05 "0.6 ( 0.01 )" "47.23 ( 0.73 )" "2.18 ( 0.1 )" 51.05 0.92 0.6 47.2 2.18 "rf" +1000 1000 0.7 1 0.08 "0.57 ( 0 )" "43.91 ( 0.67 )" "1.1 ( 0.08 )" 48.81 0.9 0.57 43.9 1.1 "rf" +50 50 0.9 1 0 "1.1 ( 0.04 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1.1 0 6 "rf" +100 50 0.9 0.5 0.16 "0.78 ( 0.02 )" "1.56 ( 0.11 )" "4.38 ( 0.09 )" 3.16 0.46 0.78 1.56 4.38 "rf" +500 50 0.9 0.1 0.74 "0.44 ( 0 )" "0.45 ( 0.06 )" "1.49 ( 0.08 )" 4.96 0.08 0.44 0.45 1.49 "rf" +1000 50 0.9 0.05 0.86 "0.34 ( 0 )" "0.14 ( 0.04 )" "0.86 ( 0.08 )" 5.28 0.02 0.34 0.14 0.86 "rf" +50 100 0.9 2 0 "1.11 ( 0.05 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1.11 0 6 "rf" +100 100 0.9 1 0.09 "0.84 ( 0.02 )" "3.94 ( 0.18 )" "4.32 ( 0.09 )" 5.62 0.68 0.84 3.94 4.32 "rf" +500 100 0.9 0.2 0.55 "0.54 ( 0.01 )" "2.11 ( 0.15 )" "1.47 ( 0.08 )" 6.64 0.29 0.54 2.11 1.47 "rf" +1000 100 0.9 0.1 0.76 "0.44 ( 0 )" "1.05 ( 0.11 )" "0.55 ( 0.06 )" 6.5 0.14 0.44 1.05 0.55 "rf" +50 500 0.9 10 0 "1.18 ( 0.05 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1.18 0 6 "rf" +100 500 0.9 5 0.01 "0.86 ( 0.02 )" "24.13 ( 0.47 )" "4.7 ( 0.09 )" 25.43 0.95 0.86 24.1 4.7 "rf" +500 500 0.9 1 0.12 "0.73 ( 0.01 )" "20.83 ( 0.45 )" "2.04 ( 0.09 )" 24.79 0.84 0.73 20.8 2.04 "rf" +1000 500 0.9 0.5 0.18 "0.68 ( 0.01 )" "18.47 ( 0.43 )" "1 ( 0.07 )" 23.47 0.78 0.68 18.4 0 "rf" +50 1000 0.9 20 0 "1.22 ( 0.05 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1.22 0 6 "rf" +100 1000 0.9 10 0.01 "0.93 ( 0.02 )" "49.18 ( 0.69 )" "4.67 ( 0.09 )" 50.51 0.97 0.93 49.1 4.67 "rf" +500 1000 0.9 2 0.06 "0.78 ( 0.01 )" "46.01 ( 0.7 )" "2.14 ( 0.09 )" 49.87 0.92 0.78 46 2.14 "rf" +1000 1000 0.9 1 0.08 "0.74 ( 0.01 )" "43.05 ( 0.72 )" "1.17 ( 0.08 )" 47.88 0.9 0.74 43 1.17 "rf" +50 50 0.1 1 0.03 "0.36 ( 0.01 )" "2.8 ( 0.36 )" "5.01 ( 0.09 )" 3.79 0.62 0.36 2.8 5.01 "compLasso" +100 50 0.1 0.5 0.1 "0.32 ( 0.01 )" "4.96 ( 0.55 )" "3.77 ( 0.14 )" 7.19 0.55 0.32 4.96 3.77 "compLasso" +500 50 0.1 0.1 0.26 "0.28 ( 0 )" "8.81 ( 0.4 )" "0.78 ( 0.08 )" 14.03 0.6 0.28 8.81 0.78 "compLasso" +1000 50 0.1 0.05 0.31 "0.27 ( 0 )" "8.37 ( 0.37 )" "0.24 ( 0.06 )" 14.13 0.56 0.27 8.37 0.24 "compLasso" +50 100 0.1 2 0.04 "0.37 ( 0.02 )" "2.54 ( 0.37 )" "5.22 ( 0.08 )" 3.32 0.63 0.37 2.54 5.22 "compLasso" +100 100 0.1 1 0.07 "0.35 ( 0.01 )" "3.99 ( 0.57 )" "4.63 ( 0.1 )" 5.36 0.56 0.35 3.99 4.63 "compLasso" +500 100 0.1 0.2 0.18 "0.29 ( 0 )" "13.62 ( 0.62 )" "1.22 ( 0.11 )" 18.4 0.69 0.29 13.6 1.22 "compLasso" +1000 100 0.1 0.1 0.23 "0.28 ( 0 )" "13.35 ( 0.59 )" "0.47 ( 0.07 )" 18.88 0.67 0.28 13.3 0.47 "compLasso" +50 500 0.1 10 0.01 "0.36 ( 0.02 )" "3.53 ( 0.44 )" "5.62 ( 0.07 )" 3.91 0.85 0.36 3.53 5.62 "compLasso" +100 500 0.1 5 0.05 "0.36 ( 0.01 )" "2.58 ( 0.45 )" "5.29 ( 0.08 )" 3.29 0.64 0.36 2.58 5.29 "compLasso" +500 500 0.1 1 0.36 "0.32 ( 0.01 )" "2.42 ( 0.56 )" "3.74 ( 0.08 )" 4.68 0.29 0.32 2.42 3.74 "compLasso" +1000 500 0.1 0.5 0.14 "0.3 ( 0 )" "19.4 ( 1.74 )" "2.05 ( 0.12 )" 23.35 0.66 0.3 19.4 2.05 "compLasso" +50 1000 0.1 20 0 "0.37 ( 0.02 )" "4.53 ( 0.54 )" "5.71 ( 0.06 )" 4.82 0.91 0.37 4.53 5.71 "compLasso" +100 1000 0.1 10 0.02 "0.36 ( 0.01 )" "4.14 ( 0.72 )" "5.4 ( 0.08 )" 4.74 0.78 0.36 4.14 5.4 "compLasso" +500 1000 0.1 2 0.52 "0.34 ( 0 )" "0.93 ( 0.19 )" "3.83 ( 0.06 )" 3.1 0.21 0.34 0.93 3.83 "compLasso" +1000 1000 0.1 1 0.21 "0.31 ( 0 )" "8.59 ( 1.37 )" "2.96 ( 0.1 )" 11.63 0.36 0.31 8.59 2.96 "compLasso" +50 50 0.3 1 0.32 "0.8 ( 0.05 )" "5.34 ( 0.32 )" "1.21 ( 0.12 )" 10.13 0.48 0.8 5.34 1.21 "compLasso" +100 50 0.3 0.5 0.5 "0.52 ( 0.02 )" "4.42 ( 0.52 )" "0.1 ( 0.03 )" 10.32 0.33 0.52 4.42 0.1 "compLasso" +500 50 0.3 0.1 0.91 "0.55 ( 0.02 )" "0.53 ( 0.16 )" "0 ( 0 )" 6.53 0.05 0.55 0.53 0 "compLasso" +1000 50 0.3 0.05 0.89 "0.56 ( 0.02 )" "0.66 ( 0.18 )" "0 ( 0 )" 6.66 0.06 0.56 0.66 0 "compLasso" +50 100 0.3 2 0.27 "0.94 ( 0.05 )" "6 ( 0.34 )" "1.93 ( 0.14 )" 10.07 0.54 0.94 6 1.93 "compLasso" +100 100 0.3 1 0.47 "0.53 ( 0.02 )" "5.24 ( 0.45 )" "0.24 ( 0.06 )" 11 0.4 0.53 5.24 0.24 "compLasso" +500 100 0.3 0.2 0.91 "0.54 ( 0.02 )" "0.54 ( 0.15 )" "0 ( 0 )" 6.54 0.06 0.54 0.54 0 "compLasso" +1000 100 0.3 0.1 0.92 "0.55 ( 0.02 )" "0.51 ( 0.15 )" "0 ( 0 )" 6.51 0.05 0.55 0.51 0 "compLasso" +50 500 0.3 10 0.13 "1.31 ( 0.06 )" "5.44 ( 0.44 )" "3.96 ( 0.15 )" 7.48 0.69 1.31 5.44 3.96 "compLasso" +100 500 0.3 5 0.3 "0.73 ( 0.03 )" "9 ( 0.76 )" "0.99 ( 0.12 )" 14.01 0.52 0.73 6 0.99 "compLasso" +500 500 0.3 1 0.95 "0.55 ( 0.01 )" "0.31 ( 0.08 )" "0 ( 0 )" 6.31 0.04 0.55 0.31 0 "compLasso" +1000 500 0.3 0.5 0.92 "0.57 ( 0.02 )" "0.49 ( 0.14 )" "0 ( 0 )" 6.49 0.05 0.57 0.49 0 "compLasso" +50 1000 0.3 20 0.07 "1.55 ( 0.08 )" "3.96 ( 0.47 )" "4.74 ( 0.14 )" 5.22 0.68 1.55 3.96 4.74 "compLasso" +100 1000 0.3 10 0.25 "0.84 ( 0.03 )" "9.51 ( 0.77 )" "1.58 ( 0.11 )" 13.93 0.58 0.84 9.51 1.58 "compLasso" +500 1000 0.3 2 0.92 "0.56 ( 0.01 )" "0.52 ( 0.14 )" "0 ( 0 )" 6.52 0.05 0.56 0.52 0 "compLasso" +1000 1000 0.3 1 0.95 "0.56 ( 0.02 )" "0.29 ( 0.08 )" "0 ( 0 )" 6.29 0.03 0.56 0.29 0 "compLasso" +50 50 0.5 1 0.42 "0.77 ( 0.04 )" "5.49 ( 0.31 )" "0.25 ( 0.06 )" 11.24 0.44 0.77 5.49 0.25 "compLasso" +100 50 0.5 0.5 0.68 "0.6 ( 0.03 )" "2.34 ( 0.31 )" "0.01 ( 0.01 )" 8.33 0.21 0.6 2.34 0.01 "compLasso" +500 50 0.5 0.1 0.93 "0.8 ( 0.03 )" "0.42 ( 0.12 )" "0 ( 0 )" 6.42 0.05 0.8 0.42 0 "compLasso" +1000 50 0.5 0.05 0.88 "0.78 ( 0.03 )" "0.7 ( 0.21 )" "0 ( 0 )" 6.7 0.07 0.78 0.7 0 "compLasso" +50 100 0.5 2 0.36 "1.03 ( 0.07 )" "5.95 ( 0.33 )" "0.96 ( 0.11 )" 10.99 0.49 1.03 5.95 0.96 "compLasso" +100 100 0.5 1 0.65 "0.64 ( 0.03 )" "2.9 ( 0.32 )" "0.03 ( 0.02 )" 8.87 0.27 0.64 2.9 0.03 "compLasso" +500 100 0.5 0.2 0.91 "0.76 ( 0.03 )" "0.56 ( 0.19 )" "0 ( 0 )" 6.56 0.05 0.76 0.56 0 "compLasso" +1000 100 0.5 0.1 0.93 "0.8 ( 0.03 )" "0.4 ( 0.09 )" "0 ( 0 )" 6.4 0.05 0.8 0.4 0 "compLasso" +50 500 0.5 10 0.22 "1.93 ( 0.1 )" "5.08 ( 0.41 )" "3.23 ( 0.15 )" 7.85 0.55 1.93 5.08 3.23 "compLasso" +100 500 0.5 5 0.45 "0.79 ( 0.03 )" "6.21 ( 0.54 )" "0.33 ( 0.07 )" 11.88 0.43 0.79 6.21 0.33 "compLasso" +500 500 0.5 1 0.94 "0.83 ( 0.03 )" "0.36 ( 0.11 )" "0 ( 0 )" 6.36 0.04 0.83 0.36 0 "compLasso" +1000 500 0.5 0.5 0.97 "0.87 ( 0.03 )" "0.19 ( 0.06 )" "0 ( 0 )" 6.19 0.02 0.87 0.19 0 "compLasso" +50 1000 0.5 20 0.15 "2.1 ( 0.11 )" "5.84 ( 0.49 )" "3.77 ( 0.14 )" 8.07 0.66 2.1 5.84 3.77 "compLasso" +100 1000 0.5 10 0.35 "0.91 ( 0.04 )" "8.88 ( 0.73 )" "0.52 ( 0.09 )" 14.36 0.51 0.91 8.88 0.52 "compLasso" +500 1000 0.5 2 0.98 "0.86 ( 0.02 )" "0.13 ( 0.05 )" "0 ( 0 )" 6.13 0.02 0.86 0.13 0 "compLasso" +1000 1000 0.5 1 0.95 "0.85 ( 0.02 )" "0.3 ( 0.11 )" "0 ( 0 )" 6.3 0.03 0.85 0.3 0 "compLasso" +50 50 0.7 1 0.49 "0.8 ( 0.06 )" "4.27 ( 0.31 )" "0.24 ( 0.06 )" 10.03 0.37 0.8 4.27 0.24 "compLasso" +100 50 0.7 0.5 0.75 "0.75 ( 0.03 )" "1.71 ( 0.28 )" "0 ( 0 )" 7.71 0.16 0.75 1.71 0 "compLasso" +500 50 0.7 0.1 0.9 "1 ( 0.04 )" "0.58 ( 0.19 )" "0 ( 0 )" 6.58 0.06 1 0.58 0 "compLasso" +1000 50 0.7 0.05 0.92 "0.98 ( 0.04 )" "0.43 ( 0.09 )" "0 ( 0 )" 6.43 0.05 0.98 0.43 0 "compLasso" +50 100 0.7 2 0.42 "1.14 ( 0.08 )" "5.46 ( 0.32 )" "0.55 ( 0.09 )" 10.91 0.46 1.14 5.46 0.55 "compLasso" +100 100 0.7 1 0.69 "0.82 ( 0.04 )" "2.46 ( 0.41 )" "0 ( 0 )" 8.46 0.21 0.82 2.46 0 "compLasso" +500 100 0.7 0.2 0.89 "1.01 ( 0.04 )" "0.68 ( 0.23 )" "0 ( 0 )" 6.68 0.06 1.01 0.68 0 "compLasso" +1000 100 0.7 0.1 0.94 "1.08 ( 0.04 )" "0.36 ( 0.09 )" "0 ( 0 )" 6.36 0.04 1.08 0.36 0 "compLasso" +50 500 0.7 10 0.26 "2.76 ( 0.17 )" "5.16 ( 0.4 )" "2.65 ( 0.15 )" 8.51 0.51 2.76 5.16 2.65 "compLasso" +100 500 0.7 5 0.52 "0.87 ( 0.03 )" "5.39 ( 0.52 )" "0.04 ( 0.02 )" 11.35 0.39 0.87 5.39 0.04 "compLasso" +500 500 0.7 1 0.94 "1.05 ( 0.04 )" "0.35 ( 0.1 )" "0 ( 0 )" 6.35 0.04 1.05 0.35 0 "compLasso" +1000 500 0.7 0.5 0.98 "1.14 ( 0.04 )" "0.14 ( 0.04 )" "0 ( 0 )" 6.14 0.02 1.14 0.14 0 "compLasso" +50 1000 0.7 20 0.2 "3.02 ( 0.16 )" "5.41 ( 0.43 )" "3.39 ( 0.13 )" 8.02 0.58 3.02 5.41 3.39 "compLasso" +100 1000 0.7 10 0.45 "0.91 ( 0.04 )" "6.6 ( 0.53 )" "0.2 ( 0.05 )" 12.4 0.45 0.91 6.6 0.2 "compLasso" +500 1000 0.7 2 0.95 "1.04 ( 0.04 )" "0.31 ( 0.1 )" "0 ( 0 )" 6.31 0.04 1.04 0.31 0 "compLasso" +1000 1000 0.7 1 0.97 "1.13 ( 0.04 )" "0.21 ( 0.07 )" "0 ( 0 )" 6.21 0.03 1.13 0.21 0 "compLasso" +50 50 0.9 1 0.48 "0.92 ( 0.07 )" "4.7 ( 0.32 )" "0.14 ( 0.04 )" 10.56 0.38 0.92 4.7 0.14 "compLasso" +100 50 0.9 0.5 0.76 "0.94 ( 0.05 )" "1.59 ( 0.25 )" "0 ( 0 )" 7.59 0.15 0.94 1.59 0 "compLasso" +500 50 0.9 0.1 0.92 "1.15 ( 0.06 )" "0.47 ( 0.11 )" "0 ( 0 )" 6.47 0.05 1.15 0.47 0 "compLasso" +1000 50 0.9 0.05 0.89 "1.28 ( 0.05 )" "0.62 ( 0.19 )" "0 ( 0 )" 6.62 0.06 1.28 0.62 0 "compLasso" +50 100 0.9 2 0.42 "1.28 ( 0.08 )" "5.86 ( 0.29 )" "0.47 ( 0.09 )" 11.39 0.48 1.28 5.86 0.47 "compLasso" +100 100 0.9 1 0.81 "0.94 ( 0.04 )" "1.34 ( 0.23 )" "0 ( 0 )" 7.34 0.14 0.94 1.34 0 "compLasso" +500 100 0.9 0.2 0.93 "1.16 ( 0.05 )" "0.43 ( 0.13 )" "0 ( 0 )" 6.43 0.05 1.16 0.43 0 "compLasso" +1000 100 0.9 0.1 0.94 "1.32 ( 0.05 )" "0.34 ( 0.1 )" "0 ( 0 )" 6.34 0.04 1.32 0.34 0 "compLasso" +50 500 0.9 10 0.25 "3.06 ( 0.18 )" "5.42 ( 0.4 )" "2.69 ( 0.15 )" 8.73 0.54 3.06 5.42 2.69 "compLasso" +100 500 0.9 5 0.58 "0.97 ( 0.04 )" "4.2 ( 0.49 )" "0.02 ( 0.02 )" 10.18 0.31 0.97 4.2 0.02 "compLasso" +500 500 0.9 1 0.93 "1.27 ( 0.05 )" "0.44 ( 0.18 )" "0 ( 0 )" 6.44 0.04 1.27 0.44 0 "compLasso" +1000 500 0.9 0.5 0.96 "1.31 ( 0.05 )" "0.23 ( 0.06 )" "0 ( 0 )" 6.23 0.03 1.31 0.23 0 "compLasso" +50 1000 0.9 20 0.23 "3.37 ( 0.19 )" "5.29 ( 0.41 )" "3.13 ( 0.15 )" 8.16 0.57 3.37 5.29 3.13 "compLasso" +100 1000 0.9 10 0.56 "1.14 ( 0.05 )" "4.56 ( 0.38 )" "0.07 ( 0.03 )" 10.49 0.37 1.14 4.56 0.07 "compLasso" +500 1000 0.9 2 0.96 "1.28 ( 0.04 )" "0.27 ( 0.11 )" "0 ( 0 )" 6.27 0.03 1.28 0.27 0 "compLasso" +1000 1000 0.9 1 0.95 "1.35 ( 0.05 )" "0.29 ( 0.09 )" "0 ( 0 )" 6.29 0.03 1.35 0.29 0 "compLasso" diff --git a/simulations/results_summary_cts/table_ind_all.txt b/simulations/results_summary_cts/table_ind_all.txt new file mode 100755 index 0000000..3952135 --- /dev/null +++ b/simulations/results_summary_cts/table_ind_all.txt @@ -0,0 +1,65 @@ +"N" "P" "Ratio" "Stab" "MSE" "FP" "FN" "num_select" "FDR" "MSE_mean" "FP_mean" "FN_mean" "method" +50 50 1 0.37 "0.54 ( 0.03 )" "8.36 ( 0.45 )" "0.02 ( 0.01 )" 13.34 0.51 0.54 8.36 0.02 "lasso" +100 50 0.5 0.51 "0.36 ( 0.01 )" "5.5 ( 0.42 )" "0 ( 0 )" 10.5 0.37 0.36 5.5 0 "lasso" +500 50 0.1 0.79 "0.28 ( 0 )" "2.33 ( 0.14 )" "0 ( 0 )" 7.33 0.15 0.28 2.33 0 "lasso" +1000 50 0.05 0.86 "0.26 ( 0 )" "1.82 ( 0.13 )" "0 ( 0 )" 6.82 0.1 0.26 1.82 0 "lasso" +50 100 2 0.32 "0.66 ( 0.04 )" "11.1 ( 0.38 )" "0.08 ( 0.03 )" 16.02 0.61 0.66 11.1 0.08 "lasso" +100 100 1 0.46 "0.41 ( 0.01 )" "7.23 ( 0.4 )" "0 ( 0 )" 12.23 0.46 0.41 7.23 0 "lasso" +500 100 0.2 0.71 "0.29 ( 0 )" "3.26 ( 0.25 )" "0 ( 0 )" 8.26 0.22 0.29 3.26 0 "lasso" +1000 100 0.1 0.82 "0.27 ( 0 )" "2.25 ( 0.15 )" "0 ( 0 )" 7.25 0.15 0.27 2.25 0 "lasso" +50 500 10 0.19 "1.41 ( 0.11 )" "19.89 ( 0.38 )" "0.64 ( 0.08 )" 24.25 0.77 1.41 19.8 0.64 "lasso" +100 500 5 0.3 "0.48 ( 0.02 )" "14.71 ( 0.7 )" "0 ( 0 )" 19.71 0.66 0.48 14.7 0 "lasso" +500 500 1 0.61 "0.28 ( 0 )" "4.82 ( 0.34 )" "0 ( 0 )" 9.82 0.32 0.28 4.82 0 "lasso" +1000 500 0.5 0.72 "0.27 ( 0 )" "3.35 ( 0.32 )" "0 ( 0 )" 8.35 0.21 0.27 3.35 0 "lasso" +50 1000 20 0.14 "2.24 ( 0.19 )" "23.95 ( 0.37 )" "1.19 ( 0.09 )" 27.76 0.82 2.24 23.9 1.19 "lasso" +100 1000 10 0.25 "0.53 ( 0.02 )" "18.53 ( 0.59 )" "0 ( 0 )" 23.53 0.73 0.53 18.5 0 "lasso" +500 1000 2 0.52 "0.29 ( 0 )" "6.51 ( 0.45 )" "0 ( 0 )" 11.51 0.4 0.29 6.51 0 "lasso" +1000 1000 1 0.64 "0.27 ( 0 )" "4.39 ( 0.56 )" "0 ( 0 )" 9.39 0.26 0.27 4.39 0 "lasso" +50 50 1 0.2 "0.53 ( 0.03 )" "14.99 ( 0.59 )" "0 ( 0 )" 19.99 0.67 0.53 14.9 0 "elnet" +100 50 0.5 0.23 "0.34 ( 0.01 )" "13.46 ( 0.55 )" "0 ( 0 )" 18.46 0.65 0.34 13.4 0 "elnet" +500 50 0.1 0.23 "0.26 ( 0 )" "13.65 ( 0.56 )" "0 ( 0 )" 18.65 0.64 0.26 13.6 0 "elnet" +1000 50 0.05 0.27 "0.25 ( 0 )" "11.76 ( 0.53 )" "0 ( 0 )" 16.76 0.6 0.25 11.7 0 "elnet" +50 100 2 0.19 "0.74 ( 0.06 )" "19.45 ( 0.66 )" "0.04 ( 0.02 )" 24.41 0.74 0.74 19.4 0.04 "elnet" +100 100 1 0.2 "0.38 ( 0.01 )" "19.2 ( 1.02 )" "0 ( 0 )" 24.2 0.71 0.38 19.2 0 "elnet" +500 100 0.2 0.23 "0.27 ( 0 )" "16.28 ( 0.78 )" "0 ( 0 )" 21.28 0.67 0.27 16.2 0 "elnet" +1000 100 0.1 0.23 "0.26 ( 0 )" "17.05 ( 0.76 )" "0 ( 0 )" 22.05 0.69 0.26 17 0 "elnet" +50 500 10 0.13 "1.65 ( 0.13 )" "30.38 ( 1.24 )" "0.58 ( 0.08 )" 34.8 0.83 1.65 30.3 0.58 "elnet" +100 500 5 0.15 "0.5 ( 0.02 )" "32.18 ( 1.44 )" "0 ( 0 )" 37.18 0.81 0.5 32.1 0 "elnet" +500 500 1 0.16 "0.28 ( 0 )" "29.79 ( 1.73 )" "0 ( 0 )" 34.79 0.78 0.28 29.7 0 "elnet" +1000 500 0.5 0.18 "0.26 ( 0 )" "27.21 ( 1.58 )" "0 ( 0 )" 32.21 0.77 0.26 27.2 0 "elnet" +50 1000 20 0.1 "2.5 ( 0.22 )" "36.6 ( 2.03 )" "1.12 ( 0.09 )" 40.48 0.86 2.5 36.6 1.12 "elnet" +100 1000 10 0.13 "0.56 ( 0.02 )" "40.61 ( 1.71 )" "0 ( 0 )" 45.61 0.85 0.56 40.6 0 "elnet" +500 1000 2 0.14 "0.27 ( 0 )" "35.98 ( 2.2 )" "0 ( 0 )" 40.98 0.8 0.27 35.9 0 "elnet" +1000 1000 1 0.15 "0.27 ( 0 )" "34.65 ( 2.02 )" "0 ( 0 )" 39.65 0.79 0.27 34.6 0 "elnet" +50 50 1 0 "1.31 ( 0.06 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1.31 0 6 "rf" +100 50 0.5 0.18 "0.85 ( 0.02 )" "1.85 ( 0.11 )" "4.11 ( 0.1 )" 3.74 0.48 0.85 1.85 4.11 "rf" +500 50 0.1 0.8 "0.47 ( 0.01 )" "0.3 ( 0.05 )" "1.61 ( 0.08 )" 4.69 0.05 0.47 0.3 1.61 "rf" +1000 50 0.05 0.88 "0.35 ( 0 )" "0.07 ( 0.03 )" "0.78 ( 0.07 )" 5.29 0.01 0.35 0.07 0.78 "rf" +50 100 2 0 "1.32 ( 0.05 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1.32 0 6 "rf" +100 100 1 0.08 "0.91 ( 0.03 )" "4.33 ( 0.22 )" "4.45 ( 0.09 )" 5.88 0.72 0.91 4.33 4.45 "rf" +500 100 0.2 0.6 "0.59 ( 0.01 )" "1.91 ( 0.15 )" "1.41 ( 0.07 )" 6.5 0.27 0.59 1.91 1.41 "rf" +1000 100 0.1 0.81 "0.47 ( 0 )" "0.71 ( 0.09 )" "0.53 ( 0.06 )" 6.18 0.1 0.47 0.71 0.53 "rf" +50 500 10 0 "1.33 ( 0.05 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1.33 0 6 "rf" +100 500 5 0.02 "1.07 ( 0.03 )" "23.8 ( 0.52 )" "4.26 ( 0.1 )" 25.54 0.93 1.07 23.8 4.26 "rf" +500 500 1 0.14 "0.84 ( 0.01 )" "19.92 ( 0.41 )" "1.71 ( 0.08 )" 24.21 0.82 0.84 19.9 1.71 "rf" +1000 500 0.5 0.19 "0.78 ( 0.01 )" "18.73 ( 0.42 )" "0.84 ( 0.06 )" 23.89 0.78 0.78 18.7 0.84 "rf" +50 1000 20 0 "1.31 ( 0.05 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1.31 0 6 "rf" +100 1000 10 0.01 "1.06 ( 0.03 )" "48.48 ( 0.63 )" "4.33 ( 0.1 )" 50.15 0.97 1.06 48.4 4.33 "rf" +500 1000 2 0.06 "0.89 ( 0.01 )" "44.77 ( 0.71 )" "1.81 ( 0.1 )" 48.96 0.91 0.89 44.7 1.81 "rf" +1000 1000 1 0.09 "0.85 ( 0.01 )" "41.77 ( 0.68 )" "0.99 ( 0.07 )" 46.78 0.89 0.85 41.7 0.99 "rf" +50 50 1 0.61 "0.8 ( 0.05 )" "2.99 ( 0.27 )" "0.05 ( 0.02 )" 8.94 0.28 0.8 2.99 0.05 "compLasso" +100 50 0.5 0.87 "0.98 ( 0.06 )" "0.79 ( 0.15 )" "0 ( 0 )" 6.79 0.09 0.98 0.79 0 "compLasso" +500 50 0.1 0.91 "1.08 ( 0.05 )" "0.51 ( 0.11 )" "0 ( 0 )" 6.51 0.06 1.08 0.51 0 "compLasso" +1000 50 0.05 0.93 "1.18 ( 0.04 )" "0.39 ( 0.15 )" "0 ( 0 )" 6.39 0.04 1.18 0.39 0 "compLasso" +50 100 2 0.52 "1.05 ( 0.07 )" "4.3 ( 0.31 )" "0.24 ( 0.05 )" 10.06 0.37 1.05 4.3 0.24 "compLasso" +100 100 1 0.85 "0.94 ( 0.04 )" "1.02 ( 0.19 )" "0 ( 0 )" 7.02 0.11 0.94 1.02 0 "compLasso" +500 100 0.2 0.96 "1.16 ( 0.04 )" "0.25 ( 0.09 )" "0 ( 0 )" 6.25 0.03 1.16 0.25 0 "compLasso" +1000 100 0.1 0.89 "1.04 ( 0.05 )" "0.71 ( 0.15 )" "0 ( 0 )" 6.71 0.08 1.04 0.71 0 "compLasso" +50 500 10 0.38 "2.18 ( 0.13 )" "5.53 ( 0.36 )" "1.27 ( 0.11 )" 10.26 0.48 2.18 5.53 1.27 "compLasso" +100 500 5 0.75 "1 ( 0.05 )" "1.9 ( 0.29 )" "0.03 ( 0.02 )" 7.87 0.18 1 1.9 0.03 "compLasso" +500 500 1 0.96 "1.18 ( 0.04 )" "0.27 ( 0.13 )" "0 ( 0 )" 6.27 0.03 1.18 0.27 0 "compLasso" +1000 500 0.5 0.96 "1.24 ( 0.04 )" "0.25 ( 0.1 )" "0 ( 0 )" 6.25 0.03 1.24 0.25 0 "compLasso" +50 1000 20 0.32 "3.09 ( 0.23 )" "5.56 ( 0.36 )" "1.95 ( 0.14 )" 9.61 0.51 3.09 5.56 1.95 "compLasso" +100 1000 10 0.67 "1.1 ( 0.07 )" "2.8 ( 0.37 )" "0.04 ( 0.02 )" 8.76 0.24 1.1 2.8 0.04 "compLasso" +500 1000 2 0.96 "1.12 ( 0.04 )" "0.27 ( 0.08 )" "0 ( 0 )" 6.27 0.03 1.12 0.27 0 "compLasso" +1000 1000 1 0.96 "1.16 ( 0.04 )" "0.24 ( 0.07 )" "0 ( 0 )" 6.24 0.03 1.16 0.24 0 "compLasso" diff --git a/simulations/results_summary_cts/table_toe_all.txt b/simulations/results_summary_cts/table_toe_all.txt new file mode 100755 index 0000000..4bfa30c --- /dev/null +++ b/simulations/results_summary_cts/table_toe_all.txt @@ -0,0 +1,321 @@ +"N" "P" "Corr" "Ratio" "Stab" "MSE" "FP" "FN" "num_select" "FDR" "MSE_mean" "FP_mean" "FN_mean" "method" +50 50 0.1 1 0.36 "0.62 ( 0.04 )" "8.59 ( 0.46 )" "0.02 ( 0.01 )" 13.57 0.51 0.62 8.59 0.02 "lasso" +100 50 0.1 0.5 0.47 "0.37 ( 0.01 )" "6.3 ( 0.43 )" "0 ( 0 )" 11.3 0.4 0.37 6.3 0 "lasso" +500 50 0.1 0.1 0.73 "0.28 ( 0 )" "2.88 ( 0.21 )" "0 ( 0 )" 7.88 0.2 0.28 2.88 0 "lasso" +1000 50 0.1 0.05 0.89 "0.27 ( 0 )" "1.66 ( 0.11 )" "0 ( 0 )" 6.66 0.08 0.27 1.66 0 "lasso" +50 100 0.1 2 0.32 "0.67 ( 0.05 )" "11.84 ( 0.4 )" "0 ( 0 )" 16.84 0.62 0.67 11.8 0 "lasso" +100 100 0.1 1 0.44 "0.4 ( 0.01 )" "7.71 ( 0.56 )" "0 ( 0 )" 12.71 0.46 0.4 7.71 0 "lasso" +500 100 0.1 0.2 0.7 "0.27 ( 0 )" "3.35 ( 0.22 )" "0 ( 0 )" 8.35 0.23 0.27 3.35 0 "lasso" +1000 100 0.1 0.1 0.81 "0.27 ( 0 )" "2.29 ( 0.23 )" "0 ( 0 )" 7.29 0.13 0.27 2.29 0 "lasso" +50 500 0.1 10 0.18 "1.61 ( 0.1 )" "20.85 ( 0.38 )" "0.69 ( 0.08 )" 25.16 0.78 1.61 20.8 0.69 "lasso" +100 500 0.1 5 0.3 "0.53 ( 0.02 )" "14.69 ( 0.7 )" "0 ( 0 )" 19.69 0.66 0.53 14.6 0 "lasso" +500 500 0.1 1 0.55 "0.28 ( 0 )" "5.86 ( 0.51 )" "0 ( 0 )" 10.86 0.36 0.28 5.86 0 "lasso" +1000 500 0.1 0.5 0.78 "0.28 ( 0 )" "2.69 ( 0.21 )" "0 ( 0 )" 7.69 0.17 0.28 2.69 0 "lasso" +50 1000 0.1 20 0.13 "2.23 ( 0.14 )" "24.37 ( 0.39 )" "1.36 ( 0.1 )" 28.01 0.83 2.23 24.3 1.36 "lasso" +100 1000 0.1 10 0.25 "0.57 ( 0.03 )" "18.79 ( 0.7 )" "0 ( 0 )" 23.79 0.73 0.57 18.7 0 "lasso" +500 1000 0.1 2 0.49 "0.28 ( 0 )" "7.08 ( 0.53 )" "0 ( 0 )" 12.08 0.41 0.28 7.08 0 "lasso" +1000 1000 0.1 1 0.7 "0.27 ( 0 )" "3.59 ( 0.33 )" "0 ( 0 )" 8.59 0.23 0.27 3.59 0 "lasso" +50 50 0.3 1 0.35 "0.57 ( 0.03 )" "8.86 ( 0.42 )" "0.05 ( 0.02 )" 13.81 0.53 0.57 8.86 0.05 "lasso" +100 50 0.3 0.5 0.47 "0.36 ( 0.01 )" "6.18 ( 0.36 )" "0 ( 0 )" 11.18 0.41 0.36 6.18 0 "lasso" +500 50 0.3 0.1 0.7 "0.28 ( 0 )" "3.14 ( 0.21 )" "0 ( 0 )" 8.14 0.22 0.28 3.14 0 "lasso" +1000 50 0.3 0.05 0.86 "0.27 ( 0 )" "1.86 ( 0.11 )" "0 ( 0 )" 6.86 0.11 0.27 1.86 0 "lasso" +50 100 0.3 2 0.31 "0.76 ( 0.04 )" "11.12 ( 0.37 )" "0.17 ( 0.04 )" 15.95 0.62 0.76 11.1 0.17 "lasso" +100 100 0.3 1 0.38 "0.41 ( 0.01 )" "9.43 ( 0.53 )" "0 ( 0 )" 14.43 0.54 0.41 9.43 0 "lasso" +500 100 0.3 0.2 0.63 "0.27 ( 0 )" "4.16 ( 0.27 )" "0 ( 0 )" 9.16 0.29 0.27 4.16 0 "lasso" +1000 100 0.3 0.1 0.8 "0.27 ( 0 )" "2.36 ( 0.17 )" "0 ( 0 )" 7.36 0.15 0.27 2.36 0 "lasso" +50 500 0.3 10 0.14 "1.78 ( 0.11 )" "21.4 ( 0.41 )" "1.39 ( 0.1 )" 25.01 0.81 1.78 21.4 1.39 "lasso" +100 500 0.3 5 0.26 "0.53 ( 0.02 )" "16.81 ( 0.77 )" "0.02 ( 0.01 )" 21.79 0.7 0.53 16.8 0.02 "lasso" +500 500 0.3 1 0.55 "0.29 ( 0 )" "5.89 ( 0.51 )" "0 ( 0 )" 10.89 0.36 0.29 5.89 0 "lasso" +1000 500 0.3 0.5 0.69 "0.27 ( 0 )" "3.68 ( 0.32 )" "0 ( 0 )" 8.68 0.25 0.27 3.68 0 "lasso" +50 1000 0.3 20 0.11 "2.21 ( 0.15 )" "25.14 ( 0.35 )" "1.87 ( 0.1 )" 28.27 0.85 2.21 25.1 1.87 "lasso" +100 1000 0.3 10 0.22 "0.61 ( 0.03 )" "21.11 ( 0.75 )" "0.02 ( 0.01 )" 26.09 0.75 0.61 21.1 0.02 "lasso" +500 1000 0.3 2 0.47 "0.28 ( 0 )" "7.69 ( 0.63 )" "0 ( 0 )" 12.69 0.45 0.28 7.69 0 "lasso" +1000 1000 0.3 1 0.58 "0.27 ( 0 )" "5.27 ( 0.46 )" "0 ( 0 )" 10.27 0.33 0.27 5.27 0 "lasso" +50 50 0.5 1 0.35 "0.63 ( 0.04 )" "8.51 ( 0.41 )" "0.17 ( 0.04 )" 13.34 0.53 0.63 8.51 0.17 "lasso" +100 50 0.5 0.5 0.42 "0.37 ( 0.01 )" "7.21 ( 0.33 )" "0.01 ( 0.01 )" 12.2 0.47 0.37 7.21 0.01 "lasso" +500 50 0.5 0.1 0.66 "0.27 ( 0 )" "3.64 ( 0.21 )" "0 ( 0 )" 8.64 0.27 0.27 3.64 0 "lasso" +1000 50 0.5 0.05 0.78 "0.27 ( 0 )" "2.46 ( 0.15 )" "0 ( 0 )" 7.46 0.17 0.27 2.46 0 "lasso" +50 100 0.5 2 0.24 "0.8 ( 0.05 )" "13.21 ( 0.46 )" "0.6 ( 0.07 )" 17.61 0.68 0.8 13.2 0.6 "lasso" +100 100 0.5 1 0.36 "0.44 ( 0.02 )" "10 ( 0.48 )" "0.02 ( 0.01 )" 14.98 0.56 0.44 10 0.02 "lasso" +500 100 0.5 0.2 0.62 "0.29 ( 0 )" "4.39 ( 0.28 )" "0 ( 0 )" 9.39 0.31 0.29 4.39 0 "lasso" +1000 100 0.5 0.1 0.71 "0.27 ( 0 )" "3.24 ( 0.22 )" "0 ( 0 )" 8.24 0.23 0.27 3.24 0 "lasso" +50 500 0.5 10 0.12 "1.73 ( 0.1 )" "21.69 ( 0.32 )" "1.93 ( 0.09 )" 24.76 0.83 1.73 21.6 1.93 "lasso" +100 500 0.5 5 0.23 "0.62 ( 0.03 )" "19.6 ( 0.76 )" "0.16 ( 0.04 )" 24.44 0.74 0.62 19.6 0.16 "lasso" +500 500 0.5 1 0.4 "0.29 ( 0 )" "9.79 ( 0.55 )" "0 ( 0 )" 14.79 0.54 0.29 9.79 0 "lasso" +1000 500 0.5 0.5 0.51 "0.28 ( 0 )" "6.66 ( 0.64 )" "0 ( 0 )" 11.66 0.38 0.28 6.66 0 "lasso" +50 1000 0.5 20 0.09 "2.17 ( 0.13 )" "25.13 ( 0.34 )" "2.69 ( 0.1 )" 27.44 0.88 2.17 25.1 2.69 "lasso" +100 1000 0.5 10 0.19 "0.75 ( 0.03 )" "23.22 ( 0.79 )" "0.26 ( 0.05 )" 27.96 0.78 0.75 23.2 0.26 "lasso" +500 1000 0.5 2 0.39 "0.3 ( 0 )" "10.46 ( 0.63 )" "0 ( 0 )" 15.46 0.54 0.3 10.4 0 "lasso" +1000 1000 0.5 1 0.48 "0.28 ( 0 )" "7.42 ( 0.6 )" "0 ( 0 )" 12.42 0.42 0.28 7.42 0 "lasso" +50 50 0.7 1 0.3 "0.66 ( 0.04 )" "9.27 ( 0.39 )" "0.47 ( 0.06 )" 13.8 0.57 0.66 9.27 0.47 "lasso" +100 50 0.7 0.5 0.39 "0.37 ( 0.01 )" "7.9 ( 0.35 )" "0.05 ( 0.03 )" 12.85 0.5 0.37 7.9 0.05 "lasso" +500 50 0.7 0.1 0.6 "0.27 ( 0 )" "4.38 ( 0.21 )" "0 ( 0 )" 9.38 0.33 0.27 4.38 0 "lasso" +1000 50 0.7 0.05 0.74 "0.27 ( 0 )" "2.84 ( 0.14 )" "0 ( 0 )" 7.84 0.21 0.27 2.84 0 "lasso" +50 100 0.7 2 0.23 "0.8 ( 0.04 )" "11.57 ( 0.53 )" "1.26 ( 0.1 )" 15.31 0.66 0.8 11.5 1.26 "lasso" +100 100 0.7 1 0.31 "0.39 ( 0.01 )" "11.68 ( 0.51 )" "0.1 ( 0.04 )" 16.58 0.61 0.39 11.6 0.1 "lasso" +500 100 0.7 0.2 0.49 "0.28 ( 0 )" "6.56 ( 0.32 )" "0 ( 0 )" 11.56 0.44 0.28 6.56 0 "lasso" +1000 100 0.7 0.1 0.63 "0.27 ( 0 )" "4.24 ( 0.26 )" "0 ( 0 )" 9.24 0.3 0.27 4.24 0 "lasso" +50 500 0.7 10 0.12 "1.37 ( 0.08 )" "19.8 ( 0.33 )" "2.78 ( 0.08 )" 22.02 0.85 1.37 19.8 2.78 "lasso" +100 500 0.7 5 0.19 "0.62 ( 0.03 )" "18.58 ( 0.85 )" "0.88 ( 0.08 )" 22.7 0.75 0.62 18.5 0.88 "lasso" +500 500 0.7 1 0.36 "0.3 ( 0 )" "11.31 ( 0.6 )" "0 ( 0 )" 16.31 0.58 0.3 11.3 0 "lasso" +1000 500 0.7 0.5 0.46 "0.27 ( 0 )" "7.93 ( 0.49 )" "0 ( 0 )" 12.93 0.47 0.27 7.93 0 "lasso" +50 1000 0.7 20 0.09 "1.5 ( 0.08 )" "22.99 ( 0.35 )" "3.2 ( 0.09 )" 24.79 0.88 1.5 22.9 3.2 "lasso" +100 1000 0.7 10 0.14 "0.77 ( 0.04 )" "22.43 ( 0.68 )" "1.45 ( 0.1 )" 25.98 0.82 0.77 22.4 1.45 "lasso" +500 1000 0.7 2 0.3 "0.31 ( 0 )" "14.7 ( 0.84 )" "0 ( 0 )" 19.7 0.65 0.31 14.7 0 "lasso" +1000 1000 0.7 1 0.41 "0.28 ( 0 )" "9.63 ( 0.54 )" "0 ( 0 )" 14.63 0.53 0.28 9.63 0 "lasso" +50 50 0.9 1 0.31 "0.55 ( 0.03 )" "5.65 ( 0.29 )" "2.17 ( 0.13 )" 8.48 0.51 0.55 5.65 2.17 "lasso" +100 50 0.9 0.5 0.38 "0.38 ( 0.02 )" "5.85 ( 0.3 )" "1.03 ( 0.11 )" 9.82 0.45 0.38 5.85 1.03 "lasso" +500 50 0.9 0.1 0.61 "0.28 ( 0 )" "4.34 ( 0.19 )" "0.01 ( 0.01 )" 9.33 0.33 0.28 4.34 0.01 "lasso" +1000 50 0.9 0.05 0.76 "0.27 ( 0 )" "2.71 ( 0.12 )" "0 ( 0 )" 7.71 0.2 0.27 2.71 0 "lasso" +50 100 0.9 2 0.26 "0.6 ( 0.03 )" "7.26 ( 0.35 )" "2.69 ( 0.1 )" 9.57 0.62 0.6 7.26 2.69 "lasso" +100 100 0.9 1 0.31 "0.44 ( 0.01 )" "7.79 ( 0.39 )" "1.51 ( 0.11 )" 11.28 0.57 0.44 7.79 1.51 "lasso" +500 100 0.9 0.2 0.51 "0.29 ( 0 )" "6.45 ( 0.27 )" "0 ( 0 )" 11.45 0.45 0.29 6.45 0 "lasso" +1000 100 0.9 0.1 0.61 "0.27 ( 0 )" "4.72 ( 0.21 )" "0 ( 0 )" 9.72 0.35 0.27 4.72 0 "lasso" +50 500 0.9 10 0.13 "0.81 ( 0.04 )" "13.78 ( 0.36 )" "3.54 ( 0.08 )" 15.24 0.83 0.81 13.7 3.54 "lasso" +100 500 0.9 5 0.18 "0.54 ( 0.02 )" "13.78 ( 0.72 )" "2.58 ( 0.08 )" 16.2 0.76 0.54 13.7 2.58 "lasso" +500 500 0.9 1 0.25 "0.3 ( 0 )" "18.18 ( 0.69 )" "0.03 ( 0.02 )" 23.15 0.72 0.3 18.1 0.03 "lasso" +1000 500 0.9 0.5 0.33 "0.28 ( 0 )" "12.68 ( 0.57 )" "0 ( 0 )" 17.68 0.63 0.28 12.6 0 "lasso" +50 1000 0.9 20 0.08 "0.9 ( 0.05 )" "18.15 ( 0.34 )" "3.92 ( 0.08 )" 19.23 0.89 0.9 18.1 3.92 "lasso" +100 1000 0.9 10 0.16 "0.59 ( 0.02 )" "15.99 ( 0.66 )" "2.88 ( 0.06 )" 18.11 0.81 0.59 15.9 2.88 "lasso" +500 1000 0.9 2 0.2 "0.31 ( 0 )" "24.62 ( 1.01 )" "0.05 ( 0.02 )" 29.57 0.77 0.31 24.6 0.05 "lasso" +1000 1000 0.9 1 0.25 "0.28 ( 0 )" "18.51 ( 0.86 )" "0 ( 0 )" 23.51 0.71 0.28 18.5 0 "lasso" +50 50 0.1 1 0.21 "0.6 ( 0.03 )" "14.72 ( 0.57 )" "0.01 ( 0.01 )" 19.71 0.67 0.6 14.7 0.01 "elnet" +100 50 0.1 0.5 0.23 "0.34 ( 0.01 )" "13.7 ( 0.66 )" "0 ( 0 )" 18.7 0.64 0.34 13.7 0 "elnet" +500 50 0.1 0.1 0.23 "0.26 ( 0 )" "13.59 ( 0.55 )" "0 ( 0 )" 18.59 0.65 0.26 13.5 0 "elnet" +1000 50 0.1 0.05 0.25 "0.26 ( 0 )" "12.64 ( 0.54 )" "0 ( 0 )" 17.64 0.63 0.26 12.6 0 "elnet" +50 100 0.1 2 0.2 "0.69 ( 0.05 )" "19.33 ( 0.67 )" "0 ( 0 )" 24.33 0.73 0.69 19.3 0 "elnet" +100 100 0.1 1 0.22 "0.38 ( 0.01 )" "17.77 ( 0.8 )" "0 ( 0 )" 22.77 0.7 0.38 17.7 0 "elnet" +500 100 0.1 0.2 0.21 "0.26 ( 0 )" "18.57 ( 0.83 )" "0 ( 0 )" 23.57 0.71 0.26 18.5 0 "elnet" +1000 100 0.1 0.1 0.22 "0.26 ( 0 )" "17.23 ( 0.72 )" "0 ( 0 )" 22.23 0.7 0.26 17.2 0 "elnet" +50 500 0.1 10 0.13 "1.74 ( 0.11 )" "29.67 ( 1.23 )" "0.63 ( 0.07 )" 34.04 0.83 1.74 29.6 0.63 "elnet" +100 500 0.1 5 0.16 "0.51 ( 0.02 )" "30.41 ( 1.35 )" "0 ( 0 )" 35.41 0.81 0.51 30.4 0 "elnet" +500 500 0.1 1 0.16 "0.27 ( 0 )" "29.38 ( 1.53 )" "0 ( 0 )" 34.38 0.79 0.27 29.3 0 "elnet" +1000 500 0.1 0.5 0.18 "0.27 ( 0 )" "26.73 ( 1.56 )" "0 ( 0 )" 31.73 0.77 0.27 26.7 0 "elnet" +50 1000 0.1 20 0.09 "2.5 ( 0.16 )" "39.01 ( 2.7 )" "1.34 ( 0.1 )" 42.67 0.87 2.5 39 1.34 "elnet" +100 1000 0.1 10 0.13 "0.57 ( 0.03 )" "39.81 ( 1.68 )" "0 ( 0 )" 44.81 0.85 0.57 39.8 0 "elnet" +500 1000 0.1 2 0.14 "0.27 ( 0 )" "37.88 ( 2.19 )" "0 ( 0 )" 42.88 0.82 0.27 37.8 0 "elnet" +1000 1000 0.1 1 0.16 "0.26 ( 0 )" "31.4 ( 1.69 )" "0 ( 0 )" 36.4 0.8 0.26 31.4 0 "elnet" +50 50 0.3 1 0.21 "0.53 ( 0.03 )" "14.65 ( 0.58 )" "0.03 ( 0.02 )" 19.62 0.67 0.53 14.6 0.03 "elnet" +100 50 0.3 0.5 0.2 "0.34 ( 0.01 )" "14.91 ( 0.58 )" "0 ( 0 )" 19.91 0.67 0.34 14.9 0 "elnet" +500 50 0.3 0.1 0.23 "0.27 ( 0 )" "13.94 ( 0.57 )" "0 ( 0 )" 18.94 0.65 0.27 13.9 0 "elnet" +1000 50 0.3 0.05 0.27 "0.26 ( 0 )" "11.94 ( 0.43 )" "0 ( 0 )" 16.94 0.62 0.26 11.9 0 "elnet" +50 100 0.3 2 0.19 "0.72 ( 0.04 )" "19.67 ( 0.66 )" "0.08 ( 0.03 )" 24.59 0.74 0.72 19.6 0.08 "elnet" +100 100 0.3 1 0.19 "0.38 ( 0.01 )" "20.48 ( 0.85 )" "0 ( 0 )" 25.48 0.74 0.38 20.4 0 "elnet" +500 100 0.3 0.2 0.2 "0.26 ( 0 )" "19.3 ( 0.93 )" "0 ( 0 )" 24.3 0.72 0.26 19.3 0 "elnet" +1000 100 0.3 0.1 0.2 "0.26 ( 0 )" "19 ( 0.86 )" "0 ( 0 )" 24 0.71 0.26 19 0 "elnet" +50 500 0.3 10 0.1 "1.94 ( 0.12 )" "32.52 ( 1.94 )" "1.33 ( 0.1 )" 36.19 0.85 1.94 32.5 1.33 "elnet" +100 500 0.3 5 0.14 "0.51 ( 0.02 )" "34.04 ( 1.37 )" "0.01 ( 0.01 )" 39.03 0.83 0.51 34 0.01 "elnet" +500 500 0.3 1 0.16 "0.28 ( 0 )" "30.92 ( 1.44 )" "0 ( 0 )" 35.92 0.8 0.28 30.9 0 "elnet" +1000 500 0.3 0.5 0.16 "0.26 ( 0 )" "30.61 ( 1.55 )" "0 ( 0 )" 35.61 0.79 0.26 30.6 0 "elnet" +50 1000 0.3 20 0.08 "2.46 ( 0.17 )" "35.99 ( 1.99 )" "1.83 ( 0.1 )" 39.16 0.88 2.46 35.9 1.83 "elnet" +100 1000 0.3 10 0.12 "0.6 ( 0.03 )" "43.92 ( 1.49 )" "0.01 ( 0.01 )" 48.91 0.86 0.6 43.9 0.01 "elnet" +500 1000 0.3 2 0.13 "0.28 ( 0 )" "38.46 ( 2.16 )" "0 ( 0 )" 43.46 0.84 0.28 38.4 0 "elnet" +1000 1000 0.3 1 0.13 "0.27 ( 0 )" "38.29 ( 2.09 )" "0 ( 0 )" 43.29 0.83 0.27 38.2 0 "elnet" +50 50 0.5 1 0.2 "0.57 ( 0.04 )" "14.64 ( 0.66 )" "0.09 ( 0.03 )" 19.55 0.66 0.57 14.6 0.09 "elnet" +100 50 0.5 0.5 0.21 "0.33 ( 0.01 )" "14.76 ( 0.55 )" "0 ( 0 )" 19.76 0.67 0.33 14.7 0 "elnet" +500 50 0.5 0.1 0.23 "0.26 ( 0 )" "13.76 ( 0.51 )" "0 ( 0 )" 18.76 0.66 0.26 13.7 0 "elnet" +1000 50 0.5 0.05 0.23 "0.26 ( 0 )" "13.4 ( 0.49 )" "0 ( 0 )" 18.4 0.65 0.26 13.4 0 "elnet" +50 100 0.5 2 0.17 "0.8 ( 0.04 )" "20.05 ( 0.68 )" "0.34 ( 0.06 )" 24.71 0.75 0.8 20 0.34 "elnet" +100 100 0.5 1 0.17 "0.41 ( 0.02 )" "21.92 ( 0.83 )" "0 ( 0 )" 26.92 0.76 0.41 21.9 0 "elnet" +500 100 0.5 0.2 0.2 "0.27 ( 0 )" "18.97 ( 0.78 )" "0 ( 0 )" 23.97 0.72 0.27 18.9 0 "elnet" +1000 100 0.5 0.1 0.2 "0.26 ( 0 )" "19.53 ( 0.66 )" "0 ( 0 )" 24.53 0.74 0.26 19.5 0 "elnet" +50 500 0.5 10 0.09 "1.86 ( 0.11 )" "29.92 ( 1.25 )" "1.88 ( 0.1 )" 33.04 0.86 1.86 29.9 1.88 "elnet" +100 500 0.5 5 0.13 "0.59 ( 0.02 )" "37.33 ( 1.25 )" "0.07 ( 0.03 )" 42.26 0.85 0.59 37.3 0.07 "elnet" +500 500 0.5 1 0.13 "0.28 ( 0 )" "37.1 ( 1.54 )" "0 ( 0 )" 42.1 0.83 0.28 37.1 0 "elnet" +1000 500 0.5 0.5 0.13 "0.27 ( 0 )" "36.71 ( 1.5 )" "0 ( 0 )" 41.71 0.83 0.27 36.7 0 "elnet" +50 1000 0.5 20 0.07 "2.33 ( 0.14 )" "35.29 ( 1.69 )" "2.53 ( 0.1 )" 37.76 0.9 2.33 35.2 2.53 "elnet" +100 1000 0.5 10 0.11 "0.73 ( 0.03 )" "44.83 ( 1.58 )" "0.18 ( 0.05 )" 49.65 0.87 0.73 44.8 0.18 "elnet" +500 1000 0.5 2 0.12 "0.29 ( 0 )" "42.86 ( 2.28 )" "0 ( 0 )" 47.86 0.85 0.29 42.8 0 "elnet" +1000 1000 0.5 1 0.13 "0.27 ( 0 )" "41.01 ( 1.99 )" "0 ( 0 )" 46.01 0.84 0.27 41 0 "elnet" +50 50 0.7 1 0.18 "0.6 ( 0.04 )" "15.25 ( 0.54 )" "0.25 ( 0.05 )" 20 0.69 0.6 15.2 0.25 "elnet" +100 50 0.7 0.5 0.2 "0.35 ( 0.01 )" "15.66 ( 0.62 )" "0 ( 0 )" 20.66 0.69 0.35 15.6 0 "elnet" +500 50 0.7 0.1 0.24 "0.26 ( 0 )" "13.41 ( 0.46 )" "0 ( 0 )" 18.41 0.65 0.26 13.4 0 "elnet" +1000 50 0.7 0.05 0.26 "0.26 ( 0 )" "12.18 ( 0.6 )" "0 ( 0 )" 17.18 0.61 0.26 12.1 0 "elnet" +50 100 0.7 2 0.15 "0.81 ( 0.04 )" "19.25 ( 0.81 )" "0.79 ( 0.09 )" 23.46 0.75 0.81 19.2 0.79 "elnet" +100 100 0.7 1 0.18 "0.36 ( 0.01 )" "21.79 ( 0.78 )" "0.01 ( 0.01 )" 26.78 0.76 0.36 21.7 0.01 "elnet" +500 100 0.7 0.2 0.18 "0.27 ( 0 )" "21.43 ( 0.75 )" "0 ( 0 )" 26.43 0.75 0.27 21.4 0 "elnet" +1000 100 0.7 0.1 0.21 "0.26 ( 0 )" "18.91 ( 0.6 )" "0 ( 0 )" 23.91 0.73 0.26 18.9 0 "elnet" +50 500 0.7 10 0.09 "1.48 ( 0.09 )" "27.19 ( 0.95 )" "2.71 ( 0.08 )" 29.48 0.88 1.48 27.1 2.71 "elnet" +100 500 0.7 5 0.11 "0.6 ( 0.02 )" "37.9 ( 1.54 )" "0.51 ( 0.07 )" 42.39 0.86 0.6 37.9 0.51 "elnet" +500 500 0.7 1 0.13 "0.29 ( 0 )" "38.11 ( 1.41 )" "0 ( 0 )" 43.11 0.84 0.29 38.1 0 "elnet" +1000 500 0.7 0.5 0.13 "0.27 ( 0 )" "38.16 ( 1.26 )" "0 ( 0 )" 43.16 0.85 0.27 38.1 0 "elnet" +50 1000 0.7 20 0.06 "1.66 ( 0.09 )" "35.91 ( 1.86 )" "3.03 ( 0.09 )" 37.88 0.91 1.66 35.9 3.03 "elnet" +100 1000 0.7 10 0.09 "0.78 ( 0.04 )" "39.69 ( 1.62 )" "1.11 ( 0.1 )" 43.58 0.88 0.78 39.6 1.11 "elnet" +500 1000 0.7 2 0.11 "0.3 ( 0 )" "49.45 ( 1.98 )" "0 ( 0 )" 54.45 0.87 0.3 49.4 0 "elnet" +1000 1000 0.7 1 0.11 "0.27 ( 0 )" "48.15 ( 1.76 )" "0 ( 0 )" 53.15 0.87 0.27 48.1 0 "elnet" +50 50 0.9 1 0.16 "0.5 ( 0.02 )" "13.26 ( 0.77 )" "1.03 ( 0.11 )" 17.23 0.66 0.5 13.2 1.03 "elnet" +100 50 0.9 0.5 0.21 "0.35 ( 0.01 )" "14 ( 0.69 )" "0.27 ( 0.06 )" 18.73 0.66 0.35 14 0.27 "elnet" +500 50 0.9 0.1 0.29 "0.27 ( 0 )" "11.63 ( 0.41 )" "0 ( 0 )" 16.63 0.62 0.27 11.6 0 "elnet" +1000 50 0.9 0.05 0.29 "0.26 ( 0 )" "12.06 ( 0.52 )" "0 ( 0 )" 17.06 0.62 0.26 12 0 "elnet" +50 100 0.9 2 0.15 "0.56 ( 0.03 )" "15.35 ( 0.8 )" "1.83 ( 0.12 )" 18.52 0.75 0.56 15.3 1.83 "elnet" +100 100 0.9 1 0.18 "0.4 ( 0.02 )" "18.69 ( 0.92 )" "0.41 ( 0.07 )" 23.28 0.73 0.4 18.6 0.41 "elnet" +500 100 0.9 0.2 0.23 "0.27 ( 0 )" "17.36 ( 0.62 )" "0 ( 0 )" 22.36 0.71 0.27 17.3 0 "elnet" +1000 100 0.9 0.1 0.26 "0.26 ( 0 )" "16.05 ( 0.62 )" "0 ( 0 )" 21.05 0.69 0.26 16 0 "elnet" +50 500 0.9 10 0.08 "0.88 ( 0.04 )" "25.11 ( 1.93 )" "3.23 ( 0.08 )" 26.88 0.87 0.88 25.1 3.23 "elnet" +100 500 0.9 5 0.1 "0.53 ( 0.02 )" "27.99 ( 1.26 )" "2.15 ( 0.1 )" 30.84 0.86 0.53 27.9 2.15 "elnet" +500 500 0.9 1 0.12 "0.29 ( 0 )" "41.14 ( 1.02 )" "0 ( 0 )" 46.14 0.86 0.29 41.1 0 "elnet" +1000 500 0.9 0.5 0.13 "0.27 ( 0 )" "39.21 ( 0.84 )" "0 ( 0 )" 44.21 0.86 0.27 39.2 0 "elnet" +50 1000 0.9 20 0.04 "0.94 ( 0.05 )" "36.59 ( 3.6 )" "3.72 ( 0.08 )" 37.87 0.92 0.94 36.5 3.72 "elnet" +100 1000 0.9 10 0.09 "0.59 ( 0.02 )" "32.05 ( 1.85 )" "2.59 ( 0.06 )" 34.46 0.88 0.59 32 2.59 "elnet" +500 1000 0.9 2 0.09 "0.3 ( 0 )" "57.69 ( 1.57 )" "0 ( 0 )" 62.69 0.9 0.3 57.6 0 "elnet" +1000 1000 0.9 1 0.1 "0.27 ( 0 )" "52.35 ( 1.6 )" "0 ( 0 )" 57.35 0.89 0.27 52.3 0 "elnet" +50 50 0.1 1 0 "1.4 ( 0.06 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1.4 0 6 "rf" +100 50 0.1 0.5 0.19 "0.86 ( 0.03 )" "1.87 ( 0.14 )" "4.25 ( 0.09 )" 3.62 0.48 0.86 1.87 4.25 "rf" +500 50 0.1 0.1 0.77 "0.44 ( 0.01 )" "0.32 ( 0.05 )" "1.81 ( 0.07 )" 4.51 0.06 0.44 0.32 1.81 "rf" +1000 50 0.1 0.05 0.86 "0.34 ( 0 )" "0.15 ( 0.04 )" "0.93 ( 0.07 )" 5.22 0.02 0.34 0.15 0.93 "rf" +50 100 0.1 2 0 "1.36 ( 0.06 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1.36 0 6 "rf" +100 100 0.1 1 0.12 "0.93 ( 0.03 )" "4.11 ( 0.18 )" "4.17 ( 0.1 )" 5.93 0.68 0.93 4.11 4.17 "rf" +500 100 0.1 0.2 0.57 "0.56 ( 0.01 )" "2.08 ( 0.14 )" "1.52 ( 0.08 )" 6.56 0.29 0.56 2.08 1.52 "rf" +1000 100 0.1 0.1 0.74 "0.45 ( 0 )" "1.11 ( 0.1 )" "0.74 ( 0.07 )" 6.37 0.16 0.45 1.11 0.74 "rf" +50 500 0.1 10 0 "1.29 ( 0.05 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1.29 0 6 "rf" +100 500 0.1 5 0.02 "0.95 ( 0.02 )" "24.82 ( 0.56 )" "4.55 ( 0.09 )" 26.27 0.94 0.95 24.8 4.55 "rf" +500 500 0.1 1 0.13 "0.84 ( 0.01 )" "20.8 ( 0.48 )" "1.79 ( 0.1 )" 25.01 0.83 0.84 20.8 1.79 "rf" +1000 500 0.1 0.5 0.18 "0.76 ( 0.01 )" "18.72 ( 0.37 )" "0.91 ( 0.07 )" 23.81 0.78 0.76 18.7 0.91 "rf" +50 1000 0.1 20 0 "1.35 ( 0.06 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1.35 0 6 "rf" +100 1000 0.1 10 0.01 "1 ( 0.03 )" "49.42 ( 0.7 )" "4.71 ( 0.09 )" 50.71 0.97 1 49.4 4.71 "rf" +500 1000 0.1 2 0.06 "0.87 ( 0.01 )" "46.19 ( 0.64 )" "1.97 ( 0.09 )" 50.22 0.92 0.87 46.1 1.97 "rf" +1000 1000 0.1 1 0.09 "0.85 ( 0.01 )" "40.92 ( 0.66 )" "0.98 ( 0.07 )" 45.94 0.89 0.85 40.9 0.98 "rf" +50 50 0.3 1 0 "1.22 ( 0.05 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1.22 0 6 "rf" +100 50 0.3 0.5 0.23 "0.77 ( 0.02 )" "1.72 ( 0.11 )" "4.4 ( 0.08 )" 3.32 0.48 0.77 1.72 4.4 "rf" +500 50 0.3 0.1 0.7 "0.39 ( 0 )" "0.54 ( 0.06 )" "1.98 ( 0.08 )" 4.56 0.11 0.39 0.54 1.98 "rf" +1000 50 0.3 0.05 0.82 "0.31 ( 0 )" "0.3 ( 0.05 )" "1.19 ( 0.08 )" 5.11 0.05 0.31 0.3 1.19 "rf" +50 100 0.3 2 0 "1.15 ( 0.05 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1.15 0 6 "rf" +100 100 0.3 1 0.15 "0.81 ( 0.02 )" "3.77 ( 0.16 )" "4.28 ( 0.07 )" 5.49 0.67 0.81 3.77 4.28 "rf" +500 100 0.3 0.2 0.52 "0.51 ( 0.01 )" "2.21 ( 0.14 )" "1.94 ( 0.09 )" 6.27 0.33 0.51 2.21 1.94 "rf" +1000 100 0.3 0.1 0.75 "0.41 ( 0 )" "1.4 ( 0.1 )" "0.76 ( 0.07 )" 6.64 0.2 0.41 1.4 0.76 "rf" +50 500 0.3 10 0 "1.14 ( 0.05 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1.14 0 6 "rf" +100 500 0.3 5 0.02 "0.89 ( 0.03 )" "24.48 ( 0.46 )" "4.69 ( 0.08 )" 25.79 0.95 0.89 24.4 4.69 "rf" +500 500 0.3 1 0.12 "0.73 ( 0.01 )" "20.86 ( 0.41 )" "2.1 ( 0.09 )" 24.76 0.84 0.73 20.8 2.1 "rf" +1000 500 0.3 0.5 0.19 "0.68 ( 0.01 )" "18.71 ( 0.45 )" "1.13 ( 0.08 )" 23.58 0.79 0.68 18.7 1.13 "rf" +50 1000 0.3 20 0 "1.2 ( 0.05 )" "1 ( 0 )" "6 ( 0 )" 0 NA 1.2 0 6 "rf" +100 1000 0.3 10 0.01 "0.92 ( 0.03 )" "48.8 ( 0.82 )" "4.79 ( 0.08 )" 50.01 0.98 0.92 48.8 4.79 "rf" +500 1000 0.3 2 0.05 "0.78 ( 0.01 )" "44.58 ( 0.68 )" "2.48 ( 0.09 )" 48.1 0.93 0.78 44.5 2.48 "rf" +1000 1000 0.3 1 0.08 "0.74 ( 0.01 )" "42.87 ( 0.73 )" "1.44 ( 0.09 )" 47.43 0.9 0.74 42.8 1.44 "rf" +50 50 0.5 1 0 "0.99 ( 0.05 )" "1 ( 0 )" "6 ( 0 )" 0 NA 0.99 0 6 "rf" +100 50 0.5 0.5 0.24 "0.62 ( 0.02 )" "1.74 ( 0.13 )" "4.39 ( 0.08 )" 3.34 0.47 0.62 1.74 4.39 "rf" +500 50 0.5 0.1 0.7 "0.32 ( 0 )" "0.98 ( 0.09 )" "2.53 ( 0.08 )" 4.45 0.2 0.32 0.98 2.53 "rf" +1000 50 0.5 0.05 0.78 "0.26 ( 0 )" "0.91 ( 0.07 )" "1.71 ( 0.07 )" 5.2 0.16 0.26 0.91 1.71 "rf" +50 100 0.5 2 0 "0.91 ( 0.04 )" "1 ( 0 )" "6 ( 0 )" 0 NA 0.91 0 6 "rf" +100 100 0.5 1 0.15 "0.68 ( 0.02 )" "3.72 ( 0.19 )" "4.42 ( 0.08 )" 5.3 0.66 0.68 3.72 4.42 "rf" +500 100 0.5 0.2 0.56 "0.4 ( 0 )" "2.59 ( 0.13 )" "2.1 ( 0.08 )" 6.49 0.38 0.4 2.59 2.1 "rf" +1000 100 0.5 0.1 0.76 "0.34 ( 0 )" "2.09 ( 0.1 )" "1.08 ( 0.07 )" 7.01 0.29 0.34 2.09 1.08 "rf" +50 500 0.5 10 0 "0.95 ( 0.04 )" "1 ( 0 )" "6 ( 0 )" 0 NA 0.95 0 6 "rf" +100 500 0.5 5 0.03 "0.75 ( 0.02 )" "24.36 ( 0.56 )" "4.57 ( 0.07 )" 25.79 0.94 0.75 24.3 4.57 "rf" +500 500 0.5 1 0.13 "0.58 ( 0.01 )" "20.66 ( 0.49 )" "2.51 ( 0.07 )" 24.15 0.85 0.58 20.6 2.51 "rf" +1000 500 0.5 0.5 0.2 "0.55 ( 0 )" "18.4 ( 0.44 )" "1.77 ( 0.07 )" 22.63 0.81 0.55 18.4 1.77 "rf" +50 1000 0.5 20 0 "0.94 ( 0.04 )" "1 ( 0 )" "6 ( 0 )" 0 NA 0.94 0 6 "rf" +100 1000 0.5 10 0.01 "0.72 ( 0.02 )" "48.5 ( 0.74 )" "4.75 ( 0.08 )" 49.75 0.97 0.72 48.5 4.75 "rf" +500 1000 0.5 2 0.05 "0.65 ( 0.01 )" "46.07 ( 0.71 )" "2.83 ( 0.09 )" 49.24 0.93 0.65 46 2.83 "rf" +1000 1000 0.5 1 0.09 "0.61 ( 0.01 )" "41.21 ( 0.68 )" "1.84 ( 0.08 )" 45.37 0.91 0.61 41.2 1.84 "rf" +50 50 0.7 1 0 "0.66 ( 0.03 )" "1 ( 0 )" "6 ( 0 )" 0 NA 0.66 0 6 "rf" +100 50 0.7 0.5 0.28 "0.44 ( 0.01 )" "1.84 ( 0.14 )" "4.44 ( 0.08 )" 3.4 0.48 0.44 1.84 4.44 "rf" +500 50 0.7 0.1 0.74 "0.23 ( 0 )" "1.29 ( 0.07 )" "2.76 ( 0.07 )" 4.53 0.27 0.23 1.29 2.76 "rf" +1000 50 0.7 0.05 0.85 "0.19 ( 0 )" "1.57 ( 0.07 )" "2.29 ( 0.06 )" 5.28 0.29 0.19 1.57 2.29 "rf" +50 100 0.7 2 0 "0.67 ( 0.03 )" "1 ( 0 )" "6 ( 0 )" 0 NA 0.67 0 6 "rf" +100 100 0.7 1 0.14 "0.47 ( 0.01 )" "4.64 ( 0.25 )" "4.32 ( 0.09 )" 6.32 0.7 0.47 4.64 4.32 "rf" +500 100 0.7 0.2 0.63 "0.28 ( 0 )" "2.64 ( 0.14 )" "2.52 ( 0.07 )" 6.12 0.41 0.28 2.64 2.52 "rf" +1000 100 0.7 0.1 0.8 "0.25 ( 0 )" "2.42 ( 0.1 )" "1.76 ( 0.05 )" 6.66 0.35 0.25 2.42 1.76 "rf" +50 500 0.7 10 0 "0.7 ( 0.03 )" "1 ( 0 )" "6 ( 0 )" 0 NA 0.7 0 6 "rf" +100 500 0.7 5 0.03 "0.49 ( 0.02 )" "24.87 ( 0.57 )" "4.59 ( 0.09 )" 26.28 0.94 0.49 24.8 4.59 "rf" +500 500 0.7 1 0.13 "0.4 ( 0 )" "21.21 ( 0.55 )" "2.97 ( 0.08 )" 24.24 0.87 0.4 21.2 2.97 "rf" +1000 500 0.7 0.5 0.21 "0.38 ( 0 )" "17.4 ( 0.46 )" "1.98 ( 0.07 )" 21.42 0.8 0.38 17.4 1.98 "rf" +50 1000 0.7 20 0 "0.74 ( 0.03 )" "1 ( 0 )" "6 ( 0 )" 0 NA 0.74 0 6 "rf" +100 1000 0.7 10 0.01 "0.5 ( 0.01 )" "49.02 ( 0.67 )" "4.84 ( 0.08 )" 50.18 0.98 0.5 49 4.84 "rf" +500 1000 0.7 2 0.07 "0.44 ( 0 )" "45.41 ( 0.68 )" "3.02 ( 0.07 )" 48.39 0.94 0.44 45.4 3.02 "rf" +1000 1000 0.7 1 0.09 "0.42 ( 0 )" "42.15 ( 0.71 )" "2.37 ( 0.07 )" 45.78 0.92 0.42 42.1 2.37 "rf" +50 50 0.9 1 0 "0.27 ( 0.01 )" "1 ( 0 )" "6 ( 0 )" 0 NA 0.27 0 6 "rf" +100 50 0.9 0.5 0.19 "0.19 ( 0.01 )" "2.14 ( 0.17 )" "4.84 ( 0.08 )" 3.28 0.58 0.19 2.14 4.84 "rf" +500 50 0.9 0.1 0.67 "0.12 ( 0 )" "1.43 ( 0.09 )" "3.13 ( 0.08 )" 4.3 0.32 0.12 1.43 3.13 "rf" +1000 50 0.9 0.05 0.85 "0.1 ( 0 )" "1.5 ( 0.07 )" "2.46 ( 0.06 )" 5.04 0.29 0.1 1.5 2.46 "rf" +50 100 0.9 2 0 "0.3 ( 0.01 )" "1 ( 0 )" "6 ( 0 )" 0 NA 0.3 0 6 "rf" +100 100 0.9 1 0.16 "0.19 ( 0.01 )" "4.23 ( 0.22 )" "4.48 ( 0.09 )" 5.74 0.72 0.19 4.23 4.48 "rf" +500 100 0.9 0.2 0.57 "0.14 ( 0 )" "2.86 ( 0.16 )" "2.89 ( 0.07 )" 5.97 0.45 0.14 2.86 2.89 "rf" +1000 100 0.9 0.1 0.8 "0.12 ( 0 )" "2.42 ( 0.11 )" "1.89 ( 0.05 )" 6.53 0.36 0.12 2.42 1.89 "rf" +50 500 0.9 10 0 "0.29 ( 0.01 )" "1 ( 0 )" "6 ( 0 )" 0 NA 0.29 0 6 "rf" +100 500 0.9 5 0.02 "0.21 ( 0.01 )" "24.34 ( 0.71 )" "4.72 ( 0.09 )" 25.62 0.95 0.21 24.3 4.72 "rf" +500 500 0.9 1 0.14 "0.17 ( 0 )" "21.38 ( 0.6 )" "3 ( 0.07 )" 24.38 0.87 0.17 21.3 0 "rf" +1000 500 0.9 0.5 0.2 "0.16 ( 0 )" "18.68 ( 0.53 )" "2.35 ( 0.06 )" 22.33 0.83 0.16 18.6 2.35 "rf" +50 1000 0.9 20 0 "0.29 ( 0.01 )" "1 ( 0 )" "6 ( 0 )" 0 NA 0.29 0 6 "rf" +100 1000 0.9 10 0.01 "0.2 ( 0.01 )" "49.91 ( 0.83 )" "4.99 ( 0.09 )" 50.92 0.98 0.2 49.9 4.99 "rf" +500 1000 0.9 2 0.06 "0.19 ( 0 )" "46.34 ( 0.86 )" "3.13 ( 0.08 )" 49.21 0.94 0.19 46.3 3.13 "rf" +1000 1000 0.9 1 0.09 "0.18 ( 0 )" "43.52 ( 0.89 )" "2.7 ( 0.07 )" 46.82 0.93 0.18 43.5 2.7 "rf" +50 50 0.1 1 0.56 "0.88 ( 0.05 )" "3.68 ( 0.29 )" "0.06 ( 0.03 )" 9.62 0.33 0.88 3.68 0.06 "compLasso" +100 50 0.1 0.5 0.77 "0.87 ( 0.05 )" "1.51 ( 0.35 )" "0 ( 0 )" 7.51 0.12 0.87 1.51 0 "compLasso" +500 50 0.1 0.1 0.88 "0.99 ( 0.05 )" "0.73 ( 0.19 )" "0 ( 0 )" 6.73 0.07 0.99 0.73 0 "compLasso" +1000 50 0.1 0.05 0.9 "1.09 ( 0.04 )" "0.55 ( 0.17 )" "0 ( 0 )" 6.55 0.05 1.09 0.55 0 "compLasso" +50 100 0.1 2 0.53 "1.12 ( 0.1 )" "4.24 ( 0.3 )" "0.23 ( 0.06 )" 10.01 0.37 1.12 4.24 0.23 "compLasso" +100 100 0.1 1 0.79 "0.85 ( 0.04 )" "1.51 ( 0.34 )" "0 ( 0 )" 7.51 0.13 0.85 1.51 0 "compLasso" +500 100 0.1 0.2 0.95 "1.13 ( 0.04 )" "0.29 ( 0.09 )" "0 ( 0 )" 6.29 0.03 1.13 0.29 0 "compLasso" +1000 100 0.1 0.1 0.93 "1.03 ( 0.04 )" "0.42 ( 0.12 )" "0 ( 0 )" 6.42 0.05 1.03 0.42 0 "compLasso" +50 500 0.1 10 0.36 "2.54 ( 0.18 )" "5.13 ( 0.35 )" "1.78 ( 0.12 )" 9.35 0.48 2.54 5.13 1.78 "compLasso" +100 500 0.1 5 0.71 "0.98 ( 0.04 )" "2.4 ( 0.35 )" "0 ( 0 )" 8.4 0.21 0.98 2.4 0 "compLasso" +500 500 0.1 1 0.96 "1.1 ( 0.04 )" "0.25 ( 0.08 )" "0 ( 0 )" 6.25 0.03 1.1 0.25 0 "compLasso" +1000 500 0.1 0.5 0.96 "1.18 ( 0.04 )" "0.24 ( 0.08 )" "0 ( 0 )" 6.24 0.03 1.18 0.24 0 "compLasso" +50 1000 0.1 20 0.29 "3.37 ( 0.2 )" "4.59 ( 0.36 )" "2.63 ( 0.15 )" 7.96 0.5 3.37 4.59 2.63 "compLasso" +100 1000 0.1 10 0.61 "1.03 ( 0.04 )" "3.82 ( 0.46 )" "0.01 ( 0.01 )" 9.81 0.29 1.03 3.82 0.01 "compLasso" +500 1000 0.1 2 0.96 "1.1 ( 0.03 )" "0.24 ( 0.1 )" "0 ( 0 )" 6.24 0.03 1.1 0.24 0 "compLasso" +1000 1000 0.1 1 0.97 "1.16 ( 0.03 )" "0.16 ( 0.06 )" "0 ( 0 )" 6.16 0.02 1.16 0.16 0 "compLasso" +50 50 0.3 1 0.5 "0.76 ( 0.05 )" "4.6 ( 0.27 )" "0.07 ( 0.03 )" 10.53 0.4 0.76 4.6 0.07 "compLasso" +100 50 0.3 0.5 0.75 "0.7 ( 0.04 )" "1.65 ( 0.28 )" "0 ( 0 )" 7.65 0.16 0.7 1.65 0 "compLasso" +500 50 0.3 0.1 0.93 "0.92 ( 0.04 )" "0.39 ( 0.12 )" "0 ( 0 )" 6.39 0.04 0.92 0.39 0 "compLasso" +1000 50 0.3 0.05 0.93 "0.92 ( 0.03 )" "0.38 ( 0.1 )" "0 ( 0 )" 6.38 0.04 0.92 0.38 0 "compLasso" +50 100 0.3 2 0.43 "1.12 ( 0.07 )" "5.19 ( 0.3 )" "0.63 ( 0.09 )" 10.56 0.44 1.12 5.19 0.63 "compLasso" +100 100 0.3 1 0.7 "0.73 ( 0.04 )" "2.38 ( 0.32 )" "0 ( 0 )" 8.38 0.22 0.73 2.38 0 "compLasso" +500 100 0.3 0.2 0.87 "0.82 ( 0.04 )" "0.84 ( 0.2 )" "0 ( 0 )" 6.84 0.08 0.82 0.84 0 "compLasso" +1000 100 0.3 0.1 0.93 "0.87 ( 0.04 )" "0.41 ( 0.08 )" "0 ( 0 )" 6.41 0.05 0.87 0.41 0 "compLasso" +50 500 0.3 10 0.29 "2.5 ( 0.14 )" "5.62 ( 0.34 )" "2.39 ( 0.12 )" 9.23 0.55 2.5 5.62 2.39 "compLasso" +100 500 0.3 5 0.52 "0.84 ( 0.04 )" "5.23 ( 0.57 )" "0.06 ( 0.02 )" 11.17 0.37 0.84 5.23 0.06 "compLasso" +500 500 0.3 1 0.96 "0.93 ( 0.03 )" "0.25 ( 0.08 )" "0 ( 0 )" 6.25 0.03 0.93 0.25 0 "compLasso" +1000 500 0.3 0.5 0.94 "0.9 ( 0.03 )" "0.38 ( 0.1 )" "0 ( 0 )" 6.38 0.04 0.9 0.38 0 "compLasso" +50 1000 0.3 20 0.28 "2.99 ( 0.17 )" "4.75 ( 0.36 )" "3 ( 0.13 )" 7.75 0.53 2.99 4.75 0 "compLasso" +100 1000 0.3 10 0.46 "0.93 ( 0.04 )" "6.63 ( 0.6 )" "0.1 ( 0.03 )" 12.53 0.43 0.93 6.63 0.1 "compLasso" +500 1000 0.3 2 0.96 "0.89 ( 0.03 )" "0.28 ( 0.09 )" "0 ( 0 )" 6.28 0.03 0.89 0.28 0 "compLasso" +1000 1000 0.3 1 0.95 "0.93 ( 0.03 )" "0.29 ( 0.09 )" "0 ( 0 )" 6.29 0.03 0.93 0.29 0 "compLasso" +50 50 0.5 1 0.44 "0.72 ( 0.05 )" "5.25 ( 0.31 )" "0.24 ( 0.06 )" 11.01 0.43 0.72 5.25 0.24 "compLasso" +100 50 0.5 0.5 0.62 "0.55 ( 0.02 )" "2.98 ( 0.3 )" "0 ( 0 )" 8.98 0.27 0.55 2.98 0 "compLasso" +500 50 0.5 0.1 0.9 "0.62 ( 0.02 )" "0.57 ( 0.13 )" "0 ( 0 )" 6.57 0.06 0.62 0.57 0 "compLasso" +1000 50 0.5 0.05 0.93 "0.67 ( 0.02 )" "0.39 ( 0.12 )" "0 ( 0 )" 6.39 0.04 0.67 0.39 0 "compLasso" +50 100 0.5 2 0.37 "1.15 ( 0.07 )" "5.35 ( 0.36 )" "1.25 ( 0.11 )" 10.1 0.45 1.15 5.35 1.25 "compLasso" +100 100 0.5 1 0.59 "0.68 ( 0.03 )" "3.57 ( 0.36 )" "0.06 ( 0.02 )" 9.51 0.31 0.68 3.57 0.06 "compLasso" +500 100 0.5 0.2 0.94 "0.68 ( 0.02 )" "0.34 ( 0.1 )" "0 ( 0 )" 6.34 0.04 0.68 0.34 0 "compLasso" +1000 100 0.5 0.1 0.95 "0.71 ( 0.02 )" "0.27 ( 0.09 )" "0 ( 0 )" 6.27 0.03 0.71 0.27 0 "compLasso" +50 500 0.5 10 0.29 "2.28 ( 0.14 )" "5.5 ( 0.38 )" "2.81 ( 0.1 )" 8.69 0.55 2.28 5.5 2.81 "compLasso" +100 500 0.5 5 0.38 "0.82 ( 0.04 )" "8.32 ( 0.64 )" "0.38 ( 0.07 )" 13.94 0.51 0.82 8.32 0.38 "compLasso" +500 500 0.5 1 0.93 "0.67 ( 0.02 )" "0.45 ( 0.12 )" "0 ( 0 )" 6.45 0.05 0.67 0.45 0 "compLasso" +1000 500 0.5 0.5 0.94 "0.69 ( 0.02 )" "0.35 ( 0.1 )" "0 ( 0 )" 6.35 0.04 0.69 0.35 0 "compLasso" +50 1000 0.5 20 0.23 "2.44 ( 0.13 )" "5.82 ( 0.36 )" "3.37 ( 0.1 )" 8.45 0.63 2.44 5.82 3.37 "compLasso" +100 1000 0.5 10 0.3 "0.96 ( 0.05 )" "10.94 ( 0.72 )" "0.61 ( 0.1 )" 16.33 0.59 0.96 10.9 0.61 "compLasso" +500 1000 0.5 2 0.96 "0.7 ( 0.02 )" "0.22 ( 0.06 )" "0 ( 0 )" 6.22 0.03 0.7 0.22 0 "compLasso" +1000 1000 0.5 1 0.95 "0.71 ( 0.02 )" "0.33 ( 0.13 )" "0 ( 0 )" 6.33 0.03 0.71 0.33 0 "compLasso" +50 50 0.7 1 0.36 "0.76 ( 0.05 )" "5.83 ( 0.31 )" "0.81 ( 0.1 )" 11.02 0.48 0.76 5.83 0.81 "compLasso" +100 50 0.7 0.5 0.48 "0.43 ( 0.02 )" "4.89 ( 0.38 )" "0.08 ( 0.03 )" 10.81 0.4 0.43 4.89 0.08 "compLasso" +500 50 0.7 0.1 0.81 "0.44 ( 0.01 )" "1.23 ( 0.22 )" "0 ( 0 )" 7.23 0.12 0.44 1.23 0 "compLasso" +1000 50 0.7 0.05 0.88 "0.45 ( 0.01 )" "0.74 ( 0.13 )" "0 ( 0 )" 6.74 0.09 0.45 0.74 0 "compLasso" +50 100 0.7 2 0.31 "0.99 ( 0.06 )" "5.89 ( 0.36 )" "1.88 ( 0.11 )" 10.01 0.53 0.99 5.89 1.88 "compLasso" +100 100 0.7 1 0.41 "0.48 ( 0.02 )" "6.91 ( 0.55 )" "0.22 ( 0.05 )" 12.69 0.47 0.48 6.91 0.22 "compLasso" +500 100 0.7 0.2 0.82 "0.45 ( 0.01 )" "1.24 ( 0.19 )" "0 ( 0 )" 7.24 0.13 0.45 1.24 0 "compLasso" +1000 100 0.7 0.1 0.92 "0.48 ( 0.01 )" "0.5 ( 0.14 )" "0 ( 0 )" 6.5 0.05 0.48 0.5 0 "compLasso" +50 500 0.7 10 0.27 "1.81 ( 0.09 )" "5.27 ( 0.39 )" "3.43 ( 0.09 )" 7.84 0.56 1.81 5.27 3.43 "compLasso" +100 500 0.7 5 0.27 "0.85 ( 0.05 )" "9.56 ( 0.73 )" "1.42 ( 0.12 )" 14.14 0.59 0.85 9.56 1.42 "compLasso" +500 500 0.7 1 0.74 "0.46 ( 0.01 )" "2.11 ( 0.26 )" "0 ( 0 )" 8.11 0.2 0.46 2.11 0 "compLasso" +1000 500 0.7 0.5 0.87 "0.46 ( 0.01 )" "0.93 ( 0.16 )" "0 ( 0 )" 6.93 0.1 0.46 0.93 0 "compLasso" +50 1000 0.7 20 0.21 "1.81 ( 0.08 )" "6.05 ( 0.39 )" "3.58 ( 0.1 )" 8.47 0.64 1.81 6.05 3.58 "compLasso" +100 1000 0.7 10 0.27 "1.1 ( 0.06 )" "8.36 ( 0.68 )" "2.1 ( 0.09 )" 12.26 0.58 1.1 8.36 2.1 "compLasso" +500 1000 0.7 2 0.69 "0.47 ( 0.01 )" "2.72 ( 0.33 )" "0 ( 0 )" 8.72 0.24 0.47 2.72 0 "compLasso" +1000 1000 0.7 1 0.91 "0.5 ( 0.01 )" "0.57 ( 0.16 )" "0 ( 0 )" 6.57 0.06 0.5 0.57 0 "compLasso" +50 50 0.9 1 0.32 "0.54 ( 0.03 )" "4.91 ( 0.32 )" "1.96 ( 0.11 )" 8.95 0.49 0.54 4.91 1.96 "compLasso" +100 50 0.9 0.5 0.35 "0.41 ( 0.02 )" "5.64 ( 0.41 )" "0.96 ( 0.11 )" 10.68 0.46 0.41 5.64 0.96 "compLasso" +500 50 0.9 0.1 0.67 "0.31 ( 0.01 )" "2.66 ( 0.22 )" "0.01 ( 0.01 )" 8.65 0.27 0.31 2.66 0.01 "compLasso" +1000 50 0.9 0.05 0.71 "0.3 ( 0 )" "2.18 ( 0.19 )" "0 ( 0 )" 8.18 0.23 0.3 2.18 0 "compLasso" +50 100 0.9 2 0.31 "0.66 ( 0.04 )" "4.9 ( 0.33 )" "2.83 ( 0.09 )" 8.07 0.54 0.66 4.9 2.83 "compLasso" +100 100 0.9 1 0.32 "0.47 ( 0.02 )" "6.56 ( 0.48 )" "1.45 ( 0.11 )" 11.11 0.52 0.47 6.56 1.45 "compLasso" +500 100 0.9 0.2 0.59 "0.32 ( 0.01 )" "4.04 ( 0.34 )" "0.01 ( 0.01 )" 10.03 0.35 0.32 4.04 0.01 "compLasso" +1000 100 0.9 0.1 0.67 "0.3 ( 0 )" "2.85 ( 0.24 )" "0 ( 0 )" 8.85 0.28 0.3 2.85 0 "compLasso" +50 500 0.9 10 0.23 "0.89 ( 0.05 )" "5.88 ( 0.44 )" "3.74 ( 0.07 )" 8.14 0.62 0.89 5.88 3.74 "compLasso" +100 500 0.9 5 0.24 "0.6 ( 0.02 )" "8.59 ( 0.65 )" "2.63 ( 0.08 )" 11.96 0.64 0.6 8.59 2.63 "compLasso" +500 500 0.9 1 0.41 "0.34 ( 0.01 )" "8.17 ( 0.48 )" "0.17 ( 0.04 )" 14 0.54 0.34 8.17 0.17 "compLasso" +1000 500 0.9 0.5 0.58 "0.32 ( 0 )" "4.24 ( 0.3 )" "0.01 ( 0.01 )" 10.23 0.37 0.32 4.24 0.01 "compLasso" +50 1000 0.9 20 0.19 "1.04 ( 0.06 )" "5.24 ( 0.46 )" "4.23 ( 0.08 )" 7.01 0.6 1.04 5.24 4.23 "compLasso" +100 1000 0.9 10 0.22 "0.67 ( 0.02 )" "9.03 ( 0.73 )" "3.02 ( 0.07 )" 12.01 0.66 0.67 9.03 3.02 "compLasso" +500 1000 0.9 2 0.34 "0.35 ( 0.01 )" "10.52 ( 0.68 )" "0.32 ( 0.05 )" 16.2 0.59 0.35 10.5 0.32 "compLasso" +1000 1000 0.9 1 0.57 "0.33 ( 0 )" "4.48 ( 0.3 )" "0.01 ( 0.01 )" 10.47 0.39 0.33 4.48 0.01 "compLasso" diff --git a/simulations/sim_data_generation/run_sim_data.sh b/simulations/sim_data_generation/run_sim_data.sh new file mode 100755 index 0000000..6297c12 --- /dev/null +++ b/simulations/sim_data_generation/run_sim_data.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +#PBS -N sim_ind_toe +#PBS -l walltime=500:00:00 +#PBS -l nodes=1:ppn=4 +#PBS -l mem=50gb +#PBS -V +#PBS -j oe +#PBS -d . + +set -e +cpus=$PBS_NUM_PPN + +export TMPDIR=/panfs/panfs1.ucsd.edu/panscratch/$USER/Stability_2020 +[ ! -d $TMPDIR ] && mkdir $TMPDIR +export TMPDIR=$TMPDIR/sim_data +[ ! -d $TMPDIR ] && mkdir $TMPDIR +#tmp=$(mktemp -d --tmpdir) +#export TMPDIR=$tmp +#trap "rm -r $tmp; unset TMPDIR" EXIT + +# do something +source activate r-env +Rscript sim_dat_ind_toeplitz.R $TMPDIR +Rscript sim_dat_block.R $TMPDIR +source deactivate r-env + +#mv $tmp/outdir ./outdir