BAB IV PERANCANGAN

4.1 Persiapan Data

Data yang digunakan pada penelitian ini diperoleh dari data rekam medis penderita penyakit paru yang sedang menjalani pengobatan rawat jalan di RSUD Kertosono selama kurun waktu 2014-1016. Jumlah data yang digunakan dalam penelitian ini sebanyak 483 data, dengan pembagian jumlah data yang digunakan sebagai pelatihan model ANN maupun uji coba model ANN adalah sebagai berikut.

Data rekam medis penderita penyakit paru terdiri dari 18 (delapan belas) variabel, yaitu jenis kelamin, umur, berat badan, sistole, diastole, batuk, sesak, demam, mual, pusing, nyeri dada, nyeri perut, nyeri kepala, nyeri kaki (bengkak), nyeri tenggorokan, nyeri punggung, pengaburan mata, dan nyeri leher (bengkak). Data rekam medis pasien penderita penyakit paru yang dimiliki RSUD Kertosono tercatat ke dalam 2 (dua) bentuk penyimpanan, yaitu dalam bentuk formulir (manual) dan database (digital). Namun, tidak semua variabel rekam medis yang tercatat di formulir disimpan dalam bentuk digital. Di dalam database (digital) hanya mencatat riwayat penyakit yang dialami pasien, tidak mencatat gejala (variabel diagnosa) yang dialami pasien. Selain itu, data diagnosa yang tercatat dalam formulir rekam medis pasien tidak semuanya terisi secara lengkap. Hal tersebut disebabkan oleh beberapa kemungkinan, seperti kelalaian dokter (tenaga medis), pasien benar-benar tidak mengalami gejala terkait atau kemungkinan yang lain. Oleh sebab itu, data rekam medis yang diperoleh terdapat nilai yang hilang atau kosong (missing value).

Dalam proses data mining, data yang digunakan hendaknya tidak mengandung data yang error, tidak lengkap (missing value), not available (kosong). Pada penelitian ini, metode yang digunakan untuk menangani nilai yang kosong adalah interpolasi. Metode interpolasi ini dipilih karena dalam suatu set data variabel antar diagnose dianggap memiliki hubungan (korelasi), dimana hubungan tersebut akan menghasilkan suatu grafik (fungsi) yang berbeda antar jenis penyakit paru. Sehingga dari grafik (fungsi) tersebut dapat diperkirakan nilai yang paling optimal untuk mengisi data yang kosong. Jenis interpolasi yang digunakan adalah jenis interpolasi sederhana (orde 1) atau interpolasi linier.

Dalam melakukan interpolasi linier diperlukan pasangan variabel yang memiliki nilai korelasi paling tinggi agar fungsi yang dihasilkan memiliki keakuratan yang maksimal. Tabel 7 memuat pasangan variabel yang digunakan dalam perhitungan interpolasi. Variabel 1 menunjukkan variabel diagnosa yang memuat nilai kosong (missing value) sedangkan variabel 2 menunjukkan pasangan variabel yang memiliki nilai korelasi paling tinggi terhadap variabel 1 seperti yang ditunjukkan pada tabel 7. Selain itu, pada tabel 7 juga memuat keterangan hubungan (korelasi) yang dimiliki oleh pasangan variabel tersebut.

choose.files()
## [1] "D:\\dataextractdumai\\buban bojonegoro\\data_lama\\data mentah-converted.xlsx"
setwd("D://dataextractdumai//buban bojonegoro//data_lama")
library(dplyr)
library(tidyr)
library(tidyverse)
library(purrr)
library(readxl)
library(ggplot2)
library(kableExtra)
library(hrbrthemes)
library(gcookbook)
sheet_name <- readxl::excel_sheets("data mentah-converted.xlsx")
data_anpro <- do.call(rbind, lapply(sheet_name, function(x)
  transform(readxl::read_excel("data mentah-converted.xlsx",
                               sheet = x), klasifikasi = x)))
data_anpro$klasifikasi <- factor(data_anpro$klasifikasi)
data_anpro$Jenis.Kelamin <- as.factor(data_anpro$Jenis.Kelamin)
data_anpro$Umur <- as.numeric(data_anpro$Umur)
data_anpro$Berat.Badan <- as.numeric(data_anpro$Berat.Badan)
data_anpro$Sistole <- as.numeric(data_anpro$Sistole)
data_anpro$Diastole <- as.numeric(data_anpro$Diastole)
data_anpro$Batuk <- as.factor(data_anpro$Batuk)
data_anpro$Sesak <- as.factor(data_anpro$Sesak)
str(data_anpro)
## 'data.frame':    483 obs. of  8 variables:
##  $ Jenis.Kelamin: Factor w/ 2 levels "0","1": 1 2 1 1 1 1 1 1 1 1 ...
##  $ Umur         : num  60 76 79 77 75 63 74 74 68 80 ...
##  $ Berat.Badan  : num  51 27 27 28 28 28 28 29 29 29 ...
##  $ Sistole      : num  105 120 120 174 125 140 114 130 171 129 ...
##  $ Diastole     : num  67 80 70 81 70 80 71 70 86 71 ...
##  $ Batuk        : Factor w/ 3 levels "0","1","2": 2 2 2 2 2 2 2 2 2 1 ...
##  $ Sesak        : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 1 2 1 1 ...
##  $ klasifikasi  : Factor w/ 4 levels "Bronkitis","Pneumonia",..: 3 3 3 3 3 3 3 3 3 3 ...
# Drop missing value
data_anpro <- na.omit(data_anpro)

# Handling Missing Value
#mean_bb <- mean(data_anpro$Berat.Badan, na.rm = TRUE)
#bb_impute <- data_anpro %>%
#  mutate(Berat.Badan=replace(Berat.Badan,is.na(Berat.Badan),mean_bb))
#summary(bb_impute$Berat.Badan)

4.1.1 Uji Normalitas

Uji normalitas pada penelitian ini dilakukan untuk mengetahui persebaran satu set data pada masing-masing variabel, apakah berdistribusi normal atau tidak. Apabila data dinyatakan berdistribusi normal, data tersebut dapat dianggap mewakili populasi. Uji normalitas dilakukan dengan metode deskriptif dan analitis pada setiap variabel diagnosa. Metode deskriptif dilakukan melalui pengujian pada koefisien varian, rasio skewness, rasio kurtosis, histogram, box plot, normal Q-Q plots, dan deterended Q-Q plots. Sedangkan metode analitis dilakukanmelalui pengujian nilai Kolmogorov-Smirnov dan nilai Shapiro-Wilk. Dalam studi kasuspenelitian ini, apabila data memenuhi minimal 1 (satu) parameter dari 9 (sembilan) parameter yang digunakan maka data tersebut dapat disimpulkan berdistribusi normal.

table(data_anpro$klasifikasi)
## 
## Bronkitis Pneumonia      PPOK       TBC 
##        92         0        72       316
data_anpro_tabel <- data_anpro [1:10, ]

data_anpro_tabel %>%
kbl(caption = "Tabel Data Frame") %>%
  kable_classic_2(full_width = F)
