# Monitoring Changes in the Enhanced Vegetation Index to Inform the Management of Forests
## Appendix A Appendix A Appendix A Appendix A.1 Data Sources
### Boosted Regression Trees (XGBoost Models)  
The data frame used for running boosted regression trees (BRT) consisted of EVI break magnitudes as the response variable and forest and climate-related variables as the predictors. We used variation inflation factor (VIF) to simplify a first set of yearly climate predictors (\(n=30\)) and their corresponding temporal lagged versions (1-, 2-, and 3-year lags). Only climate variables with VIF < 5 were kept, removing highly collinear variables. The final set of predictors (\(n=9\)) used in modeling included forest age, percentage of conifer composition, forest protection status, winter degree days above 5 \({}^{\circ}\)C (1- and 3-year lags), and summer climate moisture index (1-, 2-, and 3-year lags). Every row in the data frame was a break matched with predictors by pixel ID and (floored) year of break. The joining of response and predictor records was conducted with SQL using DuckDB (version 0.10.3). For most breaks, the 95% confidence intervals (95% CI) for the timing of breaks ranged from 1 to \(>\)80 months. We ran the BRT models on subsets of the data reducing the noise and improving model fit. Separate BRT models were run for negative and positive EVI breaks. For negative breaks, a model that only included records with 95% CI range < 6 months and break magnitudes \(>\)1 -5001 (\(n=116\)), resulted in lower RMSE and higher \(R^{2}\) compared to a model that used all negative break records (Table 10). For positive breaks, a model that only included records with break magnitudes \(>\) 500 and that did overlap with disturbance data (GFC data) showed the highest \(R^{2}\) (\(n=3263\)). Filtering out positive records that had wide 95% CI ranges did not improve the positive break model. BRT modeling was conducted using the Extreme Gradient Boosting (XGBoost) library ([[https://xgboost.readthedocs.io/en/stable/index.html](https://xgboost.readthedocs.io/en/stable/index.html)]([https://xgboost.readthedocs.io/en/stable/index.html](https://xgboost.readthedocs.io/en/stable/index.html)) (accessed on 29 July 2023)) and the scikit-learn API interface ([[https://xgboost.readthedocs.io/en/stable/python/python_api.html#module-xgboost.sklearn](https://xgboost.readthedocs.io/en/stable/python/python_api.html#module-xgboost.sklearn)]([https://xgboost.readthedocs.io/en/stable/python/python_api.html#module-xgboost.sklearn](https://xgboost.readthedocs.io/en/stable/python/python_api.html#module-xgboost.sklearn)) (accessed on 29 July 2023)). Key XGBoost parameters and their corresponding values are shown below (Table 11). All other model parameters used default values ([[https://xgboost.readthedocs.io/en/stable/parameter.html](https://xgboost.readthedocs.io/en/stable/parameter.html)]([https://xgboost.readthedocs.io/en/stable/parameter.html](https://xgboost.readthedocs.io/en/stable/parameter.html)) (accessed on 4 June 2024)). Values for learning rate, max depth, and gamma were fine-tuned using a randomized search approach (function RandomizedSearchCV in scikit-learn) to reduce over-fitting. Model evaluation was conducted using a train and test set approach, with the test having 33% of the records. XGBoost (version 1.7.3) was run with Python (version3.10) and Jupyter Notebooks. The Python code used here can be found on GitHub ([[https://github.com/georod/forc_trends/](https://github.com/georod/forc_trends/)]([https://github.com/georod/forc_trends/](https://github.com/georod/forc_trends/)) (accessed on 24 June 2024)). Figure A4: Partial dependence plots of magnitude of negative break predictors (features). The relationships between predictors and response (magnitude of EVI breaks) variables were mostly non-linear. Plots were created from the output of XGBoost. The model was run with a subset of all detected negative breaks (\(n=116\)). The values on the y-axes are absolute values of negative magnitudes.