Dokumen ini menganalisis data lulusan perguruan tinggi dengan fokus pada jurusan STEM.
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.3.3
## Warning: package 'ggplot2' was built under R version 4.3.3
## Warning: package 'tibble' was built under R version 4.3.3
## Warning: package 'tidyr' was built under R version 4.3.3
## Warning: package 'readr' was built under R version 4.3.3
## Warning: package 'purrr' was built under R version 4.3.3
## Warning: package 'dplyr' was built under R version 4.3.3
## Warning: package 'stringr' was built under R version 4.3.3
## Warning: package 'forcats' was built under R version 4.3.3
## Warning: package 'lubridate' was built under R version 4.3.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.1 ✔ 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
library(dsbox)
library(scales)
## Warning: package 'scales' was built under R version 4.3.3
##
## Attaching package: 'scales'
##
## The following object is masked from 'package:purrr':
##
## discard
##
## The following object is masked from 'package:readr':
##
## col_factor
library(fivethirtyeight)
## Warning: package 'fivethirtyeight' was built under R version 4.3.3
data("college_recent_grads", package = "fivethirtyeight")
glimpse(college_recent_grads)
## Rows: 173
## Columns: 21
## $ rank <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,…
## $ major_code <int> 2419, 2416, 2415, 2417, 2405, 2418, 6202, …
## $ major <chr> "Petroleum Engineering", "Mining And Miner…
## $ major_category <chr> "Engineering", "Engineering", "Engineering…
## $ total <int> 2339, 756, 856, 1258, 32260, 2573, 3777, 1…
## $ sample_size <int> 36, 7, 3, 16, 289, 17, 51, 10, 1029, 631, …
## $ men <int> 2057, 679, 725, 1123, 21239, 2200, 2110, 8…
## $ women <int> 282, 77, 131, 135, 11021, 373, 1667, 960, …
## $ sharewomen <dbl> 0.1205643, 0.1018519, 0.1530374, 0.1073132…
## $ employed <int> 1976, 640, 648, 758, 25694, 1857, 2912, 15…
## $ employed_fulltime <int> 1849, 556, 558, 1069, 23170, 2038, 2924, 1…
## $ employed_parttime <int> 270, 170, 133, 150, 5180, 264, 296, 553, 1…
## $ employed_fulltime_yearround <int> 1207, 388, 340, 692, 16697, 1449, 2482, 82…
## $ unemployed <int> 37, 85, 16, 40, 1672, 400, 308, 33, 4650, …
## $ unemployment_rate <dbl> 0.018380527, 0.117241379, 0.024096386, 0.0…
## $ p25th <dbl> 95000, 55000, 50000, 43000, 50000, 50000, …
## $ median <dbl> 110000, 75000, 73000, 70000, 65000, 65000,…
## $ p75th <dbl> 125000, 90000, 105000, 80000, 75000, 10200…
## $ college_jobs <int> 1534, 350, 456, 529, 18314, 1142, 1768, 97…
## $ non_college_jobs <int> 364, 257, 176, 102, 4440, 657, 314, 500, 1…
## $ low_wage_jobs <int> 193, 50, 0, 0, 972, 244, 259, 220, 3253, 3…
cat("Median lebih sering digunakan dibandingkan mean untuk menggambarkan pendapatan tipikal suatu kelompok karena median tidak terpengaruh oleh nilai ekstrem atau outlier dalam distribusi pendapatan.\n\n",
"Pendapatan individu sering kali memiliki distribusi yang condong ke kanan (skewed right), di mana ada sejumlah kecil individu dengan pendapatan sangat tinggi yang dapat meningkatkan nilai mean secara signifikan. Akibatnya, mean bisa memberikan gambaran yang tidak akurat tentang pendapatan mayoritas individu dalam kelompok tersebut.\n\n",
"Sebagai contoh:\n",
"- Jika mayoritas individu dalam suatu jurusan memiliki pendapatan sekitar 50.000 USD, tetapi ada beberapa individu dengan pendapatan di atas 300.000 USD, maka 'mean' akan lebih tinggi dari 'median', sehingga menggambarkan kondisi yang lebih optimis daripada kenyataan.\n",
"- Sebaliknya, 'median' (persentil ke-50) menunjukkan nilai tengah dari distribusi pendapatan, yang lebih mencerminkan pendapatan tipikal mayoritas lulusan.\n\n",
"Oleh karena itu, dalam analisis pendapatan, median lebih disukai karena lebih 'robust terhadap outlier' dan lebih representatif untuk mayoritas individu dalam kelompok tersebut."
)
## Median lebih sering digunakan dibandingkan mean untuk menggambarkan pendapatan tipikal suatu kelompok karena median tidak terpengaruh oleh nilai ekstrem atau outlier dalam distribusi pendapatan.
##
## Pendapatan individu sering kali memiliki distribusi yang condong ke kanan (skewed right), di mana ada sejumlah kecil individu dengan pendapatan sangat tinggi yang dapat meningkatkan nilai mean secara signifikan. Akibatnya, mean bisa memberikan gambaran yang tidak akurat tentang pendapatan mayoritas individu dalam kelompok tersebut.
##
## Sebagai contoh:
## - Jika mayoritas individu dalam suatu jurusan memiliki pendapatan sekitar 50.000 USD, tetapi ada beberapa individu dengan pendapatan di atas 300.000 USD, maka 'mean' akan lebih tinggi dari 'median', sehingga menggambarkan kondisi yang lebih optimis daripada kenyataan.
## - Sebaliknya, 'median' (persentil ke-50) menunjukkan nilai tengah dari distribusi pendapatan, yang lebih mencerminkan pendapatan tipikal mayoritas lulusan.
##
## Oleh karena itu, dalam analisis pendapatan, median lebih disukai karena lebih 'robust terhadap outlier' dan lebih representatif untuk mayoritas individu dalam kelompok tersebut.
library(ggplot2)
library(dplyr)
library(scales)
data_stem <- college_recent_grads %>%
filter(major_category %in% c("Biology & Life Science", "Computers & Mathematics", "Engineering", "Physical Sciences"))
ggplot(data_stem, aes(x = median, fill = major_category)) +
geom_histogram(binwidth = 5000, color = "black") +
scale_x_continuous(labels = label_dollar(scale = 1e-3, prefix = "$", suffix = "K")) +
facet_wrap(~ major_category, nrow = 4) +
labs(
title = "Median earnings of full-time, year-round workers",
subtitle = "For STEM majors",
x = "Median earnings",
y = "Frequency"
) +
theme_minimal() +
theme(legend.position = "none")
ggplot(data_stem, aes(x = median, fill = major_category)) +
geom_histogram(binwidth = 1000, color = "black") +
scale_x_continuous(labels = label_dollar(scale = 1e-3, prefix = "$", suffix = "K")) +
facet_wrap(~ major_category, nrow = 4) +
labs(
title = "Median earnings of full-time, year-round workers",
subtitle = "For STEM majors",
x = "Median earnings",
y = "Frequency"
) +
theme_minimal() +
theme(legend.position = "none")
cat("Lebar bin $1.000 memberikan detail yang lebih baik, tetapi dapat menghasilkan terlalu banyak variasi kecil yang membuat pola keseluruhan sulit dianalisis. Sementara itu, lebar bin $5.000 menyajikan data dengan lebih ringkas, sehingga mempermudah identifikasi pola utama dalam distribusi pendapatan.")
## Lebar bin $1.000 memberikan detail yang lebih baik, tetapi dapat menghasilkan terlalu banyak variasi kecil yang membuat pola keseluruhan sulit dianalisis. Sementara itu, lebar bin $5.000 menyajikan data dengan lebih ringkas, sehingga mempermudah identifikasi pola utama dalam distribusi pendapatan.
median_all <- median(college_recent_grads$median, na.rm = TRUE)
stem_low_income <- college_recent_grads %>%
filter(major_category %in% c("Biology & Life Science", "Computers & Mathematics", "Engineering", "Physical Sciences"),
median <= median_all) %>%
arrange(desc(median)) %>%
select(major, median, p25th, p75th)
print(stem_low_income)
## # A tibble: 11 × 4
## major median p25th p75th
## <chr> <dbl> <dbl> <dbl>
## 1 Geosciences 36000 21000 41000
## 2 Environmental Science 35600 25000 40200
## 3 Multi-Disciplinary Or General Science 35000 24000 50000
## 4 Physiology 35000 20000 50000
## 5 Communication Technologies 35000 25000 45000
## 6 Neuroscience 35000 30000 44000
## 7 Atmospheric Sciences And Meteorology 35000 28000 50000
## 8 Miscellaneous Biology 33500 23000 48000
## 9 Biology 33400 24000 45000
## 10 Ecology 33000 23000 42000
## 11 Zoology 26000 20000 39000
summary(data_stem %>% select(median, unemployment_rate, sharewomen))
## median unemployment_rate sharewomen
## Min. : 26000 Min. :0.00000 Min. :0.07745
## 1st Qu.: 37875 1st Qu.:0.04704 1st Qu.:0.21703
## Median : 45000 Median :0.06092 Median :0.33336
## Mean : 47861 Mean :0.06377 Mean :0.36976
## 3rd Qu.: 56250 3rd Qu.:0.08149 3rd Qu.:0.53066
## Max. :110000 Max. :0.17723 Max. :0.75047
ggplot(data_stem, aes(x = reorder(major_category, median), y = median, fill = major_category)) +
geom_bar(stat = "identity") +
coord_flip() +
labs(
title = "Median Gaji pada 4 Jurusan STEM",
x = "Jurusan",
y = "Median Gaji"
) +
theme_minimal() +
theme(legend.position = "none")
ggplot(data_stem, aes(x = reorder(major_category, unemployment_rate), y = unemployment_rate, fill = major_category)) +
geom_bar(stat = "identity") +
coord_flip() +
labs(
title = "Tingkat Pengangguran pada 4 Jurusan STEM",
x = "Jurusan",
y = "Tingkat Pengangguran"
) +
theme_minimal() +
theme(legend.position = "none")
ggplot(data_stem, aes(x = reorder(major_category, sharewomen), y = sharewomen, fill = major_category)) +
geom_bar(stat = "identity") +
coord_flip() +
labs(
title = "Proporsi Perempuan pada 4 Jurusan STEM",
x = "Jurusan",
y = "Proporsi Perempuan"
) +
theme_minimal() +
theme(legend.position = "none")