Степ-функция Маркова

Не пугайся моего длинного кода. Что мне интересно, так это о последней части, сюжете (пошаговое развлечение... часть. Когда я ввожу это в Rstudio, я получаю "stepfun "x"нужно все чаще заказывать"

Есть ли здесь кто-нибудь, кто знает, что я должен сделать, чтобы закончить это правильно?

bd_process <- function(lambda, mu, initial_state = 0, steps = 100) {
  time_now <- 0
  state_now <- initial_state

  time <- 0
  state <- initial_state
  for (i in 1:steps) { 

if (state_now == 3) {
  lambda_now <- 0
} else {
  lambda_now <- lambda
}

if (state_now == 0) {
  mu_now <- 0
} else {
  mu_now <- mu
}

time_to_transition <- rexp(mu, rate = 1) + rexp(lambda, rate = 1)

X <- rexp(mu, rate = 1)
Y <- rexp(lambda, rate = 1)

if (X < Y) {
  state_now <- state_now - 1
} else {
  state_now <- state_now + 1
}
 time_now <- time_now + time_to_transition 
 time <- c(time, time_now) 
 state <- c(state, state_now) 
}

list(time = time, state = state) }

set.seed(19930628) 

proposal1 <- bd_process(lambda = 2, mu = 10)
proposal2 <- bd_process(lambda = 6, mu = 10)
proposal3 <- bd_process(lambda = 10, mu = 10)


time1 <- proposal1$time
state1 <- proposal1$state

plot(stepfun(time1[-1], state1), 
 do.points = FALSE,
 xlab = "Tid",
 ylab = "Tillstånd",
 main = "",
 yaxt = "n")
axis(2, at = c(0, 1, 2, 3), las = 2)

1 ответ

Решение

Я не знаю, что делает ваш код, но вы попросили нас не беспокоиться об этом. На данный момент кажется, что вы только построили "временные интервалы", но теперь вам нужно "сложить их вместе" или "объединить" их по соответствующей временной оси. Для того, чтобы построить имитацию пошаговой функции, вы должны использовать cumsum построить возрастающее time1 вектор. Поскольку переменные "time" и "state" имеют такую ​​разную длину, быстрое исправление аргументов функции обрезает time1 вектор, так что это правильная длина для state1 переменная, и вы не получите ошибку с:

plot(stepfun(cumsum(time1[2:101]), state1), 
 do.points = FALSE,
 xlab = "Tid",
 ylab = "Tillstånd",
 main = "",
 yaxt = "n")
axis(2, at = c(0, 1, 2, 3), las = 2)

Может быть, если вы "шаг за шагом" пройдитесь по коду и объясните код (для себя и для остальных из нас), используя комментарии, вы поймете, почему у вас в 10 раз больше time1как у тебя state1"S. Я подозреваю, что это может иметь какое-то отношение к использованию "mu" в качестве первого аргумента rexp(mu, rate = 1), Первым аргументом для генераторов случайных чисел в R обычно является положительное целое число, которое определяет длину (число случайных чисел) из распределения.

Другие вопросы по тегам