--- title: "Lab 02 in R and R Markdown" author: "WILD 502 - Jay Rotella" output: html_document --- ### Bring in the dataset and manipulate it slightly The code immediately below imports the data, manipulates the data, and adds some labels to some of the variables. Here, we'll also use the *AICcmodavg* package in the model-selection work. ```{r, message=FALSE} library(RMark) # for converting the input file library(AICcmodavg) # for model-selection library(ggplot2) # for plotting library(visreg) # an alternative plotting package # bring in the data file fawns <- convert.inp("http://www.montana.edu/rotella/documents/502/lab02-fawns.inp", covariates = c("area", "sex", "mass", "length")) # add "length.sq" variable for use in quadratic models fawns$length.sq <- (fawns$length)^2 head(fawns) # convert area & sex variables to factors so that we can treat them as # grouping variables in the analysis to ease working with output later fawns$area <- factor(fawns$area, levels = c(0, 1), labels = c("control", "treatment")) fawns$sex <- factor(fawns$sex, levels = c(0, 1), labels = c("female", "male")) # Store versions of fate for use in final plotting # first a factor version that has nice labels fawns$fate <- factor(as.numeric(fawns$ch), levels = c(11, 10), labels = c("died", "lived")) # second, a numeric version that's 0 = dead, 1 = lived fawns$Fate <- 2 - as.numeric(fawns$fate) summary(fawns) # we know from other work on this dataset that there is 1 record with # a very high value for mass, which we want to drop fawns2 = fawns[fawns$mass < 70, ] summary(fawns2) ``` The dataset now contains information on `r nrow(fawns2)` fawns. Because we worked on the summarizing and evaluating the covariate information [in an earlier exercise](http://www.montana.edu/rotella/documents/502/FawnsDataSummary.pdf), we won't do that work here and will get right to the analyses. ### Analyze the data Here, we run the same set of models that were run in lab in MARK. The code below shows how to do that in *glm* in R. ```{r} S.dot <- glm(fate ~ 1, data = fawns2, family = binomial) S.area <- glm(fate ~ area, data = fawns2, family = binomial) S.mass <- glm(fate ~ mass, data = fawns2, family = binomial) S.length <- glm(fate ~ length, data = fawns2, family = binomial) S.length.sq <- glm(fate ~ length + length.sq, data = fawns2, family = binomial) S.sex <- glm(fate ~ sex, data = fawns2, family = binomial) S.area.length <- glm(fate ~ area + length, data = fawns2, family = binomial) S.length.mass <- glm(fate ~ length + mass, data = fawns2, family = binomial) # sex-specific intercepts & common slope S.sex.length <- glm(fate ~ sex + length, data = fawns2, family = binomial) # 1 intercept & sex-specific slopes S.sex.by.length <- glm(fate ~ sex:length, data = fawns2, family = binomial) # sex-specific intercepts & slopes S.sex.x.length <- glm(fate ~ sex * length, data = fawns2, family = binomial) ##set up named list Cand.mods <- list("S.dot" = S.dot, "S.area" = S.area, "S.mass" = S.mass, "S.length" = S.length, "S.length.sq" = S.length.sq, "S.sex" = S.sex, "S.area.length" = S.area.length, "S.length.mass" = S.length.mass, "S.sex.length" = S.sex.length, "S.sex.by.length" = S.sex.by.length, "S.sex.x.length" = S.sex.x.length) ##compute table AICc.table <- aictab(cand.set = Cand.mods, second.ord = TRUE) AICc.table ``` ### Plot predictions from top model ```{r} # make prediction data frame dat.pr = expand.grid(sex = c("male", "female"), length = seq(min(fawns2$length), max(fawns2$length), by = 1)) head(dat.pr) tail(dat.pr) # make predictions on log-odds scale pred = predict(S.sex.x.length, newdata = dat.pr, type = c("link"), se.fit = TRUE) # calculate predicted values and 95% CIS on real parameter scale dat.pr$fit = plogis(pred$fit) dat.pr$lci.fit = plogis(pred$fit - 1.96 * pred$se.fit) dat.pr$uci.fit = plogis(pred$fit + 1.96 * pred$se.fit) # print table of covariate values and associated predicted values head(dat.pr) tail(dat.pr) ``` ```{r, fig.width=8} # make a plot p <- ggplot(dat.pr, aes(x = length, y = fit, group = sex)) + geom_line(size = 1.5, aes(colour = sex)) + geom_ribbon(aes(ymin = lci.fit, ymax = uci.fit), alpha = 0.2) + scale_colour_brewer(palette = "Set1") + theme(legend.position = c(0.25, 0.75), legend.justification = c(1, 0)) + xlab("Body length (cm)") + ylab("Estimated Survival Rate") + geom_jitter(data = fawns2, aes(y = Fate, color = sex), height = 0.025) # print the plot p ``` You can also use the 'visreg' package to get a plot quite simply. With this method, you don't have to go to the trouble of making a prediction data.frame. This can be good (it's fast) and bad (you might not be as sure of what happened!). I do like turning the 'rug' on: this shows you the observed values of the covariate. Here you see where you have mass observations for each sex of fawn and you see what the fates for each sex. The first plot presents estimated log-odds and the second plot presents estimated survival rates. ```{r, fig.width=10} visreg(S.sex.x.length, "length", by = "sex", rug = 2) visreg(S.sex.x.length, "length", by = "sex", scale = "response", rug = 2) ```