Menos subconjunto correlacionado de variáveis ​​aleatórias de uma matriz de correlação

10

Eu tenho uma matriz de correlaçãoA , que eu obtive usando o coeficiente de correlação linear de Pearson através docorrcoefde Matlab(). A matriz de correlação da dimensão 100x100, ou seja, eu calculei a matriz de correlação em 100 variáveis ​​aleatórias.

Entre essas 100 variáveis ​​aleatórias, gostaria de encontrar as 10 variáveis ​​aleatórias cuja matriz de correlação contém o mínimo possível de correlação (consulte Quantificando quanto "mais correlação" uma matriz de correlação A contém em comparação com uma matriz de correlação B em relação às métricas a serem medidas a correlação geral em uma matriz de correlação). Eu só me preocupo com a correlação pareada.

Existem bons métodos para encontrar essas 10 variáveis ​​aleatórias em um período de tempo razoável (por exemplo, eu não quero tentar combinações (10010) )? Algoritmos de aproximação estão OK.

Franck Dernoncourt
fonte
11
metrics to measure the overall correlation. Você está pensando especificamente sobre o determinante?
ttnphns
11
Uma pergunta muito semelhante stats.stackexchange.com/q/73125/3277 .
ttnphns
11
O determinante de log é uma função submodular (consulte a página 18 aqui ). Não está aumentando, infelizmente, o que significa que o clássico 11/e resultado aproximação gananciosos não se aplica, mas ainda se sente como que possa ser útil de alguma forma ....
Dougal
11
Se você preferir usar o valor médio da correlação, isso se tornará um problema de clique máximo no peso da borda , que é obviamente NP-difícil, mas que já viu algum trabalho nos algoritmos de aproximação.
Dougal
3
E essa ideia simples com a análise de cluster. Tomecomo a distância (dissimilaridade) e faça agrupamentos por um método selecionado (eu provavelmente escolheria Ward ou hierarquia média de ligação). Selecione o cluster mais restrito, composto por 10 itens. |r|
precisa saber é o seguinte

Respostas:

3

Vamos considerar a soma das correlações absolutas aos pares como nossa medida de escolha. Assim, buscamos um vetor com que minimizará onde.v{0,1}Nl1(v)=nvQvQij=|Aij|

Suponha que Q também seja positivo definido como A, o problema é reduzido para resolver o problema de otimização quadrática restrita:

v=min vQv s.t. l1(v)=n, vi{0,1}

Isso sugere o seguinte relaxamento:

v=min vQv s.t. l1(v)=n, vi[0,1]

que pode ser facilmente resolvido usando solucionadores prontos para uso; então o resultado é dado pelos maiores componentes em .nv

Exemplo de código matlab:

