Syntax berikut ini merupakan bagian dari tugas akhir mata kuliah pemodelan klasifikasi, laporan tugas ini dapat dilihat pada link:
https://drive.google.com/file/d/10g0S8brXhjhCV-WBXCYz_cgcjYCSP-qc/view?usp=share_link
#install.packages( "C:/Users/Asus/Downloads/DMwR_0.4.1.tar.gz", repos=NULL, type="source" )
#install.packages("rJava")
#install.packages( "C:/Users/Asus/Downloads/extraTrees_1.0.5.tar.gz", repos=NULL, type="source" )
#install.packages("writexl")
#install.packages("remotes")
#remotes::install_github("mananshah99/xlsxboost")
#install.packages("openxlsx")
library(dplyr) #glimpse
##
## 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(tidymodels) #splitting
## -- Attaching packages -------------------------------------- tidymodels 1.0.0 --
## v broom 1.0.0 v rsample 1.1.0
## v dials 1.0.0 v tibble 3.1.8
## v ggplot2 3.4.0 v tidyr 1.2.0
## v infer 1.0.3 v tune 1.0.0
## v modeldata 1.0.0 v workflows 1.0.0
## v parsnip 1.0.1 v workflowsets 1.0.0
## v purrr 0.3.4 v yardstick 1.0.0
## v recipes 1.0.1
## -- Conflicts ----------------------------------------- tidymodels_conflicts() --
## x purrr::discard() masks scales::discard()
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
## x recipes::step() masks stats::step()
## * Use suppressPackageStartupMessages() to eliminate package startup messages
library(MASS)
##
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
##
## select
library(rcompanion) #cramer
##
## Attaching package: 'rcompanion'
## The following object is masked from 'package:yardstick':
##
## accuracy
library(caret) #data imbalanced
## Loading required package: lattice
##
## Attaching package: 'caret'
## The following objects are masked from 'package:yardstick':
##
## precision, recall, sensitivity, specificity
## The following object is masked from 'package:purrr':
##
## lift
library(DMwR) #smote
## Loading required package: grid
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
##
## Attaching package: 'DMwR'
## The following object is masked from 'package:broom':
##
## bootstrap
library(rJava)
library(extraTrees)
library("writexl")
library(openxlsx)
library("xlsx")
##
## Attaching package: 'xlsx'
## The following objects are masked from 'package:openxlsx':
##
## createWorkbook, loadWorkbook, read.xlsx, saveWorkbook, write.xlsx
library(tidyverse)
## -- Attaching packages --------------------------------------- tidyverse 1.3.2 --
## v readr 2.1.2 v forcats 0.5.1
## v stringr 1.4.0
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x DMwR::bootstrap() masks broom::bootstrap()
## x readr::col_factor() masks scales::col_factor()
## x purrr::discard() masks scales::discard()
## x dplyr::filter() masks stats::filter()
## x stringr::fixed() masks recipes::fixed()
## x dplyr::lag() masks stats::lag()
## x caret::lift() masks purrr::lift()
## x MASS::select() masks dplyr::select()
## x readr::spec() masks yardstick::spec()
library(tidymodels)
library(themis)
library(embed)
library(DataExplorer)
library(ggpubr)
#library(DALEXtra)
data_TA <- read.csv("D:/Download_14Des/Tugas Akhir -- data soal.xlsx - FIES_JabarMaret2020 (1).csv", header=TRUE, stringsAsFactors = TRUE)
data_TA <- data_TA[,-1]
glimpse(data_TA)
## Rows: 19,902
## Columns: 25
## $ Status_Rawan <fct> Tidak_Rawan, Tidak_Rawan, Tidak_Rawan, R~
## $ Pendidikan_KRT <fct> SD, Perguruan Tinggi, SD, SMP, SMA, SMP,~
## $ KRT_Rawan <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ Jumlah_Penabung <int> 2, 3, 0, 1, 3, 2, 1, 4, 3, 3, 3, 3, 5, 1~
## $ Jumlah_Buta_Huruf <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0~
## $ Penerima_Transfer <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ Aset_Tanah <fct> Ya, Ya, Ya, Tidak, Tidak, Ya, Ya, Ya, Ya~
## $ Akses_Internet <fct> Ya, Ya, Tidak, Ya, Ya, Ya, Tidak, Ya, Ya~
## $ Sakit_Namun_Tidak_Rawat_Jalan <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ PKH <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ KKS <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ BPNT <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ Bantuan_Pemda <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ BPJS <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ Jamkesda <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ KIP_PIP <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ Jenis_Atap <fct> Genteng, Genteng, Genteng, Asbes, Genten~
## $ Jenis_Lantai <fct> Marmer/Keramik, Marmer/Keramik, Marmer/K~
## $ Jenis_Dinding <fct> Tembok/Plesteran/anyaman, Tembok/Plester~
## $ Luas_Lantai <int> 60, 170, 54, 54, 72, 60, 73, 70, 60, 60,~
## $ Listrik <fct> Listrik, Listrik, Listrik, Listrik, List~
## $ Bahan_Bakar_Masak <fct> LPG 3Kg, LPG 3Kg, LPG 3Kg, LPG 3Kg, LPG ~
## $ Sumber_Air_Minum <fct> Lainnya, Air kemasan/isi Ulang, Lainnya,~
## $ Air_Minum_Layak <fct> Tidak, Tidak, Tidak, Tidak, Ya, Tidak, T~
## $ Sanitasi_Layak <fct> Ya, Ya, Tidak, Ya, Tidak, Ya, Tidak, Ya,~
row = nrow(data_TA)
for (i in 1:row){
if(data_TA[i,5]==0){
data_TA[i,5]="Tidak ada"
}
else{
data_TA[i,5]="Ada"
}
}
data_TA <- data_TA %>% mutate(
Pendidikan_KRT = factor(Pendidikan_KRT, ordered = TRUE,
levels = c("Tidak Sekolah",
"Tidak Tamat SD",
"SD",
"SMP",
"SMA",
"Perguruan Tinggi")),
Jenis_Atap = factor(Jenis_Atap, ordered = TRUE,
levels = c("Asbes",
"Seng",
"Beton",
"Genteng",
"Lainnya")),
Jenis_Lantai = factor(Jenis_Lantai, ordered = TRUE,
levels = c("Ubin/tegel/teraso",
"Semen/bata merah",
"Parket/vinil/karpet",
"Marmer/Keramik",
"Lainnya")),
Jenis_Dinding = factor(Jenis_Dinding, ordered = TRUE,
levels = c("Kayu/Papan",
"Tembok/Plesteran/anyaman",
"Lainnya")),
Listrik = factor(Listrik, ordered = TRUE,
levels = c("Non Listrik",
"Listrik")),
Bahan_Bakar_Masak = factor(Bahan_Bakar_Masak, ordered = TRUE,
levels = c("Tidak Memasak",
"Kayu Bakar",
"Minyak tanah",
"LPG 3Kg",
"LPG 12kg/5.5kg/Bluegaz",
"Lainnya")),
Sumber_Air_Minum = factor(Sumber_Air_Minum, ordered = TRUE,
levels = c("Sumur bor/pompa",
"Leding",
"Air kemasan/isi Ulang",
"Lainnya")),
Jumlah_Buta_Huruf = factor(Jumlah_Buta_Huruf)
)
summary(data_TA)
## Status_Rawan Pendidikan_KRT KRT_Rawan Jumlah_Penabung
## Rawan : 4322 Tidak Sekolah : 467 Tidak:18924 Min. :0.000
## Tidak_Rawan:15580 Tidak Tamat SD :2616 Ya : 978 1st Qu.:0.000
## SD :7246 Median :1.000
## SMP :2819 Mean :1.065
## SMA :5051 3rd Qu.:2.000
## Perguruan Tinggi:1703 Max. :9.000
## Jumlah_Buta_Huruf Penerima_Transfer Aset_Tanah Akses_Internet
## Ada : 576 Tidak:18346 Tidak: 6203 Tidak: 8623
## Tidak ada:19326 Ya : 1556 Ya :13699 Ya :11279
##
##
##
##
## Sakit_Namun_Tidak_Rawat_Jalan PKH KKS BPNT
## Tidak:19858 Tidak:17570 Tidak:18267 Tidak:16857
## Ya : 44 Ya : 2332 Ya : 1635 Ya : 3045
##
##
##
##
## Bantuan_Pemda BPJS Jamkesda KIP_PIP Jenis_Atap
## Tidak:19309 Tidak:13650 Tidak:18419 Tidak:19316 Asbes : 1946
## Ya : 593 Ya : 6252 Ya : 1483 Ya : 586 Seng : 173
## Beton : 523
## Genteng:16920
## Lainnya: 340
##
## Jenis_Lantai Jenis_Dinding Luas_Lantai
## Ubin/tegel/teraso : 1658 Kayu/Papan : 741 Min. : 3.0
## Semen/bata merah : 1005 Tembok/Plesteran/anyaman:17611 1st Qu.: 42.0
## Parket/vinil/karpet: 85 Lainnya : 1550 Median : 60.0
## Marmer/Keramik :14860 Mean : 72.1
## Lainnya : 2294 3rd Qu.: 90.0
## Max. :500.0
## Listrik Bahan_Bakar_Masak
## Non Listrik: 13 Tidak Memasak : 323
## Listrik :19889 Kayu Bakar : 1836
## Minyak tanah : 40
## LPG 3Kg :16250
## LPG 12kg/5.5kg/Bluegaz: 1066
## Lainnya : 387
## Sumber_Air_Minum Air_Minum_Layak Sanitasi_Layak
## Sumur bor/pompa :4444 Tidak:13691 Tidak: 6198
## Leding :1474 Ya : 6211 Ya :13704
## Air kemasan/isi Ulang:8768
## Lainnya :5216
##
##
ggplot(data = data_TA, aes(fill = Status_Rawan))+
geom_bar(aes(x = Status_Rawan))+
xlab("")+
ylab("Rumah Tangga")+
scale_y_continuous(expand = c(0,0))+
scale_x_discrete(expand = c(0,0))+
theme(legend.position = "none",
legend.title = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.background = element_blank())
ggplot(data_TA,aes(x=Pendidikan_KRT,fill=Status_Rawan))+
geom_bar(position="fill")+
geom_text(aes(label=scales::percent(..count../sum(..count..))),
stat='count',position=position_fill(vjust=0.5))
## Warning: The dot-dot notation (`..count..`) was deprecated in ggplot2 3.4.0.
## i Please use `after_stat(count)` instead.
ggplot(data_TA,aes(x=KRT_Rawan,fill=Status_Rawan))+
geom_bar(position="fill")+
geom_text(aes(label=scales::percent(..count../sum(..count..))),
stat='count',position=position_fill(vjust=0.5))
ggplot(data_TA,aes(x=Jumlah_Buta_Huruf,fill=Status_Rawan))+
geom_bar(position="fill")+
geom_text(aes(label=scales::percent(..count../sum(..count..))),
stat='count',position=position_fill(vjust=0.5))
ggplot(data_TA,aes(x=Penerima_Transfer,fill=Status_Rawan))+
geom_bar(position="fill")+
geom_text(aes(label=scales::percent(..count../sum(..count..))),
stat='count',position=position_fill(vjust=0.5))
ggplot(data_TA,aes(x=Aset_Tanah,fill=Status_Rawan))+
geom_bar(position="fill")+
geom_text(aes(label=scales::percent(..count../sum(..count..))),
stat='count',position=position_fill(vjust=0.5))
ggplot(data_TA,aes(x=Akses_Internet,fill=Status_Rawan))+
geom_bar(position="fill")+
geom_text(aes(label=scales::percent(..count../sum(..count..))),
stat='count',position=position_fill(vjust=0.5))
ggplot(data_TA,aes(x=Sakit_Namun_Tidak_Rawat_Jalan,fill=Status_Rawan))+
geom_bar(position="fill")+
geom_text(aes(label=scales::percent(..count../sum(..count..))),
stat='count',position=position_fill(vjust=0.5))
ggplot(data_TA,aes(x=PKH,fill=Status_Rawan))+
geom_bar(position="fill")+
geom_text(aes(label=scales::percent(..count../sum(..count..))),
stat='count',position=position_fill(vjust=0.5))
ggplot(data_TA,aes(x=KKS,fill=Status_Rawan))+
geom_bar(position="fill")+
geom_text(aes(label=scales::percent(..count../sum(..count..))),
stat='count',position=position_fill(vjust=0.5))
ggplot(data_TA,aes(x=BPNT,fill=Status_Rawan))+
geom_bar(position="fill")+
geom_text(aes(label=scales::percent(..count../sum(..count..))),
stat='count',position=position_fill(vjust=0.5))
ggplot(data_TA,aes(x=Bantuan_Pemda,fill=Status_Rawan))+
geom_bar(position="fill")+
geom_text(aes(label=scales::percent(..count../sum(..count..))),
stat='count',position=position_fill(vjust=0.5))
ggplot(data_TA,aes(x=BPJS,fill=Status_Rawan))+
geom_bar(position="fill")+
geom_text(aes(label=scales::percent(..count../sum(..count..))),
stat='count',position=position_fill(vjust=0.5))
ggplot(data_TA,aes(x=Jamkesda,fill=Status_Rawan))+
geom_bar(position="fill")+
geom_text(aes(label=scales::percent(..count../sum(..count..))),
stat='count',position=position_fill(vjust=0.5))
ggplot(data_TA,aes(x=KIP_PIP,fill=Status_Rawan))+
geom_bar(position="fill")+
geom_text(aes(label=scales::percent(..count../sum(..count..))),
stat='count',position=position_fill(vjust=0.5))
ggplot(data_TA,aes(x=Jenis_Atap,fill=Status_Rawan))+
geom_bar(position="fill")+
geom_text(aes(label=scales::percent(..count../sum(..count..))),
stat='count',position=position_fill(vjust=0.5))
ggplot(data_TA,aes(x=Jenis_Lantai,fill=Status_Rawan))+
geom_bar(position="fill")+
geom_text(aes(label=scales::percent(..count../sum(..count..))),
stat='count',position=position_fill(vjust=0.5))
ggplot(data_TA,aes(x=Jenis_Dinding,fill=Status_Rawan))+
geom_bar(position="fill")+
geom_text(aes(label=scales::percent(..count../sum(..count..))),
stat='count',position=position_fill(vjust=0.5))
ggplot(data_TA,aes(x=Listrik,fill=Status_Rawan))+
geom_bar(position="fill")+
geom_text(aes(label=scales::percent(..count../sum(..count..))),
stat='count',position=position_fill(vjust=0.5))
ggplot(data_TA,aes(x=Bahan_Bakar_Masak,fill=Status_Rawan))+
geom_bar(position="fill")+
geom_text(aes(label=scales::percent(..count../sum(..count..))),
stat='count',position=position_fill(vjust=0.5))
ggplot(data_TA,aes(x=Sumber_Air_Minum,fill=Status_Rawan))+
geom_bar(position="fill")+
geom_text(aes(label=scales::percent(..count../sum(..count..))),
stat='count',position=position_fill(vjust=0.5))
ggplot(data_TA,aes(x=Air_Minum_Layak,fill=Status_Rawan))+
geom_bar(position="fill")+
geom_text(aes(label=scales::percent(..count../sum(..count..))),
stat='count',position=position_fill(vjust=0.5))
ggplot(data_TA,aes(x=Sanitasi_Layak,fill=Status_Rawan))+
geom_bar(position="fill")+
geom_text(aes(label=scales::percent(..count../sum(..count..))),
stat='count',position=position_fill(vjust=0.5))
set.seed(012)
holdout_split <- initial_split(data_TA, prop= 0.7)
train_TA <- training(holdout_split)
test_TA <- testing(holdout_split)
train_TA %>% count(Status_Rawan)
## Status_Rawan n
## 1 Rawan 3051
## 2 Tidak_Rawan 10880
test_TA %>% count(Status_Rawan)
## Status_Rawan n
## 1 Rawan 1271
## 2 Tidak_Rawan 4700
thislist <- list()
kolom <- c(3,5:16,24:25)
k = 1
for(i in kolom){
thislist <- append(thislist,cramerV(train_TA[,1], train_TA[,i], bias.correct = FALSE)[[1]])
names(thislist)[[k]] <- names(data_TA)[i]
k = k+1
}
thislist
## $KRT_Rawan
## [1] 0.04758
##
## $Jumlah_Buta_Huruf
## [1] 0.05757
##
## $Penerima_Transfer
## [1] 0.06831
##
## $Aset_Tanah
## [1] 0.08731
##
## $Akses_Internet
## [1] 0.1412
##
## $Sakit_Namun_Tidak_Rawat_Jalan
## [1] 0.03981
##
## $PKH
## [1] 0.1148
##
## $KKS
## [1] 0.1042
##
## $BPNT
## [1] 0.1354
##
## $Bantuan_Pemda
## [1] 0.02411
##
## $BPJS
## [1] 0.1405
##
## $Jamkesda
## [1] 0.007726
##
## $KIP_PIP
## [1] 0.0613
##
## $Air_Minum_Layak
## [1] 0.001403
##
## $Sanitasi_Layak
## [1] 0.08433
thislist_2 <- list()
kolom_2 <- c(2,17:19,21:23)
k = 1
for(i in kolom_2){
thislist_2 <- append(thislist_2,cor.test(as.numeric(train_TA[,1]), as.numeric(train_TA[,i]),method="kendall")$estimate[[1]])
names(thislist_2)[[k]] <- names(data_TA)[i]
k = k+1
}
thislist_2
## $Pendidikan_KRT
## [1] 0.1741626
##
## $Jenis_Atap
## [1] -0.00226241
##
## $Jenis_Lantai
## [1] -0.01950819
##
## $Jenis_Dinding
## [1] -0.05673541
##
## $Listrik
## [1] 0.02069015
##
## $Bahan_Bakar_Masak
## [1] 0.1362149
##
## $Sumber_Air_Minum
## [1] -0.05465374
Buang 5 peubah penjelas yang asosiasinya lemah, yaitu 1. kepemilikan jamkesda (15) 2. air minum layak (24) 3. jenis atap (17) 4. jenis lantai (18) 5. sumber penerangan rumah (21)
train_TA <- train_TA[,-c(15,17,18,21,24)]
glimpse(train_TA)
## Rows: 13,931
## Columns: 20
## $ Status_Rawan <fct> Tidak_Rawan, Tidak_Rawan, Tidak_Rawan, T~
## $ Pendidikan_KRT <ord> SMP, Tidak Tamat SD, SMA, Tidak Tamat SD~
## $ KRT_Rawan <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ Jumlah_Penabung <int> 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 2, 3, 1~
## $ Jumlah_Buta_Huruf <fct> Tidak ada, Tidak ada, Tidak ada, Tidak a~
## $ Penerima_Transfer <fct> Tidak, Ya, Tidak, Tidak, Tidak, Tidak, T~
## $ Aset_Tanah <fct> Tidak, Ya, Ya, Ya, Tidak, Tidak, Ya, Ya,~
## $ Akses_Internet <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Ya, T~
## $ Sakit_Namun_Tidak_Rawat_Jalan <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ PKH <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ KKS <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ BPNT <fct> Tidak, Tidak, Tidak, Ya, Tidak, Tidak, T~
## $ Bantuan_Pemda <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ BPJS <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ KIP_PIP <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ Jenis_Dinding <ord> Tembok/Plesteran/anyaman, Tembok/Plester~
## $ Luas_Lantai <int> 40, 25, 137, 50, 35, 30, 42, 25, 98, 42,~
## $ Bahan_Bakar_Masak <ord> LPG 3Kg, Tidak Memasak, LPG 12kg/5.5kg/B~
## $ Sumber_Air_Minum <ord> Air kemasan/isi Ulang, Lainnya, Sumur bo~
## $ Sanitasi_Layak <fct> Tidak, Ya, Ya, Tidak, Ya, Ya, Ya, Tidak,~
test_TA <- test_TA[,-c(15,17,18,21,24)]
glimpse(test_TA)
## Rows: 5,971
## Columns: 20
## $ Status_Rawan <fct> Tidak_Rawan, Rawan, Tidak_Rawan, Tidak_R~
## $ Pendidikan_KRT <ord> Perguruan Tinggi, Tidak Tamat SD, SMA, S~
## $ KRT_Rawan <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ Jumlah_Penabung <int> 3, 1, 5, 2, 4, 0, 2, 2, 1, 2, 2, 4, 2, 4~
## $ Jumlah_Buta_Huruf <fct> Tidak ada, Tidak ada, Tidak ada, Tidak a~
## $ Penerima_Transfer <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ Aset_Tanah <fct> Ya, Ya, Ya, Tidak, Ya, Tidak, Ya, Tidak,~
## $ Akses_Internet <fct> Ya, Tidak, Ya, Ya, Ya, Ya, Ya, Ya, Tidak~
## $ Sakit_Namun_Tidak_Rawat_Jalan <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ PKH <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ KKS <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ BPNT <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ Bantuan_Pemda <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ BPJS <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Ya, T~
## $ KIP_PIP <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ Jenis_Dinding <ord> Tembok/Plesteran/anyaman, Tembok/Plester~
## $ Luas_Lantai <int> 170, 73, 60, 60, 60, 42, 84, 90, 140, 90~
## $ Bahan_Bakar_Masak <ord> LPG 3Kg, LPG 3Kg, LPG 3Kg, LPG 3Kg, LPG ~
## $ Sumber_Air_Minum <ord> Air kemasan/isi Ulang, Lainnya, Air kema~
## $ Sanitasi_Layak <fct> Ya, Tidak, Ya, Ya, Ya, Ya, Ya, Ya, Ya, Y~
set.seed(012)
down_train <- downSample(x = train_TA[, -1],y
= train_TA$Status_Rawan)
colnames(down_train)[colnames(down_train)=="Class"] = "Status_Rawan"
glimpse(down_train)
## Rows: 6,102
## Columns: 20
## $ Pendidikan_KRT <ord> SMP, Tidak Tamat SD, SMP, SD, Tidak Seko~
## $ KRT_Rawan <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ Jumlah_Penabung <int> 0, 0, 0, 0, 0, 2, 2, 0, 0, 1, 1, 0, 0, 0~
## $ Jumlah_Buta_Huruf <fct> Tidak ada, Ada, Tidak ada, Tidak ada, Ti~
## $ Penerima_Transfer <fct> Tidak, Tidak, Tidak, Ya, Ya, Tidak, Tida~
## $ Aset_Tanah <fct> Ya, Tidak, Tidak, Ya, Ya, Tidak, Ya, Ya,~
## $ Akses_Internet <fct> Ya, Tidak, Ya, Tidak, Tidak, Ya, Tidak, ~
## $ Sakit_Namun_Tidak_Rawat_Jalan <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ PKH <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ KKS <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ BPNT <fct> Ya, Ya, Tidak, Tidak, Tidak, Tidak, Tida~
## $ Bantuan_Pemda <fct> Tidak, Ya, Tidak, Tidak, Tidak, Tidak, T~
## $ BPJS <fct> Ya, Tidak, Ya, Tidak, Tidak, Tidak, Ya, ~
## $ KIP_PIP <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ Jenis_Dinding <ord> Lainnya, Lainnya, Tembok/Plesteran/anyam~
## $ Luas_Lantai <int> 56, 45, 65, 54, 33, 150, 120, 48, 96, 60~
## $ Bahan_Bakar_Masak <ord> Kayu Bakar, Kayu Bakar, LPG 3Kg, LPG 3Kg~
## $ Sumber_Air_Minum <ord> Lainnya, Lainnya, Lainnya, Lainnya, Air ~
## $ Sanitasi_Layak <fct> Tidak, Tidak, Tidak, Ya, Tidak, Ya, Tida~
## $ Status_Rawan <fct> Rawan, Rawan, Rawan, Rawan, Rawan, Rawan~
table(train_TA$Status_Rawan)
##
## Rawan Tidak_Rawan
## 3051 10880
table(down_train$Status_Rawan)
##
## Rawan Tidak_Rawan
## 3051 3051
set.seed(012)
up_train <- upSample(x = train_TA[, -1],y
= train_TA$Status_Rawan)
colnames(up_train)[colnames(up_train)=="Class"] = "Status_Rawan"
glimpse(up_train)
## Rows: 21,760
## Columns: 20
## $ Pendidikan_KRT <ord> SD, SD, SMP, SD, SMP, SMA, SD, SD, Tidak~
## $ KRT_Rawan <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ Jumlah_Penabung <int> 0, 1, 2, 0, 0, 1, 1, 1, 0, 2, 0, 3, 1, 0~
## $ Jumlah_Buta_Huruf <fct> Tidak ada, Tidak ada, Tidak ada, Ada, Ti~
## $ Penerima_Transfer <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ Aset_Tanah <fct> Tidak, Ya, Ya, Tidak, Tidak, Tidak, Tida~
## $ Akses_Internet <fct> Tidak, Tidak, Ya, Ya, Tidak, Ya, Tidak, ~
## $ Sakit_Namun_Tidak_Rawat_Jalan <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ PKH <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ KKS <fct> Tidak, Tidak, Ya, Tidak, Tidak, Tidak, T~
## $ BPNT <fct> Tidak, Tidak, Ya, Tidak, Tidak, Tidak, T~
## $ Bantuan_Pemda <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ BPJS <fct> Tidak, Tidak, Ya, Tidak, Ya, Ya, Ya, Tid~
## $ KIP_PIP <fct> Tidak, Tidak, Ya, Tidak, Tidak, Tidak, T~
## $ Jenis_Dinding <ord> Kayu/Papan, Tembok/Plesteran/anyaman, Te~
## $ Luas_Lantai <int> 35, 45, 55, 56, 9, 35, 24, 45, 54, 58, 7~
## $ Bahan_Bakar_Masak <ord> Lainnya, LPG 3Kg, LPG 3Kg, LPG 3Kg, LPG ~
## $ Sumber_Air_Minum <ord> Sumur bor/pompa, Lainnya, Sumur bor/pomp~
## $ Sanitasi_Layak <fct> Ya, Ya, Ya, Ya, Tidak, Ya, Tidak, Ya, Ya~
## $ Status_Rawan <fct> Rawan, Rawan, Rawan, Rawan, Rawan, Rawan~
table(train_TA$Status_Rawan)
##
## Rawan Tidak_Rawan
## 3051 10880
table(up_train$Status_Rawan)
##
## Rawan Tidak_Rawan
## 10880 10880
set.seed(012)
smote_train <- SMOTE(Status_Rawan ~ ., data = train_TA,perc.over=200, perc.under=100)
## Warning in if (class(data[, col]) %in% c("factor", "character")) {: the
## condition has length > 1 and only the first element will be used
## Warning in if (class(data[, col]) %in% c("factor", "character")) {: the
## condition has length > 1 and only the first element will be used
## Warning in if (class(data[, col]) %in% c("factor", "character")) {: the
## condition has length > 1 and only the first element will be used
## Warning in if (class(data[, col]) %in% c("factor", "character")) {: the
## condition has length > 1 and only the first element will be used
## Warning in `[<-.factor`(`*tmp*`, ri, value = c(3, 3, 3, 3.38115100329742, :
## invalid factor level, NA generated
## Warning in `[<-.factor`(`*tmp*`, ri, value = c(3, 3, 3, 3.38115100329742, :
## invalid factor level, NA generated
## Warning in `[<-.factor`(`*tmp*`, ri, value = c(3, 3, 3, 3.38115100329742, :
## invalid factor level, NA generated
## Warning in `[<-.factor`(`*tmp*`, ri, value = c(3, 3, 3, 3.38115100329742, :
## invalid factor level, NA generated
glimpse(smote_train)
## Rows: 15,255
## Columns: 20
## $ Status_Rawan <fct> Tidak_Rawan, Tidak_Rawan, Tidak_Rawan, T~
## $ Pendidikan_KRT <ord> SMA, Perguruan Tinggi, SMA, SD, SMP, SMA~
## $ KRT_Rawan <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ Jumlah_Penabung <dbl> 2, 1, 2, 0, 1, 2, 6, 4, 1, 1, 2, 1, 1, 0~
## $ Jumlah_Buta_Huruf <fct> Tidak ada, Tidak ada, Tidak ada, Tidak a~
## $ Penerima_Transfer <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ Aset_Tanah <fct> Ya, Ya, Ya, Tidak, Ya, Ya, Ya, Ya, Ya, T~
## $ Akses_Internet <fct> Ya, Ya, Tidak, Tidak, Ya, Ya, Ya, Ya, Ya~
## $ Sakit_Namun_Tidak_Rawat_Jalan <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ PKH <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ KKS <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ BPNT <fct> Tidak, Tidak, Tidak, Ya, Tidak, Tidak, T~
## $ Bantuan_Pemda <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ BPJS <fct> Tidak, Tidak, Tidak, Ya, Tidak, Tidak, T~
## $ KIP_PIP <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ Jenis_Dinding <ord> Tembok/Plesteran/anyaman, Tembok/Plester~
## $ Luas_Lantai <dbl> 140, 36, 90, 35, 32, 25, 120, 42, 77, 54~
## $ Bahan_Bakar_Masak <ord> LPG 3Kg, LPG 12kg/5.5kg/Bluegaz, LPG 12k~
## $ Sumber_Air_Minum <ord> Air kemasan/isi Ulang, Air kemasan/isi U~
## $ Sanitasi_Layak <fct> Ya, Ya, Ya, Ya, Ya, Ya, Ya, Tidak, Ya, Y~
table(train_TA$Status_Rawan)
##
## Rawan Tidak_Rawan
## 3051 10880
table(smote_train$Status_Rawan)
##
## Rawan Tidak_Rawan
## 9153 6102
## Set seed for reproducibility
set.seed(012)
## Define repeated cross validation with 5 folds and three repeats
repeat_cv <- trainControl(method='repeatedcv', number=5)
## Set seed for reproducibility
set.seed(012)
## Train a random forest model
forest <- train(
# Formula. We are using all variables to predict Species
Status_Rawan~.,
# Source of data; remove the Species variable
data=train_TA,
# `rf` method for random forest
method='rf',
# Add repeated cross validation as trControl
trControl=repeat_cv,
# Accuracy to measure the performance of the model
metric='Accuracy')
## Print out the details about the model
forest$finalModel
##
## Call:
## randomForest(x = x, y = y, mtry = param$mtry)
## Type of random forest: classification
## Number of trees: 500
## No. of variables tried at each split: 2
##
## OOB estimate of error rate: 21.79%
## Confusion matrix:
## Rawan Tidak_Rawan class.error
## Rawan 59 2992 0.980662078
## Tidak_Rawan 43 10837 0.003952206
## Generate predictions
y_hats <- predict(
## Random forest object
object=forest,
## Data to use for predictions; remove the Species
newdata=test_TA[, -1])
confusionMatrix(y_hats,test_TA$Status_Rawan, positive="Rawan")
## Confusion Matrix and Statistics
##
## Reference
## Prediction Rawan Tidak_Rawan
## Rawan 26 25
## Tidak_Rawan 1245 4675
##
## Accuracy : 0.7873
## 95% CI : (0.7767, 0.7976)
## No Information Rate : 0.7871
## P-Value [Acc > NIR] : 0.4949
##
## Kappa : 0.0233
##
## Mcnemar's Test P-Value : <2e-16
##
## Sensitivity : 0.020456
## Specificity : 0.994681
## Pos Pred Value : 0.509804
## Neg Pred Value : 0.789696
## Prevalence : 0.212862
## Detection Rate : 0.004354
## Detection Prevalence : 0.008541
## Balanced Accuracy : 0.507569
##
## 'Positive' Class : Rawan
##
## Set seed for reproducibility
set.seed(012)
## Train a random forest model
forest_2 <- train(
# Formula. We are using all variables to predict Species
Status_Rawan~.,
# Source of data; remove the Species variable
data=down_train,
# `rf` method for random forest
method='rf',
# Add repeated cross validation as trControl
trControl=repeat_cv,
# Accuracy to measure the performance of the model
metric='Accuracy')
## Print out the details about the model
forest_2$finalModel
##
## Call:
## randomForest(x = x, y = y, mtry = param$mtry)
## Type of random forest: classification
## Number of trees: 500
## No. of variables tried at each split: 2
##
## OOB estimate of error rate: 35.68%
## Confusion matrix:
## Rawan Tidak_Rawan class.error
## Rawan 2197 854 0.2799082
## Tidak_Rawan 1323 1728 0.4336283
## Generate predictions
y_hats_2 <- predict(
## Random forest object
object=forest_2,
## Data to use for predictions; remove the Species
newdata=test_TA[, -1])
confusionMatrix(y_hats_2,test_TA$Status_Rawan, positive="Rawan")
## Confusion Matrix and Statistics
##
## Reference
## Prediction Rawan Tidak_Rawan
## Rawan 921 2021
## Tidak_Rawan 350 2679
##
## Accuracy : 0.6029
## 95% CI : (0.5904, 0.6154)
## No Information Rate : 0.7871
## P-Value [Acc > NIR] : 1
##
## Kappa : 0.1991
##
## Mcnemar's Test P-Value : <2e-16
##
## Sensitivity : 0.7246
## Specificity : 0.5700
## Pos Pred Value : 0.3131
## Neg Pred Value : 0.8845
## Prevalence : 0.2129
## Detection Rate : 0.1542
## Detection Prevalence : 0.4927
## Balanced Accuracy : 0.6473
##
## 'Positive' Class : Rawan
##
## Set seed for reproducibility
set.seed(012)
## Train a random forest model
forest_3 <- train(
# Formula. We are using all variables to predict Species
Status_Rawan~.,
# Source of data; remove the Species variable
data=up_train,
# `rf` method for random forest
method='rf',
# Add repeated cross validation as trControl
trControl=repeat_cv,
# Accuracy to measure the performance of the model
metric='Accuracy')
## Print out the details about the model
forest_3$finalModel
##
## Call:
## randomForest(x = x, y = y, mtry = param$mtry)
## Type of random forest: classification
## Number of trees: 500
## No. of variables tried at each split: 30
##
## OOB estimate of error rate: 12.41%
## Confusion matrix:
## Rawan Tidak_Rawan class.error
## Rawan 10464 416 0.03823529
## Tidak_Rawan 2284 8596 0.20992647
## Generate predictions
y_hats_3 <- predict(
## Random forest object
object=forest_3,
## Data to use for predictions; remove the Species
newdata=test_TA[, -1])
confusionMatrix(y_hats_3,test_TA$Status_Rawan, positive="Rawan")
## Confusion Matrix and Statistics
##
## Reference
## Prediction Rawan Tidak_Rawan
## Rawan 350 1001
## Tidak_Rawan 921 3699
##
## Accuracy : 0.6781
## 95% CI : (0.6661, 0.69)
## No Information Rate : 0.7871
## P-Value [Acc > NIR] : 1.00000
##
## Kappa : 0.061
##
## Mcnemar's Test P-Value : 0.07155
##
## Sensitivity : 0.27537
## Specificity : 0.78702
## Pos Pred Value : 0.25907
## Neg Pred Value : 0.80065
## Prevalence : 0.21286
## Detection Rate : 0.05862
## Detection Prevalence : 0.22626
## Balanced Accuracy : 0.53120
##
## 'Positive' Class : Rawan
##
## Set seed for reproducibility
set.seed(012)
## Train a random forest model
extraT <- train(
# Formula. We are using all variables to predict Species
Status_Rawan~.,
tuneGrid = data.frame(mtry = c(2,3,7),
splitrule = c("extratrees","extratrees","extratrees"),min.node.size = 10L),
# Source of data; remove the Species variable
data=train_TA,
# `rf` method for random forest
method='ranger',
# Add repeated cross validation as trControl
trControl=repeat_cv
)
## Print out the details about the model
extraT$finalModel
## Ranger result
##
## Call:
## ranger::ranger(dependent.variable.name = ".outcome", data = x, mtry = min(param$mtry, ncol(x)), min.node.size = param$min.node.size, splitrule = as.character(param$splitrule), write.forest = TRUE, probability = classProbs, ...)
##
## Type: Classification
## Number of trees: 500
## Sample size: 13931
## Number of independent variables: 30
## Mtry: 2
## Target node size: 10
## Variable importance mode: none
## Splitrule: extratrees
## Number of random splits: 1
## OOB prediction error: 21.87 %
## Generate predictions
y_hats_e1 <- predict(
## Random forest object
object=extraT,
## Data to use for predictions; remove the Species
newdata=test_TA[, -1])
confusionMatrix(y_hats_e1,test_TA$Status_Rawan, positive="Rawan")
## Confusion Matrix and Statistics
##
## Reference
## Prediction Rawan Tidak_Rawan
## Rawan 19 10
## Tidak_Rawan 1252 4690
##
## Accuracy : 0.7886
## 95% CI : (0.7781, 0.7989)
## No Information Rate : 0.7871
## P-Value [Acc > NIR] : 0.3952
##
## Kappa : 0.0199
##
## Mcnemar's Test P-Value : <2e-16
##
## Sensitivity : 0.014949
## Specificity : 0.997872
## Pos Pred Value : 0.655172
## Neg Pred Value : 0.789297
## Prevalence : 0.212862
## Detection Rate : 0.003182
## Detection Prevalence : 0.004857
## Balanced Accuracy : 0.506411
##
## 'Positive' Class : Rawan
##
## Set seed for reproducibility
set.seed(012)
## Train a random forest model
extraT_2 <- train(
# Formula. We are using all variables to predict Species
Status_Rawan~.,
tuneGrid = data.frame(mtry = c(2,3,7),
splitrule = c("extratrees","extratrees","extratrees"),min.node.size = 10L),
# Source of data; remove the Species variable
data=down_train,
# `rf` method for random forest
method='ranger',
# Add repeated cross validation as trControl
trControl=repeat_cv
)
## Print out the details about the model
extraT_2$finalModel
## Ranger result
##
## Call:
## ranger::ranger(dependent.variable.name = ".outcome", data = x, mtry = min(param$mtry, ncol(x)), min.node.size = param$min.node.size, splitrule = as.character(param$splitrule), write.forest = TRUE, probability = classProbs, ...)
##
## Type: Classification
## Number of trees: 500
## Sample size: 6102
## Number of independent variables: 30
## Mtry: 2
## Target node size: 10
## Variable importance mode: none
## Splitrule: extratrees
## Number of random splits: 1
## OOB prediction error: 35.10 %
## Generate predictions
y_hats_e2 <- predict(
## Random forest object
object=extraT_2,
## Data to use for predictions; remove the Species
newdata=test_TA[, -1])
confusionMatrix(y_hats_e2,test_TA$Status_Rawan, positive="Rawan")
## Confusion Matrix and Statistics
##
## Reference
## Prediction Rawan Tidak_Rawan
## Rawan 871 1879
## Tidak_Rawan 400 2821
##
## Accuracy : 0.6183
## 95% CI : (0.6059, 0.6307)
## No Information Rate : 0.7871
## P-Value [Acc > NIR] : 1
##
## Kappa : 0.2004
##
## Mcnemar's Test P-Value : <2e-16
##
## Sensitivity : 0.6853
## Specificity : 0.6002
## Pos Pred Value : 0.3167
## Neg Pred Value : 0.8758
## Prevalence : 0.2129
## Detection Rate : 0.1459
## Detection Prevalence : 0.4606
## Balanced Accuracy : 0.6427
##
## 'Positive' Class : Rawan
##
## Set seed for reproducibility
set.seed(012)
## Train a random forest model
extraT_3 <- train(
# Formula. We are using all variables to predict Species
Status_Rawan~.,
tuneGrid = data.frame(mtry = c(2,3,7),
splitrule = c("extratrees","extratrees","extratrees"),min.node.size = 10L),
# Source of data; remove the Species variable
data=up_train,
# `rf` method for random forest
method='ranger',
# Add repeated cross validation as trControl
trControl=repeat_cv
)
## Print out the details about the model
extraT_3$finalModel
## Ranger result
##
## Call:
## ranger::ranger(dependent.variable.name = ".outcome", data = x, mtry = min(param$mtry, ncol(x)), min.node.size = param$min.node.size, splitrule = as.character(param$splitrule), write.forest = TRUE, probability = classProbs, ...)
##
## Type: Classification
## Number of trees: 500
## Sample size: 21760
## Number of independent variables: 30
## Mtry: 7
## Target node size: 10
## Variable importance mode: none
## Splitrule: extratrees
## Number of random splits: 1
## OOB prediction error: 25.86 %
## Generate predictions
y_hats_e3 <- predict(
## Random forest object
object=extraT_3,
## Data to use for predictions; remove the Species
newdata=test_TA[, -1])
confusionMatrix(y_hats_e3,test_TA$Status_Rawan, positive="Rawan")
## Confusion Matrix and Statistics
##
## Reference
## Prediction Rawan Tidak_Rawan
## Rawan 630 1417
## Tidak_Rawan 641 3283
##
## Accuracy : 0.6553
## 95% CI : (0.6431, 0.6674)
## No Information Rate : 0.7871
## P-Value [Acc > NIR] : 1
##
## Kappa : 0.1588
##
## Mcnemar's Test P-Value : <2e-16
##
## Sensitivity : 0.4957
## Specificity : 0.6985
## Pos Pred Value : 0.3078
## Neg Pred Value : 0.8366
## Prevalence : 0.2129
## Detection Rate : 0.1055
## Detection Prevalence : 0.3428
## Balanced Accuracy : 0.5971
##
## 'Positive' Class : Rawan
##
## Set seed for reproducibility
set.seed(012)
## Define repeated cross validation with 5 folds and three repeats
repeat_cv <- trainControl(method='repeatedcv', number=5)
boost_1 <- train(Status_Rawan ~.,
data=train_TA,
method="gbm",
tuneLength = 5,
trControl=repeat_cv,
verbose = FALSE)
plot(boost_1, main = "5-Fold Cross Validation Gradient Boosting: tuneLength")
boost_best <- boost_1$bestTune
boost_1 <- train(Status_Rawan ~.,
data=train_TA,
method="gbm",
tuneGrid = boost_best,
verbose = FALSE)
boost_result_1 <- boost_1$results
boost_result_1
## n.trees interaction.depth shrinkage n.minobsinnode Accuracy Kappa
## 1 100 2 0.1 10 0.7799405 0.04558969
## AccuracySD KappaSD
## 1 0.005261321 0.01163629
## Generate predictions
y_hats_b1 <- predict(
## Random forest object
object=boost_1,
## Data to use for predictions; remove the Species
newdata=test_TA[, -1])
confusionMatrix(y_hats_b1,test_TA$Status_Rawan, positive="Rawan")
## Confusion Matrix and Statistics
##
## Reference
## Prediction Rawan Tidak_Rawan
## Rawan 57 62
## Tidak_Rawan 1214 4638
##
## Accuracy : 0.7863
## 95% CI : (0.7757, 0.7966)
## No Information Rate : 0.7871
## P-Value [Acc > NIR] : 0.5702
##
## Kappa : 0.0473
##
## Mcnemar's Test P-Value : <2e-16
##
## Sensitivity : 0.044847
## Specificity : 0.986809
## Pos Pred Value : 0.478992
## Neg Pred Value : 0.792550
## Prevalence : 0.212862
## Detection Rate : 0.009546
## Detection Prevalence : 0.019930
## Balanced Accuracy : 0.515828
##
## 'Positive' Class : Rawan
##
boost_2 <- train(Status_Rawan ~.,
data=down_train,
method="gbm",
tuneLength = 5,
trControl=repeat_cv,
verbose = FALSE)
plot(boost_2, main = "5-Fold Cross Validation Gradient Boosting: tuneLength")
boost_best <- boost_2$bestTune
boost_2 <- train(Status_Rawan ~.,
data=down_train,
method="gbm",
tuneGrid = boost_best,
verbose = FALSE)
boost_result_2 <- boost_2$results
boost_result_2
## n.trees interaction.depth shrinkage n.minobsinnode Accuracy Kappa
## 1 100 2 0.1 10 0.6440698 0.2883036
## AccuracySD KappaSD
## 1 0.007887327 0.01489327
## Generate predictions
y_hats_b2 <- predict(
## Random forest object
object=boost_2,
## Data to use for predictions; remove the Species
newdata=test_TA[, -1])
confusionMatrix(y_hats_b2,test_TA$Status_Rawan, positive="Rawan")
## Confusion Matrix and Statistics
##
## Reference
## Prediction Rawan Tidak_Rawan
## Rawan 883 1901
## Tidak_Rawan 388 2799
##
## Accuracy : 0.6166
## 95% CI : (0.6042, 0.629)
## No Information Rate : 0.7871
## P-Value [Acc > NIR] : 1
##
## Kappa : 0.2024
##
## Mcnemar's Test P-Value : <2e-16
##
## Sensitivity : 0.6947
## Specificity : 0.5955
## Pos Pred Value : 0.3172
## Neg Pred Value : 0.8783
## Prevalence : 0.2129
## Detection Rate : 0.1479
## Detection Prevalence : 0.4663
## Balanced Accuracy : 0.6451
##
## 'Positive' Class : Rawan
##
boost_3 <- train(Status_Rawan ~.,
data=up_train,
method="gbm",
tuneLength = 5,
trControl=repeat_cv,
verbose = FALSE)
plot(boost_3, main = "5-Fold Cross Validation Gradient Boosting: tuneLength")
boost_best <- boost_3$bestTune
boost_3 <- train(Status_Rawan ~.,
data=up_train,
method="gbm",
tuneGrid = boost_best,
verbose = FALSE)
boost_result_3 <- boost_3$results
boost_result_3
## n.trees interaction.depth shrinkage n.minobsinnode Accuracy Kappa
## 1 250 5 0.1 10 0.6694346 0.3391146
## AccuracySD KappaSD
## 1 0.005485861 0.01077039
## Generate predictions
y_hats_b3 <- predict(
## Random forest object
object=boost_3,
## Data to use for predictions; remove the Species
newdata=test_TA[, -1])
confusionMatrix(y_hats_b3,test_TA$Status_Rawan, positive="Rawan")
## Confusion Matrix and Statistics
##
## Reference
## Prediction Rawan Tidak_Rawan
## Rawan 843 1821
## Tidak_Rawan 428 2879
##
## Accuracy : 0.6233
## 95% CI : (0.6109, 0.6357)
## No Information Rate : 0.7871
## P-Value [Acc > NIR] : 1
##
## Kappa : 0.197
##
## Mcnemar's Test P-Value : <2e-16
##
## Sensitivity : 0.6633
## Specificity : 0.6126
## Pos Pred Value : 0.3164
## Neg Pred Value : 0.8706
## Prevalence : 0.2129
## Detection Rate : 0.1412
## Detection Prevalence : 0.4462
## Balanced Accuracy : 0.6379
##
## 'Positive' Class : Rawan
##
data_baru <- read.csv("D:/Download_14Des/Tugas Akhir -- data soal.xlsx - untuk diprediksi.csv", header=TRUE, stringsAsFactors = TRUE)
data_baru <- data_baru[,-1]
glimpse(data_baru)
## Rows: 4,867
## Columns: 25
## $ Status_Rawan <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, ~
## $ Pendidikan_KRT <fct> Perguruan Tinggi, SMP, Perguruan Tinggi,~
## $ KRT_Rawan <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Ya, T~
## $ Jumlah_Penabung <int> 3, 0, 2, 3, 4, 3, 2, 1, 1, 1, 2, 3, 1, 0~
## $ Jumlah_Buta_Huruf <int> 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0~
## $ Penerima_Transfer <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ Aset_Tanah <fct> Ya, Ya, Ya, Ya, Ya, Ya, Ya, Ya, Ya, Ya, ~
## $ Akses_Internet <fct> Ya, Tidak, Ya, Ya, Ya, Ya, Ya, Ya, Tidak~
## $ Sakit_Namun_Tidak_Rawat_Jalan <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ PKH <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ KKS <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ BPNT <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ Bantuan_Pemda <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ BPJS <fct> Tidak, Ya, Tidak, Tidak, Tidak, Tidak, T~
## $ Jamkesda <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ KIP_PIP <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ Jenis_Atap <fct> Asbes, Asbes, Genteng, Genteng, Genteng,~
## $ Jenis_Lantai <fct> Marmer/Keramik, Lainnya, Marmer/Keramik,~
## $ Jenis_Dinding <fct> Tembok/Plesteran/anyaman, Kayu/Papan, Te~
## $ Luas_Lantai <int> 60, 48, 60, 60, 84, 72, 60, 10, 39, 150,~
## $ Listrik <fct> Listrik, Listrik, Listrik, Listrik, List~
## $ Bahan_Bakar_Masak <fct> LPG 3Kg, LPG 3Kg, LPG 12kg/5.5kg/Bluegaz~
## $ Sumber_Air_Minum <fct> Air kemasan/isi Ulang, Air kemasan/isi U~
## $ Air_Minum_Layak <fct> Tidak, Tidak, Tidak, Ya, Tidak, Tidak, Y~
## $ Sanitasi_Layak <fct> Ya, Tidak, Ya, Ya, Ya, Ya, Ya, Ya, Ya, Y~
row = nrow(data_baru)
for (i in 1:row){
if(data_baru[i,5]==0){
data_baru[i,5]="Tidak ada"
}
else{
data_baru[i,5]="Ada"
}
}
data_baru <- data_baru %>% mutate(
Pendidikan_KRT = factor(Pendidikan_KRT, ordered = TRUE,
levels = c("Tidak Sekolah",
"Tidak Tamat SD",
"SD",
"SMP",
"SMA",
"Perguruan Tinggi")),
Jenis_Atap = factor(Jenis_Atap, ordered = TRUE,
levels = c("Asbes",
"Seng",
"Beton",
"Genteng",
"Lainnya")),
Jenis_Lantai = factor(Jenis_Lantai, ordered = TRUE,
levels = c("Ubin/tegel/teraso",
"Semen/bata merah",
"Parket/vinil/karpet",
"Marmer/Keramik",
"Lainnya")),
Jenis_Dinding = factor(Jenis_Dinding, ordered = TRUE,
levels = c("Kayu/Papan",
"Tembok/Plesteran/anyaman",
"Lainnya")),
Listrik = factor(Listrik, ordered = TRUE,
levels = c("Non Listrik",
"Listrik")),
Bahan_Bakar_Masak = factor(Bahan_Bakar_Masak, ordered = TRUE,
levels = c("Tidak Memasak",
"Kayu Bakar",
"Minyak tanah",
"LPG 3Kg",
"LPG 12kg/5.5kg/Bluegaz",
"Lainnya")),
Sumber_Air_Minum = factor(Sumber_Air_Minum, ordered = TRUE,
levels = c("Sumur bor/pompa",
"Leding",
"Air kemasan/isi Ulang",
"Lainnya")),
Jumlah_Buta_Huruf = factor(Jumlah_Buta_Huruf)
)
data_baru <- data_baru[,-c(1,15,17,18,21,24)]
glimpse(data_baru)
## Rows: 4,867
## Columns: 19
## $ Pendidikan_KRT <ord> Perguruan Tinggi, SMP, Perguruan Tinggi,~
## $ KRT_Rawan <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Ya, T~
## $ Jumlah_Penabung <int> 3, 0, 2, 3, 4, 3, 2, 1, 1, 1, 2, 3, 1, 0~
## $ Jumlah_Buta_Huruf <fct> Tidak ada, Ada, Tidak ada, Tidak ada, Ti~
## $ Penerima_Transfer <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ Aset_Tanah <fct> Ya, Ya, Ya, Ya, Ya, Ya, Ya, Ya, Ya, Ya, ~
## $ Akses_Internet <fct> Ya, Tidak, Ya, Ya, Ya, Ya, Ya, Ya, Tidak~
## $ Sakit_Namun_Tidak_Rawat_Jalan <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ PKH <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ KKS <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ BPNT <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ Bantuan_Pemda <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ BPJS <fct> Tidak, Ya, Tidak, Tidak, Tidak, Tidak, T~
## $ KIP_PIP <fct> Tidak, Tidak, Tidak, Tidak, Tidak, Tidak~
## $ Jenis_Dinding <ord> Tembok/Plesteran/anyaman, Kayu/Papan, Te~
## $ Luas_Lantai <int> 60, 48, 60, 60, 84, 72, 60, 10, 39, 150,~
## $ Bahan_Bakar_Masak <ord> LPG 3Kg, LPG 3Kg, LPG 12kg/5.5kg/Bluegaz~
## $ Sumber_Air_Minum <ord> Air kemasan/isi Ulang, Air kemasan/isi U~
## $ Sanitasi_Layak <fct> Ya, Tidak, Ya, Ya, Ya, Ya, Ya, Ya, Ya, Y~
set.seed(012)
prediksi_rf <- predict(forest_2, newdata=data_baru)
table(prediksi_rf)
## prediksi_rf
## Rawan Tidak_Rawan
## 2310 2557
set.seed(012)
prediksi_et <- predict(extraT_2, newdata=data_baru)
table(prediksi_et)
## prediksi_et
## Rawan Tidak_Rawan
## 2119 2748
set.seed(012)
prediksi_gb <- predict(boost_2, newdata=data_baru)
table(prediksi_gb)
## prediksi_gb
## Rawan Tidak_Rawan
## 2228 2639
n = nrow(data_baru)
pred1 <- data.frame(No = c(1:n),
Status_Rawan = prediksi_rf)
pred2 <- data.frame(No = c(1:n),
Status_Rawan = prediksi_et)
pred3 <- data.frame(No = c(1:n),
Status_Rawan = prediksi_gb)
write.xlsx(pred1, "C:\\Users\\Asus\\Downloads\\TA_G1501211012.xlsx",sheetName = "Random Forest (Undersampling)",row.names = FALSE)
write.xlsx(pred2, "C:\\Users\\Asus\\Downloads\\TA_G1501211012.xlsx", sheetName = "Extra Trees (Undersampling)",row.names = FALSE, append=TRUE)
write.xlsx(pred3, "C:\\Users\\Asus\\Downloads\\TA_G1501211012.xlsx", sheetName = "Gradient Boosting (Undersampling)",row.names = FALSE, append=TRUE)
wb <- loadWorkbook("C:\\Users\\Asus\\Downloads\\TA_G1501211012.xlsx")
sheets <- getSheets(wb)
saveWorkbook(wb,"C:\\Users\\Asus\\Downloads\\TA_G1501211012.xlsx")
table(pred1$Status_Rawan)
##
## Rawan Tidak_Rawan
## 2310 2557
rf_extra <- rand_forest() %>%
set_engine("ranger",
importance="permutation",
splitrule="extratrees",replace=F) %>%
set_mode("classification")
undersm <- recipe(Status_Rawan~.,data = train_TA) %>%
step_downsample(Status_Rawan,under_ratio = 1)
rf_fit2 <- workflow() %>%
add_recipe(undersm) %>%
add_model(rf_extra) %>%
fit(data=train_TA)
rf_imp2 <- ranger::importance_pvalues(
extract_fit_engine(rf_fit2),
method = "altmann",
formula = Status_Rawan ~ .,
data = down_train
) %>%
as_tibble(rownames = "Variable") %>%
arrange(desc(importance)) %>%
rename(Permutation_Value=importance)
rf_imp2
## # A tibble: 19 x 3
## Variable Permutation_Value pvalue
## <chr> <dbl> <dbl>
## 1 Jumlah_Penabung 0.0127 0.00990
## 2 Pendidikan_KRT 0.00975 0.00990
## 3 BPNT 0.00947 0.00990
## 4 PKH 0.00916 0.00990
## 5 BPJS 0.00889 0.00990
## 6 Akses_Internet 0.00675 0.00990
## 7 KKS 0.00618 0.00990
## 8 Bahan_Bakar_Masak 0.00495 0.00990
## 9 Aset_Tanah 0.00472 0.00990
## 10 Luas_Lantai 0.00346 0.0396
## 11 Penerima_Transfer 0.00294 0.00990
## 12 Jenis_Dinding 0.00264 0.00990
## 13 Sanitasi_Layak 0.00252 0.0198
## 14 Sumber_Air_Minum 0.00230 0.109
## 15 KRT_Rawan 0.00148 0.00990
## 16 KIP_PIP 0.00143 0.00990
## 17 Jumlah_Buta_Huruf 0.000658 0.0792
## 18 Bantuan_Pemda 0.000161 0.317
## 19 Sakit_Namun_Tidak_Rawat_Jalan 0.000102 0.149
#relative importance
rel_rf_imp2 <- rf_imp2 %>%
mutate(Relative_Importance=(Permutation_Value*100)/(max(Permutation_Value))) %>%
relocate(Relative_Importance,
.after = Variable)
rel_rf_imp2
## # A tibble: 19 x 4
## Variable Relative_Importance Permutation_Value pvalue
## <chr> <dbl> <dbl> <dbl>
## 1 Jumlah_Penabung 100 0.0127 0.00990
## 2 Pendidikan_KRT 76.5 0.00975 0.00990
## 3 BPNT 74.3 0.00947 0.00990
## 4 PKH 71.9 0.00916 0.00990
## 5 BPJS 69.8 0.00889 0.00990
## 6 Akses_Internet 53.0 0.00675 0.00990
## 7 KKS 48.5 0.00618 0.00990
## 8 Bahan_Bakar_Masak 38.8 0.00495 0.00990
## 9 Aset_Tanah 37.0 0.00472 0.00990
## 10 Luas_Lantai 27.1 0.00346 0.0396
## 11 Penerima_Transfer 23.1 0.00294 0.00990
## 12 Jenis_Dinding 20.7 0.00264 0.00990
## 13 Sanitasi_Layak 19.8 0.00252 0.0198
## 14 Sumber_Air_Minum 18.0 0.00230 0.109
## 15 KRT_Rawan 11.6 0.00148 0.00990
## 16 KIP_PIP 11.2 0.00143 0.00990
## 17 Jumlah_Buta_Huruf 5.17 0.000658 0.0792
## 18 Bantuan_Pemda 1.26 0.000161 0.317
## 19 Sakit_Namun_Tidak_Rawat_Jalan 0.799 0.000102 0.149
ggbarplot(rel_rf_imp2 %>% arrange(Permutation_Value),
x="Variable",fill="#007ea7",
y="Relative_Importance",orientation="horizontal")+
scale_y_continuous(expand = c(1e-4,1e-4),limits = c(0,105))