This function allows the user to create data structures that are paneled or cross-classified: where one level of observation draws simultaneously from two or many source levels. Common examples of panels include country-year data which have country-level and year-level characteristics.
cross_levels(by = NULL, ...)
link_levels(N = NULL, by = NULL, ...)
The result of a call to join_using()
which specifies how
the cross-classified data will be created
A variable or series of variables to add to the resulting data frame after the cross-classified data is created.
The number of observations in the resulting data frame.
If N
is NULL or not provided, the join_using will be an "outer product" --
merging each row of each provided data frame with each other data frame to
make a full panel.
data.frame
By specifying the appropriate arguments in join_using()
within the
function call, it is possible to induce correlation in cross-classified data.
# Generate full panel data
panel <- fabricate(
countries = add_level(N = 20, country_shock = runif(N, 1, 10)),
years = add_level(N = 20, year_shock = runif(N, 1, 10), nest=FALSE),
obs = cross_levels(by = join_using(countries, years), GDP_it = country_shock + year_shock)
)
# Include an "N" argument to allow for cross-classified
# data.
students <- fabricate(
primary_school = add_level(N = 20, ps_quality = runif(N, 1, 10)),
secondary_school = add_level(N = 15, ss_quality = runif(N, 1, 10), nest=FALSE),
students = link_levels(N = 500, by = join_using(primary_school, secondary_school))
)
head(students)
#> primary_school ps_quality secondary_school ss_quality students
#> 1 08 3.884114 09 6.333213 001
#> 2 16 9.558358 04 5.756786 002
#> 3 11 9.306921 07 8.481171 003
#> 4 12 8.084570 13 2.766336 004
#> 5 19 4.492247 13 2.766336 005
#> 6 02 6.818796 05 2.050731 006
# Induce a correlation structure in cross-classified data by providing
# rho.
students <- fabricate(
primary_school = add_level(N = 20, ps_quality = runif(N, 1, 10)),
secondary_school = add_level(N = 15, ss_quality = runif(N, 1, 10), nest=FALSE),
students = link_levels(N = 500, by = join_using(ps_quality, ss_quality, rho = 0.5))
)
cor(students$ps_quality, students$ss_quality)
#> [1] 0.4057642