Data berikut merupakan data yang akan digunakan dalam eksplorasi kali ini.
library(readxl)
## Warning: package 'readxl' was built under R version 4.1.2
DataPrak <- read_excel("C:/Users/ASUS/OneDrive/Documents/Kuliah/Semester 4/Analisis Eksporasi Data/Praktikum/Data untuk Eksplorasi.xlsx", sheet=1)
head(DataPrak)
## # A tibble: 6 x 38
## Country X2 X3 X4 X5 X6 X7 X8 X9 X10 X39 X40
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 Country GDP (~ Real ~ Real ~ Consu~ Consu~ Gros~ Gros~ Gros~ Gros~ Bank~ Bank~
## 2 CH 749.0~ 1.885~ -2.72~ 1.16E~ -8.39~ 24.4~ 24.5~ 36.5~ 37.0~ 473.~ 523.~
## 3 DE 3793.~ 1.628~ -4.76~ 1.207~ 0.377~ 20.7~ 20.2~ 27.4~ 25.9~ 179.~ 193.~
## 4 DK 355.1~ 2.687~ -2.73~ 0.54 0.3 22.0~ 23.1~ 28.8~ 29.6~ 281.~ 310.~
## 5 LU 73.05~ 3.226~ -1.31~ 1.174~ 0.4 18.3~ 15.7~ 53.6~ 54.4~ 1618~ 1660~
## 6 NL 910.0~ 2.219~ -3.73~ 1.1773 1.112~ 21.1~ 21.3~ 31.0~ 31.9~ 292.~ 271.~
## # ... with 26 more variables: X42 <chr>, X43 <chr>, X44 <chr>, X45 <chr>,
## # X46 <chr>, X47 <chr>, X60 <chr>, X61 <chr>, X66 <chr>, X67 <chr>,
## # X102 <chr>, X103 <chr>, X104 <chr>, X105 <chr>, X106 <chr>, X107 <chr>,
## # X108 <chr>, X109 <chr>, X111 <chr>, X112 <chr>, X113 <chr>, X114 <chr>,
## # X115 <chr>, X116 <chr>, X117 <chr>, X118 <chr>
Dengan menggunakan fungsi summary() dan str() kita dapat mengetahui karakteristik data yang akan kita eksplorasi.
summary(DataPrak)
## Country X2 X3 X4
## Length:118 Length:118 Length:118 Length:118
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
## X5 X6 X7 X8
## Length:118 Length:118 Length:118 Length:118
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
## X9 X10 X39 X40
## Length:118 Length:118 Length:118 Length:118
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
## X42 X43 X44 X45
## Length:118 Length:118 Length:118 Length:118
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
## X46 X47 X60 X61
## Length:118 Length:118 Length:118 Length:118
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
## X66 X67 X102 X103
## Length:118 Length:118 Length:118 Length:118
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
## X104 X105 X106 X107
## Length:118 Length:118 Length:118 Length:118
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
## X108 X109 X111 X112
## Length:118 Length:118 Length:118 Length:118
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
## X113 X114 X115 X116
## Length:118 Length:118 Length:118 Length:118
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
## X117 X118
## Length:118 Length:118
## Class :character Class :character
## Mode :character Mode :character
str(DataPrak)
## tibble [118 x 38] (S3: tbl_df/tbl/data.frame)
## $ Country: chr [1:118] "Country" "CH" "DE" "DK" ...
## $ X2 : chr [1:118] "GDP (USDbn)" "749.0176725" "3793.5931639999999" "355.18403230000001" ...
## $ X3 : chr [1:118] "Real GDP growth ( avg last 5yrs%)" "1.8852199999999999" "1.6289199999999999" "2.6870799999999999" ...
## $ X4 : chr [1:118] "Real GDP growth (%)" "-2.7231999999999998" "-4.7653999999999996" "-2.7332999999999998" ...
## $ X5 : chr [1:118] "Consumer prices ( avg annual avg. % growth 5yrs)" "1.16E-3" "1.2076800000000001" "0.54" ...
## $ X6 : chr [1:118] "Consumer prices (annual avg. % growth)" "-8.3999999999999995E-3" "0.37780000000000002" "0.3" ...
## $ X7 : chr [1:118] "Gross dom. inv. (% GDP avg 5yrs)" "24.418880000000001" "20.71144" "22.063220000000001" ...
## $ X8 : chr [1:118] "Gross dom. inv. (% GDP)" "24.528400000000001" "20.247499999999999" "23.174800000000001" ...
## $ X9 : chr [1:118] "Gross dom. svg. (% GDP avg 5yrs)" "36.536700000000003" "27.497140000000002" "28.838280000000001" ...
## $ X10 : chr [1:118] "Gross dom. svg. (% GDP)" "37.051400000000001" "25.984300000000001" "29.664400000000001" ...
## $ X39 : chr [1:118] "Bank System Assets (% GDP avg 5yr)" "473.25580000000002" "179.52369999999999" "281.14729999999997" ...
## $ X40 : chr [1:118] "Bank System Assets (% GDP)" "523.8202" "193.952499113789" "310.48038618253599" ...
## $ X42 : chr [1:118] "Loan-deposit ratio (% avg 5yr)" "84.47336" "144.01910000000001" "355.61270000000002" ...
## $ X43 : chr [1:118] "Loan-deposit ratio (%)" "82.5" "138.35723879346699" "359.13886103320101" ...
## $ X44 : chr [1:118] "Capital adequacy ratio (% avg 5yr)" "17.92784" "18.782" "21.346" ...
## $ X45 : chr [1:118] "Capital adequacy ratio (%)" "19.3" "18.579999999999998" "22.6" ...
## $ X46 : chr [1:118] "Non-performing loans (% of gross loans avg 5yr)" "0.69089999999999996" "1.494" "2.5201799999999999" ...
## $ X47 : chr [1:118] "Non-performing loans (% of gross loans)" "0.75" NA "1.8" ...
## $ X60 : chr [1:118] "NXD (% GDP avg 5yr)" "-152.44499999999999" "-15.648099999999999" "-5.5908199999999999" ...
## $ X61 : chr [1:118] "NXD (% GDP)" "-154.95359999999999" "-19.091200000000001" "-13.994999999999999" ...
## $ X66 : chr [1:118] "GXD (% GDP avg 5yr)" "275.61689999999999" "165.29300000000001" "155.84030000000001" ...
## $ X67 : chr [1:118] "GXD (% GDP)" "319.59530000000001" "205.96360000000001" "194.6712" ...
## $ X102 : chr [1:118] "GDP per cap. (USD)" "89770.852100000004" "50891.581200000001" "67565.655599999998" ...
## $ X103 : chr [1:118] "GDP per cap. (% US)" "129.49325180099001" "73.4104242604391" "97.462553256857902" ...
## $ X104 : chr [1:118] "GNI per cap. (PPP)e (USD)" "71660" "57410" "62120" ...
## $ X105 : chr [1:118] "GNI per cap. (PPP)e (% US)" "108.444309927361" "86.879539951573804" "94.007263922518206" ...
## $ X106 : chr [1:118] "Real GDP per cap. (%, 5Y av. gr.)" "0.17330000000000001" "-0.1226" "1.3106" ...
## $ X107 : chr [1:118] "Population (%, 5Y av. gr.)" "0.84019999999999995" "0.48349999999999999" "0.36130000000000001" ...
## $ X108 : chr [1:118] "Unemployment (% labour force avg 5yr)" "2.8857400000000002" "3.7316400000000001" "5.5" ...
## $ X109 : chr [1:118] "Unemployment (% labour force)" "3.1728000000000001" "4.8177000000000003" "5.4" ...
## $ X111 : chr [1:118] "Pol. Stab." "94.761901855468693" "66.666664123535199" "83.809524536132798" ...
## $ X112 : chr [1:118] "Gov. Eff." "99.519233703613295" "93.269233703613295" "99.038459777832003" ...
## $ X113 : chr [1:118] "Rule of Law" "99.038459777832003" "92.307693481445298" "98.076919555664105" ...
## $ X114 : chr [1:118] "Ctrl. of Corr." "96.153846740722699" "95.192306518554702" "97.596153259277301" ...
## $ X115 : chr [1:118] "Reg. Qual." "94.711540222167997" "96.153846740722699" "92.307693481445298" ...
## $ X116 : chr [1:118] "Voice & Acc-ty" "97.044334411621094" "95.073890686035199" "98.522171020507798" ...
## $ X117 : chr [1:118] "HDI" "98.9" "97.3" "95.2" ...
## $ X118 : chr [1:118] "Ease of DB (p-tile)f" "81.5" "88.9" "98.5" ...
Dapat kita ketahui bahwa data tersebut memiliki kelas sebagai character. Oleh karena itu, kita perlu terlebih dahulu mengubah variabel data yang akan kita eksplorasi menjadi numeric.
Kita membuat objek data “Eksplor” sebagai objek data yang akan kita eksplorasi.
Eksplor <- DataPrak[2:108,c('X106','X107')]
Eksplor$X106 <- as.numeric(Eksplor$X106)
Eksplor$X107 <- as.numeric(Eksplor$X107)
head(Eksplor)
## # A tibble: 6 x 2
## X106 X107
## <dbl> <dbl>
## 1 0.173 0.840
## 2 -0.123 0.484
## 3 1.31 0.361
## 4 0.0792 2.02
## 5 0.488 0.593
## 6 0.153 0.838
str(Eksplor)
## tibble [107 x 2] (S3: tbl_df/tbl/data.frame)
## $ X106: num [1:107] 0.1733 -0.1226 1.3106 0.0792 0.4875 ...
## $ X107: num [1:107] 0.84 0.483 0.361 2.022 0.593 ...
summary(Eksplor)
## X106 X107
## Min. :-9.8453 Min. :-0.8862
## 1st Qu.:-0.8901 1st Qu.: 0.3372
## Median : 0.3121 Median : 1.0414
## Mean : 0.3341 Mean : 1.0460
## 3rd Qu.: 1.9074 3rd Qu.: 1.6647
## Max. : 6.0712 Max. : 4.4021
Nah, kini kita sudah memiliki objek data dengan kelas numeric sehingga kita mudah untuk mengeksplorasinya terutama untuk membuat grafik.
Pertama, mari kita amati korelasi antarvariabel dalam objek Eksplor, yakni Real QDP per Cap dengan populasi penduduk.
cor(Eksplor)
## X106 X107
## X106 1.0000000 -0.2969766
## X107 -0.2969766 1.0000000
Berikut syntax menghitung IQR
q.Eksplor <- sapply(Eksplor,quantile,probs=c(.25,.75))
q.Eksplor["75%",] - q.Eksplor["25%",]
## X106 X107
## 2.79745 1.32750
Kita juga dapat mengamati data Eksplor dalam scatter-plot
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.1.2
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
Eksplor %>% plot( main = "Grafik Hubungan Populasi dengan Real GDP per Cap",
xlab = "Population (%, 5Y av. gr.)", ylab =" Real GDP per cap. (%, 5Y av. gr.)", col='Dark Blue')
Berdasarkan grafik hubungan data populasi dengan real GDP per cap, data tersebut berkorelasi lemah. Artinya, data populasi dengan data real GDP per cap kurang saling berhubungan. Selain itu, kedua data berkorelasi negatif yang berarti semakin banyak nilai populasi, maka semakin sedikit nilai real GDP per cap. Begitupula, sebaliknya.
Histogram merupakan representasi grafis (diagram) yang mengatur dan menampilkan frekuensi data pada rentang tertentu. Dengan menggunakan histogram, kita dapat menganalisis karakteristik dari data tersebut. Berikut Syntax R membuat histogram dari data pertumbuhan rata-rata real QDP dalam 5 tahun terakhir.
DataPrak$X3 <- as.numeric(DataPrak$X3)
## Warning: NAs introduced by coercion
hist (DataPrak$X3,
main = 'Histogram Rataan Peningkatan GDP Real Lima Tahun Terakhir',
ylab = 'Frekuensi', xlab = 'Avg Real GDP growth',
col = 'green',
breaks = seq(min(DataPrak$X3,na.rm = TRUE), max(DataPrak$X3,na.rm = TRUE), length.out = 21+1))
abline(v=median(DataPrak$X3,na.rm = TRUE),col="coral",lwd=2)
abline(v=mean(DataPrak$X3,na.rm = TRUE), col="blue", lwd=5)
Berdasarkan grafik histogram tersebut, data mengenai pertumbuhan rata-rata real GDP dalam 5 tahun terakhir merupakan data yang cenderung menjulur ke kanan (skew-to-right-distribution) karena nilai mean > median. Insight yang didapat dari data ini ialah sebagian besar negara dari 117 negara memiliki rataan peningkatan GDP real 5 tahun terakhir yang cukup rendah. Namun, beberapa negara masih memiliki rataan peningkatan GDP real yang tinggi.
Boxplot merupakan penyajian grafis suatu data kuantitatif yang dibentuk berdasarkan five-number summary.Boxplot digunakan untuk mendeskripsikan bentuk dari sebaran data secara kasar dan untuk mendeteksi adanya pencilan (outliers).
Berikut contoh pembuatan boxplot di R dari data pertumbuhan rata-rata real QDP dalam 5 tahun terakhir.
boxplot(DataPrak$X3,
main = "Rataan Peningkatan GDP Real Lima Tahun Terakhir", col = 'light green')
Kita juga dapat membandingkan dua buah data pada objek Eksplor dengan menggunakan boxplot.
boxplot(Eksplor, col =c('Pink','orange'), ylim =c(-10,10), xaxt='n',
main = 'Boxplot Data Rel GDP per Cap dengan Population')
axis(1, at = 1:2, labels = c('Real GDP per cap. (%, 5Y av. gr.)','Population (%, 5Y av. gr.)'))
abline(h=0, lty = 'dashed', col = 'Green')
Berdasarkan grafik boxplot di atas, kedua data mengenai real GDP per cap dengan populasi merupakan data yang menjulur ke kanan. Data populasi memiliiki nilai yang lebih tinggi daripada data real GDP per cap. Namun, data pertumbuhan rata-rata real GDP per cap lebih bervariatif karena keragamannya lebih besar daripada data populasi. Kedua data mengindikasikan memiliki pencilan/outlier.
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.1.2
ggplot(data = DataPrak, mapping = aes(y = X3,),na.rm=T) + geom_boxplot(fill='green', col='orange') + theme_dark()
## Warning: Removed 1 rows containing non-finite values (stat_boxplot).
QQ-Plot/Plot kuantil merupakan grafik yang membandingkan antara nilai-nilai kuantil dari sebaran suatu data terhadap kuantil-kuantil milik sebaran lain. Jika kedua sebaran berbentuk sama/hampir sama, maka tiap nilai amatannya akan berada di suatu garis lurus. Plot ini dapat digunakan untuk mencari tahu sebaran teoretis yang paling mendekati sebaran suatu data secara visual.
Dengan memanfaatkan QQ-Plot, kita dapat menduga sebaran teoritis yang mendekati sebaran data pertumbuhan rata-rata real QDP dalam 5 tahun terakhir, sebagai berikut :
DataPrak$X3 <- as.numeric(DataPrak$X3,na.rm=T)
hist (DataPrak$X3,
main = 'Histogram Rataan Peningkatan GDP Real Lima Tahun Terakhir',
ylab = 'Frekuensi', xlab = 'Avg Real GDP growth',
col = 'green',
breaks = seq(min(DataPrak$X3,na.rm = TRUE), max(DataPrak$X3,na.rm = TRUE), length.out = 20))
abline(v=median(DataPrak$X3,na.rm = TRUE),col="coral",lwd=2)
abline(v=mean(DataPrak$X3,na.rm = TRUE), col="blue", lwd=5)
qqnorm(DataPrak$X3, cex = 1)
qqline(DataPrak$X3, distribution = qnorm,
col = "red", lty = "dashed", lwd = 1)
hist(DataPrak$X3, breaks = 20,
freq = F, xlim = c(-15, 15), border = "orange",
col = "skyblue", main = "DataPrak$X3 vs normal")
curve(dnorm(x, mean = mean(DataPrak$X3,na.rm=T),
sd = sd(DataPrak$X3,na.rm=T)),
from = -15, to = 20, add = T,lwd = 1)
Berdasarkan grafik QQ-plot: sebaran normal, data tersebut cenderung menyebar normal karena data masih dalam cakupan garis teoritis ataupun dibawahnya, walaupun beberapa data masih berindikasi menjadi pencilan/outlier.
qqplot(rlnorm(n = length(DataPrak$X3),
meanlog = mean(log(DataPrak$X3),
na.rm =T),
sdlog = sd(log(DataPrak$X3),
na.rm=T)), DataPrak$X3)
## Warning in log(DataPrak$X3): NaNs produced
## Warning in log(DataPrak$X3): NaNs produced
qqline(distribution = function(p)
qlnorm(p, meanlog =
mean(log(DataPrak$X3),na.rm=T),
sdlog = sd(log(DataPrak$X3),
na.rm=T)), DataPrak$X3,
col = "orange")
## Warning in log(DataPrak$X3): NaNs produced
## Warning in log(DataPrak$X3): NaNs produced
hist(DataPrak$X3, breaks = 20,
freq = F, xlim = c(-15, 15),
border = "Green",col = "Yellow",
main = "Sebaran data Avg Real QDP vs lognormal")
curve(dlnorm(x, meanlog =
mean(log(DataPrak$X3),na.rm=T),
sdlog = sd(log(DataPrak$X3),
na.rm=T)), from = -15, to = 15,
add = T, lwd = 1, col='Blue')
## Warning in log(DataPrak$X3): NaNs produced
## Warning in log(DataPrak$X3): NaNs produced
Berdasarkan grafik QQ-Plot : sebaran lognormal, data relatif sedikit yang berada pada garis teoritis dan data relatif banyak yang menyimpang dari garis teoritis sehingga data tersebut dapat disimpulkan tidak menyebar secara lognormal.
qqplot(rchisq(n = length(DataPrak$X3),
df = mean(DataPrak$X3,na.rm = T)),
DataPrak$X3, col='Dark Blue')
qqline(distribution = function(p)
qchisq(p, df = mean(DataPrak$X3,na.rm = T)),
DataPrak$X3, col = "red")
hist(DataPrak$X3, breaks = 20, freq = F,
xlim = c(-15, 15), border = "Red",
col = "skyblue", main = "Sebaran data Avg Real QDP vs Chi-sq")
curve(dchisq(x, df = mean(DataPrak$X3,na.rm=T)),
from = -15, to = 15, add = T, lwd = 1)
Berdasarkan grafik QQ-plot: sebaran chi-square, data tersebut cenderung tidak menyebar chi-square karena data relatif banyak yang tidak dalam cakupan garis teoritis ataupun dibawahnya, sedangkan data relatif sedikit yang berada dalam cakupan garis teoritis.
qqplot(rexp(n = length(DataPrak$X3),
rate = 1/mean(DataPrak$X3,na.rm = T)),
DataPrak$X3, col='Orange')
qqline(distribution = function(p)
qexp(p, rate = 1/mean(DataPrak$X3,na.rm=T)),
DataPrak$X3, col = "Dark Blue")
hist(DataPrak$X3, breaks = 20, freq = F,
xlim = c(-15, 15), border = "Yellow",
col = "Dark Green",
main = "Sebaran data Avg Real QDP vs Exponential")
curve(dexp(x, rate = 1/mean(DataPrak$X3,na.rm=T)),
from = -15, to = 15, add = T, lwd = 1)
Berdasarkan grafik QQ-Plot : sebaran exponential, data relatif sedikit yang berada pada garis teoritis dan data relatif banyak yang menyimpang dari garis teoritis sehingga data tersebut dapat disimpulkan tidak menyebar secara exponential.
Dari keempat sebaran teoritis ini, kita melihat bahwa sebaran normal merupakan sebaran teoritis yang paling dekat dengan sebaran data pertumbuhan rata-rata real QDP dalam 5 tahun terakhir. Jadi, dapat disimpulkan data mengenai peningkatan rataan GDP selama 5 tahun terakhir untuk 117 negara cenderung menyebar normal. Insight yang dapat kita peroleh ialah proporsi peningkatan rataan GDP selama 5 tahun terakhir antara negara yang tergolong rendah maupun tinggi itu sama dan sebagian negara memiiliki peningkatan rataan GDP tergolong menengah.
Penulis berharap tulisan ini dapat memberikan kebermanfaatan bagi pembaca. Mohon maaf bila ada kekurangannya, semoga dapat menjadi lebih baik lagi. Terima kasih :)