Mosaikplot-Hilfe in R.

Sep 22 2020

Mein aktueller Plot:

Mein gewünschter Plot (ohne Rücksicht auf die Variablen s)

Insbesondere: erklärende Variablen unten mit einer x-Achse, Antwortvariablen rechts, relative Frequenz und y-Achse links . Ich werde meinen R-Code unten anhängen.

mosaictable <- matrix (c (3, 9, 22, 21), byrow = T, ncol = 2)
rownames (mosaictable) = c ("White", "Blue ")
colnames (mosaictable) = c ("Captured", "Not Captured")
mosaicplot  ((mosaictable), sub = "Pigeon Color", ylab = "Relative frequency", 
            col = c ("firebrick", "goldenrod1"), font = 2, main = "Mosaic Plot of Pigeon Color and Their Capture Rate"
            
            )
axis (1)
axis (4)

Antworten

AchimZeileis Oct 28 2020 at 11:57

Diese besondere Art der Mosaikanzeige, bei der Sie eine "abhängige" Variable auf der y-Achse haben und entsprechende Anmerkungen hinzufügen möchten, wird manchmal auch als "Wirbelsäulendiagramm" bezeichnet. R implementiert dies in der spineplot()Funktion. Ruft auch plot(y ~ x)intern auf, spineplot()wenn beide yund xkategorisch sind.

In Ihrem Fall spineplot()wird fast alles , was Sie möchten, automatisch ausgeführt, vorausgesetzt, Sie liefern ein gut formatiertes "table"Objekt:

tab <- as.table(matrix(c(3, 22, 9, 21), ncol = 2))
dimnames(tab) <- list(
  "Pigeon Color" = c("White", "Blue"),
  "Relative Frequency" = c("Captured", "Not Captured")
)
tab
##             Relative Frequency
## Pigeon Color Captured Not Captured
##        White        3            9
##        Blue        22           21

Und dann bekommen Sie:

spineplot(tab)

Persönlich würde ich es dabei belassen. Wenn es jedoch wirklich wichtig ist, die Achsenbeschriftungen von links nach rechts und umgekehrt zu wechseln, können Sie dies tun, indem Sie sie zuerst unterdrücken axes = FALSEund anschließend manuell hinzufügen. Die Koordinaten dafür müssen aus der Randverteilung der ersten Variablen und der bedingten Verteilung der zweiten Variablen bei der ersten Variablen erhalten werden

x <- prop.table(margin.table(tab, 1))
y <- prop.table(tab, 1)[2, ]
spineplot(tab, col = c("firebrick", "goldenrod1"), axes = FALSE)
axis(1, at = c(0, x[1]) + x/2, labels = rownames(tab), tick = FALSE)
axis(2)
axis(4, at = c(0, y[1]) + y/2, labels = colnames(tab), tick = FALSE)