Matlab:假设有一个 4x4 相关矩阵,如何生成一个 4x1 随机变量矩阵?

发布于 2024-11-14 14:07:17 字数 307 浏览 2 评论 0原文

我从 4 个时间序列开始,标记为 A、B、C、D。

我生成以下内容:

  • 4x1 均值矩阵。
  • 4x1 标准差矩阵。
  • 4x4 相关矩阵,从每个时间序列中获取 30 个样本。

用于生成 4x1 随机变量矩阵并保持时间序列之间的相关性完整的 Matlab 代码是什么?

(原因:这是蒙特卡罗模拟的第一阶段)。

I start with 4 time series, labelled A, B, C, D.

I generate the following:

  • A 4x1 matrix of means.
  • A 4x1 matrix of standard deviations.
  • A 4x4 correlation matrix, by taking 30 samples from each time series.

What is the Matlab code to generate a 4x1 matrix of random variables, keeping the correlations between the time series intact?

(reason: this is the first stage in a Monte Carlo simulation).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

黯淡〆 2024-11-21 14:07:17

您只需要均值向量(称为m)和协方差矩阵(称为C)。请注意,您可以使用方程 C = R - m*m' 来从相关性中获取协方差矩阵(或者直接通过计算序列的均值后计算相关性来计算协方差矩阵)。

然后,为了获得具有协方差 C 的向量,您可以生成一个 IID 随机向量(例如高斯):

w = randn(4,1)

然后将其与协方差矩阵的平方根相乘(称为 Q)并添加平均值:

v = Q*w + m

您可以使用 Matlab 的 sqrt 函数来计算 sqrt(C),也可以使用 SVD 或 EIG 来计算。

[u,d] = eig(C)

Q = u*sqrt(d)*u'

v 的协方差将为 Q*Q' (=C),平均值将为 m

请参阅维基百科文章了解协方差矩阵的属性。

You need just the means vector (call it m) and the covariance matrix (call it C). Note that you can get the covariance matrix from the correlation using the equation C = R - m*m' (or just compute it directly by computing the correlation of the sequences after subtracting their mean).

Then, to get a vector with the covariance C, you generate an IID random vector (say gaussian):

w = randn(4,1)

Then multiply it with the square root of the covariance matrix (call it Q) and add the mean:

v = Q*w + m

You can either use Matlab's sqrt function to compute sqrt(C) or compute it using the SVD or EIG.

[u,d] = eig(C)

Q = u*sqrt(d)*u'

The covariance of v will be Q*Q' (=C) and the mean will be m

See the wikipedia article for the properties of the covariance matrix.

山人契 2024-11-21 14:07:17

如果您有权访问统计工具箱,则可以使用 mvnrnd 生成数字。

首先使用 cov 或 nimrodm 答案中描述的方法计算协方差矩阵 C。然后只需调用

mvnrnd(m, C)

其中 m 是您的均值向量。

If you have access to the Statistics toolbox, you can use mvnrnd to generate the numbers.

First calculate the covariance matrix, C, using cov or the method described in nimrodm's answer. Then simply call

mvnrnd(m, C)

where m is your vector of means.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文