<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Product of functions/Variable scope in SAS/IML Software and Matrix Computations</title>
    <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Product-of-functions-Variable-scope/m-p/179927#M1798</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks so much for your reply. &lt;/P&gt;&lt;P&gt;I am posting the entire code for my problem: Obtain the MLE of rho, by maximizing a product of 130 integrals. The integrand is a binomial density function, and one argument to this density function is rho.&lt;/P&gt;&lt;P&gt;There are 3 steps, first to integrans, second to evaluate the integral and the product of all integrals, and finally the maximization.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Below rho , N,D,val,ni,di are all Global variables.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I would like to know if the logic below is fine, or is there anything else I need to consider.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc iml;&lt;/P&gt;&lt;P&gt; &lt;BR /&gt;/* Step 1. */&lt;/P&gt;&lt;P&gt;/*** N, D are the input data ***/&lt;BR /&gt;/*** There are 130 observations of N and D ***/&lt;BR /&gt;/*** There are 130 intergals to be evaluated***/&lt;BR /&gt;/*** (N&lt;I&gt;,D&lt;I&gt;) will be the input to the i-th integral ***/&lt;/I&gt;&lt;/I&gt;&lt;/P&gt;&lt;P&gt;N = j(130,1,1);&amp;nbsp;&amp;nbsp;&amp;nbsp; /*** N is a constant array of 130 values of n_t.Initialized to 1's here&amp;nbsp; ***/&lt;BR /&gt;D = j(130,1,1);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*** D is a constant array of 130 values of d_t.Initialized to 1's here ***/&lt;BR /&gt;ni=0;&lt;BR /&gt;di=0;&lt;/P&gt;&lt;P&gt;result=0;&lt;BR /&gt;gamma = 0.3 ;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*** gamma is a constant. ***/&lt;BR /&gt;val = j(130,1,1);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /***column vector initialized to 1's to hold reslt of the integrations using QUAD ***/&lt;BR /&gt;iter = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*** Iteration counter initialized to 0&amp;nbsp;&amp;nbsp; ***/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* Define the integrand, which will be called by QUAD subroutine.*/&lt;BR /&gt;/*** The inputs ni and di hold the i-th element of N and D ***/&lt;BR /&gt;/*** The function Func will be called&amp;nbsp; by Prod_Of_integral 130 times to evaluate the respective integrals***/&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;start Func(y)&amp;nbsp; GLOBAL(gamma,rho,ni, di,N,D);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /***Note: if iter = i then ni = N&lt;I&gt;; di=D&lt;I&gt;***/&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p = CDF("Normal",(gamma - {sqrt(rho)*quantile("Normal", y)} ) / sqrt(1-rho) );&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /***Handle p if it is outside [0,1]...***/ &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if p &amp;gt;= 1 then p = 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if p &amp;lt;= 0&amp;nbsp; then p =0.01;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; f = pdf("Binomial", di, p, ni);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return( f );&lt;/I&gt;&lt;/I&gt;&lt;/P&gt;&lt;P&gt;finish;&lt;/P&gt;&lt;P&gt; &lt;BR /&gt;/* Step 2. */&lt;BR /&gt;/* Define a function that computes the product of the integrals.*/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;start Prod_Of_Integral(parms) GLOBAL(rho, val,iter,ni,di,N,D); &lt;BR /&gt;/*the optimization parameter is:&amp;nbsp;&amp;nbsp; rho */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rho = parms[1];&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; yinterval = 0 || 1;&amp;nbsp; /* evaluate integral on [0, 1] */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do i = 1 to 130;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*** reset&amp;nbsp; iter&amp;nbsp;&amp;nbsp;&amp;nbsp; ***/&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*** reset ni and di ***/&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; iter = i; ni = N&lt;I&gt;; di = D&lt;I&gt;; &lt;/I&gt;&lt;/I&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call quad(result, "Func", yinterval); /* evaluate integral on [0, 1] */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*** update result***/&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; val&lt;I&gt; =result;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/I&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return(prod(val));&lt;BR /&gt;finish;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* Step 3. */&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;/*Maximize the product of the integrals to obtain MLE for rho using nlpnra */&lt;/P&gt;&lt;P&gt;/* Set up linear constraint 0 &amp;lt; rho &amp;lt; 1 */&lt;BR /&gt;con = {0 ,1} &lt;/P&gt;&lt;P&gt;/* initial guess for solution for rho */&lt;BR /&gt;rho_0 = {0.5};&lt;BR /&gt;/* find maximum of function */&lt;BR /&gt;opt = {1,2} ;&lt;/P&gt;&lt;P&gt;call nlpnra(rc, result, "Prod_Of_Integral", rho_0, opt) blc=con ;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks again for your advice.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 16 Jul 2014 14:04:23 GMT</pubDate>
    <dc:creator>nstdt</dc:creator>
    <dc:date>2014-07-16T14:04:23Z</dc:date>
    <item>
      <title>Product of functions/Variable scope</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Product-of-functions-Variable-scope/m-p/179921#M1792</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;BR /&gt;Hi all,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I need to get the product of 100 integral functions (computed using the quad funciton). Here is some high-level code below.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*** Variables that will be accessed by other functions including QUAD to store the product of itnergrals ***/&lt;/P&gt;&lt;P&gt;/*** val is an array, each of whose elements will hold the value of one integral ***/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;val = j(100,1,1);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*** ni,di, N,D will be global parameters to the function defining the integrand ***/&lt;/P&gt;&lt;P&gt;ni=0;&lt;/P&gt;&lt;P&gt;di=0;&lt;/P&gt;&lt;P&gt;N=j(100,1,1);&lt;/P&gt;&lt;P&gt;D=j(100,1,1);&lt;/P&gt;&lt;P&gt;gamma=k; /*** This is a constant ***/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* Define the integrand, which will be called by QUAD subroutine.*/&lt;BR /&gt;start Func(y)&amp;nbsp; GLOBAL(gamma,rho,ni, di,n,d);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; f = ...;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return( f );&lt;/P&gt;&lt;P&gt;finish;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* Calculate the Product of integrals using Quad */&lt;/P&gt;&lt;P&gt;start Prod_Of_Integral(parms) GLOBAL(rho, val,count,ni,di,N,D);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*** Call QUAD a 100 tiems to evaluate each of 100 integrals ***/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*** Results should be i val&lt;I&gt; ***/&lt;/I&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do i = 1 to 100;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Do stuff&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Reset ni and di to the ith value of N and D&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ni = N&lt;I&gt;; di = D&lt;I&gt;;&lt;/I&gt;&lt;/I&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // QUAD below stores its resultant integral value in val&lt;I&gt; ***/&lt;/I&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call quad(val&lt;I&gt;, "Func", yinterval); /* evaluate integral on [0, 1] */&lt;/I&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do j = 1 to 100;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; prod = prod * val&lt;I&gt;;&lt;/I&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return( prod );&lt;/P&gt;&lt;P&gt;finish;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;My question is: will val be accessible inside QUAD, and will prod hold the resultant product of all the integrals?&lt;/P&gt;&lt;P&gt;Is it possible to reset ni and di to the i-th value in N and D (during the i-th iteration of the DO loop inside Prod_Of_Integral?&lt;/P&gt;&lt;P&gt;I need val to be a global variable, and similarly the parameters ni,di, N,D.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;How do I declare the scope of my variables/ structure the functions&amp;nbsp; to calcualte the product of the integrals?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks for any advice and help.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 15 Jul 2014 13:27:20 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Product-of-functions-Variable-scope/m-p/179921#M1792</guid>
      <dc:creator>nstdt</dc:creator>
      <dc:date>2014-07-15T13:27:20Z</dc:date>
    </item>
    <item>
      <title>Re: Product of functions/Variable scope</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Product-of-functions-Variable-scope/m-p/179922#M1793</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;You need to modify the line:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;call quad(val&lt;I&gt;, "Func", yinterval); /* evaluate integral on [0, 1] */&lt;/I&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;val&lt;I&gt; will not be replaced by the quad call. do&lt;/I&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;call quad(result, "Func", yinterval); /* evaluate integral on [0, 1] */&lt;/P&gt;&lt;P&gt;val&lt;I&gt; = result;&lt;/I&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 15 Jul 2014 14:04:06 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Product-of-functions-Variable-scope/m-p/179922#M1793</guid>
      <dc:creator>Hutch_sas</dc:creator>
      <dc:date>2014-07-15T14:04:06Z</dc:date>
    </item>
    <item>
      <title>Re: Product of functions/Variable scope</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Product-of-functions-Variable-scope/m-p/179923#M1794</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;...and then delete the last DO loop and just say&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; return( prod(val) );&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;However, if the integral values are large, you'll be facing an overflow.&amp;nbsp; For example, if each integral has the value 2, then the product will be 2##100.&amp;nbsp; It is numerically safer to work on the log scale and return log(prod(val) = sum(log(val)).&lt;/P&gt;&lt;P&gt;The expression sum(log(val)) won't overflow.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Nothing in what you've said requires val, count, N, or D need to be global variables, but maybe there are additional reasons that are unstated.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 15 Jul 2014 14:18:43 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Product-of-functions-Variable-scope/m-p/179923#M1794</guid>
      <dc:creator>Rick_SAS</dc:creator>
      <dc:date>2014-07-15T14:18:43Z</dc:date>
    </item>
    <item>
      <title>Re: Product of functions/Variable scope</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Product-of-functions-Variable-scope/m-p/179924#M1795</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks for your reply again. &lt;/P&gt;&lt;P&gt;You said that val, count, N, D don't need to be global variables in this problem(I have presented all the necessary information; though this problem is really a continuation of my earlier post about Maximizing Integrals to which you also replied. The third piece here is the Maximization done by calling NLPNRA, where the variable&amp;nbsp; rho will be&amp;nbsp; a global parameter).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Inside the &lt;SPAN style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;Prod_Of_Integral&lt;/SPAN&gt; function, I reset the value of ni and di to equal N&lt;I&gt; and D&lt;I&gt; respectively. If they are not global, how could I access their values from inside a function?&lt;/I&gt;&lt;/I&gt;&lt;/P&gt;&lt;P&gt;N and D are may 100-length data vectors in the "main" scope, but&amp;nbsp; inside the function Func, I need the only the i-th elements of N and D to be processed in the i-th iteration.(From my earlier post, f is a binomial density. and ni and di are the parameters. I have 100 observations of ni and di).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The idea is that, at the i-th iteration of the DO loop in &lt;SPAN style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;Prod_Of_Integral&lt;/SPAN&gt;, the corresponding i-th call to QUAD will evaluate an integral with integrand f(ni,di) = Bin(ni,di), where f(ni,di) is computed by Func. I need to pass all the pairs (ni,di) to Func successively, before each result of Func is integrated by QUAD. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Then, the result of the call to QUAD(the result of the integration) will be stored in variable result(as per Hutch above) and then stored in val&lt;I&gt;.&lt;/I&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Then I take the product over all elements of val, giving the product of the integrals, which is then maximized, when I call NLPNRA:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;rho_0={0.5};&lt;/P&gt;&lt;P&gt;call NLPNRA(rc,res,"&lt;SPAN style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;Prod_Of_Integral&lt;/SPAN&gt;", rho_0);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So,in order to access the values of ni and di outside MAIN scope, as above,don't I need them to be global?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks again for your advice and insights!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 15 Jul 2014 17:09:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Product-of-functions-Variable-scope/m-p/179924#M1795</guid>
      <dc:creator>nstdt</dc:creator>
      <dc:date>2014-07-15T17:09:18Z</dc:date>
    </item>
    <item>
      <title>Re: Product of functions/Variable scope</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Product-of-functions-Variable-scope/m-p/179925#M1796</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Yes, N and D should be global if Prod_Of_Integral will be an objective function. Sorry for the confusion.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 15 Jul 2014 17:17:24 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Product-of-functions-Variable-scope/m-p/179925#M1796</guid>
      <dc:creator>Rick_SAS</dc:creator>
      <dc:date>2014-07-15T17:17:24Z</dc:date>
    </item>
    <item>
      <title>Re: Product of functions/Variable scope</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Product-of-functions-Variable-scope/m-p/179926#M1797</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks so much for your reply.&lt;/P&gt;&lt;P&gt;I am posting the entire code for my problem: Obtain the MLE of rho, by maximizing a product of 130 integrals. The integrand is a binomial density function, and one argument to this density function is rho.&lt;/P&gt;&lt;P&gt;There are 3 steps, first to integrans, second to evaluate the integral and the product of all integrals, and finally the maximization.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Below rho , N,D,val,ni,di are all Global variables.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I would like to know if the logic below is fine, or is there anything else I need to consider.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc iml;&lt;/P&gt;&lt;P&gt; &lt;BR /&gt;/* Step 1. */&lt;/P&gt;&lt;P&gt;/*** N, D are the input data ***/&lt;BR /&gt;/*** There are 130 observations of N and D ***/&lt;BR /&gt;/*** There are 130 intergals to be evaluated***/&lt;BR /&gt;/*** (N&lt;I&gt;,D&lt;I&gt;) will be the input to the i-th integral ***/&lt;/I&gt;&lt;/I&gt;&lt;/P&gt;&lt;P&gt;N = j(130,1,1);&amp;nbsp;&amp;nbsp;&amp;nbsp; /*** N is a constant array of 130 values of n_t.Initialized to 1's here&amp;nbsp; ***/&lt;BR /&gt;D = j(130,1,1);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*** D is a constant array of 130 values of d_t.Initialized to 1's here ***/&lt;BR /&gt;ni=0;&lt;BR /&gt;di=0;&lt;/P&gt;&lt;P&gt;result=0;&lt;BR /&gt;gamma = 0.3 ;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*** gamma is a constant. ***/&lt;BR /&gt;val = j(130,1,1);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /***column vector initialized to 1's to hold reslt of the integrations using QUAD ***/&lt;BR /&gt;iter = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*** Iteration counter initialized to 0&amp;nbsp;&amp;nbsp; ***/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* Define the integrand, which will be called by QUAD subroutine.*/&lt;BR /&gt;/*** The inputs ni and di hold the i-th element of N and D ***/&lt;BR /&gt;/*** The function Func will be called&amp;nbsp; by Prod_Of_integral 130 times to evaluate the respective integrals***/&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;start Func(y)&amp;nbsp; GLOBAL(gamma,rho,ni, di,N,D);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /***Note: if iter = i then ni = N&lt;I&gt;; di=D&lt;I&gt;***/&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p = CDF("Normal",(gamma - {sqrt(rho)*quantile("Normal", y)} ) / sqrt(1-rho) );&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /***Handle p if it is outside [0,1]...***/ &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if p &amp;gt;= 1 then p = 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if p &amp;lt;= 0&amp;nbsp; then p =0.01;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; f = pdf("Binomial", di, p, ni);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return( f );&lt;/I&gt;&lt;/I&gt;&lt;/P&gt;&lt;P&gt;finish;&lt;/P&gt;&lt;P&gt; &lt;BR /&gt;/* Step 2. */&lt;BR /&gt;/* Define a function that computes the product of the integrals.*/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;start Prod_Of_Integral(parms) GLOBAL(rho, val,iter,ni,di,N,D); &lt;BR /&gt;/*the optimization parameter is:&amp;nbsp;&amp;nbsp; rho */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rho = parms[1];&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; yinterval = 0 || 1;&amp;nbsp; /* evaluate integral on [0, 1] */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do i = 1 to 130;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*** reset&amp;nbsp; iter&amp;nbsp;&amp;nbsp;&amp;nbsp; ***/&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*** reset ni and di ***/&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; iter = i; ni = N&lt;I&gt;; di = D&lt;I&gt;; &lt;/I&gt;&lt;/I&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call quad(result, "Func", yinterval); /* evaluate integral on [0, 1] */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*** update result***/&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; val&lt;I&gt; =result;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/I&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return(prod(val));&lt;BR /&gt;finish;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* Step 3. */&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;/*Maximize the product of the integrals to obtain MLE for rho using nlpnra */&lt;/P&gt;&lt;P&gt;/* Set up linear constraint 0 &amp;lt; rho &amp;lt; 1 */&lt;BR /&gt;con = {0 ,1} &lt;/P&gt;&lt;P&gt;/* initial guess for solution for rho */&lt;BR /&gt;rho_0 = {0.5};&lt;BR /&gt;/* find maximum of function */&lt;BR /&gt;opt = {1,2} ;&lt;/P&gt;&lt;P&gt;call nlpnra(rc, result, "Prod_Of_Integral", rho_0, opt) blc=con ;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks again for your advice.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 16 Jul 2014 14:03:40 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Product-of-functions-Variable-scope/m-p/179926#M1797</guid>
      <dc:creator>nstdt</dc:creator>
      <dc:date>2014-07-16T14:03:40Z</dc:date>
    </item>
    <item>
      <title>Re: Product of functions/Variable scope</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Product-of-functions-Variable-scope/m-p/179927#M1798</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks so much for your reply. &lt;/P&gt;&lt;P&gt;I am posting the entire code for my problem: Obtain the MLE of rho, by maximizing a product of 130 integrals. The integrand is a binomial density function, and one argument to this density function is rho.&lt;/P&gt;&lt;P&gt;There are 3 steps, first to integrans, second to evaluate the integral and the product of all integrals, and finally the maximization.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Below rho , N,D,val,ni,di are all Global variables.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I would like to know if the logic below is fine, or is there anything else I need to consider.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc iml;&lt;/P&gt;&lt;P&gt; &lt;BR /&gt;/* Step 1. */&lt;/P&gt;&lt;P&gt;/*** N, D are the input data ***/&lt;BR /&gt;/*** There are 130 observations of N and D ***/&lt;BR /&gt;/*** There are 130 intergals to be evaluated***/&lt;BR /&gt;/*** (N&lt;I&gt;,D&lt;I&gt;) will be the input to the i-th integral ***/&lt;/I&gt;&lt;/I&gt;&lt;/P&gt;&lt;P&gt;N = j(130,1,1);&amp;nbsp;&amp;nbsp;&amp;nbsp; /*** N is a constant array of 130 values of n_t.Initialized to 1's here&amp;nbsp; ***/&lt;BR /&gt;D = j(130,1,1);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*** D is a constant array of 130 values of d_t.Initialized to 1's here ***/&lt;BR /&gt;ni=0;&lt;BR /&gt;di=0;&lt;/P&gt;&lt;P&gt;result=0;&lt;BR /&gt;gamma = 0.3 ;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*** gamma is a constant. ***/&lt;BR /&gt;val = j(130,1,1);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /***column vector initialized to 1's to hold reslt of the integrations using QUAD ***/&lt;BR /&gt;iter = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*** Iteration counter initialized to 0&amp;nbsp;&amp;nbsp; ***/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* Define the integrand, which will be called by QUAD subroutine.*/&lt;BR /&gt;/*** The inputs ni and di hold the i-th element of N and D ***/&lt;BR /&gt;/*** The function Func will be called&amp;nbsp; by Prod_Of_integral 130 times to evaluate the respective integrals***/&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;start Func(y)&amp;nbsp; GLOBAL(gamma,rho,ni, di,N,D);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /***Note: if iter = i then ni = N&lt;I&gt;; di=D&lt;I&gt;***/&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p = CDF("Normal",(gamma - {sqrt(rho)*quantile("Normal", y)} ) / sqrt(1-rho) );&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /***Handle p if it is outside [0,1]...***/ &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if p &amp;gt;= 1 then p = 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if p &amp;lt;= 0&amp;nbsp; then p =0.01;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; f = pdf("Binomial", di, p, ni);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return( f );&lt;/I&gt;&lt;/I&gt;&lt;/P&gt;&lt;P&gt;finish;&lt;/P&gt;&lt;P&gt; &lt;BR /&gt;/* Step 2. */&lt;BR /&gt;/* Define a function that computes the product of the integrals.*/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;start Prod_Of_Integral(parms) GLOBAL(rho, val,iter,ni,di,N,D); &lt;BR /&gt;/*the optimization parameter is:&amp;nbsp;&amp;nbsp; rho */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rho = parms[1];&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; yinterval = 0 || 1;&amp;nbsp; /* evaluate integral on [0, 1] */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do i = 1 to 130;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*** reset&amp;nbsp; iter&amp;nbsp;&amp;nbsp;&amp;nbsp; ***/&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*** reset ni and di ***/&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; iter = i; ni = N&lt;I&gt;; di = D&lt;I&gt;; &lt;/I&gt;&lt;/I&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call quad(result, "Func", yinterval); /* evaluate integral on [0, 1] */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*** update result***/&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; val&lt;I&gt; =result;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/I&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return(prod(val));&lt;BR /&gt;finish;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* Step 3. */&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;/*Maximize the product of the integrals to obtain MLE for rho using nlpnra */&lt;/P&gt;&lt;P&gt;/* Set up linear constraint 0 &amp;lt; rho &amp;lt; 1 */&lt;BR /&gt;con = {0 ,1} &lt;/P&gt;&lt;P&gt;/* initial guess for solution for rho */&lt;BR /&gt;rho_0 = {0.5};&lt;BR /&gt;/* find maximum of function */&lt;BR /&gt;opt = {1,2} ;&lt;/P&gt;&lt;P&gt;call nlpnra(rc, result, "Prod_Of_Integral", rho_0, opt) blc=con ;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks again for your advice.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 16 Jul 2014 14:04:23 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Product-of-functions-Variable-scope/m-p/179927#M1798</guid>
      <dc:creator>nstdt</dc:creator>
      <dc:date>2014-07-16T14:04:23Z</dc:date>
    </item>
  </channel>
</rss>

