xyplot con intervallo di confidenza (box e wisker trama) aggiunto in r
-
27-10-2019 - |
Domanda
Voglio aggiungere un intervallo di confidenza del 99% e del 95% in xyplot.
Di seguito sono riportati i dati:
X <- 1:20
Y <- c(0.5, 1.4, 2.3, 3.4, 4.5,
3.3, 3.0, 2.1, 1.5, 0,
0, 3.4, 4.5, 6.7, 5.3, 2.8,
0.5, 3.4, 3.5, 3.7)
mydata <- data.frame (X, Y)
Voglio identificare il valore massimo di Y e il valore X corrispondente è la posizione della mediana in box e il diagramma del baffio. Ogni volta che il valore di Y diminuisce di 1 punto (a sinistra o a destra) è l'intervallo di confidenza del 99% (sarà all'interno della casella) e ogni volta che la Y diminuisce a 2 (sia a sinistra che a destra), le posizioni corrispondenti in X saranno rappresentate dal baffio.
Trama desiderata:
Spiegazione.
Valore x corrispondente a max (y) = 6.7 Valore x corrispondente alla casella a sinistra = 6,7 - 1, a destra = 6,7 - 1 Valore x corrispondente a Whisker a sinistra = 6,7 - 2, baffi a destra = 6,7 - 2
Soluzione
La trama seguente dovrebbe iniziare. Utilizza rettangoli piuttosto che un BWPlot e non fa interpolazione.
Crea i dati:
library(ggplot2)
dat <- data.frame(
x = 1:20,
y = c(0.5, 1.4, 2.3, 3.4, 4.5, 3.3, 3.0, 2.1, 1.5, 0, 0, 3.4, 4.5, 6.7, 5.3, 2.8, 0.5, 3.4, 3.5, 3.7)
)
Scrivi una funzione che restituisce i 5 punti desiderati:
getRange <- function(x, a=1, b=2){
maxy <- max(x)
xMax <- which.max(x)
x2 <- max(which(x[1:xMax] <= (maxy-a)))
x1 <- max(which(x[1:x2] <= (maxy-b)))
x3 <- xMax + min(which(x[-(1:xMax)] < (maxy+a)))
x4 <- x3 + min(which(x[-(1:x3)] < (maxy+b)))
data.frame(x1=x1, x2=x2, max=xMax, x3=x3, x4=x4)
}
Ottieni i valori di intervallo e la trama:
rr <- getRange(dat$y, 1, 3)
ggplot(dat, aes(x, y)) + geom_line() + geom_point() +
geom_rect(data=rr, aes(xmin=x2, xmax=x3, NULL, NULL),
ymin=-Inf, ymax=Inf, fill="blue", alpha=0.25) +
geom_rect(data=rr, aes(xmin=x1, xmax=x4, NULL, NULL),
ymin=-Inf, ymax=Inf, fill="blue", alpha=0.25)