### Linear discriminant analysis: Iris <- as.matrix(read.table("http://www.cimat.mx/~ponciano/STAT90MOES02/FisherIris.txt",header=F)); dimnames(Iris)[[2]] <- c("SL", "SW", "PL", "PW", "Sp.num"); Iris.data <- data.frame(Iris); Iris.data$Sp <- as.factor(Iris.data$Sp.num); #creando una variable de clasificacion para Sp. levels(Iris.data$Sp) <- c("set","vers","virg"); print(Iris.data) # SL SW PL PW Sp.num Sp #1 5.1 3.5 1.4 0.2 1 set #2 4.9 3.0 1.4 0.2 1 set #3 4.7 3.2 1.3 0.2 1 set # ... ## Escogiendo una muestra aleatoria de 75 flores de las 150 como 'training sample' training.s <- sample(x=1:150,size=75,replace=F) table(Iris.data$Sp[training.s]); #Composicion de especies de la muestra aleatoria: # set vers virg # 25 26 24 ### Analisis discriminante: calculo las variables discriminantes usando una muestra de entrenamiento ### introduciendo todas las variables. Revisen el programa 'CanVarExample.R' para acordarse que es lo que ### hace la funcion 'lda'. Despues de usar lda() con una muestra de entrenamiento, el siguiente paso es predecir ### la especie para las flores que no se incluyeron en los calculos del discriminante lineal. Noten que al eliminar ### una o mas variables predictoras en Sp ~ SL + SW + PL + PW, (por ej. usando 'Sp ~ SL + SW') la tasa de error en ### clasificacion (ver siguientes lineas) cambia: lda.iris <- lda(Sp ~ SL + SW + PL + PW, data= Iris.data, prior=c(1,1,1)/3, subset=training.s) Sp.predict <- predict(lda.iris, Iris.data[-training.s,])$class # Comparando visualmente especie verdadera con prediccion: cbind(Iris.data[-training.s,6], Sp.predict); # Calculando el error en la prediccion: error.rate <- sum(Iris.data[-training.s,6] != Sp.predict)/length(Sp.predict);