1. Interpretasi dataset (EDA termasuk statdes, boxplot, barchat)

    1. Analisis dan jelaskan informasi penting yang terkandung dalam dataset
# Import data :
data<- read.csv("C:/Users/Lenovo/Downloads/economics.csv") # Membaca data
head(data) # Menampilkan 10 baris pertama dari data 
##   rownames       date   pce    pop psavert uempmed unemploy
## 1        1 1967-07-01 506.7 198712    12.6     4.5     2944
## 2        2 1967-08-01 509.8 198911    12.6     4.7     2945
## 3        3 1967-09-01 515.6 199113    11.9     4.6     2958
## 4        4 1967-10-01 512.2 199311    12.9     4.9     3143
## 5        5 1967-11-01 517.4 199498    12.8     4.7     3066
## 6        6 1967-12-01 525.1 199657    11.8     4.8     3018
str(data) # Melihat struktur da
## 'data.frame':    574 obs. of  7 variables:
##  $ rownames: int  1 2 3 4 5 6 7 8 9 10 ...
##  $ date    : chr  "1967-07-01" "1967-08-01" "1967-09-01" "1967-10-01" ...
##  $ pce     : num  507 510 516 512 517 ...
##  $ pop     : num  198712 198911 199113 199311 199498 ...
##  $ psavert : num  12.6 12.6 11.9 12.9 12.8 11.8 11.7 12.3 11.7 12.3 ...
##  $ uempmed : num  4.5 4.7 4.6 4.9 4.7 4.8 5.1 4.5 4.1 4.6 ...
##  $ unemploy: int  2944 2945 2958 3143 3066 3018 2878 3001 2877 2709 ...
# Load libraries
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.4.3
## Warning: package 'ggplot2' was built under R version 4.4.3
## Warning: package 'readr' was built under R version 4.4.3
## Warning: package 'dplyr' was built under R version 4.4.3
## Warning: package 'forcats' was built under R version 4.4.3
## Warning: package 'lubridate' was built under R version 4.4.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.2     ✔ tibble    3.2.1
## ✔ lubridate 1.9.4     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
# Statistik deskriptif
summary(data)
##     rownames         date                pce               pop        
##  Min.   :  1.0   Length:574         Min.   :  506.7   Min.   :198712  
##  1st Qu.:144.2   Class :character   1st Qu.: 1578.3   1st Qu.:224896  
##  Median :287.5   Mode  :character   Median : 3936.8   Median :253060  
##  Mean   :287.5                      Mean   : 4820.1   Mean   :257160  
##  3rd Qu.:430.8                      3rd Qu.: 7626.3   3rd Qu.:290291  
##  Max.   :574.0                      Max.   :12193.8   Max.   :320402  
##     psavert          uempmed          unemploy    
##  Min.   : 2.200   Min.   : 4.000   Min.   : 2685  
##  1st Qu.: 6.400   1st Qu.: 6.000   1st Qu.: 6284  
##  Median : 8.400   Median : 7.500   Median : 7494  
##  Mean   : 8.567   Mean   : 8.609   Mean   : 7771  
##  3rd Qu.:11.100   3rd Qu.: 9.100   3rd Qu.: 8686  
##  Max.   :17.300   Max.   :25.200   Max.   :15352

- Interpretasi summary :

Data menunjukkan bahwa selama periode pengamatan, rata-rata pengeluaran konsumsi pribadi (PCE) meningkat secara signifikan dari nilai minimum 506.7 menjadi maksimum 12,193.8, sejalan dengan pertumbuhan populasi dan tingkat pengangguran yang bervariasi antara 2,685 hingga 15,352, dengan tingkat tabungan pribadi dan durasi pengangguran rata-rata cenderung berfluktuasi di kisaran 2.2-17.3% dan 4.0-25.2 dalam minggu.

  1. Identifikasi pola, tren, atau anomaly yang muncul
  1. korelasi
# Menghitung matriks korelasi
correlation_matrix <- cor(data %>% select(pce, pop, psavert, uempmed, unemploy), use = "complete.obs")
print(correlation_matrix)
##                 pce        pop    psavert    uempmed   unemploy
## pce       1.0000000  0.9872421 -0.7928546  0.7269616  0.6145176
## pop       0.9872421  1.0000000 -0.8363147  0.6950085  0.6337165
## psavert  -0.7928546 -0.8363147  1.0000000 -0.3251377 -0.3093769
## uempmed   0.7269616  0.6950085 -0.3251377  1.0000000  0.8693097
## unemploy  0.6145176  0.6337165 -0.3093769  0.8693097  1.0000000

- Interpretasi korelasi :

Matriks korelasi menunjukkan bahwa variabel pce (pengeluaran konsumsi pribadi) memiliki hubungan positif yang kuat dengan pop (populasi) dan uempmed (durasi pengangguran rata-rata), sementara berkorelasi negatif dengan psavert (tingkat tabungan pribadi), serta terdapat hubungan positif yang signifikan antara uempmed dan unemploy (tingkat pengangguran).

  1. Mendeteksi outlier dan distribusi :
library(ggplot2)
library(paletteer)
## Warning: package 'paletteer' was built under R version 4.4.3
# Ambil 5 warna dari palet
warna_palet <- paletteer_c("ggthemes::Blue-Green Sequential", 30)[c(5, 10, 15, 20, 25)]
# Boxplot untuk Personal Consumption Expenditure (pce)
ggplot(data, aes(y = pce)) +
  geom_boxplot(fill = warna_palet[1]) +
  labs(title = "Boxplot Pengeluaran Konsumsi Pribadi (PCE)", y = "PCE")

- Interpretasi pce :

Boxplot menunjukkan bahwa pengeluaran konsumsi pribadi (PCE) memiliki distribusi yang relatif stabil dengan median sekitar 7.500, rentang interkuartil sempit, dan tidak ada outlier yang terdeteksi.

# Boxplot untuk population (POP)
ggplot(data, aes(y = pop)) +
  geom_boxplot(fill = warna_palet[2]) +
  labs(title = "Boxplot Jumlah Total Populasi (POP)", y = "Populasi")

- Interpretasi pop :

Boxplot menunjukkan bahwa jumlah total populasi (POP) memiliki distribusi yang relatif stabil, dengan median sekitar 250.000 dan rentang interkuartil yang sempit, menandakan konsistensi dalam data selama periode yang diamati.

# Boxplot untuk Personal Saving Rate (psavert)
ggplot(data, aes(y = psavert)) +
  geom_boxplot(fill = warna_palet[3]) +
  labs(title = "Boxplot Pendapatan % (psavert)", y = "psavert")

- Interpretasi psavert :

Boxplot menunjukkan bahwa tingkat tabungan pribadi (psavert) memiliki distribusi yang relatif stabil, dengan median sekitar 10% dan rentang interkuartil yang sempit, menandakan konsistensi dalam data selama periode yang diamati.

# Boxplot untuk unemployed
ggplot(data, aes(y = uempmed)) +
  geom_boxplot(fill = warna_palet[4]) +
  labs(title = "Boxplot Durasi Rata - Rata Pengangguran (%/minggu)", y = "Durasi Rata - Rata Pengangguran per Minggu")

- Interpretasi uempmed :

Boxplot menunjukkan bahwa durasi rata-rata pengangguran per minggu memiliki median sekitar 7 hari, dengan rentang interkuartil yang sempit dan beberapa outlier di atas nilai maksimum.

# Boxplot untuk unemployed
ggplot(data, aes(y = unemploy)) +
  geom_boxplot(fill = warna_palet[5]) +
  labs(title = "Boxplot Jumlah Total Pengangguran", y = "Jumlah Total Pengangguran")

- Interpretasi unemployed :

Boxplot menunjukkan bahwa jumlah total pengangguran memiliki distribusi yang relatif stabil, dengan median sekitar 8.000, rentang interkuartil sempit, dan beberapa outlier di atas nilai maksimum.

# Ambil subset data tiap 12 baris (anggap tiap tahun)
subset_data <- data[seq(1, nrow(data), by = 12), ]

# Plot
ggplot(subset_data, aes(x = date, y = unemploy, fill = unemploy)) +
  geom_bar(stat = "identity") +
  geom_col(color = "black") + 
  scale_fill_gradientn(colors = warna_palet) +  
  labs(title = "Jumlah Pengangguran dari 1970 hingga 2015",
       x = "Tahun", y = "Jumlah Pengangguran") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

- Interpretasi unemployed :

Jumlah pengangguran menunjukkan fluktuasi sepanjang periode 1970 hingga 2015, dengan tren umum yang relatif stabil di bawah 10.000, kecuali pada beberapa titik puncak yang mencapai lebih dari 12.000.

-> Bar Chart PCE :

library(ggplot2)
library(paletteer)  # pastikan package ini sudah di-install
library(ggthemes)
## Warning: package 'ggthemes' was built under R version 4.4.3
# Ubah kolom 'date' menjadi tipe Date dan buat kolom tahun
data %>%
  mutate(date = as.Date(date, format = "%Y-%m-%d"),  # Konversi ke tipe Date
         tahun = format(date, "%Y")) %>%             # Buat kolom tahun
  group_by(tahun) %>%
  summarise(rata_pce = mean(pce, na.rm = TRUE)) %>%
  ggplot(aes(x = tahun, y = rata_pce, fill = rata_pce)) +
  geom_col(color = "black") + 
  scale_fill_gradientn(colors = warna_palet) +
  labs(title = "Rata-rata PCE per Tahun",
       x = "Tahun", y = "Rata-rata PCE (miliar USD)") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1))

- Interpretasi PCE :

Rata-rata Pengeluaran Konsumsi Pribadi (PCE) menunjukkan tren kenaikan yang konsisten dari tahun 1968 hingga 2015, dengan nilai rata-rata meningkat secara signifikan seiring waktu.

  1. Tren :
# Pastikan kolom date bertipe Date
data$date <- as.Date(data$date)

# Plot
ggplot(data, aes(x = date, y = pce)) +
  geom_line(color = "#B6E4B3", linewidth = 1) +
  labs(title = "Tren Pengeluaran Konsumsi Pribad (pce) dari Waktu ke Waktu",
       x = "Tahun", y = "PCE (miliar USD)") +
  scale_x_date(date_breaks = "5 years", date_labels = "%Y") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

- Interpretasi PCE :

Tren pengeluaran konsumsi pribadi (PCE) menunjukkan kenaikan konsisten seiring waktu, dengan nilai PCE meningkat secara signifikan dari tahun 1970 hingga 2015.

# Plot untuk psavert
ggplot(data, aes(x = date, y = psavert)) +
  geom_line(color = "#A2DBB5", linewidth = 1) +
  labs(title = "Tren Tingkat Tabungan Pribadi (psavert) dari Waktu ke Waktu",
       x = "Tahun", y = "PSAVERT (%)") +
  scale_x_date(date_breaks = "5 years", date_labels = "%Y") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

- Interpretasi Psavert :

Tingkat tabungan pribadi (psavert) menunjukkan fluktuasi seiring waktu, dengan tren umum yang menurun dari 1970 hingga awal 2000-an, diikuti oleh kenaikan pada periode terakhir.

# Plot tren populasi dari waktu ke waktu
ggplot(data, aes(x = date, y = pop)) +
  geom_line(color = "#98D7B7", linewidth = 1) +
  labs(title = "Tren Jumlah Penduduk (Population) dari Waktu ke Waktu",
       x = "Tahun", y = "Populasi") +
  scale_x_date(date_breaks = "5 years", date_labels = "%Y") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

- Interpretasi POP :

Jumlah penduduk menunjukkan tren kenaikan yang konsisten dari tahun 1970 hingga 2015, dengan populasi meningkat secara signifikan seiring waktu.

# Plot tren jumlah pengangguran dari waktu ke waktu
ggplot(data, aes(x = date, y = unemploy)) +
  geom_line(color = "#6BC6BE", linewidth = 1) +
  labs(title = "Tren Jumlah Pengangguran (Unemploy) dari Waktu ke Waktu",
       x = "Tahun", y = "Jumlah Pengangguran (ribu orang)") +
  scale_x_date(date_breaks = "5 years", date_labels = "%Y") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

- Interpretasi unemploy :

Tren jumlah pengangguran menunjukkan fluktuasi seiring waktu, dengan puncak tertinggi terjadi pada tahun 2010, diikuti oleh penurunan signifikan hingga mencapai level yang lebih stabil di awal 2010-an.

# Plot tren jumlah pengangguran dari waktu ke waktu
ggplot(data, aes(x = date, y = uempmed)) +
  geom_line(color = "#41B7C4", linewidth = 1) +
  labs(title = "Tren Mean Durasi Pengangguran (uempmed) dari Waktu ke Waktu",
       x = "Tahun", y = "Mean Durasi Pengangguran (%/minggu)") +
  scale_x_date(date_breaks = "5 years", date_labels = "%Y") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

