R:使用gmm包进行索引

时间:2017-02-03 12:38:02

标签: r gmm

我是Stackoverflow的新手,这篇文章可能非常基础。我从列表中得到了一个意外的"索引"错误使用" gmm"包。更具体地说,我正在使用该软件包的凝胶功能,我需要提供参数" g"这是一个返回矩阵的函数。我传给" g"的功能论证本身就完美无缺,但并不是凝胶功能的论证。我知道有一个非常密切相关的问题: https://stackoverflow.com/search?q=index+out+of+bounds+r 然而,这些都没有帮助我解决我面临的问题。 我附上了一个可重复的例子。

提前致谢。

rm(list=ls())
install.packages("gmm")
library(mvtnorm)
library(gmm)
#set.seed(1)


########################################
#functions declaration and construction#
########################################

moment.function <- function(data,alpha) {

    instrus.index <- length(alpha)+1
    data<-as.matrix(data)
    nbr.instrus <- ncol(data)-instrus.index
    data1 <-data[,1]-data[,(2:instrus.index)]%*%alpha
    data1<-matrix(rep(data1,nbr.instrus),nrow(total.data),nbr.instrus)
    g.fun <- data[,-(1:instrus.index)]*data1
    #g.fun <- t(data[,-(1:instrus.index)])%*%(data[,1]-data[,(2:instrus.index)]%*%alpha)
    return(g.fun)
}


##################
#DGP construction#
##################

#set params
n <- 70
beta1 <- 1
beta2 <- 1
beta.first.stage <- 0.1
rho <- 0.1
cov.exo.instrus <- 0.3
sigma2.epsilon <- 0.1
sigma2.V <- 0.1
sigma2.simus <-0.01
Sigma <- rbind(c(1,cov.exo.instrus,cov.exo.instrus),
    c(cov.exo.instrus,1,cov.exo.instrus),
    c(cov.exo.instrus,cov.exo.instrus,1))


#generate obs according to DGP

#instruments and exogenous covariates
X <- rmvnorm(n, rep(0,3), Sigma)

#two disturbance terms
epsilon<-rnorm(n,0,sigma2.epsilon)
V <- rnorm(n,0,sigma2.V)

#endogenous regressor
Y2 <- beta.first.stage*(X[,2]+X[,3])+V


#outcome variable with structural error term
#h()=()^2
Y1 <- beta1*X[,1]+beta2*(Y2^2+sigma2.V-V^2-2*beta.first.stage*(X[,2]+X[,3])*V)+epsilon


#matrices for the finite-dimensional case
second.stage.vars <- cbind(Y1,X[,1],Y2^2)
total.data <- cbind(second.stage.vars,X)

###################################


#simulations in the finite-dimensional case

#with gel there is a problem
gel(moment.function, total.data, c(1.5, 1.5))

#moment.function alone has no problem
moment.function(total.data,c(1.5,1.5))

1 个答案:

答案 0 :(得分:0)

gmm函数需要数据和参数的参数相反,即你的矩函数应该是

moment.function <- function(alpha, data) {
  ## function body
}

有了这个改变,你的例子对我有用。