stories/hartland.md

BBS route that goes by Hartland

Load specific route

The New Hartford route goes up and down Riverton Road and was started in 1994. It feels pretty auspicious. It is route 102, region 18.

Here are the species present in this route over the past 25 years:

## Joining, by = "id"
| id | mean\_size | english\_common\_name | | :----- | ----------: | :--------------------------------------------- | | sp4280 | 3.119282 | Ruby-throated Hummingbird | | sp7510 | 5.771964 | Blue-gray Gnatcatcher | | sp7260 | 8.022228 | Brown Creeper | | sp6730 | 8.028863 | Prairie Warbler | | sp6410 | 8.176580 | Blue-winged Warbler | | sp6870 | 8.191548 | American Redstart | | sp6670 | 8.690181 | Black-throated Green Warbler | | sp6540 | 9.012196 | Black-throated Blue Warbler | | sp6590 | 9.298763 | Chestnut-sided Warbler | | sp7280 | 9.345654 | Red-breasted Nuthatch | | sp6620 | 9.492168 | Blackburnian Warbler | | sp6810 | 9.826291 | Common Yellowthroat | | sp7222 | 9.897642 | Winter Wren | | sp4670 | 10.210357 | Least Flycatcher | | sp6520 | 10.624649 | Yellow Warbler | | sp7210 | 10.766179 | House Wren | | sp7350 | 10.803537 | Black-capped Chickadee | | sp6360 | 11.369229 | Black-and-white Warbler | | sp6710 | 11.531489 | Pine Warbler | | sp6556 | 11.775897 | (unid. Myrtle/Audubon’s) Yellow-rumped Warbler | | sp5600 | 12.210202 | Chipping Sparrow | | sp6160 | 12.554152 | Bank Swallow | | sp4661 | 12.750238 | Alder Flycatcher | | sp5290 | 12.778235 | American Goldfinch | | sp5630 | 12.841621 | Field Sparrow | | sp6270 | 12.847626 | Warbling Vireo | | sp4660 | 13.428910 | Willow Flycatcher | | sp6390 | 13.681880 | Worm-eating Warbler | | sp4610 | 13.906114 | Eastern Wood-Pewee | | sp5980 | 14.602984 | Indigo Bunting | | sp6170 | 15.507200 | Northern Rough-winged Swallow | | sp6750 | 15.583659 | Northern Waterthrush | | sp5840 | 15.690661 | Swamp Sparrow | | sp6240 | 16.219341 | Red-eyed Vireo | | sp6290 | 16.814482 | Blue-headed Vireo | | sp6130 | 17.816031 | Barn Swallow | | sp6280 | 18.024075 | Yellow-throated Vireo | | sp6740 | 18.761662 | Ovenbird | | sp5170 | 18.920701 | Purple Finch | | sp5677 | 19.603705 | (unid. race) Dark-eyed Junco | | sp4560 | 19.751938 | Eastern Phoebe | | sp7180 | 19.787783 | Carolina Wren | | sp6760 | 19.953199 | Louisiana Waterthrush | | sp6140 | 20.946833 | Tree Swallow | | sp7270 | 21.226533 | White-breasted Nuthatch | | sp5190 | 21.242841 | House Finch | | sp7310 | 21.956907 | Tufted Titmouse | | sp5810 | 22.774715 | Song Sparrow | | sp5580 | 23.592726 | White-throated Sparrow | | sp4230 | 23.925906 | Chimney Swift | | sp3940 | 25.799751 | Downy Woodpecker | | sp7660 | 26.421533 | Eastern Bluebird | | sp6080 | 27.548473 | Scarlet Tanager | | sp6882 | 27.602077 | House Sparrow | | sp7590 | 29.750193 | Hermit Thrush | | sp6190 | 31.393964 | Cedar Waxwing | | sp7560 | 31.974124 | Veery | | sp5070 | 32.900268 | Baltimore Oriole | | sp4520 | 33.447896 | Great Crested Flycatcher | | sp7040 | 35.284905 | Gray Catbird | | sp4440 | 39.842513 | Eastern Kingbird | | sp5870 | 39.969766 | Eastern Towhee | | sp4950 | 40.839762 | Brown-headed Cowbird | | sp5930 | 42.494258 | Northern Cardinal | | sp5950 | 43.685054 | Rose-breasted Grosbeak | | sp7030 | 50.072708 | Northern Mockingbird | | sp7550 | 50.147079 | Wood Thrush | | sp4020 | 50.370861 | Yellow-bellied Sapsucker | | sp3880 | 51.917638 | Black-billed Cuckoo | | sp4980 | 52.678119 | Red-winged Blackbird | | sp5140 | 58.422958 | Evening Grosbeak | | sp3870 | 62.020298 | Yellow-billed Cuckoo | | sp3930 | 62.626135 | Hairy Woodpecker | | sp4090 | 69.818549 | Red-bellied Woodpecker | | sp4930 | 78.194586 | European Starling | | sp7610 | 78.427017 | American Robin | | sp4770 | 87.635399 | Blue Jay | | sp5110 | 107.076965 | Common Grackle | | sp3160 | 119.138900 | Mourning Dove | | sp4123 | 132.280950 | (unid. Red/Yellow Shafted) Northern Flicker | | sp4900 | 286.481032 | Fish Crow | | sp4050 | 290.026751 | Pileated Woodpecker | | sp3131 | 356.093468 | Rock Pigeon | | sp3330 | 417.962877 | Cooper’s Hawk | | sp3430 | 444.194269 | Broad-winged Hawk | | sp4880 | 452.332550 | American Crow | | sp3000 | 591.393452 | Ruffed Grouse | | sp3390 | 611.212772 | Red-shouldered Hawk | | sp3340 | 877.258686 | Northern Goshawk | | sp4860 | 920.056556 | Common Raven | | sp3370 | 1119.059739 | Red-tailed Hawk | | sp3250 | 1608.542454 | Turkey Vulture | | sp3100 | 6043.706643 | Wild Turkey |
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Here is how species richness, abundance, biomass, and energy have changed over those years:

Here is population abundances:

Trends/tradeoffs in E and N

We can do some (crude) linear model fitting. I’ve generally been finding that lms are OK, with caveats:

## 
## Call:
## lm(formula = scaled_value ~ year, data = filter(sv_long, currency == 
##     "abundance"))
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.37520 -0.75770 -0.09668  0.45059  1.82506 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)  
## (Intercept) 112.11241   51.80293   2.164   0.0411 *
## year         -0.05589    0.02582  -2.164   0.0411 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.9311 on 23 degrees of freedom
## Multiple R-squared:  0.1692, Adjusted R-squared:  0.1331 
## F-statistic: 4.684 on 1 and 23 DF,  p-value: 0.04107

##                  2.5 %        97.5 %
## (Intercept)  4.9498911 219.274937839
## year        -0.1093092  -0.002467888

## 
## Call:
## lm(formula = scaled_value ~ year, data = filter(sv_long, currency == 
##     "energy"))
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -1.5848 -0.7822 -0.1643  0.5600  2.1482 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)
## (Intercept) -33.66483   56.39824  -0.597    0.556
## year          0.01678    0.02811   0.597    0.556
## 
## Residual standard error: 1.014 on 23 degrees of freedom
## Multiple R-squared:  0.01526,    Adjusted R-squared:  -0.02756 
## F-statistic: 0.3563 on 1 and 23 DF,  p-value: 0.5564

##                    2.5 %      97.5 %
## (Intercept) -150.3334871 83.00381889
## year          -0.0413774  0.07494154

Important points:

I’ve played a bit with autocorrelation and transformations, but trying not to get hung up on p values. Basically, the lms are generally aligning with what looks intuitive from the plots: a gentle decline in individual abundance, but no signal in energy.

Importantly, even though the average slope for energy is pretty close to 0, I would not call this compensation in the sense that the size distribution is shifting such that the same amount of energy gets divided among varying numbers of individiuals. Under that scenario, we’d expect per capita energy use to trade off with abundance: when abundance is low, per capita energy use should be high to compensate. That is not what we see:

## 
## Call:
## lm(formula = scale(mean_energy) ~ scale(abundance), data = sv)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -1.2717 -0.6563 -0.4680  0.6210  2.1539 
## 
## Coefficients:
##                    Estimate Std. Error t value Pr(>|t|)
## (Intercept)      -7.236e-17  2.018e-01   0.000    1.000
## scale(abundance)  1.558e-01  2.060e-01   0.756    0.457
## 
## Residual standard error: 1.009 on 23 degrees of freedom
## Multiple R-squared:  0.02427,    Adjusted R-squared:  -0.01815 
## F-statistic: 0.5721 on 1 and 23 DF,  p-value: 0.4571

There’s pretty much no support for the notion that mean energy use declines with increasing abundance.

It looks to me a lot more like energy varies a lot but not systematically with time. Energy is also much more variable than abundance:

## [1] "energy sd/mean"

## [1] 0.2759679

## [1] "abundance sd/mean"

## [1] 0.1161095

Another notion is that energy should maybe track abundance? We have already seen that energy is more variable than abundance and that the overall trend for energy is not the same as the one for abundance. Here is the extent to which abundance predicts energy:

## 
## Call:
## lm(formula = scale(energy) ~ scale(abundance), data = sv)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -1.1418 -0.6300 -0.3767  0.6032  1.9007 
## 
## Coefficients:
##                    Estimate Std. Error t value Pr(>|t|)   
## (Intercept)      -4.945e-16  1.678e-01   0.000  1.00000   
## scale(abundance)  5.702e-01  1.713e-01   3.329  0.00292 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.8392 on 23 degrees of freedom
## Multiple R-squared:  0.3252, Adjusted R-squared:  0.2958 
## F-statistic: 11.08 on 1 and 23 DF,  p-value: 0.002919

So….decent, but a fair amount of error remaining. It’s difficult to know how much error is a lot of error for an ecological community a priori. We can say provisionally that this is probably not the reflection of an extremely high-fidelity, controlled, idealized amplification/dampening of a fixed energy distribution: there’s clearly play. But then again, we don’t expect communities to behave in highly controlled, high-fidelity, idealized ways! There are all kinds of sources of measurement error etc, plus stochasticity, plus small N sampling issues.

Fixed or variable ISDs

One interesting way energy could track abundance would be if there were essentially one ISD for a community that endured over time, and the ISD we observe at each time point is just the result of drawing (N_t) individuals from that distribution. In that scenario we would expect higher (N_t) to give us more energy, but there is still room for error around that relationship.

There are a variety of ways we could construct our ur-ISD:

The plots above are both constructed based on KDEs. There are assumptions and artefacts in there I’m not quite 100% on: the weighting of samples from different time steps. I also have a well-worn mental module that likes to construct ISDs via kdes or GMMs and then get started comparing them via overlap, etc. I’d like to explore something a little different at the moment, so I’m going to actually put a pin in things derived from KDEs and work instead off of pools of individuals.

This is the distribution of sizes of all the individuals we’ve ever seen on this route.

One possibility is that we’re equally likely to draw any of these individuals at any time step, and so we expect the ISD we observe at any time step to be a random sample of (N_t) of all of these individuals. Alternatively, there could be substantively different underlying ISDs we are drawing our (N_t) individuals from, and the underlying ISDs could vary systematically over time or orthogonal/not-detectably-parallel-to time.

These possibilities go fairly deep in their implications. We can start by thinking about it in terms of energy?

Energy could vary without a systematic trend if the ISD at each time step is generated via the random draws from an ur-ISD. But that variation might or might not rise to the magnitude we observe here.

Energy variability from a randomized isd

## Joining, by = "year"

## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

The cloud of lines represent the distribution of total energy values for 1000 bootstrap sampled ISDs. The histogram is the coefficient of variation (sd/mean) for E over every simulation; the red line is the observed. The observed E time series is way more variable than any of the ones that we generated by resampling from a stable ISD.

Similarly, the cloud of dots visualizes the variation in energy-abundance relation obtained via sampling. Compared to the red dots, which are observed.

## Warning in mean.default(percentiles$low_p): argument is not numeric or logical:
## returning NA

## [1] NA

## Warning in mean.default(percentiles$high_p): argument is not numeric or logical:
## returning NA

## [1] NA

## Warning in mean.default(percentiles$outside_95): argument is not numeric or
## logical: returning NA

## [1] NA

## [1] "Energy too low:"

## [1] 0.32

## [1] "Energy too high:"

## [1] 0.24

## [1] "Energy outside 95% interval (2 sided):"

## [1] 0.56

## Joining, by = "year"

So - I could be wrong about this - but I think we’re getting way too many years with suspiciousy high/low total energy, than we would expect if every year were a samples of (N_t) individuals from the overall ISD. Using 2.5 and 97.5 as cutoffs, half the years are outside that interval.

I think the way for a year to be outside that interval is for its ISD to be relatively very different from the mean/overall ISD. For the difference to propagate all the way up to energy, it’s the per capita energy that is different. You can have a different ISD and not have per capita energy change, but you can’t have per capita energy change and not have a different ISD.

Years with unusual energy are not necessarily similar to each other in their ISDs. But they might be.

## Joining, by = "year"

Time ideas

One thing I find interesting about this exercise is to ask whether the position of the observed E shifts systematically over time.

It might be interesting to look at comparisons to the overall ISD, vs a pool from a local short time period, vs a pool from the same number of time steps randomly distributed. So, how does E in 1990 compare to a random draw from a pool of 1988, 1989, 1991, 1992, vs a random draw from a pool of 1992, 2013, 1997, 2002? If observations are closer to a local moving average ISD, than to one randomly dispersed in time, you have some kind of temporal structure in the variability. But if not, there’s variability but it’s not structured temporally.

A related-but-slightly-sideways question is, how many distinct ur-ISDs do we think there are?



diazrenata/BBSstories documentation built on July 6, 2020, 11:59 a.m.