2014-03-18 3 views
1

У меня есть файл CSV, содержащий набор событий (около 40 элементов), все из которых могут произойти или нет, в зависимости от заданной вероятности. Столбцы: имя события, размер урожайности, вероятность.Нужна помощь в структурировании моделирования Монте-Карло и поиске процентилей результата с помощью R

Меня интересуют эти данные - общий размер урожая множества (сумма всех выходов множества) и, возможно, общая сумма урожайности на событие. Таким образом, поскольку событие может произойти не на и, следовательно, общий размер урожайности набора может отличаться, мне нужно сделать симуляцию Монте-Карло над множеством, имея пробную версию Bernoulli над столбцом вероятности.

И, наконец, мне нужно рассчитать процентили по сумме доходности всего набора или определенного события над всеми итерациями моделирования Монте-Карло (сценарии).

У меня возникли проблемы написания его вниз .. (я все еще учусь 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 

Но я не имею понятия, как подводить Yield над событиями, которые существуют (не Exists == 1) за сценарий, не говоря уже затем найти процентиль (с квантиль функции) над суммами , Как вы это сделаете?

Что касается структуры данных, у меня есть несколько идей, но я не уверен ..

  1. Может быть, я должен перенести прогноз, а затем как-то перебирать сценарии MC один за другим, и суммировать данные?

  2. Возможно, я должен отфильтровывать события из результатов, которых не существует (существует == 0). Но как и где я должен это делать?

Это, вероятно, также больше смысла, если результаты будут выглядеть следующим образом (но у меня нет идей, как добиться этого):

Scenario  Name  Yield 
1   Event1 350 
1   Event2 200 
2   Event1 350 
... 

Пожалуйста, поделитесь своими мыслями!

Thankyou!

+0

Пожалуйста, упростите ваш вопрос. Пройдите и удалите все ненужные фрагменты информации. См. Http: // stackoverflow.com/questions/5963269/how-to-make-a-great-r-воспроизводимый пример – csgillespie

+0

Я не уверен, что из этого не нужно: у меня нет рабочего кода для достижения результатов, которые я хочу, поэтому я должен описать, что Я сделал до сих пор и чего хочу достичь. Может быть, мне нужно просто реструктурировать свой вопрос? – user315648

+0

1. Можете ли вы загрузить данные? Если да, пропустите эту часть и создайте простой фиктивный фрейм данных. 2. Нужно ли нам знать все столбцы в вашем наборе данных? 3. Работает ли ваша функция прогноза? Если нет, почему бы и нет? Что вы ожидаете? – csgillespie

ответ

0

Да, вопрос намного яснее!

scenarios вывод представляет собой набор списков. scenarios[3,] содержит «потенциальные выходы», scenarios[4,] содержит «существует».

Фактический выход для каждого сценария может быть определена следующим образом:

potential_yields = simplify2array(scenarios[3,]) 
exists   = simplify2array(scenarios[4,]) 
actual_yields = colSums(yields*exists) 

Определить и участок квантилей:

yield_q = quantile(actual_yields,probs=0:100/100) 
plot(x = 0:100, y = yield_q) 

Возможно, это то, что вы после этого.