---
title: "Lab 10 - Analyses in RMark"
author: "WILD 502 - Jay Rotella"
output: html_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
## Single-Species Single-Season Occupancy Models
Here, we'll run the single-season occupancy models for data on Weta that you analyzed directly in MARK in lab 10. Here, we're dealing with 2 types of parameters: 'Psi' & 'p'.
### Bring in the data
```{r}
library(RMark)
# you can ignore warning about final line issue that might appear
weta <- convert.inp("http://www.montana.edu/rotella/documents/502/wetaTwoGroups.inp",
group.df = data.frame(Browse = c("Browsed", "Unbrowsed")),
covariates = c(
"obs11", "obs12", "obs13", "obs14", "obs15",
"obs21", "obs22", "obs23", "obs24", "obs25"))
# store the number of sites
n.sites <- length(weta$ch)
# store the maximum number of visits
n.visits <- max(nchar(weta$ch))
# make a factor that records whether observer 1, 2, or 3 visited a site
# on each visit. A '9' was used to indicate that no observer visited the site.
# So, if there's a 9 for either observer 1 or 2 on a given date, we
# assign a '.' for that day
obs <- matrix(NA, n.sites, n.visits)
for (i in 1:n.sites) {
obs[i, 1] = ifelse(weta$obs11[i] == 1, 1,
ifelse(weta$obs21[i] == 1, 2,
ifelse(weta$obs11[i] == 9, ".", 3)))
obs[i, 2] = ifelse(weta$obs12[i] == 1, 1,
ifelse(weta$obs22[i] == 1, 2,
ifelse(weta$obs12[i] == 9, ".", 3)))
obs[i, 3] = ifelse(weta$obs13[i] == 1, 1,
ifelse(weta$obs23[i] == 1, 2,
ifelse(weta$obs13[i] == 9, ".", 3)))
obs[i, 4] = ifelse(weta$obs14[i] == 1, 1,
ifelse(weta$obs24[i] == 1, 2,
ifelse(weta$obs14[i] == 9, ".", 3)))
obs[i, 5] = ifelse(weta$obs15[i] == 1, 1,
ifelse(weta$obs25[i] == 1, 2,
ifelse(weta$obs15[i] == 9, ".", 3)))
}
head(weta)
head(obs)
# can drop obs11, obs12, ..., obs25 from weta since not used
weta <- weta[,-c(4:13)]
# add 'Obs' values for each day to 'weta'
weta$Obs1 = as.factor(obs[, 1])
weta$Obs2 = as.factor(obs[, 2])
weta$Obs3 = as.factor(obs[, 3])
weta$Obs4 = as.factor(obs[, 4])
weta$Obs5 = as.factor(obs[, 5])
head(weta)
```
### Build function to process data & create models
First, the function puts the observer and time covariates into proper form for use in modeling and processes the data. Second, thefunction decleares the structures for 'p' and 'Psi' that will be used in all-possible combinations of the structures for each parameter type when the function is executed.
```{r}
# Create function to fit the 18 models in the book
fit.weta.models <- function() {
# use 'make.time.factor' to create time-varying dummy variables Obs1 and Obs2
# observer 3 is used as the intercept to match what we did in MARK
weta = make.time.factor(weta, "Obs", 1:5, intercept = 3)
# Process data
weta.process = process.data(weta, model = "Occupancy", groups = "Browse")
weta.ddl = make.design.data(weta.process)
# time factor variable copied to 'Day' to match name used in the lab
weta.ddl$p$Day = weta.ddl$p$time
# Define p models
p.dot = list(formula = ~ 1)
p.browse = list(formula = ~ Browse)
p.day = list(formula = ~ Day)
p.obs = list(formula = ~ Obs1 + Obs2)
p.day.obs = list(formula = ~ Day + Obs1 + Obs2)
p.day.browse = list(formula = ~ Day + Browse)
p.obs.browse = list(formula = ~ Obs1 + Obs2 + Browse)
p.day.obs.browse = list(formula = ~ Day + Obs1 + Obs2 + Browse)
# Define Psi models
Psi.dot = list(formula = ~ 1)
Psi.browse = list(formula = ~ Browse)
# Create model list
cml = create.model.list("Occupancy")
# Run and return marklist of models
return(mark.wrapper(cml, data = weta.process, ddl = weta.ddl))
}
```
### Run the models and examine the output
It's very simple to then run the function and each of the models. As implemented here, the output from each of the models appears in the console where it can be reviewed when the function written above is called. If you don't want the output from every model to appear automatically, see the note above the "mark.wrapper" command for how to set the option of suppressing the output. One can also examine model-specific output in other ways as shown below.
```{r}
weta.models <- fit.weta.models()
```
### Examine model-selection table
Once the models are run, we can examine the model-selection table. We can also examine model-specific output.
```{r}
options(width = 160)
weta.models
```
### Use AIC instead of AICc for model selection
Here, we use AIC so that we can compare direclty with results presented in the Occupancy book. You can see that things match (as they should) for most models but that something appears amiss in the book with the Psi(.)p(Obs+Browse) model as it should have 5 parameters but is only listed as having 4 in the book (it is assigned k=5 here).
```{r}
options(width = 160)
# Store and view a model table that uses AIC rather than AICc
AIC.table = weta.models
AIC.table$model.table = model.table(weta.models, use.AIC = TRUE)
AIC.table
```
### Look at output from top model
```{r}
# View the model names
names(weta.models)
# examine the output from top-ranked model (#7) and
# store top model in object with short name
top <- weta.models$p.day.obs.Psi.browse
# look at summary of top model's output
summary(top, showall = FALSE)
```
### Model Average Psi
Here, model-averaging is done for Psi in each habitat setting.
```{r}
Mod.Avg.Psi <- model.average(weta.models, "Psi")
Mod.Avg.Psi
```
### Additional Work
There is much more that can be done in RMark. And, in the help for the RMark package, the weta example has been worked out in detail. You can see the details by typing "?weta" after loading the RMark package. If you read through the example, you'll see that much of what's provided on pages 116-122 of the Occupancy book is worked out in the RMark 'weta' example.