1 Pendahuluan

Pengangguran terbuka merupakan salah satu indikator penting dalam membaca kondisi pasar kerja. Pada penelitian ini, data yang dianalisis adalah jumlah pengangguran terbuka berdasarkan wilayah dan tingkat pendidikan. Karena data berbentuk frekuensi pada kombinasi kategori, pendekatan yang digunakan adalah analisis tabel kontingensi dan model log-linear dua arah.

Model log-linear digunakan untuk memodelkan frekuensi harapan setiap sel tabel kontingensi. Dalam pendekatan ini, frekuensi sel diasumsikan mengikuti distribusi Poisson dan dimodelkan menggunakan link log.

Tujuan utama analisis: mengevaluasi apakah terdapat asosiasi antara wilayah dan tingkat pendidikan dalam distribusi pengangguran terbuka di Kabupaten Bandung dan Kota Bandung tahun 2025.

2 Tahap 1. Rumuskan Tujuan

Tujuan analisis dalam penelitian ini adalah:

  1. membentuk tabel kontingensi antara wilayah dan tingkat pendidikan;
  2. memeriksa frekuensi observasi dan frekuensi harapan;
  3. menguji independensi antara wilayah dan tingkat pendidikan;
  4. membangun lima model log-linear dua arah;
  5. mengevaluasi model menggunakan deviance \(G^2\), Pearson \(X^2\), AIC, BIC, dan residual;
  6. menghitung odds ratio untuk membandingkan pola pendidikan antarwilayah;
  7. menentukan model yang paling sesuai secara statistik dan substantif.

3 Tahap 2. Siapkan Tabel Kontingensi

data <- data.frame(
  Wilayah = c(rep("Kabupaten Bandung", 5), rep("Kota Bandung", 5)),
  Pendidikan = rep(c("SD ke bawah", "SMP", "SMA Umum", "SMA Kejuruan", "Diploma/PT"), 2),
  Freq = c(18433, 25153, 43658, 36838, 4775,
           8477, 11871, 23569, 34997, 20392)
)

data
tab <- xtabs(Freq ~ Wilayah + Pendidikan, data = data)
tab_margins <- addmargins(tab)

tab_margins
##                    Pendidikan
## Wilayah             Diploma/PT SD ke bawah SMA Kejuruan SMA Umum    SMP    Sum
##   Kabupaten Bandung       4775       18433        36838    43658  25153 128857
##   Kota Bandung           20392        8477        34997    23569  11871  99306
##   Sum                    25167       26910        71835    67227  37024 228163
kable(tab_margins, caption = "Tabel 1. Tabel kontingensi jumlah pengangguran terbuka berdasarkan wilayah dan tingkat pendidikan.") %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed")) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#17324D") %>%
  column_spec(1, bold = TRUE)
Tabel 1. Tabel kontingensi jumlah pengangguran terbuka berdasarkan wilayah dan tingkat pendidikan.
Diploma/PT SD ke bawah SMA Kejuruan SMA Umum SMP Sum
Kabupaten Bandung 4775 18433 36838 43658 25153 128857
Kota Bandung 20392 8477 34997 23569 11871 99306
Sum 25167 26910 71835 67227 37024 228163
<div class="metric-label">Total pengangguran</div>
<div class="metric-value">228.163</div>
<div class="metric-label">Kabupaten Bandung</div>
<div class="metric-value">128.857</div>
<div class="metric-label">Kota Bandung</div>
<div class="metric-value">99.306</div>

3.1 Interpretasi Tabel Kontingensi

Berdasarkan Tabel 1, total pengangguran terbuka pada dua wilayah adalah 228.163 orang. Kabupaten Bandung memiliki total 128.857 orang, sedangkan Kota Bandung memiliki total 99.306 orang. Kategori terbesar di Kabupaten Bandung adalah SMA Umum, sedangkan kategori terbesar di Kota Bandung adalah SMA Kejuruan. Perbedaan kategori dominan ini memberi indikasi awal bahwa pola pengangguran menurut pendidikan tidak sama antara kedua wilayah.

prop_baris <- prop.table(tab, margin = 1)
prop_kolom <- prop.table(tab, margin = 2)

