How to use mle2 function?

classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

How to use mle2 function?

Luigi
Hello,
I would like to optimize the function:
```
holling = function(a, b, x) {
  y = (a * x^2) / (b^2 + x^2)
  return(y)
}
```
I am trying to use the function mle2 from bbmle, but how do I need to
feed the data?
If I give `holling` as function to be optimized, passing the starting
values for `a`, `b`, and `x`, I get:
```
X = 1:60
A = 3261
B = 10
O = mle2(minuslogl = holling, start = list(a = A, h = B, x = X))
> Error in mle2(minuslogl = holling, start = list(a = A, b = B, x = X)) :
  some named arguments in 'start' are not arguments to the specified
log-likelihood function
```
If I pass the negative log-function (assuming a binomial distribution
of the data, which I am not sure about)
```
nll = function(p, n, k) {
  # extract parms
  a = p[1]
  h = p[2]
  # calculate probability of attack
  pred = a/(1+a*h*n)
  # calc NLL
  -sum(dbinom(k, prob = pred, size = n, log = TRUE))
}
```
then I get the same error:
```
> O = mle2(minuslogl = nll, start = list(a = A, h = B),
+          data = list(n = 57200000, k = A))
Error in mle2(minuslogl = nll, start = list(a = A, h = B), data =
list(n = 57200000,  :
  some named arguments in 'start' are not arguments to the specified
log-likelihood function
```
but with the disadvantage of working on an assumed function (nll).
How can I optimize the function `holling` properly?
Thank you




--
Best regards,
Luigi

______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
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.
Reply | Threaded
Open this post in threaded view
|

Re: How to use mle2 function?

Eric Berger
Hi Luigi,
I took a quick look.

First error:
You wrote
O = mle2(minuslogl = holling, start = list(a = A, h = B, x = X))

it should be b=B  (h is not an argument of holling())
The error message gave very precise information!

Second error:
You wrote
O = mle2(minuslogl = nll, start = list(a = A, h = B),   data = list(n
= 57200000, k = A))
but the arguments to nll() are p,n,k. Setting start to values for a
and h causes the function to complain.

HTH,
Eric

On Tue, Jun 30, 2020 at 12:45 PM Luigi Marongiu
<[hidden email]> wrote:

>
> Hello,
> I would like to optimize the function:
> ```
> holling = function(a, b, x) {
>   y = (a * x^2) / (b^2 + x^2)
>   return(y)
> }
> ```
> I am trying to use the function mle2 from bbmle, but how do I need to
> feed the data?
> If I give `holling` as function to be optimized, passing the starting
> values for `a`, `b`, and `x`, I get:
> ```
> X = 1:60
> A = 3261
> B = 10
> O = mle2(minuslogl = holling, start = list(a = A, h = B, x = X))
> > Error in mle2(minuslogl = holling, start = list(a = A, b = B, x = X)) :
>   some named arguments in 'start' are not arguments to the specified
> log-likelihood function
> ```
> If I pass the negative log-function (assuming a binomial distribution
> of the data, which I am not sure about)
> ```
> nll = function(p, n, k) {
>   # extract parms
>   a = p[1]
>   h = p[2]
>   # calculate probability of attack
>   pred = a/(1+a*h*n)
>   # calc NLL
>   -sum(dbinom(k, prob = pred, size = n, log = TRUE))
> }
> ```
> then I get the same error:
> ```
> > O = mle2(minuslogl = nll, start = list(a = A, h = B),
> +          data = list(n = 57200000, k = A))
> Error in mle2(minuslogl = nll, start = list(a = A, h = B), data =
> list(n = 57200000,  :
>   some named arguments in 'start' are not arguments to the specified
> log-likelihood function
> ```
> but with the disadvantage of working on an assumed function (nll).
> How can I optimize the function `holling` properly?
> Thank you
>
>
>
>
> --
> Best regards,
> Luigi
>
> ______________________________________________
> [hidden email] mailing list -- To UNSUBSCRIBE and more, see
> 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.

______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
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.
Reply | Threaded
Open this post in threaded view
|

Re: How to use mle2 function?

