proc (1) = gamesim(para,msel,nobs);
local bet1, bet2,
del1, del2,
alp, alp1, alp2,
pim1, pim2, pid1, pid2,
pm1, pm2, pd1, pd2,
yy,
i;
bet1 = para[1];
del1 = para[2];
bet2 = para[3];
if msel[1] == 1;
del2 = para[4];
elseif msel[1] == 2;
del2 = del1;
endif;
alp1 = para[5];
alp2 = para[6];
alp = alp12_to_alp(para[1:6]');
pim1 = bet1 + rndn(nobs,1);
pim2 = bet2 + rndn(nobs,1);
pid1 = pim1 - del1;
pid2 = pim2 - del2;
yy = zeros(nobs,2);
i = 1;
do until i > nobs;
pm1 = pim1[i];
pm2 = pim2[i];
pd1 = pid1[i];
pd2 = pid2[i];
if (pm1<0) AND (pm2<0); yy[i,.] = (0~0);
elseif (pd1>0) AND (pd2>0); yy[i,.] = (1~1);
elseif (pm1 GE 0) AND (pm2 < 0); yy[i,.] = (1~0);
elseif (pm1 < 0) AND (pm2 GE 0); yy[i,.] = (0~1);
elseif (pd1 GE 0) AND (pm2 GE 0) AND (pd2 < 0); yy[i,.] = (1~0);
elseif (pm1 GE 0) AND (pd1 < 0) AND (pd2 GE 0); yy[i,.] = (0~1);
else;
if rndu(1,1) LE alp;
yy[i,.] = (1~0);
else;
yy[i,.] = (0~1);
endif;
endif;
i = i+1;
endo;
yy = yy~pim1~pim2~pid1~pid2;
retp(yy);
endp;
2 Answers
0
Can anyone explain little about the following three part?
"alp = alp12_to_alp(para[1:6]‘);" I don't understand the logic how do we define variable alp
"if rndu(1,1) LE alp;" why did we put LE alp after rndu(1,1)?
and the line:
yy = yy~pim1~pim2~pid1~pid2;
what does "~" means here.
0
- The line below means: if the 1x1 uniform random number created by rndu is less than or equal to the value of the variable alp.
if rndu(1,1) LE alp;
This line could have been written also this way:
tmp = rndu(1,1); if tmp < alp;
- The line below:
alp = alp12_to_alp(para[1:6]‘);
performs these steps 1) transpose the first 6 elements of para 2) Pass those 6 elements in to a user defined procedure called apl12_to_alp 3) Assign the return from this function call to alp. GAUSS always uses square brackets [] for indexing. Parentheses () are used for function calls and for separating operations i.e. (5*6)+7 vs 5*(6+7)
- The tilde operator ~ performs horizontal concatenation in GAUSS. For example:
a = 5; b = 2; c = a~b;
will assign c to be equal to the row vector:
5 2
The tilde operator works for scalars, vectors and matrices
Your Answer
2 Answers
Can anyone explain little about the following three part?
"alp = alp12_to_alp(para[1:6]‘);" I don't understand the logic how do we define variable alp
"if rndu(1,1) LE alp;" why did we put LE alp after rndu(1,1)?
and the line:
yy = yy~pim1~pim2~pid1~pid2;
what does "~" means here.
- The line below means: if the 1x1 uniform random number created by rndu is less than or equal to the value of the variable alp.
if rndu(1,1) LE alp;
This line could have been written also this way:
tmp = rndu(1,1); if tmp < alp;
- The line below:
alp = alp12_to_alp(para[1:6]‘);
performs these steps 1) transpose the first 6 elements of para 2) Pass those 6 elements in to a user defined procedure called apl12_to_alp 3) Assign the return from this function call to alp. GAUSS always uses square brackets [] for indexing. Parentheses () are used for function calls and for separating operations i.e. (5*6)+7 vs 5*(6+7)
- The tilde operator ~ performs horizontal concatenation in GAUSS. For example:
a = 5; b = 2; c = a~b;
will assign c to be equal to the row vector:
5 2
The tilde operator works for scalars, vectors and matrices