Changelog
Source:NEWS.md
circhelp 1.4.1
- Add
circ_lin_loess()andcirc_circ_loess()to distinguish linear and circular responses to circular predictors. - Add
circ_ytocirc_loess():FALSE(the default) selects the linear-response smoother, whileTRUEselects the circular-response smoother. Existing calls retain their linear-response fits. - The circular-response smoother supports a separate
response_space, averages responses across wrap boundaries, and computes uncertainty from local angular residuals. Undefined mean directions returnNA. - Add prediction methods for both explicit smoother classes and support
se.fit = FALSEas well as confidence bands, including use throughggplot2::geom_smooth(). - Document the response-type distinction and add regression tests for legacy compatibility, period invariance, wrap boundaries, prediction, and plotting.
circhelp 1.4.0
CRAN release: 2026-10-09
-
density_asymmetry(): the kernel density estimate is now wrapped around the circle (wrap = TRUE), so mass near +/-circ_space/2 is no longer truncated. This is a no-op to ~1e-13 for orientation or colour errors, but it matters for data with a 180-degrees-off reversal mode, such as motion direction. -
density_asymmetry(): the +/-circ_space/2 point is now excluded from the positive and negative sums (exclude_antipode = TRUE), like zero. It is the same angle reached from two sides, and with an oddnit was counted twice. -
density_asymmetry(): a bandwidth narrower than the grid spacing now rescalesyvarand the bandwidth together (rescale_narrow = TRUE) so the kernel spans at least one cell. Without it, the rectangle sum aliases: on a narrow error distribution withbw.SJ()-selected bandwidth the returned asymmetry was off by 7.5% of its value at the defaultn = 181, now 0.4%. -
density_asymmetry(): the two signs are now paired on a roundedabs(x), sinceseq()is not bitwise symmetric for everyn(onn = 1801, 604 of 900 pairs failed to match and dropped out of the sums entirely). -
density_asymmetry_discrete(): the same four fixes, with the same argument names and defaults. Wrapping there is done by evaluatingstats::density()over the neighbouring periods and folding the images back, since augmenting the sample with shifted copies would run intodensity()’s binning range. - The fixes above default to the corrected behaviour; pass
wrap = FALSE,exclude_antipode = FALSE,rescale_narrow = FALSEfor pre-1.4.0 results.
circhelp 1.3.1
- Added
circ_mean(),circ_sd(), andangle_diff(), generalized versions of the_rad/_180/_360family that accept an arbitraryperiodargument (e.g., 180, 360, or anything else). - Added a
periodargument toweighted_circ_mean()to compute the weighted circular mean directly on data in an arbitrary circular space, without manually converting to radians first.
circhelp 1.3
-
remove_cardinal_biases(): replacedgamlssdependency with a native P-spline + REML/EM implementation. Results are numerically equivalent; runtime is approximately 2× faster. - Removed
gamlssfrom package imports.
circhelp 1.2
- Added
density_asymmetry_discrete(). - Added
smoothed_circ_sd(). - Improved
density_asymmetry()speed and options.
circhelp 1.1.3
- Added
smoothed_circ_sd(). - Improved speed of
density_asymmetry()by using matrix multiplication. - Added
"average"as a bandwidth option indensity_asymmetry(). - Updated imports (
ggplot2,stats) and documentation.
circhelp 1.1.2
- Added
density_asymmetry_discrete(). - Added
return_full_densityoption todensity_asymmetry(). - Updated vignettes and package documentation/site build.
circhelp 1.1.1
- Added
density_asymmetry()to analyze the asymmetry in response probabilities.