annotate templateLibrary.py @ 4:4df942aff9bb draft

Uploaded
author deepakjadmin
date Fri, 22 Jan 2016 11:57:21 -0500
parents 4497ac070d7f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1 def __template4Rnw():
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
2
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
3 template4Rnw = r'''%% Classification Modeling Script
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
4 %% Max Kuhn (max.kuhn@pfizer.com, mxkuhn@gmail.com)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
5 %% Version: 1.00
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
6 %% Created on: 2010/10/02
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
7 %%
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
8 %% This is an Sweave template for building and describing
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
9 %% classification models. It mixes R and LaTeX code. The document can
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
10 %% be processing using R's Sweave function to produce a tex file.
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
11 %%
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
12 %% The inputs are:
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
13 %% - the initial data set in a data frame called 'rawData'
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
14 %% - a factor column in the data set called 'class'. this should be the
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
15 %% outcome variable
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
16 %% - all other columns in rawData should be predictor variables
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
17 %% - the type of model should be in a variable called 'modName'.
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
18 %%
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
19 %% The script attempts to make some intelligent choices based on the
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
20 %% model being used. For example, if modName is "pls", the script will
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
21 %% automatically center and scale the predictor data. There are
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
22 %% situations where these choices can (and should be) changed.
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
23 %%
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
24 %% There are other options that may make sense to change. For example,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
25 %% the user may want to adjust the type of resampling. To find these
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
26 %% parts of the script, search on the string 'OPTION'. These parts of
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
27 %% the code will document the options.
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
28
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
29 \documentclass[14pt]{report}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
30 \usepackage{amsmath}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
31 \usepackage[pdftex]{graphicx}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
32 \usepackage{color}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
33 \usepackage{ctable}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
34 \usepackage{xspace}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
35 \usepackage{fancyvrb}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
36 \usepackage{fancyhdr}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
37 \usepackage{lastpage}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
38 \usepackage{longtable}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
39 \usepackage{algorithm2e}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
40 \usepackage[
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
41 colorlinks=true,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
42 linkcolor=blue,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
43 citecolor=blue,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
44 urlcolor=blue]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
45 {hyperref}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
46 \usepackage{lscape}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
47 \usepackage{Sweave}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
48 \SweaveOpts{keep.source = TRUE}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
49
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
50 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
51
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
52 % define new colors for use
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
53 \definecolor{darkgreen}{rgb}{0,0.6,0}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
54 \definecolor{darkred}{rgb}{0.6,0.0,0}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
55 \definecolor{lightbrown}{rgb}{1,0.9,0.8}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
56 \definecolor{brown}{rgb}{0.6,0.3,0.3}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
57 \definecolor{darkblue}{rgb}{0,0,0.8}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
58 \definecolor{darkmagenta}{rgb}{0.5,0,0.5}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
59
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
60 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
61
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
62 \newcommand{\bld}[1]{\mbox{\boldmath $$#1$$}}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
63 \newcommand{\shell}[1]{\mbox{$$#1$$}}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
64 \renewcommand{\vec}[1]{\mbox{\bf {#1}}}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
65
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
66 \newcommand{\ReallySmallSpacing}{\renewcommand{\baselinestretch}{.6}\Large\normalsize}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
67 \newcommand{\SmallSpacing}{\renewcommand{\baselinestretch}{1.1}\Large\normalsize}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
68
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
69 \newcommand{\halfs}{\frac{1}{2}}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
70
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
71 \setlength{\oddsidemargin}{-.25 truein}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
72 \setlength{\evensidemargin}{0truein}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
73 \setlength{\topmargin}{-0.2truein}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
74 \setlength{\textwidth}{7 truein}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
75 \setlength{\textheight}{8.5 truein}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
76 \setlength{\parindent}{0.20truein}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
77 \setlength{\parskip}{0.10truein}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
78
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
79 \setcounter{LTchunksize}{50}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
80
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
81 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
82 \pagestyle{fancy}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
83 \lhead{}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
84 %% OPTION Report header name
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
85 \chead{Classification Model Script}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
86 \rhead{}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
87 \lfoot{}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
88 \cfoot{}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
89 \rfoot{\thepage\ of \pageref{LastPage}}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
90 \renewcommand{\headrulewidth}{1pt}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
91 \renewcommand{\footrulewidth}{1pt}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
92 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
93
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
94 %% OPTION Report title and modeler name
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
95 \title{Classification Model Script using $METHOD}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
96 \author{"Lynn Group with M. Kuhn, SCIS, JNU, New Delhi"}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
97
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
98 \begin{document}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
99
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
100 \maketitle
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
101
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
102 \thispagestyle{empty}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
103 <<dummy, eval=TRUE, echo=FALSE, results=hide>>=
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
104 # sets values for variables used later in the program to prevent the \Sexpr error on parsing with Sweave
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
105 numSamples=''
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
106 classDistString=''
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
107 missingText=''
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
108 numPredictors=''
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
109 numPCAcomp=''
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
110 pcaText=''
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
111 nzvText=''
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
112 corrText=''
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
113 ppText=''
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
114 varText=''
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
115 splitText="Dummy Text"
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
116 nirText="Dummy Text"
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
117 # pctTrain is a variable that is initialised in Data splitting, and reused later in testPred
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
118 pctTrain=0.8
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
119 Smpling=''
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
120 nzvText1=''
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
121 classDistString1=''
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
122 dwnsmpl=''
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
123 upsmpl=''
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
124
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
125 @
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
126 <<startup, eval= TRUE, results = hide, echo = FALSE>>=
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
127 library(Hmisc)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
128 library(caret)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
129 library(pROC)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
130 versionTest <- compareVersion(packageDescription("caret")$$Version,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
131 "4.65")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
132 if(versionTest < 0) stop("caret version 4.65 or later is required")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
133
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
134 library(RColorBrewer)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
135
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
136
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
137 listString <- function (x, period = FALSE, verbose = FALSE)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
138 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
139 if (verbose) cat("\n entering listString\n")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
140 flush.console()
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
141 if (!is.character(x))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
142 x <- as.character(x)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
143 numElements <- length(x)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
144 out <- if (length(x) > 0) {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
145 switch(min(numElements, 3), x, paste(x, collapse = " and "),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
146 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
147 x <- paste(x, c(rep(",", numElements - 2), " and", ""), sep = "")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
148 paste(x, collapse = " ")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
149 })
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
150 }
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
151 else ""
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
152 if (period) out <- paste(out, ".", sep = "")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
153 if (verbose) cat(" leaving listString\n\n")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
154 flush.console()
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
155 out
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
156 }
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
157
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
158 resampleStats <- function(x, digits = 3)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
159 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
160 bestPerf <- x$$bestTune
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
161 colnames(bestPerf) <- gsub("^\\.", "", colnames(bestPerf))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
162 out <- merge(x$$results, bestPerf)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
163 out <- out[, colnames(out) %in% x$$perfNames]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
164 names(out) <- gsub("ROC", "area under the ROC curve", names(out), fixed = TRUE)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
165 names(out) <- gsub("Sens", "sensitivity", names(out), fixed = TRUE)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
166 names(out) <- gsub("Spec", "specificity", names(out), fixed = TRUE)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
167 names(out) <- gsub("Accuracy", "overall accuracy", names(out), fixed = TRUE)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
168 names(out) <- gsub("Kappa", "Kappa statistics", names(out), fixed = TRUE)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
169
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
170 out <- format(out, digits = digits)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
171 listString(paste(names(out), "was", out))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
172 }
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
173
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
174 twoClassNoProbs <- function (data, lev = NULL, model = NULL)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
175 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
176 out <- c(sensitivity(data[, "pred"], data[, "obs"], lev[1]),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
177 specificity(data[, "pred"], data[, "obs"], lev[2]),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
178 confusionMatrix(data[, "pred"], data[, "obs"])$$overall["Kappa"])
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
179
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
180 names(out) <- c("Sens", "Spec", "Kappa")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
181 out
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
182 }
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
183
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
184
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
185
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
186 ##OPTION: model name: see ?train for more values/models
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
187 modName <- "$METHOD"
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
188
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
189
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
190 load("$RDATA")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
191 rawData <- dataX
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
192 rawData$$outcome <- dataY
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
193
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
194 @
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
195
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
196
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
197 \section*{Data Sets}\label{S:data}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
198
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
199 %% OPTION: provide some background on the problem, the experimental
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
200 %% data, how the compounds were selected etc
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
201
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
202 <<getDataInfo, eval = $GETDATAINFOEVAL, echo = $GETDATAINFOECHO, results = $GETDATAINFORESULT>>=
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
203 if(!any(names(rawData) == "outcome")) stop("a variable called outcome should be in the data set")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
204 if(!is.factor(rawData$$outcome)) stop("the outcome should be a factor vector")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
205
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
206 ## OPTION: when there are only two classes, the first level of the
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
207 ## factor is used as the "positive" or "event" for calculating
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
208 ## sensitivity and specificity. Adjust the outcome factor accordingly.
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
209 numClasses <- length(levels(rawData$$outcome))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
210 numSamples <- nrow(rawData)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
211 numPredictors <- ncol(rawData) - 1
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
212 predictorNames <- names(rawData)[names(rawData) != "outcome"]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
213
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
214 isNum <- apply(rawData[,predictorNames, drop = FALSE], 2, is.numeric)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
215 if(any(!isNum)) stop("all predictors in rawData should be numeric")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
216
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
217 classTextCheck <- all.equal(levels(rawData$$outcome), make.names(levels(rawData$$outcome)))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
218 if(!classTextCheck) warning("the class levels are not valid R variable names; this may cause errors")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
219
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
220 ## Get the class distribution
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
221 classDist <- table(rawData$$outcome)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
222 classDistString <- paste("``",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
223 names(classDist),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
224 "'' ($$n$$=",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
225 classDist,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
226 ")",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
227 sep = "")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
228 classDistString <- listString(classDistString)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
229 @
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
230
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
231 <<missingFilter, eval = $MISSINGFILTEREVAL, echo = $MISSINGFILTERECHO, results = $MISSINGFILTERRESULT>>=
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
232 colRate <- apply(rawData[, predictorNames, drop = FALSE],
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
233 2, function(x) mean(is.na(x)))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
234
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
235 ##OPTION thresholds can be changed
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
236 colExclude <- colRate > $MISSINGFILTERTHRESHC
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
237
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
238 missingText <- ""
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
239
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
240 if(any(colExclude))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
241 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
242 missingText <- paste(missingText,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
243 ifelse(sum(colExclude) > 1,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
244 " There were ",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
245 " There was "),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
246 sum(colExclude),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
247 ifelse(sum(colExclude) > 1,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
248 " predictors ",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
249 " predictor "),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
250 "with an excessive number of ",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
251 "missing data. ",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
252 ifelse(sum(colExclude) > 1,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
253 " These were excluded. ",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
254 " This was excluded. "))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
255 predictorNames <- predictorNames[!colExclude]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
256 rawData <- rawData[, names(rawData) %in% c("outcome", predictorNames), drop = FALSE]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
257 }
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
258
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
259
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
260 rowRate <- apply(rawData[, predictorNames, drop = FALSE],
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
261 1, function(x) mean(is.na(x)))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
262
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
263 rowExclude <- rowRate > $MISSINGFILTERTHRESHR
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
264
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
265
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
266 if(any(rowExclude)) {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
267 missingText <- paste(missingText,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
268 ifelse(sum(rowExclude) > 1,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
269 " There were ",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
270 " There was "),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
271 sum(colExclude),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
272 ifelse(sum(rowExclude) > 1,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
273 " samples ",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
274 " sample "),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
275 "with an excessive number of ",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
276 "missing data. ",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
277 ifelse(sum(rowExclude) > 1,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
278 " These were excluded. ",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
279 " This was excluded. "),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
280 "After filtering, ",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
281 sum(!rowExclude),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
282 " samples remained.")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
283 rawData <- rawData[!rowExclude, ]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
284 hasMissing <- apply(rawData[, predictorNames, drop = FALSE],
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
285 1, function(x) mean(is.na(x)))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
286 } else {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
287 hasMissing <- apply(rawData[, predictorNames, drop = FALSE],
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
288 1, function(x) any(is.na(x)))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
289 missingText <- paste(missingText,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
290 ifelse(missingText == "",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
291 "There ",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
292 "Subsequently, there "),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
293 ifelse(sum(hasMissing) == 1,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
294 "was ",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
295 "were "),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
296 ifelse(sum(hasMissing) > 0,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
297 sum(hasMissing),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
298 "no"),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
299 ifelse(sum(hasMissing) == 1,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
300 "sample ",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
301 "samples "),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
302 "with missing values.")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
303
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
304 rawData <- rawData[complete.cases(rawData),]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
305
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
306 }
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
307
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
308 rawData1 <- rawData[,1:length(rawData)-1]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
309 rawData2 <- rawData[,length(rawData)]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
310
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
311 set.seed(222)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
312 nzv1 <- nearZeroVar(rawData1)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
313 if(length(nzv1) > 0)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
314 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
315 nzvVars1 <- names(rawData1)[nzv1]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
316 rawData <- rawData1[, -nzv1]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
317 rawData$outcome <- rawData2
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
318 nzvText1 <- paste("There were ",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
319 length(nzv1),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
320 " predictors that were removed from original data due to",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
321 " severely unbalanced distributions that",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
322 " could negatively affect the model fit",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
323 ifelse(length(nzv1) > 10,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
324 ".",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
325 paste(": ",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
326 listString(nzvVars1),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
327 ".",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
328 sep = "")),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
329 sep = "")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
330
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
331 } else {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
332 rawData <- rawData1
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
333 rawData$outcome <- rawData2
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
334 nzvText1 <- ""
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
335
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
336 }
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
337
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
338 remove("rawData1")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
339 remove("rawData2")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
340
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
341 @
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
342
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
343 The initial data set consisted of \Sexpr{numSamples} samples and
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
344 \Sexpr{numPredictors} predictor variables. The breakdown of the
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
345 outcome data classes were: \Sexpr{classDistString}.
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
346
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
347 \Sexpr{missingText}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
348
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
349 \Sexpr{nzvText1}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
350
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
351 <<pca, eval= $PCAEVAL, echo = $PCAECHO, results = $PCARESULT>>=
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
352
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
353 predictorNames <- names(rawData)[names(rawData) != "outcome"]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
354 numPredictors <- length(predictorNames)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
355 predictors <- rawData[, predictorNames, drop = FALSE]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
356 ## PCA will fail with predictors having less than 2 unique values
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
357 isZeroVar <- apply(predictors, 2,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
358 function(x) length(unique(x)) < 2)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
359 if(any(isZeroVar)) predictors <- predictors[, !isZeroVar, drop = FALSE]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
360 ## For whatever, only the formula interface to prcomp
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
361 ## handles missing values
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
362 pcaForm <- as.formula(
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
363 paste("~",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
364 paste(names(predictors), collapse = "+")))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
365 pca <- prcomp(pcaForm,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
366 data = predictors,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
367 center = TRUE,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
368 scale. = TRUE,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
369 na.action = na.omit)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
370 ## OPTION: the number of components plotted/discussed can be set
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
371 numPCAcomp <- $PCACOMP
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
372 pctVar <- pca$$sdev^2/sum(pca$$sdev^2)*100
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
373 pcaText <- paste(round(pctVar[1:numPCAcomp], 1),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
374 "\\\\%",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
375 sep = "")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
376 pcaText <- listString(pcaText)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
377 @
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
378
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
379 To get an initial assessment of the separability of the classes,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
380 principal component analysis (PCA) was used to distill the
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
381 \Sexpr{numPredictors} predictors down into \Sexpr{numPCAcomp}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
382 surrogate variables (i.e. the principal components) in a manner that
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
383 attempts to maximize the amount of information preserved from the
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
384 original predictor set. Figure \ref{F:inititalPCA} contains plots of
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
385 the first \Sexpr{numPCAcomp} components, which accounted for
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
386 \Sexpr{pcaText} percent of the variability in the original predictors
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
387 (respectively).
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
388
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
389
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
390 %% OPTION: remark on how well (or poorly) the data separated
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
391
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
392 \setkeys{Gin}{width = 0.8\textwidth}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
393 \begin{figure}[p]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
394 \begin{center}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
395
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
396 <<pcaPlot, eval = $PCAPLOTEVAL, echo = $PCAPLOTECHO, results = $PCAPLOTRESULT, fig = $PCAPLOTFIG, width = 8, height = 8>>=
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
397 trellis.par.set(caretTheme(), warn = TRUE)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
398 if(numPCAcomp == 2)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
399 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
400 axisRange <- extendrange(pca$$x[, 1:2])
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
401 print(
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
402 xyplot(PC1 ~ PC2,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
403 data = as.data.frame(pca$$x),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
404 type = c("p", "g"),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
405 groups = rawData$$outcome,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
406 auto.key = list(columns = 2),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
407 xlim = axisRange,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
408 ylim = axisRange))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
409 } else {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
410 axisRange <- extendrange(pca$$x[, 1:numPCAcomp])
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
411 print(
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
412 splom(~as.data.frame(pca$$x)[, 1:numPCAcomp],
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
413 type = c("p", "g"),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
414 groups = rawData$$outcome,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
415 auto.key = list(columns = 2),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
416 as.table = TRUE,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
417 prepanel.limits = function(x) axisRange
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
418 ))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
419
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
420 }
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
421
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
422 @
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
423
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
424 \caption[PCA Plot]{A plot of the first \Sexpr{numPCAcomp}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
425 principal components for the original data set.}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
426 \label{F:inititalPCA}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
427 \end{center}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
428 \end{figure}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
429
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
430
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
431
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
432 <<initialDataSplit, eval = $INITIALDATASPLITEVAL, echo = $INITIALDATASPLITECHO, results = $INITIALDATASPLITRESULT>>=
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
433
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
434 ## OPTION: in small samples sizes, you may not want to set aside a
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
435 ## training set and focus on the resampling results.
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
436
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
437 set.seed(1234)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
438 dataX <- rawData[,1:length(rawData)-1]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
439 dataY <- rawData[,length(rawData)]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
440
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
441 Smpling <- "$SAAMPLING"
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
442
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
443 if(Smpling=="downsampling")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
444 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
445 dwnsmpl <- downSample(dataX,dataY)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
446 rawData <- dwnsmpl[,1:length(dwnsmpl)-1]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
447 rawData$outcome <- dwnsmpl[,length(dwnsmpl)]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
448 remove("dwnsmpl")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
449 remove("dataX")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
450 remove("dataY")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
451 }else if(Smpling=="upsampling"){
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
452 upsmpl <- upSample(dataX,dataY)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
453 rawData <- upsmpl[,1:length(upsmpl)-1]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
454 rawData$outcome <- upsmpl[,length(upsmpl)]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
455 remove("upsmpl")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
456 remove("dataX")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
457 remove("dataY")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
458 }else{remove("dataX")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
459 remove("dataY")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
460 }
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
461
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
462
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
463
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
464 numSamples <- nrow(rawData)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
465
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
466 predictorNames <- names(rawData)[names(rawData) != "outcome"]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
467 numPredictors <- length(predictorNames)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
468
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
469
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
470 classDist1 <- table(rawData$outcome)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
471 classDistString1 <- paste("``",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
472 names(classDist1),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
473 "'' ($n$=",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
474 classDist1,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
475 ")",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
476 sep = "")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
477 classDistString1 <- listString(classDistString1)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
478
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
479 pctTrain <- $PERCENT
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
480
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
481 if(pctTrain < 1)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
482 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
483 ## OPTION: seed number can be changed
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
484 set.seed(1)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
485 inTrain <- createDataPartition(rawData$$outcome,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
486 p = pctTrain,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
487 list = FALSE)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
488 trainX <- rawData[ inTrain, predictorNames]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
489 testX <- rawData[-inTrain, predictorNames]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
490 trainY <- rawData[ inTrain, "outcome"]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
491 testY <- rawData[-inTrain, "outcome"]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
492 splitText <- paste("The original data were split into ",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
493 "a training set ($$n$$=",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
494 nrow(trainX),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
495 ") and a test set ($$n$$=",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
496 nrow(testX),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
497 ") in a manner that preserved the ",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
498 "distribution of the classes.",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
499 sep = "")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
500 isZeroVar <- apply(trainX, 2,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
501 function(x) length(unique(x)) < 2)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
502 if(any(isZeroVar))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
503 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
504 trainX <- trainX[, !isZeroVar, drop = FALSE]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
505 testX <- testX[, !isZeroVar, drop = FALSE]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
506 }
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
507
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
508 } else {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
509 trainX <- rawData[, predictorNames]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
510 testX <- NULL
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
511 trainY <- rawData[, "outcome"]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
512 testY <- NULL
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
513 splitText <- "The entire data set was used as the training set."
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
514 }
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
515 trainDist <- table(trainY)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
516 nir <- max(trainDist)/length(trainY)*100
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
517 niClass <- names(trainDist)[which.max(trainDist)]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
518 nirText <- paste("The non--information rate is the accuracy that can be ",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
519 "achieved by predicting all samples using the most ",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
520 "dominant class. For these data, the rate is ",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
521 round(nir, 2), "\\\\% using the ``",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
522 niClass,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
523 "'' class.",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
524 sep = "")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
525
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
526 remove("rawData")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
527
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
528 if((!is.null(testX)) && (!is.null(testY))){
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
529 save(trainX,trainY,testX,testY,file="datasets.RData")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
530 } else {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
531 save(trainX,trainY,file="datasets.RData")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
532 }
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
533
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
534 @
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
535
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
536 \Sexpr{splitText}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
537
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
538 \Sexpr{nirText}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
539
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
540 The data set for model building consisted of \Sexpr{numSamples} samples and
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
541 \Sexpr{numPredictors} predictor variables. The breakdown of the
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
542 outcome data classes were: \Sexpr{classDistString1}.
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
543
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
544 <<nzv, eval= $NZVEVAL, results = $NZVRESULT, echo = $NZVECHO>>=
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
545 ## OPTION: other pre-processing steps can be used
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
546 ppSteps <- caret:::suggestions(modName)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
547
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
548 set.seed(2)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
549 if(ppSteps["nzv"])
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
550 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
551 nzv <- nearZeroVar(trainX)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
552 if(length(nzv) > 0)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
553 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
554 nzvVars <- names(trainX)[nzv]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
555 trainX <- trainX[, -nzv]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
556 nzvText <- paste("There were ",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
557 length(nzv),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
558 " predictors that were removed from train set due to",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
559 " severely unbalanced distributions that",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
560 " could negatively affect the model",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
561 ifelse(length(nzv) > 10,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
562 ".",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
563 paste(": ",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
564 listString(nzvVars),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
565 ".",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
566 sep = "")),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
567 sep = "")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
568 testX <- testX[, -nzv]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
569 } else nzvText <- ""
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
570 } else nzvText <- ""
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
571 @
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
572
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
573 \Sexpr{nzvText}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
574
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
575
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
576 <<corrFilter, eval = $CORRFILTEREVAL, results = $CORRFILTERRESULT, echo = $CORRFILTERECHO>>=
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
577 if(ppSteps["corr"])
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
578 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
579 ## OPTION:
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
580 corrThresh <- $THRESHHOLDCOR
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
581 highCorr <- findCorrelation(cor(trainX, use = "pairwise.complete.obs"),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
582 corrThresh)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
583 if(length(highCorr) > 0)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
584 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
585 corrVars <- names(trainX)[highCorr]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
586 trainX <- trainX[, -highCorr]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
587 corrText <- paste("There were ",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
588 length(highCorr),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
589 " predictors that were removed due to",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
590 " large between--predictor correlations that",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
591 " could negatively affect the model fit",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
592 ifelse(length(highCorr) > 10,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
593 ".",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
594 paste(": ",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
595 listString(highCorr),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
596 ".",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
597 sep = "")),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
598 " Removing these predictors forced",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
599 " all pair--wise correlations to be",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
600 " less than ",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
601 corrThresh,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
602 ".",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
603 sep = "")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
604 testX <- testX[, -highCorr]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
605 } else corrText <- "No correlation among data on given threshold"
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
606 }else corrText <- ""
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
607 @
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
608
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
609 \Sexpr{corrText}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
610
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
611 <<preProc, eval = $PREPROCEVAL, echo = $PREPROCECHO, results = $PREPROCRESULT>>=
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
612 ppMethods <- NULL
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
613 if(ppSteps["center"]) ppMethods <- c(ppMethods, "center")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
614 if(ppSteps["scale"]) ppMethods <- c(ppMethods, "scale")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
615 if(any(hasMissing) > 0) ppMethods <- c(ppMethods, "knnImpute")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
616 ##OPTION other methods, such as spatial sign, can be added to this list
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
617
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
618 if(length(ppMethods) > 0)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
619 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
620 ppInfo <- preProcess(trainX, method = ppMethods)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
621 trainX <- predict(ppInfo, trainX)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
622 if(pctTrain < 1) testX <- predict(ppInfo, testX)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
623 ppText <- paste("The following pre--processing methods were",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
624 " applied to the training",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
625 ifelse(pctTrain < 1, " and test", ""),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
626 " data: ",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
627 listString(ppMethods),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
628 ".",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
629 sep = "")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
630 ppText <- gsub("center", "mean centering", ppText)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
631 ppText <- gsub("scale", "scaling to unit variance", ppText)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
632 ppText <- gsub("knnImpute",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
633 paste(ppInfo$$k, "--nearest neighbor imputation", sep = ""),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
634 ppText)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
635 ppText <- gsub("spatialSign", "the spatial sign transformation", ppText)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
636 ppText <- gsub("pca", "principal component feature extraction", ppText)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
637 ppText <- gsub("ica", "independent component feature extraction", ppText)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
638 } else {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
639 ppInfo <- NULL
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
640 ppText <- ""
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
641 }
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
642
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
643 predictorNames <- names(trainX)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
644 if(nzvText != "" | corrText != "" | ppText != "")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
645 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
646 varText <- paste("After pre--processing, ",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
647 ncol(trainX),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
648 "predictors remained for modeling.")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
649 } else varText <- ""
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
650
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
651 @
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
652
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
653 \Sexpr{ppText}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
654 \Sexpr{varText}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
655
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
656 \clearpage
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
657
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
658 \section*{Model Building}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
659
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
660 <<setupWorkers, eval = TRUE, echo = $SETUPWORKERSECHO, results = $SETUPWORKERSRESULT>>=
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
661 numWorkers <- $NUMWORKERS
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
662 ##OPTION: turn up numWorkers to use MPI
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
663 if(numWorkers > 1)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
664 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
665 mpiCalcs <- function(X, FUN, ...)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
666 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
667 theDots <- list(...)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
668 parLapply(theDots$$cl, X, FUN)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
669 }
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
670
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
671 library(snow)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
672 cl <- makeCluster(numWorkers, "MPI")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
673 }
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
674 @
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
675
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
676 <<setupResampling, echo = $SETUPRESAMPLINGECHO, results = $SETUPRESAMPLINGRESULT>>=
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
677 ##OPTION: the resampling options can be changed. See
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
678 ## ?trainControl for details
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
679
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
680 resampName <- "$RESAMPNAME"
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
681 resampNumber <- $RESAMPLENUMBER
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
682 numRepeat <- $NUMREPEAT
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
683 resampP <- $RESAMPLENUMBERPERCENT
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
684
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
685 modelInfo <- modelLookup(modName)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
686
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
687 if(numClasses == 2)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
688 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
689 foo <- if(any(modelInfo$$probModel)) twoClassSummary else twoClassNoProbs
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
690 } else foo <- defaultSummary
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
691
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
692 set.seed(3)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
693 ctlObj <- trainControl(method = resampName,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
694 number = resampNumber,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
695 repeats = numRepeat,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
696 p = resampP,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
697 classProbs = any(modelInfo$$probModel),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
698 summaryFunction = foo)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
699
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
700
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
701 ##OPTION select other performance metrics as needed
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
702 optMetric <- if(numClasses == 2 & any(modelInfo$$probModel)) "ROC" else "Kappa"
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
703
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
704 if(numWorkers > 1)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
705 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
706 ctlObj$$workers <- numWorkers
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
707 ctlObj$$computeFunction <- mpiCalcs
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
708 ctlObj$$computeArgs <- list(cl = cl)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
709 }
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
710 @
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
711
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
712 <<setupGrid, results = $SETUPGRIDRESULT, echo = $SETUPGRIDECHO>>=
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
713 ##OPTION expand or contract these grids as needed (or
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
714 ## add more models
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
715
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
716 gridSize <- $SETUPGRIDSIZE
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
717
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
718 if(modName %in% c("svmPoly", "svmRadial", "svmLinear", "lvq", "ctree2", "ctree")) gridSize <- 5
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
719 if(modName %in% c("earth", "fda")) gridSize <- 7
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
720 if(modName %in% c("knn", "rocc", "glmboost", "rf", "nodeHarvest")) gridSize <- 10
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
721
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
722 if(modName %in% c("nb")) gridSize <- 2
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
723 if(modName %in% c("pam", "rpart")) gridSize <- 15
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
724 if(modName %in% c("pls")) gridSize <- min(20, ncol(trainX))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
725
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
726 if(modName == "gbm")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
727 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
728 tGrid <- expand.grid(.interaction.depth = -1 + (1:5)*2 ,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
729 .n.trees = (1:10)*20,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
730 .shrinkage = .1)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
731 }
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
732
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
733 if(modName == "nnet")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
734 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
735 tGrid <- expand.grid(.size = -1 + (1:5)*2 ,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
736 .decay = c(0, .001, .01, .1))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
737 }
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
738
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
739 if(modName == "ada")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
740 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
741 tGrid <- expand.grid(.maxdepth = 1, .iter = c(100,200,300,400), .nu = 1 )
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
742
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
743 }
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
744
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
745
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
746 @
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
747
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
748 <<fitModel, results = $FITMODELRESULT, echo = $FITMODELECHO, eval = $FITMODELEVAL>>=
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
749 ##OPTION alter as needed
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
750
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
751 set.seed(4)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
752 modelFit <- switch(modName,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
753 gbm =
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
754 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
755 mix <- sample(seq(along = trainY))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
756 train(
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
757 trainX[mix,], trainY[mix], modName,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
758 verbose = FALSE,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
759 bag.fraction = .9,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
760 metric = optMetric,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
761 trControl = ctlObj,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
762 tuneGrid = tGrid)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
763 },
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
764
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
765 multinom =
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
766 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
767 train(
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
768 trainX, trainY, modName,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
769 trace = FALSE,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
770 metric = optMetric,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
771 maxiter = 1000,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
772 MaxNWts = 5000,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
773 trControl = ctlObj,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
774 tuneLength = gridSize)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
775 },
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
776
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
777 nnet =
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
778 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
779 train(
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
780 trainX, trainY, modName,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
781 metric = optMetric,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
782 linout = FALSE,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
783 trace = FALSE,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
784 maxiter = 1000,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
785 MaxNWts = 5000,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
786 trControl = ctlObj,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
787 tuneGrid = tGrid)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
788
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
789 },
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
790
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
791 svmRadial =, svmPoly =, svmLinear =
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
792 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
793 train(
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
794 trainX, trainY, modName,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
795 metric = optMetric,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
796 scaled = TRUE,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
797 trControl = ctlObj,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
798 tuneLength = gridSize)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
799 },
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
800 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
801 train(trainX, trainY, modName,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
802 trControl = ctlObj,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
803 metric = optMetric,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
804 tuneLength = gridSize)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
805 })
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
806
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
807 @
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
808
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
809 <<modelDescr, echo = $MODELDESCRECHO, results = $MODELDESCRRESULT>>=
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
810 summaryText <- ""
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
811
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
812 resampleName <- switch(tolower(modelFit$$control$$method),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
813 boot = paste("the bootstrap (", length(modelFit$$control$$index), " reps)", sep = ""),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
814 boot632 = paste("the bootstrap 632 rule (", length(modelFit$$control$$index), " reps)", sep = ""),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
815 cv = paste("cross-validation (", modelFit$$control$$number, " fold)", sep = ""),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
816 repeatedcv = paste("cross-validation (", modelFit$$control$$number, " fold, repeated ",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
817 modelFit$$control$$repeats, " times)", sep = ""),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
818 lgocv = paste("repeated train/test splits (", length(modelFit$$control$$index), " reps, ",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
819 round(modelFit$$control$$p, 2), "$$\\%$$)", sep = ""))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
820
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
821 tuneVars <- latexTranslate(tolower(modelInfo$$label))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
822 tuneVars <- gsub("\\#", "the number of ", tuneVars, fixed = TRUE)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
823 if(ncol(modelFit$$bestTune) == 1 && colnames(modelFit$$bestTune) == ".parameter")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
824 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
825 summaryText <- paste(summaryText,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
826 "\n\n",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
827 "There are no tuning parameters associated with this model.",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
828 "To characterize the model performance on the training set,",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
829 resampleName,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
830 "was used.",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
831 "Table \\\\ref{T:resamps} and Figure \\\\ref{F:profile}",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
832 "show summaries of the resampling results. ")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
833
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
834 } else {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
835 summaryText <- paste("There",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
836 ifelse(nrow(modelInfo) > 1, "are", "is"),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
837 nrow(modelInfo),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
838 ifelse(nrow(modelInfo) > 1, "tuning parameters", "tuning parameter"),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
839 "associated with this model:",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
840 listString(tuneVars, period = TRUE))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
841
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
842
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
843
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
844 paramNames <- gsub(".", "", names(modelFit$$bestTune), fixed = TRUE)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
845 for(i in seq(along = paramNames))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
846 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
847 check <- modelInfo$$parameter %in% paramNames[i]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
848 if(any(check))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
849 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
850 paramNames[i] <- modelInfo$$label[which(check)]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
851 }
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
852 }
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
853
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
854 paramNames <- gsub("#", "the number of ", paramNames, fixed = TRUE)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
855 ## Check to see if there was only one combination fit
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
856 summaryText <- paste(summaryText,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
857 "To choose",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
858 ifelse(nrow(modelInfo) > 1,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
859 "appropriate values of the tuning parameters,",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
860 "an appropriate value of the tuning parameter,"),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
861 resampleName,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
862 "was used to generated a profile of performance across the",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
863 nrow(modelFit$$results),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
864 ifelse(nrow(modelInfo) > 1,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
865 "combinations of the tuning parameters.",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
866 "candidate values."),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
867
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
868 "Table \\\\ref{T:resamps} and Figure \\\\ref{F:profile} show",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
869 "summaries of the resampling profile. ", "The final model fitted to the entire training set was:",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
870 listString(paste(latexTranslate(tolower(paramNames)), "=", modelFit$$bestTune[1,]), period = TRUE))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
871
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
872 }
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
873 @
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
874
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
875 \Sexpr{summaryText}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
876
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
877 <<resampTable, echo = $RESAMPTABLEECHO, results = $RESAMPTABLERESULT>>=
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
878 tableData <- modelFit$$results
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
879
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
880 if(all(modelInfo$$parameter == "parameter") && resampName == "boot632")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
881 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
882 tableData <- tableData[,-1, drop = FALSE]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
883 colNums <- c( length(modelFit$$perfNames), length(modelFit$$perfNames), length(modelFit$$perfNames))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
884 colLabels <- c("Mean", "Standard Deviation","Apparant")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
885 constString <- ""
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
886 isConst <- NULL
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
887 } else if (all(modelInfo$$parameter == "parameter") && (resampName == "boot" | resampName == "cv" | resampName == "repeatedcv" )){
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
888 tableData <- tableData[,-1, drop = FALSE]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
889 colNums <- c(length(modelFit$$perfNames), length(modelFit$$perfNames))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
890 colLabels <- c("Mean", "Standard Deviation")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
891 constString <- ""
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
892 isConst <- NULL
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
893 } else if (all(modelInfo$$parameter == "parameter") && resampName == "LOOCV" ){
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
894 tableData <- tableData[,-1, drop = FALSE]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
895 colNums <- length(modelFit$$perfNames)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
896 colLabels <- c("Measures")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
897 constString <- ""
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
898 isConst <- NULL
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
899 } else {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
900 if (all(modelInfo$$parameter != "parameter") && resampName == "boot632" ){
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
901 isConst <- apply(tableData[, modelInfo$$parameter, drop = FALSE],
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
902 2,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
903 function(x) length(unique(x)) == 1)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
904
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
905 numParamInTable <- sum(!isConst)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
906
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
907 if(any(isConst))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
908 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
909 constParam <- modelInfo$$parameter[isConst]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
910 constValues <- format(tableData[, constParam, drop = FALSE], digits = 4)[1,,drop = FALSE]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
911 tableData <- tableData[, !(names(tableData) %in% constParam), drop = FALSE]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
912 constString <- paste("The tuning",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
913 ifelse(sum(isConst) > 1,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
914 "parmeters",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
915 "parameter"),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
916 listString(paste("``", names(constValues), "''", sep = "")),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
917 ifelse(sum(isConst) > 1,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
918 "were",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
919 "was"),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
920 "held constant at",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
921 ifelse(sum(isConst) > 1,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
922 "a value of",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
923 "values of"),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
924 listString(constValues[1,]))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
925
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
926 } else constString <- ""
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
927
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
928 cn <- colnames(tableData)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
929 for(i in seq(along = cn))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
930 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
931 check <- modelInfo$$parameter %in% cn[i]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
932 if(any(check))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
933 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
934 cn[i] <- modelInfo$$label[which(check)]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
935 }
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
936 }
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
937 colnames(tableData) <- cn
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
938
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
939 colNums <- c(numParamInTable,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
940 length(modelFit$$perfNames),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
941 length(modelFit$$perfNames),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
942 length(modelFit$$perfNames))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
943 colLabels <- c("", "Mean", "Standard Deviation", "Apparant")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
944
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
945 }else if (all(modelInfo$$parameter != "parameter") && (resampName == "boot" | resampName == "repeatedcv" | resampName == "cv") ){
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
946 isConst <- apply(tableData[, modelInfo$$parameter, drop = FALSE],
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
947 2,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
948 function(x) length(unique(x)) == 1)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
949
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
950 numParamInTable <- sum(!isConst)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
951
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
952 if(any(isConst))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
953 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
954 constParam <- modelInfo$$parameter[isConst]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
955 constValues <- format(tableData[, constParam, drop = FALSE], digits = 4)[1,,drop = FALSE]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
956 tableData <- tableData[, !(names(tableData) %in% constParam), drop = FALSE]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
957 constString <- paste("The tuning",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
958 ifelse(sum(isConst) > 1,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
959 "parmeters",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
960 "parameter"),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
961 listString(paste("``", names(constValues), "''", sep = "")),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
962 ifelse(sum(isConst) > 1,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
963 "were",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
964 "was"),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
965 "held constant at",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
966 ifelse(sum(isConst) > 1,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
967 "a value of",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
968 "values of"),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
969 listString(constValues[1,]))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
970
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
971 } else constString <- ""
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
972
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
973 cn <- colnames(tableData)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
974 for(i in seq(along = cn))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
975 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
976 check <- modelInfo$$parameter %in% cn[i]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
977 if(any(check))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
978 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
979 cn[i] <- modelInfo$$label[which(check)]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
980 }
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
981 }
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
982 colnames(tableData) <- cn
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
983
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
984 colNums <- c(numParamInTable,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
985 length(modelFit$$perfNames),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
986 length(modelFit$$perfNames))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
987 colLabels <- c("", "Mean", "Standard Deviation")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
988
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
989 }
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
990 else if (all(modelInfo$$parameter != "parameter") && resampName == "LOOCV"){
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
991 isConst <- apply(tableData[, modelInfo$$parameter, drop = FALSE],
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
992 2,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
993 function(x) length(unique(x)) == 1)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
994
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
995 numParamInTable <- sum(!isConst)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
996
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
997 if(any(isConst))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
998 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
999 constParam <- modelInfo$$parameter[isConst]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1000 constValues <- format(tableData[, constParam, drop = FALSE], digits = 4)[1,,drop = FALSE]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1001 tableData <- tableData[, !(names(tableData) %in% constParam), drop = FALSE]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1002 constString <- paste("The tuning",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1003 ifelse(sum(isConst) > 1,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1004 "parmeters",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1005 "parameter"),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1006 listString(paste("``", names(constValues), "''", sep = "")),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1007 ifelse(sum(isConst) > 1,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1008 "were",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1009 "was"),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1010 "held constant at",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1011 ifelse(sum(isConst) > 1,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1012 "a value of",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1013 "values of"),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1014 listString(constValues[1,]))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1015
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1016 } else constString <- ""
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1017
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1018 cn <- colnames(tableData)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1019 for(i in seq(along = cn))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1020 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1021 check <- modelInfo$$parameter %in% cn[i]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1022 if(any(check))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1023 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1024 cn[i] <- modelInfo$$label[which(check)]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1025 }
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1026 }
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1027 colnames(tableData) <- cn
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1028
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1029 colNums <- c(numParamInTable,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1030 length(modelFit$$perfNames))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1031 colLabels <- c("", "Measures")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1032
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1033 }
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1034
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1035 }
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1036
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1037
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1038
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1039 colnames(tableData) <- gsub("SD$$", "", colnames(tableData))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1040 colnames(tableData) <- gsub("Apparent$$", "", colnames(tableData))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1041 colnames(tableData) <- latexTranslate(colnames(tableData))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1042 rownames(tableData) <- latexTranslate(rownames(tableData))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1043
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1044 latex(tableData,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1045 rowname = NULL,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1046 file = "",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1047 cgroup = colLabels,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1048 n.cgroup = colNums,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1049 where = "h!",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1050 digits = 4,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1051 longtable = nrow(tableData) > 30,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1052 caption = paste(resampleName, "results from the model fit.", constString),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1053 label = "T:resamps")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1054 @
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1055
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1056 \setkeys{Gin}{ width = 0.9\textwidth}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1057 \begin{figure}[b]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1058 \begin{center}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1059
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1060 <<profilePlot, echo = $PROFILEPLOTECHO, fig = $PROFILEPLOTFIG, width = 8, height = 6>>=
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1061 trellis.par.set(caretTheme(), warn = TRUE)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1062 if(all(modelInfo$$parameter == "parameter") | all(isConst) | modName == "nb")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1063 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1064 resultsPlot <- resampleHist(modelFit)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1065 plotCaption <- paste("Distributions of model performance from the ",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1066 "training set estimated using ",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1067 resampleName)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1068 } else {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1069 if(modName %in% c("svmPoly", "svmRadial", "svmLinear"))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1070 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1071 resultsPlot <- plot(modelFit,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1072 metric = optMetric,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1073 xTrans = function(x) log10(x))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1074 resultsPlot <- update(resultsPlot,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1075 type = c("g", "p", "l"),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1076 ylab = paste(optMetric, " (", resampleName, ")", sep = ""))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1077
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1078 } else {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1079 resultsPlot <- plot(modelFit,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1080 metric = optMetric)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1081 resultsPlot <- update(resultsPlot,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1082 type = c("g", "p", "l"),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1083 ylab = paste(optMetric, " (", resampleName, ")", sep = ""))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1084 }
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1085 plotCaption <- paste("A plot of the estimates of the",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1086 optMetric,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1087 "values calculated using",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1088 resampleName)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1089 }
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1090 print(resultsPlot)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1091 @
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1092 \caption[Performance Plot]{\Sexpr{plotCaption}.}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1093 \label{F:profile}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1094 \end{center}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1095 \end{figure}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1096
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1097
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1098 <<stopWorkers, echo = $STOPWORKERSECHO, results = $STOPWORKERSRESULT>>=
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1099 if(numWorkers > 1) stopCluster(cl)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1100 @
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1101
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1102 <<testPred, results = $TESTPREDRESULT, echo = $TESTPREDECHO>>=
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1103 if(pctTrain < 1)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1104 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1105 cat("\\clearpage\n\\section*{Test Set Results}\n\n")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1106 classPred <- predict(modelFit, testX)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1107 cm <- confusionMatrix(classPred, testY)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1108 values <- cm$$overall[c("Accuracy", "Kappa", "AccuracyPValue", "McnemarPValue")]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1109
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1110 values <- values[!is.na(values) & !is.nan(values)]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1111 values <- c(format(values[1:2], digits = 3),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1112 format.pval(values[-(1:2)], digits = 5))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1113 nms <- c("the overall accuracy", "the Kappa statistic",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1114 "the $$p$$--value that accuracy is greater than the no--information rate",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1115 "the $$p$$--value of concordance from McNemar's test")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1116 nms <- nms[seq(along = values)]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1117 names(values) <- nms
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1118
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1119 if(any(modelInfo$$probModel))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1120 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1121 classProbs <- extractProb(list(fit = modelFit),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1122 testX = testX,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1123 testY = testY)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1124 classProbs <- subset(classProbs, dataType == "Test")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1125 if(numClasses == 2)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1126 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1127 tmp <- twoClassSummary(classProbs, lev = levels(classProbs$$obs))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1128 tmp <- c(format(tmp, digits = 3))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1129 names(tmp) <- c("the sensitivity", "the specificity",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1130 "the area under the ROC curve")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1131 values <- c(values, tmp)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1132
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1133 }
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1134 probPlot <- plotClassProbs(classProbs)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1135 }
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1136 testString <- paste("Based on the test set of",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1137 nrow(testX),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1138 "samples,",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1139 listString(paste(names(values), "was", values), period = TRUE),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1140 "The confusion matrix for the test set is shown in Table",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1141 "\\\\ref{T:cm}.")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1142 testString <- paste(testString,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1143 " Using ", resampleName,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1144 ", the training set estimates were ",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1145 resampleStats(modelFit),
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1146 ".",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1147 sep = "")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1148
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1149 if(any(modelInfo$$probModel)) testString <- paste(testString,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1150 "Histograms of the class probabilities",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1151 "for the test set samples are shown in",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1152 "Figure \\\\ref{F:probs}",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1153 ifelse(numClasses == 2,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1154 " and the test set ROC curve is in Figure \\\\ref{F:roc}.",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1155 "."))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1156
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1157
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1158
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1159 latex(cm$$table,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1160 title = "",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1161 file = "",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1162 where = "h",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1163 cgroup = "Observed Values",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1164 n.cgroup = numClasses,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1165 caption = "The confusion matrix for the test set",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1166 label = "T:cm")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1167
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1168 } else testString <- ""
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1169 @
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1170 \Sexpr{testString}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1171
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1172
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1173 <<classProbsTex, results = $CLASSPROBSTEXRESULT, echo = $CLASSPROBSTEXECHO>>=
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1174 if(any(modelInfo$probModel) && pctTrain < 1 ) {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1175 cat(
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1176 paste("\\begin{figure}[p]\n",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1177 "\\begin{center}\n",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1178 "\\includegraphics{classProbs}",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1179 "\\caption[PCA Plot]{Class probabilities",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1180 "for the test set. Each panel contains ",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1181 "separate classes}\n",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1182 "\\label{F:probs}\n",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1183 "\\end{center}\n",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1184 "\\end{figure}"))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1185 }
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1186 if(any(modelInfo$$probModel) & numClasses == 2 & pctTrain < 1 )
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1187 {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1188 cat(
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1189 paste("\\begin{figure}[p]\n",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1190 "\\begin{center}\n",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1191 "\\includegraphics[clip, width = .8\\textwidth]{roc}",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1192 "\\caption[ROC Plot]{ROC Curve",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1193 "for the test set.}\n",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1194 "\\label{F:roc}\n",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1195 "\\end{center}\n",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1196 "\\end{figure}"))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1197 } else {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1198 cat (paste(""))
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1199 }
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1200
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1201 @
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1202 <<classProbsTex, results = $CLASSPROBSTEXRESULT1, echo = $CLASSPROBSTEXECHO1 >>=
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1203 if(any(modelInfo$probModel) && pctTrain < 1) {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1204 pdf("classProbs.pdf", height = 7, width = 7)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1205 trellis.par.set(caretTheme(), warn = FALSE)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1206 print(probPlot)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1207 dev.off()
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1208 }
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1209 if(any(modelInfo$probModel) & numClasses == 2 & pctTrain < 1) {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1210 resPonse<-testY
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1211 preDictor<-classProbs[, levels(trainY)[1]]
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1212 pdf("roc.pdf", height = 8, width = 8)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1213 # from pROC example at http://web.expasy.org/pROC/screenshots.htm
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1214 plot.roc(resPonse, preDictor, # data
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1215 percent=TRUE, # show all values in percent
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1216 partial.auc=c(100, 90), partial.auc.correct=TRUE, # define a partial AUC (pAUC)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1217 print.auc=TRUE, #display pAUC value on the plot with following options:
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1218 print.auc.pattern="Corrected pAUC (100-90%% SP):\n%.1f%%", print.auc.col="#1c61b6",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1219 auc.polygon=TRUE, auc.polygon.col="#1c61b6", # show pAUC as a polygon
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1220 max.auc.polygon=TRUE, max.auc.polygon.col="#1c61b622", # also show the 100% polygon
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1221 main="Partial AUC (pAUC)")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1222 plot.roc(resPonse, preDictor,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1223 percent=TRUE, add=TRUE, type="n", # add to plot, but don't re-add the ROC itself (useless)
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1224 partial.auc=c(100, 90), partial.auc.correct=TRUE,
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1225 partial.auc.focus="se", # focus pAUC on the sensitivity
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1226 print.auc=TRUE, print.auc.pattern="Corrected pAUC (100-90%% SE):\n%.1f%%", print.auc.col="#008600",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1227 print.auc.y=40, # do not print auc over the previous one
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1228 auc.polygon=TRUE, auc.polygon.col="#008600",
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1229 max.auc.polygon=TRUE, max.auc.polygon.col="#00860022")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1230 dev.off()
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1231 } else {
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1232 cat("")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1233 }
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1234
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1235 @
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1236
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1237 \section*{Versions}
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1238
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1239 <<versions, echo = FALSE, results = tex>>=
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1240 toLatex(sessionInfo())
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1241
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1242 @
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1243
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1244 <<save-data, echo = $SAVEDATAECHO, results = $SAVEDATARESULT>>=
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1245 ## change this to the name of modName....
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1246 Fit<-modelFit
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1247 save(Fit,file="$METHOD-Fit.RData")
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1248 @
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1249 The model was built using $METHOD and is saved as $METHOD Model for reuse. This contains the variable Fit.
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1250
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1251 \end{document}'''
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1252
4497ac070d7f Uploaded
deepakjadmin
parents:
diff changeset
1253 return template4Rnw