【问题标题】:Generating meaningful sample data in R based on conditions?根据条件在 R 中生成有意义的样本数据?
【发布时间】:2021-03-01 20:10:48
【问题描述】:

我正在尝试生成一些有意义的示例保险索赔数据,而不仅仅是随机数字。

假设我有两列 Age 和 Injury,我需要根据特定条件为 ClaimAmount 提供有意义的值:

ClaimantAge | InjuryType | ClaimAmount
---------------------------------------
    35        Bruises
    55        Fractures
    .            .
    .            .
    .            .
  1. 我想生成随着年龄增长而增加的索赔金额,然后在某个年龄(比如 65 岁)左右达到稳定水平。

  2. 对某些伤害的索赔需要高于对其他类型伤害的索赔。

目前我正在以随机方式生成样本,如下所示:

amount <- sample(0:100000, 2000, replace = TRUE)  

如何生成更有意义的样本?

【问题讨论】:

  • 不确定您要做什么,但可能会考虑分布,然后根据您的分布生成样本。在我的情况下,正态分布完成了工作,但这里是所有 dist 及其功能的示例:stat.umn.edu/geyer/old/5101/rlook.html#dist
  • @oscartorom 感谢您的回复。我现在正在浏览链接。为了更清楚,我已经编辑了我的问题。

标签: r modeling


【解决方案1】:

有很多方法需要调整,因为我不知道这个领域。鉴于我们谈论的是美元金额,我会使用泊松分布来生成数据。

set.seed(1)
n_claims <- 2000
injuries <- c("bruises", "fractures")
prob_injuries <- c(0.7, 0.3)

sim_claims <- data.frame(claimid = 1:n_claims)
sim_claims$age <- round(rnorm(n = n_claims, mean = 35, sd = 15), 0)
sim_claims$Injury <- factor(sample(injuries, size = n_claims, replace = TRUE, prob = prob_injuries))
sim_claims$Amount <- rpois(n_claims, lambda = 100 + (5 * (sim_claims$age - median(sim_claims$age))) + 
                             dplyr::case_when(sim_claims$Injury == "bruises" ~ 50,
                                              sim_claims$Injury == "fractures" ~ 500))

head(sim_claims)

  claimid age    Injury Amount
1       1  26   bruises    117
2       2  38   bruises    175
3       3  22   bruises    102
4       4  59   bruises    261
5       5  40 fractures    644
6       6  23   bruises     92

【讨论】:

  • 你不能,因为泊松分布中的均值和方差是相同的。您必须改用负二项分布。 R 函数是rnbinom(),它允许不同的方差。
  • 谢谢。你的回答有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多