[R] Generate data - function
Petr Savicky
savicky at cs.cas.cz
Wed Feb 1 12:20:36 CET 2012
On Tue, Jan 31, 2012 at 01:59:13PM -0500, Val wrote:
> Hi petr,
>
> >Can the required density be understood as a piecewise
> >linear function going through 4 or 5 given points?
>
> That is my problem. The function should be nonlinear. However, we can break
> it down to the first 3 or 4 points could be linear and then nonlinear
> function. On the later points can we apply sort of spline function or local
> polynomials?
Hi.
The following is a simpler solution, where we can start
with a function f(x), which is a multiple of the required
density, so it specifies its shape.
#an example, use a function approximating your graphs
f <- function(x) { 0.7 - 1.25*((x - 1)^2 - 0.4)^2 }
#plot function f(x)
x <- seq(0, 2, length=51)
y <- f(x)
plot(x, y, type="l")
#plot an approximate distribution function
xDistr <- x
yDistr <- cumsum(y)/sum(y)
plot(xDistr, yDistr, type="l")
#generate random sample
library(splines)
invDistr <- interpSpline(yDistr, xDistr)
z <- predict(invDistr, runif(100000))$y
#plot the empirical distribution function
lines(sort(z), seq(0, 1, length=length(z)), col=2)
#for a more accurate comparison subtract the line with slope 1/2
plot(xDistr, yDistr - xDistr/2, type="l")
lines(sort(z), seq(0, 1, length=length(z)) - sort(z)/2, col=2)
Hope this helps.
Petr.
More information about the R-help
mailing list