1 Setup Library/Package

#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)

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

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


2.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”

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


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


2.4 Alur Kerja Data Panel

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


3 Studi Kasus : Tingkat Kebahagiaan Beberapa Negara di Eropa Barat tahun (2006 - 2022)

Eropa Barat adalah salah satu wilayah terkaya di dunia. Jerman memiliki produk domestik bruto tertinggi di Eropa dan surplus keuangan terbesar dibandingkan negara mana pun, Luksemburg memiliki PDB per kapita tertinggi di dunia, dan Jerman memiliki kekayaan nasional bersih tertinggi dibandingkan negara Eropa mana pun. Swiss dan Luksemburg mempunyai upah rata-rata tertinggi di dunia, masing-masing dalam nilai nominal dan PPP. Norwegia menempati peringkat tertinggi di dunia dalam Indeks Kemajuan Sosial. Bahasa yang paling umum di Eropa Barat adalah bahasa Inggris. Di tempat kedua dan ketiga masing-masing ada Perancis dan Jerman.

Selain dalam hal ekonomi, wilayah Eropa Barat terkenal dengan berbagai peristiwa sejarah seperti era Revolusi, Pencerahan (Enlightenment), hingga Industrialisasi. Selama dekade transformasi ekonomi dan sosial, Eropa Barat juga mengalami perubahan politik besar-besaran. Peristiwa sentral di sebagian besar benua ini adalah Revolusi Perancis (1789–99) dan setelahnya. Hal ini diikuti oleh upaya terpadu dalam reaksi politik dan serangkaian revolusi baru dari tahun 1820 hingga 1848. Berdasarkan berbagai fakta menarik dari segi ekonomi dan histori, penulis ingin menganalisis karakteristik masyarakat Eropa Barat, khusunya tingkat kebahagiaan beberapa negara di Eropa Barat berdasarkan informasi socio demografi yang tersedia pada World Happiness Report.

3.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 yang tersedia dalam folder data_input dengan nama World_Happiness_Report.csv
  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
western_eu <- df %>% 
  filter(Regional.Indicator == "Western Europe") %>% 
  select(-Regional.Indicator)

head(western_eu)
unique(western_eu$Country.Name) %>% length()
#> [1] 20
unique(western_eu$Country.Name)
#>  [1] "Austria"        "Belgium"        "Cyprus"         "Denmark"       
#>  [5] "Finland"        "France"         "Germany"        "Greece"        
#>  [9] "Iceland"        "Ireland"        "Italy"          "Luxembourg"    
#> [13] "Malta"          "Netherlands"    "Norway"         "Portugal"      
#> [17] "Spain"          "Sweden"         "Switzerland"    "United Kingdom"

3.2 Pemeriksaan Balancing Data

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

1. Melihat frekuensi data berdasarkan index individu

# Your Code Here
table(western_eu$Country.Name)
#> 
#>        Austria        Belgium         Cyprus        Denmark        Finland 
#>             15             16             15             17             15 
#>         France        Germany         Greece        Iceland        Ireland 
#>             17             17             16             10             16 
#>          Italy     Luxembourg          Malta    Netherlands         Norway 
#>             17             12             14             16             12 
#>       Portugal          Spain         Sweden    Switzerland United Kingdom 
#>             15             17             17             12             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(western_eu,index = c("Country.Name","Year"))
#> [1] FALSE

Dari hasil pemeriksaan frekuensi dan balancing data diatas terlihat bahwa:

  • Data yang dimiliki belum seimbang
  • Negara yang memiliki informasi waktu lengkap adalah negara Austria, Portugal, Belgium, Luxembourg, Cyprus, Greece, Malta, Iceland, Netherlands, Switzerland, Finland, Ireland, Norway
  • Berhubung data yang dimiliki cukup banyak terdiri dari 20 negara, maka penulis akan mengeliminasi negara yang memiliki informasi waktu tidak lengkap (kurang dari 20% dari data artinya negara yang memiliki data missing tidak lebih dari 3 tahun atau minimal 14 waktu).
  • Oleh karena itu, negara Luxembourg, Iceland, Switzerland, Norway akan dieliminasi karena memiliki informasi waktu kurang dari 14.
negara_cut = c("Luxembourg", "Iceland", "Switzerland", "Norway")
western_eu <- western_eu[!(western_eu$Country.Name %in% negara_cut),]
  
western_eu$Country.Name %>% unique() %>% length()
#> [1] 16

3.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
western_eu <- western_eu %>% pdata.frame(index = c("Country.Name","Year"))

