source("http://web.as.uky.edu/statistics/users/pbreheny/621/F12/notes/10-30b.R")
M1 <- genM(1)
M2 <- genM(2)

## Linear
par(mfrow=c(1,2),mar=c(0,0,1,0)+0.5)
plotLin(M1,main="Setting 1")
plotLin(M2,main="Setting 2")

## kNN
require(class)
par(mfrow=c(2,3),mar=c(0,0,1,0)+0.5)
plotKNN(M1,k=1,main="Setting 1 (k=1)")
plotKNN(M1,k=15,main="Setting 1 (k=15)")
plotKNN(M1,k=100,main="Setting 1 (k=100)")
plotKNN(M2,k=1,main="Setting 2 (k=1)")
plotKNN(M2,k=15,main="Setting 2 (k=15)")
plotKNN(M2,k=100,main="Setting 2 (k=100)")

## Sim
M <- 100
k <- c(1,3,5,7,9,11,15,17,21,25,29,35,39,45,55,71,83,99,151)
E <- array(NA,dim=c(M,2,length(k)+1),dimnames=list(1:M,paste("Setting",1:2),c("Linear",k)))
for (i in 1:M) {
  for (j in 1:2) {
    Data <- genM(j,n.p=10000)
    D <- Data$M
    DD <- Data$MM
    fit <- lm(class~x+y,D)
    pred <- (predict(fit,newdata=DD) > 0.5)
    E[i,j,1] <- mc(pred,DD$class)
    for (l in 1:(length(k))) {
      pred <- knn(D[,1:2],DD[,1:2],cl=D$class,k=k[l])
      E[i,j,l+1] <- mc(pred,DD$class)
    }
  }
  displayProgressBar(i,M,20)
}

df <- array2df(apply(E,2:3,mean),var=c("Setting","k","MC"))
dfn <- df[-(1:2),]
dfn$k <- factor2num(dfn$k)
myPanel <- function(x,y,subscripts,...) {
  llines(range(x),rep(df$MC[subscripts[1]],2),col="black")
  panel.xyplot(x,y,subscripts=subscripts,...)
}
trellis.par.set(plot.line=list(lwd=3))
xyplot(MC~k|Setting,dfn,type="o",pch=19,panel=myPanel,ylab="Misclassification Rate")
