Learn R Programming

RMark (version 2.1.1)

Whatsnew: Summary of changes by version

Description

A good place to look for changes. Often I'll add changes here but don't always get to it in the documentation for awhile. They are ordered from newest to oldest.

Arguments

Details

Version 2.0.9 (1 Dec 2011)
  • Patch was made tomake.mark.modelto fix bug in PIM creation for a multi-session model and there was just 1 session. Thanks to Erin Roche for helping to identify this bug.
  • Patch was made tomake.mark.modelto fix bug in handling of mlogits for pi and Omega parameters with more than one group. These parameters were introduced with the RDMSMisClass and other new models that were recently added.
  • Additional changes were made toexport.MARKto re-fix changes for robust and nest survival model export to MARK.
  • A functionmark.wrapper.parallelwritten by Eldar Rakhimberdiev provides a parallel processing version of mark.wrapper. See the example in the help for the function. The parallel version is functionally the same and can be used in place ofmark.wrapperto run sequentially or in parallel. It does not include the run argument however.
  • A bug was fixed inget.realwhich caused an R error for a triangular PIM that had only a single entry. Thanks to Amanda Goldberg for discovering and reporting this error.
Version 2.0.8 (7 Oct 2011)
  • Bothsetup.modelandsetup.parameterswere re-written to use data files models.txt and parameters.txt to define models and parameters which should make it easier to add new models. The latter function is now much simpler and smaller.
  • Model RDOccupEG now allows sharing Epsilon and Gamma parameters. Epsilon is the dominant parameter which gets the share=TRUE argument. SeeRDOccupancyfor an example. Thanks to Jake Ivan for an example of what was needed.
  • To avoid confusion, the argumentscomponentandcomponent.namewere removed from the parameter specification because these have not been required since v1.3 when full support for individual covariates were included. Likewise the argumentcovariatesinmarkandmake.mark.modelwas removed because it was only needed to support the component approach.
  • export.MARKwas modified so that if all individual covariates are output, it excludes factor covariates.
  • Many more models were added to those supported in RMark. Now 92 of the 137 models in MARK are supported. See MarkModels.pdf in the RMark directory of your R library to see which models are supported (in red). Most of the remaining unsupported models are versions with mis-identification error and they are not shown in MarkModels.pdf.
  • Previously RMark stored the input file in a temporary file Markxxx.tmp. Using a common filename caused problems when more than one model were spawned to different CPUs, so now it uses a random temporary file name. It also no longer uses common file markxxx.vcv. Thanks to Glenn Stauffer for testing these changes.
  • Sessions are now labelled using value of session time rather than numerically from 1 to largest session number in robust designs. Thanks to Tommy Garrison for this suggestion.
  • A bug was fixed inget.realwhich caused incorrect assignments of fixed parameter values in the unusual case where a fixed parameter had a non-zero design matrix row.
  • mark.wrapperwas modified so it returns a list of the models that were constructed if run==FALSE. Thanks to Eldar Rakhimberdiev for the suggestion and code.
  • Code was added toextract.mark.outputto extract deviance degrees of freedom. Thanks again to Eldar for contributing this code.
  • A bug was fixed inmake.mark.modelthat prevented use of sin link on within session parameters in a robust design model. Thanks to Tommy Garrison for reporting this bug.
  • A bug was fixed inmake.mark.modelwhich prevented the use of time varying covariates with shared parameters. Thanks to Andre Breton for reporting this bug.
  • simplify argument was removed from functions because I have not found a reason not to simplify and I have not been testing code with simplify=FALSE.
Version 2.0.7 (25 August 2011)
  • Change tomake.mark.modelto fix bug in which mlogits were incorrectly assigned in ORDMS model when both Psi and pent used mlogit links. Thanks to Glenn Stauffer for identifying and tracking down this error.
  • Fixedexport.chdataandexport.MARKso Nest survival models can be exported. Also changed default of argument ind.covariates to "all" which will use all individual covariates in the data in the file sent to MARK. Thanks to Jay Rotella for his help.
  • Made change toprocess.dataandmarkto include a new argument reverse, which if set to TRUE with model="Multistratum" will reverse the timing of transition and survival. Seemstratafor an example of a reverse multistratum model.
  • Made change tomake.design.datato allow for zero time intervals in non-robust design model. This was needed to allow use of the reverse time structure in multi-state models. In addition, for the reverse multistate model the function now adds an occasion (occ) field to the design data because the time field will be constant when with a 0 time interval. The row names of the design matrix and real parameters was extended for this model to include occasion (o) and occasion cohort (oc) to create unique labels because cohort and time are not unique with 0 time intervals.
Version 2.0.6 (1 July 2011)
  • Change to MR resight examples so the output does not appear in notepad which was causing problem with check on CRAN submission
