Analisis Regresi Data Panel dalam Pemodelan Tingkat Kebahagiaan Beberapa Negara di Asia tenggara tahun 2006 s.d 2022

Pendahuluan

Latar Belakang

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.

Analisis Regresi Data Panel telah menjadi alat yang semakin penting dalam studi ekonometrik dan ilmu sosial, terutama dalam memahami hubungan kompleks antara variabel-variabel dalam waktu dan ruang. Metode ini menggabungkan kelebihan analisis regresi lintas-seksi dengan analisis deret waktu, sehingga memungkinkan peneliti untuk memeriksa efek individual dan efek lintas-seksi dalam satu kerangka kerja. Penelitian ini akan berfokus pada memodelkan tingkat kebahagiaan beberapa negara di Asia Tenggara dari tahun 2006 hingga 2022, dengan menggunakan data tingkat kebahagiaan yang telah disusun dalam laporan World Happiness Report..


Tentang Data

Pada penelitian kali ini akan menggunakan dataset tingkat kebahagiaan yang diperoleh dari World Happiness Report 2023 yang dipublish melalui kaggle oleh USAMA BUTTAR. atau bisa mengakses melalui halaman resmi World Happiness Report.

Pada data ini terdapat beberapa kolom berikut:

  • 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

Teori Dasar

Data Panel

Salah satu aspek yang harus diperhatikan dalam melakukan pemodelan statistika adalah jenis data yang digunakan. Salah satu jenis data berdasarkan waktu pengumpulannya adalah 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 panel disebut juga data longitudinal.

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.

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

Ilustrasi Balanced & Unbalanced Data Panel


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”
  • effect = “twoways”

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”

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%.


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%.


Alur Kerja Data Panel

Analisis data panel di R dapat dilakukan dengan mengikuti alur kerja berikut ini:
Alur Kerja Analisis Data Panel di R

Analisis Data

Persiapan Analisis

Load packages

Berikut adalah beberapa Packages yang akan digunakan untuk analisis data kali ini.

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

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

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

Data Preparation

1. Import Data

df <- read.csv("Data/World_Happiness_Report.csv") 
head(df,5)
Country.Name Regional.Indicator Year Life.Ladder Log.GDP.Per.Capita Social.Support Healthy.Life.Expectancy.At.Birth Freedom.To.Make.Life.Choices Generosity Perceptions.Of.Corruption Positive.Affect Negative.Affect Confidence.In.National.Government
Afghanistan South Asia 2008 3.723590 7.350416 0.4506623 50.5 0.7181143 0.1676525 0.8816863 0.4142970 0.2581955 0.6120721
Afghanistan South Asia 2009 4.401778 7.508646 0.5523084 50.8 0.6788964 0.1908088 0.8500354 0.4814214 0.2370924 0.6115452
Afghanistan South Asia 2010 4.758381 7.613900 0.5390752 51.1 0.6001272 0.1213160 0.7067661 0.5169067 0.2753238 0.2993574
Afghanistan South Asia 2011 3.831719 7.581259 0.5211036 51.4 0.4959014 0.1635715 0.7311085 0.4798347 0.2671747 0.3073857
Afghanistan South Asia 2012 3.782938 7.660506 0.5206367 51.7 0.5309350 0.2375876 0.7756198 0.6135128 0.2679191 0.4354402

2. Mengambil data Wilayah Asia Tenggara

df_asia <- df %>% filter(Regional.Indicator == "Southeast Asia" )

3. Pemeriksaan Balancing Data

table(df_asia$Country.Name )
#> 
#>    Cambodia   Indonesia        Laos    Malaysia     Myanmar Philippines 
#>          17          17          10          14          10          16 
#>   Singapore    Thailand     Vietnam 
#>          14          17          17
is.pbalanced(df_asia,index = c("Country.Name","Year") )
#> [1] FALSE

insight: data imbalance dengan kondisi:

  • negara Cambodia, Indonesia, Thailand & Vietnam memiliki 17 informasi waktu
  • negara Philippines hanya memiliki 16 informasi waktu
  • negara Malaysia & singapore hanya memiliki 14 informasi waktu
  • negara Laos & Myanmar hanya memiliki 10 informasi waktu

3.1 Balancing the Data

untuk melakukan balancing dapat menggunakan fungsi make.pbalanced dengan parameter balance.type yang dapat diisi dengan 3 opsi berikut:

    1. menggunakan fill : untuk setiap kolom waktu yg hilang akan diberikan nilai NA
    1. menggunakan shared.times : akan diambil keseluruhan individu dgn ketentuan informasi waktu terdapat di semua individu
    1. menggunakan shared.individuals : akan individu dengan ketentuan informasi waktu lengkap
# balancing menggunakan fill
balance1 <- pdata.frame(df_asia, index = c("Country.Name","Year") ) %>%  #mengubah data frame menjadi format pooled data frame
  make.pbalanced(balance.type = "fill") # balancing the data

table(balance1$Country.Name)
#> 
#>    Cambodia   Indonesia        Laos    Malaysia     Myanmar Philippines 
#>          17          17          17          17          17          17 
#>   Singapore    Thailand     Vietnam 
#>          17          17          17
# balancing menggunakan shared.times
balance2 <- pdata.frame(df_asia, index = c("Country.Name","Year") ) %>% make.pbalanced(balance.type = "shared.times")
table(balance2$Country.Name)
#> 
#>    Cambodia   Indonesia        Laos    Malaysia     Myanmar Philippines 
#>           3           3           3           3           3           3 
#>   Singapore    Thailand     Vietnam 
#>           3           3           3
# balancing menggunakan shared.individuals
balance3 <- pdata.frame(df_asia, index = c("Country.Name","Year") ) %>% make.pbalanced(balance.type = "shared.individuals")
table(balance3$Country.Name)
#> 
#>    Cambodia   Indonesia        Laos    Malaysia     Myanmar Philippines 
#>          17          17           0           0           0           0 
#>   Singapore    Thailand     Vietnam 
#>           0          17          17

