Hello,
What is the precision of the GAUSS function cdfMvn? How can I change that? I learned that I can use cdfMvne to set an error tolerance, but I do not know how to use a cdfmControl structure (I looked examples online and they do not work).
And related to that. I understand that some GAUSS functions can use the different cores of my computer (I have 8 cores) to make faster computations. Is cdfMvn using multi-thread?
Thank you very much,
Sebastian
3 Answers
0
Here are some working examples from the GAUSS 17 command reference page for cdfmvne
Example 1
//Upper limits of integration for K dimensional multivariate distribution x = { 0 0 }; //Identity matrix, indicates //zero correlation between variables R = { 1 0, 0 1 }; //Define non-centrality vector m = { 0, 0 }; //Define control structure struct cdfmControl ctl; ctl = cdfmControlCreate(); //Calculate cumulative probability of //both variables being ≤ 0 {p, err, retcode} = cdfMvne(ctl, x, R, m ); //Calculate joint probablity of two //variables with zero correlation, //both, being ≤ 0 p2 = cdfn(0) .* cdfn(0);
Both p and p2 should equal 0.25.
Example 2: Compute the multivariate normal cdf at 3 separate pairs of upper limits
//Upper limits of integration //x1 ≤ -1 and x2 ≤ -1.1 //x1 ≤ 0 and x2 ≤ 0.1 //x1 ≤ 1 and x2 ≤ 1.1 x = { -1 -1.1, 0 0.1, 1 1.1 }; //Correlation matrix R = { 1 0.31, 0.31 1 }; //Define non-centrality vector m = { 0, 0 }; //Define control structure struct cdfmControl ctl; ctl = cdfmControlCreate(); //Calculate cumulative probability of //each pair of upper limits { p, err, retcode } = cdfMvne(ctl, x, R, m);
0
Hi,
Thank you for your answer. However, those are the examples I already had and they are not helping. My question is how I can modify the attributes of cdfmControlCreate() to be able to set the error tolerance myself. If I understand correctly, those examples you shared are using the default error tolerance.
And also, are cdfMvn or cdfMvne using multi-threading?
What is the default tolerance for cdfMvn and cdfMvne?
Thank you very much,
Sebastian
0
The default values for the cdfmControl structure are:
- Maximum evaluations: 5e5
- Absolute error tolerance: 1e-6
- Relative error tolerance: 1e-12
You can set the members of the cdfmControl structure using the '.' operator. Here is a modified version of the earlier examples, which modifies the control structure:
//Upper limits of integration for K dimensional multivariate distribution x = { 0 0 }; //Identity matrix, indicates //zero correlation between variables R = { 1 0, 0 1 }; //Define non-centrality vector m = { 0, 0 }; //Define control structure struct cdfmControl ctl; //Fill control structure with default values ctl = cdfmControlCreate(); //Adjust tolerance ctl.absErrorTolerance = 1e-4; ctl.relErrorTolerance = 1e-4; //Calculate cumulative probability of //both variables being ≤ 0 {p, err, retcode} = cdfMvne(ctl, x, R, m );
With any structure that is in a loaded library (cdfmControl is loaded by default), after you declare a variable to be an instance of the structure, for example:
//Declare 'ctl' to be a cdfmControl structure struct cdfmControl ctl;
when you enter the name of the structure instance, followed by the 'dot operator':
ctl.
you will get an autocomplete list, containing the names of all members of the structure.
If you right-click on cdfmControlCreate() in the GAUSS Editor and select 'Open function definition', it will show you the code for the procedure. In this case it is just a few lines, applying the default settings.
Your Answer
3 Answers
Here are some working examples from the GAUSS 17 command reference page for cdfmvne
Example 1
//Upper limits of integration for K dimensional multivariate distribution x = { 0 0 }; //Identity matrix, indicates //zero correlation between variables R = { 1 0, 0 1 }; //Define non-centrality vector m = { 0, 0 }; //Define control structure struct cdfmControl ctl; ctl = cdfmControlCreate(); //Calculate cumulative probability of //both variables being ≤ 0 {p, err, retcode} = cdfMvne(ctl, x, R, m ); //Calculate joint probablity of two //variables with zero correlation, //both, being ≤ 0 p2 = cdfn(0) .* cdfn(0);
Both p and p2 should equal 0.25.
Example 2: Compute the multivariate normal cdf at 3 separate pairs of upper limits
//Upper limits of integration //x1 ≤ -1 and x2 ≤ -1.1 //x1 ≤ 0 and x2 ≤ 0.1 //x1 ≤ 1 and x2 ≤ 1.1 x = { -1 -1.1, 0 0.1, 1 1.1 }; //Correlation matrix R = { 1 0.31, 0.31 1 }; //Define non-centrality vector m = { 0, 0 }; //Define control structure struct cdfmControl ctl; ctl = cdfmControlCreate(); //Calculate cumulative probability of //each pair of upper limits { p, err, retcode } = cdfMvne(ctl, x, R, m);
Hi,
Thank you for your answer. However, those are the examples I already had and they are not helping. My question is how I can modify the attributes of cdfmControlCreate() to be able to set the error tolerance myself. If I understand correctly, those examples you shared are using the default error tolerance.
And also, are cdfMvn or cdfMvne using multi-threading?
What is the default tolerance for cdfMvn and cdfMvne?
Thank you very much,
Sebastian
The default values for the cdfmControl structure are:
- Maximum evaluations: 5e5
- Absolute error tolerance: 1e-6
- Relative error tolerance: 1e-12
You can set the members of the cdfmControl structure using the '.' operator. Here is a modified version of the earlier examples, which modifies the control structure:
//Upper limits of integration for K dimensional multivariate distribution x = { 0 0 }; //Identity matrix, indicates //zero correlation between variables R = { 1 0, 0 1 }; //Define non-centrality vector m = { 0, 0 }; //Define control structure struct cdfmControl ctl; //Fill control structure with default values ctl = cdfmControlCreate(); //Adjust tolerance ctl.absErrorTolerance = 1e-4; ctl.relErrorTolerance = 1e-4; //Calculate cumulative probability of //both variables being ≤ 0 {p, err, retcode} = cdfMvne(ctl, x, R, m );
With any structure that is in a loaded library (cdfmControl is loaded by default), after you declare a variable to be an instance of the structure, for example:
//Declare 'ctl' to be a cdfmControl structure struct cdfmControl ctl;
when you enter the name of the structure instance, followed by the 'dot operator':
ctl.
you will get an autocomplete list, containing the names of all members of the structure.
If you right-click on cdfmControlCreate() in the GAUSS Editor and select 'Open function definition', it will show you the code for the procedure. In this case it is just a few lines, applying the default settings.