#memeriksa struktur data
glimpse(western_eu)
#> Rows: 257
#> Columns: 12
#> $ Country.Name                      <fct> Austria, Austria, Austria, Austria, …
#> $ Year                              <fct> 2006, 2008, 2010, 2011, 2012, 2013, …
#> $ Life.Ladder                       <pseries> 7.122211, 7.180954, 7.302679, 7.…
#> $ Log.GDP.Per.Capita                <pseries> 10.83645, 10.88118, 10.85598, 10…
#> $ Social.Support                    <pseries> 0.9363504, 0.9345928, 0.9141933,…
#> $ Healthy.Life.Expectancy.At.Birth  <pseries> 69.500, 69.700, 69.900, 70.000, …
#> $ Freedom.To.Make.Life.Choices      <pseries> 0.9413823, 0.8790693, 0.8959798,…
#> $ Generosity                        <pseries> 0.298436075, 0.287321180, 0.1269…
#> $ Perceptions.Of.Corruption         <pseries> 0.4901112, 0.6136252, 0.5461448,…
#> $ Positive.Affect                   <pseries> 0.7461531, 0.7162965, 0.7103019,…
#> $ Negative.Affect                   <pseries> 0.1738117, 0.1731945, 0.1557925,…
#> $ Confidence.In.National.Government <pseries> 0.4970378, 0.2572422, 0.4864466,…

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(western_eu)
#> Unbalanced Panel: n = 16, T = 14-17, N = 257

dari pemeriksaan dimensi data panel diatas dapat kita ketahui bahwa:

  • data masih belum seimbang
  • jumlah individu negara ada sebanyak 19 negara
  • jumlah index waktu ada minimal 12 dan maksimal 17
  • jumlah data keseluruhan ada sebanyak 293 observasi.

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

Balancing menggunakan fill

  1. Menggunakan fill
# Your Code Here
balance1 <- western_eu %>% make.pbalanced(balance.type = "fill")

table(balance1$Country.Name)
#> 
#>        Austria        Belgium         Cyprus        Denmark        Finland 
#>             18             18             18             18             18 
#>         France        Germany         Greece        Ireland          Italy 
#>             18             18             18             18             18 
#>          Malta    Netherlands       Portugal          Spain         Sweden 
#>             18             18             18             18             18 
#> United Kingdom 
#>             18
unique(balance1$Year)
#>  [1] 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019
#> [16] 2020 2021 2022
#> 18 Levels: 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 ... 2022
  1. Periksa kembali keseimbangan data
is.pbalanced(balance1)
#> [1] TRUE
  1. Pengecekan kembali dimensi data
pdim(balance1)
#> Balanced Panel: n = 16, T = 18, N = 288
balance1

Sekarang data yang kosong sudah di isi dengan NA agar nanti dapat dikenali dan di isi.


3.3 Pemeriksaan Missing Value

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

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

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

  1. Tahap selanjutnya adalah memeriksa kelengkapan data hasil balancing
colSums(is.na(balance1))
#>                      Country.Name                              Year 
#>                                 0                                 0 
#>                       Life.Ladder                Log.GDP.Per.Capita 
#>                                31                                33 
#>                    Social.Support  Healthy.Life.Expectancy.At.Birth 
#>                                31                                31 
#>      Freedom.To.Make.Life.Choices                        Generosity 
#>                                31                                44 
#>         Perceptions.Of.Corruption                   Positive.Affect 
#>                                37                                31 
#>                   Negative.Affect Confidence.In.National.Government 
#>                                31                                48
  1. Keputusan Pemotongan Data Berdasarkan pertimbangan penulis data yang memiliki missing lebih dari 40 baris data dari 288 baris akan dihapus karena terlalu banyak baris yang hilang.Dalam hal ini data Confidence.In.National.Government dan Generosity tidak akan disertakan dalam pembuatan model ini.
# drop kolom yang tidak digunakan
balance1 <- balance1 %>% select(-Confidence.In.National.Government, -Generosity)

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

1. Austria

# periksa nilai missing per negara
aus <- balance1 %>% filter(Country.Name == "Austria")

colSums(is.na(aus))
#>                     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        Perceptions.Of.Corruption 
#>                                3                                3 
#>                  Positive.Affect                  Negative.Affect 
#>                                3                                3

insight: Terdapat beberapa kolom yang memiliki nilai missing seperti Life.Ladder hingga Negative.Affect sehingga perlu diisi dengan nilai yang hilang dengan nilai rata-rata dari nilai yang dekat dengan nilai missing menggunakan fungsi na.fill() dengan fill = "extend"

# mengisi nilai missing 
aus <- aus %>% 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"),
  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(aus)
#> [1] FALSE

2. Belgium

# periksa nilai missing per negara
bel <- balance1 %>% filter(Country.Name == "Belgium")

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

insight: Terdapat kolom yang memiliki missing value sehingga perlu diisi.

# mengisi nilai missing 
bel <- bel %>% 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"),
  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(bel)
