# The MIT License
# Copyright (c) 2007 The GGobi Foundation
# http://www.ggobi.org/book/code-license.txt


# Read data
d.olive<-read.csv("olive.csv",row.names=1)

# load libraries
library(e1071)
library(rggobi)

# Split data into training and test
indx.tst<-c(1,7,12,15,16,22,27,32,34,35,36,41,50,54,61,68,70,75,
,76,80,95,101,102,105,106,110,116,118,119,122,134,137,140,147,148,150,
,151,156,165,175,177,182,183,185,186,187,190,192,194,201,202,211,213,217,
,218,219,225,227,241,242,246,257,259,263,266,274,280,284,289,291,292,297,
,305,310,313,314,323,330,333,338,341,342,347,351,352,356,358,359,369,374,
,375,376,386,392,405,406,415,416,418,420,421,423,426,428,435,440,451,458,
,460,462,466,468,470,474,476,480,481,482,487,492,493,500,501,509,519,522,
,530,532,541,543,545,546,551,559,567,570)

d.olive.train<-d.olive[-indx.tst,]
d.olive.test<-d.olive[indx.tst,]

d.olive.sth.train <- subset(d.olive.train, region==1, 
   select=area:eicosenoic)
d.olive.sth.test <- subset(d.olive.test, region==1, 
   select=area:eicosenoic)

olive.svm<-best.svm(factor(area) ~ ., data=d.olive.train)
olive.svm<-svm(factor(area) ~ ., data=d.olive.sth.train, 
  type="C-classification",kernel="linear")

table(d.olive.sth.train[,1],predict(olive.svm,d.olive.sth.train))
table(d.olive.sth.test[,1],predict(olive.svm,d.olive.sth.test))

# Which cases are real support vectors? 
support.vectors<-olive.svm$index[abs(olive.svm$coefs[,1])<1&abs(olive.svm$coefs[,2])<1&
  abs(olive.svm$coefs[,3])<1]
pointtype<-rep(0,323) # training
pointtype[247:323]<-1 # test
pointtype[olive.svm$index]<-2 # slack vectors
pointtype[support.vectors]<-3 # support vectors

# Load data and predictions into ggobi
parea<-c(predict(olive.svm,d.olive.sth.train),predict(olive.svm,d.olive.sth.test))
d.olive.svm <- cbind(rbind(d.olive.sth.train, 
    d.olive.sth.test), parea, pointtype)
gd <- ggobi(d.olive.svm)[1]
glyph_color(gd) <- c(6,3,2,9)[d.olive.svm$area]



