I am running into a strange error when trying to coerce a list of named occuMulti( ) model objects to a fitList( ) object (e.g., for use in modSel( ) and other post-processing functions). The code and error is listed below without the input data, but note that 8 total species are involved (i.e. surveyed across 14 sites) and no species-level interactions are estimated. Each model converges on identifiable MLEs, thanks to Nelder-Mead and many iterations.
Any thoughts on the fitList( ) error? Did I find a bug?
Thanks,
#########################
library(unmarked)
library(parallel)
# define function to run unmarked on each core
run_um <- function(x){
unmarked::occuMulti(detformulas=as.character(x$detformulas),
stateformulas=as.character(x$stateformulas),
data=x$data,
maxOrder=1, #Species interactions ignored
method="Nelder-Mead", #To avoid "non-finite finite-difference value" errors
se=TRUE,
engine="C",
control=list(maxit=1000000))
}
# Define 17 candidate models
args <- list(
fm0 = list(detformulas=rep('~1', 8),
stateformulas=rep('~1', 8),
data=umf2005),
fmd = list(detformulas=rep('~1+FS+JD+I(JD^2)+(FS*JD)+(FS*I(JD^2))', 8),
stateformulas=rep('~1', 8),
data=umf2005),
fmcp = list(detformulas=rep('~1+FS+JD+I(JD^2)+(FS*JD)+(FS*I(JD^2))', 8),
stateformulas=rep('~1+CP', 8),
data=umf2005),
fafo = list(detformulas=rep('~1+FS+JD+I(JD^2)+(FS*JD)+(FS*I(JD^2))', 8),
stateformulas=rep('~1+CP+FA+FO', 8),
data = umf2005),
fapg = list(detformulas=rep('~1+FS+JD+I(JD^2)+(FS*JD)+(FS*I(JD^2))', 8),
stateformulas=rep('~1+CP+FA+PG', 8),
data = umf2005),
fafbgs = list(detformulas=rep('~1+FS+JD+I(JD^2)+(FS*JD)+(FS*I(JD^2))', 8),
stateformulas=rep('~1+CP+FA+PF+PG+(FA*PF)+(FA*PG)', 8),
data = umf2005),
f50m_1 = list(detformulas=rep('~1+FS+JD+I(JD^2)+(FS*JD)+(FS*I(JD^2))', 8),
stateformulas=rep('~1+CP+OC50_1', 8),
data = umf2005),
f50m_2 = list(detformulas=rep('~1+FS+JD+I(JD^2)+(FS*JD)+(FS*I(JD^2))', 8),
stateformulas=rep('~1+CP+OC50_2', 8),
data = umf2005),
f100m_1 = list(detformulas=rep('~1+FS+JD+I(JD^2)+(FS*JD)+(FS*I(JD^2))', 8),
stateformulas=rep('~1+CP+OC100_1', 8),
data = umf2005),
f100m_2 = list(detformulas=rep('~1+FS+JD+I(JD^2)+(FS*JD)+(FS*I(JD^2))', 8),
stateformulas=rep('~1+CP+OC100_2', 8),
data = umf2005),
f200m_1 = list(detformulas=rep('~1+FS+JD+I(JD^2)+(FS*JD)+(FS*I(JD^2))', 8),
stateformulas=rep('~1+CP+OC200_1', 8),
data = umf2005),
f200m_2 = list(detformulas=rep('~1+FS+JD+I(JD^2)+(FS*JD)+(FS*I(JD^2))', 8),
stateformulas=rep('~1+CP+OC200_2', 8),
data = umf2005),
f400m_2 = list(detformulas=rep('~1+FS+JD+I(JD^2)+(FS*JD)+(FS*I(JD^2))', 8),
stateformulas=rep('~1+CP+OC400_2', 8),
data = umf2005),
f800m_1 = list(detformulas=rep('~1+FS+JD+I(JD^2)+(FS*JD)+(FS*I(JD^2))', 8),
stateformulas=rep('~1+CP+OC800_1', 8),
data = umf2005),
f800m_2 = list(detformulas=rep('~1+FS+JD+I(JD^2)+(FS*JD)+(FS*I(JD^2))', 8),
stateformulas=rep('~1+CP+OC800_2', 8),
data = umf2005),
f1600m_1 = list(detformulas=rep('~1+FS+JD+I(JD^2)+(FS*JD)+(FS*I(JD^2))', 8),
stateformulas=rep('~1+CP+OC1600_1', 8),
data = umf2005),
f3200m_2 = list(detformulas=rep('~1+FS+JD+I(JD^2)+(FS*JD)+(FS*I(JD^2))', 8),
stateformulas=rep('~1+CP+OC3200_1+OC3200_2', 8),
data = umf2005)
)
# Run models in parallel
start_time <- Sys.time()
nt <- 17
cl <- makeCluster(nt, timeout=5184000)
out2005 <- parLapply(cl=cl, X=args, fun=run_um)
clusterExport(cl, c("args", "run_um", "umf2005"))
end_time <- Sys.time()
total_time<-end_time-start_time
total_time
stopCluster(cl)
#Coerce output list to fitList