我有一堆
X[, 1]
,X[, 2]
,...,X[, numberAssetClasses]
.的年度数字
我想生成随机同分布的条件多正态月度数字
Y
(求和)与(每年的)年度数字相匹配,但基于无条件分布。
我认为我的麻烦源于不知道如何设置月度
Y[, i]
s之间的无条件协方差,该协方差来自年度X
s的协方差矩阵。 (标记为“This seems suspect
”。)
这是我的代码。我希望它会产生类似的相关矩阵。它没有。有什么想法吗?
library(mvtnorm)
numberPeriods <- 1000
numberAssetClasses <- 5
numberSubs <- 12
set.seed(42)
X <- matrix(rnorm(numberAssetClasses*numberPeriods, 10, 15*sqrt(12)),
nrow = numberPeriods)
meanX <- c(rep(0, numberAssetClasses))
for (i in 1:numberAssetClasses){
meanX[i] <- mean(X[, i])
}
covX <- cov(X)
covX
meanY <- c(rep(0, (numberSubs-1)*numberAssetClasses))
for (i in 1:numberAssetClasses){
meanY[((i-1)*(numberSubs-1)+1):((i)*(numberSubs-1))] <-
meanX[i]/numberSubs
}
covY <- covX
for (i in 1:numberAssetClasses){
for (j in 1:numberAssetClasses){
if (i == j){
covY[i, j] <- covX[i, j] / numberSubs
} else {
covY[i, j] <- covX[i, j] / numberSubs # This seems suspect
}
}
}
bigSigma <- matrix(0.0, nrow = (numberAssetClasses)*(numberSubs-1),
ncol = (numberAssetClasses)*(numberSubs-1))
for (i in 1:numberAssetClasses){
for (j in 1:numberAssetClasses){
if (i == j){
bigSigma[((i-1)*(numberSubs-1)+1):((i)*(numberSubs-1)),
((j-1)*(numberSubs-1)+1):((j)*(numberSubs-1))] <-
covY[i, j]*(diag(numberSubs-1)-matrix(1/numberSubs, numberSubs-1, numberSubs-1))
} else {
bigSigma[((i-1)*(numberSubs-1)+1):((i)*(numberSubs-1)),
((j-1)*(numberSubs-1)+1):((j)*(numberSubs-1))] <-
covY[i, j]*diag(numberSubs-1)
}
}
}
Y <- matrix(0.0, nrow = numberSubs*numberPeriods, ncol = numberAssetClasses)
for (m in 1:numberPeriods){
for (n in 1:(numberSubs-1)){
Y[((m-1)*numberSubs+1):((m)*numberSubs-1),
(1:numberAssetClasses)] <-
matrix(rmvnorm(1, meanY, bigSigma), ncol = numberAssetClasses)
}
for (i in 1:numberAssetClasses){
Y[m*numberSubs, i] <- numberSubs*meanY[(i-1)*(numberSubs-1)+1] -
sum(Y[((m-1)*numberSubs+1):((m)*numberSubs-1), i])
}
}
cor(X)
cor(Y)