Gives the declared status of a pair of package features. The status is one of:
Arguments
- feature_a, feature_b
Feature names, as given by
frm_compat_features(). Supply both for one pair, one for every pair involving that feature, or neither for the whole table. Both accept a vector, which gives every pair in the cross of the two sides; an empty vector is an error rather than an empty answer.- status
Optional character vector; keep only these statuses.
Value
A data frame with columns feature_a, kind_a,
feature_b, kind_b, status, and note. Family pairs are
omitted, because a model carries one family. When the session
holds an unresolved rule side, the frame also carries an
unresolved attribute and the class frmtmb_compat, whose print
method names them; see the section below.
Details
worksThe combination is supported and exercised.
conditionalSupported, but the note states a condition that the combination must meet.
refusedfrm()or the post-fit method stops with an error. The refusal is deliberate.brokenThe combination is accepted but the result is wrong, or it fails with an error that does not explain itself. Avoid the pair. The note gives the evidence.
untestedNothing checks this pair. It may work. Treat a silent success as unverified, not as support.
The last status is the point of the registry. A guard that does not exist looks exactly like a guard that passed, so the absence of an error was never evidence of support.
Rule sides this session cannot resolve
A rule may name a feature another package owns, declared through
frmtmb_register_compat(expects =). Until that package is loaded
there is no such feature and so no pair, and the rule matches
nothing. Such a side cannot honestly be a row here, because a row
would put a feature in the table that nothing in this session
implements; it is reported instead. The returned table carries the
names in an unresolved attribute and the print method names them
under the rows. Both appear only when the session holds one, so a
session with no forward reference gets the plain data frame it
always got. Load the package that owns the feature, or read the
names as the list of rules that are waiting for one.
Examples
# one pair
frm_compat("rescor", "cens()")
#> feature_a kind_a feature_b kind_b status
#> 1 rescor structure cens() aterm refused
#> note
#> 1 Refused. This pair was once accepted with the censoring silently dropped.
# everything known about truncation
frm_compat("trunc()", status = c("refused", "broken"))
#> feature_a kind_a feature_b kind_b status
#> 1 trunc() aterm tweedie family refused
#> 2 trunc() aterm nbinom1 family refused
#> 3 trunc() aterm bernoulli family refused
#> 4 trunc() aterm multinomial family refused
#> 5 trunc() aterm dirichlet_multinomial family refused
#> 6 trunc() aterm zero_one_inflated_beta family refused
#> 7 trunc() aterm xbeta family refused
#> 8 trunc() aterm cumulative family refused
#> 9 trunc() aterm hurdle_cumulative family refused
#> 10 trunc() aterm sratio family refused
#> 11 trunc() aterm cratio family refused
#> 12 trunc() aterm acat family refused
#> 13 trunc() aterm categorical family refused
#> 14 trunc() aterm dirichlet family refused
#> 15 trunc() aterm dirichlet2 family refused
#> 16 trunc() aterm logistic_normal family refused
#> 17 trunc() aterm thres() aterm refused
#> 18 trunc() aterm fcor() autocor refused
#> 19 trunc() aterm quadrature mode refused
#> 20 trunc() aterm rescor structure refused
#> 21 trunc() aterm mixture structure refused
#> 22 trunc() aterm bar_crossing grammar refused
#> 23 trunc() aterm mixture_mvn structure refused
#> 24 trunc() aterm hmm structure refused
#> 25 trunc() aterm lca structure refused
#> note
#> 1 Refused: trunc() needs a family with an AD log-CDF.
#> 2 Refused by the family's list of addition terms, which holds weights() alone. brms has no nbinom1 family. Its CDF is read by residuals(type = "osa") alone.
#> 3 Refused, as brms 2.23.0 refuses it: "Argument 'trunc' is not supported for family 'bernoulli'". Its CDF is read by residuals(type = "osa") alone.
#> 4 Refused: trunc() needs a family with an AD log-CDF.
#> 5 Refused: trunc() needs a family with an AD log-CDF.
#> 6 Refused, as brms 2.23.0 refuses it: "Argument 'trunc' is not supported for family 'zero_one_inflated_beta'". The family has no CDF.
#> 7 Refused, as brms 2.23.0 refuses it: "Argument 'trunc' is not supported for family 'xbeta'". The family has no CDF.
#> 8 Refused: ordinal families carry no AD log-CDF over the response scale.
#> 9 Refused: ordinal families carry no AD log-CDF over the response scale.
#> 10 Refused: ordinal families carry no AD log-CDF over the response scale.
#> 11 Refused: ordinal families carry no AD log-CDF over the response scale.
#> 12 Refused: ordinal families carry no AD log-CDF over the response scale.
#> 13 Refused for the same reason: no order, no CDF, no truncation window.
#> 14 Refused for the same reason: no scalar CDF, no truncation window.
#> 15 Refused for the same reason: no scalar CDF, no truncation window.
#> 16 Refused for the same reason: no scalar CDF, no truncation window.
#> 17 Refused: the ordinal families that thres() belongs to do not take this term.
#> 18 Refused: the density of the rows is joint, so there is no per-row contribution for a frequency weight to repeat, a censoring indicator to replace with a tail probability, or a truncation bound to renormalize. brms refuses weights(), cens() and trunc() here too.
#> 19 Refused: the truncation normalizer is log(F(ub) - F(lb)) over plain CDFs, and the Gauss-Kronrod nodes reach random-effect values where that difference underflows to exactly zero while the density is still representable. The integrand is then +Inf and the marginalized objective is -Inf, at the Laplace optimum as well as at the starting values, so the fit used to report logLik = +Inf as converged. Laplace stays near the mode and is unaffected: use quadrature = FALSE, REML, or profile for truncated responses.
#> 20 Refused. This pair was once accepted with the truncation silently dropped.
#> 21 Refused: brms 2.23.0 truncates each component and then mixes them, and frmtmb's density has no per-component window, so a CDF of the mixture would be another model.
#> 22 Refused: a bar term crossed with * or : (as in x * (1 | g)) is not a random-effect specification (lme4#196). Write the crossing inside the bar: (x | g). This spelling was once accepted with the crossing silently dropped.
#> 23 Refused: mixture_mvn() has no CDF.
#> 24 Refused for the same reason as cens().
#> 25 Refused: an lca() response is a matrix of item codes with no per-row weight, censoring window, trial count or known standard error to attach an addition term to. One message covers the whole set.
# the pairs to avoid
frm_compat(status = "broken")[, 1:5]
#> [1] feature_a kind_a feature_b kind_b status
#> <0 rows> (or 0-length row.names)