Tabel Data Frame
Jenis.Kelamin Umur Berat.Badan Sistole Diastole Batuk Sesak klasifikasi
0 60 51 105 67 1 1 PPOK
1 76 27 120 80 1 1 PPOK
0 79 27 120 70 1 1 PPOK
0 77 28 174 81 1 1 PPOK
0 75 28 125 70 1 1 PPOK
0 63 28 140 80 1 1 PPOK
0 74 28 114 71 1 0 PPOK
0 74 29 130 70 1 1 PPOK
0 68 29 171 86 1 0 PPOK
0 80 29 129 71 0 0 PPOK
library(psych)

describe(data_anpro) %>%
  kbl(caption = "Tabel Summary Data Frame") %>%
  kable_classic_2(full_width = T)
Tabel Summary Data Frame
vars n mean sd median trimmed mad min max range skew kurtosis se
Jenis.Kelamin* 1 480 1.462500 0.4991119 1.000 1.453125 0.00000 1 2 1 0.1499538 -1.9816292 0.0227812
Umur 2 480 52.410417 17.1047765 54.000 53.000000 20.75640 6 93 87 -0.2559269 -0.6696735 0.7807227
Berat.Badan 3 480 43.693271 9.9147242 43.415 43.324141 10.91194 25 80 55 0.3218589 -0.3061341 0.4525432
Sistole 4 480 122.129167 21.6227559 120.000 120.888021 17.79120 76 250 174 0.8050219 2.1328757 0.9869393
Diastole 5 480 74.868750 14.3966543 71.000 73.676302 13.34340 44 187 143 2.0034701 10.3335537 0.6571144
Batuk* 6 480 2.000000 0.5633185 2.000 2.000000 0.00000 1 3 2 0.0000000 0.1447505 0.0257119
Sesak* 7 480 1.464583 0.4992644 1.000 1.455729 0.00000 1 2 1 0.1415798 -1.9840756 0.0227882
klasifikasi* 8 480 3.275000 1.1628379 4.000 3.468750 0.00000 1 4 3 -1.2777007 -0.0920650 0.0530760
describeBy(data_anpro$Umur, data_anpro$klasifikasi)
## 
##  Descriptive statistics by group 
## group: Bronkitis
##    vars  n  mean   sd median trimmed  mad min max range skew kurtosis   se
## X1    1 92 52.45 17.2   53.5    53.2 21.5  13  84    71 -0.3    -0.83 1.79
## ------------------------------------------------------------ 
## group: Pneumonia
## NULL
## ------------------------------------------------------------ 
## group: PPOK
##    vars  n  mean   sd median trimmed  mad min max range  skew kurtosis  se
## X1    1 72 62.42 16.1   65.5   64.52 12.6  13  93    80 -1.24     1.64 1.9
## ------------------------------------------------------------ 
## group: TBC
##    vars   n  mean    sd median trimmed   mad min max range skew kurtosis   se
## X1    1 316 50.12 16.52     50   50.31 17.79   6  85    79 -0.1    -0.66 0.93
describeBy(data_anpro$Berat.Badan, data_anpro$klasifikasi)
## 
##  Descriptive statistics by group 
## group: Bronkitis
##    vars  n  mean    sd median trimmed  mad min max range skew kurtosis   se
## X1    1 92 44.29 10.08     44   43.91 9.08  25  68    43  0.3     -0.4 1.05
## ------------------------------------------------------------ 
## group: Pneumonia
## NULL
## ------------------------------------------------------------ 
## group: PPOK
##    vars  n  mean   sd median trimmed  mad min max range skew kurtosis   se
## X1    1 72 34.28 5.59   33.5   33.84 5.19  25  51    26 0.73      0.3 0.66
## ------------------------------------------------------------ 
## group: TBC
##    vars   n  mean   sd median trimmed mad min max range skew kurtosis   se
## X1    1 316 45.67 9.42     45   45.53 8.9  25  80    55 0.19    -0.09 0.53
describeBy(data_anpro$Sistole, data_anpro$klasifikasi)
## 
##  Descriptive statistics by group 
## group: Bronkitis
##    vars  n   mean    sd median trimmed   mad min max range skew kurtosis   se
## X1    1 92 125.61 23.62  123.5  124.21 20.02  76 250   174 1.56     6.59 2.46
## ------------------------------------------------------------ 
## group: Pneumonia
## NULL
## ------------------------------------------------------------ 
## group: PPOK
##    vars  n   mean    sd median trimmed   mad min max range skew kurtosis   se
## X1    1 72 126.75 21.44  120.5  125.26 17.05  90 190   100 0.65     0.07 2.53
## ------------------------------------------------------------ 
## group: TBC
##    vars   n   mean    sd median trimmed   mad min max range skew kurtosis   se
## X1    1 316 120.06 20.82    120  118.88 17.79  77 180   103  0.5     0.08 1.17
describeBy(data_anpro$Diastole, data_anpro$klasifikasi)
## 
##  Descriptive statistics by group 
## group: Bronkitis
##    vars  n  mean   sd median trimmed   mad min max range skew kurtosis   se
## X1    1 92 75.09 13.7     72   74.11 11.86  46 133    87 1.47      4.7 1.43
## ------------------------------------------------------------ 
## group: Pneumonia
## NULL
## ------------------------------------------------------------ 
## group: PPOK
##    vars  n  mean    sd median trimmed   mad min max range skew kurtosis   se
## X1    1 72 76.72 19.33     71   74.41 11.86  44 187   143 3.46    16.13 2.28
## ------------------------------------------------------------ 
## group: TBC
##    vars   n  mean    sd median trimmed   mad min max range skew kurtosis   se
## X1    1 316 74.38 13.25     71   73.38 13.34  45 130    85 0.88     1.56 0.75
library(pastecs)
stat.desc(data_anpro$Umur, data_anpro$klasifikasi)
##       median         mean      SE.mean CI.mean.0.95          var      std.dev 
##   54.0000000   52.4104167    0.7807227    1.5340645  292.5733777   17.1047765 
##     coef.var 
##    0.3263622
stat.desc(data_anpro$Berat.Badan, data_anpro$klasifikasi)
##       median         mean      SE.mean CI.mean.0.95          var      std.dev 
##   43.4150000   43.6932708    0.4525432    0.8892151   98.3017565    9.9147242 
##     coef.var 
##    0.2269165
stat.desc(data_anpro$Sistole, data_anpro$klasifikasi)
##       median         mean      SE.mean CI.mean.0.95          var      std.dev 
##  120.0000000  122.1291667    0.9869393    1.9392654  467.5435734   21.6227559 
##     coef.var 
##    0.1770483
stat.desc(data_anpro$Diastole, data_anpro$klasifikasi)
##       median         mean      SE.mean CI.mean.0.95          var      std.dev 
##   71.0000000   74.8687500    0.6571144    1.2911830  207.2636561   14.3966543 
##     coef.var 
##    0.1922919

Visualisasi

Variabel Jenis Kelamin

