2016-09-14 8 views
0

'mle' stats4関数パッケージを使用する際に問題があります。私は尤度関数を上げるときに間違いをしていないと思う。添付されたメッセージがなぜわかるか教えてください。最大尤度最適化エラー:確率的フロンティアモデル

Error in solve.default(oout$hessian) : 
    Lapack routine dgesv: system is exactly singular: U[1,1] = 0 

私は確率的フロンティアモデル(スキューノーマルエラーを伴う回帰モデル)を推定しようとしています。私はよく指定したものを考える。私は何が間違っているのか分からない。

library(fdrtool) # Para generar valores aleatorios desde la Half-Normal 

    set.seed(123) 
    n<-100 
    beta0<-10 
    beta1<-1 
    beta2<-2 
    error<-inefficiency<-y<-x1<-x2<-c() 
    for (i in 1:n){ 
    error[i]<-rnorm(1,0,1) 
    inefficiency[i]<-rhalfnorm(1, theta=sqrt(pi/2)) 
    x1[i]<-runif(1,10,20) 
    x2[i]<-runif(1,10,20) 
    y[i]<-beta0+beta1*x1[i]+beta2*x2[i]+error[i]-inefficiency[i] 
    } 

    ols<-lm(y~x1+x2) 
    print(summary(ols),digits=3) 
    sigma<-summary(ols)$sigma 

    library(stats4) 
    LikelihoodFunction<-function(beta0, beta1,beta2,sigma,lambda){ 
     R= y - beta0-beta1*x1-beta2*x2 
     R=-n*log(sigma)+sum(pnorm(-(R*lambda/sigma), log.p = TRUE))-(1/2*sigma^2)*sum(R^2) 
     #print(R) 
    } 

    beta0.hat<-as.numeric(ols$coefficients[1]) 
    beta1.hat<-as.numeric(ols$coefficients[2]) 
    beta2.hat<-as.numeric(ols$coefficients[3]) 



    fit <- mle(minuslog=LikelihoodFunction, start = list(beta0 = beta0.hat, 
             beta1 = beta1.hat, 
             beta2=beta2.hat, 
             sigma=2,lambda=0.84), 
       method="BFGS") 
    fit 

答えて

0

LikelihoodFunctionが原因です。この関数の戻り値は収束しません。最適化の結果は明らかにc(beta0 = -Inf, beta1 = -Inf, beta2 = -Inf, sigma = Inf, lambda = Inf)です。

fit2 <- mle(minuslogl = LikelihoodFunction, 
      start = list(beta0 = beta0.hat, beta1 = beta1.hat, 
         beta2 = beta2.hat, sigma = 2, lambda = 0.84), 
      method="L-BFGS-B", 
      lower=c(-1.0E+6, -1.0E+6, -1.0E+6, -Inf, -Inf), 
      upper=c(Inf, Inf, Inf, 1.0E+4, 1.0E+4)) 
fit2 
# Coefficients: 
# beta0 beta1 beta2 sigma lambda 
# -1e+06 -1e+06 -1e+06 1e+04 1e+04 

LikelihoodFunction(-1.0E+6, -1.0E+6, -1.0E+6, 1.0E+4, 1.0E+4) 
# [1] -4.799513e+24