#> [1] FALSE

3. Cyprus

# periksa nilai missing per negara
cy <- balance1 %>% filter(Country.Name == "Cyprus")
colSums(is.na(cy))
#>                     Country.Name                             Year 
#>                                0                                0 
#>                      Life.Ladder               Log.GDP.Per.Capita 
#>                                3                                4 
#>                   Social.Support Healthy.Life.Expectancy.At.Birth 
#>                                3                                3 
#>     Freedom.To.Make.Life.Choices        Perceptions.Of.Corruption 
#>                                3                                3 
#>                  Positive.Affect                  Negative.Affect 
#>                                3                                3

insight: Terdapat kolom yang memiliki missing value sehingga perlu diisi.

# mengisi nilai missing 
cy <- cy %>% 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"),
  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(cy)
#> [1] FALSE

4. Denmark

# periksa nilai missing per negara
den <- balance1 %>% filter(Country.Name == "Denmark")
colSums(is.na(den))
#>                     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        Perceptions.Of.Corruption 
#>                                1                                1 
#>                  Positive.Affect                  Negative.Affect 
#>                                1                                1

insight : Terdapat kolom yang memiliki missing value sehingga perlu diisi.

# mengisi nilai missing 
den <- den %>% 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"),
  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(den)
#> [1] FALSE

5. Finland

# periksa nilai missing per negara
fin <- balance1 %>% filter(Country.Name == "Finland")
colSums(is.na(fin))
#>                     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        Perceptions.Of.Corruption 
#>                                3                                3 
#>                  Positive.Affect                  Negative.Affect 
#>                                3                                3
# mengisi nilai missing 
fin <- fin %>% 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"),
  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(fin)
#> [1] FALSE

6. France

# periksa nilai missing per negara
fra <- balance1 %>% filter(Country.Name == "France")
colSums(is.na(fra))
#>                     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        Perceptions.Of.Corruption 
#>                                1                                1 
#>                  Positive.Affect                  Negative.Affect 
#>                                1                                1
#mengisi nilai missing
fra <- fra %>% 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"),
  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(fra)
#> [1] FALSE

7. Germany

# periksa nilai missing per negara
ger <- balance1 %>% filter(Country.Name == "Germany")
colSums(is.na(ger))
#>                     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        Perceptions.Of.Corruption 
#>                                1                                1 
#>                  Positive.Affect                  Negative.Affect 
#>                                1                                1
#mengisi nilai missing
ger <- ger %>% 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"),
  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(ger)
#> [1] FALSE

8. Greece

# periksa nilai missing per negara
gre <- balance1 %>% filter(Country.Name == "Greece")
colSums(is.na(gre))
#>                     Country.Name                             Year 
#>                                0                                0 
#>                      Life.Ladder               Log.GDP.Per.Capita 
#>                                2                                2 
#>                   Social.Support Healthy.Life.Expectancy.At.Birth 
#>                                2                                2 
#>     Freedom.To.Make.Life.Choices        Perceptions.Of.Corruption 
#>                                2                                2 
#>                  Positive.Affect                  Negative.Affect 
#>                                2                                2
#mengisi nilai missing
gre <- gre %>% 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"),
  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(gre)
#> [1] FALSE

9. Ireland

# periksa nilai missing per negara
ire <- balance1 %>% filter(Country.Name == "Ireland")
colSums(is.na(ire))
#>                     Country.Name                             Year 
#>                                0                                0 
#>                      Life.Ladder               Log.GDP.Per.Capita 
#>                                2                                2 
#>                   Social.Support Healthy.Life.Expectancy.At.Birth 
#>                                2                                2 
#>     Freedom.To.Make.Life.Choices        Perceptions.Of.Corruption 
#>                                2                                2 
#>                  Positive.Affect                  Negative.Affect 
#>                                2                                2
#mengisi nilai missing
ire <- ire %>% 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"),
  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(ire)
#> [1] FALSE

10. Italy

# periksa nilai missing per negara
ita <- balance1 %>% filter(Country.Name == "Italy")
colSums(is.na(ita))
#>                     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        Perceptions.Of.Corruption 
#>                                1                                1 
#>                  Positive.Affect                  Negative.Affect 
#>                                1                                1
#mengisi nilai missing
ita <- ita %>% 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"),
  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(ita)
#> [1] FALSE

11. Malta

# periksa nilai missing per negara
mal <- balance1 %>% filter(Country.Name == "Malta")
colSums(is.na(mal))
#>                     Country.Name                             Year 
#>                                0                                0 
#>                      Life.Ladder               Log.GDP.Per.Capita 
#>                                4                                5 
#>                   Social.Support Healthy.Life.Expectancy.At.Birth 
#>                                4                                4 
#>     Freedom.To.Make.Life.Choices        Perceptions.Of.Corruption 
#>                                4                                9 
#>                  Positive.Affect                  Negative.Affect 
#>                                4                                4
#mengisi nilai missing
mal <- mal %>% 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"),
  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(mal)
