library(lifecontingencies)
## Warning: package 'lifecontingencies' was built under R version 4.5.2
## Package:  lifecontingencies
## Authors:  Giorgio Alfredo Spedicato [aut, cre] (ORCID:
##     <https://orcid.org/0000-0002-0315-8888>),
##   Christophe Dutang [ctb] (ORCID:
##     <https://orcid.org/0000-0001-6732-1501>),
##   Reinhold Kainhofer [ctb] (ORCID:
##     <https://orcid.org/0000-0002-7895-1311>),
##   Kevin J Owens [ctb],
##   Ernesto Schirmacher [ctb],
##   Gian Paolo Clemente [ctb] (ORCID:
##     <https://orcid.org/0000-0001-6795-4595>),
##   Ivan Williams [ctb]
## Version:  1.4.4
## Date:     2025-11-27 22:40:02 UTC
## BugReport: https://github.com/spedygiorgio/lifecontingencies/issues
library(knitr)
## Warning: package 'knitr' was built under R version 4.5.2
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.5.2
library(tidyr)
# Input Data 
usia_korban_meninggal <- c(27, 31, 52, 19, 23, 48, 20, 29, 25, 32, 63, 39, 35, 25, 26, 37)

jumlah_korban_meninggal <- length(usia_korban_meninggal)
jumlah_korban_meninggal
## [1] 16
# Asumsi 12 dari 16 korban adalah pekerja (mendapat BPJS TK), 4 non-pekerja (pelajar/mahasiswa/ibu rumah tangga/lansia), sebelum insiden terjadi
status_pekerja <- c(TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE)

status_pekerja
##  [1]  TRUE  TRUE FALSE FALSE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE FALSE  TRUE
## [13]  TRUE  TRUE  TRUE  TRUE
# Parameter Aktuaria (Asumsi)
pendapatan_tahunan_rata2 <- 72000000 # Misal 6 jt/bulan = 72 jt/tahun
pendapatan_tahunan_rata2
## [1] 7.2e+07
usia_pensiun <- 59
usia_pensiun
## [1] 59
bunga <- 0.05 # 5%
bunga
## [1] 0.05
usia_tmi <- 0:111

qx_tmi_perempuan <- c(
  0.00184, 0.00039, 0.00030, 0.00024, 0.00021, 0.00018, 0.00017, 0.00016, 0.00015, 0.00014,
  0.00015, 0.00018, 0.00022, 0.00027, 0.00031, 0.00035, 0.00038, 0.00041, 0.00043, 0.00045,
  0.00047, 0.00049, 0.00051, 0.00053, 0.00055, 0.00058, 0.00061, 0.00065, 0.00070, 0.00075,
  0.00081, 0.00088, 0.00096, 0.00105, 0.00116, 0.00128, 0.00141, 0.00156, 0.00173, 0.00192,
  0.00213, 0.00237, 0.00264, 0.00295, 0.00330, 0.00369, 0.00413, 0.00462, 0.00517, 0.00578,
  0.00645, 0.00719, 0.00801, 0.00892, 0.00994, 0.01108, 0.01235, 0.01377, 0.01535, 0.01711,
  0.01908, 0.02128, 0.02374, 0.02650, 0.02960, 0.03308, 0.03700, 0.04140, 0.04633, 0.05187,
  0.05809, 0.06505, 0.07283, 0.08154, 0.09126, 0.10210, 0.11414, 0.12749, 0.14224, 0.15849,
  0.17631, 0.19580, 0.21699, 0.23992, 0.26461, 0.29107, 0.31929, 0.34925, 0.38087, 0.41405,
  0.44865, 0.48450, 0.52139, 0.55910, 0.59734, 0.63584, 0.67429, 0.71235, 0.74972, 0.78604,
  0.82100, 0.85429, 0.88561, 1.00000
)

if(length(qx_tmi_perempuan) < length(usia_tmi)) {
  sisa <- length(usia_tmi) - length(qx_tmi_perempuan)
  qx_tmi_perempuan <- c(qx_tmi_perempuan, rep(1.00000, sisa))
}

