--- title: "demo" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{demo} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ## Introduction This is a simple demo to carry out variable selection ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` ```{r setup} library(fspls2) #devtools::load_all( "~/github/fspls2/R") ##set the types options("fspls.types"= jsonlite::fromJSON('{"gaussian":["correlation","rms"],"binomial":["AUC"],"multinomial":["AUC"],"ordinal" : "AUC_all"}')) ## set the y_transforms to explore transform_x=getTransform(pow = 1, ## transformations raise to the powers indicated here. Default is 1 but can add others n_random=5,perm=FALSE ## number of random transformations, also used in stopping critera ) ## set the flags flags = list(min=0, #minimum number of variables max=20, # maximum number of variables, nfold=5,## number of folds. 10 fold implies a 10 non-overlapping 10% splits batchsize=0, ##batchsize can be specified alternatively to nfold, but only one can be nonzero angles_only=FALSE, ## whether to use purely angles to find best variables (RECOMMENDED FALSE) topn=20, ## if using model fit to rank variables, how many top angles to take (larger takes more time) beam=1, ## how many best combinations to take through to next round of iteration. minimum value is 1, but higher explores more combinations all_v_all=FALSE, ## for multi-class outcomes, this builds all vs all classifier, instead of a one vs all project=TRUE, ## whether to use the projection approach in model building (TRUE recommended) useglmnet=FALSE, ##whether to useglmnet for model fitting (after variables selected) doesnt work well for randomisation. Note that useglmnet is TRUE by default for multinomial verbose=TRUE, lambda = NULL, ## for using glmnet show_warnings=FALSE, show_pvalue_plots=FALSE ## get plots of pvalues over iterations ) #check_flags(flags) ## runs som simple checks ``` ```{r example} examples = c("binomial", "gaussian", "ordinal", "multinomial"); #example="gaussian" #FUNCTION TO SHOW HOW TO RUN EACH EXAMPLE runExample<-function(example,nfold=5){ flags$nfold = nfold fi = system.file("extdata", paste0(example,"_data.rds"), package = "fspls2") if (fi == "") stop("Could not find extdata/", example, "_data.rds in fspls2 package") dataset = readRDS(fi) ## set up the objects dh = dataH$new(dataset$dataset, y = dataset$y, nme=example, flags=flags) ##Step 1. run variable selection datasH = list(dh) # #vars_all = analysis$select(datasH, flags, transform_x, phens = dh$pheno()$all) analysis =analysisEnv$new(flags=flags, dbDir=NULL) data_types = dh$data_types(); dh$update(phens = dh$pheno()$all, flags = flags, transform_x = transform_x, data_types = data_types) variables = dh$select( analysis=analysis) # selected_plot= dh$plotData(variables, update=T) # print(selected_plot) #variables = fspls.select(list(dh), flags, transform_x) #, phens = dh$pheno()$all) #Step 2. make models with selected variables all_models =dh$makeAllModels(variables) #optionally get predictions #Step 3. evaluate the models eval1= dh$evaluateAllModels(all_models) ## Now visuaise the resultsy ggps1=plotEval(eval1,legend=T, grid1=c("subpheno","pheno"), grid0=c("measure","cv_full"),linetype="data", ##"full_model" shape_color=c("data","transf"),sep_by=c("beam"), showranges=T,text="variable",logy=example=="gaussian", scales="free",title =names(phens)[1], title1="pheno" ) #, grid="pheno~cv_full",showranges = F) ##optionally get all predictions #predictions = dh$extractPredictions(all_models) ggps1[[1]] } ##iterative function carries out imputation of uncertain y values at the same time as feature selection ##only works for multinomial and binomial runIterative<-function(example, prop_na=0.2, seed=42){ flags$nfold=1 ## only works with one fold currently fi = system.file("extdata", paste0(example,"_data.rds"), package = "fspls2") dataset = readRDS(fi); if(example=="binomial") dataset$y$y = factor(dataset$y$y, labels=c("A","B")) dataset$certainty = rep(1, nrow(dataset$y)); set.seed(seed) na_inds1=sort(sample.int(nrow(dataset$y),nrow(dataset$y)*prop_na)) dataset$certainty[na_inds1]=0.5;##1/length(levels(dataset$y[[1]])) #dataset$y[na_inds,] = NA flags$mult = 100 flags$select_each_iteration = TRUE; results = fspls.iterative(dataset, flags, transform_x) print(results$updates) na_remaining= length(which(results$certainty_new<0.95)) message(paste("na remaining", na_remaining)) message(paste("error rate",results$error_rate)) print(results$vars_all$full) } ``` Example 1 ```{r, eval = FALSE} ggp1=runExample("binomial", nfold=5); ggp1 ``` Example 2 ```{r, eval = FALSE} ggp2 = runExample("gaussian", nfold=5) ggp2 ``` Example 3 ```{r, eval = FALSE } ggp3 = runExample("ordinal", nfold=5) ggp3 ``` Example 4 ```{r, eval = FALSE} ggp4= runExample("multinomial", nfold=5) ggp4 ``` Iteratively replacing uncertain values ```{r, eval = FALSE} ## test Iterative works on binomial and multinomial runIterative("binomial") ``` ```{r, eval = FALSE} ## test Iterative works on binomial and multinomial runIterative("multinomial") ```