library(sets)
## Warning: package 'sets' was built under R version 4.1.2
variables <- set(bmi =
fuzzy_partition(varnames =
c(under = 9.25, fit = 21.75,
over = 27.5, obese = 35),
sd = 3.0), a1c =
fuzzy_partition(varnames =
c(l = 4, n = 5.25, h = 7),
FUN = fuzzy_cone, radius = 5),
rating =
fuzzy_partition(varnames =
c(DC = 10, ST = 5, PF = 1),
FUN = fuzzy_cone, radius = 5), bp =
fuzzy_partition(varnames =
c(norm = 0, pre = 10, hyp = 20,
shyp = 30), sd = 2.5)
)
rules <-
set(
fuzzy_rule(bmi %is% under || bmi %is%
obese || a1c %is% l,
rating %is% DC),
fuzzy_rule(bmi %is% over || a1c %is% n
|| bp %is% pre,
rating %is% ST),
fuzzy_rule(bmi %is% fit && a1c %is% n
&& bp %is% norm,
rating %is% PF)
)
system <- fuzzy_system(variables, rules)
print(system)
## A fuzzy system consisting of 4 variables and 3 rules.
##
## Variables:
##
## a1c(l, n, h)
## rating(DC, ST, PF)
## bmi(under, fit, over, obese)
## bp(norm, pre, hyp, shyp)
##
## Rules:
##
## bmi %is% fit && a1c %is% n && bp %is% norm => rating %is% PF
## bmi %is% over || a1c %is% n || bp %is% pre => rating %is% ST
## bmi %is% under || bmi %is% obese || a1c %is% l => rating %is% DC
plot(system)

fi <- fuzzy_inference(system, list(bmi = 29, a1c=5, bp=20))
plot(fi)

gset_defuzzify(fi, "centroid")
## [1] 7.445238