Here is a test code to calculate the derivative of a curve in sliding windows. I generated a linear example, and it should plot the derivative in a straight line. But, it does not?! -------------- x = seq(0,10,by=0.1) y = x * 0.5 + 0.1 window=15; half = floor( window/2) x2 = half: (length(x)-half) ; slope = half: (length(x)-half) ; count = 1; for( i in half: (length(x)-half) ) { pos = (i-half):(i+half) m = lm( y[pos] ~ x[pos]) x2[count] = x[i] slope[count] = m$coeff[2]; count = count + 1; } plot( slope ~ x2, type='l' ) #does not give a straight line, why? [[alternative HTML version deleted]]
David Winsemius
2011-Mar-08 12:48 UTC
[R] problem in plot after calculating the derivative
On Mar 8, 2011, at 12:39 AM, Hong Qin wrote:> Here is a test code to calculate the derivative of a curve in sliding > windows. I generated a linear example, and it should plot the > derivative in > a straight line. But, it does not?!Try adding ylim=c(0.1). You will get your straight line. I consider the current behavior (of not labeling the y axis and producing a jagged line when given a series of values whose successive differences are below machine tolerances to be a bug. the output from print would lead you do think they were equal, but if you use diff(slope you find that they are slightly variable.)> > -------------- > x = seq(0,10,by=0.1) > y = x * 0.5 + 0.1 > > window=15; > half = floor( window/2) > > x2 = half: (length(x)-half) ; > slope = half: (length(x)-half) ; > > count = 1; > for( i in half: (length(x)-half) ) { > pos = (i-half):(i+half) > m = lm( y[pos] ~ x[pos]) > x2[count] = x[i] > slope[count] = m$coeff[2]; > count = count + 1; > } > > plot( slope ~ x2, type='l' ) #does not give a straight line, why? > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list > 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.David Winsemius, MD West Hartford, CT