## CAPM test with GMM
data(Finance)
r <- Finance[1:300,1:10]
rm <- Finance[1:300,"rm"]
rf <- Finance[1:300,"rf"]
z <- as.matrix(r-rf)
t <- nrow(z)
zm <- rm-rf
h <- matrix(zm,t,1)
res <- gmm(z~zm,x=h)
summary(res)
## linear tests can be performed using linear.hypothesis from the car package
## The CAPM can be tested as follows:
library(car)
linear.hypothesis(res,cbind(diag(10),matrix(0,10,10)),rep(0,10))
# The CAPM of Black
g <- function(theta,x) {
e <- x[,2:11]-theta[1]-(x[,1]-theta[1])%*%matrix(theta[2:11],1,10)
gmat <- cbind(e,e*c(x[,1]))
return(gmat) }
x <- as.matrix(cbind(rm,r))
res_black <- gmm(g,x=x,t0=rep(0,11))
summary(res_black)$coefficients
## APT test with Fama-French factors and GMM
f1 <- zm
f2 <- Finance[1:300,"hml"]-rf
f3 <- Finance[1:300,"smb"]-rf
h <- cbind(f1,f2,f3)
res2 <- gmm(z~f1+f2+f3,x=h)
coef(res2)
summary(res2)$coefficients
## The following example has been provided by Dieter Rozenich (see details).
# It generates normal random numbers and uses the GMM to estimate
# mean and sd.
#-------------------------------------------------------------------------------
# Random numbers of a normal distribution
# First we generate normally distributed random numbers and compute the two parameters:
n <- 1000
x <- rnorm(n, mean = 4, sd = 2)
# Implementing the 3 moment conditions
g <- function(tet,x)
{
m1 <- (tet[1]-x)
m2 <- (tet[2]^2 - (x - tet[1])^2)
m3 <- x^3-tet[1]*(tet[1]^2+3*tet[2]^2)
f <- cbind(m1,m2,m3)
return(f)
}
# Implementing the jacobian
Dg <- function(tet,x)
{
jacobian <- matrix(c( 1, 2*(-tet[1]+mean(x)), -3*tet[1]^2-3*tet[2]^2,0, 2*tet[2],-6*tet[1]*tet[2]), nrow=3,ncol=2)
return(jacobian)
}
# Now we want to estimate the two parameters using the GMM.
gmm(g,x,c(0,0),grad=Dg)
Run the code above in your browser using DataLab