lx_tmi_perempuan <- numeric(length(usia_tmi))
lx_tmi_perempuan[1] <- 100000 

for(i in 1:(length(usia_tmi)-1)) {
  lx_tmi_perempuan[i+1] <- lx_tmi_perempuan[i] * (1 - qx_tmi_perempuan[i])
}

# Membuat objek tabel_aktuaria baru tanpa mengubah penamaan objek agar sintaks mengalir di bawahnya
tabel_aktuaria <- new("actuarialtable", x=usia_tmi, lx=lx_tmi_perempuan, interest=bunga)
tabel_aktuaria
## Actuarial table  Generic life table interest rate  5 % 
## 
##       x           lx           Dx           Nx           Cx           Mx
## 1     0 1.000000e+05 1.000000e+05 2.012688e+06 1.752381e+02 4.157720e+03
## 2     1 9.981600e+04 9.506286e+04 1.912688e+06 3.530906e+01 3.982482e+03
## 3     2 9.977707e+04 9.050075e+04 1.817625e+06 2.585736e+01 3.947172e+03
## 4     3 9.974714e+04 8.616533e+04 1.727124e+06 1.969493e+01 3.921315e+03
## 5     4 9.972320e+04 8.204252e+04 1.640959e+06 1.640850e+01 3.901620e+03
## 6     5 9.970226e+04 7.811933e+04 1.558916e+06 1.339188e+01 3.885212e+03
## 7     6 9.968431e+04 7.438597e+04 1.480797e+06 1.204344e+01 3.871820e+03
## 8     7 9.966736e+04 7.083174e+04 1.406411e+06 1.079341e+01 3.859776e+03
## 9     8 9.965142e+04 6.744800e+04 1.335579e+06 9.635429e+00 3.848983e+03
## 10    9 9.963647e+04 6.422656e+04 1.268131e+06 8.563541e+00 3.839347e+03
## 11   10 9.962252e+04 6.115959e+04 1.203905e+06 8.737084e+00 3.830784e+03
## 12   11 9.960758e+04 5.823849e+04 1.142745e+06 9.983741e+00 3.822047e+03
## 13   12 9.958965e+04 5.545524e+04 1.084507e+06 1.161919e+01 3.812063e+03
## 14   13 9.956774e+04 5.280290e+04 1.029052e+06 1.357789e+01 3.800444e+03
## 15   14 9.954086e+04 5.027490e+04 9.762486e+05 1.484306e+01 3.786866e+03
## 16   15 9.951000e+04 4.786601e+04 9.259737e+05 1.595534e+01 3.772023e+03
## 17   16 9.947517e+04 4.557072e+04 8.781077e+05 1.649226e+01 3.756068e+03
## 18   17 9.943737e+04 4.338419e+04 8.325370e+05 1.694050e+01 3.739575e+03
## 19   18 9.939660e+04 4.130134e+04 7.891528e+05 1.691388e+01 3.722635e+03
## 20   19 9.935386e+04 3.931770e+04 7.478515e+05 1.685044e+01 3.705721e+03
## 21   20 9.930915e+04 3.742857e+04 7.085338e+05 1.675374e+01 3.688871e+03
## 22   21 9.926247e+04 3.562951e+04 6.711052e+05 1.662710e+01 3.672117e+03
## 23   22 9.921384e+04 3.391624e+04 6.354757e+05 1.647360e+01 3.655490e+03
## 24   23 9.916324e+04 3.228470e+04 6.015595e+05 1.629609e+01 3.639016e+03
## 25   24 9.911068e+04 3.073104e+04 5.692747e+05 1.609721e+01 3.622720e+03
## 26   25 9.905617e+04 2.925156e+04 5.385437e+05 1.615801e+01 3.606623e+03
## 27   26 9.899872e+04 2.784247e+04 5.092921e+05 1.617515e+01 3.590465e+03
## 28   27 9.893833e+04 2.650046e+04 4.814497e+05 1.640505e+01 3.574290e+03
## 29   28 9.887402e+04 2.522213e+04 4.549492e+05 1.681476e+01 3.557885e+03
## 30   29 9.880481e+04 2.400426e+04 4.297271e+05 1.714590e+01 3.541070e+03
## 31   30 9.873070e+04 2.284406e+04 4.057228e+05 1.762256e+01 3.523924e+03
## 32   31 9.865073e+04 2.173862e+04 3.828788e+05 1.821904e+01 3.506301e+03
## 33   32 9.856392e+04 2.068523e+04 3.611401e+05 1.891221e+01 3.488082e+03
## 34   33 9.846930e+04 1.968131e+04 3.404549e+05 1.968131e+01 3.469170e+03
## 35   34 9.836590e+04 1.872442e+04 3.207736e+05 2.068603e+01 3.449489e+03
## 36   35 9.825180e+04 1.781210e+04 3.020492e+05 2.171379e+01 3.428803e+03
## 37   36 9.812604e+04 1.694219e+04 2.842371e+05 2.275094e+01 3.407089e+03
## 38   37 9.798768e+04 1.611267e+04 2.672949e+05 2.393882e+01 3.384338e+03
## 39   38 9.783482e+04 1.532146e+04 2.511822e+05 2.524393e+01 3.360399e+03
## 40   39 9.766556e+04 1.456662e+04 2.358608e+05 2.663611e+01 3.335155e+03
## 41   40 9.747805e+04 1.384634e+04 2.212941e+05 2.808828e+01 3.308519e+03
## 42   41 9.727042e+04 1.315890e+04 2.074478e+05 2.970151e+01 3.280431e+03
## 43   42 9.703989e+04 1.250258e+04 1.942889e+05 3.143506e+01 3.250729e+03
## 44   43 9.678370e+04 1.187579e+04 1.817863e+05 3.336530e+01 3.219294e+03
## 45   44 9.649819e+04 1.127691e+04 1.699105e+05 3.544171e+01 3.185929e+03
## 46   45 9.617975e+04 1.070447e+04 1.586336e+05 3.761857e+01 3.150487e+03
## 47   46 9.582484e+04 1.015711e+04 1.479292e+05 3.995132e+01 3.112869e+03
## 48   47 9.542909e+04 9.633491e+03 1.377720e+05 4.238736e+01 3.072917e+03
## 49   48 9.498820e+04 9.132366e+03 1.281386e+05 4.496603e+01 3.030530e+03
## 50   49 9.449711e+04 8.652526e+03 1.190062e+05 4.763009e+01 2.985564e+03
## 51   50 9.395092e+04 8.192870e+03 1.103537e+05 5.032763e+01 2.937934e+03
## 52   51 9.334494e+04 7.752406e+03 1.021608e+05 5.308552e+01 2.887606e+03
## 53   52 9.267379e+04 7.330158e+03 9.440839e+04 5.591864e+01 2.834521e+03
## 54   53 9.193147e+04 6.925185e+03 8.707823e+04 5.883109e+01 2.778602e+03
## 55   54 9.111144e+04 6.536583e+03 8.015305e+04 6.187965e+01 2.719771e+03
## 56   55 9.020579e+04 6.163437e+03 7.361646e+04 6.503894e+01 2.657891e+03
## 57   56 8.920631e+04 5.804901e+03 6.745303e+04 6.827670e+01 2.592853e+03
## 58   57 8.810462e+04 5.460201e+03 6.164812e+04 7.160663e+01 2.524576e+03
## 59   58 8.689142e+04 5.128585e+03 5.618792e+04 7.497502e+01 2.452969e+03
## 60   59 8.555763e+04 4.809391e+03 5.105934e+04 7.837018e+01 2.377994e+03
## 61   60 8.409374e+04 4.502002e+03 4.624995e+04 8.180782e+01 2.299624e+03
## 62   61 8.248923e+04 4.205814e+03 4.174795e+04 8.523782e+01 2.217816e+03
## 63   62 8.073386e+04 3.920299e+03 3.754213e+04 8.863609e+01 2.132578e+03
## 64   63 7.881724e+04 3.644982e+03 3.362183e+04 9.199240e+01 2.043942e+03
## 65   64 7.672858e+04 3.379419e+03 2.997685e+04 9.526743e+01 1.951950e+03
## 66   65 7.445742e+04 3.123227e+03 2.659743e+04 9.839652e+01 1.856682e+03
## 67   66 7.199437e+04 2.876105e+03 2.347421e+04 1.013485e+02 1.758286e+03
## 68   67 6.933057e+04 2.637799e+03 2.059810e+04 1.040047e+02 1.656937e+03
## 69   68 6.646029e+04 2.408185e+03 1.796030e+04 1.062583e+02 1.552933e+03
## 70   69 6.338118e+04 2.187251e+03 1.555212e+04 1.080502e+02 1.446674e+03
## 71   70 6.009360e+04 1.975046e+03 1.336486e+04 1.092671e+02 1.338624e+03
## 72   71 5.660276e+04 1.771729e+03 1.138982e+04 1.097629e+02 1.229357e+03
## 73   72 5.292075e+04 1.577599e+03 9.618089e+03 1.094252e+02 1.119594e+03
## 74   73 4.906654e+04 1.393050e+03 8.040490e+03 1.081802e+02 1.010169e+03
## 75   74 4.506565e+04 1.218534e+03 6.647440e+03 1.059080e+02 9.019888e+02
## 76   75 4.095296e+04 1.054600e+03 5.428907e+03 1.025473e+02 7.960808e+02
## 77   76 3.677166e+04 9.018338e+02 4.374307e+03 9.803363e+01 6.935335e+02
## 78   77 3.257454e+04 7.608557e+02 3.472473e+03 9.238238e+01 5.954999e+02
## 79   78 2.842162e+04 6.322421e+02 2.711617e+03 8.564773e+01 5.031175e+02
## 80   79 2.437893e+04 5.164876e+02 2.079375e+03 7.796012e+01 4.174698e+02
## 81   80 2.051511e+04 4.139329e+02 1.562887e+03 6.950524e+01 3.395097e+02
## 82   81 1.689809e+04 3.247165e+02 1.148954e+03 6.055190e+01 2.700044e+02
## 83   82 1.358944e+04 2.487019e+02 8.242379e+02 5.139603e+01 2.094525e+02
## 84   83 1.064067e+04 1.854630e+02 5.755359e+02 4.237740e+01 1.580565e+02
## 85   84 8.087761e+03 1.342540e+02 3.900730e+02 3.383328e+01 1.156791e+02
## 86   85 5.947659e+03 9.402766e+01 2.558190e+02 2.606536e+01 8.184580e+01
## 87   86 4.216474e+03 6.348479e+01 1.617913e+02 1.930482e+01 5.578044e+01
## 88   87 2.870196e+03 4.115688e+01 9.830655e+01 1.368956e+01 3.647562e+01
## 89   88 1.867780e+03 2.550747e+01 5.714966e+01 9.252409e+00 2.278606e+01
## 90   89 1.156399e+03 1.504042e+01 3.164219e+01 5.930938e+00 1.353365e+01
## 91   90 6.775917e+02 8.393270e+00 1.660177e+01 3.586324e+00 7.602709e+00
## 92   91 3.735902e+02 4.407266e+00 8.208505e+00 2.033638e+00 4.016385e+00
## 93   92 1.925857e+02 2.163758e+00 3.801239e+00 1.074440e+00 1.982746e+00
## 94   93 9.217347e+01 9.862820e-01 1.637481e+00 5.251717e-01 9.083067e-01
## 95   94 4.063928e+01 4.141445e-01 6.511991e-01 2.356048e-01 3.831350e-01
## 96   95 1.636381e+01 1.588185e-01 2.370546e-01 9.617443e-02 1.475302e-01
## 97   96 5.959046e+00 5.508128e-02 7.823611e-02 3.537215e-02 5.135575e-02
## 98   97 1.940921e+00 1.708621e-02 2.315482e-02 1.159178e-02 1.598360e-02
## 99   98 5.583059e-01 4.680809e-03 6.068611e-03 3.342187e-03 4.391827e-03
## 100  99 1.397328e-01 1.115727e-03 1.387803e-03 8.352435e-04 1.049641e-03
## 101 100 2.989723e-02 2.273532e-04 2.720760e-04 1.777685e-04 2.143972e-04
## 102 101 5.351604e-03 3.875830e-05 4.472280e-05 3.153413e-05 3.662865e-05
## 103 102 7.797822e-04 5.378545e-06 5.964499e-06 4.536470e-06 5.094522e-06
## 104 103 8.919929e-05 5.859541e-07 5.859541e-07 5.580515e-07 5.580515e-07
##               Rx
## 1   2.346681e+05
## 2   2.305103e+05
## 3   2.265279e+05
## 4   2.225807e+05
## 5   2.186594e+05
## 6   2.147577e+05
## 7   2.108725e+05
## 8   2.070007e+05
## 9   2.031409e+05
## 10  1.992920e+05
## 11  1.954526e+05
## 12  1.916218e+05
## 13  1.877998e+05
## 14  1.839877e+05
## 15  1.801873e+05
## 16  1.764004e+05
## 17  1.726284e+05
## 18  1.688723e+05
## 19  1.651327e+05
## 20  1.614101e+05
## 21  1.577044e+05
## 22  1.540155e+05
## 23  1.503434e+05
## 24  1.466879e+05
## 25  1.430489e+05
## 26  1.394262e+05
## 27  1.358195e+05
## 28  1.322291e+05
## 29  1.286548e+05
## 30  1.250969e+05
## 31  1.215558e+05
## 32  1.180319e+05
## 33  1.145256e+05
## 34  1.110375e+05
## 35  1.075684e+05
## 36  1.041189e+05
## 37  1.006901e+05
## 38  9.728298e+04
## 39  9.389864e+04
## 40  9.053824e+04
## 41  8.720308e+04
## 42  8.389457e+04
## 43  8.061413e+04
## 44  7.736341e+04
## 45  7.414411e+04
## 46  7.095818e+04
## 47  6.780769e+04
## 48  6.469483e+04
## 49  6.162191e+04
## 50  5.859138e+04
## 51  5.560581e+04
## 52  5.266788e+04
## 53  4.978027e+04
## 54  4.694575e+04
## 55  4.416715e+04
## 56  4.144738e+04
## 57  3.878949e+04
## 58  3.619664e+04
## 59  3.367206e+04
## 60  3.121909e+04
## 61  2.884110e+04
## 62  2.654147e+04
## 63  2.432366e+04
## 64  2.219108e+04
## 65  2.014714e+04
## 66  1.819519e+04
## 67  1.633850e+04
## 68  1.458022e+04
## 69  1.292328e+04
## 70  1.137035e+04
## 71  9.923673e+03
## 72  8.585048e+03
## 73  7.355691e+03
## 74  6.236097e+03
## 75  5.225928e+03
## 76  4.323939e+03
## 77  3.527858e+03
## 78  2.834325e+03
## 79  2.238825e+03
## 80  1.735707e+03
## 81  1.318238e+03
## 82  9.787279e+02
## 83  7.087235e+02
## 84  4.992710e+02
## 85  3.412145e+02
## 86  2.255354e+02
## 87  1.436896e+02
## 88  8.790917e+01
## 89  5.143355e+01
## 90  2.864750e+01
## 91  1.511385e+01
## 92  7.511141e+00
## 93  3.494756e+00
## 94  1.512009e+00
## 95  6.037027e-01
## 96  2.205677e-01
## 97  7.303750e-02
## 98  2.168175e-02
## 99  5.698146e-03
## 100 1.306319e-03
## 101 2.566784e-04
## 102 4.228122e-05
## 103 5.652573e-06
## 104 5.580515e-07
df_aktuaria <- data.frame(
  Usia = tabel_aktuaria@x,
  Populasi_Hidup_lx = tabel_aktuaria@lx
)