Berdasarkan hasil uji normalitas yang ditunjukkan pada tabel 8, dapat disimpulkan bahwa data pada variabel jenis kelamin pada setiap kelas penyakit paru memiliki persebaran data yang normal. Karena nilai Kolmogorov-Smirnov dan nilai Shapiro-Wilk pada masing-masing kelas penyakit bernilai >0.05. Selain itu, persentase koefisien varian pada jenis penyakit PPOK, tuberculosis dan bronkitis <30% dan nilai rasio skewness pada variabel jenis kelamin tuberculosis, bronkitis, pneumonia berada dalam interval -2 dan 2. Hal tersebut membuktikan bahwa data pada variabel jenis kelamin pada setiap kelas penyakit paru dapat dianggap mewakili populasi. Histogram pada gambar 4 menggambarkan persebaran data pada variabel jenis kelamin di setiap jenis penyakit paru. Histogram tersebut merupakan salah satu parameter yang digunakan untuk uji normalitas. Apabila histogram simetris (tidak condong ke kanan atau ke kiri) maka dapat disimpulkan bahwa variabel jenis kelamin memiliki distribusi data yang normal. Dari gambar tersebut dapat disimpulkan bahwa persebaran data pada masing-masing jenis penyakit berdistribusi normal karena grafik yang dihasilkan simetris (tidak condong ke kanan atau ke kiri).

klas_jk <- data_anpro %>%
          select(klasifikasi, Jenis.Kelamin) %>%
          dplyr::group_by(klasifikasi, Jenis.Kelamin)%>%
          summarise(n=n()) %>%
  spread(Jenis.Kelamin, n)
klas_jk  %>%
  kbl(caption = "Klasifikasi berdasarkan Jenis Kelamin") %>%
  kable_classic_2(full_width = F)
Klasifikasi berdasarkan Jenis Kelamin
klasifikasi 0 1
Bronkitis 39 53
PPOK 47 25
TBC 172 144
ggplot(data_anpro %>%
          select(klasifikasi, Jenis.Kelamin),
       aes(x=Jenis.Kelamin),
       group_by(Jenis.Kelamin)) +
  geom_bar() +
  scale_color_ipsum() +
  theme_ipsum_rc() +
  facet_wrap(~klasifikasi, ncol = 2)

Variabel Umur

Berdasarkan hasil uji normalitas yang ditunjukkan pada tabel 9, dapat disimpulkan bahwa data pada variabel umur pada setiap kelas penyakit paru memiliki persebaran data yang normal. Karena nilai Shapiro-Wilk pada masing-masing kelas penyakit bernilai >0.05 dan nilai Kolmogorov-Smirnov pada masing-masing kelas penyakit paru bernilai >0.05, kecuali penyakit tuberculosis. Selain itu, persentase koefisien varian pada setiap jenis penyakit bernilai <30% dan nilai rasio skewness pada variabel umur tuberculosis, bronkitis, pneumonia berada dalam interval -2 dan 2. Hal tersebut membuktikan bahwa data pada variabel umur pada setiap kelas penyakit paru dapat dianggap mewakili populasi. Histogram pada gambar 5 menggambarkan persebaran data pada variabel umur di setiap jenis penyakit paru. Histogram tersebut merupakan salah satu parameter yang digunakan untuk uji normalitas. Apabila histogram simetris (tidak condong ke kanan atau ke kiri) maka dapat disimpulkan bahwa variabel umur memiliki distribusi data yang normal. Dari histogram tersebut dapat disimpulkan bahwa persebaran data pada jenis penyakit tuberculosis, bronkitis dan pneumonia berdistribusi normal karena grafik yang dihasilkan simetris (tidak condong ke kanan atau ke kiri). Persebaran data pada jenis penyakit ppok lebih condong ke kanan, hal ini menunjukkan bahwa nilai rata-rata pada variabel umur pada jenis penyakit ppok lebih kecil dibandingkan nilai modus (nilai yang paling banyak muncul).

data_anpro$bin_umur <- cut(data_anpro$Umur,
                           breaks=c(0,20,40,60,80,100),
                           labels = c("<20", "20-40", "40-60", "60-80", "80+"),
                           right = T)
klas_umur <- data_anpro %>%
          select(klasifikasi, bin_umur) %>%
          dplyr::group_by(klasifikasi, bin_umur)%>%
          summarise(n=n()) %>%
  spread(bin_umur, n)
klas_umur %>%
  kbl(caption = "Klasifikasi Berdasarkan Umur") %>%
  kable_classic_2(full_width = F)
Klasifikasi Berdasarkan Umur
klasifikasi <20 20-40 40-60 60-80 80+
Bronkitis 4 24 31 32 1
PPOK 3 3 21 42 3
TBC 13 84 134 79 6
ggplot(data_anpro %>%
          select(klasifikasi, bin_umur),
       aes(x=bin_umur),
       group_by(bin_umur)) +
  geom_bar() +
  scale_color_ipsum() +
  theme_ipsum_rc() +
  facet_wrap(~klasifikasi, ncol = 2)

library(ggpubr)

shapiro.test(data_anpro$Umur)
## 
##  Shapiro-Wilk normality test
## 
## data:  data_anpro$Umur
## W = 0.9828, p-value = 1.863e-05
klas_PPOK = data_anpro %>%
  subset(klasifikasi == "PPOK")
shapiro.test(klas_PPOK$Umur)
## 
##  Shapiro-Wilk normality test
## 
## data:  klas_PPOK$Umur
## W = 0.89694, p-value = 2.313e-05
ks.test(klas_PPOK$Umur, "pnorm", mean(klas_PPOK$Umur), sd(klas_PPOK$Umur))
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  klas_PPOK$Umur
## D = 0.12173, p-value = 0.2364
## alternative hypothesis: two-sided
describe(klas_PPOK) %>%
  kbl(caption = "Variabel Klasifikasi PPOK") %>%
  kable_classic_2(full_width = T)
Variabel Klasifikasi PPOK
vars n mean sd median trimmed mad min max range skew kurtosis se
Jenis.Kelamin* 1 72 1.347222 0.4794281 1.0 1.310345 0.0000 1 2 1 0.6284815 -1.6270326 0.0565011
Umur 2 72 62.416667 16.1006955 65.5 64.517241 12.6021 13 93 80 -1.2352457 1.6368006 1.8974852
Berat.Badan 3 72 34.277778 5.5872647 33.5 33.844828 5.1891 25 51 26 0.7334936 0.3028966 0.6584655
Sistole 4 72 126.750000 21.4415353 120.5 125.258621 17.0499 90 190 100 0.6543345 0.0663408 2.5269092
Diastole 5 72 76.722222 19.3326858 71.0 74.413793 11.8608 44 187 143 3.4588789 16.1337213 2.2783789
Batuk* 6 72 1.805556 0.4324476 2.0 1.862069 0.0000 1 3 2 -0.9832543 0.3485938 0.0509644
Sesak* 7 72 1.777778 0.4186572 2.0 1.844828 0.0000 1 2 1 -1.3085634 -0.2911293 0.0493392
klasifikasi* 8 72 3.000000 0.0000000 3.0 3.000000 0.0000 3 3 0 NaN NaN 0.0000000
bin_umur* 9 72 3.541667 0.8211551 4.0 3.655172 0.0000 1 5 4 -1.2601954 1.8683865 0.0967741
klas_TB = data_anpro %>%
  subset(klasifikasi == "TBC")
shapiro.test(klas_TB$Umur)
## 
##  Shapiro-Wilk normality test
## 
## data:  klas_TB$Umur
## W = 0.9894, p-value = 0.0214
ks.test(klas_TB$Umur, "pnorm", mean(klas_TB$Umur), sd(klas_TB$Umur))
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  klas_TB$Umur
## D = 0.047165, p-value = 0.4831
## alternative hypothesis: two-sided
describe(klas_TB) %>%
  kbl(caption = "Variabel Klasifikasi TBC") %>%
  kable_classic_2(full_width = T)