Insight:

melihat dari kondisi data yang dimiliki, kita tidak akan memakai balancing dengan metode shared.times karena akan menghilangkan banyak informasi. dan untuk selanjutnya hanya akan diguanakan hasil balancing metode fill, dengan catatan tidak akan menyertakan negara Laos & Myanmar. Karena hampir 50% informasi yang ada pada negara-negara tersebut akan diinput secara matematis sehingga dikhawatirkan akan menjadikan model yang bias.

sehingga pada analisis selanjutnya hanya akan digunakan data negara Cambodia, Indonesia, Philippines, Thailand , Vietnam, Malaysia & Singapore yang akan disimpan pada pdataframe bernama balanced

# mengambil data negara tertentu
balanced <- balance1 %>% filter( Country.Name %in% c("Cambodia", "Indonesia", "Philippines", "Thailand", "Vietnam", "Malaysia", "Singapore"))

# memeriksa kembali keseimbangan data
is.pbalanced(balanced)
#> [1] TRUE

4. Check Missing Value

tahap selanjutnya adalah memeriksa kelengkapan data

colSums(is.na(balanced))
#>                      Country.Name                Regional.Indicator 
#>                                 0                                 7 
#>                              Year                       Life.Ladder 
#>                                 0                                 7 
#>                Log.GDP.Per.Capita                    Social.Support 
#>                                 7                                 8 
#>  Healthy.Life.Expectancy.At.Birth      Freedom.To.Make.Life.Choices 
#>                                 7                                11 
#>                        Generosity         Perceptions.Of.Corruption 
#>                                 8                                13 
#>                   Positive.Affect                   Negative.Affect 
#>                                11                                 9 
#> Confidence.In.National.Government 
#>                                24

insight:

  • karena data yang kita miliki adalah sebanyak 17 x 5 dan kolom Confidence.In.National.Government memiliki 17 nilai missing yang artinya 1/5 data yang hilang maka untuk analisis selanjutnya kolom Confidence.In.National.Government tidak akan disertakan
# membuang kolom Confidence.In.National.Government dan Regional.Indicator
balanced <- balanced %>% select(-Confidence.In.National.Government, -Regional.Indicator)

4.1 Filling the missing value

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

4.1.1 Cambodia

cam <- balanced %>% filter(Country.Name == "Cambodia")
colSums(is.na(cam))
#>                     Country.Name                             Year 
#>                                0                                0 
#>                      Life.Ladder               Log.GDP.Per.Capita 
#>                                0                                0 
#>                   Social.Support Healthy.Life.Expectancy.At.Birth 
#>                                0                                0 
#>     Freedom.To.Make.Life.Choices                       Generosity 
#>                                1                                0 
#>        Perceptions.Of.Corruption                  Positive.Affect 
#>                                1                                2 
#>                  Negative.Affect 
#>                                0

untuk mengisi nilai yang hilang dengan nilai rata-rata dari nilai yang dekat dengan nilai missing menggunakan extend

cam <- cam %>% mutate(Freedom.To.Make.Life.Choices = na.fill(Freedom.To.Make.Life.Choices ,fill = "extend"),
               Perceptions.Of.Corruption = na.fill(Perceptions.Of.Corruption ,fill = "extend"),
               Positive.Affect = na.fill(Positive.Affect ,fill = "extend"))
anyNA(cam)
#> [1] FALSE

4.1.2 Indonesia

idn <- balanced %>% filter(Country.Name == "Indonesia")
colSums(is.na(idn))
#>                     Country.Name                             Year 
#>                                0                                0 
#>                      Life.Ladder               Log.GDP.Per.Capita 
#>                                0                                0 
#>                   Social.Support Healthy.Life.Expectancy.At.Birth 
#>                                0                                0 
#>     Freedom.To.Make.Life.Choices                       Generosity 
#>                                0                                0 
#>        Perceptions.Of.Corruption                  Positive.Affect 
#>                                0                                0 
#>                  Negative.Affect 
#>                                0

tidak terdapat nilai yang missing untuk negara Indonesia.

4.1.3 Philippines

ph <- balanced %>% filter(Country.Name == "Philippines")
colSums(is.na(ph))
#>                     Country.Name                             Year 
#>                                0                                0 
#>                      Life.Ladder               Log.GDP.Per.Capita 
#>                                1                                1 
#>                   Social.Support Healthy.Life.Expectancy.At.Birth 
#>                                1                                1 
#>     Freedom.To.Make.Life.Choices                       Generosity 
#>                                1                                1 
#>        Perceptions.Of.Corruption                  Positive.Affect 
#>                                1                                1 
#>                  Negative.Affect 
#>                                2

dikarenakan sebelumnya kita menggunakan balancing data pada data Filipina sehingga disetiap kolom terdapat 1 nilai missing, untuk mengisi nilai yang missing dengan nilai rata-rata dari nilai yang dekat dengan nilai missing menggunakan extend

