本文介绍了从数据流中估计皮尔逊相关系数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如果数据是以区块形式接收的而不是存储收到的数据对,是否有办法估计两个变量之间的相关性?
例如,我们收到以下对:
[(x1,y1),(x2,y2),(x3,y3)]
[(x4,y4)]
[(x5,y5),(x6,y6)]
我们必须估计x1:6和y1:6之间的相关性。
非最优解:
即使此定义有效:
它不是最优的,因为如果流上的值很大,平方的值很容易溢出。
推荐答案
是,可以递增计算。该方法是Welford算法的一个小推广,见here, for example
您维护许多变量,每次数据传入时都会更新它们。在每个阶段,这些是到目前为止看到的数据的平均值初始化:
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 in)
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的估计流是嘈杂的,不要感到惊讶。对相关性的估计往往是如此。
这篇关于从数据流中估计皮尔逊相关系数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!