Variabel Klasifikasi TBC
vars n mean sd median trimmed mad min max range skew kurtosis se
Jenis.Kelamin* 1 316 1.455696 0.4988232 1 1.444882 0.0000 1 2 1 0.1770711 -1.9748654 0.0280610
Umur 2 316 50.120253 16.5183813 50 50.314961 17.7912 6 85 79 -0.0955270 -0.6628681 0.9292315
Berat.Badan 3 316 45.665791 9.4240295 45 45.529094 8.8956 25 80 55 0.1929311 -0.0916544 0.5301431
Sistole 4 316 120.061709 20.8207426 120 118.875984 17.7912 77 180 103 0.4953704 0.0804790 1.1712583
Diastole 5 316 74.381329 13.2533530 71 73.382677 13.3434 45 130 85 0.8750701 1.5620495 0.7455594
Batuk* 6 316 2.082279 0.5905627 2 2.102362 0.0000 1 3 2 -0.0198745 -0.1915487 0.0332217
Sesak* 7 316 1.411392 0.4928665 1 1.389764 0.0000 1 2 1 0.3584224 -1.8774447 0.0277259
klasifikasi* 8 316 4.000000 0.0000000 4 4.000000 0.0000 4 4 0 NaN NaN 0.0000000
bin_umur* 9 316 2.939873 0.8689669 3 2.952756 1.4826 1 5 4 -0.0869396 -0.4608289 0.0488832
klas_Bronkitis = data_anpro %>%
  subset(klasifikasi == "Bronkitis")
shapiro.test(klas_Bronkitis$Umur)
## 
##  Shapiro-Wilk normality test
## 
## data:  klas_Bronkitis$Umur
## W = 0.97033, p-value = 0.03399
ks.test(klas_Bronkitis$Umur, "pnorm", mean(klas_Bronkitis$Umur), 
        sd(klas_Bronkitis$Umur))
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  klas_Bronkitis$Umur
## D = 0.06969, p-value = 0.7629
## alternative hypothesis: two-sided
describe(klas_Bronkitis) %>%
  kbl(caption = "Variabel Klasifikasi Bronkitis") %>%
  kable_classic_2(full_width = T)
Variabel Klasifikasi Bronkitis
vars n mean sd median trimmed mad min max range skew kurtosis se
Jenis.Kelamin* 1 92 1.576087 0.4968847 2.0 1.594595 0.000000 1 2 1 -0.3029271 -1.9288477 0.0518038
Umur 2 92 52.445652 17.1997726 53.5 53.202703 21.497700 13 84 71 -0.3005157 -0.8306674 1.7932003
Berat.Badan 3 92 44.286739 10.0817519 44.0 43.912162 9.080925 25 68 43 0.3031466 -0.4027687 1.0510953
Sistole 4 92 125.614130 23.6161920 123.5 124.209459 20.015100 76 250 174 1.5554208 6.5876421 2.4621582
Diastole 5 92 75.092391 13.7023479 72.0 74.105405 11.860800 46 133 87 1.4693736 4.7046443 1.4285685
Batuk* 6 92 1.869565 0.4965240 2.0 1.878378 0.000000 1 3 2 -0.2678975 0.5962087 0.0517662
Sesak* 7 92 1.402174 0.4930235 1.0 1.378378 0.000000 1 2 1 0.3925280 -1.8658496 0.0514013
klasifikasi* 8 92 1.000000 0.0000000 1.0 1.000000 0.000000 1 1 0 NaN NaN 0.0000000
bin_umur* 9 92 3.021739 0.9136121 3.0 3.067568 1.482600 1 5 4 -0.2986804 -0.8531360 0.0952506
hist(data_anpro$Umur, col = "skyblue3", breaks = 5)

hist(data_anpro$Umur, 
     main="Umur Pasien", 
     xlab="Umur (Tahun)", 
     border="light blue", 
     col="blue", 
     las=1, 
     breaks=10)

ggdensity(data_anpro$Umur, 
          main="Umur Pasien", 
          xlab = "Umur (Tahun)")

# (quantile-quantile) plot
qqnorm(data_anpro$Umur, pch = 1, frame = FALSE)
qqline(data_anpro$Umur, col = "steelblue", lwd = 2)

ggqqplot(data_anpro$Umur)

boxplot(data_anpro$Umur)

Variabel Berat Badan

Berdasarkan hasil uji normalitas yang ditunjukkan pada tabel 10, dapat disimpulkan bahwa data pada variabel berat badan pada setiap kelas penyakit kecuali pneumonia memiliki persebaran data yang normal. Karena nilai Shapiro-Wilk pada kelas penyakit PPOK, tuberculosis, pneumonia dan bronkitis bernilai >0.05. Selain itu, nilai Kolmogorov-Smirnov pada jenis penyakit bronkitis dan pneumonia bernilai >0.05. Persentase koefisien varian pada jenis penyakit PPOK, tuberculosis, pneumonia dan bronkitis <30%. Nilai rasio skewness pada tuberculosis, pneumonia dan bronkitis berada dalam interval -2 dan 2. Nilai rasio kurtosis pada penyakit PPOK, tuberculosis dan bronkitis juga berada dalam interval -2 dan 2. Hal tersebut membuktikan bahwa data pada variabel jenis kelamin pada kelas penyakit PPOK, tuberculosis, pneumonia dan bronkitis dapat dianggap mewakili populasi. Histogram pada gambar 6 menggambarkan persebaran data pada variabel berat badan di setiap jenis penyakit paru. Histogram tersebut merupakan salah satu parameter yang digunakan untuk uji normalitas. Apabila histogram simetris (tidak condong ke kanan atau ke kiri) maka dapat disimpulkan bahwa variabel berat badan memiliki distribusi data yang normal. Dari gambar tersebut dapat disimpulkan bahwa persebaran data pada penyakit ppok, tuberculosis, pneumonia dan bronkitis berdistribusi normal karena grafik yang dihasilkan simetris (tidak condong ke kanan atau ke kiri).

hist(data_anpro$Berat.Badan, col = "skyblue3", breaks = 8)

data_anpro$bin_bb <- cut(data_anpro$Berat.Badan,
                           breaks=c(20,30,40,50,60,70,80,90),
                           labels = c("20-30","30-40","40-50",
                                      "50-60","60-70","70-80","80+"),
                           right = T)
klas_bb <- data_anpro %>%
          select(klasifikasi, bin_bb) %>%
          dplyr::group_by(klasifikasi, bin_bb)%>%
          summarise(n=n()) %>%
  spread(bin_bb, n)
klas_bb  %>%
  kbl(caption = "Klasifikasi Berdasarkan Berat Badan") %>%
  kable_classic_2(full_width = F)
Klasifikasi Berdasarkan Berat Badan
klasifikasi 20-30 30-40 40-50 50-60 60-70 70-80
Bronkitis 10 23 39 16 4 NA
PPOK 21 42 8 1 NA NA
TBC 16 78 120 83 18 1
ggplot(data_anpro %>%
          select(klasifikasi, bin_bb),
       aes(x=bin_bb),
       group_by(bin_bb)) +
  geom_bar() +
  scale_color_ipsum() +
  theme_ipsum_rc() +
  facet_wrap(~klasifikasi, ncol = 2)

