我有一个CSV文件,其中包含一组事件(大约40个项目),根据给定的概率,所有事件都可能发生或不发生。列:事件名称、产量大小、概率。
我对这些数据感兴趣的是集合的总收益大小(集合的所有收益的总和),也可能是每个事件的收益的总和。所以,由于事件可能发生,也可能不发生,因此集合的总产量大小可能不同,我需要对集合进行蒙特卡洛模拟,在概率列上进行伯努利试验。
最后,我需要计算整个集合或所有蒙特卡洛模拟迭代(场景)中特定事件的收益率总和的百分位数。
我很难把它写下来。。(我还在学习R,我更习惯Java/C#等)
我当前所做的代码:
#Generate sample data for a set of events that I want to simulate
eventcol <- c('Event1', 'Event2', 'Event3', 'Event4', 'Event5')
yieldcol <- c(350, 200, 100, 120, 540)
problcol <- c(0.5, 0.2, 0.9, 0.4, 0.7)
events <- data.frame(Name=eventcol, Yield=yieldcol, Probability=problcol)
#Forecast function
forecast <- function(events){
count <- nrow(events)
data <- data.frame(Id=seq(1, count))
data$Name <- events$Name
data$Yield <- events$Yield
data$Exists <- rbinom(count,1,events$Probability)
return(data)
}
#Create Monte Carlo simulation scenarios/realizations
scenarios <- replicate(4, forecast(events))
scenarios
输出如下:
> scenarios
[,1] [,2] [,3] [,4]
Id Integer,5 Integer,5 Integer,5 Integer,5
Name factor,5 factor,5 factor,5 factor,5
Yield Numeric,5 Numeric,5 Numeric,5 Numeric,5
Exists Numeric,5 Numeric,5 Numeric,5 Numeric,5
但我不知道如何对每个场景中确实存在(Exists==1)的事件求和Yield,更不用说在求和上找到一个百分位数(带分位数函数)。你将如何处理?
关于数据结构,我有一些想法,但我不确定。。
-
也许我应该调换预测,然后以某种方式逐一迭代MC场景并对数据求和?
-
也许我应该从不存在的结果中筛选出事件(Exists==0)。但我应该怎么做,在哪里做?
如果结果是这样的话(但我也不知道如何实现这一点),这可能会更有意义:
Scenario Name Yield
1 Event1 350
1 Event2 200
2 Event1 350
...
请分享您的想法!
谢谢你!