Да, это можно вычислить постепенно. Этот метод представляет собой небольшое обобщение алгоритма Велфорда, см., Например,
Вы поддерживаете ряд переменных, обновляя их каждый раз, когда поступают данные. На каждом этапе это средние значения и т. Д. Данных, которые наблюдались до сих пор.
Инициализация:
int n = 0; // number of points
double mx = 0.0; // mean of x's
double my = 0.0; // mean of y's
double vx = 0.0; // variance of x's
double vy = 0.0; // variance of y's
double cxy = 0.0; // covariance of x and y
Обновление (новые значения x, y в)
n += 1;
double f = 1.0/n;
double dx = x - mx;
double dy = y - my;
mx += f*dx;
my += f*dy;
vx = (1.0-f)*(vx + f*dx*dx);
vy = (1.0-f)*(vy + f*dy*dy);
cxy= (1.0-f)*(cxy+ f*dx*dy);
В терминах этих переменных мы имеем
rxy = cxy/sqrt( vx*vy)
Обратите внимание, что vx и vy будут равны нулю только после одной пары, как было видно.
Не удивляйтесь, если поток оценок для rxy будет зашумленным. Оценки корреляции, как правило, таковы.
person
dmuir
schedule
03.12.2020