Luigi
Sorry for the typo, but I have the same error if using b instead of h:
```
> O = mle2(minuslogl = holling, start = list(a = A, b = B))
> Error in minuslogl(a = 3261, b = 10) :
  argument "x" is missing, with no default
# let's add x
X = c(8,   24,   39,   63,   89,  115,  153,  196,  242,  287,  344,  408,  473,
      546,  619,  705,  794,  891,  999, 1096, 1242, 1363, 1506, 1648, 1753,
      1851, 1987, 2101, 2219, 2328, 2425, 2575, 2646, 2698, 2727, 2771, 2818,
      2853, 2895, 2926, 2964, 2995, 3025, 3053, 3080, 3102, 3119, 3141, 3152,
      3159, 3172, 3182, 3196, 3209, 3220, 3231, 3239, 3246, 3252, 3261)
O = mle2(minuslogl = holling, start = list(a = A, b = B, x = X))
Error in mle2(minuslogl = holling, start = list(a = A, b = B, x = X)) :
  some named arguments in 'start' are not arguments to the specified
log-likelihood function
```
And even if I use the log-likelihood function:
```
O = mle2(minuslogl = nll, start = list(p = c(A, B), n = 57200000, x = X))
> Error in mle2(minuslogl = nll, start = list(p = c(A, B), n = 57200000,  :
  some named arguments in 'start' are not arguments to the specified
log-likelihood function
```

On Tue, Jun 30, 2020 at 12:03 PM Eric Berger <[hidden email]> wrote:

>
> Hi Luigi,
> I took a quick look.
>
> First error:
> You wrote
> O = mle2(minuslogl = holling, start = list(a = A, h = B, x = X))
>
> it should be b=B  (h is not an argument of holling())
> The error message gave very precise information!
>
> Second error:
> You wrote
> O = mle2(minuslogl = nll, start = list(a = A, h = B),   data = list(n
> = 57200000, k = A))
> but the arguments to nll() are p,n,k. Setting start to values for a
> and h causes the function to complain.
>
> HTH,
> Eric
>
> On Tue, Jun 30, 2020 at 12:45 PM Luigi Marongiu
> <[hidden email]> wrote:
> >
> > Hello,
> > I would like to optimize the function:
> > ```
> > holling = function(a, b, x) {
> >   y = (a * x^2) / (b^2 + x^2)
> >   return(y)
> > }
> > ```
> > I am trying to use the function mle2 from bbmle, but how do I need to
> > feed the data?
> > If I give `holling` as function to be optimized, passing the starting
> > values for `a`, `b`, and `x`, I get:
> > ```
> > X = 1:60
> > A = 3261
> > B = 10
> > O = mle2(minuslogl = holling, start = list(a = A, h = B, x = X))
> > > Error in mle2(minuslogl = holling, start = list(a = A, b = B, x = X)) :
> >   some named arguments in 'start' are not arguments to the specified
> > log-likelihood function
> > ```
> > If I pass the negative log-function (assuming a binomial distribution
> > of the data, which I am not sure about)
> > ```
> > nll = function(p, n, k) {
> >   # extract parms
> >   a = p[1]
> >   h = p[2]
> >   # calculate probability of attack
> >   pred = a/(1+a*h*n)
> >   # calc NLL
> >   -sum(dbinom(k, prob = pred, size = n, log = TRUE))
> > }
> > ```
> > then I get the same error:
> > ```
> > > O = mle2(minuslogl = nll, start = list(a = A, h = B),
> > +          data = list(n = 57200000, k = A))
> > Error in mle2(minuslogl = nll, start = list(a = A, h = B), data =
> > list(n = 57200000,  :
> >   some named arguments in 'start' are not arguments to the specified
> > log-likelihood function
> > ```
> > but with the disadvantage of working on an assumed function (nll).
> > How can I optimize the function `holling` properly?
> > Thank you
> >
> >
> >
> >
> > --
> > Best regards,
> > Luigi
> >
> > ______________________________________________
> > [hidden email] mailing list -- To UNSUBSCRIBE and more, see
> > 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.



--
Best regards,
Luigi

______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
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.
Reply | Threaded
Open this post in threaded view
|

Re: How to use mle2 function?

Eric Berger
I have no problem with the following code:

library(bbmle)
holling <- function( a, b, x ) {
a*x^2 / (b^2 + x^2)
}
A=3261
B=10
X=30
foo <- mle2( minuslogl=holling, start=list(a=A,b=B,x=X) )

foo

# Call:
# mle2(minuslogl = holling, start = list(a = A, b = B, x = X))

# Coefficients:
#            a             b             x
# 3.260044e+03  7.315124e+01 -2.332448e-14

# Log-likelihood: 0


