【发布时间】:2021-04-25 20:54:06
【问题描述】:
目前正在尝试编写函数来计算保障收益和储备金/保单价值,尽管在尝试绘制时,总是会遇到相同的错误,并且对我如何解决它非常迷茫。任何帮助将不胜感激。
#Annuity-due function
AnU = function(x, n, i)
{
An = 0
for (k in 0:(n-1))
{
An = An + (1/(1+i))^k*lx[x+k]/lx[x]
}
return(An)
}
#Term/whole life assurance function
TWa <- function(x, n, i){
if (missing(n))
n = 120 - x - 1
Ta = 0
for(k in 0:(n-1))
{
Ta = Ta + (1/(1+i))^(k+1)*(lx[x+k]-lx[x+k+1])/lx[x]
}
return(Ta)
}
#Setting Premium
P <- 100000*TWa(x = 25, n = 40, i = 0.04)/AnU(x = 25, n = 40, i = 0.04)
#Policy value function
age <- c(1:120)
term <- c(1:120)
time <- c(1:120)
policy_TW <- function(time, age, term, rate)
return(100000*TWa(x = age + time, n = term - time, i = rate) -
P * AnU(x = age + time, n = term - time, i = rate))
for (time in 0:40)
cat("At time", time, " policy value is ", policy_TW(time, 25, 40, 0.04), "\n")
#Plot
plot(0:40, policy_TW(0:40, 25, 40, 0.04), ylim = c(0,6000), type = "b")
> plot(0:40, policy_TW(0:40, 25, 40, 0.04), ylim = c(0,6000), type = "b")
Warning messages:
1: In 0:(n - 1) :
numerical expression has 41 elements: only the first used
2: In 0:(n - 1) :
numerical expression has 41 elements: only the first used
编辑:为了重现性,我忘记添加lx 代码。
这是根据链接的 xls 文件计算得出的,该文件随后被命名为 data
https://www.actuaries.org.uk/documents/am92-permanent-assurances-males
# Calculate the values for lx
qx = c(rep(NA,16),data$qx)
lx = vector()
lx[1:17] = c(rep(NA,16),10000)
for (i in 18:120)
{
lx[i]=lx[i-1]*(1-qx[i-1])
}
【问题讨论】:
-
感谢您进行编辑。但它仍然不完全符合可重现示例的标准,因为这里没有包含代码供某人在他们的环境中轻松获取名为
data的对象而无需转到外部链接。如果将来我是你,我会在你的代码中明确地包含一些值,以代替现在所说的data$qx。然后人们可以运行此代码而无需下载任何数据。目标是让人们能够重现您的错误并为您提供帮助,而他们只需花费最少的精力就可以在本地计算机上进行设置。 -
啊,这很公平。对于以后的问题,我一定会牢记这一点。我的朋友,非常感谢您的帮助。