Version 2.0.5 (29 June 2011)
  • Order of arguments formodel.average.marklistwere switched incorrectly such that ... was the second argument. This has been fixed to the original format where ... is at the end. This resulted in the value of any arguments other than the first to be ignored unless specifically named e.g.,parameter="Phi". Thanks to Rod Towell for reporting this error.
  • Additional changes were made to .First.lib to 1) examine any MarkPath setting, 2) look in C:/program files/mark or c:/program files (x86)/mark, 3) or to search the path. If MARK executable cannot be found in any of those ways then a warning is issued that the user needs to set MarkPath to the path specification for the location of the MARK executable. Thanks to Bryan Wright for help with tracking down a bug.
  • A bug inadd.design.datawas fixed where the function gave incorrect results in pim.type was anything other than "all". Thanks to Jeff Hostetler for reporting this error.
  • The mark-resight models PoissonMR, LogitNormalMR, and IELogitNormalMR were added. This required some changes tomake.mark.model,make.design.dataandcompute.design.dataand the addition of an argumentcountstoprocess.datato provide mark-resight count data that are not in the capture history format. The format forcountsis a named list of vectors (one group) or matrices (each group is a row) where the names of the list elements are specific to the model. Currently there is no checking to make sure these are named correctly. Some of these models are very sensitive to starting values; thus the use of initial values in the examples. Thanks to Brett McClintock for his help incorporating these models.
Version 2.0.4 (1 June 2011)
  • Change made to .First.lib to check for availability of mark software that depends on operating system. It now provides a warning rather than stopping package attachment. This allows the user to set MarkPath to some location outside of default location Program Files or Program Files (x86) without changing path which requires administrator privilege on Windows.
  • Change made torun.mark.modelto use shQuote because link to mark.exe was not working in some cases.
Version 2.0.3 (17 May 2011)
  • Now requires R 2.13 to use path.package function
  • Change made to .First.lib to check for availability of mark software that depends on operating system.
Version 2.0.2 (16 May 2011)
  • MarkPath no longer needs to be set if mark.exe is no longer in the default location (c:/Program Files/mark) but is specified in the path. The code now uses the R function Sys.which to find the correct location for mark.exe, if it is contained in the Path.
  • Code for crm models was removed from RMark and moved to a different R package called marked that is under-development. This removes the FORTRAN code and accompanying dll and some functions and help files that were extraneous to RMark capabilities. There is still some code in some functions for crm that could be removed at some point. None of this matters to those who use RMark for its original purpose as an interface to mark.exe.
  • Many superficial changes were made to code so it could be posted on CRAN. Three changes that may be noticed by users involved renaming deriv.inverse.link, summary.ch and merge.design.covariates to deriv_inverse.link, summary_ch, and merge_design.covariates. These names conflicted with the generic functions deriv, summary and merge. It is only the last 2 that you may have in your scripts and you will have to rename them. The deprecated function merge.occasion.data was removed. Sorry for any inconvenience.
  • The dependency on Hmisc for the examples was removed by replacing errbar with plotCI.
Version 2.0.1 (21 Feb 2011)
  • Made a change torun.mark.modelto handle output filenames that exceeded mark9999.
  • Added an argumentprefixinmark,run.mark.modelandcleanup. Like other parameters formark, it can also be used inmark.wrapperas one of the ... arguments. Previously the mark files have always been named "marknnn.*". By specifyingprefixyou can now create sets of models with different prefixes. For example,prefix="cu"would result in cu001.*(cu001.out, cu001.inp, etc), cu002.* etc. This provides the ability to name files to do things like naming them based on the species being analyzed. In general, there is no need to work with these files directly because the filename.* is stored with eachmarkobject and the various R functions use that link to provide the information from the files. If you use prefixes other than "mark", you'll need to call callcleanupwith each prefix to remove unused files. Seerun.mark.modelfor an example that shows use of the prefix argument to split the dipper data into separate analyses for each sex. Note that use of prefix was not mandatory here to separate the analyses but it provided a useful example.
  • Additional usefulness has been coded for argumentinitialfor assigning initial values to beta parameters. Previously, the options were either a vector of the same length as the new model to be run or a previously run model in amarkobject from which equivalent betas are extracted based on their names in the design matrix. Now if the vector contains names for the elements they will be matched with the new model like with the model option for initial. If any betas in the new model are not matched, they are assigned 0 as their initial value, so the length of theinitialvector no longer needs to match the number of parameters in the new model as long as the elements are named. The names can be retrieved either from the column names of the design matrix or fromrownames(x$results$beta)wherexis the name of themarkobject.
  • Using the feature above, I added a new argumentuse.initialtomark.wrapper. Ifuse.initial=TRUE, prior to running a model it looks for the first model that has already been run (if any) for each parameter formula and constructs aninitialvector from that previous run. For example, if you provided 5 models for p and 3 for Phi in a CJS model, as soon as the first model for p is run, in the subsequent 2 models with different Phi models, the initial values for p are assigned based on the run with the first Phi model. At the outset this seemed like a good idea to speed up execution times, but from the one set of examples I ran where several parameters were at boundaries, the results were discouraging because the models converged to a sub-optimal likelihood value than the runs using the default initial values. I've left this option in but set its default value to FALSE.
  • A possibly more useful argument and feature was added tomark.wrapperin the argumentinitial. Previously, you could useinitial=modeland it would use the estimates from that model to assign initial values for any model in the set defined inmark.wrapper. Now I've definedinitialas a specific argument and it can be used as above but you can also use it to specify amarklistof previously run models. When you do that, the code will lookup each new model to be run in the set of models specified byinitialand if it finds one with the matching name then it will use the estimates for any matching parameters as initial values in the same way asinitial=modeldoes. The model name is based on concatenating the names of each of the parameter specification objects. To make this useful, you'll want to adapt to an approach that I've started to use of naming the objects something like p.1,p.2 etc rather than naming them something like p.dot, p.time as done in many of the examples. I've found that using numeric approach is much less typing and cumbersome rather than trying to reflect the formula in the name. By default, the formula is shown in the model selection results table, so it was a bit redundant. Now where I see this being the most benefit. Individual covariate models tend to run rather slowly. So one approach is to run the sequence of models (eg results stored in initial_marklist), including the set of formulas with all of the variables other than individual covariates. Then run another set with the same numbering scheme, but adding the individual covariates to the formula and usinginitial=initial_marklistThat will work if each parameter specification has the same name (eg., p.1=list(formula=~time) and then p.1=list(formula=~time+an_indiv_covariate)). All of the initial values will be assigned for the previous run except for any added parameters (eg. an_indiv_covariate) which will start with a 0 initial value.
  • I added a new functionsearch.output.filesto the set of utility functions. This can be useful to search all of the output files in amarklistfor a specific string like "numerical convergence suspect" or just "WARNING". The function returns the model numbers in themarklistthat contain that string in the output file.
  • Further changes were needed topopan.derivedto handle data that are summarized (i.e. frequency of capture history >1). Thanks to Carl Schwarz for reporting and finding the change needed.
  • A bug was fixed increate.dmwas fixed so it would return a matrix instead of a vector with the formula ~1
