MathGroup Archive 2007

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: RandomArray from user defined distribution?

roland franzius wrote:

>> rob wrote:
>>> I'd like to use the RandomArray to produce some data from 
>>> what I think is a Poisson distribution in t
>>> P[t] = a^2 t Exp[-a*t]  where a is mean, sigma.
>>> I see one can use RandomArray to produce sample data from a 
>>> lot of continuous distributions but the Poisson isn't among 
>>> them (it's only available in the discrete form).
>>> I've made a bunch of crippled attempts to force my P[t] to 
>>> put out examples but have failed. Any suggestions? Thanks.
>> Your density is a GammaDistribution[2,3], se e.g.

 >Sir, I email you directly because I can't seem to get my posts 
accepted >every time on mathgroup.
 >Thank you for the suggestion on the Gamma function which is definitely 
 >what I was looking for and had not found in my searches.
 >It appears I need GammaDistribution[2, mean/2] to get what I want.
 >On your other suggestions, I don't follow. Please, what do you mean by >?


(*Perhaps this short example will enable you to apply the method*)

(*an exotic distibution density*)

density[x_] = (#/Integrate[#, {x, 0, ?}] &)[Sin[x^2]^2*Exp[-x^2/12]]

Plot[density[x], {x, 0, 12}, PlotRange -> All, PlotLabel -> "density"];

(*its cumulative distribution function not invertible by algebraic 
methods *)

distribution[x_] = Integrate[density[y], {y, 0, x}]

(*the x -> F(x) plot*)

Plot[distribution[x], {x,0, 8},
PlotRange -> {0, 1}, PlotLabel -> "distibution"]

(* a 1024 point table of points of its inverse y -> F^(-1)(y),
chopping removes small imaginary parts, the small additional increment 
table separates points in the first argument*)

table =
{distribution[x], x}, {x, 0, 12, 12/1024}] +
	Table[{x*10^-7, 0}, {x, 0, 1, 1/1024}];

(* ListPlot showing the inverted graph*)

ListPlot[table, PlotJoined -> True,
     PlotLabel -> "inverse table", PlotRange -> {0, 10}];

(*construct an interpolating pure function Ip from that table*)

Ip = Interpolation[table]

(*shows the same smooth graph *)

Plot[Ip[x], {x, 0.0,
    1.0}, PlotLabel -> "inverse interpolation", PlotRange -> {0, 10}];

(*define a random variable from the uniform distribution on (0, 1) using \
choose := Ip[Random[]]
sample = Table[choose, {10000}]
sorted = Sort[sample];

(* ListPlots sorted and unsorted show a smooth approximation of the 
distribution and the described randomness of raw sample data*)

sorted = Sort[Table[choose, {10000}]];
ListPlot[sorted, PlotLabel -> "sorted sample", PlotRange -> {0, 10}];
ListPlot[sample, PlotLabel -> "unsorted sample", PlotRange -> {0, 10}]

Hope it helps


Roland Franzius

  • Prev by Date: Re: Curve-fitting/data analysis question...
  • Next by Date: Re: Controlling display of frames in a movie
  • Previous by thread: Re: RandomArray from user defined distribution?
  • Next by thread: strikethrough eps