ph <- ph %>% 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"),
  Healthy.Life.Expectancy.At.Birth = na.fill(Healthy.Life.Expectancy.At.Birth ,fill = "extend"),
  Freedom.To.Make.Life.Choices = na.fill(Freedom.To.Make.Life.Choices ,fill = "extend"),
  Generosity = na.fill(Generosity ,fill = "extend"),
  Perceptions.Of.Corruption = na.fill(Perceptions.Of.Corruption ,fill = "extend"),
  Positive.Affect = na.fill(Positive.Affect ,fill = "extend"),
  Negative.Affect = na.fill(Negative.Affect, fill = "extend"))


anyNA(ph)
#> [1] FALSE

4.1.4 Thailand

thai <- balanced %>% filter(Country.Name == "Thailand")
colSums(is.na(thai))
#>                     Country.Name                             Year 
#>                                0                                0 
#>                      Life.Ladder               Log.GDP.Per.Capita 
#>                                0                                0 
#>                   Social.Support Healthy.Life.Expectancy.At.Birth 
#>                                0                                0 
#>     Freedom.To.Make.Life.Choices                       Generosity 
#>                                0                                0 
#>        Perceptions.Of.Corruption                  Positive.Affect 
#>                                0                                0 
#>                  Negative.Affect 
#>                                0

tidak terdapat nilai yang missing untuk negara Thailand.

4.1.5 Vietnam

viet <- balanced %>% filter(Country.Name == "Vietnam")
colSums(is.na(viet))
#>                     Country.Name                             Year 
#>                                0                                0 
#>                      Life.Ladder               Log.GDP.Per.Capita 
#>                                0                                0 
#>                   Social.Support Healthy.Life.Expectancy.At.Birth 
#>                                1                                0 
#>     Freedom.To.Make.Life.Choices                       Generosity 
#>                                3                                1 
#>        Perceptions.Of.Corruption                  Positive.Affect 
#>                                4                                2 
#>                  Negative.Affect 
#>                                1
viet <- viet %>% mutate(
  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"),
  Perceptions.Of.Corruption = na.fill(Perceptions.Of.Corruption ,fill = "extend"),
  Positive.Affect = na.fill(Positive.Affect ,fill = "extend"),
  Negative.Affect = na.fill(Negative.Affect, fill = "extend"))


anyNA(viet)
#> [1] FALSE

4.1.6 Malaysia

Malay <- balanced %>% filter(Country.Name == "Malaysia")
colSums(is.na(Malay))
#>                     Country.Name                             Year 
#>                                0                                0 
#>                      Life.Ladder               Log.GDP.Per.Capita 
#>                                3                                3 
#>                   Social.Support Healthy.Life.Expectancy.At.Birth 
#>                                3                                3 
#>     Freedom.To.Make.Life.Choices                       Generosity 
#>                                3                                3 
#>        Perceptions.Of.Corruption                  Positive.Affect 
#>                                3                                3 
#>                  Negative.Affect 
#>                                3
Malay <- Malay %>% 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"),
  Healthy.Life.Expectancy.At.Birth = na.fill(Healthy.Life.Expectancy.At.Birth ,fill = "extend"),
  Freedom.To.Make.Life.Choices = na.fill(Freedom.To.Make.Life.Choices ,fill = "extend"),
  Generosity = na.fill(Generosity ,fill = "extend"),
  Perceptions.Of.Corruption = na.fill(Perceptions.Of.Corruption ,fill = "extend"),
  Positive.Affect = na.fill(Positive.Affect ,fill = "extend"),
  Negative.Affect = na.fill(Negative.Affect, fill = "extend"))


anyNA(Malay)
#> [1] FALSE

4.1.7 Singapore

sgp <- balanced %>% filter(Country.Name == "Singapore")
colSums(is.na(sgp))
#>                     Country.Name                             Year 
#>                                0                                0 
#>                      Life.Ladder               Log.GDP.Per.Capita 
#>                                3                                3 
#>                   Social.Support Healthy.Life.Expectancy.At.Birth 
#>                                3                                3 
#>     Freedom.To.Make.Life.Choices                       Generosity 
#>                                3                                3 
#>        Perceptions.Of.Corruption                  Positive.Affect 
#>                                4                                3 
#>                  Negative.Affect 
#>                                3
sgp <- sgp %>% 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"),
  Healthy.Life.Expectancy.At.Birth = na.fill(Healthy.Life.Expectancy.At.Birth ,fill = "extend"),
  Freedom.To.Make.Life.Choices = na.fill(Freedom.To.Make.Life.Choices ,fill = "extend"),
  Generosity = na.fill(Generosity ,fill = "extend"),
  Perceptions.Of.Corruption = na.fill(Perceptions.Of.Corruption ,fill = "extend"),
  Positive.Affect = na.fill(Positive.Affect ,fill = "extend"),
  Negative.Affect = na.fill(Negative.Affect, fill = "extend"))


anyNA(sgp)
#> [1] FALSE

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

balanced2 <- bind_rows(cam,idn,ph,thai,viet,Malay,sgp) 

pemeriksaan ulang keseimbangan data

balanced2 %>% is.pbalanced()
#> [1] TRUE

pemeriksaan ulang kelengkapan data

colSums(is.na(balanced2))
#>                     Country.Name                             Year 
#>                                0                                0 
#>                      Life.Ladder               Log.GDP.Per.Capita 
#>                                0                                0 
#>                   Social.Support Healthy.Life.Expectancy.At.Birth 
#>                                0                                0 
#>     Freedom.To.Make.Life.Choices                       Generosity 
#>                                0                                0 
#>        Perceptions.Of.Corruption                  Positive.Affect 
#>                                0                                0 
#>                  Negative.Affect 
#>                                0

Pemeriksaan Struktur Data

