2016-11-17 2 views
0

Я вычисляю некоторые тесты, используя корреляцию между моими переменными. У меня есть две основные проблемы: я использую svmat, чтобы вставить мою матрицу в редактор данных. Моя матрица изначально 1 по диагонали и все корреляции ниже этого. Когда я использую svmat, он вставляет матрицу, которая является симметричной, которая дважды учитывает мои корреляции. Например,Вставка матрицы корреляции в редактор данных

1 
0.5 1 
0.3 0.5 1 

Затем с помощью svmat я получаю что-то вроде

1 0.5 0.3 
0.5 1  0.5 
0.3 0.5 1 

Мой код в настоящее время выглядит следующим образом:

matrix accum R = e1-e48 
matrix R = corr(R) 
matrix list R 
clear 
svmat R 

Я хочу создать переменную, которая является суммой всех элементов в матрице. Есть простой способ сделать это? Я делаю это по строкам на этом этапе.

ответ

0

Вы не показываете полный и воспроизводимый код, который вызывает недоумение на форуме по программированию, но см. https://stackoverflow.com/help/mcve за советом по публикации хороших примеров.

Резервное копирование, ваша заявленная цель - это сумма корреляционной матрицы. Здесь я иллюстрирую использование correlate: матрица доступна сразу после этой команды. Обратите внимание, что тот же метод применяется к корреляционной матрице, полученной любым другим способом, например, в вашем коде.

. sysuse auto, clear 
(1978 Automobile Data) 

. corr headroom trunk length turn displacement 
(obs=74) 

      | headroom trunk length  turn displa~t 
-------------+--------------------------------------------- 
    headroom | 1.0000 
     trunk | 0.6620 1.0000 
     length | 0.5163 0.7266 1.0000 
     turn | 0.4245 0.6011 0.8643 1.0000 
displacement | 0.4745 0.6086 0.8351 0.7768 1.0000 

. ret li 

scalars: 
        r(N) = 74 
       r(rho) = .6620111289412028 

matrices: 
        r(C) : 5 x 5 

. mata : sum(st_matrix("r(C)")) 
    17.97943754 

Итак, передайте матрицу в Mata, чтобы получить сумму.

Вы также можете передать его обратно.

Поскольку сумма матрицы является просто константой, она не обязательно должна храниться в переменной Stata, что также было бы расточительным. Может быть подходящим выбором скалярный или локальный макрос.

Чтобы показать последнюю точку: вы можете передать сумму обратно в Stata как скаляр:

. mata : st_numscalar("rsum", sum(st_matrix("r(C)"))) 

. di rsum 
17.979438 

Очевидно, вы также можете вычесть след, равный числу переменных, и разделите остаток. Вы можете остаться в Мате, чтобы сделать это, или сделать это в Стате.

Короче говоря, превращение матрицы корреляции в данные Stata является предотвратимой утечкой для вашей цели.

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