0.1 Setup Library/Package

Package adalah kumpulan fungsi R, data, dan kode yang dikompilasi dalam format yang terdefinisi dengan baik. Direktori tempat penyimpanan paket disebut library.

Untuk dapat mengikuti materi ini, peserta diharapkan sudah menginstall beberapa packages di bawah ini. Apabila package tersebut belum terinstall, silahkan melakukan instalasi package dengan copy dan jalankan code berikut pada bagian console

install.packages(c(“knitr”, “rmarkdown”, “dplyr”,“tidyr”,“lubridate”, “ggcorplot”, “ggplot2”, “gplots”, “foreign”, “plotly”,“plm”,“lfe”,“lmtest”,“car”,“tseries”,“MLmetrics”))

Apabila package sudah terinstall, silahkan jalankan code dibawah ini untuk mengaktifkan package-package yang akan digunakan pada materi ini.

#Packages untuk pengolahan dataframe
library(dplyr)
library(tidyr)
library(lubridate)

#Packages untuk membuat visualisasi
library(ggcorrplot)
library(gplots)
library(ggplot2)
library(plotly)
library(foreign)

#Packages untuk melakukan analisis
library(plm)
library(lfe)
library(lmtest)
library(car)
library(tseries)
library(MLmetrics)

1 Data Panel

Data panel merupakan gabungan data cross section dan time series (runtun/ deret waktu). Dengan kata lain, data panel merupakan data dari beberapa individu sama yang diamati dalam kurun waktu tertentu. Terkadang data pane

contoh data panel”

  • Tingkat pengangguran tahunan setiap negara bagian selama beberapa tahun
  • Penjualan triwulanan masing-masing toko selama beberapa kuartal

1. Keuntungan Data Panel

Data panel yang menggabungkan data data cross section dan time series, memiliki beberapa keunggulan dibandingkan data cross-sectional saja atau data deret waktu saja, antara lain:

  • Mendapatkan sampel yang besar sehingga lebih banyak informasi dan lebih sedikit multikolinieritas di antara variabel-variabel sehingga meningkatkan efisiensi estimasi ekonometrika

  • Model yang dapat diinterpretasikan, kita dapat menginterpretasikan koefisien regresi dalam kerangka efek cross-section dan time-series.

2. Struktur Data Panel

Data panel memiliki tiga jenis data, yaitu cross section, pooled cross section, dan panel.

  • Cross Section Data

Data cross sectional adalah jenis data yang dikumpulkan dengan mengamati banyak subjek pada satu titik atau periode waktu.

  • Pooled Cross Section Data

Pooled Cross sectional adalah jenis data yang mengamati satu subjek pada banyak titik atau periode waktu.

  • Panel Data

Panel data adalah jenis data yang mengamati banyak subjek pada banyak titik atau periode waktu.

  • Balance - Unbalanced Panel Data

Jika jumlah unit waktu sama untuk setiap individu, maka data disebut balanced panel. Jika sebaliknya, yakni jumlah unit waktu berbeda untuk setiap individu, maka disebut unbalanced panel

3. Model Data Panel

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}\] Dimana:

  • \(y_{it}\) adalah variabel target
  • indeks \(i\) mendefiniskan individu, wilayah, kota, perlakuan dll.
  • indeks \(t\) mendefinisikan waktu.
  • \(\beta_0\) adalah intercept
  • \(\beta _{1t}*x_{1t}\) adalah koefisien untuk variabel prediktor 1
  • \(u_{it}\) adalah disturbance

berdasarkan model tersebut indeks i menjadi dimensi untuk cross sectional dan indeks t menjadi dimensi untuk deret waktu. Sedangkan \(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}\] dimana:

  • \(\mu _i\) : mewakili heterogenitas individu (cross section) yang tidak dapat diamati
  • \(\lambda _t\) : menunjukkan heterogenitas waktu yang tidak dapat diamati
  • \(\upsilon _{it}\) : merupakan nilai error sisaan

Dua komponen pertama \(\mu _i\) dan \(\lambda _t\) disebut juga sebagai within component sedangkan komponen terakhir \(\upsilon _{it}\) merupakan panel or between component


1.1 Pemodelan

Terdapat tiga pendekatan yang digunakan dalam model panel yaitu Common/ Polled Effects, Fixed Effects dan Random Effects.

1. Model Common/ Pooled Effects (CEM)

Model gabungan atau common effect model (CEM) atau pooled least square (PLS) merupakan pendekatan model data panel yang sederhana karena mengkombinasikan data time series dan cross section, tanpa memperhatikan pengaruh spesifik waktu maupun individu. Koefisien regresi (intersep ataupun kemiringan) diasumsikan konstan antar individu dan waktu. Metode ini bisa menggunakan pendekatan ordinary least square (OLS) atau metode kuadrat terkecil (MKT) untuk mengestimasi model data panel. Untuk membuat model CEM di R dapat menggunakan fungsi plm() dari package plm dengan parameter sebagai berikut:

  • formula = Target ~ Prediktor
  • data = berupa dataframe
  • index = c(“kolom_individu”,“kolom_waktu”)
  • model = “pooling”

2. Fixed Effects

Model pengaruh tetap atau fixed effect model (FEM) merupakan model yang mengasumsikan antara unit individu atau waktu memiliki perilaku yang berbeda, terlihat dari nilai intersep yang berbeda untuk setiap unit individu atau waktu, tetapi konstan pada nilai koefisien kemiringan dan koefisien regresi antara unit individu maupun waktu (Gujarati dan Porter 2009). Pendugaan parameter model pengaruh tetap dapat menggunakan Metode Kuadrat Terkecil Peubah Boneka (least square dummy variable) dan MKT. Untuk membuat model CEM di R dapat menggunakan fungsi plm() dari package plm dengan parameter sebagai berikut:

  • formula = Target ~ Prediktor
  • data = berupa dataframe
  • index = c(“kolom_individu”,“kolom_waktu”)
  • model = “within”

3. Random Effects

Menurut Baltagi (2011), model pengaruh acak atau random effect model digunakan ketika individu amatan mengikuti kaidah pengacakan dari sejumlah populasi yang besar sehingga pengaruh pada setiap individu bersifat acak. Pendugaan parameter pada model pengaruh acak yaitu dengan metode kuadrat terkecil terampat (generalized least square). Model ini memiliki asumsi bahwa tidak ada korelasi antara pengaruh spesifik individu dan pengaruh spesifik waktu dengan peubah bebas sehingga komponen sisaan dari kedua pengaruh spesifik dimasukkan ke dalam model. Untuk membuat model CEM di R dapat menggunakan fungsi plm() dari package plm dengan parameter sebagai berikut:

  • formula = Target ~ Prediktor
  • data = berupa dataframe
  • index = c(“kolom_individu”,“kolom_waktu”)
  • model = “random”

