DATA

setwd("C:/Users/INFINIX/Downloads/")
data <- read.csv("malnutrisi.csv")
attach(data)

HANDLING MISSING DATA

detect missing value

sum(is.na(data))
## [1] 12
library(mice)
## Warning: package 'mice' was built under R version 4.4.2
## 
## Attaching package: 'mice'
## The following object is masked from 'package:stats':
## 
##     filter
## The following objects are masked from 'package:base':
## 
##     cbind, rbind
md.pattern(data)

##   No Negara overweight sanitation stunted lowbirth wasting GHI undernourished
## 8  1      1          1          1       1        1       1   1              1
## 1  1      1          1          1       1        1       1   1              1
## 1  1      1          1          1       1        1       1   0              0
## 1  1      1          1          1       1        1       0   0              0
##    0      0          0          0       0        0       1   2              2
##   anaemia breastfeeding Poverty   
## 8       1             1       1  0
## 1       0             1       0  2
## 1       1             0       0  4
## 1       0             0       0  6
##         2             2       3 12
apply(is.na(data), 2, which)
## $No
## integer(0)
## 
## $Negara
## integer(0)
## 
## $GHI
## [1] 1 8
## 
## $overweight
## integer(0)
## 
## $Poverty
## [1]  1  8 10
## 
## $sanitation
## integer(0)
## 
## $stunted
## integer(0)
## 
## $undernourished
## [1] 1 8
## 
## $wasting
## [1] 8
## 
## $anaemia
## [1]  8 10
## 
## $lowbirth
## integer(0)
## 
## $breastfeeding
## [1] 1 8

IMPUTATION

KNN Imputation

library(caret)
## Warning: package 'caret' was built under R version 4.4.2
## Loading required package: ggplot2
## Loading required package: lattice
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(RANN)
## Warning: package 'RANN' was built under R version 4.4.2
data_clean <- data %>%
  dplyr::filter(!apply(., 1, function(x) all(is.na(x[ c("GHI", "Poverty", "undernourished", "wasting", "anaemia", "breastfeeding")]))))
preProcValues <- preProcess(data_clean %>% 
                              dplyr::select(GHI,Poverty,undernourished, wasting, anaemia, breastfeeding),
                            method = c("knnImpute"),
                            k = 5,
                            knnSummary = mean)
imputasi <- predict(preProcValues, data_clean,na.action = na.pass)
head(imputasi)
##   No            Negara        GHI overweight    Poverty sanitation stunted
## 1  1 Brunei Darussalam -0.5889904        9.1 -0.1525823        0.1    10.9
## 2  2          Filipina -0.2831685        4.6  0.6331290        2.3    28.8
## 3  3         Indonesia  0.2069308       10.6 -0.4893158        8.5    31.0
## 4  4           Kamboja -0.2243565        3.8  0.5910374        5.7    22.3
## 5  5             Laos   0.7754459        4.0  0.6611902        9.2    27.7
## 6  6         Malaysia  -0.6164360        5.7 -0.7278353        0.7    21.9
##   undernourished    wasting     anaemia lowbirth breastfeeding
## 1     -0.3767539 -2.0312718 -1.13015661     10.8    -0.3695262
## 2     -0.2389718 -0.3564388 -1.26481250     20.1     0.6098054
## 3     -0.1213528  1.1036720  0.42628494     10.0     0.3104464
## 4     -0.3061826  0.8460054  1.75403715     12.1     0.3460843
## 5     -0.3229853  0.5883388  0.97694478     17.3    -0.1385921
## 6     -0.6590393  0.8889498 -0.01980971     11.3    -0.4308235
procNames <- data.frame(col = names(preProcValues$mean), mean = preProcValues$mean, sd = preProcValues$std)
for(i in procNames$col){
  imputasi[i] <- imputasi[i]*preProcValues$std[i]+preProcValues$mean[i] 
}
imputasi
##    No            Negara   GHI overweight Poverty sanitation stunted
## 1   1 Brunei Darussalam 12.84        9.1   12.50        0.1    10.9
## 2   2          Filipina 14.40        4.6   18.10        2.3    28.8
## 3   3         Indonesia 16.90       10.6   10.10        8.5    31.0
## 4   4           Kamboja 14.70        3.8   17.80        5.7    22.3
## 5   5             Laos  19.80        4.0   18.30        9.2    27.7
## 6   6         Malaysia  12.70        5.7    8.40        0.7    21.9
## 7   7           Myanmar 15.70        0.8   24.80        6.8    24.1
## 8   9          Thailand 10.10        8.6    6.80        0.6    11.5
## 9  10       Timor Leste 27.00        1.3   17.82        8.8    45.1
## 10 11           Vietnam 11.30        8.1    4.40        0.8    19.3
##    undernourished wasting anaemia lowbirth breastfeeding
## 1            4.38     2.9  16.090     10.8         41.16
## 2            5.20     6.8  14.300     20.1         54.90
## 3            5.90    10.2  36.780     10.0         50.70
## 4            4.80     9.6  54.430     12.1         51.20
## 5            4.70     9.0  44.100     17.3         44.40
## 6            2.70     9.7  30.850     11.3         40.30
## 7            3.80     7.4  35.600     12.3         51.20
## 8            5.20     7.7  28.270     10.5         14.00
## 9           22.30     8.3  37.042     10.0         65.00
## 10           5.00     4.7  19.600      8.2         45.40
sum(is.na(imputasi))
## [1] 0

