tests/testthat/ctBinaryGaussianMix.R

if(identical(Sys.getenv("NOT_CRAN"), "true")& .Machine$sizeof.pointer != 4){
  library(ctsem)
  library(testthat)
  
  context("ctBinaryGaussianMix") #develop some expectations here!
  
  test_that("ctBinaryGaussianMix1", {
    set.seed( 1234 )
    cores=2

    invlog=function (x) exp(x)/(1 + exp(x))
    
    #gen data
    gm <- ctModel(DRIFT= c(-.2, .2, 
      0,-.1),
      DIFFUSION=c(.3,0,
        0,.4), 
      CINT=c(.1,.1),
      # TRAITVAR=diag(.3,2), #old approach to allow individual variation 
      LAMBDA= diag(1,2),
      n.latent=2,n.manifest=2,Tpoints=50)
    
    d=ctGenerate(gm,n.subjects = 50,logdtsd=.2,dtmean = .2,burnin = 20)
    d[,gm$manifestNames[1]] <- d[,gm$manifestNames[1]] + rnorm(nrow(d),0,.2)
    d=data.frame(d)
    for(i in 1:10){
      d[[paste0('b',i)]] <- rbinom(nrow(d),size=1,prob=invlog(d[,gm$manifestNames[2]]))
    }
    
    # plot(invlog(d[,gm$manifestNames[2]])[1:100],type='l',col=2)
    # points( apply(d[,paste0('b',1:10)],1,function(x) mean(x))[1:100],type='l')

    MANIFESTVAR = diag(c(1,rep(0,10)),11)
    MANIFESTVAR[1]='mvar1'
    m <- ctModel(type='stanct',
      manifestNames = c('Y1',paste0('b',1:10)),
      LAMBDA=rbind(diag(1,2),cbind(rep(0,9),rep(1,9))),
      MANIFESTMEANS = 0,
      MANIFESTVAR = MANIFESTVAR,
      CINT=c('CINT1','cint2'))
    m$manifesttype[2:11]=1 #set type to binary
    m$pars$indvarying=F
    
    #fit with integration (linearised approximation)
    f <- ctStanFit( datalong = d, ctstanmodel = m,cores=cores,plot=10)
  
    #test if the estimated model pars 95% confidence intervals contain true pars
    lowmats <- ctStanContinuousPars(f,calcfuncargs = list(probs=.025))
    upmats <- ctStanContinuousPars(f,calcfuncargs = list(probs=.975))
    
    gmn <- ctsem:::ctModeltoNumeric(gm)
    gmn$DIFFUSIONcov <- tcrossprod(gmn$DIFFUSION)
    
    mats <- c('DRIFT','DIFFUSIONcov','CINT')
    for(i in 1:length(mats)){
      expect_true(all(lowmats[[mats[i]]] < gmn[[mats[i]]] & upmats[[mats[i]]] > gmn[[mats[i]]]))
    }
    
  })
  
}

Try the ctsem package in your browser

Any scripts or data that you put into this service are public.

ctsem documentation built on Sept. 11, 2024, 9:06 p.m.