Dear Unmarked Community:
I am hoping to use pcountOpen to estimate 1) temporal trends in abundance and 2) the effects annual weather factors on temporal variation in abundance of various lizard species in the Sonoran Desert. I am not great with R and fairly new to Unmarked so my questions should be representative of many prospective users (and hopefully not too naïve!). After reading all posts with the search term “pcountOpen” and the webinar/workshop materials, I have fit trend models that seem to be providing reasonable estimates but have questions on model fitting, strategy, and interpretation that I would be very grateful for feedback on.
Background: Lizards were surveyed along up to 32 fixed transects per year during one daily visit a year in both spring and summer for 25 years. Sixteen transects were surveyed most years, and 16 others were added later in the study (mean = 23 transects/yr) and sampled annually depending on resources. During each daily visit, transects were surveyed repeatedly 3-8 times from ~6AM to 12PM to ensure overlap with times of peak animal activity. Thus, I assumed closure among repeated surveys during each daily visit. Because closure cannot be reliably assumed between seasons in the same year, I developed a separate model for each species in each season. Summary of an unmarked frame for one species and season, and the best detection model follows:
32 sites1) Is there a better way to handle data from each season? Because the presence and magnitude of trends vary between seasons for the same species, I’d like assess trends for both seasons together but am unsure how to proceed in one model. Including a row for each transect in each season violates the independence assumption, while pooling data among secondary periods for both seasons in each year violates the closure assumption. Is there a way to do this or is it best to model each season separately?
2) Is it necessary to model the initial abundance (lambda) when fitting trend models (dynamics=“trend”). One somewhat related post suggests the need to fit a siteCov with values from year 1 in lambda formula, while fitting a yearlySiteCovs for all years in gamma formula (e.g., pcountOpen(lambdaformula = ~Yr1, gammaformula = ~Yr1_25, …). In my case, I input yearlySiteCovs for year as 25 columns for each year with dummy variables ranging from -12 to 12 centered on the middle year=0.
3) The manual indicates the trend parameter gamma is the finite rate of population change (e.g., lambda), but my output suggests it is the instantaneous rate of population change (r). For example, the trend model below estimates a significant gamma of -0.0123. Thus, based on the calculations below, I assume lambda = 0.9878 and that populations are declining at a rate = 1.22%/yr or 25.5% over all years. Which interpretation is correct?
4) My final question concerns modifying my trend models to address the 2nd objective (how weather affects temporal variation in abundance). To do so, do I maintain the dynamics=“trend” syntax and simply replace my yearlySiteCovs (and perhaps SiteCovs for initial abundance) for year with those for weather factors? I have explored other fitting options (e.g., dynamics=“autoreg”) but they run for many hrs and then typically crash R. If anyone can provide some example code or suggestions for doing this I would be very grateful.
Thanks tons!
Aaron
Jeffrey A. Hostetler, Ph.D.
Postdoctoral Fellow
Migratory Bird Center
Smithsonian Conservation Biology Institute
National Zoological Park
MRC 5503, Washington, DC 20013-7012
Dear Jeff, Dan, et al.
Thanks for the feedback gentlemen, it’s very helpful! I should have known you have to exp^ the coefficient to compute lambda given it’s a Poisson process model.
Hoping you can help with an additional question on interpretation, and clarify the data structure for the 2-season model. As suggested by Jeff, I replaced the year effect by fitting various (unstandardized) weather factors in the process model to assess hypothesized weather effects on temporal variation in population growth rate. Some model selection results with the first 2 models follow:
|
Hypothesis (predicted effect) |
nPars |
deltaAIC |
|
Prey Enhancement (ws rain t-1) |
11 |
0 |
|
Prey Enhancement (ws rain t-1) + Reproductive Stress (ws mean max. temp t-1) |
12 |
1.3 |
|
Prey Enhancement (ws rain t-1) + Winter Stress (cs mean min temp t-0.5) |
12 |
1.88 |
|
Winter Stress (cs mean min temp t-0.5) |
11 |
5.79 |
|
Reproductive Stress (ws mean max. temp t-1) |
11 |
7.01 |
|
Prey Enhancement (ws rain t-1) + Predation (mean annual rain t-2,3,4) |
12 |
17.3 |
|
Predation (mean annual rain t-2,3,4) |
11 |
22.84 |
Call:
pcountOpen(lambdaformula = ~1, gammaformula = ~Pws, omegaformula = ~1, pformula = ~Temp + I(Temp^2) + TAS + I(TAS^2) + Topo + MRain, data = cnti.umf, mixture = "P", K = 70, dynamics = "trend", se = T)
Abundance:
Estimate SE z P(>|z|)
2.61 0.131 19.9 2.69e-88
Recruitment:
Estimate SE z P(>|z|)
(Intercept) 0.12153 0.042208 2.88 0.00398
Pws -0.00125 0.000407 -3.06 0.00220
Detection:
Estimate SE z P(>|z|)
(Intercept) -2.1091 0.1668 -12.64 1.23e-36
Temp -0.1106 0.0579 -1.91 5.63e-02
I(Temp^2) -0.3185 0.0308 -10.34 4.68e-25
TAS 0.3701 0.0567 6.52 6.82e-11
I(TAS^2) -0.0660 0.0262 -2.52 1.18e-02
Toporocky slope -0.9199 0.2007 -4.58 4.57e-06
Topovalley floor 0.2688 0.1525 1.76 7.80e-02
MRain -0.0766 0.0247 -3.10 1.95e-03
AIC: 7678.935
Call:
pcountOpen(lambdaformula = ~1, gammaformula = ~Pws + Tws_max, omegaformula = ~1, pformula = ~Temp + I(Temp^2) + TAS + I(TAS^2) + Topo + MRain, data = cnti.umf, mixture = "P", K = 70, dynamics = "trend", se = T)
Abundance:
Estimate SE z P(>|z|)
2.62 0.13 20.1 3.6e-90
Recruitment:
Estimate SE z P(>|z|)
(Intercept) 1.78301 0.621129 2.87 0.004097
Pws -0.00141 0.000419 -3.36 0.000775
Tws_max -0.04563 0.016915 -2.70 0.006979
Detection:
Estimate SE z P(>|z|)
(Intercept) -2.1443 0.1701 -12.60 2.00e-36
Temp -0.1102 0.0577 -1.91 5.64e-02
I(Temp^2) -0.3144 0.0307 -10.23 1.38e-24
TAS 0.3678 0.0565 6.51 7.62e-11
I(TAS^2) -0.0657 0.0262 -2.51 1.21e-02
Toporocky slope -0.9113 0.2039 -4.47 7.82e-06
Topovalley floor 0.2748 0.1549 1.77 7.61e-02
MRain -0.0727 0.0247 -2.94 3.23e-03
AIC: 7680.236
Based on Jeff’s logic, I assume the coefficient for Pws (warm-season rain in mm 1 yr prior) in the first model means only that rainfall is declining across time, and not that each additional mm of rain has a exp^-0.00125 on the % change in abundance, as in a Poisson GLM (and the same for Tws_max in the 2nd model holding Pws constant). If that’s the case, wouldn’t the presence of trends in the explanatory variables alone contribute to changes in AIC scores of various models and bias model selection? How do I calculate the effect? Is a 100 mm increase in Pws equal to the intercept + (Coef Pws*change in Pws) rain or exp^(0.1215 + (-0.00125*100)) = 0.9965 or a 0.35% decline in population growth rate, as suggested by Jeff’s math? Biologically, increasing Pws should have a positive effect on abundance, and does based on a model using the raw counts.
I’m not sure whether I have my data structured as Dan suggested, which is important because it doubles sample sizes! In this case, I want to know how overall population growth varies across time and is affected by weather factors, and so average effects between seasons are fine. I may have formatted it correctly but am getting the following error even though all names in my code match those in the data file:
Error in `[.data.frame`(CNTI, , c("T1989_1sp", "T1989_2sp", "T1989_3sp", : undefined columns selected
To format, I placed count data for each year and season side by side (my 200 columns for 25 yrs x 8 secondary surveys in spring are next to the 25 yrs x 8 block for summer) and did the same with each ObsCov. I then entered each yearlySiteCov as 2 columns x the number of years, so there is 1 for each season in each year. So for the year covariate Dan suggested I have the column names (and values): Yr1989su (=1), Yr1990su (=2), Yr1991su (=3)…., Yr1989sp (=1), Yr1990sp (=2), Yr1991s (=3)... So 2 blocks of 25 columns side by side. I assume I then create one covariate for year as: yearlySiteCovs = list(Yr=CNTI[,c("Yr1989sp","Yr1989su","Yr1990sp","Yr1990su",…. and then fit Yr in my process model. I can provide code and data if anyone would be willing to help me.
Thanks so much folks!
Aaron
<w:LsdException Locked="false" Priority="66" SemiHidden="fa...