#soal nomer 1

# Fungsi s(x)
s1 <- function(x) -cos(x)
s2 <- function(x) exp(-x)
s3 <- function(x) 1 / (1 + x)

# Turunan s(x)
s1_t <- function(x) sin(x)
s2_t <- function(x) -exp(-x)
s3_t <- function(x) -1 / (1 + x)^2

# Fungsi F(x)
F1 <- function(x) 1 - s1(x)
F2 <- function(x) 1 - s2(x)
F3 <- function(x) x / (1 + x)

# Fungsi f(x)
f1 <- function(x) s1_t(x) * (-1)
f2 <- function(x) exp(-x)
f3 <- function(x) 1 / (1 + x)^2

# Fungsi mu(x)
mu1 <- function(x) -s1_t(x) / s1(x)
mu2 <- function(x) 1
mu3 <- function(x) 1 / (1 + x)
# test
x <- 8
cat("jawaban nomer 1a = F1(2) =", F1(x), "f1(2) =", f1(x), "mu1(2) =", mu1(x), "\n")
## jawaban nomer 1a = F1(2) = 0.8545 f1(2) = -0.9893582 mu1(2) = -6.799711
cat("jawaban nomer 1b = F2(2) =", F2(x), "f2(2) =", f2(x), "mu2(2) =", mu2(x), "\n")
## jawaban nomer 1b = F2(2) = 0.9996645 f2(2) = 0.0003354626 mu2(2) = 1
cat("jawaban nomer 1c = F3(2) =", F3(x), "f3(2) =", f3(x), "mu3(2) =", mu3(x), "\n")
## jawaban nomer 1c = F3(2) = 0.8888889 f3(2) = 0.01234568 mu3(2) = 0.1111111

#Soal nomer 2

# Parameter
B <- 0.0001
C <- 1.09
l0 <- 1e6
age <- 0:60

# Fungsi survival l(x)
lx <- function(x) {
  l0 * exp(-B / log(C) * (C^x - 1))
}

# Hitung nilai l(x) untuk setiap umur
lx_vals <- lx(age)

# Hitung d(x) = l(x) - l(x+1)
dx_vals <- c(diff(-lx_vals), lx_vals[length(lx_vals)])

# Hitung q(x) = d(x)/l(x)
qx_vals <- dx_vals / lx_vals
qx_vals[length(qx_vals)] <- 1  # Anggap semua meninggal setelah usia maksimum

# Hitung Lx (jumlah orang yang hidup di antara x dan x+1)
Lx_vals <- (lx_vals + c(lx_vals[-1], 0)) / 2

# Hitung Tx (total tahun yang masih akan dijalani)
Tx_vals <- rev(cumsum(rev(Lx_vals)))

# Hitung ex = Tx / lx
ex_vals <- Tx_vals / lx_vals

# Buat data frame
life_table <- data.frame(
  x = age,
  lx = round(lx_vals),
  dx = round(dx_vals),
  qx = round(qx_vals, 5),
  Lx = round(Lx_vals),
  Tx = round(Tx_vals),
  ex = round(ex_vals, 2)
)

