模拟在申请和复制的R
问题描述:
我有两个矩阵一个包含所有的平均值,另一个包含所有的标准差。我想为三位投资者中的每一位模拟一个随机数并查看哪个投资者获得最高。 例如: - 贷款1有三名投资者。 (1,m [1,1],sd [1,1]),rnorm(1,m [1,2],sd [1,2]),rnorm(1,m [ 1,3],sd [1,3]) 并存储它。我想模拟这1000次,并将结果存储为 。 Output 我可以使用Mapply和Sapply的组合来复制吗?如果你们可以给我一些指点,我会非常感激。模拟在申请和复制的R
means <- matrix(c(-0.086731728,-0.1556901,-0.744495,
-0.166453802, -0.1978284, -0.9021422,
-0.127376145, -0.1227214, -0.6926699
), ncol = 3)
m <- t(m)
colnames(m) <- c("inv1","inv2","inv3")
rownames(m) <- c("loan1","loan2","loan3")
sd <- matrix(c(0.4431459, 0.5252441, 0.5372112,
0.4431882, 0.5252268, 0.5374614,
0.4430836, 0.5248798, 0.536924
), ncol = 3)
sd <- t(sd)
colnames(sd) <- c("inv1","inv2","inv3")
rownames(sd) <- c("loan1","loan2","loan3")
答
鉴于这只是一个元素智能操作,您可以使用适当的向量化函数来计算的:
# Create a function to perform the computation you want
# Get the highest value from 1000 simulations
f <- function(m,s,reps=1000) max(rnorm(reps,m,s))
# Convert this function to a vectorised binary function
`%f%` <- Vectorize(f)
# Generate results - this will be a vector
results <- means %f% sd
# Tidy up results
results <- matrix(results,ncol(means))
colnames(results) <- colnames(means)
rownames(results) <- rownames(means)
# Results
results
inv1 inv2 inv3
loan1 1.486830 1.317569 0.8679278
loan2 1.212262 1.762396 0.7514182
loan3 1.533593 1.461248 0.7539696