Persiapan Data

Memuat paket yang diperlukan dan membaca dataset.

# Load library
library(tidyverse)
library(scales)
library(glue)
library(fivethirtyeight)
library(viridis)

# Load dataset
data("college_recent_grads", package = "fivethirtyeight")
# Cek struktur data
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…
# Melihat beberapa baris pertama
head(college_recent_grads)
## # A tibble: 6 × 21
##    rank major_code major major_category total sample_size   men women sharewomen
##   <int>      <int> <chr> <chr>          <int>       <int> <int> <int>      <dbl>
## 1     1       2419 Petr… Engineering     2339          36  2057   282      0.121
## 2     2       2416 Mini… Engineering      756           7   679    77      0.102
## 3     3       2415 Meta… Engineering      856           3   725   131      0.153
## 4     4       2417 Nava… Engineering     1258          16  1123   135      0.107
## 5     5       2405 Chem… Engineering    32260         289 21239 11021      0.342
## 6     6       2418 Nucl… Engineering     2573          17  2200   373      0.145
## # ℹ 12 more variables: employed <int>, employed_fulltime <int>,
## #   employed_parttime <int>, employed_fulltime_yearround <int>,
## #   unemployed <int>, unemployment_rate <dbl>, p25th <dbl>, median <dbl>,
## #   p75th <dbl>, college_jobs <int>, non_college_jobs <int>,
## #   low_wage_jobs <int>
# Konversi median ke numerik jika perlu
college_recent_grads <- college_recent_grads %>%
  mutate(median = as.numeric(median))
# Cek ulang struktur
summary(college_recent_grads)
##       rank       major_code      major           major_category    
##  Min.   :  1   Min.   :1100   Length:173         Length:173        
##  1st Qu.: 44   1st Qu.:2403   Class :character   Class :character  
##  Median : 87   Median :3608   Mode  :character   Mode  :character  
##  Mean   : 87   Mean   :3880                                        
##  3rd Qu.:130   3rd Qu.:5503                                        
##  Max.   :173   Max.   :6403                                        
##                                                                    
##      total         sample_size          men             women       
##  Min.   :   124   Min.   :   2.0   Min.   :   119   Min.   :     0  
##  1st Qu.:  4550   1st Qu.:  39.0   1st Qu.:  2178   1st Qu.:  1778  
##  Median : 15104   Median : 130.0   Median :  5434   Median :  8386  
##  Mean   : 39370   Mean   : 356.1   Mean   : 16723   Mean   : 22647  
##  3rd Qu.: 38910   3rd Qu.: 338.0   3rd Qu.: 14631   3rd Qu.: 22554  
##  Max.   :393735   Max.   :4212.0   Max.   :173809   Max.   :307087  
##  NA's   :1                         NA's   :1        NA's   :1       
##    sharewomen        employed      employed_fulltime employed_parttime
##  Min.   :0.0000   Min.   :     0   Min.   :   111    Min.   :     0   
##  1st Qu.:0.3360   1st Qu.:  3608   1st Qu.:  3154    1st Qu.:  1030   
##  Median :0.5340   Median : 11797   Median : 10048    Median :  3299   
##  Mean   :0.5222   Mean   : 31193   Mean   : 26029    Mean   :  8832   
##  3rd Qu.:0.7033   3rd Qu.: 31433   3rd Qu.: 25147    3rd Qu.:  9948   
##  Max.   :0.9690   Max.   :307933   Max.   :251540    Max.   :115172   
##  NA's   :1                                                            
##  employed_fulltime_yearround   unemployed    unemployment_rate     p25th      
##  Min.   :   111              Min.   :    0   Min.   :0.00000   Min.   :18500  
##  1st Qu.:  2453              1st Qu.:  304   1st Qu.:0.05031   1st Qu.:24000  
##  Median :  7413              Median :  893   Median :0.06796   Median :27000  
##  Mean   : 19694              Mean   : 2416   Mean   :0.06819   Mean   :29501  
##  3rd Qu.: 16891              3rd Qu.: 2393   3rd Qu.:0.08756   3rd Qu.:33000  
##  Max.   :199897              Max.   :28169   Max.   :0.17723   Max.   :95000  
##                                                                               
##      median           p75th         college_jobs    non_college_jobs
##  Min.   : 22000   Min.   : 22000   Min.   :     0   Min.   :     0  
##  1st Qu.: 33000   1st Qu.: 42000   1st Qu.:  1675   1st Qu.:  1591  
##  Median : 36000   Median : 47000   Median :  4390   Median :  4595  
##  Mean   : 40151   Mean   : 51494   Mean   : 12323   Mean   : 13284  
##  3rd Qu.: 45000   3rd Qu.: 60000   3rd Qu.: 14444   3rd Qu.: 11783  
##  Max.   :110000   Max.   :125000   Max.   :151643   Max.   :148395  
##                                                                     
##  low_wage_jobs  
##  Min.   :    0  
##  1st Qu.:  340  
##  Median : 1231  
##  Mean   : 3859  
##  3rd Qu.: 3466  
##  Max.   :48207  
## 
# Menambahkan kategori STEM dan Non-STEM
college_recent_grads <- college_recent_grads %>%
  mutate(stem = ifelse(major_category %in% c("Engineering", "Physical Sciences", 
                                             "Biology & Life Science", "Math & Computer Science"), 
                       "STEM", "Non-STEM"))