prop_baris
##                    Pendidikan
## Wilayah             Diploma/PT SD ke bawah SMA Kejuruan   SMA Umum        SMP
##   Kabupaten Bandung 0.03705658  0.14305005   0.28588280 0.33880969 0.19520088
##   Kota Bandung      0.20534509  0.08536242   0.35241577 0.23733712 0.11953960
prop_kolom
##                    Pendidikan
## Wilayah             Diploma/PT SD ke bawah SMA Kejuruan  SMA Umum       SMP
##   Kabupaten Bandung  0.1897326   0.6849870    0.5128141 0.6494117 0.6793701
##   Kota Bandung       0.8102674   0.3150130    0.4871859 0.3505883 0.3206299
kable(round(prop_baris * 100, 2), caption = "Tabel 2. Proporsi baris dalam persen.") %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover")) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#2F80ED")
Tabel 2. Proporsi baris dalam persen.
Diploma/PT SD ke bawah SMA Kejuruan SMA Umum SMP
Kabupaten Bandung 3.71 14.31 28.59 33.88 19.52
Kota Bandung 20.53 8.54 35.24 23.73 11.95

3.2 Interpretasi Proporsi

Proporsi baris menunjukkan komposisi pendidikan dalam masing-masing wilayah. Di Kabupaten Bandung, pengangguran lebih terkonsentrasi pada lulusan SMA Umum, sedangkan di Kota Bandung proporsi lulusan SMA Kejuruan dan Diploma/Perguruan Tinggi tampak lebih menonjol. Khusus kelompok Diploma/PT, proporsinya di Kota Bandung jauh lebih besar dibandingkan Kabupaten Bandung. Hal ini menunjukkan adanya perbedaan struktur pengangguran yang kuat antara wilayah kabupaten dan kota.

ggplot(data, aes(x = Pendidikan, y = Freq, fill = Wilayah)) +
  geom_col(position = "dodge", width = 0.75) +
  geom_text(aes(label = fmt_int(Freq)), position = position_dodge(width = 0.75), vjust = -0.35, size = 3.2) +
  scale_y_continuous(labels = label_number(big.mark = ".", decimal.mark = ",")) +
  labs(
    title = "Pengangguran Terbuka Menurut Wilayah dan Pendidikan",
    subtitle = "Kabupaten Bandung dan Kota Bandung, 2025",
    x = "Tingkat Pendidikan", y = "Jumlah Pengangguran", fill = "Wilayah"
  ) +
  theme_minimal(base_size = 12) +
  theme(
    plot.title = element_text(face = "bold", color = "#17324D", size = 15),
    plot.subtitle = element_text(color = "#486581"),
    axis.text.x = element_text(angle = 25, hjust = 1),
    legend.position = "top"
  )
Figure 1. Distribusi jumlah pengangguran terbuka berdasarkan wilayah dan tingkat pendidikan.

Figure 1. Distribusi jumlah pengangguran terbuka berdasarkan wilayah dan tingkat pendidikan.

4 Tahap 3. Cek Frekuensi Sel

Frekuensi harapan pada tabel kontingensi dihitung dengan rumus:

\[ E_{ij}=\frac{n_{i+}n_{+j}}{n}, \]

dengan \(n_{i+}\) adalah total baris ke-\(i\), \(n_{+j}\) adalah total kolom ke-\(j\), dan \(n\) adalah total keseluruhan.