knitr::kable(
  head(df_aktuaria, 71), 
  col.names = c("Usia (x)", "Jumlah Individu Hidup (lx)"),
  caption = "Tabel Mortalitas Perempuan Indonesia (Sampel Usia 0-70 Tahun)",
  format = "pipe",
  align = "c"
)
Tabel Mortalitas Perempuan Indonesia (Sampel Usia 0-70 Tahun)
Usia (x) Jumlah Individu Hidup (lx)
0 100000.00
1 99816.00
2 99777.07
3 99747.14
4 99723.20
5 99702.26
6 99684.31
7 99667.36
8 99651.42
9 99636.47
10 99622.52
11 99607.58
12 99589.65
13 99567.74
14 99540.86
15 99510.00
16 99475.17
17 99437.37
18 99396.60
19 99353.86
20 99309.15
21 99262.47
22 99213.84
23 99163.24
24 99110.68
25 99056.17
26 98998.72
27 98938.33
28 98874.02
29 98804.81
30 98730.70
31 98650.73
32 98563.92
33 98469.30
34 98365.90
35 98251.80
36 98126.04
37 97987.68
38 97834.82
39 97665.56
40 97478.05
41 97270.42
42 97039.89
43 96783.70
44 96498.19
45 96179.75
46 95824.84
47 95429.09
48 94988.20
49 94497.11
50 93950.92
51 93344.94
52 92673.79
53 91931.47
54 91111.44
55 90205.79
56 89206.31
57 88104.62
58 86891.42
59 85557.63
60 84093.74
61 82489.23
62 80733.86
63 78817.24
64 76728.58
65 74457.42
66 71994.37
67 69330.57
68 66460.29
69 63381.18
70 60093.60
# Fungsi HLV Aktuaria
hitung_hlv_aktuaria <- function(usia, R, w, act_table) {
  n <- w - usia
  if (n <= 0) return(0) # Jika sudah melewati usia pensiun, HLV otomatis 0
  apv <- lifecontingencies::axn(act_table, x = usia, n = n, payment = "due")
  
  return(R * apv)
}