glimpse(balanced2)
#> Rows: 119
#> Columns: 11
#> $ Country.Name                     <fct> Cambodia, Cambodia, Cambodia, Cambodi…
#> $ Year                             <fct> 2006, 2007, 2008, 2009, 2010, 2011, 2…
#> $ Life.Ladder                      <pseries> 3.568745, 4.155971, 4.462164, 4.1…
#> $ Log.GDP.Per.Capita               <pseries> 7.746443, 7.826252, 7.874457, 7.8…
#> $ Social.Support                   <pseries> 0.7930815, 0.6751321, 0.6192643, …
#> $ Healthy.Life.Expectancy.At.Birth <pseries> 57.64, 57.98, 58.32, 58.66, 59.00…
#> $ Freedom.To.Make.Life.Choices     <pseries> 0.8186995, 0.8186995, 0.9141729, …
#> $ Generosity                       <pseries> 0.253480405, 0.113903776, 0.04392…
#> $ Perceptions.Of.Corruption        <pseries> 0.8291811, 0.8785076, 0.8883920, …
#> $ Positive.Affect                  <pseries> 0.5999891, 0.5999891, 0.5999891, …
#> $ Negative.Affect                  <pseries> 0.3410233, 0.3203354, 0.3353240, …

insight:

  • dengan pengubahan tipe data menjadai pooled data frame, maka nilai setiap kolom menjadi pseries dan untuk country name dan year akan menjadi index
# memeriksa level dari kategori nama negara
unique(balanced2$Country.Name)
#> [1] Cambodia    Indonesia   Philippines Thailand    Vietnam     Malaysia   
#> [7] Singapore  
#> 9 Levels: Cambodia Indonesia Laos Malaysia Myanmar Philippines ... Vietnam

kita akan drop beberapa negara yang tidak kita gunakan agar pada tahap selanjutnya hanya menampilkan levels/kategori yang kita pakai

balanced2 <- balanced2 %>% droplevels()
unique(balanced2$Country.Name)
#> [1] Cambodia    Indonesia   Philippines Thailand    Vietnam     Malaysia   
#> [7] Singapore  
#> 7 Levels: Cambodia Indonesia Malaysia Philippines Singapore ... Vietnam
unique(balanced2$Year)
#>  [1] 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020
#> [16] 2021 2022
#> 17 Levels: 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 ... 2022

EDA

Ringkasan Data

summary(balanced2)
#>       Country.Name      Year     Life.Ladder    Log.GDP.Per.Capita
#>  Cambodia   :17    2006   : 7   Min.   :3.569   Min.   : 7.746    
#>  Indonesia  :17    2007   : 7   1st Qu.:5.075   1st Qu.: 8.800    
#>  Malaysia   :17    2008   : 7   Median :5.480   Median : 9.261    
#>  Philippines:17    2009   : 7   Mean   :5.515   Mean   : 9.445    
#>  Singapore  :17    2010   : 7   3rd Qu.:6.013   3rd Qu.: 9.903    
#>  Thailand   :17    2011   : 7   Max.   :7.062   Max.   :11.571    
#>  Vietnam    :17    (Other):77                                     
#>  Social.Support   Healthy.Life.Expectancy.At.Birth Freedom.To.Make.Life.Choices
#>  Min.   :0.6055   Min.   :57.64                    Min.   :0.5956              
#>  1st Qu.:0.7905   1st Qu.:61.81                    1st Qu.:0.8345              
#>  Median :0.8183   Median :64.82                    Median :0.8787              
#>  Mean   :0.8205   Mean   :64.97                    Mean   :0.8664              
#>  3rd Qu.:0.8668   3rd Qu.:67.01                    3rd Qu.:0.9143              
#>  Max.   :0.9332   Max.   :73.80                    Max.   :0.9754              
#>                                                                                
#>    Generosity       Perceptions.Of.Corruption Positive.Affect  Negative.Affect 
#>  Min.   :-0.17899   Min.   :0.0352            Min.   :0.4037   Min.   :0.1069  
#>  1st Qu.: 0.01234   1st Qu.:0.7546            1st Qu.:0.6748   1st Qu.:0.1809  
#>  Median : 0.12122   Median :0.8251            Median :0.7327   Median :0.2393  
#>  Mean   : 0.15597   Mean   :0.7377            Mean   :0.7147   Mean   :0.2525  
#>  3rd Qu.: 0.29693   3rd Qu.:0.8890            3rd Qu.:0.7751   3rd Qu.:0.3229  
#>  Max.   : 0.55196   Max.   :0.9727            Max.   :0.8836   Max.   :0.4819  
#> 

Berdasarkan ringkasan diatas dapat kita ketahui beberapa hal berikut:

  • tingkat kebahagiaan tertinggi di asia tenggara adalah 7.062 dan tingkat kebahagiaan terrendah adalah 3.569
# tingkat kebahagiaan tertinggi
balanced2 %>% filter(Life.Ladder == max(Life.Ladder)) 
Country.Name Year Life.Ladder Log.GDP.Per.Capita Social.Support Healthy.Life.Expectancy.At.Birth Freedom.To.Make.Life.Choices Generosity Perceptions.Of.Corruption Positive.Affect Negative.Affect
Singapore 2014 7.062365 11.38073 0.822033 73.02 0.8348876 0.1494345 0.1326032 0.7742402 0.1802328
# tingkat kebahagiaan terrendah
balanced2 %>% filter(Life.Ladder == min(Life.Ladder)) 
Country.Name Year Life.Ladder Log.GDP.Per.Capita Social.Support Healthy.Life.Expectancy.At.Birth Freedom.To.Make.Life.Choices Generosity Perceptions.Of.Corruption Positive.Affect Negative.Affect
Cambodia 2006 3.568745 7.746443 0.7930815 57.64 0.8186995 0.2534804 0.8291811 0.5999891 0.3410233
  • berdasarkan ekstraksi nilai diatas dapat kita ketahui bila negara di asia tenggara dengan tingkat kebahagiaan tertinggi adalah Singapura pada tahun 2014 dan tingkat kebagahiaan terrendah adalah negara Kamboja pada tahun 2006. Hal ini selaras dengan peringkat yang dikeluarkan oleh WHR dimana Singapura menduduki peringkat 25/137 negara dan Kamboja menduduki peringkat 115/137 negara.

  • Log.GDP.Per.Capita tertinggi di asia tenggara adalah 11.571 dan tingkat kebahagiaan terrendah adalah 7.746

