Statistical programming, matrix languages, and more

Random Number Generating

Reply
Occasional Contributor
Posts: 13

Random Number Generating

[ Edited ]

I'm given these two equations:

                       PDF: f(x) =1/(π(1+x^2))    -∞ ≤ x ≤ ∞                   CDF: F(x) =(1/2) + arctan(x)/π  -∞ ≤ x ≤ ∞
and I am asked to generate 10,000 random numbers using the Inversion Method for Cauchy Distribution.
Here is the code I have started:
PROC IML; 
      n=10000;
      myran = j(n,1, 0); 
      uniform = uniform(myran);
      exponential = (tan(uniform*pi-(pi/2)));
CREATE uniform2 FROM uniform[colname={'x'}];
APPEND FROM uniform;
CREATE exp2 FROM exponential[colname={'y'}];
APPEND FROM exponential;
QUIT;
 
but my log says: "ERROR: (execution) Matrix has not been set to a value." after the exponential statement. 
how do I correct for this? I'm not sure how to account for the -∞ ≤ x ≤ ∞ part. 
subsequently, I am asked to create a subset of the 10000 Cauchy Dist. of random numbers where -10<x<10
 
SAS Super FREQ
Posts: 508

Re: Random Number Generating

Set the scalar pi to a value after you invoke IML.

pi = constant('pi');
Super User
Posts: 10,850

Re: Random Number Generating

IML has build-in function, you can use it .

 

proc iml;
x=j(10000,1,.);
call randseed(12345678);
call randgen(x, 'CAUCHY'); 

create want var{x};
append;
close;
quit;
SAS Super FREQ
Posts: 4,275

Re: Random Number Generating

You asked, "how do I account for the [-infinity, infinity] part?" Here is a hint: What is the range of the expression

uniform*pi - pi/2 ?

Ask yourself how the TAN function behaves on this interval.

 

 

For more about the inverse CDF method of simulating data, see "The inverse CDF method for simulating from a distribution."

Ask a Question
Discussion stats
  • 3 replies
  • 298 views
  • 2 likes
  • 4 in conversation