I have the following code which outputs 1000 MLEs, how do I calculate the mean and variance of the output and include it into the function? I want the output to be; f2d(5) = mean value and variance value
f2d = function(n){
fun = function(y){
optimise(
function(theta){ sum(dpois(y, theta, log = TRUE)) },
interval = c(0,50),
maximum = TRUE
)
}
# apply the function to each poisson sample
x = replicate(1000, rpois(n, 10))
apply(x, 2, fun)
}
CodePudding user response:
optimise returns a named list with two elements, maximum and objective. The mean/variance (lambda) for dpois is going to be maximum. Have fun return just maximum:
f2d <- function(n){
fun = function(y){
optimise(
function(theta){ sum(dpois(y, theta, log = TRUE)) },
interval = c(0,50),
maximum = TRUE
)$maximum
}
# apply the function to each poisson sample
x = replicate(1000, rpois(n, 10))
apply(x, 2, fun)
}
BTW, since the MLE of lambda is the mean of the observations and sums of Poisson random variables are also Poisson-distributed, you could replace f2d with
f2d <- function(n) rpois(1e3, 10*n)/n