Does this code create a problem for you?

On Tue, Jun 30, 2020 at 3:00 PM Luigi Marongiu <[hidden email]> wrote:

>
> Sorry for the typo, but I have the same error if using b instead of h:
> ```
> > O = mle2(minuslogl = holling, start = list(a = A, b = B))
> > Error in minuslogl(a = 3261, b = 10) :
>   argument "x" is missing, with no default
> # let's add x
> X = c(8,   24,   39,   63,   89,  115,  153,  196,  242,  287,  344,  408,  473,
>       546,  619,  705,  794,  891,  999, 1096, 1242, 1363, 1506, 1648, 1753,
>       1851, 1987, 2101, 2219, 2328, 2425, 2575, 2646, 2698, 2727, 2771, 2818,
>       2853, 2895, 2926, 2964, 2995, 3025, 3053, 3080, 3102, 3119, 3141, 3152,
>       3159, 3172, 3182, 3196, 3209, 3220, 3231, 3239, 3246, 3252, 3261)
> O = mle2(minuslogl = holling, start = list(a = A, b = B, x = X))
> Error in mle2(minuslogl = holling, start = list(a = A, b = B, x = X)) :
>   some named arguments in 'start' are not arguments to the specified
> log-likelihood function
> ```
> And even if I use the log-likelihood function:
> ```
> O = mle2(minuslogl = nll, start = list(p = c(A, B), n = 57200000, x = X))
> > Error in mle2(minuslogl = nll, start = list(p = c(A, B), n = 57200000,  :
>   some named arguments in 'start' are not arguments to the specified
> log-likelihood function
> ```
>
> On Tue, Jun 30, 2020 at 12:03 PM Eric Berger <[hidden email]> wrote:
> >
> > Hi Luigi,
> > I took a quick look.
> >
> > First error:
> > You wrote
> > O = mle2(minuslogl = holling, start = list(a = A, h = B, x = X))
> >
> > it should be b=B  (h is not an argument of holling())
> > The error message gave very precise information!
> >
> > Second error:
> > You wrote
> > O = mle2(minuslogl = nll, start = list(a = A, h = B),   data = list(n
> > = 57200000, k = A))
> > but the arguments to nll() are p,n,k. Setting start to values for a
> > and h causes the function to complain.
> >
> > HTH,
> > Eric
> >
> > On Tue, Jun 30, 2020 at 12:45 PM Luigi Marongiu
> > <[hidden email]> wrote:
> > >
> > > Hello,
> > > I would like to optimize the function:
> > > ```
> > > holling = function(a, b, x) {
> > >   y = (a * x^2) / (b^2 + x^2)
> > >   return(y)
> > > }
> > > ```
> > > I am trying to use the function mle2 from bbmle, but how do I need to
> > > feed the data?
> > > If I give `holling` as function to be optimized, passing the starting
> > > values for `a`, `b`, and `x`, I get:
> > > ```
> > > X = 1:60
> > > A = 3261
> > > B = 10
> > > O = mle2(minuslogl = holling, start = list(a = A, h = B, x = X))
> > > > Error in mle2(minuslogl = holling, start = list(a = A, b = B, x = X)) :
> > >   some named arguments in 'start' are not arguments to the specified
> > > log-likelihood function
> > > ```
> > > If I pass the negative log-function (assuming a binomial distribution
> > > of the data, which I am not sure about)
> > > ```
> > > nll = function(p, n, k) {
> > >   # extract parms
> > >   a = p[1]
> > >   h = p[2]
> > >   # calculate probability of attack
> > >   pred = a/(1+a*h*n)
> > >   # calc NLL
> > >   -sum(dbinom(k, prob = pred, size = n, log = TRUE))
> > > }
> > > ```
> > > then I get the same error:
> > > ```
> > > > O = mle2(minuslogl = nll, start = list(a = A, h = B),
> > > +          data = list(n = 57200000, k = A))
> > > Error in mle2(minuslogl = nll, start = list(a = A, h = B), data =
> > > list(n = 57200000,  :
> > >   some named arguments in 'start' are not arguments to the specified
> > > log-likelihood function
> > > ```
> > > but with the disadvantage of working on an assumed function (nll).
> > > How can I optimize the function `holling` properly?
> > > Thank you
> > >
> > >
> > >
> > >
> > > --
> > > Best regards,
> > > Luigi
> > >
> > > ______________________________________________
> > > [hidden email] mailing list -- To UNSUBSCRIBE and more, see
> > > 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.
>
>
>
> --
> Best regards,
> Luigi

