Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 根据经验分配损失概率_R - Fatal编程技术网

R 根据经验分配损失概率

R 根据经验分配损失概率,r,R,对于一个学校项目,我正在尝试在R中创建一个数据集,其中包含四个变量: 我有一个data.frame,其中包含变量:损失经验(0,1);损失大小(介于0和1之间);区域以及司机的经验 现在,我想将驾驶员的体验与损失体验负相关;(例如:驾驶员经验越丰富,发生事故的可能性越小。但是,我仍然希望在驾驶员经验丰富的情况下发生一些事故。有人知道我如何做到这一点吗?因为到目前为止,我只是随机分配经验 Experience_Class <- c(0,100,250,500,1000) #this vari

对于一个学校项目,我正在尝试在R中创建一个数据集,其中包含四个变量: 我有一个data.frame,其中包含变量:损失经验(0,1);损失大小(介于0和1之间);区域以及司机的经验

现在,我想将驾驶员的体验与损失体验负相关;(例如:驾驶员经验越丰富,发生事故的可能性越小。但是,我仍然希望在驾驶员经验丰富的情况下发生一些事故。有人知道我如何做到这一点吗?因为到目前为止,我只是随机分配经验

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