# $Id: design.rnc,v 1.133 2003/12/12 14:16:43 peter Exp $ # # External Representation of Designs # # Version: 1.1 # # Copyright (c) 2003, Peter Cameron, Peter Dobcsanyi, JP Morgan, # Leonard Soicher # # This document is the verbatim copy of the Appendix "DESIGN.RNC" # of the article "The External Representation of Block Designs" # by the copyright holders. # # It is provided here as a separate file for direct computer use. # # Permission is granted to copy, distribute and/or modify this document # under the terms of the GNU Free Documentation License, Version 1.2 or # any later version published by the Free Software Foundation; with the # Invariant Section DESIGN.RNC, no Front-Cover Texts, and no Back-Cover # Texts. A copy of the license is included in the Appendix entitled # "GNU Free Documentation License". # # This document and the information contained herein is provided on an # ``AS IS'' basis and the Authors DISCLAIM ALL WARRANTIES, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF # THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED # WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. # # Please send comments, questions, bug reports to: # # extrep@designtheory.org # default namespace dtrs = "http://designtheory.org/xml-namespace" datatypes xsd = "http://www.w3.org/2001/XMLSchema-datatypes" ### list of designs ### start = list_of_designs # root of every ext-rep document list_of_designs = element list_of_designs { attribute dtrs_protocol { "1.1" } , attribute design_type { "block_design" | "latin_square" } , attribute pairwise_nonisomorphic { "true" | "false" | "unknown" } , attribute no_designs { xsd:nonNegativeInteger | "unknown" } ? , attribute precision { xsd:positiveInteger } ? , list_definition ? , # no designs should be repeated. ( block_design | latin_square ) * , info ? } # query language components # (place holder only, to be defined later) list_definition = element list_definition { list_invariants , no_pairwise_nonisomorphic } list_invariants = element list_invariants { empty } no_pairwise_nonisomorphic = element no_pairwise_nonisomorphic { empty } ### common components for all type of designs # elementary objects unknown = element unknown { empty } not_applicable = element not_applicable { empty } z = element z { xsd:integer } q = element q { text } # must be in the format a/b d = element d { xsd:decimal } # functions on indices function_on_indices = element function_on_indices { attribute domain { "points" | "blocks" } , attribute n { xsd:nonNegativeInteger } , attribute ordered { "true" | "unknown" } , attribute image_cardinality { xsd:positiveInteger } ? , attribute precision { xsd:positiveInteger } ? , attribute title { text } ? , ( map + | blank ) } function_on_ksubsets_of_indices = element function_on_ksubsets_of_indices { attribute domain_base { "points" | "blocks" } , attribute n { xsd:nonNegativeInteger } , attribute k { xsd:nonNegativeInteger } , attribute ordered { "true" | "unknown" } , attribute image_cardinality { xsd:positiveInteger } ? , attribute precision { xsd:positiveInteger } ? , attribute title { text } ? , ( map + | blank ) } # if <blank> is given instead of <map>-s, 'image_cardinality' must be specified map = element map { ( preimage | preimage_cardinality | blank ) , element image { z | d | q | not_applicable } } preimage = element preimage { z + | element ksubset { z+ } + | entire_domain } preimage_cardinality = element preimage_cardinality { z } blank = element blank { empty } entire_domain = element entire_domain { empty } # permutation groups and their properties permutation_group = element permutation_group { attribute degree { xsd:positiveInteger } , attribute order { xsd:positiveInteger } , attribute domain { "points" }, generators , permutation_group_properties? } permutation_group_properties = element permutation_group_properties { element primitive { attribute flag { "true" | "false" } } ? , element generously_transitive { attribute flag { "true" | "false" } } ? , element multiplicity_free { attribute flag { "true" | "false" } } ? , element stratifiable { attribute flag { "true" | "false" } } ? , element no_orbits { attribute value { xsd:positiveInteger } } ? , element degree_transitivity { attribute value { xsd:nonNegativeInteger } } ? , element rank { attribute value { xsd:positiveInteger } } ? , cycle_type_representatives ? } cycle_type_representatives = element cycle_type_representatives { cycle_type_representative + } cycle_type_representative = element cycle_type_representative { permutation , element cycle_type { attribute ordered { "true" } , z+ } , element no_having_cycle_type { z } ? } generators = element generators { permutation * } permutation = element permutation { z+ } # matrix matrix = element matrix { attribute no_rows { xsd:positiveInteger } , attribute no_columns { xsd:positiveInteger } , attribute title { text } ? , row + } row = element row { ( z | q | d )+ } # <info> commonly used for all type of designs info = element info { element creator { element person { text } * , element software { text } * } + , element reference { text } * , element note { text } * } ### block design ### block_design = element block_design { attribute id { xsd:ID } , attribute v { xsd:positiveInteger } , attribute b { xsd:positiveInteger } ? , attribute precision { xsd:positiveInteger } ? , blocks , point_labels ? , indicators ? , combinatorial_properties ? , block_design_automorphism_group ? , resolutions ? , statistical_properties ? , alternative_representations ? , info ? } blocks = element blocks { attribute ordered { "true" } , block+ } block = element block { z+ } point_labels = element point_labels { z+ | element label { text } + } indicators = element indicators { element repeated_blocks { attribute flag { "true" | "false" } } ? & element resolvable { attribute flag { "true" | "false" } } ? & element affine_resolvable { attribute flag { "true" | "false" }, attribute mu { xsd:positiveInteger } ? } ? & element equireplicate { attribute flag { "true" | "false" } , attribute r { xsd:positiveInteger } ? } ? & element constant_blocksize { attribute flag { "true" | "false" } , attribute k { xsd:positiveInteger } ? } ? & element t_design { attribute flag { "true" | "false" } , attribute maximum_t { xsd:positiveInteger } ? } ? & element connected { attribute flag { "true" | "false" } , attribute no_components { xsd:positiveInteger } ? } ? & element pairwise_balanced { attribute flag { "true" | "false" } , attribute lambda { xsd:positiveInteger } ? } ? & element variance_balanced { attribute flag { "true" | "false" } } ? & element efficiency_balanced { attribute flag { "true" | "false" } } ? & element cyclic { attribute flag { "true" | "false" } } ? & element one_rotational { attribute flag { "true" | "false" } } ? } combinatorial_properties = element combinatorial_properties { point_concurrences ? , block_concurrences ? , t_design_properties ? , alpha_resolvable ? , t_wise_balanced ? } block_concurrences = element block_concurrences { function_on_ksubsets_of_indices + # with domain_base="blocks" } point_concurrences = element point_concurrences { function_on_ksubsets_of_indices + # with domain_base="points" } t_design_properties = element t_design_properties { element parameters { attribute t { xsd:positiveInteger } , attribute v { xsd:positiveInteger } , attribute b { xsd:positiveInteger } , attribute r { xsd:positiveInteger } , attribute k { xsd:positiveInteger } , attribute lambda { xsd:positiveInteger } } ? & element square { attribute flag { "true" | "false" } } ? & element projective_plane { attribute flag { "true" | "false" } } ? & element affine_plane { attribute flag { "true" | "false" } } ? & element steiner_system { attribute flag { "true" | "false" } , attribute t { xsd:positiveInteger } ? } ? & element steiner_triple_system { attribute flag { "true" | "false" } } ? } index_flag = element index_flag { attribute index { xsd:nonNegativeInteger }, attribute flag { "true" | "false" | "unknown" } } alpha_resolvable = element alpha_resolvable { index_flag + } t_wise_balanced = element t_wise_balanced { index_flag + } block_design_automorphism_group = element automorphism_group { permutation_group, # 'domain' must be "points" block_design_automorphism_group_properties ? } block_design_automorphism_group_properties = element automorphism_group_properties { element block_primitive { attribute flag { "true" | "false" | "not_applicable" } } ? , element no_block_orbits { attribute value { xsd:positiveInteger | "not_applicable" } } ? , element degree_block_transitivity { attribute value { xsd:nonNegativeInteger | "not_applicable" } } ? } resolutions = element resolutions { attribute pairwise_nonisomorphic { "true" | "false" | "unknown" } , attribute all_classes_represented { "true" | "false" | "unknown" } , resolution + } resolution = element resolution { function_on_indices, # with domain="blocks" resolution_automorphism_group ? } resolution_automorphism_group = element automorphism_group { permutation_group, # 'domain' must be "points" resolution_automorphism_group_properties? } resolution_automorphism_group_properties = element automorphism_group_properties { empty } # to be defined later statistical_properties = element statistical_properties { attribute precision { xsd:positiveInteger } , canonical_variances ? , pairwise_variances ? , optimality_criteria ? , other_ordering_criteria ? , canonical_efficiency_factors ? , functions_of_efficiency_factors ? , robustness_properties ? # all optional elements omitted if number of treatments=1 } canonical_variances = element canonical_variances { attribute no_distinct { xsd:positiveInteger | "unknown" | "not_applicable" } , # no_distinct = "not_applicable" for disconnected designs attribute ordered { "true" | "unknown" } , element value { attribute multiplicity { xsd:positiveInteger | "not_applicable" } , ( d | q | z | blank | not_applicable ) } + # for a design with u connected components, there must be u-1 values # of "not_applicable" # if present as a value, "not_applicable" is largest if values ordered } pairwise_variances = element pairwise_variances { function_on_ksubsets_of_indices # with domain_base="points" and k="2" } optimality_criteria = element optimality_criteria { # These are functions either of # (i) the canonical variances z_1>=z_2>=...>=z_{v-1}, which are the # inverses of the v-1 largest eigenvalues of the information matrix C # (the inverse of zero being defined as infinity) or # (ii) the v(v-1)/2 pairwise variances v_{ij}=d_{ii}+d_{jj}-2d_{ij} # for 1<=i<j<=v where d_{ij} is the general element of C^+ (the # Moore-Penrose inverse of C) # In the connected case, the canonical variances are exactly the # nonzero eigenvalues of C^+; in the general case, they are the # nonzero eigenvalues of C^+ in addition to u-1 values of infinity, # where u is the number of connected components # Smaller values correspond to "better" designs # Efficiencies (see absolute_efficiency) are stored when an optimal # design is known WITHIN THE BINARY CLASS, in which case the value # is relative to the best binary design. It is thus possible that # a nonbinary design could be "superefficient", ie have efficiency # larger than 1. # # value = actual numerical value of the function for this design # absolute_efficiency = (value for best in binary class)/value # calculated_efficiency = (value for best in selected list of designs)/value # all efficiencies for a disconnected design are zero element phi_0 { # sum of log(z_i) element value { d | q | z | not_applicable} , element absolute_efficiency { d | q | z | unknown } ? , element calculated_efficiency { d | q | z | unknown } ? } ? , element phi_1 { # mean of the z_i element value { d | q | z | not_applicable} , element absolute_efficiency { d | q | z | unknown } ? , element calculated_efficiency { d | q | z | unknown } ? } ? , element phi_2 { # mean of squared z_i element value { d | q | z | not_applicable} , element absolute_efficiency { d | q | z | unknown } ? , element calculated_efficiency { d | q | z | unknown } ? } ? , element maximum_pairwise_variances { # largest of the v_{ij} element value { d | q | z | not_applicable} , element absolute_efficiency { d | q | z | unknown } ? , element calculated_efficiency { d | q | z | unknown } ? } ? , element E_criteria { # cumulative sums of the z_i # E_1=z_1 is often called "the" E-value # E_2=z_1+z_2 # E_3=z_1+z_2+z_3 # etc # E_{v-1}=(v-1)*phi_1 # Maximize all v-1 E-values <=> Schur-optimal E_value + } ? } E_value = element E_value { attribute index { xsd:positiveInteger } , # index must be in {1,...,v-1} element value { d | q | z | not_applicable} , element absolute_efficiency { d | q | z | unknown } ? , element calculated_efficiency { d | q | z | unknown } ? } other_ordering_criteria = element other_ordering_criteria { # these are criteria that order designs within the reference # universe but which do not meet our definition for # an "optimality" criterion # may be of interest in conjunction with formal optimality criteria # in a multi-criterion screening of designs # absolute_comparisons and calculated_comparisons are handled just # as the corresponding efficiencies for optimality criteria (and in # particular are zero for every disconnected design); because they do # not measure relative size of a variance, we use a different terminology # all disconnected designs are ordered "last" element trace_of_square_of_C { # sum of z_i^{-2} = trace of C^2 # this is sometimes called the "S" criterion and is the second # stage of the "M-S" optimality search (first stage is to # restrict to binarity, which maximizes trace) element value { d | q | z | not_applicable} , element absolute_comparison { d | q | z | unknown } ? , element calculated_comparison { d | q | z | unknown } ? } ? , element max_min_ratio_canonical_variances { # z_1/z_{v-1} element value { d | q | z | not_applicable} , element absolute_comparison { d | q | z | unknown } ? , element calculated_comparison { d | q | z | unknown } ? } ? , element max_min_ratio_pairwise_variances { # max(v_{ij})/min(v_{ij}) element value { d | q | z | not_applicable} , element absolute_comparison { d | q | z | unknown } ? , element calculated_comparison { d | q | z | unknown } ? } ? , element no_distinct_canonical_variances { # number of distinct values among the z_{i} element value { z | unknown | not_applicable } , element absolute_comparison { d | q | z | unknown } ? , element calculated_comparison { d | q | z | unknown } ? } ? , element no_distinct_pairwise_variances { # number of distinct values among the v_{ij} element value { z | unknown | not_applicable } , element absolute_comparison { d | q | z | unknown } ? , element calculated_comparison { d | q | z | unknown } ? } ? } ? canonical_efficiency_factors = element canonical_efficiency_factors { attribute no_distinct { xsd:positiveInteger | "unknown" | "not_applicable" } , # no_distinct = "not_applicable" for disconnected designs attribute ordered { "true" | "unknown" } , element value { attribute multiplicity { xsd:positiveInteger | "not_applicable" } , ( d | q | z | blank ) } + # for a design with u connected components, there must be u-1 values # of 0 } functions_of_efficiency_factors = element functions_of_efficiency_factors { # These are functions of the canonical efficiency factors # e_1 <= e_2 <= ... <= e_{v-1} # that "good" designs will maximize over the class of all designs # with the same blocksize distribution and fixed replication numbers # NOTE WELL: The reference universe for these functions is restricted # to designs with fixed v, block size distribution, AND replication # numbers! element harmonic_mean { attribute alias { "A" } , element value { d | q | z } } ? , element geometric_mean { attribute alias {"D"} , element value { d | q | z } } ? , element minimum { attribute alias { "E" } , element value { d | q | z } } ? } robustness_properties = element robustness_properties { # for connected designs only robust_connected_plots ? , robust_connected_blocks ? , robust_efficiencies_plots ? , robust_efficiencies_blocks ? } ? robust_connected_plots = element robust_connected_plots { # This element makes the statement # "The design is connected under all possible ways in which # number_lost plots can be removed" # If the reported value of number_lost is known to be the largest integer # for which this statement is true then is_max takes the value "true" # and otherwise takes the value "unknown." attribute number_lost { xsd:nonNegativeInteger } , attribute is_max { "true" | "unknown" } } robust_connected_blocks = element robust_connected_blocks { # This element makes the statement # "The design is connected under all possible ways in which # number_lost blocks can be removed" # If the reported value of number_lost is known to be the largest integer # for which this statement is true then is_max takes the value "true" # and otherwise takes the value ""unknown"." attribute number_lost { xsd:nonNegativeInteger } , attribute is_max { "true" | "unknown" } } robust_efficiencies_plots = element robust_efficiencies_plots { attribute precision { xsd:positiveInteger } , robustness_efficiency_values + } robust_efficiencies_blocks = element robust_efficiencies_blocks { attribute precision { xsd:positiveInteger } , robustness_efficiency_values + } robustness_efficiency_values = element robustness_efficiency_values { # n=0 not allowed for number_lost # self_efficiency = (value of the criterion for the full design)/ # (value for the reduced design) # absolute_efficiency = (value for best in reduced binary class)/ # (value for the reduced design) # calculated_efficiency = (value for best in selected list of designs)/ # (value for the reduced design) attribute number_lost { xsd:positiveInteger } , attribute loss_measure { "average" | "worst" } , element phi_0 { # sum of log(z_i) element self_efficiency { d | q | z } , element absolute_efficiency { d | q | z | unknown } ? , element calculated_efficiency { d | q | z | unknown } ? } ? , element phi_1 { # mean of the z_i element self_efficiency { d | q | z } , element absolute_efficiency { d | q | z | unknown } ? , element calculated_efficiency { d | q | z | unknown } ? } ? , element maximum_pairwise_variances { # largest of the v_{ij} element self_efficiency { d | q | z } , element absolute_efficiency { d | q | z | unknown } ? , element calculated_efficiency { d | q | z | unknown } ? } ? , element E_1 { # E_1=z_1 is often called "the" E-value element self_efficiency { d | q | z } , element absolute_efficiency { d | q | z | unknown } ? , element calculated_efficiency { d | q | z | unknown } ? } ? } alternative_representations = element alternative_representations { incidence_matrix # ... to be extended as needed } incidence_matrix = element incidence_matrix { attribute shape { "points_by_blocks" } , matrix } # latin square # (place holder only, to be defined later) latin_square = element latin_square { empty } # vi: set syntax=rnc: # vi: set expandtab: