根据条件在 R 中生成有意义的样本数据?
Generating meaningful sample data in R based on conditions?
我正在尝试生成一些有意义的样本保险索赔数据,而不仅仅是随机数。
假设我有两列 Age 和 Injury,我需要基于特定条件的有意义的 ClaimAmount 值:
ClaimantAge | InjuryType | ClaimAmount
---------------------------------------
35 Bruises
55 Fractures
. .
. .
. .
我想生成随年龄增长而增加的索赔金额,然后在某个特定年龄(比如 65 岁)左右达到稳定水平。
某些伤害的索赔需要高于其他类型伤害的索赔。
目前我正在以随机方式生成样本,如下所示:
amount <- sample(0:100000, 2000, replace = TRUE)
如何生成更有意义的样本?
有很多方法需要调整,因为我不了解该领域。鉴于我们谈论的是美元金额,我会使用泊松分布来生成数据。
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
我正在尝试生成一些有意义的样本保险索赔数据,而不仅仅是随机数。
假设我有两列 Age 和 Injury,我需要基于特定条件的有意义的 ClaimAmount 值:
ClaimantAge | InjuryType | ClaimAmount
---------------------------------------
35 Bruises
55 Fractures
. .
. .
. .
我想生成随年龄增长而增加的索赔金额,然后在某个特定年龄(比如 65 岁)左右达到稳定水平。
某些伤害的索赔需要高于其他类型伤害的索赔。
目前我正在以随机方式生成样本,如下所示:
amount <- sample(0:100000, 2000, replace = TRUE)
如何生成更有意义的样本?
有很多方法需要调整,因为我不了解该领域。鉴于我们谈论的是美元金额,我会使用泊松分布来生成数据。
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