我使用以下代码来计算函数的对数似然性,其中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的不同值。任何帮助将不胜感激!
答案 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)