[R] Idea/package to "linearize a curve" along the diagonal?

Jeff Newmiller jdnewmil at dcn.davis.ca.us
Mon Mar 12 05:07:57 CET 2012


Aren't you just reinventing the inverse of a function?
---------------------------------------------------------------------------
Jeff Newmiller                        The     .....       .....  Go Live...
DCN:<jdnewmil at 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.levy at 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 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.



More information about the R-help mailing list