uji_chisq <- chisq.test(tab)
expected_count <- uji_chisq$expected
expected_count
##                    Pendidikan
## Wilayah             Diploma/PT SD ke bawah SMA Kejuruan SMA Umum      SMP
##   Kabupaten Bandung   14213.28    15197.65     40569.43 37967.02 20909.62
##   Kota Bandung        10953.72    11712.35     31265.57 29259.98 16114.38
kable(expected_count, digits = 2, caption = "Tabel 3. Frekuensi harapan berdasarkan model independensi.") %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover")) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#17324D")
Tabel 3. Frekuensi harapan berdasarkan model independensi.
Diploma/PT SD ke bawah SMA Kejuruan SMA Umum SMP
Kabupaten Bandung 14213.28 15197.65 40569.43 37967.02 20909.62
Kota Bandung 10953.72 11712.35 31265.57 29259.98 16114.38
cek_sel <- data.frame(
  Minimum_Observed = min(tab),
  Minimum_Expected = min(expected_count),
  Jumlah_Sel_Observed_Nol = sum(tab == 0),
  Jumlah_Sel_Expected_Kurang_5 = sum(expected_count < 5),
  Persentase_Expected_Kurang_5 = mean(expected_count < 5) * 100
)
cek_sel
kable(cek_sel, digits = 4, caption = "Tabel 4. Pemeriksaan frekuensi sel.") %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover")) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#27AE60")
Tabel 4. Pemeriksaan frekuensi sel.
Minimum_Observed Minimum_Expected Jumlah_Sel_Observed_Nol Jumlah_Sel_Expected_Kurang_5 Persentase_Expected_Kurang_5
4775 10953.72 0 0 0

Seluruh expected count bernilai lebih dari 5 dan tidak terdapat sel observasi bernilai nol. Dengan demikian, data memenuhi kelayakan dasar untuk analisis chi-square dan pemodelan log-linear.

5 Tahap 4. Spesifikasi Model

Lima model log-linear dua arah yang dianalisis adalah sebagai berikut.

\[ M_0: \log(\mu_{ij})=\lambda \] \[ M_1: \log(\mu_{ij})=\lambda+\lambda_i^W \] \[ M_2: \log(\mu_{ij})=\lambda+\lambda_j^P \] \[ M_3: \log(\mu_{ij})=\lambda+\lambda_i^W+\lambda_j^P \] \[ M_4: \log(\mu_{ij})=\lambda+\lambda_i^W+\lambda_j^P+\lambda_{ij}^{WP} \]

Keterangan: \(W\) menyatakan wilayah, \(P\) menyatakan pendidikan, dan \(\mu_{ij}\) adalah frekuensi harapan pada sel ke-\((i,j)\).

6 Tahap 5. Pilih Kendala Parameter

Pada output standar R, kendala parameter menggunakan reference category. Artinya, salah satu kategori dijadikan acuan, lalu koefisien kategori lain ditafsirkan relatif terhadap kategori acuan tersebut.

contrasts(factor(data$Wilayah))
##                   Kota Bandung
## Kabupaten Bandung            0
## Kota Bandung                 1
contrasts(factor(data$Pendidikan))
##              SD ke bawah SMA Kejuruan SMA Umum SMP
## Diploma/PT             0            0        0   0
## SD ke bawah            1            0        0   0
## SMA Kejuruan           0            1        0   0
## SMA Umum               0            0        1   0
## SMP                    0            0        0   1

Koefisien GLM dengan kategori referensi tidak harus sama dengan estimasi manual berbasis sum-to-zero. Namun, keduanya menghasilkan fitted value yang sama untuk model yang sama.

7 Tahap 6. Estimasi Model

Model log-linear diestimasi menggunakan GLM Poisson dengan link log:

\[ N_{ij}\sim \text{Poisson}(\mu_{ij}), \qquad \log(\mu_{ij})=\eta_{ij}. \]

