Это, наверное, слишком поздно, но, ну ... мне стало скучно:)
private function correlationCoeff(X:Array, Y:Array):Number
{
//correlation coeff between two random variables X and Y is defined as :
//correlation(X,Y) = Covar(X,Y)/(sqrt(Var(X)) * sqrt(Var(Y)))
//
//Var(X) = Covar(X,X);
//Covar(X,Y) = E((X-xm)(Y-ym)); where xm, ym are the population means.
return sampleCovar(X, Y)/Math.sqrt(sampleCovar(X, X) * sampleCovar(Y, Y));
}</p>
<p>private function sampleCovar(X:Array, Y:Array):Number
{
//Sample covariance is Sum((X-xm)(Y-ym))/n-1
//where n is the sample size and xm & ym are sample means.
//I'll assume that X and Y are the same size...
var total:Number = 0;
var xm:Number = sampleMean(X);
var ym:Number = (X == Y)? xm : sampleMean(Y);
for (var i:int=0; i
<p>private function sampleMean(X:Array):Number
{
//Sample mean = Sum(X)/(sample size)
var total:Number = 0;
for each(var x:Number in X)
total += x;
return total/X.length;
}
Я скорее предположил, что вы работаете с дискретными случайными переменными, а не делаете что-то напуганное с обработкой сигналов. Имейте в виду, что sampleCovar не будет возвращать то же самое, что и COVAR в Excel, потому что Excel использует смещенную оценку (т.е. она делит на n, а не (n-1)), но это компенсируется при вычислении коэффициента корреляции. *