# Plot perbandingan gaji berdasarkan kategori STEM dan Non-STEM
ggplot(college_recent_grads, aes(x = stem, y = median, fill = stem)) +
  geom_boxplot() +
  scale_y_continuous(labels = scales::dollar_format()) +
  labs(title = "Perbandingan Median Salary: STEM vs. Non-STEM",
       x = "Kategori Jurusan", y = "Median Salary") +
  theme_minimal()

Exercise 1

Ada tiga jenis pendapatan yang dilaporkan dalam data frame ini: p25th, median, dan p75th. Ketiganya masing-masing merujuk pada persentil ke-25, ke-50, dan ke-75 dari distribusi pendapatan individu yang diambil sampelnya untuk suatu jurusan tertentu. Mengapa kita sering memilih median daripada mean untuk menggambarkan pendapatan tipikal suatu kelompok?

Mengapa Menggunakan Median daripada Mean?

pendapatan_summary <- college_recent_grads %>%
  summarise(
    Min = min(median, na.rm = TRUE),
    mean = mean(median, na.rm = TRUE ),
    Q1 = quantile(median, 0.25, na.rm = TRUE),
    Median = median(median, na.rm = TRUE),
    Q3 = quantile(median, 0.75, na.rm = TRUE),
    Max = max(median, na.rm = TRUE)
  )

pendapatan_summary
## # A tibble: 1 × 6
##     Min   mean    Q1 Median    Q3    Max
##   <dbl>  <dbl> <dbl>  <dbl> <dbl>  <dbl>
## 1 22000 40151. 33000  36000 45000 110000
# Plot histogram distribusi pendapatan median
ggplot(college_recent_grads, aes(x = median)) +
  geom_histogram(binwidth = 5000, fill = "#69b3a2", color = "white") +
  geom_vline(xintercept = mean(college_recent_grads$median, na.rm = TRUE), 
             color = "#ff6361", linetype = "dashed") +
  geom_vline(xintercept = median(college_recent_grads$median, na.rm = TRUE), 
             color = "#58508d", linetype = "dashed") +
  annotate("text", x = mean(college_recent_grads$median, na.rm = TRUE) + 3000, y = 15,
           label = "(Mean)", color = "#ff6361", size = 5, hjust = 0) +
  annotate("text", x = median(college_recent_grads$median, na.rm = TRUE) - 3000, y = 13,
           label = "(Median)", color = "#58508d", size = 5, hjust = 1) +
  labs(
    title = "Distribusi Median Pendapatan Lulusan",
    x = "Pendapatan Median (dalam Dollar)",
    y = "Jumlah Jurusan"
  ) +
  theme_minimal()

Kesimpulan: Median lebih sering digunakan daripada mean dalam menggambarkan pendapatan karena lebih tahan terhadap outlier (nilai ekstrem). Mean dapat terdistorsi oleh adanya beberapa jurusan dengan pendapatan yang sangat tinggi atau sangat rendah, sedangkan median lebih mampu mencerminkan kondisi mayoritas lulusan secara lebih akurat.

Exercise 2

Buat ulang visualisasi berikut. Catatan: Lebar bin yang digunakan adalah $5.000. Perhatikan dengan cermat teks dan label pada sumbu.

Histogram Pendapatan Median (Bin $5.000)

# Membuat objek stem_majors
stem_majors <- college_recent_grads %>%
  filter(major_category %in% c("Biology & Life Science", 
                               "Computers & Mathematics", 
                               "Engineering", 
                               "Physical Sciences"))

ggplot(stem_majors, aes(x = median, fill = major_category)) +
  geom_histogram(binwidth = 5000, color = "black") +
  scale_x_continuous(labels = label_dollar()) + 
  facet_wrap(~ major_category, nrow = 4) + 
  labs(
    title = "Distribusi Gaji Median untuk Jurusan STEM",
    subtitle = "Menggunakan Binwidth = $5.000",
    x = "Median Salary ($)",
    y = "Frekuensi"
  ) +
  theme_minimal() +
  theme(legend.position = "none")