#> [1] FALSE

12. Netherlands

# periksa nilai missing per negara
net <- balance1 %>% filter(Country.Name == "Netherlands")
colSums(is.na(net))
#>                     Country.Name                             Year 
#>                                0                                0 
#>                      Life.Ladder               Log.GDP.Per.Capita 
#>                                2                                2 
#>                   Social.Support Healthy.Life.Expectancy.At.Birth 
#>                                2                                2 
#>     Freedom.To.Make.Life.Choices        Perceptions.Of.Corruption 
#>                                2                                2 
#>                  Positive.Affect                  Negative.Affect 
#>                                2                                2
#mengisi nilai missing
net <- net %>% 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"),
  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(net)
#> [1] FALSE

13. Portugal

# periksa nilai missing per negara
por <- balance1 %>% filter(Country.Name == "Portugal")
colSums(is.na(por))
#>                     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        Perceptions.Of.Corruption 
#>                                3                                3 
#>                  Positive.Affect                  Negative.Affect 
#>                                3                                3
#mengisi nilai missing
por <- por %>% 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"),
  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(por)
#> [1] FALSE

14. Spain

# periksa nilai missing per negara
spa <- balance1 %>% filter(Country.Name == "Spain")
colSums(is.na(spa))
#>                     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        Perceptions.Of.Corruption 
#>                                1                                1 
#>                  Positive.Affect                  Negative.Affect 
#>                                1                                1
#mengisi nilai missing
spa <- spa %>% 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"),
  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(spa)
#> [1] FALSE

15. Sweden

# periksa nilai missing per negara
swe <- balance1 %>% filter(Country.Name == "Sweden")
colSums(is.na(swe))
#>                     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        Perceptions.Of.Corruption 
#>                                1                                2 
#>                  Positive.Affect                  Negative.Affect 
#>                                1                                1
#mengisi nilai missing
swe <- swe %>% 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"),
  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(swe)
#> [1] FALSE

16. United Kingdom

# periksa nilai missing per negara
uk <- balance1 %>% filter(Country.Name == "United Kingdom")
colSums(is.na(uk))
#>                     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        Perceptions.Of.Corruption 
#>                                1                                1 
#>                  Positive.Affect                  Negative.Affect 
#>                                1                                1
#mengisi nilai missing
uk <- uk %>% 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"),
  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(uk)
#> [1] FALSE

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(
  aus, bel, cy, den, fin, fra,
  gre, ger, ire, ita, mal, 
  net,  por,  spa, swe, uk
) 

Pemeriksaan Kembali keseimbangan data

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

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 Healthy.Life.Expectancy.At.Birth 
#>                                0                                0 
#>     Freedom.To.Make.Life.Choices        Perceptions.Of.Corruption 
#>                                0                                0 
#>                  Positive.Affect                  Negative.Affect 
#>                                0                                0

Data telah siap untuk digunakan pada tahapan selanjutnya

3.4 Exploratory Data Analysis

3.4.1 Ringkasan Data

summary(balanced2)
#>   Country.Name      Year      Life.Ladder    Log.GDP.Per.Capita
#>  Austria: 18   2005   : 16   Min.   :4.720   Min.   :10.21     
#>  Belgium: 18   2006   : 16   1st Qu.:6.332   1st Qu.:10.58     
#>  Cyprus : 18   2007   : 16   Median :6.870   Median :10.73     
#>  Denmark: 18   2008   : 16   Mean   :6.772   Mean   :10.71     
#>  Finland: 18   2009   : 16   3rd Qu.:7.312   3rd Qu.:10.86     
#>  France : 18   2010   : 16   Max.   :8.019   Max.   :11.62     
#>  (Other):180   (Other):192                                     
#>  Social.Support   Healthy.Life.Expectancy.At.Birth Freedom.To.Make.Life.Choices
#>  Min.   :0.6866   Min.   :68.30                    Min.   :0.3692              
#>  1st Qu.:0.8957   1st Qu.:70.02                    1st Qu.:0.7888              
#>  Median :0.9281   Median :70.77                    Median :0.8700              
#>  Mean   :0.9139   Mean   :70.65                    Mean   :0.8325              
#>  3rd Qu.:0.9448   3rd Qu.:71.28                    3rd Qu.:0.9161              
#>  Max.   :0.9825   Max.   :73.00                    Max.   :0.9711              
#>                                                                                
#>  Perceptions.Of.Corruption Positive.Affect  Negative.Affect 
#>  Min.   :0.1324            Min.   :0.5159   Min.   :0.1344  
#>  1st Qu.:0.4111            1st Qu.:0.6568   1st Qu.:0.2011  
#>  Median :0.5964            Median :0.7050   Median :0.2380  
#>  Mean   :0.5883            Mean   :0.6978   Mean   :0.2512  
#>  3rd Qu.:0.8051            3rd Qu.:0.7428   3rd Qu.:0.2984  
#>  Max.   :0.9620            Max.   :0.8256   Max.   :0.4822  
#> 

