plot.freq.grad <- function (xobs , yobs , ncla = 10) { if (is.numeric(xobs) == F) return("numeric expected") q0 <- quantile(xobs, probs = seq(0, 1, 1/ncla), na.rm = F) c.cla <- quantile(xobs, probs = seq(0 + 1/2/ncla, 1 - 1/2/ncla, 1/ncla), na.rm = F) xmin <- min(xobs) ; xmax <- max(xobs) q1 <- cut(xobs, q0, include.lowest = T) t0 <- table(q1, yobs) t0[, 1] <- (t0[, 1] + t0[, 2]) freq <- t0[, 2]/t0[, 1] basbar <- rep(0, ncla) ; haubar <- rep(0, ncla) for (i in 1:ncla) { succes <- t0[i, 2] ; essai <- t0[i, 1] if (essai > 10) { a0 <- prop.test(succes, essai)$conf.int basbar[i] <- a0[1] ; haubar[i] <- a0[2] if (a0[1] > freq[i]) basbar[i] <- NA if (a0[2] < freq[i]) haubar[i] <- NA } else { basbar[i] <- NA ; haubar[i] <- NA } } ymin <- min(basbar, na.rm = T) ymin <- min(ymin,min(freq)) ymax <- max(haubar, na.rm = T) ymax <- max(ymax,max(freq)) plot(0, 0, ylim = c(ymin, ymax), xlim = c(xmin, xmax), xlab="", ylab = "Proba", type = "n") points(c.cla, freq, pch = 16) for (i in 1:ncla) { if (!is.na(basbar[i])) { size.bar <- par("cxy")[1]/4 segments(c.cla[i], basbar[i] , c.cla[i], haubar[i] ) segments(c.cla[i] - size.bar, haubar[i] , c.cla[i] + size.bar, haubar[i] ) segments(c.cla[i] - size.bar, basbar[i] , c.cla[i] + size.bar, basbar[i] ) } if (i > 1) abline(v = q0[i], lty = 2) } }