我正在尝试使用GMM R包中的GMM。我有片刻,但是我正在使用协方差矩阵。时刻是:
psi1 = tau-(pi /(((pi / W1)+((1 + pi)/ w0)))
psi2 = Xik *(yi-((pi / w1)/((((pi / W1)+((1 + pi)/ w0)))))
其中w1,w0和t(tau)是常数,pi是logit模型,Xik是解释变量,“ y”是二进制因变量。余数比自由参数多,因此有必要最小化transpose(psi) S psi,其中S为正定矩阵,我使用恒等矩阵。
首先,我不知道代码是否正确。如果不正确,可以给我正确的版本。如果代码正确,哪里有问题,如何解决?
这是我的代码:
require(gmm)
#generate the data
set.seed(124)
z <- rnorm(1000,0,2)
t <- rbinom(1000,1,2/3)
y <- rbinom(n = 1000,size =1,prob = plogis(1+2*z-3*t))
dat <- as.data.frame.matrix(cbind(y,1,z))
#weight matrix + w0 + w1+ tau
tau <- 0.1
w1 <- tau/mean(y)
w0 <- (1-tau)/(1-mean(y))
S <- matrix(data = c(1,0,0,1),nrow=2,ncol=2)
#moments
moments <- function(theta, data) {
y <- as.numeric(data[, 1])
x <- data.matrix(data[, 2:3])
thet <- t(cbind(theta[2],theta[3]))
p <- plogis(x%*%thet)
m1 <- as.vector(0.5-(p/((p/w1)+((1-p)/w0))))
m2 <- x*as.vector((y-((p/w1)/((p/w1)+((1-p)/w0)))))
M <- cbind(m1,m2)
return(M)
#return(t(M)%*%S%*%M)
}
init <- cbind(1,1,2)
logitss.gmm <- gmm(moments, x = dat, t0 = init, type = "iterative",
crit = 1e-25, wmatrix = "optimal", method = "Nelder-Mead",
control = list(reltol = 1e-25, maxit = 20000))
logitss.gmm$coefficients
注意:我正在使用二值逻辑回归进行Lancester和Imbens(1996)矩的半参数方法。假设这很容易实现...但是让我迷失了方向。