library(readxl)
## Warning: package 'readxl' was built under R version 4.2.3
cmcData <- read_excel(path = "dataujiair.xlsx")
cmcData
## # A tibble: 27 × 4
##       PH Kekeruhan   TDS Kelayakan
##    <dbl>     <dbl> <dbl>     <dbl>
##  1  4.33        18   119        50
##  2  4.23         2   119        50
##  3  5.48        23   118        50
##  4  6.91         4   241       100
##  5  6.91        18   119       100
##  6  6.97        14     2       100
##  7  7.12        14     6       100
##  8 10.2         19   174        50
##  9 10.0          6   172        50
## 10  6.82         5   119       100
## # … with 17 more rows
training <- cmcData[1:20,1:4 ]
testing <- cmcData[21:nrow(cmcData),1:3]
validasi <- cmcData[21:nrow(cmcData),4]
data_research <- cmcData[21:nrow(cmcData),c(1,4)]
training
## # A tibble: 20 × 4
##       PH Kekeruhan   TDS Kelayakan
##    <dbl>     <dbl> <dbl>     <dbl>
##  1  4.33        18   119        50
##  2  4.23         2   119        50
##  3  5.48        23   118        50
##  4  6.91         4   241       100
##  5  6.91        18   119       100
##  6  6.97        14     2       100
##  7  7.12        14     6       100
##  8 10.2         19   174        50
##  9 10.0          6   172        50
## 10  6.82         5   119       100
## 11  6.63         4     2       100
## 12  7.61         3    42       100
## 13  9.07        21    18        50
## 14  9.11        16    20        50
## 15  6.92         4    69       100
## 16  6.96         4    81       100
## 17  7.6          3   582        50
## 18  7.62         3    40       100
## 19  5.24        14     2        50
## 20  4.19        15   553        50
testing
## # A tibble: 7 × 3
##      PH Kekeruhan   TDS
##   <dbl>     <dbl> <dbl>
## 1  8.5         16    28
## 2  7.61         3    62
## 3  6.88        18   184
## 4  4.17        22   506
## 5  6.89         4   601
## 6  7.02        34   121
## 7 10.7          4   242
validasi
## # A tibble: 7 × 1
##   Kelayakan
##       <dbl>
## 1       100
## 2       100
## 3       100
## 4        50
## 5        50
## 6        50
## 7        50
data_research 
## # A tibble: 7 × 2
##      PH Kelayakan
##   <dbl>     <dbl>
## 1  8.5        100
## 2  7.61       100
## 3  6.88       100
## 4  4.17        50
## 5  6.89        50
## 6  7.02        50
## 7 10.7         50
## Define interval of data
range.data <-apply(training, 2, range)
range.data
##         PH Kekeruhan TDS Kelayakan
## [1,]  4.19         2   2        50
## [2,] 10.17        23 582       100
## Set the method and its parameters,
## for example, we use Wang and Mendel's algorithm
method.type <- "WM"
control <- list(num.labels = 15, type.mf = "GAUSSIAN", type.defuz = "WAM",
type.tnorm = "MIN", type.snorm = "MAX", type.implication.func = "ZADEH",
name = "sim-0")
library(frbs)
## Warning: package 'frbs' was built under R version 4.2.3
## Learning step: Generate an FRBS model
object.reg <- frbs.learn(training, range.data, method.type, control)
## Predicting step: Predict for newdata
res.test <- predict(object.reg, testing)
## [1] "note: Some of your new data are out of the previously specified range"
## [1] "note: Some of your new data are out of the previously specified range"
## [1] "note: Some of your new data are out of the previously specified range"
## Display the FRBS model
summary(object.reg)
## The name of model:  sim-0 
## Model was trained using:  WM 
## The names of attributes:  PH Kekeruhan TDS Kelayakan 
## The interval of training data:  
##        PH Kekeruhan TDS Kelayakan
## min  4.19         2   2        50
## max 10.17        23 582       100
## Type of FRBS model: 
## [1] "MAMDANI"
## Type of membership functions: 
## [1] "GAUSSIAN"
## Type of t-norm method: 
## [1] "Standard t-norm (min)"
## Type of s-norm method: 
## [1] "Standard s-norm"
## Type of defuzzification technique: 
## [1] "Weighted average method"
## Type of implication function: 
## [1] "ZADEH"
## The names of linguistic terms on the input variables:  
##  [1] "v.1_a.1"  "v.1_a.2"  "v.1_a.3"  "v.1_a.4"  "v.1_a.5"  "v.1_a.6" 
##  [7] "v.1_a.7"  "v.1_a.8"  "v.1_a.9"  "v.1_a.10" "v.1_a.11" "v.1_a.12"
## [13] "v.1_a.13" "v.1_a.14" "v.1_a.15" "v.2_a.1"  "v.2_a.2"  "v.2_a.3" 
## [19] "v.2_a.4"  "v.2_a.5"  "v.2_a.6"  "v.2_a.7"  "v.2_a.8"  "v.2_a.9" 
## [25] "v.2_a.10" "v.2_a.11" "v.2_a.12" "v.2_a.13" "v.2_a.14" "v.2_a.15"
## [31] "v.3_a.1"  "v.3_a.2"  "v.3_a.3"  "v.3_a.4"  "v.3_a.5"  "v.3_a.6" 
## [37] "v.3_a.7"  "v.3_a.8"  "v.3_a.9"  "v.3_a.10" "v.3_a.11" "v.3_a.12"
## [43] "v.3_a.13" "v.3_a.14" "v.3_a.15"
## The parameter values of membership function on the input variable (normalized):  
##      v.1_a.1    v.1_a.2   v.1_a.3   v.1_a.4   v.1_a.5   v.1_a.6   v.1_a.7
## [1,]   5.000 5.00000000 5.0000000 5.0000000 5.0000000 5.0000000 5.0000000
## [2,]   0.000 0.07142857 0.1428571 0.2142857 0.2857143 0.3571429 0.4285714
## [3,]   0.025 0.02500000 0.0250000 0.0250000 0.0250000 0.0250000 0.0250000
## [4,]      NA         NA        NA        NA        NA        NA        NA
## [5,]      NA         NA        NA        NA        NA        NA        NA
##      v.1_a.8   v.1_a.9  v.1_a.10  v.1_a.11  v.1_a.12  v.1_a.13  v.1_a.14
## [1,]   5.000 5.0000000 5.0000000 5.0000000 5.0000000 5.0000000 5.0000000
## [2,]   0.500 0.5714286 0.6428571 0.7142857 0.7857143 0.8571429 0.9285714
## [3,]   0.025 0.0250000 0.0250000 0.0250000 0.0250000 0.0250000 0.0250000
## [4,]      NA        NA        NA        NA        NA        NA        NA
## [5,]      NA        NA        NA        NA        NA        NA        NA
##      v.1_a.15 v.2_a.1    v.2_a.2   v.2_a.3   v.2_a.4   v.2_a.5   v.2_a.6
## [1,]    5.000   5.000 5.00000000 5.0000000 5.0000000 5.0000000 5.0000000
## [2,]    1.000   0.000 0.07142857 0.1428571 0.2142857 0.2857143 0.3571429
## [3,]    0.025   0.025 0.02500000 0.0250000 0.0250000 0.0250000 0.0250000
## [4,]       NA      NA         NA        NA        NA        NA        NA
## [5,]       NA      NA         NA        NA        NA        NA        NA
##        v.2_a.7 v.2_a.8   v.2_a.9  v.2_a.10  v.2_a.11  v.2_a.12  v.2_a.13
## [1,] 5.0000000   5.000 5.0000000 5.0000000 5.0000000 5.0000000 5.0000000
## [2,] 0.4285714   0.500 0.5714286 0.6428571 0.7142857 0.7857143 0.8571429
## [3,] 0.0250000   0.025 0.0250000 0.0250000 0.0250000 0.0250000 0.0250000
## [4,]        NA      NA        NA        NA        NA        NA        NA
## [5,]        NA      NA        NA        NA        NA        NA        NA
##       v.2_a.14 v.2_a.15 v.3_a.1    v.3_a.2   v.3_a.3   v.3_a.4   v.3_a.5
## [1,] 5.0000000    5.000   5.000 5.00000000 5.0000000 5.0000000 5.0000000
## [2,] 0.9285714    1.000   0.000 0.07142857 0.1428571 0.2142857 0.2857143
## [3,] 0.0250000    0.025   0.025 0.02500000 0.0250000 0.0250000 0.0250000
## [4,]        NA       NA      NA         NA        NA        NA        NA
## [5,]        NA       NA      NA         NA        NA        NA        NA
##        v.3_a.6   v.3_a.7 v.3_a.8   v.3_a.9  v.3_a.10  v.3_a.11  v.3_a.12
## [1,] 5.0000000 5.0000000   5.000 5.0000000 5.0000000 5.0000000 5.0000000
## [2,] 0.3571429 0.4285714   0.500 0.5714286 0.6428571 0.7142857 0.7857143
## [3,] 0.0250000 0.0250000   0.025 0.0250000 0.0250000 0.0250000 0.0250000
## [4,]        NA        NA      NA        NA        NA        NA        NA
## [5,]        NA        NA      NA        NA        NA        NA        NA
##       v.3_a.13  v.3_a.14 v.3_a.15
## [1,] 5.0000000 5.0000000    5.000
## [2,] 0.8571429 0.9285714    1.000
## [3,] 0.0250000 0.0250000    0.025
## [4,]        NA        NA       NA
## [5,]        NA        NA       NA
## The names of linguistic terms on the output variable:  
##  [1] "c.1"  "c.2"  "c.3"  "c.4"  "c.5"  "c.6"  "c.7"  "c.8"  "c.9"  "c.10"
## [11] "c.11" "c.12" "c.13" "c.14" "c.15"
## The parameter values of membership function on the output variable (normalized):  
##        c.1        c.2       c.3       c.4       c.5       c.6       c.7   c.8
## [1,] 5.000 5.00000000 5.0000000 5.0000000 5.0000000 5.0000000 5.0000000 5.000
## [2,] 0.000 0.07142857 0.1428571 0.2142857 0.2857143 0.3571429 0.4285714 0.500
## [3,] 0.025 0.02500000 0.0250000 0.0250000 0.0250000 0.0250000 0.0250000 0.025
## [4,]    NA         NA        NA        NA        NA        NA        NA    NA
## [5,]    NA         NA        NA        NA        NA        NA        NA    NA
##            c.9      c.10      c.11      c.12      c.13      c.14  c.15
## [1,] 5.0000000 5.0000000 5.0000000 5.0000000 5.0000000 5.0000000 5.000
## [2,] 0.5714286 0.6428571 0.7142857 0.7857143 0.8571429 0.9285714 1.000
## [3,] 0.0250000 0.0250000 0.0250000 0.0250000 0.0250000 0.0250000 0.025
## [4,]        NA        NA        NA        NA        NA        NA    NA
## [5,]        NA        NA        NA        NA        NA        NA    NA
## The number of linguistic terms on each variables 
##      PH Kekeruhan TDS Kelayakan
## [1,] 15        15  15        15
## The fuzzy IF-THEN rules:  
##    V1 V2 V3       V4  V5        V6 V7       V8  V9 V10 V11      V12  V13
## 1  IF PH is  v.1_a.8 and Kekeruhan is  v.2_a.9 and TDS  is  v.3_a.1 THEN
## 2  IF PH is  v.1_a.1 and Kekeruhan is  v.2_a.1 and TDS  is  v.3_a.4 THEN
## 3  IF PH is  v.1_a.7 and Kekeruhan is  v.2_a.3 and TDS  is  v.3_a.4 THEN
## 4  IF PH is  v.1_a.4 and Kekeruhan is v.2_a.15 and TDS  is  v.3_a.4 THEN
## 5  IF PH is  v.1_a.1 and Kekeruhan is v.2_a.10 and TDS  is v.3_a.14 THEN
## 6  IF PH is v.1_a.15 and Kekeruhan is  v.2_a.4 and TDS  is  v.3_a.5 THEN
## 7  IF PH is  v.1_a.7 and Kekeruhan is  v.2_a.2 and TDS  is  v.3_a.1 THEN
## 8  IF PH is  v.1_a.9 and Kekeruhan is  v.2_a.2 and TDS  is  v.3_a.2 THEN
## 9  IF PH is  v.1_a.9 and Kekeruhan is  v.2_a.2 and TDS  is v.3_a.15 THEN
## 10 IF PH is  v.1_a.1 and Kekeruhan is v.2_a.12 and TDS  is  v.3_a.4 THEN
## 11 IF PH is v.1_a.15 and Kekeruhan is v.2_a.12 and TDS  is  v.3_a.5 THEN
## 12 IF PH is  v.1_a.7 and Kekeruhan is  v.2_a.2 and TDS  is  v.3_a.7 THEN
## 13 IF PH is  v.1_a.7 and Kekeruhan is v.2_a.12 and TDS  is  v.3_a.4 THEN
## 14 IF PH is  v.1_a.7 and Kekeruhan is  v.2_a.2 and TDS  is  v.3_a.3 THEN
## 15 IF PH is v.1_a.12 and Kekeruhan is v.2_a.14 and TDS  is  v.3_a.1 THEN
## 16 IF PH is v.1_a.13 and Kekeruhan is v.2_a.10 and TDS  is  v.3_a.1 THEN
## 17 IF PH is  v.1_a.3 and Kekeruhan is  v.2_a.9 and TDS  is  v.3_a.1 THEN
##          V14 V15  V16
## 1  Kelayakan  is c.15
## 2  Kelayakan  is  c.1
## 3  Kelayakan  is c.15
## 4  Kelayakan  is  c.1
## 5  Kelayakan  is  c.1
## 6  Kelayakan  is  c.1
## 7  Kelayakan  is c.15
## 8  Kelayakan  is c.15
## 9  Kelayakan  is  c.1
## 10 Kelayakan  is  c.1
## 11 Kelayakan  is  c.1
## 12 Kelayakan  is c.15
## 13 Kelayakan  is c.15
## 14 Kelayakan  is c.15
## 15 Kelayakan  is  c.1
## 16 Kelayakan  is  c.1
## 17 Kelayakan  is  c.1
## Plot the membership functions
plotMF(object.reg)