# Fungsi Total Santunan
hitung_santunan <- function(pekerja) {
  santunan_dasar <- 140000000 # JR 50jt + JR Putera/KAI 40jt + Pemprov 50jt
  jkk_beasiswa <- 310000000 + 174000000 # Estimasi tambahan BPJS Ketenagakerjaan
  
  if(pekerja) {
    return(santunan_dasar + jkk_beasiswa)
  } else {
    return(santunan_dasar)
  }
}

# Perhitungan nilai untuk setiap individu
pendapatan_individu <- ifelse(status_pekerja, pendapatan_tahunan_rata2, 0)


set.seed(123)
hlv_akt <- mapply(
  FUN = hitung_hlv_aktuaria, 
  usia = usia_korban_meninggal, 
  R = pendapatan_individu, 
  MoreArgs = list(w = usia_pensiun, act_table = tabel_aktuaria)
)

# Menghitung santunan berdasarkan status kerja
santunan <- sapply(status_pekerja, hitung_santunan)

# Menghitung Protection Gap
gap_kerugian <- pmax(0, hlv_akt - santunan)

# Menyusun Data Frame (dalam Juta Rupiah)
df_hasil <- data.frame(
  No = 1:16,
  Usia = usia_korban_meninggal,
  Status = ifelse(status_pekerja, "Pekerja", "Non-Pekerja"),
  HLV_Aktuaria = round(hlv_akt / 1000000, 1),
  Total_Santunan = round(santunan / 1000000, 1),
  Protection_Gap = round(gap_kerugian / 1000000, 1)
)

