Suatu lembaga keuangan menawarkan sebuah produk investasi dengan ketentuan sebagai berikut: • Nasabah memulai investasi pada usia (𝑢) minimum 25 tahun dan maksimum 40 tahun. • Dana yang disetor (𝐷) konstan per bulannya minimal Rp 100 ribu dan maksimal Rp 1 juta serta harus kelipatan dari Rp 100 ribu. • Bunga investasi (𝑖) konstan sebesar 5% per bulan. • Biaya investasi (𝑏) konstan sebesar Rp 10 ribu setiap akhir bulan sebelum dikenai pajak. • Pajak investasi (𝑝) konstan sebesar 2% setiap akhir bulan dari saldo dana hasil investasi setelah dikurangi biaya investasi. • Ketika nasabah mencapai usia 50 tahun, investasi akan dihentikan dan seluruh dana hasil investasi akan diberikan kepada nasabah. Misalkan 𝐻(𝑡) adalah dana hasil investasi setelah 𝑡 bulan, maka 𝐻(𝑡) = ((𝐻(𝑡 − 1) + 𝐷)(1 + 𝑖) − 𝑏)(1 − 𝑝) dengan 𝐻(0) = 0 dan 𝑡 = 1, 2, …, 12(50 − 𝑢).

  1. Membuat sebuah function dengan nama hinv yang memiliki dua buah mandatory arguments, yaitu u = usia nasabah saat memulai investasi (𝑢) dan D = besarnya setoran dana per bulan (𝐷), serta menghasilkan besarnya dana hasil investasi saat nasabah berusia 50 tahun, yakni 𝐻(12(50 − 𝑢)). Kemudian, gunakan hinv function yang telah dibuat tersebut untuk menghitung besarnya dana hasil investasi saat nasabah berusia 50 tahun apabila
    1. nasabah memulai investasi saat berusia 25 tahun dan menyetorkan dana sebesar Rp 100 ribu per bulan.
    ii.nasabah memulai investasi saat berusia 40 tahun dan menyetorkan dana sebesar Rp 1 juta per bulan.
hinv <- function(u, D) {
  H <- 0
  for (t in 1:(12*(50-u))) {
    H <- ((H + D)*(1 + 0.05) - 10)*(1 - 0.02)
  }
  return(H)
}
  1. Dengan memanfaatkan hinv function yang telah dibuat pada bagian (a), buat sebuah data frame dengan nama hasil yang terdiri atas 16 baris dan 11 kolom serta berisi besarnya dana hasil investasi saat nasabah berusia 50 tahun untuk semua kemungkinan usia nasabah saat memulai investasi (𝑢 = 25, 26, …, 40) dan semua kemungkinan besarnya setoran dana per bulan (𝐷 = Rp 100 ribu, Rp 200 ribu, …, Rp 1 juta). Untuk kolom-kolomnya, beri judul seperti berikut: usia, seratus_ribu, dua_ratus_ribu, tiga_ratus_ribu,empat_ratus_ribu,lima_ratus_ribu, enam_ratus_ribu, tujuh_ratus_ribu, delapan_ratus_ribu, sembilan_ratus_ribu, dan satu_juta. Selanjutnya, Menampilkan dimensi dan seluruh isi data frame tersebut. Terakhir, menuliskan data frame tersebut ke sebuah Excel file dengan nama hasil investasi.xlsx
library(openxlsx)
## Warning: package 'openxlsx' was built under R version 4.2.3
# Create empty data frame
hasil <- data.frame(usia = 25:40)
for (D in seq(100000, 1000000, by = 100000)) {
  colname <- paste0(D/1000, "_ribu")
  hasil[[colname]] <- NA
  for (u in 25:40) {
    H <- hinv(u, D)
    row <- u - 24
    col <- (D/100000) + 1
    hasil[row, col] <- H
  }
}

# Rename columns
colnames(hasil)[-1] <- c("seratus_ribu", "dua_ratus_ribu", "tiga_ratus_ribu", "empat_ratus_ribu", "lima_ratus_ribu", "enam_ratus_ribu", "tujuh_ratus_ribu", "delapan_ratus_ribu", "sembilan_ratus_ribu", "satu_juta")