- Interpretasi uempmed :

Tren durasi pengangguran rata-rata menunjukkan fluktuasi seiring waktu, dengan puncak tertinggi terjadi pada tahun 2010, diikuti oleh penurunan signifikan hingga mencapai level yang lebih stabil.

  1. Anomali :
library(tibbletime)
## Warning: package 'tibbletime' was built under R version 4.4.3
## 
## Attaching package: 'tibbletime'
## The following object is masked from 'package:stats':
## 
##     filter
library(anomalize)
## Warning: package 'anomalize' was built under R version 4.4.3
# Konversi ke tibble time
data_tbl <- as_tbl_time(data, index = date)

# Anomaly detection
data_anomaly <- data_tbl %>%
  time_decompose(pce) %>%
  anomalize(remainder) %>%
  time_recompose()
## frequency = 12 months
## trend = 60 months
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
# Visualisasi
plot_anomalies(data_anomaly, time_recomposed = TRUE) +
  labs(title = "Deteksi Anomali Otomatis (anomalize)")

- Interpretasi Anomali :

Tren data menunjukkan kenaikan yang konsisten seiring waktu, dengan beberapa titik outlier (ditandai dalam merah) yang muncul pada periode tertentu, terutama di awal dan akhir rentang waktu.

  1. Visualisasikan hubungan antar variabel (1 interpretasi untuk 2 plot / visualisasi)
  1. Visualisasi dan interpretasikan untuk variabel 1 ( dataset hanya 1 variabel)

-> x = PCE :

ggplot(data, aes(x = pce)) +
  geom_histogram(aes(fill = ..density..), bins = 30, color = "black") +
  scale_fill_gradientn(colors = warna_palet) +
  labs(title = "Distribusi PCE",
       x = "PCE",
       y = "Frekuensi") +
  theme_minimal()
## Warning: The dot-dot notation (`..density..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(density)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

- interpretasi variabel 1 :

Distribusi PCE menunjukkan kemiringan positif dengan frekuensi tertinggi terkonsentrasi pada nilai-nilai lebih rendah, sementara nilai-nilai yang lebih tinggi memiliki frekuensi yang lebih rendah.

  1. Visualisasi dan interpretasikan hubungan antara variabel 1 dan variabel 2 (dataset 2 variabel)

-> x = unemploy, y = pce :

ggplot(data, aes(x = unemploy, y = pce)) +
  geom_point(aes(color = date), size = 2) +  # Variasi warna berdasarkan tanggal
  scale_color_gradientn(colors = warna_palet) +  # Terapkan gradien warna
  geom_smooth(method = "lm", se = FALSE, color = "black") +
  labs(title = "Hubungan antara PCE dan Pengangguran",
       x = "Unemploy",
       y = "PCE",
       color = "Date") +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'

- Interpretasi variabel 1 & variabel 2 :

Ada hubungan positif antara PCE (Personal Consumption Expenditures) dan tingkat pengangguran (Unemploy), dengan nilai PCE meningkat seiring bertambahnya jumlah pengangguran, meskipun pola ini tidak konsisten secara linier.

  1. Diskusikan keterkaitan, korelasi, atau pengaruh antara kedua variabel tersebut.
library(dplyr)
library(corrplot)
## Warning: package 'corrplot' was built under R version 4.4.3
## corrplot 0.95 loaded
# Korelasi
cor(data$pce, data$unemploy)
## [1] 0.6145176
# Buat matriks korelasi
cor_matrix <- cor(data[, c("pce", "pop", "psavert", "uempmed", "unemploy")], use = "complete.obs")

# Visualisasi heatmap korelasi
corrplot(cor_matrix, method = "color", type = "upper",
         col = warna_palet,
         addCoef.col = "black",
         tl.col = "black", tl.srt = 45,
         title = "Heatmap Korelasi",
         mar = c(0, 0, 1, 0),
         outline = TRUE)

- Interpretasi heatmap :

Heatmap menunjukkan bahwa PCE memiliki korelasi positif kuat dengan populasi (pop), sedangkan tingkat tabungan pribadi (psavert) memiliki korelasi negatif dengan PCE dan populasi, serta terdapat hubungan positif yang kuat antara durasi pengangguran rata-rata (uempmed) dan jumlah pengangguran (unemploy).