Cyurmt
Cyurmt

Reputation: 101

R gmm package using exactly identified moment conditions

For exactly identified moments, GMM results should be the same regardless of initial starting values. This doesn't appear to be the case however.

library(gmm)
data(Finance)
x <- data.frame(rm=Finance[1:500,"rm"], rf=Finance[1:500,"rf"])

# want to solve for coefficients theta[1], theta[2] in exactly identified         
    # system
g <- function(theta, x)
{
  m.1 <- x[,"rm"] - theta[1] - theta[2]*x[,"rf"]
  m.z <- (x[,"rm"] - theta[1] - theta[2]*x[,"rf"])*x[,"rf"]
  f <- cbind(m.1, m.z)
  return(f)
}

# gmm coefficient result should be identical to ols regressing rm on rf     
  # since two moments are E[u]=0 and E[u*rf]=0
model.lm <- lm(rm ~ rf, data=x)
model.lm 

# gmm is consistent with lm given correct starting values
summary(gmm(g, x, t0=model.lm$coefficients))

# problem is that using different starting values leads to different
  # coefficients
summary(gmm(g, x, t0=rep(0,2))) 

Is there something wrong with my setup?

Upvotes: 1

Views: 1187

Answers (1)

Cyurmt
Cyurmt

Reputation: 101

The gmm package author Pierre Chausse was kind enough to respond to my inquiry.

For linear models, he suggests using the formula approach:

gmm(rm ~ rf, ~rf, data=x)

For non-linear models, he emphasizes that the starting values are indeed critical. In the case of exactly identified models, he suggests setting the fnscale to a small number to force the optim minimizer to converge closer to 0. Also, he thinks the BFGS algorithm works better with GMM.

summary(gmm(g, x, t0=rep(0,2), method = "BFGS", control=list(fnscale=1e-8)))

Both solutions work for this example. Thanks Pierre!

Upvotes: 2

Related Questions