r - 如何在 R 中使用不同的 set.seed() 多次运行相同的模型?
问题描述
我想用不同的种子运行以下模型三次。例如,以下模型使用种子运行314159
set.seed(314159)
x <- c(11, 5, 2, -5, 7, 2, -11, 9, -5, -5, -4, 17, 2, -10, -11, -10,
-4, 2, 1, 13)
a <- 0.1
b <- 0.1
c <- 0
d <- 100^2
M <- 1e3
sample <- array(NA, dim=c(M,2))
mu <- mean(x)
sig2 <- var(x)
for( m in 1:M ){
mu <- rnorm(1, (length(x) + 1/d)^(-1) * (sum(x) + c/d),
sqrt( sig2/(length(x) + 1/d) ))
sig2 <- rigamma(1, .5*length(x)+a+.5,
.5*sum( (x-mu)^2 ) + 1/(2*d)*(mu-c)^2 + b )
sample[m,] <- c(mu,sig2)
}
plot( density( sample[,1] ))
plot( density( sample[,2] ))
如果我想为种子523626
和运行相同的模型626789
,我可以使用任何 for 循环吗?任何帮助表示赞赏?
解决方案
将代码放入函数中
apply_fun <- function() {
x <- c(11, 5, 2, -5, 7, 2, -11, 9, -5, -5, -4, 17, 2, -10, -11, -10,-4, 2, 1, 13)
a <- 0.1
b <- 0.1
c <- 0
d <- 100^2
M <- 1e3
sample <- array(NA, dim=c(M,2))
mu <- mean(x)
sig2 <- var(x)
for( m in 1:M ){
mu <- rnorm(1, (length(x) + 1/d)^(-1) * (sum(x) + c/d),
sqrt( sig2/(length(x) + 1/d) ))
sig2 <- rigamma(1, .5*length(x)+a+.5,
.5*sum( (x-mu)^2 ) + 1/(2*d)*(mu-c)^2 + b )
sample[m,] <- c(mu,sig2)
}
plot( density( sample[,1] ))
plot( density( sample[,2] ))
}
然后使用lapply
每个种子值
output <- lapply(c(314159, 523626, 626789), function(x) {set.seed(x);apply_fun()})
rigamma
在哪里
rigamma = function(n, a, b) return(1/rgamma(n, shape = a, rate = b))
推荐阅读
- angular - 找不到 i18n .json | 角
- javascript - Javascript输入keyup第一个值=“-”不是NaN
- c# - 无法开始收听 ManagementEventWatcher
- python - 根据两列的值添加另一列
- reactjs - 如何配置你为什么用 NextJS 12 渲染
- mysql - mysql查询以查找针对任何类别仅具有单个特定子类别的行(按数据分组)
- go - 阻止 goroutine 执行
- reverse-engineering - 我怎样才能将此反汇编代码反转为c
- javascript - 为什么我会在 nodejs 和 react 中收到 ECONNREFUSED 代理错误?
- .net-core - .Net core wsfederation 认证 wreq 参数