shapiro.test(klas_PPOK$Berat.Badan)
## 
##  Shapiro-Wilk normality test
## 
## data:  klas_PPOK$Berat.Badan
## W = 0.95316, p-value = 0.009227
ks.test(klas_PPOK$Berat.Badan, "pnorm", mean(klas_PPOK$Berat.Badan), 
        sd(klas_PPOK$Berat.Badan))
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  klas_PPOK$Berat.Badan
## D = 0.10269, p-value = 0.4335
## alternative hypothesis: two-sided
shapiro.test(klas_TB$Berat.Badan)
## 
##  Shapiro-Wilk normality test
## 
## data:  klas_TB$Berat.Badan
## W = 0.99318, p-value = 0.1616
ks.test(klas_TB$Berat.Badan, "pnorm", mean(klas_TB$Berat.Badan), 
        sd(klas_TB$Berat.Badan))
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  klas_TB$Berat.Badan
## D = 0.031326, p-value = 0.9158
## alternative hypothesis: two-sided
shapiro.test(klas_Bronkitis$Berat.Badan)
## 
##  Shapiro-Wilk normality test
## 
## data:  klas_Bronkitis$Berat.Badan
## W = 0.97673, p-value = 0.09872
ks.test(klas_Bronkitis$Berat.Badan, "pnorm", mean(klas_Bronkitis$Berat.Badan), 
        sd(klas_Bronkitis$Berat.Badan))
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  klas_Bronkitis$Berat.Badan
## D = 0.06807, p-value = 0.7875
## alternative hypothesis: two-sided
Variabel Sistole

Berdasarkan hasil uji normalitas yang ditunjukkan pada tabel 11, dapat disimpulkan bahwa data pada variabel sistole pada setiap kelas penyakit paru memiliki persebaran data yang normal. Karena nilai Kolmogorov-Smirnov dan nilai Shapiro-Wilk pada masing-masing kelas penyakit bernilai >0.05. Selain itu, persentase koefisien varian pada setiap jenis penyakit <30%, nilai rasio kurtosis pada variabel ppok, tuberculosis dan bronkitis berada dalam interval -2 dan 2, serta nilai rasio skewness pada variabel pneumonia berada dalam interval -2 dan 2. Hal tersebut membuktikan bahwa data pada variabel sistole pada setiap kelas penyakit paru dapat dianggap mewakili populasi. Histogram pada gambar 7 menggambarkan persebaran data pada variabel sistole di setiap jenis penyakit paru. Histogram tersebut merupakan salah satu parameter yang digunakan untuk uji normalitas. Apabila histogram simetris (tidak condong ke kanan atau ke kiri) maka dapat disimpulkan bahwa variabel sistole memiliki distribusi data yang normal. Dari gambar tersebut dapat disimpulkan bahwa persebaran data pada masing-masing jenis penyakit berdistribusi normal karena grafik yang dihasilkan simetris (tidak condong ke kanan atau ke kiri).

hist(data_anpro$Sistole, col = "skyblue3", breaks = 10)

data_anpro$bin_sistole <- cut(data_anpro$Sistole,
                           breaks=c(70,90,110,130,150,170,190,210,230,250),
                           labels = c("70-90","90-110","110-130","130-150",
                                      "150-170","170-190","190-210","210-230",
                                      "230-250"),
                           right = T)
klas_sistole <- data_anpro %>%
          select(klasifikasi, bin_sistole) %>%
          dplyr::group_by(klasifikasi, bin_sistole)%>%
          summarise(n=n()) %>%
  spread(bin_sistole, n)
klas_sistole  %>%
  kbl(caption = "Klasifikasi Berdasarkan Sistole") %>%
  kable_classic_2(full_width = F)
Klasifikasi Berdasarkan Sistole
klasifikasi 70-90 90-110 110-130 130-150 150-170 170-190 230-250
Bronkitis 3 24 33 24 6 1 1
PPOK 2 17 29 14 7 3 NA
TBC 22 88 130 47 24 5 NA
ggplot(data_anpro %>%
          select(klasifikasi, bin_sistole),
       aes(x=bin_sistole),
       group_by(bin_sistole)) +
  geom_bar() +
  scale_color_ipsum() +
  theme_ipsum_rc() +
  facet_wrap(~klasifikasi, ncol = 2)

shapiro.test(klas_PPOK$Sistole)
## 
##  Shapiro-Wilk normality test
## 
## data:  klas_PPOK$Sistole
## W = 0.96088, p-value = 0.02476
ks.test(klas_PPOK$Sistole, "pnorm", mean(klas_PPOK$Sistole), 
        sd(klas_PPOK$Sistole))
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  klas_PPOK$Sistole
## D = 0.12355, p-value = 0.2217
## alternative hypothesis: two-sided
shapiro.test(klas_TB$Sistole)
## 
##  Shapiro-Wilk normality test
## 
## data:  klas_TB$Sistole
## W = 0.97716, p-value = 6.36e-05
ks.test(klas_TB$Sistole, "pnorm", mean(klas_TB$Sistole), 
        sd(klas_TB$Sistole))
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  klas_TB$Sistole
## D = 0.076059, p-value = 0.05167
## alternative hypothesis: two-sided
shapiro.test(klas_Bronkitis$Sistole)
## 
##  Shapiro-Wilk normality test
## 
## data:  klas_Bronkitis$Sistole
## W = 0.90143, p-value = 3.792e-06
ks.test(klas_Bronkitis$Sistole, "pnorm", mean(klas_Bronkitis$Sistole), 
        sd(klas_Bronkitis$Sistole))
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  klas_Bronkitis$Sistole
## D = 0.094583, p-value = 0.3829
## alternative hypothesis: two-sided
Variabel Diastole

Berdasarkan hasil uji normalitas yang ditunjukkan pada tabel 12, dapat disimpulkan bahwa data pada variabel jenis kelamin pada setiap kelas penyakit paru memiliki persebaran data yang normal. Karena nilai Kolmogorov-Smirnov dan nilai Shapiro-Wilk pada masing-masing kelas penyakit bernilai >0.05. Selain itu, persentase koefisien varian pada jenis penyakit PPOK, tuberculosis dan bronkitis <30% dan nilai rasio skewness pada jenis kelamin tuberculosis, bronkitis, pneumonia berada dalam interval -2 dan 2. Hal tersebut membuktikan bahwa data pada variabel jenis kelamin pada setiap kelas penyakit paru dapat dianggap mewakili populasi. Histogram pada gambar 8 menggambarkan persebaran data pada variabel diastole di setiap jenis penyakit paru. Histogram tersebut merupakan salah satu parameter yang digunakan untuk uji normalitas. Apabila histogram simetris (tidak condong ke kanan atau ke kiri) maka dapat disimpulkan bahwa variabel diastole memiliki distribusi data yang normal. Dari gambar tersebut dapat disimpulkan bahwa persebaran data pada masing-masing jenis penyakit berdistribusi normal karena grafik yang dihasilkan simetris (tidak condong ke kanan atau ke kiri).

hist(data_anpro$Diastole, col = "skyblue3", breaks = 10)