total_gap <- sum(gap_kerugian) / 1000000

knitr::kable(df_hasil, 
             caption = "Tabel 1. Valuasi HLV vs Kompensasi (Juta Rp)",
             format = "pipe")
Tabel 1. Valuasi HLV vs Kompensasi (Juta Rp)
No Usia Status HLV_Aktuaria Total_Santunan Protection_Gap
1 27 Pekerja 1169.3 624 545.3
2 31 Pekerja 1099.0 624 475.0
3 52 Non-Pekerja 0.0 140 0.0
4 19 Non-Pekerja 0.0 140 0.0
5 23 Pekerja 1227.7 624 603.7
6 48 Pekerja 607.7 624 0.0
7 20 Non-Pekerja 0.0 140 0.0
8 29 Pekerja 1135.8 624 511.8
9 25 Pekerja 1199.9 624 575.9
10 32 Pekerja 1079.3 624 455.3
11 63 Non-Pekerja 0.0 140 0.0
12 39 Pekerja 913.4 624 289.4
13 35 Pekerja 1014.6 624 390.6
14 25 Pekerja 1199.9 624 575.9
15 26 Pekerja 1185.0 624 561.0
16 37 Pekerja 966.3 624 342.3
total_hlv_idr      <- sum(hlv_akt)
total_santunan_idr <- sum(santunan)
total_gap_idr      <- sum(gap_kerugian)

