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:
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.
Need a high-speed mirror for your open-source project?
Contact our mirror admin team at info@clientvps.com.
This archive is provided as a free public service to the community.
Proudly supported by infrastructure from VPSPulse , RxServers , BuyNumber , UnitVPS , OffshoreName and secure payment technology by ArionPay.