You said: > Does this make sense? Not to me. I don't understand either of your points. It may be time for you to provide a concrete example of your own (reproducible R code, or at least specific input and output data). --------------------------------------------------------------------------- Jeff Newmiller The ..... ..... Go Live... DCN:<jdnew...@dcn.davis.ca.us> Basics: ##.#. ##.#. Live Go... Live: OO#.. Dead: OO#.. Playing Research Engineer (Solar/Batteries O.O#. #.O#. with /Software/Embedded Controllers) .OO#. .OO#. rocks...1k --------------------------------------------------------------------------- Sent from my phone. Please excuse my brevity.
Emmanuel Levy <emmanuel.l...@gmail.com> wrote: >Hi Jeff, > >Thanks for your reply and the example. > >I'm not sure if it could be applied to the problem I'm facing though, >for two reasons: > >(i) my understanding is that the inverse will associate a new Y >coordinate given an absolute X coordinate. However, in the case I'm >working on, the transformation that has to be applied depends on X >*and* on its position relative to the *normal* of the fitted curve. >This means, for instance, that both X and Y will change after >transformation. > >(ii) the fitted curve can be described by a spline, but I'm not sure >if inverse of such models can be inferred automatically (I don't know >anything about that). > >The procedure I envision is the following: treat the curve "segment by >segment", apply rotation+translation to each segment to bring it on >the >diagonal, and apply the same transformation to all points >corresponding to the same segment (i.e., these are the points that are >close and within the "normal" area covered by the segment). > >Does this make sense? >All the best, > >Emmanuel > > >On 12 March 2012 02:15, Jeff Newmiller <jdnew...@dcn.davis.ca.us> >wrote: >> It is possible that I do not see what you mean, but it seems like the >following code does what you want. The general version of this is >likely to be rather more difficult to do, but in theory the inverse >function seems like what you are trying to accomplish. >> >> x <- 1:20 >> y <- x^2 + rnorm(20) >> >> y.lm <- lm( y ~ I(x^2) + x ) >> plot( x, y ) >> lines( x, predict( y.lm ) ) >> >> qa <- coef(y.lm)["I(x^2)"] >> qb <- coef(y.lm)["x"] >> qc <- coef(y.lm)["(Intercept)"] >> >> # define inverse of known model >> f1 <- function( y ) { ( sqrt( 4*qa*( y -qc ) + qb^2 ) - qb ) / ( 2*qa >) } >> f2 <- function( y ) { -( sqrt( 4*qa*( y -qc ) + qb^2 ) + qb ) / ( >2*qa ) } >> >> plot( x, f1( y ) ) >> >> >> >--------------------------------------------------------------------------- >> Jeff Newmiller The ..... ..... Go >Live... >> DCN:<jdnew...@dcn.davis.ca.us> Basics: ##.#. ##.#. Live >Go... >> Live: OO#.. Dead: OO#.. > Playing >> Research Engineer (Solar/Batteries O.O#. #.O#. with >> /Software/Embedded Controllers) .OO#. .OO#. > rocks...1k >> >--------------------------------------------------------------------------- >> Sent from my phone. Please excuse my brevity. >> >> >> >> Emmanuel Levy <emmanuel.l...@gmail.com> wrote: >> >>>Dear Jeff, >>> >>>I'm sorry but I do not see what you mean. It'd be great if you could >>>let me know in more details what you mean whenever you can. >>> >>>Thanks, >>> >>>Emmanuel >>> >>> >>>On 12 March 2012 00:07, Jeff Newmiller <jdnew...@dcn.davis.ca.us> >>>wrote: >>>> Aren't you just reinventing the inverse of a function? >>>> >>>--------------------------------------------------------------------------- >>>> Jeff Newmiller The ..... ..... Go >>>Live... >>>> DCN:<jdnew...@dcn.davis.ca.us> Basics: ##.#. ##.#. > Live >>>Go... >>>> Live: OO#.. Dead: OO#.. >>> Playing >>>> Research Engineer (Solar/Batteries O.O#. #.O#. > with >>>> /Software/Embedded Controllers) .OO#. .OO#. >>> rocks...1k >>>> >>>--------------------------------------------------------------------------- >>>> Sent from my phone. Please excuse my brevity. >>>> >>>> Emmanuel Levy <emmanuel.l...@gmail.com> wrote: >>>> >>>>>Hi, >>>>> >>>>>I am trying to normalize some data. First I fitted a principal >curve >>>>>(using the LCPM package), but now I would like to apply a >>>>>transformation so that the curve becomes a "straight diagonal line" >>>on >>>>>the plot. The data used to fit the curve would then be normalized >by >>>>>applying the same transformation to it. >>>>> >>>>>A simple solution could be to apply translations only (e.g., as >done >>>>>after a fit using loess), but here rotations would have to be >applied >>>>>as well. One could visualize this as the "stretching of a curve", >>>>>i.e., during such an "unfolding" process, both translations and >>>>>rotations would need to be applied. >>>>> >>>>>Before I embark on this (which would require me remembering long >>>>>forgotten geometry principles) I was wondering if you can think of >>>>>packages or tricks that could make my life simpler? >>>>> >>>>>Thanks for any input, >>>>> >>>>>Emmanuel >>>>> >>>>> >>>>>Below I provide an example - the black curve is to be "brought" >along >>>>>the diagonal, and all data points normal to a "small segment" (of >the >>>>>black curve) would undergo the same transformation as it - what >>>>>"small" is remains to be defined though. >>>>> >>>>> tmp=rnorm(2000) >>>>> X.1 = 5+tmp >>>>> Y.1 = 5+ (5*tmp+rnorm(2000)) >>>>> tmp=rnorm(1000) >>>>> X.2 = 9+tmp >>>>> Y.2 = 40+ (1.5*tmp+rnorm(1000)) >>>>> X.3 = 7+ 0.5*runif(500) >>>>> Y.3 = 15+20*runif(500) >>>>> X = c(X.1,X.2,X.3) >>>>> Y = c(Y.1,Y.2,Y.3) >>>>> >>>>> lpc1 = lpc(cbind(X,Y), scaled=FALSE, h=c(1,1) ) >>>>> plot(lpc1) >>>>> >>>>>______________________________________________ >>>>>R-help@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. >>>> >> ______________________________________________ R-help@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.