model_null <- glm(Freq ~ 1, family = poisson(link = "log"), data = data)
model_wilayah <- glm(Freq ~ Wilayah, family = poisson(link = "log"), data = data)
model_pendidikan <- glm(Freq ~ Pendidikan, family = poisson(link = "log"), data = data)
model_ind <- glm(Freq ~ Wilayah + Pendidikan, family = poisson(link = "log"), data = data)
model_sat <- glm(Freq ~ Wilayah * Pendidikan, family = poisson(link = "log"), data = data)
summary(model_ind)
## 
## Call:
## glm(formula = Freq ~ Wilayah + Pendidikan, family = poisson(link = "log"), 
##     data = data)
## 
## Coefficients:
##                         Estimate Std. Error  z value Pr(>|z|)    
## (Intercept)             9.561932   0.006566 1456.281  < 2e-16 ***
## WilayahKota Bandung    -0.260497   0.004223  -61.691  < 2e-16 ***
## PendidikanSD ke bawah   0.066964   0.008769    7.636 2.23e-14 ***
## PendidikanSMA Kejuruan  1.048838   0.007325  143.186  < 2e-16 ***
## PendidikanSMA Umum      0.982541   0.007390  132.959  < 2e-16 ***
## PendidikanSMP           0.386033   0.008170   47.252  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 68651  on 9  degrees of freedom
## Residual deviance: 21385  on 4  degrees of freedom
## AIC: 21514
## 
## Number of Fisher Scoring iterations: 5
summary(model_sat)
## 
## Call:
## glm(formula = Freq ~ Wilayah * Pendidikan, family = poisson(link = "log"), 
##     data = data)
## 
## Coefficients:
##                                            Estimate Std. Error z value Pr(>|z|)
## (Intercept)                                 8.47115    0.01447  585.37   <2e-16
## WilayahKota Bandung                         1.45175    0.01608   90.30   <2e-16
## PendidikanSD ke bawah                       1.35075    0.01624   83.18   <2e-16
## PendidikanSMA Kejuruan                      2.04314    0.01538  132.84   <2e-16
## PendidikanSMA Umum                          2.21299    0.01524  145.19   <2e-16
## PendidikanSMP                               1.66158    0.01579  105.26   <2e-16
## WilayahKota Bandung:PendidikanSD ke bawah  -2.22853    0.02075 -107.39   <2e-16
## WilayahKota Bandung:PendidikanSMA Kejuruan -1.50302    0.01773  -84.80   <2e-16
## WilayahKota Bandung:PendidikanSMA Umum     -2.06820    0.01799 -114.94   <2e-16
## WilayahKota Bandung:PendidikanSMP          -2.20263    0.01956 -112.63   <2e-16
##                                               
## (Intercept)                                ***
## WilayahKota Bandung                        ***
## PendidikanSD ke bawah                      ***
## PendidikanSMA Kejuruan                     ***
## PendidikanSMA Umum                         ***
## PendidikanSMP                              ***
## WilayahKota Bandung:PendidikanSD ke bawah  ***
## WilayahKota Bandung:PendidikanSMA Kejuruan ***
## WilayahKota Bandung:PendidikanSMA Umum     ***
## WilayahKota Bandung:PendidikanSMP          ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 6.8651e+04  on 9  degrees of freedom
## Residual deviance: 1.4937e-12  on 0  degrees of freedom
## AIC: 136.88
## 
## Number of Fisher Scoring iterations: 2

7.1 Interpretasi Estimasi Model

Model independensi hanya memuat efek utama wilayah dan pendidikan. Model ini mengasumsikan bahwa tidak terdapat interaksi antara wilayah dan pendidikan. Sebaliknya, model saturated memuat interaksi \(WP\), sehingga mampu mereproduksi seluruh frekuensi observasi secara sempurna.

8 Tahap 7. Evaluasi Fit

Evaluasi kecocokan model dilakukan menggunakan deviance \(G^2\), Pearson \(X^2\), AIC, dan BIC. Statistik deviance didefinisikan sebagai:

\[ G^2=2\sum_i\sum_j n_{ij}\log\left(\frac{n_{ij}}{\hat{\mu}_{ij}}\right), \]

sedangkan statistik Pearson didefinisikan sebagai:

\[ X^2=\sum_i\sum_j\frac{(n_{ij}-\hat{\mu}_{ij})^2}{\hat{\mu}_{ij}}. \]

gof_model <- function(model, nama_model) {
  G2 <- deviance(model)
  df <- df.residual(model)
  if (df > 0) {
    p_G2 <- pchisq(G2, df = df, lower.tail = FALSE)
    X2 <- sum(residuals(model, type = "pearson")^2)
    p_X2 <- pchisq(X2, df = df, lower.tail = FALSE)
  } else {
    X2 <- 0
    p_G2 <- NA
    p_X2 <- NA
  }
  data.frame(
    Model = nama_model,
    df_residual = df,
    G2 = G2,
    p_G2 = p_G2,
    Pearson_X2 = X2,
    p_Pearson = p_X2,
    AIC = AIC(model),
    BIC = BIC(model)
  )
}

