<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/265252</link>
    <title>MATLAB Central Newsreader - MLE - use with Discrete Weibull mean function</title>
    <description>Feed for thread: MLE - use with Discrete Weibull mean function</description>
    <language>en-us</language>
    <copyright>&amp;copy;1994-2012 by MathWorks, Inc.</copyright>
    <webmaster>webmaster@mathworks.com</webmaster>
    <generator>MATLAB Central Newsreader</generator>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <ttl>60</ttl>
    <image>
      <title>MathWorks</title>
      <url>http://www.mathworks.com/images/membrane_icon.gif</url>
    </image>
    <item>
      <pubDate>Sat, 07 Nov 2009 18:31:02 -0500</pubDate>
      <title>MLE - use with Discrete Weibull mean function</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/265252#692914</link>
      <author>Erik Gadzinski</author>
      <description>I am having trouble with an MLE function that was passed along to me.  I am new to MATLAB and am having trouble shooting problems.  I am taking 'v' values that are randomly generated that are discrete numbers that range from 0 to a couple thousand.   In the code, &quot;v' can have a record length of 10, 50, 100, 1000, and 10,000.   In the Llikef function I would like to take the log of the function, but I have been getting log zero when large numbers usually over 1,022 are entered into the function.  So I took the log out.  The thing I need help with is that I want my q and N (eta) values to be positive. The function sometimes outputs negative q's and eta's.  Does anybody know how to do this?  Thank you in advance!&lt;br&gt;
&lt;br&gt;
In the function that(1) = q and that(2) = eta.&lt;br&gt;
vsim are whole numbers that range from 0 to a few thousand&lt;br&gt;
&lt;br&gt;
%find the Mean MLE Fitted Average.&lt;br&gt;
%1) take each record length of 'v' values and plug it into the MLE routine&lt;br&gt;
%2) use the q and eta values generated from that function and plug them&lt;br&gt;
%in the DW mean function&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
slength=1;&lt;br&gt;
elength=recordlength;&lt;br&gt;
meanindex=1;&lt;br&gt;
vsim;&lt;br&gt;
while meanindex&amp;lt;=100&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if sum(vsim(slength:elength))&amp;gt;0&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;x=vsim(slength:elength);&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;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Llikef = @(that)-sum(max(that(1),.00001).^(x.^max(that(2),.00001))-max(that(1),.00001).^((x+1).^max(that(2),.00001)));&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;%Llikef = @(that)-sum(log(max(that(1),.00001).^(x.^max(that(2),.00001))-max(that(1),.00001).^((x+1).^max(that(2),.00001))))&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;that0 = [0.5 1];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[that,Llikef] = fminsearch(Llikef,that0);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;if Llikef&amp;lt;=0&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;that(1)=.5;&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;that(2)=1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else end&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;if that(1)&amp;gt;0&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;&amp;nbsp;q2(meanindex)=that(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;&amp;nbsp;&amp;nbsp;else q2(meanindex)=.5;&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;end&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;if that(2)&amp;gt;0;&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;&amp;nbsp;eta2(meanindex)=that(2);&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;else eta2(meanindex)=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;&amp;nbsp;&amp;nbsp;end&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;N=eta2(meanindex);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;q=q2(meanindex);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;M=1e5;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vm=1:M;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mmlefm(meanindex)= sum(q.^(vm.^N))+(gamma(1/N)*gammainc((M+1)^N*(-log(q)),1/N,'upper'))/(N*(-log(q))^(1/N));&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;meanindex=meanindex+1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;slength=elength+1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;elength=elength+recordlength;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;q2(meanindex)=.5;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;eta2(meanindex)=1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mmlefm(meanindex)=0;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;slength=elength+1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;elength=elength+recordlength;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;meanindex=meanindex+1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&lt;br&gt;
end</description>
    </item>
    <item>
      <pubDate>Sat, 07 Nov 2009 18:59:01 -0500</pubDate>
      <title>Re: MLE - use with Discrete Weibull mean function</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/265252#692918</link>
      <author>Erik Gadzinski</author>
      <description>&quot;Erik Gadzinski&quot; &amp;lt;ergadz@yahoo.com&amp;gt; wrote in message &amp;lt;hd4ed6$l92$1@fred.mathworks.com&amp;gt;...&lt;br&gt;
&amp;gt; I am having trouble with an MLE function that was passed along to me.  I am new to MATLAB and am having trouble shooting problems.  I am taking 'v' values that are randomly generated that are discrete numbers that range from 0 to a couple thousand.   In the code, &quot;v' can have a record length of 10, 50, 100, 1000, and 10,000.   In the Llikef function I would like to take the log of the function, but I have been getting log zero when large numbers usually over 1,022 are entered into the function.  So I took the log out.  The thing I need help with is that I want my q and N (eta) values to be positive. The function sometimes outputs negative q's and eta's.  Does anybody know how to do this?  Thank you in advance!&lt;br&gt;
&lt;br&gt;
In short, how do I make sure that &quot;that&quot; comes back postive in the two lines below: (the rest of the code is below that)&lt;br&gt;
&lt;br&gt;
that0 = [0.5 1];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[that,Llikef] = fminsearch(Llikef,that0)&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; In the function that(1) = q and that(2) = eta.&lt;br&gt;
&amp;gt; vsim are whole numbers that range from 0 to a few thousand&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; %find the Mean MLE Fitted Average.&lt;br&gt;
&amp;gt; %1) take each record length of 'v' values and plug it into the MLE routine&lt;br&gt;
&amp;gt; %2) use the q and eta values generated from that function and plug them&lt;br&gt;
&amp;gt; %in the DW mean function&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; slength=1;&lt;br&gt;
&amp;gt; elength=recordlength;&lt;br&gt;
&amp;gt; meanindex=1;&lt;br&gt;
&amp;gt; vsim;&lt;br&gt;
&amp;gt; while meanindex&amp;lt;=100&lt;br&gt;
&amp;gt;     if sum(vsim(slength:elength))&amp;gt;0&lt;br&gt;
&amp;gt;         x=vsim(slength:elength);&lt;br&gt;
&amp;gt;                 &lt;br&gt;
&amp;gt;         Llikef = @(that)-sum(max(that(1),.00001).^(x.^max(that(2),.00001))-max(that(1),.00001).^((x+1).^max(that(2),.00001)));&lt;br&gt;
&amp;gt;         %Llikef = @(that)-sum(log(max(that(1),.00001).^(x.^max(that(2),.00001))-max(that(1),.00001).^((x+1).^max(that(2),.00001))))&lt;br&gt;
&amp;gt;       &lt;br&gt;
&amp;gt;         that0 = [0.5 1];&lt;br&gt;
&amp;gt;         [that,Llikef] = fminsearch(Llikef,that0);&lt;br&gt;
&amp;gt;         &lt;br&gt;
&amp;gt;         if Llikef&amp;lt;=0&lt;br&gt;
&amp;gt;             that(1)=.5;&lt;br&gt;
&amp;gt;             that(2)=1;&lt;br&gt;
&amp;gt;         else end&lt;br&gt;
&amp;gt;             if that(1)&amp;gt;0&lt;br&gt;
&amp;gt;                   q2(meanindex)=that(1);&lt;br&gt;
&amp;gt;                else q2(meanindex)=.5;&lt;br&gt;
&amp;gt;                end&lt;br&gt;
&amp;gt;                if that(2)&amp;gt;0;&lt;br&gt;
&amp;gt;                   eta2(meanindex)=that(2);&lt;br&gt;
&amp;gt;                else eta2(meanindex)=1;&lt;br&gt;
&amp;gt;                end&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt;         N=eta2(meanindex);&lt;br&gt;
&amp;gt;         q=q2(meanindex);&lt;br&gt;
&amp;gt;         M=1e5;&lt;br&gt;
&amp;gt;         vm=1:M;&lt;br&gt;
&amp;gt;         mmlefm(meanindex)= sum(q.^(vm.^N))+(gamma(1/N)*gammainc((M+1)^N*(-log(q)),1/N,'upper'))/(N*(-log(q))^(1/N));&lt;br&gt;
&amp;gt;         meanindex=meanindex+1;&lt;br&gt;
&amp;gt;         slength=elength+1;&lt;br&gt;
&amp;gt;         elength=elength+recordlength;&lt;br&gt;
&amp;gt;     else&lt;br&gt;
&amp;gt;         q2(meanindex)=.5;&lt;br&gt;
&amp;gt;         eta2(meanindex)=1;&lt;br&gt;
&amp;gt;         mmlefm(meanindex)=0;&lt;br&gt;
&amp;gt;         slength=elength+1;&lt;br&gt;
&amp;gt;         elength=elength+recordlength;&lt;br&gt;
&amp;gt;         meanindex=meanindex+1;&lt;br&gt;
&amp;gt;     end&lt;br&gt;
&amp;gt; end</description>
    </item>
    <item>
      <pubDate>Wed, 11 Nov 2009 15:17:19 -0500</pubDate>
      <title>Re: MLE - use with Discrete Weibull mean function</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/265252#693885</link>
      <author>Peter Perkins</author>
      <description>Erik Gadzinski wrote:&lt;br&gt;
