2013-01-15 17 views
19

私は密度に比例する私の回帰プロットの陰影を即興したいと思います。例えば、信頼区間が狭い場合は陰影が濃く、信頼区間が広い場合は塗りつぶし色が薄い。結果グラフは次のようになります。ここではグラデーションの影付きの信頼区間

enter image description here

実施例である:

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) 
+0

vwReg関数のソースコードがあり、私はそれを見つけることができなかったおかげで、... – jon

+1

ここ溶液(最後の例)を使用しては、良いグラフィックスシステム[www.alisonsinclair.ca](http://www.alisonsinclair.ca/2011/03/shading-between-curves-in-r/)あなたのデータに合わせることができます –

答えて

7

denstripパッケージでdensregion()コマンドは、あなたがやりたいようです。そのヘルプページの例から少し適応:

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

+0

素敵な答えをありがとう、それグラディエントの2つの異なる方向を与える。すなわち、フィット線は、信頼区間自体の幅だけでなく、より暗くなる。 – jon

+0

はい、あなたは正しいです。これは、標準偏差が$ x $の増加に伴って増加するためです。従って、通常の密度のピークはより低い(例えば、 'dnorm(0,0,1)' $> $ 'dnorm(0,0,2)')。回帰直線の周りでグレースケールを同じにしたい場合は、 'z'マトリックスを再スケールすることができます(ただし、グレースケールは密度の倍数の倍数だけ「実」密度に対応しません)。 –