hasil_gof <- rbind(
  gof_model(model_null, "Null"),
  gof_model(model_wilayah, "Efek Wilayah Saja"),
  gof_model(model_pendidikan, "Efek Pendidikan Saja"),
  gof_model(model_ind, "Independensi"),
  gof_model(model_sat, "Saturated")
) %>%
  mutate(
    p_G2_tampil = fmt_p(p_G2),
    p_Pearson_tampil = fmt_p(p_Pearson)
  )

hasil_gof
hasil_gof_tampil <- hasil_gof %>%
  select(Model, df_residual, G2, p_G2_tampil, Pearson_X2, p_Pearson_tampil, AIC, BIC)

kable(hasil_gof_tampil, digits = 4,
      col.names = c("Model", "df", "G²", "p-value G²", "Pearson X²", "p-value Pearson", "AIC", "BIC"),
      caption = "Tabel 5. Goodness-of-fit lima model log-linear.") %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed")) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#17324D") %>%
  row_spec(5, bold = TRUE, background = "#EFFFF4")
Tabel 5. Goodness-of-fit lima model log-linear.
Model df p-value G² Pearson X² p-value Pearson AIC BIC
Null 9 68650.60 < 0,001 64049.60 < 0,001 68769.4862 68769.7888
Efek Wilayah Saja 8 64812.47 < 0,001 58357.70 < 0,001 64933.3548 64933.9599
Efek Pendidikan Saja 5 25222.90 < 0,001 24189.39 < 0,001 25349.7874 25351.3004
Independensi 4 21384.77 < 0,001 20709.42 < 0,001 21513.6560 21515.4715
Saturated 0 0.00 NA 0.00 NA 136.8837 139.9095

8.1 Interpretasi Goodness-of-Fit

Berdasarkan Tabel 5, model null, model efek wilayah saja, model efek pendidikan saja, dan model independensi memiliki nilai \(G^2\) dan \(X^2\) yang sangat besar dengan p-value kurang dari 0,001. Hal ini menunjukkan bahwa model-model tersebut tidak mampu menjelaskan pola frekuensi pengangguran terbuka dengan baik.

Model saturated memiliki deviance mendekati nol karena model ini memuat seluruh efek utama dan interaksi. Namun, secara metodologis, model saturated perlu dipahami sebagai model pembanding karena model ini selalu cocok sempurna pada tabel dua arah.

9 Tahap 8. Bandingkan Model

Perbandingan model bersarang dilakukan menggunakan likelihood ratio test.

lrt_wilayah <- anova(model_null, model_wilayah, model_ind, model_sat, test = "Chisq")
lrt_pendidikan <- anova(model_null, model_pendidikan, model_ind, model_sat, test = "Chisq")
lrt_ind_sat <- anova(model_ind, model_sat, test = "Chisq")

lrt_wilayah
lrt_pendidikan
lrt_ind_sat

9.1 Interpretasi Perbandingan Model

Perbandingan model independensi dengan model saturated menghasilkan p-value kurang dari 0,001. Artinya, penambahan interaksi antara wilayah dan pendidikan secara signifikan memperbaiki kecocokan model. Dengan demikian, pola pengangguran terbuka tidak dapat dijelaskan hanya oleh efek wilayah dan pendidikan secara terpisah, tetapi memerlukan komponen interaksi \(WP\).

10 Tahap 9. Interpretasi Substantif

10.1 Analisis Residual

Residual Pearson dihitung dengan rumus:

\[ r_{ij}=\frac{n_{ij}-\hat{\mu}_{ij}}{\sqrt{\hat{\mu}_{ij}}}. \]

Residual standar digunakan untuk melihat sel mana yang paling menyimpang dari model independensi. Nilai residual standar dengan \(|r|>2\) menunjukkan penyimpangan yang perlu diperhatikan.

data$Expected <- fitted(model_ind)
data$Pearson_Residual <- residuals(model_ind, type = "pearson")
data$Std_Residual <- rstandard(model_ind, type = "pearson")

hasil_residual <- data %>%
  select(Wilayah, Pendidikan, Observed = Freq, Expected, Pearson_Residual, Std_Residual)

hasil_residual
kable(hasil_residual, digits = 4,
      caption = "Tabel 6. Frekuensi observasi, frekuensi harapan, dan residual model independensi.") %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed")) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#17324D")
