В настоящее время я пытаюсь смоделировать (случайный) рынок в R, используя цикл while, который работает, когда рынок открыт: время меньше 600 минут.
На этом рынке в любое время может произойти только одно из четырех событий: рождение предложения, рождение спроса, смерть предложения или смерть спроса.
Все они взяты из экспоненциальных распределений с использованием команды rexp () с собственной интенсивностью. Их суммы и соответствующие цены взяты из их собственного нормального распределения (только значения больше 0), и затем время обновляется в зависимости от того, какое из событий было нарисовано первым.
Затем я хотел бы обновить эти интенсивности (используя регрессию Кокса), и чтобы это произошло, мне нужно сохранить предыдущую информацию о каждом из событий, предпочтительно в списке, чтобы я мог, например, извлечь образцы из живые припасы и убрать их, подражать покупке. Я в основном хочу отслеживать то, что «живо» на рынке в данный момент времени. Вот часть моего кода:
TIME <- 0
count <- 1
...
my.stores <- c()
while(TIME < 600){
time.supply.birth <- rexp(1, intensity1)
time.supply.death <- rexp(1, intensity2)
time.demand.birth <- rexp(1, intensity3)
time.demand.death <- rexp(1, intensity4)
case1 <- time.supply.birth == min(time.supply.birth, time.demand.birth, time.supply.death, time.demand.death)
case2 <- time.supply.death == min(time.supply.birth, time.demand.birth, time.supply.death, time.demand.death)
case3 <- time.demand.birth == min(time.supply.birth, time.demand.birth, time.supply.death, time.demand.death)
case4 <- time.demand.death == min(time.supply.birth, time.demand.birth, time.supply.death, time.demand.death)
TIME <- TIME + time.supply.birth*case1 + time.supply.death*case2 + time.demand.birth*case3 + time.demand.death*case4
if(case1 == T){
amount.supply.birth <- rnorm() # with values
price.supply.birth <- rnorm()
count.supply.birth.event <- count.supply.birth.event + 1
my.stores[[count]]$amount.supply.birth <- c(my.stores[[count-1]]$amount.supply.birth, amount.supply.birth)
my.stores[[count]]$price.supply.birth <- c(my.stores[[count-1]]$price.supply.birth, price.supply.birth)
} else if(case2 ==T) {
# Death supply event: here a sample from the living supplies should be drawn
} else if(case3 == T){
# Similar to case 1
} else if(case4 == T){
# similar to case 2
} else{
}
count <- count + 1
}
Моя проблема в том, что я не могу даже сохранить какую-либо информацию в списке, так как цикл while прерывается сразу после одной итерации, что приводит к тому, что длина списка my.stores будет только 1 - я уверен, что это что-то мое индексирование в списке, но я не уверен, как обойти это. Я получаю следующее предупреждение:
Error in my.stores[[count - 1]] :
attempt to select less than one element in get1index <real>
и при печати списка я получаю следующее:
> my.stores[[1]]
$amount.demand.birth
[1] 6.044815
Скажем, я рисую сумму спроса и рождения с суммой и ценой, а затем на следующей итерации я аналогично рисую поставку. Я хотел бы что-то вроде:
> my.stores[[1]]
$amount.demand.birth
[1] 6.044815
$amount.supply.birth
[1] 0
$price.demand.birth
[1] 50.78
$price.supply.birth
[1] 0
> my.stores[[2]]
$amount.demand.birth
[1] 6.044815
[2] 6.044815
$amount.supply.birth
[1] 0
[2] 7.1312
$price.demand.birth
[1] 50.78
[2] 50.78
$price.supply.birth
[1] 0
[2] 95.00
Кто-нибудь, кто может мне помочь с этим или у кого есть другие предложения?
Извините за длинный пост.
Ура!