У меня есть корреляционная матрица возвращений безопасности, чей определитель равен нулю. (Это немного удивительно, поскольку выборочная корреляционная матрица и соответствующая ковариационная матрица теоретически должны быть положительно определенными.)
Моя гипотеза состоит в том, что по крайней мере одна ценная бумага линейно зависит от других ценных бумаг. Есть ли в R функция, которая последовательно проверяет каждый столбец на наличие матрицы линейной зависимости?
Например, один из подходов заключается в построении корреляционной матрицы по одной безопасности за раз и вычислении детерминанта на каждом этапе. Когда определитель = 0, остановитесь, поскольку вы определили ценную бумагу, которая представляет собой линейную комбинацию других ценных бумаг.
Любые другие методы для определения линейной зависимости в такой матрице приветствуются.
источник
Ответы:
Вы, кажется, задаете действительно провокационный вопрос: как определить, учитывая матрицу единственной корреляции (или ковариации, или суммы квадратов и перекрестных произведений), какой столбец линейно зависит от какого. Я предполагаю, что операция очистки может помочь. Вот мое исследование в SPSS (не R), чтобы проиллюстрировать.
Давайте сгенерируем некоторые данные:
Давайте создадим некоторую линейную зависимость между V2, V4 и V5:
Итак, мы изменили нашу колонку V4.
Распечатки М в 5 итераций:
Обратите внимание, что в итоге столбец 5 заполнился нулями. Это означает (насколько я понимаю), что V5 линейно связан с некоторыми из предыдущих столбцов. Какие колонки? Посмотрите на итерацию, где последний столбец 5 не полон нулей - итерация 4. Мы видим там, что V5 связан с V2 и V4 с коэффициентами -.3333 и .8333: V5 = -.3333 * V2 + .8333 * V4, что соответствует к тому, что мы сделали с данными: V4 = .4 * V2 + 1.2 * V5.
Вот как мы узнали, какая колонка линейно связана с другой. Я не проверял, насколько полезен вышеуказанный подход в более общем случае со многими группами взаимозависимостей в данных. В приведенном выше примере это оказалось полезным, хотя.
источник
Вот простой подход: вычислить ранг матрицы, которая получается в результате удаления каждого из столбцов. Столбцы, которые при удалении дают наивысший ранг, являются линейно зависимыми (поскольку удаление этих столбцов не уменьшает ранг, а удаление линейно независимого столбца -).
В R:
источник
system is exactly singular: U[5,5] = 0
, которая, как теперь я знаю, означает, что проблема возникла в столбце 5 (задним числом это кажется очевидным, поскольку это столбец нулей!)your.matrix = matrix(1:4, 2)
?Вопрос заключается в том, чтобы «определить лежащие в основе [линейные] отношения» среди переменных.
Быстрый и простой способ обнаружения взаимосвязей - это регрессировать любую другую переменную (использовать константу, даже) с этими переменными с помощью вашего любимого программного обеспечения: любая хорошая процедура регрессии обнаружит и диагностирует коллинеарность. (Вы даже не будете смотреть на результаты регрессии: мы просто полагаемся на полезный побочный эффект настройки и анализа матрицы регрессии.)
(Существует искусство и довольно много литературы, связанной с определением того, что такое «небольшая» загрузка. Для моделирования зависимой переменной я бы предложил включить ее в независимые переменные в PCA, чтобы идентифицировать компоненты - независимо от их размеры - в которых зависимая переменная играет важную роль. С этой точки зрения, «маленький» означает гораздо меньше, чем любой такой компонент.)
Давайте посмотрим на некоторые примеры. (Они используются
R
для расчетов и построения графиков.) Начните с функции для выполнения PCA, ищите небольшие компоненты, наносите их на график и возвращайте линейные отношения между ними.sweep
Вывод, связанный с верхней левой панелью, был
Выход для верхней средней панели был
На практике это часто не тот случай, когда одна переменная выделяется как очевидная комбинация других: все коэффициенты могут иметь сопоставимые размеры и различные знаки. Более того, когда существует более одного измерения отношений, не существует уникального способа их указать: требуется дополнительный анализ (например, сокращение строк), чтобы определить полезную основу для этих отношений. Вот как устроен мир: все, что вы можете сказать, это то, что эти конкретные комбинации, которые выводятся PCA, почти не изменяются в данных. Чтобы справиться с этим, некоторые люди используют самые большие («основные») компоненты непосредственно как независимые переменные в регрессии или последующем анализе, в какой бы форме она ни принималась. Если вы сделаете это, не забудьте сначала удалить зависимую переменную из набора переменных и повторить PCA!
Вот код для воспроизведения этой фигуры:
(Мне пришлось поиграться с пороговым значением в случаях с большой ошибкой, чтобы отобразить только один компонент: вот причина для того, чтобы передать это значение в качестве параметра
process
.)Пользователь ttnphns любезно направил наше внимание на тесно связанную тему. Один из его ответов (автор JM) предлагает подход, описанный здесь.
источник
"loadings," which are linear combinations of the original variables
princomp
источник
Я столкнулся с этой проблемой примерно две недели назад и решил, что мне нужно вернуться к ней, потому что при работе с массивными массивами данных эти вещи невозможно выполнить вручную.
Я создал цикл for (), который вычисляет ранг матрицы по одному столбцу за раз. Таким образом, для первой итерации ранг будет 1. Второй, 2. Это происходит до тех пор, пока ранг не станет МЕНЬШЕ, чем номер столбца, который вы используете.
Очень просто:
for () разрыв цикла
Я уверен, что вы можете добавить оператор if, он мне пока не нужен, потому что я имею дело только с 50-ю столбцами.
Надеюсь это поможет!
источник
Ранг, r матрицы = количество линейно независимых столбцов (или строк) матрицы. Для п по п матрицы А , ранг (А) = п => все столбцы (или строки) линейно независимы.
источник
Не то чтобы ответ @Whuber действительно нужно было расширить, но я решил дать краткое описание математики.
Цитирование
Монтгомери, Д. (2012). Введение в анализ линейной регрессии, 5-е издание. John Wiley & Sons Inc.
источник