R: индекс выходит за пределы с использованием пакета gmm

Я новичок в Stackoverflow, и этот пост, вероятно, очень простой. Я получаю неожиданную ошибку «индекс вне списка», используя пакет «gmm». В частности, я использую функцию gel этого пакета, и мне нужно указать аргумент «g», который является функцией, возвращающей матрицу. Функция, которую я передаю аргументу «g», отлично работает сама по себе, но не в качестве аргумента функции gel. Я знаю, что есть очень близкий вопрос: 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))

r gmm
person user7511142    schedule 03.02.2017    source источник


Ответы (1)


Функция gmm ожидает, что аргументы для данных и параметров будут наоборот, т.е. ваша функция момента должна быть

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

С этим изменением ваш пример работает для меня.

person s.willis    schedule 21.04.2017