# Log.GDP.Per.Capita tertinggi
balanced2 %>% filter(Log.GDP.Per.Capita== max(Log.GDP.Per.Capita)) 
Country.Name Year Life.Ladder Log.GDP.Per.Capita Social.Support Healthy.Life.Expectancy.At.Birth Freedom.To.Make.Life.Choices Generosity Perceptions.Of.Corruption Positive.Affect Negative.Affect
Singapore 2021 6.586717 11.5715 0.876409 73.8 0.8787011 0.06273898 0.1449354 0.6969902 0.1598022
Singapore 2022 6.586717 11.5715 0.876409 73.8 0.8787011 0.06273898 0.1449354 0.6969902 0.1598022
# Log.GDP.Per.Capita terrendah
balanced2 %>% filter(Log.GDP.Per.Capita== min(Log.GDP.Per.Capita)) 
Country.Name Year Life.Ladder Log.GDP.Per.Capita Social.Support Healthy.Life.Expectancy.At.Birth Freedom.To.Make.Life.Choices Generosity Perceptions.Of.Corruption Positive.Affect Negative.Affect
Cambodia 2006 3.568745 7.746443 0.7930815 57.64 0.8186995 0.2534804 0.8291811 0.5999891 0.3410233
  • berdasarkan ekstraksi nilai diatas dapat kita ketahui bila negara di asia tenggara dengan GDP tertinggi adalah Singapura pada tahun 2021 dan tingkat kebagahiaan terrendah adalah negara Kamboja pada tahun 2006. hal ini selaras dengan peringkat yang dikeluarkan oleh WHR dimana Singapura menduduki peringkat 25/137 negara dan Kamboja menduduki peringkat 115/137 negara.

  • pada kolom Generosity terdapat hal yang janggal yakni nilai minimum yang bernilai negatif, dimana seharusnya nilai berada pada rentang 0 s.d 1. Diasumsikan nilai tersebut mengalami kesalahan minor input, sehingga akan diperbaiki dengan menghilangkan tanda negatif

# memeriksa nilai negatif pada generosity
balanced2 %>% filter(Generosity < 0)
Country.Name Year Life.Ladder Log.GDP.Per.Capita Social.Support Healthy.Life.Expectancy.At.Birth Freedom.To.Make.Life.Choices Generosity Perceptions.Of.Corruption Positive.Affect Negative.Affect
Philippines 2007 5.073562 8.606147 0.8007114 61.420 0.8515664 -0.023918567 0.88024557 0.7364587 0.3781878
Philippines 2014 5.312550 8.841846 0.8133002 61.840 0.9021857 -0.017415673 0.78721946 0.7872629 0.3340365
Philippines 2015 5.547489 8.886697 0.8535886 61.900 0.9115336 -0.053213272 0.75519156 0.7963219 0.3505877
Philippines 2016 5.430833 8.938013 0.8212987 61.925 0.9075958 -0.073148958 0.79196221 0.8074337 0.2902327
Philippines 2017 5.594270 8.987416 0.8510286 61.950 0.9257031 -0.143116161 0.71116555 0.7534837 0.3406215
Philippines 2018 5.869173 9.031899 0.8458033 61.975 0.9178082 -0.109501414 0.72648335 0.7561843 0.3934811
Philippines 2019 6.267745 9.074734 0.8450947 62.000 0.9095986 -0.084004894 0.74844211 0.7645264 0.3405695
Philippines 2020 5.079585 8.958445 0.7811404 62.025 0.9320417 -0.110944264 0.74428368 0.7927356 0.3268890
Philippines 2021 5.965058 8.998964 0.7781921 62.050 0.9052755 -0.008972425 0.72116226 0.7897311 0.3229415
Philippines 2022 5.965058 8.998964 0.7781921 62.050 0.9052755 -0.008972425 0.72116226 0.7897311 0.3229415
Vietnam 2006 5.293660 8.553802 0.8876645 64.180 0.8857921 -0.003454410 0.75393397 0.6574848 0.2039792
Vietnam 2009 5.304265 8.700611 0.8150265 64.420 0.8341339 -0.079960719 0.83786976 0.4809068 0.1899301
Vietnam 2010 5.295781 8.752191 0.7866114 64.500 0.8314945 -0.023855312 0.74263674 0.6706609 0.2157984
Vietnam 2012 5.534570 8.846539 0.7750087 64.660 0.8560535 -0.128692746 0.81488490 0.5460535 0.2213560
Vietnam 2013 5.022699 8.889822 0.7594770 64.740 0.9196075 -0.045563158 0.77124584 0.6888777 0.1652253
Vietnam 2014 5.084923 8.941402 0.7921685 64.820 0.9111887 -0.018800916 0.78057728 0.6338523 0.2406068
Vietnam 2016 5.062267 9.053184 0.8763236 65.000 0.8943511 -0.109294027 0.79924017 0.4872572 0.2225502
Vietnam 2017 5.175279 9.110596 0.8541344 65.100 0.9018055 -0.085031059 0.80383158 0.5508307 0.2068058
Vietnam 2018 5.295547 9.173263 0.8319452 65.200 0.9092598 -0.060768090 0.80842298 0.6144043 0.1910614
Vietnam 2019 5.467451 9.235229 0.8475921 65.300 0.9524692 -0.145854294 0.78788924 0.6577857 0.1856102
Vietnam 2022 6.266509 9.332854 0.8787440 65.600 0.9754052 -0.178986996 0.70342290 0.7742364 0.1084734
Malaysia 2009 5.384702 9.858006 0.7916664 65.320 0.8743198 -0.010948431 0.85809523 0.7400351 0.1635498
Malaysia 2011 5.786367 9.947520 0.7704230 65.480 0.8403591 -0.018508431 0.84150457 0.7854330 0.1548750
Singapore 2009 6.144677 11.148082 0.8662553 72.120 0.7763819 -0.079494290 0.03519799 0.4500216 0.2075483
Singapore 2010 6.531402 11.265940 0.8641621 72.300 0.8461846 -0.022667632 0.06028207 0.5273370 0.1313434
Singapore 2011 6.561042 11.305386 0.9044739 72.480 0.8218163 -0.153288618 0.09892445 0.4036992 0.1436289
Singapore 2012 6.547124 11.330248 0.8561922 72.660 0.8244594 -0.021482788 0.17066125 0.5332762 0.1456582
Singapore 2018 6.374564 11.496155 0.9028407 73.500 0.9160782 -0.071186461 0.09656293 0.7310570 0.1068708
  • terlihat bahwa cukup banyak nilai generosity yang negatif
