Data Numerik

angka atau bilangan, terbagi menjadi dua jenis diskrit dan kontinu

yang dilihat dari data numerik:

1. Bentuk sebaran data

2. Trend data (data deret waktu)

Visualisasikan (ggplot2):

1. Histogram

2. Density plot

3. Boxplot

4. Scatter plot

5. Q-Q plot

6. Line chart

Violin chart (Density plot + Boxplot)

Data

Data yang saya gunakan adalah data Aids2 yang mendeskripsikan data pasien yang didiagnosis dengan AIDS di Australia sebelum 1 Juli 1991 yang berisi 2.843 baris dan kolom-kolom berikut:

  1. state (negara bagian)

    Pengelompokan negara bagian asal: “NSW” termasuk ACT dan “lainnya” adalah WA, SA, NT dan TAS.

  2. sex (jenis kelamin)

    Jenis kelamin pasien.

  3. diag

    (Julian) Tanggal diagnosis.

  4. death (kematian)

    (Julian) tanggal kematian atau akhir pengamatan.

  5. status

    “A” (hidup) atau ‘D’ (mati) pada akhir pengamatan.

  6. T.categ

    Kategori penularan yang dilaporkan.

  7. age (usia)

    Usia (tahun) saat diagnosis.

Data Aids2 Dataset tersebut bersumber dari package MASS, package MASS adalah package yang menyediakan berbagai fungsi statistik, termasuk metode regresi, analisis data, dan distribusi probabilitas.

Input Data

library(MASS)
data("Aids2")
head(Aids2)
##   state sex  diag death status T.categ age
## 1   NSW   M 10905 11081      D      hs  35
## 2   NSW   M 11029 11096      D      hs  53
## 3   NSW   M  9551  9983      D      hs  42
## 4   NSW   M  9577  9654      D    haem  44
## 5   NSW   M 10015 10290      D      hs  39
## 6   NSW   M  9971 10344      D      hs  36
dim(Aids2)
## [1] 2843    7

Keterangan:

library: digunakan untuk membantu mengaktifkan package

data: digunakan untuk menampilkan daftar dataset

head: digunakan untuk menampilkan data pada bagian atas pertama/atas saja dari sebuah vektor, matriks, tabel, data frame ataupun sebuah fungsi

dim: digunakan untuk mengetahui jumlah baris dan kolom

Histogram

Untuk membuat histogram pada package ggplot2 menggunakan perintah geom_histogram(). Variable yang digunakan yaitu age pada data Aids2.

library(ggplot2)
ggplot(data = Aids2, mapping = aes(x = age)) + 
  geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Secara defaut, geom_histogram() menggunakan 30 bins (batang). Selanjutnya mengganti nilai bins tersebut dengan menambahkan argumen bins = 40. Hasilnya sebagai berikut.

ggplot(data = Aids2, mapping = aes(x = age)) + 
  geom_histogram(bins = 40)

Kita dapat memberikan pemisah dengan warna putih Anda dapat tambahkan argumen color = "red3". Hasilnya sebagai berikut.

ggplot(data = Aids2, mapping = aes(x = age)) + 
  geom_histogram(bins = 40, color = "red3")

Kita dapat mengubah warna batang dengan menggunakan argumen fill, mengubah format penulisan nilai pada sumbu x dan y menggunakan function scale_x_continuous() untuk sumbu x dan scale_y_continuous() untuk sumbu y dan mengubah nama label pada sumbu x dan y dengan fungsi labs. Hasilnya sebagai berikut.

library(scales)
ggplot(data = Aids2, mapping = aes(x = age)) + 
  geom_histogram(bins = 40, color = "navy", fill = "lightpink") + 
  scale_x_continuous(labels = comma) + 
  scale_y_continuous(labels = comma) + 
  labs(x = "Usia saat diagnosis", 
       y = "Frekuensi")

Density Plot

Untuk membuat density plot menggunakan ggplot2 kita cukup menggunakan function geom_density()