1.2 Pemilihan Model Terbaik

Untuk memilih model mana yang terbaik dari ketiga model diatas, perlu dilakukan pengujian hipotesis berikut ini:

Uji Chow

Menurut Ghozali dan Ratmono (2013), uji chow digunakan untuk memilih pendekatan yang lebih baik antara model gabungan dengan model pengaruh tetap. Untuk melakukan uji Chow dapat menggunakan fungsi pooltest(model_cem, model_fem), dengan hipotesis yang diujikan adalah sebagai berikut.

  • H0 : Model gabungan
  • H1 : Model pengaruh tetap

Keputusan tolak H0 (model pengaruh tetap terpilih) apabila nilai p-value < α.


Uji Hausman

Uji spesifikasi Hausman membandingkan model pengaruh tetap dan model pengaruh acak. Jika hipotesis nol yang menyatakan tidak ada korelasi antara pengaruh individu dengan regresor tidak ditolak, model pengaruh random disarankan daripada pengaruh tetap (Susanti 2013). Untuk melakukan uji Chow di R dapat menggunakan fungsi phtest(model_rem, model_fem), dengan Hipotesis yang diuji adalah sebagai berikut.

  • H0 : Model pengaruh acak
  • H1 : Model pengaruh tetap

Keputusan tolak H0 (model pengaruh tetap terpilih) apabila nilai p-value < α.


Pengujian Lanjutan

Apabila model gabungan atau model pengaruh acak yang terpilih sebagai model terbaik, perlu dilakukan uji lanjutan untuk memeriksa apakah model dipengaruhi oleh individu/waktu/individu & waktu. Untuk memeriksa pengaruh tersebut digunakan Uji Lagrange Multiplier.

Di R untuk melakukan Uji Lagrange Multiplier dapat dilakukan dengan menggunakan fungsi plmtest() dari package plm dengan parameter:

  • x = model terpilih
  • type = "bp" , menggunakan Breusch Pagan test
  • effect =
    • "time" : untuk menguji pengaruh waktu
    • "individual" : untuk menguji pengaruh individu
    • "twoways" : untuk menguji pengaruh individu & waktu

berikut hipotesis pengujian untuk pemeriksaan setiap pengaruh:

Pemeriksaan Pengaruh Individu & Waktu

Hipotesis yang diuji adalah sebagai berikut.

  • H0 : Tidak ada pengaruh individu & waktu
  • H1 : Ada pengaruh individu & waktu

Pemeriksaan Pengaruh Individu

Hipotesis yang diuji adalah sebagai berikut.

  • H0 : Tidak ada pengaruh individu
  • H1 : Ada pengaruh individu

Pemeriksaan Pengaruh Waktu

Hipotesis yang diuji adalah sebagai berikut.

  • H0 : Tidak ada pengaruh waktu
  • H1 : Ada pengaruh waktu

dengan ketentuan untuk ketiga hipotesis adalah H0 ditolak jika P-value < α. Dimana nilai α yang umum digunakan adalah sebesar 5%.


1.3 Pengujian Asumsi

dikarenakan analisis data panel menggunakan konsep regresi dan time series maka ada beberapa Asumsi yang perlu dipenuhi sebagai berikut:

Asumsi model linear regression:

  1. No Multicollinearity (VIF)
  2. Normality of Residuals
  3. Homogenitas of Residuals

Asumsi Time Series:

  1. No Autocorelation

Note: Pengujian Asumsi hanya perlu dilakukan untuk model yang akan digunakan

1. Pemeriksaan Multikolinieritas

Multicollinearity adalah kondisi adanya korelasi antar prediktor yang kuat. Hal ini tidak diinginkan karena menandakan prediktor redundan pada model, yang seharusnya dapat dipilih salah satu saja dari variable yang hubungannya amat kuat tersebut. Harapannya tidak terjadi multicollinearity. Pemeriksaan Multikolinieritas bisa dilakukan dengan menggunakan fungsi fungsi vif(), dengan ketentuan

  • nilai VIF > 10: terjadi multicollinearity pada model
  • nilai VIF < 10: tidak terjadi multicollinearity pada model

Note: Pemeriksaan asumsi multikolinieritas bisa dilakukan diawal sebelum dilakukan pemodelan data panel, dengan cara terlebih dahulu dilakukan pembuatan model regresi dengan fungsi lm() dan akan diujikan menggunakan fungsi vif().

2. Pengujian Asumsi Normalitas Residual

Model diharapkan menghasilkan error yang berdistribusi normal. Dengan begitu, error lebih banyak berkumpul di sekitar angka nol. Pengujian asumsi normalitas di R dapat dilakukan dengan menggunakan fungsi shapiro.test(). dengan hipotesis yang diujikan adalah sebagai berikut.

  • H0 : Sisaan berdistribusi normal
  • H1 : Sisaan tidak berdistribusi normal

dengan ketentuan H0 ditolak jika P-value < α. Dimana nilai α yang umum digunakan adalah sebesar 5%.

3. Pengujian Asumsi Homogenitas Residual

Diharapkan error yang dihasilkan oleh model menyebar secara acak atau dapat dikatakan variasi konstan. Pengujian asumsi Homogenitas di R dapat dilakukan dengan menggunakan fungsi bptest(), dengan hipotesis yang diujikan adalah sebagai berikut.

  • H0 : Sisaan memiliki ragam homogen
  • H1 : Sisaan tidak memiliki ragam homogen

dengan ketentuan H0 ditolak jika P-value < α. Dimana nilai α yang umum digunakan adalah sebesar 5%.

4. Pengujian Asumsi Autokorelasi

