条件随机抽样:每年到每月

问题描述 投票:0回答:0

我有一堆

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)
r random normal-distribution multivariate-time-series
© www.soinside.com 2019 - 2024. All rights reserved.