# 04: Generating Estimates: Age-standardization

## Overview

In the previous vignette, we discussed the model setup process in-depth. But how do we get our estimates once we’ve run our model? In this vignette, we discuss extracting estimates from our model object with the `get_estimates()` function, and how to age-standardize those estimates with `age_standardize()`.

## The `get_estimates()` function

In the RSTr introductory vignette, we generated age-standardized estimates for `lambda` based on our example Michigan dataset. To extract rates from an `RSTr` object, we can simply run `get_estimates()`:

    mod_mst <- mstcar(name = "my_test_model", data = miheart, adjacency = miadj)

    # For computational reasons, full model fitting is not run during CRAN checks.
    # When building on CRAN, this vignette loads a pre-fitted example model included with the package.
    # The pkgdown website shows the full model-fitting workflow.
    example_dir <- system.file("extdata", package = "RSTr")
    mod_mst <- load_model("mstcar_example", example_dir)

    estimates <- get_estimates(mod_mst, rates_per = 1e5)
    head(estimates)
    #>   county group year  medians ci_lower ci_upper rel_prec events population
    #> 1  26001 35-44 1979 41.09875 31.76009 47.11024 2.677417      1        964
    #> 2  26003 35-44 1979 61.79864 50.74198 80.73919 2.060146      1       1011
    #> 3  26005 35-44 1979 23.44843 18.67969 28.12923 2.481436      0       9110
    #> 4  26007 35-44 1979 38.04293 26.32669 48.99415 1.678306      0       3650
    #> 5  26009 35-44 1979 36.87313 31.41068 44.70636 2.773316      0       1763
    #> 6  26011 35-44 1979 36.02715 32.00151 47.83611 2.275216      0       1470

## The `age_standardization()` function

In many cases, we will want to age-standardize our estimates based on some (or all) age groups in our dataset. In our Michigan dataset, we have six ten-year age groups over which we can standardize; let’s age-standardize from ages 35-64. For `RSTr` objects, `age_standardize()` takes in four arguments:

- `RSTr_obj`: The `RSTr` model object created with `*car()`;

- `std_pop`: A `vector` of standard populations associated with the age groups of interest. Since our Michigan data is from 1979-1988, we can use 1980 standard populations from NIH. It is recommended that you use the standard population that is most closely associated with your dataset;

- `new_name`: The name of your new standard population group; and

- `groups`: A `vector` of names matching each group of interest. To age-standardize by all groups in a dataset, leave this argument blank.

Once we have our `std_pop` vector, we can age-standardize our estimates:

    std_pop <- c(113154, 100640, 95799)
    mod_mst <- age_standardize(mod_mst, std_pop, new_name = "35-64", groups = c("35-44", "45-54", "55-64"))
    mod_mst
    #> RSTr object:
    #>
    #> Model name: mstcar_example
    #> Model type: MSTCAR
    #> Data likelihood: binomial
    #> Estimate Credible Interval: 95%
    #> Number of geographic units: 83
    #> Number of samples: 3000
    #> Estimates age-standardized: Yes
    #> Age-standardized groups: 35-64
    #> Estimates suppressed: No

Notice now that the `mod_mst` object indicates we have age-standardized our estimates and the names of our age-standardized group. We can also add on to our list of age-standardized estimates by simply specifying a different group:

    std_pop <- c(68775, 34116, 9888)
    mod_mst <- age_standardize(mod_mst, std_pop, new_name = "65up", groups = c("65-74", "75-84", "85+"))
    mod_mst
    #> RSTr object:
    #>
    #> Model name: mstcar_example
    #> Model type: MSTCAR
    #> Data likelihood: binomial
    #> Estimate Credible Interval: 95%
    #> Number of geographic units: 83
    #> Number of samples: 3000
    #> Estimates age-standardized: Yes
    #> Age-standardized groups: 35-64 65up
    #> Estimates suppressed: No

If we want to generate estimates for all groups, i.e. 35 and up, we can omit the `groups` argument and expand `std_pop` to include all of our populations:

    std_pop <- c(113154, 100640, 95799, 68775, 34116, 9888)
    mod_mst <- age_standardize(mod_mst, std_pop, new_name = "35up")
    mod_mst
    #> RSTr object:
    #>
    #> Model name: mstcar_example
    #> Model type: MSTCAR
    #> Data likelihood: binomial
    #> Estimate Credible Interval: 95%
    #> Number of geographic units: 83
    #> Number of samples: 3000
    #> Estimates age-standardized: Yes
    #> Age-standardized groups: 35-64 65up 35up
    #> Estimates suppressed: No
    mst_estimates_as <- get_estimates(mod_mst)
    head(mst_estimates_as)
    #>   county group year  medians ci_lower ci_upper rel_prec events population
    #> 1  26001 35-64 1979 202.9310 166.2747 242.0648 2.677538      7       3353
    #> 2  26003 35-64 1979 256.0684 214.3235 348.2249 1.912365     12       3105
    #> 3  26005 35-64 1979 126.2409 112.8141 147.4087 3.649160     27      23926
    #> 4  26007 35-64 1979 174.0603 154.6135 209.3011 3.182813     15      10000
    #> 5  26009 35-64 1979 184.0658 163.5568 205.2774 4.411868     11       5152
    #> 6  26011 35-64 1979 207.9429 185.7425 231.7124 4.523455      8       4517

Now, `get_estimates(mod_mst)` shows the age-standardized estimates as opposed to our non-standardized estimates. Should you want to see the non-standardized estimates instead, you can set the argument `standardized = FALSE`.

## Final thoughts

In this vignette, we explored the `get_estimates()` function and investigated age-standardization with the `age_standardize()` function. Age-standardization is one of the most important features of the RSTr package; using just a few arguments, we can easily generate estimates across our population groups.