## ----include = FALSE---------------------------------------------------------- knitr::opts_chunk$set(collapse = TRUE, comment = "#>") ## ----setup-------------------------------------------------------------------- library(fabricatr) set.seed(343) ## ----eval = FALSE------------------------------------------------------------- # # install.packages("remotes") # remotes::install_github("DeclareDesign/fabricatr@rewrite", build_vignettes = TRUE) ## ----eval = FALSE------------------------------------------------------------- # library(fabricatr) # vignette("getting-started") # a first tour, for someone new to the package # vignette("fabricatr2.0") # this document ## ----------------------------------------------------------------------------- fabricate(N = 6, U = rnorm(N), X = rbinom(N, 1, 0.5), Y = U + 0.5 * X) ## ----------------------------------------------------------------------------- fabricate( villages = add_level(N = 3, v_income = rnorm(N)), citizens = add_level(N = 2, income = v_income + rnorm(N)) ) ## ----------------------------------------------------------------------------- fabricate( villages = add_level(N = 3, v_income = rnorm(N)), citizens = nest_level(N = 2, income = v_income + rnorm(N)) ) ## ----------------------------------------------------------------------------- fabricate( villages = add_level(N = 3), citizens = nest_level(N = 2, rows_at_this_level = N) ) ## ----------------------------------------------------------------------------- fabricate( villages = add_level(N = 3, v = rnorm(N)), citizens = add_level(N = c(1, 2, 3), y = v + rnorm(N)) ) ## ----------------------------------------------------------------------------- fabricate(data = data.frame(x = 1:5), y = x ^ 2) ## ----------------------------------------------------------------------------- fabricate( N = 5, x = rnorm(N), binary = draw_binary(latent = x, link = "logit"), counts = draw_count(mean = 3, N = N), likert = draw_likert(x, min = -3, max = 3, bins = 5), cat = draw_categorical(prob = c(0.2, 0.5, 0.3), N = N) ) ## ----------------------------------------------------------------------------- fabricate( clusters = add_level(N = 4), units = add_level(N = 3, y = draw_normal_icc(clusters = clusters, ICC = 0.4)) ) ## ----------------------------------------------------------------------------- po <- fabricate(N = 6, U = rnorm(N), potential_outcomes(Y ~ 0.5 * Z + U)) fabricate(data = po, Z = rbinom(N, 1, 0.5), Y = reveal_outcomes(Y ~ Z)) ## ----------------------------------------------------------------------------- fabricate( N = 4, U = rnorm(N), potential_outcomes(Y ~ 0.3 * Z1 + 0.5 * Z2 + U, conditions = list(Z1 = 0:1, Z2 = 0:1)) ) ## ----------------------------------------------------------------------------- dat <- fabricate( clusters = add_level(N = 4, g = rnorm(N)), units = add_level(N = 3, y = rnorm(N)) ) resample_data(dat, N = c(clusters = 2, units = 2)) resample_data(dat, N = c(clusters = ALL, units = 2)) ## ----------------------------------------------------------------------------- score <- rnorm(200, mean = 75, sd = 10) offers <- correlate(draw_count, mean = 3, given = score, rho = 0.6) cor(score, offers, method = "spearman") ## ----------------------------------------------------------------------------- fabricate( countries = add_level(N = 3, gdp = runif(N), nest = FALSE) ) ## ----------------------------------------------------------------------------- fabricate( countries = declare_level(N = 3, gdp = runif(N, 1, 10)), years = declare_level(N = 2, shock = runif(N, 0, 1)), obs = cross_levels(.by = c("countries", "years"), Y = gdp + shock) ) ## ----------------------------------------------------------------------------- students <- fabricate( primary = declare_level(N = 20, p_quality = runif(N, 1, 10)), secondary = declare_level(N = 15, s_quality = runif(N, 1, 10)), students = link_levels(N = 2000, .by = c("primary", "secondary"), rho = 0.8, score = p_quality + s_quality + rnorm(N)) ) cor(as.numeric(students$primary), as.numeric(students$secondary), method = "spearman") ## ----------------------------------------------------------------------------- fabricate( N = 12, cluster = rep(1:3, each = 4), Y = rnorm(N), modify_level(cluster_mean = mean(Y), .by = "cluster") ) ## ----------------------------------------------------------------------------- fabricate( N = 12, cluster = rep(1:3, each = 4), Y = rnorm(N), modify_level(cluster_mean = mean(Y), by = "cluster") ) ## ----------------------------------------------------------------------------- fabricate( regions = add_level(N = 3, a = 1:3), cities = add_level(N = 2, b = rnorm(N)), regions = modify_level(z = rnorm(N), a2 = a * 2) ) ## ----------------------------------------------------------------------------- set.seed(1) likert <- fabricate( N = 200, U = rnorm(N), potential_outcomes(Y ~ draw_ordered(0.6 * Z + U, breaks = c(-1, 1), labels = c("lo", "mid", "hi"))) ) revealed <- fabricate(data = likert, Z = rbinom(200, 1, 0.5), Yobs = reveal_outcomes(Y ~ Z)) levels(revealed$Yobs) ## ----------------------------------------------------------------------------- fabricate( clusters = add_level(N = 12), units = add_level(N = 2) ) ## ----------------------------------------------------------------------------- fabricate(N = 3, Y = rnorm(N), ID_label = "respondent") fabricate(N = 3, Y = rnorm(N), ID_label = NA) ## ----------------------------------------------------------------------------- y <- draw_normal_icc(clusters = rep(1:10, each = 10), ICC = 0.4) y <- (y - mean(y)) * 2 / sd(y) + mean(y) sd(y) ## ----------------------------------------------------------------------------- cl <- rep(1:20, each = 10) sd(draw_normal_icc(clusters = cl, total_sd = 3, sd_between = 2)) ## ----------------------------------------------------------------------------- set.seed(7) reference <- runif(6) set.seed(7) fabricate(data = data.frame(u = 1:6), Z = runif(6))$Z reference ## ----------------------------------------------------------------------------- fabricate(N = 3, n_obs = N, Y = rnorm(N)) ## ----eval = FALSE------------------------------------------------------------- # # nest = FALSE -> declare_level() # # join_using( -> .by = c("level1", "level2"), with rho = beside it # # modify_level(... by = -> .by = # # break_labels|category_labels -> labels = # # fabricate(, -> fabricate(N = , # # draw_*(prob|mean = ..., link = ) -> draw_*(latent = ..., link = ) ## ----------------------------------------------------------------------------- individuals <- data.frame(individuals = c("ann", "bob", "cyd"), ind_shock = c(-0.4, 0.1, 0.8)) periods <- data.frame(year = 2020:2022, period_shock = c(0.2, -0.1, 0.3)) fabricate( individuals = import_level(individuals), period = import_level(periods, .id = "year"), obs = cross_levels(.by = c("individuals", "period"), Y = ind_shock + period_shock + rnorm(N)) ) ## ----------------------------------------------------------------------------- fabricate( villages = import_level(data.frame(villages = c("v1", "v2"), v_income = c(10, 12))), citizens = nest_level(N = 3, income = v_income + rnorm(N)) ) ## ----------------------------------------------------------------------------- fabricate( villages = add_level(N = 3, wealth = rnorm(n())), citizens = nest_level(N = 2, income = wealth + rnorm(n())), villages = modify_level(n_villages = n()) ) ## ----------------------------------------------------------------------------- fabricate( N = 12, cluster = rep(1:3, each = 4), Y = rnorm(N), modify_level(cluster_sd = sd(Y), .by = "cluster") ) ## ----------------------------------------------------------------------------- fabricate(N = 5, x = rnorm(N), l = draw_likert(x, breaks = c(-1, 0, 1))) ## ----------------------------------------------------------------------------- fabricate(N = 6, x = rnorm(N), visits = draw_count(latent = x, link = "log")) ## ----------------------------------------------------------------------------- counts <- fabricate( N = 10000, poisson = draw_count(mean = 3, N = N), overdispersed = draw_count(mean = 3, N = N, dispersion = 0.5) ) sapply(counts[c("poisson", "overdispersed")], function(y) round(c(mean = mean(y), var = var(y)), 2)) ## ----------------------------------------------------------------------------- x <- rnorm(200) y <- correlate(rnorm, mean = 0, sd = 1, given = x, rho = -0.5) cor(x, y, method = "spearman") ## ----------------------------------------------------------------------------- panel <- fabricate( units = declare_level(N = 100, unit_effect = rnorm(N)), periods = declare_level(N = 10), obs = cross_levels( .by = c("units", "periods"), e = draw_normal_ar(clusters = units, time = periods, rho = 0.8), Y = unit_effect + e, voted = draw_binary(latent = Y, link = "probit"), contacts = draw_count(mean = 2, quantile_y = pnorm(e)) ) ) head(panel)