2017-08-06 80 views
1

我試圖運行一個GMM估計,其中包括正常CDF的積分,其參數同時存在於函數和積分區間中。代碼爲的要點如下:R中的GMM與積分的正常CDF

g1 <- function(b,x){ 
    e <- b[1] +b[2]*x$x1 
    r <- e + b[3]*x$x2 
    n <- b[4]+b[5]*x$x3 
    ncdf <- function(z){ 
    return((pnorm((log(z)-b[6]*log(e))/(b[7]/x$x4)))^n) 
    } 
    m1 <- x$y-integrate(ncdf,-Inf,r)/ncdf(r) 
    f <- cbind(m1) 
    return(f) 
} 

init = rep(0,7) 

res<-gmm(g1,bids,init) 

對於輕微的變化,我現在不是越來越

Error in integrate(ncdf, -Inf, r) : 'bound' must be of length one 

Error in integrate(ncdf, -Inf, r) : a limit is NA or NaN 

幫助,將不勝感激。提前致謝。

+0

我剛剛意識到整合()不能與載體工作。將嘗試與apply()。 – SeamusX

回答

1

所以,我能夠通過使用Vectorize()解決它:

g1 <- function(b,x){ 
    e <- b[1] +b[2]*x$x1 
    r <- e + b[3]*x$x2 
    n <- b[4]+b[5]*x$x3 
    ncdf <- function(a,b,c,d){ 
    return((pnorm((a-b)/c))^d) 
    } 

    intn <- function(z){ 
    return(integrate(ncdf,-Inf,z,b=m,c=s,d=n)$value) 
    } 

    vint <- Vectorize(intn) 

    d <- b[6]*x$x6 
    s <- b[7]*x$x7 

    m1 <- x$y-vint(r)/ncdf(r,m,s,n) 
    f <- cbind(m1) 
    return(f) 
}