# pengolahan dataframe
library(dplyr)
library(tidyr)
library(lubridate)
# visualisasi
library(ggcorrplot)
library(gplots)
library(ggplot2)
library(plotly)
library(foreign)
library(stringr)
library(glue)
# analisis
library(plm)
library(lfe)
library(lmtest)
library(car)
library(tseries)
library(MLmetrics)Data panel merupakan data dari beberapa individu sama yang diamati dalam kurun waktu tertentu. Data panel memiliki tiga jenis data, yaitu cross section, pooled cross section, dan panel. Jenis yang akan kita gunakan untuk case study ini adalah panel data. Panel data merupakan jenis data yang mengamati banyak subjek pada banyak titik atau periode waktu.
df <- read.csv('data_input/df_final_updated.csv')
head(df)#> Kabupaten Tahun persentase_kemiskinan rls keluhan_kesehatan tpt
#> 1 Kabupaten Pacitan 2019 13.67 7.28 31.52 0.91
#> 2 Kabupaten Ponorogo 2019 9.64 7.21 42.51 3.50
#> 3 Kabupaten Trenggalek 2019 10.98 7.28 38.82 3.36
#> 4 Kabupaten Tulungagung 2019 6.74 8.07 32.66 3.29
#> 5 Kabupaten Blitar 2019 8.94 7.29 49.49 3.05
#> 6 Kabupaten Kediri 2019 10.42 8.01 38.49 3.58
#> kejahatan puskesmas
#> 1 108 26
#> 2 557 31
#> 3 518 23
#> 4 880 36
#> 5 481 24
#> 6 1159 40
glimpse(df)#> Rows: 152
#> Columns: 8
#> $ Kabupaten <chr> "Kabupaten Pacitan", "Kabupaten Ponorogo", "Kabu…
#> $ Tahun <int> 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, …
#> $ persentase_kemiskinan <dbl> 13.67, 9.64, 10.98, 6.74, 8.94, 10.42, 9.47, 9.4…
#> $ rls <dbl> 7.28, 7.21, 7.28, 8.07, 7.29, 8.01, 7.27, 6.22, …
#> $ keluhan_kesehatan <dbl> 31.52, 42.51, 38.82, 32.66, 49.49, 38.49, 33.12,…
#> $ tpt <dbl> 0.91, 3.50, 3.36, 3.29, 3.05, 3.58, 3.70, 2.73, …
#> $ kejahatan <int> 108, 557, 518, 880, 481, 1159, 2383, 312, 1776, …
#> $ puskesmas <int> 26, 31, 23, 36, 24, 40, 38, 25, 54, 46, 25, 20, …
Deskripsi Data:
Kabupaten : informasi nama kabupaten di Jawa TimurYear : informasi tahunpersentase_kemiskinan: persentase
penduduk miskin tiap kabupaten/kotarls: rata-rata
lama sekolah tiap kabupaten/kotakeluhan_kesehatan: persentase
penduduk yang mempunyai keluhan kesehatan selama sebulan
terakhirtpt: Tingkat
Pengangguran Terbuka (TPT)kejahatan: jumlah
kejahatan yang dilaporkan menurut Kepolisian Resortpuskesmas: jumlah
puskesmasSumber Gambar: DSS Algoritma - Unveiling Socio Demographic Pattern by Yusuf Rafsanjani
1. Melihat frekuensi data berdasarkan index individu
table(df$Kabupaten)#>
#> Kabupaten Bangkalan Kabupaten Banyuwangi Kabupaten Blitar
#> 4 4 4
#> Kabupaten Bojonegoro Kabupaten Bondowoso Kabupaten Gresik
#> 4 4 4
#> Kabupaten Jember Kabupaten Jombang Kabupaten Kediri
#> 4 4 4
#> Kabupaten Lamongan Kabupaten Lumajang Kabupaten Madiun
#> 4 4 4
#> Kabupaten Magetan Kabupaten Malang Kabupaten Mojokerto
#> 4 4 4
#> Kabupaten Nganjuk Kabupaten Ngawi Kabupaten Pacitan
#> 4 4 4
#> Kabupaten Pamekasan Kabupaten Pasuruan Kabupaten Ponorogo
#> 4 4 4
#> Kabupaten Probolinggo Kabupaten Sampang Kabupaten Sidoarjo
#> 4 4 4
#> Kabupaten Situbondo Kabupaten Sumenep Kabupaten Trenggalek
#> 4 4 4
#> Kabupaten Tuban Kabupaten Tulungagung Kota Batu
#> 4 4 4
#> Kota Blitar Kota Kediri Kota Madiun
#> 4 4 4
#> Kota Malang Kota Mojokerto Kota Pasuruan
#> 4 4 4
#> Kota Probolinggo Kota Surabaya
#> 4 4
Jika jumlah unit waktu sama untuk setiap individu, maka data disebut balanced panel.
2. Menggunakan is.pbalanced()
Data disebut balance jika tiap individu mempunyai jumlah periode
waktu yang sama dan output dari fungsi is.pbalanced()
adalah TRUE
is.pbalanced(df, # data
index = c('Kabupaten', 'Tahun')) # indeks variabel#> [1] TRUE
1. Membuat Panel Data Frame
#membuat pdata.frame
df_panel <- df %>% pdata.frame(index = c('Kabupaten', 'Tahun'))
#memeriksa struktur data
glimpse(df_panel)#> Rows: 152
#> Columns: 8
#> $ Kabupaten <fct> Kabupaten Bangkalan, Kabupaten Bangkalan, Kabupa…
#> $ Tahun <fct> 2019, 2020, 2021, 2022, 2019, 2020, 2021, 2022, …
#> $ persentase_kemiskinan <pseries> 18.90, 20.56, 21.57, 19.44, 7.52, 8.06, 8.07…
#> $ rls <pseries> 5.66, 5.95, 5.96, 5.97, 7.13, 7.16, 7.42, 7.…
#> $ keluhan_kesehatan <pseries> 18.64, 17.73, 21.86, 12.82, 37.79, 39.59, 38…
#> $ tpt <pseries> 5.62, 8.77, 8.07, 8.05, 3.95, 5.34, 5.42, 5.…
#> $ kejahatan <pseries> 514, 392, 935, 976, 564, 893, 1312, 2545, 48…
#> $ puskesmas <pseries> 29, 31, 22, 22, 46, 46, 45, 45, 24, 24, 24, …
Aplikasi fungsi pdata.frame() mengubah tipe data yang
dimasukan ke parameter index menjadi factor dan sisanya
menjadi pseries
2. Memeriksa Dimensi Data
pdim(df_panel)#> Balanced Panel: n = 38, T = 4, N = 152
Insight:
Apabila data panel yang kita miliki tidak balance kita dapat
melakukan balancing menggunakan fungsi make.pbalanced
dengan parameter balance.type yang dapat diisi dengan 3
opsi berikut:
fill : setiap kolom waktu yg hilang akan diberikan
nilai NAshared.times : menggunakan informasi waktu yang ada
pada seluruh individushared.individuals : hanya menggunakan individu yang
informasi waktunya lengkapcolSums(is.na(df_panel))#> Kabupaten Tahun persentase_kemiskinan
#> 0 0 0
#> rls keluhan_kesehatan tpt
#> 0 0 0
#> kejahatan puskesmas
#> 0 0
summary(df_panel)#> Kabupaten Tahun persentase_kemiskinan rls
#> Kabupaten Bangkalan : 4 2019:38 Min. : 3.790 Min. : 4.550
#> Kabupaten Banyuwangi: 4 2020:38 1st Qu.: 7.438 1st Qu.: 6.973
#> Kabupaten Blitar : 4 2021:38 Median :10.120 Median : 7.790
#> Kabupaten Bojonegoro: 4 2022:38 Mean :10.741 Mean : 8.017
#> Kabupaten Bondowoso : 4 3rd Qu.:13.285 3rd Qu.: 9.113
#> Kabupaten Gresik : 4 Max. :23.760 Max. :11.670
#> (Other) :128
#> keluhan_kesehatan tpt kejahatan puskesmas
#> Min. :12.82 Min. : 0.910 Min. : 47.0 Min. : 3.00
#> 1st Qu.:26.19 1st Qu.: 3.640 1st Qu.: 391.8 1st Qu.:20.00
#> Median :32.37 Median : 4.815 Median : 695.0 Median :25.00
#> Mean :32.49 Mean : 5.018 Mean : 918.8 Mean :25.89
#> 3rd Qu.:39.24 3rd Qu.: 6.035 3rd Qu.:1189.2 3rd Qu.:33.00
#> Max. :61.88 Max. :10.970 Max. :8759.0 Max. :65.00
#>
df_panel %>%
select(-c(Kabupaten, Tahun)) %>%
cor() %>%
ggcorrplot(type='lower', lab=TRUE)Ada cukup banyak kabupaten dan kota di Provinsi Jawa Timur. Daerah Jawa Timur akan dibagi berdasarkan tlatah, yang artinya adalah kelompok masyarakat dengan ciri budaya yang sama, dan berasal dari satu sumber budaya yang sama untuk keperluan visualisasi.
Budayawan Universitas Jember, Ayu Sutarto (2004) mengatakan, wilayah Jatim terbagi ke dalam sepuluh tlatah atau kawasan kebudayaan. Tlatah kebudayaan besar ada empat, yakni Mataraman (bagian Barat), Arek (bagian Tengah), Madura Pulau (bagian Utara), dan Pandalungan (bagian Timur). Tlatah Mataraman pada bagian Barat cukup besar sehingga visualisasi coplot akan dibagi dua.
Coplot atau conditioning plot adalah teknik visualisasi data yang digunakan untuk mengeksplorasi hubungan antara beberapa variabel dalam sebuah dataset. Dengan coplot, kita bisa melihat bagaimana hubungan antara dua variabel berubah ketika kondisi variabel ketiga atau lebih diubah.
Fungsi coplot() dengan parameter:
formula = target ~ index1 given index2type = "l" untuk line dan "b"
untuk point & line plotdata = datasetrows = banyaknya baris panel plot yang dibuatcol = warna plot yang disajikancoplot(persentase_kemiskinan ~ Tahun|Kabupaten,
type = "b",
data = Utara,
rows = 1,
col = "darkblue",
overlap = 0) Dari coplot di atas, daerah Utara Jawa Timur memiliki persentase kemiskinan yang relatif sama, kecuali Kabupaten Pamekasan. Dibandingkan dengan Kabupaten Bangkalan, Sampang, dan Sumenep, persentase kemiskinan Kabupaten Pamekasan per tahunnya berkisar di angka 14 sampai 15 persen. Tiap Kabupaten di daerah ini persentase kemiskinannya meningkat di tahun 2021, bertepatan dengan munculnya pandemi covid secara luas.
coplot(persentase_kemiskinan ~ Tahun|Daerah,
type = "b",
data = Barat,
rows = 1,
col = "darkblue",
overlap = 0) Dari coplot di atas, daerah Barat Jawa Timur memiliki persentase kemiskinan yang lebih variatif dibandingkan daerah Utara. Persentase Kemiskinan tertinggi ada di Kabupaten Ngawi, Kabupaten Pacitan, dan Kabupaten Tuban yaitu sebesar 14-16%. Persentase kemiskinan terendah ada pada Kota Madiun sebesar 4-5%.
coplot(persentase_kemiskinan ~ Tahun|Daerah,
type = "b",
data = Barat_atas,
rows = 1,
col = "darkblue",
overlap = 0) coplot(persentase_kemiskinan ~ Tahun|Daerah,
type = "b",
data = Barat_bawah,
rows = 1,
col = "darkblue",
overlap = 0)
##### Tlatah Tengah
coplot(persentase_kemiskinan ~ Tahun|Daerah,
type = "b",
data = Tengah,
rows = 1,
col = "darkred",
overlap = 0) Dari coplot di atas, daerah Tengah Jawa Timur yang memiliki persentase kemiskinan tertinggi ada di Kabupaten Gresik sebesar 11-12%. Persentase kemiskinan terendah ada pada Kabupaten Sidoarjo dan Kota Surabaya sebesar 4-6%.
coplot(persentase_kemiskinan ~ Tahun|Kabupaten,
type = "b",
data = Timur,
rows = 1,
col = "darkblue",
overlap = 0) Dari coplot di atas, daerah Timur Jawa Timur yang memiliki persentase kemiskinan tertinggi ada di Kabupaten Probolinggo sebesar 15-19%. Persentase kemiskinan terendah ada pada Kabupaten Banyuwangi sebesar 7-8%.
plotmeans( persentase_kemiskinan ~ Kabupaten,
data = df_panel,
main="Heterogenitas Persentase Kemiskinan antar Kabupaten/Kota")Berdasarkan hasil visual diatas terlihat bahwa persentase kemiskinan antar Kabupaten/Kota cukup heterogen
plotmeans( persentase_kemiskinan ~ Tahun,
data = df_panel,
main="Heterogenitas Persentase Kemiskinan antar Tahun")Berdasarkan hasil visual diatas terlihat bahwa persentase kemiskinan antar tahun cukup homogen karena range rata-rata hanya berkisar di 10-12% saja. Namun, perlu diperhatikan bahwa data di atas hanya ada pada rentang tahun 2019 sampai 2022.
#membuat data train
panel_train <- df_panel %>% filter(Tahun != 2022)
#membuat data test
panel_test <- df_panel %>% filter(Tahun %in% 2022)Setelah dilakukan cross validation kita perlu memastikan kembali bahwa data train sudah balance dengan melakukan balancing
panel_train <- panel_train %>%
droplevels() %>% # menghapus informasi waktu yang diambil sebagai data test (tahun 2022)
make.pbalanced() # melakukan balancing kembali
is.pbalanced(panel_train)#> [1] TRUE
nilai VIF > 10: terjadi multicollinearity pada model nilai VIF < 10: tidak terjadi multicollinearity pada model
lm(formula=persentase_kemiskinan ~ .-Kabupaten - Tahun ,
data=panel_train) %>%
vif()#> rls keluhan_kesehatan tpt kejahatan
#> 2.168860 1.046675 1.713467 1.653455
#> puskesmas
#> 1.854199
Tidak ada variable yang saling berkorelasi.
Regresi Data Panel adalah gabungan antara data cross section dan data time series, dengan unit cross section yang sama diukur pada waktu yang berbeda. Jika kita memiliki T periode waktu (t = 1, 2, …, T) dan N jumlah individu (i = 1, 2, …, N), maka dengan data panel kita akan memiliki total unit observasi sebanyak NT.
\[y_{it} = \beta_0+\beta _{1t}*x_{1t}+u_{it}\]
dengan:
berdasarkan model tersebut, indeks i adalah dimensi
untuk cross sectional dan indeks t adalah dimensi untuk
deret waktu. \(u_{it}\) adalah nilai
yang menunjukkan heterogenitas antar cross sectional dan deret waktu di
dalam mode, yang didefinisikan sebagai berikut:
\[u_{it} = \mu _i+\lambda _t+\upsilon _{it}\] dengan:
Modeling akan menggunakan fungsi plm() dari package
plm dengan parameter:
formula = Target ~ Prediktordata = dataframeindex = c(“kolom_individu”,“kolom_waktu”)model =
"pooling" : model CEM"within" : model FEM"random" : model REM# menyimpan formula regresi data panel
formula_kemiskinan <- persentase_kemiskinan ~ rls + keluhan_kesehatan + tpt + kejahatan + puskesmas
# membuat Common effect model
cem <- plm(formula_kemiskinan,
data = panel_train,
index = c("Kabupaten","Tahun"),
model = "pooling")
cem#>
#> Model Formula: persentase_kemiskinan ~ rls + keluhan_kesehatan + tpt + kejahatan +
#> puskesmas
#>
#> Coefficients:
#> (Intercept) rls keluhan_kesehatan tpt
#> 33.27113442 -2.64621286 -0.06500042 0.33032678
#> kejahatan puskesmas
#> -0.00015692 -0.03173518
# membuat fixed effect model
fem <- plm(formula_kemiskinan,
data = panel_train,
index = c("Kabupaten","Tahun"),
model = "within")
fem#>
#> Model Formula: persentase_kemiskinan ~ rls + keluhan_kesehatan + tpt + kejahatan +
#> puskesmas
#>
#> Coefficients:
#> rls keluhan_kesehatan tpt kejahatan
#> 1.77282957 -0.00726788 0.18677014 0.00018468
#> puskesmas
#> -0.06282426
Memilih model terbaik antara Common Effect Model dengan Fixed Effect
Model dapat menggunakan Uji Chow dengan fungsi
pooltest().
Hipotesis yang diuji:
\(H_0\) ditolak jika P-value < α. Nilai α yang digunakan sebesar 5%.
pooltest(cem,fem)#>
#> F statistic
#>
#> data: formula_kemiskinan
#> F = 151.3, df1 = 37, df2 = 71, p-value < 0.00000000000000022
#> alternative hypothesis: unstability
p-value (0.005365) < α (0.05) maka \(H_0\) ditolak.
Kesimpulan: Model terbaik untuk data persentase kemiskinan di Jawa Timur adalah model Fixed Effect.
Langkah selanjutnya yang akan dilakukan ketika model terbaik bertipe Fixed Effect adalah membuat model Random Effect.
rem <- plm(formula_kemiskinan,
data = panel_train,
index = c("Kabupaten","Tahun"),
model = "random")
rem#>
#> Model Formula: persentase_kemiskinan ~ rls + keluhan_kesehatan + tpt + kejahatan +
#> puskesmas
#>
#> Coefficients:
#> (Intercept) rls keluhan_kesehatan tpt
#> 20.26735116 -1.07663925 -0.03488627 0.29967712
#> kejahatan puskesmas
#> 0.00022021 -0.05205995
Pemilihan model terbaik antara Fixed Effect Model dengan Random
Effect Model dapat ditentukan dengan Uji Hausman dengan fungsi
phtest(). Pada dasarnya test ini menguji apakah unique
errors/disturbance \(u_{it}\)
berkorelasi dengan regresi, hipotesis nolnya adalah tidak.
Hipotesis yang diuji:
Tolak \(H_0\) jika P-value < α. Nilai α yang digunakan sebesar 5%.
phtest(rem,fem)#>
#> Hausman Test
#>
#> data: formula_kemiskinan
#> chisq = 183.59, df = 5, p-value < 0.00000000000000022
#> alternative hypothesis: one model is inconsistent
p-value (0.3308) > α (0.05) maka gagal tolak \(H_0\).
Kesimpulan: Model terbaik untuk data persentase kemiskinan di Jawa Timur adalah model Random Effect.
Langkah selanjutnya yang akan dilakukan ketika model terbaik bertipe Random Effect adalah uji Lagrange Multiplier.
Uji LM memutuskan antara random effect model dan regresi OLS sederhana. Hipotesis nol dalam uji LM adalah varians antar entitas bernilai nol. Artinya, tidak ada perbedaan signifikan antar unit (yaitu tidak ada efek panel).
Pemeriksaan Pengaruh Individu & Waktu
Hipotesis yang diuji adalah sebagai berikut.
plmtest(rem,
effect = "twoways",
type = "bp")#>
#> Lagrange Multiplier Test - two-ways effects (Breusch-Pagan)
#>
#> data: formula_kemiskinan
#> chisq = 101.35, df = 2, p-value < 0.00000000000000022
#> alternative hypothesis: significant effects
p-value (0.03074) > α (0.05) maka tolak \(H_0\).
Kesimpulan: Ada pengaruh individu & waktu. Karena hasil uji LM menunjukkan bahwa ada pengaruh individu dan waktu, kita tidak dapat menggunakan model regresi OLS sederhana. Sehingga perlu dipastikan:
Pemeriksaan Pengaruh Individu
Hipotesis yang diuji adalah sebagai berikut.
Pemeriksaan Pengaruh Waktu
Hipotesis yang diuji adalah sebagai berikut.
Jika uji pengaruh individu signifikan (p-value < 0.05): Ada pengaruh individu yang signifikan, dan model efek individu harus dipertimbangkan.
Jika uji pengaruh waktu signifikan (p-value < 0.05): Ada pengaruh waktu yang signifikan, dan model efek waktu harus dipertimbangkan.
plmtest(rem,
effect = "time",
type = "bp")#>
#> Lagrange Multiplier Test - time effects (Breusch-Pagan)
#>
#> data: formula_kemiskinan
#> chisq = 1.2063, df = 1, p-value = 0.2721
#> alternative hypothesis: significant effects
plmtest(rem,
effect = "individual",
type = "bp")#>
#> Lagrange Multiplier Test - (Breusch-Pagan)
#>
#> data: formula_kemiskinan
#> chisq = 100.14, df = 1, p-value < 0.00000000000000022
#> alternative hypothesis: significant effects
Ada efek individu tapi tidak ada efek waktu.
Jika kesimpulan menunjukkan bahwa ada efek individu tetapi tidak ada efek waktu, langkah berikutnya adalah memilih model yang paling sesuai untuk analisis data panel berdasarkan hasil tersebut yaitu, model efek acak individual (random effects individual) .
rem_ind <- plm(formula_kemiskinan,
data = panel_train,
index = c("Kabupaten","Tahun"),
model = "random",
effect = "individual")Normalitas
Model diharapkan menghasilkan error yang berdistribusi normal dan error lebih banyak berkumpul di sekitar angka nol.
Hipotesis yang diuji:
Tolak \(H_0\) jika P-value < α. Nilai α yang digunakan sebesar 5%.
# your code here
rem_ind$residuals %>% shapiro.test()#>
#> Shapiro-Wilk normality test
#>
#> data: .
#> W = 0.95081, p-value = 0.0003665
p-value (0.00036) < 0.05, maka tolak \(H_0\).
Kesimpulan: residual/sisaan tidak menyebar normal.
Homogenitas
Diharapkan error yang dihasilkan oleh model menyebar secara acak atau dapat dikatakan variasi konstan.
Hipotesis yang diuji:
H0 ditolak jika P-value < α. Nilai α yang digunakan sebesar 5%.
# your code here
rem_ind %>% bptest()#>
#> studentized Breusch-Pagan test
#>
#> data: .
#> BP = 15.377, df = 5, p-value = 0.008868
p-value (0.0088) < 0.05, maka tolak \(H_0\).
Kesimpulan: residual/sisaan tidak memiliki ragam homogen.
Autokorelasi
Hipotesis yang diuji:
Tolak \(H_0\) jika P-value < α. Nilai α yang digunakan sebesar 5%.
rem_ind$residuals %>% Box.test(type = "Ljung-Box")#>
#> Box-Ljung test
#>
#> data: .
#> X-squared = 1.4462, df = 1, p-value = 0.2291
p-value (0.2291) > 0.05, maka gagal tolak \(H_0\).
Kesimpulan: tidak ada autokorelasi pada residual/sisaan.
1. Koefisien
summary(rem_ind)#> Oneway (individual) effect Random Effect Model
#> (Swamy-Arora's transformation)
#>
#> Call:
#> plm(formula = formula_kemiskinan, data = panel_train, effect = "individual",
#> model = "random", index = c("Kabupaten", "Tahun"))
#>
#> Balanced Panel: n = 38, T = 3, N = 114
#>
#> Effects:
#> var std.dev share
#> idiosyncratic 0.1276 0.3572 0.018
#> individual 7.1437 2.6728 0.982
#> theta: 0.9231
#>
#> Residuals:
#> Min. 1st Qu. Median 3rd Qu. Max.
#> -1.103914 -0.286635 -0.036705 0.226596 1.860703
#>
#> Coefficients:
#> Estimate Std. Error z-value Pr(>|z|)
#> (Intercept) 20.26735116 2.98800039 6.7829 0.00000000001178 ***
#> rls -1.07663925 0.32490202 -3.3137 0.0009206 ***
#> keluhan_kesehatan -0.03488627 0.00779444 -4.4758 0.00000761288742 ***
#> tpt 0.29967712 0.05532196 5.4170 0.00000006061938 ***
#> kejahatan 0.00022021 0.00018860 1.1676 0.2429623
#> puskesmas -0.05205995 0.03223509 -1.6150 0.1063088
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> Total Sum of Squares: 40.9
#> Residual Sum of Squares: 25.193
#> R-Squared: 0.38404
#> Adj. R-Squared: 0.35552
#> Chisq: 67.3358 on 5 DF, p-value: 0.00000000000036694
Interpretasi:
Variabel yang signifikan mempengaruhi persentase kemiskinan masyarakat Jawa Timur di tahun 2019 - 2022 adalah:
persentase kemiskinan masyarakat di suatu kabupaten/kota di Jawa Timur akan berkurang sebesar 1.0767 untuk setiap kenaikan 1 satuan rerata lama sekolah (rls), dengan catatan variabel lainnya bernilai tetap.
persentase kemiskinan masyarakat di suatu kabupaten/kota di Jawa Timur akan bertambah sebesar 0.2997 untuk setiap kenaikan 1 satuan tingkat pengangguran terbuka (tpt), dengan catatan variabel lainnya bernilai tetap.
2. Mengekstrak informasi Efek dari model Random
Untuk mengekstrak informasi efek dari model FEM kita dapat
menggunakan fungsi fixef(model fem, effect="twoways"),
ranef(rem_ind)#> Kabupaten Bangkalan Kabupaten Banyuwangi Kabupaten Blitar
#> 6.06676612 -2.52727503 -1.37782432
#> Kabupaten Bojonegoro Kabupaten Bondowoso Kabupaten Gresik
#> 2.24558226 1.48321469 1.85398964
#> Kabupaten Jember Kabupaten Jombang Kabupaten Kediri
#> -1.30575393 -0.11803453 1.04396061
#> Kabupaten Lamongan Kabupaten Lumajang Kabupaten Madiun
#> 3.17937471 -2.43959033 0.24025942
#> Kabupaten Magetan Kabupaten Malang Kabupaten Mojokerto
#> -0.18965571 -1.07614072 0.02308443
#> Kabupaten Nganjuk Kabupaten Ngawi Kabupaten Pacitan
#> 0.31849274 3.33252700 3.89114381
#> Kabupaten Pamekasan Kabupaten Pasuruan Kabupaten Ponorogo
#> 2.67052606 -2.27698276 -0.69114706
#> Kabupaten Probolinggo Kabupaten Sampang Kabupaten Sidoarjo
#> 6.16965191 8.87431817 -3.99148733
#> Kabupaten Situbondo Kabupaten Sumenep Kabupaten Trenggalek
#> -0.25801347 7.33159001 0.41781199
#> Kabupaten Tuban Kabupaten Tulungagung Kota Batu
#> 4.26828827 -2.74048711 -6.80391966
#> Kota Blitar Kota Kediri Kota Madiun
#> -2.17412092 -2.25388329 -3.96238555
#> Kota Malang Kota Mojokerto Kota Pasuruan
#> -5.62832180 -3.34079130 -3.79083229
#> Kota Probolinggo Kota Surabaya
#> -3.93908430 -2.52485044
Interpretasi:
Formula model:
\[y_{it} = \beta_0+\beta _{1t}*x_{1t}+u_{it}\]
\[y_{Surabaya} = 20.26 -1.077*rls -0.034 * keluhan \ kesehatan + 0.299 * tpt + 0.0002*kejahatan -0.052 * puskesmas -2.52\] Interpretasi:
Persentase kemiskinan di Jawa Timur tanpa ada variabel prediktor adalah sebesar 20.26 persen.
Persentase kemiskinan di Surabaya tanpa ada variabel prediktor adalah sebesar 20.26 - 2.52 = 17.74 persen.
Mengukur kinerja model menggunakan data test
pred <- predict(rem_ind, # model akhir
panel_test, # data test
na.fill = F)
pred#> Kabupaten Bangkalan-2022 Kabupaten Banyuwangi-2022
#> 14.874580 10.343529
#> Kabupaten Blitar-2022 Kabupaten Bojonegoro-2022
#> 10.741729 11.162106
#> Kabupaten Bondowoso-2022 Kabupaten Gresik-2022
#> 12.146252 10.103967
#> Kabupaten Jember-2022 Kabupaten Jombang-2022
#> 11.224369 9.575512
#> Kabupaten Kediri-2022 Kabupaten Lamongan-2022
#> 10.465037 10.941102
#> Kabupaten Lumajang-2022 Kabupaten Madiun-2022
#> 12.561895 11.024209
#> Kabupaten Magetan-2022 Kabupaten Malang-2022
#> 10.264639 11.016570
#> Kabupaten Mojokerto-2022 Kabupaten Nganjuk-2022
#> 9.712950 11.328771
#> Kabupaten Ngawi-2022 Kabupaten Pacitan-2022
#> 10.763153 10.193131
#> Kabupaten Pamekasan-2022 Kabupaten Pasuruan-2022
#> 11.385377 11.681246
#> Kabupaten Ponorogo-2022 Kabupaten Probolinggo-2022
#> 9.981076 12.178425
#> Kabupaten Sampang-2022 Kabupaten Sidoarjo-2022
#> 13.221122 9.875164
#> Kabupaten Situbondo-2022 Kabupaten Sumenep-2022
#> 12.112282 12.341440
#> Kabupaten Trenggalek-2022 Kabupaten Tuban-2022
#> 11.128117 10.904946
#> Kabupaten Tulungagung-2022 Kota Batu-2022
#> 10.655496 11.004521
#> Kota Blitar-2022 Kota Kediri-2022
#> 9.238474 8.977159
#> Kota Madiun-2022 Kota Malang-2022
#> 8.775816 10.098492
#> Kota Mojokerto-2022 Kota Pasuruan-2022
#> 9.019450 10.048666
#> Kota Probolinggo-2022 Kota Surabaya-2022
#> 9.989276 9.378260
Untuk menguji apakah model yang kita miliki sudah baik dalam
memprediksi data baru maka kita akan evaluasi dengan menggunakan nilai
error, salah satu metric eror yang biasa digunakan adalah MAPE. Kita
dapat melakukannya menggunakan fungsi MAPE() dengan
parameter:
# your code here
MAPE(y_pred = pred,
y_true = panel_test$persentase_kemiskinan)#> [1] 0.3455725
Insight: tingkat kesalahan prediski model fem dalam memprediksi nilai baru adalah sebesar 34.56%. Angka sekian cukup besar jika kita bandingkan dengan industry standard threshold, yaitu di bawah 10%, sehingga model kurang baik dalam memprediksi data yang baru.
Berdasarkan analisis yang dilakukan, didapatkan bahwa model terbaik untuk memprediksi persentase kemiskinan di Provinsi Jawa Timur adalah model Random Effect dengan efek individu. Beberapa poin penting yang dapat disimpulkan dari analisis ini adalah:
Dengan menggunakan data panel dan metode yang tepat, analisis ini dapat membantu pengambilan keputusan yang lebih baik dalam upaya mengurangi tingkat kemiskinan di Provinsi Jawa Timur.