<?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 NLPNRR call: Module REML must return a scalar. in SAS/IML Software and Matrix Computations</title>
    <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/NLPNRR-call-Module-REML-must-return-a-scalar/m-p/478579#M4286</link>
    <description>&lt;P&gt;Can someone help me to understand what is going wrong with the following code?&amp;nbsp;&lt;/P&gt;&lt;P&gt;The code is to estimate the covariance parameters employing mixed model analysis with the classical animal model used in breeding. There are 3 fixed effects F1=2 levels, F2=11 levels and F3=2 levels. Individual animals (1413 Nos) are considered as random effects. am is the additive genetic relationship matrix or numerator relationship matrix. The same procedure from proc mixed using REML is tried to implement through the following code.&amp;nbsp; The output from MIVQUE0 module is the starting value for the minimization of -2loglikelihood. I cannot understand why the following error happens.&amp;nbsp;&lt;/P&gt;&lt;DIV class="dijitContentPane dijitBorderContainer-child dijitBorderContainer-dijitContentPane dijitBorderContainerPane dijitAlignCenter"&gt;&lt;DIV&gt;&lt;DIV class="sasSource"&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;1 OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;72&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV class="sasSource"&gt;73 proc iml;&lt;/DIV&gt;&lt;DIV class="sasNote"&gt;NOTE: IML Ready&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;74 USE MAGUR;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;75 READ ALL VAR {Fixed1} INTO F1;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;76 READ ALL VAR {Fixed2} INTO F2;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;77 READ ALL VAR {Fixed3} INTO F3;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;78 READ ALL VAR {Weight} INTO y;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;79 x1=DESIGN(F1);&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;79 x2=DESIGN(F2);&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;79 x3=DESIGN(F3);&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;80 xns=x1||x2||x3;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;80 /** non-singular (full column rank)&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;81 design matrix for fixed effects **/&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;82 x=J (NROW (xns),1,1)||xns;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;82 /** singular&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;83 (over parameterized) design matrix for fixed effects **/&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;84 START matrank (x);&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;84&amp;nbsp; /** matrank computes matrix rank **/&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;85 matrank=ROUND (TRACE (x*GINV(x)));&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;86 RETURN (matrank);&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;87 FINISH;&lt;/DIV&gt;&lt;DIV class="sasNote"&gt;NOTE: Module MATRANK defined.&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;88 a=matrank (x);&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;89 Z=I(1413);&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;89 /** design&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;90 matrix for random effects **/&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;91 USE AMTRIX;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;92 READ ALL VAR _all_ INTO am;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;92 /**Numerator relationship&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;93 matrix from pedigree**/&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;94 n = NROW (x);&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;95 ie = I(1413);&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;96 pi = CONSTANT ("PI");&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;97 START reml (theta) GLOBAL (z,y,xns,am,ie,pi,n,a);&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;98 /** Defining the function -2 (Log Likelihood) **/&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;99 sigma_a =theta[1, 1]*am;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;100 sigma_e = theta[1, 2]*ie;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;101 v = z*sigma_a*z` + sigma_e;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;102 /** Covariance matrix **/&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;103 vinv=inv(v);&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;104 r=y-xns*GINV(xns`*vinv*xns)*xns`*vinv*y;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;105 prod=logabsdet(v)+logabsdet(xns`*vinv*xns)+&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;106 r`*vinv*r+(n-a)*LOG(2*pi);&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;107 RETURN (prod);&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;108 FINISH reml;&lt;/DIV&gt;&lt;DIV class="sasNote"&gt;NOTE: Module REML defined.&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;109 /** MIVQUE (0) **/&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;110 p=ie-x*GINV(x`*x)*x`;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;110 ! /** projection onto x **/;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;111 pz1=p*z*z`;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;112 pz2=p*ie;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;113 mat_a=(TRACE(pz1*pz1)||trace(pz1*pz2))//(TRACE(pz2*pz1)||trace(pz2*pz2));&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;114 mat_b=(y`*pz1*p`*y)//(y`*pz2*p*y);&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;115 mivque0=(GINV(mat_a)*mat_b)`;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;116 print mivque0;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;117 optn = {0 1};&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;118 con={ 0 0 };&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;119 CALL NLPNRR (rc, covs,"reml", mivque0,optn,con);&lt;/DIV&gt;&lt;DIV class="sasError"&gt;&lt;FONT color="#FF0000"&gt;ERROR: NLPNRR call: Module REML must return a scalar.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;120 PRINT covs;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;121&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;122&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;123 OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV class="sasSource"&gt;136&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Tue, 17 Jul 2018 08:20:13 GMT</pubDate>
    <dc:creator>rameezroshan</dc:creator>
    <dc:date>2018-07-17T08:20:13Z</dc:date>
    <item>
      <title>NLPNRR call: Module REML must return a scalar.</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/NLPNRR-call-Module-REML-must-return-a-scalar/m-p/478579#M4286</link>
      <description>&lt;P&gt;Can someone help me to understand what is going wrong with the following code?&amp;nbsp;&lt;/P&gt;&lt;P&gt;The code is to estimate the covariance parameters employing mixed model analysis with the classical animal model used in breeding. There are 3 fixed effects F1=2 levels, F2=11 levels and F3=2 levels. Individual animals (1413 Nos) are considered as random effects. am is the additive genetic relationship matrix or numerator relationship matrix. The same procedure from proc mixed using REML is tried to implement through the following code.&amp;nbsp; The output from MIVQUE0 module is the starting value for the minimization of -2loglikelihood. I cannot understand why the following error happens.&amp;nbsp;&lt;/P&gt;&lt;DIV class="dijitContentPane dijitBorderContainer-child dijitBorderContainer-dijitContentPane dijitBorderContainerPane dijitAlignCenter"&gt;&lt;DIV&gt;&lt;DIV class="sasSource"&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;1 OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;72&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV class="sasSource"&gt;73 proc iml;&lt;/DIV&gt;&lt;DIV class="sasNote"&gt;NOTE: IML Ready&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;74 USE MAGUR;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;75 READ ALL VAR {Fixed1} INTO F1;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;76 READ ALL VAR {Fixed2} INTO F2;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;77 READ ALL VAR {Fixed3} INTO F3;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;78 READ ALL VAR {Weight} INTO y;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;79 x1=DESIGN(F1);&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;79 x2=DESIGN(F2);&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;79 x3=DESIGN(F3);&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;80 xns=x1||x2||x3;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;80 /** non-singular (full column rank)&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;81 design matrix for fixed effects **/&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;82 x=J (NROW (xns),1,1)||xns;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;82 /** singular&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;83 (over parameterized) design matrix for fixed effects **/&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;84 START matrank (x);&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;84&amp;nbsp; /** matrank computes matrix rank **/&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;85 matrank=ROUND (TRACE (x*GINV(x)));&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;86 RETURN (matrank);&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;87 FINISH;&lt;/DIV&gt;&lt;DIV class="sasNote"&gt;NOTE: Module MATRANK defined.&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;88 a=matrank (x);&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;89 Z=I(1413);&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;89 /** design&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;90 matrix for random effects **/&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;91 USE AMTRIX;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;92 READ ALL VAR _all_ INTO am;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;92 /**Numerator relationship&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;93 matrix from pedigree**/&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;94 n = NROW (x);&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;95 ie = I(1413);&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;96 pi = CONSTANT ("PI");&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;97 START reml (theta) GLOBAL (z,y,xns,am,ie,pi,n,a);&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;98 /** Defining the function -2 (Log Likelihood) **/&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;99 sigma_a =theta[1, 1]*am;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;100 sigma_e = theta[1, 2]*ie;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;101 v = z*sigma_a*z` + sigma_e;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;102 /** Covariance matrix **/&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;103 vinv=inv(v);&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;104 r=y-xns*GINV(xns`*vinv*xns)*xns`*vinv*y;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;105 prod=logabsdet(v)+logabsdet(xns`*vinv*xns)+&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;106 r`*vinv*r+(n-a)*LOG(2*pi);&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;107 RETURN (prod);&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;108 FINISH reml;&lt;/DIV&gt;&lt;DIV class="sasNote"&gt;NOTE: Module REML defined.&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;109 /** MIVQUE (0) **/&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;110 p=ie-x*GINV(x`*x)*x`;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;110 ! /** projection onto x **/;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;111 pz1=p*z*z`;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;112 pz2=p*ie;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;113 mat_a=(TRACE(pz1*pz1)||trace(pz1*pz2))//(TRACE(pz2*pz1)||trace(pz2*pz2));&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;114 mat_b=(y`*pz1*p`*y)//(y`*pz2*p*y);&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;115 mivque0=(GINV(mat_a)*mat_b)`;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;116 print mivque0;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;117 optn = {0 1};&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;118 con={ 0 0 };&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;119 CALL NLPNRR (rc, covs,"reml", mivque0,optn,con);&lt;/DIV&gt;&lt;DIV class="sasError"&gt;&lt;FONT color="#FF0000"&gt;ERROR: NLPNRR call: Module REML must return a scalar.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;120 PRINT covs;&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;121&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;122&lt;/DIV&gt;&lt;DIV class="sasSource"&gt;123 OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV class="sasSource"&gt;136&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 17 Jul 2018 08:20:13 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/NLPNRR-call-Module-REML-must-return-a-scalar/m-p/478579#M4286</guid>
      <dc:creator>rameezroshan</dc:creator>
      <dc:date>2018-07-17T08:20:13Z</dc:date>
    </item>
    <item>
      <title>Re: NLPNRR call: Module REML must return a scalar.</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/NLPNRR-call-Module-REML-must-return-a-scalar/m-p/478582#M4287</link>
      <description>&lt;P&gt;This happens because your Function Module REML does not return a 1x1 matrix ie. a scalar. The&amp;nbsp;NLPNRR Subroutine requires that. From the &lt;A href="http://support.sas.com/documentation/cdl/en/imlug/59656/HTML/default/viewer.htm#langref_sect190.htm#imlug_langref_nlpnrr" target="_self"&gt;NLPNRR&amp;nbsp;Documentation&lt;/A&gt;&lt;SPAN&gt;, you can see the small example program&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc iml;
