# 1. LOAD PACKAGES
library(readxl)
## Warning: package 'readxl' was built under R version 4.5.3
library(lmtest)
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
library(car)
## Loading required package: carData
# 2. LOAD DATA
data <- read_excel('D:\\Documents\\Semester 3\\Komputasi Statistika\\Project\\project.xlsx')
df <- data.frame(
UMR = data$`UMR Kota Semarang (Rupiah)`,
Pengeluaran = data$`Rata rata Pengeluaran per kapita sebulan (Rupiah)`,
Bekerja = data$`Jumlah yang bekerja (Jiwa)`,
Pengangguran = data$`Pengangguran (%)`
)
df
## UMR Pengeluaran Bekerja Pengangguran
## 1 1.051 1.070 0.802 6.02
## 2 1.200 1.058 0.820 7.76
## 3 1.410 1.297 0.836 5.77
## 4 1.610 1.362 0.899 4.63
## 5 1.740 1.432 0.872 6.61
## 6 1.900 1.771 0.907 5.21
## 7 2.050 1.648 0.925 4.50
## 8 2.220 1.770 0.936 9.57
## 9 2.300 1.929 0.944 9.54
## 10 2.310 1.973 0.873 7.60
# 3. STATISTIK DESKRIPTIF
cat("\n=== STATISTIK DESKRIPTIF ===\n")
##
## === STATISTIK DESKRIPTIF ===
# Statistik deskriptif umum
print(summary(df))
## UMR Pengeluaran Bekerja Pengangguran
## Min. :1.051 Min. :1.058 Min. :0.8020 Min. :4.500
## 1st Qu.:1.460 1st Qu.:1.313 1st Qu.:0.8450 1st Qu.:5.350
## Median :1.820 Median :1.540 Median :0.8860 Median :6.315
## Mean :1.779 Mean :1.531 Mean :0.8814 Mean :6.721
## 3rd Qu.:2.178 3rd Qu.:1.771 3rd Qu.:0.9205 3rd Qu.:7.720
## Max. :2.310 Max. :1.973 Max. :0.9440 Max. :9.570
# Statistik deskriptif lengkap
statistik <- data.frame(
Variabel = names(df),
Mean = sapply(df, mean),
Median = sapply(df, median),
Minimum = sapply(df, min),
Maksimum = sapply(df, max),
Standar_Deviasi = sapply(df, sd),
Varians = sapply(df, var)
)
print(statistik)
## Variabel Mean Median Minimum Maksimum Standar_Deviasi
## UMR UMR 1.7791 1.820 1.051 2.310 0.45551350
## Pengeluaran Pengeluaran 1.5310 1.540 1.058 1.973 0.33525214
## Bekerja Bekerja 0.8814 0.886 0.802 0.944 0.04950915
## Pengangguran Pengangguran 6.7210 6.315 4.500 9.570 1.85328807
## Varians
## UMR 0.207492544
## Pengeluaran 0.112394000
## Bekerja 0.002451156
## Pengangguran 3.434676667
# 4. REGRESI LINEAR BERGANDA (OLS)
model <- lm(UMR ~ Pengeluaran + Bekerja + Pengangguran, data = df)
cat("=== MODEL REGRESI LINEAR BERGANDA ===\n")
## === MODEL REGRESI LINEAR BERGANDA ===
# Tampilkan persamaan
cat("Persamaan Regresi:\n")
## Persamaan Regresi:
cat("UMR = ", round(coef(model)[1], 2), " + ",
round(coef(model)[2], 6), "*Pengeluaran + ",
round(coef(model)[3], 6), "*Bekerja + ",
round(coef(model)[4], 2), "*Pengangguran\n\n")
## UMR = -1.85 + 1.024646 *Pengeluaran + 2.1973 *Bekerja + 0.02 *Pengangguran
# Tampilkan tabel koefisien lengkap
cat("Tabel Koefisien:\n")
## Tabel Koefisien:
print(summary(model)$coefficients)
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.85114000 0.80491615 -2.2997923 0.0611178623
## Pengeluaran 1.02464569 0.17134266 5.9800967 0.0009814919
## Bekerja 2.19729962 1.11386745 1.9726760 0.0959934847
## Pengangguran 0.01856979 0.01903934 0.9753381 0.3670599218
# 5. UJI NORMALITAS
cat("\n=== UJI NORMALITAS (Shapiro-Wilk) ===\n")
##
## === UJI NORMALITAS (Shapiro-Wilk) ===
shapiro_test <- shapiro.test(residuals(model))
cat("p-value =", shapiro_test$p.value, "\n")
## p-value = 0.510042
if(shapiro_test$p.value > 0.05) {
cat("Kesimpulan: Residual berdistribusi normal\n")
} else {
cat("Kesimpulan: Residual TIDAK berdistribusi normal\n")
}
## Kesimpulan: Residual berdistribusi normal
# 6. UJI AUTOKORELASI
cat("\n=== UJI AUTOKORELASI (Durbin-Watson) ===\n")
##
## === UJI AUTOKORELASI (Durbin-Watson) ===
dw_test <- durbinWatsonTest(model)
cat("Statistik Durbin-Watson =", dw_test$dw, "\n")
## Statistik Durbin-Watson = 3.010005
cat("p-value =", dw_test$p, "\n")
## p-value = 0.288
if(dw_test$p > 0.05) {
cat("Kesimpulan: Tidak ada autokorelasi\n")
} else {
cat("Kesimpulan: Ada autokorelasi\n")
}
## Kesimpulan: Tidak ada autokorelasi
# 7. UJI HETEROSKEDASTISITAS
cat("\n=== UJI HETEROSKEDASTISITAS (Breusch-Pagan) ===\n")
##
## === UJI HETEROSKEDASTISITAS (Breusch-Pagan) ===
bp_test <- bptest(model)
cat("p-value =", bp_test$p.value, "\n")
## p-value = 0.2286588
if(bp_test$p.value > 0.05) {
cat("Kesimpulan: Tidak ada heteroskedastisitas (varians konstan)\n")
} else {
cat("Kesimpulan: Ada heteroskedastisitas (varians tidak konstan)\n")
}
## Kesimpulan: Tidak ada heteroskedastisitas (varians konstan)
# 8. UJI MULTIKOLINEARITAS
cat("\n=== UJI MULTIKOLINEARITAS (VIF & Tolerance) ===\n")
##
## === UJI MULTIKOLINEARITAS (VIF & Tolerance) ===
# Hitung VIF
vif_values <- vif(model)
# Hitung Tolerance (1/VIF)
tolerance_values <- 1/vif_values
# Buat tabel hasil
multicoll_table <- data.frame(
Variabel = names(vif_values),
VIF = round(vif_values, 3),
Tolerance = round(tolerance_values, 3)
)
print(multicoll_table)
## Variabel VIF Tolerance
## Pengeluaran Pengeluaran 3.065 0.326
## Bekerja Bekerja 2.825 0.354
## Pengangguran Pengangguran 1.156 0.865
# 9. UJI F (SIMULTAN)
cat("\n=== UJI F (SIMULTAN) ===\n")
##
## === UJI F (SIMULTAN) ===
anova_result <- anova(model)
print(anova_result)
## Analysis of Variance Table
##
## Response: UMR
## Df Sum Sq Mean Sq F value Pr(>F)
## Pengeluaran 1 1.76571 1.76571 182.2348 1.024e-05 ***
## Bekerja 1 0.03437 0.03437 3.5474 0.1086
## Pengangguran 1 0.00922 0.00922 0.9513 0.3671
## Residuals 6 0.05814 0.00969
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
cat("\nF =", round(anova_result$`F value`[1], 3),
", p =", ifelse(anova_result$`Pr(>F)`[1] < 0.001,
".000",
round(anova_result$`Pr(>F)`[1], 3)))
##
## F = 182.235 , p = .000
if(anova_result$`Pr(>F)`[1] < 0.05) {
cat(" → Signifikan\n")
} else {
cat(" → Tidak signifikan\n")
}
## → Signifikan
# 10. UJI T (PARSIAL)
cat("\n=== UJI T (PARSIAL) ===\n")
##
## === UJI T (PARSIAL) ===
coef_summary <- summary(model)$coefficients
cat("Signifikansi masing-masing variabel:\n")
## Signifikansi masing-masing variabel:
for(i in 2:nrow(coef_summary)) {
cat(rownames(coef_summary)[i], ": ")
cat("t =", round(coef_summary[i, 3], 3), ", ")
cat("p =", coef_summary[i, 4])
if(coef_summary[i, 4] < 0.05) {
cat(" → SIGNIFIKAN\n")
} else {
cat(" → TIDAK SIGNIFIKAN\n")
}
}
## Pengeluaran : t = 5.98 , p = 0.0009814919 → SIGNIFIKAN
## Bekerja : t = 1.973 , p = 0.09599348 → TIDAK SIGNIFIKAN
## Pengangguran : t = 0.975 , p = 0.3670599 → TIDAK SIGNIFIKAN
# 11. KOEFISIEN DETERMINASI
cat("\n=== KOEFISIEN DETERMINASI ===\n")
##
## === KOEFISIEN DETERMINASI ===
cat("R-squared =", round(summary(model)$r.squared, 4), "\n")
## R-squared = 0.9689
cat("Adjusted R-squared =", round(summary(model)$adj.r.squared, 4), "\n")
## Adjusted R-squared = 0.9533
cat("Interpretasi: Variabel independen menjelaskan",
round(summary(model)$r.squared * 100, 1),
"% variasi dalam UMR\n")
## Interpretasi: Variabel independen menjelaskan 96.9 % variasi dalam UMR
# 12. VISUALISASI
# VISUALISASI (4 Plot Diagnostik)
par(mfrow = c(2, 2))
plot(model, main = "Diagnostic Plots")

