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.R
load_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.