2013-12-16 7 views
0

Я пытаюсь создать 2 nxm матрицы (A и B), где все столбцы A и B коррелируют друг с другом (0.6). Значения в матрицах A и B взяты из отдельных нормальных распределений. У меня есть следующее, но когда я проверяю корреляции на выходе, это не 0,6. Что я делаю не так?Создание матрицы коррелированных векторов

m=30 
n=100  
%Two distributions 
Mu1=0.0033; 
stdev1=0.0208; 
Mu2=0.0033; 
stdev2=0.016801; 
cor=0.6; 
%creating a nxm matrix by calculating correlated vectors one by one 
for y=1:m 
W(1:n,1)=Mu1+stdev1*randn(n,1); 
W(1:n,2)=Mu2+stdev2*randn(n,1); 
R=[1 cor;cor 1]; 
L=chol(R); 
W=W*L; 
%Transfer to seperate matrices A and B 
A(:,y)=W(:,1); 
B(:,y)=W(:,2); 
end 
+0

'corr (A (:), B (:))' приводит к примерно 0,68 для меня. Это «проблема»? –

+0

Да. Хотя значения могут значительно отличаться. Последние три я пробовал: 0.4485, 0.8335, 0.6640. Разве это не должно быть, по крайней мере, ближе к отметке 0,6? – AJM

ответ

0

Хосезская факторизация работает достаточно хорошо для этой операции, однако я обнаружил, что она дает слишком высокую корреляцию. Принимая среднюю корреляцию для каждой строки дает

corrAvg = 0,68 при п = 100 и почти то же самое при п = 1000

Лучший способ взять матрицу квадратного корня в MATLAB является использование sqrtm.

Это дает среднее связи, накладываемые

corrAvg = 0,61 для п = 100 и 0,60 при п = 1000.

Тогда, конечно, стандартное отклонение значительно меньше при п = 1000, и если вы используете только 100 значения - это небольшая проблема, чтобы получить идеальную корреляцию 0.60 для каждого столбца.

+0

Отлично. Именно то, что я искал! – AJM

Смежные вопросы