cat("\n--- RINGKASAN KERUGIAN EKONOMI & SANTUNAN ---\n")
## 
## --- RINGKASAN KERUGIAN EKONOMI & SANTUNAN ---
cat("Total Korban Jiwa              : ", length(usia_korban_meninggal), " orang\n")
## Total Korban Jiwa              :  16  orang
cat("Rata-rata Usia Korban          : ", round(mean(usia_korban_meninggal), 1), " tahun\n")
## Rata-rata Usia Korban          :  33.2  tahun
cat("Total HLV (Kerugian Ekonomi)   : Rp ", formatC(total_hlv_idr, format="f", big.mark=".", decimal.mark=",", digits=0), "\n")
## Total HLV (Kerugian Ekonomi)   : Rp  12.797.884.031
cat("Total Santunan Disalurkan      : Rp ", formatC(total_santunan_idr, format="f", big.mark=".", decimal.mark=",", digits=0), "\n")
## Total Santunan Disalurkan      : Rp  8.048.000.000
cat("Total Protection Gap           : Rp ", formatC(total_gap_idr, format="f", big.mark=".", decimal.mark=",", digits=0), "\n")
## Total Protection Gap           : Rp  5.326.187.887
cat("----------------------------------------------\n")
## ----------------------------------------------
df_long <- data.frame(
  No = rep(1:16, 2),
  Kategori = rep(c("HLV Aktuaria", "Total Santunan"), each = 16),
  Nilai = c(df_hasil$HLV_Aktuaria, df_hasil$Total_Santunan)
)

