inst/doc/using-maxlik.R

### R code from vignette source 'using-maxlik.Rnw'

###################################################
### code chunk number 1: using-maxlik.Rnw:46-48
###################################################
library(maxLik)
set.seed(6)


###################################################
### code chunk number 2: using-maxlik.Rnw:98-107
###################################################
x <- rnorm(100)  # data.  true mu = 0, sigma = 1
loglik <- function(theta) {
   mu <- theta[1]
   sigma <- theta[2]
   sum(dnorm(x, mean=mu, sd=sigma, log=TRUE))
}
m <- maxLik(loglik, start=c(mu=1, sigma=2))
                           # give start value somewhat off
summary(m)


###################################################
### code chunk number 3: using-maxlik.Rnw:147-148
###################################################
coef(m)


###################################################
### code chunk number 4: using-maxlik.Rnw:151-152
###################################################
stdEr(m)


###################################################
### code chunk number 5: using-maxlik.Rnw:208-212
###################################################
## create 3 variables with very different scale
X <- cbind(rnorm(100), rnorm(100, sd=1e3), rnorm(100, sd=1e7))
## note: correct coefficients are 1, 1, 1
y <- X %*% c(1,1,1) + rnorm(100)


###################################################
### code chunk number 6: using-maxlik.Rnw:224-232
###################################################
negSSE <- function(beta) {
   e <- y - X %*% beta
   -crossprod(e)
                           # note '-': we are maximizing
}
m <- maxLik(negSSE, start=c(0,0,0))
                           # give start values a bit off
summary(m, eigentol=1e-15)


###################################################
### code chunk number 7: using-maxlik.Rnw:256-259
###################################################
grad <- function(beta) {
   2*t(y - X %*% beta) %*% X
}


###################################################
### code chunk number 8: using-maxlik.Rnw:263-265
###################################################
m <- maxLik(negSSE, grad=grad, start=c(0,0,0))
summary(m, eigentol=1e-15)


###################################################
### code chunk number 9: using-maxlik.Rnw:278-281
###################################################
hess <- function(beta) {
   -2*crossprod(X)
}


###################################################
### code chunk number 10: hessianExample
###################################################
m <- maxLik(negSSE, grad=grad, hess=hess, start=c(0,0,0))
summary(m, eigentol=1e-15)


###################################################
### code chunk number 11: SSEA
###################################################
negSSEA <- function(beta) {
   ## negative SSE with attributes
   e <- y - X %*% beta  # we will re-use 'e'
   sse <- -crossprod(e)
                           # note '-': we are maximizing
   attr(sse, "gradient") <- 2*t(e) %*% X
   attr(sse, "Hessian") <- -2*crossprod(X)
   sse
}
m <- maxLik(negSSEA, start=c(0,0,0))
summary(m, eigentol=1e-15)


###################################################
### code chunk number 12: using-maxlik.Rnw:338-340
###################################################
compareDerivatives(negSSE, grad, t0=c(0,0,0))
                           # 't0' is the parameter value


###################################################
### code chunk number 13: BFGS
###################################################
m <- maxLik(loglik, start=c(mu=1, sigma=2),
            method="BFGS")
summary(m)


###################################################
### code chunk number 14: using-maxlik.Rnw:473-493
###################################################
loglik <- function(theta) {
   mu <- theta[1]
   sigma <- theta[2]
   N <- length(x)
   -N*log(sqrt(2*pi)) - N*log(sigma) - sum(0.5*(x - mu)^2/sigma^2)
                           # sum over observations
}
gradlikB <- function(theta) {
   ## BHHH-compatible gradient
   mu <- theta[1]
   sigma <- theta[2]
   N <- length(x)  # number of observations
   gradient <- matrix(0, N, 2)  # gradient is matrix:
                           # N datapoints (rows), 2 components
   gradient[, 1] <- (x - mu)/sigma^2
                           # first column: derivative wrt mu
   gradient[, 2] <- -1/sigma + (x - mu)^2/sigma^3
                           # second column: derivative wrt sigma
   gradient
}


###################################################
### code chunk number 15: using-maxlik.Rnw:503-506
###################################################
m <- maxLik(loglik, gradlikB, start=c(mu=1, sigma=2),
            method="BHHH")
summary(m)


###################################################
### code chunk number 16: using-maxlik.Rnw:514-525
###################################################
loglikB <- function(theta) {
   mu <- theta[1]
   sigma <- theta[2]
   -log(sqrt(2*pi)) - log(sigma) - 0.5*(x - mu)^2/sigma^2
                           # no summing here
                           # also no 'N*' terms as we work by
                           # individual observations
}
m <- maxLik(loglikB, start=c(mu=1, sigma=2),
            method="BHHH")