# menghilangkan nilai negatif dengan pengali -1
balanced2[balanced2$Generosity < 0,8] <- balanced2[balanced2$Generosity < 0,8]*-1

# pemeriksaan kembali
balanced2 %>% filter(Generosity < 0)
Country.Name Year Life.Ladder Log.GDP.Per.Capita Social.Support Healthy.Life.Expectancy.At.Birth Freedom.To.Make.Life.Choices Generosity Perceptions.Of.Corruption Positive.Affect Negative.Affect

Matriks Korelasi (Heatmap)

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

balanced2 %>% select(c(-1,-2)) %>% cor() %>% 
ggcorrplot(type = "lower",lab = TRUE)

insight:

  • terdapat korelasi yang kuat antara Life.ladder(Y) dengan kolom :
    • Log.GDP.Per.Capita
    • Social.Support
    • Healthy.Life.Expetancy.At.Birth
    • Perceptions.Of.Corruption
    • Negative.Affect
  • terjadi korelasi yang lemah antara Life.ladder(Y) dengan kolom :
    • Freedom.To.Make.Life.Choices
    • Generosity
    • Positive.Affect
  • terlihat bahwa terjadi korelasi yang sangat kuat antara variabel Log.GFP.Per.Capita dengan Healthy.Life.Expetancy.At.Birth, hal ini mengindikasikan adanya multikolinieritas. untuk tahapan selanjutnya dalam pemodelan akan dipilih salah satu variabel.

Pemodelan

Cross-Validation

Tahapan cross validation baik 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 paling awal Data Test akan menggunakan data yang paling akhir

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 %in% 2022)

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

lm(Life.Ladder ~ .-Country.Name - Year , ladder_train) %>% vif()
#>               Log.GDP.Per.Capita                   Social.Support 
#>                        13.263518                         2.259576 
#> Healthy.Life.Expectancy.At.Birth     Freedom.To.Make.Life.Choices 
#>                        13.259883                         1.600693 
#>                       Generosity        Perceptions.Of.Corruption 
#>                         1.387535                         4.523294 
#>                  Positive.Affect                  Negative.Affect 
#>                         1.688864                         2.546771

Berdasarkan hasil pengujian VIF diatas didapati nilai VIV > 10 untuk variabel Log.GDP.Per.Capita dan Healthy.Life.Expectancy.At.Birth. Hal ini mengindikasikan terjadi multikolinieritas antara kedua variabel, seperti yang sudah terdeteksi pada matriks korelasi heatmap sebelumnya.

Maka pada tahapan selanjutnya hanya akan digunakan variabel Log.GDP.Per.Capita.

Penentuan Model Estimasi

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 Common Effect Model (CEM)
    • “within” : untuk model Fixed Effect Model (FEM)
    • “random” : untuk model Random Effect Model (REM)

dimana

  • variabel target : Life.Ladder
  • Variabel prediktor :
    • Log.GDP.Per.Capita
    • Social.Support
    • Freedom.To.Make.Life.Choice
    • Generosity
    • Perceptions.Of.Corruption
    • Positive.Affect
    • Negative.Affect

Model Gabungan (CEM)

membuat Common effect model dan disimpan kedalam objek cem

# menyimpan formula regresi data panel
form <- Life.Ladder ~ Log.GDP.Per.Capita +  Social.Support + Freedom.To.Make.Life.Choices + Generosity + Perceptions.Of.Corruption + Positive.Affect + Negative.Affect