______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
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.
Reply | Threaded
Open this post in threaded view
|

Re: How to use mle2 function?

Luigi
No, I got the same. I reckon the problem is with X: this was I scalar,
I was providing a vector with the actual values.
Ho can mle2 optimize without knowing what are the actual data? and
what values should I give for X?
Thank you

On Tue, Jun 30, 2020 at 2:06 PM Eric Berger <[hidden email]> wrote:

>
> I have no problem with the following code:
>
> library(bbmle)
> holling <- function( a, b, x ) {
> a*x^2 / (b^2 + x^2)
> }
> A=3261
> B=10
> X=30
> foo <- mle2( minuslogl=holling, start=list(a=A,b=B,x=X) )
>
> foo
>
> # Call:
> # mle2(minuslogl = holling, start = list(a = A, b = B, x = X))
>
> # Coefficients:
> #            a             b             x
> # 3.260044e+03  7.315124e+01 -2.332448e-14
>
> # Log-likelihood: 0
>
>
> Does this code create a problem for you?
>
> On Tue, Jun 30, 2020 at 3:00 PM Luigi Marongiu <[hidden email]> wrote:
> >
> > Sorry for the typo, but I have the same error if using b instead of h:
> > ```
> > > O = mle2(minuslogl = holling, start = list(a = A, b = B))
> > > Error in minuslogl(a = 3261, b = 10) :
> >   argument "x" is missing, with no default
> > # let's add x
> > X = c(8,   24,   39,   63,   89,  115,  153,  196,  242,  287,  344,  408,  473,
> >       546,  619,  705,  794,  891,  999, 1096, 1242, 1363, 1506, 1648, 1753,
> >       1851, 1987, 2101, 2219, 2328, 2425, 2575, 2646, 2698, 2727, 2771, 2818,
> >       2853, 2895, 2926, 2964, 2995, 3025, 3053, 3080, 3102, 3119, 3141, 3152,
> >       3159, 3172, 3182, 3196, 3209, 3220, 3231, 3239, 3246, 3252, 3261)
> > O = mle2(minuslogl = holling, start = list(a = A, b = B, x = X))
> > Error in mle2(minuslogl = holling, start = list(a = A, b = B, x = X)) :
> >   some named arguments in 'start' are not arguments to the specified
> > log-likelihood function
> > ```
> > And even if I use the log-likelihood function:
> > ```
> > O = mle2(minuslogl = nll, start = list(p = c(A, B), n = 57200000, x = X))
> > > Error in mle2(minuslogl = nll, start = list(p = c(A, B), n = 57200000,  :
> >   some named arguments in 'start' are not arguments to the specified
> > log-likelihood function
> > ```
> >
> > On Tue, Jun 30, 2020 at 12:03 PM Eric Berger <[hidden email]> wrote:
> > >
> > > Hi Luigi,
> > > I took a quick look.
> > >
> > > First error:
> > > You wrote
> > > O = mle2(minuslogl = holling, start = list(a = A, h = B, x = X))
> > >
> > > it should be b=B  (h is not an argument of holling())
> > > The error message gave very precise information!
> > >
> > > Second error:
> > > You wrote
> > > O = mle2(minuslogl = nll, start = list(a = A, h = B),   data = list(n
> > > = 57200000, k = A))
> > > but the arguments to nll() are p,n,k. Setting start to values for a
> > > and h causes the function to complain.
> > >
> > > HTH,
> > > Eric
> > >
> > > On Tue, Jun 30, 2020 at 12:45 PM Luigi Marongiu
> > > <[hidden email]> wrote:
> > > >
> > > > Hello,
> > > > I would like to optimize the function:
> > > > ```
> > > > holling = function(a, b, x) {
> > > >   y = (a * x^2) / (b^2 + x^2)
> > > >   return(y)
> > > > }
> > > > ```
> > > > I am trying to use the function mle2 from bbmle, but how do I need to
> > > > feed the data?
> > > > If I give `holling` as function to be optimized, passing the starting
> > > > values for `a`, `b`, and `x`, I get:
> > > > ```
> > > > X = 1:60
> > > > A = 3261
> > > > B = 10
> > > > O = mle2(minuslogl = holling, start = list(a = A, h = B, x = X))
> > > > > Error in mle2(minuslogl = holling, start = list(a = A, b = B, x = X)) :
> > > >   some named arguments in 'start' are not arguments to the specified
> > > > log-likelihood function
> > > > ```
> > > > If I pass the negative log-function (assuming a binomial distribution
> > > > of the data, which I am not sure about)
> > > > ```
> > > > nll = function(p, n, k) {
> > > >   # extract parms
> > > >   a = p[1]
> > > >   h = p[2]
> > > >   # calculate probability of attack
> > > >   pred = a/(1+a*h*n)
> > > >   # calc NLL
> > > >   -sum(dbinom(k, prob = pred, size = n, log = TRUE))
> > > > }
> > > > ```
> > > > then I get the same error:
> > > > ```
> > > > > O = mle2(minuslogl = nll, start = list(a = A, h = B),
> > > > +          data = list(n = 57200000, k = A))
> > > > Error in mle2(minuslogl = nll, start = list(a = A, h = B), data =
> > > > list(n = 57200000,  :
> > > >   some named arguments in 'start' are not arguments to the specified
> > > > log-likelihood function
> > > > ```
> > > > but with the disadvantage of working on an assumed function (nll).
> > > > How can I optimize the function `holling` properly?
> > > > Thank you
> > > >
> > > >
> > > >
> > > >
> > > > --
> > > > Best regards,
> > > > Luigi
> > > >
> > > > ______________________________________________
> > > > [hidden email] mailing list -- To UNSUBSCRIBE and more, see
> > > > 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.
> >
> >
> >
> > --
> > Best regards,
> > Luigi



