Verwendung ggord
man kann schön linearen Diskriminanzanalyse ggplot2
Biplots (CF Kapitel 11, 11.5 in Fig "Biplots in der Praxis" von M. Greenacre) machen, wie es inR: Plotten posterior Klassifizierungswahrscheinlichkeiten einer linearen Diskriminanzanalyse in ggplot2
library(MASS)
install.packages("devtools")
library(devtools)
install_github("fawda123/ggord")
library(ggord)
data(iris)
ord <- lda(Species ~ ., iris, prior = rep(1, 3)/3)
ggord(ord, iris$Species)
ich würde auch die Klassifikationsbereiche hinzufügen, um (als Feststoff Regionen der gleichen Farbe wie ihre jeweilige Gruppe dargestellt mit sagen, alpha = 0,5) oder dem Posteriori-Wahrscheinlichkeiten einer Klassenmitgliedschaft (mit alpha dann Variieren nach dieser hinteren Wahrscheinlichkeit und die gleiche Farbe wie für jede Gruppe verwendet) (wie in BiplotGUI
getan werden kann, aber ich suche nach einer ggplot2
Lösung). Würde jemand wissen, wie man das mit ggplot2
macht, vielleicht unter Verwendung ?
BEARBEITEN: unten fragt jemand, wie man die hinteren Klassifikationswahrscheinlichkeiten berechnet & vorhergesagten Klassen. Dies geht so:
library(MASS)
library(ggplot2)
library(scales)
fit <- lda(Species ~ ., data = iris, prior = rep(1, 3)/3)
datPred <- data.frame(Species=predict(fit)$class,predict(fit)$x)
#Create decision boundaries
fit2 <- lda(Species ~ LD1 + LD2, data=datPred, prior = rep(1, 3)/3)
ld1lim <- expand_range(c(min(datPred$LD1),max(datPred$LD1)),mul=0.05)
ld2lim <- expand_range(c(min(datPred$LD2),max(datPred$LD2)),mul=0.05)
ld1 <- seq(ld1lim[[1]], ld1lim[[2]], length.out=300)
ld2 <- seq(ld2lim[[1]], ld1lim[[2]], length.out=300)
newdat <- expand.grid(list(LD1=ld1,LD2=ld2))
preds <-predict(fit2,newdata=newdat)
predclass <- preds$class
postprob <- preds$posterior
df <- data.frame(x=newdat$LD1, y=newdat$LD2, class=predclass)
df$classnum <- as.numeric(df$class)
df <- cbind(df,postprob)
head(df)
x y class classnum setosa versicolor virginica
1 -10.122541 -2.91246 virginica 3 5.417906e-66 1.805470e-10 1
2 -10.052563 -2.91246 virginica 3 1.428691e-65 2.418658e-10 1
3 -9.982585 -2.91246 virginica 3 3.767428e-65 3.240102e-10 1
4 -9.912606 -2.91246 virginica 3 9.934630e-65 4.340531e-10 1
5 -9.842628 -2.91246 virginica 3 2.619741e-64 5.814697e-10 1
6 -9.772650 -2.91246 virginica 3 6.908204e-64 7.789531e-10 1
colorfun <- function(n,l=65,c=100) { hues = seq(15, 375, length=n+1); hcl(h=hues, l=l, c=c)[1:n] } # default ggplot2 colours
colors <- colorfun(3)
colorslight <- colorfun(3,l=90,c=50)
ggplot(datPred, aes(x=LD1, y=LD2)) +
geom_raster(data=df, aes(x=x, y=y, fill = factor(class)),alpha=0.7,show_guide=FALSE) +
geom_contour(data=df, aes(x=x, y=y, z=classnum), colour="red2", alpha=0.5, breaks=c(1.5,2.5)) +
geom_point(data = datPred, size = 3, aes(pch = Species, colour=Species)) +
scale_x_continuous(limits = ld1lim, expand=c(0,0)) +
scale_y_continuous(limits = ld2lim, expand=c(0,0)) +
scale_fill_manual(values=colorslight,guide=F)
(auch nicht ganz sicher, dieser Ansatz für Grenzen Klassifizierung zeigt Konturen/Pausen bei 1,5 und 2,5 verwendet, ist immer richtig - es ist richtig für die Grenze zwischen den Arten 1 und 2 und 2 und 3, aber nicht, wenn die Region von Spezies 1 neben Spezies 3 wäre, da würde ich dann zwei Grenzen bekommen - vielleicht müsste ich den Ansatz here verwenden, wo jede Grenze zwischen jedem Artenpaar betrachtet wird separat)
Das bringt mich soweit wie plotti ng der Klassifikationsregionen. Ich suche jedoch nach einer Lösung, um auch die tatsächlichen hinteren Klassifikationswahrscheinlichkeiten für jede Art an jeder Koordinate aufzutragen, wobei Alpha (Opakheit) proportional zur späteren Klassifikationswahrscheinlichkeit für jede Art und eine artspezifische Farbe verwendet wird. Mit anderen Worten, mit einem Stapel von drei Bildern überlagert. Als Alpha-Blending in ggplot2 bekannt ist order-dependent zu sein, ich denke, die Farben dieses Stapels würde vorher allerdings berechnet haben, und geplottet so etwas wie
qplot(x, y, data=mydata, fill=rgb, geom="raster") + scale_fill_identity()
Here is a SAS example of what I am after mit:
würde jemand wissen, wie man das vielleicht macht? Oder hat jemand irgendwelche Gedanken darüber, wie man diese posterioren Klassifikationswahrscheinlichkeiten am besten darstellen kann?
Beachten Sie, dass die Methode für eine beliebige Anzahl von Gruppen funktionieren sollte, nicht nur für dieses spezielle Beispiel.
können Sie ein Beispiel für Ihr Datenlayout hinzufügen? – Benvorth
ah, Iris, vergiss meine Frage :-) – Benvorth
Können Sie die Daten (Klassifikationsregionen, Posterior-Wahrscheinlichkeiten), die geplottet werden sollen, extrahieren? – tonytonov