Степ-функция Маркова
Не пугайся моего длинного кода. Что мне интересно, так это о последней части, сюжете (пошаговое развлечение... часть. Когда я ввожу это в 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 обычно является положительное целое число, которое определяет длину (число случайных чисел) из распределения.