--
Best regards,
Luigi

______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
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.
Reply | Threaded
Open this post in threaded view
|

Re: How to use mle2 function?

Luigi
In reply to this post by Eric Berger
Addendum:
the optimization actually got a worse outcome than the original
eyeball estimation:
```
actual <- c(8,   24,   39,   63,   89,  115,  153,  196,  242,  287,
344,  408,  473,
                  546,  619,  705,  794,  891,  999, 1096, 1242, 1363,
1506, 1648, 1753,
                  1851, 1987, 2101, 2219, 2328, 2425, 2575, 2646,
2698, 2727, 2771, 2818,
                  2853, 2895, 2926, 2964, 2995, 3025, 3053, 3080,
3102, 3119, 3141, 3152,
                  3159, 3172, 3182, 3196, 3209, 3220, 3231, 3239,
3246, 3252, 3261)
# a = 3261, b = 10
raw_estim <- c(32.28713,  125.42308,  269.25688,  449.79310,  652.20000,
               863.20588, 1072.40940, 1272.58537,
1459.34254, 1630.50000, 1785.43439, 1924.52459, 2048.73234,
2159.31081, 2257.61538, 2344.98876,
2422.69666, 2491.89623, 2553.62473, 2608.80000, 2658.22736,
2702.60959, 2742.55803, 2778.60355,
2811.20690, 2840.76804, 2867.63450, 2892.10860, 2914.45377,
2934.90000, 2953.64844, 2970.87544,
2986.73591, 3001.36624, 3014.88679, 3027.40401, 3039.01225,
3049.79534, 3059.82788, 3069.17647,
3077.90062, 3086.05365, 3093.68343, 3100.83301, 3107.54118,
3113.84296, 3119.77003, 3125.35108,
3130.61216, 3135.57692, 3140.26694, 3144.70185, 3148.89962,
3152.87666, 3156.64800, 3160.22744,
3163.62765, 3166.86028, 3169.93605, 3172.86486)
# a = 3260.044, b = 73.15124
opt_estim <- c(38.52979,  316.81330,  721.54423, 1388.30154,
1945.64544, 2320.94319,
               2653.48033, 2861.46076,
2987.10641, 3061.17472, 3119.00396, 3158.51140, 3183.89232,
3202.55891, 3215.14235, 3225.31935,
3232.60583, 3238.21701, 3242.65745, 3245.58576, 3248.77411,
3250.68076, 3252.37050, 3253.63342,
3254.37708, 3254.96034, 3255.63152, 3256.09680, 3256.50500,
3256.82832, 3257.08020, 3257.41517,
3257.55425, 3257.64923, 3257.69986, 3257.77366, 3257.84871,
3257.90221, 3257.96386, 3258.00768,
3258.05952, 3258.10037, 3258.13871, 3258.17347, 3258.20611,
3258.23207, 3258.25176, 3258.27676,
3258.28907, 3258.29683, 3258.31112, 3258.32198, 3258.33703,
3258.35083, 3258.36237, 3258.37379,
3258.38203, 3258.38919, 3258.39528, 3258.40437)
plot(1:60, actual, lty = 1 , type = "l", lwd = 2,
     xlab = "Index", ylab = "Values")
points(1:60, raw_estim, lty = 2, type = "l")
points(1:60, opt_estim, lty = 3, type = "l")
legend("bottomright",
       legend = c("Actual values", "Raw estimate", "Optimized values"),
       lty = c(1, 2, 3), lwd = c(2, 1,1))
```

