options(repos = c(CRAN = "https://cran.rstudio.com/"))
install.packages(c("tidyverse", "ggplot2", "tibble", "tidyr", "readr","purrr", "dplyr", "stringr", "forcats", "lubridate"))
## Installing packages into 'C:/Users/Asus/AppData/Local/R/win-library/4.3'
## (as 'lib' is unspecified)
## package 'tidyverse' successfully unpacked and MD5 sums checked
## package 'ggplot2' successfully unpacked and MD5 sums checked
## package 'tibble' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'tibble'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problem copying
## C:\Users\Asus\AppData\Local\R\win-library\4.3\00LOCK\tibble\libs\x64\tibble.dll
## to C:\Users\Asus\AppData\Local\R\win-library\4.3\tibble\libs\x64\tibble.dll:
## Permission denied
## Warning: restored 'tibble'
## package 'tidyr' successfully unpacked and MD5 sums checked
## package 'readr' successfully unpacked and MD5 sums checked
## package 'purrr' successfully unpacked and MD5 sums checked
## package 'dplyr' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'dplyr'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problem copying
## C:\Users\Asus\AppData\Local\R\win-library\4.3\00LOCK\dplyr\libs\x64\dplyr.dll
## to C:\Users\Asus\AppData\Local\R\win-library\4.3\dplyr\libs\x64\dplyr.dll:
## Permission denied
## Warning: restored 'dplyr'
## package 'stringr' successfully unpacked and MD5 sums checked
## package 'forcats' successfully unpacked and MD5 sums checked
## package 'lubridate' successfully unpacked and MD5 sums checked
## 
## The downloaded binary packages are in
##  C:\Users\Asus\AppData\Local\Temp\Rtmpg3IAEy\downloaded_packages
#Data yang digunakan
library(dplyr)
library(fivethirtyeight)

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…

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?

summary(college_recent_grads[, c("p25th", "median", "p75th")])
##      p25th           median           p75th       
##  Min.   :18500   Min.   : 22000   Min.   : 22000  
##  1st Qu.:24000   1st Qu.: 33000   1st Qu.: 42000  
##  Median :27000   Median : 36000   Median : 47000  
##  Mean   :29501   Mean   : 40151   Mean   : 51494  
##  3rd Qu.:33000   3rd Qu.: 45000   3rd Qu.: 60000  
##  Max.   :95000   Max.   :110000   Max.   :125000

Jawaban: Kita sering memilih median daripada mean karena untuk menggambarkan pendapatan tipikal suatu kelompok median lebih tahan terhadap outlier karena hanya bergantung pada nilai tengah data dan distribusi yang tidak simetris.Pendapatan biasanya memiliki distribusi miring ke kanan, yang di mana sebagian kecil individu berpenghasilan sangat tinggi dapat menarik mean ke atas, sehingga tidak mencerminkan mayoritas pekerja. Sebaliknya, median menunjukkan titik tengah distribusi, di mana setengah individu berpenghasilan lebih rendah dan setengahnya lebih tinggi, sehingga lebih representatif dan mudah diinterpretasikan. Sebagai contoh, nilai mean pendapatan median adalah 40.151 sedangkan median pendapatan median adalah 30.600. Jika ada beberapa individu dengan pendapatan sangat tinggi (misalnya, mendekati nilai maksimum 110.000), mean akan terdorong ke atas, tetapi median tetap stabil karena hanya bergantung pada nilai tengah data. Hal ini menunjukkan bahwa median lebih mencerminkan pendapatan “tipikal” dibandingkan mean yang bisa dipengaruhi oleh segelintir individu dengan gaji tinggi (menyebabkan outlier).

Exercise 2

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

library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.3.3
library(dplyr)
library(scales)
## Warning: package 'scales' was built under R version 4.3.3
data("college_recent_grads")
stem_majors <- college_recent_grads %>%
  filter(major_category %in% c("Biology & Life Science", "Computers & Mathematics", 
                               "Engineering", "Physical Sciences"),
         employed_fulltime_yearround > 0) %>%  
  filter(!is.na(median), median >= 20000, median <= 100000)  
ggplot(stem_majors, aes(x = median, fill = major_category)) +
  geom_histogram(binwidth = 5000, color = "white", alpha = 0.7) +
  facet_wrap(~ major_category, scales = "free_y", ncol = 1) +  # Mengatur agar berbaris ke bawah
  scale_x_continuous(labels = scales::label_dollar()) +
  labs(title = "Median earnings of full-time, year-round workers",
       subtitle = "For STEM majors",
       x = "Median earnings",
       y = "Frequency") +
  theme_minimal()

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.

data("college_recent_grads")
stem_majors <- college_recent_grads %>%
  filter(major_category %in% c("Biology & Life Science", "Computers & Mathematics", 
                               "Engineering", "Physical Sciences"),
         employed_fulltime_yearround > 0) %>%  
  filter(!is.na(median), median >= 20000, median <= 100000)  
ggplot(stem_majors, aes(x = median, fill = major_category)) +
  geom_histogram(binwidth = 1000, color = "white", alpha = 0.9) +
  facet_wrap(~ major_category, scales = "free_y", ncol = 1) +  
  scale_x_continuous(labels = scales::label_dollar()) +
  labs(title = "Median earnings of full-time, year-round workers",
       subtitle = "For STEM majors",
       x = "Median earnings",
       y = "Frequency") +
  theme_minimal()

Jawaban : Lebar bin $1.000 menampilkan detail lebih rinci dalam distribusi pendapatan, tetapi bisa membuat grafik terlihat lumayan kecil sehingga menyebabkan pola cukup sulit untuk dianalisis, sedangkan lebar bin $5.000 lebih menyederhanakan pola sehingga lebih mudah dibaca. Dalam analisis pendapatan, lebar bin $5.000 lebih baik karena memberikan gambaran yang lebih jelas tentang tren umum tanpa terlalu banyak variasi kecil yang bisa membingungkan.

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.

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

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.

ggplot(college_recent_grads, aes(x = total, y = median)) +
  geom_point(alpha = 0.7) +
  geom_smooth(method = "lm", se = FALSE) +
  labs(title = "Total Lulusan vs. Gaji Median",
       x = "Total Lulusan",
       y = "Gaji Median") +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 1 row containing non-finite outside the scale range
## (`stat_smooth()`).
## Warning: Removed 1 row containing missing values or values outside the scale range
## (`geom_point()`).

Scatter plot tersebut menunjukkan bahwa semakin banyak lulusan dari suatu jurusan, gaji median mereka cenderung tidak meningkat, bahkan sedikit menurun, mungkin karena persaingan kerja yang tinggi. Selain itu, terdapat outlier, yaitu jurusan dengan gaji sangat tinggi atau sangat rendah dibandingkan kebanyakan jurusan lainnya. Outlier ini bisa disebabkan oleh faktor seperti permintaan kerja yang sangat tinggi untuk jurusan tertentu atau jurusan dengan prospek karier yang terbatas dan faktor lainnya.