Tabel 6. Frekuensi observasi, frekuensi harapan, dan residual model independensi.
Wilayah Pendidikan Observed Expected Pearson_Residual Std_Residual
Kabupaten Bandung SD ke bawah 18433 15197.65 26.2442 42.3564
Kabupaten Bandung SMP 25153 20909.62 29.3453 48.5984
Kabupaten Bandung SMA Umum 43658 37967.02 29.2068 52.7126
Kabupaten Bandung SMA Kejuruan 36838 40569.43 -18.5257 -33.9246
Kabupaten Bandung Diploma/PT 4775 14213.28 -79.1673 -127.2212
Kota Bandung SD ke bawah 8477 11712.35 -29.8950 -42.3564
Kota Bandung SMP 11871 16114.38 -33.4276 -48.5984
Kota Bandung SMA Umum 23569 29259.98 -33.2698 -52.7126
Kota Bandung SMA Kejuruan 34997 31265.57 21.1029 33.9246
Kota Bandung Diploma/PT 20392 10953.72 90.1803 127.2212
sel_menyimpang <- hasil_residual %>%
  arrange(desc(abs(Std_Residual)))
sel_menyimpang

10.2 Interpretasi Residual

Residual standar terbesar terdapat pada kombinasi Kota Bandung–Diploma/PT dengan residual positif sangat besar dan Kabupaten Bandung–Diploma/PT dengan residual negatif sangat besar. Artinya, jumlah pengangguran lulusan Diploma/Perguruan Tinggi di Kota Bandung jauh lebih besar dibandingkan frekuensi harapan model independensi. Sebaliknya, jumlah pengangguran lulusan Diploma/Perguruan Tinggi di Kabupaten Bandung jauh lebih kecil dibandingkan frekuensi harapannya.

Temuan ini menunjukkan bahwa kelompok Diploma/PT menjadi sumber utama perbedaan pola pengangguran antara Kabupaten Bandung dan Kota Bandung.

ggplot(data, aes(x = Pendidikan, y = Wilayah, fill = Std_Residual)) +
  geom_tile(color = "white", linewidth = 1.1) +
  geom_text(aes(label = round(Std_Residual, 2)), size = 4, fontface = "bold") +
  scale_fill_gradient2(low = "#2F80ED", mid = "white", high = "#EB5757", midpoint = 0) +
  labs(
    title = "Heatmap Residual Standar Model Independensi",
    subtitle = "Wilayah × Pendidikan",
    x = "Tingkat Pendidikan", y = "Wilayah", fill = "Residual\nStandar"
  ) +
  theme_minimal(base_size = 12) +
  theme(
    plot.title = element_text(face = "bold", color = "#17324D", size = 15),
    plot.subtitle = element_text(color = "#486581"),
    axis.text.x = element_text(angle = 25, hjust = 1)
  )
Figure 2. Heatmap residual standar model independensi. Warna merah menunjukkan observed count lebih besar daripada expected count, sedangkan warna biru menunjukkan observed count lebih kecil daripada expected count.

Figure 2. Heatmap residual standar model independensi. Warna merah menunjukkan observed count lebih besar daripada expected count, sedangkan warna biru menunjukkan observed count lebih kecil daripada expected count.

data$Kategori <- paste(data$Wilayah, data$Pendidikan, sep = " - ")

ggplot(data, aes(x = reorder(Kategori, Std_Residual), y = Std_Residual, fill = Std_Residual > 0)) +
  geom_col(width = 0.72) +
  coord_flip() +
  geom_hline(yintercept = c(-2, 2), linetype = "dashed", color = "#EB5757", linewidth = 0.8) +
  geom_hline(yintercept = 0, color = "#102A43") +
  scale_fill_manual(values = c("#2F80ED", "#EB5757"), guide = "none") +
  labs(
    title = "Residual Standar Setiap Sel",
    subtitle = "Garis merah menunjukkan batas ±2",
    x = "Kombinasi Wilayah dan Pendidikan", y = "Residual Standar"
  ) +
  theme_minimal(base_size = 12) +
  theme(
    plot.title = element_text(face = "bold", color = "#17324D", size = 15),
    plot.subtitle = element_text(color = "#486581")
  )
