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 bymake_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|
#>
# }