#r
#r
Вопрос:
Я выполняю моделирование mvnorm с тремя переменными. Я хочу, mu_3v
чтобы его умножали на [1:62]
и stdv_3
на sqrt
of [1:62]
.
Для каждого сравнения я хочу, чтобы R извлекал столбец [,1]
, [,2]
и [,3]
и добавлял его в отдельный фрейм данных. Давая мне конечный результат из 3 фреймов данных с 1:10000
смоделированными строками и 1:62
столбцами.
Есть идеи, как я могу это закодировать, вместо того, чтобы делать это вручную?
Текущий код:
mu_3v = c(mu1_1, mu2_1, mu_H)
stdv_3 = c(s1_1, s2_1, s_H)
corMat = matrix(c(1, rho_1, rho_HvsF,
rho_1, 1, rho_HvsV,
rho_HvsF, rho_HvsV, 1), ncol = 3)
covMat = stdv_3 %*% t(stdv_3) * corMat
set.seed(10000)
sim3v <- mvrnorm(10000, mu = mu_3v, Sigma = covMat, empirical = TRUE)
Пример с 3 столбцами и 6 строками желаемого результата:
x1 x2 x3
1 -0.007123555 -0.009929272 -0.012024598
2 -0.021314259 -0.029997958 -0.036603619
3 -0.010374873 -0.014527330 -0.017656045
4 0.033366925 0.047332914 0.058106970
5 -0.004235795 -0.005845363 -0.007022851
6 -0.017374481 -0.024426270 -0.029779722
y1 y2 y3
1 0.0013867871 0.0020744484 0.0026470862
2 0.0032006879 0.0046396915 0.0057888546
3 0.0005585690 0.0009031711 0.0012125704
4 -0.0004444398 -0.0005152975 -0.0005246917
5 0.0031730968 0.0046006719 0.0057410655
6 -0.0050500802 -0.0070286566 -0.0085018949
z1 z2 z3
1 0.000532362 0.0008996895 0.001239865
2 -0.004274135 -0.0058977242 -0.007085233
3 -0.010928377 -0.0153082426 -0.018610717
4 0.046217388 0.0655080731 0.080368651
5 0.008414940 0.0120473379 0.014892890
6 -0.006425554 -0.0089402897 -0.010811599
Комментарии:
1. Привет, я не понимаю желаемый результат. Можете ли вы добавить его в свой вопрос
2. Привет, спасибо за ответ. Я добавил пример желаемого результата в соответствии с запросом.
Ответ №1:
Что-то вроде этого? Обратите внимание, что я ввел некоторые случайные значения для целей тестирования, поскольку вы не указали корреляционные переменные в своем примере кода! Но это должно вам помочь, я думаю 🙂 Дайте мне знать, если что-то неясно! (Все еще добавлено небольшое обновление, corMat должен быть в цикле..
library(MASS)
set.seed(10000)
scaler <- 1:62
no_simul <- 10000
placeholder <- matrix(ncol=length(scaler), nrow=no_simul)
matrix_list <- list(mat1 = placeholder, mat2 = placeholder, mat3 = placeholder)
mu_3v = c(0.01, 0.07, 0.3)
stdv_3 = c(0.1, .2, 0.3)
corMat = matrix(c(1, 0.2, 0.25,
0.02, 1, -0.1,
0.5, -0.5, 1), ncol = 3)
for (j in 1:length(scaler)){
stdv_3_temp <- stdv_3 * sqrt(scaler[j])
covMat <- stdv_3_temp %*% t(stdv_3_temp) * corMat
sim3v <- mvrnorm(no_simul, mu = mu_3v*scaler[j], Sigma = covMat, empirical = TRUE)
matrix_list$mat1[ , j] <- sim3v[ , 1]
matrix_list$mat2[ , j] <- sim3v[ , 2]
matrix_list$mat3[ , j] <- sim3v[ , 3]
}