Version 2.0.0 (14 Jan 2011)
  • The packages msm, Hmisc, nlme, plotrix are now explicitly required to install RMark. These were used in examples or for specialty functions, but to avoid problems these must be installed as well.
  • Added example for "CRDMS" model that was created by Andrew Paul. Seecrdms.
  • Change was made for gamma link in v1.9.3 was only made to Pradel model and not Pradsen like it stated. Both now correctly use the logit link as the default for gamma. Thanks to Gina Barton for bringing this to my attention.
  • Change was made inmake.mark.modelthat prevented use of groups with Nest survival models. Thanks to Jeff Warren for bringing this to my attention.
  • Change was made inmake.design.databecause re-ordering of parameters caused issues with the CRDMS model because thesubtract.stratumwere not being set forPsi.
Version 1.9.9 (2 Nov 2010)
  • This version was built with R 2.12 and will not work with earlier versions of R. It contains both 32 and 64 bit versions and R will automatically ascertain which to use.
  • Parameter ordering for some models (RDHet, RDFullHet, RDHHet, RDHFHet, OccupHet, RDOccupHetPE, RDOccupHetPG, RDOccupHetEG, MSOccupancy, ORDMS, and CRDMS) had to be changed such that the models could be imported into the MARK interface. This change can influence any code you have written for those models if you specified parameter indices because the ordering of the parameters were changed. For example, see change in example forRDOccupancyto use indices=c(1) from c(10). Thanks to Gary White for helping me work this out.
  • Modified code inextract.mark.outputto handle cases with more than 9999 real parameters because MARK outputs **** when it exceeds 9999.
Version 1.9.8 (15 Sept 2010)
  • Addedmodel="CRDMS"with parameters S, Psi, N, p, and c for closed robust design multi-state models
  • Patchedpopan.derivedwhich produced incorrect abundance estimates with unequal time intervals. Thanks to Andy Paul for finding this error and testing for me.
  • Patchedexport.MARKwhich failed for robust design models. Thanks to Dave Hewitt and Gary White for discovering and isolating the problem.
Version 1.9.7 (14 April 2010)
  • Addedmodel="Brownie"with parameters S and f which is the Brownie et al. parameterization of the recovery model. "Recovery only" (in RMark)model="Recovery"which is also encounter type "dead" in MARK uses the Seber parameterization with parameters S and r which is also used in the models for live and dead encounter models.
  • Addedmodel="MSLiveDead"with parameters S, r, Psi and p. It is the multistate version of the Burnham model in which F=1.
  • Addedcompute.Snto utility functions for computation of natural survival from total survival when all harvest is reported. Patchednat.survwhich was incorrectly rejecting based on model type.
  • Addedvar.components.remlto provide an alternate variance components estimation using REML or maximum likelihood. It allows a random component that is not iid which is all thatvar.componentscan do.
  • Replaced all T/F values with TRUE/FALSE to avoid conflicts with objects named TRUE or FALSE.
