# Beispiel 12.8: Fishers Schwertlilien-Daten # Die Zahlen im Buch sind nicht korrekt, da ich sie mit # einem fehlerhaften Datensatz berechnet hatte. Nachfolgend # beschreibe ich eine moegliche Auswertungen dieser Daten # mit R. # Der Datensatz selbst ist so beruehmt-beruechtigt, # dass er in R unter dem Namen "iris" verfuegbar ist. iris str(iris) X0 <- as.matrix(iris[,1:4]) C0 <- iris$Species # Im R-Paket MASS sind Routinen zur linearen # Diskriminanzanalyses verfuegbar: library(MASS) # Quantitative Auswertung: lda(x=X0,grouping=C0) # Plot der von Fishers linearer Diskriminanzfunktion # (Dimension 2): plot(lda(x=X0,grouping=C0)) # Damit der Plot übersichtlicher wird: C0 <- unclass(C0) plot(lda(x=X0,grouping=C0)) # Eine selbstgestrickte Version, die einen aehnlichen # Plot wie im Buch erzeugt: source("MyLDA.R") MyLDA(X0,C0) # Jetzt noch andere Varianten: # Verwende relative Daten, da es vielleicht # nur auf die Form, nicht die absolute Groesse # der Blueten ankommt: tmp <- apply(X0,1,sum) X <- X0 / matrix(rep(tmp,times=dim(X0)[2]),ncol=dim(X0)[2]) X <- X[,1:3] MyLDA(X,C0) # Verwende nur zweite und dritte Gruppe: X <- X0[51:150,] C <- C0[51:150] C <- unclass(as.factor(C)) MyLDA(X,C) # Da nur zwei Gruppen vorliegen, zeigt die # R-Routine "lda" lieber Histogramme von Fishers # linearer Diskriminanzfunktion (Dimension 1): lda(x=X,grouping=C) plot(lda(x=X,grouping=C)) # Verwende andere Transformation der Daten, bei der # ebenfalls die Form betont wird, naemlich # x(1) = log(Sepal.Length/Sepal.Width) # x(2) = log(Petal.Length/Petal.Width) # x(3) = log( (Sepal.Length*Sepal.Width) # / (Petal.Length*Petal.Width)) X <- log(X0) X <- cbind(X[,1] - X[,2], X[,3] - X[,4], X[,1]+X[,2]-X[,3]-X[,4]) MyLDA(X,C0)