An infeasible rule set cannot be satisfied by any data because of internal
contradictions: the combination of the rules make it inconsistent.
This function checks whether the record-wise linear,
categorical and conditional rules in a rule set are consistent.
Note that is it wise to also check detect_contradicting_if_rules()
:
conditional If-rules
may not be strictly inconsistent, but can be semantically inconsistent.
is_infeasible(x, ..., verbose = interactive())
TRUE or FALSE
Other feasibility:
detect_boundary_cat()
,
detect_boundary_num()
,
detect_contradicting_if_rules()
,
detect_infeasible_rules()
,
is_contradicted_by()
,
make_feasible()
rules <- validator( x > 0)
is_infeasible(rules)
#> [1] FALSE
# infeasible system!
rules <- validator( rule1 = x > 0
, rule2 = x < 0
)
is_infeasible(rules)
#> [1] TRUE
detect_infeasible_rules(rules, verbose=TRUE)
#> Found:
#> rule1: x > 0
#> [1] "rule1"
# but we want to keep rule1, so specify that it has an Inf weight
detect_infeasible_rules(rules, weight=c(rule1=Inf), verbose=TRUE)
#> Found:
#> rule2: x < 0
#> [1] "rule2"
# detect and remove
make_feasible(rules, weight=c(rule1=Inf), verbose = TRUE)
#> Found:
#> rule2: x < 0
#> Dropping rule(s): "rule2"
#> Object of class 'validator' with 1 elements:
#> rule1: x > 0
#> Rules are evaluated using locally defined options
# find out the conflict with rule2
is_contradicted_by(rules, "rule2", verbose = TRUE)
#> Rule(s):
#> rule2: x < 0
#> contradicted by:
#> rule1: x > 0
#> [1] "rule1"