cat(crayon::yellow("\ntest CAR and SEM:\n")) data("scotlip") # see also 'old donttest' examples ## same without optim: run in scotlip examples; cf also autoregressive.Rd for ML fits #set.seed(124) { set.seed(129) ## many samples will diverge (ML on binary response) or undemonstratively be fitted by extreme rho values eigenv <- eigen(Nmatrix, symmetric=TRUE) #Lmat <- eigenv$vectors %*% diag(sqrt(1/(1-0.17*eigenv$values))) #lp <- 0.1 + 3* Lmat %*% rnorm(ncol(Lmat)) ## single intercept beta =0.1; lambda=3 resp <- c(0,0,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,0,0,0) # was rbinom(ncol(Lmat),1,1/(1+exp(-lp))) but # Rnews: The included LAPACK sources have been updated to 3.10.1. ... # ... Using 3.10.x may give some different signs from earlier versions in SVDs or eigendecompositions... # => Here the 44th eigenvector has opposite sign so the simulated sample is different CARSEMd <- data.frame(npos=resp,nneg=1-resp,gridcode=scotlip$gridcode) } # CAR by Laplace with 'inner' estimation of rho blob1 <- HLCor(cbind(npos,nneg)~1 +adjacency(1|gridcode), adjMatrix=Nmatrix,family=binomial(probit),data=CARSEMd,HLmethod="ML") ## ~1.27 s. # it is crashes the session after installing a new R version, recompile probitgem with a clean /src directory before trying anything else. if (how(blob1, verbose=FALSE)$obsInfo) { crit <- diff(range(get_ranPars(blob1,which = "corrPars")[["1"]]$rho, 0.08040012)) try(testthat::test_that(paste0("criterion was ",signif(crit,6)," from 0.08040012"), testthat::expect_true(crit<5e-9))) # bobyqa finds 0.04582924 ('flat' p_bv) } else { #if (spaMM.getOption("fpot_tol")>0) { crit <- diff(range(get_ranPars(blob1,which = "corrPars")[["1"]]$rho, 0.07961275)) try(testthat::test_that(paste0("criterion was ",signif(crit,6)," from 0.07961275"), testthat::expect_true(crit<5e-9))) # bobyqa finds 0.04582924 ('flat' p_bv) #} else testthat::expect_true(crit<5e-9) } #AIC(blob1) VarCorr(blob1) # with one coefficient removed as described in the VarCorr doc. if (FALSE) { ## HLCor/corrHlfit already compared on scotlip by test-spaMM.R # corrHLfit without corners was poor here # CAR by Laplace with 'outer' estimation of rho blob2 <- fitme(cbind(npos,nneg)~1 +adjacency(1|gridcode), adjMatrix=Nmatrix,family=binomial(probit),data=CARSEMd,method="ML",control.HLfit = list(LevenbergM=FALSE)) #AIC(blob2) testthat::expect_true(diff(range(AIC(blob2,verbose=FALSE)-AIC(blob1,verbose=FALSE)))<0.1) # effective-df calculation sensitive to small difs in fit } if ( (! "covr" %in% loadedNamespaces()) && file.exists((privtest <- "D:/home/francois/travail/stats/spaMMplus/spaMM/package/tests_other_pack/test-probitgem.R"))) { source(privtest) } # including another AIC() check ## test handling of missing data if (spaMM.getOption("example_maxtime")>0.7) { scotli <- scotlip scotli$cases[1] <- NA rownames(Nmatrix) <- colnames(Nmatrix) <- scotli$gridcode # needed here mdfit <- fitme(cases~I(prop.ag/10)+adjacency(1|gridcode)+offset(log(expec)), data=scotli, adjMatrix=Nmatrix, family=poisson) (p1 <- predict(mdfit)) # on 55 positions (p2 <- predict(mdfit, newdata=scotlip)) # on 56 positions testthat::expect_true( max(abs(range(p1-p2[-1])))<1e-12) }