Berdasarkan ringkasan diatas dapat kita ketahui beberapa hal berikut:

  • Tingkat kebahagiaan tertinggi di beberapa negara di eropa barat adalah 8.019
  • Tingkat kebahagiaan terrendah di beberapa negara di eropa bara adalah 4.720

3.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 terhadap Life.Ladder adalah: 1. Perception.Of.Corruption (-0.84) -> Sangat Kuat. 2. Negative Affect (-0.78) -> Kuat. 3. Positive.Affect (0.75) -> Kuat. 4. Log.GDP.Per.Capita (0.75) -> Kuat. 5. Freedom.To.Make.Life.Choices (0.73) -> Kuat. 6. Social.Support (0.68) -> Kuat. 7. Healthy.Life.Expectancy.At.Birth (-0.11) -> Sangat Lemah.

  • Semua variabel kecuali Healthy.Life.Expectancy.At.Birt memiliki korelasi satu sama lain yang relatif sedang hingga kuat.

3.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 Coplot plot diatas dapat kita ketahui bahwa : - Secara keseluruhan warga negara yang merasa paling bahagia di beberapa negara Eropa Barat adalah warga negara Denmark dan Finland. - Secara keseluruhan warga negara yang memiliki tingkat kebahagiaan terendah di beberapa negara Eropa Barat adalah warga negara Greece dan Portugal.

2. Perceptions.Of.Corruption

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

Berdasarkan Coplot plot diatas dapat kita ketahui bahwa : - Secara keseluruhan tingkat persepsi korupsi terendah di beberapa negara Eropa Barat adalah negara Denmark, Finland, dan Swedan. - Secara keseluruhan tingkat persepsi korupsi tinggi di beberapa negara Eropa Barat adalah negara Portugal, Greece, dan Cyprus.

3. Negative.Affect

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

Berdasarkan Coplot plot diatas dapat kita ketahui bahwa : - Secara keseluruhan masyarakat yang beberapa hari sebelum survei memiliki rasa negatif tinggi di beberapa negara Eropa Barat adalah Italy, Greece, Cyprus, Portugal, dan Spain. - Secara keseluruhan masyarakat yang beberapa hari sebelum survei memiliki rasa negatif rendah di beberapa negara Eropa Barat adalah Finland, Swedan, UK dan Netherlands.

4. Positive.Affect

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

Berdasarkan Coplot plot diatas dapat kita ketahui bahwa : - Secara keseluruhan masyarakat yang beberapa hari sebelum survei memiliki rasa positif tinggi di beberapa negara Eropa Barat adalah Denmark, Ireland, dan Swedan.
- Secara keseluruhan masyarakat yang beberapa hari sebelum survei memiliki rasa positif rendah di beberapa negara Eropa Barat adalah Greece, Itali, dan Malta.

5. Freedom.To.Make.Life.Choices

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

Berdasarkan Coplot plot diatas dapat kita ketahui bahwa : - Secara keseluruhan masyarakat yang memiliki kebebasan dalam membuat pilihan tertinggi di beberapa negara Eropa Barat adalah Denmark, Finland, . - Secara keseluruhan masyarakat yang memiliki kebebasan dalam membuat pilihan terendah di beberapa negara Eropa Barat adalah Greece.

6. 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 :

  • Secara keseluruhan warga negara yang memiliki GDP Per Capita tertinggi di beberapa negara Eropa Barat adalah warga negara Ireland.
  • Secara keseluruhan warga negara yang memiliki GDP Per Capita terkecil di beberapa negara Eropa Barat adalah warga negara Portugal dan Greece.

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

  • Secara keseluruhan warga negara yang memiliki Social Support tertinggi di beberapa negara Eropa Barat adalah warga negara Ireland.
  • Secara keseluruhan warga negara yang memiliki Social Support terendah di beberapa negara Eropa Barat adalah warga negara Greece.

3.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 : 1. Berdasarkan hasil visual diatas terdapat beberapa negara yang memiliki keragaman tingkat kebahagiaan yang rendah (stabil) yang terlihat dari gap yang kecil : - Austria - Belgium - Denmark - Finland - France - Ireland - Netherlands - Sweden - United Kingdom

  1. Berdasarkan hasil visual diatas terdapat beberapa negara yang memiliki keragaman tingkat kebahagiaan yang tinggi (fluktuatif), yang terlihat dari gap yang besar :
    • Cyprus
    • Germany
    • Greece
    • Italy
    • Malta
    • Portugal
    • Spain

