An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20110504/6e61beb3/attachment.pl>
help with the maxBHHH routine
6 messages · Andrew Robinson, Ravi Varadhan, Arne Henningsen +1 more
I suggest that you provide some commented, minimal, self-contained, reproducible code. Cheers Andrew
On Wed, May 04, 2011 at 02:23:29AM +0530, Rohit Pandey wrote:
Hello R community, I have been using R's inbuilt maximum likelihood functions, for the different methods (NR, BFGS, etc). I have figured out how to use all of them except the maxBHHH function. This one is different from the others as it requires an observation level gradient. I am using the following syntax: maxBHHH(logLik,grad=nuGradient,finalHessian="BHHH",start=prm,iterlim=2) where logLik is the likelihood function and returns a vector of observation level likelihoods and nuGradient is a function that returns a matrix with each row corresponding to a single observation and the columns corresponding to the gradient values for each parameter (as is mentioned in the online help). however, this gives me the following error: *Error in checkBhhhGrad(g = gr, theta = theta, analytic = (!is.null(attr(f, : the matrix returned by the gradient function (argument 'grad') must have at least as many rows as the number of parameters (10), where each row must correspond to the gradients of the log-likelihood function of an individual (independent) observation: currently, there are (is) 10 parameter(s) but the gradient matrix has only 2 row(s) * It seems it is expecting as many rows as there are parameters. So, I changed my likelihood function so that it would return the transpose of the earlier matrix (hence returning a matrix with rows equaling parameters and columns, observations). However, when I run the function again, I still get an error: *Error in gr[, fixed] <- NA : (subscript) logical subscript too long* I have verified that my gradient function, when summed across observations gives the same results as the in built numerical gradient (to the 11th decimal place - after that, they differ since R's function is numerical). I am trying to run a very large estimation (1000's of observations and 821 parameters) and all of the other methods are taking way too much time (days). This method is our last hope and so, any help will be greatly appreciated. -- Thanks in advance, Rohit Mob: 91 9819926213 [[alternative HTML version deleted]]
______________________________________________ R-help at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.
Andrew Robinson Program Manager, ACERA Department of Mathematics and Statistics Tel: +61-3-8344-6410 University of Melbourne, VIC 3010 Australia (prefer email) http://www.ms.unimelb.edu.au/~andrewpr Fax: +61-3-8344-4599 http://www.acera.unimelb.edu.au/ Forest Analytics with R (Springer, 2011) http://www.ms.unimelb.edu.au/FAwR/ Introduction to Scientific Programming and Simulation using R (CRC, 2009): http://www.ms.unimelb.edu.au/spuRs/
maxBHHH is *not* an in-built R function. It is in a distributed package called "maxLik". Always tell us which package is being used so that it is easier for us to help you. The error message says that the gradient function is returning a 10 x 2 matrix, whereas you say that you have 1000's of observations and 821 parameters. Show us a simplified version of your problem. It is difficult to help you without seeing an example. Also, try running w/o the gradient and see how it works. This is not the answer you wanted, but we cannot help you w/o seeing your example. Ravi.
From: r-help-bounces at r-project.org [r-help-bounces at r-project.org] On Behalf Of Rohit Pandey [rohitpandey576 at gmail.com]
Sent: Tuesday, May 03, 2011 4:53 PM
To: r-help at r-project.org
Subject: [R] help with the maxBHHH routine
Sent: Tuesday, May 03, 2011 4:53 PM
To: r-help at r-project.org
Subject: [R] help with the maxBHHH routine
Hello R community,
I have been using R's inbuilt maximum likelihood functions, for the
different methods (NR, BFGS, etc).
I have figured out how to use all of them except the maxBHHH function. This
one is different from the others as it requires an observation level
gradient.
I am using the following syntax:
maxBHHH(logLik,grad=nuGradient,finalHessian="BHHH",start=prm,iterlim=2)
where logLik is the likelihood function and returns a vector of observation
level likelihoods and nuGradient is a function that returns a matrix with
each row corresponding to a single observation and the columns corresponding
to the gradient values for each parameter (as is mentioned in the online
help).
however, this gives me the following error:
*Error in checkBhhhGrad(g = gr, theta = theta, analytic = (!is.null(attr(f,
:
the matrix returned by the gradient function (argument 'grad') must have
at least as many rows as the number of parameters (10), where each row must
correspond to the gradients of the log-likelihood function of an individual
(independent) observation:
currently, there are (is) 10 parameter(s) but the gradient matrix has only
2 row(s)
*
It seems it is expecting as many rows as there are parameters. So, I changed
my likelihood function so that it would return the transpose of the earlier
matrix (hence returning a matrix with rows equaling parameters and columns,
observations).
However, when I run the function again, I still get an error:
*Error in gr[, fixed] <- NA : (subscript) logical subscript too long*
I have verified that my gradient function, when summed across observations
gives the same results as the in built numerical gradient (to the 11th
decimal place - after that, they differ since R's function is numerical).
I am trying to run a very large estimation (1000's of observations and 821
parameters) and all of the other methods are taking way too much time
(days). This method is our last hope and so, any help will be greatly
appreciated.
--
Thanks in advance,
Rohit
Mob: 91 9819926213
[[alternative HTML version deleted]]
______________________________________________
R-help at r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Dear Rohit
On 3 May 2011 22:53, Rohit Pandey <rohitpandey576 at gmail.com> wrote:
Hello R community, I have been using R's inbuilt maximum likelihood functions, for the different methods (NR, BFGS, etc). I have figured out how to use all of them except the maxBHHH function. This one is different from the others as it requires an observation level gradient. I am using the following syntax: maxBHHH(logLik,grad=nuGradient,finalHessian="BHHH",start=prm,iterlim=2) where logLik is the likelihood function and returns a vector of observation level likelihoods and nuGradient is a function that returns a matrix with each row corresponding to a single observation and the columns corresponding to the gradient values for each parameter (as is mentioned in the online help). however, this gives me the following error: *Error in checkBhhhGrad(g = gr, theta = theta, analytic = (!is.null(attr(f, : ?the matrix returned by the gradient function (argument 'grad') must have at least as many rows as the number of parameters (10), where each row must correspond to the gradients of the log-likelihood function of an individual (independent) observation: ?currently, there are (is) 10 parameter(s) but the gradient matrix has only 2 row(s) * It seems it is expecting as many rows as there are parameters. So, I changed my likelihood function so that it would return the transpose of the earlier matrix (hence returning a matrix with rows equaling parameters and columns, observations). However, when I run the function again, I still get an error: *Error in gr[, fixed] <- NA : (subscript) logical subscript too long* I have verified that my gradient function, when summed across observations gives the same results as the in built numerical gradient (to the 11th decimal place - after that, they differ since R's function is numerical). I am trying to run a very large estimation (1000's of observations and 821 parameters) and all of the other methods are taking way too much time (days). This method is our last hope and so, any help will be greatly appreciated.
Please make yourself familiar with the BHHH algorithm and read the documentation of maxBHHH: it says about argument "grad": "[...] If the BHHH method is used, ?grad? must return a matrix, where rows correspond to the gradient vectors of individual observations and the columns to the individual parameters.[...]" More information of the maxLik package is available at: http://dx.doi.org/10.1007/s00180-010-0217-1 Best regards, Arne
Arne Henningsen http://www.arne-henningsen.name
Hi Andrew, Ravi and Arne, Thank you so much for your prompt replies. I see that all of you mention the need for simple, reproducible code. I had thought of doing this, but the functions I was using for the observation level gradient and likelihood function were very long. I will paste them below here. Also, sorry for the ambiguity with the "1000's of observations and 821 parameters" on the one hand and the 10 * 2 matrix on the other. The latter is a toy data set and the former is the real data set I ultimately hope to apply this routine to once it works. Also, sorry for not mentioning the fact that the maxBHHH function I am using is from the maxLik package (thanks, Ravi for pointing out). So, the code that is giving me the errors is: maxBHHH(logLikALS4,grad=nuGradientC4,finalHessian="BHHH",start=prm,iterlim=2) and maxBHHH(logLikALS4,grad=nuGradientC4,finalHessian="BHHH",start=prm,iterlim=2) Where nuGradientC4 returns a 2*10 matrix and nuGradientC5 a 10*2 matrix (there are 10 parameters and 2 observations). I have attached the required functions in the .R file. These make for some pretty long code, but all you have to do is either load the file or paste the contents into your R console (and maybe see that they're returning what they're supposed to). I'm sorry I couldn't think of a way to come up with a shorter version of this code (I tried my best). Once you load the file, you should see the following: #The observation level likelihood function
logLikALS4(prm)
1 2 -0.6931472 -0.6931472 #The observation level gradients
nuGradientC4(prm)
1 2 3 4 5 6 7 8 9 10 2 -0.3518519 0.3518519 0.0000000 0 -0.1481481 -0.1666667 0.1481481 0.1666667 0.0000000 0.0000000 4 0.0000000 -0.3518519 0.3518519 0 0.0000000 0.0000000 -0.1666667 -0.1481481 0.1666667 0.1481481 Warning messages: 1: In is.na(x) : is.na() applied to non-(list or vector) of type 'NULL' 2: In is.na(x) : is.na() applied to non-(list or vector) of type 'NULL'
nuGradientC5(prm)
2 4 1 -0.3518519 0.0000000 2 0.3518519 -0.3518519 3 0.0000000 0.3518519 4 0.0000000 0.0000000 5 -0.1481481 0.0000000 6 -0.1666667 0.0000000 7 0.1481481 -0.1666667 8 0.1666667 -0.1481481 9 0.0000000 0.1666667 10 0.0000000 0.1481481 Warning messages: 1: In is.na(x) : is.na() applied to non-(list or vector) of type 'NULL' 2: In is.na(x) : is.na() applied to non-(list or vector) of type 'NULL' Ignore the warning messages. The errors are:
maxBHHH(logLikALS4,grad=nuGradientC4,finalHessian="BHHH",start=prm,iterlim=2) Error in checkBhhhGrad(g = gr, theta = theta, analytic = (!is.null(attr(f, : the matrix returned by the gradient function (argument 'grad') must have at least as many rows as the number of parameters (10), where each row must correspond to the gradients of the log-likelihood function of an individual (independent) observation: currently, there are (is) 10 parameter(s) but the gradient matrix has only 2 row(s) In addition: Warning messages: 1: In is.na(x) : is.na() applied to non-(list or vector) of type 'NULL' 2: In is.na(x) : is.na() applied to non-(list or vector) of type 'NULL' and:
maxBHHH(logLikALS4,grad=nuGradientC5,finalHessian="BHHH",start=prm,iterlim=2) Error in gr[, fixed] <- NA : (subscript) logical subscript too long In addition: Warning messages: 1: In is.na(x) : is.na() applied to non-(list or vector) of type 'NULL' 2: In is.na(x) : is.na() applied to non-(list or vector) of type 'NULL' Again, thanks for your patience and help. Rohit On Wed, May 4, 2011 at 4:44 AM, Andrew Robinson <
A.Robinson at ms.unimelb.edu.au> wrote:
I suggest that you provide some commented, minimal, self-contained, reproducible code. Cheers Andrew On Wed, May 04, 2011 at 02:23:29AM +0530, Rohit Pandey wrote:
Hello R community, I have been using R's inbuilt maximum likelihood functions, for the different methods (NR, BFGS, etc). I have figured out how to use all of them except the maxBHHH function.
This
one is different from the others as it requires an observation level gradient. I am using the following syntax: maxBHHH(logLik,grad=nuGradient,finalHessian="BHHH",start=prm,iterlim=2) where logLik is the likelihood function and returns a vector of
observation
level likelihoods and nuGradient is a function that returns a matrix with each row corresponding to a single observation and the columns
corresponding
to the gradient values for each parameter (as is mentioned in the online help). however, this gives me the following error: *Error in checkBhhhGrad(g = gr, theta = theta, analytic =
(!is.null(attr(f,
: the matrix returned by the gradient function (argument 'grad') must
have
at least as many rows as the number of parameters (10), where each row
must
correspond to the gradients of the log-likelihood function of an
individual
(independent) observation: currently, there are (is) 10 parameter(s) but the gradient matrix has
only
2 row(s) * It seems it is expecting as many rows as there are parameters. So, I
changed
my likelihood function so that it would return the transpose of the
earlier
matrix (hence returning a matrix with rows equaling parameters and
columns,
observations). However, when I run the function again, I still get an error: *Error in gr[, fixed] <- NA : (subscript) logical subscript too long* I have verified that my gradient function, when summed across
observations
gives the same results as the in built numerical gradient (to the 11th decimal place - after that, they differ since R's function is numerical). I am trying to run a very large estimation (1000's of observations and
821
parameters) and all of the other methods are taking way too much time
(days). This method is our last hope and so, any help will be greatly
appreciated.
--
Thanks in advance,
Rohit
Mob: 91 9819926213
[[alternative HTML version deleted]]
______________________________________________ R-help at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide
http://www.R-project.org/posting-guide.html<http://www.r-project.org/posting-guide.html> and provide commented, minimal, self-contained, reproducible code. -- Andrew Robinson Program Manager, ACERA Department of Mathematics and Statistics Tel: +61-3-8344-6410 University of Melbourne, VIC 3010 Australia (prefer email) http://www.ms.unimelb.edu.au/~andrewpr Fax: +61-3-8344-4599 http://www.acera.unimelb.edu.au/ Forest Analytics with R (Springer, 2011) http://www.ms.unimelb.edu.au/FAwR/ Introduction to Scientific Programming and Simulation using R (CRC, 2009): http://www.ms.unimelb.edu.au/spuRs/
Thanks, Rohit Mob: 91 9819926213
Hi Rohit, actually, the request for simple reproducible code means that you have to find the simplest possible representation of the problem. What happens if you simplify the observation level gradient and the likelihood function? Eg to trivial examples? If you still get the error, then simplify it futher. If you get the error with the simplest possible problem, then share it. If you don't , then try to figure out what the changes were that resolved the problem, and scale those back up to your original problem. Does that make sense? Cheers Andrew
On Thu, May 05, 2011 at 03:22:55AM +0530, Rohit Pandey wrote:
Hi Andrew, Ravi and Arne, Thank you so much for your prompt replies. I see that all of you mention the need for simple, reproducible code. I had thought of doing this, but the functions I was using for the observation level gradient and likelihood function were very long. I will paste them below here. Also, sorry for the ambiguity with the "1000's of observations and 821 parameters" on the one hand and the 10 * 2 matrix on the other. The latter is a toy data set and the former is the real data set I ultimately hope to apply this routine to once it works. Also, sorry for not mentioning the fact that the maxBHHH function I am using is from the maxLik package (thanks, Ravi for pointing out). So, the code that is giving me the errors is: maxBHHH(logLikALS4,grad=nuGradientC4,finalHessian="BHHH",start=prm,iterlim=2) and maxBHHH(logLikALS4,grad=nuGradientC4,finalHessian="BHHH",start=prm,iterlim=2) Where nuGradientC4 returns a 2*10 matrix and nuGradientC5 a 10*2 matrix (there are 10 parameters and 2 observations). I have attached the required functions in the .R file. These make for some pretty long code, but all you have to do is either load the file or paste the contents into your R console (and maybe see that they're returning what they're supposed to). I'm sorry I couldn't think of a way to come up with a shorter version of this code (I tried my best). Once you load the file, you should see the following: #The observation level likelihood function
> logLikALS4(prm)
1 2 -0.6931472 -0.6931472 #The observation level gradients
> nuGradientC4(prm)
1 2 3 4 5 6 7 8 9 10 2 -0.3518519 0.3518519 0.0000000 0 -0.1481481 -0.1666667 0.1481481 0.1666667 0.0000000 0.0000000 4 0.0000000 -0.3518519 0.3518519 0 0.0000000 0.0000000 -0.1666667 -0.1481481 0.1666667 0.1481481 Warning messages: 1: In [1]is.na(x) : [2]is.na() applied to non-(list or vector) of type 'NULL' 2: In [3]is.na(x) : [4]is.na() applied to non-(list or vector) of type 'NULL'
> nuGradientC5(prm)
2 4 1 -0.3518519 0.0000000 2 0.3518519 -0.3518519 3 0.0000000 0.3518519 4 0.0000000 0.0000000 5 -0.1481481 0.0000000 6 -0.1666667 0.0000000 7 0.1481481 -0.1666667 8 0.1666667 -0.1481481 9 0.0000000 0.1666667 10 0.0000000 0.1481481 Warning messages: 1: In [5]is.na(x) : [6]is.na() applied to non-(list or vector) of type 'NULL' 2: In [7]is.na(x) : [8]is.na() applied to non-(list or vector) of type 'NULL' Ignore the warning messages. The errors are:
>
maxBHHH(logLikALS4,grad=nuGradientC4,finalHessian="BHHH",start=prm,iterlim=2) Error in checkBhhhGrad(g = gr, theta = theta, analytic = (!is.null(attr(f, : the matrix returned by the gradient function (argument 'grad') must have at least as many rows as the number of parameters (10), where each row must correspond to the gradients of the log-likelihood function of an individual (independent) observation: currently, there are (is) 10 parameter(s) but the gradient matrix has only 2 row(s) In addition: Warning messages: 1: In [9]is.na(x) : [10]is.na() applied to non-(list or vector) of type 'NULL' 2: In [11]is.na(x) : [12]is.na() applied to non-(list or vector) of type 'NULL' and:
>
maxBHHH(logLikALS4,grad=nuGradientC5,finalHessian="BHHH",start=prm,iterlim=2)
Error in gr[, fixed] <- NA : (subscript) logical subscript too long
In addition: Warning messages:
1: In [13]is.na(x) : [14]is.na() applied to non-(list or vector) of type
'NULL'
2: In [15]is.na(x) : [16]is.na() applied to non-(list or vector) of type
'NULL'
Again, thanks for your patience and help.
Rohit
On Wed, May 4, 2011 at 4:44 AM, Andrew Robinson
<[17]A.Robinson at ms.unimelb.edu.au> wrote:
I suggest that you provide some commented, minimal, self-contained,
reproducible code.
Cheers
Andrew
On Wed, May 04, 2011 at 02:23:29AM +0530, Rohit Pandey wrote:
> Hello R community,
>
> I have been using R's inbuilt maximum likelihood functions, for the
> different methods (NR, BFGS, etc).
>
> I have figured out how to use all of them except the maxBHHH function.
This
> one is different from the others as it requires an observation level
> gradient.
>
> I am using the following syntax:
>
>
maxBHHH(logLik,grad=nuGradient,finalHessian="BHHH",start=prm,iterlim=2)
>
> where logLik is the likelihood function and returns a vector of
observation
> level likelihoods and nuGradient is a function that returns a matrix
with
> each row corresponding to a single observation and the columns
corresponding
> to the gradient values for each parameter (as is mentioned in the
online
> help).
>
> however, this gives me the following error:
>
> *Error in checkBhhhGrad(g = gr, theta = theta, analytic =
(!is.null(attr(f,
> :
> the matrix returned by the gradient function (argument 'grad') must
have
> at least as many rows as the number of parameters (10), where each row
must
> correspond to the gradients of the log-likelihood function of an
individual
> (independent) observation:
> currently, there are (is) 10 parameter(s) but the gradient matrix has
only
> 2 row(s)
> *
> It seems it is expecting as many rows as there are parameters. So, I
changed
> my likelihood function so that it would return the transpose of the
earlier
> matrix (hence returning a matrix with rows equaling parameters and
columns,
> observations).
>
> However, when I run the function again, I still get an error:
> *Error in gr[, fixed] <- NA : (subscript) logical subscript too long*
>
> I have verified that my gradient function, when summed across
observations
> gives the same results as the in built numerical gradient (to the 11th
> decimal place - after that, they differ since R's function is
numerical).
>
> I am trying to run a very large estimation (1000's of observations and
821
> parameters) and all of the other methods are taking way too much time
> (days). This method is our last hope and so, any help will be greatly
> appreciated.
>
> --
> Thanks in advance,
> Rohit
> Mob: 91 9819926213
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> [18]R-help at r-project.org mailing list
> [19]https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> and provide commented, minimal, self-contained, reproducible code.
--
Andrew Robinson
Program Manager, ACERA
Department of Mathematics and Statistics Tel: +61-3-8344-6410
University of Melbourne, VIC 3010 Australia (prefer email)
[21]http://www.ms.unimelb.edu.au/~andrewpr Fax: +61-3-8344-4599
[22]http://www.acera.unimelb.edu.au/
Forest Analytics with R (Springer, 2011)
[23]http://www.ms.unimelb.edu.au/FAwR/
Introduction to Scientific Programming and Simulation using R (CRC,
2009):
[24]http://www.ms.unimelb.edu.au/spuRs/
--
Thanks,
Rohit
Mob: 91 9819926213
References
Visible links
1. http://is.na/
2. http://is.na/
3. http://is.na/
4. http://is.na/
5. http://is.na/
6. http://is.na/
7. http://is.na/
8. http://is.na/
9. http://is.na/
10. http://is.na/
11. http://is.na/
12. http://is.na/
13. http://is.na/
14. http://is.na/
15. http://is.na/
16. http://is.na/
17. mailto:A.Robinson at ms.unimelb.edu.au
18. mailto:R-help at r-project.org
19. https://stat.ethz.ch/mailman/listinfo/r-help
20. http://www.r-project.org/posting-guide.html
21. http://www.ms.unimelb.edu.au/%7Eandrewpr
22. http://www.acera.unimelb.edu.au/
23. http://www.ms.unimelb.edu.au/FAwR/
24. http://www.ms.unimelb.edu.au/spuRs/
Andrew Robinson Program Manager, ACERA Department of Mathematics and Statistics Tel: +61-3-8344-6410 University of Melbourne, VIC 3010 Australia (prefer email) http://www.ms.unimelb.edu.au/~andrewpr Fax: +61-3-8344-4599 http://www.acera.unimelb.edu.au/ Forest Analytics with R (Springer, 2011) http://www.ms.unimelb.edu.au/FAwR/ Introduction to Scientific Programming and Simulation using R (CRC, 2009): http://www.ms.unimelb.edu.au/spuRs/