# Tampilkan tabel
print(life_table)
##     x      lx     dx      qx     Lx       Tx    ex
## 1   0 1000000    104 0.00010 999948 58232899 58.23
## 2   1  999896    114 0.00011 999839 57232951 57.24
## 3   2  999782    124 0.00012 999720 56233113 56.25
## 4   3  999658    135 0.00014 999590 55233393 55.25
## 5   4  999523    147 0.00015 999449 54233803 54.26
## 6   5  999375    161 0.00016 999295 53234354 53.27
## 7   6  999215    175 0.00018 999127 52235059 52.28
## 8   7  999040    191 0.00019 998944 51235932 51.29
## 9   8  998849    208 0.00021 998745 50236988 50.29
## 10  9  998641    226 0.00023 998528 49238243 49.31
## 11 10  998415    247 0.00025 998291 48239715 48.32
## 12 11  998168    269 0.00027 998033 47241424 47.33
## 13 12  997899    293 0.00029 997752 46243390 46.34
## 14 13  997606    319 0.00032 997446 45245638 45.35
## 15 14  997286    348 0.00035 997112 44248192 44.37
## 16 15  996938    379 0.00038 996749 43251080 43.38
## 17 16  996559    413 0.00041 996353 42254331 42.40
## 18 17  996146    450 0.00045 995921 41257978 41.42
## 19 18  995696    490 0.00049 995451 40262057 40.44
## 20 19  995206    534 0.00054 994938 39266607 39.46
## 21 20  994671    582 0.00059 994380 38271668 38.48
## 22 21  994089    634 0.00064 993772 37277288 37.50
## 23 22  993455    691 0.00070 993110 36283515 36.52
## 24 23  992765    752 0.00076 992389 35290405 35.55
## 25 24  992012    819 0.00083 991603 34298017 34.57
## 26 25  991193    892 0.00090 990747 33306414 33.60
## 27 26  990301    972 0.00098 989815 32315667 32.63
## 28 27  989329   1058 0.00107 988800 31325852 31.66
## 29 28  988271   1152 0.00117 987695 30337051 30.70
## 30 29  987120   1254 0.00127 986493 29349356 29.73
## 31 30  985866   1365 0.00138 985183 28362863 28.77
## 32 31  984500   1486 0.00151 983758 27377680 27.81
## 33 32  983015   1617 0.00164 982206 26393923 26.85
## 34 33  981398   1759 0.00179 980518 25411716 25.89
## 35 34  979638   1914 0.00195 978681 24431199 24.94
## 36 35  977724   2082 0.00213 976683 23452517 23.99
## 37 36  975642   2265 0.00232 974510 22475834 23.04
## 38 37  973377   2462 0.00253 972146 21501325 22.09
## 39 38  970915   2677 0.00276 969576 20529179 21.14
## 40 39  968238   2909 0.00300 966783 19559603 20.20
## 41 40  965328   3161 0.00327 963748 18592819 19.26
## 42 41  962167   3434 0.00357 960450 17629072 18.32
## 43 42  958733   3729 0.00389 956868 16668622 17.39
## 44 43  955004   4048 0.00424 952980 15711753 16.45
## 45 44  950956   4393 0.00462 948759 14758773 15.52
## 46 45  946563   4765 0.00503 944180 13810014 14.59
## 47 46  941797   5167 0.00549 939214 12865834 13.66
## 48 47  936630   5600 0.00598 933830 11926621 12.73
## 49 48  931031   6065 0.00651 927998 10992790 11.81
## 50 49  924965   6566 0.00710 921682 10064792 10.88
## 51 50  918399   7104 0.00774 914847  9143110  9.96
## 52 51  911295   7681 0.00843 907454  8228264  9.03
## 53 52  903613   8299 0.00918 899464  7320810  8.10
## 54 53  895315   8959 0.01001 890836  6421346  7.17
## 55 54  886356   9663 0.01090 881525  5530510  6.24
## 56 55  876693  10413 0.01188 871487  4648985  5.30
## 57 56  866281  11209 0.01294 860676  3777498  4.36
## 58 57  855072  12053 0.01410 849045  2916822  3.41
## 59 58  843019  12944 0.01535 836547  2067777  2.45
## 60 59  830075  13883 0.01672 823134  1231230  1.48
## 61 60  816192 816192 1.00000 408096   408096  0.50
# Keterangan kolom-kolom pada life table Gompertz
cat("=== Keterangan Life Table Gompertz ===\n\n")
## === Keterangan Life Table Gompertz ===
cat("x  : Umur (dalam tahun)\n")
## x  : Umur (dalam tahun)
cat("lx : Jumlah individu yang masih hidup pada awal umur x\n")
## lx : Jumlah individu yang masih hidup pada awal umur x
cat("dx : Jumlah individu yang meninggal antara umur x dan x+1 (dx = lx - lx+1)\n")
## dx : Jumlah individu yang meninggal antara umur x dan x+1 (dx = lx - lx+1)
cat("qx : Probabilitas meninggal antara umur x dan x+1 (qx = dx / lx)\n")
## qx : Probabilitas meninggal antara umur x dan x+1 (qx = dx / lx)
cat("Lx : Jumlah tahun hidup antara umur x dan x+1 (diasumsikan rata-rata = (lx + lx+1)/2)\n")
## Lx : Jumlah tahun hidup antara umur x dan x+1 (diasumsikan rata-rata = (lx + lx+1)/2)
cat("Tx : Jumlah total tahun yang akan dijalani oleh seluruh individu dari umur x ke atas (Tx = Σ Lx dari x ke akhir)\n")
## Tx : Jumlah total tahun yang akan dijalani oleh seluruh individu dari umur x ke atas (Tx = Σ Lx dari x ke akhir)
cat("ex : Harapan hidup pada umur x (ex = Tx / lx)\n")
## ex : Harapan hidup pada umur x (ex = Tx / lx)

