hitung_fungsi_aktuaria <- function() {
cat("HASIL PERHITUNGAN SOAL 1:\n")
cat("\na) Untuk s(x) = -cos(x):\n")
cat(" F(x) = 1 + cos(x)\n")
cat(" f_x(x) = sin(x)\n")
cat(" μ_x = -tan(x)\n")
cat("\nb) Untuk s(x) = e^(-x):\n")
cat(" F(x) = 1 - e^(-x)\n")
cat(" f_x(x) = e^(-x)\n")
cat(" μ_x = 1\n")
cat("\nc) Untuk s(x) = 1/(1+x):\n")
cat(" F(x) = x/(1+x)\n")
cat(" f_x(x) = 1/(1+x)²\n")
cat(" μ_x = 1/(1+x)\n")
}
B <- 0.0001 # Parameter dasar Gompertz
C <- 1.09 # Parameter peningkatan Gompertz
populasi_awal <- 1000000 # Jumlah penduduk awal
umur_maksimum <- 60 # Umur maksimum yang diperhitungkan
umur <- 0:umur_maksimum
mu_x <- B * C^umur # Force of mortality
p_x <- exp(-mu_x) # Probabilitas bertahan hidup 1 tahun
q_x <- 1 - p_x # Probabilitas kematian dalam 1 tahun
l_x <- numeric(length(umur)) # Jumlah orang yang hidup pada umur x
l_x[1] <- populasi_awal # Jumlah penduduk awal pada umur 0
d_x <- numeric(length(umur)) # Jumlah kematian antara umur x dan x+1
for (i in 1:(length(umur)-1)) {
d_x[i] <- l_x[i] * q_x[i] # Jumlah kematian antara umur x dan x+1
l_x[i+1] <- l_x[i] - d_x[i] # Jumlah orang yang bertahan hidup sampai umur x+1
}
d_x[length(umur)] <- l_x[length(umur)] # Semua orang tersisa meninggal setelah umur maksimum
tabel_hidup <- data.frame(
x = umur, # Umur
mu_x = mu_x, # Force of mortality
p_x = p_x, # Probabilitas bertahan hidup 1 tahun
q_x = q_x, # Probabilitas kematian dalam 1 tahun
l_x = l_x, # Jumlah orang yang hidup pada umur x
d_x = d_x # Jumlah kematian antara umur x dan x+1
)
print(tabel_hidup)
## x mu_x p_x q_x l_x d_x
## 1 0 0.0001000000 0.9999000 0.0000999950 1000000.0 99.9950
## 2 1 0.0001090000 0.9998910 0.0001089941 999900.0 108.9832
## 3 2 0.0001188100 0.9998812 0.0001188029 999791.0 118.7781
## 4 3 0.0001295029 0.9998705 0.0001294945 999672.2 129.4521
## 5 4 0.0001411582 0.9998589 0.0001411482 999542.8 141.0837
## 6 5 0.0001538624 0.9998461 0.0001538506 999401.7 153.7585
## 7 6 0.0001677100 0.9998323 0.0001676959 999247.9 167.5698
## 8 7 0.0001828039 0.9998172 0.0001827872 999080.4 182.6191
## 9 8 0.0001992563 0.9998008 0.0001992364 998897.8 199.0168
## 10 9 0.0002171893 0.9997828 0.0002171657 998698.7 216.8832
## 11 10 0.0002367364 0.9997633 0.0002367083 998481.9 236.3490
## 12 11 0.0002580426 0.9997420 0.0002580094 998245.5 257.5567
## 13 12 0.0002812665 0.9997188 0.0002812269 997988.0 280.6611
## 14 13 0.0003065805 0.9996935 0.0003065335 997707.3 305.8307
## 15 14 0.0003341727 0.9996659 0.0003341169 997401.5 333.2487
## 16 15 0.0003642482 0.9996358 0.0003641819 997068.2 363.1142
## 17 16 0.0003970306 0.9996030 0.0003969518 996705.1 395.6439
## 18 17 0.0004327633 0.9995673 0.0004326697 996309.5 431.0729
## 19 18 0.0004717120 0.9995284 0.0004716008 995878.4 469.6570
## 20 19 0.0005141661 0.9994860 0.0005140340 995408.7 511.6739
## 21 20 0.0005604411 0.9994397 0.0005602841 994897.1 557.4250
## 22 21 0.0006108808 0.9993893 0.0006106942 994339.6 607.2375
## 23 22 0.0006658600 0.9993344 0.0006656384 993732.4 661.4664
## 24 23 0.0007257874 0.9992745 0.0007255241 993070.9 720.4969
## 25 24 0.0007911083 0.9992092 0.0007907955 992350.4 784.7462
## 26 25 0.0008623081 0.9991381 0.0008619364 991565.7 854.6665
## 27 26 0.0009399158 0.9990605 0.0009394742 990711.0 930.7474
## 28 27 0.0010245082 0.9989760 0.0010239836 989780.3 1013.5187
## 29 28 0.0011167140 0.9988839 0.0011160907 988766.7 1103.5533
## 30 29 0.0012172182 0.9987835 0.0012164777 987663.2 1201.4702
## 31 30 0.0013267678 0.9986741 0.0013258881 986461.7 1307.9378
## 32 31 0.0014461770 0.9985549 0.0014451317 985153.8 1423.6770
## 33 32 0.0015763329 0.9984249 0.0015750911 983730.1 1549.4646
## 34 33 0.0017182028 0.9982833 0.0017167276 982180.6 1686.1366
## 35 34 0.0018728411 0.9981289 0.0018710884 980494.5 1834.5919
## 36 35 0.0020413968 0.9979607 0.0020393146 978659.9 1995.7954
## 37 36 0.0022251225 0.9977774 0.0022226488 976664.1 2170.7813
## 38 37 0.0024253835 0.9975776 0.0024224447 974493.3 2360.6562
## 39 38 0.0026436680 0.9973598 0.0026401766 972132.7 2566.6020
## 40 39 0.0028815982 0.9971225 0.0028774504 969566.1 2789.8783
## 41 40 0.0031409420 0.9968640 0.0031360144 966776.2 3031.8241
## 42 41 0.0034236268 0.9965822 0.0034177729 963744.4 3293.8594
## 43 42 0.0037317532 0.9962752 0.0037247989 960450.5 3577.4850
## 44 43 0.0040676110 0.9959407 0.0040593495 956873.0 3884.2820
## 45 44 0.0044336960 0.9955761 0.0044238817 952988.8 4215.9095
## 46 45 0.0048327286 0.9951789 0.0048210698 948772.8 4574.1001
## 47 46 0.0052676742 0.9947462 0.0052538243 944198.7 4960.6543
## 48 47 0.0057417649 0.9942747 0.0057253124 939238.1 5377.4315
## 49 48 0.0062585237 0.9937610 0.0062389799 933860.7 5826.3379
## 50 49 0.0068217908 0.9932014 0.0067985752 928034.3 6309.3111
## 51 50 0.0074357520 0.9925918 0.0074081752 921725.0 6828.3003
## 52 51 0.0081049697 0.9919278 0.0080722130 914896.7 7385.2411
## 53 52 0.0088344170 0.9912045 0.0087955082 907511.5 7982.0245
## 54 53 0.0096295145 0.9904167 0.0095832992 899529.4 8620.4598
## 55 54 0.0104961708 0.9895587 0.0104412782 890909.0 9302.2285
## 56 55 0.0114408262 0.9886244 0.0113756288 881606.8 10028.8312
## 57 56 0.0124705005 0.9876069 0.0123930660 871577.9 10801.5228
## 58 57 0.0135928456 0.9864991 0.0135008800 860776.4 11621.2389
## 59 58 0.0148162017 0.9852930 0.0147069818 849155.2 12488.5095
## 60 59 0.0161496598 0.9839800 0.0160199532 836666.7 13403.3606
## 61 60 0.0176031292 0.9825509 0.0174490992 823263.3 823263.2910
cat("\nStatistik Ringkas:\n")
##
## Statistik Ringkas:
cat("Total kematian dari umur 0-60:", sum(d_x[1:60]), "\n")
## Total kematian dari umur 0-60: 176736.7
cat("Persentase populasi yang bertahan hingga umur 60:", round(l_x[61]/l_x[1]*100, 2), "%\n")
## Persentase populasi yang bertahan hingga umur 60: 82.33 %
par(mfrow=c(2,2)) # Membagi area plot menjadi 2x2
plot(umur, mu_x, type="l", col="red",
main="Force of Mortality (μ_x)",
xlab="Umur (x)", ylab="μ_x",
lwd=2)
# Plot 2: Probabilitas Kematian dalam 1 Tahun (q_x)
plot(umur, q_x, type="l", col="blue",
main="Probabilitas Kematian (q_x)",
xlab="Umur (x)", ylab="q_x",
lwd=2)
# Plot 3: Jumlah Orang Hidup pada Umur x (l_x)
plot(umur, l_x, type="l", col="green",
main="Jumlah Orang Hidup (l_x)",
xlab="Umur (x)", ylab="l_x",
lwd=2)
# Plot 4: Jumlah Kematian antara Umur x dan x+1 (d_x)
plot(umur, d_x, type="l", col="purple",
main="Kematian per Umur (d_x)",
xlab="Umur (x)", ylab="d_x",
lwd=2)
# SOAL 3: Anuitas Jiwa # Fungsi untuk anuitas jiwa seumur hidup model
kontinu
anuitas_seumur_hidup_kontinu <- function(x, delta) {
integrate(function(t) exp(-delta * t) * (100 - (x + t))/(100 - x),
lower = 0, upper = 100 - x)$value
}
anuitas_seumur_hidup_diskrit <- function(x, delta) {
v <- exp(-delta)
k_max <- 100 - x
sum(sapply(1:k_max, function(k) v^k * (100 - (x + k))/(100 - x)))
}
anuitas_berjangka_kontinu <- function(x, n, delta) {
integrate(function(t) exp(-delta * t) * (100 - (x + t))/(100 - x),
lower = 0, upper = min(n, 100 - x))$value
}
anuitas_berjangka_diskrit <- function(x, n, delta) {
v <- exp(-delta)
k_max <- min(n, 100 - x)
sum(sapply(1:k_max, function(k) v^k * (100 - (x + k))/(100 - x)))
}
anuitas_tertunda_kontinu <- function(x, m, n, delta) {
if (x + m >= 100) return(0) # Jika periode penundaan melebihi harapan hidup
integrate(function(t) exp(-delta * t) * (100 - (x + t))/(100 - x),
lower = m, upper = min(m + n, 100 - x))$value
}
anuitas_tertunda_diskrit <- function(x, m, n, delta) {
v <- exp(-delta)
k_start <- m + 1
k_end <- min(m + n, 100 - x)
if (k_start > k_end) return(0) # Jika periode penundaan melebihi harapan hidup
sum(sapply(k_start:k_end, function(k) v^k * (100 - (x + k))/(100 - x)))
}
anuitas_pasti_kontinu <- function(x, n, delta) {
# Bagian pasti
pasti <- (1 - exp(-delta * n))/delta
# Bagian bersyarat hidup
bersyarat <- anuitas_berjangka_kontinu(x, n, delta)
# Gabungan: ā_x:n¯ = ā_n + (ā_x - ā_x:n)
return(pasti - bersyarat + anuitas_seumur_hidup_kontinu(x, delta))
}
anuitas_pasti_diskrit <- function(x, n, delta) {
v <- exp(-delta)
# Bagian pasti
pasti <- sum(v^(1:n))
# Bagian bersyarat hidup
bersyarat <- anuitas_berjangka_diskrit(x, n, delta)
# Gabungan: a_x:n¯ = a_n + (a_x - a_x:n)
return(pasti - bersyarat + anuitas_seumur_hidup_diskrit(x, delta))
}
hitung_anuitas <- function(delta = 0.05) {
hasil <- list()
# a) Anuitas jiwa seumur hidup untuk umur 45
hasil$a_kontinu_45 <- anuitas_seumur_hidup_kontinu(45, delta)
hasil$a_diskrit_45 <- anuitas_seumur_hidup_diskrit(45, delta)
# b) Anuitas jiwa berjangka 15 tahun untuk umur 45
hasil$b_kontinu_45_15 <- anuitas_berjangka_kontinu(45, 15, delta)
hasil$b_diskrit_45_15 <- anuitas_berjangka_diskrit(45, 15, delta)
# c) Anuitas jiwa berjangka 25 tahun tertunda 5 tahun untuk umur 75
hasil$c_kontinu_75_5_25 <- anuitas_tertunda_kontinu(75, 5, 25, delta)
hasil$c_diskrit_75_5_25 <- anuitas_tertunda_diskrit(75, 5, 25, delta)
# d) Anuitas jiwa berjangka dan pasti 15 tahun untuk umur 55
hasil$d_kontinu_55_15 <- anuitas_pasti_kontinu(55, 15, delta)
hasil$d_diskrit_55_15 <- anuitas_pasti_diskrit(55, 15, delta)
return(hasil)
}
jalankan_semua <- function() {
# Menjalankan dan menampilkan hasil soal 1
hitung_fungsi_aktuaria()
# Menjalankan dan menampilkan hasil soal 2
cat("\n\nHASIL PERHITUNGAN SOAL 2:\n")
print(head(tabel_hidup, 10)) # Tampilkan 10 baris pertama
cat("\n... (tabel lengkap memiliki 61 baris)\n")
# Menjalankan dan menampilkan hasil soal 3
cat("\n\nHASIL PERHITUNGAN SOAL 3:\n")
hasil_anuitas <- hitung_anuitas()
cat("\na) Anuitas jiwa seumur hidup untuk seseorang berusia 45 tahun:\n")
cat(" Model Kontinu: ", hasil_anuitas$a_kontinu_45, "\n")
cat(" Model Diskrit: ", hasil_anuitas$a_diskrit_45, "\n")
cat("\nb) Anuitas jiwa berjangka 15 tahun untuk seseorang berusia 45 tahun:\n")
cat(" Model Kontinu: ", hasil_anuitas$b_kontinu_45_15, "\n")
cat(" Model Diskrit: ", hasil_anuitas$b_diskrit_45_15, "\n")
cat("\nc) Anuitas jiwa berjangka 25 tahun tertunda 5 tahun untuk seseorang berusia 75 tahun:\n")
cat(" Model Kontinu: ", hasil_anuitas$c_kontinu_75_5_25, "\n")
cat(" Model Diskrit: ", hasil_anuitas$c_diskrit_75_5_25, "\n")
cat("\nd) Anuitas jiwa berjangka dan pasti 15 tahun untuk seseorang berusia 55 tahun:\n")
cat(" Model Kontinu: ", hasil_anuitas$d_kontinu_55_15, "\n")
cat(" Model Diskrit: ", hasil_anuitas$d_diskrit_55_15, "\n")
}
jalankan_semua()
## HASIL PERHITUNGAN SOAL 1:
##
## a) Untuk s(x) = -cos(x):
## F(x) = 1 + cos(x)
## f_x(x) = sin(x)
## μ_x = -tan(x)
##
## b) Untuk s(x) = e^(-x):
## F(x) = 1 - e^(-x)
## f_x(x) = e^(-x)
## μ_x = 1
##
## c) Untuk s(x) = 1/(1+x):
## F(x) = x/(1+x)
## f_x(x) = 1/(1+x)²
## μ_x = 1/(1+x)
##
##
## HASIL PERHITUNGAN SOAL 2:
## x mu_x p_x q_x l_x d_x
## 1 0 0.0001000000 0.9999000 0.0000999950 1000000.0 99.9950
## 2 1 0.0001090000 0.9998910 0.0001089941 999900.0 108.9832
## 3 2 0.0001188100 0.9998812 0.0001188029 999791.0 118.7781
## 4 3 0.0001295029 0.9998705 0.0001294945 999672.2 129.4521
## 5 4 0.0001411582 0.9998589 0.0001411482 999542.8 141.0837
## 6 5 0.0001538624 0.9998461 0.0001538506 999401.7 153.7585
## 7 6 0.0001677100 0.9998323 0.0001676959 999247.9 167.5698
## 8 7 0.0001828039 0.9998172 0.0001827872 999080.4 182.6191
## 9 8 0.0001992563 0.9998008 0.0001992364 998897.8 199.0168
## 10 9 0.0002171893 0.9997828 0.0002171657 998698.7 216.8832
##
## ... (tabel lengkap memiliki 61 baris)
##
##
## HASIL PERHITUNGAN SOAL 3:
##
## a) Anuitas jiwa seumur hidup untuk seseorang berusia 45 tahun:
## Model Kontinu: 13.1922
## Model Diskrit: 12.69779
##
## b) Anuitas jiwa berjangka 15 tahun untuk seseorang berusia 45 tahun:
## Model Kontinu: 9.29188
## Model Diskrit: 8.967184
##
## c) Anuitas jiwa berjangka 25 tahun tertunda 5 tahun untuk seseorang berusia 75 tahun:
## Model Kontinu: 4.584077
## Model Diskrit: 4.276793
##
## d) Anuitas jiwa berjangka dan pasti 15 tahun untuk seseorang berusia 55 tahun:
## Model Kontinu: 13.58896
## Model Diskrit: 13.17188