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))