Figure 3. Residual standar untuk setiap kombinasi wilayah dan pendidikan. Garis merah menunjukkan batas residual standar ±2.

Figure 3. Residual standar untuk setiap kombinasi wilayah dan pendidikan. Garis merah menunjukkan batas residual standar ±2.

10.3 Odds Ratio

Karena tabel berukuran \(2\times 5\), odds ratio dihitung dengan menjadikan satu kategori pendidikan sebagai referensi. Dalam analisis ini, kategori Diploma/PT digunakan sebagai referensi.

\[ OR=\frac{a\times d}{b\times c}, \]

dengan \(a\) adalah frekuensi Kabupaten Bandung pada kategori pendidikan tertentu, \(b\) adalah frekuensi Kabupaten Bandung pada kategori referensi, \(c\) adalah frekuensi Kota Bandung pada kategori pendidikan tertentu, dan \(d\) adalah frekuensi Kota Bandung pada kategori referensi.

ref <- "Diploma/PT"

hitung_or <- function(kat, ref, tab) {
  a <- tab["Kabupaten Bandung", kat]
  b <- tab["Kabupaten Bandung", ref]
  c <- tab["Kota Bandung", kat]
  d <- tab["Kota Bandung", ref]
  OR <- (a * d) / (b * c)
  log_OR <- log(OR)
  SE_log_OR <- sqrt(1/a + 1/b + 1/c + 1/d)
  z <- log_OR / SE_log_OR
  p_value <- 2 * (1 - pnorm(abs(z)))
  lower <- exp(log_OR - 1.96 * SE_log_OR)
  upper <- exp(log_OR + 1.96 * SE_log_OR)
  data.frame(
    Pendidikan = kat,
    Referensi = ref,
    OR = OR,
    Log_OR = log_OR,
    SE_Log_OR = SE_log_OR,
    Z = z,
    p_value = p_value,
    CI_95_Lower = lower,
    CI_95_Upper = upper
  )
}

kategori_uji <- setdiff(colnames(tab), ref)
hasil_OR <- do.call(rbind, lapply(kategori_uji, hitung_or, ref = ref, tab = tab))
hasil_OR
hasil_OR_tampil <- hasil_OR %>%
  mutate(p_value = fmt_p(p_value))

kable(hasil_OR_tampil, digits = 4,
      caption = "Tabel 7. Odds ratio kategori pendidikan terhadap Diploma/PT.") %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed")) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#17324D")
Tabel 7. Odds ratio kategori pendidikan terhadap Diploma/PT.
Pendidikan Referensi OR Log_OR SE_Log_OR Z p_value CI_95_Lower CI_95_Upper
SD ke bawah Diploma/PT 9.2862 2.2285 0.0208 107.3846 < 0,001 8.9161 9.6718
SMA Kejuruan Diploma/PT 4.4952 1.5030 0.0177 84.7955 < 0,001 4.3417 4.6541
SMA Umum Diploma/PT 7.9106 2.0682 0.0180 114.9362 < 0,001 7.6365 8.1946
SMP Diploma/PT 9.0488 2.2026 0.0196 112.6286 < 0,001 8.7085 9.4023

10.4 Interpretasi Odds Ratio

Odds ratio yang lebih besar dari 1 menunjukkan bahwa kategori pendidikan tersebut relatif lebih dominan di Kabupaten Bandung dibandingkan Kota Bandung, jika dibandingkan dengan kategori referensi Diploma/PT. Dengan menggunakan Diploma/PT sebagai referensi, kategori pendidikan dasar dan menengah cenderung memiliki odds yang lebih besar di Kabupaten Bandung. Hal ini konsisten dengan hasil residual yang menunjukkan bahwa Kota Bandung memiliki konsentrasi pengangguran Diploma/PT yang jauh lebih tinggi.

11 Tahap 10. Pilih Model Terbaik

model_by_AIC <- hasil_gof %>% arrange(AIC)
model_by_BIC <- hasil_gof %>% arrange(BIC)

