Skip to contents

Second step of analysis pipeline: dynamically generates a STAN model based on input data. After saving the output to a variable, you can preview a formatted version in the R console using cat().

Usage

generate_STb_model(
  STb_data,
  data_type = c("continuous_time", "discrete_time", "order"),
  model_type = c("full", "asocial"),
  intrinsic_rate = c("constant", "weibull"),
  transmission_func = c("standard", "freqdep_f", "freqdep_k"),
  multinetwork_s = c("separate", "shared"),
  veff_ID = c(),
  gq = TRUE,
  est_acqTime = FALSE,
  priors = list()
)

Arguments

STb_data

a list of formatted data returned from the STbayes_data() function

data_type

string specifying the type of data you have ("continuous_time" for cTADA, "discrete_time" for dTADA or "order" for OADA). continuous_time assumes you know precisely when events happened. discrete_time assumes you know roughly when individuals learned (within some discrete period), and order assumes that you have no time information.

model_type

string specifying the model type: "full" or "asocial"

intrinsic_rate

Define shape of intrinsic rate (either "constant" or "weibull"). Weibull fits extra parameter (gamma) that allows for time-varying event rates.

transmission_func

string specifying transmission function: "standard", "freqdep_f" or "freqdep_k" for frequency dependent complex contagion. Defaults to "standard".

multinetwork_s

string specifying how multi-network models are generated. "separate" estimates an s value for each network. "shared" generates model with single s and a vector of weights for each network.

veff_ID

Parameters for which to estimate varying effects by individuals. Default is no varying effects.

gq

Boolean to indicate whether the generated quantities block is added (incl. ll for WAIC)

est_acqTime

Boolean to indicate whether gq block includes estimates for acquisition time. At the moment this uses 'one weird trick' to accomplish this and does not support estimates for non-integer learning times.

priors

named list with strings containing priors.

Value

A STAN model string.

Examples

# very mock data
event_data <- data.frame(
    id = LETTERS[1:6],
    trial = c(1, 1, 1, 2, 2, 2),
    time = c(0, 1, 2, 0, 1, 4),
    t_end = c(3, 3, 3, 4, 4, 4)
)
networks <- data.frame(
    trial = c(1, 1, 1, 2, 2, 2),
    from = c("A", "A", "B", "D", "D", "E"),
    to = c("B", "C", "C", "E", "F", "F"),
    kin = c(1, 0, 1, 0, 1, 1),
    inverse_distance = c(0, 1, .5, .25, .1, 0)
)
ILV_c <- data.frame(
    id = LETTERS[1:6],
    age = c(-1, -2, 0, 1, 2, 3), # continuous variables should be normalized
    sex = c(0, 1, 1, 0, 1, 0), # Factor ILVs must be input as numeric
    weight = c(0.5, .25, .3, 0, -.2, -.4)
)
data_list <- import_user_STb(
    event_data = event_data,
    networks = networks,
    ILV_c = ILV_c,
    ILVi = c("age"), # Use only 'age' for asocial rate
    ILVs = c("sex"), # Use only 'sex' for social rate
    ILVm = c("weight") # Use weight for multiplicative effect on both
)
# creates full specification of cTADA model, no varying effects and default priors.
model <- generate_STb_model(data_list)
# estimate varying effects by ID for intrinsic and social rates.
model <- generate_STb_model(data_list, veff_ID = c("lambda_0", "s"))
# creates OADA specification
model <- generate_STb_model(data_list, data = "order")
# adjust priors
model <- generate_STb_model(data_list, priors = list(
    log_lambda0 = "normal(-2, 3)",
    log_sprime = "uniform(-7, 3)"
))
# quickly inspect model code
cat(model)