MleAciNp <- function(cmprsk, lower, upper, paratr, 
                     Np=1, n=50, m=1, Rm=rep(0, m), 
                     Aci=FALSE, Cmpdata=FALSE, constrained=TRUE){
  if(n!=(m+sum(Rm))){
    Rm[m] <- n-m-sum(Rm[-m])
  }
  paraM <- NULL
  Aci.list <- list()
  cmp.data.list <- list()
  sn <- 0
  while(sn < Np){
    urm <- pcs(Rm)
    cmp.data <- rLttcmprsk.csh(u=urm, cmprsk = cmprsk, TinvFun = "Reliability")
    v <- c(runif(1, 0, 1.5), runif(1, 1, 2), runif(1, 1, 1.5), runif(1,1.5,3))
    para0 <- para1 <- paratr + v #runif(length(paratr),0,1.5)
    hs <- rep(0, length(para0))
    
    idv <- c(2,1,4,3) #:length(para0)
    para1 <- para0
    for(i in idv){
      id <- i
      xmle <- optim(par=para0[id], fn=loglikeAll.single, gr=loglikeAll.single.gr,
                    method="L-BFGS-B", lower=0.00001, #upper=upper,+runif(4, 0.0, 0.5)
                    control = list(fnscale=-1, trace=0, REPORT=1, maxit=500),
                    hessian = TRUE, 
                    para0=para1, 
                    para.id=id, cmp.data=cmp.data, cmprsk=cmprsk, Rm=Rm, log.para=FALSE)
      para1[id] <- xmle$par
      hs[id] <- (xmle$hessian)
    }
    hs <- diag(hs)
    param <- para1
    paraM <- rbind(paraM, param)
    if(!is.null(param) && Aci){
      hs <- loglikeAll.hessian(para.list = param, cmprsk = cmprsk, cmp.data, Rm=Rm)
      hs <- (-1)*hs
      y <- EstAci(param, para0=paratr, HmL=hs, p=0.05, lower=rep(0, length(paratr)))
      Aci.list[[sn+1]] <- y
    }
    if(!is.null(param) && Cmpdata){
      cmp.data.list[[sn+1]] <- cmp.data
    }
    sn <- sn + 1
  }
  paraM <- as.matrix(paraM)
  list(paraM=paraM, Aci.list=Aci.list, cmp.data.list=cmp.data.list)
}


MleAciNp.pl <- function(cmprsk, lower, upper, paratr, 
                     Np=1, n=50, m=1, Rm=rep(0, m), 
                     Aci=FALSE, Cmpdata=FALSE, constrained=TRUE,
                     parai0=rep(1, length(parater)), varM=diag(length(paratr))){
  if(n!=(m+sum(Rm))){
    Rm[m] <- n-m-sum(Rm[-m])
  }
  paraM <- NULL
  Aci.list <- list()
  cmp.data.list <- list()
  sn <- 0
  while(sn < Np){
    urm <- pcs(Rm)
    cmp.data <- rLttcmprsk.csh(u=urm, cmprsk = cmprsk, TinvFun = "Reliability")
    para0 <- para1 <- paratr +runif(length(paratr), -0.4, 0.4)
    hs <- rep(0, length(para0))
    
    idv <- c(2,1,4,3) #:length(para0)
    para1 <- para0
    for(i in idv){
      id <- i
      xmle <- optim(par=para0[id], fn=loglikeAll.single.pl, 
                    method="L-BFGS-B", lower=0.00001, 
                    control = list(fnscale=-1, trace=0, REPORT=1, maxit=500),
                    hessian = TRUE, 
                    para0=para1, parai0=parai0[id], varM=varM,
                    para.id=id, cmp.data=cmp.data, cmprsk=cmprsk, Rm=Rm, log.para=FALSE)
      para1[id] <- xmle$par
      hs[id] <- (xmle$hessian)
    }
    hs <- diag(hs)
    param <- para1
    paraM <- rbind(paraM, param)
    if(!is.null(param) && Aci){
      hs <- loglikeAll.hessian(para.list = param, cmprsk = cmprsk, cmp.data, Rm=Rm)
      hs <- (-1)*hs
      y <- EstAci(param, para0=paratr, HmL=hs, p=0.05)
      Aci.list[[sn+1]] <- y
    }
    if(!is.null(param) && Cmpdata){
      cmp.data.list[[sn+1]] <- cmp.data
    }
    sn <- sn + 1
  }
  paraM <- as.matrix(paraM)
  list(paraM=paraM, Aci.list=Aci.list, cmp.data.list=cmp.data.list)
}