model_by_AIC
model_by_BIC
<div class="metric-label">Model terbaik AIC</div>
<div class="metric-value">Saturated</div>
<div class="metric-label">Model terbaik BIC</div>
<div class="metric-value">Saturated</div>

11.1 Interpretasi Pemilihan Model

Berdasarkan AIC dan BIC, model saturated memiliki nilai terkecil. Namun, model saturated perlu ditafsirkan secara hati-hati karena model ini memiliki derajat bebas nol dan selalu mereproduksi data secara sempurna pada tabel dua arah. Secara substantif, hasil utama yang perlu ditekankan adalah bahwa model independensi ditolak, sehingga terdapat asosiasi antara wilayah dan tingkat pendidikan.

Dengan demikian, struktur asosiasi \([WP]\) diperlukan untuk menjelaskan pola pengangguran terbuka. Artinya, distribusi pengangguran menurut pendidikan berbeda antara Kabupaten Bandung dan Kota Bandung.

12 Tahap 11. Laporkan Hasil

Ringkasan hasil utama:

  • Total pengangguran terbuka pada dua wilayah adalah 228.163 orang.
  • Model independensi menghasilkan \(G^2=21.384,77\) dengan p-value < 0,001.
  • Model independensi ditolak, sehingga terdapat asosiasi antara wilayah dan pendidikan.
  • Sel yang paling berkontribusi terhadap asosiasi adalah kategori Diploma/PT pada kedua wilayah.
  • Kota Bandung memiliki jumlah pengangguran lulusan Diploma/PT jauh lebih tinggi daripada harapan independensi.

Kesimpulan statistik: Wilayah dan tingkat pendidikan tidak independen dalam distribusi pengangguran terbuka. Dengan kata lain, pola pengangguran menurut pendidikan berbeda antara Kabupaten Bandung dan Kota Bandung.

13 Tahap 12. Validasi Sensitivitas

validasi <- data.frame(
  Minimum_Observed = min(tab),
  Minimum_Expected = min(expected_count),
  Jumlah_Observed_Nol = sum(tab == 0),
  Jumlah_Expected_Kurang_5 = sum(expected_count < 5),
  Persentase_Expected_Kurang_5 = mean(expected_count < 5) * 100
)
validasi
kable(validasi, digits = 4, caption = "Tabel 8. Validasi sensitivitas frekuensi sel.") %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover")) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#27AE60")
Tabel 8. Validasi sensitivitas frekuensi sel.
Minimum_Observed Minimum_Expected Jumlah_Observed_Nol Jumlah_Expected_Kurang_5 Persentase_Expected_Kurang_5
4775 10953.72 0 0 0

13.1 Interpretasi Validasi Sensitivitas

Tidak terdapat sel observasi bernilai nol, dan seluruh expected count bernilai lebih besar dari 5. Oleh karena itu, tidak diperlukan penggabungan kategori. Analisis dapat dipertahankan menggunakan lima kategori pendidikan asli.

14 Kesimpulan

Berdasarkan analisis tabel kontingensi dan model log-linear, diperoleh bahwa model independensi antara wilayah dan pendidikan ditolak secara signifikan. Hal ini menunjukkan bahwa pola pengangguran terbuka menurut tingkat pendidikan berbeda antara Kabupaten Bandung dan Kota Bandung.

Perbedaan paling menonjol ditemukan pada kelompok Diploma/Perguruan Tinggi. Kota Bandung memiliki frekuensi pengangguran Diploma/PT yang jauh lebih tinggi daripada nilai harapan model independensi, sedangkan Kabupaten Bandung memiliki frekuensi yang jauh lebih rendah. Sementara itu, Kabupaten Bandung lebih menonjol pada kelompok pendidikan menengah dan rendah, terutama SMA Umum, SMP, dan SD ke bawah.

Secara substantif, hasil ini menunjukkan bahwa karakteristik pasar kerja di wilayah kota dan kabupaten berbeda. Kota Bandung sebagai wilayah perkotaan cenderung memiliki konsentrasi pengangguran berpendidikan tinggi yang lebih besar, sedangkan Kabupaten Bandung lebih banyak didominasi oleh pengangguran dari kelompok pendidikan menengah ke bawah.