Untuk mengecek ada/tidaknya bisa menggunakan uji Ljung-box dengan menggunakan fungsi Box.test(residual model, type = "Ljung-Box), dengan hipotesis yang diujikan adalah sebagai berikut.

  • H0 : tidak terjadi autokorelasi pada sisaan
  • H1 : terjadi autokorelasi pada sisaan

dengan ketentuan H0 ditolak jika P-value < α. Dimana nilai α yang umum digunakan adalah sebesar 5%.


1.4 Alur Kerja Data Panel

Analisis data panel di R dapat dilakukan dengan mengikuti alur kerja berikut ini:


2 Case Study Pemodelan Tingkat Kebahagiaan Beberapa Negara di Asia tenggara tahun 2006 s.d 2022

Asia Tenggara adalah wilayah yang kaya akan keragaman budaya, ekonomi, dan sosial. Negara-negara di kawasan ini telah mengalami perkembangan yang signifikan selama beberapa tahun terakhir, dengan perubahan ekonomi, demografis, dan politik yang berdampak pada kualitas hidup penduduk. Studi mengenai tingkat kebahagiaan di negara-negara Asia Tenggara menjadi semakin relevan seiring dengan pergeseran fokus dari pertumbuhan ekonomi semata menuju peningkatan kesejahteraan dan kualitas hidup. Dalam kerangka ini, analisis regresi data panel dapat memberikan wawasan mendalam tentang bagaimana berbagai faktor memengaruhi kebahagiaan di kawasan ini, dengan mempertimbangkan perbedaan antar negara serta evolusi hubungan tersebut dari waktu ke waktu, sejalan dengan indikator-indikator yang dipantau dalam World Happiness Report.

Sebagai data scientis kita diminta untuk menganalisis tingkat kebahagiaan beberapa negara di asia tenggara berdasarkan informasi socio demografi yang tersedia pada World Happiness Report.

2.1 Data Preparation

Untuk menganalisis tingkat kebahagiaan beberapa negara di asia tenggara menggunakan data yang diperoleh dari World Happiness Report 2023 yang dipublish melalui kaggle oleh USAMA BUTTAR.

Berikut adalah beberapa informasi dari setiap kolom:

  • Country.Name : Informasi nama negara
  • Regional.Indicator : Informasi regional negara
  • Year : tahun
  • Life.Ladder : tingkat kebahagiaan [1-10]
  • Log.GDP.Per.Capita : Log Gross Domestic Product per orang di suatu negara
  • Social.Support : memiliki seseorang yang dapat diandalkan di saat-saat sulit.
  • Healthy.Life.Expectancy.At.Birth :
  • Freedom.To.Make.Life.Choices : kebebasan untuk menentukan pilihan [0-1]
  • Generosity : seberapa sering seseorang mengeluarkan uang untuk donasi perbulan
  • Perceptions.Of.Corruption : Persepsi terhadap korupsi [0-1]
  • Positive.Affect : rata-rata ukuran efek hari sebelumnya untuk tawa, kesenangan, dan interest
  • Negative.Affect : rata-rata dari ukuran efek hari sebelumnya untuk kekhawatiran, kesedihan, dan kemarahan
  • Confidence.In.National.Goverment : seberapa percaya terhadap pemerintahan

Pada tahapan preparasi data ini akan dilakukan beberapa hal berikut:

  1. Read data
  2. Mengambil data wilayah asia tenggara
# 1. import dataset
df <- read.csv("data_input/World_Happiness_Report.csv")

# 2. mengambil data wilayah asia tenggara dan membuang kolom regional indikator
df_asia <- df %>% filter(Regional.Indicator == "East Asia") %>% select(-Regional.Indicator)


head(df_asia)

2.2 Pemeriksaan Balancing Data

Untuk memeriksa apakah dta kita sudah balance dapat kita gunakan 2 cara yakni:

1. Melihat frekuensi data berdasarkan index individu

# Your Code Here
table(df_asia$Country.Name)
#> 
#>                     China Hong Kong S.A.R. of China                     Japan 
#>                        16                        12                        17 
#>                  Mongolia               South Korea  Taiwan Province of China 
#>                        15                        17                        15

Result : Kita akan membuang data Hong Kong S.A.R. of China karena jumlah datanya 12 sangat jauh dengan data yang paling banyak = 17.

2. Menggunakan fungsi is.pbalanced()

Untuk melakukannya dapat kita gunakan fungsi is.pbalanced() dengan catatan data dalam format pdata.frame. Apabila data belum dalam format pdata.frame, kita dapat menambahkan parameter index("kolom individu", "kolom waktu"). Hasil yang diharapkan dari pemeriksaannya adalah TRUE yang artinya data panel sudah seimbang.

# Your Code Here
is.pbalanced(df_asia,index=c("Country.Name","Year"))
#> [1] FALSE

Dari hasil pemeriksaan frekuensi dan balancing data diatas terlihat bahwa:

  • Bahwa data tidak balanced
df_asia <- df_asia %>% filter(Country.Name %in% c("China","Japan","Mongolia","South Korea","Taiwan Province of China"))

2.2.1 Penyesuaian Struktur Data

1. Membuat Panel Data Frame

Agar data kita dapat melakukan balancing, kita perlu mengubah format data yang kita miliki menjadi sebuah panel data frame terlebih dahulu. Untuk memembuat panel data frame dapat kita lakukan dengan fungsi pdata.frame() dengan parameter:

  • data : data yang akan digunakan
  • index : c(“informasi individu”,“informasi waktu”)
#membuat pdata.frame
df_asia <- df_asia %>% pdata.frame(index=c("Country.Name","Year"))

#memeriksa struktur data
glimpse(df_asia)
#> Rows: 80
#> Columns: 12
#> $ Country.Name                      <fct> China, China, China, China, China, C…
#> $ Year                              <fct> 2006, 2007, 2008, 2009, 2010, 2011, …
#> $ Life.Ladder                       <pseries> 4.560495, 4.862862, 4.846295, 4.…
#> $ Log.GDP.Per.Capita                <pseries> 8.696139, 8.823968, 8.910974, 8.…
#> $ Social.Support                    <pseries> 0.7470113, 0.8108524, 0.7482873,…
#> $ Healthy.Life.Expectancy.At.Birth  <pseries> 65.660, 65.920, 66.180, 66.440, …
#> $ Freedom.To.Make.Life.Choices      <pseries> NA, NA, 0.8530720, 0.7711433, 0.…
#> $ Generosity                        <pseries> NA, -0.17888285, -0.09518377, -0…
#> $ Perceptions.Of.Corruption         <pseries> NA, NA, NA, NA, NA, NA, NA, NA, …
#> $ Positive.Affect                   <pseries> 0.6576588, 0.6639774, 0.7051333,…
#> $ Negative.Affect                   <pseries> 0.1695804, 0.1586135, 0.1469630,…
#> $ Confidence.In.National.Government <pseries> NA, NA, NA, NA, NA, NA, NA, NA, …

Dengan pengubahan tipe data menjadi pdata.frame akan otomatis mengubah type data dari setiap kolom,

  • kolom yang dijadikan index akan bertipe factor
  • selain kolom index akan menjadi pseries

2. Mememeriksa Dimensi Data

untuk memeriksa dimendi data panel dapat kita gunakan fungsi pdim()

# Your Code Here
pdim(df_asia)
#> Unbalanced Panel: n = 5, T = 15-17, N = 80

dari pemeriksaan dimensi data panel diatas dapat kita ketahui bahwa:

  • Kita memiliki 5 individu/negara
  • Datanya berjumlah 15-17 (belum balanced)

2.2.2 Balancing Data

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:

  1. fill : untuk setiap kolom waktu yg hilang akan diberikan nilai NA
  2. shared.times : akan diambil keseluruhan individu dgn ketentuan informasi waktu terdapat di semua individu
  3. shared.individuals : akan individu dengan ketentuan informasi waktu lengkap

1. Balancing menggunakan fill

# Your Code Here
balance1 <- df_asia %>% make.pbalanced(balance.type = "fill")
table(balance1$Country.Name)
#> 
#>                    China                    Japan                 Mongolia 
#>                       18                       18                       18 
#>              South Korea Taiwan Province of China 
#>                       18                       18

2. Balancing menggunakan shared.times

# Your Code Here
balance2 <- df_asia %>% make.pbalanced(balance.type = "shared.times")
table(balance2$Country.Name)
#> 
#>                    China                    Japan                 Mongolia 
#>                       13                       13                       13 
#>              South Korea Taiwan Province of China 
#>                       13                       13

3. Balancing menggunakan shared.individuals

# Your Code Here
balance3 <- df_asia %>% make.pbalanced(balance.type = "shared.individuals")
table(balance3$Country.Name)
#> 
#>                    China                    Japan                 Mongolia 
#>                        0                        0                        0 
#>              South Korea Taiwan Province of China 
#>                        0                        0

Berdasarkan kondisi data yang dimiliki, kita akan menggunakan data hasil balancing dengan metode fill untuk mendapatkan informasi paling optimal yang akan tersimpan pada objek bernama balance1.

# Periksa kembali keseimbangan data
is.pbalanced(balance1)
#> [1] TRUE
# pengecekan kembali dimensi data
pdim(balance1)
#> Balanced Panel: n = 5, T = 18, N = 90
  • Ternyata tidak ada negara yang memiliki data yang lengkap sebelumnya, sehingga angka T optimal = 18

2.3 Pemeriksaan Missing Value

sebelum kita periksa kelengkapan data kita perlu mengetahui berapa banyak informasi waktu yang ditambahkan dari tahapan sebelumnya

colSums(is.na(balance1)) - colSums(is.na(df_asia))
#>                      Country.Name                              Year 
#>                                 0                                 0 
#>                       Life.Ladder                Log.GDP.Per.Capita 
#>                                10                                10 
#>                    Social.Support  Healthy.Life.Expectancy.At.Birth 
#>                                10                                10 
#>      Freedom.To.Make.Life.Choices                        Generosity 
#>                                10                                10 
#>         Perceptions.Of.Corruption                   Positive.Affect 
#>                                10                                10 
#>                   Negative.Affect Confidence.In.National.Government 
#>                                10                                10

berdasarkan pemeriksaan diatas dapat diketahui bahwa dari data df_asia ketika dilakukan balancing terjadi penambahan 10 baris nilai NA untuk setiap kolom.

Tahap selanjutnya adalah memeriksa kelengkapan data hasil balancing

colSums(is.na(balance1))
#>                      Country.Name                              Year 
#>                                 0                                 0 
#>                       Life.Ladder                Log.GDP.Per.Capita 
#>                                10                                13 
#>                    Social.Support  Healthy.Life.Expectancy.At.Birth 
#>                                10                                22 
#>      Freedom.To.Make.Life.Choices                        Generosity 
#>                                15                                17 
#>         Perceptions.Of.Corruption                   Positive.Affect 
#>                                26                                10 
#>                   Negative.Affect Confidence.In.National.Government 
#>                                10                                30

Berdasarkan hasil pemeriksaan diatas kita melihat secara keseluruhan terdapat cukup banyak kolom yang memiliki nilai missing

  • Kita akan menghilangkan kolom Healthy.Life.Expectancy.At.Birth,Perceptions.Of.Corruption,Confidence.In.National.Government yang memiliki nilai na > 20
balance1 <- balance1%>%select(-Confidence.In.National.Government,-Healthy.Life.Expectancy.At.Birth,-Perceptions.Of.Corruption)

Untuk pemeriksaan dan melakukan pengisian nilai yang hilang maka akan dilakukan dengan cara interpolasi secara terpisah untuk setiap negara.

1. China

# periksa nilai missing per negara
chn <- balance1 %>% filter(Country.Name=="China")
colSums((is.na(chn)))  
#>                 Country.Name                         Year 
#>                            0                            0 
#>                  Life.Ladder           Log.GDP.Per.Capita 
#>                            2                            2 
#>               Social.Support Freedom.To.Make.Life.Choices 
#>                            2                            7 
#>                   Generosity              Positive.Affect 
#>                            3                            2 
#>              Negative.Affect 
#>                            2

insight: Freedom.To.Make.Life.Choices memiliki nilai na paling banyak = 7

untuk mengisi nilai yang hilang dengan nilai rata-rata dari nilai yang dekat dengan nilai missing menggunakan fungsi na.fill() dengan fill = "extend"

# mengisi nilai missing 
chn <- chn %>% mutate(Life.Ladder=na.fill(Life.Ladder,fill="extend"),
                      Log.GDP.Per.Capita =na.fill(Log.GDP.Per.Capita,fill="extend"), 
                      Social.Support=na.fill(Social.Support,fill="extend"), 
                      Freedom.To.Make.Life.Choices=na.fill(Freedom.To.Make.Life.Choices,fill="extend"), 
                      Generosity=na.fill(Generosity,fill="extend"), 
                      Positive.Affect=na.fill(Positive.Affect,fill="extend"),
                      Negative.Affect=na.fill(Negative.Affect,fill="extend")
                      )
  
anyNA(chn)
#> [1] FALSE

2. Japan

# periksa nilai missing per negara
jpn <- balance1 %>% filter(Country.Name=="Japan")
colSums((is.na(jpn)))  
#>                 Country.Name                         Year 
#>                            0                            0 
#>                  Life.Ladder           Log.GDP.Per.Capita 
#>                            1                            1 
#>               Social.Support Freedom.To.Make.Life.Choices 
#>                            1                            1 
#>                   Generosity              Positive.Affect 
#>                            3                            1 
#>              Negative.Affect 
#>                            1

insight: Generossity memiliki nilai na paling banyak = 3

# mengisi nilai missing 
jpn <- jpn %>% mutate(Life.Ladder=na.fill(Life.Ladder,fill="extend"),
                      Log.GDP.Per.Capita =na.fill(Log.GDP.Per.Capita,fill="extend"), 
                      Social.Support=na.fill(Social.Support,fill="extend"), 
                      Freedom.To.Make.Life.Choices=na.fill(Freedom.To.Make.Life.Choices,fill="extend"), 
                      Generosity=na.fill(Generosity,fill="extend"), 
                      Positive.Affect=na.fill(Positive.Affect,fill="extend"),
                      Negative.Affect=na.fill(Negative.Affect,fill="extend")
                      )
  
anyNA(jpn)
#> [1] FALSE

3. Mongolia

# periksa nilai missing per negara
mon <- balance1 %>% filter(Country.Name == "Mongolia")
colSums(is.na(mon))
#>                 Country.Name                         Year 
#>                            0                            0 
#>                  Life.Ladder           Log.GDP.Per.Capita 
#>                            3                            3 
#>               Social.Support Freedom.To.Make.Life.Choices 
#>                            3                            3 
#>                   Generosity              Positive.Affect 
#>                            3                            3 
#>              Negative.Affect 
#>                            3

insight: Mongolia memiliki nilai na sama untuk semua field = 3

# mengisi nilai missing 
mon <- mon %>% mutate(Life.Ladder=na.fill(Life.Ladder,fill="extend"),
                      Log.GDP.Per.Capita =na.fill(Log.GDP.Per.Capita,fill="extend"), 
                      Social.Support=na.fill(Social.Support,fill="extend"), 
                      Freedom.To.Make.Life.Choices=na.fill(Freedom.To.Make.Life.Choices,fill="extend"), 
                      Generosity=na.fill(Generosity,fill="extend"), 
                      Positive.Affect=na.fill(Positive.Affect,fill="extend"),
                      Negative.Affect=na.fill(Negative.Affect,fill="extend")
                      )
  
anyNA(mon)
#> [1] FALSE

4. South Korea

# periksa nilai missing per negara
skr <- balance1 %>% filter(Country.Name == "South Korea")
colSums(is.na(skr))
#>                 Country.Name                         Year 
#>                            0                            0 
#>                  Life.Ladder           Log.GDP.Per.Capita 
#>                            1                            1 
#>               Social.Support Freedom.To.Make.Life.Choices 
#>                            1                            1 
#>                   Generosity              Positive.Affect 
#>                            2                            1 
#>              Negative.Affect 
#>                            1

insight : Generossity memiliki nilai na paling banyak = 2

# mengisi nilai missing 
skr <- skr %>% mutate(Life.Ladder=na.fill(Life.Ladder,fill="extend"),
                      Log.GDP.Per.Capita =na.fill(Log.GDP.Per.Capita,fill="extend"), 
                      Social.Support=na.fill(Social.Support,fill="extend"), 
                      Freedom.To.Make.Life.Choices=na.fill(Freedom.To.Make.Life.Choices,fill="extend"), 
                      Generosity=na.fill(Generosity,fill="extend"), 
                      Positive.Affect=na.fill(Positive.Affect,fill="extend"),
                      Negative.Affect=na.fill(Negative.Affect,fill="extend")
                      )
  
anyNA(skr)
#> [1] FALSE

5. Taiwan Province of China

# periksa nilai missing per negara
tw <- balance1 %>% filter(Country.Name == "Taiwan Province of China")
colSums(is.na(tw))
#>                 Country.Name                         Year 
#>                            0                            0 
#>                  Life.Ladder           Log.GDP.Per.Capita 
#>                            3                            6 
#>               Social.Support Freedom.To.Make.Life.Choices 
#>                            3                            3 
#>                   Generosity              Positive.Affect 
#>                            6                            3 
#>              Negative.Affect 
#>                            3

insight: Generossity dan Log.GDP.Per.Capita memiliki nilai na paling banyak = 6

#mengisi nilai missing
tw <- tw %>% mutate(Life.Ladder=na.fill(Life.Ladder,fill="extend"),
                      Log.GDP.Per.Capita =na.fill(Log.GDP.Per.Capita,fill="extend"), 
                      Social.Support=na.fill(Social.Support,fill="extend"), 
                      Freedom.To.Make.Life.Choices=na.fill(Freedom.To.Make.Life.Choices,fill="extend"), 
                      Generosity=na.fill(Generosity,fill="extend"), 
                      Positive.Affect=na.fill(Positive.Affect,fill="extend"),
                      Negative.Affect=na.fill(Negative.Affect,fill="extend")
                      )
  
anyNA(tw)
#> [1] FALSE

insight: …

Setelah semua negara tidak lagi terdapat nilai yang missing, selanjutnya kita akan gabungkan kembali dan akan disimpan pada objek dengan nama balanced2

# Your Code Here
balanced2 <- bind_rows(chn,jpn,mon,skr,tw) 

Pemeriksaan Kembali keseimbangan data

# Your Code Here
pdim(balanced2)
#> Balanced Panel: n = 5, T = 18, N = 90

Pemeriksaan Kembali kelengkapan data

# Your Code Here
colSums(is.na(balanced2))
#>                 Country.Name                         Year 
#>                            0                            0 
#>                  Life.Ladder           Log.GDP.Per.Capita 
#>                            0                            0 
#>               Social.Support Freedom.To.Make.Life.Choices 
#>                            0                            0 
#>                   Generosity              Positive.Affect 
#>                            0                            0 
#>              Negative.Affect 
#>                            0

Data telah siap untuk digunakan pada tahapan selanjutnya

2.4 Exploratory Data Analysis

2.4.1 Ringkasan Data

summary(balanced2)
#>                    Country.Name      Year     Life.Ladder    Log.GDP.Per.Capita
#>  China                   :18    2005   : 5   Min.   :4.454   Min.   : 8.696    
#>  Japan                   :18    2006   : 5   1st Qu.:5.157   1st Qu.: 9.365    
#>  Mongolia                :18    2007   : 5   Median :5.854   Median :10.513    
#>  South Korea             :18    2008   : 5   Mean   :5.671   Mean   :10.058    
#>  Taiwan Province of China:18    2009   : 5   3rd Qu.:6.115   3rd Qu.:10.629    
#>                                 2010   : 5   Max.   :6.947   Max.   :10.797    
#>                                 (Other):60                                     
#>  Social.Support   Freedom.To.Make.Life.Choices   Generosity      
#>  Min.   :0.7378   Min.   :0.4841               Min.   :-0.26659  
#>  1st Qu.:0.8080   1st Qu.:0.6831               1st Qu.:-0.15041  
#>  Median :0.8738   Median :0.7526               Median :-0.05837  
#>  Mean   :0.8551   Mean   :0.7426               Mean   :-0.05856  
#>  3rd Qu.:0.9017   3rd Qu.:0.8145               3rd Qu.: 0.02133  
#>  Max.   :0.9513   Max.   :0.9274               Max.   : 0.21715  
#>                                                                  
#>  Positive.Affect  Negative.Affect  
#>  Min.   :0.4832   Min.   :0.08274  
#>  1st Qu.:0.5632   1st Qu.:0.14773  
#>  Median :0.6696   Median :0.17507  
#>  Mean   :0.6437   Mean   :0.17850  
#>  3rd Qu.:0.7050   3rd Qu.:0.20653  
#>  Max.   :0.7792   Max.   :0.33815  
#> 

Berdasarkan ringkasan diatas dapat kita ketahui beberapa hal berikut:

2.4.2 Hubungan Antar Variabel

Untuk mengetahui seberapa besar tingkat hubungan antar variabel prediktor terhadap variabel target, dapat kita gunakan fungsi ggcorrplot.

# Your Code Here
balanced2 %>% select(-Country.Name,-Year) %>%cor()%>%ggcorrplot(type="lower",lab=TRUE)

Berdasarkan hasil plot heatmap diatas, dapat diketahui bahwa

  • Variabel yang memiliki Hubungan Kuat terhadap Life.Ladder adalah:
    • Log.GDP.Per.Capita
    • Positive Affect
  • Terdapat indikasi multikolinieritas antara
    • Log.GDP.Per.Capita dengan Life.Ladder

2.4.3 Explorasi Socio demografi

Untuk melihat lebih dalam informasi dari data yang kita miliki dapat kita lakukan dengan menggunakan fungsi coplot() dengan parameter

  • formula = diisikan dengan target ~ index1 given index2
  • type = "l" untuk line dan "b" untuk point & line plot
  • data = dataset
  • rows = banyaknya baris panel plot yang dibuat
  • col = warna plot yang disajikan

1. Life.ladder

# Your Code Here
coplot(Life.Ladder ~ Year|Country.Name,
       type = "b",
       data = balanced2,
       rows = 1,
       col = "red")

Berdasarkan Line plot diatas dapat kita ketahui bahwa :

  • South Korea pernah memiliki life.ladder yang paling tinggi sekitar tahun 2011. Tahun tersebut merupakan tahun keemasan K-waves di bidang K-Drama, girl group, boy band dll.
  • Mongolia dan China memiliki trend life-ladder yang serupa

2. Log.GDP.Per.Capita

# Your Code Here
coplot(Log.GDP.Per.Capita ~ Year|Country.Name,
       type = "b",
       data = balanced2,
       rows = 1,
       col = "red")

Berdasarkan plot diatas dapat kita ketahui bahwa :

  • Jepang, Korea Selatan dan Taiwan memiliki gdp jauh meninggalkan China dan Mongolia
  • GDP China rendah karena memiliki penduduk terbanyak di dunia

3. Social.Support

# Your Code Here
coplot(Social.Support ~ Year|Country.Name,
       type = "b",
       data = balanced2,
       rows = 1,
       col = "red")

Berdasarkan plot diatas dapat kita ketahui bahwa :

  • Social Support Jepang dan Mongolia berada di tingkat tertinggi
  • Social Support Taiwan di tingkat menengah
  • Social Support China dan Korea Selatan di bawah

4. Freedom.To.Make.Life.Choices

# Freedom.To.Make.Life.Choices
coplot(Freedom.To.Make.Life.Choices ~ Year|Country.Name,
       type = "b",
       data = balanced2,
       rows = 1,
       col = "red")

Berdasarkan Line plot diatas dapat kita ketahui bahwa :

  • Tidak disangka, China berada di peringkat teratas dalam kategori Freedom.To.Make.Life.Choices. Padahal, China terkenal dengan sistem komunis nya
  • Mongolia dan Korea Selatan berada di peringkat terbawah dalam kategori Freedom.To.Make.Life.Choices

2.4.4 Heterogenitas Life.Ledder

Untuk melihat heterogenitas antar individu dan waktu kita dapat menggunakan fungsi plotmeans() dari package gplots dengan parameter:

  • formula : Target ~ variabel index individu/waktu
  • data : data frame

1. Heterogenitas antar negara

plotmeans( Life.Ladder ~ Country.Name, data = balanced2, main="Heterogenitas Life.Ladder antar Negara")

Insight : Taiwan, Korea Selatan dan Jepang memiliki tingkat life.ladder yang tinggi. Sedangkan China dan Mongolia, jauh ketinggalan di bawah.

2. Heterogenitas antar Waktu

plotmeans(Life.Ladder ~ Year, data = balanced2, main="Heterogenitas Life.Ladder antar Tahun")

Insight : Tahun 2011,2020-2022 adalah tahun dimana orang dari beberapa negara di Asia Timur paling bahagia di rentang tahun 2005-2022.


2.5 Pemodelan

2.5.1 Cross-Validation

Tahapan cross validation akan selalu dilakukan sebelum pembuatan model, data akan dibagi menjadi data train dan data test. Dikarenakan data panel memiliki informasi keterangan waktu maka pembagian data tidak boleh diambil secara acak melainkan dibagi dengan cara dipisah secara berurutan.

  • Data Train akan menggunakan data yang terlampau
  • Data Test akan menggunakan data yang terbaru

untuk melakukannya kita bisa menggunakan bantuan fungsi filter()

#membuat data train
ladder_train <- balanced2 %>% filter(Year != 2022) 
  
#membuat data test
ladder_test <- balanced2 %>% filter(Year == 2022)

setelah dilakukan cross validation kita perlu memastikan kembali bahwa data train sudah balance dengan melakukan balancing

ladder_train <- ladder_train %>% 
  droplevels() %>%    # menghapus informasi waktu yang diambil sebagai data test (tahun 2022)
  make.pbalanced()    # melakukan balancing kembali

is.pbalanced(ladder_train)
#> [1] TRUE

2.5.2 Pemeriksaan Asumsi Multikolinieritas

Dikarenakan pada hasil pemeriksaan korelasi pada tahapan EDA sebelumnya menunjukkan adanya indikasi multikolinieritas antar variabel prediktor, maka akan dilakukan pemeriksaan asumsi multikolinieritas terlebih dahulu dengan cara pembuatan model regresi dengan fungsi lm() dan dilanjutkan pengujian menggunakan fungsi vif().

nilai VIF > 10: terjadi multicollinearity pada model nilai VIF < 10: tidak terjadi multicollinearity pada model

# your code here
lm(Life.Ladder ~ .-Country.Name -Year, ladder_train) %>% vif()
#>           Log.GDP.Per.Capita               Social.Support 
#>                     2.263397                     1.663773 
#> Freedom.To.Make.Life.Choices                   Generosity 
#>                     2.560800                     2.430170 
#>              Positive.Affect              Negative.Affect 
#>                     4.284035                     2.228092

Insight: Tidak ada yang memiliki nilai di atas 10 sehingga kita bisa menggunakan semua prediktor yang telah dipersiapkan sebelumnya.


2.5.3 Penentuan Model Estimasi

2.5.3.1 Pembuatan Model

Untuk setiap pembuatan model akan digunakan fungsi plm() dari package plm dengan parameter sebagai berikut:

  • formula = Target ~ Prediktor
  • data = berupa dataframe
  • index = c(“kolom_individu”,“kolom_waktu”)
  • model =
    • "pooling" : untuk model CEM
    • "within" : untuk model FEM
    • "random" : untuk model REM

dimana

  • Variabel target : Life.Ladder
  • Variabel prediktor :
    • Log.GDP.Per.Capita
    • Social.Support
    • Perceptions.Of.Corruption
    • Negative.Affect

Model Gabungan (CEM)

membuat Common effect model dan disimpan kedalam objek cem

# membuat Common effect model 
cem <- plm(Life.Ladder ~ Log.GDP.Per.Capita + Social.Support + Freedom.To.Make.Life.Choices + Generosity + Positive.Affect + Negative.Affect, 
           data = ladder_train,
           index = c("Country.Name","Year"),
           model = "pooling")

Model Pengaruh Tetap (FEM)

membuat model FEM dengan memberikan parameter tambahan effect = "twoways" untuk memasukan pengaruh individu dan waktu, kemudian disimpan kedalam objek fem.two

# membuat fixed effect model 
fem <- plm(Life.Ladder ~ Log.GDP.Per.Capita + Social.Support + Freedom.To.Make.Life.Choices + Generosity + Positive.Affect + Negative.Affect, 
           data = ladder_train,
           index = c("Country.Name","Year"),
           model = "within")

Uji Chow

Uji chow dilakukan untuk memilih model terbaik antara model gabungan (cem) dengan model fixed effec (fem). untuk melakukan uji Chow dapat menggunakan fungsi pooltest(model_cem, model_fem)

Hipotesis yang diuji adalah sebagai berikut:

  • H0 : Model gabungan
  • H1 : Model pengaruh tetap

H0 ditolak jika P-value < α. Nilai α yang digunakan sebesar 5%.

# your code here
pooltest(cem,fem)
#> 
#>  F statistic
#> 
#> data:  Life.Ladder ~ Log.GDP.Per.Capita + Social.Support + Freedom.To.Make.Life.Choices +  ...
#> F = 2.7441, df1 = 4, df2 = 74, p-value = 0.03463
#> alternative hypothesis: unstability

Berdasarkan hasil uji chow diatas, kita peroleh nilai p-value < α. artinya Model terbaik untuk digunakan pada data World Happines adalah fixed effect model.


Model Pengaruh Acak (REM)

membuat random effect model dan disimpan kedalam objek rem

# membuat random effect model 
# Error model random effect karena jumlah variabel prediktor dan target > jumlah index individu
#rem <- plm(Life.Ladder ~ Log.GDP.Per.Capita + Social.Support + Freedom.To.Make.Life.Choices + Generosity + Positive.Affect + Negative.Affect, 
#           data = ladder_train,
#           index = c("Country.Name","Year"),
#           model = "random")

Uji Hausman

Untuk melakukan uji Chow di R dapat menggunakan fungsi phtest(model_rem, model_fem), dengan Hipotesis yang diuji adalah sebagai berikut.

  • H0 : Model pengaruh acak
  • H1 : Model pengaruh tetap

Keputusan tolak H0 (model pengaruh tetap terpilih) apabila nilai p-value < α. Karena REM tidak dibuat karena jumlah individu > jumlah prediktor, kita tidak melakukan uji ini

# your code here
#phtest(rem,fem)

Artinya Model terbaik untuk digunakan pada data World Happines adalah fixed effect model. Dikarenakan model fem adalah model terbaik maka tidak perlu dilakukan uji efek lanjutan, dan bisa langsung dilakukan pengujian asumsi.


2.5.3.2 Pengujian Asumsi

Normalitas

Hipotesis yang diuji adalah sebagai berikut.

  • H0 : Sisaan menyebar normal
  • H1 : Sisaan tidak menyebar normal

H0 ditolak jika P-value < α. Nilai α yang digunakan sebesar 5%.

# your code here
fem$residuals %>% shapiro.test()
#> 
#>  Shapiro-Wilk normality test
#> 
#> data:  .
#> W = 0.91461, p-value = 0.00003201

Berdasarkan hasil pengujian normalitas sisaan diperoleh nilai p-value < 0.05, artinya sisaan menyebar secara TIDAK normal.

Homogenitas

Hipotesis yang diuji adalah sebagai berikut.

  • H0 : Sisaan memiliki ragam homogen
  • H1 : Sisaan tidak memiliki ragam homogen

H0 ditolak jika P-value < α. Nilai α yang digunakan sebesar 5%.

# your code here
fem %>% bptest()
#> 
#>  studentized Breusch-Pagan test
#> 
#> data:  .
#> BP = 4.0277, df = 6, p-value = 0.6729

Berdasarkan hasil pengujian homogenitas diperoleh nilai p-value > 0.05, artinya sisaan memiliki ragam yang homogen.

Autokorelasi

Hipotesis yang diuji adalah sebagai berikut.

  • H0 : tidak terjadi autokorelasi pada sisaan
  • H1 : terjadi autokorelasi pada sisaan

H0 ditolak jika P-value < α. Nilai α yang digunakan sebesar 5%.

# your code here
fem$residuals %>% Box.test(type = "Ljung-Box")
#> 
#>  Box-Ljung test
#> 
#> data:  .
#> X-squared = 11.227, df = 1, p-value = 0.0008064

Berdasarkan hasil pengujian autokorelasi diperoleh nilai p-value < 0.05, artinya terjadi permasalahan autokorelasi antar sisaan.


2.5.4 Interpretasi Model

1. Koefisien

# your code here
summary(fem)
#> Oneway (individual) effect Within Model
#> 
#> Call:
#> plm(formula = Life.Ladder ~ Log.GDP.Per.Capita + Social.Support + 
#>     Freedom.To.Make.Life.Choices + Generosity + Positive.Affect + 
#>     Negative.Affect, data = ladder_train, model = "within", index = c("Country.Name", 
#>     "Year"))
#> 
#> Balanced Panel: n = 5, T = 17, N = 85
#> 
#> Residuals:
#>      Min.   1st Qu.    Median   3rd Qu.      Max. 
#> -0.579882 -0.123936 -0.020388  0.114011  0.918328 
#> 
#> Coefficients:
#>                              Estimate Std. Error t-value     Pr(>|t|)    
#> Log.GDP.Per.Capita            0.88749    0.16275  5.4530 0.0000006255 ***
#> Social.Support                2.27912    1.26491  1.8018      0.07565 .  
#> Freedom.To.Make.Life.Choices  1.08858    0.47612  2.2864      0.02510 *  
#> Generosity                    0.98735    0.50356  1.9607      0.05367 .  
#> Positive.Affect               1.49794    1.10717  1.3529      0.18019    
#> Negative.Affect              -1.59825    1.00230 -1.5946      0.11507    
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Total Sum of Squares:    9.9668
#> Residual Sum of Squares: 4.0801
#> R-Squared:      0.59063
#> Adj. R-Squared: 0.53531
#> F-statistic: 17.7944 on 6 and 74 DF, p-value: 0.0000000000011927

Interpretasi:

\[life.ladder = (0.88749 * Log.GDP.Per.Capita) + (2.27912 * Social.Support) + (1.08858 * Freedom.To.Make.Life.Choices) + (0.98735 * Generosity) + (1.49794 * Positive.Affect) - 1.59825 Negative.Affect + uit\]

  • variabel yang signifikan mempengaruhi tingkat kebahagiaan masyarakat di suatu negara adalah :
    • Social.Support
    • Positive.Affect
    • Freedom.To.Make.Life.Choices
    • Generosity
    • Log.GDP.Per.Capita
    • Negative.Affect
  • dari variabel yang signifikan, Social.support memberikan pengaruh yang lebih besar dibandingkan dengan variabel yang lain.
  • tingkat kebahagian masyarakat di suatu negara akan bertambah sebesar 0.88749 untuk setiap kenaikan 1 satuan Log.GDP.Per.Capita, dengan catatan variabel lainnya bernilai tetap
  • tingkat kebahagian masyarakat di suatu negara akan bertambah sebesar 2.27912 untuk setiap kenaikan 1 satuan Social.Support, dengan catatan variabel lainnya bernilai tetap
  • tingkat kebahagian masyarakat di suatu negara akan bertambah sebesar 1.08858 untuk setiap kenaikan 1 satuan Freedom.To.Make.Life.Choices, dengan catatan variabel lainnya bernilai tetap
  • tingkat kebahagian masyarakat di suatu negara akan bertambah sebesar 0.98735 untuk setiap kenaikan 1 satuan Generosity, dengan catatan variabel lainnya bernilai tetap
  • tingkat kebahagian masyarakat di suatu negara akan bertambah sebesar 1.49794 untuk setiap kenaikan 1 satuan Positive.Affect, dengan catatan variabel lainnya bernilai tetap
  • tingkat kebahagian masyarakat di suatu negara akan menurun sebesar 1.59825 untuk setiap kenaikan 1 satuan Negative.Affect , dengan catatan variabel lainnya bernilai tetap

2. Mengekstrak informasi Efek dari model fix

Untuk mengekstrak informasi efek dari model FEM kita dapat menggunakan fungsi fixef(model fem),

# your code here
fixef(fem)
#>                    China                    Japan                 Mongolia 
#>                  -6.4799                  -6.8878                  -6.5678 
#>              South Korea Taiwan Province of China 
#>                  -6.4140                  -6.8491

Interpretasi:

  • tingkat kebahagiaan masyarakat di negara China adalah sebesar -6.4799 apabila tidak terdapat informasi lainnya
  • tingkat kebahagiaan masyarakat di negara Japan adalah sebesar -6.8878 apabila tidak terdapat informasi lainnya
  • tingkat kebahagiaan masyarakat di negara Mongolia adalah sebesar -6.5678 apabila tidak terdapat informasi lainnya
  • tingkat kebahagiaan masyarakat di negara South Korea adalah sebesar -6.4140 apabila tidak terdapat informasi lainnya
  • tingkat kebahagiaan masyarakat di negara Taiwan Province of China adalah sebesar -6.8491 apabila tidak terdapat informasi lainnya

2.5.5 Prediksi & Evaluasi

Untuk melakukan prediksi akan kita gunakan fungsi predict() dengan parameter:

  • object = nama model yang kita gunakan
  • newdata = data baru yang akan kita prediksi
# your code here
pred <- predict(fem, ladder_test, na.fill = F)

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:

  • y_pred = nilai hasil prediksi
  • y_true = nilai target asli
# your code here
MAPE(y_pred = pred,
     y_true = ladder_test$Life.Ladder)
#> [1] 0.04158097

Insight: tingkat kesalahan prediski model fem dalam memprediksi nilai baru adalah sebesra 4,16%, artinya model sudah cukup baik untuk digunakan dalam memprediksi data yang baru.


3 Kesimpulan & Saran

Dari serangkaian proses analisis yang telah dilakukan, dapat kita peroleh kesimpulan sebagai berikut:

  • tingkat kebahagiaan masyarakat tertinggi di East Asia adalah di negara Jepang dan Taiwan
  • tingkat kebahagiaan masyarakat terrendah di East Asia adalah di negara China dan Mongolia
  • variabel yang paling signifikan mempengaruhi tingkat kebahagiaan masyarakan di suatu negara adalah social.support
  • dari model final, kita ketahui bahwa index individu memberikan pengaruh terhadap tingkat kebahagiaan masyarakat. yang artinya setiap negara memiliki karakteristik yang berbeda mengenai tingkat kebahagiaan masyarakatnya

Saran:

  • Untuk meningkatkan tingkat kebahagiaan, negara perlu meningkatkan social.support dan log.gdp-nya, caranya:
    • social support:
      • Buat hotline atau forum untuk menampung keluhan warga
      • Buat hotline atau forum untuk menampung keluhan warga
    • Positive Affect:
      • Menggalakkan praktek meditasi, olahraga dan kegiatan kreatif lainnya
      • Menciptakan lingkungan yang ramah
    • Freedom To Make Life Choices:
      • Meningkatkan akses pendidikan dan pelatihan keterampilan untuk semua orang
      • Memastikan adanya kebijakan yang mendukung kebebasan individu untuk membuat pilihan hidup mereka sendiri
    • Generosity:
      • Mendorong sikap berbagi
      • Menggalang dana untuk tujuan sosial
    • log gdp:
      • training center untuk meningkatkan keterampilan masyarakat
      • mendorong pembangunan ekonomi