context("Continuous POs") test_that("you can do continuous POs", { my_population <- declare_model( N = 100, income = rnorm(N), age = sample(18:95, N, replace = T) ) conditions <- seq(0, 1, by = .1) my_potential_outcomes <- declare_potential_outcomes( formula = Y ~ .25 * Z + .01 * age * Z, conditions = conditions ) my_assignment <- declare_assignment(Z = complete_ra(N = N, conditions = conditions)) my_measurement <- declare_measurement(Y = reveal_outcomes(Y ~ Z)) my_design <- my_population + my_potential_outcomes + my_assignment + my_measurement df <- head(draw_data(my_design)) expect_length(colnames(df) %i% paste("Y", "Z", conditions, sep = "_"), 11) }) test_that("Hooke's law", { # Length of spring = resting length + stiffness * Force # Length is cm # Force is g # stiffness is cm/g # Variablity in manufacturing pop <- declare_model(springs = add_level( N = 100, resting = rnorm(N, 10, .1), stiffness = rnorm(N, 1, .05) )) potential_outcome_f <- function(resting, stiffness, force) { resting + stiffness * force } inquiry <- declare_inquiry( `(Intercept)` = mean(potential_outcome_f(resting, stiffness, 0)), stiffness = mean(potential_outcome_f(resting, stiffness, 1) - potential_outcome_f(resting, stiffness, 0)), term = TRUE ) # 30 is magic sampling <- declare_sampling(S = complete_rs(N, n = 30)) # We don't have a 1g weight, only 5, 10, 25, 50, 100 # randomly put a combo of those on the spring w <- c(0, 5, 10, 25, 50, 100) assignment <- declare_assignment( handler = fabricate, force = replicate(N, sum(sample( w, sample(length(w), 1) ))) ) # 1mm of measurment error reveal <- declare_reveal( handler = fabricate, length = potential_outcome_f(resting, stiffness, force) + rnorm(N, sd = .1) ) estimator <- declare_estimator(length ~ force, .method = lm, term = TRUE) design <- pop + inquiry + sampling + assignment + reveal + estimator df <- draw_data(design) # Not all forces are realized expect_lt(length(unique(df$force)), sum(choose(length(w), seq_along(w)))) # No PO columns created in df expect_false(any(grep("length_force_", names(df)))) })