News
Development
- Add support
MASS::lda()models for estimates but not standard errors. Thanks to (friendly?) for feature request #1598.
Bugs:
plot_predictions(points=1)errors withy|trials(n)~formulas. Thanks to (avehtari?) for report #1615.- Custom functions in
hypothesisformulas now correctly capture their parent environment, allowing them to access user-defined variables and weights. Thanks to (strengejacke?) for report #1608. - Fix to
get_coef.betareg()to extractprecisionparameter instead of justphi. This fixes a mismatch issue with names in the vcov. Thanks to (ngreifer?) for the report.
Misc:
- Informative warning when reading persistent config file fails due to corruption. Thanks to (r2evans?) for issue #1609.
0.30.0
New:
- Automatic differentiation provides much faster and more accurate standard errors for several model types. Thanks to (t-kalinowski?) for improvements to
reticulatehandling and to (arcruz0?) forJAXprediction functions. sampleSelectionmodels withtype="conditional"are now supported.- Support fitting functions from the
partykitpackage:lmtreeandglmtree.
Bug:
avg_predictions()did not respect thewtsargument when usingvariablesto create counterfactual predictions. Thanks to (strengejacke?) for report #1596.- Binary variables treated as integers by
datagrid()withnewdata=instead ofmodel=. Issue #1584. - Better labelling in some
brmsmodels with categorical outcomes. Thanks to (mattansb?) for a proposed solution and to (strengejacke?) for report #1392. - Improve printing of grouped hypotheses. Issue #1579.
- In
datagrid(), theFUN_integerargument also applies to integer-ish columns, including numeric columns without decimal places. Thanks to (strengejacke?) for report #1575. (Note that this bullet point was added retroactively after the release of version 0.30.0.)
0.29.0
New functions:
prune()deletes internal information from amarginaleffectsobject to save memory space.components()returns internal information from amarginaleffectsobject.
New features:
- Group bootstrap is now possible by specifying:
inferences(method = "rsample", group = ...). Issue #1528. datagrid()gains a newgrid_type = "dataframe"option that binds columns element-wise rather than creating cross-products, requiring all explicit vectors to have the same length.datagrid()gains aFUNargument to apply the same function to all variable types, overridinggrid_typedefaults but not specificFUN_*arguments.equivalenceargument is now supported for bayesian models. It returns the share of posterior draws in theequivalenceinterval.
Misc:
AER::tobit()can usetype="link"- Support
systemfitmodels. tidymodels()can now do conformal prediction withinferences().- Better error message for bayesian/bootstrap models when
hypotheses()attempts to post-process a previousmarginaleffectscall. - Model matrix is attached to more
newdata. Useful for Issue #6 inmarginaleffectsJAX. - Better error messages for unsupported custom classes with
inferences(). Unfortunately, we cannot support them because they are not guaranteed to come with an appropriateupdate()class. inferences()new computes p-values formethod = "fwb".conf_typecan now be"perc"or"wald"formethod = "simulation".- Documentation improvements.
get_dataset()now delegates most of the work to theRdatasetspackage (optional dependency).- Major internal refactoring to simplify the code base and make maintenance easier. We use fewer attributes and store internal information in a single S4 object stored as
attr(x, "marginaleffects"). - More efficient
inferences()by avoiding repeated calls toget_modeldata() - Support
vcov="HC0"forglmmTMBmodels. Requires 1.1.12 ofglmmTMBand >1.4.0 ofinsight. Thanks to (strengejacke?) for report #1562.
Bugs:
- Fixed bug in
sampleSelectionmodels. - Fixed
betaregmodels with Log(nu) parameter. Thanks to (strengejacke?) for report #1568.
0.28.0
Breaking changes:
marginaleffectscan no longer compute standard errors forfixestmodels in the following configurations (see Issue #1487):predictions()in all model.slopes()andcomparisons()in models with non-linear link (ex:fepois), that is, with a$familycomponent.
- The syntax for the
estimatorargument of theinferences()function is simpler:- Old:
inferences(est_fun(data), estimator = est_fun, method = "rsample") - New:
inferences(data, estimator = est_fun, method = "rsample")
- Old:
Bugs:
- No warning emitted when
vcov=FALSEinlme4andglmmTMBmodels. Thanks to (ASKurz?) for report #1460. inferences()passes extra arguments toboot(), as documented.inferences(method="rsample")should not collapse estimates whentermis not unique (ex: contrast, by, etc.)inferences(method="rsample")does not retain all attributes (data, model, etc.) in every iteration.inferences(method="rsample")alignment bug between estimates and CIs.
Misc:
- Performance improvements.
0.27.0
inferences()gets an optionalestimatorargument. This should be a function that accepts a data frame and returns amarginaleffectsobject. This is especially useful when the estimation strategy involves multiple steps such as computing weights, estimating a model, and computing a treatment effect via G-computation. In that case, we specify anestimator()function and theinferences()function returns a cleanmarginaleffectsobject with all the draws, without having to manually process the raw output from a bootstrap package.- In
brmsmodels, the extra argumentincl_autocorno longer raises a warning. Thanks to (robbinscalebj?) for report #1473. - Do not run
get_dataset()examples to avoid CRAN note. mlogitsupport is back forpredictions()andavg_predictions(). A vignette is added to the website
0.26.0
Breaking change:
datagrid()now sorts values of variables that are not explicitly supplied. This may change the row order of some results. Thanks to (mattansb?) for feature request #1439.- The default null hypothesis with
hypothesis=ratio~is now 1. Withhypothesis=difference~it is still 0. Thanks to Uffe Heide-Jørgensen for report #1453.
New:
- The
hypothesisargument can specify 1-tailed tests with strings:avg_predictions(model, hypothesis = "b1 <= 3") get_dataset()no longer requires the user to specify thepackageargument. It automatically searches the data index for a unique matching dataset.hypotheses()adds response names to term names. This allowshypothesis="groupa_var1=groupb_var1". Thanks to (mattansb?) for report #1432.vcovaccepts “rsample”, “boot”, “fwb”, and “simulation”. The object is automatically passed toinferences(method=)with default arguments. This is only meant as a shortcut. To customize the bootstrap strategy, users should useinferences().get_dataset()downloads Parquet files instead of CSV. Faster.inferences()methods “fwb” and “rsample” can now be parallelized using the globaloptions(marginaleffects_parallel_inferences=TRUE)df="residual"callsinsight::get_df(model)to get degrees of freedom for the p value computation. This usually delegates extraction todf.residual().datagrid()ensures integers stay integers. Thanks to (mattansb?) for report #1439.inferences()now uses themvtnormpackage instead ofMASSto draw multivariate normal numbers for simulation-based inference.
Bugs:
rmspackage now allows tibbles. Thanks to (stephenrho?) for report #1428.get_vcov()workaround when vcov does not match dimensions of jacobian. Thanks to (fisher-j?) for report #1439.
Misc:
0.25.1
Bugs:
dfis now respected when using themultcompargument. Thanks to (TonyRoberson?) for report #1414 and to (ngreifer?) for the solution.- Error when
hypotheses()has both a number inhypothesisand a value inmultcomp. Thanks to J. Rohrer for Issue #1381. - Informative error: conformal inference is not supported for
tidymodels typeis respected for models of classbetareg. Thanks to (strengejacke?) for reporting issue #1391.revreferenceis available again in thehypothesisargument.conformal_score="residual_sq"incorrectly added the score to the prediction instead of absolute residual. Coverage was probably incorrect, with wider intervals than necessary. Issue #1407.hypotheses()supports multiple imputation objects frommice. Thanks to (ASKurz?) for raising issue #1420.tidymodels()reshape bug.revreferenceis available again in thehypothesisargument.
Miscellaneous:
- Print order for equivalence test p values is changed.
collapseis not necessary for hypothesis formulas. Thanks to (ngreifer?) for Issue #1383.
0.25.0
Breaking changes in preparation for 1.0.0 release:
- The
hypothesisargument no longer accepts strings like “reference” or “pairwise”. Use the formula interface instead:hypothesis= ~reference - The default
typeis now “survival” for models of classcoxph,flexsurvreg, andcoxph_weightit. p_adjustargument deprecated because of name-matching conflict withpargument in quantile regression and others. The recommended workflow is now to pass the object to thehypotheses()function and use itsmultcompargument.- Removed long deprecated functions from the code base. These functions were already raising errors:
marginaleffects,meffects,marginal_means,deltamethod,datagridcf. newdata="marginalmeans"was changed tonewdata="balanced"several releases ago, but backward compatibility was maintained. This shortcut is no longer available at all.
New:
- The
hypothesisargument is more flexible. Thanks to (mattansb?) for requests, testing, and documentation.hypothesis = ratio ~ meandev | groupidhypothesis = ~ poly | groupidhypothesis = ~ helmert | groupidhypothesis = ~ trt_vs_ctrl | groupidhypothesis = ~ I(foo(x)) | groupidhypothesis = ~ I(\(x) c(a = x[1], b = mean(x[2:length(x))))
- New function
get_dataset()to download example data frames from the https://marginaleffects.com website. Thanks to (bshor?) for the feature request. - New
multcompargument for thehypotheses()function. hypotheses()inherits theconf_levelfrommarginaleffectsobjects when available. Otherwise, the default remains 0.95.- More informative warning for
lme4andglmmTMBmodels withre.form=NULL df.residual()methods tries to callstats::df.residual()on the “model” attribute. If that fails or returnsNULL, we returnInf.- Column names are no longer printed by default.
- Allow multiple sequential
hypotheses()calls. Issue #1316. - Better parameter name labels in
get_draws(). Thanks to (andymilne?) for feature request #1318. rvarcolumn fromget_draws()is now printed by default.- Matrix columns with 1 column are supported. Fixes errors when a variable was transformed by
scale(), for example. Thanks to (barryrowlingson?) for the report. - Much faster inference with
inferences(method="boot"). Thanks to (nremenyi?) for issue #1352. hypothesis=~pairwiseonly errors when there are more than 300 comparisons.options(marginaleffects_safe=FALSE)to disable this check.
Bugs:
- Version 0.24.0 accidentally removed the “contrast” column from the output object in calls with only one focal predictor. This column is reinstated.
- Reinstate some attributes lost with
marginaleffects_leanbut necessary for printing. - Encoding issue in bayesian models with
by. Thanks to (Koalha?) for report #1290. - Retain necessary attribute information to ensure that “lean” return objects still print correctly #1295.
- Indexing problem with
avg_comparisons(by=data.frame())andavg_slopes(by=data.frame()). Thanks to (andymilne?) for report #1313. hypotheses(p, hypothesis=~reference)did not work for somepobjects. Issue #1310.grayis respected for thepointsargument inplot_*()hypotheses(x, joint=1:2)did not work whenxwas amarginaleffectsobject. Thanks to (mattansb?) for report #1340
0.24.0
Breaking changes in preparation for 1.0.0 release:
- Rows are now sorted when using the
byargument. This may change the order of estimates, which can affect hypothesis tests using positional indices likeb1-b2=0.
Bugs:
- Intercept only model now works with
avg_predictions(). Thanks to (vbrazao?) for report #1230. systemfitmodels returned no standard errors when the same variables entered in different parts of the model. Thanks to (mronkko?) for report #1233.
New features:
- Users can reduce the size of
marginaleffectsobjects by setting the new global optionoptions(marginaleffects_lean = TRUE). This will strip the return objects of all information about the original model and data, as well ancillary attributes. The benefit of dramatically smaller return objects comes at the cost of not being able to run some post-processing inference functions likehypotheses()on these lean objects. Thanks to (grantmcdermott?) for the suggestion and code contribution #1267.
Misc:
- Using positional indices with
hypothesis="b1=b2"can be dangerous if row order is modified. A warning is now issued once per session with detailed advice. This warning can be disabled withoptions(marginaleffects_safe=FALSE). - The
ggplot2object returned byplot_*()functions now includes the estimates as a default object. This allows things like:plot_predictions(model, condition="x")+geom_line(). Thanks to (mattansb?) for code contribution #1259. - Be less strict about combining columns of different types. This allows us to handle types like
haven_labelled. Thanks to (mwindzio?) for report #1238. - In
lme4andglmmTMBmodels, warnings are now silenced when the user specifically passesre.form=NULL. Thanks to (mattansb?) for the feature request. - New startup message appears once per 24hr period and can be suppressed using
options(marginaleffects_startup_message = FALSE). posterior_draws()is renamedget_draws()because it also applies to bootstrap and simulation-based inference draws.get_coef()andget_vcov()are now documented on the main website, as they are useful helper functions.
0.23.0
Breaking change:
- Support for
mlogitis deprecated. The reason is that the data structure for these models is one observation-choice per row. Every other model-fitting package supported bymarginaleffectstreats rows as individual observations. The observation-choice structure made it harder to track indices and match individual predictions to rows in the original data. This added a lot of complexity tomarginaleffects, and the results were not always reliable or safe.
Bugs:
- Improved
glmmTMBsupport- Standard errors are produced in models with
type="zprob". Thanks to (jgeller112?) for issue #1189. hypotheses()bug resolved. Thanks to (reikookamoto?) for the code submission.
- Standard errors are produced in models with
multinom_weightitmodels withinsightversion 0.20.4 and greater would produce an error. Thanks to Noah Greifer.hypotheses(joint = TRUE)would throw an error if sample sizes could not be computed, even if they were not needed. Thanks to Noah Greifer.hypotheses(joint = TRUE)respects thevcovargument. Thanks to (kennchua?) for report #1214.ordbetaregmodels inglmmTMBare now supported. Thanks to (jgeller112?) for code contribution #1221.tidymodels(): Indexing overrode the value of predictors in the output data frame. The numerical estimates were unaffected. Thanks to (agmath?) for report #1209.
0.22.0
Breaking changes:
type="invlink(link)"is no longer default inavg_predictions()or when callingpredictions()with thebyargument. It is still default inpredictions()without thebyargument. The backtransform strategy is still available with by settingtype="invlink(link)"explicitly.- The
typeargument inplot_comparisons()now defaults toNULL, which is now consistent withcomparisons()andavg_comparisons(). Before, the default wastype="response". Thanks to (giakhang1906?) for report #1202.
New models supported:
stpm2,pstpm2,gsm, andaftmodels fromrstpm2. Thanks to (aghaynes?) and (mclements?).glm_weightit,coxph_weightit,multinom_weightit, andordinal_weightitmodels fromWeightit. Thanks to (ngreifer?).glmmgeefrom theglmtoolboxpackage. Thanks to (adrianolszewski?) for the request and (lhvanegasp?) for help with implementation.
New features:
- Parallel computation with
futureis more efficient by chunking tasks to avoid passing large objects to every worker for every future. Issue #1158. - All columns of
newdataare passed to thehypothesisfunction whennewdatais supplied explicitly. Thanks to (gravesti?) for report #1175. hypotheses(joint=TRUE): do not callstats::nobs()unless necessary.hypotheses()supports formulas in thehypothesisargument:hypotheses(model, hypothesis = ratio ~ reference)- Global option:
options("marginaleffects_print_omit" = "s.value") - Round significant digits for labels in
plot_predictions(mod, condition = list(x = "fivenum")) print()no longer printscontrastandtermcolumns when values are unique. The labels were often very long, and the content is already explicit in the call itself, so there’s no ambiguity.- No warning raised when
discreteargument is used withmgcv::bamandmgcv::gammodels objects. Thanks to (Aariq?) for the request. tidymodelssupport is improved. Users can now directly feed some of them without specifyingnewdataexplicitly. Thanks to (davidkane9?) for the feature request.
Bugs:
- Average lift and average comparisons with user-supplied functions could be be calculated incorrectly when all predictors were categorical. Thanks to (Dpananos?) for Issue #1151.
- Indexing bug returned
NAfor some commands insurveymodels. Thanks to (weikang9009?) for report #1161. - Respect default
tinytabletheme. - Inverted confidence interval bounds with some inverse link functions. Thanks to (strengejacke?) for report #1204.
0.21.0
New:
hypothesisaccepts formulas like:ratio ~ sequential | group- Allow reverse binary contrasts:
comparisons(mod, variables = list(am = 1:0, vs = 0:1)). Thanks to K. Henry for report #1137. options(marginaleffects_safe = FALSE)disables some safety checks and allows unadvisable (but potentially) useful features like many pairwise comparisons. Thanks to D.Locke for the feature request.newdata="balanced"is a shortcut to produce estimates at combinations of all categorical predictors, holding numeric predictors at their means. Equivalent todatagrid(grid_type="balanced")
Misc:
- Deprecation warning for
specify_hypothesis(). This function was clearly marked as experimental, and has been available only for one release. It was a bad idea. Users should supply a custom function or a formula to thehypothesisargument. The new formula interface, in particular, makes it very easy to conduct group-wise hypothesis tests. - Type checks are a bit looser to accommodate custom models.
Bugs:
- Fix regression in
mlogitmodels due to factor conversion. This raised an error before returning result, so there is no numerical danger. surveypackage models work whenrow.names(model)is not coercible to integers. Thanks to (ngreifer?) for report #1131.
0.20.1
- The
comparisonargument of thecomparisons()function is automatically switched to theavgversion of the function shortcuts when callingavg_comparisons()or settingby=TRUE. For example,comparison="ratio"becomescomparison="ratioavg"when callingavg_comparisons(). Note thatcomparison="ratioavg"is equivalent to:comparison = \(hi,lo) mean(hi)/mean(lo) - Fixed a bug (“non-conformable arguments”) when using
survregobjects fromsurvival::survreg(). - Fixed bug in
inferences()for GLM models andtype="invlink", where the wrong scale would be reported for confidence intervals.
0.20.0
Breaking changes:
- The order of the
groupcolumn is preserved when the original variable is a factor. This may change the order of output, which could have an effect on hypothesis tests using thehypothesis="b1=b3"syntax.
New:
- New experimental function:
specify_hypothesis()returns functions to be used in thehypothesisargument ofpredictions(),comparisons(), andslopes(). This convenience function can be used to specify complex aggregations and estimands for hypothesis tests (ex: by subgroups or with custom functions). hypothesisargument accepts “meandev” and “meanotherdev” to compute deviations from the mean estimate.- Do not raise extraneous warning for
surveypackage models when thebyargument is not used. - Informative error when
hypotheses()is called twice on the same object. print("tinytable")adds footnotes to the table with columns and type information.
Bugs:
mlogitpredict()method does not play well withdata.table. Thanks to (andrewheiss?) for report #1086.- Avoid merging
newdatainpredictions()whenhypothesiscan change the meaning of rows. Avoid Issue #1105 reported by (strengejacke?). inferences()did not work with thetransformargument. Thanks to Demetri Pananos for report #1115.
0.19.0
Breaking changes:
datagrid()no longer includes the response variable by default when it is not explicitly specified by the user. Use the newresponseargument to include it.datagrid(grid_type="balanced")returns factors ordered by level rather than by order of appearance in the original data.- Order of some rows in the output may differ when using
datagrid(). Necessary to fix issue #1079 (see below).
New modeling packages supported:
flexsurv: Thanks to (mattwarkentin?) for code contributions in PR #781. https://cran.r-project.org/web/packages/flexsurv/index.htmlREndo: https://cran.r-project.org/web/packages/REndo/index.html
New:
wts=TRUEtries to retrieves weights used in a weighted fit such aslm()with theweightsargument or a model fitted using thesurveypackage. Thanks to (ngreifer?) for feature requestprint.marginaleffects()supportsstyle="tinytable", which returns atinytableobject. Callprint(avg_slopes(model))to get a nice printed table in Quarto or Rmarkdown documents, via Typst, LaTeX or HTML. Default print format can be set using:options(marginaleffects_print_style="tinytable")hypothesisargument accepts a function which takes amarginaleffectsdata frame and returns a transformed data frame withtermandestimatecolumns.datagrid()gets aresponseargument (default isFALSE) to control if the response variable is included or excluded from the grid-building process.- The
base::subset()anddplyr::filter()functions can be called with a single argument innewdatato select a subset of rows from the dataset used to fit the model.- Ex: avg_comparisons(fit, variables = “treatment”, newdata = subset(treatment == 1))`
- Better warning for unsupported arguments.
dfargument inhypotheses()accepts a vector of length 2 to control degrees of freedom in F tests.nlme::lme()objects raise a warning about degrees of freedom. Thanks to and (stefgehrig?) and (huftis?) for discussion in Issue #960.
Major bugs:
- Some results could be mislabelled with factor variables used in combination with
datagrid()orcondition. Thanks to (snhansen?) for report #1079. glmmTMBmodels now report correct standard errors, and raise a warning that these standard errors only account for uncertainty in fixed effect parameters. Thanks to contributors to Issue #1024 and especially to (bbolker?) for discussion and solution.
Minor bugs:
- Uninformative error when a custom
comparisonfunction returnsNAin bayesian models. Thanks to (Sandhu-SS?) for report #1017. datagrid()returns an object with full attributes whenbyis used. Thanks to (Sandhu-SS?) for report #1058.inferences(method="simulation")withinferences()function. Thanks to (davidarmstrong?) for report #1054.
0.18.0
This release represents a major step towards 1.0.0. Some functions are renamed and now raise deprecation warnings. After 1.0.0, the API will become much more stable, and any change will have to be very deliberate with much lead time and deprecation delays.
Breaking changes:
tidy()no longer takes the average of estimates in the original model object. Users who want an aggregate estimate should call the relevantavg_*()function, or use thebyargument explicitly. The previous behavior led to unexpected behavior and increased code complexity a lot.summary()methods are removed. These have never provided any additional information; they just reprinted the output already available with the standard print method. At least the defaultsummary()for data frames (which is now triggered onmarginaleffectsobject) provides a different view on the content of the object.plot_cco(),plot_cme(), andplot_cap()were renamed in version 0.9.0, one year ago. They are now fully removed from the package.
New:
datagrid(grid_type = "balanced")creates a balanced grid with all unique values of categorical predictors. This can be used withpredictions()to compute marginal means as in theemmeanspackage.mvgampackage support (multivariate generalized additive models)
Deprecation warnings:
deltamethod()has been namedhypotheses()for a while. We now issue a deprecation warning and it will be removed eventually.datagridcf()will eventually be deprecated and removed from the package. We will raise a warning for at least one year before removing the function. Identical results can be obtained withdatagrid(..., grid_type="counterfactual")marginal_means()will eventually be deprecated and removed from the package. We will raise a warning for at least one year before removing the function. Identical results can be obtained using thepredictions()function and thegrid_type="balanced"argument ofdatagrid(). Examples are in the marginal means vignette on the website.
Minor:
- Better warning messages for unsupported matrix columns, enhancing user experience and troubleshooting.
- Various improvements to documentation.
- Typos
- Repository hosts model objects for easier testing.
Bug fixes:
- Error on
hypotheses(joint = "string")forcomparisons()objects (no result was returned). Thanks to (BorgeJorge?) for report #981. - Enhanced support for multi-equation Bayesian models with
brmsmodels. Thanks to (winterstat?) for report #1006. - Parameter names with spaces could break standard errors. Thanks to (Lefty2021?) for report #1005.
0.17.0
Breaking changes:
- The
comparisons()now uses “forward contrasts” by default for numeric predictors, instead of “centered contrasts”. This can lead to small numerical differences in non-linear models. - The
variablesargument of thecomparisons()function no longer accepts numeric vectors unless they are of length 2, specifying the low and high contrast values. This is to avoid ambiguity between the two vector version. Users should supply a data frame or a function instead. This is nearly as easy, and removes ambiguity.
New supported packages:
dbarts: https://cran.r-project.org/package=dbartsmvgam: https://nicholasjclark.github.io/mvgam/ Not available on CRAN yet, but this package maintains its ownmarginaleffectssupport function.rms::Gls: https://cran.r-project.org/package=rms
Misc:
comparisons(): Thevariablesargument now accepts functions and data frames for factor, character, and logical variables.- Deprecation warning for:
plot_cap(),plot_cme(), andplot_cco(). These function names will be removed in version 1.0.0. options(modelsummary_factory_default=...)is respected in Quarto and Rmarkdown documents.
Bugs:
wtsargument now respected inavg_slopes()for binary variables. Thanks to (trose64?) for report #961- Custom functions in the
comparisonargument ofcomparisons()did not supply the correctxvector length for bayesian models when thebyargument is used. Thanks to (Sandhu-SS?) for report #931. - Add support for two facet variables (through
facet_grid) when plotting usingcondition comparisons(): Whenvariablesis a vector of length two andnewdatahas exactly two columns, there was ambiguity between custom vectors and length two vector of contrasts. Bug reported by C. Rainey on Twitter.- Superfluous warning with
fixest::fenegbin.
0.16.0
Machine learning support:
tidymodelspackagemlr3package
Misc:
- New vignettes:
- Inverse Probability Weighting
- Machine Learning
- Matching
- Add support for
hypotheses()toinferences(). Thanks to (Tristan-Siegfried?) for code contribution #908. - Support
survival::survreg(). Thanks to Carlisle Rainey for Report #911. column_namesargument inprint.marginaleffects()to suppress the printed column names at the bottom of the printout.- The function supplied to the
comparisonargument of thecomparisons()function can now operate onxand onnewdatadirectly (e.g., to check the number of observations). - More informative errors from
predict().
Bugs:
- Some
gamlssmodels generated an error related to thewhatargument. Thanks to (DHLocke?) for Issue #933
0.15.1
hypotheses(): TheFUNargument handlesgroupcolumns gracefully.- Native support for
Ameliafor multiple imputation.
Documentation:
- New section on “Complex aggregations” in the Hypothesis testing vignette.
Bug fix:
- Results of the
predictions()function could be inaccurate when (a) running version 0.15.0, (b)typeisNULLorinvlink(link), (c) model isglm(), and (d) thehypothesisargument is non-numeric. Thanks to (strengejacke?) for report #903
0.15.0
New:
- Conformal prediction via
inferences() hypothesisargument now accepts multiple string formulas.- The
typeargument now accepts an explicitinvlink(link)value instead of silently back-transforming. Users are no longer pointed totype_dictionary. Instead, they should call their function with a badtypevalue, and they will obtain a list of valid types. The defaulttypevalue is printed in the output. This is useful because the defaulttypevalue isNULL, so the user often does not explicitly decide. - Allow install with Rcpp 1.0.0 and greater.
Support new models:
survey::svyolr()
Misc:
inferences(method="simulation")uses the original point estimate rather than the mean of the simulation distribution. Issue #851.- Better documentation and error messages for
newdata=NULL - Some performance improvements for
predictions()andmarginalmeans()(#880, #882, (etiennebacher?)).
Bug fix:
newdata="median"returned mean of binary variables. Thanks to (jkhanson1970?) for report #896.
0.14.0
Breaking changes:
- Row order of the output changes for some objects. Rows are not sorted alphabetically by
term,by, and variables explicitly supplied todatagrid. This can affect hypothesis tests computed using the b1, b2, b3, and other indices. - New procedure
numderivargument use a different procedure to select the step size used in the finite difference numeric derivative used to compute standard errors: abs(x) * sqrt(.Machine$double.eps). The numerical results may not be exactly identical to previous versions ofmarginaleffects, but the step size should be adequate in a broader variety of cases. Note that users can use thenumderivargument for more control on numeric differentiation, as documented. bifemodels are no longer supported pending investigation in weird results in the tests. Looking for volunteers write more thorough tests.
New:
- Support:
logistfpackage. - Support:
DCchoicepackage. - Support:
stats::nls hypotheses()can now accept raw data frame, which gives a lot of flexibility for custom contrasts and functions. See the Hypothesis vignette for an example.numderivargument allows users to use finite difference (center or forward) or Richardson’s method to compute the numerical derivatives used in the calculation of standard errors.
Bug fixes:
inferences()supports thecrossargument forcomparisons()objects. Thanks to Kirill Solovev for report #856.splines::bs()in formulas could produce incorrect results due to weirdness instats::model.matrix(). Thanks to (chiungming?) for report #831.mgcvwithocatare now supported. Thanks to Lorenzo Fabbri for Issue #844.quantregproblem withrowidmerge did not affect estimates but did not return the full original data. Issue #829.get_modeldata()extracts weights variable when available.predictions()is no longer broken in someinferences()calls. Issue #853- Inaccurate averaging with
comparison=differenceavgsome models where all predictors are categorical. Thanks to Karl Ove Hufthammer for report #865.
Misc:
- Major refactor to simplify the code base and make maintenance easier.
0.13.0
Breaking change:
glmmTMB: Standard errors are no longer supported because they may have been erroneous. Follow Issue #810 on Github for developments: https://github.com/vincentarelbundock/marginaleffects/issues/810
New:
hypothesisargument accepts wildcards:hypothesis = "b*=b1"s.valuecolumn in all output: Shannon transforms for p values. See Greenland (2019).marginal_meanssupportsmira(miceobjects).comparisons(): Thevariablesarguments now accepts arbitrary numeric vectors of length equal to the number of rows innewdata. This allows users to specify fully custom treatment sizes. In the documentation examples, we show how to estimate the difference for a 1 standard deviation shift in a regressor, where the standard deviation is calculated on a group-wise basis.comparisons(): thevariablesargument now accepts “revpairwise”, “revsequential”, “revreference” for factor and character variables.comparisons(): thecomparisonargument now accept “lift” and “liftavg”.
Performance:
- Computing elasticities for linear models is now up to 30% faster (#787, (etiennebacher?)).
Bug fixes:
- Better handling of environments when
newdatais a function call. Thanks to (jcccf?) for report #814 and to (capnrefsmmat?) for the proposed fix using therlangpackage. - Degrees of freedom mismatch for joint hypothesis tests. Thanks to (snhansen?) for report #789.
0.12.0
Breaking change:
- Row order of output has changed for many calls, especially those using the
byargument. This may break hypothesis tests conducted by indexingb1,b2, etc. This was necessary to fix Issue #776. Thanks to (marcora?) for the report.
New:
hypotheses(): Joint hypothesis tests (F and Chi-square) with thejointandjoint_testarguments.vcov.hypothesesmethod.wtsis now available inplot_predictions(),plot_comparisons(), andplot_slopes().
Bug:
- Wrong order of rows in bayesian models with
byargument. Thanks to (shirdekel?) for report #782.
0.11.2
vcov()andcoef()methods formarginaleffectsobjects.- Strings in
wtsare accepted with thebyargument. predictions()andavg_predictions()no longer use an automatic backtransformation for GLM models unlesshypothesisisNULL.vcov()can be used to retrieve a full variance-covariance matrix from objects produced bycomparisons(),slopes(),predictions(), ormarginal_means()objects.- When processing objects obtained using
micemultiple imputation, the pooled model usingmice::poolis attached to themodelattribute of the output. This means that functions likemodelsummary::modelsummary()will not erroneously report goodness-of-fit statistics from just a single model and will instead appropriately report the statistics for the pooled model. Thanks to (Tristan-Siegfried?) for PR #740. - More informative error messages on some prediction problems. Thanks to (andymilne?) for Report #751.
Performance:
inferences()is now up to 17x faster and much more memory-efficient whenmethodis"boot"or"rsample"(#770, #771, (etiennebacher?)).
Bugs:
brmsmodels withnl=TRUEand a single predictor generated an error. Thanks to (Tristan-Siegried?) for Report #759.avg_predictions(): Incorrect group-wise averaging when all predictors are categorical, thevariablesvariable is used, and we are averaging withavg_or thebyargument. Thanks to BorgeJorge for report #766.- Bug when
datagrid()when called inside a user-written function. Thanks to (NickCH-K?) for report #769 and to (capnrefsmmat?) for the diagnostics.
0.11.1
Breaking change:
- Row orders are now more consistent, but may have changed from previous version. This could affect results from
hypothesiswithb1,b2, … indexing.
Support new models:
nlme::lme()phylolm::phylolm()phylolm::phyloglm()
New:
- Vignette on 2x2 experimental designs. Thanks to Demetri Pananos.
comparisons()accepts data frames with two numeric columns (“low” and “high”) to specify fully customizable contrasts.datagrid()gets a newbyargument to create apply grid-making functions within groups.plot_*()gain anewdataargument for use withby.
Bug:
comparisons(comparison = "lnratioavg")ignoredwtsargument. Thanks to Demetri Pananos for report #737.ordinal::clm(): incorrect standard errors when location and scale parameters are the same. Thanks to MrJerryTAO for report #718.- Incorrect label for “2sd” comparisons. Thanks to Andy Milne for report #720.
- Invalid factor levels in
datagrid()meansnewdataargument gets ignored. Thanks to Josh Errickson for report #721. - Error in models with only categorical predictors and the
byargument. Thanks to Sam Brilleman for report #723. - Elasticities are now supported for
ordinal::clm()models. Thanks to MrJerryTAO for report #729. glmmTMBmodels with zero-inflated components are supported. Thanks to (Helsinki-Ronan?) and (strengejacke?) for report #734.
0.11.0
Breaking changes:
typecolumn is replaced bytypeattribute.predictions()only works with officially supported model types (same list ascomparisons()andslopes()).
Renamed arguments (backward compatibility is preserved):
transform_pre->comparisontransform_post->transform
New:
p_adjustargument: Adjust p-values for multiple comparisons.equivalenceargument available everywhere.
Performance:
- Much faster results in
avg_*()functions for models with only categorical predictors and many rows of data, using deduplication and weights instead of unit-level estimates. - Faster predictions in
lm()andglm()models usingRcppEigen. - Bayesian models with many rows. Thanks to Etienne Bacher. #694
- Faster predictions, especially with standard errors and large datasets.
Bugs:
- Multiple imputation with
miraobjects was not pooling all datasets. Thanks to (Generalized?) for report #711. - Support for more models with offsets. Thanks to (mariofiorini?) for report #705.
- Error on
predictions()withbyandwts. Thanks to Noah Greifer for report #695. afex: some models generated errors. Thanks to Daniel Lüdecke for report #696.groupcolumn name is always forbidden. Thanks to Daniel Lüdecke for report #697.- Blank graphs in
plot_comparisons()with a list invariables. type="link"produced an error with some categoricalbrmsmodels. Thanks to (shirdekel?) for report #703.- Error on
predictions(variables = ...)forglmmTMBmodels. Thanks to Daniel Lüdecke for report #707. bywith user-specified function incomparisonand factor predictor did not aggregate correctly. Thanks to (joaotedde?) for report #715.ordinal::clm: Supportcum.probandlinear.predictorprediction types. Thanks to (MrJerryTAO?) for report #717.
0.10.0
Performance:
- 2-4x faster execution for many calls. Thanks to Etienne Bacher.
New models supported:
MCMCglmm::MCMCglmmRchoice::hetprobRchoice::ivpml- Multiple imputation using
miceand any package which can return a list of imputed data frames (e.g.,Amelia,missRanger, etc.)
Plot improvements:
- New
byargument to display marginal estimates by subgroup. - New
rugargument to display tick marks in the margins. - New
pointsargument inplot_predictions()to display a scatter plot. - New
grayargument to plot in grayscale using line types and shapes instead of color. - The
effectargument is renamed tovariablesinplot_slopes()andplot_comparisons(). This improves consistency with the analogousslopes()andcomparisons()functions. - The plotting vignette was re-written.
Other:
- Support multiple imputation with
micemiraobjects. The multiple imputation vignette was rewritten. - The
variables_gridargument inmarginal_means()is renamednewdata. Backward compatibility is maintained. avg_*()returns an informative error whenvcovis “satterthwaite” or “kenward-roger”- “satterthwaite” and “kenward-roger” are now supported when
newdatais notNULL - Informative error when
hypothesisincludes ab#larger than the available number of estimates. avg_predictions(model, variables = "x")computes average counterfactual predictions by subgroups ofxdatagrid()andplot_*()functions are faster in datasets with many extraneous columns.- In
predictions(type = NULL)withglm()andGam()we first make predictions on the link scale and then backtransform them. Settingtype="response"explicitly makes predictions directly on the response scale without backtransformation. - Standard errors now supported for more
glmmTMBmodels. - Use the
numDerivpackage for numeric differentiation in the calculation of delta method standard error. A global option can now be passed tonumDeriv::jacobian:options(marginaleffects_numDeriv = list(method = "simple", method.args = list(eps = 1e-6)))options(marginaleffects_numDeriv = list(method = "Richardson", method.args = list(eps = 1e-6)))options(marginaleffects_numDeriv = NULL)
- Print:
- Print fewer significant digits.
print.marginaleffectsnow prints all columns supplied tonewdata- Less redundant labels when using
hypothesis
- Many improvements to documentation.
Bugfixes:
- Standard errors could be inaccurate in models with non-linear components (and interactions) when some of the coefficients were very small. This was related to the step size used for numerical differentiation for the delta method. Issue #684.
avg_predictions(by =)did not work when the dataset included a column namedterm. Issue #683.brmsmodels with multivariate outcome collapsed categories incomparisons(). Issue #639.hypotheses()now works on lists and in calls tolapply(),purrr::map(), etc. Issue #660.
0.9.0
Breaking changes:
- All functions return an
estimatecolumn instead of the function-specificpredicted,comparisons,dydx, etc. This change only affects unit-level estimates, and not average estimates, which already used theestimatecolumn name. - The
transform_avgargument intidy()deprecated. Usetransform_postinstead. plot_*(draw=FALSE)now return the actual variable names supplied to theconditionargument, rather than the opaque “condition1”, “condition2”, etc.
New models supported:
blmepackage.
New features:
- New functions:
avg_predictions(),avg_comparisons(),avg_slopes() - Equivalence, non-inferiority, and non-superiority tests with the
hypotheses()function andequivalenceargument. - New experimental
inferences()function: simulation-based inferences and bootstrap using theboot,rsample, andfwbpackage. - New
dfargument to set degrees of freedom manually for p and CI. - Pretty
print()for all objects. byargumentTRUEreturns average (marginal) predictions, comparisons, or slopes.- Supports bayesian models.
hypothesisargument- Numeric value sets the null used in calculating Z and p.
- Example:
comparisons(mod, transform_pre = "ratio", hypothesis = 1)
- All arguments from the main functions are now available through
tidy(), andsummary():conf_level,transform_post, etc. - Bayesian posterior distribution summaries (median, mean, HDI, quantiles) can be customized using global options. See
?comparisons
Renamed functions (backward-compatibility is maintained by keeping the old function names as aliases):
marginaleffects()->slopes()posteriordraws()->posterior_draws()marginalmeans()->marginal_means()plot_cap()->plot_predictions()plot_cme()->plot_slopes()plot_cco()->plot_comparisons()
Bug fixes:
- Incorrect results: In 0.8.1,
plot_*()thethreenumandminmaxlabels did not correspond to the correct numeric values. - Fix corner case for slopes when the dataset includes infinite values.
mlogiterror with factors.- The
vcovargument now accepts functions for most models.
Other:
- Removed major performance bottleneck for
slopes()
0.8.1
deltamethod()can run hypothesis tests on objects produced by thecomparisons(),marginaleffects(),predictions(), andmarginalmeans()functions. This feature relies onmatch.call(), which means it may not always work when used programmatically, inside functions and nested environments. It is generally safer and more efficient to use thehypothesisargument.plot_cme()andplot_cco()accept lists with user-specified values for the regressors, and can display nice labels for shortcut string-functions like “threenum” or “quartile”.posterior_draws: newshapeargument to return MCMC draws in various formats, including the newrvarstructure from theposteriorpackage.transform_avgfunction gets printed insummary()output.transform_postandtransform_avgsupport string shortcuts: “exp” and “ln”- Added support for
mlmmodels fromlm(). Thanks to Noah Greifer.
Bug fixes:
hypothesisargument with bayesian models andtidy()used to raise an error.- Missing values for some regressors in the
comparisons()output forbrmsmodels.
0.8.0
Breaking change:
- The
interactionargument is deprecated and replaced by thecrossargument. This is to reduce ambiguity with respect to theinteractionargument inemmeans, which does something completely different, akin to the difference-in-differences illustrated in the Interactions vignette.
71 classes of models supported, including the new:
rms::olsrms::lrmrms::orm
New features:
- Plots:
plot_cme(),plot_cap(), andplot_cco()are now much more flexible in specifying the comparisons to display. Theconditionargument accepts lists, functions, and shortcuts for common reference values, such as “minmax”, “threenum”, etc. variablesargument of thecomparisons()function is more flexible:- Accepts functions to specify custom differences in numeric variables (e.g., forward and backward differencing).
- Can specify pairs of factors to compare in the
variablesargument of thecomparisonsfunction.
variablesargument of thepredictions()function is more flexible:- Accepts shortcut strings, functions, and vectors of arbitrary length.
- Integrate out random effects in bayesian
brmsmodels (see Bayesian analysis vignette)
New vignettes:
- Experiments
- Extending marginal effects
- Integrating out random effects in bayesian models
Bug fixes and minor improvements:
- The default value of
conf_levelinsummary()andtidy()is nowNULL, which inherits theconf_levelvalue in the originalcomparisons/marginaleffects/predictionscalls. - Fix typo in function names for missing “lnratioavgwts”
- Interactions with
fixest::i()are parsed properly as categorical variables - For
betaregobjects, inference can now be done on all coefficients usingdeltamethod(). previously only the location coefficients were available. - For objects from
crchpackage, a number of bugs have been fixed; standard errors should now be correct fordeltamethod(),marginaleffects(), etc. - Fixed a bug in the
tidy()function forglmmTMBmodels without random effects, which caused all t statistics to be identical.
0.7.1
- New supported model class:
gamlss. Thanks to Marcio Augusto Diniz. marginalmeans()accepts awtsargument with values: “equal”, “proportional”, “cells”.byargument- accepts data frames for complex groupings.
- in
marginalmeansonly accepts data frames. - accepts “group” to group by response level.
- works with bayesian models.
byfunargument for thepredictions()function to aggregate using different functions.hypothesisargument- The matrix column names are used as labels for hypothesis tests.
- Better labels with “sequential”, “reference”, “pairwise”.
- new shortcuts “revpairwise”, “revsequential”, “revreference”
wtsargument is respected inbyargument and with*avgshortcuts in thetransform_preargument.tidy.predictions()andtidy.marginalmeans()get a newtransform_avgargument.- New vignettes:
- Unit-level contrasts in logistic regressions. Thanks to (arthur-albuquerque?).
- Python Numpy models in
marginaleffects. Thanks to timpipeseek. - Bootstrap example in standard errors vignette.
0.7.0
Breaking changes:
byis deprecated insummary()andtidy(). Use the samebyargument in the main functions instead:comparisons(),marginaleffects(),predictions()- Character vectors are no longer supported in the
variablesargument of thepredictions()function. Usenewdata="fivenum"or “grid”, “mean”, or “median” instead.
Critical bug fix:
- Contrasts with interactions were incorrect in version 0.6.0. The error should have been obvious to most analysts in most cases (weird-looking alignment). Thanks to (vmikk?).
New supported packages and models:
survival::clogitbiglm: The main quantities can be computed, but not the delta method standard errors. See https://github.com/vincentarelbundock/marginaleffects/issues/387
New vignette:
- Elasticity
- Frequently Asked Questions
New features:
- Elasticity and semi-elasticity using the new
slopeargument inmarginaleffects(): eyex, dyex, eydx datagrid()accepts functions:datagrid(newdata = mtcars, hp = range, mpg = fivenum, wt = sd)- New
datagridcf()function to create counterfactual datasets. This is a shortcut to thedatagrid()function with default togrid_type = "counterfactual" - New
byarguments inpredictions(),comparisons(),marginaleffects() - New
newdatashortcuts: “tukey”, “grid” - New string shortcuts for
transform_preincomparisons() marginalmeans()now back transforms confidence intervals when possible.vcovargument string shortcuts are now case-insensitive- The default contrast in
comparisons()for binary predictors is now a difference between 1 and 0, rather than +1 relative to baseline. - documentation improvements
0.6.0
New supported packages and models:
tidymodelsobjects of classtidy_modelare supported if the fit engine is supported bymarginaleffects.
New function:
deltamethod(): Hypothesis tests on functions of parametersplot_cco(): Plot conditional contrasts
New arguments:
hypothesisfor hypothesis tests and custom contraststransform_postinpredictions()wtsargument inpredictions()only affects average predictions intidy()orsummary().
New or improved vignettes:
- Hypothesis Tests and Custom Contrasts using the Delta Method: https://marginaleffects.com/vignettes/hypothesis.html
- Multiple Imputation: https://marginaleffects.com/vignettes/multiple_imputation.html
- Causal Inference with the g-Formula: https://marginaleffects.com/vignettes/gcomputation.html (Thanks to Rohan Kapre for the idea)
Deprecated or renamed arguments:
contrast_factorandcontrast_numericarguments are deprecated incomparisons(). Use a named list in thevariablesargument instead. Backward compatibility is maintained.- The
transform_postargument intidy()andsummary()is renamed totransform_avgto disambiguate against the argument of the same name incomparisons(). Backward compatibility is preserved.
Misc:
tidy.predictions()computes standard errors using the delta method for average predictions- Support
gammodels with matrix columns. epsinmarginaleffects()is now “adaptive” by default: it equals 0.0001 multiplied the range of the predictor variablecomparisons()now supports “log of marginal odds ratio” in thetransform_preargument. Thanks to Noah Greifer.- New
transform_preshortcuts: dydx, expdydx tidy.predictions()computes standard errors and confidence intervals for linear models or GLM on the link scale.
0.5.0
Breaking changes:
typeno longer accepts a character vector. Must be a single string.conf.intargument deprecated. Usevcov = FALSEinstead.
New supported packages and models:
mlogitmhurdletobit1glmmTMB
New features:
interactionargument incomparisons()to compute interactions between contrasts (cross-contrasts).byargument intidy()andsummary()computes group-average marginal effects and comparisons.transform_preargument can define custom contrasts between adjusted predictions (e.g., log adjusted risk ratios). Available incomparisons().transform_postargument allows back transformation before returning the final results. Available incomparisons(),marginalmeans(),summary(),tidy().- The
variablesargument of thecomparisons()function accepts a named list to specify variable-specific contrast types. - Robust standard errors with the
vcovargument. This requires version 0.17.1 of theinsightpackage.sandwichpackage shortcuts:vcov = "HC3","HC2","NeweyWest", and more.- Mixed effects models:
vcov = "satterthwaite"or"kenward-roger" - One-sided formula to clusters:
vcov = ~cluster_variable - Variance-covariance matrix
- Function which returns a named squared matrix
marginalmeans()allows interactions- Bayesian Model Averaging for
brmsmodels usingtype = "average". See vignette on themarginaleffectswebsite. epsargument for step size of numerical derivativemarginaleffectsandcomparisonsnow report confidence intervals by default.- New dependency on the
data.tablepackage yields substantial performance improvements. - More informative error messages and warnings
- Bug fixes and performance improvements
New pages on the marginaleffects website: https://marginaleffects.com/
- Alternative software packages
- Robust standard errors (and more)
- Performance tips
- Tables and plots
- Multinomial Logit and Discrete Choice Models
- Generalized Additive Models
- Mixed effects models (Bayesian and Frequentist)
- Transformations and Custom Contrasts: Adjusted Risk Ratio Example
Argument name changes (backward compatibility is preserved:
- Everywhere:
conf.level->conf_level
datagrid():FUN.factor->FUN_factor(same for related arguments)grid.type->grid_type
0.4.1
New supported packages and models:
stats::loesssampleSelection::selectionsampleSelection::heckit
Misc:
mgcv::bammodels allowexcludeargument.- Gam models allow
include_smoothargument. - New tests
- Bug fixes
0.4.0
New function:
comparisons()computes contrasts
Misc:
- Speed optimizations
predictions()andplot_cap()include confidence intervals for linear models- More robust handling of in-formula functions: factor(), strata(), mo()
- Do not overwrite user’s
ggplot2::theme_set()call
0.3.4
- Bug fixes
0.3.3
New supported models:
mclogit::mclogitrobust::lmRobrobustlmm::rlmerfixestconfidence intervals inpredictions
Misc:
- Support
modelbased::visualisation_matrixinnewdatawithout having to specifyxexplicitly. tidy.predictions()andsummary.predictions()methods.- Documentation improvements.
- CRAN test fixes
0.3.2
Support for new models and packages:
brglm2::braclmclogit::mblogitscam::scamlmerTest::lmer
Misc:
- Drop
numDerivdependency, but make it available via a global option: options(“marginaleffects_numDeriv” = list(method = “Richardson”, method.args = list(eps = 1e-5, d = 0.0001))) - Bugfixes
- Documentation improvements
- CRAN tests
0.3.1
documentation bugfix
0.3.0
Breaking changes:
predictionsreturns predictions for every observation in the original dataset instead ofnewdata=datagrid().marginalmeansobjects have new column names, as do the correspondingtidyandsummaryoutputs.
New supported packages and models:
brms::brmrstanarm::stanglmbrglm2::brmultinomMASS::glmmPQLaod::betabin
Misc:
datagridfunction supersedestypicalandcounterfactualwith thegrid.typeargument. Thetypicalandcounterfactualfunctions will remain available and exported, but their use is not encouraged.posterior_drawsfunction can be applied to apredictionsor amarginaleffectsobject to extract draws from the posterior distribution.marginalmeansstandard errors are now computed using the delta method.predictionsstandard errors are now computed using the delta method when they are not available frominsight::get_predicted.- New vignette on Bayesian models with
brms - New vignette on Mixed effects models with
lme4 - If the
data.tablepackage is installed,marginaleffectswill automatically use it to speed things up. - Contrast definition reported in a separate column of
marginaleffectsoutput. - Safer handling of the
typeargument. - Comprehensive list of supported and tests models on the website.
- Many bug fixes
- Many new tests, including several against
emmeans
0.2.0
Breaking change:
dataargument becomesnewdatain all functions.
New supported packages and models:
lme4:glmer.nbmgcv::gamordinal::clmmgcv
marginalmeans:
- New
variables_gridargument
predictions:
- Support
mgcv
plot_cap
- New
typeargument
Misc:
- New validity checks and tests
0.1.0
First release. Bravo!
Thanks to Marco Avina Mendoza, Resul Umit, and all those who offered comments and suggestions.