data_anpro$bin_diastole <- cut(data_anpro$Diastole,
                           breaks=c(30,50,70,90,110,130,150,170,190,210),
                           labels = c("30-50","50-70","70-90","90-110","110-130", 
                                      "130-150", "150-170", "170-190", "190-210"),
                           right = T)
klas_diastole <- data_anpro %>%
          select(klasifikasi, bin_diastole) %>%
          dplyr::group_by(klasifikasi, bin_diastole)%>%
          summarise(n=n()) %>%
  spread(bin_diastole, n)
klas_diastole  %>%
  kbl(caption = "Klasifikasi Berdasarkan Diastole") %>%
  kable_classic_2(full_width = F)
Klasifikasi Berdasarkan Diastole
klasifikasi 30-50 50-70 70-90 90-110 110-130 130-150 150-170 170-190
Bronkitis 2 41 42 5 1 1 NA NA
PPOK 2 33 31 4 NA NA 1 1
TBC 7 150 128 28 3 NA NA NA
ggplot(data_anpro %>%
          select(klasifikasi, bin_diastole),
       aes(x=bin_diastole),
       group_by(bin_diastole)) +
  geom_bar() +
  scale_color_ipsum() +
  theme_ipsum_rc() +
  facet_wrap(~klasifikasi, ncol = 2)

shapiro.test(klas_PPOK$Diastole)
## 
##  Shapiro-Wilk normality test
## 
## data:  klas_PPOK$Diastole
## W = 0.65235, p-value = 8.955e-12
ks.test(klas_PPOK$Diastole, "pnorm", mean(klas_PPOK$Diastole), 
        sd(klas_PPOK$Diastole))
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  klas_PPOK$Diastole
## D = 0.20411, p-value = 0.004962
## alternative hypothesis: two-sided
shapiro.test(klas_TB$Diastole)
## 
##  Shapiro-Wilk normality test
## 
## data:  klas_TB$Diastole
## W = 0.95393, p-value = 2.093e-08
ks.test(klas_TB$Diastole, "pnorm", mean(klas_TB$Diastole), 
        sd(klas_TB$Diastole))
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  klas_TB$Diastole
## D = 0.12636, p-value = 8.296e-05
## alternative hypothesis: two-sided
shapiro.test(klas_Bronkitis$Diastole)
## 
##  Shapiro-Wilk normality test
## 
## data:  klas_Bronkitis$Diastole
## W = 0.88365, p-value = 6.402e-07
ks.test(klas_Bronkitis$Diastole, "pnorm", mean(klas_Bronkitis$Diastole), 
        sd(klas_Bronkitis$Diastole))
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  klas_Bronkitis$Diastole
## D = 0.15359, p-value = 0.02606
## alternative hypothesis: two-sided
Variabel Batuk

Berdasarkan hasil uji normalitas yang ditunjukkan pada tabel 13, dapat disimpulkan bahwa data pada variabel batuk pada setiap kelas penyakit paru memiliki persebaran data yang normal. Karena nilai Kolmogorov-Smirnov dan nilai Shapiro-Wilk pada masing-masing kelas penyakit bernilai >0.05. Selain itu, persentase koefisien varian pada jenis penyakit PPOK, tuberculosis dan bronkitis <30% dan nilai rasio skewness variabel batuk pada jenis kelamin bronkitis dan pneumonia berada dalam interval -2 dan 2. Hal tersebut membuktikan bahwa data pada variabel batuk pada setiap kelas penyakit paru dapat dianggap mewakili populasi. Histogram pada gambar 8 menggambarkan persebaran data pada variabel batuk di setiap jenis penyakit paru. Histogram tersebut merupakan salah satu parameter yang digunakan untuk uji normalitas. Apabila histogram simetris (tidak condong ke kanan atau ke kiri) maka dapat disimpulkan bahwa variabel batuk memiliki distribusi data yang normal. Dari gambar tersebut dapat disimpulkan bahwa persebaran data pada masing-masing jenis penyakit berdistribusi normal karena grafik yang dihasilkan simetris (tidak condong ke kanan atau ke kiri).

klas_batuk <- data_anpro %>%
          select(klasifikasi, Batuk) %>%
          dplyr::group_by(klasifikasi, Batuk)%>%
          summarise(n=n()) %>%
  spread(Batuk, n)
klas_batuk  %>%
  kbl(caption = "Klasifikasi Berdasarkan Batuk") %>%
  kable_classic_2(full_width = F)
Klasifikasi Berdasarkan Batuk
klasifikasi 0 1 2
Bronkitis 18 68 6
PPOK 15 56 1
TBC 43 204 69
ggplot(data_anpro %>%
          select(klasifikasi, Batuk),
       aes(x=Batuk),
       group_by(Batuk)) +
  geom_bar() +
  scale_color_ipsum() +
  theme_ipsum_rc() +
  facet_wrap(~klasifikasi, ncol = 2)

Variabel Sesak

Berdasarkan hasil uji normalitas yang ditunjukkan pada tabel 14, dapat disimpulkan bahwa data pada variabel jenis kelamin pada setiap kelas penyakit paru memiliki persebaran data yang normal. Karena nilai Kolmogorov-Smirnov dan nilai Shapiro-Wilk pada masing-masing kelas penyakit bernilai >0.05. Selain itu, persentase koefisien varian pada jenis penyakit PPOK, tuberculosis dan bronkitis <30% dan nilai rasio skewness variabel sesak pada jenis kelamin bronkitis dan pneumonia berada dalam interval -2 dan 2. Hal tersebut membuktikan bahwa data pada variabel sesak pada setiap kelas penyakit paru dapat dianggap mewakili populasi. Histogram pada gambar 10 menggambarkan persebaran data pada variabel sesak di setiap jenis penyakit paru. Histogram tersebut merupakan salah satu parameter yang digunakan untuk uji normalitas. Apabila histogram simetris (tidak condong ke kanan atau ke kiri) maka dapat disimpulkan bahwa variabel sesak memiliki distribusi data yang normal. Dari gambar tersebut dapat disimpulkan bahwa persebaran data pada masing-masing jenis penyakit berdistribusi normal karena grafik yang dihasilkan simetris (tidak condong ke kanan atau ke kiri).

klas_sesak <- data_anpro %>%
          select(klasifikasi, Sesak) %>%
          dplyr::group_by(klasifikasi, Sesak)%>%
          summarise(n=n()) %>%
  spread(Sesak, n)
klas_sesak  %>%
  kbl(caption = "Klasifikasi Berdasarkan Sesak") %>%
  kable_classic_2(full_width = F)
Klasifikasi Berdasarkan Sesak
klasifikasi 0 1
Bronkitis 55 37
PPOK 16 56
TBC 186 130
ggplot(data_anpro %>%
          select(klasifikasi, Sesak),
       aes(x=Sesak),
       group_by(Sesak)) +
  geom_bar() +
  scale_color_ipsum() +
  theme_ipsum_rc() +
  facet_wrap(~klasifikasi, ncol = 2)

Goodness of fit Test

Setelah melakukan pemeriksaan visual, dilakukan uji formal untuk pemeriksaan sebaran, yaitu dengan Goodness of fit test.

  • H0 = data mengikuti sebaran hipotetik
  • H1 = data tidak mengikuti sebaran hipotetik