ggplot2::ggplot(df_long, ggplot2::aes(x = factor(No), y = Nilai, fill = Kategori)) +
  ggplot2::geom_bar(stat = "identity", position = "dodge", width = 0.7) +
  ggplot2::scale_fill_manual(values = c("#E41A1C", "#377EB8")) +
  ggplot2::labs(
    title = "Perbandingan HLV Aktuaria vs Total Santunan per Korban",
    subtitle = "Kereta Commuter Line vs KA Argo Bromo Anggrek (Dalam Juta Rupiah)",
    x = "Nomor Urut Korban",
    y = "Nilai (Juta Rp)",
    fill = "Keterangan"
  ) +
  ggplot2::theme_minimal() +
  ggplot2::theme(plot.title = ggplot2::element_text(face = "bold", size = 14))

df_grafik_usia <- df_hasil[order(df_hasil$Usia), ]

ggplot2::ggplot(df_grafik_usia, ggplot2::aes(x = Usia, y = HLV_Aktuaria)) +
  ggplot2::geom_line(color = "red", linewidth = 1) + 
  ggplot2::geom_point(color = "blue", size = 3) +
  ggplot2::labs(
    title = "Dampak Usia terhadap Nilai Ekonomi yang Hilang (HLV)",
    subtitle = "Semakin muda usia korban, semakin besar potensi pendapatan yang hilang (PV)",
    x = "Usia Korban saat Insiden (Tahun)", 
    y = "Nilai HLV (Juta Rupiah)"
  ) +
  ggplot2::theme_minimal() +
  ggplot2::theme(
    plot.title = ggplot2::element_text(face = "bold", size = 13),
    plot.subtitle = ggplot2::element_text(size = 10, color = "dimgray")
  )