Exercise 3

Buat ulang visualisasi dari latihan sebelumnya, kali ini dengan lebar bin sebesar $1.000. Mana yang lebih baik antara $1.000 atau $5.000 sebagai pilihan lebar bin? Jelaskan alasan Anda dalam satu kalimat.

Histogram Pendapatan Median (Bin $1.000)

# Membuat objek stem_majors
stem_majors <- college_recent_grads %>%
  filter(major_category %in% c("Biology & Life Science", 
                               "Computers & Mathematics", 
                               "Engineering", 
                               "Physical Sciences"))

ggplot(stem_majors, aes(x = median, fill = major_category)) +
  geom_histogram(binwidth = 1000, color = "black") +
  scale_x_continuous(labels = label_dollar()) + 
  facet_wrap(~ major_category, nrow = 4) + 
  labs(
    title = "Distribusi Gaji Median untuk Jurusan STEM",
    subtitle = "Menggunakan Binwidth = $51.000",
    x = "Median Salary ($)",
    y = "Frekuensi"
  ) +
  theme_minimal() +
  theme(legend.position = "none")

kesimpulan: Binwidth $1.000 memberikan distribusi yang lebih detail, namun bisa terlalu granular dan membuat analisis lebih sulit. Sementara itu, binwidth $5.000 lebih sering digunakan karena memberikan gambaran yang lebih jelas dan mudah dipahami tentang pola distribusi gaji tanpa kehilangan informasi penting.

Exercise 4

Jurusan STEM mana (yaitu, jurusan dalam kategori “Biology & Life Science”, “Computers & Mathematics”, “Engineering”, dan “Physical Sciences”) yang memiliki gaji median yang sama dengan atau lebih rendah dari median untuk seluruh jurusan (semua jurusan, bukan hanya yang termasuk dalam kategori STEM)? Output Anda hanya boleh menampilkan nama jurusan serta pendapatan median, persentil ke-25, dan persentil ke-75 untuk jurusan tersebut, dan harus diurutkan sehingga jurusan dengan pendapatan median tertinggi berada di bagian atas.

#mencari nilai median dari seluruh jurusan
overall_median <- median(college_recent_grads$median, na.rm = TRUE)

filtered_stem <- stem_majors %>%
  filter(median <= overall_median) %>%
  select(major, median, p25th, p75th) %>%
  arrange(desc(median)) 

#hasil 
print(filtered_stem)
## # 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

Kesimpulan: jurusan-jurusan dalam kategori STEM (yaitu Biology & Life Science, Computers & Mathematics, Engineering, dan Physical Sciences) yang memiliki gaji median lebih rendah atau sama dengan median gaji dari seluruh jurusan yang ada dalam dataset.

Exercise 5

Buatlah sebuah pertanyaan yang menarik bagi Anda yang dapat dijawab menggunakan setidaknya tiga variabel dari dataset, lalu jawab pertanyaan tersebut menggunakan statistik ringkasan dan/atau visualisasi.

Soal Apakah terdapat hubungan antara proporsi lulusan perempuan, tingkat pengangguran, dan gaji median pada jurusan-jurusan kuliah?

college_recent_grads %>%
  summarise(
    rata_share_women = mean(sharewomen, na.rm = TRUE),
    rata_unemployment = mean(unemployment_rate, na.rm = TRUE),
    rata_median_salary = mean(median, na.rm = TRUE)
  )
## # A tibble: 1 × 3
##   rata_share_women rata_unemployment rata_median_salary
##              <dbl>             <dbl>              <dbl>
## 1            0.522            0.0682             40151.
#membersihkan data
college_recent_grads_clean <- college_recent_grads %>%
  filter(!is.na(sharewomen), !is.na(median), !is.na(unemployment_rate))

# lalu gunakan dataset ini untuk plot:
ggplot(college_recent_grads_clean, aes(x = sharewomen, y = median)) +
  geom_point(aes(color = unemployment_rate), alpha = 0.7) +
  scale_color_gradient(low = "blue", high = "red") +
  labs(
    title = "Hubungan antara Proporsi Perempuan, Gaji Median, dan Tingkat Pengangguran",
    x = "Proporsi Lulusan Perempuan",
    y = "Gaji Median ($)",
    color = "Tingkat Pengangguran"
  ) +
  theme_minimal()

Kesimpulan: Jurusan dengan proporsi perempuan yang lebih tinggi cenderung memiliki gaji median yang lebih rendah, Tingkat pengangguran cenderung bervariasi, tetapi ada kecenderungan jurusan dengan gaji rendah juga memiliki pengangguran lebih tinggi, Ini menunjukkan adanya potensi ketimpangan dalam bidang studi tertentu, baik dari sisi gender maupun penghasilan.