Hello,
I use Proc severity and i have parameter for GPD distribution,
I would like to use them to simulate an sampling of GPD like a "rand("Weib", 0.25,2.1)"
My parameters are for theta =126998.5 and for xi =0.31954.
If you shows that DATA step and PROC UNIVARIATE call, we can help diagnose the problem.
Reference: p 113 of Wicklin (2013) Simulating Data with SAS
The discussion begins with "you can use the inverse CDF algorithm to simulate random variates." It ends with this DATA step code:
U = rand("Uniform");
X = theta - sigma/alpha * (U**alpha-1);
The three-parameter distribution for the above uses the parameterization documented in PROC UNIVARIATE: theta=threshold, sigma=scale, and alpha=shape.
Thank you for your answer, in my case it doesn't work,
So i try with a analytic inversion of function:
The initial Function of GPD is defined here in proc severity:
with x=(x'-Treshold)
I use this formula :
X'=&Treshold+(((1-rand('uniform'))**(-&&Gpd_xi))-1)*(&&Gpd_theta/&&Gpd_xi)
You say it doesn't work. Please show us the SAS code you are using.
To be honnest it gave me result but the result are different between resimulation with proc univariate and your resimulation.
If you shows that DATA step and PROC UNIVARIATE call, we can help diagnose the problem.
Here is simulation code and PROC UINIVARIATE code that shows agreement between the parameters and the parameter estimates.
/* simulation of generalized pareto distribution */
data GenPareto(keep= X);
alpha = 1/4; /* shape */
sigma = 10; /* scale */
theta = 1.5; /* threshold */
call streaminit(1);
/* support of x is theta + (0, sigma/alpha] = theta + (0,40] */
do i = 1 to 400;
U = rand("Uniform");
X = theta - sigma/alpha * (U**alpha - 1);
output;
end;
run;
proc univariate data=GenPareto;
histogram x / pareto(threshold=1.5); /* parameters are alpha=0.25 sigma=10 */
ods select histogram;
run;
Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.
Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.