R 根据经验分配损失概率
对于一个学校项目,我正在尝试在R中创建一个数据集,其中包含四个变量: 我有一个data.frame,其中包含变量:损失经验(0,1);损失大小(介于0和1之间);区域以及司机的经验 现在,我想将驾驶员的体验与损失体验负相关;(例如:驾驶员经验越丰富,发生事故的可能性越小。但是,我仍然希望在驾驶员经验丰富的情况下发生一些事故。有人知道我如何做到这一点吗?因为到目前为止,我只是随机分配经验R 根据经验分配损失概率,r,R,对于一个学校项目,我正在尝试在R中创建一个数据集,其中包含四个变量: 我有一个data.frame,其中包含变量:损失经验(0,1);损失大小(介于0和1之间);区域以及司机的经验 现在,我想将驾驶员的体验与损失体验负相关;(例如:驾驶员经验越丰富,发生事故的可能性越小。但是,我仍然希望在驾驶员经验丰富的情况下发生一些事故。有人知道我如何做到这一点吗?因为到目前为止,我只是随机分配经验 Experience_Class <- c(0,100,250,500,1000) #this vari
Experience_Class <- c(0,100,250,500,1000) #this variable is used to assign different classes of experience levels
Experience <- sample(Experience_Class,N,replace=TRUE) # this is how I assign the experience to the drivers, however I have the problem that this is completely random
这是可能的吗?如果是的话,有谁能帮助我,告诉我如何将经验向量分配给损失发生向量
任何想法或输入都值得高度赞赏!这非常简单。你需要根据偶然的不同经验来模拟经验。这是一个条件概率问题。p(Exp |意外=1)=a,p(Exp |意外=0)=B 下面是一个示例。显然,您可以根据您希望运行模拟的方式对其进行修改
set.seed(2314L)
dat <- data.frame(accident= sample(c(0,1), size= 20, replace=T, prob= c(.7,.3)),
accident_size= (ifelse(runif(20) < .8, 0, runif(20, .2, 1))))
Experience_Class <- c(0,100,250,500,1000)
dat$experience <- ifelse(dat$accident == 1,
sample(Experience_Class, size= sum(dat$accident), replace= T, prob= c(.5,.2,.1,.1,.1)),
sample(Experience_Class, size= 20-sum(dat$accident), replace= T, prob= c(.05,.05,.2,.3,.4)))
# see results.
R> tapply(dat$experience, dat$accident, mean)
0 1
500.00000 33.33333
R> tapply(dat$experience, dat$accident, sd)
0 1
233.85359 57.73503
set.seed(2314L)
dat我想我可以通过创建一个高或低的变量来解决这个问题,然后使用类似“如果发生事故=1驾驶员高的概率”的方法。您可以从驾驶员体验开始吗?例如,0到1之间的值(可以通过运行if
创建)。然后你可以使用伯努利试验来确定是否发生了事故。事故大小本身也可以均匀分布。你只需创建一个大小为n的向量,并将其与确定事故是否发生的变量相乘。谢谢你在这里帮助我-我理解下面的解决方案这就是他所做的ght?非常感谢您的回答。我想这回答了我的问题。但是,当浏览您的代码时,我并没有真正理解其中的部分:意外大小=(ifelse(runif(20)<.8,0,runif(20,2,1)))这部分代码到底做什么?我理解runif(n,min,max),那么你为什么要用runif(20)@Alex_T_86得到这个等式呢?我正在构建一个虚拟数据集,试图复制你的数据集。你没有指定你的数据生成机制,所以我编了一个。。。为了进一步澄清,我建议您查看文档?示例。嗨,Alex,谢谢您的帮助。我明白,我真的很想这样做,但是我不明白代码的那部分:(ifelse(runif(20)<.8,0,runif(20,2,1)))顺便说一句。我根据二项式分布生成了损失数据,但我看到这一点的方式实际上与您所做的方式没有多大区别。因此,我将在这里介绍您的部分代码。@Alex_T_86我看到您的大部分代码都是0,在(.2,1)中有一些值。因此,我使用了一个具有高阈值的障碍模型来生成obs--ifelse(runif(20)<.8,0,runif(20,2,1))
。如果答案有用,我们将不胜感激
set.seed(2314L)
dat <- data.frame(accident= sample(c(0,1), size= 20, replace=T, prob= c(.7,.3)),
accident_size= (ifelse(runif(20) < .8, 0, runif(20, .2, 1))))
Experience_Class <- c(0,100,250,500,1000)
dat$experience <- ifelse(dat$accident == 1,
sample(Experience_Class, size= sum(dat$accident), replace= T, prob= c(.5,.2,.1,.1,.1)),
sample(Experience_Class, size= 20-sum(dat$accident), replace= T, prob= c(.05,.05,.2,.3,.4)))
# see results.
R> tapply(dat$experience, dat$accident, mean)
0 1
500.00000 33.33333
R> tapply(dat$experience, dat$accident, sd)
0 1
233.85359 57.73503