library(readxl)
library(ggplot2)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following object is masked from 'package:car':
##
## recode
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
# Load data
grafik <- read_excel('D:\\Documents\\Semester 3\\Komputasi Statistika\\Project\\project.xlsx', sheet = "data asli")
gf <- data.frame(
Tahun = grafik$Tahun,
UMR = grafik$`UMR Kota Semarang (Rupiah)`/ 1000000,
Pengeluaran = grafik$`Rata rata Pengeluaran per kapita sebulan (Rupiah)`/ 1000000,
Bekerja = grafik$`Jumlah yang bekerja (Jiwa)`/1000000,
Pengangguran = grafik$`Pengangguran (%)`
)
gf
## Tahun UMR Pengeluaran Bekerja Pengangguran
## 1 2013 1.051000 1.070470 0.802747 6.02
## 2 2014 1.208200 1.058225 0.820317 7.76
## 3 2015 1.419000 1.297895 0.836837 5.77
## 4 2016 1.610000 1.362348 0.899796 4.63
## 5 2017 1.745000 1.432800 0.872827 6.61
## 6 2018 1.900000 1.771154 0.907937 5.21
## 7 2019 2.055000 1.648489 0.925963 4.50
## 8 2020 2.229880 1.770967 0.936076 9.57
## 9 2021 2.302798 1.929166 0.994091 9.54
## 10 2022 2.311254 1.973168 0.873358 7.60
# Histogram UMR
p1<-ggplot(gf, aes(x = UMR)) +
geom_histogram(binwidth = 0.2, fill = "chartreuse1", color = "white", alpha = 0.8) +
geom_vline(aes(xintercept = mean(UMR)), color = "red", linetype = "dashed", size = 1) +
annotate("text", x = mean(gf$UMR) + 0.1, y = 2,
label = paste("Rata-rata:", round(mean(gf$UMR), 2), "jt"),
color = "red", hjust = 0) +
labs(
title = "Distribusi UMR Kota Semarang (2013-2022)",
subtitle = "Data dalam Juta Rupiah",
x = "UMR (Juta Rupiah)",
y = "Frekuensi"
) +
theme_minimal()
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once per session.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
p1

