我想生成一个随机相关矩阵,以使其非对角元素的分布看起来近似正态。我该怎么做?
动机是这样的。对于一组时间序列数据,相关分布通常看起来非常接近正态分布。我想生成许多“常规”相关矩阵来表示一般情况,并使用它们来计算风险数。
我知道一种方法,但由此产生的标准偏差(非对角元素的分布)太小了,无法达到我的目的:生成矩阵均匀或正常随机行,标准化行(减去均值,除以标准偏差),则样本相关矩阵具有非对角线正态分布[ 注释后更新:标准偏差为 ]。X 1〜ñ-1/2
谁能建议一种更好的方法来控制标准偏差?
我想生成一个随机相关矩阵,以使其非对角元素的分布看起来近似正态。我该怎么做?
动机是这样的。对于一组时间序列数据,相关分布通常看起来非常接近正态分布。我想生成许多“常规”相关矩阵来表示一般情况,并使用它们来计算风险数。
我知道一种方法,但由此产生的标准偏差(非对角元素的分布)太小了,无法达到我的目的:生成矩阵均匀或正常随机行,标准化行(减去均值,除以标准偏差),则样本相关矩阵具有非对角线正态分布[ 注释后更新:标准偏差为 ]。X 1〜ñ-1/2
谁能建议一种更好的方法来控制标准偏差?
Answers:
我首先提供了我现在认为是次优的答案;因此,我编辑了答案,以提出更好的建议。
在此线程中:如何有效地生成随机正-半有限相关矩阵?-我描述并提供了两种生成随机相关矩阵的有效算法的代码。两者均来自Lewandowski,Kurowicka和Joe(2009)的论文。
请在这里查看我的答案以获取大量数字和Matlab代码。在这里,我只想说vine方法可以生成具有任何部分相关分布(请注意单词“ partial”)的随机相关矩阵,并且可以用于生成具有较大非对角线值的相关矩阵。这是该线程的相关图形:
在子图之间唯一改变的是一个参数,该参数控制偏相关的分布集中在周围。由于OP要求非对角线近似正态分布,因此这是带有非对角线元素直方图的图(对于与上述相同的矩阵):
我认为这种分布是合理的“正态”分布,并且可以看到标准偏差是如何逐渐增加的。我应该补充一点,该算法非常快。有关详细信息,请参见链接的线程。
直接修改您的方法可能会成功(取决于您希望分布与正态分布的接近程度)。这个答案的灵感来自于@cardinal的上述评论以及@psarka对我自己的问题的答案。如何生成具有某些强相关性的大型满秩随机相关矩阵?
诀窍是使样本相关(不是特征,而是样本)。下面是一个例子:我生成随机矩阵的大小(从正常标准的所有元素),然后从添加一个随机数到每一行,为。对于,相关矩阵(在对特征进行标准化之后)将具有近似正态分布且标准偏差为非对角元素。对于X 1000 × 100 [ - 一个/ 2 ,一/ 2 ] 一个= 0 ,1 ,2 ,5 一个= 0 X ⊤ X 1 / √一个一个= 0 ,1 ,2 ,5,我在不使变量居中的情况下计算了相关矩阵(这保留了插入的相关性),并且非对角线元素的标准偏差随着增长,如下图所示(行对应于):
所有这些矩阵当然都是正定的。这是matlab代码:
offsets = [0 1 2 5];
n = 1000;
p = 100;
rng(42) %// random seed
figure
for offset = 1:length(offsets)
X = randn(n,p);
for i=1:p
X(:,i) = X(:,i) + (rand-0.5) * offsets(offset);
end
C = 1/(n-1)*transpose(X)*X; %// covariance matrix (non-centred!)
%// convert to correlation
d = diag(C);
C = diag(1./sqrt(d))*C*diag(1./sqrt(d));
%// displaying C
subplot(length(offsets),3,(offset-1)*3+1)
imagesc(C, [-1 1])
%// histogram of the off-diagonal elements
subplot(length(offsets),3,(offset-1)*3+2)
offd = C(logical(ones(size(C))-eye(size(C))));
hist(offd)
xlim([-1 1])
%// QQ-plot to check the normality
subplot(length(offsets),3,(offset-1)*3+3)
qqplot(offd)
%// eigenvalues
eigv = eig(C);
display([num2str(min(eigv),2) ' ... ' num2str(max(eigv),2)])
end
该代码的输出(最小和最大特征值)为:
0.51 ... 1.7
0.44 ... 8.6
0.32 ... 22
0.1 ... 48
如果您尝试生成随机相关矩阵,请考虑从Wishart分布中采样。以下问题提供了Wishart分布的信息以及有关如何采样的建议: 如何有效地生成随机正-半定相关矩阵?