Eu tenho uma matriz de correlação de retornos de segurança cujo determinante é zero. (Isso é um pouco surpreendente, pois a matriz de correlação da amostra e a matriz de covariância correspondente devem teoricamente ser definidas positivamente.)
Minha hipótese é que pelo menos um título seja linearmente dependente de outros títulos. Existe uma função em R que testa sequencialmente cada coluna uma matriz para dependência linear?
Por exemplo, uma abordagem seria construir uma matriz de correlação, uma segurança de cada vez, e calcular o determinante em cada etapa. Quando o determinante = 0, pare, pois você identificou o título que é uma combinação linear de outros títulos.
Quaisquer outras técnicas para identificar dependência linear em uma matriz são apreciadas.
fonte
Respostas:
Você parece fazer uma pergunta realmente provocadora: como detectar, dada uma matriz de correlação (ou covariância ou soma de quadrados e produtos cruzados) singular, qual coluna é linearmente dependente de qual. Suponho que a operação de varredura possa ajudar. Aqui está minha sonda no SPSS (não R) para ilustrar.
Vamos gerar alguns dados:
Vamos criar alguma dependência linear entre V2, V4 e V5:
Então, modificamos nossa coluna V4.
As impressões de M em 5 iterações:
Observe que, eventualmente, a coluna 5 ficou cheia de zeros. Isso significa (como eu o entendo) que o V5 está linearmente vinculado a algumas colunas anteriores . Quais colunas? Veja a iteração em que a coluna 5 não está cheia de zeros - iteração 4. Vemos lá que V5 está vinculado a V2 e V4 com os coeficientes -.3333 e .8333: V5 = -.3333 * V2 + .8333 * V4, o que corresponde ao que fizemos com os dados: V4 = 0,4 * V2 + 1,2 * V5.
Foi assim que soubemos qual coluna está linearmente ligada a qual outra. Não verifiquei quão útil é a abordagem acima em casos mais gerais com muitos grupos de interdependências nos dados. No exemplo acima, parecia útil, no entanto.
fonte
Aqui está uma abordagem direta: calcule a classificação da matriz resultante da remoção de cada uma das colunas. As colunas que, quando removidas, resultam na classificação mais alta são as linearmente dependentes (uma vez que removê-las não diminui a classificação, enquanto a remoção de uma coluna linearmente independente o faz).
Em R:
fonte
system is exactly singular: U[5,5] = 0
, o que eu sei agora meios coluna 5 foi a questão (parece óbvio em retrospectiva, como é uma coluna de zeros!)your.matrix = matrix(1:4, 2)
?A pergunta é sobre "identificar relações [lineares" subjacentes "entre variáveis.
A maneira rápida e fácil de detectar relacionamentos é regredir qualquer outra variável (use uma constante, par) contra essas variáveis usando o seu software favorito: qualquer bom procedimento de regressão irá detectar e diagnosticar colinearidade. (Você nem se preocupará em olhar para os resultados da regressão: estamos apenas contando com um efeito colateral útil para configurar e analisar a matriz de regressão.)
Supondo que a colinearidade seja detectada, o que vem a seguir? A Análise de Componentes Principais (PCA) é exatamente o que é necessário: seus menores componentes correspondem a relações quase lineares. Essas relações podem ser lidas diretamente das "cargas", que são combinações lineares das variáveis originais. Carregamentos pequenos (ou seja, aqueles associados a pequenos autovalores) correspondem a quase colinearidades. Um valor próprio de corresponderia a uma relação linear perfeita. Valores próprios ligeiramente maiores que ainda são muito menores que os maiores corresponderiam a relações lineares aproximadas.0
(Existe uma arte e bastante literatura associada à identificação do que é um carregamento "pequeno". Para modelar uma variável dependente, sugiro incluí-lo nas variáveis independentes no PCA para identificar os componentes - independentemente de seus tamanhos - nos quais a variável dependente desempenha um papel importante. Desse ponto de vista, "pequeno" significa muito menor que qualquer componente desse tipo.)
Vejamos alguns exemplos. (Eles são usados
R
para cálculos e plotagem.) Comece com uma função para executar o PCA, procure por pequenos componentes, plote-os e retorne as relações lineares entre eles.sweep
A saída associada ao painel superior esquerdo foi
A saída para o painel do meio superior foi
Na prática, muitas vezes não é o caso de uma variável ser apontada como uma combinação óbvia das outras: todos os coeficientes podem ter tamanhos comparáveis e sinais variados. Além disso, quando há mais de uma dimensão de relações, não há uma maneira única de especificá-las: análises adicionais (como redução de linha) são necessárias para identificar uma base útil para essas relações. É assim que o mundo funciona: tudo o que você pode dizer é que essas combinações específicas produzidas pelo PCA correspondem a quase nenhuma variação nos dados. Para lidar com isso, algumas pessoas usam os componentes maiores ("principais") diretamente como variáveis independentes na regressão ou na análise subsequente, qualquer que seja a forma que possa assumir. Se você fizer isso, não esqueça primeiro de remover a variável dependente do conjunto de variáveis e refazer o PCA!
Aqui está o código para reproduzir esta figura:
(Eu tive que mexer com o limite nos casos de erro grande para exibir apenas um único componente: essa é a razão para fornecer esse valor como parâmetro
process
.)O usuário ttnphns direcionou nossa atenção para um tópico relacionado. Uma de suas respostas (por JM) sugere a abordagem descrita aqui.
fonte
"loadings," which are linear combinations of the original variables
princomp
fonte
Eu me deparei com esse problema há cerca de duas semanas e decidi que precisava revisitá-lo porque, ao lidar com conjuntos de dados massivos, é impossível fazer essas coisas manualmente.
Criei um loop for () que calcula a classificação da matriz uma coluna por vez. Portanto, para a primeira iteração, a classificação será 1. A segunda, 2. Isso ocorre até que a classificação se torne MENOS que o número da coluna que você está usando.
Muito simples:
quebra do loop for ()
Tenho certeza de que você pode adicionar uma instrução if, não preciso ainda porque estou lidando apenas com colunas 50ish.
Espero que isto ajude!
fonte
Rank, r de uma matriz = número de colunas (ou linhas) linearmente independentes de uma matriz. Para uma matriz n por n A , a classificação (A) = n => todas as colunas (ou linhas) são linearmente independentes.
fonte
Não que a resposta que o @Whuber deu realmente precise ser expandida, mas pensei em fornecer uma breve descrição da matemática.
Citações
Montgomery, D. (2012). Introdução à Análise de Regressão Linear, 5ª Edição. John Wiley & Sons Inc. Empresas
fonte