On Tue, Jun 30, 2020 at 2:06 PM Eric Berger <[hidden email]> wrote:

>
> I have no problem with the following code:
>
> library(bbmle)
> holling <- function( a, b, x ) {
> a*x^2 / (b^2 + x^2)
> }
> A=3261
> B=10
> X=30
> foo <- mle2( minuslogl=holling, start=list(a=A,b=B,x=X) )
>
> foo
>
> # Call:
> # mle2(minuslogl = holling, start = list(a = A, b = B, x = X))
>
> # Coefficients:
> #            a             b             x
> # 3.260044e+03  7.315124e+01 -2.332448e-14
>
> # Log-likelihood: 0
>
>
> Does this code create a problem for you?
>
> On Tue, Jun 30, 2020 at 3:00 PM Luigi Marongiu <[hidden email]> wrote:
> >
> > Sorry for the typo, but I have the same error if using b instead of h:
> > ```
> > > O = mle2(minuslogl = holling, start = list(a = A, b = B))
> > > Error in minuslogl(a = 3261, b = 10) :
> >   argument "x" is missing, with no default
> > # let's add x
> > X = c(8,   24,   39,   63,   89,  115,  153,  196,  242,  287,  344,  408,  473,
> >       546,  619,  705,  794,  891,  999, 1096, 1242, 1363, 1506, 1648, 1753,
> >       1851, 1987, 2101, 2219, 2328, 2425, 2575, 2646, 2698, 2727, 2771, 2818,
> >       2853, 2895, 2926, 2964, 2995, 3025, 3053, 3080, 3102, 3119, 3141, 3152,
> >       3159, 3172, 3182, 3196, 3209, 3220, 3231, 3239, 3246, 3252, 3261)
> > O = mle2(minuslogl = holling, start = list(a = A, b = B, x = X))
> > Error in mle2(minuslogl = holling, start = list(a = A, b = B, x = X)) :
> >   some named arguments in 'start' are not arguments to the specified
> > log-likelihood function
> > ```
> > And even if I use the log-likelihood function:
> > ```
> > O = mle2(minuslogl = nll, start = list(p = c(A, B), n = 57200000, x = X))
> > > Error in mle2(minuslogl = nll, start = list(p = c(A, B), n = 57200000,  :
> >   some named arguments in 'start' are not arguments to the specified
> > log-likelihood function
> > ```
> >
> > On Tue, Jun 30, 2020 at 12:03 PM Eric Berger <[hidden email]> wrote:
> > >
> > > Hi Luigi,
> > > I took a quick look.
> > >
> > > First error:
> > > You wrote
> > > O = mle2(minuslogl = holling, start = list(a = A, h = B, x = X))
> > >
> > > it should be b=B  (h is not an argument of holling())
> > > The error message gave very precise information!
> > >
> > > Second error:
> > > You wrote
> > > O = mle2(minuslogl = nll, start = list(a = A, h = B),   data = list(n
> > > = 57200000, k = A))
> > > but the arguments to nll() are p,n,k. Setting start to values for a
> > > and h causes the function to complain.
> > >
> > > HTH,
> > > Eric
> > >
> > > On Tue, Jun 30, 2020 at 12:45 PM Luigi Marongiu
> > > <[hidden email]> wrote:
> > > >
> > > > Hello,
> > > > I would like to optimize the function:
> > > > ```
> > > > holling = function(a, b, x) {
> > > >   y = (a * x^2) / (b^2 + x^2)
> > > >   return(y)
> > > > }
> > > > ```
> > > > I am trying to use the function mle2 from bbmle, but how do I need to
> > > > feed the data?
> > > > If I give `holling` as function to be optimized, passing the starting
> > > > values for `a`, `b`, and `x`, I get:
> > > > ```
> > > > X = 1:60
> > > > A = 3261
> > > > B = 10
> > > > O = mle2(minuslogl = holling, start = list(a = A, h = B, x = X))
> > > > > Error in mle2(minuslogl = holling, start = list(a = A, b = B, x = X)) :
> > > >   some named arguments in 'start' are not arguments to the specified
> > > > log-likelihood function
> > > > ```
> > > > If I pass the negative log-function (assuming a binomial distribution
> > > > of the data, which I am not sure about)
> > > > ```
> > > > nll = function(p, n, k) {
> > > >   # extract parms
> > > >   a = p[1]
> > > >   h = p[2]
> > > >   # calculate probability of attack
> > > >   pred = a/(1+a*h*n)
> > > >   # calc NLL
> > > >   -sum(dbinom(k, prob = pred, size = n, log = TRUE))
> > > > }
> > > > ```
> > > > then I get the same error:
> > > > ```
> > > > > O = mle2(minuslogl = nll, start = list(a = A, h = B),
> > > > +          data = list(n = 57200000, k = A))
> > > > Error in mle2(minuslogl = nll, start = list(a = A, h = B), data =
> > > > list(n = 57200000,  :
> > > >   some named arguments in 'start' are not arguments to the specified
> > > > log-likelihood function
> > > > ```
> > > > but with the disadvantage of working on an assumed function (nll).
> > > > How can I optimize the function `holling` properly?
> > > > Thank you
> > > >
> > > >
> > > >
> > > >
> > > > --
> > > > Best regards,
> > > > Luigi
> > > >
> > > > ______________________________________________
> > > > [hidden email] mailing list -- To UNSUBSCRIBE and more, see
> > > > 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.
> >
> >
> >
> > --
> > Best regards,
> > Luigi



