R - Цикл внутри цикла - PullRequest
       3

R - Цикл внутри цикла

0 голосов
/ 28 февраля 2019

Я использовал следующий код для вычисления логарифмической вероятности функции, в которой параметры x (x1, x2, x3, x4, x5) являются равномерно распределенными случайными числами между 0 и 1, но функция также зависит отзначения t (которое является вектором).

library(expm)
t <- seq(10,1000,by=5)

x1 <- runif(1,0,1)
x2 <- runif(1,0,1)
x3 <- runif(1,0,1)
x4 <- runif(1,0,1)
x5 <- runif(1,0,1)

p <- matrix(c(1,0,0), nrow=1, ncol=3, byrow=TRUE)

q <- matrix(c(x1,x2,x3), nrow=3, ncol=1, byrow=TRUE)

likely <- vector()

for (i in 1:length(t)) {
likely[i] <- p%*%expm(matrix(c(-(x4+x1)*t[i],x4*t[i],0,0,-(x5+x2)*t[i],x5*t[i],0,0,-x3*t[i]), nrow=3, ncol=3, byrow=TRUE))%*%q
}

log.likely <- vector()

for (i in 1:length(t)) {
log.likely[i] <- log(likely[i])
}

L3 <- -(sum(log.likely))
L3

Мой вопрос: как мне выполнить этот код, скажем, 100 раз для различных значений параметров x?У меня уже есть цикл в коде для запуска через различные значения t.Но теперь мне нужно перебрать различные значения x1, x2, x3, x4 и x5.Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 28 февраля 2019

Я не уверен, что это именно то, к чему вы стремитесь или нет, но это позволит вам запускать код столько раз, сколько вы захотите, и сохранять результаты в списке, содержащем все значения xи журнал вероятности для значений.

log.likelyhood <- function(){
  require(expm)

  t <- seq(10,1000,by=5)

  x1 <- runif(1,0,1)
  x2 <- runif(1,0,1)
  x3 <- runif(1,0,1)
  x4 <- runif(1,0,1)
  x5 <- runif(1,0,1)

  p <- matrix(c(1,0,0), nrow=1, ncol=3, byrow=TRUE)

  q <- matrix(c(x1,x2,x3), nrow=3, ncol=1, byrow=TRUE)

  likely <- vector()

  for (i in 1:length(t)) {
    likely[i] <- p%*%expm(matrix(c(-(x4+x1)*t[i],x4*t[i],0,0,-(x5+x2)*t[i],x5*t[i],0,0,-x3*t[i]), nrow=3, ncol=3, byrow=TRUE))%*%q
  }

  log.likely <- vector()

  for (i in 1:length(t)) {
    log.likely[i] <- log(likely[i])
  }

  L3 <- -(sum(log.likely))

  return(list(xvals = c(x1, x2, x3, x4, x5), L3 = L3))
}

results <- replicate(100, log.likelyhood(), simplify = FALSE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...