Filtered ML fit and the GDSTM with FRESA.CAD

Here we make use of the FRESA.CAD::filteredfit() function to train ML models with and without GDSTM on the ARCENE data set.

Isabelle Guyon, Steve R. Gunn, Asa Ben-Hur, Gideon Dror, 2004. Result analysis of the NIPS 2003 feature selection challenge. In: NIPS. \[Web Link\]. from: https://archive.ics.uci.edu/ml/datasets/Arcene

a. Original owners
The data were obtained from two sources: The National Cancer Institute (NCI) and the Eastern Virginia Medical School (EVMS). All the data consist of mass-spectra obtained with the SELDI technique. The samples include patients with cancer (ovarian or prostate cancer), and healthy or control patients.

b. Donor of database
This version of the database was prepared for the NIPS 2003 variable and feature selection benchmark by Isabelle Guyon, 955 Creston Road, Berkeley, CA 94708, USA (isabelle ‘@’ clopinet.com).

This scrip uses FRESA.CAD and mlbench R packages:

knitr::opts_chunk$set(collapse = TRUE, warning = FALSE, message = FALSE,comment = "#>")

library("FRESA.CAD")
Loading required package: Rcpp
Loading required package: stringr
Loading required package: miscTools
Loading required package: Hmisc
Loading required package: lattice
Loading required package: survival
Loading required package: Formula
Loading required package: ggplot2
Registered S3 methods overwritten by 'htmltools':
  method               from         
  print.html           tools:rstudio
  print.shiny.tag      tools:rstudio
  print.shiny.tag.list tools:rstudio
Registered S3 method overwritten by 'htmlwidgets':
  method           from         
  print.htmlwidget tools:rstudio
Registered S3 method overwritten by 'data.table':
  method           from
  print.data.table     

Attaching package: ‘Hmisc’

The following objects are masked from ‘package:base’:

    format.pval, units

Loading required package: pROC
Type 'citation("pROC")' for a citation.

Attaching package: ‘pROC’

The following objects are masked from ‘package:stats’:

    cov, smooth, var
library(mlbench)

op <- par(no.readonly = TRUE)

Loading the ARCENE data set

trainLabeled <- read.delim("../Data/trainSet.txt")
validLabeled <- read.delim("../Data/arcene_valid.txt")
wholeArceneSet <- rbind(trainLabeled,validLabeled)


wholeArceneSet$Labels <-  1*(wholeArceneSet$Labels > 0)
wholeArceneSet[,1:ncol(trainLabeled)] <- sapply(wholeArceneSet,as.double)

table(wholeArceneSet$Labels)

  0   1 
112  88 

Setting some variables for downstream analysis

studyName = "Arcene"
datasetframe <- wholeArceneSet
Outcome <- "Labels"

trainFraction = 0.5

Setting the Training and Testing sets


tb <- table(datasetframe[,Outcome])
classNames <- unique(datasetframe[,Outcome])

allrowClass <- datasetframe[,Outcome]
names(allrowClass) <- rownames(datasetframe)

trainsize <- trainFraction*min(tb);
trainSamples <- NULL;
for (theClass in classNames)
{
  classSample <- allrowClass[allrowClass == theClass]
  trainSamples <- c(trainSamples,names(classSample[sample(length(classSample),trainsize)]))
}


datasetframe_train <- datasetframe[trainSamples,]
testSamples <- !(rownames(datasetframe) %in% trainSamples)
datasetframe_test <- datasetframe[testSamples,]

outcomes <- datasetframe_train[,Outcome]

pander::pander(table(datasetframe[,Outcome]),caption="All")
All
0 1
112 88
pander::pander(table(datasetframe_train[,Outcome]),caption="Training")
Training
0 1
44 44
pander::pander(table(datasetframe_test[,Outcome]),caption="Testing")
Testing
0 1
68 44

Machine Learning with the filterfit() function

Train a simple Logistic model with LASSO



system.time(mLASSORaw <- filteredFit(paste(Outcome,"~."),
                   datasetframe_train,
                   fitmethod=LASSO_MIN,
                     filtermethod=univariate_Wilcoxon,
                     filtermethod.control=list(pvalue=0.05,limit= -1),
                    family = "binomial"
                   ))

user system elapsed 12.42 0.07 12.54

Now we run filterfit() with decorrelation



system.time(mLASSODecor <- filteredFit(paste(Outcome,"~."),
                   datasetframe_train,
                    fitmethod=LASSO_MIN,
                     filtermethod=univariate_Wilcoxon,
                     filtermethod.control=list(pvalue=0.05,limit= -1),
                     DECOR = TRUE,
                     family = "binomial"
                   ))

user system elapsed 727.72 17.53 453.28

Predicting the Testinig Set



par(mfrow=c(1,2))