ggplot(data = Aids2, mapping = aes(x = age)) + 
  geom_density()

Untuk mengatur warna, transaparansi, format penulisan nilai pada sumbu x dan y, dan labeling sumbu x sama seperti pembuatan Histogram. Hasilnya sebagai berikut.

ggplot(data = Aids2, mapping = aes(x = age)) + 
  geom_density(fill = "maroon", alpha = 0.7) + 
  scale_x_continuous(labels = comma) + 
  scale_y_continuous(labels = comma) + 
  labs(x = "age")

Kita dapat membandingkan sebaran menggunakan density plot berdasarkan kategori. Misal akan dilihat sebaran usia saat diagnosis (age) berdasarkan kategori penularan yang dilaporkan (T.cateh). Hasilnya sebagai berikut.

ggplot(data = Aids2, mapping = aes(x = age, fill = T.categ, color = T.categ)) + 
  geom_density(alpha = 0.7) + 
  scale_x_continuous(labels = comma) + 
  scale_y_continuous(labels = comma) + 
  labs(x = "Age")

Untuk mengurangi kesulitan dalam mengamati visual tersebut maka perlu dipisah per kategori dengan menggunakan visualisasi ridgeline plot atau disebut juga joyplot.

library(ggridges)
ggplot(data = Aids2, mapping = aes(x = age, y= T.categ ,fill = T.categ)) + 
  geom_density_ridges() + 
  labs(x = "Usia saat diagnosis", y = "Kategori penularan")
## Picking joint bandwidth of 4.09

Boxplot

Untuk membuat boxplot di ggplot2 kita dapat gunakan functiongeom_boxplot()

ggplot(data = Aids2, mapping = aes(x = age)) + 
  geom_boxplot()

Membuat boxplot secara vertikal menggunakan perintah coord_flip(). Hasilnya sebagai berikut.

ggplot(data = Aids2, mapping = aes(x = age)) + 
  geom_boxplot()+
  coord_flip()

kita dapat membuat boxplot dari data numerik dan membandingkan sebarannya berdasarkan kategori. Misalnya kita ingin membandingkan sebaran usia saat diagnosis (age) berdasarkan pengamatan akhir (status). Hasilnya sebagai berikut.

ggplot(data = Aids2, mapping = aes(x = age, y = status)) + 
  geom_boxplot()

Selanjutnya memberi warna berbeda untuk setiap box berdasarkan kategorinya. Kita dapat menambahkan argumen fill dengan nilai berupa nama variabel dari kategori yang ingin kita gunkan untuk perbandingan boxplot. Misalnya kita ingin membandingkan sebaran dari variabel usia saat diagnosis (age) berdasarkan pengamatan akhir (status) menggunakan boxplot dan menyesuaikan warnanya berdasarkan kategori dari status. Hasilnya sebagai berikut.

ggplot(data = Aids2, mapping = aes(x = age, y = status, fill = status)) + 
  geom_boxplot()

Untuk menghilangkan legend dari color kita dapat tambahkan theme(legend.position = "none"). Hasilnya sebagai berikut.

ggplot(data = Aids2, mapping = aes(x = age, y = T.categ, fill = T.categ)) + 
  geom_boxplot() + 
  theme(legend.position = "none")

#MENGUBAH POSISI LEGEND KE KIRI

ggplot(data = diamonds, mapping = aes(x = carat, y = color, fill = color)) + 
  geom_boxplot() + 
  theme(legend.position = "left")

Violin Plot

Plot ini dibentuk dengan menggabungkan antara Density Plot dengan boxplot. Hasilnya sebagai berikut.

ggplot(data = Aids2, mapping = aes(x = age,y="all")) +
  geom_violin(fill="maroon",alpha=0.5) +
  geom_boxplot(fill="navy",width=0.1)

QQ-Plot

