spw = stepwise.res[[cj]] vars = spw$model[,2] my.lda <- function(dad,stepwisevars) { library(MASS) library(stringr) #cria um training e um test set rnn = rownames(dad) rnn = t(as.data.frame(str_split(rnn,"_"))) rownames(rnn) = rownames(dad) spun = unique(as.vector(rnn[,1])) test.n = NULL train.n = NULL for (j in 1:length(spun)) { rnu = rownames(rnn[rnn[,1]%in%spun[j],]) srnu = length(rnu) ntest = floor(srnu*0.3) ntr = srnu-ntest test.n = c(test.n,sample(rnu,ntest)) train.n = c(train.n,sample(rnu,ntr)) } #seleciona o fator especies rz = as.vector(rnn[,1]) spp = gsub("([0123456789])", "", rz) spp = str_trim(spp) spp = as.factor(spp) dad$species = spp dad.test = dad[test.n,] spp.test = as.factor(dad.test$species) dad.test = dad.test[,vars] dad.train = dad[train.n,] spp.train = as.factor(dad.train$species) dad.train = dad.train[,vars] #faz a discriminante com o training set ldd = lda(as.matrix(dad.train),spp.train) #prediz com o test set ldp = predict(ldd,dad.test) #checa a predicao pred = as.vector(ldp$class) org = as.vector(spp.test) pp = as.data.frame(cbind(org,pred)) pp$ACERTO = 0 pp[pp[,1]==pp[,2],'ACERTO'] = 1 mistakes = pp[pp$ACERTO==0,1:2] pacert = (nrow(pp[pp$ACERTO==1,])/nrow(pp))*100 return(list(pacert,mistakes)) }