Menggunakan dua uji yaitu:

  • Chi-Square Test, didasarkan pada perbandingan frekuensi amatan antara data contoh empirik dengan kondisi jika sebarannya mengikuti fungsi kepekatan/massa peluang tertentu.
  • Kolmogorov-Smirnov Test, didasarkan pada perbandingan antara fungsi sebaran kumulatif empirik dan fungsi sebaram kumulatif hipotetik
Chi-square test of independence
1. Satu Data Sample dengan Chi-square test
chisq.test(table(data_anpro$Jenis.Kelamin))
## 
##  Chi-squared test for given probabilities
## 
## data:  table(data_anpro$Jenis.Kelamin)
## X-squared = 2.7, df = 1, p-value = 0.1003
chisq.test(table(data_anpro$Umur))
## 
##  Chi-squared test for given probabilities
## 
## data:  table(data_anpro$Umur)
## X-squared = 209.79, df = 76, p-value = 1.816e-14
chisq.test(table(data_anpro$Berat.Badan))
## 
##  Chi-squared test for given probabilities
## 
## data:  table(data_anpro$Berat.Badan)
## X-squared = 781.68, df = 145, p-value < 2.2e-16
chisq.test(table(data_anpro$Sistole))
## 
##  Chi-squared test for given probabilities
## 
## data:  table(data_anpro$Sistole)
## X-squared = 932.16, df = 96, p-value < 2.2e-16
chisq.test(table(data_anpro$Diastole))
## 
##  Chi-squared test for given probabilities
## 
## data:  table(data_anpro$Diastole)
## X-squared = 1688.8, df = 73, p-value < 2.2e-16
2. Dua Data Sample dengan Chi-square test
chisq.test(table(data_anpro$Umur, data_anpro$Berat.Badan))
## 
##  Pearson's Chi-squared test
## 
## data:  table(data_anpro$Umur, data_anpro$Berat.Badan)
## X-squared = 11941, df = 11020, p-value = 7.505e-10
# metode 1:
summary(table(data_anpro$Umur, data_anpro$Berat.Badan))
## Number of cases in table: 480 
## Number of factors: 2 
## Test for independence of all factors:
##  Chisq = 11941, df = 11020, p-value = 7.505e-10
##  Chi-squared approximation may be incorrect
# metode 2:
library(vcd)
assocstats(table(data_anpro$Umur, data_anpro$Berat.Badan))
##                      X^2    df   P(> X^2)
## Likelihood Ratio  2501.4 11020 1.0000e+00
## Pearson          11941.1 11020 7.5051e-10
## 
## Phi-Coefficient   : NA 
## Contingency Coeff.: 0.98 
## Cramer's V        : 0.572
# metode 3:
fisher.test(data_anpro$Umur, data_anpro$Berat.Badan, simulate.p.value=T)
## 
##  Fisher's Exact Test for Count Data with simulated p-value (based on
##  2000 replicates)
## 
## data:  data_anpro$Umur and data_anpro$Berat.Badan
## p-value = 0.0004998
## alternative hypothesis: two.sided
Kolmogorov-Smirnov

Pada uji Kolmogorov-Smirnov, hipotesis nol menyatakan data yang diteliti berasal dari populasi yang berdistribusi normal, sedangkan hipotesis alternatif menyatakan data yang diteliti tidak berasal dari populasi yang berdistribusi normal.

ks.test(data_anpro$Umur, "pnorm", mean(data_anpro$Umur), sd(data_anpro$Umur))
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  data_anpro$Umur
## D = 0.05456, p-value = 0.1148
## alternative hypothesis: two-sided
ks.test(data_anpro$Umur, data_anpro$Berat.Badan, alternative = "l")
## 
##  Two-sample Kolmogorov-Smirnov test
## 
## data:  data_anpro$Umur and data_anpro$Berat.Badan
## D^- = 0.34792, p-value < 2.2e-16
## alternative hypothesis: the CDF of x lies below that of y
library(nortest)
lillie.test(data_anpro$Umur)
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  data_anpro$Umur
## D = 0.05456, p-value = 0.001638
Uji Jarque-Bera
library(e1071)
library(tseries)
Variabel Umur
jarque.bera.test(data_anpro$Umur)
## 
##  Jarque Bera Test
## 
## data:  data_anpro$Umur
## X-squared = 13.983, df = 2, p-value = 0.0009197
Variabel Berat Badan
jarque.bera.test(data_anpro$Berat.Badan)
## 
##  Jarque Bera Test
## 
## data:  data_anpro$Berat.Badan
## X-squared = 10.078, df = 2, p-value = 0.006479
Variabel Sistole
jarque.bera.test(data_anpro$Sistole)
## 
##  Jarque Bera Test
## 
## data:  data_anpro$Sistole
## X-squared = 144.99, df = 2, p-value < 2.2e-16
Variabel Diastole
jarque.bera.test(data_anpro$Diastole)
## 
##  Jarque Bera Test
## 
## data:  data_anpro$Diastole
## X-squared = 2481.9, df = 2, p-value < 2.2e-16

4.1.2 Uji Homogenitas

Uji Kesaman Varians Populasi dengan Uji Levene’s

  • H0 = tidak terdapat perbedaan varians di antara populasi
  • H1 = terdapat paling tidak sepasang varians populasi yang berbeda
Menghitung nilai kritis 𝐹.

Berikut rumus untuk menghitung nilai derajat bebas pembilang dan derajat bebas penyebut

  • Derajat bebas pembilang = k-1

  • Derajat bebas penyebut = N-k

  • Jika L <= nilai kritis F, maka H0 diterima dan H1 ditolak

  • Jika L > nilai kritis F, maka H0 ditolak dan H1 diterima

qf(.95, df1=3, df2=477)
## [1] 2.623598
Variabel Umur
library(car)
leveneTest(data_anpro$Umur, data_anpro$klasifikasi)
Variabel Berat Badan
leveneTest(data_anpro$Berat.Badan, data_anpro$klasifikasi)
Variabel Sistole
leveneTest(data_anpro$Sistole, data_anpro$klasifikasi)
Variabel Diastole
leveneTest(data_anpro$Diastole, data_anpro$klasifikasi)

Pengambilan keputusan terhadap hipotesis juga dapat dilakukan dengan membandingkan nilai probabilitas dari uji Levene terhadap tingkat signifikansi 𝛼 (significance level).

  • Jika nilai probabilitasnya >= tingkat signifikansi, maka H0 diterima dan H1 ditolak
  • Jika nilai probabilitasnya < tingkat signifikansi, maka H0 ditolak dan H1 diterima
library(lawstat)

levene.test(data_anpro[,"Berat.Badan"], data_anpro[,"Umur"], 
            data_anpro[,"Sistole"], data_anpro[,"Diastole"],
            location="median", correction.method="zero.correction")
## 
##  Modified robust Brown-Forsythe Levene-type test based on the absolute
##  deviations from the median with modified structural zero removal
##  method and correction factor
## 
## data:  data_anpro[, "Berat.Badan"]
## Test Statistic = 1.2261, p-value = 0.1256
levene.test(data_anpro[,"Umur"], data_anpro[,"Berat.Badan"], 
            data_anpro[,"Sistole"], data_anpro[,"Diastole"],
            location="mean", correction.method="zero.correction")