Plot ini berguna untuk memeriksa apakah sebaran data (sebaran empirik) memiliki bentuk yang sama dengan sebaran tertentu yang dispesifikan (sebaran hipotetik). Misalnya kita ingin melihat pola sebaran usia saat diagnosis (age) apakah menyebar normal atau tidak.

library(ggplot2)
ggplot(data = Aids2, aes(sample = age)) +
  stat_qq(col="lightblue3", cex=0.9) +
  stat_qq_line(col="purple", lwd=1) #daya hipotetik (dibandingkan dengan sebaran normal)

Scatter plot

Untuk membuat scatter plot menggunakan ggplot2 kita dapat menggunakan geom_point().Misalnya kita ingin melihat pola sebaran antara age dan death

ggplot(data = Aids2, mapping = aes(x = age, y = death)) + 
  geom_point()

Kita juga dapat memberikan warna untuk setiap titik. Misalnya warna masing-masing titik menyesuaikan dengan kategori pada variabel status

ggplot(data = Aids2, mapping = aes(x = age, y = death, color = status)) + 
  geom_point()

Line chart

Plot ini digunakan untuk melihat trend data berdasarkan perubahan waktu. Artinya pada Line Chart cocok untuk data-data deret waktu.

Input Data

Data yang digunakan yaitu data indikator ekonomi tahun 1959 - 1960. yang terdiri dari :

  1. date

    Tanggal

  2. rgnp (Real Gross National Product) Produk National Bruto Riil

    Menunjukkan pertumbuhan ekonomi setelah disesuaikan dengan inflasi.

  3. pgnp (Nominal Gross National Product) Produk Nasional Bruto Nominal

    Mengukur output ekonomi tanpa penyesuaian inflasi.

  4. ulc (Unit Labor Cost) Biaya Tenaga Kerja per Unit Output

    Mengukur biaya tenaga kerja relatif terhadap produksi.

  5. gdfco (Gross Domestic Fixed Capital Formation) Pembentukan Modal tetap Bruto Domestik

    Mengukur investasi dalam aset tetap seperti mesin, teknologi, dan infrastruktur.

  6. gdf(Gross Domestic Fixed Investment) Investasi Tetap Domestik

    Total Investasi dalam aset tetap.

  7. gdfim (Gross Domestic Fixed Capital Goods) Impor Barang Modal Tetap

    Mengukur impor barang modal seperti mesin dan alat produksi.

  8. gdfcf (Gross Domestic Fixed Capital Formation as % of GDP) Investasi Tetap Bruto sebagai Persentasi dari PDB

    Menunjukkan seberapa besar porsi investasi dibandingkan PDB.

  9. gdfce (Gross Domestic Final Consumption Expenditure) Pengeluaran Konsumsi Akhir Domestik

    Mengukur pengeluaran konsumsi rumah tangga dan pemerintah.

library(readxl)
data_ts <- read_excel("data_upah.xlsx")

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following object is masked from 'package:MASS':
## 
##     select
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(lubridate)
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union
data_ts$date <- as.Date(data_ts$date, format = "%Y-%m-%d")


str(data)
## function (..., list = character(), package = NULL, lib.loc = NULL, verbose = getOption("verbose"), 
##     envir = .GlobalEnv, overwrite = TRUE)
DT::datatable(data_ts)
head(data_ts)
## # A tibble: 6 × 9
##   date       rgnp   pgnp   ulc   gdfco gdf   gdfim gdfcf gdfce
##   <date>     <chr>  <chr>  <chr> <chr> <chr> <chr> <chr> <chr>
## 1 1959-01-01 1606.4 1608.3 47.5  36.9  37.4  26.9  32.3  23.1 
## 2 1959-04-01 1637   1622.2 47.5  37.4  37.5  27    32.2  23.4 
## 3 1959-07-01 1629.5 1636.2 48.7  37.6  37.6  27.1  32.4  23.4 
## 4 1959-10-01 1643.4 1650.3 48.8  37.7  37.8  27.1  32.5  23.8 
## 5 1960-01-01 1671.6 1664.6 49.1  37.8  37.8  27.2  32.4  23.8 
## 6 1960-04-01 1666.8 1679   49.6  38    38    27.4  32.8  23.9

