Thank you, this seems to work, but it is not exactly what I need (it indeed looks great, but a bit beyond my understanding) I just need a shaded area between 2.44 to 2.57 along the x-axis - a polygon inserted into my density plot (and not a confidence line along a scatter plot like your suggested solution) My x-axis is an index (a data frame), my y-axis is the automatically constructed density On Fri, Dec 2, 2016 at 10:01 AM, Jim Lemon <drjimlemon at gmail.com> wrote:> Hi Elysa, > I think you are going a bit off course in your example. Try this and > see if it is close to what you want: > > data<-rnorm(100)+runif(100,0,15) > smu_data<-supsmu(1:100,data) > rollfun<-function(x,window=10,FUN=sd) { > xlen<-length(x) > xout<-NA > forward<-window%/%2 > backward<-window-forward > for(i in 1:xlen) { > xstart<-i-backward > if(xstart < 1) xstart<-1 > xend<-i+forward-1 > if(xend > xlen) xend<-xlen > xout[i]<-do.call(FUN,list(x[xstart:xend],na.rm=TRUE)) > } > return(xout) > } > mad_data<-rollfun(data,10,mad) > plot(data,ylim=c(0,17)) > library(plotrix) > dispersion(smu_data$x,smu_data$y,mad_data,type="l",interval=TRUE, > fill="lightgray") > lines(smu_data,lwd=2) > points(1:100,data) > > Jim > > > On Fri, Dec 2, 2016 at 7:18 PM, Elysa Mitova <elysa.mitova at gmail.com> > wrote: > > Hi, thank you! > > > > I've constructed the upper and lower bounds with > > > > a <- 2.505766 > > s <- 0.7789832 > > n <- 607 > > error <- qnorm(0.975)*s/sqrt(n) > > left <- a-error > > right <- a+error > > left > > right > > > > Now, I have the numbers I need, but I have no idea how to plot them. I > was > > thinking of using a polygon, but somehow it doesn't work out, because my > > y-axis shows only density and is in itself not a variable? > > > > xx <- data > > > > fit1 <- density(data,na.rm=TRUE) > > > > fit2 <- replicate(10000, { x <- sample(xx, replace=TRUE); > > density(x, na.rm=TRUE, from=min(fit1$x), to=max(fit1$x))$y } ) > > > > fit3 <- apply(fit2, 1, quantile, c(0.025,0.975) ) - Probably herein > > lies the problem? > > > > plot(fit1, ylim=range(fit3)) > > polygon( c(fit1$x, rev(fit1$x)), c(fit3[1,], rev(fit3[2,])), > > col='grey', border=F) > > lines(fit1) > > > > I tried working with this solution I found on the internet, but > > somehow now the lines the shaded areas sporadically everywhere around > > my density plot? I just want a polygon spreading from 2.44 to 2.57 > > along the x-axis. > > > > > > Any tipps? > > > > > > > > > > On Fri, Dec 2, 2016 at 1:24 AM, David Winsemius <dwinsemius at comcast.net> > > wrote: > > > >> > >> > On Dec 1, 2016, at 12:10 PM, Elysa Mitova <elysa.mitova at gmail.com> > >> wrote: > >> > > >> > Hi, > >> > > >> > I am desperately looking for a way to plot confidence intervals into a > >> > density plot of only one variable (not a scatter plot etc.) > >> > > >> > Have you any advice how to do this? > >> > > >> > I've only found manual ways to do with "abline", but this is a rather > >> > bothersome method and only works with ggplot (and not ggplot2). > >> > >> This makes it appear that you expect this to be done in ggplot2 > >> automagically. I suspect you must instead first find the right approach > to > >> construction of those upper and lower bounds before plotting. It's not > >> clear what methods you expect to be needed. Your desperation is not a > >> guide. Perhaps trying a bit of searching? > >> > >> install.packages("sos") > >> library(sos) > >> findFn("confidence intervals density estimates") > >> > >> > >> Delivers quite a few results. Then searching on the text within that > >> webpage you find > >> > >> > >> 208 2 27 54 nprobust kdrobust > 2016-11-14 > >> 16:41:50 27 Kernel Density Estimation with Robust Confidence > >> Intervals > >> 209 2 27 54 nprobust lprobust > 2016-11-14 > >> 16:41:50 27 Local-Polynomial Estimation with Robust Confidence > >> Intervals > >> > >> Is that what you seek? > >> > >> > > >> > Thank you! > >> > > >> > [[alternative HTML version deleted]] > >> I know you just subscribed, so now is the time to read the Posing Guide. > >> > >> => >> > >> David Winsemius > >> Alameda, CA, USA > >> > >> > > > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > > https://stat.ethz.ch/mailman/listinfo/r-help > > PLEASE do read the posting guide http://www.R-project.org/ > posting-guide.html > > and provide commented, minimal, self-contained, reproducible code. >[[alternative HTML version deleted]]
In order to display a polygon, you need x/y pairs for each point. If you just want a rectangle, you only need four x/y pairs, e.g.: plot(0,xlim=x(2.44,2.57),ylim=c(0,1),type="n") polygon(c(2.44,2.57,2.57,2.44),c(0,0,1,1),col="lightgray") Now if you have a series of x values and want to display a band of constant width around it: y_values<-runif(14) plot(seq(2.44,2.57,by=0.01),y_values,ylim=c(-2,3)) dispersion(seq(2.44,2.57,by=0.01),y_values,ulim=rep(0.5,14), type="l",interval=TRUE,col="lightgray") lines(seq(2.44,2.57,by=0.01),y_values) Jim On Fri, Dec 2, 2016 at 8:59 PM, Elysa Mitova <elysa.mitova at gmail.com> wrote:> Thank you, > > this seems to work, but it is not exactly what I need (it indeed looks > great, but a bit beyond my understanding) > > I just need a shaded area between 2.44 to 2.57 along the x-axis - a polygon > inserted into my density plot (and not a confidence line along a scatter > plot like your suggested solution) > > My x-axis is an index (a data frame), my y-axis is the automatically > constructed density > > On Fri, Dec 2, 2016 at 10:01 AM, Jim Lemon <drjimlemon at gmail.com> wrote: >> >> Hi Elysa, >> I think you are going a bit off course in your example. Try this and >> see if it is close to what you want: >> >> data<-rnorm(100)+runif(100,0,15) >> smu_data<-supsmu(1:100,data) >> rollfun<-function(x,window=10,FUN=sd) { >> xlen<-length(x) >> xout<-NA >> forward<-window%/%2 >> backward<-window-forward >> for(i in 1:xlen) { >> xstart<-i-backward >> if(xstart < 1) xstart<-1 >> xend<-i+forward-1 >> if(xend > xlen) xend<-xlen >> xout[i]<-do.call(FUN,list(x[xstart:xend],na.rm=TRUE)) >> } >> return(xout) >> } >> mad_data<-rollfun(data,10,mad) >> plot(data,ylim=c(0,17)) >> library(plotrix) >> dispersion(smu_data$x,smu_data$y,mad_data,type="l",interval=TRUE, >> fill="lightgray") >> lines(smu_data,lwd=2) >> points(1:100,data) >> >> Jim >> >> >> On Fri, Dec 2, 2016 at 7:18 PM, Elysa Mitova <elysa.mitova at gmail.com> >> wrote: >> > Hi, thank you! >> > >> > I've constructed the upper and lower bounds with >> > >> > a <- 2.505766 >> > s <- 0.7789832 >> > n <- 607 >> > error <- qnorm(0.975)*s/sqrt(n) >> > left <- a-error >> > right <- a+error >> > left >> > right >> > >> > Now, I have the numbers I need, but I have no idea how to plot them. I >> > was >> > thinking of using a polygon, but somehow it doesn't work out, because my >> > y-axis shows only density and is in itself not a variable? >> > >> > xx <- data >> > >> > fit1 <- density(data,na.rm=TRUE) >> > >> > fit2 <- replicate(10000, { x <- sample(xx, replace=TRUE); >> > density(x, na.rm=TRUE, from=min(fit1$x), to=max(fit1$x))$y } ) >> > >> > fit3 <- apply(fit2, 1, quantile, c(0.025,0.975) ) - Probably herein >> > lies the problem? >> > >> > plot(fit1, ylim=range(fit3)) >> > polygon( c(fit1$x, rev(fit1$x)), c(fit3[1,], rev(fit3[2,])), >> > col='grey', border=F) >> > lines(fit1) >> > >> > I tried working with this solution I found on the internet, but >> > somehow now the lines the shaded areas sporadically everywhere around >> > my density plot? I just want a polygon spreading from 2.44 to 2.57 >> > along the x-axis. >> > >> > >> > Any tipps? >> > >> > >> > >> > >> > On Fri, Dec 2, 2016 at 1:24 AM, David Winsemius <dwinsemius at comcast.net> >> > wrote: >> > >> >> >> >> > On Dec 1, 2016, at 12:10 PM, Elysa Mitova <elysa.mitova at gmail.com> >> >> wrote: >> >> > >> >> > Hi, >> >> > >> >> > I am desperately looking for a way to plot confidence intervals into >> >> > a >> >> > density plot of only one variable (not a scatter plot etc.) >> >> > >> >> > Have you any advice how to do this? >> >> > >> >> > I've only found manual ways to do with "abline", but this is a rather >> >> > bothersome method and only works with ggplot (and not ggplot2). >> >> >> >> This makes it appear that you expect this to be done in ggplot2 >> >> automagically. I suspect you must instead first find the right approach >> >> to >> >> construction of those upper and lower bounds before plotting. It's not >> >> clear what methods you expect to be needed. Your desperation is not a >> >> guide. Perhaps trying a bit of searching? >> >> >> >> install.packages("sos") >> >> library(sos) >> >> findFn("confidence intervals density estimates") >> >> >> >> >> >> Delivers quite a few results. Then searching on the text within that >> >> webpage you find >> >> >> >> >> >> 208 2 27 54 nprobust kdrobust >> >> 2016-11-14 >> >> 16:41:50 27 Kernel Density Estimation with Robust Confidence >> >> Intervals >> >> 209 2 27 54 nprobust lprobust >> >> 2016-11-14 >> >> 16:41:50 27 Local-Polynomial Estimation with Robust Confidence >> >> Intervals >> >> >> >> Is that what you seek? >> >> >> >> > >> >> > Thank you! >> >> > >> >> > [[alternative HTML version deleted]] >> >> I know you just subscribed, so now is the time to read the Posing >> >> Guide. >> >> >> >> =>> >> >> >> David Winsemius >> >> Alameda, CA, USA >> >> >> >> >> > >> > [[alternative HTML version deleted]] >> > >> > ______________________________________________ >> > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >> > https://stat.ethz.ch/mailman/listinfo/r-help >> > PLEASE do read the posting guide >> > http://www.R-project.org/posting-guide.html >> > and provide commented, minimal, self-contained, reproducible code. > >
Hang on, maybe you mean something like this: erupt_dens<-density(faithful$eruptions) plot(erupt_dens,ylim=c(0,0.65)) dispersion(erupt_dens$x,erupt_dens$y,ulim=erupt_dens$y/5, type="l",fill="lightgray",interval=TRUE) lines(erupt_dens) Jim On Fri, Dec 2, 2016 at 9:36 PM, Jim Lemon <drjimlemon at gmail.com> wrote:> In order to display a polygon, you need x/y pairs for each point. If > you just want a rectangle, you only need four x/y pairs, e.g.: > > plot(0,xlim=x(2.44,2.57),ylim=c(0,1),type="n") > polygon(c(2.44,2.57,2.57,2.44),c(0,0,1,1),col="lightgray") > > Now if you have a series of x values and want to display a band of > constant width around it: > > y_values<-runif(14) > plot(seq(2.44,2.57,by=0.01),y_values,ylim=c(-2,3)) > dispersion(seq(2.44,2.57,by=0.01),y_values,ulim=rep(0.5,14), > type="l",interval=TRUE,col="lightgray") > lines(seq(2.44,2.57,by=0.01),y_values) > > Jim > > On Fri, Dec 2, 2016 at 8:59 PM, Elysa Mitova <elysa.mitova at gmail.com> wrote: >> Thank you, >> >> this seems to work, but it is not exactly what I need (it indeed looks >> great, but a bit beyond my understanding) >> >> I just need a shaded area between 2.44 to 2.57 along the x-axis - a polygon >> inserted into my density plot (and not a confidence line along a scatter >> plot like your suggested solution) >> >> My x-axis is an index (a data frame), my y-axis is the automatically >> constructed density >> >> On Fri, Dec 2, 2016 at 10:01 AM, Jim Lemon <drjimlemon at gmail.com> wrote: >>> >>> Hi Elysa, >>> I think you are going a bit off course in your example. Try this and >>> see if it is close to what you want: >>> >>> data<-rnorm(100)+runif(100,0,15) >>> smu_data<-supsmu(1:100,data) >>> rollfun<-function(x,window=10,FUN=sd) { >>> xlen<-length(x) >>> xout<-NA >>> forward<-window%/%2 >>> backward<-window-forward >>> for(i in 1:xlen) { >>> xstart<-i-backward >>> if(xstart < 1) xstart<-1 >>> xend<-i+forward-1 >>> if(xend > xlen) xend<-xlen >>> xout[i]<-do.call(FUN,list(x[xstart:xend],na.rm=TRUE)) >>> } >>> return(xout) >>> } >>> mad_data<-rollfun(data,10,mad) >>> plot(data,ylim=c(0,17)) >>> library(plotrix) >>> dispersion(smu_data$x,smu_data$y,mad_data,type="l",interval=TRUE, >>> fill="lightgray") >>> lines(smu_data,lwd=2) >>> points(1:100,data) >>> >>> Jim >>> >>> >>> On Fri, Dec 2, 2016 at 7:18 PM, Elysa Mitova <elysa.mitova at gmail.com> >>> wrote: >>> > Hi, thank you! >>> > >>> > I've constructed the upper and lower bounds with >>> > >>> > a <- 2.505766 >>> > s <- 0.7789832 >>> > n <- 607 >>> > error <- qnorm(0.975)*s/sqrt(n) >>> > left <- a-error >>> > right <- a+error >>> > left >>> > right >>> > >>> > Now, I have the numbers I need, but I have no idea how to plot them. I >>> > was >>> > thinking of using a polygon, but somehow it doesn't work out, because my >>> > y-axis shows only density and is in itself not a variable? >>> > >>> > xx <- data >>> > >>> > fit1 <- density(data,na.rm=TRUE) >>> > >>> > fit2 <- replicate(10000, { x <- sample(xx, replace=TRUE); >>> > density(x, na.rm=TRUE, from=min(fit1$x), to=max(fit1$x))$y } ) >>> > >>> > fit3 <- apply(fit2, 1, quantile, c(0.025,0.975) ) - Probably herein >>> > lies the problem? >>> > >>> > plot(fit1, ylim=range(fit3)) >>> > polygon( c(fit1$x, rev(fit1$x)), c(fit3[1,], rev(fit3[2,])), >>> > col='grey', border=F) >>> > lines(fit1) >>> > >>> > I tried working with this solution I found on the internet, but >>> > somehow now the lines the shaded areas sporadically everywhere around >>> > my density plot? I just want a polygon spreading from 2.44 to 2.57 >>> > along the x-axis. >>> > >>> > >>> > Any tipps? >>> > >>> > >>> > >>> > >>> > On Fri, Dec 2, 2016 at 1:24 AM, David Winsemius <dwinsemius at comcast.net> >>> > wrote: >>> > >>> >> >>> >> > On Dec 1, 2016, at 12:10 PM, Elysa Mitova <elysa.mitova at gmail.com> >>> >> wrote: >>> >> > >>> >> > Hi, >>> >> > >>> >> > I am desperately looking for a way to plot confidence intervals into >>> >> > a >>> >> > density plot of only one variable (not a scatter plot etc.) >>> >> > >>> >> > Have you any advice how to do this? >>> >> > >>> >> > I've only found manual ways to do with "abline", but this is a rather >>> >> > bothersome method and only works with ggplot (and not ggplot2). >>> >> >>> >> This makes it appear that you expect this to be done in ggplot2 >>> >> automagically. I suspect you must instead first find the right approach >>> >> to >>> >> construction of those upper and lower bounds before plotting. It's not >>> >> clear what methods you expect to be needed. Your desperation is not a >>> >> guide. Perhaps trying a bit of searching? >>> >> >>> >> install.packages("sos") >>> >> library(sos) >>> >> findFn("confidence intervals density estimates") >>> >> >>> >> >>> >> Delivers quite a few results. Then searching on the text within that >>> >> webpage you find >>> >> >>> >> >>> >> 208 2 27 54 nprobust kdrobust >>> >> 2016-11-14 >>> >> 16:41:50 27 Kernel Density Estimation with Robust Confidence >>> >> Intervals >>> >> 209 2 27 54 nprobust lprobust >>> >> 2016-11-14 >>> >> 16:41:50 27 Local-Polynomial Estimation with Robust Confidence >>> >> Intervals >>> >> >>> >> Is that what you seek? >>> >> >>> >> > >>> >> > Thank you! >>> >> > >>> >> > [[alternative HTML version deleted]] >>> >> I know you just subscribed, so now is the time to read the Posing >>> >> Guide. >>> >> >>> >> =>>> >> >>> >> David Winsemius >>> >> Alameda, CA, USA >>> >> >>> >> >>> > >>> > [[alternative HTML version deleted]] >>> > >>> > ______________________________________________ >>> > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >>> > https://stat.ethz.ch/mailman/listinfo/r-help >>> > PLEASE do read the posting guide >>> > http://www.R-project.org/posting-guide.html >>> > and provide commented, minimal, self-contained, reproducible code. >> >>