--
Best regards,
Luigi

______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
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.
Reply | Threaded
Open this post in threaded view
|

Re: How to use mle2 function?

Peter Dalgaard-2
In reply to this post by Luigi
The basic problem is that holling() is not a (negative) loglikelihood function. nll() _is_ a negative loglikelihood, but it is not clear for what. You appear to be very confused as to what a likelihood even is (what is k? apparently your response variable? Then how can it be a scalar if X is a vector? etc.), so I think you need to read up a bit.

-pd

> On 30 Jun 2020, at 14:22 , Luigi Marongiu <[hidden email]> wrote:
>
> No, I got the same. I reckon the problem is with X: this was I scalar,
> I was providing a vector with the actual values.
> Ho can mle2 optimize without knowing what are the actual data? and
> what values should I give for X?
> Thank you
>
> On Tue, Jun 30, 2020 at 2:06 PM Eric Berger <[hidden email]> wrote:
>>
>> I have no problem with the following code:
>>
>> library(bbmle)
>> holling <- function( a, b, x ) {
>> a*x^2 / (b^2 + x^2)
>> }
>> A=3261
>> B=10
>> X=30
>> foo <- mle2( minuslogl=holling, start=list(a=A,b=B,x=X) )
>>
>> foo
>>
>> # Call:
>> # mle2(minuslogl = holling, start = list(a = A, b = B, x = X))
>>
>> # Coefficients:
>> #            a             b             x
>> # 3.260044e+03  7.315124e+01 -2.332448e-14
>>
>> # Log-likelihood: 0
>>
>>
>> Does this code create a problem for you?
>>
>> On Tue, Jun 30, 2020 at 3:00 PM Luigi Marongiu <[hidden email]> wrote:
>>>
>>> Sorry for the typo, but I have the same error if using b instead of h:
>>> ```
>>>> O = mle2(minuslogl = holling, start = list(a = A, b = B))
>>>> Error in minuslogl(a = 3261, b = 10) :
>>>  argument "x" is missing, with no default
>>> # let's add x
>>> X = c(8,   24,   39,   63,   89,  115,  153,  196,  242,  287,  344,  408,  473,
>>>      546,  619,  705,  794,  891,  999, 1096, 1242, 1363, 1506, 1648, 1753,
>>>      1851, 1987, 2101, 2219, 2328, 2425, 2575, 2646, 2698, 2727, 2771, 2818,
>>>      2853, 2895, 2926, 2964, 2995, 3025, 3053, 3080, 3102, 3119, 3141, 3152,
>>>      3159, 3172, 3182, 3196, 3209, 3220, 3231, 3239, 3246, 3252, 3261)
>>> O = mle2(minuslogl = holling, start = list(a = A, b = B, x = X))
>>> Error in mle2(minuslogl = holling, start = list(a = A, b = B, x = X)) :
>>>  some named arguments in 'start' are not arguments to the specified
>>> log-likelihood function
>>> ```
>>> And even if I use the log-likelihood function:
>>> ```
>>> O = mle2(minuslogl = nll, start = list(p = c(A, B), n = 57200000, x = X))
>>>> Error in mle2(minuslogl = nll, start = list(p = c(A, B), n = 57200000,  :
>>>  some named arguments in 'start' are not arguments to the specified
>>> log-likelihood function
>>> ```
>>>
>>> On Tue, Jun 30, 2020 at 12:03 PM Eric Berger <[hidden email]> wrote:
>>>>
>>>> Hi Luigi,
>>>> I took a quick look.
>>>>
>>>> First error:
>>>> You wrote
>>>> O = mle2(minuslogl = holling, start = list(a = A, h = B, x = X))
>>>>
>>>> it should be b=B  (h is not an argument of holling())
>>>> The error message gave very precise information!
>>>>
>>>> Second error:
>>>> You wrote
>>>> O = mle2(minuslogl = nll, start = list(a = A, h = B),   data = list(n
>>>> = 57200000, k = A))
>>>> but the arguments to nll() are p,n,k. Setting start to values for a
>>>> and h causes the function to complain.
>>>>
>>>> HTH,
>>>> Eric
>>>>
>>>> On Tue, Jun 30, 2020 at 12:45 PM Luigi Marongiu
>>>> <[hidden email]> wrote:
>>>>>
>>>>> Hello,
>>>>> I would like to optimize the function:
>>>>> ```
>>>>> holling = function(a, b, x) {
>>>>>  y = (a * x^2) / (b^2 + x^2)
>>>>>  return(y)
>>>>> }
>>>>> ```
>>>>> I am trying to use the function mle2 from bbmle, but how do I need to
>>>>> feed the data?
>>>>> If I give `holling` as function to be optimized, passing the starting
>>>>> values for `a`, `b`, and `x`, I get:
>>>>> ```
>>>>> X = 1:60
>>>>> A = 3261
>>>>> B = 10
>>>>> O = mle2(minuslogl = holling, start = list(a = A, h = B, x = X))
>>>>>> Error in mle2(minuslogl = holling, start = list(a = A, b = B, x = X)) :
>>>>>  some named arguments in 'start' are not arguments to the specified
>>>>> log-likelihood function
>>>>> ```
>>>>> If I pass the negative log-function (assuming a binomial distribution
>>>>> of the data, which I am not sure about)
>>>>> ```
>>>>> nll = function(p, n, k) {
>>>>>  # extract parms
>>>>>  a = p[1]
>>>>>  h = p[2]
>>>>>  # calculate probability of attack
>>>>>  pred = a/(1+a*h*n)
>>>>>  # calc NLL
>>>>>  -sum(dbinom(k, prob = pred, size = n, log = TRUE))
>>>>> }
>>>>> ```
>>>>> then I get the same error:
>>>>> ```
>>>>>> O = mle2(minuslogl = nll, start = list(a = A, h = B),
>>>>> +          data = list(n = 57200000, k = A))
>>>>> Error in mle2(minuslogl = nll, start = list(a = A, h = B), data =
>>>>> list(n = 57200000,  :
>>>>>  some named arguments in 'start' are not arguments to the specified
>>>>> log-likelihood function
>>>>> ```
>>>>> but with the disadvantage of working on an assumed function (nll).
>>>>> How can I optimize the function `holling` properly?
>>>>> Thank you
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Best regards,
>>>>> Luigi
>>>>>
>>>>> ______________________________________________
>>>>> [hidden email] mailing list -- To UNSUBSCRIBE and more, see
>>>>> 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.
>>>
>>>
>>>
>>> --
>>> Best regards,
>>> Luigi
>
>
>
> --
> Best regards,
> Luigi
>
> ______________________________________________
> [hidden email] mailing list -- To UNSUBSCRIBE and more, see
> 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.

--
Peter Dalgaard, Professor,
Center for Statistics, Copenhagen Business School
Solbjerg Plads 3, 2000 Frederiksberg, Denmark
Phone: (+45)38153501
Office: A 4.23
Email: [hidden email]  Priv: [hidden email]

______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
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.