Hello,

Maybe this is a silly question but I am trying to get simulations from a t distribution and cant find it. Any help?

Thanks.

## 3 Answers

0

The simplest way to accomplish this is by using the student-t inverse cdf to transform random uniform numbers like this:

proc (1) = rndT(rw, cl, df); retp(cdftci(rndu(rw, cl), df)); endp;

You can test that the distribution of your numbers is correct by checking to see what percentage of your numbers are less than a certain value and then comparing that with the T-CDF function:

```
rw = 1e5;
cl = 1;
df = 5;
r = rndT(rw, cl, df);
checkVal = 0.37;
comp = cdftc( checkVal, df);
//Since cdftc returns the compliment subtract 1
print (1 - comp);
print (sumc(r .<= checkVal))/rw;
proc (1) = rndT(rw, cl, df);
retp(cdftci(rndu(rw, cl), df));
endp;
```

You can copy and paste the code snippet above to check. With a 'checkVal' of 0.37 both print statements should be about 0.636. You can change 'checkVal' to test other points.

I think there may be a faster method to make the random deviates in terms of the function rndGamma. But, I don't know it off the top of my head.

0

Thanks a lot. Basically my problem started because if you search in the help for this command that you showed me now "rndT", is non existent.

It would be good to include it I believe.

Best

Barbara

0

Sorry, my mistake, this is a function you are creating yourself. Please, disregard my last answer.

Best

Barbara

## Your Answer

## 3 Answers

The simplest way to accomplish this is by using the student-t inverse cdf to transform random uniform numbers like this:

proc (1) = rndT(rw, cl, df); retp(cdftci(rndu(rw, cl), df)); endp;

You can test that the distribution of your numbers is correct by checking to see what percentage of your numbers are less than a certain value and then comparing that with the T-CDF function:

```
rw = 1e5;
cl = 1;
df = 5;
r = rndT(rw, cl, df);
checkVal = 0.37;
comp = cdftc( checkVal, df);
//Since cdftc returns the compliment subtract 1
print (1 - comp);
print (sumc(r .<= checkVal))/rw;
proc (1) = rndT(rw, cl, df);
retp(cdftci(rndu(rw, cl), df));
endp;
```

You can copy and paste the code snippet above to check. With a 'checkVal' of 0.37 both print statements should be about 0.636. You can change 'checkVal' to test other points.

I think there may be a faster method to make the random deviates in terms of the function rndGamma. But, I don't know it off the top of my head.

Thanks a lot. Basically my problem started because if you search in the help for this command that you showed me now "rndT", is non existent.

It would be good to include it I believe.

Best

Barbara

Sorry, my mistake, this is a function you are creating yourself. Please, disregard my last answer.

Best

Barbara