Estou com problemas para calcular o coeficiente de correlação de Pearson dos conjuntos de dados com desvio padrão possivelmente zero (ou seja, todos os dados têm o mesmo valor).
Suponha que eu tenha os dois conjuntos de dados a seguir:
float x[] = {2, 2, 2, 3, 2};
float y[] = {2, 2, 2, 2, 2};
O coeficiente de correlação "r" seria calculado usando a seguinte equação:
float r = covariance(x, y) / (std_dev(x) * std_dev(y));
No entanto, como todos os dados no conjunto de dados "y" têm o mesmo valor, o desvio padrão std_dev (y) seria zero e "r" seria indefinido.
Há alguma solução para esse problema? Ou devo usar outros métodos para medir a relação de dados nesse caso?
correlation
Andree
fonte
fonte
Respostas:
O pessoal da "teoria da amostragem" dirá que essa estimativa não existe. Mas você pode obter um, apenas precisa ser razoável quanto às informações anteriores e fazer um trabalho matemático muito mais difícil.
Se você especificou um método bayesiano de estimativa, e o posterior é o mesmo que o anterior, é possível dizer que os dados não dizem nada sobre o parâmetro. Como as coisas podem ficar "singulares" para nós, não podemos usar espaços de parâmetros infinitos. Estou assumindo que, porque você usa a correlação de Pearson, você tem uma probabilidade normal bivariada:
onde Qi=(xi-μx)2
Agora, para indicar que um conjunto de dados pode ter o mesmo valor, escreva e obtemos:yi=y
onde s2x=1
E assim a sua probabilidade depende de quatro números, . Então, você deseja uma estimativa de ρ , portanto, é necessário multiplicar por um anterior e integrar os parâmetros de incômodo μ x , μ y , σ x , σ y . Agora, para nos prepararmos para a integração, "completamos o quadrado" ∑ i Q is2x,y,x¯¯¯,N ρ μx,μy,σx,σy
Agora devemos errar por precaução e garantir uma probabilidade adequadamente normalizada. Dessa forma, não podemos ter problemas. Uma dessas opções é usar um prior fracamente informativo, que apenas restringe o intervalo de cada um. Portanto, temos para as médias com plano anterior e L σ < σ x , σ y < U σ para os desvios padrão com jeffreys anteriores. É fácil estabelecer esses limites com um pouco de "senso comum" pensando sobre o problema. Vou pegar um anterior não especificado para ρLμ<μx,μy<Uμ Lσ<σx,σy<Uσ ρ , e assim obtemos (uniforme deve funcionar ok, se não truncar a singularidade em ):±1
Onde . Isso fornece um posterior de:A=2(Uμ−Lμ)2[log(Uσ)−log(Lσ)]2
Now the first integration overμy can be done by making a change of variables z=N−−√μy−[y−(x¯¯¯−μx)ρσyσx]σy1−ρ2√⟹dz=N√σy1−ρ2√dμy and the first integral over μy becomes:
And you can see from here, no analytic solutions are possible. However, it is also worthwhile to note that the valueρ has not dropped out of the equations. This means that the data and prior information still have something to say about the true correlation. If the data said nothing about the correlation, then we would be simply left with p(ρ) as the only function of ρ in these equations.
It also shows how that passing to the limit of infinite bounds forμy "throws away" some of the information about ρ , which is contained in the complicated looking normal CDF function Φ(.) . Now if you have a lot of data, then passing to the limit is fine, you don't loose much, but if you have very scarce information, such as in your case - it is important keep every scrap you have. It means ugly maths, but this example is not too hard to do numerically. So we can evaluate the integrated likelihood for ρ at values of say −0.99,−0.98,…,0.98,0.99 fairly easily. Just replace the integrals by summations over a small enough intervals - so you have a triple summation
fonte
I agree with sesqu that the correlation is undefined in this case. Depending on your type of application you could e.g. calculate the Gower Similarity between both vectors, which is:gower(v1,v2)=∑ni=1δ(v1i,v2i)n where δ represents the kronecker-delta, applied as function on v1,v2 .
So for instance if all values are equal, gower(.,.)=1. If on the other hand they differ only in one dimension, gower(.,.)=0.9. If they differ in every dimension, gower(.,.)=0 and so on.
Of course this is no measure for correlation, but it allows you to calculate how close the vector with s>0 is to the one with s=0. Of course you can apply other metrics,too, if they serve your purpose better.
fonte
The correlation is undefined in that case. If you must define it, I would define it as 0, but consider a simple mean absolute difference instead.
fonte
This question is coming from programmers, so I'd suggest plugging in zero. There's no evidence of a correlation, and the null hypothesis would be zero (no correlation). There might be other context knowledge that would provide a "typical" correlation in one context, but the code might be re-used in another context.
fonte