Ich habe ein Problem bei der Berechnung des Pearson-Korrelationskoeffizienten von Datensätzen mit möglicherweise null Standardabweichung (dh alle Daten haben den gleichen Wert).
Angenommen, ich habe die folgenden zwei Datensätze:
float x[] = {2, 2, 2, 3, 2};
float y[] = {2, 2, 2, 2, 2};
Der Korrelationskoeffizient "r" würde unter Verwendung der folgenden Gleichung berechnet:
float r = covariance(x, y) / (std_dev(x) * std_dev(y));
Da jedoch alle Daten im Datensatz "y" den gleichen Wert haben, wäre die Standardabweichung std_dev (y) Null und "r" undefiniert.
Gibt es eine Lösung für dieses Problem? Oder sollte ich in diesem Fall andere Methoden zum Messen der Datenbeziehung verwenden?
correlation
Andree
quelle
quelle
Antworten:
Die Leute der "Sampling-Theorie" werden Ihnen sagen, dass keine solche Schätzung existiert. Aber Sie können eine bekommen, Sie müssen nur vernünftig mit Ihren vorherigen Informationen umgehen und viel härter rechnen.
Wenn Sie eine Bayes'sche Schätzmethode angegeben haben und der hintere Teil mit dem vorherigen identisch ist, können Sie sagen, dass die Daten nichts über den Parameter aussagen. Da die Dinge für uns "singulär" werden können, können wir keine unendlichen Parameterräume verwenden. Ich gehe davon aus, dass Sie aufgrund der Pearson-Korrelation eine bivariate normale Wahrscheinlichkeit haben:
wobei Qi=(xi-μx)2
Um anzuzeigen, dass ein Datensatz den gleichen Wert haben kann, schreiben Sie , und dann erhalten wir:yi=y
wobei s2x=1 ist
Und so Ihre Wahrscheinlichkeit auf vier Zahlen abhängt, . Sie möchten also eine Schätzung von ρ , müssen also mit einem vorherigen multiplizieren und die Störparameter μ x , μ y , σ x , σ y integrieren . Nun bereiten wir uns auf die Integration vor und "vervollständigen das Quadrat" ∑ i Q is2x,y,x¯¯¯,N ρ μx,μy,σx,σy
Jetzt sollten wir auf Nummer sicher gehen und eine richtig normalisierte Wahrscheinlichkeit sicherstellen. Auf diese Weise können wir keinen Ärger bekommen. Eine solche Option besteht darin, einen schwach informativen Prior zu verwenden, der lediglich die Reichweite jedes einzelnen einschränkt. Wir haben also für das Mittel mit dem flachen Prior und L σ < σ x , σ y < U σ für die Standardabweichungen mit jeffreys prior. Diese Grenzen können leicht mit ein wenig "gesundem Menschenverstand" festgelegt werden, der über das Problem nachdenkt. Ich werde einen nicht näher bezeichneten Prior für ρ nehmenLμ<μx,μy<Uμ Lσ<σx,σy<Uσ ρ , und so bekommen wir (Uniform sollte funktionieren, wenn nicht die Singularität bei abgeschnitten ):±1
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
quelle
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.
quelle
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.
quelle
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.
quelle