# Print and save data frame
print(hasil)
##    usia seratus_ribu dua_ratus_ribu tiga_ratus_ribu empat_ratus_ribu
## 1    25  18815101073    37631994231     56448887388      75265780546
## 2    26  13350223699    26701718970     40053214240      53404709510
## 3    27   9472329785    18945561783     28418793781      37892025779
## 4    28   6720564250    13441768615     20162972980      26884177345
## 5    29   4767902902     9536259933     14304616964      19072973995
## 6    30   3382288360     6764898873     10147509386      13530119899
## 7    31   2399051988     4798332479      7197612970       9596893461
## 8    32   1701344413     3402850874      5104357334       6805863795
## 9    33   1206248956     2412612803      3618976651       4825340498
## 10   34    854927686     1709936801      2564945916       3419955031
## 11   35    605629024     1211315733      1817002441       2422689150
## 12   36    428725922      857492678      1286259434       1715026191
## 13   37    303194932      606418742       909642553       1212866363
## 14   38    214117753      428255900       642394047        856532193
## 15   39    150908311      301830995       452753679        603676363
## 16   40    106054694      212119490       318184286        424249082
##    lima_ratus_ribu enam_ratus_ribu tujuh_ratus_ribu delapan_ratus_ribu
## 1      94082673704    112899566862     131716460020       150533353178
## 2      66756204781     80107700051      93459195321       106810690592
## 3      47365257776     56838489774      66311721772        75784953770
## 4      33605381710     40326586075      47047790440        53768994805
## 5      23841331026     28609688057      33378045088        38146402119
## 6      16912730412     20295340925      23677951438        27060561951
## 7      11996173952     14395454443      16794734933        19194015424
## 8       8507370256     10208876717      11910383178        13611889639
## 9       6031704346      7238068193       8444432041         9650795888
## 10      4274964146      5129973261       5984982377         6839991492
## 11      3028375858      3634062567       4239749275         4845435984
## 12      2143792947      2572559704       3001326460         3430093217
## 13      1516090173      1819313984       2122537794         2425761604
## 14      1070670340      1284808487       1498946634         1713084781
## 15       754599047       905521731       1056444415         1207367099
## 16       530313878       636378674        742443470          848508266
##    sembilan_ratus_ribu    satu_juta
## 1         169350246335 188167139493
## 2         120162185862 133513681132
## 3          85258185768  94731417766
## 4          60490199170  67211403535
## 5          42914759150  47683116181
## 6          30443172464  33825782977
## 7          21593295915  23992576406
## 8          15313396100  17014902561
## 9          10857159736  12063523583
## 10          7695000607   8550009722
## 11          5451122693   6056809401
## 12          3858859973   4287626730
## 13          2728985415   3032209225
## 14          1927222928   2141361075
## 15          1358289783   1509212467
## 16           954573061   1060637857
write.xlsx(hasil, "hasil_investasi.xlsx")

Dengan memanfaatkan data frame yang telah dibuat pada bagian (b), kemudian membuat sebuah gabungan bar charts

library(ggplot2)

# Melt data frame to long format
hasil_long <- reshape2::melt(hasil, id.vars = "usia", variable.name = "setoran", value.name = "dana")

# Create bar chart
ggplot(hasil_long, aes(x = usia, y = dana, fill = setoran)) +
  geom_bar(stat = "identity", position = "dodge") +
  scale_fill_manual(values = c("#FF5733", "#FFC300", "#DAF7A6", "#C70039", "#900C3F", "#581845", "#00FFFF", "#FF00FF", "#008000", "#0000FF")) +
  labs(title = "Besarnya Dana Hasil Investasi Saat Nasabah Berusia 50 Tahun",
       x = "Usia Saat Memulai Investasi",
       y = "Dana Hasil Investasi (dalam rupiah)",
       fill = "Setoran per Bulan") +
  scale_y_continuous(labels = scales::comma) +
  theme_classic()