首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用R的精算演习

使用R的精算演习
EN

Stack Overflow用户
提问于 2020-11-12 10:15:05
回答 1查看 126关注 0票数 1

一起??一年的钱,客户可以购买免费服务,第一次损害将在一年内发生,只要里程小于14英里。

数据:

  • Miles:mean=16var=2.5的正态分布,如果它是家庭中唯一的汽车,而如果它是第二辆,则对mean=8var=15的分布是正态分布,60%的客户也有第二辆汽车,假设没有人有第三辆。--

第一次损伤(以月份为单位):服从指数分布,平均值为20

variance= 10000.和mean=100

  • 损伤量:服从伽马分布

我的问题是:如果每年只有10个客户,那么客户应该支付多少费用才能使公司不受伤害呢?

我写了我的代码,但我不知道它是否正确,我应该如何继续

代码语言:javascript
复制
cost <- vector("numeric", 10000)

for (i in 1:10000) {
  n <- 10
  miles <- 0.4 * rnorm(n, 16, sqrt(2.5)) + 0.6 * rnorm(n, 8, sqrt(15))
  miles <- (miles>=0) * miles + (miles<0) * 0 
  firstdamage <- rexp(n, 1/20)
  damage <- rgamma(n, shape=1, scale=100)
  clientstopay <- ((firstdamage < 12) & (miles < 14))
  cost[i] <- sum(clientstopay * damage) / n
} 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-12 18:04:21

您的代码是错误的,因为您没有模拟第二辆车是否存在。考虑下面的模拟过程。我们采用并行处理来提高效率。

代码语言:javascript
复制
library(future.apply)

cost_per_customer <- function(n) {
  n_ <- rbinom(1L, n, 0.6)
  miles <- c(rnorm(n, 16, sqrt(2.5)), rnorm(n_, 8, sqrt(15)))
  mon <- rexp(n + n_, 1 / 20)
  amt <- rgamma(n + n_, shape = 1, scale = 100)
  sum(amt[mon <= 12 & miles < 14]) / n
}

simu <- function(n, yrs) future_replicate(yrs, cost_per_customer(n))

plan(multisession)
res <- simu(10, 1e6)
quantile(res, 0.99)

在这里,函数cost_per_customer是关键。让_n__是拥有第二辆车的人数。很明显,_n_服从二项分布_B(n,0.6)。然后相应地生成所有_n + n__汽车的英里数、损坏时间和损坏量,并将满足您所述条件的汽车的损坏量相加,除以n (而不是n + n_,因为我们只有n客户)。

创建此函数后,其余部分只需重复运行模拟并计算模拟分布的99%分位数。发行版如下所示

99%分位数是

代码语言:javascript
复制
> quantile(res, 0.99)
     99% 
102.0923 

请注意,您可能得到一个不同的数字,但应该是102左右。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64801968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档