Version 1.9.6 (1 February 2010)
  • Writing thepopan.derivedfunction has led me down all sorts of paths. I had to make one small change to this function to handle externally saved models. However, various changes listed below were brought on by using this function with a relatively large POPAN model.
  • Most importantly I discovered an error in computations of real parameters with an mlogit link in which some of the real parameters involved in the mlogit link were fixed. This is NOT a problem if you simply used the real parameter values extracted from MARK; however, if you were using eithercompute.real(model.average uses this function) orcovariate.predictionsto compute those real parameters (with an mlogit link) then they may be incorrect. This would have been apparent because their value would have changed relative to the original values extracted from the MARK output. Correcting this error involved changes incompute.real,convert.link.to.realandcovariate.predictionsto correct the real parameter estimates and their standard errors. I've not found it in the MARK documentation but deduced that if you use the mlogit link and fix real parameters it uses those fixed real parameter values in the calculation. A simple example will make it clear. Consider pent for 5 occasions where the first is computed by subtraction and you then have 4 real parameters. Let's assume that the 3rd and fourth parameters were fixed to 0. Then the real parameters are calculated as follows: pent2=exp(beta2)/(1+ exp(beta2)+exp(beta3)+exp(0)+exp(0)), pent3=exp(beta3)/(1+ exp(beta2)+exp(beta3)+exp(0)+exp(0)), pent4=0, pent5=0 and pent1=1-pent2-pent3-0-0 (in this case). Obviously you would not want to fix any real parameters to be >1, <0 or="" to="" have="" the="" sum="" be="" <0="">1. This structure also had implications on how the standard error was calculated.
  • In addition the coding was made more efficient incovariate.predictionsfor the case wheredata(index=somevector)is used without any data entries for covariate values in the design matrix. While the task performed with that use of the function could be done withcompute.real, it is useful to have the capability incovariate.predictionsas well because it will then model average over the listed set of parameters. The previous approach to coding was inefficient and led to very large matrices that were unnecessary and could cause failure with insufficient memory for large analyses.
  • Calculation of NGross was added topopan.derivedand logical argumentsNandNGrosswere added to control what was computed in the call. In addition, argumentdropwas added which is passed tocovariate.predictionsto control whether models are dropped when variance of betas are not all positive.
  • var.componentswas modified to use qr matrix inversion. The returned value for beta is now a dataframe that includes the std errors which are extracted from the vcv matrix. Also, if the design matrix only uses a portion of the vcv matrix, the appropriate rows and columns are now extracted. Prior to this change, the standard errors would have been unreliable if the design matrix didn't use the entire set of thetas and vcv matrix.
Version 1.9.5 (4 December 2009)
  • A bug incovariate.predictionswas fixed that would assign fixed values incorrectly if the parameter indices were specified in anything but ascending order. The error would have been obvious to anyone that may have encountered it because estimated parameters would likely have been assigned a fixed value. In most cases indices would be passed in order if they were selected from the design data unless indices were chosen from more than one parameter type. I discovered it using thepopan.derivedfunction I added in v1.9.4 because it requests indices for multiple parameters in a single function call.
Version 1.9.4 (6 November 2009)
  • Note that this version was built with R 2.10 which no longer supports compiled help files (chtml). If you were using compiled help files to get help with RMark, you'll need to switch to regular html files by using options(help_type="html") in R. You can put this command in your RProfile.site file so it is set up that way each time you start R. The functionality is the same but it is not as pretty. You can find the index (what used to be in a window on the left) as a link at the bottom of each help page.
  • Changedexport.MARKso it will not allow selection of a project name that would over-write an existing .inp file.
  • Added the functionpopan.derivedwhich for POPAN models computes derived abundance estimates by group and occasion and sum of group abundances for each occasion. For some reason RMark is unable to extract all of the derived parameters from the MARK binary file for POPAN models. This function provides the derived abundance estimates and their var-cov matrix and adds the abundance estimate sum across groups for each occasion which is not provided by MARK. Note that by default confidence intervals are based on a normal distribution to match the output of MARK, but if you want log-normal intervals usenormal=FALSE.
  • Themodel.average.listandmodel.average.marklistfunctions were modified to use revised estimator for the unconditional standard error (eq 6.12 of Burnham and Anderson (2002)) which is now the default in MARK. To use eq 4.9 (the prior formula) set the argumentrevised=FALSE.
  • Fixed bug inmodel.average.listwhich in some cases failed when the list of var-cov matrices were specified.
  • Code inmodel.average.marklistwas changed to set standard error to 0 if the variance is negative. The same is done in the var-cov matrix for the variance and any corresponding covariances. The results from RMark will now match the model average results from MARK for this case. It is not entirely clear that this is the best approach when ill-fitted models are included.
  • Changed code incleanupto handle case in which a model did not run.
  • Changed use ofgrepandregexprinconvert.inpandextract.mark.outputto accomodate change in R.2.10. The code should work in earlier versions of R but if not update to R2.10.
  • Created a functionadjust.valueand kept special case ofadjust.chat. For any field other thanchatit will adjust the value inmodel$results. As an example, to adjust the effective sample size (ESS) usemodel.list=adjust.value("n",value,model.list)where value is replaced with the ESS you want to use. As part of the changemodel.tablewas changed to recompute AICc.
Version 1.9.3 (24 September 2009)
  • Default link function for Gamma in the Pradel seniority model had been incorrectly set to log and has now been changed to logit to restrict it to be a probability.
  • A bug was fixed incompute.realandcovariate.predictionsin which confidence intervals were being incorrectly scaled by c (chat adjustment) instead of sqrt(c). The reported standard errors were correctly using sqrt(c) and only the confidence intervals for the real predictions were too large. Simply re-running the prediction computations for a model will provide the correct results. There is no reason to re-run the models. Also this in no way affects model selection.
  • A related bug was fixed incompute.realandcovariate.predictionswhich created invalid confidence intervals for real parameters if a probability link other than logit was used and a single type of link was used for all real parameters (e.g., sin).