&amp;gt; I am having trouble with an MLE function that was passed along to me.  I am new to MATLAB and am having trouble shooting problems.  I am taking 'v' values that are randomly generated that are discrete numbers that range from 0 to a couple thousand.   In the code, &quot;v' can have a record length of 10, 50, 100, 1000, and 10,000.   In the Llikef function I would like to take the log of the function, but I have been getting log zero when large numbers usually over 1,022 are entered into the function.  So I took the log out.  The thing I need help with is that I want my q and N (eta) values to be positive. The function sometimes outputs negative q's and eta's.  Does anybody know how to do this?  Thank you in advance!&lt;br&gt;
&lt;br&gt;
Erik, I can't exactly tell what your code is intending to do, but you seem to be describing two problems, and perhaps confusing them (they both seem to involve logs):&lt;br&gt;
&lt;br&gt;
&amp;gt; In the Llikef function I would like to take the log of the function, but I have been getting log zero&lt;br&gt;
&lt;br&gt;
You may be referring to a problem where you want to compute the log-likelihood, and do so by first computing the liklihood,and then compute it's log, and find that the likelihood has underflowed to zero.  People usually work _directly_ with the log-likeliohood for just that reason.  So, for eaxmple, the normal log-liklihood is not computed as&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;log(prod(exp(-.5*(x-mu).^2)/sigma))&lt;br&gt;
&lt;br&gt;
but as sum(-.5*(x-mu).^2 - log(sigma))&lt;br&gt;
&lt;br&gt;
or somesuch.&lt;br&gt;
&lt;br&gt;
&amp;gt; The function sometimes outputs negative q's and eta's.&lt;br&gt;
&lt;br&gt;
If that's where the (log-)likelihood surface has it's maximum, that's where FMINSEARCH will go.  It may also be that FMINSEARCH is just taking too big of a step at times.  In any case, reparameterize your model to maximize the log-likelihood with respect to log(q) and log(eta).  Thos new parameters are unrestricted, and when you exponetiate them to get q and eta, you are guaranteed positive values.&lt;br&gt;
&lt;br&gt;
Hope this helps.</description>
    </item>
  </channel>
</rss>

