我正在尝试基于蒙特卡罗方法编写估算不确定性预算的函数。在这里,我将仅报告我需要加速的代码片段。
inout<-function(var1,svar1,var2,svar2){
M<-10^6
var1m<-matrix(nrow=length(var1),ncol=M)
var2m<-matrix(nrow=length(var2),ncol=M)
j<-1
for (j in 1:length(var1)) {
var1m[j,]<-var1[j]+rnorm(M,0,svar1[j])
var2m[j,]<-var2[j]+rnorm(M,0,svar2[j])
}
var1a<-apply(var1m,1,mean)
var2a<-apply(var2m,1,mean)
return(list(a=round(var1a,digits=1),b=round(var2a,digits=1)))
}
fake1<-cbind(rnorm(200,10,1),rnorm(200,1,0.1),rnorm(200,15,2),rnorm(200,2,0.1))
fake2<-cbind(rnorm(200,5,1),rnorm(200,2,0.1),rnorm(200,150,2),rnorm(200,4,0.1))
inout(var1=fake[,1],svar1=fake[,2],var2=fake[,3],svar2=fake[,4])
出于我的目的,j
与其var1
词语相关联的每个rnorm(M,0,svar1[j])
元素非常重要。
谢谢。
AB
答案 0 :(得分:2)
这应该做同样的事情:
inout2<-function(var1,svar1,var2,svar2, M){
var1m <- matrix(rnorm(M*length(var1), mean=0, sd=rep(svar1, each=M)),
ncol=length(var1))
var2m <- matrix(rnorm(M*length(var2), mean=0, sd=rep(svar2, each=M)),
ncol=length(var2))
var1a <- colMeans(var1m) + var1
var2a <- colMeans(var2m) + var2
return(list(a=round(var1a,digits=1),b=round(var2a,digits=1)))
}
您是否知道(由于四舍五入),如果svar1
足够大,结果通常会独立于svar2
和M
?