view mosaics/R/base_calcModelBIC.R @ 6:c9e0cd67dd84 draft

Uploaded
author dongjun
date Thu, 10 Jan 2013 15:57:50 -0500
parents b6d0c6ceda2c
children
line wrap: on
line source


.calcModelBIC <- function( fitZ1, Y, pNfit, k=3, model="2S", type="BIC", npar )
{       
    # parameter estimates (common)
    
    mu_est <- fitZ1$muEst
    a <- fitZ1$a
    pi0 <- fitZ1$pi0
    b_est <- a / mu_est        
    PYZ0 <- pNfit$PYZ0
    
    # choose Y>=k
    
    id_geqk <- which(Y>=k)      
    Y_ori <- Y[id_geqk]
    b_est <- b_est[id_geqk]
    mu_est <- mu_est[id_geqk]
    
    Yk <- Y_ori - k        # use only Y >= k
    #if(length(which(Y<0))>0 ) Y[which(Y<0)] <- -1 
    Ykmax <- max(Yk)
    #ind_ge_k <- which(Y>=0)
    
    if ( model=="2S" )
    {
        # parameter estimates
        
        p1 <- fitZ1$p1
        b1 <- fitZ1$b1
        c1 <- fitZ1$c1
        b2 <- fitZ1$b2
        c2 <- fitZ1$c2
        
        # calculate log likelihood
        
        #PYZ1 <- .margDistZ1_2S( Y_ori, pNfit, b1, c1, b2, c2 )
        PYZ1 <- .margDistZ1_2S( Yk, Ykmax, pNfit, b1, c1, b2, c2 )
        PYZ1G1 <- PYZ1$MDG1
        PYZ1G2 <- PYZ1$MDG2    
        
        logLik0 <- log( pi0*PYZ0 + (1-pi0)*( p1*PYZ1G1 + (1-p1)*PYZ1G2) )
        logLik1 <- sum( logLik0[!is.na(logLik0)] )
    } else if ( model=="1S" )
    {
        # parameter estimates
        
        b <- fitZ1$b
        c <- fitZ1$c
        
        # calculate log likelihood
        
        #PYZ1 <- .margDistZ1_1S( Y_ori, pNfit, b, c )
        PYZ1 <- .margDistZ1_1S( Yk, Ykmax, pNfit, b, c )
            
        logLik0 <- log( pi0*PYZ0 + (1-pi0)*PYZ1 )
        logLik1 <- sum( logLik0[!is.na(logLik0)] )    
    }
    
    # calculate BIC
    
    switch( type,
        "AIC" = {
            penalty <- 2            
        },
        "BIC" = {
            n <- length(Y_ori)
            penalty <- log(n)
        }
    )
    val <- -2 * logLik1 + penalty * npar
    
    return(val)
}