2013-01-15 81 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

感謝您的好評,它給出梯度的兩個不同的方向,即朝着擬合線更加黑暗以及置信區間本身的寬度。 – jon

+0

是的,你是對的。這是因爲標準差隨着$ x $增加而增加;因此正常密度的峯值較低(例如'dnorm(0,0,1)'> $'dnorm(0,0,2)')。如果你想灰度在迴歸線周圍是相同的,你可以重新調整'z'矩陣(但是灰度不會對應於「真實」密度,只是密度的縮放倍數)。 –