start F_BETTS(x); 
   f = .01 * x[1] * x[1] + x[2] * x[2] - 100.; 
   return(f); 
finish F_BETTS; 

con = {  2. -50.  .   ., 
        50.  50.  .   ., 
        10.  -1. 1. 10.}; 
x = {-1. -1.}; 
optn = {0 2}; 
call nlpnrr(rc,xres,"F_BETTS",x,optn,con); 
quit;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;SPAN&gt;If you change the&amp;nbsp;BETTS Function Module to return a (2x1) vector instead of a scalar, you get that exact error:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc iml;
start F_BETTS(x); 
   f = .01 * x[1] * x[1] + x[2] * x[2] - 100.; 
   return(f//f); 
finish F_BETTS; 

con = {  2. -50.  .   ., 
        50.  50.  .   ., 
        10.  -1. 1. 10.}; 
x = {-1. -1.}; 
optn = {0 2}; 
call nlpnrr(rc,xres,"F_BETTS",x,optn,con); 
quit;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-left" image-alt="Capture.PNG" style="width: 600px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/21802i86658898BEECDACC/image-size/large?v=v2&amp;amp;px=999" role="button" title="Capture.PNG" alt="Capture.PNG" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;So&amp;nbsp;debug and rewrite your REML Function module to return a scalar&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 17 Jul 2018 08:41:14 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/NLPNRR-call-Module-REML-must-return-a-scalar/m-p/478582#M4287</guid>
      <dc:creator>PeterClemmensen</dc:creator>
      <dc:date>2018-07-17T08:41:14Z</dc:date>
    </item>
  </channel>
</rss>