## 
##  Classical Levene's test based on the absolute deviations from the mean
##  ( zero.correction not applied because the location is not set to
##  median )
## 
## data:  data_anpro[, "Umur"]
## Test Statistic = 2.1386, p-value = 8.684e-09
library(doBy)
summaryBy(klasifikasi ~ Umur + Berat.Badan + Sistole + Diastole,
          data=data_anpro, FUN=function(x) {
            c(mean(x), var(x), sum(x))}
          )

4.1.3 Analysis of Variances (Uji F)

Uji ANOVA (Analysis of Variance) adalah salah satu uji parametrik yang dapat digunakan untuk membandingkan mean dari tiga atau lebih kelompok. Asumsi-asumsi yang harus dipenuhi pada Uji ANOVA:

  1. Data pada setiap kelompok berdistribusi normal
  2. Setiap kelompok observasi harus saling bebas
  3. Nilai varians pada setiap kelompok harus sama atau homogen
var01 <- c(rep("Jenis.Kelamin",480), rep("Umur", 480),
           rep("Berat.Badan",480), rep("Sistole",480),
           rep("Diastole",480), rep("Batuk",480),
           rep("Sesak", 480))

var02 <- c(data_anpro$Jenis.Kelamin, data_anpro$Umur,
           data_anpro$Berat.Badan, data_anpro$Sistole, 
           data_anpro$Diastole, data_anpro$Batuk,
           data_anpro$Sesak)

df <- data.frame(var01, var02)
library(FSA)
Summarize(var02 ~ var01, data=df)
kruskal.test(var02 ~ var01, data=df)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  var02 by var01
## Kruskal-Wallis chi-squared = 3035.6, df = 6, p-value < 2.2e-16
data_anpro_aov <- aov(var02 ~ var01,df)
summary(data_anpro_aov)
##               Df  Sum Sq Mean Sq F value Pr(>F)    
## var01          6 5998259  999710    6562 <2e-16 ***
## Residuals   3353  510853     152                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Uji Tukey HSD
library(multcomp)
tukey_output <- TukeyHSD(data_anpro_aov)

#Print tukey_output
tukey_output
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = var02 ~ var01, data = df)
## 
## $var01
##                                    diff        lwr        upr     p adj
## Berat.Badan-Batuk          41.693270833  39.342747  44.043794 0.0000000
## Diastole-Batuk             72.868750000  70.518227  75.219273 0.0000000
## Jenis.Kelamin-Batuk        -0.537500000  -2.888023   1.813023 0.9939624
## Sesak-Batuk                -0.535416667  -2.885940   1.815107 0.9940884
## Sistole-Batuk             120.129166667 117.778643 122.479690 0.0000000
## Umur-Batuk                 50.410416667  48.059893  52.760940 0.0000000
## Diastole-Berat.Badan       31.175479167  28.824956  33.526003 0.0000000
## Jenis.Kelamin-Berat.Badan -42.230770833 -44.581294 -39.880247 0.0000000
## Sesak-Berat.Badan         -42.228687500 -44.579211 -39.878164 0.0000000
## Sistole-Berat.Badan        78.435895833  76.085372  80.786419 0.0000000
## Umur-Berat.Badan            8.717145833   6.366622  11.067669 0.0000000
## Jenis.Kelamin-Diastole    -73.406250000 -75.756773 -71.055727 0.0000000
## Sesak-Diastole            -73.404166667 -75.754690 -71.053643 0.0000000
## Sistole-Diastole           47.260416667  44.909893  49.610940 0.0000000
## Umur-Diastole             -22.458333333 -24.808857 -20.107810 0.0000000
## Sesak-Jenis.Kelamin         0.002083333  -2.348440   2.352607 1.0000000
## Sistole-Jenis.Kelamin     120.666666667 118.316143 123.017190 0.0000000
## Umur-Jenis.Kelamin         50.947916667  48.597393  53.298440 0.0000000
## Sistole-Sesak             120.664583333 118.314060 123.015107 0.0000000
## Umur-Sesak                 50.945833333  48.595310  53.296357 0.0000000
## Umur-Sistole              -69.718750000 -72.069273 -67.368227 0.0000000

4.1.4 Uji Korelasi

data_anpro_cor = data_anpro[,2:5]
library(psych)
library(pander)
corr.df <- cor(data_anpro_cor)
corr.df %>% pander()
  Umur Berat.Badan Sistole Diastole
Umur 1 -0.2205 0.2451 0.1039
Berat.Badan -0.2205 1 0.02341 0.05551
Sistole 0.2451 0.02341 1 0.701
Diastole 0.1039 0.05551 0.701 1
cor_pearson <- corr.test(data_anpro_cor,
                      use = "pairwise",
                      method="pearson",
                      adjust="holm",
                      alpha=.05,
                      ci=TRUE,
                      minlength=5)
cor_pearson
## Call:corr.test(x = data_anpro_cor, use = "pairwise", method = "pearson", 
##     adjust = "holm", alpha = 0.05, ci = TRUE, minlength = 5)
## Correlation matrix 
##              Umur Berat.Badan Sistole Diastole
## Umur         1.00       -0.22    0.25     0.10
## Berat.Badan -0.22        1.00    0.02     0.06
## Sistole      0.25        0.02    1.00     0.70
## Diastole     0.10        0.06    0.70     1.00
## Sample Size 
## [1] 480
## Probability values (Entries above the diagonal are adjusted for multiple tests.) 
##             Umur Berat.Badan Sistole Diastole
## Umur        0.00        0.00    0.00     0.07
## Berat.Badan 0.00        0.00    0.61     0.45
## Sistole     0.00        0.61    0.00     0.00
## Diastole    0.02        0.22    0.00     0.00
## 
##  To see confidence intervals of the correlations, print with the short=FALSE option
cor_spearman <- corr.test(data_anpro_cor,
                      use = "pairwise",
                      method="spearman",
                      adjust="holm",
                      alpha=.05,
                      ci=TRUE,
                      minlength=5)

cor_spearman
## Call:corr.test(x = data_anpro_cor, use = "pairwise", method = "spearman", 
##     adjust = "holm", alpha = 0.05, ci = TRUE, minlength = 5)
## Correlation matrix 
##              Umur Berat.Badan Sistole Diastole
## Umur         1.00       -0.25    0.26     0.09
## Berat.Badan -0.25        1.00    0.01     0.05
## Sistole      0.26        0.01    1.00     0.75
## Diastole     0.09        0.05    0.75     1.00
## Sample Size 
## [1] 480
## Probability values (Entries above the diagonal are adjusted for multiple tests.) 
##             Umur Berat.Badan Sistole Diastole
## Umur        0.00        0.00    0.00     0.13
## Berat.Badan 0.00        0.00    0.84     0.64
## Sistole     0.00        0.84    0.00     0.00
## Diastole    0.04        0.32    0.00     0.00
## 
##  To see confidence intervals of the correlations, print with the short=FALSE option

4.1.5 Karakteristik Data

Data Partition

set.seed(123)
ind <- sample (2, nrow(data_anpro), 
               replace = T, 
               prob = c(0.75, 0.25))
train <- data_anpro[ind==1, ]
tes <- data_anpro[ind==2, ]
table(ind)
## ind
##   1   2 
## 367 113