Matlab:假设有一个 4x4 相关矩阵,如何生成一个 4x1 随机变量矩阵?
我从 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您只需要均值向量(称为
m
)和协方差矩阵(称为C
)。请注意,您可以使用方程 C = R - m*m' 来从相关性中获取协方差矩阵(或者直接通过计算序列的均值后计算相关性来计算协方差矩阵)。然后,为了获得具有协方差 C 的向量,您可以生成一个 IID 随机向量(例如高斯):
然后将其与协方差矩阵的平方根相乘(称为 Q)并添加平均值:
您可以使用 Matlab 的 sqrt 函数来计算 sqrt(C),也可以使用 SVD 或 EIG 来计算。
v
的协方差将为Q*Q'
(=C
),平均值将为m
请参阅维基百科文章了解协方差矩阵的属性。
You need just the means vector (call it
m
) and the covariance matrix (call itC
). Note that you can get the covariance matrix from the correlation using the equationC = 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):
Then multiply it with the square root of the covariance matrix (call it Q) and add the mean:
You can either use Matlab's sqrt function to compute sqrt(C) or compute it using the SVD or EIG.
The covariance of
v
will beQ*Q'
(=C
) and the mean will bem
See the wikipedia article for the properties of the covariance matrix.
如果您有权访问统计工具箱,则可以使用
mvnrnd
生成数字。首先使用 cov 或 nimrodm 答案中描述的方法计算协方差矩阵 C。然后只需调用
其中
m
是您的均值向量。If you have access to the Statistics toolbox, you can use
mvnrnd
to generate the numbers.First calculate the covariance matrix,
C
, usingcov
or the method described in nimrodm's answer. Then simply callwhere
m
is your vector of means.