# membuat Common effect model 
cem <- plm(form, 
           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(form, 
           data = ladder_train,
           index = c("Country.Name","Year"),
           model = "within",
           effect = "twoways")

Uji Chow

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

Hipotesis yang diuji adalah sebagai berikut:

  • H0 : Common effect model
  • H1 : Fixed effect model

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

pooltest(cem,fem)
#> 
#>  F statistic
#> 
#> data:  form
#> F = 2.0593, df1 = 22, df2 = 82, p-value = 0.01021
#> 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 pada tahapan ini data kita tidak dapat dilakukan pemodelan random effect karena jumlah individu dan informasi waktu yang dirasa masih terlalu sedikit. Oleh karenanya untuk tahapan selanjutnya akan digunakan Fixed effect model.


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%.

fem$residuals %>% shapiro.test()
#> 
#>  Shapiro-Wilk normality test
#> 
#> data:  .
#> W = 0.99046, p-value = 0.6255

Berdasarkan hasil pengujian normalitas sisaan diperoleh nilai p-value > 0.05, artinya sisaan menyebar secara 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%.

fem%>% bptest()
#> 
#>  studentized Breusch-Pagan test
#> 
#> data:  .
#> BP = 6.1764, df = 7, p-value = 0.5193

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%.

fem$residuals %>% Box.test(type = "Ljung-Box")
#> 
#>  Box-Ljung test
#> 
#> data:  .
#> X-squared = 6.3725, df = 1, p-value = 0.01159

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


Prediksi

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

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

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
MAPE(y_pred = pred,
    y_true = ladder_test$Life.Ladder)
#> [1] 0.07088511

Diperoleh nilai MAPE sebesar 0.07088511 artinya model kita dalam memprediksi data baru mengalami kesalahan prediksi sebesar 7.1% atau dapat dikatakan model kita sudah cukup baik dalam memprediksi nilai baru.


Interpretasi Model

summary(fem)
#> Twoways effects Within Model
#> 
#> Call:
#> plm(formula = form, data = ladder_train, effect = "twoways", 
#>     model = "within", index = c("Country.Name", "Year"))
#> 
#> Unbalanced Panel: n = 7, T = 10-17, N = 112
#> 
#> Residuals:
#>        Min.     1st Qu.      Median     3rd Qu.        Max. 
#> -0.60519583 -0.15526199  0.00023964  0.15774187  0.79166992 
#> 
#> Coefficients:
#>                               Estimate Std. Error t-value  Pr(>|t|)    
#> Log.GDP.Per.Capita            0.526008   0.145688  3.6105 0.0005249 ***
#> Social.Support                2.220726   0.789045  2.8144 0.0061157 ** 
#> Freedom.To.Make.Life.Choices -0.810815   0.611464 -1.3260 0.1885139    
#> Generosity                   -0.095195   0.310058 -0.3070 0.7596045    
#> Perceptions.Of.Corruption     0.137415   0.303051  0.4534 0.6514302    
#> Positive.Affect               0.232634   0.569165  0.4087 0.6838047    
#> Negative.Affect              -0.700130   0.642693 -1.0894 0.2791825    
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Total Sum of Squares:    13.302
#> Residual Sum of Squares: 7.1161
#> R-Squared:      0.46504
#> Adj. R-Squared: 0.27585
#> F-statistic: 10.1834 on 7 and 82 DF, p-value: 0.0000000041237

Berdasarkan output diatas dapat kita peroleh informasi sebagai berikut:

  • dari 7 variabel yang diujikan, untuk tingkat kebahagiaan di wilayah asia tenggara hanya terdapat 2 variabel yang signifikan berpengaruh. Yakni Log.GDP.Per.Capita dan Social.Support
  • diperoleh model regresi data panel

Life.Ladder = 0.526008 Log.GDP.Per.Capita + 2.220726 Social.Support - 0.810815 Freedom.To.Make.Life.Choices - 0.095195 Generosity + 0.137415 Perceptions.Of.Corruption + 0.232634 Positive.Affect - 0.700130 Negative.Affect + efek wilayah negara + efek waktu

  • Log.GDP.Per.Capita = 0.526008, artinya untuk setiap kenaikan 1 satuan nilai Log.GDP.Per.Capita akan menambah nilai Life.Ladder sebesar 0.526008 dengan catatan seluruh variabel lainnya bernilai konstan

  • Social.Support= 2.220726 , artinya untuk setiap kenaikan 1 satuan nilai Social.Support akan menambah nilai Life.Ladder sebesar 2.220726 dengan catatan seluruh variabel lainnya bernilai konstan

  • Freedom.To.Make.Life.Choices= -0.810815 , artinya untuk setiap kenaikan 1 satuan nilai Freedom.To.Make.Life akan menurunkan nilai Life.Ladder sebesar 0.810815 dengan catatan seluruh variabel lainnya bernilai konstan

  • Generosity= -0.095195 , artinya untuk setiap kenaikan 1 satuan nilai Generosity akan menurunkan nilai Life.Ladder sebesar 0.095195 dengan catatan seluruh variabel lainnya bernilai konstan

  • Perceptions.Of.Corruption= 0.137415 , artinya untuk setiap kenaikan 1 satuan nilai Perceptions.Of.Corruption akan menurunkan nilai Life.Ladder sebesar 0.137415 dengan catatan seluruh variabel lainnya bernilai konstan

  • Positive.Affect= 0.232634 , artinya untuk setiap kenaikan 1 satuan nilai Positive.Affect akan meningkatkan nilai Life.Ladder sebesar 0.232634 dengan catatan seluruh variabel lainnya bernilai konstan

  • Negative.Affect= -0.700130 , artinya untuk setiap kenaikan 1 satuan nilai Negative.Affect akan menurunkan nilai Life.Ladder sebesar -0.700130 dengan catatan seluruh variabel lainnya bernilai konstan

  • dengan pengaruh efek wilayah untuk setiap negara sebagai berikut:

efwil <- fixef(fem, effect = "individual")
negara <- c("Cambodia","Indonesia","Vietnam","Malaysia","Myanmar","Philippines","Singapore")
efek_wilayah <- as.data.frame(bind_cols(negara,efwil)) %>% rename("Negara" = ...1,"Efek" = ...2)
efek_wilayah
Negara Efek
Cambodia -1.0533526
Indonesia -1.0054871
Vietnam -0.7072265
Malaysia -0.5987181
Myanmar -0.8640107
Philippines -0.9279070
Singapore -1.0031320
  • Cambodia : -1.0533526, artinya nilai Life.Ladder akan menurun sebesar 1.0533526 apabila wilayah adalah negara Cambodia

  • Indonesia : -1.0054871, artinya nilai Life.Ladder akan menurun sebesar 1.0054871 apabila wilayah adalah negara Indonesia

  • Vietnam : -0.7072265, artinya nilai Life.Ladder akan menurun sebesar 0.7072265 apabila wilayah adalah negara Vietnam

  • Malaysia : -0.5987181, artinya nilai Life.Ladder akan menurun sebesar 0.5987181 apabila wilayah adalah negara Vietnam

  • Myanmar : -0.8640107, artinya nilai Life.Ladder akan menurun sebesar 0.8640107 apabila wilayah adalah negara Myanmar

  • Philippines : -0.9279070, artinya nilai Life.Ladder akan menurun sebesar 0.9279070 apabila wilayah adalah negara Philippines

  • Singapore : -1.0031320, artinya nilai Life.Ladder akan menurun sebesar 1.0031320 apabila wilayah adalah negara Singapore

  • dan efek waktu sebagai berikut:

eftim <- fixef(fem,effect = "time")
year <- c(2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022)
efek_waktu <- as.data.frame(bind_cols(year,eftim)) %>% rename("Year" = ...1,"Efek" = ...2)
efek_waktu
Year Efek
2006 -1.0533526
2007 -0.8031746
2008 -0.5231826
2009 -0.8626404
2010 -0.8999219
2011 -0.8136401
2012 -0.9333057
2013 -1.0026437
2014 -1.0275959
2015 -0.8069202
2016 -0.7116527
2017 -0.6596476
2018 -0.7539704
2019 -0.6443689
2020 -0.8768122
2021 -0.8862643
2022 -0.9256983
  • 2006 = -1.4386207, artinya nilai Life.ladder akan menurun sebesar 1.4386207 apabila informasi waktu adalah tahun 2006.
  • 2007 = -1.1915837, artinya nilai Life.ladder akan menurun sebesar 1.1915837 apabila informasi waktu adalah tahun 2007.
  • 2008 = -0.9177062, artinya nilai Life.ladder akan menurun sebesar 0.9177062 apabila informasi waktu adalah tahun 2008.
  • 2009 = -1.2485929, artinya nilai Life.ladder akan menurun sebesar 1.2485929 apabila informasi waktu adalah tahun 2009.
  • 2010 = -1.2768328, artinya nilai Life.ladder akan menurun sebesar 1.2768328 apabila informasi waktu adalah tahun 2010.
  • 2011 = -1.1894746, artinya nilai Life.ladder akan menurun sebesar 1.1894746 apabila informasi waktu adalah tahun 2011.
  • 2012 = -1.3392664, artinya nilai Life.ladder akan menurun sebesar 1.3392664 apabila informasi waktu adalah tahun 2012.
  • 2013 = -1.4048088, artinya nilai Life.ladder akan menurun sebesar 1.4048088 apabila informasi waktu adalah tahun 2013.
  • 2014 = -1.4313918, artinya nilai Life.ladder akan menurun sebesar 1.4313918 apabila informasi waktu adalah tahun 2014.
  • 2015 = -1.2166701, artinya nilai Life.ladder akan menurun sebesar 1.2166701 apabila informasi waktu adalah tahun 2015.

Kesimpulan

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

  • Dapat kita ketahui bahwa dari beberapa negara di asia tenggara, negara dengan tingkat kebahagiaan tertinggi adalah Singapura dan tingkat kebahagiaan terrendah adalah Kamboja.
  • Terdapat multikolinieritas antara variabel Log.GDP.Per.Capita dengan Healthy.Life.Expectancy.At.Birth. yang ditunjukkan oleh nilai korelasi sebesar 0.93 dan nilai vif > 10.
  • Diperoleh model terbaik untuk memprediksi tingkat pengangguran adalah Fixed Effect Model (FEM) dengan dua variabel yang signifikan berpengaruh terhadap Life Ladder score, yakni Log.GDP.Per.Capita dan Social.Support. Dimana Social support memberikan pengaruh positif terbesar diantara lainnya yakni menigkatkan nilai Life ladder sebesar 2.220726.
  • diperoleh nilai Adj. R-Squared sebesar 0.27585 artinya model dapat menjelaskan data tingkat kebahagian dengan baik sebesar 27.59%.
  • diperoleh nilai MAPE sebesar 0.07088511 artinya, model dapat memprediksi pada data test dengan tingkat kesalahan sebesar 7.1%.
  • modelyang dibuat memenuhi asumsi Normalitas dan homogenitas namun tidak memenihi asumsi autokorelasi

Dari beberapa kesimpulan diatas terdapat beberapa saran sebagai berikut:

  • Untuk penanganan nilai missing di setiap negara perlu dicoba dengan metode lain, dengan harapan bisa memperoleh model yang lebih baik lagi
  • pada data ini perlu dieksplorasi lebih lanjut untuk mencoba model random dan jika dimungkinkan bisa dilakukan dengan menambahkan daftar negara kedalam model.