R-循环内循环

时间:2019-02-28 18:49:10

标签: r loops

我使用以下代码来计算函数的对数似然性,其中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

我的问题是:对于x参数的不同值,我如何运行此代码说100次?我已经在代码中有一个循环来遍历t的不同值。但是现在我需要遍历x1,x2,x3,x4和x5的不同值。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

我不确定这是否正是您要使用的功能,但这可以让您多次运行代码,并将结果存储在包含所有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)