### R code from vignette source 'chemometrics-vignette.rnw' ################################################### ### code chunk number 1: chemometrics-vignette.rnw:217-220 ################################################### ## set the prompt to "> " and the continuation to " " options(prompt="> ", continue=" ") options(width=70) ################################################### ### code chunk number 2: chemometrics-vignette.rnw:258-259 ################################################### library(chemometrics) ################################################### ### code chunk number 3: chemometrics-vignette.rnw:332-334 ################################################### options(prompt="> ", continue=" ") options(width=70) ################################################### ### code chunk number 4: chemometrics-vignette.rnw:428-430 ################################################### data(wine,package="gclus") X <- scale(wine[,2:14]) # first column: wine type ################################################### ### code chunk number 5: chemometrics-vignette.rnw:440-441 (eval = FALSE) ################################################### ## res <- pcaCV(X) ################################################### ### code chunk number 6: 01-pcaCV ################################################### par(mfrow=c(1,2)) par(mar=c(5, 4, 1, 1)) pcaCV(X) par(mar=c(7.5, 4, 1, 1)) pcaVarexpl(X, a=5, las=2) ################################################### ### code chunk number 7: chemometrics-vignette.rnw:477-478 ################################################### X_nipals <- nipals(X, a=5) ################################################### ### code chunk number 8: chemometrics-vignette.rnw:535-536 ################################################### X_nipals <- nipals(X, a=5, it=160) ################################################### ### code chunk number 9: chemometrics-vignette.rnw:559-560 (eval = FALSE) ################################################### ## res <- pcaVarexpl(X, a=5) ################################################### ### code chunk number 10: chemometrics-vignette.rnw:613-615 ################################################### X_nipals <- list(scores=X_nipals$T, loadings=X_nipals$P, sdev=apply(X_nipals$T, 2, sd)) ################################################### ### code chunk number 11: chemometrics-vignette.rnw:617-618 (eval = FALSE) ################################################### ## res <- pcaDiagplot(X, X.pca=X_nipals, a=5) ################################################### ### code chunk number 12: 03-pcaDiagplot-nipals ################################################### par(mar=c(5,4,1,1)) res <- pcaDiagplot(X, X.pca=X_nipals, a=5) ################################################### ### code chunk number 13: chemometrics-vignette.rnw:636-641 (eval = FALSE) ################################################### ## X.rob <- scale(wine[,2:14], center = apply(wine[,2:14], 2, median), ## scale = apply(wine[,2:14], 2, mad)) ## library(pcaPP) # robust PCA based on projection pursuit ## X.grid <- PCAgrid(X.rob,k=5,scale=mad) ## res1 <- pcaDiagplot(X.rob,X.grid,a=5) ################################################### ### code chunk number 14: 04-pcaDiagplot-robust ################################################### X.rob <- scale(wine[,2:14], center = apply(wine[,2:14], 2, median), scale = apply(wine[,2:14], 2, mad)) library(pcaPP) # robust PCA based on projection pursuit X.grid <- PCAgrid(X.rob,k=5,scale=mad) par(mar=c(5,4,1,1)) res1 <- pcaDiagplot(X.rob,X.grid,a=5) ################################################### ### code chunk number 15: chemometrics-vignette.rnw:663-680 ################################################### # diagnostics with robust PCA orth1 <- dimnames(X)[[1]][(res1$ODist > res1$critOD) * (res1$SDist < res1$critSD) == 1] # orthogonal outliers good1 <- dimnames(X)[[1]][(res1$ODist < res1$critOD) * (res1$SDist > res1$critSD) == 1] # good leverage points bad1 <- dimnames(X)[[1]][(res1$ODist > res1$critOD) * (res1$SDist > res1$critSD) == 1] # bad leverage points # diagnostics with NIPALS orth2 <- dimnames(X)[[1]][(res$ODist > res$critOD) * (res$SDist < res$critSD) == 1] # orthogonal outliers good2 <- dimnames(X)[[1]][(res$ODist < res$critOD) * (res$SDist > res$critSD) == 1] # good leverage points bad2 <- dimnames(X)[[1]][(res$ODist > res$critOD) * (res$SDist > res$critSD) == 1] # bad leverage points # print: cat("DIAGNOSTICS WITH NIPALS:", "\n", "orthogonal outliers: ", orth2, "\n", "good leverage points:", good2, "\n", "bad leverage points: ", bad2, "\n", sep=" ") cat("DIAGNOSTICS WITH ROBUST PCA:", "\n", "orthogonal outliers: ", orth1, "\n", "good leverage points:", good1, "\n", "bad leverage points: ", bad1, "\n", sep=" ") ################################################### ### code chunk number 16: chemometrics-vignette.rnw:691-693 ################################################### options(prompt="> ", continue=" ") options(width=70) ################################################### ### code chunk number 17: chemometrics-vignette.rnw:742-747 ################################################### data(NIR) X <- NIR$xNIR Y <- NIR$yGlcEtOH namesX <- names(X) attach(X) ################################################### ### code chunk number 18: chemometrics-vignette.rnw:749-754 (eval = FALSE) ################################################### ## data(NIR) ## X <- NIR$xNIR ## Y <- NIR$yGlcEtOH ## namesX <- names(X) ## attach(X) ################################################### ### code chunk number 19: chemometrics-vignette.rnw:821-823 ################################################### options(prompt="> ", continue=" ") options(width=70) ################################################### ### code chunk number 20: chemometrics-vignette.rnw:864-866 ################################################### y <- Y[,1] NIR.Glc <- data.frame(X=X, y=y) ################################################### ### code chunk number 21: chemometrics-vignette.rnw:868-869 (eval = FALSE) ################################################### ## res.step <- stepwise(y~., data=NIR.Glc) ################################################### ### code chunk number 22: chemometrics-vignette.rnw:878-882 (eval = FALSE) ################################################### ## steps <- length(res.step$usedTime) ## seconds <- res.step$usedTime[steps] ## varnbr <- sum(finalvars <- res.step$models[steps,]) ## varnames <- namesX[as.logical(finalvars)] ################################################### ### code chunk number 23: chemometrics-vignette.rnw:885-890 ################################################### steps <- 22 seconds <- 15 varnbr <- 16 varnames <- c('X1115.0','X1185.0','X1215.0','X1385.0','X1420.0','X1500.0','X1565.0','X1585.0', 'X1690.0','X1715.0','X1720.0','X1815.0','X1995.0','X2070.0','X2100.0','X2195.0') ################################################### ### code chunk number 24: chemometrics-vignette.rnw:893-896 ################################################### cat(" steps needed: ", steps, "\n", "seconds needed: ", seconds, "\n", "number of variables: ", varnbr, "\n", sep=" ") ################################################### ### code chunk number 25: 01-BIC (eval = FALSE) ################################################### ## # produce Figure 5 ## modelsize <- apply(res.step$models, 1, sum) ## plot(modelsize, res.step$bic, type="b", pch=20, ## main="BIC during stepwise regression", ## xlab="model size", ylab="BIC value") ################################################### ### code chunk number 26: 01-BIC ################################################### # produce Figure 4.1 modelsize <- c(1,2,3,4,5,6,7,8,9,10,11,10,11,12,11,12,13,14,15,16,15,16) res.step.bic <- c(1292.227,1231.984,1216.206,1182.616,1176.313,1172.719,1136.370,1075.659, 1064.525,1060.948,1057.010,1053.532,1050.034,1047.147,1042.120,1039.618, 1032.290,1023.446,1022.557,1022.301,1018.909,1017.506) plot(modelsize, res.step.bic, type="b", pch=20, main="BIC during stepwise regression", xlab="model size", ylab="BIC value") ################################################### ### code chunk number 27: chemometrics-vignette.rnw:937-940 ################################################### finalmodel <- as.formula(paste("y~", paste(varnames, collapse = "+"), sep = "")) res.stepcv <- lmCV(finalmodel, data=NIR.Glc, repl=100, segments=4) ################################################### ### code chunk number 28: 02-lmCV ################################################### par(mfrow=c(1,2)) plot(rep(y,100), res.stepcv$predicted, pch=".", main="Predictions from repeated CV", xlab="Measured y", ylab="Predicted y") abline(coef=c(0,1)) points(y, apply(res.stepcv$predicted, 1, mean), pch=20) plot(res.stepcv$SEP, main="Standard Error of Prediction", xlab="Number of repetitions", ylab="SEP") abline(h=res.stepcv$SEPm) abline(h=median(res.stepcv$SEP), lty=2) ################################################### ### code chunk number 29: chemometrics-vignette.rnw:976-979 ################################################### cat(" SEP mean: ", round(res.stepcv$SEPm, 3), "\n", "SEP median: ", round(median(res.stepcv$SEP), 3), "\n", "SEP standard deviation: ", round(sd(res.stepcv$SEP), 3), "\n", sep=" ") ################################################### ### code chunk number 30: chemometrics-vignette.rnw:997-999 ################################################### options(prompt="> ", continue=" ") options(width=70) ################################################### ### code chunk number 31: chemometrics-vignette.rnw:1057-1059 (eval = FALSE) ################################################### ## res.pcr <- mvr_dcv(y~., data=NIR.Glc, ncomp=40, method = "svdpc", ## repl = 100) ################################################### ### code chunk number 32: 03-comppcr (eval = FALSE) ################################################### ## plotcompmvr(res.pcr) ################################################### ### code chunk number 33: 04-seppcr (eval = FALSE) ################################################### ## optpcr <- res.pcr$afinal ## plotSEPmvr(res.pcr, optcomp=optpcr, y=y, X=X, method="svdpc") ################################################### ### code chunk number 34: chemometrics-vignette.rnw:1132-1133 ################################################### optpcr <- 31 ################################################### ### code chunk number 35: 05-predpcr (eval = FALSE) ################################################### ## plotpredmvr(res.pcr, optcomp=optpcr, y=y, X=X, method="svdpc") ################################################### ### code chunk number 36: 06-respcr (eval = FALSE) ################################################### ## plotresmvr(res.pcr, optcomp=optpcr, y=y, X=X, method="svdpc") ################################################### ### code chunk number 37: chemometrics-vignette.rnw:1182-1187 ################################################### #SEP <- apply(res.pcr$resopt[,1,], 2, sd) cat(" optimal number of PCs: ", optpcr, "\n", "SEP mean: 7.433 \n", #round(mean(SEP), 4) "SEP median: 7.449 \n", #round(median(SEP), 4) "SEP standard deviation: 0.373 \n", sep=" ") # round(sd(SEP), 4) ################################################### ### code chunk number 38: chemometrics-vignette.rnw:1205-1207 ################################################### options(prompt="> ", continue=" ") options(width=70) ################################################### ### code chunk number 39: chemometrics-vignette.rnw:1462-1464 (eval = FALSE) ################################################### ## res.pls <- mvr_dcv(y~., data=NIR.Glc, ncomp=40, method = "simpls", ## repl = 100) ################################################### ### code chunk number 40: 07-comppls (eval = FALSE) ################################################### ## plotcompmvr(res.pls) ################################################### ### code chunk number 41: 08-seppls (eval = FALSE) ################################################### ## optpls <- res.pls$afinal ## plotSEPmvr(res.pls, optcomp=optpls, y=y, X=X, method="simpls") ################################################### ### code chunk number 42: chemometrics-vignette.rnw:1479-1480 ################################################### optpls <- 14 ################################################### ### code chunk number 43: 09-predpls (eval = FALSE) ################################################### ## plotpredmvr(res.pls, optcomp=optpls, y=y, X=X , method="simpls") ################################################### ### code chunk number 44: 10-respls (eval = FALSE) ################################################### ## plotresmvr(res.pls, optcomp=optpls, y=y, X=X, method="simpls") ################################################### ### code chunk number 45: chemometrics-vignette.rnw:1542-1547 ################################################### #SEP <- apply(res.pls$resopt[,1,], 2, sd) cat(" optimal number of PCs: ", optpls, "\n", "SEP mean: 6.489 \n", #round(mean(SEP), 4) "SEP median: 6.491 \n", #round(median(SEP), 4) "SEP standard deviation: 0.408 \n", sep=" ") #round(sd(SEP), 4) ################################################### ### code chunk number 46: chemometrics-vignette.rnw:1561-1562 (eval = FALSE) ################################################### ## res.pls1nipals <- pls1_nipals(X, y, a = res.pls$afinal) ################################################### ### code chunk number 47: chemometrics-vignette.rnw:1569-1571 (eval = FALSE) ################################################### ## Ysc <- scale(Y) ## res.pls2nipals <- pls2_nipals(X, Ysc, a = 9) ################################################### ### code chunk number 48: chemometrics-vignette.rnw:1576-1578 (eval = FALSE) ################################################### ## a <- min(dim(X)[1], dim(X)[2], dim(Y)[2]) ## res.plseigen <- pls_eigen(X, Ysc, a = a) ################################################### ### code chunk number 49: chemometrics-vignette.rnw:1594-1596 ################################################### options(prompt="> ", continue=" ") options(width=70) ################################################### ### code chunk number 50: 11-prmcv (eval = FALSE) ################################################### ## res.prmcv <- prm_cv(X, y, a = 40, opt = "median") ################################################### ### code chunk number 51: chemometrics-vignette.rnw:1775-1781 ################################################### oc <- 20 cat(" optimal number of PCs: 20 \n", #oc <- res.prmcv$optcomp " classic 20% trimmed \n", "SEP mean: 5.454 5.094 \n", #round(mean(res.prmcv$SEPj[,oc]), 4), round(mean(res.prmcv$SEPtrimj[,oc]), 4) "SEP median: 5.488 5.070 \n", # round(median(res.prmcv$SEPj[,oc]), 4), round(median(res.prmcv$SEPtrimj[,oc]), 4) "SEP standard deviation: 0.627 1.289 \n", sep=" ") #round(sd(res.prmcv$SEPj[,oc]), 4), round(sd(res.prmcv$SEPtrimj[,oc]), 4) ################################################### ### code chunk number 52: 12-plotprm (eval = FALSE) ################################################### ## plotprm(res.prmcv, y) ################################################### ### code chunk number 53: chemometrics-vignette.rnw:1807-1808 (eval = FALSE) ################################################### ## prm(X, y, a = res.prmcv$optcomp, opt = "l1m", usesvd = TRUE) ################################################### ### code chunk number 54: 11a-prmdcv (eval = FALSE) ################################################### ## res.prmdcv <- prm_dcv(X, y, a = 40, opt = "median",repl=20) ################################################### ### code chunk number 55: 07a-compprmdcv (eval = FALSE) ################################################### ## plotcompprm(res.prmdcv) ################################################### ### code chunk number 56: 08a-sepprmdcv (eval = FALSE) ################################################### ## plotSEPprm(res.prmdcv,res.prmdcv$afinal,y,X) ################################################### ### code chunk number 57: 08b-predprmdcv (eval = FALSE) ################################################### ## plotpredprm(res.prmdcv,res.prmdcv$afinal,y,X) ################################################### ### code chunk number 58: 08c-resprmdcv (eval = FALSE) ################################################### ## plotresprm(res.prmdcv,res.prmdcv$afinal,y,X) ################################################### ### code chunk number 59: chemometrics-vignette.rnw:1908-1910 ################################################### options(prompt="> ", continue=" ") options(width=70) ################################################### ### code chunk number 60: 13-plotridge ################################################### res.plotridge <- plotRidge(y~., data=NIR.Glc, lambda=seq(0.5,10,by=0.05)) ################################################### ### code chunk number 61: 14-ridgecv (eval = FALSE) ################################################### ## res.ridge <- ridgeCV(y~., data=NIR.Glc, lambdaopt=res.plotridge$lambdaopt, ## repl=100) ################################################### ### code chunk number 62: chemometrics-vignette.rnw:2055-2057 ################################################### options(prompt="> ", continue=" ") options(width=70) ################################################### ### code chunk number 63: 15-lassocv (eval = FALSE) ################################################### ## res.lasso <- lassoCV(y~., data = NIR.Glc, fraction = seq(0, 1, by = 0.05), ## legpos="top") ################################################### ### code chunk number 64: 16-lassocoef (eval = FALSE) ################################################### ## res.lassocoef <- lassocoef(y~., data=NIR.Glc, sopt=res.lasso$sopt) ################################################### ### code chunk number 65: chemometrics-vignette.rnw:2175-2177 ################################################### options(prompt="> ", continue=" ") options(width=70) ################################################### ### code chunk number 66: chemometrics-vignette.rnw:2200-2225 ################################################### SEP.stepwise <- 4.61 #res.stepcv$SEPm SEP20.stepwise <- 4.40 #mean(apply(resid.trim.stepwise, 2, sd)) SEP.pcr <- 7.43 #mean(apply(res.pcr$resopt[,1,], 2, sd)) SEP20.pcr <- 7.37 #mean(apply(resid.trim.pcr, 2, sd)) SEP.pls <- 6.49 #mean(apply(res.pls$resopt[,1,], 2, sd)) SEP20.pls <- 6.52 #mean(apply(resid.trim.pls, 2, sd)) SEP.prm <- 5.40 #res.prmcv$SEPall[res.prmcv$optcomp] SEP20.prm <- 4.95 #res.prmcv$SEPop SEP.prmdcv <- 5.95 #res.prmdcv$SEPall[res.prmcv$optcomp] SEP20.prmdcv <- 5.86 #res.prmcdv$SEPop SEP.ridge <- 5.37 #res.ridge$SEPm SEP20.ridge <- 5.32 #mean(apply(resid.trim.ridge, 2, sd)) SEP.lasso <- 6.48 #res.lasso$SEP[(res.lasso$fraction==res.lasso$sopt)] SEP20.lasso <- 5.89 #compute trimmed SEP within lassoCV function (not implemented) cat(" PREDICTION PERFORMANCE", "\n Method SEP SEP20% Nr. of Variables / Components ", "\n ", "\n stepwise ", round(SEP.stepwise, 2), " ", round(SEP20.stepwise, 2), " ", varnbr, " variables", "\n PCR ", round(SEP.pcr, 2), " ", round(SEP20.pcr, 2), " ", optpcr, " components", "\n PLS ", round(SEP.pls, 2), " ", round(SEP20.pls, 2), " ", optpls, " components", "\n PRM-CV ", round(SEP.prm, 2), " ", round(SEP20.prm, 2), " ", oc, " components", "\n PRM-DCV ", round(SEP.prmdcv, 2), " ", round(SEP20.prmdcv, 2), " ", oc, " components", "\n Ridge ", round(SEP.ridge, 2), " ", round(SEP20.ridge, 2), " ", dim(X)[2], " variables", "\n Lasso ", round(SEP.lasso, 2), " ", round(SEP20.lasso, 2), " 110 variables \n", #res.lassocoef$numb.nonzero sep="") ################################################### ### code chunk number 67: chemometrics-vignette.rnw:2232-2241 ################################################### cat(" COMPUTATION TIMES \n", "Method Algorithm Time needed \n \n", "stepwise 100 x RCV 0min 44sec \n", "PCR 100 x RDCV 2min 56sec \n", "PLS 100 x RDCV 2min 27sec \n", "PRM single CV 4min 15sec \n", "PRM 20 x RDCV 241min 15sec \n", "Ridge 100 x RCV 1min 40sec \n", "Lasso single CV 0min 33sec \n") ################################################### ### code chunk number 68: chemometrics-vignette.rnw:2258-2260 ################################################### options(prompt="> ", continue=" ") options(width=70) ################################################### ### code chunk number 69: chemometrics-vignette.rnw:2332-2338 ################################################### library(gclus) data(wine) X <- data.frame(scale(wine[,2:14])) # data without class information grp <- as.factor(wine[,1]) # class information wine <- data.frame(X=X, grp=grp) train <- sample(1:length(grp), round(2/3*length(grp))) ################################################### ### code chunk number 70: chemometrics-vignette.rnw:2348-2350 ################################################### options(prompt="> ", continue=" ") options(width=70) ################################################### ### code chunk number 71: 01-knneval ################################################### knneval <- knnEval(X, grp, train, knnvec=seq(1,30), legpos="topright") ################################################### ### code chunk number 72: chemometrics-vignette.rnw:2393-2398 ################################################### indmin <- which.min(knneval$cvMean) thresh <- knneval$cvMean[indmin] + knneval$cvSe[indmin] fvec <- (knneval$cvMean < thresh) indopt <- min((1:indmin)[fvec[1:indmin]]) opt <- knneval$knnvec[indopt] ################################################### ### code chunk number 73: chemometrics-vignette.rnw:2408-2411 ################################################### cat(" optimal number of nearest neighbors:", "k =", opt, "\n", "test error at optimum: ", round(knneval$testerr[indopt],4), "\n", "CV error threshold: ", round(thresh,4), "\n", sep=" ") ################################################### ### code chunk number 74: 02-repknn (eval = FALSE) ################################################### ## res <- array(dim=c(100,6)) ## colnames(res) <- c("k","trainerr","testerr","cvmean","cvse","threshold") ## tt <- proc.time() ## for (i in 1:100) { ## train <- sample(1:length(grp), round(2/3*length(grp))) ## knneval <- knnEval(X, grp, train, knnvec=seq(1,30), plotit=FALSE) ## indmin <- which.min(knneval$cvMean) ## res[i,6] <- knneval$cvMean[indmin] + knneval$cvSe[indmin] ## fvec <- (knneval$cvMean < res[i,6]) ## indopt <- min((1:indmin)[fvec[1:indmin]]) ## res[i,1] <- knneval$knnvec[indopt] ## res[i,2] <- knneval$trainerr[indopt] ## res[i,3] <- knneval$testerr[indopt] ## res[i,4] <- knneval$cvMean[indopt] ## res[i,5] <- knneval$cvSe[indopt] ## } ## tt <- proc.time() - tt ## plot(table(res[,1]), xlab="Number of Nearest Neighbors", ylab="Frequency") ################################################### ### code chunk number 75: chemometrics-vignette.rnw:2456-2464 ################################################### mins <- 263.52/60; leftsec <- (mins - floor(mins))*60 cat(" median sd", "\n", " training error 0.0169 0.0138 \n", #round(median(res[,2], na.rm=TRUE),4), round(sd(res[,2], na.rm=TRUE),4), "\n", " test error 0.05 0.0228 \n", #round(median(res[,3], na.rm=TRUE),4), " ", round(sd(res[,3], na.rm=TRUE),4), "\n", " CV error mean 0.0258 0.0136 \n", #round(median(res[,4], na.rm=TRUE),4), round(sd(res[,4], na.rm=TRUE),4), "\n", " (computing time for 100 repetitions: 4 min 24 sec) \n", sep=" ") #, floor(mins), "min", round(leftsec,0), "sec) \n", sep=" ") #resknn <- res timeknn <- round(mins,0) ################################################### ### code chunk number 76: chemometrics-vignette.rnw:2471-2472 (eval = FALSE) ################################################### ## pred <- knn(X[train,], X[-train,], cl=grp[train], k = 1) ################################################### ### code chunk number 77: chemometrics-vignette.rnw:2479-2481 ################################################### options(prompt="> ", continue=" ") options(width=70) ################################################### ### code chunk number 78: chemometrics-vignette.rnw:2545-2549 (eval = FALSE) ################################################### ## # library(rpart) ## tree <- rpart::rpart(grp~., data=wine, method="class") ## plot(tree, main="Full Tree") ## text(tree) ################################################### ### code chunk number 79: chemometrics-vignette.rnw:2560-2561 (eval = FALSE) ################################################### ## treeeval <- treeEval(X, grp, train, cp=seq(0.45,0.05,by=-0.05)) ################################################### ### code chunk number 80: 03-treeeval ################################################### tree <- rpart(grp~., data=wine, method="class") par(mfrow=c(1,2)) par(mar=c(1,0,4,2)) plot(tree, main="Full Tree") text(tree) par(mar=c(5,4,1,2)) treeeval <- treeEval(X, grp, train, cp=seq(0.45,0.05,by=-0.05), legpos="topright") ################################################### ### code chunk number 81: chemometrics-vignette.rnw:2598-2606 ################################################### indmin <- which.min(treeeval$cvMean) thresh <- treeeval$cvMean[indmin] + treeeval$cvSe[indmin] fvec <- (treeeval$cvMean < thresh) indopt <- min((1:indmin)[fvec[1:indmin]]) opt <- treeeval$cp[indopt] cat(" optimal tree complexity:", "cp =", opt, "\n", "test error at optimum: ", round(treeeval$testerr[indopt],4), "\n", "CV error threshold: ", round(thresh,4), "\n", sep=" ") ################################################### ### code chunk number 82: chemometrics-vignette.rnw:2613-2631 (eval = FALSE) ################################################### ## res <- array(dim=c(100,6)) ## colnames(res) <- c("cp","trainerr","testerr","cvmean","cvse","threshold") ## tt <- proc.time() ## for (i in 1:100) { ## print(i) ## train <- sample(1:length(grp), round(2/3*length(grp))) ## treeeval <- treeEval(X, grp, train, cp=seq(0.45,0.05,by=-0.05), plotit=FALSE) ## indmin <- which.min(treeeval$cvMean) ## res[i,6] <- treeeval$cvMean[indmin] + treeeval$cvSe[indmin] ## fvec <- (treeeval$cvMean < res[i,6]) ## indopt <- min((1:indmin)[fvec[1:indmin]]) ## res[i,1] <- treeeval$cp[indopt] ## res[i,2] <- treeeval$trainerr[indopt] ## res[i,3] <- treeeval$testerr[indopt] ## res[i,4] <- treeeval$cvMean[indopt] ## res[i,5] <- treeeval$cvSe[indopt] ## } ## tt <- proc.time() - tt ################################################### ### code chunk number 83: chemometrics-vignette.rnw:2637-2645 ################################################### mins <- 450.81/60; leftsec <- (mins - floor(mins))*60 cat(" median sd \n", " training error 0.0763 0.0325 \n", #round(median(res[,2], na.rm=TRUE),4), round(sd(res[,2], na.rm=TRUE),4), "\n", " test error 0.15 0.045 \n", #round(median(res[,3], na.rm=TRUE),4), " ", round(sd(res[,3], na.rm=TRUE),4), "\n", " CV error mean 0.1432 0.04 \n", #round(median(res[,4], na.rm=TRUE),4), round(sd(res[,4], na.rm=TRUE),4), "\n", " (computing time for 100 repetitions: 7 min 31 sec) \n", sep=" ") #floor(mins), "min", round(leftsec,0), "sec) \n", sep=" ") #restree <- res timetree <- round(mins,0) ################################################### ### code chunk number 84: chemometrics-vignette.rnw:2654-2657 (eval = FALSE) ################################################### ## opttree <- prune(tree, cp=0.3) ## plot(opttree, main="Optimal Tree") ## text(opttree) ################################################### ### code chunk number 85: 04-prunetree (eval = FALSE) ################################################### ## par(mfrow=c(1,2)) ## par(mar=c(5,4,1,0)) ## plot(table(res[,1]), xlab="Complexity Parameters", ylab="Frequency") ## opttree <- prune(tree, cp=0.3) ## par(mar=c(2,4,4,0)) ## plot(opttree, main="Optimal Tree") ## text(opttree) ################################################### ### code chunk number 86: chemometrics-vignette.rnw:2675-2677 ################################################### options(prompt="> ", continue=" ") options(width=70) ################################################### ### code chunk number 87: chemometrics-vignette.rnw:2743-2746 (eval = FALSE) ################################################### ## weightsel <- c(0,0.01,0.1,0.15,0.2,0.3,0.5,1) ## nneteval <- nnetEval(X, grp, train, decay=weightsel, size=5) ## nneteval <- nnetEval(X, grp, train, decay=0.2, size=seq(5,30,by=5)) ################################################### ### code chunk number 88: chemometrics-vignette.rnw:2759-2778 (eval = FALSE) ################################################### ## res <- array(dim=c(100,6)) ## colnames(res) <- ## c("weight","trainerr","testerr","cvmean","cvse","threshold") ## tt <- proc.time() ## for (i in 1:100) { ## print(i) ## train <- sample(1:length(grp), round(2/3*length(grp))) ## nneteval <- nnetEval(X, grp, train, decay=weightsel, size=5, plotit=FALSE) ## indmin <- which.min(nneteval$cvMean) ## res[i,6] <- nneteval$cvMean[indmin] + nneteval$cvSe[indmin] ## fvec <- (nneteval$cvMean < res[i,6]) ## indopt <- min((1:indmin)[fvec[1:indmin]]) ## res[i,1] <- nneteval$decay[indopt] ## res[i,2] <- nneteval$trainerr[indopt] ## res[i,3] <- nneteval$testerr[indopt] ## res[i,4] <- nneteval$cvMean[indopt] ## res[i,5] <- nneteval$cvSe[indopt] ## } ## tt <- proc.time() - tt ################################################### ### code chunk number 89: chemometrics-vignette.rnw:2784-2792 ################################################### mins <- 614.66/60; leftsec <- (mins - floor(mins))*60 cat(" median sd", "\n", " training error 0 0.0013 \n", #round(median(res[,2], na.rm=TRUE),4), " ", round(sd(res[,2], na.rm=TRUE),4), "\n", " test error 0.0169 0.0167 \n", #round(median(res[,3], na.rm=TRUE),4), round(sd(res[,3], na.rm=TRUE),4), "\n", " CV error mean 0.0167 0.0091 \n", #round(median(res[,4], na.rm=TRUE),4), round(sd(res[,4], na.rm=TRUE),4), "\n", " (computing time for 100 repetitions: 10 min 15 sec) \n", sep=" ") #floor(mins), "min", round(leftsec,0), "sec) \n", sep=" ") #resnnet <- res timennet <- round(mins,0) ################################################### ### code chunk number 90: 05-nnetfreq (eval = FALSE) ################################################### ## plot(table(res[,1]), xlab="weights", ylab="Frequency") ################################################### ### code chunk number 91: 06-nneteval (eval = FALSE) ################################################### ## par(mfrow=c(1,2)) ## nneteval <- nnetEval(wine, grp, train, size=5, legpos="topright", ## decay = c(0,0.01,0.1,0.15,0.2,0.3,0.5,1)) ## nneteval <- nnetEval(wine, grp, train, decay=0.01, legpos="topright", ## size = c(5,10,15,20,25,30,40)) ################################################### ### code chunk number 92: chemometrics-vignette.rnw:2830-2834 (eval = FALSE) ################################################### ## rule <- nnet(X[train,], class.ind(grp[train]), size=5, entropy=TRUE, ## decay=0.01) ## pred <- predict(rule, X[-train,]) # predicted probabilities for test set ## pred <- apply(pred,1,which.max) # predicted groups for test set ################################################### ### code chunk number 93: chemometrics-vignette.rnw:2841-2843 ################################################### options(prompt="> ", continue=" ") options(width=70) ################################################### ### code chunk number 94: chemometrics-vignette.rnw:2954-2957 (eval = FALSE) ################################################### ## gamsel <- c(0.001,0.01,0.02,0.05,0.1,0.15,0.2,0.5,1) ## svmeval <- svmEval(X, grp, train, gamvec=gamsel, kernel="radial", ## legpos="top") ################################################### ### code chunk number 95: chemometrics-vignette.rnw:2969-2988 (eval = FALSE) ################################################### ## repl <- 100 ## gamsel <- c(0.001,0.01,0.02,0.05,0.1,0.15,0.2,0.5,1) ## res <- array(dim=c(repl,6)) ## colnames(res) <- c("gamma","trainerr","testerr","cvmean","cvse","threshold") ## tt <- proc.time() ## for (i in 1:repl) { ## train <- sample(1:length(grp), round(2/3*length(grp))) ## se <- svmEval(X, grp, train, gamvec=gamsel, kernel="radial", plotit=FALSE) ## indmin <- which.min(se$cvMean) ## res[i,6] <- se$cvMean[indmin] + se$cvSe[indmin] ## fvec <- (se$cvMean < res[i,6]) ## indopt <- min((1:indmin)[fvec[1:indmin]]) ## res[i,1] <- se$gamvec[indopt] ## res[i,2] <- se$trainerr[indopt] ## res[i,3] <- se$testerr[indopt] ## res[i,4] <- se$cvMean[indopt] ## res[i,5] <- se$cvSe[indopt] ## } ## tt <- proc.time() - tt ################################################### ### code chunk number 96: 08-svmeval (eval = FALSE) ################################################### ## par(mfrow=c(1,2)) ## gamsel <- c(0.001,0.01,0.02,0.05,0.1,0.15,0.2,0.5,1) ## svmeval <- svmEval(X, grp, train, gamvec=gamsel, kernel="radial", ## legpos="top") ## plot(table(res[,1]), xlab="Gamma", ylab="Frequency") ################################################### ### code chunk number 97: chemometrics-vignette.rnw:3006-3014 ################################################### mins <- 435.87/60; leftsec <- (mins - floor(mins))*60 cat(" median sd", "\n", " training error 0.0085 0.0061 \n", #round(median(res[,2], na.rm=TRUE),4), round(sd(res[,2], na.rm=TRUE),4), "\n", " test error 0.0167 0.0145 \n", #round(median(res[,3], na.rm=TRUE),4), round(sd(res[,3], na.rm=TRUE),4), "\n", " CV error mean 0.0167 0.0081 \n", #round(median(res[,4], na.rm=TRUE),4), round(sd(res[,4], na.rm=TRUE),4), "\n", " (computing time for 100 repetitions: 7 min 16 sec) \n", sep=" ") #floor(mins), "min", round(leftsec,0), "sec) \n", sep=" ") #ressvm <- res timesvm <- round(mins,0) ################################################### ### code chunk number 98: chemometrics-vignette.rnw:3022-3024 (eval = FALSE) ################################################### ## rule <- svm(X[train,],grp[train], kernel="radial", gamma=0.01) ## pred <- predict(svmres, X[-train,]) ################################################### ### code chunk number 99: chemometrics-vignette.rnw:3031-3033 ################################################### options(prompt="> ", continue=" ") options(width=70) ################################################### ### code chunk number 100: 09-classcomp (eval = FALSE) ################################################### ## par(mar=c(2,4,2,1)) ## resdat <- data.frame(kNN=resknn[,3],Tree=restree[,3],ANN=resnnet[,3],SVM=ressvm[,3]) ## boxplot(resdat,ylab="Test error", las=1) ################################################### ### code chunk number 101: chemometrics-vignette.rnw:3063-3068 ################################################### cat("Method Median test error Computing time \n \n", "kNN 0.05 4 min \n", #round(median(resknn[,3], na.rm=TRUE),3), " ", timeknn, " min \n", "Tree 0.15 8 min \n", #round(median(restree[,3], na.rm=TRUE),3), " ", timetree, " min \n", "ANN 0.017 10 min \n", #round(median(resnnet[,3], na.rm=TRUE),3), " ", timennet, " min \n", "SVM 0.017 7 min \n", sep="") #round(median(ressvm[,3], na.rm=TRUE),3), " ", timesvm, " min \n", sep="") ################################################### ### code chunk number 102: chemometrics-vignette.rnw:3192-3194 ################################################### options(prompt="> ", continue=" ") options(width=70) ################################################### ### code chunk number 103: chemometrics-vignette.rnw:3314-3315 (eval = FALSE) ################################################### ## X_alr <- alr(X, divisorvar=2) ################################################### ### code chunk number 104: chemometrics-vignette.rnw:3337-3338 (eval = FALSE) ################################################### ## X_clr <- clr(X) ################################################### ### code chunk number 105: chemometrics-vignette.rnw:3371-3372 (eval = FALSE) ################################################### ## X_ilr <- ilr(X)