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