insight icon indicating copy to clipboard operation
insight copied to clipboard

WIP: Improve metafor support

Open bwiernik opened this issue 2 years ago • 5 comments

tl;dr: What do you think of my adding include_interval arguments to get_data.rma() rather than these being in parameters::parameters()? @strengejacke @DominiqueMakowski @IndrajeetPatil @mattansb

I'm looking to improve our handling of meta-analysis objects, particularly from metafor.

The first step here is to get various functions in insight working.

Currently, I've improved missing data handling in get_data.rma(), and made get_formula.rma() work for most cases.

I have also added arguments to include confidence intervals for effect sizes in get_data.rma(). This is to facilitate creation of forest plots. Currently, we have this functionality in parameters::model_parameters.rma(), but it doesn't make much sense to me there. The observed study effect sizes are not really model parameters--they are the observed raw data. Including them in parameters() also produces odd output for meta-analysis with predictors (vs intercept-only). So I suggest we move this functionality here. I think the reason they might be in parameters() is because they are in broom::tidy(), but this doesn't make much sense to me there either. This choice was probably to facilitate making forest plots, but there are better ways to do that, and this structure isn't really all that useful for these plots anyway.

Still to come:

insight

  • [ ] Update get_predicted()

In get_predicted(), we should have:

  1. "expectation" : fitted values + confidence interval
  2. "prediction" : fitted values + prediction interval
  3. "blup" : best linear unbiased predictions + CI (analogous to coef() or modelbased::estimate_grouplevel() in an MLM)

Should the the third option rather be in parameters::model_parameters(..., group_level = TRUE), with options "random" and "total"/"blup"? That would be more similar to how we handled mixed effects models

In addition, get_predicted() needs some work to handle metafor's unusual expected inputs to predict() (a model matrix rather than a model frame) and unusual output (a single row for intercept-only models).

The various flavors of rma models should be handled.

parameters

Update model_parameters():

  • [ ] remove include_studies
  • [ ] include dispersion parameters in table

performance

  • [ ] Make check_model() work

Should generally look and work like with mixed effects models

modelbased

  • [ ] Check the various estimate_*() functions to ensure they work

see

  • [ ] Add funnel plot functionality
  • [ ] Add forest plot functionality
  • [ ] Add visualization_recipe() functionality to produce funnel, forest, or scatterplots

I could move this off into their package (easymeta or similar) if desired

bwiernik avatar Feb 28 '22 23:02 bwiernik

You're the meta analysis expert. And in 95% of all cases, the things you did made sense. So I trust you here :-) In general, your suggestion sounds reasonable to me. I could work on the parameters side of this, but maybe after you finished this PR, so I have a clearer picture of what to do in parameters.

strengejacke avatar Mar 01 '22 19:03 strengejacke

What Daniel said (:

mattansb avatar Mar 02 '22 08:03 mattansb

What Mattan said ;)

DominiqueMakowski avatar Mar 14 '22 02:03 DominiqueMakowski

Codecov Report

Merging #514 (89a3966) into main (0b3e372) will decrease coverage by 0.32%. The diff coverage is 0.00%.

@@            Coverage Diff             @@
##             main     #514      +/-   ##
==========================================
- Coverage   51.62%   51.30%   -0.33%     
==========================================
  Files         119      119              
  Lines       13964    14052      +88     
==========================================
  Hits         7209     7209              
- Misses       6755     6843      +88     
Impacted Files Coverage Δ
R/find_formula.R 60.73% <0.00%> (-1.23%) :arrow_down:
R/get_data.R 50.82% <0.00%> (-2.66%) :arrow_down:
R/get_predicted.R 53.33% <0.00%> (-12.65%) :arrow_down:

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

codecov-commenter avatar Sep 03 '22 13:09 codecov-commenter

This would be a very useful commit. Any updates?

arthur-albuquerque avatar Sep 11 '22 18:09 arthur-albuquerque

I just saw you wanted to remove include_studies and add a funnel plot... "why" to both?

  1. Do you want to completely remove estimates for single studies, or just show them always?
  2. Funnel plots are already possible, maybe there's room for improvement: https://easystats.github.io/see/articles/parameters.html#model-parameters-of-meta-analysis-models

strengejacke avatar Nov 09 '22 11:11 strengejacke

I think we should remove the studies option from parameters and use get_data() for that

bwiernik avatar Nov 09 '22 16:11 bwiernik