Version 1.9.2 (10 August 2009)
  • Added the functionexport.MARKwhich creates a .Rinp, .inp and optionally renames one or more output files for import to MARK. The July 2009 version of MARK now contains a File/RMARK Import menu item which will automatically create the MARK project using the information in these files. This prevents problems that have been encountered in creating MARK projects with RMark output because the data/group structures are setup exactly in MARK as they were in RMark. Seeexport.MARKfor an example and instructions.
  • Fixed a problem inmake.design.datawhich prevented use ofremove.unusedwith unequal time intervals and more than one group.
  • At least one person has encountered a problem with a very large number of parameters in which RMark created the input file with PIMs written in exponential notation for the larger indices. MARK will not accept that format and it will fail. The solution to this is to set the R option scipen to a positive number. Start with options(scipen=1) and increase if necessary.
Version 1.9.1 (2 June 2009)
  • Fixed a problemmake.design.datawhich was not usingbegin.timeto label the session values
  • Made a change inexport.chdatalike the change inmake.mark.modelto accomodate change with release of version R2.9.0.
  • Made a change inprocess.dataso thatstrata.labelscan be specified for Multistrata designs like with ORDMS so an unobserved strata can be included.
  • A warning was added to the help file forexport.chdataandexport.modelso it is clear that the MARK database must be created correctly and with the .inp file created byexport.chdatafrom the processed data that was used to create the models that are being exported. This is to ensure that the group structure is setup such that the assumed model structure for groups matches the model structure setup in the .inp file.
Version 1.9.0 (30 April 2009)
  • Fixed a bug insummary.markwhich occasionally produced erroneous results withshowall=FALSE.
  • Made a change inmake.mark.modelto accomodate change with release of version R2.9.0.
  • RMark now requires R version 2.8.1 or higher.
Version 1.8.9 (9 March 2009)
  • Changedmodel.average.marklistandcovariate.predictionsto set NaN or Inf results in v-c matrix to 0 to cope with poorly determined models. Also, for each function the dropping of models is now restricted to cases in which there are negative variances for the betas being used in the averaged parameter estimates. Unused betas are ignored. For example, ifmodel.averageis called withparameter="Phi", then the model will only be dropped if there is a negative variance for one of the betas associated with "Phi".
  • Invar.componentsthe tolerance value (tol) in the call tounirootwas reduced to 1e-15 which should provide better estimates of the process variance when it is small. Previously a process variance less than 1e-5 would be treated as 0.
  • Made changes tocleanup,coef.mark, andmake.mark.modelto accomodate externally saved model objects (external=TRUE).
Version 1.8.8 (5 December 2008)
  • An error was fixed inmake.time.factorwhich created incorrect assignments when only some of the time dependent variables contained a "." for occasions with no data.
  • Patchedcompute.design.datawhich was not creating the design data in the same order as the PIM construction for the newly addedORDMSmodel.
  • Generalized section of code inmake.mark.modelto handlemlogitstructure forORDMSmodel.
  • Fixed a bug inprocess.datain which the initial ages were not correctly assigned in some situations with multiple grouping variables. Note that it is always a good idea to examine the design data after it is created to make sure it is structured properly because it relates the data and model structure via the grouping variables and the pre-defined variables (ie age, time etc), While I've done a lot of testing, I have certainly not tried every possible example and there is always the potential for an error to occur in a circumstance that I've not encountered.
Version 1.8.7 (13 November 2008)
  • An argumentcommon.zerowas added to functionmake.design.dataandcompute.design.data. It can be set to TRUE to make theTimevariable have a common time origin ofbegin.timewhich is useful for shared parameters likepandcin closed capture and similar models.
  • The functionread.mark.binarywas patched to work with the newer versions of MARK.EXE since 1 Oct 2008.
  • The model typeORDMSfor open robust design multi-state models was added. An example data set will be added at a later date after further testing has been completed.
  • Some patches were made to fix some aspects of profile intervals and to fix adjustment by chat insummary.markwhenshowall=F. The notation for profile intervals is now included in the fieldmodel$results$real$notewheremodelis the name of a mark model. Previously an incomplete notation was kept inmodel$results$real$fixedbut that field is now used exclusively to denote fixed parameters. It is important to realize that profile intervals computed by MARK are only found inmodel$results$real$noteand are not changed by achatadjustment unless the model is re-run. None of the intervals computed byRMarkand displayed bysummary.markare profile intervals.
