симуляции в R с применением и репликацией

У меня есть две матрицы: одна содержит все средние значения, а другая содержит все стандартные отклонения. Я хочу смоделировать случайное число для каждого из трех инвесторов и посмотреть, какой инвестор получит больше всего. Например: - Заем 1 имеет трех инвесторов. Я беру наибольшее из значений rnorm(1,m[1,1],sd[1,1]),rnorm(1,m[1,2],sd[1,2]),rnorm(1,m[1 ,3],sd[1,3]) и сохраните его. Я хочу смоделировать это 1000 раз и сохранить результаты следующим образом. Вывод Можно ли использовать комбинацию Mapply и Sapply и реплицировать для этого? если вы, ребята, можете дать мне несколько указателей, я был бы очень благодарен.

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")

person Kish    schedule 29.08.2017    source источник


Ответы (1)


Учитывая, что это просто поэлементная операция, вы можете использовать соответствующую векторизованную функцию для вычисления этого:

# 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
person James    schedule 31.08.2017