2. Heterogenitas antar Waktu

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

Insight : - Berdasarkan hasil visual diatas terlihat bahwa data antar tahun cukup heterogen - Secara keseluruhan trend perkembangan tingkat kebahagiaan di Eropa Barat relatif menurun.

3.5 Pemodelan

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

3.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.664008                         2.056762 
#> Healthy.Life.Expectancy.At.Birth     Freedom.To.Make.Life.Choices 
#>                         1.227298                         2.827466 
#>        Perceptions.Of.Corruption                  Positive.Affect 
#>                         3.418823                         3.250428 
#>                  Negative.Affect 
#>                         2.791441

Insight: Semua variabel kita tidak memiliki Multikolinieritas sehingga bisa dilanjutkan ke tahap berikutnya.


3.5.3 Penentuan Model Estimasi

3.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 :
    1. Perception.Of.Corruption (-0.84) -> Sangat Kuat.
    2. Negative Affect (-0.78) -> Kuat.
    3. Positive.Affect (0.75) -> Kuat.
    4. Log.GDP.Per.Capita (0.75) -> Kuat.
    5. Freedom.To.Make.Life.Choices (0.73) -> Kuat.
    6. Social.Support (0.68) -> Kuat.

Model Gabungan (CEM)

membuat Common effect model dan disimpan kedalam objek cem