Version 1.8.6 (28 October 2008)
  • A bug in an error message forinitial.agesinprocess.datawas fixed.
  • A new functionvar.componentswas added to provide variance components capability as in the MARK interface except that shrinkage estimators are not computed currently.
  • Fixed parameter values are now being reported correctly bycovariate.predictions. Also over-dispersion (c>1) was not being included in the variances for parameters except those using the mlogit link.
  • Some utility functions were added includingpop.est,nat.surv, andextract.indices.
  • The functionmodel.averagehas been changed to a generic function. Currently it supports 2 classes: 1) list, and 2) marklist. The latter was the originalmodel.averagewhich has been renamedmodel.average.marklistand the first argument has been renamedxinstead ofmodel.listto match the standard generic function approach. The previous syntaxmodel.average(...)will work as long as the usage does not name the first agument as in the examplemodel.average(model.list=dipper.results,...). The list formulation (model.average.list) was created to enable a generic model averaging of estimates instead of just real parameter estimates from amarkmodel. It could be used with any set of estimates, model weights and estimates of precision.
  • A change is needed toread.mark.binaryto accomodate the change to mark.exe with the version dated 1 Oct 2008. Some data types (notably Nest survival) may not work with the new version of mark.exe. Working with Gary to make the patch. If you need an older version of mark.exe contact me.
Version 1.8.5 (8 October 2008)
  • A bug inprocess.datawas fixed that prevented use of a dataframe contained in a list while using thegroupsargument.
  • Profile intervals on the real parameters can now be obtained from MARK using the argumentsprofile.intand optionallychatinmark. The argumentprofile.intcan be set toTRUEand a profile interval will be constructed for all real parameters, or a vector of parameter indices can be specified to restrict the profiling to certain parameters. The value specified bychatis passed to MARK for over-dispersion.
  • References to cjs, js etc have been removed from here because this code was removed 5/11/11.
  • Yet another fix tosummary.chwhich gave incorrect results for the number recaptured at least once whenmarray=Fand the data contained non-unity values forfreq.
Version 1.8.4 (29 August 2008)
  • A generic functioncoef.markwas added to extract the table of betas from the model with the expressioncoef(model)wheremodelis amarkmodel that has been run and contains output. The table includes standard errors and confidence intervals.
  • An argumentbriefwas added tosummary.mark. Ifbrief=TRUEthe real parameters are not included in the summary.
  • References to cjs, js etc have been removed from here because this code was removed 5/11/11.
  • A bug insummary.chwas fixed. It would produce erroneous results when the data contained a non-constantfreqfield. Results with the default offreq=1were fine.
  • The functionadjust.chatand its help file were changed such that it was clear that amodel.listargument was needed.
Version 1.8.3 (25 July 2008)
  • For robust design models, an error trap was added toprocess.datato make sure that the capture history length matches the specification for thetime.intervals. This error was already trapped for non-robust models.
  • Fixed an error inmake.mark.modelthat prevented interaction model of session/time-specific individual covariates in a robust design model.
  • Fixed an error inprocess.dataso that the fieldfreqis optional for nest survival data sets.
  • print.markwas modified to add an argumentinputwhich if set toinput=TRUEwill have the MARK input file be displayed rather than the output file. Also,wait=FALSEwas set in the system command which means the viewer window will be opened and you can carry on with R. Before you had to close the viewer window before proceeding with R.
  • An exampleRDOccupancyprovided by Bret Collier was added for the Robust Occupancy model which shows the use of session and time-varying individual covariates in a robust design model.
Version 1.8.2 (26 June 2008)
  • summary.chwas modified to allow missing cohorts (no captures/recaptures) for an occasion and to fix a bug in whichbygroup=FALSEdid not work when groups were defined.
  • To avoid running out of memory, an argumentexternalhas been added tocollect.models,mark,rerun.mark, andrun.mark.model. As with all arguments ofmark,externalcan also be set inmark.wrapper. Likewise,externalcan also be set inrun.modelsand it is passed torun.mark.model. The default isexternal=FALSEbut if it is set toTRUEthen the mark model object is saved in an external file with an extension.rdaand the same base filename as its matching MARK output files. The mark object in the workspace is a character string which is the name of the file with the saved image (e.g., "mark001.rda"). Ifexternal=TRUEwithmark.wrapperthen the resulting marklist contains a list entry for each mark model which is only the filename and then the last entry is themodel.table. All of the functions recognize the dual nature of the mark object (i.e., filename or mark object) in the workspace. So even if the mark object only contains the filename, functions likeprint.markorsummary.markwill work. However, if you have usedexternal=TRUEand you want to look at part of a mark object without using one of the functions, then use the functionload.model. Whereas, before you may have typedmymark$results, if you useexternal=TRUE, you would replace the above withload.model(mymark)$results.
  • Functionsstoreandrestorewere created tostoreexternally andrestoremodels from external storage into the R workspace. They work on amarklistand are only needed tostoreexternally existing marklist models or ones originally created withexternal=FALSEor torestoreif you change your mind and decide to keep them in the R workspace.
  • Error in setup for robust design occupancy models with more than 2 primary sessions was fixed. The error resulted in mark.exe crashing.
  • The concept of time-varying individual covariates has been expanded to include robust design models which have both primary (session) and secondary (time) occasion-specific data. For a robust design, a time-varying individual covariate can be either session-dependent or session-time dependent. As an example, if there are 3 primary sessions and each has 4 secondary occasions, then the individual covariates can be named x1,x2,x3 to be primary session-dependent or named x11,x12,x13,x14,x21,x22,x23,x24,x31,x32,x33,x34. The value of x can be any name for the covariate. In the formula only the base name is used (e.g.,~x) and RMark fills in the individual covariate names that it finds that match either the session or session-time individual covariates.
