🌿 CT Invasives

Methods

I designed the study so that two independent lines of evidence point at the same question. My field survey measures the fine-scale edge gradient, and my real-data analysis tests the same idea at landscape scale.

Workflow diagram
My overall workflow, from field data sheet through statistical, spatial, and real-data analyses to the final maps and report.

1 · Field sampling design

At each site I lay belt transects perpendicular to a mapped edge, and I classify the edge as human-disturbed (road, trail, mowed field margin) or natural (stream bank, treefall gap). Along each transect I place quadrats at fixed distances of 0, 5, 10, 25, and 50 m from the edge. That distance gradient is my main predictor.

Study area

The study area includes northwest and central Connecticut, with special attention to two community landscapes: Avon and the Farmington Valley, where I grew up, and Lakeville/Salisbury, where I attend school.

Public occurrence records show the broader regional patterns. My field-study sites are designed to test those patterns at the local habitat scale, especially along roads, trails, fields, stream corridors, and forest edges. Seven sites span both areas:

Northwest hills

Farmington Valley

2 · Statistical analysis: does invasion track edges?

Because quadrats on the same transect are not independent, I model that correlation two complementary ways.

Population-averaged models (Python)

I fit generalized estimating equations (GEE) with an exchangeable correlation clustered by transect. That gives a binomial model for presence and a Gaussian model for logit-transformed cover, using distance, edge type, species, their interaction, and covariates as predictors.

Mixed models & nonlinear effects (R)

I then fit true mixed models with a random transect effect (lme4), test fixed effects with Type-II Wald tests, and use a generalized additive model (mgcv) with a per-species smooth of distance and a 2-D spatial smooth. I check residual spatial autocorrelation with Moran's I and an nlme spatial-correlation model.

3 · Spatial analysis: where are the clusters?

I map clustering with the Getis-Ord Gi* local statistic, computed within each site from a k-nearest-neighbour weights matrix (k = 8) with 999 permutations; quadrats with p < 0.05 are hot or cold spots. I run it for total invasive cover and for each species separately, and I quantify whether the species cluster in the same places using co-occurrence counts and Jaccard overlap.

Finally I cross the hotspots with a conservation-value score (native richness and interior position) to label each location as Remove / Treat, Restore native, Monitor, or Low.

4 · Real-data validation

To test the hypothesis independently of my own survey, I pull real records and layers for the same area:

A note on what is real and what is illustrative. My field survey has not been collected yet, so the statistical and per-site spatial results I show are computed on simulated data to demonstrate the analysis works end-to-end. My GBIF and CT ECO results use real data. I label every figure accordingly.

Data & tools

Everything is reproducible: my real-data results come from open public sources, and my analysis runs on free, open-source tools.

Data sources

GBIF

Real occurrence records (iNaturalist research-grade + herbarium specimens), pulled via the open GBIF API for my four species across northwest and central Connecticut.

gbif.org

CT ECO land cover

Connecticut's Changing Landscape (2015), sampled live from the CT ECO ArcGIS service for my disturbed-land test. Land cover, impervious surface, imagery.

cteco.uconn.edu

CT invasive plant list

I selected my species from Connecticut's official list, maintained by the CT Invasive Plants Council / UConn (updated October 2024). All four are classified invasive and prohibited under CGS §22a-381d.

cipwg.uconn.edu

Dynamic World

Near-real-time 10 m land cover from Sentinel-2, via Google Earth Engine. I use its 2025 to 2026 data for the higher-resolution disturbed-land and distance-to-built tests, which gives a current cross-check on the 2015 layer.

dynamicworld.app

For environmental layers I also use the CT Geodata Portal and CT DEEP GIS Open Data (roads, hydrography, boundaries).

Tools

My analysis scripts

ScriptWhat it doesData
fetch_real_data.pyPull GBIF occurrence recordsreal
hotspot_real_data.pyGi* hotspots from real recordsreal
make_web_map.pyInteractive Leaflet maps of the real datareal
landcover_test.pyCT ECO 2015 disturbed-land used-vs-available testreal
landcover_dynamicworld.pySame test on Dynamic World 2025-26 (10 m, Earth Engine)real
distance_to_built_dw.pyDistance-to-built edge-proximity test (Dynamic World)real
analysis_python.pyGEE models of the edge gradientframework
analysis_advanced.RMixed models, GAM, spatial modelsframework
hotspot_priority.pyGi* + conservation priority zonesframework
hotspot_by_species.pyPer-species Gi* + overlapframework
Caveat I keep in mind. The GBIF occurrence records are opportunistic (citizen-science and herbarium), so I rely on the background comparison as the key control and treat the regional hotspots as effort-aware. My field transects remain the rigorous test of the fine-scale edge gradient, with true absences by design.

See my results →