#Soal nomer 3

# PARAMETER DASAR
delta <- 0.05
v <- function(t) exp(-delta * t)
interest_rate <- exp(delta) - 1  # ekuivalen suku bunga tahunan diskrit

lx <- function(x) 100 - x
px <- function(x) ifelse(x < 99, lx(x + 1) / lx(x), 0)

# 3a) Anuitas seumur hidup
a_kontinu <- function(x) {
  integrate(function(t) v(t) * lx(x + t) / lx(x), lower = 0, upper = 100 - x)$value
}

a_diskrit <- function(x) {
  sum(sapply(0:(99 - x), function(k) (1 / (1 + interest_rate))^k * lx(x + k) / lx(x)))
}


# 3b) Anuitas berjangka 15 tahun dari usia 45
a_term_kontinu <- function(x, n) {
  integrate(function(t) v(t) * lx(x + t) / lx(x), lower = 0, upper = n)$value
}

a_term_diskrit <- function(x, n) {
  sum(sapply(0:(n - 1), function(k) (1 / (1 + interest_rate))^k * lx(x + k) / lx(x)))
}

# 3c) Anuitas 25 tahun tertunda 5 tahun dari usia 75
a_deferred_kontinu <- function(x, m, n) {
  integrate(function(t) v(t + m) * lx(x + t + m) / lx(x), lower = 0, upper = n)$value
}

a_deferred_diskrit <- function(x, m, n) {
  sum(sapply(0:(n - 1), function(k) (1 / (1 + interest_rate))^(k + m) * lx(x + k + m) / lx(x)))
}

# 3d) Anuitas pasti dan berjangka 15 tahun dari usia 55
a_term_certain_kontinu <- function(x, n) {
  certain <- integrate(function(t) v(t), lower = 0, upper = n)$value
  life_part <- integrate(function(t) v(t) * lx(x + t) / lx(x), lower = 0, upper = n)$value
  certain + life_part
}

a_term_certain_diskrit <- function(x, n) {
  certain <- sum(sapply(0:(n - 1), function(k) (1 / (1 + interest_rate))^k))
  life_part <- sum(sapply(0:(n - 1), function(k) ((1 / (1 + interest_rate))^k) * (lx(x + k) / lx(x))))
  certain + life_part
}


# CETAK HASIL
cat("=== Hasil Perhitungan Anuitas ===\n\n")
## === Hasil Perhitungan Anuitas ===
# 3a)
cat("3a) Anuitas jiwa seumur hidup (x = 0)\n")
## 3a) Anuitas jiwa seumur hidup (x = 0)
cat("   Model kontinu :", round(a_kontinu(0), 4), "\n")
##    Model kontinu : 16.027
cat("   Model diskrit :", round(a_diskrit(0), 4), "\n\n")
##    Model diskrit : 16.5319
# 3b)
cat("3b) Anuitas 15 tahun (x = 45)\n")
## 3b) Anuitas 15 tahun (x = 45)
cat("   Model kontinu :", round(a_term_kontinu(45, 15), 4), "\n")
##    Model kontinu : 9.2919
cat("   Model diskrit :", round(a_term_diskrit(45, 15), 4), "\n\n")
##    Model diskrit : 9.6236
# 3c)
cat("3c) Anuitas 25 tahun tertunda 5 tahun (x = 75)\n")
## 3c) Anuitas 25 tahun tertunda 5 tahun (x = 75)
cat("   Model kontinu :", round(a_deferred_kontinu(75, 5, 25), 4), "\n")
##    Model kontinu : 4.4626
cat("   Model diskrit :", round(a_deferred_diskrit(75, 5, 25), 4), "\n\n")
##    Model diskrit : 4.8011
# 3d)
cat("3d) Anuitas pasti dan berjangka 15 tahun (x = 55)\n")
## 3d) Anuitas pasti dan berjangka 15 tahun (x = 55)
cat("   Model kontinu :", round(a_term_certain_kontinu(55, 15), 4), "\n")
##    Model kontinu : 19.5644
cat("   Model diskrit :", round(a_term_certain_diskrit(55, 15),4),"\n")
##    Model diskrit : 20.1768