Beberapa library yang perlu diinstall sebagai berikut:
library(readxl) # Import Data Sekunder
library(DescTools) # Fungsi menghitung Geometric mean, Harmonic mean, dan Mean deviation
library(kableExtra)
# menambahkan function modus
modus <- function(x){
ux <- unique(x)
ux[which.max(tabulate(match(x, ux)))]
}
Data Tingkat Pengangguran Terbuka (TPT) Menurut Kabupaten/Kota diinput dari Mircosoft Excel dengan syntax sebagai berikut:
dataSekunder <- read_excel("Data TPT 2023-2025.xlsx",
sheet = "Data TPT 2023-2025", range = "A1:D115")
sumber: Badan Pusat Statistik Provinsi Jawa Timur. (13 November 2025). Tingkat Pengangguran Terbuka (TPT) Menurut Kabupaten/Kota, 2025. Diakses pada 2 Maret 2026, dari https://jatim.bps.go.id/id/statistics-table/2/NTQjMg==/tingkat-pengangguran-terbuka-tpt-menurut-kabupaten-kota.html
Data sekunder yang telah diimpor selanjutnya diproses dengan membagi pada beberapa variabel, sehingga memudahkan proses perhitungan ukuran tendensi sentral.
# Input memasukan data tingkat penganguran ke variabel numerik dataA
dataA <- dataSekunder$`TINGKAT PENGANGGURAN (PERSEN)`
# Input memasukan data bobot sembarang ke variabel numerik bobotSembarang
bobotSembarang <- dataSekunder$`BOBOT SEMBARANG`
# Input data bobot relatif ke variabel numerik bobotRelatif
bobotRelatif <- dataSekunder$`BOBOT RELATIF`
Data Generate dengan masing-masing 100.000 observasi
- B1 – Distribusi Simetris (distibusi normal)
- B2 – Skewness positif
- B3 – Skewness negatif
set.seed(123)
# Generate 100.000 observasi data B1 - distribusi simetris
dataB1 <- rnorm(100002, mean=4.1, sd=1)
dataB1 <- dataB1[dataB1 > 0]
# Generate 100.000 observasi data B2 - Skewness positif
dataB2 <- rlnorm(100000, meanlog = log(4.1), sdlog = 0.3)
# Generate 100.000 observasi data B3 - Skewness negatif
dataB3 <- max(dataB2) - dataB2 + 0.01
Syntax perhitungan Ukuran Tendensi Sentral data A, data B1, B2, dan B3 serta visualisasi pada tabel komparatif :
hasil <- data.frame(
Ukuran = c("Mean",
"Weighted Mean (Σwi ≠ 1)",
"Weighted Mean (Σwi = 1)",
"Trimmed Mean (10%)",
"Geometric Mean",
"Harmonic Mean",
"Median",
"Modus"),
Data_A = round(c(
# mean dataA
round(mean(dataA),5),
# Weight mean Σwi != 1
round(weighted.mean(dataA, bobotSembarang),5),
# weight mean Σwi = 1
round(weighted.mean(dataA, bobotRelatif),5),
# trimmed mean (10%)
round(mean(dataA, trim=0.10),5),
# Geometric mean
round(DescTools::Gmean(dataA),5),
# Harmonic mean
round(DescTools::Hmean(dataA),5),
# Median
round(median(dataA),5),
# Modus
round(modus(dataA),5)
),5),
Data_B1 = round(c(
# mean
round(mean(dataB1),5),
# weight mean Σwi != 1
weighted.mean(dataB1, runif(length(dataB1),1,5)),
# weight mean Σwi = 1
weighted.mean(dataB1, rep(1/length(dataB1), length(dataB1))),
# trimmed mean (10%)
round(mean(dataB1, trim=0.10),5),
# geometric mean
round(DescTools::Gmean(dataB1),5),
# harmonic mean
round(DescTools::Hmean(dataB1),5),
# median
round(median(dataB1),5),
# modus
round(modus(dataB1),5)
),5),
Data_B2 = round(c(
# mean
round(mean(dataB2),5),
# weight mean Σwi != 1
weighted.mean(dataB2, runif(length(dataB2),1,5),5),
# weight mean Σwi = 1
weighted.mean(dataB2, rep(1/length(dataB2), length(dataB2)),5),
# trimmed mean (10%)
round(mean(dataB2, trim=0.10),5),
# geometric mean
round(DescTools::Gmean(dataB2),5),
# harmonic mean
round(DescTools::Hmean(dataB2),5),
# median
round(median(dataB2),5),
# modus
round(modus(dataB2),5)
),5),
Data_B3 = round(c(
# mean
round(mean(dataB3),5),
# weight mean Σwi != 1
weighted.mean(dataB3, runif(length(dataB3),1,5),5),
# weight mean Σwi = 1
weighted.mean(dataB3, rep(1/length(dataB3), length(dataB3)),5),
# trimmed mean (10%)
round(mean(dataB3, trim=0.10),5),
# geometric mean
round(DescTools::Gmean(dataB3),5),
# harmonic mean
round(DescTools::Hmean(dataB3),5),
# median
round(median(dataB3),5),
# modus
round(modus(dataB3),5)
),5)
)
kable(hasil, digits = 5, caption = "Tabel Ukuran Tendensi Sentral") %>%
kable_styling(
full_width = TRUE,
font_size = 16,
position = "center",
bootstrap_options = c("striped", "hover", "condensed", "responsive")
) %>%
row_spec(0, bold = TRUE, background = "#34495E", color = "white") %>%
column_spec(1, bold = TRUE)
| Ukuran | Data_A | Data_B1 | Data_B2 | Data_B3 |
|---|---|---|---|---|
| Mean | 4.16132 | 4.10108 | 4.29688 | 10.19378 |
| Weighted Mean (Σwi ≠ 1) | 4.07603 | 4.10093 | 4.29682 | 10.19342 |
| Weighted Mean (Σwi = 1) | 4.07603 | 4.10108 | 4.29688 | 10.19378 |
| Trimmed Mean (10%) | 4.17554 | 4.10151 | 4.18817 | 10.30249 |
| Geometric Mean | 3.93134 | 3.96740 | 4.10639 | 10.09496 |
| Harmonic Mean | 3.65573 | 3.81134 | 3.92425 | 9.87595 |
| Median | 4.25000 | 4.10095 | 4.10555 | 10.38510 |
| Modus | 3.28000 | 3.53952 | 4.02761 | 10.46305 |
Berdasarkan hasil pengolahan data pada Data Sekunder (riil) serta Data B1, B2, dan B3 (simulasi 100.000 observasi), berikut adalah visualisasi dan analisis pada grafik Histogram dan Boxplot:
hist(dataA,
main = "Histogram Data A (TPT Jawa Timur)",
xlab = "Tingkat Pengangguran (%)",
ylab = "Frekuensi",
col = "lightblue",
border = "navy")
boxplot(dataA,
main = "Boxplot Data A (TPT Jawa Timur)",
ylab = "Tingkat Pengangguran (%)",
col = "lightblue",
border = "navy")
hist(dataB1,
main = "Histogram Data B1 Distribusi Simetris",
xlab = "Tingkat Pengangguran (%)",
ylab = "Frekuensi",
col = "steelblue",
border = "navy")
boxplot(dataB1,
main = "Boxplot Data B1 Distribusi Simetris",
ylab = "Tingkat Pengangguran (%)",
col = "steelblue",
border = "navy")
hist(dataB2,
main = "Histogram Data B2 Skewness positif",
xlab = "Tingkat Pengangguran (%)",
ylab = "Frekuensi",
col = "lightgreen",
border = "darkgreen")
boxplot(dataB2,
main = "Boxplot Data B2 Skewness positif",
ylab = "Tingkat Pengangguran (%)",
col = "lightgreen",
border = "darkgreen")
hist(dataB3,
main = "Histogram Data B3 Skewness negatif",
xlab = "Tingkat Pengangguran (%)",
ylab = "Frekuensi",
col = "plum",
border = "purple4")
boxplot(dataB3,
main = "Boxplot Data B3 Skewness negatif",
ylab = "Tingkat Penganguran (%)",
col = "plum",
border = "purple4")