2017-08-29 74 views
0

我有兩個矩陣一個包含所有的平均值,另一個包含所有的標準差。我想爲三位投資者中的每一位模擬一個隨機數並查看哪個投資者獲得最高。 例如: - 貸款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") 

回答

0

鑑於這只是一個元素智能操作,您可以使用適當的向量化函數來計算的:

# 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