1 . Pendahuluan

Project ini dilakukan untuk tugas Learning By Building sebagai pendalaman dan pembelajaran mandiri atas materi Regresi Data Panel pada Data sosio demografis. Data socio demografis adalah data yang menggambarkan karakteristik sosial dan demografis dari suatu populasi. Dataset yang digunakan adalah The World Happiness Report 2023 yang dapat diakses di Kaggle (https://www.kaggle.com/datasets/usamabuttar/world-happiness-report-2005-present).

The World Happiness Report adalah publikasi dari Sustainable Development Solutions Network, yang dilakukan oleh Gallup World Poll data. Report ini menggambarkan kebutuhan untuk dapat lebih memperhatikan dan melibatkan kebahagiaan dan perasaan sebagai manusia dala proses pembuatan kebijakan oleh pemerintah. Report ini melakukan review terhadap kondisi kebahagiaan dan variasinya di setiap negara.

2 . Import Data

Informasi mengenai variabel Prediktor:

  1. Log GDP per capita is in terms of Purchasing Power Parity (PPP) adjusted to a constant 2017 international dollars, taken from the World Development Indicators (WDI) by the World Bank (version 17, metadata last updated on January 22, 2023).

  2. The time series for Healthy life expectancy at birth is constructed based on data from the World Health Organization (WHO) Global Health Observatory data repository, with data available for 2005, 2010, 2015, 2016, and 2019.

  3. Social support (0-1) is the national average of the binary responses (0=no, 1=yes) to the Gallup World Poll (GWP) question “If you were in trouble, do you have relatives or friends you can count on to help you whenever you need them, or not?”

  4. Freedom to make life choices (0-1) is the national average of binary responses to the GWP question “Are you satisfied or dissatisfied with your freedom to choose what you do with your life?”

  5. Generosity is the residual of regressing the national average of GWP responses to the donation question “Have you donated money to a charity in the past month?” on log GDP per capita.

  6. Perceptions of corruption (0-1) are the average of binary answers to two GWP questions: “Is corruption widespread throughout the government or not?” and “Is corruption widespread within businesses or not?” Where data for government corruption are missing, the perception of business corruption is used as the overall corruption perception measure.

  7. Positive affect is defined as the average of previous-day effects measures for laughter, enjoyment, and interest.

  8. Negative affect is defined as the average of previous-day effects measures for worry, sadness, and anger.

Happy <- 
read.csv("data_input/World_Happiness_Report.csv")
#head(Happy)

2.1 Mengambil data wilayah asia timur dan membuang kolom regional indikator

Dalam proyek ini, data negara yang diambil ada data negara yang berada di area Asia Timur (East Asia)

Happy_EA <- 
Happy %>% 
  filter(Regional.Indicator == "East Asia") %>% 
  select(-Regional.Indicator)

2.2 Pemeriksaan Balancing Data

Untuk memeriksa apakah data yang digunakan apakah sudah balance dapat menggunakan 2 cara, yakni:

1. Melihat frekuensi data berdasarkan index individu

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

2. Menggunakan fungsi is.pbalanced()

is.pbalanced(Happy_EA, index = c("Country.Name", "Year"))
## [1] FALSE

Terlihat dari 2 cara di atas, data yang akan digunakan belum dalam kondisi balance. Selain itu, Hongkong dikeluarkan dari dataset karena kehilangan banyak data dibandingkan data terlengkap (South Korea).

Happy_EA <- 
Happy_EA %>% 
  filter(Country.Name != "Hong Kong S.A.R. of China")

unique(Happy_EA$Country.Name)
## [1] "China"                    "Japan"                   
## [3] "Mongolia"                 "South Korea"             
## [5] "Taiwan Province of China"

2.3 Penyesuaian Struktur Data

1. Membuat Panel Data Frame

#membuat pdata.frame

Happy_EA <-
  Happy_EA %>%
  pdata.frame(index = c("Country.Name", "Year"))

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

2. Mememeriksa Dimensi Data

pdim(Happy_EA)
## Unbalanced Panel: n = 5, T = 15-17, N = 80

2.4 Balancing Data

Happy_EA_balance <- 
  Happy_EA %>% make.pbalanced(balance.type = "fill")

table(Happy_EA_balance$Country.Name)
## 
##                    China                    Japan                 Mongolia 
##                       18                       18                       18 
##              South Korea Taiwan Province of China 
##                       18                       18
unique(Happy_EA_balance$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
#memeriksa kembali keseimbangan data
is.pbalanced(Happy_EA_balance)
## [1] TRUE

2.5 Pemeriksaan Missing Value

Kita perlu mengetahui berapa banyak informasi waktu yang ditambahkan dari tahapan sebelumnya.

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

Dari informasi di atas terlihat bahwa jumlah informasi waktu yang ditambahkan sebanyak 10 buah untuk masing-masing negara. Selanjutnya dilakukan pemeriksaan kelengkapan data hasil balancing.

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

Karena memiliki missing values yang sangat banyak, yakni lebih besar dari 22, maka kolom “Confidence.In.National.Government”, “Perceptions.Of.Corruption” dan “Healthy.Life.Expectancy.At.Birth” tidak akan digunakan.

Happy_EA_balance <- 
  Happy_EA_balance %>% 
  select(c(-"Confidence.In.National.Government", -"Perceptions.Of.Corruption",-"Healthy.Life.Expectancy.At.Birth"))

colSums(is.na(Happy_EA_balance))
##                 Country.Name                         Year 
##                            0                            0 
##                  Life.Ladder           Log.GDP.Per.Capita 
##                           10                           13 
##               Social.Support Freedom.To.Make.Life.Choices 
##                           10                           15 
##                   Generosity              Positive.Affect 
##                           17                           10 
##              Negative.Affect 
##                           10

Selanjutnya akan dilakukan pemeriksaan dan pengisian nilai yang hilang pada masing-masing negara dengan cara interpolasi data secara terpisah untuk setiap negara. Untuk mengisi nilai yang hilang dengan nilai rata-rata dari nilai yang dekat dengan nilai missing menggunakan fungsi na.fill() dengan fill = "extend" dilanjutkan dengan pengecekan missing value (NA) kembali dan diharapkan memberi nilai False yang artinya sudah tidak ada nilai missing.

1.China

#periksa nilai missing
China <- Happy_EA_balance %>%
  filter(Country.Name == "China")

colSums(is.na(China))
##                 Country.Name                         Year 
##                            0                            0 
##                  Life.Ladder           Log.GDP.Per.Capita 
##                            2                            2 
##               Social.Support Freedom.To.Make.Life.Choices 
##                            2                            7 
##                   Generosity              Positive.Affect 
##                            3                            2 
##              Negative.Affect 
##                            2
#mengisi nilai missing 
China <- China %>%
  mutate(
    Life.Ladder = na.fill(Life.Ladder, fill = "extend"),
    Log.GDP.Per.Capita = na.fill(Log.GDP.Per.Capita, fill = "extend"),
    Social.Support = na.fill(Social.Support, fill = "extend"),
    Freedom.To.Make.Life.Choices = na.fill(Freedom.To.Make.Life.Choices, fill = "extend"),
    Generosity = na.fill(Generosity, fill = "extend"),
    Positive.Affect = na.fill(Positive.Affect, fill = "extend"),
    Negative.Affect = na.fill(Negative.Affect, fill = "extend")
    )
  
anyNA(China)
## [1] FALSE

2.Japan

#periksa nilai missing
Japan <- Happy_EA_balance %>%
  filter(Country.Name == "Japan")

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

3.Mongolia

#periksa nilai missing
Mongolia <- Happy_EA_balance %>%
  filter(Country.Name == "Mongolia")

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

4.South Korea

#periksa nilai missing
South_Korea <- Happy_EA_balance %>%
  filter(Country.Name == "South Korea")

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

5.Taiwan

#periksa nilai missing
Taiwan <- Happy_EA_balance %>%
  filter(Country.Name == "Taiwan Province of China")

colSums(is.na(Taiwan))
##                 Country.Name                         Year 
##                            0                            0 
##                  Life.Ladder           Log.GDP.Per.Capita 
##                            3                            6 
##               Social.Support Freedom.To.Make.Life.Choices 
##                            3                            3 
##                   Generosity              Positive.Affect 
##                            6                            3 
##              Negative.Affect 
##                            3
# mengisi nilai missing 
Taiwan <- Taiwan %>%
  mutate(
    Life.Ladder = na.fill(Life.Ladder, fill = "extend"),
    Log.GDP.Per.Capita = na.fill(Log.GDP.Per.Capita, fill = "extend"),
    Social.Support = na.fill(Social.Support, fill = "extend"),
    Freedom.To.Make.Life.Choices = na.fill(Freedom.To.Make.Life.Choices, fill = "extend"),
    Generosity = na.fill(Generosity, fill = "extend"),
    Positive.Affect = na.fill(Positive.Affect, fill = "extend"),
    Negative.Affect = na.fill(Negative.Affect, fill = "extend")
    )
  
anyNA(Taiwan)
## [1] FALSE

Setelah semua negara tidak lagi terdapat nilai missing, selanjutnya data masing-masing negara akan digabungkan kembali dan akan disimpan pada objek baru dengan nama Happy_EA_balance_2

Happy_EA_balance_2 <-
  bind_rows(China, Japan, Mongolia, South_Korea, Taiwan)

pdim(Happy_EA_balance_2)
## Balanced Panel: n = 5, T = 18, N = 90
#memeriksa kembali kelengkapan data
colSums(is.na(Happy_EA_balance_2))
##                 Country.Name                         Year 
##                            0                            0 
##                  Life.Ladder           Log.GDP.Per.Capita 
##                            0                            0 
##               Social.Support Freedom.To.Make.Life.Choices 
##                            0                            0 
##                   Generosity              Positive.Affect 
##                            0                            0 
##              Negative.Affect 
##                            0
unique(Happy_EA_balance$Country.Name)
## [1] China                    Japan                    Mongolia                
## [4] South Korea              Taiwan Province of China
## Levels: China Japan Mongolia South Korea Taiwan Province of China

3 . Exploratory Data Analysis

Dalam proses ini akan dilihat deskripsi singkat untuk masing-masing negara.

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

Dari data beberapa negara asia timur di atas ditemukan informasi:

  • tingkat Kebahagiaan terendah adalah sebesar 4.454 dan nilai tertinggi sebesar 6.947
  • tingkat Log.GDP.Per.Capita terendah adalah sebesar 8.696 dan nilai tertinggi sebesar 10.797
  • tingkat Social.Support terendah adalah sebesar 0.7378 dan nilai tertinggi sebesar 0.9513
  • tingkat Freedom.To.Make.Life.Choices terendah adalah sebesar 0.4841 dan nilai tertinggi sebesar 0.9274
  • tingkat Generosity terendah adalah sebesar -0.26659 dan nilai tertinggi sebesar 0.21715
  • tingkat Positive.Affect terendah adalah sebesar 0.4832 dan nilai tertinggi sebesar 0.7792
  • tingkat Negative.Affect terendah adalah sebesar 0.08274 dan nilai tertinggi sebesar 0.33815

3.1 Hubungan Antar Variabel

Selanjutnya akan dibuat plot untuk mengetahui seberapa besar tingkat hubungan antar variabel prediktor terhadap variabel target

Happy_EA_balance_2 %>%
  select(-Country.Name, -Year) %>%
  cor() %>% ggcorrplot(type = "lower", lab = TRUE)

Dari plot di atas terlihat bahwa variabel yang paling berhubungan dengan kebahagiaan di beberapa negaar asia timur adalah Log.GDP.Per.Capita diikuti oleh Positive.Affect, dimana kedua variabel tersebut memiliki hubungan yang searah terhadap kebahagiaan. Selanjutnya semua variabel tersebut akan didalami lebih lanjut dengan menggunakan grafik coplot.

3.2 Explorasi Socio Demografi

1. Life.ladder

coplot(Life.Ladder ~ Year|Country.Name,
       type = "b",
       data = Happy_EA_balance_2,
       rows = 1,
       col = "blue")

2. Log.GDP.Per.Capita

coplot(Log.GDP.Per.Capita ~ Year|Country.Name,
       type = "b",
       data = Happy_EA_balance_2,
       rows = 1,
       col = "blue")

3. Social.Support

coplot(Social.Support ~ Year|Country.Name,
       type = "b",
       data = Happy_EA_balance_2,
       rows = 1,
       col = "blue")

4. Freedom.To.Make.Life.Choices

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

5. Generosity

coplot(Generosity ~ Year|Country.Name,
       type = "b",
       data = Happy_EA_balance_2,
       rows = 1,
       col = "blue")

6. Positive.Affect

coplot(Positive.Affect ~ Year|Country.Name,
       type = "b",
       data = Happy_EA_balance_2,
       rows = 1,
       col = "blue")

7. Negative.Affect

coplot(Negative.Affect ~ Year|Country.Name,
       type = "b",
       data = Happy_EA_balance_2,
       rows = 1,
       col = "blue")

Selanjutnya akan dilihat apakah ada efek Individu dan Waktu dengan menggunakan grafik plotmeans untuk melihat Heterogenitasnya.

3.3 Heterogenitas Life.Ladder

1. Heterogenitas antar negara

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

dari grafik di atas disimpulkan data individu memiliki heterogenitas.

2. Heterogenitas antar Waktu

plotmeans(
  Life.Ladder ~ Year,
  data = Happy_EA_balance_2,
  main="Heterogenitas Life.Ladder antar Negara")

Dari grafik di atas disimpulkan data tahun memiliki heterogenitas.


4 . Pemodelan

4.1 Cross-Validation

Data akan dibagi menjadi data train dan data test. Dikarenakan data panel memiliki informasi keterangan waktu maka pembagian data tidak diambil secara acak melainkan dibagi dengan cara dipisah secara berurutan.

  • Data Train akan menggunakan data yang terlampau
  • Data Test akan menggunakan data yang terbaru
#membuat data train
ladder_train <- Happy_EA_balance_2 %>% filter(Year != 2022)
  
#membuat data test
ladder_test <- Happy_EA_balance_2 %>% filter(Year == 2022)

#memastikan kembali bahwa data train sudah balance dengan melakukan balancing
ladder_train <-
  ladder_train %>%
  droplevels() %>%
  make.pbalanced()

4.2 Pemeriksaan Asumsi Multikolinieritas

Asumsi Uji 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 
##                     2.263397                     1.663773 
## Freedom.To.Make.Life.Choices                   Generosity 
##                     2.560800                     2.430170 
##              Positive.Affect              Negative.Affect 
##                     4.284035                     2.228092

Dari uji di atas disimpulkan tidak terjadi multicollinearity pada model


5 . Penentuan Model Estimasi

5.1 Pembuatan Model

Model Gabungan (CEM)

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

Model Pengaruh Tetap (FEM)

fem <- 
plm(Life.Ladder ~ Log.GDP.Per.Capita + Social.Support + Positive.Affect,
    data = ladder_train,
    index = c("Country.Name", "Year"),
    model = "within")

Uji Chow

Uji chow dilakukan untuk memilih model terbaik antara model gabungan (cem) dengan model fixed effec (fem)

Hipotesis yang diuji adalah sebagai berikut:

  • H0 : Model gabungan (cem)
  • H1 : Model pengaruh tetap (fem)

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

pooltest(cem,fem)
## 
##  F statistic
## 
## data:  Life.Ladder ~ Log.GDP.Per.Capita + Social.Support + Positive.Affect
## F = 4.0844, df1 = 4, df2 = 77, p-value = 0.004692
## 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 (fem).

Model Pengaruh Acak (REM)

rem <- 
plm(Life.Ladder ~ Log.GDP.Per.Capita + Social.Support + Positive.Affect,
    data = ladder_train,
    index = c("Country.Name", "Year"),
    model = "random")

Uji Hausman

Uji Hausman dilakukan untuk memilih model terbaik antara model random effect (rem) dengan model fixed effect (fem)

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

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

phtest(rem,fem)
## 
##  Hausman Test
## 
## data:  Life.Ladder ~ Log.GDP.Per.Capita + Social.Support + Positive.Affect
## chisq = 9.9096, df = 3, p-value = 0.01935
## alternative hypothesis: one model is inconsistent

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

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

fem$residuals %>% shapiro.test()
## 
##  Shapiro-Wilk normality test
## 
## data:  .
## W = 0.92206, p-value = 7.335e-05

Berdasarkan hasil pengujian Normalitas diperoleh nilai p-value < 0.05, artinya sisaan tidak menyebar normal. Walaupun demikian, penggunaan model masih bisa tetap dilanjutkan.

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 = 1.2401, df = 3, p-value = 0.7434

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 = 12.671, df = 1, p-value = 0.0003713

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

5.3 Interpretasi Model

1. Koefisien

summary(fem)
## Oneway (individual) effect Within Model
## 
## Call:
## plm(formula = Life.Ladder ~ Log.GDP.Per.Capita + Social.Support + 
##     Positive.Affect, data = ladder_train, model = "within", index = c("Country.Name", 
##     "Year"))
## 
## Balanced Panel: n = 5, T = 17, N = 85
## 
## Residuals:
##      Min.   1st Qu.    Median   3rd Qu.      Max. 
## -0.560074 -0.154161 -0.007793  0.121149  1.038890 
## 
## Coefficients:
##                    Estimate Std. Error t-value  Pr(>|t|)    
## Log.GDP.Per.Capita  0.86556    0.15406  5.6182 2.944e-07 ***
## Social.Support      3.41926    1.19979  2.8499  0.005609 ** 
## Positive.Affect     2.30139    1.02821  2.2382  0.028094 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Total Sum of Squares:    9.9668
## Residual Sum of Squares: 4.5325
## R-Squared:      0.54524
## Adj. R-Squared: 0.5039
## F-statistic: 30.7739 on 3 and 77 DF, p-value: 3.5208e-13
  • variabel yang signifikan mempengaruhi tingkat kebahagiaan masyarakat di suatu negara adalah :
    • Log.GDP.Per.Capita
    • Social.Support
    • Positive.Affect
  • dari ketiga variabel yang signifikan, Social.support memberikan pengaruh yang lebih besar diikuti oleh Positive Affect dan Log.GDP.Per.Capita
  • tingkat kebahagian masyarakat di suatu negara akan bertambah sebesar 0.86556 untuk setiap kenaikan 1 satuan Log.GDP.Per.Capita, dengan catatan variabel lainnya bernilai tetap
  • tingkat kebahagian masyarakat di suatu negara akan bertambah sebesar 3.41926 untuk setiap kenaikan 1 satuan Social.Support, dengan catatan variabel lainnya bernilai tetap
  • tingkat kebahagian masyarakat di suatu negara akan bertambah sebesar 2.30139 untuk setiap kenaikan 1 satuan Positive.Affect , dengan catatan variabel lainnya bernilai tetap

2. Mengekstrak informasi Efek dari model fix

fixef(fem)
##                    China                    Japan                 Mongolia 
##                  -7.2336                  -7.8178                  -7.2786 
##              South Korea Taiwan Province of China 
##                  -7.2764                  -7.6335
  • tingkat kebahagiaan masyarakat di negara China adalah sebesar -7.2336 apabila tidak terdapat informasi lainnya
  • tingkat kebahagiaan masyarakat di negara Japan adalah sebesar -7.8178 apabila tidak terdapat informasi lainnya
  • tingkat kebahagiaan masyarakat di negara Mongolia adalah sebesar -7.2786 apabila tidak terdapat informasi lainnya
  • tingkat kebahagiaan masyarakat di negara South Korea adalah sebesar -7.2764 apabila tidak terdapat informasi lainnya
  • tingkat kebahagiaan masyarakat di negara Taiwan adalah sebesar -7.6335 apabila tidak terdapat informasi lainnya

5.4 Prediksi & Evaluasi

pred <- predict(fem, ladder_test, na.fill = F)

Untuk menguji apakah model yang dibangun sudah baik dalam memprediksi data baru maka akan dievaluasi 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.05425516

Berdasarkan hasil pengujian MAPE terlihat bahwa tingkat kesalahan prediski model fem dalam memprediksi nilai baru adalah sebesar 5,42%, artinya model sudah cukup baik untuk digunakan dalam memprediksi data yang baru.


6 . Kesimpulan

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

  • Tingkat kebahagiaan masyarakat tertinggi di Asia Timur (EA) adalah di negara Taiwan, sementara neagra lainnya berda pada kisaran angka yang tidak jauh berbeda.
  • Variabel yang signifikan mempengaruhi tingkat kebahagiaan masyarakan di suatu negara adalah log.gdp.percapita, social.support, dan positive affect.
  • Dari ketiga variabel yang signifikan, Social.support memberikan pengaruh yang lebih besar diikuti oleh Positive Affect dan Log.GDP.Per.Capita