# Histogram UMR
p1<-ggplot(gf, aes(x = UMR)) +
geom_histogram(binwidth = 0.2, fill = "chartreuse1", color = "white", alpha = 0.8) +
geom_vline(aes(xintercept = mean(UMR)), color = "red", linetype = "dashed", size = 1) +
annotate("text", x = mean(gf$UMR) + 0.1, y = 2,
label = paste("Rata-rata:", round(mean(gf$UMR), 2), "jt"),
color = "red", hjust = 0) +
labs(
title = "Distribusi UMR Kota Semarang (2013-2022)",
subtitle = "Data dalam Juta Rupiah",
x = "UMR (Juta Rupiah)",
y = "Frekuensi"
) +
theme_minimal()
# Simpan sebagai JPG
ggsave("histogram_umr_semarang.jpg",
plot = p1,
width = 10, height = 6, dpi = 300)
# Diagram garis UMR
p2<-ggplot(gf, aes(x = Tahun, y = UMR)) +
geom_line(color = "blue", size = 1.5) +
geom_point(size = 3, color = "blue") +
geom_text(aes(label = paste(round(UMR, 1), "jt")), vjust = -1, size = 3.5) +
geom_smooth(method = "lm", se = FALSE, color = "red", linetype = "dashed", alpha = 0.5) +
scale_x_continuous(breaks = seq(2013, 2022, 1)) +
labs(
title = "Perkembangan UMR Kota Semarang (2013-2022)",
subtitle = "Tren Kenaikan Upah Minimum Regional",
x = "Tahun",
y = "UMR (Juta Rupiah)"
) +
theme_minimal()
p2
## `geom_smooth()` using formula = 'y ~ x'

# Diagram garis UMR
p2<-ggplot(gf, aes(x = Tahun, y = UMR)) +
geom_line(color = "blue", size = 1.5) +
geom_point(size = 3, color = "blue") +
geom_text(aes(label = paste(round(UMR, 1), "jt")), vjust = -1, size = 3.5) +
geom_smooth(method = "lm", se = FALSE, color = "red", linetype = "dashed", alpha = 0.5) +
scale_x_continuous(breaks = seq(2013, 2022, 1)) +
labs(
title = "Perkembangan UMR Kota Semarang (2013-2022)",
subtitle = "Tren Kenaikan Upah Minimum Regional",
x = "Tahun",
y = "UMR (Juta Rupiah)"
) +
theme_minimal()
# Simpan sebagai JPG
ggsave("grafik_umr_semarang.jpg",
plot = p2,
width = 10, height = 6, dpi = 300)
## `geom_smooth()` using formula = 'y ~ x'