Keterangan:

library: digunakan untuk mengaktifkan package

readxl: package yang digunakan untuk membaca file dengan format excel

dplyr: package yang digunakan untuk manipulasi data

lubridate: package yang digunakan untuk manipulasi dan konversi tanggal

str: digunakan untuk menampilkan struktur dataframe pada data

DT: digunakan untuk menampilkan tabel interaktif dari dataset

head: digunakan untuk menampilkan 6 baris pertama dari data

Line chart Dasar

library(ggplot2)
ggplot(data_ts, aes(x = date, y = rgnp, group = 1)) +
  geom_line(color = "navy", size = 1) +
  geom_point(color = "red", size = 2) +
  labs(title = "Line Chart of rgnp in 1980",
       x = "Date",
       y = "RGNP") +
  theme_minimal()

Keterangan:

ggplot2: package yang digunakan untuk membuat berbagai jenis grafik

group: digunakan untuk menggambar 1 garis utuh untuk seluruh data

size: digunakan untuk mengatur ketebalan garis

geom_line: digunakan untuk membuat garis (line chart)

geom_point: digunakan untuk menambahkan titik pada setiap data

labs: digunakan untuk menambahkan judul dan label sumbu pada grafik

Area Plot

Untuk menambah estetika dapat dilakukan dengan mengarsir daerah di bawah plot deret waktu. Plot seperti ini disebut Area Plot. Hasilnya sebagai berikut.

ggplot(data_ts, aes(x = date, y = rgnp, group = 1)) +  # Tambahkan group = 1
  geom_line(color = "navy", size = 1) +
  geom_point(color = "red", size = 2) + 
  geom_area(fill = "blue", alpha = 0.2)

  labs(title = "Line Chart of rgnp in 1959",
       x = "Date",
       y = "RGNP") +
  theme_minimal()
## NULL

Keterangan:

geom_area: digunakan untuk menambahkan area dibawah garis sebagai bayangan

fill: digunakan untuk memberikan warna pada area

alpha: digunakan untuk memberikan transparasi area agar tidak terlalu tebal

Multiple Line Chart

Pada plot ini dapat digunakan untuk membandingkan rgnp dengan pgnp.

ggplot(data = data_ts, aes(x = date)) +
  geom_line(aes(y = rgnp, group = 1), lwd = 1.2, col = "navy") +
  geom_line(aes(y = pgnp, group = 1), lwd = 1.2, col = "pink") +
  labs(x = "Waktu", y = "Gross National Product") +
  theme_minimal()

Untuk menambahkan nama kelompok digunakan perintah berikut.

data_ts$rgnp <- as.numeric(data_ts$rgnp)
data_ts$pgnp <- as.numeric(data_ts$pgnp)

  
ggplot(data = data_ts, aes(x = date)) +
  geom_line(aes(y = rgnp, group = 1), lwd = 1.2, col = "navy") +
  geom_line(aes(y = pgnp, group = 1), lwd = 1.2, col = "pink") +
  scale_x_date(limits = c(min(data_ts$date), max(data_ts$date) + 100)) +
  geom_text(aes(x = max(date), y = tail(rgnp, 1) + 30), 
            label = "RGNP", size = 5, color = "navy", hjust = -0.1) +
  geom_text(aes(x = max(date), y = tail(pgnp, 1) + 30), 
            label = "PGNP", size = 5, color = "pink", hjust = -0.1) +
  labs(x = "Waktu", y = "Gross National Product")

Keterangan:

as.numeric: digunakan untuk mengubah data menjadi tipe data numerik

scale_x_date: digunakan untuk mengatur batas sumbu X

hjust: digunakan untuk menggeser atau mengatur teks