Declare the size and features of the population

declare_model(..., handler = fabricate, label = NULL)

Arguments

...

arguments to be captured, and later passed to the handler

handler

a tidy-in, tidy-out function

label

a string describing the step

Value

A function that returns a data.frame.

Examples


# Declare a single-level population with no covariates
declare_model(N = 100)
#> declare_model(N = 100)

# declare_model returns a function:

my_model <- declare_model(N = 100)
my_model()
#>      ID
#> 1   001
#> 2   002
#> 3   003
#> 4   004
#> 5   005
#> 6   006
#> 7   007
#> 8   008
#> 9   009
#> 10  010
#> 11  011
#> 12  012
#> 13  013
#> 14  014
#> 15  015
#> 16  016
#> 17  017
#> 18  018
#> 19  019
#> 20  020
#> 21  021
#> 22  022
#> 23  023
#> 24  024
#> 25  025
#> 26  026
#> 27  027
#> 28  028
#> 29  029
#> 30  030
#> 31  031
#> 32  032
#> 33  033
#> 34  034
#> 35  035
#> 36  036
#> 37  037
#> 38  038
#> 39  039
#> 40  040
#> 41  041
#> 42  042
#> 43  043
#> 44  044
#> 45  045
#> 46  046
#> 47  047
#> 48  048
#> 49  049
#> 50  050
#> 51  051
#> 52  052
#> 53  053
#> 54  054
#> 55  055
#> 56  056
#> 57  057
#> 58  058
#> 59  059
#> 60  060
#> 61  061
#> 62  062
#> 63  063
#> 64  064
#> 65  065
#> 66  066
#> 67  067
#> 68  068
#> 69  069
#> 70  070
#> 71  071
#> 72  072
#> 73  073
#> 74  074
#> 75  075
#> 76  076
#> 77  077
#> 78  078
#> 79  079
#> 80  080
#> 81  081
#> 82  082
#> 83  083
#> 84  084
#> 85  085
#> 86  086
#> 87  087
#> 88  088
#> 89  089
#> 90  090
#> 91  091
#> 92  092
#> 93  093
#> 94  094
#> 95  095
#> 96  096
#> 97  097
#> 98  098
#> 99  099
#> 100 100

# Declare a single-level population with two covariates
declare_model(
  N = 6,
  female = rbinom(n = N, 1, prob = 0.5),
  height_ft = rnorm(N, mean = 5.67 - 0.33 * female, sd = 0.25)
)
#> declare_model(N = 6, female = rbinom(n = N, 1, prob = 0.5), height_ft = rnorm(N, 
#>     mean = 5.67 - 0.33 * female, sd = 0.25))

# Declare a single-level population with potential outcomes
declare_model(
  N = 6, 
  U = rnorm(N),
  potential_outcomes(Y ~ Z + U))
#> declare_model(N = 6, U = rnorm(N), potential_outcomes(Y ~ Z + 
#>     U))


# Declare a single-level population with two sets of potential outcomes
declare_model(
  N = 6,
  U = rnorm(N),
  potential_outcomes(Y ~ Z1 + Z2 + U, 
                     conditions = list(Z1 = c(0, 1), Z2 = c(0, 1))))
#> declare_model(N = 6, U = rnorm(N), potential_outcomes(Y ~ Z1 + 
#>     Z2 + U, conditions = list(Z1 = c(0, 1), Z2 = c(0, 1))))




# Declare a population from existing data

declare_model(mtcars)
#> declare_model(mtcars)

# Resample from existing data

declare_model(N = 100, data = mtcars, handler = resample_data)
#> declare_model(N = 100, data = mtcars, handler = resample_data)


# Declare a two-level hierarchical population
# containing cities within regions and a
# pollution variable defined at the city level

declare_model(regions = add_level(N = 5),
              cities = add_level(N = 10, pollution = rnorm(N, mean = 5)))
#> declare_model(regions = add_level(N = 5), cities = add_level(N = 10, 
#>     pollution = rnorm(N, mean = 5)))

# Declare a population using a custom function

# the default handler is fabricatr::fabricate,
# but you can supply any function that returns a data.frame

my_model_function <- function(N) {
  data.frame(u = rnorm(N))
}

declare_model(N = 10, handler = my_model_function)
#> declare_model(N = 10, handler = my_model_function)