psRaw <- predictionStats_binary(cbind(datasetframe_test$Labels,
                                      predict(mLASSORaw,datasetframe_test)),
                                "LASSO Raw",cex=0.75)

LASSO Raw

pander::pander(psRaw$aucs)
est lower upper
0.7727 0.6809 0.8646
psDecor <- predictionStats_binary(cbind(datasetframe_test$Labels,
                                        predict(mLASSODecor,datasetframe_test)),
                                "LASSO after GDSTM",cex=0.75)

LASSO after GDSTM

pander::pander(psDecor$aucs)
est lower upper
0.867 0.7943 0.9397
LS0tDQp0aXRsZTogIkZpbHRlcmVkIEZpdDogRkNBIGFuZCB0aGUgR0RTVE0iDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQojIyBGaWx0ZXJlZCBNTCBmaXQgYW5kIHRoZSBHRFNUTSB3aXRoIEZSRVNBLkNBRA0KDQpIZXJlIHdlIG1ha2UgdXNlIG9mIHRoZSAqKkZSRVNBLkNBRDo6ZmlsdGVyZWRmaXQoKSoqIGZ1bmN0aW9uIHRvIHRyYWluIE1MIG1vZGVscyB3aXRoIGFuZCB3aXRob3V0IEdEU1RNIG9uIHRoZSBBUkNFTkUgZGF0YSBzZXQuDQoNCj4gSXNhYmVsbGUgR3V5b24sIFN0ZXZlIFIuIEd1bm4sIEFzYSBCZW4tSHVyLCBHaWRlb24gRHJvciwgMjAwNC4gUmVzdWx0IGFuYWx5c2lzIG9mIHRoZSBOSVBTIDIwMDMgZmVhdHVyZSBzZWxlY3Rpb24gY2hhbGxlbmdlLiBJbjogTklQUy4gW1xbV2ViIExpbmtcXV0oaHR0cDovL2Jvb2tzLm5pcHMuY2MvcGFwZXJzL2ZpbGVzL25pcHMxNy9OSVBTMjAwNF8wMTk0LnBkZikuICpmcm9tOiA8aHR0cHM6Ly9hcmNoaXZlLmljcy51Y2kuZWR1L21sL2RhdGFzZXRzL0FyY2VuZT4qDQo+DQo+ICphLiBPcmlnaW5hbCBvd25lcnNcDQo+IFRoZSBkYXRhIHdlcmUgb2J0YWluZWQgZnJvbSB0d28gc291cmNlczogVGhlIE5hdGlvbmFsIENhbmNlciBJbnN0aXR1dGUgKE5DSSkgYW5kIHRoZSBFYXN0ZXJuIFZpcmdpbmlhIE1lZGljYWwgU2Nob29sIChFVk1TKS4gQWxsIHRoZSBkYXRhIGNvbnNpc3Qgb2YgbWFzcy1zcGVjdHJhIG9idGFpbmVkIHdpdGggdGhlIFNFTERJIHRlY2huaXF1ZS4gVGhlIHNhbXBsZXMgaW5jbHVkZSBwYXRpZW50cyB3aXRoIGNhbmNlciAob3ZhcmlhbiBvciBwcm9zdGF0ZSBjYW5jZXIpLCBhbmQgaGVhbHRoeSBvciBjb250cm9sIHBhdGllbnRzLlwNCj4gXA0KPiBiLiBEb25vciBvZiBkYXRhYmFzZVwNCj4gVGhpcyB2ZXJzaW9uIG9mIHRoZSBkYXRhYmFzZSB3YXMgcHJlcGFyZWQgZm9yIHRoZSBOSVBTIDIwMDMgdmFyaWFibGUgYW5kIGZlYXR1cmUgc2VsZWN0aW9uIGJlbmNobWFyayBieSBJc2FiZWxsZSBHdXlvbiwgOTU1IENyZXN0b24gUm9hZCwgQmVya2VsZXksIENBIDk0NzA4LCBVU0EgKFtpc2FiZWxsZSAqKidcQCcqKiBjbG9waW5ldC5jb21dey51bH0pLioNCg0KVGhpcyBzY3JpcCB1c2VzIEZSRVNBLkNBRCBhbmQgbWxiZW5jaCBSIHBhY2thZ2VzOg0KDQpgYGB7ciBmdW5jdGlvbnMsZWNobyA9IFRSVUUgfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGNvbGxhcHNlID0gVFJVRSwgd2FybmluZyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UsY29tbWVudCA9ICIjPiIpDQoNCmxpYnJhcnkoIkZSRVNBLkNBRCIpDQpsaWJyYXJ5KG1sYmVuY2gpDQoNCm9wIDwtIHBhcihuby5yZWFkb25seSA9IFRSVUUpDQoNCmBgYA0KDQpMb2FkaW5nIHRoZSBBUkNFTkUgZGF0YSBzZXQNCg0KYGBge3J9DQp0cmFpbkxhYmVsZWQgPC0gcmVhZC5kZWxpbSgiLi4vRGF0YS90cmFpblNldC50eHQiKQ0KdmFsaWRMYWJlbGVkIDwtIHJlYWQuZGVsaW0oIi4uL0RhdGEvYXJjZW5lX3ZhbGlkLnR4dCIpDQp3aG9sZUFyY2VuZVNldCA8LSByYmluZCh0cmFpbkxhYmVsZWQsdmFsaWRMYWJlbGVkKQ0KDQoNCndob2xlQXJjZW5lU2V0JExhYmVscyA8LSAgMSood2hvbGVBcmNlbmVTZXQkTGFiZWxzID4gMCkNCndob2xlQXJjZW5lU2V0WywxOm5jb2wodHJhaW5MYWJlbGVkKV0gPC0gc2FwcGx5KHdob2xlQXJjZW5lU2V0LGFzLmRvdWJsZSkNCg0KdGFibGUod2hvbGVBcmNlbmVTZXQkTGFiZWxzKQ0KDQpgYGANCg0KU2V0dGluZyBzb21lIHZhcmlhYmxlcyBmb3IgZG93bnN0cmVhbSBhbmFseXNpcw0KDQpgYGB7cn0NCnN0dWR5TmFtZSA9ICJBcmNlbmUiDQpkYXRhc2V0ZnJhbWUgPC0gd2hvbGVBcmNlbmVTZXQNCk91dGNvbWUgPC0gIkxhYmVscyINCg0KdHJhaW5GcmFjdGlvbiA9IDAuNQ0KDQpgYGANCg0KU2V0dGluZyB0aGUgVHJhaW5pbmcgYW5kIFRlc3Rpbmcgc2V0cw0KDQpgYGB7ciwgcmVzdWx0cyA9ICJhc2lzIiwgd2FybmluZyA9IEZBTFNFLCBkcGk9NjAwLCBmaWcuaGVpZ2h0PSA2LjAsIGZpZy53aWR0aD0gOC4wfQ0KDQp0YiA8LSB0YWJsZShkYXRhc2V0ZnJhbWVbLE91dGNvbWVdKQ0KY2xhc3NOYW1lcyA8LSB1bmlxdWUoZGF0YXNldGZyYW1lWyxPdXRjb21lXSkNCg0KYWxscm93Q2xhc3MgPC0gZGF0YXNldGZyYW1lWyxPdXRjb21lXQ0KbmFtZXMoYWxscm93Q2xhc3MpIDwtIHJvd25hbWVzKGRhdGFzZXRmcmFtZSkNCg0KdHJhaW5zaXplIDwtIHRyYWluRnJhY3Rpb24qbWluKHRiKTsNCnRyYWluU2FtcGxlcyA8LSBOVUxMOw0KZm9yICh0aGVDbGFzcyBpbiBjbGFzc05hbWVzKQ0Kew0KICBjbGFzc1NhbXBsZSA8LSBhbGxyb3dDbGFzc1thbGxyb3dDbGFzcyA9PSB0aGVDbGFzc10NCiAgdHJhaW5TYW1wbGVzIDwtIGModHJhaW5TYW1wbGVzLG5hbWVzKGNsYXNzU2FtcGxlW3NhbXBsZShsZW5ndGgoY2xhc3NTYW1wbGUpLHRyYWluc2l6ZSldKSkNCn0NCg0KDQpkYXRhc2V0ZnJhbWVfdHJhaW4gPC0gZGF0YXNldGZyYW1lW3RyYWluU2FtcGxlcyxdDQp0ZXN0U2FtcGxlcyA8LSAhKHJvd25hbWVzKGRhdGFzZXRmcmFtZSkgJWluJSB0cmFpblNhbXBsZXMpDQpkYXRhc2V0ZnJhbWVfdGVzdCA8LSBkYXRhc2V0ZnJhbWVbdGVzdFNhbXBsZXMsXQ0KDQpvdXRjb21lcyA8LSBkYXRhc2V0ZnJhbWVfdHJhaW5bLE91dGNvbWVdDQoNCnBhbmRlcjo6cGFuZGVyKHRhYmxlKGRhdGFzZXRmcmFtZVssT3V0Y29tZV0pLGNhcHRpb249IkFsbCIpDQpwYW5kZXI6OnBhbmRlcih0YWJsZShkYXRhc2V0ZnJhbWVfdHJhaW5bLE91dGNvbWVdKSxjYXB0aW9uPSJUcmFpbmluZyIpDQpwYW5kZXI6OnBhbmRlcih0YWJsZShkYXRhc2V0ZnJhbWVfdGVzdFssT3V0Y29tZV0pLGNhcHRpb249IlRlc3RpbmciKQ0KDQoNCmBgYA0KDQojIyBNYWNoaW5lIExlYXJuaW5nIHdpdGggdGhlIGZpbHRlcmZpdCgpIGZ1bmN0aW9uDQoNClRyYWluIGEgc2ltcGxlIExvZ2lzdGljIG1vZGVsIHdpdGggTEFTU08NCg0KYGBge3IgcmVzdWx0cyA9ICJhc2lzIiwgd2FybmluZyA9IEZBTFNFLCBkcGk9NjAwLCBmaWcuaGVpZ2h0PSA2LjAsIGZpZy53aWR0aD0gOC4wfQ0KDQoNCnN5c3RlbS50aW1lKG1MQVNTT1JhdyA8LSBmaWx0ZXJlZEZpdChwYXN0ZShPdXRjb21lLCJ+LiIpLA0KICAgICAgICAgICAgICAgICAgIGRhdGFzZXRmcmFtZV90cmFpbiwNCiAgICAgICAgICAgICAgICAgICBmaXRtZXRob2Q9TEFTU09fTUlOLA0KICAgICAgICAgICAgICAgICAgICAgZmlsdGVybWV0aG9kPXVuaXZhcmlhdGVfV2lsY294b24sDQogICAgICAgICAgICAgICAgICAgICBmaWx0ZXJtZXRob2QuY29udHJvbD1saXN0KHB2YWx1ZT0wLjA1LGxpbWl0PSAtMSksDQogICAgICAgICAgICAgICAgICAgIGZhbWlseSA9ICJiaW5vbWlhbCINCiAgICAgICAgICAgICAgICAgICApKQ0KDQoNCmBgYA0KDQpOb3cgd2UgcnVuICoqZmlsdGVyZml0KiooKSB3aXRoIGRlY29ycmVsYXRpb24NCg0KYGBge3IgcmVzdWx0cyA9ICJhc2lzIiwgd2FybmluZyA9IEZBTFNFLCBkcGk9NjAwLCBmaWcuaGVpZ2h0PSA2LjAsIGZpZy53aWR0aD0gOC4wfQ0KDQoNCnN5c3RlbS50aW1lKG1MQVNTT0RlY29yIDwtIGZpbHRlcmVkRml0KHBhc3RlKE91dGNvbWUsIn4uIiksDQogICAgICAgICAgICAgICAgICAgZGF0YXNldGZyYW1lX3RyYWluLA0KICAgICAgICAgICAgICAgICAgICBmaXRtZXRob2Q9TEFTU09fTUlOLA0KICAgICAgICAgICAgICAgICAgICAgZmlsdGVybWV0aG9kPXVuaXZhcmlhdGVfV2lsY294b24sDQogICAgICAgICAgICAgICAgICAgICBmaWx0ZXJtZXRob2QuY29udHJvbD1saXN0KHB2YWx1ZT0wLjA1LGxpbWl0PSAtMSksDQogICAgICAgICAgICAgICAgICAgICBERUNPUiA9IFRSVUUsDQogICAgICAgICAgICAgICAgICAgICBmYW1pbHkgPSAiYmlub21pYWwiDQogICAgICAgICAgICAgICAgICAgKSkNCg0KDQpgYGANCg0KIyMjIFByZWRpY3RpbmcgdGhlIFRlc3RpbmlnIFNldA0KDQpgYGB7ciByZXN1bHRzID0gImFzaXMiLCB3YXJuaW5nID0gRkFMU0UsIGRwaT02MDAsIGZpZy5oZWlnaHQ9IDUuMCwgZmlnLndpZHRoPSA4LjB9DQoNCg0KcGFyKG1mcm93PWMoMSwyKSkNCg0KDQpwc1JhdyA8LSBwcmVkaWN0aW9uU3RhdHNfYmluYXJ5KGNiaW5kKGRhdGFzZXRmcmFtZV90ZXN0JExhYmVscywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZGljdChtTEFTU09SYXcsZGF0YXNldGZyYW1lX3Rlc3QpKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxBU1NPIFJhdyIsY2V4PTAuNzUpDQpwYW5kZXI6OnBhbmRlcihwc1JhdyRhdWNzKQ0KDQoNCnBzRGVjb3IgPC0gcHJlZGljdGlvblN0YXRzX2JpbmFyeShjYmluZChkYXRhc2V0ZnJhbWVfdGVzdCRMYWJlbHMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZGljdChtTEFTU09EZWNvcixkYXRhc2V0ZnJhbWVfdGVzdCkpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTEFTU08gYWZ0ZXIgR0RTVE0iLGNleD0wLjc1KQ0KcGFuZGVyOjpwYW5kZXIocHNEZWNvciRhdWNzKQ0KDQoNCg0KYGBgDQo=