#### Stochastik IV, Übungsblatt 8 ### Aufgabe 3 library(MASS) library(ellipse) # Einlesen der Daten und Einbinden in Suchpfad data.olives <- read.table("D:/Univ Augsburg/Lehre/SS07/VO_MultiVar/Datensaetze/Olives.txt", head = TRUE, sep = "\t", quote = "") attach(data.olives) ## Teilaufgabe (a) # ACHTUNG: Nachfolgend werden Proportionen in der Gesamtstichprobe als a-priori # Wahrscheinlichkeiten benutzt. # (A) Ohne 'Training' und 'Test' (im Allgemeinen nicht empfehlenswert) (olives.qda <- qda(cbind(stearic, oleic), Region)) (olives.qda.pred <- predict(olives.qda, cbind(stearic, oleic))) # (B) 'Leave-one-out' Kreuzvalidierung (eventuell noch besser wäre 'allgemeinere' # Kreuzvalidierung; vgl. Folie Seite 178) (olives.qda.cv <- qda(cbind(stearic, oleic), Region, CV = TRUE)) ## Teilaufgabe (b) # (A) Ohne 'Training' und 'Test' # Konfusionsmatrix der Gruppenzugehörigkeitsvorhersagen (konf.matrix.A <- table(Region, olives.qda.pred$class, dnn = c("True Region", "Predicted Region"))) # Als ein zusammenfassendes 'Gütemaß' für die Gruppenzugehörigkeitsvorhersagen # durch die quadratische Diskriminanzanalyse, z.B., Prozentsatz von korrekten Klassifikationen guete.A <- ( (konf.matrix.A[1,1] + konf.matrix.A[2,2] + konf.matrix.A[3,3]) / length(Region) ) * 100 round(guete.A, 1) # Verglichen werden könnte diese Zahl, z.B., mit dem Prozentsatz korrekter Klassifikationen, # wenn jeder Fall derjenigen Gruppe mit größtem Umfang in der Gesamtstichprobe # zugeordnet wird. vgl.guete <- ( max( sum(konf.matrix.A[1, ]), sum(konf.matrix.A[2, ]), sum(konf.matrix.A[3, ]) ) / length(Region) ) * 100 round(vgl.guete, 1) # (B) 'Leave-one-out' Kreuzvalidierung # Konfusionsmatrix der Gruppenzugehörigkeitsvorhersagen (konf.matrix.B <- table(Region, olives.qda.cv$class, dnn = c("True Region", "Predicted Region"))) # 'Gütemaß': Prozentsatz korrekter Klassifikationen guete.B <- ( (konf.matrix.B[1,1] + konf.matrix.B[2,2] + konf.matrix.B[3,3]) / length(Region) ) * 100 round(guete.B, 1) # 'Vergleichsgröße': Prozentsatz korrekter Klassifikationen, wenn jeder Fall derjenigen Gruppe # mit größtem Umfang in der Gesamtstichprobe zugeordnet wird. round(vgl.guete, 1) ## Teilaufgabe (c) # Erzeugung eines hinreichend feinen Rasters zu Gruppenzugehörigkeitsvorhersagen raster.x.coord <- rep(seq(100, 420, length = 140), 140) raster.y.coord <- rep(seq(6200, 8500, length = 140), rep(140, 140)) # Streuungsdiagramm und Konfidenzellipsen Region.int <- unclass(Region) plot(stearic, oleic, main = "Streuungsdiagramm mit Konfidenzellipsen und Entscheidungsbereichen (eingefärbt nach Regionen)", sub = "North: black; Sardinia: red; South: green", cex.sub = .75, xlim = c(120, 400), pch = 19, col = Region.int, cex = 1.5) for( i in 1:3 ) { lines(ellipse(cov(cbind(stearic[Region.int == i], oleic[Region.int == i])), centre = c(mean(stearic[Region.int == i]), mean(oleic[Region.int == i])), level = 0.95), col = i, lwd = 2) } # Gruppenzugehörigkeitsvorhersagen für das Raster raster.qda.pred <- predict(olives.qda, cbind(raster.x.coord, raster.y.coord)) raster.qda.pred.class.int <- unclass(raster.qda.pred$class) points(raster.x.coord, raster.y.coord, col = raster.qda.pred.class.int, pch = "+")