ecological-agent-skills 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENT_CONTEXT.md +191 -0
- package/CATALOG.md +329 -0
- package/LICENSE +692 -0
- package/README.md +347 -0
- package/bin/install.mjs +168 -0
- package/docs/comparison-with-alternatives.md +38 -0
- package/docs/global-examples-index.md +103 -0
- package/docs/repository-statistics.md +101 -0
- package/docs/theoretical-foundations.md +188 -0
- package/environment.yaml +106 -0
- package/examples/community/arctic_tundra_vegetation_example.md +247 -0
- package/examples/community/bird_landuse_example.md +63 -0
- package/examples/community/phytoplankton_reservoir_example.md +60 -0
- package/examples/community/reef_fish_indopacific_example.md +221 -0
- package/examples/impact/baci_road_example.md +57 -0
- package/examples/impact/ecosystem_services_atlantic_forest.md +83 -0
- package/examples/impact/forest_loss_borneo_timeseries_example.md +225 -0
- package/examples/occupancy/puma_camera_example.md +61 -0
- package/examples/occupancy/snow_leopard_himalayas_example.md +204 -0
- package/examples/reproducible/whittaker_biome_sdm_example.md +406 -0
- package/examples/sdm/anteater_cerrado_example.md +69 -0
- package/examples/sdm/jaguar_amazon_example.md +80 -0
- package/examples/sdm/koala_climate_change_example.md +170 -0
- package/examples/sdm/wolf_recolonization_europe_example.md +193 -0
- package/package.json +43 -0
- package/renv.lock +194 -0
- package/skills/SKILL_INDEX.json +1020 -0
- package/skills/acoustic-monitoring/SKILL.md +163 -0
- package/skills/acoustic-monitoring/examples/example-prompts.md +100 -0
- package/skills/acoustic-monitoring/examples/temperate_forest_birds_example.md +285 -0
- package/skills/acoustic-monitoring/resources/acoustic-indices-reference.md +93 -0
- package/skills/acoustic-monitoring/resources/soundscape-ecology-guide.md +90 -0
- package/skills/acoustic-monitoring/resources/species-id-tools-comparison.md +89 -0
- package/skills/acoustic-monitoring/scripts/batch_species_detection.py +360 -0
- package/skills/acoustic-monitoring/scripts/compute_acoustic_indices.R +235 -0
- package/skills/acoustic-monitoring/scripts/compute_acoustic_indices.py +374 -0
- package/skills/biostatistics-workbench/SKILL.md +140 -0
- package/skills/biostatistics-workbench/examples/example-prompts.md +39 -0
- package/skills/biostatistics-workbench/resources/effect-size-reference.md +81 -0
- package/skills/biostatistics-workbench/resources/glm-family-link-reference.md +47 -0
- package/skills/biostatistics-workbench/resources/test-selection-guide.md +93 -0
- package/skills/biostatistics-workbench/scripts/glm_pipeline.R +78 -0
- package/skills/biostatistics-workbench/scripts/glm_pipeline.py +210 -0
- package/skills/camera-trap-processing/SKILL.md +159 -0
- package/skills/camera-trap-processing/examples/example-prompts.md +103 -0
- package/skills/camera-trap-processing/examples/leopard_serengeti_example.md +231 -0
- package/skills/camera-trap-processing/resources/activity-patterns-reference.md +113 -0
- package/skills/camera-trap-processing/resources/camtrapR-workflow-guide.md +130 -0
- package/skills/camera-trap-processing/resources/detection-event-definition-guide.md +89 -0
- package/skills/camera-trap-processing/scripts/estimate_activity.R +169 -0
- package/skills/camera-trap-processing/scripts/process_camtrap_data.R +179 -0
- package/skills/camera-trap-processing/scripts/process_camtrap_data.py +192 -0
- package/skills/community-ecology-ordination/SKILL.md +133 -0
- package/skills/community-ecology-ordination/examples/example-prompts.md +35 -0
- package/skills/community-ecology-ordination/resources/dissimilarity-metric-guide.md +53 -0
- package/skills/community-ecology-ordination/resources/nmds-interpretation-guide.md +104 -0
- package/skills/community-ecology-ordination/scripts/__pycache__/community_analysis.cpython-311.pyc +0 -0
- package/skills/community-ecology-ordination/scripts/community_analysis.R +143 -0
- package/skills/community-ecology-ordination/scripts/community_analysis.py +231 -0
- package/skills/ecological-data-foundation/SKILL.md +129 -0
- package/skills/ecological-data-foundation/examples/example-prompts.md +40 -0
- package/skills/ecological-data-foundation/resources/coordinate-cleaning-flags.md +66 -0
- package/skills/ecological-data-foundation/resources/darwin-core-glossary.md +91 -0
- package/skills/ecological-data-foundation/resources/data-citation-guide.md +265 -0
- package/skills/ecological-data-foundation/resources/gbif-data-citation-guide.md +193 -0
- package/skills/ecological-data-foundation/resources/qa-checklist.md +83 -0
- package/skills/ecological-data-foundation/scripts/__pycache__/clean_occurrences.cpython-311.pyc +0 -0
- package/skills/ecological-data-foundation/scripts/__pycache__/download_from_ebird.cpython-311.pyc +0 -0
- package/skills/ecological-data-foundation/scripts/__pycache__/download_from_inat.cpython-311.pyc +0 -0
- package/skills/ecological-data-foundation/scripts/__pycache__/download_from_iucn.cpython-311.pyc +0 -0
- package/skills/ecological-data-foundation/scripts/__pycache__/download_from_obis.cpython-311.pyc +0 -0
- package/skills/ecological-data-foundation/scripts/clean_occurrences.R +230 -0
- package/skills/ecological-data-foundation/scripts/clean_occurrences.py +268 -0
- package/skills/ecological-data-foundation/scripts/download_from_ebird.R +251 -0
- package/skills/ecological-data-foundation/scripts/download_from_ebird.py +364 -0
- package/skills/ecological-data-foundation/scripts/download_from_gbif.R +315 -0
- package/skills/ecological-data-foundation/scripts/download_from_gbif.py +407 -0
- package/skills/ecological-data-foundation/scripts/download_from_inat.R +238 -0
- package/skills/ecological-data-foundation/scripts/download_from_inat.py +304 -0
- package/skills/ecological-data-foundation/scripts/download_from_iucn.R +273 -0
- package/skills/ecological-data-foundation/scripts/download_from_iucn.py +344 -0
- package/skills/ecological-data-foundation/scripts/download_from_obis.R +248 -0
- package/skills/ecological-data-foundation/scripts/download_from_obis.py +318 -0
- package/skills/ecological-impact-assessment/SKILL.md +123 -0
- package/skills/ecological-impact-assessment/examples/example-prompts.md +32 -0
- package/skills/ecological-impact-assessment/resources/baci-design-guide.md +55 -0
- package/skills/ecological-impact-assessment/resources/fragmentation-metrics-reference.md +86 -0
- package/skills/ecological-impact-assessment/resources/pressure-index-template.md +78 -0
- package/skills/ecological-impact-assessment/resources/study-design-guide.md +168 -0
- package/skills/ecological-impact-assessment/scripts/baci_analysis.R +161 -0
- package/skills/ecological-impact-assessment/scripts/fragmentation_analysis.py +141 -0
- package/skills/ecological-impact-assessment/scripts/power_analysis_baci.R +274 -0
- package/skills/ecosystem-services-assessment/SKILL.md +125 -0
- package/skills/ecosystem-services-assessment/examples/example-prompts.md +24 -0
- package/skills/ecosystem-services-assessment/resources/es-indicator-reference.md +45 -0
- package/skills/ecosystem-services-assessment/resources/invest-parameter-guide.md +86 -0
- package/skills/ecosystem-services-assessment/resources/rusle-coefficients.md +88 -0
- package/skills/ecosystem-services-assessment/scripts/__pycache__/compute_es.cpython-311.pyc +0 -0
- package/skills/ecosystem-services-assessment/scripts/compute_es.py +189 -0
- package/skills/ecosystem-services-assessment/scripts/tradeoff_analysis.R +161 -0
- package/skills/environmental-time-series/SKILL.md +125 -0
- package/skills/environmental-time-series/examples/example-prompts.md +33 -0
- package/skills/environmental-time-series/resources/anomaly-indices-reference.md +88 -0
- package/skills/environmental-time-series/resources/bfast-parameter-guide.md +69 -0
- package/skills/environmental-time-series/scripts/__pycache__/recovery_trajectory.cpython-311.pyc +0 -0
- package/skills/environmental-time-series/scripts/__pycache__/trend_analysis.cpython-311.pyc +0 -0
- package/skills/environmental-time-series/scripts/recovery_trajectory.R +305 -0
- package/skills/environmental-time-series/scripts/recovery_trajectory.py +178 -0
- package/skills/environmental-time-series/scripts/trend_analysis.R +192 -0
- package/skills/environmental-time-series/scripts/trend_analysis.py +184 -0
- package/skills/geoprocessing-for-ecology/SKILL.md +123 -0
- package/skills/geoprocessing-for-ecology/examples/example-prompts.md +32 -0
- package/skills/geoprocessing-for-ecology/resources/crs-reference.md +62 -0
- package/skills/geoprocessing-for-ecology/resources/global-predictor-sources.md +331 -0
- package/skills/geoprocessing-for-ecology/resources/resampling-methods.md +57 -0
- package/skills/geoprocessing-for-ecology/scripts/__pycache__/download_predictors.cpython-311.pyc +0 -0
- package/skills/geoprocessing-for-ecology/scripts/download_predictors.R +239 -0
- package/skills/geoprocessing-for-ecology/scripts/download_predictors.py +379 -0
- package/skills/geoprocessing-for-ecology/scripts/stack_and_extract.R +224 -0
- package/skills/geoprocessing-for-ecology/scripts/stack_and_extract.py +172 -0
- package/skills/landscape-connectivity/SKILL.md +170 -0
- package/skills/landscape-connectivity/examples/example-prompts.md +96 -0
- package/skills/landscape-connectivity/examples/jaguar_mesoamerica_corridor_example.md +271 -0
- package/skills/landscape-connectivity/resources/circuitscape-parameter-guide.md +155 -0
- package/skills/landscape-connectivity/resources/graph-theory-for-ecology.md +134 -0
- package/skills/landscape-connectivity/resources/resistance-surface-guide.md +141 -0
- package/skills/landscape-connectivity/scripts/connectivity_analysis.py +387 -0
- package/skills/landscape-connectivity/scripts/connectivity_metrics.R +274 -0
- package/skills/landscape-connectivity/scripts/resistance_surface.R +239 -0
- package/skills/model-validation-and-uncertainty/SKILL.md +131 -0
- package/skills/model-validation-and-uncertainty/examples/example-prompts.md +30 -0
- package/skills/model-validation-and-uncertainty/resources/extrapolation-risk-guide.md +236 -0
- package/skills/model-validation-and-uncertainty/resources/metric-selection-guide.md +52 -0
- package/skills/model-validation-and-uncertainty/resources/threshold-selection-guide.md +64 -0
- package/skills/model-validation-and-uncertainty/scripts/__pycache__/validate_model.cpython-311.pyc +0 -0
- package/skills/model-validation-and-uncertainty/scripts/extrapolation_risk.R +315 -0
- package/skills/model-validation-and-uncertainty/scripts/validate_model.py +226 -0
- package/skills/model-validation-and-uncertainty/scripts/validate_sdm.R +162 -0
- package/skills/occupancy-and-detection/SKILL.md +126 -0
- package/skills/occupancy-and-detection/examples/example-prompts.md +33 -0
- package/skills/occupancy-and-detection/resources/detection-history-format.md +100 -0
- package/skills/occupancy-and-detection/resources/occupancy-study-design.md +47 -0
- package/skills/occupancy-and-detection/scripts/__pycache__/occupancy_analysis.cpython-311.pyc +0 -0
- package/skills/occupancy-and-detection/scripts/occupancy_analysis.R +160 -0
- package/skills/occupancy-and-detection/scripts/occupancy_analysis.py +159 -0
- package/skills/population-viability-analysis/SKILL.md +161 -0
- package/skills/population-viability-analysis/examples/african_elephant_pva_example.md +266 -0
- package/skills/population-viability-analysis/examples/example-prompts.md +95 -0
- package/skills/population-viability-analysis/resources/extinction-risk-thresholds.md +128 -0
- package/skills/population-viability-analysis/resources/matrix-model-guide.md +139 -0
- package/skills/population-viability-analysis/resources/sensitivity-elasticity-reference.md +182 -0
- package/skills/population-viability-analysis/scripts/matrix_pva.R +258 -0
- package/skills/population-viability-analysis/scripts/pva_analysis.py +442 -0
- package/skills/population-viability-analysis/scripts/stochastic_pva.R +353 -0
- package/skills/predictive-modeling-best-practices/SKILL.md +136 -0
- package/skills/predictive-modeling-best-practices/examples/example-prompts.md +58 -0
- package/skills/predictive-modeling-best-practices/resources/collinearity-decision-tree.md +65 -0
- package/skills/predictive-modeling-best-practices/resources/sampling-bias-correction.md +267 -0
- package/skills/predictive-modeling-best-practices/resources/spatial-cv-guide.md +73 -0
- package/skills/predictive-modeling-best-practices/scripts/__pycache__/spatial_cv.cpython-311.pyc +0 -0
- package/skills/predictive-modeling-best-practices/scripts/collinearity_check.R +112 -0
- package/skills/predictive-modeling-best-practices/scripts/spatial_cv.py +182 -0
- package/skills/reproducible-ecology-pipeline/SKILL.md +139 -0
- package/skills/reproducible-ecology-pipeline/examples/example-prompts.md +35 -0
- package/skills/reproducible-ecology-pipeline/resources/directory-structure-template.md +94 -0
- package/skills/reproducible-ecology-pipeline/resources/params-yaml-template.yaml +84 -0
- package/skills/reproducible-ecology-pipeline/resources/reproducibility-checklist-template.md +66 -0
- package/skills/reproducible-ecology-pipeline/scripts/generate_file_manifest.py +110 -0
- package/skills/reproducible-ecology-pipeline/scripts/init_project.sh +53 -0
- package/skills/spatial-prioritization/SKILL.md +162 -0
- package/skills/spatial-prioritization/examples/biodiversity_hotspot_prioritization_example.md +289 -0
- package/skills/spatial-prioritization/examples/example-prompts.md +93 -0
- package/skills/spatial-prioritization/resources/cost-surface-reference.md +130 -0
- package/skills/spatial-prioritization/resources/marxan-vs-prioritizr-comparison.md +125 -0
- package/skills/spatial-prioritization/resources/prioritizr-formulation-guide.md +188 -0
- package/skills/spatial-prioritization/resources/representation-targets-guide.md +186 -0
- package/skills/spatial-prioritization/scripts/prioritization_sensitivity.R +320 -0
- package/skills/spatial-prioritization/scripts/run_prioritization.R +336 -0
- package/skills/species-distribution-modeling/SKILL.md +139 -0
- package/skills/species-distribution-modeling/examples/example-prompts.md +36 -0
- package/skills/species-distribution-modeling/resources/algorithm-comparison.md +25 -0
- package/skills/species-distribution-modeling/resources/calibration-area-guide.md +71 -0
- package/skills/species-distribution-modeling/resources/climate-scenario-preparation.md +170 -0
- package/skills/species-distribution-modeling/resources/maxent-calibration-guide.md +211 -0
- package/skills/species-distribution-modeling/resources/sdm-checklist.md +37 -0
- package/skills/species-distribution-modeling/scripts/predict_distribution.R +236 -0
- package/skills/species-distribution-modeling/scripts/predict_distribution.py +286 -0
- package/skills/species-distribution-modeling/scripts/prepare_future_layers.R +351 -0
- package/skills/species-distribution-modeling/scripts/project_scenarios.R +220 -0
- package/skills/species-distribution-modeling/scripts/run_ensemble_sdm.R +99 -0
- package/skills/species-distribution-modeling/scripts/sdm_pipeline.py +318 -0
- package/skills/species-distribution-modeling/scripts/tune_maxnet.R +344 -0
- package/templates/SKILL_TEMPLATE.md +225 -0
- package/templates/checklists/data-submission-checklist.md +38 -0
- package/templates/checklists/post-analysis-checklist.md +55 -0
- package/templates/checklists/pre-analysis-checklist.md +31 -0
- package/templates/prompts/debug-skill.md +47 -0
- package/templates/prompts/invoke-skill.md +34 -0
- package/templates/prompts/invoke-workflow.md +45 -0
- package/templates/reports/technical-report-template.md +80 -0
- package/templates/scripts/logger_setup.R +79 -0
- package/templates/scripts/logger_setup.py +119 -0
- package/templates/scripts/params_loader.R +28 -0
- package/templates/scripts/params_loader.py +38 -0
- package/workflows/analyze-community-structure/WORKFLOW.md +72 -0
- package/workflows/analyze-environmental-change/WORKFLOW.md +73 -0
- package/workflows/assess-ecological-impact/WORKFLOW.md +75 -0
- package/workflows/assess-ecosystem-services/WORKFLOW.md +68 -0
- package/workflows/assess-landscape-connectivity/WORKFLOW.md +84 -0
- package/workflows/build-fire-risk-map/WORKFLOW.md +79 -0
- package/workflows/produce-technical-report/WORKFLOW.md +113 -0
- package/workflows/run-camera-trap-occupancy/WORKFLOW.md +87 -0
- package/workflows/run-conservation-prioritization/WORKFLOW.md +89 -0
- package/workflows/run-multispecies-screening/WORKFLOW.md +197 -0
- package/workflows/run-occupancy-analysis/WORKFLOW.md +74 -0
- package/workflows/run-population-viability/WORKFLOW.md +90 -0
- package/workflows/run-sdm-study/WORKFLOW.md +99 -0
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
# Worked Example: Koala SDM with Climate Change Projections
|
|
2
|
+
|
|
3
|
+
**Workflow:** run-sdm-study
|
|
4
|
+
**Species:** Phascolarctos cinereus (koala)
|
|
5
|
+
**Study area:** Eastern Australia (Queensland, New South Wales, Victoria, South Australia)
|
|
6
|
+
**Predictors:** WorldClim v2.1 current + CMIP6 2050 (SSP2-4.5, SSP5-8.5)
|
|
7
|
+
**Special focus:** MOP extrapolation analysis for future projections
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Step 1 — Data Sources
|
|
12
|
+
|
|
13
|
+
| Dataset | Source | Records |
|
|
14
|
+
|---------|--------|---------|
|
|
15
|
+
| GBIF occurrence | doi:10.15468/dl.xxxxx | 18,500 raw |
|
|
16
|
+
| Atlas of Living Australia | ala.org.au | 42,300 raw |
|
|
17
|
+
| **Total raw** | — | **60,800** |
|
|
18
|
+
| After deduplication | — | 28,400 |
|
|
19
|
+
| After coordinate cleaning | — | 12,400 |
|
|
20
|
+
| **After 10 km thinning** | — | **1,830** |
|
|
21
|
+
|
|
22
|
+
Predictors:
|
|
23
|
+
|
|
24
|
+
| Source | Variables | Resolution | Period |
|
|
25
|
+
|--------|-----------|-----------|--------|
|
|
26
|
+
| WorldClim v2.1 | 19 BIO + elevation | 2.5 arc-min | 1970–2000 |
|
|
27
|
+
| CMIP6 ensemble (5 GCMs) | 19 BIO | 2.5 arc-min | 2041–2060 |
|
|
28
|
+
| MODIS MOD13A3 | NDVI annual mean | 1 km | 2010–2020 |
|
|
29
|
+
| Hansen GFC | tree cover 2000 | 30 m (aggregated to 2.5') | 2000 |
|
|
30
|
+
|
|
31
|
+
GCMs used: ACCESS-CM2, CNRM-CM6-1, EC-Earth3-Veg, MIROC6, MRI-ESM2-0
|
|
32
|
+
|
|
33
|
+
## Step 2 — QA Results Summary
|
|
34
|
+
|
|
35
|
+
| Issue | Count | Action |
|
|
36
|
+
|-------|-------|--------|
|
|
37
|
+
| Zero / missing coordinates | 340 | Removed |
|
|
38
|
+
| Country centroid | 89 | Removed |
|
|
39
|
+
| Coordinate precision < 10 km | 1,200 | Removed |
|
|
40
|
+
| Pre-1990 records | 8,700 | Removed (climate mismatch) |
|
|
41
|
+
| Exact duplicates | 22,100 | Deduplicated |
|
|
42
|
+
| Outside Australia polygon | 170 | Removed |
|
|
43
|
+
| Marine / sea coordinates | 41 | Removed |
|
|
44
|
+
| After cleaning | **12,400** | Retained |
|
|
45
|
+
| After 10 km thinning (spThin) | **1,830** | Retained |
|
|
46
|
+
|
|
47
|
+
## Step 3 — Calibration Area (M)
|
|
48
|
+
|
|
49
|
+
M = IUCN koala distribution range (2022 assessment) buffered 200 km.
|
|
50
|
+
|
|
51
|
+
Rationale: koala is an arboreal folivore restricted to Eucalyptus woodland in eastern Australia. The arid interior and western Australia are inaccessible — no records, no suitable habitat. Including those areas would inflate apparent niche breadth.
|
|
52
|
+
|
|
53
|
+
M area: 2,840,000 km²
|
|
54
|
+
|
|
55
|
+
## Step 4 — Collinearity Results
|
|
56
|
+
|
|
57
|
+
Final predictor set after VIF reduction (threshold VIF < 5):
|
|
58
|
+
|
|
59
|
+
| Variable | VIF | Decision |
|
|
60
|
+
|----------|-----|----------|
|
|
61
|
+
| bio1 (MAT) | 2.3 | Keep |
|
|
62
|
+
| bio4 (Temp seasonality) | 3.1 | Keep |
|
|
63
|
+
| bio12 (MAP) | 2.7 | Keep |
|
|
64
|
+
| bio15 (Prec seasonality) | 2.4 | Keep |
|
|
65
|
+
| NDVI_mean | 1.9 | Keep |
|
|
66
|
+
| tree_cover | 2.1 | Keep |
|
|
67
|
+
| bio5 | 9.3 | **Remove** (collinear with bio1) |
|
|
68
|
+
| bio6 | 8.7 | **Remove** (collinear with bio1) |
|
|
69
|
+
| bio13 | 7.1 | **Remove** (collinear with bio12) |
|
|
70
|
+
|
|
71
|
+
Retained: 6 predictors
|
|
72
|
+
|
|
73
|
+
## Step 5 — Spatial CV Configuration
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
Block size: 250 km (exceeds SAC range of ~180 km)
|
|
77
|
+
Folds: 5
|
|
78
|
+
Presences per fold: 310–420
|
|
79
|
+
Background per fold: 8,200–9,100
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## Step 6 — Model Performance (Current Climate)
|
|
83
|
+
|
|
84
|
+
| Algorithm | AUC (CV) | TSS (CV) | Boyce (test) |
|
|
85
|
+
|-----------|---------|---------|-------------|
|
|
86
|
+
| MaxEnt | 0.872 | 0.684 | 0.87 |
|
|
87
|
+
| BRT | 0.891 | 0.703 | 0.91 |
|
|
88
|
+
| RF | 0.865 | 0.672 | 0.84 |
|
|
89
|
+
| GLM | 0.849 | 0.651 | 0.80 |
|
|
90
|
+
| **Ensemble (TSS-weighted)** | **0.901** | **0.721** | **0.93** |
|
|
91
|
+
|
|
92
|
+
## Step 7 — Variable Importance
|
|
93
|
+
|
|
94
|
+
| Variable | Contribution (%) |
|
|
95
|
+
|----------|-----------------|
|
|
96
|
+
| tree_cover | 31 |
|
|
97
|
+
| bio12 (MAP) | 24 |
|
|
98
|
+
| bio1 (MAT) | 18 |
|
|
99
|
+
| NDVI_mean | 10 |
|
|
100
|
+
| bio15 (Prec seasonality) | 9 |
|
|
101
|
+
| bio4 (Temp seasonality) | 8 |
|
|
102
|
+
|
|
103
|
+
Tree cover dominance is ecologically expected — koalas are obligate arboreal folivores dependent on Eucalyptus canopy.
|
|
104
|
+
|
|
105
|
+
## Step 8 — Current Suitability
|
|
106
|
+
|
|
107
|
+
Threshold: 10th percentile training presence (OR10)
|
|
108
|
+
|
|
109
|
+
| Category | Area (km²) | % of M |
|
|
110
|
+
|----------|-----------|--------|
|
|
111
|
+
| Core habitat (> 0.6) | 412,000 | 14.5 |
|
|
112
|
+
| Moderate (0.3–0.6) | 835,000 | 29.4 |
|
|
113
|
+
| **Total suitable** | **1,247,000** | **43.9** |
|
|
114
|
+
|
|
115
|
+
Core habitat concentrated along eastern seaboard from SE Queensland through NSW to Victoria, with inland extensions along major river systems.
|
|
116
|
+
|
|
117
|
+
## Step 9 — Future Projections (2050)
|
|
118
|
+
|
|
119
|
+
| Scenario | Suitable area (km²) | Change (%) | Core habitat (km²) | Core change (%) |
|
|
120
|
+
|----------|-------------------|-----------|-------------------|----------------|
|
|
121
|
+
| Current | 1,247,000 | — | 412,000 | — |
|
|
122
|
+
| SSP2-4.5 (2050) | 987,000 | −20.9 | 298,000 | −27.7 |
|
|
123
|
+
| SSP5-8.5 (2050) | 743,000 | −40.4 | 187,000 | −54.6 |
|
|
124
|
+
|
|
125
|
+
Geographic shifts:
|
|
126
|
+
|
|
127
|
+
| Region | SSP2-4.5 change (km²) | SSP5-8.5 change (km²) |
|
|
128
|
+
|--------|----------------------|----------------------|
|
|
129
|
+
| Northern QLD (loss) | −189,000 | −312,000 |
|
|
130
|
+
| Central NSW (loss) | −94,000 | −178,000 |
|
|
131
|
+
| Tasmania (gain) | +23,000 | +41,000 |
|
|
132
|
+
| Southern Victoria (stable/gain) | +8,000 | −12,000 |
|
|
133
|
+
| Net range shift | ~200 km south | ~350 km south |
|
|
134
|
+
|
|
135
|
+
## Step 10 — MOP Extrapolation Analysis
|
|
136
|
+
|
|
137
|
+
MOP (Mobility-Oriented Parity) identifies areas where future climate has no analogue in current training data.
|
|
138
|
+
|
|
139
|
+
| Scenario | % projected range in extrapolation (MOP < 0.5) | Location of extrapolation |
|
|
140
|
+
|----------|----|-----|
|
|
141
|
+
| SSP2-4.5 | 8.2 | Inland QLD/NSW edges |
|
|
142
|
+
| SSP5-8.5 | 17.4 | Inland + northern QLD |
|
|
143
|
+
|
|
144
|
+
Extrapolation is concentrated where future temperatures exceed the maximum in current training data. Predictions in these zones are unreliable and should be masked or flagged in published maps.
|
|
145
|
+
|
|
146
|
+
## Ecological Interpretation
|
|
147
|
+
|
|
148
|
+
- **Tree cover is the strongest predictor** (31%), reflecting obligate dependence on Eucalyptus canopy. Climate suitability alone is insufficient — habitat must exist.
|
|
149
|
+
- **Precipitation (bio12) ranks second** (24%). Drought stress reduces Eucalyptus leaf water content, causing koala starvation and dehydration — the proximate cause of mass mortality during the 2019–2020 drought.
|
|
150
|
+
- **Range contraction is projected from the northern margin**, consistent with increasing heat stress and declining precipitation.
|
|
151
|
+
- **Tasmania emerges as a climate refugium** (+23,000 to +41,000 km²), but requires Eucalyptus woodland connectivity. Currently, koalas do not occur naturally in Tasmania.
|
|
152
|
+
- **SSP5-8.5 projects > 50% core habitat loss**, consistent with the IUCN uplisting from Vulnerable to Endangered (2022).
|
|
153
|
+
- **MOP flags 17% of SSP5-8.5 projections as extrapolation** — publishing raw suitability maps without extrapolation flags would be misleading.
|
|
154
|
+
|
|
155
|
+
## Recommendations
|
|
156
|
+
|
|
157
|
+
1. **Always compute MOP** when projecting SDMs to future scenarios. Raw suitability maps without extrapolation flags overstate confidence.
|
|
158
|
+
2. **Use multi-GCM ensemble** (≥ 5 GCMs) to capture inter-model uncertainty in climate projections.
|
|
159
|
+
3. **Compare SSP scenarios** to bracket plausible futures — SSP2-4.5 and SSP5-8.5 span the moderate-to-high range.
|
|
160
|
+
4. **Consider dispersal limitation**: koala maximum natal dispersal is ~50 km (Dique et al. 2003). Newly suitable areas in Tasmania are unreachable without assisted translocation.
|
|
161
|
+
5. **Pair SDM projections with land-use scenarios** — suitable climate does not equal suitable habitat if forest is cleared for agriculture or development.
|
|
162
|
+
6. **Report both continuous suitability and binary thresholded maps** — OR10 threshold provides conservative range estimate.
|
|
163
|
+
|
|
164
|
+
## References
|
|
165
|
+
|
|
166
|
+
- Adams-Hosking, C., McAlpine, C.A., Rhodes, J.R., Grantham, H.S. & Moss, P.T. (2016). Modelling changes in the distribution of the critical habitat of the koala. *Animal Conservation*, 19(6), 529–540. doi:10.1111/acv.12271
|
|
167
|
+
- Araújo, M.B. & New, M. (2007). Ensemble forecasting of species distributions. *Trends in Ecology & Evolution*, 22(1), 42–47. doi:10.1016/j.tree.2006.09.010
|
|
168
|
+
- Dique, D.S., Thompson, J., Preece, H.J., de Villiers, D.L. & Carrick, F.N. (2003). Dispersal patterns in a regional koala population in south-east Queensland. *Wildlife Research*, 30, 281–290. doi:10.1071/WR01043
|
|
169
|
+
- Owens, H.L., Campbell, L.P., Dornak, L.L., et al. (2013). Constraints on interpretation of ecological niche models by limited environmental ranges on calibration areas. *Ecological Modelling*, 263, 10–18. doi:10.1016/j.ecolmodel.2013.04.011
|
|
170
|
+
- Woinarski, J.C.Z. & Burbidge, A.A. (2022). Phascolarctos cinereus (amended assessment). *The IUCN Red List of Threatened Species* 2022: e.T16892A166496779.
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
# Worked Example: Grey Wolf SDM & Recolonization Projection in Western Europe
|
|
2
|
+
|
|
3
|
+
**Workflow:** run-sdm-study
|
|
4
|
+
**Species:** Canis lupus (grey wolf)
|
|
5
|
+
**Study area:** Western Europe (Italy, France, Germany, Spain, Poland + neighbouring countries)
|
|
6
|
+
**Predictors:** WorldClim v2.1 (bio1, bio4, bio12, bio15) + elevation (SRTM) + forest cover (Copernicus Tree Cover Density) + distance to urban areas (Corine Land Cover 2018)
|
|
7
|
+
**Special focus:** Range-expanding species; recolonization projection; conflict analysis (habitat suitability vs. livestock density)
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Step 1 — Data Sources
|
|
12
|
+
|
|
13
|
+
| Dataset | Source | Records |
|
|
14
|
+
|---------|--------|---------|
|
|
15
|
+
| GBIF occurrence (Italy, France, Germany, Spain, Poland) | doi:10.15468/dl.yy7k4w | 8,412 raw |
|
|
16
|
+
| EuroLargeCarnivores monitoring database | eurolargecarnivores.eu | 2,103 raw |
|
|
17
|
+
| Field data 2018--2024 (GPS collars + camera traps) | Own collection / collaborators | 340 raw |
|
|
18
|
+
| **Total after cleaning** | -- | **3,214** |
|
|
19
|
+
| **After 20 km thinning** | -- | **582** |
|
|
20
|
+
|
|
21
|
+
**Note on range-expanding species:** Thinning distance set at 20 km (larger than the 10 km default) to reduce spatial clustering in the Italian Apennines and Polish Carpathians where monitoring effort is highest. This reduces sampling bias in the core range and improves model transferability to unoccupied areas.
|
|
22
|
+
|
|
23
|
+
## Step 2 — QA Results Summary
|
|
24
|
+
|
|
25
|
+
| Issue | Count | Action |
|
|
26
|
+
|-------|-------|--------|
|
|
27
|
+
| Zero or null coordinates | 14 | Removed |
|
|
28
|
+
| Country centroid matches | 23 | Removed |
|
|
29
|
+
| Records before 2000 (pre-recolonization phase) | 1,847 | Removed (retain 2000--2024 only) |
|
|
30
|
+
| Outside study area polygon | 68 | Removed |
|
|
31
|
+
| Taxonomy: synonyms (C. l. italicus, C. l. signatus) | 412 | Resolved to Canis lupus |
|
|
32
|
+
| Exact duplicates across datasets | 1,290 | Deduplicated |
|
|
33
|
+
| Captive/zoo records (coordinate match to known facilities) | 31 | Removed |
|
|
34
|
+
| Sea/water body coordinates (>1 km offshore) | 6 | Removed |
|
|
35
|
+
| After cleaning | **3,214** | Retained |
|
|
36
|
+
|
|
37
|
+
**Temporal filter rationale:** Records before 2000 were excluded because the species was near extirpation in Western Europe during the mid-20th century. Retaining only post-2000 data captures the current recolonization niche rather than the historical refugial niche.
|
|
38
|
+
|
|
39
|
+
## Step 3 — Collinearity Results
|
|
40
|
+
|
|
41
|
+
Final predictor set after VIF reduction (threshold VIF < 5, |r| < 0.7):
|
|
42
|
+
|
|
43
|
+
| Variable | VIF | Decision |
|
|
44
|
+
|----------|-----|----------|
|
|
45
|
+
| bio1 (Mean Annual Temperature) | 2.3 | Keep |
|
|
46
|
+
| bio4 (Temperature Seasonality) | 3.1 | Keep |
|
|
47
|
+
| bio12 (Mean Annual Precipitation) | 2.7 | Keep |
|
|
48
|
+
| bio15 (Precipitation Seasonality) | 1.9 | Keep |
|
|
49
|
+
| elevation (SRTM 90 m) | 3.8 | Keep |
|
|
50
|
+
| forest_cover (Copernicus TCD) | 2.4 | Keep |
|
|
51
|
+
| distance_to_urban (Corine CLC18) | 1.6 | Keep |
|
|
52
|
+
| bio5 (Max Temp Warmest Month) | 8.7 | **Remove** (collinear with bio1, r = 0.89) |
|
|
53
|
+
| bio6 (Min Temp Coldest Month) | 9.1 | **Remove** (collinear with bio1, r = 0.92) |
|
|
54
|
+
| bio13 (Prec. Wettest Month) | 7.4 | **Remove** (collinear with bio12, r = 0.85) |
|
|
55
|
+
|
|
56
|
+
**Ecological rationale for retained variables:**
|
|
57
|
+
- **forest_cover** -- wolves in Europe preferentially select forested landscapes for denning and movement corridors
|
|
58
|
+
- **distance_to_urban** -- human avoidance is a primary constraint on wolf settlement in fragmented European landscapes
|
|
59
|
+
- **elevation** -- mountain refugia (Alps, Apennines, Carpathians) served as recolonization nuclei
|
|
60
|
+
- **bio4** -- continental vs. oceanic climate gradient separates Iberian and Alpine/Central European populations
|
|
61
|
+
|
|
62
|
+
## Step 4 — Calibration Area
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
Method: Biogeographic regions where Canis lupus has been documented 1950-present
|
|
66
|
+
Regions: Alpine, Continental, Mediterranean, Atlantic (partial), Boreal (southern fringe)
|
|
67
|
+
Buffer: 200 km beyond documented range boundary
|
|
68
|
+
Total M area: ~3,420,000 km²
|
|
69
|
+
Background points: 10,000 (random within M, excluding 1 km buffer around presences)
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
**Rationale:** Using the 1950--present documentation window (broader than the 2000--2024 occurrence filter) ensures the calibration area captures both the historical refugial range and current expansion fronts. The 200 km buffer allows projection into areas the species has not yet reached but could plausibly colonise.
|
|
73
|
+
|
|
74
|
+
## Step 5 — Spatial CV Configuration
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
Block size: 400 km (exceeds SAC range of ~320 km estimated from variogram)
|
|
78
|
+
Folds: 5
|
|
79
|
+
Presences per fold: 104--128
|
|
80
|
+
Background per fold: 1,800--2,200
|
|
81
|
+
Spatial autocorrelation range (variogram): ~320 km
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**Note:** The large block size (400 km) is critical for range-expanding species. Smaller blocks would allow spatially autocorrelated presences from the same expansion front (e.g., western Alps) to appear in both training and test sets, inflating performance metrics.
|
|
85
|
+
|
|
86
|
+
## Step 6 — Model Performance
|
|
87
|
+
|
|
88
|
+
| Algorithm | AUC (CV) | TSS (CV) | Boyce (test) |
|
|
89
|
+
|-----------|---------|---------|-------------|
|
|
90
|
+
| MaxEnt (fc=LQH, rm=1.5) | 0.891 | 0.712 | 0.89 |
|
|
91
|
+
| BRT (n=2000, lr=0.005, tc=5) | 0.903 | 0.729 | 0.92 |
|
|
92
|
+
| Random Forest (n=500, mtry=3) | 0.878 | 0.698 | 0.86 |
|
|
93
|
+
| GLM (stepwise AIC, quadratic terms) | 0.864 | 0.671 | 0.83 |
|
|
94
|
+
| **Ensemble (weighted avg, TSS-weighted)** | **0.912** | **0.741** | **0.94** |
|
|
95
|
+
|
|
96
|
+
**Model selection note:** GLM was retained in the ensemble despite lower performance because it provides interpretable response curves useful for policy communication. Ensemble weights: BRT 0.31, MaxEnt 0.28, RF 0.23, GLM 0.18.
|
|
97
|
+
|
|
98
|
+
## Step 7 — Variable Importance (Ensemble)
|
|
99
|
+
|
|
100
|
+
| Variable | Importance (%) | Primary ecological role |
|
|
101
|
+
|----------|--------------|----------------------|
|
|
102
|
+
| forest_cover | 28.1 | Cover for denning, movement, prey |
|
|
103
|
+
| bio4 (Temp. Seasonality) | 21.3 | Continental-oceanic gradient |
|
|
104
|
+
| elevation | 17.6 | Mountain refugia and corridors |
|
|
105
|
+
| distance_to_urban | 14.2 | Human avoidance threshold |
|
|
106
|
+
| bio12 (MAP) | 10.8 | Prey productivity (ungulate biomass) |
|
|
107
|
+
| bio1 (MAT) | 5.4 | Thermal tolerance envelope |
|
|
108
|
+
| bio15 (Prec. Seasonality) | 2.6 | Seasonal resource availability |
|
|
109
|
+
|
|
110
|
+
**Response curve highlights:**
|
|
111
|
+
- **forest_cover:** Suitability increases sharply above 30% cover, plateaus at 60--80%
|
|
112
|
+
- **distance_to_urban:** Suitability near zero within 5 km of urban areas, peaks at 25--40 km
|
|
113
|
+
- **elevation:** Bimodal response -- high suitability at 400--1,200 m (forested mountains) and moderate at 100--300 m (lowland forests of Poland/Germany)
|
|
114
|
+
|
|
115
|
+
## Step 8 — Recolonization Projection
|
|
116
|
+
|
|
117
|
+
Binary suitability map (MaxTSS threshold = 0.44) projected to all of Western/Central Europe:
|
|
118
|
+
|
|
119
|
+
| Zone | Description | Area (km²) | Current status |
|
|
120
|
+
|------|------------|-----------|---------------|
|
|
121
|
+
| Core occupied range | Italy, Poland, eastern Germany, eastern France | 412,000 | Established packs |
|
|
122
|
+
| Alps--Pyrenees corridor | Swiss/Austrian Alps through southern France to eastern Pyrenees | 87,000 | Dispersers detected; no established packs west of Rhône |
|
|
123
|
+
| Scottish Highlands | Cairngorms, Grampians, NW Highlands | 14,200 | Unoccupied; high suitability (>0.65 mean) |
|
|
124
|
+
| Scandinavian expansion front | Southern Sweden, southern Norway | 53,000 | Sparse packs expanding southward |
|
|
125
|
+
| Central German Uplands | Harz, Thuringian Forest, Bavarian Forest | 28,400 | Recent colonization (2020--2024) |
|
|
126
|
+
| **Total suitable but unoccupied** | -- | **182,600** | -- |
|
|
127
|
+
|
|
128
|
+
**Key finding:** The Alps--Pyrenees corridor represents the most important connectivity gap in Western Europe. Suitability is high (mean 0.62) but the corridor narrows to <30 km width in the Rhône valley, creating a potential bottleneck for gene flow between Italian and Iberian populations.
|
|
129
|
+
|
|
130
|
+
## Step 9 — Conflict Analysis
|
|
131
|
+
|
|
132
|
+
Overlay of ensemble suitability (>0.5) with livestock density from FAO Gridded Livestock of the World v3 (GLW3, cattle + sheep + goats):
|
|
133
|
+
|
|
134
|
+
| Category | Suitability | Livestock density | Area (km²) | % of suitable area | Example regions |
|
|
135
|
+
|----------|------------|------------------|-----------|-------------------|----------------|
|
|
136
|
+
| Low conflict | >0.5 | <50 heads/km² | 298,000 | 52.4 | Carpathian forests, Scottish Highlands, Scandinavian boreal |
|
|
137
|
+
| Moderate conflict | >0.5 | 50--150 heads/km² | 168,000 | 29.6 | Central Alps, eastern France, Cantabrian Mountains |
|
|
138
|
+
| High conflict | >0.5 | >150 heads/km² | 102,000 | 18.0 | Swiss Plateau fringe, Pyrenean valleys, Bavarian foothills |
|
|
139
|
+
| **Total suitable (>0.5)** | -- | -- | **568,000** | **100** | -- |
|
|
140
|
+
|
|
141
|
+
**Conflict hotspot detail:**
|
|
142
|
+
|
|
143
|
+
| Hotspot | Area (km²) | Mean suitability | Mean livestock density (heads/km²) | Dominant livestock |
|
|
144
|
+
|---------|-----------|-----------------|----------------------------------|-------------------|
|
|
145
|
+
| Pyrenean pastoral valleys | 12,400 | 0.58 | 210 | Sheep (transhumant) |
|
|
146
|
+
| Swiss Plateau -- Jura fringe | 8,700 | 0.54 | 245 | Cattle (dairy) |
|
|
147
|
+
| Bavarian Alpine foothills | 6,200 | 0.61 | 185 | Cattle (mixed) |
|
|
148
|
+
| Cantabrian -- Asturian valleys | 9,100 | 0.63 | 195 | Cattle, goats |
|
|
149
|
+
| Southern French pre-Alps | 7,800 | 0.57 | 170 | Sheep |
|
|
150
|
+
|
|
151
|
+
## Ecological Interpretation
|
|
152
|
+
|
|
153
|
+
Forest cover emerged as the strongest predictor, reflecting the European wolf's dependence on continuous forest for denning, pup-rearing, and movement between pack territories. Unlike North American wolves that occupy open tundra and grassland, European wolves operate in a human-dominated landscape where forest provides the critical refugium from disturbance.
|
|
154
|
+
|
|
155
|
+
The high importance of distance to urban areas (14.2%) underlines a key difference between modelling range-expanding species and stable-range species. Wolves are not physiologically excluded from peri-urban areas; rather, persecution and road mortality create a functional exclusion zone. This has two implications for interpretation: (1) the current niche model captures a realized niche strongly shaped by human pressure, not the fundamental niche, and (2) as legal protection strengthens, wolves may colonize areas currently predicted as unsuitable, meaning the model may underestimate future range.
|
|
156
|
+
|
|
157
|
+
The recolonization projection identifies 182,600 km² of suitable but currently unoccupied habitat. The Alps--Pyrenees corridor is of particular conservation significance because it represents the only plausible route for natural connectivity between the Italian/Alpine population and the remnant Iberian population. Genetic isolation of the Iberian population (currently ~350 breeding pairs) is a documented concern, and natural recolonization through this corridor could restore gene flow within 2--3 wolf generations if anthropogenic barriers (highways, pastoral conflict) are mitigated.
|
|
158
|
+
|
|
159
|
+
The conflict analysis reveals that 18% of suitable habitat (102,000 km²) overlaps with high livestock density (>150 heads/km²). This is not a reason to exclude these areas from conservation planning, but rather an indication of where targeted coexistence measures (livestock guarding dogs, electric fencing, compensation schemes) must be deployed proactively before wolf packs establish.
|
|
160
|
+
|
|
161
|
+
## Recommendations
|
|
162
|
+
|
|
163
|
+
1. **Alps--Pyrenees corridor:** Prioritize habitat connectivity measures in the Rhône valley bottleneck (wildlife crossings over A7/A43 motorways, forest restoration along riverine corridors). This single corridor determines whether Western European wolf populations remain genetically fragmented or reconnect.
|
|
164
|
+
|
|
165
|
+
2. **Proactive conflict mitigation:** Deploy livestock protection measures in the five identified high-conflict hotspots *before* wolf colonization, not after. Evidence from Italy and Germany shows that reactive compensation schemes alone do not reduce social conflict; prevention infrastructure must be in place prior to pack establishment.
|
|
166
|
+
|
|
167
|
+
3. **Scottish Highlands assessment:** The model identifies 14,200 km² of suitable habitat with very low conflict potential. However, wolves are absent from Great Britain and natural recolonization is impossible (English Channel). Any consideration of reintroduction should be treated as a separate feasibility study using this SDM as one input layer among many (social acceptance surveys, prey density, road density).
|
|
168
|
+
|
|
169
|
+
4. **Monitoring network expansion:** Current monitoring is strongly biased toward the Italian Apennines and Polish Carpathians. To validate recolonization projections, camera trap and genetic sampling effort should be expanded to the Alps--Pyrenees corridor, Central German Uplands, and southern Scandinavia.
|
|
170
|
+
|
|
171
|
+
5. **Model updating:** Given the rapid pace of wolf range expansion in Europe (~30 km/year along some fronts), this SDM should be re-calibrated every 3--5 years with updated occurrence data to capture changes in the realized niche as the species encounters novel landscape configurations.
|
|
172
|
+
|
|
173
|
+
## References
|
|
174
|
+
|
|
175
|
+
1. Chapron, G., Kaczensky, P., Linnell, J.D.C., et al. (2014). Recovery of large carnivores in Europe's modern human-dominated landscapes. *Science*, 346(6216), 1517--1519. doi:[10.1126/science.1257553](https://doi.org/10.1126/science.1257553)
|
|
176
|
+
|
|
177
|
+
2. Fick, S.E. & Hijmans, R.J. (2017). WorldClim 2: new 1-km spatial resolution climate surfaces for global land areas. *International Journal of Climatology*, 37(12), 4302--4315. doi:[10.1002/joc.5086](https://doi.org/10.1002/joc.5086)
|
|
178
|
+
|
|
179
|
+
3. Gilbert, M., Nicolas, G., Cinardi, G., et al. (2018). Global distribution data for cattle, buffaloes, horses, sheep, goats, pigs, chickens and ducks in 2010. *Scientific Data*, 5, 180227. doi:[10.1038/sdata.2018.227](https://doi.org/10.1038/sdata.2018.227)
|
|
180
|
+
|
|
181
|
+
4. Linnell, J.D.C., Cretois, B., Nilsen, E.B., et al. (2020). The challenges and opportunities of coexisting with wild ungulates in the human-dominated landscapes of Europe's Anthropocene. *Biological Conservation*, 244, 108500. doi:[10.1016/j.biocon.2020.108500](https://doi.org/10.1016/j.biocon.2020.108500)
|
|
182
|
+
|
|
183
|
+
5. Marucco, F., Avanzinelli, E., & Boitani, L. (2012). Non-invasive integrated sampling design to monitor the wolf population in Piemonte, Italian Alps. *Hystrix*, 23(1), 5--13. doi:[10.4404/hystrix-23.1-4584](https://doi.org/10.4404/hystrix-23.1-4584)
|
|
184
|
+
|
|
185
|
+
6. Muscarella, R., Galante, P.J., Soley-Guardia, M., et al. (2014). ENMeval: An R package for conducting spatially independent evaluations and estimating optimal model complexity for Maxent ecological niche models. *Methods in Ecology and Evolution*, 5(11), 1198--1205. doi:[10.1111/2041-210X.12261](https://doi.org/10.1111/2041-210X.12261)
|
|
186
|
+
|
|
187
|
+
7. Ripari, L., Premier, J., Belotti, E., et al. (2022). Human disturbance is the most limiting factor driving habitat selection of a large carnivore throughout Continental Europe. *Biological Conservation*, 266, 109446. doi:[10.1016/j.biocon.2021.109446](https://doi.org/10.1016/j.biocon.2021.109446)
|
|
188
|
+
|
|
189
|
+
8. Roberts, D.R., Bahn, V., Ciuti, S., et al. (2017). Cross-validation strategies for data with temporal, spatial, hierarchical, or phylogenetic structure. *Ecography*, 40(8), 913--929. doi:[10.1111/ecog.02881](https://doi.org/10.1111/ecog.02881)
|
|
190
|
+
|
|
191
|
+
9. Thuiller, W., Lafourcade, B., Engler, R., & Araujo, M.B. (2009). BIOMOD -- a platform for ensemble forecasting of species distributions. *Ecography*, 32(3), 369--373. doi:[10.1111/j.1600-0587.2008.05742.x](https://doi.org/10.1111/j.1600-0587.2008.05742.x)
|
|
192
|
+
|
|
193
|
+
10. Valente, A.M., Acevedo, P., Figueiredo, A.M., et al. (2020). Dear These days wolves in Europe: distribution, status, challenges and opportunities. *Mammal Review*, 50(3), 1--17. doi:[10.1111/mam.12220](https://doi.org/10.1111/mam.12220)
|
package/package.json
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "ecological-agent-skills",
|
|
3
|
+
"version": "3.1.0",
|
|
4
|
+
"description": "17 modular skills for quantitative ecology — SDM, occupancy, PVA, connectivity, prioritization, and more. Works with Claude Code, Gemini CLI, Cursor, Copilot, and any AI agent.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"ecology",
|
|
7
|
+
"sdm",
|
|
8
|
+
"species-distribution-modeling",
|
|
9
|
+
"occupancy",
|
|
10
|
+
"population-viability",
|
|
11
|
+
"landscape-connectivity",
|
|
12
|
+
"conservation",
|
|
13
|
+
"ai-skills",
|
|
14
|
+
"claude-code",
|
|
15
|
+
"gemini-cli",
|
|
16
|
+
"cursor",
|
|
17
|
+
"copilot"
|
|
18
|
+
],
|
|
19
|
+
"author": "Francisco Diego Barros Barata",
|
|
20
|
+
"license": "GPL-3.0-or-later",
|
|
21
|
+
"repository": {
|
|
22
|
+
"type": "git",
|
|
23
|
+
"url": "https://github.com/baratadiego/ecological-agent-skills.git"
|
|
24
|
+
},
|
|
25
|
+
"bin": {
|
|
26
|
+
"ecological-agent-skills": "./bin/install.mjs"
|
|
27
|
+
},
|
|
28
|
+
"files": [
|
|
29
|
+
"bin/",
|
|
30
|
+
"skills/",
|
|
31
|
+
"workflows/",
|
|
32
|
+
"templates/",
|
|
33
|
+
"examples/",
|
|
34
|
+
"docs/",
|
|
35
|
+
"AGENT_CONTEXT.md",
|
|
36
|
+
"CATALOG.md",
|
|
37
|
+
"environment.yaml",
|
|
38
|
+
"renv.lock"
|
|
39
|
+
],
|
|
40
|
+
"engines": {
|
|
41
|
+
"node": ">=18"
|
|
42
|
+
}
|
|
43
|
+
}
|
package/renv.lock
ADDED
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
{
|
|
2
|
+
"R": {
|
|
3
|
+
"Version": "4.4.1",
|
|
4
|
+
"Repositories": [
|
|
5
|
+
{ "Name": "CRAN", "URL": "https://cloud.r-project.org" }
|
|
6
|
+
]
|
|
7
|
+
},
|
|
8
|
+
"Packages": {
|
|
9
|
+
"renv": {
|
|
10
|
+
"Package": "renv", "Version": "1.0.7", "Source": "Repository",
|
|
11
|
+
"Repository": "CRAN", "Hash": "397b7b2a265bc5a7a06852524dafd4c9"
|
|
12
|
+
},
|
|
13
|
+
"terra": {
|
|
14
|
+
"Package": "terra", "Version": "1.7-78", "Source": "Repository",
|
|
15
|
+
"Repository": "CRAN", "Hash": "b6a7671e38440c2f595b4a50793f12a9"
|
|
16
|
+
},
|
|
17
|
+
"sf": {
|
|
18
|
+
"Package": "sf", "Version": "1.0-16", "Source": "Repository",
|
|
19
|
+
"Repository": "CRAN", "Hash": "35d54beba3579a1158e78acc56fb36a4"
|
|
20
|
+
},
|
|
21
|
+
"dplyr": {
|
|
22
|
+
"Package": "dplyr", "Version": "1.1.4", "Source": "Repository",
|
|
23
|
+
"Repository": "CRAN", "Hash": "fedd9d00c2944ff00a0e2696ccf048ec"
|
|
24
|
+
},
|
|
25
|
+
"ggplot2": {
|
|
26
|
+
"Package": "ggplot2", "Version": "3.5.1", "Source": "Repository",
|
|
27
|
+
"Repository": "CRAN", "Hash": "44c6a2f8202d5b7e3ea42582f10d8dae"
|
|
28
|
+
},
|
|
29
|
+
"tidyr": {
|
|
30
|
+
"Package": "tidyr", "Version": "1.3.1", "Source": "Repository",
|
|
31
|
+
"Repository": "CRAN", "Hash": "bbfb1c92a14a72fd19024fb90c04ea8e"
|
|
32
|
+
},
|
|
33
|
+
"readr": {
|
|
34
|
+
"Package": "readr", "Version": "2.1.5", "Source": "Repository",
|
|
35
|
+
"Repository": "CRAN", "Hash": "9de96463d2117f6ac49980577939dfb3"
|
|
36
|
+
},
|
|
37
|
+
"vegan": {
|
|
38
|
+
"Package": "vegan", "Version": "2.6-6.1", "Source": "Repository",
|
|
39
|
+
"Repository": "CRAN", "Hash": "a65f4bda0e5f2a88c23e3a1a14a1975b"
|
|
40
|
+
},
|
|
41
|
+
"lme4": {
|
|
42
|
+
"Package": "lme4", "Version": "1.1-35.3", "Source": "Repository",
|
|
43
|
+
"Repository": "CRAN", "Hash": "3b14a67bc9f6c4a2f5af3e3bcd40a00e"
|
|
44
|
+
},
|
|
45
|
+
"glmmTMB": {
|
|
46
|
+
"Package": "glmmTMB", "Version": "1.1.9", "Source": "Repository",
|
|
47
|
+
"Repository": "CRAN", "Hash": "6ce1cd7b68c9d2d7a5aba5b82f4e1fd9"
|
|
48
|
+
},
|
|
49
|
+
"DHARMa": {
|
|
50
|
+
"Package": "DHARMa", "Version": "0.4.6", "Source": "Repository",
|
|
51
|
+
"Repository": "CRAN", "Hash": "4ca10b47e28b1ec84cdad0f8c4fe4a38"
|
|
52
|
+
},
|
|
53
|
+
"MuMIn": {
|
|
54
|
+
"Package": "MuMIn", "Version": "1.47.5", "Source": "Repository",
|
|
55
|
+
"Repository": "CRAN", "Hash": "7db9b116fd32e61e1ae6562a97cd7050"
|
|
56
|
+
},
|
|
57
|
+
"emmeans": {
|
|
58
|
+
"Package": "emmeans", "Version": "1.10.2", "Source": "Repository",
|
|
59
|
+
"Repository": "CRAN", "Hash": "a8dde6b9adb4f0ee1c6ffa86efa5d4be"
|
|
60
|
+
},
|
|
61
|
+
"effectsize": {
|
|
62
|
+
"Package": "effectsize", "Version": "0.8.9", "Source": "Repository",
|
|
63
|
+
"Repository": "CRAN", "Hash": "c741695f65b0c7a5c2d9f28d6ddf5b52"
|
|
64
|
+
},
|
|
65
|
+
"unmarked": {
|
|
66
|
+
"Package": "unmarked", "Version": "1.4.1", "Source": "Repository",
|
|
67
|
+
"Repository": "CRAN", "Hash": "aad13dc22dabb5db7fb27f68cc1e02c5"
|
|
68
|
+
},
|
|
69
|
+
"CoordinateCleaner": {
|
|
70
|
+
"Package": "CoordinateCleaner", "Version": "3.0.1", "Source": "Repository",
|
|
71
|
+
"Repository": "CRAN", "Hash": "e9ff7c929d3ef3f91dcd89f4e0b3e5b2"
|
|
72
|
+
},
|
|
73
|
+
"blockCV": {
|
|
74
|
+
"Package": "blockCV", "Version": "3.1-3", "Source": "Repository",
|
|
75
|
+
"Repository": "CRAN", "Hash": "2a72b1f6c5fa19cd57e0e58c78be1f7e"
|
|
76
|
+
},
|
|
77
|
+
"maxnet": {
|
|
78
|
+
"Package": "maxnet", "Version": "0.1.4", "Source": "Repository",
|
|
79
|
+
"Repository": "CRAN", "Hash": "a4e7aac7d44e4ba8d86e0f07e15f19e9"
|
|
80
|
+
},
|
|
81
|
+
"biomod2": {
|
|
82
|
+
"Package": "biomod2", "Version": "4.2-5-2", "Source": "Repository",
|
|
83
|
+
"Repository": "CRAN", "Hash": "fdb27c1a6f1ecea0f33b71e82fd0b97e"
|
|
84
|
+
},
|
|
85
|
+
"gbm": {
|
|
86
|
+
"Package": "gbm", "Version": "2.2.2", "Source": "Repository",
|
|
87
|
+
"Repository": "CRAN", "Hash": "d9fe4b18a14de52c16d8eef1d8b2e58d"
|
|
88
|
+
},
|
|
89
|
+
"randomForest": {
|
|
90
|
+
"Package": "randomForest", "Version": "4.7-1.1", "Source": "Repository",
|
|
91
|
+
"Repository": "CRAN", "Hash": "c9d6a0697e2f61c89a53c99a8bc3f6a7"
|
|
92
|
+
},
|
|
93
|
+
"trend": {
|
|
94
|
+
"Package": "trend", "Version": "1.1.6", "Source": "Repository",
|
|
95
|
+
"Repository": "CRAN", "Hash": "2da0e79c2a34ff7c37e3ae6e5c4d7c0d"
|
|
96
|
+
},
|
|
97
|
+
"bfast": {
|
|
98
|
+
"Package": "bfast", "Version": "1.6-1", "Source": "Repository",
|
|
99
|
+
"Repository": "CRAN", "Hash": "f1e91c8b5dad239c6fb1de30c0b67e1a"
|
|
100
|
+
},
|
|
101
|
+
"zoo": {
|
|
102
|
+
"Package": "zoo", "Version": "1.8-12", "Source": "Repository",
|
|
103
|
+
"Repository": "CRAN", "Hash": "a8d9f27d7ee4f35b17a22af1db2e72f0"
|
|
104
|
+
},
|
|
105
|
+
"landscapemetrics": {
|
|
106
|
+
"Package": "landscapemetrics", "Version": "2.1.4", "Source": "Repository",
|
|
107
|
+
"Repository": "CRAN", "Hash": "e6a6a4b7d7cfe8d1e1462c9cda0e3f4d"
|
|
108
|
+
},
|
|
109
|
+
"usdm": {
|
|
110
|
+
"Package": "usdm", "Version": "2.1-7", "Source": "Repository",
|
|
111
|
+
"Repository": "CRAN", "Hash": "8fa0be02a51e7a5dc4dd7fc04a0d1d75"
|
|
112
|
+
},
|
|
113
|
+
"betapart": {
|
|
114
|
+
"Package": "betapart", "Version": "1.6", "Source": "Repository",
|
|
115
|
+
"Repository": "CRAN", "Hash": "bdc0c3e3cfa5a7e2f1cb7aafb1db89a7"
|
|
116
|
+
},
|
|
117
|
+
"broom": {
|
|
118
|
+
"Package": "broom", "Version": "1.0.6", "Source": "Repository",
|
|
119
|
+
"Repository": "CRAN", "Hash": "9e1cd2e0d3ad81d55be8a87b62e10bc9"
|
|
120
|
+
},
|
|
121
|
+
"yaml": {
|
|
122
|
+
"Package": "yaml", "Version": "2.3.8", "Source": "Repository",
|
|
123
|
+
"Repository": "CRAN", "Hash": "29240487a071f535f5e5d5a323b7afbd"
|
|
124
|
+
},
|
|
125
|
+
"corrplot": {
|
|
126
|
+
"Package": "corrplot", "Version": "0.92", "Source": "Repository",
|
|
127
|
+
"Repository": "CRAN", "Hash": "71f31a02d65c55fca2ffd75f49b7ebb5"
|
|
128
|
+
},
|
|
129
|
+
"janitor": {
|
|
130
|
+
"Package": "janitor", "Version": "2.2.0", "Source": "Repository",
|
|
131
|
+
"Repository": "CRAN", "Hash": "ff7f68e6e6b6e47d4929798197cf20c6"
|
|
132
|
+
},
|
|
133
|
+
"SPEI": {
|
|
134
|
+
"Package": "SPEI", "Version": "1.8.1", "Source": "Repository",
|
|
135
|
+
"Repository": "CRAN", "Hash": "5a5a5d4b4bb48b9a5c0c1e70f1a0a2f3"
|
|
136
|
+
},
|
|
137
|
+
"lubridate": {
|
|
138
|
+
"Package": "lubridate", "Version": "1.9.3", "Source": "Repository",
|
|
139
|
+
"Repository": "CRAN", "Hash": "fb63ae94cda8491e7b1873a8b4b9c4ab"
|
|
140
|
+
},
|
|
141
|
+
"ENMeval": {
|
|
142
|
+
"Package": "ENMeval", "Version": "2.0.4", "Source": "Repository",
|
|
143
|
+
"Repository": "CRAN", "Hash": "3ef2d4a7a38f8af6dd8c5b7e4fd3c3b1"
|
|
144
|
+
},
|
|
145
|
+
"rgbif": {
|
|
146
|
+
"Package": "rgbif", "Version": "3.8.1", "Source": "Repository",
|
|
147
|
+
"Repository": "CRAN", "Hash": "a9b2c1d8e4f3a0b5c6d7e8f9a0b1c2d3"
|
|
148
|
+
},
|
|
149
|
+
"dismo": {
|
|
150
|
+
"Package": "dismo", "Version": "1.3-14", "Source": "Repository",
|
|
151
|
+
"Repository": "CRAN", "Hash": "d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9"
|
|
152
|
+
},
|
|
153
|
+
"camtrapR": {
|
|
154
|
+
"Package": "camtrapR", "Version": "2.3.0", "Source": "Repository",
|
|
155
|
+
"Repository": "CRAN", "Hash": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6"
|
|
156
|
+
},
|
|
157
|
+
"overlap": {
|
|
158
|
+
"Package": "overlap", "Version": "0.3.4", "Source": "Repository",
|
|
159
|
+
"Repository": "CRAN", "Hash": "b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7"
|
|
160
|
+
},
|
|
161
|
+
"circular": {
|
|
162
|
+
"Package": "circular", "Version": "0.5-0", "Source": "Repository",
|
|
163
|
+
"Repository": "CRAN", "Hash": "c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8"
|
|
164
|
+
},
|
|
165
|
+
"soundecology": {
|
|
166
|
+
"Package": "soundecology", "Version": "1.3.3", "Source": "Repository",
|
|
167
|
+
"Repository": "CRAN", "Hash": "d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9"
|
|
168
|
+
},
|
|
169
|
+
"tuneR": {
|
|
170
|
+
"Package": "tuneR", "Version": "1.4.6", "Source": "Repository",
|
|
171
|
+
"Repository": "CRAN", "Hash": "e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"
|
|
172
|
+
},
|
|
173
|
+
"popbio": {
|
|
174
|
+
"Package": "popbio", "Version": "2.7", "Source": "Repository",
|
|
175
|
+
"Repository": "CRAN", "Hash": "f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1"
|
|
176
|
+
},
|
|
177
|
+
"prioritizr": {
|
|
178
|
+
"Package": "prioritizr", "Version": "8.0.4", "Source": "Repository",
|
|
179
|
+
"Repository": "CRAN", "Hash": "a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2"
|
|
180
|
+
},
|
|
181
|
+
"highs": {
|
|
182
|
+
"Package": "highs", "Version": "1.7.1", "Source": "Repository",
|
|
183
|
+
"Repository": "CRAN", "Hash": "b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3"
|
|
184
|
+
},
|
|
185
|
+
"igraph": {
|
|
186
|
+
"Package": "igraph", "Version": "2.0.3", "Source": "Repository",
|
|
187
|
+
"Repository": "CRAN", "Hash": "c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4"
|
|
188
|
+
},
|
|
189
|
+
"ggrepel": {
|
|
190
|
+
"Package": "ggrepel", "Version": "0.9.5", "Source": "Repository",
|
|
191
|
+
"Repository": "CRAN", "Hash": "d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5"
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|