x<- c(13.9, 4.5, 7.7, 17.5, 7.4, 8.3, 20.9, 6.6, 1.6, 2, 27, 7.8, 3.5,
3.1, 7.6, 7.6, 5.1, 7.8, 11, 7.7)
loglike<- function(par, data){
alpha <- par[1]
beta <- par[2]
n<- length(data)
like<- -n*log(gamma(alpha)) - n* alpha * log(beta) +
(alpha - 1) * sum(log(data)) - sum(data)/beta
return(like)
}
results<- optim(par = c(1, 1), data = x, fn = loglike, method = c("L-BFGS-B"),
lower = rep(0.00000001, 2), control = list(fnscale = -1),
hessian = T)
results$par
## [1] 2.313558 3.859857
cov.est <- -1* solve(results$hessian)
cov.est
## [,1] [,2]
## [1,] 0.4698208 -0.7838323
## [2,] -0.7838323 1.6297004
results$par[1] - qnorm(1 - 0.05/2) * sqrt(cov.est[1, 1])
## [1] 0.970131
results$par[1] + qnorm(1 - 0.05/2) * sqrt(cov.est[1, 1])
## [1] 3.656986
results$par[2] - qnorm(1 - 0.05/2) * sqrt(cov.est[2, 2])
## [1] 1.357772
results$par[2] + qnorm(1 - 0.05/2) * sqrt(cov.est[2, 2])
## [1] 6.361941
score <- function(par, data){
alpha <- par[1]
beta <- par[2]
n <- length(data)
alpha.score <- -n * digamma(alpha) - n* log(beta) + sum(log(data))
beta.score <- -alpha * n/beta + sum(data)/beta^2
cbind(alpha.score, beta.score)
}
score(results$par, data = x)
## alpha.score beta.score
## [1,] 4.416895e-06 -5.184769e-06
info.fnt <- function(par, data){
alpha <- par[1]
beta <- par[2]
n <- length(data)
info.alpha <- -1 * n * trigamma(alpha)
info.beta <- n * alpha/beta^2 - 2 * sum(data)/beta^3
info.alpha.beta <- -1 * n/beta
return(matrix(c(info.alpha, info.alpha.beta, info.alpha.beta,
info.beta = info.beta), nrow = 2))
}
info.fnt(results$par, data = x)
## [,1] [,2]
## [1,] -10.773166 -5.181539
## [2,] -5.181539 -3.105759
results$hessian
## [,1] [,2]
## [1,] -10.77317 -5.18154
## [2,] -5.18154 -3.10576
optim(par = c(1, 1), data = x, fn = loglike, method = c("L-BFGS-B"),
lower = rep(0.00000001, 2), control = list(fnscale = -1), hessian = T,
gr = score)
## $par
## [1] 2.313558 3.859857
##
## $value
## [1] -60.57493
##
## $counts
## function gradient
## 15 15
##
## $convergence
## [1] 0
##
## $message
## [1] "CONVERGENCE: REL_REDUCTION_OF_F <= FACTR*EPSMCH"
##
## $hessian
## [,1] [,2]
## [1,] -10.77317 -5.18154
## [2,] -5.18154 -3.10576