## source("da.R") ## bank data ################################################ library(Rfwdmv) data(bank.dat) x <- bank.dat x <- data.frame(x,c(rep("genuine",100),rep("forged",100))) names(x) <- c("length","left.height","right.height", "lower.frame","upper.frame","diagonal","group") train <- sort(sample(1:nrow(x),nrow(x)*0.75)) test <- (1:nrow(x))[-train] sort(c(train,test)) ## check table(x$group[train]) table(x$group[test]) ## LDA ###################################################### l1 <- lda(group ~ diagonal, data=x[train,]) plot(l1) pl1 <- predict(l1,newdata=x[test,]) ## predict with test plot((test),pl1$x,col="white") text((test),pl1$x,substr(as.character(x$group[test]),1,1)) table(pl1$class,x$group[test]) pl1 <- predict(l1,newdata=x[train,]) ## predict with train plot((train),pl1$x,col="white") text((train),pl1$x,substr(as.character(x$group[train]),1,1)) table(pl1$class,x$group[train]) l2 <- lda(group ~ lower.frame + upper.frame + diagonal, data=x[train,]) plot(l2) pl2 <- predict(l2,newdata=x[test,]) ## predict with test plot((test),pl2$x,col="white") text((test),pl2$x,substr(as.character(x$group[test]),1,1)) table(pl2$class,x$group[test]) pl2 <- predict(l1,newdata=x[train,]) ## predict with train plot((train),pl2$x,col="white") text((train),pl2$x,substr(as.character(x$group[train]),1,1)) table(pl2$class,x$group[train]) l3 <- lda(group ~ length + left.height + right.height + lower.frame + upper.frame + diagonal, data=x[train,]) plot(l3) pl3 <- predict(l3,newdata=x[test,]) ## predict with test plot((test),pl3$x,col="white") text((test),pl3$x,substr(as.character(x$group[test]),1,1)) table(pl3$class,x$group[test]) pl3 <- predict(l1,newdata=x[train,]) ## predict with train plot((train),pl3$x,col="white") text((train),pl3$x,substr(as.character(x$group[train]),1,1)) table(pl3$class,x$group[train]) ## QDA ###################################################### q3 <- qda(group ~ length + left.height + right.height + lower.frame + upper.frame + diagonal, data=x[train,]) ##plot(q3) ## plot does not work for q3, but rest is OK pq3 <- predict(q3,newdata=x[test,]) ## predict with test table(pq3$class,x$group[test]) pq3 <- predict(l1,newdata=x[train,]) ## predict with train table(pq3$class,x$group[train]) ## Logit #################################################### lg1 <- glm(group ~ length + left.height + right.height + lower.frame + upper.frame, data=x[train,], family=binomial()) summary(lg1) p1 <- predict(lg1,newdata=x[test,]) group.p1 <- 1/(1+exp(-p1)) > 0.5 table(group.p1, x$group[test]) p1 <- predict(lg1,newdata=x[train,]) group.p1 <- 1/(1+exp(-p1)) > 0.5 table(group.p1, x$group[train]) ## may not not work with all variables since perfect separation possible! lg2 <- glm(group ~ length + left.height + right.height + lower.frame + upper.frame + diagonal, data=x[train,], family=binomial()) ## -> no convergence summary(lg2) p2 <- predict(lg2,newdata=x[test,]) group.p2 <- 1/(1+exp(-p2)) > 0.5 table(group.p2, x$group[test]) p2 <- predict(lg2,newdata=x[train,]) group.p2 <- 1/(1+exp(-p2)) > 0.5 table(group.p2, x$group[train])