2017-08-06 4 views
1

通常のCDFの積分を含むGMM推定を実行しようとしていますが、関数と積分区間の両方にパラメータが存在します。次のようにコードの要旨は:わずかな変化のために通常のCDFの積分を持つRのGMM

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) 
} 
関連する問題