#################
# TEST RESPONSE #
#################
bad_y = list(
list( ~ 1), # No y
list((1|id) ~ 1), # y cannot be varying
list(1 ~ 1), # 1 is not y
list(y ~ 1, # Two y
a ~ 1 ~ 1),
list(y ~ 1, # Intercept y
1 ~ 1 ~ 1),
list(bad_y_char ~ 1), # Character y
list(bad_y_factor ~ 1) # Factor y
)
test_bad(bad_y)
good_y_essential = list(
list(y ~ 1, # Explicit and implicit y and cp
y ~ 1 ~ 1,
rel(1) + (1|id) ~ rel(1) + x,
~ 1)
)
good_y_extensive = list(
list(y ~ 1), # Regular
list(ok_y ~ 1) # decimal y
)
test_good(good_y_essential, good_y_extensive)
################
# TEST WEIGHTS #
################
bad_weights = list(
list(y + weights(weights_ok) ~ 1), # weights added
list(weights(y) ~ 1), # just wrong :-)
list(y | weights_ok ~ 1), # Has to be weights(weights_ok)
list(y | weights(weights_bad) ~ 1), # Bad weights
list(y | weights(weights_ok) ~ 1,
y | weights(weights_bad) ~ 1 ~ 1) # Different weights
)
test_bad(bad_weights)
good_weights = list(
list(y | weights(weights_ok) ~ 1), # Regular
list(y | weights(weights_ok) ~ 1,
~ 1 + x + I(x^2),
1 + (1|id) ~ rel(1)) # With multiple segments and functions and varying
)
test_good(good_weights)
###################
# TEST INTERCEPTS #
###################
bad_intercepts = list(
list(y ~ rel(0)), # rel(0) not supported
list(y ~ rel(1)), # Nothing to be relative to here
list(y ~ 2), # 2 not supported
list(y ~ 1,
~ rel(0)) # rel(0) not supported
)
test_bad(bad_intercepts)
good_intercepts = list(
#list(y ~ 0), # would be nice if it worked, but mcmc.list does not behave well with just one variable
list(ok_y ~ 1), # y can be called whatever
list(y ~ 0, # Multiple segments
~ 1,
~ 0,
~ 1),
list(y ~ 1, # Chained relative intercepts
~ rel(1),
~ rel(1))
)
test_good(good_intercepts)
###############
# TEST SLOPES #
###############
bad_slopes = list(
list(y ~ rel(x)), # Nothing to be relative to
list(y ~ x + y), # Two slopes
list(y ~ x, # Two slopes
~ y),
list(y ~ 1, # Relative slope after no slope
~ rel(x)),
list(y ~ bad_x_char), # not numeric x
list(y ~ bad_x_factor), # not numeric x
list(y ~ 1,
~ log(x)), # should fail explicitly because negative x
list(y ~ 1,
~ sqrt(x)) # should fail explicitly because negative x
)
test_bad(bad_slopes)
good_slopes_essential = list(
list(y ~ 0 + x, # Multiple on/off
~ 0,
~ 1 + x),
list(y ~ 0 + x + I(x^2) + I(x^3), # Test "non-linear" x
~ 0 + exp(x) + abs(x),
~ 0 + sin(x) + cos(x) + tan(x))
)
good_slopes_extensive = list(
list(y ~ 0 + x), # Regular
list(y ~ x, # Chained relative slopes
~ 0 + rel(x),
~ rel(x)),
list(y ~ ok_x) # alternative x
)
test_good(good_slopes_essential, good_slopes_extensive, par_x = NULL)
######################
# TEST CHANGE POINTS #
######################
bad_cps = list(
list(y ~ x,
0 ~ 1), # Needs changepoint stuff
list(y ~ x,
q ~ 1), # Slope not allowed for changepoint
list(y ~ 1,
(goat|id) ~ 1), # No varying slope allowed
list(y ~ 1,
y ~ ~ 1), # Needs to be explicit if y is defined
list(y ~ 1,
rel(1) ~ 1), # Nothing to be relative to yet
list(y ~ 1,
1 + (1|bad_id) ~ 1) # decimal group
)
test_bad(bad_cps)
good_cps_essential = list(
list(y ~ 1, # Implicit cp
~ 1,
~ 0),
list(y ~ 0, # Varying
1 + (1|id) ~ 1),
list(y ~ 1,
1 + (1|id) ~ 1,
1 + (1|ok_id_integer) ~ 1, # multiple groups and alternative data
1 + (1|ok_id_factor) ~ 1) # alternative group data
)
good_cps_extensive = list(
list(y ~ 0 + x, # Regular cp
1 ~ 1),
list(y ~ 0, # Chained varying and relative cp
y ~ 1 ~ 1,
rel(1) + (1|id) ~ 0,
rel(1) + (1|id) ~ 0,
~ x),
list(y ~ 1,
(1|id) ~ 0) # Intercept is implicit. I don't like it, but OK.
)
test_good(good_cps_essential, good_cps_extensive)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.