FUZZY C-MEANS

library(ppclust)
## Warning: package 'ppclust' was built under R version 4.4.2
library (readr)
library(cluster)
library(fclust)
## Warning: package 'fclust' was built under R version 4.4.2
library(ggcorrplot)
## Warning: package 'ggcorrplot' was built under R version 4.4.2
library(psych)
## Warning: package 'psych' was built under R version 4.4.2
## 
## Attaching package: 'psych'
## The following object is masked from 'package:ppclust':
## 
##     pca
## The following objects are masked from 'package:ggplot2':
## 
##     %+%, alpha
library(factoextra)
## Warning: package 'factoextra' was built under R version 4.4.2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(dplyr)
dataa <- imputasi[,4:9]
head(dataa)
##   overweight Poverty sanitation stunted undernourished wasting
## 1        9.1    12.5        0.1    10.9           4.38     2.9
## 2        4.6    18.1        2.3    28.8           5.20     6.8
## 3       10.6    10.1        8.5    31.0           5.90    10.2
## 4        3.8    17.8        5.7    22.3           4.80     9.6
## 5        4.0    18.3        9.2    27.7           4.70     9.0
## 6        5.7     8.4        0.7    21.9           2.70     9.7
colSums(is.na(dataa))
##     overweight        Poverty     sanitation        stunted undernourished 
##              0              0              0              0              0 
##        wasting 
##              0
minMax <- function(x) {
 (x - min(x)) / (max(x) - min(x))
}

Normalisasi data menggunakan fungsi custom