Version 1.8.1 (19 May 2008)
  • Added functionsummary.chto provide summaries of the capture history data (resighting matrices and m-arrays). It will not work with all types of models at present. It will work with CJS and Jolly-type models.
  • Added argumentmodel.nametomodel.tableto be able to use alternate names in the model table. It can use either the model name with each mark object which uses a formula notation (the current approach) or it can use the name of the R object containing the mark model (model.name=FALSE). Seemodel.tablefor an example. Also, the help file formodel.tablewas updated to reflect the code changes implemented in version 1.7.3.
  • Code inmark.wrapperwas modified to output the number of columns and column names of the design matrix for each model ifrun=FALSE. This allows a check of each of the columns included in the model. By reviewing these you can assess whether the model was constucted as you intended. If there is any question you can either usemodel.matrixormake.mark.modelto examine the design matrix more thoroughly.
  • A bug in the new functionmerge.design.covariateswas fixed in whichmergewas sorting the design data which does obvious bad things. Addingsort=FALSEdoes not appear to mean that the data frame is left in its original order. To prevent this, the dataframe is forced to remain in its original order by adding a sequence field for re-sorting after the merge.
Version 1.8.0 (8 May 2008)
  • Fixed a bug inmodel.averagethat caused it to fail and issue an error when any of the models included a time dependent covariate in the parameter being averaged.
  • Addedmerge.design.covariateswhich is meant to replacemerge.occasion.data. This new function allows covariates to be assigned bytime,timeandgroup, or justgroup. It also uses a simplified list of arguments and works with individual design dataframes rather than the entire ddl. It uses the R functionmergewhich can be used on its own to merge design covariates into the design data. You can usemergedirectly as this function only checks for some common mistakes before it callsmergeand it handles reassignemnt of row names in the case were design data have been deleted. An example, where you might want to usemergeinstead of this function would be situations where the design data are not just group, time or group-time specific. For example, if groups were specified by two different factor variables say initial age and region and the design covariates were only region-specific. It would be more efficient to usemergedirectly rather than this function which would require an entry for each group which would be each pairing of inital age and region. If you usemergeand you deleted design data prior to merging, save the row.names, merge and then reassign the row.names.
  • An argumentrunwas added tomark.wrapper. If set to FALSE, then it will run through each set of models inmodel.listand try to build each model but does not attempt to run it. This is useful to check for and fix any errors in the formula before setting off a large run. If you userun=FALSEdo not include arguments that are meant to be passed torun.mark.modellikeadjust.
Version 1.7.9 (7 April 2008)
  • make.design.datawas fixed so thatremove.unused=Twill work properly when differentbegin.timevalues are specified for each group.
Version 1.7.8 (12 March 2008)
  • Changed the default link for N to log in thesetup.parametersfor theHetClosedandFullHet. It was incorrectly set to logit which created incorrect estimates to be computed inmodel.averagebecause MARK forces the log link for N regardless of what is set in the input file.
Version 1.7.7 (6 March 2008)
  • Supressed warning message that occurred with code to check the validity of the sin link inmake.mark.model.
  • Fixed a couple of bugs incovariate.predictionsthat prevented it from working for some cases after including code for the sin link.
  • Added functionrelease.gofto construct the RELEASE goodness of fit test and extract the TEST2 and TEST3 final chi-square, df and P-values.
Version 1.7.6 (26 Feb 2008)
  • make.mark.modelwas modified to change the capitalization of the link functions and to remove all spaces after "=" in the input file for mark.exe. These differences were preventing the MARK interface from fully importing the model. Although the model would be imported and could be run inside the MARK interface, median c-hat would not run and would give an error stating "Invalid Link" for any model imported from RMark. Now transfering a model from RMark to the MARK interface is fully functional (I hope). If you want to import an output file that was created with a prior version of RMark without re-running it, use a text editor on the output file and remove any spaces before and after an = sign. Then change the capitalization of the links to "Logit", "MLogit", "Log", "LogLog", "CLogLog", "Identity".
  • The sin link is now supported if the formula for the parameter generates an identity matrix for the parameter. For example, if you use ~-1+time instead of ~time then the resulting design matrix will be an identity for time. Likewise, for interactions use ~-1+group:time instead of ~group*time. If you select the sin link and the resulting design matrix is not an identity for the parameter, an error will be given and the run will stop.
  • To match the output from MARK, the confidence intervals for real parameters using any 0-1 link including loglog,cloglog,logit and sin are now computed using the logit transformation. For previous versions this will only affect any results that were using loglog and cloglog. Previously, it was using the chosen link to compute the se and the interval endpoints. The latter is still used for the log and identity links which are not bounded in 0-1.
  • The model "Jolly" was added to the supported list of models. Parameters include Phi,p,Lambda,N. It is not a particularly numerically stable model and often will not converge. Use of options="SIMANNEAL" in call tomarkis recommended for better convergence. It will take much longer to converge but is mroe reliable.
