options(repos = c(CRAN = "https://cloud.r-project.org"))
install.packages("readxl")
## Installing package into 'C:/Users/Acer/AppData/Local/R/win-library/4.5'
## (as 'lib' is unspecified)
## package 'readxl' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'readxl'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problem copying
## C:\Users\Acer\AppData\Local\R\win-library\4.5\00LOCK\readxl\libs\x64\readxl.dll
## to C:\Users\Acer\AppData\Local\R\win-library\4.5\readxl\libs\x64\readxl.dll:
## Permission denied
## Warning: restored 'readxl'
##
## The downloaded binary packages are in
## C:\Users\Acer\AppData\Local\Temp\RtmpS8FkHG\downloaded_packages
library(readxl)
## Warning: package 'readxl' was built under R version 4.5.2
data <- read_excel("D:/2025/IZIN BELAJAR/SEMESTER 2/ADK/data diolah.xlsx")
head(data)
## # A tibble: 6 × 8
## status_pekerjaan umur jenis_kelamin pendidikan status_perkawinan
## <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0 0 1 2 0
## 2 2 0 0 1 0
## 3 2 0 0 1 1
## 4 2 0 0 1 0
## 5 0 1 1 1 0
## 6 0 1 0 1 0
## # ℹ 3 more variables: wilayah_tempat_tinggal <dbl>, pendapatan <dbl>,
## # hubungan_dengan_krt <dbl>
# Instal dan panggil paket yang diperlukan
install.packages(c("nnet", "dplyr", "car", "ggplot2"))
## Installing packages into 'C:/Users/Acer/AppData/Local/R/win-library/4.5'
## (as 'lib' is unspecified)
## package 'nnet' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'nnet'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problem copying
## C:\Users\Acer\AppData\Local\R\win-library\4.5\00LOCK\nnet\libs\x64\nnet.dll to
## C:\Users\Acer\AppData\Local\R\win-library\4.5\nnet\libs\x64\nnet.dll:
## Permission denied
## Warning: restored 'nnet'
## package 'dplyr' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'dplyr'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problem copying
## C:\Users\Acer\AppData\Local\R\win-library\4.5\00LOCK\dplyr\libs\x64\dplyr.dll
## to C:\Users\Acer\AppData\Local\R\win-library\4.5\dplyr\libs\x64\dplyr.dll:
## Permission denied
## Warning: restored 'dplyr'
## package 'car' successfully unpacked and MD5 sums checked
## package 'ggplot2' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\Acer\AppData\Local\Temp\RtmpS8FkHG\downloaded_packages
library(nnet) # untuk regresi logistik multinomial
## Warning: package 'nnet' was built under R version 4.5.2
library(dplyr) # untuk manipulasi data
## Warning: package 'dplyr' was built under R version 4.5.2
##
## 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(car) # untuk VIF (multikolinearitas)
## Warning: package 'car' was built under R version 4.5.2
## Loading required package: carData
## Warning: package 'carData' was built under R version 4.5.2
##
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
##
## recode
library(ggplot2) # opsional, untuk visualisasi
## Warning: package 'ggplot2' was built under R version 4.5.2
# --- Variabel Y: Status Pekerjaan ---
# 0 = informal, 1 = formal, 2 = tidak bekerja
data$status_pekerjaan <- factor(data$status_pekerjaan,
levels = c(0, 1, 2),
labels = c("Informal", "Formal", "Tidak_Bekerja"))
# --- Variabel X ---
# Jenis Kelamin: 1 = laki-laki, 0 = perempuan
data$jenis_kelamin <- factor(data$jenis_kelamin,
levels = c(0, 1),
labels = c("Perempuan", "Laki-laki"))
# Pendidikan: 1 = dasar, 2 = menengah, 0 = tinggi
data$pendidikan <- factor(data$pendidikan,
levels = c(0, 1, 2),
labels = c("Tinggi", "Dasar", "Menengah"))
# Status Perkawinan: 1 = belum kawin, 0 = kawin/pernah kawin
data$status_perkawinan <- factor(data$status_perkawinan,
levels = c(0, 1),
labels = c("Kawin/Pernah_Kawin", "Belum_Kawin"))
# Hubungan dengan KRT: 0 = KRT, 1 = bukan KRT
data$hubungan_dengan_krt <- factor(data$hubungan_dengan_krt,
levels = c(0, 1),
labels = c("KRT", "Bukan_KRT"))
# Wilayah: 1 = pedesaan, 0 = perkotaan
data$wilayah_tempat_tinggal <- factor(data$wilayah_tempat_tinggal,
levels = c(0, 1),
labels = c("Perkotaan", "Pedesaan"))
# Umur: 0 = produktif, 1 = tidak produktif
data$umur <- factor(data$umur,
levels = c(0, 1),
labels = c("Produktif", "Tidak Produktif"))
# Pendapatan: 1 = rendah, 2 = menengah, 0 = tinggi
data$pendapatan <- factor(data$pendapatan,
levels = c(0, 1, 2),
labels = c("Tinggi", "Rendah", "Menengah"))
# =====================================================
# 4. CEK DATA
# =====================================================
summary(data)
## status_pekerjaan umur jenis_kelamin
## Informal :34408 Produktif :66055 Perempuan:38589
## Formal :15794 Tidak Produktif: 9013 Laki-laki:36479
## Tidak_Bekerja:24866
## pendidikan status_perkawinan wilayah_tempat_tinggal
## Tinggi : 6634 Kawin/Pernah_Kawin:59463 Perkotaan:39394
## Dasar :47806 Belum_Kawin :15605 Pedesaan :35674
## Menengah:20628
## pendapatan hubungan_dengan_krt
## Tinggi : 2106 KRT :29013
## Rendah :61516 Bukan_KRT:46055
## Menengah:11446
model_vif <- lm(as.numeric(pendapatan) ~ as.numeric(umur) + as.numeric(jenis_kelamin) +
as.numeric(pendidikan) + as.numeric(status_perkawinan) +
as.numeric(wilayah_tempat_tinggal) + as.numeric(hubungan_dengan_krt),
data = data)
vif(model_vif)
## as.numeric(umur) as.numeric(jenis_kelamin)
## 1.066580 1.589119
## as.numeric(pendidikan) as.numeric(status_perkawinan)
## 1.037208 1.365864
## as.numeric(wilayah_tempat_tinggal) as.numeric(hubungan_dengan_krt)
## 1.009405 1.829350
# Model regresi logistik multinomial
model_multinom <- multinom(status_pekerjaan ~ umur + jenis_kelamin + pendidikan +
status_perkawinan + wilayah_tempat_tinggal + pendapatan + hubungan_dengan_krt,
data = data)
## # weights: 33 (20 variable)
## initial value 82470.627286
## iter 10 value 64751.594469
## iter 20 value 63909.863875
## iter 30 value 61467.480631
## iter 40 value 61462.480332
## final value 61462.473060
## converged
# Ringkasan hasil regresi
summary(model_multinom)
## Call:
## multinom(formula = status_pekerjaan ~ umur + jenis_kelamin +
## pendidikan + status_perkawinan + wilayah_tempat_tinggal +
## pendapatan + hubungan_dengan_krt, data = data)
##
## Coefficients:
## (Intercept) umurTidak Produktif jenis_kelaminLaki-laki
## Formal 1.128862 -1.201636 0.1354436
## Tidak_Bekerja -12.924540 1.259780 -0.8733672
## pendidikanDasar pendidikanMenengah status_perkawinanBelum_Kawin
## Formal -2.0613918 -1.1340132 0.8041107
## Tidak_Bekerja -0.5528157 -0.2846225 1.4882636
## wilayah_tempat_tinggalPedesaan pendapatanRendah
## Formal -0.5501251 -0.6767313
## Tidak_Bekerja -0.5905776 12.8671039
## pendapatanMenengah hubungan_dengan_krtBukan_KRT
## Formal 0.3943765 0.1426083
## Tidak_Bekerja -1.8818960 0.7699403
##
## Std. Errors:
## (Intercept) umurTidak Produktif jenis_kelaminLaki-laki
## Formal 0.05949019 0.06077532 0.02845221
## Tidak_Bekerja 10.81747122 0.02823451 0.02403849
## pendidikanDasar pendidikanMenengah status_perkawinanBelum_Kawin
## Formal 0.03756641 0.03806470 0.03313429
## Tidak_Bekerja 0.04488721 0.04690337 0.02774649
## wilayah_tempat_tinggalPedesaan pendapatanRendah
## Formal 0.02240317 0.05394177
## Tidak_Bekerja 0.01911191 10.81743275
## pendapatanMenengah hubungan_dengan_krtBukan_KRT
## Formal 0.05494408 0.03017510
## Tidak_Bekerja 14.44221293 0.02682864
##
## Residual Deviance: 122924.9
## AIC: 122964.9
# Uji signifikansi (p-value)
z <- summary(model_multinom)$coefficients / summary(model_multinom)$standard.errors
p_values <- (1 - pnorm(abs(z), 0, 1)) * 2
p_values
## (Intercept) umurTidak Produktif jenis_kelaminLaki-laki
## Formal 0.0000000 0 1.932182e-06
## Tidak_Bekerja 0.2321715 0 0.000000e+00
## pendidikanDasar pendidikanMenengah status_perkawinanBelum_Kawin
## Formal 0 0.000000e+00 0
## Tidak_Bekerja 0 1.292928e-09 0
## wilayah_tempat_tinggalPedesaan pendapatanRendah
## Formal 0 0.0000000
## Tidak_Bekerja 0 0.2342514
## pendapatanMenengah hubungan_dengan_krtBukan_KRT
## Formal 7.085443e-13 2.289584e-06
## Tidak_Bekerja 8.963249e-01 0.000000e+00
# Menghitung odds ratio
exp(coef(model_multinom))
## (Intercept) umurTidak Produktif jenis_kelaminLaki-laki
## Formal 3.092135e+00 0.3007018 1.1450447
## Tidak_Bekerja 2.437495e-06 3.5246469 0.4175432
## pendidikanDasar pendidikanMenengah status_perkawinanBelum_Kawin
## Formal 0.1272767 0.3217395 2.234708
## Tidak_Bekerja 0.5753276 0.7522982 4.429398
## wilayah_tempat_tinggalPedesaan pendapatanRendah
## Formal 0.5768776 5.082757e-01
## Tidak_Bekerja 0.5540072 3.873577e+05
## pendapatanMenengah hubungan_dengan_krtBukan_KRT
## Formal 1.4834590 1.153278
## Tidak_Bekerja 0.1523011 2.159637
# Prediksi kategori status pekerjaan
prediksi <- predict(model_multinom, newdata = data)
# Buat confusion matrix
table(Prediksi = prediksi, Aktual = data$status_pekerjaan)
## Aktual
## Prediksi Informal Formal Tidak_Bekerja
## Informal 23434 5879 7768
## Formal 2262 5845 342
## Tidak_Bekerja 8712 4070 16756