As I typed in the below code
{parms,f,g,h,retcode}=CML(data,0,&LL,parms);
there encountered a problem which says
Undefined symbols
LL
So please kindly let me know how to solve this.
4 Answers
0
The CML program needs to calculate the user written likelihood function. The way that you tell CML which function is the likelihood function is by passing in a pointer to your likelihood function. The concept of a pointer can sometimes seem confusing, but the basic idea is that the ampersand (&) operator retrieves the address or location where CML can find your likelihood function.
It sounds like what your code is missing is a procedure named LL. Take a look at some of the CML examples in the GAUSSHOME/examples directory (cml1.e, etc). They should be helpful, but here is a partial example. For the sake of brevity, I will assume that our code has already defined the variables data and parms and will not repeat that. What we need to do is create a likelihood procedure and then pass in a pointer to that function.
proc (1) = my_likelihood(x, z); //likelihood calculations here endp; {parms,f,g,h,retcode}=CML(data,0,&my_likelihood,parms);
0
For the likelihood calculation, do we normally have it self-written or we can take from a part of the big thick cml.src? since when I pasted the source code from cml.src, there appears many syntax errors.
one more thing, I have the light version of 9.0, that's no problem to deal with all cml library, right?
newbie.
0
1. The likelihood function is a user supplied procedure. Check out section 2.3 in the manual (cml2.0.pdf). The manual can be found in GAUSSHOME/doc (which if you have GAUSS Light 9.0 would be C:\gausslt9.0\doc by default). You should never need to take any code from cml.src.
2. GAUSS Light 9.0 is compatible with CML. If you are a student, you can contact Aptech and get a newer version of GAUSS Light for free. I would recommend that.
Finally, there is nothing wrong with being a newbie. 🙂 That is how everybody starts.
0
Thank you so much 🙂 I really appreciate your help and support.
Cheers!
Your Answer
4 Answers
The CML program needs to calculate the user written likelihood function. The way that you tell CML which function is the likelihood function is by passing in a pointer to your likelihood function. The concept of a pointer can sometimes seem confusing, but the basic idea is that the ampersand (&) operator retrieves the address or location where CML can find your likelihood function.
It sounds like what your code is missing is a procedure named LL. Take a look at some of the CML examples in the GAUSSHOME/examples directory (cml1.e, etc). They should be helpful, but here is a partial example. For the sake of brevity, I will assume that our code has already defined the variables data and parms and will not repeat that. What we need to do is create a likelihood procedure and then pass in a pointer to that function.
proc (1) = my_likelihood(x, z); //likelihood calculations here endp; {parms,f,g,h,retcode}=CML(data,0,&my_likelihood,parms);
For the likelihood calculation, do we normally have it self-written or we can take from a part of the big thick cml.src? since when I pasted the source code from cml.src, there appears many syntax errors.
one more thing, I have the light version of 9.0, that's no problem to deal with all cml library, right?
newbie.
1. The likelihood function is a user supplied procedure. Check out section 2.3 in the manual (cml2.0.pdf). The manual can be found in GAUSSHOME/doc (which if you have GAUSS Light 9.0 would be C:\gausslt9.0\doc by default). You should never need to take any code from cml.src.
2. GAUSS Light 9.0 is compatible with CML. If you are a student, you can contact Aptech and get a newer version of GAUSS Light for free. I would recommend that.
Finally, there is nothing wrong with being a newbie. 🙂 That is how everybody starts.
Thank you so much 🙂 I really appreciate your help and support.
Cheers!