1

我是 Stackoverflow 的新手,这篇文章可能非常基础。使用“gmm”包时出现意外的“index out of list”错误。更具体地说,我正在使用该包的凝胶函数,我需要提供参数“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))
4

1 回答 1

0

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

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

通过这种更改,您的示例对我有用。

于 2017-04-21T16:28:06.550 回答