# =========================================================
# ANALISIS MORAN'S I RESIDUAL
# MENCARI KOMBINASI X TERBAIK
# DENGAN P-VALUE TERKECIL
# =========================================================
# =========================================================
# 5. DAFTAR VARIABEL
# =========================================================
variabel_list <- c(
"p.miskin15",
"AHH2015",
"EYS2015",
"MYS2015",
"EXP2015",
"APM.SD15",
"APM.SMP15",
"APM.SMA15",
"APM.PT15",
"APK.SD15",
"APK.SMP15",
"APK.SMA15",
"APK.PT15",
"APS.USIA15",
"APS.USIA2",
"APS.USIA3",
"APS.USIA4"
)
# =========================================================
# 6. TENTUKAN VARIABEL Y
# =========================================================
variabel_Y <- "p.miskin15"
# variabel kandidat X
variabel_X <- setdiff(
variabel_list,
variabel_Y
)
# =========================================================
# 7. DATAFRAME HASIL
# =========================================================
hasil_model <- data.frame(
Formula = character(),
Jumlah_X = numeric(),
Moran_I = numeric(),
P_Value = numeric(),
stringsAsFactors = FALSE
)
# =========================================================
# 8. LOOP KOMBINASI VARIABEL
# =========================================================
maksimum_X <- 6
for (k in 1:maksimum_X) {
# membuat kombinasi
kombinasi_x <- combn(
variabel_X,
k,
simplify = FALSE
)
# loop tiap kombinasi
for (x_set in kombinasi_x) {
tryCatch({
# =====================================================
# MEMBUAT FORMULA
# =====================================================
formula_text <- paste(
variabel_Y,
"~",
paste(x_set, collapse = " + ")
)
rumus <- as.formula(formula_text)
# =====================================================
# MODEL OLS
# =====================================================
model_ols <- lm(
rumus,
data = jabar
)
# =====================================================
# MORAN TEST RESIDUAL
# =====================================================
uji_moran <- lm.morantest(
model_ols,
lw_jabar,
zero.policy = TRUE
)
# =====================================================
# AMBIL NILAI
# =====================================================
moran_i <- as.numeric(
uji_moran$estimate["Observed Moran I"]
)
p_val <- uji_moran$p.value
# =====================================================
# SIMPAN JIKA SIGNIFIKAN
# =====================================================
if (p_val < 0.05) {
hasil_model <- rbind(
hasil_model,
data.frame(
Formula = formula_text,
Jumlah_X = k,
Moran_I = moran_i,
P_Value = p_val
)
)
}
}, error = function(e) {
# abaikan error
NULL
})
}
}
# =========================================================
# 9. URUTKAN HASIL
# =========================================================
hasil_model <- hasil_model %>%
arrange(P_Value)
# =========================================================
# 11. MODEL TERBAIK
# P-VALUE PALING KECIL
# =========================================================
if (nrow(hasil_model) == 0) {
cat("Tidak ada model signifikan.\n")
} else {
# ambil model terbaik
model_terbaik <- hasil_model %>%
slice(1)
cat(
"Formula : ",
as.character(model_terbaik$Formula),
"\n",
sep = ""
)
cat(
"Jumlah Variabel X : ",
model_terbaik$Jumlah_X,
"\n",
sep = ""
)
cat(
"Moran's I : ",
round(model_terbaik$Moran_I, 5),
"\n",
sep = ""
)
cat(
"P-Value : ",
format(
model_terbaik$P_Value,
scientific = FALSE
),
"\n",
sep = ""
)
}