summary(m)


###################################################
### code chunk number 17: using-maxlik.Rnw:557-561
###################################################
m <- maxLik(loglikB, start=c(mu=1, sigma=2),
            method="BHHH",
            control=list(printLevel=3, iterlim=2))
summary(m)


###################################################
### code chunk number 18: using-maxlik.Rnw:601-605
###################################################
m <- maxLik(loglikB, start=c(mu=1, sigma=2),
            method="BHHH",
            control=list(reltol=0, gradtol=0))
summary(m)


###################################################
### code chunk number 19: using-maxlik.Rnw:639-648
###################################################
loglik <- function(theta, x) {
   mu <- theta[1]
   sigma <- theta[2]
   sum(dnorm(x, mean=mu, sd=sigma, log=TRUE))
}
m <- maxLik(loglik, start=c(mu=1, sigma=2), x=x)
                           # named argument 'x' will be passed
                           # to loglik
summary(m)


###################################################
### code chunk number 20: using-maxlik.Rnw:680-689
###################################################
f <- function(theta) {
   x <- theta[1]
   y <- theta[2]
   exp(-x^2 - y^2)
                           # optimum at (0, 0)
}
m <- maxBFGS(f, start=c(1,1))
                           # give start value a bit off
summary(m)


###################################################
### code chunk number 21: using-maxlik.Rnw:710-720
###################################################
## create 3 variables, two independent, third collinear
x1 <- rnorm(100)
x2 <- rnorm(100)
x3 <- x1 + x2 + rnorm(100, sd=1e-6)  # highly correlated w/x1, x2
X <- cbind(x1, x2, x3)
y <- X %*% c(1, 1, 1) + rnorm(100)
m <- maxLik(negSSEA, start=c(x1=0, x2=0, x3=0))
                           # negSSEA: negative sum of squared errors
                           # with gradient, hessian attribute
summary(m)


###################################################
### code chunk number 22: using-maxlik.Rnw:733-734
###################################################
condiNumber(X)


###################################################
### code chunk number 23: using-maxlik.Rnw:767-780
###################################################
x1 <- rnorm(100)
x2 <- rnorm(100)
x3 <- rnorm(100)
X <- cbind(x1, x2, x3)
y <- X %*% c(1, 1, 1) > 0
                           # y values 1/0 linearly separated
loglik <- function(beta) {
   link <- X %*% beta
   sum(ifelse(y > 0, plogis(link, log=TRUE),
              plogis(-link, log=TRUE)))
}
m <- maxLik(loglik, start=c(x1=0, x2=0, x3=0))
summary(m)


###################################################
### code chunk number 24: using-maxlik.Rnw:784-785
###################################################
condiNumber(X)


###################################################
### code chunk number 25: using-maxlik.Rnw:789-790
###################################################
condiNumber(hessian(m))


###################################################
### code chunk number 26: using-maxlik.Rnw:815-825
###################################################
x <- rnorm(100)
loglik <- function(theta) {
   mu <- theta[1]
   sigma <- theta[2]
   sum(dnorm(x, mean=mu, sd=sigma, log=TRUE))
}
m <- maxLik(loglik, start=c(mu=1, sigma=1),
            fixed="sigma")
                           # fix the component named 'sigma'
summary(m)


###################################################
### code chunk number 27: using-maxlik.Rnw:863-874
###################################################
f <- function(theta) {
   x <- theta[1]
   y <- theta[2]
   exp(-x^2 - y^2)
                           # optimum at (0, 0)
}
A <- matrix(c(1, 1), ncol=2)
B <- -1
m <- maxNR(f, start=c(1,1),
           constraints=list(eqA=A, eqB=B))
summary(m)


###################################################
### code chunk number 28: using-maxlik.Rnw:908-913
###################################################
A <- matrix(c(1, 1), ncol=2)
B <- -1
m <- maxBFGS(f, start=c(1,1),
             constraints=list(ineqA=A, ineqB=B))
summary(m)


###################################################
### code chunk number 29: using-maxlik.Rnw:947-952
###################################################
A <- matrix(c(1, 1, 1, -1), ncol=2)
B <- c(-1, -1)
m <- maxBFGS(f, start=c(2, 0),
             constraints=list(ineqA=A, ineqB=B))
summary(m)

Try the maxLik package in your browser

Any scripts or data that you put into this service are public.

maxLik documentation built on May 29, 2024, 2:32 a.m.