@@ -25,7 +25,7 @@ setGeneric("rpv",
25
25
# ' @examples
26
26
# ' rpv(object = Insuree(m_ = .5, benefit = c(1,1, 1, 1)), n = 5, benefit_type = "annuity")
27
27
# ' rpv(object = Insuree(x_ = 2, t_ = 3, benefit = c(1, 1, 1, 1), m_ = 0.3), n = 5)
28
- # ' rpv(object = Insuree(x_ = 2.2, t_ = 3.4, benefit = c(1, 1, 1, 1), m_ = 0.3), n = 5)
28
+ # ' rpv(object = Insuree(x_ = 2.2, t_ = 3.4, benefit = c(1, 1, 1, 1), m_ = 0.3), n = 5, benefit_type = "annuity" )
29
29
# ' rpv(object = Insuree(x_ = 2.48, t_ = 3.57, benefit = c(1, 1, 1, 1, 1), m_ = 0), n = 5)
30
30
setMethod ("rpv ", signature("Insuree"), function(object, n, benefit_type = "life") {
31
31
@@ -34,11 +34,13 @@ setMethod("rpv", signature("Insuree"), function(object, n, benefit_type = "life"
34
34
deaths <- rdeath(object , n = n )
35
35
pv <- deaths [[" death_table" ]]
36
36
37
+ # returns vector of discount factors
38
+ discount <- discount(object , x_ = object @ x_ , t_ = object @ t_ , m_ = object @ m_ )
37
39
# convert 1s to 0s if annuity
38
40
if (identical(benefit_type , " annuity" )) {
39
41
# set insuree time of death to t_ + m_ if insuree did not die
40
42
tod <- deaths [[" death_t" ]]
41
- tod [is.na(tod )] <- object @ t_ + object @ m_
43
+ tod [is.na(tod )] <- ceiling( object @ x_ %% 1 + object @ t_ + object @ m_ ) + 1
42
44
43
45
# change death_table to 1s for years insuree survives
44
46
for (j in seq_along(tod )) {
@@ -52,14 +54,21 @@ setMethod("rpv", signature("Insuree"), function(object, n, benefit_type = "life"
52
54
# set all deaths in deferral period equal to 0
53
55
pv [1 : ceiling((object @ x_ %% 1 ) + object @ m_ ), ] <- 0
54
56
# set all deaths in term period equal to the applicable benefit value
55
- pv [ceiling((object @ x_ %% 1 ) + object @ m_ + 1 ): nrow(pv ), ] <-
56
- pv [ceiling((object @ x_ %% 1 ) + object @ m_ + 1 ): nrow(pv ), ] * object @ benefit
57
+ if (benefit_type == " life" ) {
58
+ pv [ceiling((object @ x_ %% 1 ) + object @ m_ + 1 ): nrow(pv ), ] <-
59
+ pv [ceiling((object @ x_ %% 1 ) + object @ m_ + 1 ): nrow(pv ), ] * object @ benefit
60
+ } else {
61
+ # for annuities we only pay the portion of the annuity equal
62
+ # to the portion of the year in the term
63
+ pv [ceiling((object @ x_ %% 1 ) + object @ m_ + 1 ): nrow(pv ), ] <-
64
+ pv [ceiling((object @ x_ %% 1 ) + object @ m_ + 1 ): nrow(pv ), ] *
65
+ object @ benefit * deaths $ t [ceiling((object @ x_ %% 1 ) + object @ m_ + 1 ): nrow(pv )]
66
+ }
57
67
} else {
58
68
pv <- pv * object @ benefit
59
69
}
60
70
61
- # returns vector of discount factors
62
- discount <- discount(object , x_ = object @ x_ , t_ = object @ t_ , m_ = object @ m_ )
71
+
63
72
pv <- apply(pv , 2 , function (j ) j * discount )
64
73
list (deaths ,
65
74
discount = discount ,
0 commit comments