N=100;
n=10;
% Generate random data
A=rand(N,1000);
C=corrcoef(A');
Q=abs((C+C')/2); % make sure it is symmetric
x = cplexqp(Q,zeros(1,N),[],[], ones(1, N),n, zeros(N,1), ones(N,1));
% If you don't use CPLEX, use matlab's default
% x = quadprog(Q,zeros(1,N),[],[], ones(1, N),n, zeros(N,1), ones(N,1));
assert(abs(sum(x)-n)<1e-10);
% Find the n largest values
I=sort(x); 
v=zeros(size(x)); v(x>I(N-n))=1; 
assert(abs(sum(v)-n)<1e-10);
% Make sure we do better than 10K random trials
for i=1:10000
   vc=zeros(size(x)); vc(randperm(N,n))=1;
   assert(sum(vc)==n, 'Wrong l0 norm');
   assert(vc'*Q*vc>v'*Q*v, 'Improves result');
end
% Show results
J=find(v==1);
fprintf('The optimal solution total off-diagonal correlations are %1.3f\n', v'*Q*v-n);
fprintf('The matrix:\n');
C(J,J)
Uri Cohen
fonte
Você tem uma versão em Python desse script por acaso?
Casimir
2

Isso pode ser pior do que a idéia de agrupamento hierárquico do @ ttnphns. Mas: acabei de encontrar um artigo que usa como uma função objetivo submodular crescente:logdet(I+A)

Vanchinathan, Marfurt, Robelin, Kossman e Krause. Descobrindo itens valiosos de dados maciços . KDD 2015. ( doi , arXiv )

Se você acha que essa é uma medida razoável de "menos correlacionado", você pode obter um fator de do conjunto ideal, simplesmente escolhendo iterativamente o ponto que maximiza isso. Isso pode ser feito eficientemente com a decomposição da LU do bloco , em que é o vetor de correlações para entradas já na matriz:11/ev

det[I+AvvT2]=det([I0vT(I+A)11][I+A002vT(I+A)1v][I(I+A)1v01])=det[I0vT(I+A)11]det[I+A002vT(I+A)1v]det[I(I+A)1v01]=(2vT(I+A)1v)det(I+A)

e, é claro, você deve calcular , onde é a fatoração de Cholesky de e usando um solucionador triangular que é . Portanto, todo esse processo deve levar tempo para selecionar dentre elementos, assumindo que a matriz de correlação já esteja computada .vT(I+A)1v=L1v2LI+AO(n2)O(k=1nNk2+k3)=O(Nn3)nN

Dougal
fonte
Parece que o link para o jornal está morto. Você tem uma citação à mão?
Sycorax diz Reinstate Monica
@ Sycorax Está disponível na Wayback Machine , mas não consegui encontrar uma cópia atual na Web. Parece que o documento do workshop foi transformado em um documento da conferência , que estou adicionando à resposta.
Dougal
1

Não tenho certeza de entender completamente o que você quer dizer com "Só me preocupo com a correlação por pares" , mas aqui está algo que pode ajudar: use o inverso da sua matriz de correlação. O termo é igual a , onde é a matriz x construída a partir de onde a ésima coluna e linha foram removidas.Aii1det(A0i)/det(A)A0i(n1)(n1)Ai

Obter o índice do coeficiente diagonal mínimo em indica o ponto que tem a menor correlação com o restante do conjunto.A1

Dependendo do que você realmente deseja fazer, você pode pegar os 10 valores mais baixos na diagonal do inversor ou obter o primeiro, depois calcular o inversor com o ponto excluído e assim por diante.

Se não é isso que você precisa, acho que esse truque ainda pode ser útil, mas não sei como.

Romain Reboulleau
fonte
0

Encontre de itens com a correlação menos pareada: Como uma correlação de explica da relação entre duas séries, faz mais sentido minimizar a soma dos quadrados das correlações dos itens de destino . Aqui está a minha solução simples.kn0.60.36k

Reescreva sua matriz de correlações para uma matriz de quadrados de correlações. Soma os quadrados de cada coluna. Elimine a coluna e a linha correspondente com a maior soma. Agora você tem uma matriz . Repita até que você tenha uma matriz . Você também pode manter as colunas e as linhas correspondentes com as menores somas. Comparando os métodos, descobri em uma matriz com e que apenas dois itens com somas próximas foram mantidos e eliminados de maneira diferente.n×n(n1)×(n1)k×kkn=43k=20

Jon Arts
fonte
2
Isso pode funcionar, mas soa ad hoc (parece um algoritmo ganancioso) e você não ofereceu nenhum motivo matemático que sugere que ele funcione. Você tem alguma garantia de que funcionará ou quaisquer limites quanto à proximidade da melhor solução?
whuber
I utilizado ramo de Gurobi e ligado para resolver sujeito a para otimizar para uma matriz de correlação . Eu tenho um valor objetivo final de 8,13. Para comparação, esse método ganancioso alcançou 42,87, enquanto a seleção aleatória teve um valor objetivo esperado de 62,07. Portanto, não é tão bom, mas também não é inútil. E esse método com certeza tem simplicidade e velocidade! x=argminx{0,1}n(xTC x)i=1nxi=k418×418k=20
Casimir
Também houve correlação positiva entre quais entradas de foram definidas como uma por Gurobi e esse método ganancioso. x
Casimir