library(lifecontingencies) ####################### # funzioni attuariali # ####################### # creare una tavola di mortalita' direttamente assegnando gli lx x_example <- seq(from = 0, to = 9, by = 1) lx_example <- c(1000, 950, 850, 700, 680, 600, 550, 400, 200, 50) # oggetto di classe "lifetable" (di tipo S4) exampleLt <- new(Class = "lifetable", x = x_example, lx = lx_example, name = "esempio Lt") str(exampleLt) # come estrarre "x" e "lx"? exampleLt@lx # convertire in un data.frame as(exampleLt, "data.frame") print(exampleLt) plot(exampleLt, type = "b") # creare una tavola di mortalita' da un data.frame - diversi disponibili nel pacchetto "lifecontingencies" # AF92Lt - UK AF92 life table. # AM92Lt - UK AF92 life table. # de_angelis_di_falco - List containing ten data frames showing projected mortality rates for healty and disabled people. Taken from De Angelis, Paolo and Di Falco, L. (2016). # demoChina - China mortality rates from SOA website. # demoIta - Various Italian life tables including RG48 and IPS55 projected tables. # demoJapan - Japan mortality rates from SOA website. # demoUsa - US Social Security life tables. # demoFrance - 1990 and 2002 French life tables. # demoCanada - UP94 (standard, 2015, 2020) mortality rates for males and females. # soa08 - SOA illustrative life table. # soa08Act - SOA illustrative actuarial table at 6%. data("demoUsa") usaMale07 <- demoUsa[, c("age", "USSS2007M")] names(usaMale07) <- c("x", "lx") usaMale07Lt <- as(usaMale07, "lifetable") usaMale07Lt@name <- "USA MALES 2007" head(usaMale07Lt) print(usaMale07Lt) summary(usaMale07Lt) str(usaMale07Lt) # creare una tavola di mortalita' da una sequenza di prob. di sopravvivenza o morte annue con la funzione "probs2lifetable" usaMale07 <- as(usaMale07Lt, "data.frame") # aggiungere una colonna di prob di morte annue usaMale07$qx <- 1 - usaMale07$px # ridurre al 20% del loro valore originale le qx tra eta' 20 e 60 usaMale07$qx[21:61] <- 0.2 * usaMale07$qx[21:61] usaMale07Lt_reduced <- probs2lifetable(probs = usaMale07$qx, radix = 10000, type = "qx", name = "USAMALE07 reduced") summary(usaMale07Lt) # da una tavola di mortalita' si puo' creare un oggetto "actuarialtable" (di tipo S4) usaMale07Act <- new(Class = "actuarialtable", x = usaMale07Lt@x, lx = usaMale07Lt@lx, interest = 0.03, name = "esempio actuarial table") # funzioni di commutazione print(usaMale07Act) # plot lx # eta' estrema di un oggetto "lifetable" o "actuarialtable" # convertire in un data.frame # calcolare quantita' varie # tpx # pxt(object, x, t, fractional = "linear", decrement) pxt(object = usaMale07Act, x = 20, t = 10) + qxt(object = usaMale07Act, x = 20, t = 10) exn(object = usaMale07Act, x = 20) # probabilita' "frazionarie" pxt(object = usaMale07Act, x = 20, t = 10.5, fractional = "linear") #UDD pxt(object = usaMale07Act, x = 20, t = 10.5, fractional = "hyperbolic") #Balducci pxt(object = usaMale07Act, x = 20, t = 10.5, fractional = "constant force") #CFM # valori attuariali di diverse forme tradizionali possono essere calcolati partendo da un oggetto "actuarial table" # Axn temporanea caso morte / vita intera # Exn capitale differito # AExn mista # axn rendita vitalizia temporanea / vita intera # Iaxn rendita vitalizia crescente # IAxn, DAxn temporanea caso morte capitale crescente / decrescente # parametro "i" per bypassare quello indicato in "Actuarial table" U <- 10000 * AExn(actuarialtable = usaMale07Act, x = 25, n = 40, k = 12) # U = premio periodico * axn U / axn(actuarialtable = usaMale07Act, x = 25, n = 40, k = 12, payment = "immediate") # simulare da una tavola di mortalita rLife(n = 100, object = usaMale07Act, x = 20, k = 12)