library(readxl)
## Warning: package 'readxl' was built under R version 4.4.3
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.4.3
##
## 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
data_tb <- read_excel("D:/FINAL TA/SUMBER REFRENSI/TA.xlsx", sheet = 1)
head(data_tb)
## # A tibble: 6 × 11
## NO `TANGGAL MASUK` `JENIS KELAMIN` `UMUR TAHUN` `KEADAAN KELUAR` PENYAKIT
## <dbl> <chr> <dbl> <dbl> <dbl> <dbl>
## 1 1 18/02/2024 1 124 1 1
## 2 2 21/02/2024 1 23 0 1
## 3 3 19/04/2024 1 62 0 1
## 4 4 20/04/2024 1 42 0 1
## 5 5 29/04/2024 1 71 0 1
## 6 6 45478 1 63 0 1
## # ℹ 5 more variables: `LAMA RAWAT INAP` <dbl>, `PENYAKIT PENYERTA` <dbl>,
## # LEOKOSIT <dbl>, TROMBOSIT <chr>, HEMOGLOBIN <dbl>
str(data_tb)
## tibble [322 × 11] (S3: tbl_df/tbl/data.frame)
## $ NO : num [1:322] 1 2 3 4 5 6 7 8 9 10 ...
## $ TANGGAL MASUK : chr [1:322] "18/02/2024" "21/02/2024" "19/04/2024" "20/04/2024" ...
## $ JENIS KELAMIN : num [1:322] 1 1 1 1 1 1 0 0 0 1 ...
## $ UMUR TAHUN : num [1:322] 124 23 62 42 71 63 51 42 27 66 ...
## $ KEADAAN KELUAR : num [1:322] 1 0 0 0 0 0 0 0 0 0 ...
## $ PENYAKIT : num [1:322] 1 1 1 1 1 1 1 1 1 1 ...
## $ LAMA RAWAT INAP : num [1:322] 3 1 3 3 3 3 4 7 3 5 ...
## $ PENYAKIT PENYERTA: num [1:322] 0 0 0 0 1 1 0 0 0 0 ...
## $ LEOKOSIT : num [1:322] 0 0 0 1 1 NA 1 1 0 1 ...
## $ TROMBOSIT : chr [1:322] "435" "314" "478" "538" ...
## $ HEMOGLOBIN : num [1:322] 1 0 1 1 1 NA 1 1 NA 0 ...
data_tb <- na.omit(data_tb)
colnames(data_tb) <- c(
"NO",
"TANGGAL_MASUK",
"JENIS_KELAMIN",
"UMUR_TAHUN",
"KEADAAN_KELUAR",
"PENYAKIT",
"LAMA_RAWAT_INAP",
"PENYAKIT_PENYERTA",
"LEOKOSIT",
"TROMBOSIT",
"HEMOGLOBIN"
)
data_tb <- data_tb %>%
mutate(KODE_TROMBOSIT = ifelse(TROMBOSIT >= 150 & TROMBOSIT <= 450, 0, 1))
data_tb <- data_tb %>%
mutate(KODE_LAMA_RAWAT = ifelse(LAMA_RAWAT_INAP <= 5, 0, 1))
data_tb <- data_tb %>%
mutate(KODE_PENYERTA = ifelse(PENYAKIT_PENYERTA == 0, 0, 1))
data_tb$KEADAAN_KELUAR <- factor(data_tb$KEADAAN_KELUAR,
levels = c(0,1),
labels = c("HIDUP","MENINGGAL"))
data_tb$PENYAKIT <- factor(data_tb$PENYAKIT,
levels = c(0,1,2),
labels = c("TB_PARU","TB_PLEURA","TB_LAINNYA"))
data_tb$JENIS_KELAMIN <- factor(data_tb$JENIS_KELAMIN,
levels = c(0,1),
labels = c("P","L"))
summary(data_tb)
## NO TANGGAL_MASUK JENIS_KELAMIN UMUR_TAHUN
## Min. : 1.00 Length:282 P: 94 Min. : 1.00
## 1st Qu.: 83.25 Class :character L:188 1st Qu.: 42.00
## Median :156.50 Mode :character Median : 54.00
## Mean :161.31 Mean : 51.93
## 3rd Qu.:242.75 3rd Qu.: 64.00
## Max. :321.00 Max. :124.00
## KEADAAN_KELUAR PENYAKIT LAMA_RAWAT_INAP PENYAKIT_PENYERTA
## HIDUP :253 TB_PARU :235 Min. : 1.000 Min. :0.0000
## MENINGGAL: 29 TB_PLEURA : 33 1st Qu.: 3.000 1st Qu.:0.0000
## TB_LAINNYA: 14 Median : 4.000 Median :0.0000
## Mean : 4.429 Mean :0.1844
## 3rd Qu.: 5.000 3rd Qu.:0.0000
## Max. :15.000 Max. :1.0000
## LEOKOSIT TROMBOSIT HEMOGLOBIN KODE_TROMBOSIT
## Min. :0.0000 Length:282 Min. :0.000 Min. :0.0000
## 1st Qu.:0.0000 Class :character 1st Qu.:0.000 1st Qu.:0.0000
## Median :1.0000 Mode :character Median :1.000 Median :0.0000
## Mean :0.5674 Mean :0.578 Mean :0.3085
## 3rd Qu.:1.0000 3rd Qu.:1.000 3rd Qu.:1.0000
## Max. :1.0000 Max. :1.000 Max. :1.0000
## KODE_LAMA_RAWAT KODE_PENYERTA
## Min. :0.0000 Min. :0.0000
## 1st Qu.:0.0000 1st Qu.:0.0000
## Median :0.0000 Median :0.0000
## Mean :0.1525 Mean :0.1844
## 3rd Qu.:0.0000 3rd Qu.:0.0000
## Max. :1.0000 Max. :1.0000
str(data_tb)
## tibble [282 × 14] (S3: tbl_df/tbl/data.frame)
## $ NO : num [1:282] 1 2 3 4 5 7 8 10 11 12 ...
## $ TANGGAL_MASUK : chr [1:282] "18/02/2024" "21/02/2024" "19/04/2024" "20/04/2024" ...
## $ JENIS_KELAMIN : Factor w/ 2 levels "P","L": 2 2 2 2 2 1 1 2 2 2 ...
## $ UMUR_TAHUN : num [1:282] 124 23 62 42 71 51 42 66 49 49 ...
## $ KEADAAN_KELUAR : Factor w/ 2 levels "HIDUP","MENINGGAL": 2 1 1 1 1 1 1 1 1 1 ...
## $ PENYAKIT : Factor w/ 3 levels "TB_PARU","TB_PLEURA",..: 2 2 2 2 2 2 2 2 2 2 ...
## $ LAMA_RAWAT_INAP : num [1:282] 3 1 3 3 3 4 7 5 4 4 ...
## $ PENYAKIT_PENYERTA: num [1:282] 0 0 0 0 1 0 0 0 1 0 ...
## $ LEOKOSIT : num [1:282] 0 0 0 1 1 1 1 1 0 1 ...
## $ TROMBOSIT : chr [1:282] "435" "314" "478" "538" ...
## $ HEMOGLOBIN : num [1:282] 1 0 1 1 1 1 1 0 1 0 ...
## $ KODE_TROMBOSIT : num [1:282] 0 0 1 1 0 1 1 0 1 0 ...
## $ KODE_LAMA_RAWAT : num [1:282] 0 0 0 0 0 0 1 0 0 0 ...
## $ KODE_PENYERTA : num [1:282] 0 0 0 0 1 0 0 0 1 0 ...
## - attr(*, "na.action")= 'omit' Named int [1:40] 6 9 33 37 38 39 41 44 49 52 ...
## ..- attr(*, "names")= chr [1:40] "6" "9" "33" "37" ...
colSums(is.na(data_tb))
## NO TANGGAL_MASUK JENIS_KELAMIN UMUR_TAHUN
## 0 0 0 0
## KEADAAN_KELUAR PENYAKIT LAMA_RAWAT_INAP PENYAKIT_PENYERTA
## 0 0 0 0
## LEOKOSIT TROMBOSIT HEMOGLOBIN KODE_TROMBOSIT
## 0 0 0 0
## KODE_LAMA_RAWAT KODE_PENYERTA
## 0 0
View(data_tb)
tb_freq <- table(data_tb$PENYAKIT)
tb_percent <- prop.table(tb_freq) * 100
tb_deskriptif <- data.frame(
Jenis_TBC = names(tb_freq),
N = as.vector(tb_freq),
Persen = round(as.vector(tb_percent),2)
)
tb_deskriptif
## Jenis_TBC N Persen
## 1 TB_PARU 235 83.33
## 2 TB_PLEURA 33 11.70
## 3 TB_LAINNYA 14 4.96
#Visualisasi distribusi data dalam bentuk diagram lingkaran.
pie(tb_freq,
main = "Diagram Lingkaran Jenis TBC",
col = c("orange","green","yellow"))
library(dplyr)
# buat kategori usia (hindari simbol aneh)
data_tb <- data_tb %>%
mutate(
USIA_KATEGORI = ifelse(UMUR_TAHUN <= 45, "<=45", ">45")
)
# fungsi deskriptif (lebih aman)
deskriptif <- function(data, var){
# pastikan character bersih
x <- data[[var]]
x <- iconv(x, "UTF-8", "ASCII", sub = "") # cegah error encoding
freq <- table(x)
persen <- prop.table(freq) * 100
hasil <- data.frame(
Variabel = var,
Kategori = names(freq),
N = as.vector(freq),
Persen = round(as.vector(persen), 2)
)
return(hasil)
}
# jalankan
d1 <- deskriptif(data_tb, "JENIS_KELAMIN")
d2 <- deskriptif(data_tb, "USIA_KATEGORI")
d3 <- deskriptif(data_tb, "LEOKOSIT")
d4 <- deskriptif(data_tb, "KODE_TROMBOSIT")
d5 <- deskriptif(data_tb, "HEMOGLOBIN")
d6 <- deskriptif(data_tb, "KODE_PENYERTA")
d7 <- deskriptif(data_tb, "KODE_LAMA_RAWAT")
d8 <- deskriptif(data_tb, "KEADAAN_KELUAR")
tabel_deskriptif <- bind_rows(d1, d2, d3, d4, d5, d6, d7, d8)
tabel_deskriptif
## Variabel Kategori N Persen
## 1 JENIS_KELAMIN L 188 66.67
## 2 JENIS_KELAMIN P 94 33.33
## 3 USIA_KATEGORI <=45 90 31.91
## 4 USIA_KATEGORI >45 192 68.09
## 5 LEOKOSIT 0 122 43.26
## 6 LEOKOSIT 1 160 56.74
## 7 KODE_TROMBOSIT 0 195 69.15
## 8 KODE_TROMBOSIT 1 87 30.85
## 9 HEMOGLOBIN 0 119 42.20
## 10 HEMOGLOBIN 1 163 57.80
## 11 KODE_PENYERTA 0 230 81.56
## 12 KODE_PENYERTA 1 52 18.44
## 13 KODE_LAMA_RAWAT 0 239 84.75
## 14 KODE_LAMA_RAWAT 1 43 15.25
## 15 KEADAAN_KELUAR HIDUP 253 89.72
## 16 KEADAAN_KELUAR MENINGGAL 29 10.28
data_no_na <- na.omit(data_tb)
head(data_tb)
## # A tibble: 6 × 15
## NO TANGGAL_MASUK JENIS_KELAMIN UMUR_TAHUN KEADAAN_KELUAR PENYAKIT
## <dbl> <chr> <fct> <dbl> <fct> <fct>
## 1 1 18/02/2024 L 124 MENINGGAL TB_PLEURA
## 2 2 21/02/2024 L 23 HIDUP TB_PLEURA
## 3 3 19/04/2024 L 62 HIDUP TB_PLEURA
## 4 4 20/04/2024 L 42 HIDUP TB_PLEURA
## 5 5 29/04/2024 L 71 HIDUP TB_PLEURA
## 6 7 18/06/2024 P 51 HIDUP TB_PLEURA
## # ℹ 9 more variables: LAMA_RAWAT_INAP <dbl>, PENYAKIT_PENYERTA <dbl>,
## # LEOKOSIT <dbl>, TROMBOSIT <chr>, HEMOGLOBIN <dbl>, KODE_TROMBOSIT <dbl>,
## # KODE_LAMA_RAWAT <dbl>, KODE_PENYERTA <dbl>, USIA_KATEGORI <chr>
str(data_tb)
## tibble [282 × 15] (S3: tbl_df/tbl/data.frame)
## $ NO : num [1:282] 1 2 3 4 5 7 8 10 11 12 ...
## $ TANGGAL_MASUK : chr [1:282] "18/02/2024" "21/02/2024" "19/04/2024" "20/04/2024" ...
## $ JENIS_KELAMIN : Factor w/ 2 levels "P","L": 2 2 2 2 2 1 1 2 2 2 ...
## $ UMUR_TAHUN : num [1:282] 124 23 62 42 71 51 42 66 49 49 ...
## $ KEADAAN_KELUAR : Factor w/ 2 levels "HIDUP","MENINGGAL": 2 1 1 1 1 1 1 1 1 1 ...
## $ PENYAKIT : Factor w/ 3 levels "TB_PARU","TB_PLEURA",..: 2 2 2 2 2 2 2 2 2 2 ...
## $ LAMA_RAWAT_INAP : num [1:282] 3 1 3 3 3 4 7 5 4 4 ...
## $ PENYAKIT_PENYERTA: num [1:282] 0 0 0 0 1 0 0 0 1 0 ...
## $ LEOKOSIT : num [1:282] 0 0 0 1 1 1 1 1 0 1 ...
## $ TROMBOSIT : chr [1:282] "435" "314" "478" "538" ...
## $ HEMOGLOBIN : num [1:282] 1 0 1 1 1 1 1 0 1 0 ...
## $ KODE_TROMBOSIT : num [1:282] 0 0 1 1 0 1 1 0 1 0 ...
## $ KODE_LAMA_RAWAT : num [1:282] 0 0 0 0 0 0 1 0 0 0 ...
## $ KODE_PENYERTA : num [1:282] 0 0 0 0 1 0 0 0 1 0 ...
## $ USIA_KATEGORI : chr [1:282] ">45" "<=45" ">45" "<=45" ...
## - attr(*, "na.action")= 'omit' Named int [1:40] 6 9 33 37 38 39 41 44 49 52 ...
## ..- attr(*, "names")= chr [1:40] "6" "9" "33" "37" ...
data_tb[data_tb == "-"] <- NA
nrow(data_tb)
## [1] 282
nrow(data_no_na)
## [1] 282
data_no_na <- na.omit(data_tb)
X <- data_no_na[,c(
"JENIS_KELAMIN",
"USIA_KATEGORI",
"LEOKOSIT",
"KODE_TROMBOSIT",
"HEMOGLOBIN",
"KODE_PENYERTA",
"KODE_LAMA_RAWAT",
"KEADAAN_KELUAR"
)]
X <- data.frame(lapply(X, function(x) as.numeric(as.factor(x))))
str(X)
## 'data.frame': 282 obs. of 8 variables:
## $ JENIS_KELAMIN : num 2 2 2 2 2 1 1 2 2 2 ...
## $ USIA_KATEGORI : num 2 1 2 1 2 2 1 2 2 2 ...
## $ LEOKOSIT : num 1 1 1 2 2 2 2 2 1 2 ...
## $ KODE_TROMBOSIT : num 1 1 2 2 1 2 2 1 2 1 ...
## $ HEMOGLOBIN : num 2 1 2 2 2 2 2 1 2 1 ...
## $ KODE_PENYERTA : num 1 1 1 1 2 1 1 1 2 1 ...
## $ KODE_LAMA_RAWAT: num 1 1 1 1 1 1 2 1 1 1 ...
## $ KEADAAN_KELUAR : num 2 1 1 1 1 1 1 1 1 1 ...
View(data_no_na)
data_model_no_na <- data_no_na[, c(
"PENYAKIT",
"JENIS_KELAMIN",
"USIA_KATEGORI",
"LEOKOSIT",
"KODE_TROMBOSIT",
"HEMOGLOBIN",
"KODE_PENYERTA",
"KODE_LAMA_RAWAT",
"KEADAAN_KELUAR"
)]
data_model_no_na $PENYAKIT <- factor(data_model_no_na $PENYAKIT)
View(data_model_no_na)
library(caret)
## Warning: package 'caret' was built under R version 4.4.3
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 4.4.3
## Loading required package: lattice
set.seed(1001)
train_index <- createDataPartition(data_model_no_na$PENYAKIT, p = 0.80, list = FALSE)
trainDataNO <- data_model_no_na[train_index, ]
testDataNO <- data_model_no_na[-train_index, ]
n <- nrow(trainDataNO)
n
## [1] 227
n <- nrow(testDataNO)
n
## [1] 55
trainDataNO %>% count(PENYAKIT)
## # A tibble: 3 × 2
## PENYAKIT n
## <fct> <int>
## 1 TB_PARU 188
## 2 TB_PLEURA 27
## 3 TB_LAINNYA 12
testDataNO %>% count(PENYAKIT)
## # A tibble: 3 × 2
## PENYAKIT n
## <fct> <int>
## 1 TB_PARU 47
## 2 TB_PLEURA 6
## 3 TB_LAINNYA 2
set.seed(1001)
down_trainNO <- downSample(
x = trainDataNO[, !colnames(trainDataNO) %in% "PENYAKIT"],
y = trainDataNO$PENYAKIT
)
names(down_trainNO)[names(down_trainNO) == "Class"] <- "PENYAKIT"
table(down_trainNO$PENYAKIT)
##
## TB_PARU TB_PLEURA TB_LAINNYA
## 12 12 12
down_trainNO %>%
count(PENYAKIT)
## PENYAKIT n
## 1 TB_PARU 12
## 2 TB_PLEURA 12
## 3 TB_LAINNYA 12
library(e1071)
## Warning: package 'e1071' was built under R version 4.4.3
##
## Attaching package: 'e1071'
## The following object is masked from 'package:ggplot2':
##
## element
NBClassifier0 <- naiveBayes(PENYAKIT ~ ., data = down_trainNO)
NBClassifier0
##
## Naive Bayes Classifier for Discrete Predictors
##
## Call:
## naiveBayes.default(x = X, y = Y, laplace = laplace)
##
## A-priori probabilities:
## Y
## TB_PARU TB_PLEURA TB_LAINNYA
## 0.3333333 0.3333333 0.3333333
##
## Conditional probabilities:
## JENIS_KELAMIN
## Y P L
## TB_PARU 0.2500000 0.7500000
## TB_PLEURA 0.3333333 0.6666667
## TB_LAINNYA 0.5833333 0.4166667
##
## USIA_KATEGORI
## Y <=45 >45
## TB_PARU 0.25000000 0.75000000
## TB_PLEURA 0.08333333 0.91666667
## TB_LAINNYA 0.58333333 0.41666667
##
## LEOKOSIT
## Y [,1] [,2]
## TB_PARU 0.3333333 0.4923660
## TB_PLEURA 0.7500000 0.4522670
## TB_LAINNYA 0.1666667 0.3892495
##
## KODE_TROMBOSIT
## Y [,1] [,2]
## TB_PARU 0.08333333 0.2886751
## TB_PLEURA 0.41666667 0.5149287
## TB_LAINNYA 0.33333333 0.4923660
##
## HEMOGLOBIN
## Y [,1] [,2]
## TB_PARU 0.2500000 0.452267
## TB_PLEURA 0.7500000 0.452267
## TB_LAINNYA 0.6666667 0.492366
##
## KODE_PENYERTA
## Y [,1] [,2]
## TB_PARU 0.3333333 0.492366
## TB_PLEURA 0.0000000 0.000000
## TB_LAINNYA 0.3333333 0.492366
##
## KODE_LAMA_RAWAT
## Y [,1] [,2]
## TB_PARU 0.0000000 0.0000000
## TB_PLEURA 0.0000000 0.0000000
## TB_LAINNYA 0.4166667 0.5149287
##
## KEADAAN_KELUAR
## Y HIDUP MENINGGAL
## TB_PARU 0.83333333 0.16666667
## TB_PLEURA 0.83333333 0.16666667
## TB_LAINNYA 0.91666667 0.08333333
testDataNO$predicted <- predict(NBClassifier0, testDataNO)
testDataNO$actual <- testDataNO$PENYAKIT
library(caret)
confusionMatrix(
factor(testDataNO$predicted),
factor(testDataNO$actual)
)
## Confusion Matrix and Statistics
##
## Reference
## Prediction TB_PARU TB_PLEURA TB_LAINNYA
## TB_PARU 6 1 2
## TB_PLEURA 40 5 0
## TB_LAINNYA 1 0 0
##
## Overall Statistics
##
## Accuracy : 0.2
## 95% CI : (0.1043, 0.3297)
## No Information Rate : 0.8545
## P-Value [Acc > NIR] : 1
##
## Kappa : -0.0386
##
## Mcnemar's Test P-Value : NA
##
## Statistics by Class:
##
## Class: TB_PARU Class: TB_PLEURA Class: TB_LAINNYA
## Sensitivity 0.1277 0.83333 0.00000
## Specificity 0.6250 0.18367 0.98113
## Pos Pred Value 0.6667 0.11111 0.00000
## Neg Pred Value 0.1087 0.90000 0.96296
## Prevalence 0.8545 0.10909 0.03636
## Detection Rate 0.1091 0.09091 0.00000
## Detection Prevalence 0.1636 0.81818 0.01818
## Balanced Accuracy 0.3763 0.50850 0.49057
set.seed(1001)
up_trainNO <- upSample(
x = trainDataNO[, !colnames(trainDataNO) %in% "PENYAKIT"],
y = trainDataNO$PENYAKIT
)
names(up_trainNO)[names(up_trainNO) == "Class"] <- "PENYAKIT"
table(up_trainNO$PENYAKIT)
##
## TB_PARU TB_PLEURA TB_LAINNYA
## 188 188 188
up_trainNO %>%
count(PENYAKIT)
## PENYAKIT n
## 1 TB_PARU 188
## 2 TB_PLEURA 188
## 3 TB_LAINNYA 188
library(e1071)
NBClassifier1 <- naiveBayes(PENYAKIT ~ ., data = up_trainNO)
NBClassifier1
##
## Naive Bayes Classifier for Discrete Predictors
##
## Call:
## naiveBayes.default(x = X, y = Y, laplace = laplace)
##
## A-priori probabilities:
## Y
## TB_PARU TB_PLEURA TB_LAINNYA
## 0.3333333 0.3333333 0.3333333
##
## Conditional probabilities:
## JENIS_KELAMIN
## Y P L
## TB_PARU 0.3563830 0.6436170
## TB_PLEURA 0.2180851 0.7819149
## TB_LAINNYA 0.5851064 0.4148936
##
## USIA_KATEGORI
## Y <=45 >45
## TB_PARU 0.3031915 0.6968085
## TB_PLEURA 0.2819149 0.7180851
## TB_LAINNYA 0.5425532 0.4574468
##
## LEOKOSIT
## Y [,1] [,2]
## TB_PARU 0.5957447 0.4920578
## TB_PLEURA 0.6223404 0.4860964
## TB_LAINNYA 0.1702128 0.3768231
##
## KODE_TROMBOSIT
## Y [,1] [,2]
## TB_PARU 0.2819149 0.4511335
## TB_PLEURA 0.4095745 0.4930683
## TB_LAINNYA 0.3457447 0.4768804
##
## HEMOGLOBIN
## Y [,1] [,2]
## TB_PARU 0.5744681 0.4957436
## TB_PLEURA 0.7393617 0.4401551
## TB_LAINNYA 0.5957447 0.4920578
##
## KODE_PENYERTA
## Y [,1] [,2]
## TB_PARU 0.1861702 0.3902833
## TB_PLEURA 0.1276596 0.3346014
## TB_LAINNYA 0.3563830 0.4802091
##
## KODE_LAMA_RAWAT
## Y [,1] [,2]
## TB_PARU 0.1648936 0.3720754
## TB_PLEURA 0.0212766 0.1446902
## TB_LAINNYA 0.3829787 0.4874112
##
## KEADAAN_KELUAR
## Y HIDUP MENINGGAL
## TB_PARU 0.88829787 0.11170213
## TB_PLEURA 0.90957447 0.09042553
## TB_LAINNYA 0.92553191 0.07446809
testDataNO$predicted <- predict(NBClassifier1, testDataNO)
testDataNO$actual <- testDataNO$PENYAKIT
library(caret)
confusionMatrix(
factor(testDataNO$predicted),
factor(testDataNO$actual)
)
## Confusion Matrix and Statistics
##
## Reference
## Prediction TB_PARU TB_PLEURA TB_LAINNYA
## TB_PARU 7 0 2
## TB_PLEURA 34 4 0
## TB_LAINNYA 6 2 0
##
## Overall Statistics
##
## Accuracy : 0.2
## 95% CI : (0.1043, 0.3297)
## No Information Rate : 0.8545
## P-Value [Acc > NIR] : 1
##
## Kappa : -0.0263
##
## Mcnemar's Test P-Value : 2.826e-08
##
## Statistics by Class:
##
## Class: TB_PARU Class: TB_PLEURA Class: TB_LAINNYA
## Sensitivity 0.1489 0.66667 0.00000
## Specificity 0.7500 0.30612 0.84906
## Pos Pred Value 0.7778 0.10526 0.00000
## Neg Pred Value 0.1304 0.88235 0.95745
## Prevalence 0.8545 0.10909 0.03636
## Detection Rate 0.1273 0.07273 0.00000
## Detection Prevalence 0.1636 0.69091 0.14545
## Balanced Accuracy 0.4495 0.48639 0.42453