19
votes

I want to improvise my regression plot shade which is proportional to density. For example is the confidence interval is narrow the shade is dense while if confidence interval wide the fill color is light. The result graph might look like this:

enter image description here

Here is an working example:

set.seed(1234)
md <- c(seq(0.01, 1, 0.01), rev(seq(0.01, 1, 0.01)))
cv <-  c(rev(seq(0.01, 1, 0.01)), seq(0.01, 1, 0.01))
rv <- rnorm (length(md), 0.1, 0.05)

 df <- data.frame(x =1:length(md),  F = md*2.5 + rv, L =md*2.5 -rv-cv, U =md*2.5+ rv+ cv)
 plot(df$x, df$F, ylim = c(0,4), type = "l")

 polygon(c(df$x,rev(df$x)),c(df$L,rev(df$U)),col = "cadetblue", border = FALSE)
 lines(df$x, df$F, lwd = 2)
 #add red lines on borders of polygon
 lines(df$x, df$U, col="red",lty=2)
 lines(df$x, df$L, col="red",lty=2)
1
thanks, where is source code for vwReg function, I could not find it ...jon
Here is a solution (last example) using base graphics system www.alisonsinclair.ca that can be adapted to your dataDidzis Elferts

1 Answers

7
votes

The densregion() command in the denstrip package seems to do what you want. A little adaptation from the example in its help page:

require(denstrip)
x <- 1:10
nx <- length(x)
est <- seq(0, 1, length=nx)^3
se <- seq(.7,1.3,length.out=nx)/qnorm(0.975)
y <- seq(-3, 3, length=100)
z <- matrix(nrow=nx, ncol=length(y))
for(i in 1:nx) z[i,] <- dnorm(y, est[i], se[i])
plot(x, type="n", ylim=c(-3, 3),xlab="")
densregion(x, y, z)
lines(x,est,col="white")

enter image description here