2017-02-03 9 views
1

私はStackoverflowを初めて使用しています。この投稿はおそらく非常に基本的です。私は "gmm"パッケージを使用して予期しない "リストから抜け出して"間違いを得る。具体的には、私はそのパッケージのゲル関数を使用しており、行列を返す関数である引数 "g"を指定する必要があります。 "g"引数に渡す関数は、それ自身では機能しますが、ゲル関数の引数としては機能しません。 https://stackoverflow.com/search?q=index+out+of+bounds+r しかし、私が直面している問題を解決するのに役立つものはありませんでした。 私は再現可能な例を添付します。R:gmmパッケージを使用してアウトオブバウンド。

ありがとうございます。

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)) 

答えて

0

gmm機能は、つまり、あなたの瞬間機能はあなたの例は、私の作品変えることで

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

あるべきデータやパラメータの引数は、他の方法でラウンドすることを期待しています。

関連する問題