data <- as.data.frame(lapply(dataa, minMax))
head(data)
##   overweight   Poverty sanitation   stunted undernourished   wasting
## 1  0.8469388 0.3970588 0.00000000 0.0000000     0.08571429 0.0000000
## 2  0.3877551 0.6715686 0.24175824 0.5233918     0.12755102 0.5342466
## 3  1.0000000 0.2794118 0.92307692 0.5877193     0.16326531 1.0000000
## 4  0.3061224 0.6568627 0.61538462 0.3333333     0.10714286 0.9178082
## 5  0.3265306 0.6813725 1.00000000 0.4912281     0.10204082 0.8356164
## 6  0.5000000 0.1960784 0.06593407 0.3216374     0.00000000 0.9315068
summary(data)
##    overweight        Poverty         sanitation         stunted      
##  Min.   :0.0000   Min.   :0.0000   Min.   :0.00000   Min.   :0.0000  
##  1st Qu.:0.3112   1st Qu.:0.2169   1st Qu.:0.06868   1st Qu.:0.2646  
##  Median :0.4439   Median :0.5270   Median :0.42857   Median :0.3596  
##  Mean   :0.4959   Mean   :0.4658   Mean   :0.46703   Mean   :0.3906  
##  3rd Qu.:0.7832   3rd Qu.:0.6681   3rd Qu.:0.87637   3rd Qu.:0.5154  
##  Max.   :1.0000   Max.   :1.0000   Max.   :1.00000   Max.   :1.0000  
##  undernourished      wasting      
##  Min.   :0.0000   Min.   :0.0000  
##  1st Qu.:0.0898   1st Qu.:0.5548  
##  Median :0.1122   Median :0.6986  
##  Mean   :0.1887   Mean   :0.6479  
##  3rd Qu.:0.1276   3rd Qu.:0.8973  
##  Max.   :1.0000   Max.   :1.0000
corr <- cor(data) # Asumsikan variabel dimulai dari kolom kedua
ggcorrplot(corr, type = "lower", lab = TRUE, lab_size = 5, title="Matriks 
Korelasi Data", ggtheme=theme_bw)

# Visualisasi pasangan variabel
pairs.panels(data, method = "pearson")

# multikolinearitas
q <- data # Sesuaikan kolom sesuai dengan data Anda
f <- cor(q) # Matriks korelasi
vif <- diag(solve(f)) # Menghitung VIF
print(vif)
##     overweight        Poverty     sanitation        stunted undernourished 
##       4.760005       6.082476       4.931250       5.403900       3.551688 
##        wasting 
##       2.463725
# VIF di atas 10 umumnya menunjukkan multikolinearitas tinggi
if (any(vif > 10)) {
  cat("Ada multikolinearitas di antara beberapa variabel.\n")
} else {
  cat("Tidak ada multikolinearitas yang signifikan.\n")
}
## Tidak ada multikolinearitas yang signifikan.
d <- dist(data, method = "euclidean")
print(d)
##            1         2         3         4         5         6         7
## 2  0.9517148                                                            
## 3  1.4969194 1.1023456                                                  
## 4  1.3010076 0.5745738 0.8906331                                        
## 5  1.5137653 0.8193193 0.8131000 0.4250394                              
## 6  1.0693968 0.6959841 1.0458416 0.7507401 1.0892426                    
## 7  1.4672316 0.7304112 1.3241792 0.5676820 0.5821773 1.2050675          
## 8  0.7197933 0.8828406 1.1247793 1.0062943 1.2992232 0.5269185 1.4208282
## 9  1.9996568 1.2862065 1.4080846 1.2060176 1.0736695 1.6444028 1.2046251
## 10 0.5441613 0.8750688 1.2433493 1.1714460 1.3780061 0.7663051 1.4662362
##            8         9
## 2                     
## 3                     
## 4                     
## 5                     
## 6                     
## 7                     
## 8                     
## 9  1.8416859          
## 10 0.4877851 1.8106489
fviz_dist(d, gradient = list(low = "red", mid = "white", high = "black"))

nrow(data)
## [1] 10
# Menentukan jumlah klaster optimal dengan metode silhouette
fviz_nbclust(data, kmeans, method = "silhouette", k.max = 5) +
 labs(subtitle = "Menentukan Jumlah Klaster Optimal dengan Metode Silhouette")

optimal_k <- 2 # Masukkan jumlah klaster optimal dari plot silhouette di langkah sebelumnya
res.fcm <- fcm(data, centers = optimal_k, nstart = 5)
summary(res.fcm)
## Summary for 'res.fcm'
## 
## Number of data objects:  10 
## 
## Number of clusters:  2 
## 
## Crisp clustering vector:
##  [1] 1 2 2 2 2 1 2 1 2 1
## 
## Initial cluster prototypes:
##           overweight   Poverty sanitation    stunted undernourished   wasting
## Cluster 1 0.05102041 0.6578431 0.95604396 1.00000000       1.000000 0.7397260
## Cluster 2 0.79591837 0.1176471 0.05494505 0.01754386       0.127551 0.6575342
## 
## Final cluster prototypes:
##           overweight   Poverty sanitation   stunted undernourished   wasting
## Cluster 1  0.7112850 0.2143818  0.1206429 0.1944470      0.1111401 0.4729956
## Cluster 2  0.2956172 0.6828418  0.7695536 0.5206095      0.2375043 0.7842739
## 
## Distance between the final cluster prototypes
##           Cluster 1
## Cluster 2  1.032564
## 
## Difference between the initial and final cluster prototypes
##           overweight    Poverty sanitation    stunted undernourished    wasting
## Cluster 1  0.6602646 -0.4434613 -0.8354011 -0.8055530     -0.8888599 -0.2667304
## Cluster 2 -0.5003012  0.5651947  0.7146086  0.5030657      0.1099533  0.1267396
## 
## Root Mean Squared Deviations (RMSD): 1.44953 
## Mean Absolute Deviation (MAD): 19.2604 
## 
## Membership degrees matrix (top and bottom 5 rows): 
##    Cluster 1 Cluster 2
## 1 0.85172320 0.1482768
## 2 0.45090211 0.5490979
## 3 0.38781519 0.6121848
## 4 0.10307555 0.8969244
## 5 0.05290276 0.9470972
## ...
##    Cluster 1  Cluster 2
## 6  0.7566357 0.24336432
## 7  0.1465492 0.85345078
## 8  0.9402973 0.05970269
## 9  0.2423085 0.75769146
## 10 0.9368554 0.06314457
## 
## Descriptive statistics for the membership degrees by clusters
##           Size       Min        Q1      Mean    Median        Q3       Max
## Cluster 1    4 0.7566357 0.8279513 0.8713779 0.8942893 0.9377159 0.9402973
## Cluster 2    6 0.5490979 0.6485615 0.7694078 0.8055711 0.8860560 0.9470972
## 
## Dunn's Fuzziness Coefficients:
## dunn_coeff normalized 
##  0.7276098  0.4552195 
## 
## Within cluster sum of squares by cluster:
##         1         2 
## 0.7651561 2.4158570 
## (between_SS / total_SS =  43.79%) 
## 
## Available components: 
##  [1] "u"          "v"          "v0"         "d"          "x"         
##  [6] "cluster"    "csize"      "sumsqrs"    "k"          "m"         
## [11] "iter"       "best.start" "func.val"   "comp.time"  "inpargs"   
## [16] "algorithm"  "call"
# Menampilkan matriks keanggotaan fuzzy untuk beberapa observasi pertama
as.data.frame(res.fcm$u)
##     Cluster 1  Cluster 2
## 1  0.85172321 0.14827679
## 2  0.45090211 0.54909789
## 3  0.38781519 0.61218481
## 4  0.10307555 0.89692445
## 5  0.05290276 0.94709724
## 6  0.75663568 0.24336432
## 7  0.14654922 0.85345078
## 8  0.94029731 0.05970269
## 9  0.24230854 0.75769146
## 10 0.93685543 0.06314457
res.fcm_ppclust <- ppclust2(res.fcm, "kmeans")
fviz_cluster(res.fcm_ppclust, data = data, 
 ellipse.type = "convex",
 palette = "jco",
 repel = TRUE)

# Menjalankan FCM dengan 2 klaster
res.fcm <- fcm(data, centers = 2 )
head(as.data.frame(res.fcm$u), 10) # Menampilkan matriks keanggotaan untuk 10 observasi pertama
##     Cluster 1  Cluster 2
## 1  0.85172321 0.14827679
## 2  0.45090211 0.54909789
## 3  0.38781519 0.61218481
## 4  0.10307555 0.89692445
## 5  0.05290276 0.94709724
## 6  0.75663568 0.24336432
## 7  0.14654922 0.85345078
## 8  0.94029731 0.05970269
## 9  0.24230854 0.75769146
## 10 0.93685543 0.06314457
# Mengonversi hasil FCM ke objek ppclust dengan metode KMeans
res.fcm_ppclust <- ppclust2(res.fcm, "kmeans")
# Menentukan klaster untuk setiap data
data$cluster <- res.fcm_ppclust$cluster
# Menghitung jumlah data dalam setiap klaster
cluster_counts <- table(data$cluster)
print(cluster_counts)
## 
## 1 2 
## 4 6
# Menampilkan prototipe (pusat) klaster pada iterasi awal dan akhir
res.fcm$v0 # Prototipe awal
##           overweight   Poverty sanitation   stunted undernourished  wasting
## Cluster 1 1.00000000 0.2794118  0.9230769 0.5877193      0.1632653 1.000000
## Cluster 2 0.05102041 0.6578431  0.9560440 1.0000000      1.0000000 0.739726
res.fcm$v # Prototipe akhir
##           overweight   Poverty sanitation   stunted undernourished   wasting
## Cluster 1  0.7112850 0.2143818  0.1206429 0.1944470      0.1111401 0.4729956
## Cluster 2  0.2956172 0.6828418  0.7695536 0.5206095      0.2375043 0.7842739
summary(res.fcm) # Ringkasan hasil FCM
## Summary for 'res.fcm'
## 
## Number of data objects:  10 
## 
## Number of clusters:  2 
## 
## Crisp clustering vector:
##  [1] 1 2 2 2 2 1 2 1 2 1
## 
## Initial cluster prototypes:
##           overweight   Poverty sanitation   stunted undernourished  wasting
## Cluster 1 1.00000000 0.2794118  0.9230769 0.5877193      0.1632653 1.000000
## Cluster 2 0.05102041 0.6578431  0.9560440 1.0000000      1.0000000 0.739726
## 
## Final cluster prototypes:
##           overweight   Poverty sanitation   stunted undernourished   wasting
## Cluster 1  0.7112850 0.2143818  0.1206429 0.1944470      0.1111401 0.4729956
## Cluster 2  0.2956172 0.6828418  0.7695536 0.5206095      0.2375043 0.7842739
## 
## Distance between the final cluster prototypes
##           Cluster 1
## Cluster 2  1.032564
## 
## Difference between the initial and final cluster prototypes
##           overweight     Poverty sanitation    stunted undernourished
## Cluster 1 -0.2887150 -0.06502997 -0.8024340 -0.3932723    -0.05212517
## Cluster 2  0.2445968  0.02499866 -0.1864903 -0.4793905    -0.76249567
##               wasting
## Cluster 1 -0.52700436
## Cluster 2  0.04454784
## 
## Root Mean Squared Deviations (RMSD): 1.018585 
## Mean Absolute Deviation (MAD): 11.6133 
## 
## Membership degrees matrix (top and bottom 5 rows): 
##    Cluster 1 Cluster 2
## 1 0.85172320 0.1482768
## 2 0.45090211 0.5490979
## 3 0.38781519 0.6121848
## 4 0.10307555 0.8969244
## 5 0.05290276 0.9470972
## ...
##    Cluster 1  Cluster 2
## 6  0.7566357 0.24336432
## 7  0.1465492 0.85345078
## 8  0.9402973 0.05970269
## 9  0.2423085 0.75769146
## 10 0.9368554 0.06314457
## 
## Descriptive statistics for the membership degrees by clusters
##           Size       Min        Q1      Mean    Median        Q3       Max
## Cluster 1    4 0.7566357 0.8279513 0.8713779 0.8942893 0.9377159 0.9402973
## Cluster 2    6 0.5490979 0.6485615 0.7694078 0.8055711 0.8860560 0.9470972
## 
## Dunn's Fuzziness Coefficients:
## dunn_coeff normalized 
##  0.7276098  0.4552195 
## 
## Within cluster sum of squares by cluster:
##         1         2 
## 0.7651561 2.4158570 
## (between_SS / total_SS =  43.79%) 
## 
## Available components: 
##  [1] "u"          "v"          "v0"         "d"          "x"         
##  [6] "cluster"    "csize"      "sumsqrs"    "k"          "m"         
## [11] "iter"       "best.start" "func.val"   "comp.time"  "inpargs"   
## [16] "algorithm"  "call"
# Menjalankan FCM dengan multiple start (misalnya nstart = 5) untuk hasil yang lebih stabil
res.fcm <- fcm(data, centers = 2, nstart = 5)
res.fcm$func.val # Nilai fungsi objektif untuk setiap iterasi
## [1] 2.680743 2.680743 2.680743 2.680743 2.680743
res.fcm$iter # Jumlah iterasi hingga konvergen
## [1] 17 16 17 17 16
res.fcm$best.start 
## [1] 2
summary(res.fcm)
## Summary for 'res.fcm'
## 
## Number of data objects:  10 
## 
## Number of clusters:  2 
## 
## Crisp clustering vector:
##  [1] 2 1 1 1 1 2 1 2 1 2
## 
## Initial cluster prototypes:
##           overweight   Poverty sanitation   stunted undernourished   wasting
## Cluster 1  0.3265306 0.6813725 1.00000000 0.4912281      0.1020408 0.8356164
## Cluster 2  0.7448980 0.0000000 0.07692308 0.2456140      0.1173469 0.2465753
##           cluster
## Cluster 1       2
## Cluster 2       1
## 
## Final cluster prototypes:
##           overweight   Poverty sanitation   stunted undernourished   wasting
## Cluster 1  0.3199186 0.6750937  0.7441243 0.5289705     0.23465186 0.7743921
## Cluster 2  0.7225500 0.1831765  0.0784540 0.1616056     0.09825264 0.4621842
##            cluster
## Cluster 1 1.992852
## Cluster 2 1.040235
## 
## Distance between the final cluster prototypes
##           Cluster 1
## Cluster 2  2.005726
## 
## Difference between the initial and final cluster prototypes
##             overweight      Poverty   sanitation     stunted undernourished
## Cluster 1 -0.006612011 -0.006278843 -0.255875690  0.03774239      0.1326110
## Cluster 2 -0.022347999  0.183176517  0.001530919 -0.08400843     -0.0190943
##               wasting      cluster
## Cluster 1 -0.06122438 -0.007148195
## Cluster 2  0.21560889  0.040235078
## 
## Root Mean Squared Deviations (RMSD): 0.2982857 
## Mean Absolute Deviation (MAD): 3.757231 
## 
## Membership degrees matrix (top and bottom 5 rows): 
##    Cluster 1  Cluster 2
## 1 0.09947554 0.90052446
## 2 0.81482054 0.18517946
## 3 0.75550784 0.24449216
## 4 0.95236693 0.04763307
## 5 0.96482149 0.03517851
## ...
##     Cluster 1  Cluster 2
## 6  0.14363736 0.85636263
## 7  0.90176871 0.09823129
## 8  0.03039546 0.96960454
## 9  0.81043916 0.18956084
## 10 0.03541554 0.96458446
## 
## Descriptive statistics for the membership degrees by clusters
##           Size       Min        Q1      Mean    Median        Q3       Max
## Cluster 1    6 0.7555078 0.8115345 0.8666208 0.8582946 0.9397174 0.9648215
## Cluster 2    4 0.8563626 0.8894840 0.9227690 0.9325545 0.9658395 0.9696045
## 
## Dunn's Fuzziness Coefficients:
## dunn_coeff normalized 
##  0.8133326  0.6266652 
## 
## Within cluster sum of squares by cluster:
##         1         2 
## 2.4158570 0.7651561 
## (between_SS / total_SS =  60.21%) 
## 
## Available components: 
##  [1] "u"          "v"          "v0"         "d"          "x"         
##  [6] "cluster"    "csize"      "sumsqrs"    "k"          "m"         
## [11] "iter"       "best.start" "func.val"   "comp.time"  "inpargs"   
## [16] "algorithm"  "call"
# Plot scatter untuk mengecek klaster pada beberapa variabel yang dipilih
plotcluster(res.fcm, cp = 1, trans = TRUE)

library(factoextra)
# Konversi hasil FCM ke format untuk visualisasi
res.fcm2 <- ppclust2(res.fcm, "kmeans")
# Visualisasi klaster dengan fviz_cluster
fviz_cluster(res.fcm2, data = data, 
 ellipse.type = "convex",
 palette = "jco",
 repel = TRUE) +
 labs(title = "Fuzzy C-Means Clustering dengan 8 Klaster")

library(cluster)
# Menggunakan clusplot untuk plot klaster
res.fcm3 <- ppclust2(res.fcm, "fanny")
cluster::clusplot(scale(data), res.fcm3$cluster, 
 main = "Cluster Plot of Data Set with 8 Clusters",
 color = TRUE, labels = 2, lines = 2, cex = 1)

# Validasi Hasil Klaster
# Validasi hasil klaster menggunakan beberapa indeks
res.fcm4 <- ppclust2(res.fcm, "fclust")
# Menghitung Partition Entropy, Partition Coefficient, dan lainnya
idxsf <- SIL.F(res.fcm4$Xca, res.fcm4$U, alpha = 1) # Fuzzy Silhouette Index
idxpe <- PE(res.fcm4$U) # Partition Entropy
idxpc <- PC(res.fcm4$U) # Partition Coefficient
idxmpc <- MPC(res.fcm4$U) # Modified Partition Coefficient
cat("Partition Entropy: ", idxpe, "\n")
## Partition Entropy:  0.3210562
cat("Partition Coefficient: ", idxpc, "\n")
## Partition Coefficient:  0.8133326
cat("Modified Partition Coefficient: ", idxmpc, "\n")
## Modified Partition Coefficient:  0.6266652
cat("Fuzzy Silhouette Index: ", idxsf, "\n")
## Fuzzy Silhouette Index:  0.7280901