2013-01-15 16 views
19

Chcę improwizować mój odcień regresji, który jest proporcjonalny do gęstości. Na przykład, przedział ufności jest wąski, cień jest gęsty, a jeśli przedział ufności szeroki, kolor wypełnienia jest jasny. Wykres wynik może wyglądać następująco:gradient zacieniony przedział ufności

enter image description here

Oto przykład praca:

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

dzięki, którym jest kod źródłowy funkcji vwReg, nie mogłem go znaleźć ... – jon

+1

Oto rozwiązanie (ostatni przykład) za pomocą podstawowy system graficzny [www.alisonsinclair.ca] (http://www.alisonsinclair.ca/2011/03/shading-between-curves-in-r/), który można dostosować do twoich danych. –

Odpowiedz

7

Komenda w pakiecie denstripdensregion() wydaje się robić to, co chcesz. Trochę adaptacja na przykładzie jego strony pomocy:

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

Dzięki za miłą odpowiedź, to podaje dwa różne kierunki gradientów, tj. linia w kierunku linii jest bardziej ciemna, jak również sama szerokość przedziału ufności. – jon

+0

Tak, masz rację. Dzieje się tak dlatego, że odchylenie standardowe wzrasta, zwiększając $ x $; dlatego szczyt gęstości normalnej jest niższy (np. 'dnorm (0,0,1)' $> $ 'dnorm (0,0,2)'). Jeśli chcesz, aby skala szarości była taka sama wokół linii regresji, możesz przeskalować macierz 'z' (ale wówczas skala szarości nie będzie odpowiadać" rzeczywistej "gęstości, tylko skalowanej wielokrotności gęstości). –