# membuat Common effect model 
cem <- plm(Life.Ladder ~ Perceptions.Of.Corruption + Negative.Affect + Positive.Affect + Log.GDP.Per.Capita + Freedom.To.Make.Life.Choices + Social.Support, 
           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 ~ Perceptions.Of.Corruption + Negative.Affect + Positive.Affect + Log.GDP.Per.Capita + Freedom.To.Make.Life.Choices + Social.Support, 
           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 ~ Perceptions.Of.Corruption + Negative.Affect + Positive.Affect +  ...
#> F = 18.477, df1 = 15, df2 = 250, p-value < 0.00000000000000022
#> 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 
rem <- plm(Life.Ladder ~ Perceptions.Of.Corruption + Negative.Affect + Positive.Affect + Log.GDP.Per.Capita + Freedom.To.Make.Life.Choices + Social.Support, 
           data = ladder_train,
           index = c("Country.Name","Year"),
           model = "random")
# Error model random effect karena jumlah variabel prediktor dan target > jumlah index individu

# plm(Life.Ladder ~ Log.GDP.Per.Capita + Social.Support + Perceptions.Of.Corruption + Negative.Affect + Positive.Affect + Generosity, 
#            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 < α.

# your code here
phtest(rem,fem)
#> 
#>  Hausman Test
#> 
#> data:  Life.Ladder ~ Perceptions.Of.Corruption + Negative.Affect + Positive.Affect +  ...
#> chisq = 6.2429, df = 6, p-value = 0.3965
#> alternative hypothesis: one model is inconsistent

Berdasarkan hasil uji hausman diatas, kita peroleh nilai p-value > α. artinya Model terbaik untuk digunakan pada data World Happines adalah Random Effect Model sehingga diperlukan uji tambahan untuk memastikan REM terbaik untuk data kita, yakni Uji Lagrange Multiplier (LM).

Uji Lagrange Multiplier (LM)

Untuk melakukan uji Lagrange Multiplier (LM) di R dapat menggunakan fungsi plmtest(model_rem, type=c("bp")), dengan Hipotesis yang diuji adalah sebagai berikut. - H0 : Common Effect Model (CEM) lebih baik dibandingkan Random Effect Model (REM) - H1 : Random Effect Model (REM) lebih baik dibandingkan Common Effect Model (CEM)

Jika nilai p-value < tingkat signifikansi (0.05), maka tolak hipotesis nol (H0).

# Melakukan Uji Lagrange Multiplier
test <- plmtest(rem, type=c("bp"))

# Menampilkan hasil uji
print(test)
#> 
#>  Lagrange Multiplier Test - (Breusch-Pagan)
#> 
#> data:  Life.Ladder ~ Perceptions.Of.Corruption + Negative.Affect + Positive.Affect +  ...
#> chisq = 409.39, df = 1, p-value < 0.00000000000000022
#> alternative hypothesis: significant effects

Berdasarkan uji di Lagrange Multiplier (LM) diperoleh nilai p-value < tingkat signifikansi maka kita tolak H0 sehingga model Random Effect Model (REM) terbukti lebih baik dibandingkan Common Effect Model (CEM).

3.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
rem$residuals %>% shapiro.test()
#> 
#>  Shapiro-Wilk normality test
#> 
#> data:  .
#> W = 0.99461, p-value = 0.4527

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

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

Berdasarkan hasil pengujian homogenitas diperoleh nilai p-value < 0.05, artinya sisaan tidak 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
rem$residuals %>% Box.test(type = "Ljung-Box")
#> 
#>  Box-Ljung test
#> 
#> data:  .
#> X-squared = 67.054, df = 1, p-value = 0.000000000000000222

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


3.5.4 Interpretasi Model

Intercept dan Koefisien - Random Effect Model (REM)

# your code here
summary(rem)
#> Oneway (individual) effect Random Effect Model 
#>    (Swamy-Arora's transformation)
#> 
#> Call:
#> plm(formula = Life.Ladder ~ Perceptions.Of.Corruption + Negative.Affect + 
#>     Positive.Affect + Log.GDP.Per.Capita + Freedom.To.Make.Life.Choices + 
#>     Social.Support, data = ladder_train, model = "random", index = c("Country.Name", 
#>     "Year"))
#> 
#> Balanced Panel: n = 16, T = 17, N = 272
#> 
#> Effects:
#>                   var std.dev share
#> idiosyncratic 0.03921 0.19801 0.434
#> individual    0.05123 0.22635 0.566
#> theta: 0.7925
#> 
#> Residuals:
#>     Min.  1st Qu.   Median  3rd Qu.     Max. 
#> -0.53678 -0.12188 -0.01623  0.13498  0.67366 
#> 
#> Coefficients:
#>                              Estimate Std. Error z-value         Pr(>|z|)    
#> (Intercept)                  -2.58557    1.90129 -1.3599         0.173861    
#> Perceptions.Of.Corruption    -0.45713    0.17269 -2.6471         0.008118 ** 
#> Negative.Affect              -2.88707    0.40961 -7.0484 0.00000000000181 ***
#> Positive.Affect               0.40741    0.44564  0.9142         0.360596    
#> Log.GDP.Per.Capita            0.69428    0.15762  4.4048 0.00001058894691 ***
#> Freedom.To.Make.Life.Choices  1.52263    0.26759  5.6903 0.00000001268484 ***
#> Social.Support                1.50455    0.54866  2.7422         0.006103 ** 
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Total Sum of Squares:    24.3
#> Residual Sum of Squares: 10.395
#> R-Squared:      0.57221
#> Adj. R-Squared: 0.56253
#> Chisq: 354.468 on 6 DF, p-value: < 0.000000000000000222

Interpretasi:

\[life.ladder = -2.58557 - 0.45713 Perceptions.Of.Corruption - 2.88707Negative.Affect + 0.40741Positive.Affect + \\ 0.69428Log.GDP.Per.Capita + 1.52263Freedom.To.Make.Life.Choices + 1.50455Social.Support + uit\]

  • Variabel yang signifikan mempengaruhi tingkat kebahagiaan masyarakat di suatu negara adalah :

    • Negative.Affect (*3)
    • Log.GDP.Per.Capita (*3)
    • Freedom.To.Make.Life.Choices (*3)
    • Social.Support (*2)
    • Perceptions.Of.Corruption (*2)
  • Berdasarkan 5 variabel yang signifikan, Negative.Affect memberikan pengaruh terbesar dibandingkan dengan keempat variabel signifikan lainnya (dilihat dari angka estimate). Setiap pertambahan 1 rata-rata dari ukuran efek negatif hari sebelumnya akan mengurangi tingkat kebahagiaan sebesar 2.88707. Artinya masyarakat negara di Eropa Barat, pengalaman atau perasaan buruk di hari sebelumnya akan sangat mempengaruhi tingkat kebahagiaan mereka. Mereka relatif menyimpan pengalaman buruk sehingga sangat mempengaruhi tingkat kebahagiaan mereka.

  • Berdasarkan 5 variabel yang signifikan, Freedom.To.Make.Life.Choices memberikan pengaruh terbesar kedua. Setiap pertambahan 1 tingkat Freedom.To.Make.Life.Choices akan menambah tingkat kebahagiaan sebesar 1.52263. Artinya kebebasan merupakan suatu acuan yang penting dalam budaya dan kehidupan masyarakat negara-negara Eropa Barat karena memiliki pengaruh yang besar dan signifikan terhadap tingkat kebahagiaan.

  • Berdasarkan 5 variabel yang signifikan, Social.Support memberikan pengaruh terbesar ketiga. Setiap pertambahan 1 tingkat Social.Support akan menambah tingkat kebahagiaan sebesar 1.50455. Artinya adanya dukungan sosial berupa teman dalam kondisi sulit merupakan hal krusial dalam mempengaruhi tingkat kebahagiaan masyarakat di Eropa Barat.

  • Berdasarkan 5 variabel yang signifikan, Log.GDP.Per.Capita memberikan pengaruh terbesar keempat. Setiap pertambahan 1 rata-rata dari Log.GDP.Per.Capita akan menambah tingkat kebahagiaan sebesar 0.69428. Artinya masyarakat negara di Eropa Barat memiliki karakteristik bahwa peningkatan GDP Perkapita dapat meningkatkan kesejahteraan atau tingkat kebahagiaan.

  • Berdasarkan 5 variabel yang signifikan, Perceptions.Of.Corruption memberikan pengaruh terbesar kelima. Setiap pertambahan 1 tingkat Perceptions.Of.Corruption akan mengurangi tingkat kebahagiaan sebesar 0.45713. Artinya tingkat persepsi korupsi penting di negara-negara Eropa Barat, namun secara pengaruh relatif lebih kecil dibandingkan variabel lainnya terhadap tingkat kebahagiaan. Hal ini disebabkan mayoritas negara Eropa Barat memiliki tingkat persepsi korupsi yang sudah rendah sehingga indikator ini merupakan hal umum dan keharusan bukan menjadi menentu kuat dalam menentukan tingkat kebahagiaan masyarakat.


3.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(rem, 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.03133279

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


4 Kesimpulan & Saran

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

  1. Secara keseluruhan warga negara yang merasa paling bahagia tertinggi di beberapa negara Eropa Barat adalah warga negara Denmark dan Finland. Hal ini disebabkan :
    • Negara Denmark memiliki beberapa indikator yang relatif sangat baik (Perceptions.Of.Corruption, Freedom.To.Make.Life.Choices, Positive.Affect)
    • Negara Finland memiliki beberapa indikator yang relatif sangat baik (Perceptions.Of.Corruption, Negative.Affect, Freedom.To.Make.Life.Choices, Positive.Affect)
  2. Secara keseluruhan warga negara yang merasa tingkat kebahagiaan terendah di beberapa negara Eropa Barat adalah warga negara Greece dan Portugal.
    • Negara Greece memiliki semua indikator yang relatif sangat buruk.
    • Negara Portugal memiliki beberapa indikor yang relatif sangat buruk (Perceptions.Of.Corruption, Negative.Affect, dan Log.GDP.Per.Capita).
  3. Variabel yang signifikan mempengaruhi tingkat kebahagiaan masyarakat Eropa Barat :
    • Negative.Affect (*3)
    • Log.GDP.Per.Capita (*3)
    • Freedom.To.Make.Life.Choices (*3)
    • Social.Support (*2)
    • Perceptions.Of.Corruption (*2)
  4. Variabel yang memberikan pengaruh yang lebih besar terhadap tingkat kebahagaiaan masyarakat Eropa Barat :
    • Negative.Affect (-2.88707)
    • Freedom.To.Make.Life.Choices (1.52263)
    • Social.Support (1.50455)
    • Log.GDP.Per.Capita (0.69428)
    • Perceptions.Of.Corruption (-0.45713)
  5. Catatan Model ini adalah tidak memenuhi asumsi Homogenitas dan Autokorelasi.

Saran:

  1. Sebaiknya pemerintah dan masyarakat di Negara-Negara Eropa Barat fokus mengurangi Negative.Affect dengan membudayakan masyarakat yang dapat menerima hal-hal seperti kekhawatiran, kesedihan, dan kemarahan melalui penguatan agama, manajemen emosi dan sebagainya.
  2. Pemerintah juga perlu mempertahankan budaya kebebasan dalam berpikir, berpendapat selama tidak merugikan pihak lain karena ini meningkatkan kebahagiaan masyarakat.
  3. Pemerintah dan masyarakat perlu mengurangin budaya individualistik, dan mendorong budaya kolaborasi, kerja sama dan penguatan relasi antar masyarakat agar dapat meningkatkan angka Social.Support sehingga berdampak pada peningkatan kebahagiaan masyarakat.
  4. Pemerintah juga harus mendorong pembuatan kebijakan yang meningkatkan GDP Per Capita masyarakat melalui peningkatan nilai ekonomi dan disatu sisi menjaga pertumbuhan penduduk. Selain itu, pemerintah juga harus mengupayakan budaya kerja transparan dan akuntabel agar meningkatkan kredibilitas masyarakat terhadap pemerintah sehingga dapat mengurangi angka persepsi korupsi.
  5. Lebih dari itu, pemerintah dan masyarakat mesti mengupayakan peningkatan kualitas masyarakat sehingga dapat meningkatkan produktivitas, dan ujungnya peningkatan GDP Perkapita.