knitr::opts_chunk$set(echo = TRUE)
This release focuses on speed, clarity, and reproducibility. Many core functions were refactored to be more consistent in their inputs and outputs, several new utilities were added, and plotting responsibilities were split into dedicated helpers. The package now follows a more workflow-oriented design: import, quality control, conditioning, phase detection, climate integration, growth modelling, detrending, and event-based analyses can be run in a more transparent sequence.
The release also strengthens reproducibility by using explicit namespaces where needed, clearer output classes, more dedicated summary/plot methods, and safer handling of gaps, smoothing, and climate joins.
The two main phase engines concentrate on phase assignment and statistics, while separate helpers handle visualization and climate integration:
phase.sc() applies the Stem-Cycle approach and returns phase-level and
cycle-level summaries for shrinkage, expansion, and increment.phase.zg() applies the Zero-Growth approach and returns timestamp-level,
phase-level, and cycle-level summaries for GRO and TWD.twd.maxima() locates local maxima within TWD phases and helps bridge
stem-water-deficit interpretation with phase-based workflows.Plotting is now separated from computation so users can calculate once and visualize in multiple ways:
plot.SC_output() plots stem-cycle outputs from phase.sc().plot.ZG_output() plots GRO and TWD outputs from phase.zg().dm_plot_climate() and dm_plot_climate_compare() provide climate-focused
views for dendrometer–climate interpretation.plot_event_climate_box() and plot_event_climate_relation() add targeted
visualization for event-based climate summaries.Several tools now support more robust input handling and early quality checks:
read.dendrometer() reads TXT, CSV, TSV, and Excel dendrometer files with
improved datetime parsing.read.climate() supports climate import in the same workflow style used for
dendrometer data.reso_dm() detects the effective temporal resolution of a time series and
flags irregularities.jump.locator() helps identify jumps or abrupt steps in dendrometer series.i.jump.locator() provides interactive jump inspection for manual review.Gap handling has been expanded substantially:
dm.na.interpolation() detects missing timestamps, inserts explicit gaps,
interpolates missing values, and can test interpolation performance over
multiple gap lengths.plot.dm_na_interpolation(), plot_dm_gaps(), plot_dm_interpolation(),
and plot_dm_assessment() provide dedicated visual diagnostics for missing
data and interpolation quality.network.interpolation() fills gaps in focal dendrometer series using a
co-recorded network of reference trees.plot.network_interpolation() visualizes observed values, interpolated
segments, donor-network behavior, and optional uncertainty bands.Together, these functions make it easier to compare interpolation strategies for both single-tree and site-network workflows.
Several conditioning functions were added or refined to make preprocessing more explicit:
dendro.resample() resamples dendrometer or climate data to coarser or finer
temporal resolution.dendro.truncate() truncates a dataset by year and/or day-of-year windows.smooth_dm() provides compact smoothing options for dendrometer series,
including median-mean, penalized spline, Savitzky–Golay, exponential moving
average, and loess approaches.dm_standardize() standardizes dendrometer series for cross-tree comparison.These functions make it easier to build reproducible preprocessing pipelines before phase detection or modelling.
The package adds a more structured daily-analysis layer:
daily.data() computes daily minima, maxima, timing of extrema, mean,
median, amplitude, lag metrics, and day-to-day status.plot.daily_output() provides a unified plotting interface for objects
returned by daily.data().dm_daily_clim() summarizes climate variables at the daily scale.dm_subdaily_clim() derives subdaily climate summaries aligned to
higher-frequency analyses.Climate can now be attached more directly to dendrometer outputs:
dm_join_daily_clim() joins daily climate summaries to daily.data()
outputs.dm_join_subdaily_clim() joins timestamp-level climate features to
point-level dendrometer outputs.dm_join_phase_clim() summarizes climate conditions within phase windows
from phase.sc() or phase.zg().dm_add_climate() provides a higher-level helper to enrich dendrometer
outputs with climate information.These functions support more consistent dendrometer–climate analyses across raw, daily, and phase-based outputs.
A new event-oriented layer helps summarize climate conditions during biological or environmental events:
dm_event_climate() extracts climate information for identified events.dm_event_climate_summary() summarizes climate statistics for event windows.dm_event_climate_test() supports inferential comparisons among event types
or groups.This makes it easier to move from descriptive phase detection to event-based hypothesis testing.
Growth fitting has been extended well beyond a single legacy curve:
dm.fit.gompertz() remains available as a legacy annual Gompertz option.dm.growth.fit() fits single-curve models such as GAM, Gompertz, logistic,
Richards, loess, and spline by vegetation season.dm.growth.fit.double() fits bimodal growth trajectories using double
Gompertz or double Richards formulations.plot.dm_growth_fit() provides multiple visual summaries of fitted growth
trajectories, timing, residuals, and parameters.dm.growth.evaluate() compares alternative fitting methods using fit
statistics.plot.dm_growth_evaluation() visualizes method-comparison metrics.print.dm_growth_fit(), summary.dm_growth_fit(), and
print.summary.dm_growth_fit() improve interpretability of fitted objects.This workflow makes it easier to compare competing models rather than relying on a single default growth curve.
The detrending workflow is more explicit and more tightly integrated with the new growth-fit objects:
dm.detrend.fit() creates detrended standardized series from fitted growth
models.plot.dm_detrended() visualizes original data, fitted curves, residuals,
and detrended series.mean_detrended.dm() aggregates detrended series across trees, with options
for robust averaging and autocorrelation-aware summaries.plot.mean_dm_detrended() visualizes the resulting mean detrended series.This makes it easier to move from single-tree modelling to species-, site-, or treatment-level detrended signals.
The package now includes a more complete superposed-epoch workflow:
dm_event_times() helps define event timing.dm_epoch_extract() extracts windows around those events.dm_epoch_test() performs superposed epoch analyses.summary.dm_epoch(), print.summary.dm_epoch(), and plot.dm_epoch()
support inspection and presentation of epoch results.These functions make it easier to study average dendrometer or climate responses around recurring events.
A new wavelet toolkit supports multiscale analysis of dendrometer dynamics:
dm_wavelet() performs wavelet decomposition of dendrometer series.summary.dm_wavelet(), print.summary.dm_wavelet(), and plot.dm_wavelet()
support interpretation of the decomposition.dm_wavelet_reconstruct() reconstructs selected components of the wavelet
signal.summary.dm_wavelet_reconstruct(),
print.summary.dm_wavelet_reconstruct(), and
plot.dm_wavelet_reconstruct() help evaluate reconstruction output.dm_wavelet_coherence() analyzes coherence between dendrometer and climate
signals across scales.plot.dm_wavelet_coherence() visualizes coherence structure.These additions broaden the package from time-domain analyses to multiscale time-frequency exploration.
Running climate–growth relationships now have a more complete summary and plotting framework:
mov.cor.dm() calculates moving correlations between daily dendrometer
summaries and climate variables.summary.mov_cor_dm(), print.summary_mov_cor_dm(), and
print.mov_cor_dm() support object inspection.plot.mov_cor_dm(), plot_mov.cor(), plot.mov.cor(),
plot.mov.cor.boot(), and plot.summary_mov_cor_dm() provide multiple
ways to visualize running correlations, significance, and peak windows.The climate-stress workflow now covers detection, summarization, testing, and plotting:
clim.twd() identifies adverse climate periods and calculates relative
dendrometer change.clim.twd.stats is available as clim.twd.stats() for grouped summaries at
tree, species, or site level.summary.clim_twd_stats() and print.summary.clim_twd_stats() summarize
grouped results.plot.clim_twd_stats() visualizes grouped climate-stress trajectories and
event metrics.clim.twd.test() adds inferential comparison among groups or treatments.summary.clim_twd_test(), print.summary.clim_twd_test(), and
plot.clim_twd_test() support reporting and visualization of test results.This makes harsh-climate analysis more useful for both exploratory and comparative studies.
Across the package, many functions now return richer objects with dedicated print, summary, and plot methods. This makes analyses easier to reproduce, compare, and document. In practice, users can now:
This separation is especially visible in the phase, growth-fit, moving correlation, harsh-climate, interpolation, and wavelet workflows.
The package now more consistently uses explicit namespace calls internally to
avoid clashes such as stats::filter() versus dplyr::filter(). If you work
interactively and use both packages, it can still be helpful to set:
conflicted::conflict_prefer("filter", "dplyr")
dendRoAnalyst 0.1.6 is no longer just a collection of stand-alone utilities.
It now behaves more like a connected analysis framework for dendrometer data,
with clearer transitions among import, quality control, interpolation,
conditioning, phase classification, climate integration, growth modelling,
detrending, event analysis, moving correlations, wavelets, and climate-stress
assessment.
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.