pred <- predict(object.reg, testing)
## [1] "note: Some of your new data are out of the previously specified range"
## [1] "note: Some of your new data are out of the previously specified range"
## [1] "note: Some of your new data are out of the previously specified range"
str(pred)
##  num [1:7, 1] 50 100 100 50 50 ...
str(data_research)
## tibble [7 × 2] (S3: tbl_df/tbl/data.frame)
##  $ PH       : num [1:7] 8.5 7.61 6.88 4.17 6.89 ...
##  $ Kelayakan: num [1:7] 100 100 100 50 50 50 50
data_research$predict <- pred
data_research
## # A tibble: 7 × 3
##      PH Kelayakan predict[,1]
##   <dbl>     <dbl>       <dbl>
## 1  8.5        100        50.0
## 2  7.61       100       100  
## 3  6.88       100       100  
## 4  4.17        50        50  
## 5  6.89        50        50  
## 6  7.02        50        50  
## 7 10.7         50        50
data_research$residual <- (data_research$Kelayakan-data_research$predict )
data_research
## # A tibble: 7 × 4
##      PH Kelayakan predict[,1] residual[,1]
##   <dbl>     <dbl>       <dbl>        <dbl>
## 1  8.5        100        50.0         50.0
## 2  7.61       100       100            0  
## 3  6.88       100       100            0  
## 4  4.17        50        50            0  
## 5  6.89        50        50            0  
## 6  7.02        50        50            0  
## 7 10.7         50        50            0
mean(data_research$predict != data_research$Kelayakan)
## [1] 0.1428571
accuracy <- table(data_research$predict, data_research$Kelayakan)
sum(diag(accuracy))/sum(accuracy)
## [1] 0.7142857
library(ggplot2)
library(reshape2)
## Warning: package 'reshape2' was built under R version 4.2.3
x <- 1:7
real_data <- data_research$Kelayakan
predict_data <- data_research$predict
df <- data.frame(x, real_data , predict_data )

# melt the data to a long format
df2 <- melt(data = df, id.vars = "x")

# plot, using the aesthetics argument 'colour'
ggplot(data = df2, aes(x = x, y = value, colour = variable))+
  geom_point(alpha = 1/2,size=7) + 
  theme(legend.justification = "top") +
  labs(title = "Graph of Prediction  using Fuzzy logic", 
         subtitle = "Mamdani", 
         y = "Waktu Pompa", x = "Iterasi") +
theme(axis.text.x = element_text(angle = -45))