vmgeom_glm() and vmideal_glm() fit the two
magnitude models as generalized linear models, so the population index
r and the location parameter psi can be
modelled as functions of covariates. Both take the response as
cbind(magn, lim_magn) and accept magnitude counts as
weights. predict() returns the parameter on
its natural scale by default, with standard errors and confidence limits
on request. See ?vmgeom_glm, ?vmideal_glm, and
the corresponding vignettes, which also discuss when to prefer a GLM
over the variance-stabilizing transformation or maximum likelihood.vmgeom_vst_lm() fits the variance-stabilized magnitudes
of the geometric model as an ordinary linear model, so the whole toolbox
around lm() becomes available at a fraction of the cost of
vmgeom_glm(). predict() returns the population
index as r, 1/r or log(r), or the
transformed magnitude itself. Magnitude counts are accepted as
weights; note that the standard errors of
predict() refer to the number of meteors, whereas those of
summary() refer to the number of rows. See
?vmgeom_vst_lm and vignette("vmgeom").vmgeom_vst_from_magn() returns
values on a different scale: 1.4 <= r <= 4 now maps
to tm between about 1.52 and
3.44, where the old transformation gave 3.77
to 5.74. Transformed values and estimates stored with
earlier versions are not comparable — recompute them from the raw
magnitudes.vmgeom_vst_*() is documented for
1.4 <= r <= 4, previously
1.4 <= r <= 3.5, and stays usable outside it: at a
limiting magnitude of 6.0 an r of
1.2 or 5.0 is now recovered to within
0.005, where the old transformation returned
NA. Inside 1.7 <= r <= 3.3 the old one
was somewhat more accurate — it carried a separate parameter set per
limiting magnitude, which the single one used now replaces.dmideal(), pmideal() and
qmideal() reject missing values in
m/p and psi with
stop("NA's are not allowed!"), consistent with
qvmgeom(), qvmideal() and
cvmideal(). Previously they either returned a missing value
or failed with an unhelpful message. Infinite magnitudes remain
valid.psi = Inf is now a valid value throughout. It denotes
the geometric limit the ideal distribution converges to and is accepted
by dvmideal(), pvmideal(),
qvmideal() and rvmideal(), which previously
rejected it with
stop("Infinite psi values are not allowed!").
vmideal_vst_to_psi() and predict() return it
where the data cannot distinguish a larger psi from a
smaller one — a case that used to yield NA — so such an
estimate can be passed on unchanged instead of being intercepted.vmgeom_vst_to_r() no longer returns NA
outside a calibrated window. It now rejects only values the model cannot
produce at all, so sparse data in a predictive model yield an
implausibly large but correctly ordered r rather than a
dropout.dvmideal(), pvmideal() and
qvmideal() now honour a perception_fun given
to them also for psi = Inf, where they previously fell back
to vmperception().qmideal(),
qvmgeom(), qvmideal() and
cvmideal() reads NAs produced instead of
NaNs produced, matching what these functions actually
return. Code that filters warnings on the exact message needs
updating.load_vmdb_rates() and
load_vmdb_magnitudes() now correctly request the
per-magnitude-class frequencies from the imo-vmdb REST API. Previously
with_magnitudes = TRUE sent
include=magnitudes, which on /magnitudes
returned HTTP 400 and on /rates produced a
response shape that .parse_magnitudes() could not handle.
The functions now send include=magnitude_details, restoring
the documented behaviour.period_start and period_end columns of
the observations data.frame returned by
load_vmdb_rates() and load_vmdb_magnitudes()
are now POSIXct (UTC), matching the behaviour of vismeteor
2.x. They were inadvertently returned as character after
the switch to httr2 in 3.0.0.period argument of load_vmdb_rates()
and load_vmdb_magnitudes() is now serialised to the strict
ISO 8601 form (YYYY-MM-DDTHH:MM:SS, UTC) that imo-vmdb 2.0
expects. Date, POSIXct, and character (full
datetime or date-only) inputs are all accepted; date-only inputs are
expanded to midnight (lower) and 23:59:59 (upper) of the given day.include=magnitude_details parameter and the
strict ISO 8601 wire format (T separator, no timezone
marker) for period_start / period_end; both
are required by this release.select_knots() performs forward/backward stepwise
selection of spline knots from a candidate set, scoring each fit with a
user-supplied function (e.g. AIC/BIC). Backward selection supports a
“bulk removal” mode, and scoring can run in parallel via the
parallel package. See ?select_knots and
vignette("select_knots").All public identifiers were migrated from dotted / camelCase to
snake_case to match the tidyverse / r-lib convention and to
remove visual confusion with S3 dispatch (print.foo). This
affects exported functions, function parameters, and
data.frame columns returned by load_vmdb_*()
and the example datasets PER_2015_rates /
PER_2015_magn (which were regenerated).
The d/p/q/r distribution prefixes (dvmgeom,
pvmideal, …) are unchanged, and lower.tail is
preserved to match base R conventions.
Renamed exported functions:
| 2.1.0 | 3.0.0 |
|---|---|
freq.quantile |
freq_quantile |
vmgeomVstFromMagn |
vmgeom_vst_from_magn |
vmgeomVstToR |
vmgeom_vst_to_r |
vmidealVstFromMagn |
vmideal_vst_from_magn |
vmidealVstToPsi |
vmideal_vst_to_psi |
Renamed parameters: lim.magn, magn.id,
rate.id, session.id,
perception.fun, sun.alt.max,
moon.alt.max, deriv.degree,
withSessions, withMagnitudes → their
snake_case forms.
The imo-vmdb API already uses snake_case, so column remapping is
reduced to a few semantic renames: id →
rate_id / magn_id / session_id
(so foreign keys in the same data frame stay unambiguous) and
mean → magn_mean (to avoid shadowing base R
mean()). Three columns that previously carried R-specific
names now pass through unchanged from the API:
| 2.1.0 | 3.0.0 |
|---|---|
shower.code |
shower |
radiant.alt |
rad_alt |
radiant.az |
rad_az |
perception_fun now defaults to
vmperception instead of NULL with an internal
fallback. Callers that explicitly passed
perception.fun = NULL must drop the argument or supply a
function.vmperception(m) is now vmperception(dm) —
the parameter is the difference between the limiting magnitude and the
meteor magnitude, and the new name reflects that. Positional calls
remain compatible.A sed sweep of your scripts is usually sufficient:
sed -i '' -E '
s/\bfreq\.quantile\b/freq_quantile/g;
s/\bvmgeomVstFromMagn\b/vmgeom_vst_from_magn/g;
s/\bvmgeomVstToR\b/vmgeom_vst_to_r/g;
s/\bvmidealVstFromMagn\b/vmideal_vst_from_magn/g;
s/\bvmidealVstToPsi\b/vmideal_vst_to_psi/g;
s/\blim\.magn\b/lim_magn/g;
s/\bmagn\.id\b/magn_id/g;
s/\brate\.id\b/rate_id/g;
s/\bsession\.id\b/session_id/g;
s/\bperception\.fun\b/perception_fun/g;
s/\bderiv\.degree\b/deriv_degree/g;
s/\bwithSessions\b/with_sessions/g;
s/\bwithMagnitudes\b/with_magnitudes/g;
s/\bshower\.code\b/shower/g;
s/\bperiod\.start\b/period_start/g;
s/\bperiod\.end\b/period_end/g;
s/\bsl\.start\b/sl_start/g;
s/\bsl\.end\b/sl_end/g;
s/\bt\.eff\b/t_eff/g;
s/\btime\.sidereal\b/sidereal_time/g;
s/\bsun\.alt\b/sun_alt/g;
s/\bsun\.az\b/sun_az/g;
s/\bmoon\.alt\b/moon_alt/g;
s/\bmoon\.az\b/moon_az/g;
s/\bmoon\.illum\b/moon_illum/g;
s/\bfield\.alt\b/field_alt/g;
s/\bfield\.az\b/field_az/g;
s/\bradiant\.alt\b/rad_alt/g;
s/\bradiant\.az\b/rad_az/g;
s/\bmagn\.mean\b/magn_mean/g;
s/\blocation\.name\b/location_name/g;
s/\bobserver\.id\b/observer_id/g;
s/\bobserver\.name\b/observer_name/g;
' your-script.Rload_vmdb_rates() and
load_vmdb_magnitudes() now connect to an imo-vmdb REST API instead
of a direct database connection.period, sl, and
lim_magn (previously a matrix with multiple rows that were
OR-joined) are no longer supported. Each filter is collapsed to a single
bounding min/max. Use multiple calls combined with rbind()
if disjoint ranges are needed.|> and
\().vmgeom and
vmideal models, including improved mathematical notation
and explanations.vmgeom_vst_from_magn() and
vmideal_vst_from_magn() by tightening the interpolation
steps used during the variance-stabilising transforms.vmtable() rounding routine to reduce
allocations.inst/derivation/
to improve reproducibility.load_vmdb() regression tests.This release introduces variance-stabilizing transformations for the
ideal distribution of visual meteor magnitudes
(vmideal_vst_from_magn()) as well as for visual meteor
magnitudes under a geometric distribution
(vmgeom_vst_from_magn()).
The function vmperception() now better matches the
perception probabilities of Koschack & Rendtel
(1990b).
The argument deriv_degree has been removed, as it was only
intended for internal testing and had no practical relevance for regular
use.
Laplace-transformed perception probabilities have been replaced by
variance-stabilizing transformations, which also means that the function
vmperception.l() has been removed.
Note: This release includes breaking changes and is not fully backward compatible due to the removal of parameters and functions.