Version 1.7.5 (24 Jan 2008)
  • model.averagewas modified to ignore any models that did not run and either had no attached output file or no results.
  • read.mark.binaryandextract.mark.outputwere modified to extract and store the real.vcv matrix (var-cov matrix of the simplified real parameters) in the mark object if realvcv=TRUE. The default is realvcv=FALSE. This argument has been added to functionsmark,run.mark.modelandrerun.mark.
  • An argument delete has also been added tomarkandrun.mark.model. The default value is FALSE but if set to TRUE it deletes all output files created by MARK after extracting the results. This is most useful for simulations that could easily create thousands of output files and after extracting the results the model objects are no longer needed. This is just a convenience to replace the need to callcleanup.
Version 1.7.4 (10 Jan 2008)
  • A bug inmake.mark.modelwas fixed. It was preventing creation of individual (site) covariate models for parameters with only a single parameter (single index) in certain circumstances like Psi1 in the MSOccupancy model.
  • The fix tomerge.occasion.datain version 1.7.1 did not work when design data had been deleted. That has been remedied.
  • Various functions with some operating specific calls have been modified so they will work on either Windows or Linux. Thus, the there is a single file for all source/help for both operating systems in RMarkSource.zip. It can be downloaded to either Windows or Linux to build the package. You need to build the package for Linux but not for Windows. For Windows, you only need RMark.zip which contains the pre-built package which only needs to be installed. Currently, with Linux the variable MarkPath is ignored and mark.exe is assumed to be in the path. Also, for Linux the default for MarkViewer is "pico" (an editor on some Linux machines). This can be modified inprint.markor by setting MarkViewer to a different value. The one Linux specific function isread.mark.binary.linux. The functionextract.mark.outputcalls eitherread.mark.binary.linuxorread.mark.binarydepending on the operating system. A Linux version of mark.exe (32 or 64 bit) can be obtained from Evan.
Version 1.7.3 (4 Jan 2008)
  • In working with the occupancy models, it became apparent that it would be useful to have a new function calledmake.time.factorwhich creates time-varying dummy variables from a time-varying factor variable. An example is given using observer with the occupancy datasetwetafrom the MacKenzie et al Occupancy modelling book.
  • To match the results in the book, I added argumentsuse.AICanduse.lnlto functionmodel.tableto construct a results table with AIC rather than AICc and -2LnL values. The latter is more useful with a mix of models some using individual covariates and others not.
  • A modification was made tomake.mark.modelwith theMSOccupancymodel to fix the name of the added data for parameterp1whenshare=TRUEto bep2. For an example which uses p2 to construct an additive model, seeNicholsMSOccupancy.
Version 1.7.2 (20 Dec 2007)
  • In changing code for the occupancy models, a brace was misplaced which prevented the nest survival models from working. This has been fixed. Also, the example code formallardandkilldeerwas modified to exclude the calls to process the input file. This enables use of the functionexample()to run the example code (e.g.example(mallard)). From now on as I add examples they are being included in my test set to avoid this type of problem in the future.
Version 1.7.1 (14 Dec 2007)
  • If you update with this version of RMark make sure to update MARK also, so you get the fixes for some of the occupancy models.
  • A minor bug was fixed in functionmerge.occasion.datathat created duplicate row names and prevented the design data from being used in a model.
  • Thirteen different occupancy models were added. Models in the following list use the designation from MARK:Occupancy, OccupHet, RDOccupEG, RDOccupPE, RDOccupPG, RDOccupHetEG, RDOccupHetPE, RDOccupHetPG,OccupRNPoisson,OccupRNNegBin,OccupRPoisson,OccupRNegBin,MSOccupancy.Hetmeans it uses the Pledger mixture and those withRDare the robust design models. The 2 letter designations for the RD models are shorthand for the parameters that are estimated. ForEG, Psi, Epsilon, and Gamma are estimated, forPEgamma is dropped and forPG, Epsilon is dropped. For the latter 2 models, Psi can be estimated for each primary occasion. The last 5 models include the Royle/Nichols count (RPoisson) and presence (RNPoisson) models and the multi-state occupancy model. Seesalamanderfor an example ofOccupancy, OccupHet,Donovan.7for an example ofOccupRNPoisson,OccupRNNegBin,Donovan.8for an example ofOccupRPoisson,OccupRNegBin, seeRDSalamanderfor an example of the robust design models andNicholsMSOccupancyfor an example ofMSOccupancy.salamanderdata.
  • The functionscreate.model.listandmark.wrapperwere modified so that a list of parameters can be used to loop. This is useful in the situation with shared parameters such asp1andp2in theMSOccupancymodel,closedmodels etc. Seep1.p2.different.dotinNicholsMSOccupancyfor an example. It can also be useful if the model definitions are linked conceptually (e.g., when one parameter is time dependent, the other should also be time dependent).
  • The "." value in an encounter history is now acceptable to RMark and gets passed to MARK for interpretation as a missing value.
  • print.marklistwas fixed to show the model table properly after a c-hat adjustment was made. The change in the code in version 1.6.5 to add parameter specific values to the model table had the side-effect of dropping the model name if c-hat was adjusted.
Version 1.7.0 (7 Nov 2007)