Skip to contents

Calculated from a parameter vector, from a prior or from a posterior distribution.

Usage

query_model(
  model,
  queries = NULL,
  given = NULL,
  using = list("parameters"),
  parameters = NULL,
  stats = NULL,
  n_draws = 4000,
  expand_grid = FALSE,
  case_level = FALSE,
  query = NULL,
  cred = 95
)

Arguments

model

A causal_model. A model object generated by make_model.

queries

A vector of strings or list of strings specifying queries on potential outcomes such as "Y[X=1] - Y[X=0]".

given

A vector or list of strings specifying givens. A given is a quoted expression that evaluates to a logical statement. Allows estimand to be conditioned on *observational* (or counterfactual) distribution.

using

A vector or list of strings. Whether to use priors, posteriors or parameters.

parameters

A vector of real numbers in [0,1]. Values of parameters to specify (optional). By default, parameters is drawn from model$parameters_df.

stats

Functions to be applied to estimand distribution. If NULL, defaults to mean, standard deviation, and 95% confidence interval. Functions should return a single numeric value.

n_draws

An integer. Number of draws.

expand_grid

Logical. If TRUE then all combinations of provided lists are examined. If not then each list is cycled through separately. Defaults to FALSE.

case_level

Logical. If TRUE estimates the probability of the query for a case.

query

alias for queries

cred

size of the credible interval ranging between 0 and 100

Value

A DataFrame with columns Model, Query, Given and Using defined by corresponding input values. Further columns are generated as specified in stats.

Details

Queries can condition on observed or counterfactual quantities. Nested or "complex" counterfactual queries of the form Y[X=1, M[X=0]] are allowed.

Examples

model <- make_model("X -> Y")
query_model(model, "Y[X=1] - Y[X = 0]", using = "priors")
#> 
#> Causal queries generated by query_model (all at population level)
#> 
#> |query             |using  |   mean|   sd| cred.low| cred.high|
#> |:-----------------|:------|------:|----:|--------:|---------:|
#> |Y[X=1] - Y[X = 0] |priors | -0.004| 0.32|   -0.653|      0.63|
#> 
query_model(model, "Y[X=1] > Y[X = 0]", using = "parameters")
#> 
#> Causal queries generated by query_model (all at population level)
#> 
#> |query             |using      | mean|
#> |:-----------------|:----------|----:|
#> |Y[X=1] > Y[X = 0] |parameters | 0.25|
#> 
query_model(model, "Y[X=1] > Y[X = 0]", using = c("priors", "parameters"))
#> 
#> Causal queries generated by query_model (all at population level)
#> 
#> |query             |using      |  mean|    sd| cred.low| cred.high|
#> |:-----------------|:----------|-----:|-----:|--------:|---------:|
#> |Y[X=1] > Y[X = 0] |priors     | 0.243| 0.192|    0.008|     0.695|
#> |Y[X=1] > Y[X = 0] |parameters | 0.250|    NA|    0.250|     0.250|
#> 
# \donttest{

# `expand_grid= TRUE` requests the Cartesian product of arguments

models <- list(
 M1 = make_model("X -> Y"),
 M2 = make_model("X -> Y") |>
   set_restrictions("Y[X=1] < Y[X=0]")
 )


query_model(
  models,
  query = list(ATE = "Y[X=1] - Y[X=0]",
               Share_positive = "Y[X=1] > Y[X=0]"),
  given = c(TRUE,  "Y==1 & X==1"),
  using = c("parameters", "priors"),
  expand_grid = FALSE)
#> 
#> Causal queries generated by query_model (all at population level)
#> 
#> |model |query          |given       |using      |  mean|    sd| cred.low| cred.high|
#> |:-----|:--------------|:-----------|:----------|-----:|-----:|--------:|---------:|
#> |M1    |ATE            |-           |parameters | 0.000|    NA|    0.000|     0.000|
#> |M1    |Share_positive |Y==1 & X==1 |priors     | 0.495| 0.291|    0.024|     0.976|
#> |M2    |ATE            |-           |parameters | 0.333|    NA|    0.333|     0.333|
#> |M2    |Share_positive |Y==1 & X==1 |priors     | 0.501| 0.286|    0.026|     0.974|
#> 

query_model(
  models,
  query = list(ATE = "Y[X=1] - Y[X=0]",
               Share_positive = "Y[X=1] > Y[X=0]"),
  given = c(TRUE,  "Y==1 & X==1"),
  using = c("parameters", "priors"),
  expand_grid = TRUE)
#> 
#> Causal queries generated by query_model (all at population level)
#> 
#> |model |query          |given       |using      |  mean|    sd| cred.low| cred.high|
#> |:-----|:--------------|:-----------|:----------|-----:|-----:|--------:|---------:|
#> |M1    |ATE            |-           |parameters | 0.000|    NA|    0.000|     0.000|
#> |M2    |ATE            |-           |parameters | 0.333|    NA|    0.333|     0.333|
#> |M1    |ATE            |-           |priors     | 0.005| 0.321|   -0.637|     0.636|
#> |M2    |ATE            |-           |priors     | 0.337| 0.241|    0.012|     0.855|
#> |M1    |ATE            |Y==1 & X==1 |parameters | 0.500|    NA|    0.500|     0.500|
#> |M2    |ATE            |Y==1 & X==1 |parameters | 0.500|    NA|    0.500|     0.500|
#> |M1    |ATE            |Y==1 & X==1 |priors     | 0.509| 0.291|    0.026|     0.971|
#> |M2    |ATE            |Y==1 & X==1 |priors     | 0.498| 0.290|    0.024|     0.974|
#> |M1    |Share_positive |-           |parameters | 0.250|    NA|    0.250|     0.250|
#> |M2    |Share_positive |-           |parameters | 0.333|    NA|    0.333|     0.333|
#> |M1    |Share_positive |-           |priors     | 0.256| 0.197|    0.008|     0.712|
#> |M2    |Share_positive |-           |priors     | 0.337| 0.241|    0.012|     0.855|
#> |M1    |Share_positive |Y==1 & X==1 |parameters | 0.500|    NA|    0.500|     0.500|
#> |M2    |Share_positive |Y==1 & X==1 |parameters | 0.500|    NA|    0.500|     0.500|
#> |M1    |Share_positive |Y==1 & X==1 |priors     | 0.509| 0.291|    0.026|     0.971|
#> |M2    |Share_positive |Y==1 & X==1 |priors     | 0.498| 0.290|    0.024|     0.974|
#> 

# An example of a custom statistic: uncertainty of token causation
f <- function(x) mean(x)*(1-mean(x))

query_model(
  model,
  using = list( "parameters", "priors"),
  query = "Y[X=1] > Y[X=0]",
  stats = c(mean = mean, sd = sd, token_variance = f))
#> 
#> Causal queries generated by query_model (all at population level)
#> 
#> |query           |using      |  mean|    sd| token_variance|
#> |:---------------|:----------|-----:|-----:|--------------:|
#> |Y[X=1] > Y[X=0] |parameters | 0.250|    NA|          0.188|
#> |Y[X=1] > Y[X=0] |priors     | 0.254| 0.195|          0.189|
#> 
# }