FMANOVA()
: Computes a fuzzy multi-ways analysis of
variance (Mult-FANOVA) modelFuzzySTs::FMANOVA()
estimates a Mult-FANOVA model based
on the construction of linear regression models. For this model,
multiple factors can be introduced. This function can be computed by
\(3\) different methods
(distance
, exact
and
approximation
) as given in the description of the function
FuzzySTs::Fuzzy.variance()
. The descriptions of the three
procedures are given as follows:
distance
: By respect to a conveniently chosen
distance, the calculations can be done as seen in Berkachy R. and Donzé
L. R. (“Fuzzy one-way ANOVA using the signed distance method to
approximate the fuzzy product, In: Rencontres Francophones sur la
Logique Floue et ses Applications 2018. Ed. by Collectif LFA. Cépaduès
Editions, pp. 253–264. ISBN: 978-2-36493-677-5) for the univariate
one-way case using the signed distance. This method can be applied using
the function FuzzySTs::distance()
. The computed distances
used in the calculations of the sums of squares are seen as a
defuzzification of the obtained fuzzy numbers. The decision rule is done
by comparing the obtained test statistics with respect to the distances
to the quantiles of the bootstrapped distribution of the constructed
test statistic.
exact
: For the method denoted by exact
,
the functions FuzzySTs::Fuzzy.Difference()
and
FuzzySTs::Fuzzy.Square()
as numerical calculations of the
difference and the square of two fuzzy numbers, are used. In this case,
we practically preserve the fuzzy nature of the sums of square. Thus, no
defuzzification of these sums are directly performed. Fuzzy numbers
referring to the mean of the fuzzy treatment sums of squares \(\tilde{B}\) and the weighted mean of the
fuzzy residuals sums of squares denoted by \(\tilde{E}^{\star}\), are constructed in
order to make a decision. However, since overlapping between these fuzzy
numbers is often expected, then a defuzzification as a last step is
required. The decision rule for this test is based on the surfaces of
both fuzzy numbers \(\tilde{B}\) and
\(\tilde{E}^{\star}\). The contribution
of each fuzzy number to the total variation of fuzzy sums of squares is
afterwards given.
approximation
: For the third case,
i.e. approximation
, the function is defined exactly in the
same manner as the function by the exact
method. The
function FuzzySTs::Fuzzy.Difference()
is used for the
difference operation basically between trapezoidal or triangular fuzzy
numbers. However, the calculation of the fuzzy square is based on an
approximation for this case. The approximation used is the one given in
Approximation 4 of the function FuzzySTs::Fuzzy.variance()
.
In other terms, for the fuzzy product, we use the operator proposed by
the package FuzzyNumbers
. The decision rule is the same as
the one for the exact
procedure.
For the cases exact
and approximation
, we
have to highlight that the outcome related to each factor could be
printed at a time. No view of the overall set of factors can be exposed.
Thus, the index of the factor in the model should be entered by the
user.
From another side, we note that for the univariate case, a similar
function is constructed. It is denoted by
FuzzySTs::FANOVA()
, and could be applied using exactly the
same three methods previously described. For the case with the distance
method, the procedure is described in Berkachy R. and Donzé L. R.
(“Fuzzy one-way ANOVA using the signed distance method to
approximate the fuzzy product, In: Rencontres Francophones sur la
Logique Floue et ses Applications 2018. Ed. by Collectif LFA. Cépaduès
Editions, pp. 253–264. ISBN: 978-2-36493-677-5). For the cases with the
exact and approximation methods, the function
FuzzySTs::FANOVA()
returns fuzzy type decisions. Since the
defuzzification is needed in these cases, a function called
FuzzySTs::Defuzz.FANOVA()
is proposed. The distance to be
used in this case is set by default to the signed distance. Yet, several
metrics can be used for this calculation. The output of the function
FuzzySTs::Defuzz.FANOVA()
is the same as the
FuzzySTs::FANOVA()
one but with the defuzzified results. We
add that the bootstrap technique is used in such procedures to estimate
the distributions of the corresponding statistics. A final remark is
that for this function, the data set should be attached.
This function returns a list of all the arguments of the function, the total, treatment and residuals sums of squares, the coefficients of the model, the test statistics with the corresponding p-values, and the decision made.
In the case of the Mult-FANOVA model computed using a given distance,
we also propose the function entitled
FuzzySTs::FMANOVA.summary()
which prints the summary of the
estimation of the corresponding Mult-FANOVA model, resulting from the
function FuzzySTs::FMANOVA()
. If the considered model
includes interaction terms, then the function
FuzzySTs::FMANOVA.interaction.summary()
can be used to
print the summary statistics related to these terms. We note that the
obtained output is very similar to the one given by the known
stats::aov()
and stats::lm()
functions of
R
. Thus, the elements of the result of a call of the
function FuzzySTs::FMANOVA()
is compatible with the class
of stats::lm()
functions, as instance with the functions
stats::terms()
, stats::fitted.values()
,
stats::residuals()
, stats::df.residuals()
etc.
For the one-way case, an analog function denoted by
FuzzySTs::FANOVA.summary()
is introduced as well, in order
to be compatible with the function FuzzySTs::FANOVA()
.
mat <- matrix(c(2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,3,4,4,3,1,2,5,4,4,3),ncol=3)
data <- data.frame(mat)
MF131 <- TrapezoidalFuzzyNumber(0,1,1,2)
MF132 <- TrapezoidalFuzzyNumber(1,2,2,3)
MF133 <- TrapezoidalFuzzyNumber(2,3,3,4)
MF134 <- TrapezoidalFuzzyNumber(3,4,4,5)
MF135 <- TrapezoidalFuzzyNumber(4,5,5,6)
PA13 <- c(1,2,3,4,5); mi <- 1; si <- 3
Yfuzz <- FUZZ(data,1,3,PA13)
attach(data)
formula <- X3 ~ X1 + X2
res <- FMANOVA(formula, data, Yfuzz, method = "distance", distance.type = "wabl")
FMANOVA.summary(res)
#> [[1]]
#> Df Sum Sq Mean Sq F value Pr(>F)
#> X1 1 0.10000 0.10000 0.07000 0.79896
#> X2 1 1.99982 1.99982 1.39984 0.27537
#>
#> [[2]]
#> [1] "Residual mean sum of squares:1.4286 on 7 degrees of freedom."
#>
#> [[3]]
#> [1] " Multiple R-squared: 17.35527 F-statistic: 0.73492 on 2 and 7 with p-value: 0.51319."
detach(data)
is.balanced()
: Verifies if a design is balancedFuzzySTs::is.balanced()
is used to verify if a
considered fitting model is balanced, i.e. if the number of observations
by factor levels is the same. It returns a logical decision
TRUE
or FALSE
, to indicate if a given design
is respectively balanced or not.
SEQ.ORDERING()
: Calculates the sequential sums of
squaresIf the design of the model is not balanced, such that
is.balanced = FALSE
, the ordering of the variables affects
the model. The function FuzzySTs::SEQ.ORDERING()
re-calculates then the fitting model but by taking into account the
sequential ordering of the factors. It calculates as well the
coefficients of the model, the predicted values and the residuals
according to the new model. We add that the coefficients of the model
are calculated by compliance to the least squares method. Finally note
that \(3\) versions of this function,
related to the \(3\) methods
(distance
, exact
and
approximation
), are proposed separately. These versions are
respectively called FuzzySTs::SEQ.ORDERING()
,
FuzzySTs::SEQ.ORDERING.EXACT()
and
FuzzySTs::SEQ.ORDERING.APPROXIMATION()
. These functions
return a list of the new sets of sums of squares, as well as the
coefficients, the residuals and the fitted.values.
# Calculation of the sequential sums of squares
mat <- matrix(c(2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,3,4,4,3,1,2,5,4,4,3),ncol=3)
data <- data.frame(mat)
MF131 <- TrapezoidalFuzzyNumber(0,1,1,2)
MF132 <- TrapezoidalFuzzyNumber(1,2,2,3)
MF133 <- TrapezoidalFuzzyNumber(2,3,3,4)
MF134 <- TrapezoidalFuzzyNumber(3,4,4,5)
MF135 <- TrapezoidalFuzzyNumber(4,5,5,6)
PA13 <- c(1,2,3,4,5); mi <- 1; si <- 3
Yfuzz <- FUZZ(data,1,3,PA13)
attach(data)
formula <- X3 ~ X1 + X2
f.response <- matrix(rep(0), ncol = 1, nrow = nrow(Yfuzz))
for (i in 1:nrow(Yfuzz)){
f.response[i] <- distance(TrapezoidalFuzzyNumber(Yfuzz[i,1],Yfuzz[i,2],
Yfuzz[i,3],Yfuzz[i,4]),
TriangularFuzzyNumber(0,0,0), "GSGD")}
res <- SEQ.ORDERING (scope = formula, data = data, f.response = f.response)
res$coefficients
#> [,1]
#> (Intercept) 6.2229403
#> X1 -0.7282737
#> X2 -0.9792057
detach(data)
FTukeyHSD()
: Calculates the Tukey HSD test
corresponding to the fuzzy response variableIn the case of the Mult-FMANOVA model performed by the distance
method, the function FuzzySTs::FTukeyHSD()
calculates the
Tukey HSD test applied on the mean of the fuzzy response variable
related to the different factor levels. We have to remind that this test
is done by variable, and not for the complete model. This function
returns a table of comparisons of means of the different levels of a
given factor, two by two. The table contains the means of populations,
the lower and upper bounds of the confidence intervals, and their
p-values.
# Calculation of the Tukey HSD test for the fuzzy variable X1
mat <- matrix(c(2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,3,4,4,3,1,2,5,4,4,3),ncol=3)
data <- data.frame(mat)
MF131 <- TrapezoidalFuzzyNumber(0,1,1,2)
MF132 <- TrapezoidalFuzzyNumber(1,2,2,3)
MF133 <- TrapezoidalFuzzyNumber(2,3,3,4)
MF134 <- TrapezoidalFuzzyNumber(3,4,4,5)
MF135 <- TrapezoidalFuzzyNumber(4,5,5,6)
PA13 <- c(1,2,3,4,5); mi <- 1; si <- 3
Yfuzz <- FUZZ(data,1,3,PA13)
attach(data)
formula <- X3 ~ X1 + X2
res <- FMANOVA(formula, data, Yfuzz, method = "distance", distance.type = "wabl")
FTukeyHSD(res, "X1")[[1]]
#> Grp1 Grp2 diff lwr upr p value p adj
#> 1 2 1 -0.2487879 -2.483168 1.985593 1 0.7999089
detach(data)
Ftests()
: Calculates multiple tests corresponding to
the fuzzy response variableIn the case of the Mult-FMANOVA model performed by the distance
method, this function FuzzySTs::Ftests()
calculates
multiple indicators of the comparison between the means of the different
level factors. We draw the attention that these indicators are
constructed on the sums of squares related to the complete model. Thus,
no particular factors are specifically involved. This function returns a
table of the following different indicators “Wilks”,“F-Wilks”,
“Hotelling-Lawley trace” and “Pillai Trace”.
# Calculation of the Ftests of the following example
mat <- matrix(c(2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,3,4,4,3,1,2,5,4,4,3),ncol=3)
data <- data.frame(mat)
MF131 <- TrapezoidalFuzzyNumber(0,1,1,2)
MF132 <- TrapezoidalFuzzyNumber(1,2,2,3)
MF133 <- TrapezoidalFuzzyNumber(2,3,3,4)
MF134 <- TrapezoidalFuzzyNumber(3,4,4,5)
MF135 <- TrapezoidalFuzzyNumber(4,5,5,6)
PA13 <- c(1,2,3,4,5); mi <- 1; si <- 3
Yfuzz <- FUZZ(data,1,3,PA13)
attach(data)
formula <- X3 ~ X1 + X2
res <- FMANOVA(formula, data, Yfuzz, method = "distance", distance.type = "wabl")
Ftests(res)
#> $Ftests
#> [,1]
#> Wilks 0.8196313
#> F-Wilks 0.7702127
#> Hotelling-Lawley trace 0.2083111
#> Pillai Trace 0.1749157
detach(data)